about summary refs log tree commit diff
path: root/nixpkgs/pkgs/applications/networking
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/applications/networking')
-rw-r--r--nixpkgs/pkgs/applications/networking/3proxy/default.nix44
-rw-r--r--nixpkgs/pkgs/applications/networking/Sylk/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/networking/adguardian/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/networking/aether/default.nix112
-rw-r--r--nixpkgs/pkgs/applications/networking/alpnpass/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/networking/apache-directory-studio/default.nix58
-rw-r--r--nixpkgs/pkgs/applications/networking/appgate-sdp/default.nix159
-rw-r--r--nixpkgs/pkgs/applications/networking/asn/default.nix47
-rw-r--r--nixpkgs/pkgs/applications/networking/avalanchego/default.nix45
-rw-r--r--nixpkgs/pkgs/applications/networking/bee/0001-clef-service-accept-default-CONFIGDIR-from-the-envir.patch44
-rw-r--r--nixpkgs/pkgs/applications/networking/bee/0002-nix-diff-for-substituteAll.patch25
-rw-r--r--nixpkgs/pkgs/applications/networking/bee/bee-clef.nix57
-rw-r--r--nixpkgs/pkgs/applications/networking/bee/bee.nix75
-rw-r--r--nixpkgs/pkgs/applications/networking/bee/ensure-clef-account47
-rw-r--r--nixpkgs/pkgs/applications/networking/blocky/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/networking/breitbandmessung/default.nix94
-rw-r--r--nixpkgs/pkgs/applications/networking/brig/default.nix57
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/amfora/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/asuka/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/av-98/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/badwolf/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/bombadillo/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/brave/default.nix210
-rwxr-xr-xnixpkgs/pkgs/applications/networking/browsers/brave/update.sh5
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/browsh/default.nix46
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/captive-browser/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/castor/default.nix51
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/chromium/README.md109
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/chromium/browser.nix96
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/chromium/common.nix467
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/chromium/cross-compile.patch31
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/chromium/default.nix255
-rwxr-xr-xnixpkgs/pkgs/applications/networking/browsers/chromium/get-commit-message.py53
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/chromium/patches/angle-wayland-include-protocol.patch38
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/chromium/patches/no-build-timestamps.patch17
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/chromium/patches/widevine-79.patch13
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/chromium/ungoogled-flags.toml21
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/chromium/ungoogled.nix43
-rwxr-xr-xnixpkgs/pkgs/applications/networking/browsers/chromium/update.py252
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/chromium/upstream-info.nix65
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/dillo/default.nix63
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/dillong/default.nix58
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/elinks/default.nix73
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/eolie/default.nix79
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/ephemeral/default.nix70
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/firefox-bin/beta_sources.nix1015
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/firefox-bin/default.nix217
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/firefox-bin/devedition_sources.nix1015
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/firefox-bin/release_sources.nix1015
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/firefox-bin/update.nix94
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/firefox/common.nix590
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/firefox/env_var_for_system_dir-ff111.patch22
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/firefox/env_var_for_system_dir-ff86.patch21
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/firefox/mobile-config.nix113
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/firefox/mp4parse-rust-170.patch23
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/firefox/no-buildconfig-ffx96.patch27
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/firefox/packages.nix119
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/firefox/update.nix48
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/firefox/wrapper.nix412
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/gmni/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/google-chrome/default.nix174
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/kristall/default.nix44
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/ladybird/default.nix73
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/lagrange/default.nix63
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/librewolf/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/librewolf/librewolf.nix41
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/librewolf/src.json11
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/librewolf/src.nix18
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/librewolf/update.nix65
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/links2/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/litebrowser/default.nix55
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/luakit/default.nix90
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/lynx/default.nix65
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/microsoft-edge/browser.nix192
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/microsoft-edge/default.nix20
-rwxr-xr-xnixpkgs/pkgs/applications/networking/browsers/microsoft-edge/update.py67
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/midori/default.nix63
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/misc/widevine-cdm.nix34
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/moonlander/default.nix44
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/mullvad-browser/default.nix246
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/netsurf/browser.nix130
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/netsurf/buildsystem.nix26
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/netsurf/default.nix39
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/netsurf/libcss.nix51
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/netsurf/libdom.nix47
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/netsurf/libhubbub.nix48
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/netsurf/libnsbmp.nix32
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/netsurf/libnsfb.nix35
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/netsurf/libnsgif.nix36
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/netsurf/libnslog.nix38
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/netsurf/libnspsl.nix32
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/netsurf/libnsutils.nix32
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/netsurf/libparserutils.nix33
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/netsurf/libsvgtiny.nix46
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/netsurf/libutf8proc.nix32
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/netsurf/libwapcaplet.nix31
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/netsurf/nsgenbind.nix36
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/nyxt/default.nix61
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/offpunk/default.nix62
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/opera/default.nix142
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/palemoon/bin.nix189
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/palemoon/zz-disableUpdater.js7
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/polypane/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/qtchan/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/qutebrowser/default.nix129
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/qutebrowser/fix-restart.patch19
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/surf/default.nix63
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/telescope/default.nix48
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/tor-browser-bundle-bin/default.nix483
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/tor-browser-bundle-bin/update.nix62
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/vieb/default.nix64
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/vimb/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/vivaldi/default.nix132
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/vivaldi/ffmpeg-codecs.nix32
-rwxr-xr-xnixpkgs/pkgs/applications/networking/browsers/vivaldi/update-vivaldi.sh16
-rwxr-xr-xnixpkgs/pkgs/applications/networking/browsers/vivaldi/update.sh47
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/w3m/RAND_egd.libressl.patch11
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/w3m/default.nix103
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/webmacs/default.nix75
-rw-r--r--nixpkgs/pkgs/applications/networking/browsers/yandex-browser/default.nix140
-rw-r--r--nixpkgs/pkgs/applications/networking/calls/default.nix114
-rw-r--r--nixpkgs/pkgs/applications/networking/charles/default.nix79
-rw-r--r--nixpkgs/pkgs/applications/networking/circumflex/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/networking/cisco-packet-tracer/7.nix90
-rw-r--r--nixpkgs/pkgs/applications/networking/cisco-packet-tracer/8.nix118
-rw-r--r--nixpkgs/pkgs/applications/networking/clash-verge/default.nix65
-rw-r--r--nixpkgs/pkgs/applications/networking/cloudflare-dyndns/default.nix60
-rw-r--r--nixpkgs/pkgs/applications/networking/cloudflared/default.nix84
-rw-r--r--nixpkgs/pkgs/applications/networking/cloudflared/tests.nix44
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/acorn/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/aiac/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/argo-rollouts/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/argo/default.nix94
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/argo/staticfiles.go.mod3
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/argocd-autopilot/default.nix54
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/argocd/default.nix64
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/arkade/default.nix57
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/assign-lb-ip/default.nix22
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/atlantis/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/atmos/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/bosh-cli/default.nix44
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/calico/default.nix82
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/cilium/default.nix47
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/civo/default.nix46
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/click/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/cloudfoundry-cli/default.nix45
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/clusterctl/default.nix48
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/cmctl/default.nix55
-rwxr-xr-xnixpkgs/pkgs/applications/networking/cluster/cmctl/update.sh41
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/cni/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/cni/plugins.nix53
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/containerpilot/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/containerpilot/deps.nix173
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/crc/default.nix74
-rwxr-xr-xnixpkgs/pkgs/applications/networking/cluster/crc/update.sh65
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/dnsname-cni/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/docker-machine/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/docker-machine/hyperkit.nix23
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/docker-machine/kvm-deps.nix21
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/docker-machine/kvm.nix28
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/docker-machine/kvm2.nix27
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/docker-machine/xhyve.nix41
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/driftctl/default.nix56
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/eks-node-viewer/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/falcoctl/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/fetchit/default.nix82
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/flink/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/fluxcd/default.nix72
-rwxr-xr-xnixpkgs/pkgs/applications/networking/cluster/fluxcd/update.sh47
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/fluxctl/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/fn-cli/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/func/default.nix46
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/gatekeeper/default.nix39
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/glooctl/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/habitat/Cargo.lock4675
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/habitat/default.nix66
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/hadoop/default.nix147
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/hashi-up/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/helm-dashboard/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/helm-docs/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/helm/chart-testing/default.nix68
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/helm/default.nix58
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/helm/plugins/default.nix17
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/helm/plugins/helm-cm-push.nix44
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/helm/plugins/helm-diff.nix36
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/helm/plugins/helm-git.nix46
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/helm/plugins/helm-s3.nix42
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/helm/plugins/helm-secrets.nix44
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/helm/plugins/helm-unittest.nix34
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/helm/wrapper.nix47
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/helmfile/default.nix52
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/helmsman/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/hetzner-kube/default.nix48
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/hetzner-kube/fix-home.patch53
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/hubble/default.nix47
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/inframap/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/istioctl/default.nix47
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/jx/default.nix49
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/k0sctl/default.nix43
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/k3d/default.nix74
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/k3s/1_24/chart-versions.nix10
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/k3s/1_24/default.nix332
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/k3s/1_25/0001-script-download-strip-downloading-just-package-CRD.patch41
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/k3s/1_25/default.nix336
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/k3s/1_26/chart-versions.nix10
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/k3s/1_26/versions.nix14
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/k3s/1_27/chart-versions.nix10
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/k3s/1_27/versions.nix14
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/k3s/README.md73
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/k3s/builder.nix354
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/k3s/default.nix16
-rwxr-xr-xnixpkgs/pkgs/applications/networking/cluster/k3s/update-script.sh137
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/k3sup/default.nix54
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/k8sgpt/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/k9s/default.nix51
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kanif/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kaniko/default.nix53
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/karmor/default.nix56
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kbst/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kconf/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kfilt/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kluctl/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kn/default.nix44
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kns/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kompose/default.nix47
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kontemplate/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kontemplate/deps.nix111
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kops/default.nix68
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kpt/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/krane/Gemfile3
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/krane/Gemfile.lock101
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/krane/default.nix19
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/krane/gemset.nix410
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/krelay/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/ktop/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/ktunnel/default.nix39
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kube-capacity/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kube-router/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kube-score/default.nix42
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kubebuilder/default.nix68
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kubecfg/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kubecm/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kubecolor/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kubeconform/default.nix22
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kubectl-cnpg/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kubectl-doctor/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kubectl-evict-pod/default.nix22
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kubectl-example/default.nix23
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kubectl-explore/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kubectl-gadget/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kubectl-images/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kubectl-klock/default.nix23
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kubectl-ktop/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kubectl-node-shell/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kubectl-tree/default.nix23
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kubectl-view-allocations/Cargo.lock2172
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kubectl-view-allocations/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kubectl-view-secret/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kubedb-cli/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kubedog/default.nix49
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kubefirst/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kubelogin-oidc/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kubelogin/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kubemqctl/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kubemqctl/go.sum664
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kubent/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kubeone/default.nix51
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kubergrunt/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kubernetes-metrics-server/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kubernetes/default.nix94
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kubernetes/fixup-addonmanager-lib-path.patch23
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kubernetes/kubectl.nix32
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kubernix/Cargo.lock921
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kubernix/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kubeseal/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kubeshark/default.nix60
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kubespy/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kubetail/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kubeval/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kubeval/schema.nix15
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kubevpn/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kubexit/default.nix22
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kuma/default.nix67
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kuttl/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/kyverno/default.nix49
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/lens/common.nix22
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/lens/darwin.nix27
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/lens/default.nix5
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/lens/linux.nix40
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/levant/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/linkerd/default.nix8
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/linkerd/edge.nix8
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/linkerd/generic.nix63
-rwxr-xr-xnixpkgs/pkgs/applications/networking/cluster/linkerd/update-edge.sh33
-rwxr-xr-xnixpkgs/pkgs/applications/networking/cluster/linkerd/update-stable.sh33
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/luigi/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/minikube/default.nix54
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/minishift/default.nix66
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/multus-cni/default.nix39
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/nerdctl/default.nix59
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/nixops/default.nix108
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/nixops/poetry-git-overlay.nix114
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/nixops/poetry.lock731
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/nixops/pyproject.toml28
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/nixops/shell.nix11
-rwxr-xr-xnixpkgs/pkgs/applications/networking/cluster/nixops/update11
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/node-problem-detector/default.nix44
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/nomad-autoscaler/default.nix110
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/nomad-driver-podman/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/nomad-pack/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/nomad/default.nix85
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/nova/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/ocm/default.nix48
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/octant/default.nix67
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/octant/desktop.nix77
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/octant/plugins/starboard-octant-plugin.nix31
-rwxr-xr-xnixpkgs/pkgs/applications/networking/cluster/octant/update-desktop.sh36
-rwxr-xr-xnixpkgs/pkgs/applications/networking/cluster/octant/update.sh40
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/odo/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/openlens/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/openshift/default.nix67
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/pachyderm/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/pgo-client/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/pig/default.nix45
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/pinniped/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/pluto/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/popeye/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/prow/default.nix68
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/pv-migrate/default.nix44
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/qbec/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/rancher/default.nix39
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/rke/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/rke2/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/roxctl/default.nix44
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/sonobuoy/default.nix45
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/spark/default.nix91
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/ssm-agent/0001-Disable-NIC-tests-that-fail-in-the-Nix-sandbox.patch44
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/ssm-agent/0002-version-gen-don-t-use-unnecessary-constants.patch46
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/ssm-agent/default.nix139
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/ssm-session-manager-plugin/default.nix54
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/starboard/default.nix84
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/stern/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/taktuk/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/talosctl/default.nix39
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/tanka/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/tektoncd-cli/default.nix67
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/temporal-cli/darwin-sandbox-fix.patch20
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/temporal-cli/default.nix117
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/temporal/default.nix51
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/temporalite/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/terraform-backend-git/default.nix44
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/terraform-compliance/default.nix60
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/terraform-docs/default.nix23
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/terraform-inventory/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/terraform-landscape/Gemfile2
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/terraform-landscape/Gemfile.lock25
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/terraform-landscape/default.nix18
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/terraform-landscape/gemset.nix61
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/terraform-providers/default.nix104
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/terraform-providers/providers.json1290
-rwxr-xr-xnixpkgs/pkgs/applications/networking/cluster/terraform-providers/update-all-providers25
-rwxr-xr-xnixpkgs/pkgs/applications/networking/cluster/terraform-providers/update-provider164
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/terraform/default.nix202
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/terraform/provider-path-0_15.patch23
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/terraforming/Gemfile3
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/terraforming/Gemfile.lock92
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/terraforming/default.nix20
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/terraforming/gemset.nix261
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/terragrunt/default.nix43
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/terranix/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/terraspace/Gemfile2
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/terraspace/Gemfile.lock129
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/terraspace/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/terraspace/gemset.nix464
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/tf-summarize/default.nix39
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/tfautomv/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/tfswitch/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/tfupdate/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/tgswitch/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/tilt/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/timoni/default.nix46
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/tubekit/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/tubekit/wrapper.nix17
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/vcluster/default.nix45
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/velero/default.nix49
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/waagent/default.nix67
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/waypoint/default.nix81
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/weave-gitops/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/werf/default.nix95
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/yor/default.nix42
-rw-r--r--nixpkgs/pkgs/applications/networking/cluster/zarf/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/networking/compactor/default.nix72
-rw-r--r--nixpkgs/pkgs/applications/networking/coreth/default.nix45
-rw-r--r--nixpkgs/pkgs/applications/networking/cozy-drive/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/networking/cyberduck/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/networking/datovka/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/networking/davmail/default.nix62
-rw-r--r--nixpkgs/pkgs/applications/networking/deck/default.nix39
-rw-r--r--nixpkgs/pkgs/applications/networking/discordo/default.nix39
-rw-r--r--nixpkgs/pkgs/applications/networking/diswall/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/networking/dnscontrol/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/networking/drive/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/networking/droopy/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/networking/dropbox/cli.nix76
-rw-r--r--nixpkgs/pkgs/applications/networking/dropbox/default.nix91
-rw-r--r--nixpkgs/pkgs/applications/networking/dropbox/fix-cli-paths.patch11
-rw-r--r--nixpkgs/pkgs/applications/networking/dropbox/nautilus-43.patch195
-rw-r--r--nixpkgs/pkgs/applications/networking/dsvpn/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/networking/dyndns/cfdyndns/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/networking/dyndns/dyndnsc/default.nix60
-rw-r--r--nixpkgs/pkgs/applications/networking/errbot/default.nix72
-rw-r--r--nixpkgs/pkgs/applications/networking/expressvpn/default.nix98
-rw-r--r--nixpkgs/pkgs/applications/networking/feedreaders/canto-curses/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/networking/feedreaders/canto-daemon/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/networking/feedreaders/castget/default.nix54
-rw-r--r--nixpkgs/pkgs/applications/networking/feedreaders/feed2imap-go/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/networking/feedreaders/fluent-reader/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/networking/feedreaders/gnome-feeds/default.nix88
-rw-r--r--nixpkgs/pkgs/applications/networking/feedreaders/gnome-feeds/listparser.nix33
-rw-r--r--nixpkgs/pkgs/applications/networking/feedreaders/goeland/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/networking/feedreaders/indigenous-desktop/default.nix55
-rw-r--r--nixpkgs/pkgs/applications/networking/feedreaders/newsboat/default.nix70
-rw-r--r--nixpkgs/pkgs/applications/networking/feedreaders/newsflash/Cargo.lock4937
-rw-r--r--nixpkgs/pkgs/applications/networking/feedreaders/newsflash/default.nix108
-rw-r--r--nixpkgs/pkgs/applications/networking/feedreaders/newsflash/no-post-install.patch10
-rw-r--r--nixpkgs/pkgs/applications/networking/feedreaders/photon/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/networking/feedreaders/rss2email/default.nix50
-rw-r--r--nixpkgs/pkgs/applications/networking/feedreaders/rssguard/default.nix39
-rw-r--r--nixpkgs/pkgs/applications/networking/feedreaders/rsstail/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/networking/feedreaders/russ/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/networking/feedreaders/tuifeed/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/networking/feedreaders/yarr/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/networking/filebrowser/default.nix60
-rw-r--r--nixpkgs/pkgs/applications/networking/firehol/default.nix58
-rw-r--r--nixpkgs/pkgs/applications/networking/firehol/firehol-ping6.patch29
-rw-r--r--nixpkgs/pkgs/applications/networking/firehol/firehol-sysconfdir.patch5
-rw-r--r--nixpkgs/pkgs/applications/networking/firehol/firehol-uname-command.patch11
-rw-r--r--nixpkgs/pkgs/applications/networking/firehol/iprange.nix18
-rw-r--r--nixpkgs/pkgs/applications/networking/firewalld/default.nix104
-rw-r--r--nixpkgs/pkgs/applications/networking/firewalld/respect-xml-catalog-files-var.patch13
-rw-r--r--nixpkgs/pkgs/applications/networking/flent/default.nix55
-rw-r--r--nixpkgs/pkgs/applications/networking/flent/http-getter.nix23
-rw-r--r--nixpkgs/pkgs/applications/networking/flexget/default.nix89
-rw-r--r--nixpkgs/pkgs/applications/networking/freefilesync/default.nix130
-rw-r--r--nixpkgs/pkgs/applications/networking/ftp/filezilla/default.nix66
-rw-r--r--nixpkgs/pkgs/applications/networking/ftp/gftp/default.nix57
-rw-r--r--nixpkgs/pkgs/applications/networking/ftp/taxi/default.nix65
-rw-r--r--nixpkgs/pkgs/applications/networking/gabutdm/default.nix64
-rw-r--r--nixpkgs/pkgs/applications/networking/gdrive/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/networking/gdrive3/Cargo.lock1769
-rw-r--r--nixpkgs/pkgs/applications/networking/gdrive3/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/networking/geph/default.nix122
-rw-r--r--nixpkgs/pkgs/applications/networking/geph/package-lock.json3658
-rw-r--r--nixpkgs/pkgs/applications/networking/giara/default.nix77
-rw-r--r--nixpkgs/pkgs/applications/networking/gmailctl/default.nix39
-rw-r--r--nixpkgs/pkgs/applications/networking/gnmic/default.nix45
-rw-r--r--nixpkgs/pkgs/applications/networking/gnome-network-displays/default.nix80
-rw-r--r--nixpkgs/pkgs/applications/networking/gns3/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/networking/gns3/gui.nix65
-rw-r--r--nixpkgs/pkgs/applications/networking/gns3/server.nix76
-rw-r--r--nixpkgs/pkgs/applications/networking/go-graft/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/networking/google-drive-ocamlfuse/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/networking/gopher/geomyidae/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/networking/gopher/gopher/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/networking/gopher/phetch/default.nix56
-rw-r--r--nixpkgs/pkgs/applications/networking/gopher/sacc/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/networking/gossa/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/networking/headlines/default.nix72
-rw-r--r--nixpkgs/pkgs/applications/networking/hpmyroom/default.nix59
-rw-r--r--nixpkgs/pkgs/applications/networking/hydroxide/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/networking/hyprspace/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/networking/icemon/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/networking/ids/daq/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/networking/ids/snort/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/networking/ids/suricata/bpf_stubs_workaround.patch19
-rw-r--r--nixpkgs/pkgs/applications/networking/ids/suricata/default.nix156
-rw-r--r--nixpkgs/pkgs/applications/networking/ids/zeek/avoid-broken-tests.patch16
-rw-r--r--nixpkgs/pkgs/applications/networking/ids/zeek/broker/0001-Fix-include-path-in-exported-CMake-targets.patch75
-rw-r--r--nixpkgs/pkgs/applications/networking/ids/zeek/broker/default.nix88
-rw-r--r--nixpkgs/pkgs/applications/networking/ids/zeek/debug-runtime-undef-fortify-source.patch26
-rw-r--r--nixpkgs/pkgs/applications/networking/ids/zeek/default.nix113
-rw-r--r--nixpkgs/pkgs/applications/networking/ids/zeek/fix-installation.patch28
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/SkypeExport/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/abaddon/default.nix77
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/alfaview/default.nix81
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/armcord/default.nix142
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/baresip/default.nix133
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/beeper/default.nix59
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee-discord/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee-facebook/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee-mastodon/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee-steam/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee/default.nix68
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee/plugins.nix13
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/bluejeans/default.nix137
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/bluejeans/localtime64_stub.c12
-rwxr-xr-xnixpkgs/pkgs/applications/networking/instant-messengers/bluejeans/update.sh12
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/briar-desktop/default.nix63
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/caprine-bin/build-from-appimage.nix48
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/caprine-bin/build-from-dmg.nix35
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/caprine-bin/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/centerim/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/chatterino2/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/chatty/default.nix91
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/cinny-desktop/default.nix75
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/cinny/default.nix39
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/cordless/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/coyim/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/deltachat-cursed/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/deltachat-desktop/default.nix127
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/dino/default.nix124
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/discord/darwin.nix34
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/discord/default.nix105
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/discord/disable-breaking-updates.py49
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/discord/linux.nix162
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/discord/openasar.nix50
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/element/element-desktop.nix154
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/element/element-web-wrapper.nix26
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/element/element-web.nix87
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/element/keytar/default.nix46
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/element/keytar/pin.json5
-rwxr-xr-xnixpkgs/pkgs/applications/networking/instant-messengers/element/keytar/update.sh36
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/element/pin.nix9
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/element/seshat/default.nix56
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/element/seshat/pin.json6
-rwxr-xr-xnixpkgs/pkgs/applications/networking/instant-messengers/element/seshat/update.sh49
-rwxr-xr-xnixpkgs/pkgs/applications/networking/instant-messengers/element/update.sh55
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/feishu/default.nix200
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/ferdi/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/ferdium/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/flare-signal/Cargo.lock4465
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/flare-signal/default.nix80
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/fluffychat/default.nix69
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/fluffychat/deps.json3215
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/fractal-next/Cargo.lock5773
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/fractal-next/default.nix86
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/fractal/Cargo.lock3306
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/fractal/default.nix102
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/franz/default.nix20
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/franz/generic.nix95
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/freetalk/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/gajim/default.nix91
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/gitter/default.nix102
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/go-neb/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/gomuks/default.nix57
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/gotktrix/default.nix50
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/gurk-rs/Cargo.lock4559
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/gurk-rs/default.nix48
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/hamsket/default.nix47
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/hipchat/default.nix89
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/hydrogen-web/unwrapped.nix65
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/hydrogen-web/wrapper.nix26
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/iamb/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/jackline/default.nix53
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/jami/config/pjsip_args_common19
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/jami/config/pjsip_args_linux1
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/jami/config/pjsip_patches1
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/jami/default.nix220
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/jitsi-meet-electron/default.nix60
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/jitsi/default.nix78
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/jitsi/jitsi.patch27
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/kaidan/default.nix73
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/kdeltachat/default.nix53
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/keet/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/linphone/default.nix148
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/linphone/do-not-build-linphone-sdk.patch143
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/linphone/no-store-path-in-autostart.patch27
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/linphone/remove-bc_compute_full_version-usage.patch74
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/matrix-commander/default.nix63
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/matrix-dl/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/matrixcli/default.nix53
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/mattermost-desktop/default.nix92
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/mcabber/default.nix43
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/default.nix159
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/deps/Gemfile39
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/deps/Gemfile.lock101
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/deps/gemset.nix410
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/deps/plugin/gtk/Gemfile4
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/deps/plugin/image_file_cache/Gemfile1
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/deps/plugin/photo_support/Gemfile4
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/deps/plugin/uitranslator/Gemfile5
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/test_plugin.rb10
-rwxr-xr-xnixpkgs/pkgs/applications/networking/instant-messengers/mikutter/update.sh51
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/mirage/default.nix92
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/mm/default.nix21
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/nchat/default.nix44
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/neosay/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/nheko/default.nix118
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/oysttyer/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pantalaimon/default.nix78
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/add-search-path.patch20
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/default.nix149
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-makefile.patch64
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/carbons/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/default.nix70
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/msn-pecan/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/otr/default.nix23
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/pidgin-indicator/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/pidgin-latex/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/pidgin-mra/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/pidgin-opensteamworks/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/pidgin-osd/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/pidgin-skypeweb/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/pidgin-xmpp-receipts/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-discord/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-facebook/default.nix66
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-googlechat/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-hangouts/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-lurch/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-matrix/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-mm-sms/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-plugin-pack/default.nix42
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-signald/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-slack/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-vk-plugin/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-xmpp-http-upload/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/sipe/default.nix39
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/tdlib-purple/default.nix45
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/tox-prpl/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/window-merge/default.nix21
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/wrapper.nix20
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/poezio/default.nix52
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/profanity/default.nix103
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/profanity/patches/packages-osx.patch13
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/psi-plus/default.nix106
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/psi/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/psi/fix-cmake-hunspell-1.7.patch12
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/qq/default.nix109
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/qtox/default.nix77
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/quaternion/default.nix60
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/rambox/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/ratox/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/revolt-desktop/default.nix62
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/ricochet/default.nix76
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/ripcord/darwin.nix34
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/ripcord/default.nix69
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/rocketchat-desktop/default.nix97
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/schildichat/pin.json9
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/schildichat/schildichat-desktop.nix131
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/schildichat/schildichat-web.nix113
-rwxr-xr-xnixpkgs/pkgs/applications/networking/instant-messengers/schildichat/update.sh43
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/scudcloud/default.nix23
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/seren/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/session-desktop/default.nix66
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/signal-cli/default.nix55
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/signal-desktop/default.nix12
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/signal-desktop/generic.nix183
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/signalbackup-tools/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/signald/0001-Fetch-buildconfig-during-gradle-build-inside-Nix-FOD.patch42
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/signald/0002-buildconfig-local-deps-fixes.patch71
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/signald/default.nix141
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/signaldctl/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/silc-client/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/sky/default.nix67
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/skypeforlinux/default.nix128
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/slack-term/default.nix22
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/slack/default.nix208
-rwxr-xr-xnixpkgs/pkgs/applications/networking/instant-messengers/slack/update.sh48
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/ssh-chat/default.nix22
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/tangram/default.nix90
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/teams-for-linux/default.nix109
-rwxr-xr-xnixpkgs/pkgs/applications/networking/instant-messengers/teams-for-linux/update.sh50
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/teams/default.nix181
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/teamspeak/client.nix156
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/teamspeak/client5.nix109
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/teamspeak/server.nix101
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/default.nix225
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/kf594.patch57
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/shortcuts-binary-path.patch38
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/tg_owt.nix145
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/tg_owt.patch23
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/with-webkit.nix21
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/telegram/telegram-desktop/default.nix214
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/telegram/telegram-desktop/tg_owt.nix63
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/telegram/tg/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/telepathy/gabble/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/telepathy/haze/default.nix20
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/telepathy/idle/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/telepathy/logger/default.nix46
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/telepathy/mission-control/default.nix55
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/tensor/default.nix69
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/threema-desktop/default.nix55
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/toxic/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/trillian-im/default.nix78
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/turses/default.nix95
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/twinkle/default.nix70
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/twitch-tui/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/utox/default.nix43
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/vacuum/default.nix49
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/viber/default.nix111
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/vk-cli/default.nix55
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/vk-messenger/default.nix74
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/wavebox/default.nix88
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/webcord/default.nix91
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/webcord/webcord-vencord/add-extension.patch12
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/webcord/webcord-vencord/default.nix21
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/webex/default.nix182
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/whatsapp-for-linux/default.nix78
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/wire-desktop/default.nix175
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/xmppc/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/ytalk/default.nix21
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/zoom-us/default.nix200
-rwxr-xr-xnixpkgs/pkgs/applications/networking/instant-messengers/zoom-us/update.sh34
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/zulip-term/default.nix56
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/zulip-term/pytest-executable-name.patch22
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/zulip/default.nix39
-rw-r--r--nixpkgs/pkgs/applications/networking/insync/default.nix125
-rw-r--r--nixpkgs/pkgs/applications/networking/ipfs-cluster/default.nix22
-rw-r--r--nixpkgs/pkgs/applications/networking/ipfs-upload-client/default.nix22
-rw-r--r--nixpkgs/pkgs/applications/networking/ipget/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/networking/iptraf-ng/default.nix49
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/bip/default.nix50
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/catgirl/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/communi/default.nix78
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/convos/default.nix94
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/epic5/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/glowing-bear/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/halloy/Cargo.lock3852
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/halloy/default.nix86
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/hexchat/default.nix55
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/ii/default.nix22
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/irccloud/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/ircdog/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/irssi/default.nix57
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/irssi/fish/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/irssi/fish/irssi-include-dir.patch33
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/kirc/default.nix44
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/kvirc/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/quassel/default.nix93
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/senpai/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/sic/default.nix22
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/srain/default.nix60
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/thelounge/default.nix93
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/thelounge/packages-path.patch13
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/tiny/Cargo.lock.patch11
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/tiny/default.nix47
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/weechat/default.nix101
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/weechat/scripts/buffer_autoset/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/weechat/scripts/colorize_nicks/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/weechat/scripts/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/weechat/scripts/edit/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/weechat/scripts/highmon/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/weechat/scripts/multiline/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/weechat/scripts/multiline/libpath.patch9
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/weechat/scripts/url_hint/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/weechat/scripts/wee-slack/default.nix48
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/weechat/scripts/wee-slack/libpath.patch13
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/weechat/scripts/wee-slack/load_weemoji_path.patch25
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/weechat/scripts/weechat-autosort/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/weechat/scripts/weechat-go/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/weechat/scripts/weechat-grep/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/weechat/scripts/weechat-matrix-bridge/default.nix51
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/weechat/scripts/weechat-matrix-bridge/library-path.patch28
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/weechat/scripts/weechat-matrix/default.nix94
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/weechat/scripts/weechat-notify-send/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/weechat/scripts/weechat-otr/default.nix77
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/weechat/scripts/weechat-otr/libpath.patch13
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/weechat/scripts/zncplayback/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/weechat/wrapper.nix97
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/wraith/configure.patch58
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/wraith/default.nix46
-rw-r--r--nixpkgs/pkgs/applications/networking/irc/wraith/dlopen.patch48
-rw-r--r--nixpkgs/pkgs/applications/networking/iroh/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/networking/jmeter/default.nix60
-rw-r--r--nixpkgs/pkgs/applications/networking/jnetmap/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/networking/juju/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/networking/jxplorer/default.nix50
-rw-r--r--nixpkgs/pkgs/applications/networking/kubo-migrator/all-migrations.nix80
-rw-r--r--nixpkgs/pkgs/applications/networking/kubo-migrator/default.nix23
-rw-r--r--nixpkgs/pkgs/applications/networking/kubo-migrator/unwrapped.nix35
-rw-r--r--nixpkgs/pkgs/applications/networking/kubo/default.nix59
-rw-r--r--nixpkgs/pkgs/applications/networking/libcoap/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/networking/lieer/default.nix46
-rw-r--r--nixpkgs/pkgs/applications/networking/linssid/0001-unbundled-qwt.patch43
-rw-r--r--nixpkgs/pkgs/applications/networking/linssid/default.nix39
-rw-r--r--nixpkgs/pkgs/applications/networking/listadmin/default.nix48
-rw-r--r--nixpkgs/pkgs/applications/networking/lls/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/networking/localproxy/default.nix39
-rw-r--r--nixpkgs/pkgs/applications/networking/localsend/default.nix64
-rw-r--r--nixpkgs/pkgs/applications/networking/maestral-qt/default.nix66
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/aerc/default.nix80
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/aerc/runtime-libexec.patch87
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/afew/default.nix45
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/alot/default.nix97
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/alpine/default.nix48
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/astroid/default.nix65
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/ayatana-webmail/default.nix90
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/balsa/default.nix79
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/betterbird/default.nix128
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/bluemail/default.nix82
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/bubblemail/default.nix75
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/caeml/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/claws-mail/default.nix163
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/claws-mail/mime.patch28
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/electron-mail/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/evolution/evolution-ews/default.nix97
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/evolution/evolution-ews/hardcode-gsettings.patch96
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/evolution/evolution/default.nix135
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/evolution/evolution/wrapper.nix41
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/hasmail/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/himalaya/default.nix55
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/imapfilter.nix27
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/lumail/default.nix82
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/mailcheck/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/mailcheck/mailcheck-Makefile.patch22
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/mailnag/default.nix108
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/mailnag/goa-plugin.nix34
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/mailspring/default.nix103
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/mblaze/default.nix54
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/mlarchive2maildir/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/mmh/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/msgviewer/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/mswatch/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/mutt/default.nix111
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/mutt/no-build-only-refs.patch24
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/neomutt/default.nix124
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/neomutt/fix-open-very-large-mailbox.patch51
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/notmuch-addrlookup/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/notmuch-bower/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/notmuch/default.nix150
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/notmuch/muchsync.nix24
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/notmuch/mutt.nix46
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/notmuch/notmuch-mailmover.nix29
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/sylpheed/default.nix51
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/thunderbird-bin/default.nix223
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/thunderbird-bin/release_sources.nix665
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/thunderbird/no-buildconfig-115.patch13
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/thunderbird/no-buildconfig.patch13
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/thunderbird/packages.nix92
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/thunderbird/update.nix7
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/thunderbird/wrapper.nix23
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/trojita/default.nix77
-rw-r--r--nixpkgs/pkgs/applications/networking/mailreaders/tutanota-desktop/default.nix61
-rw-r--r--nixpkgs/pkgs/applications/networking/mhost/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/networking/misc/zammad/0001-nulldb.patch15
-rw-r--r--nixpkgs/pkgs/applications/networking/misc/zammad/default.nix156
-rw-r--r--nixpkgs/pkgs/applications/networking/misc/zammad/fix-sendmail-location.diff12
-rw-r--r--nixpkgs/pkgs/applications/networking/misc/zammad/gemset.nix2723
-rw-r--r--nixpkgs/pkgs/applications/networking/misc/zammad/package.json152
-rw-r--r--nixpkgs/pkgs/applications/networking/misc/zammad/source.json8
-rw-r--r--nixpkgs/pkgs/applications/networking/misc/zammad/update.nix39
-rwxr-xr-xnixpkgs/pkgs/applications/networking/misc/zammad/update.sh68
-rw-r--r--nixpkgs/pkgs/applications/networking/mkchromecast/default.nix88
-rw-r--r--nixpkgs/pkgs/applications/networking/modem-manager-gui/default.nix85
-rw-r--r--nixpkgs/pkgs/applications/networking/mpop/default.nix50
-rw-r--r--nixpkgs/pkgs/applications/networking/msmtp/default.nix132
-rw-r--r--nixpkgs/pkgs/applications/networking/msmtp/paths.patch64
-rw-r--r--nixpkgs/pkgs/applications/networking/mujmap/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/networking/mullvad-vpn/default.nix142
-rwxr-xr-xnixpkgs/pkgs/applications/networking/mullvad-vpn/update.sh36
-rw-r--r--nixpkgs/pkgs/applications/networking/mullvad/Cargo.lock4291
-rw-r--r--nixpkgs/pkgs/applications/networking/mullvad/default.nix8
-rw-r--r--nixpkgs/pkgs/applications/networking/mullvad/libwg.nix35
-rw-r--r--nixpkgs/pkgs/applications/networking/mullvad/mullvad.nix106
-rw-r--r--nixpkgs/pkgs/applications/networking/mullvad/openvpn.nix112
-rw-r--r--nixpkgs/pkgs/applications/networking/mumble/0001-BUILD-crypto-Migrate-to-OpenSSL-3.0-compatible-API.patch553
-rw-r--r--nixpkgs/pkgs/applications/networking/mumble/0002-FIX-positional-audio-Force-8-bytes-alignment-for-CCa.patch31
-rw-r--r--nixpkgs/pkgs/applications/networking/mumble/default.nix134
-rw-r--r--nixpkgs/pkgs/applications/networking/mumble/overlay.nix30
-rw-r--r--nixpkgs/pkgs/applications/networking/n8n/default.nix45
-rwxr-xr-xnixpkgs/pkgs/applications/networking/n8n/generate-dependencies.sh21
-rw-r--r--nixpkgs/pkgs/applications/networking/n8n/node-composition.nix17
-rw-r--r--nixpkgs/pkgs/applications/networking/n8n/node-env.nix689
-rw-r--r--nixpkgs/pkgs/applications/networking/n8n/node-packages.nix14919
-rw-r--r--nixpkgs/pkgs/applications/networking/n8n/package.json3
-rw-r--r--nixpkgs/pkgs/applications/networking/nali/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/networking/ncgopher/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/networking/ndppd/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/networking/netmaker/default.nix44
-rw-r--r--nixpkgs/pkgs/applications/networking/netperf/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/networking/newsreaders/liferea/default.nix92
-rw-r--r--nixpkgs/pkgs/applications/networking/newsreaders/pan/default.nix62
-rw-r--r--nixpkgs/pkgs/applications/networking/newsreaders/quiterss/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/networking/newsreaders/raven-reader/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/networking/newsreaders/slrn/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/networking/nextcloud-client/0001-Explicitly-copy-dbus-files-into-the-store-dir.patch20
-rw-r--r--nixpkgs/pkgs/applications/networking/nextcloud-client/0001-When-creating-the-autostart-entry-do-not-use-an-abso.patch24
-rw-r--r--nixpkgs/pkgs/applications/networking/nextcloud-client/default.nix104
-rw-r--r--nixpkgs/pkgs/applications/networking/nextdns/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/networking/ngadmin/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/networking/nload/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/networking/nntp-proxy/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/networking/novnc/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/networking/novnc/fix-paths.patch22
-rw-r--r--nixpkgs/pkgs/applications/networking/novnc/websockify.patch13
-rw-r--r--nixpkgs/pkgs/applications/networking/nym/Cargo.lock7899
-rw-r--r--nixpkgs/pkgs/applications/networking/nym/default.nix85
-rw-r--r--nixpkgs/pkgs/applications/networking/offrss/default.nix42
-rw-r--r--nixpkgs/pkgs/applications/networking/omping/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/networking/onionshare/default.nix157
-rw-r--r--nixpkgs/pkgs/applications/networking/onionshare/fix-paths-gui.patch61
-rw-r--r--nixpkgs/pkgs/applications/networking/onionshare/fix-paths.patch82
-rw-r--r--nixpkgs/pkgs/applications/networking/onionshare/fix-qrcode-gui.patch14
-rw-r--r--nixpkgs/pkgs/applications/networking/opsdroid/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/networking/ostinato/default.nix74
-rw-r--r--nixpkgs/pkgs/applications/networking/ostinato/drone_ini.patch14
-rw-r--r--nixpkgs/pkgs/applications/networking/owamp/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/networking/owncloud-client/default.nix47
-rw-r--r--nixpkgs/pkgs/applications/networking/owncloud-client/libre-graph-api-cpp-qt-client.nix35
-rw-r--r--nixpkgs/pkgs/applications/networking/p2p/deluge/default.nix104
-rw-r--r--nixpkgs/pkgs/applications/networking/p2p/dht/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/networking/p2p/eiskaltdcpp/default.nix52
-rw-r--r--nixpkgs/pkgs/applications/networking/p2p/enhanced-ctorrent/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/networking/p2p/flood/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/networking/p2p/fragments/default.nix88
-rw-r--r--nixpkgs/pkgs/applications/networking/p2p/fragments/gtk4-rs.patch28
-rw-r--r--nixpkgs/pkgs/applications/networking/p2p/freenet/default.nix125
-rwxr-xr-xnixpkgs/pkgs/applications/networking/p2p/freenet/freenetWrapper18
-rw-r--r--nixpkgs/pkgs/applications/networking/p2p/frostwire/default.nix99
-rw-r--r--nixpkgs/pkgs/applications/networking/p2p/frostwire/frostwire-bin.nix46
-rw-r--r--nixpkgs/pkgs/applications/networking/p2p/gnunet/default.nix75
-rw-r--r--nixpkgs/pkgs/applications/networking/p2p/gnunet/gtk.nix47
-rw-r--r--nixpkgs/pkgs/applications/networking/p2p/jesec-rtorrent/avoid-stack-overflow-for-lockfile-buf.patch30
-rw-r--r--nixpkgs/pkgs/applications/networking/p2p/jesec-rtorrent/default.nix74
-rw-r--r--nixpkgs/pkgs/applications/networking/p2p/jesec-rtorrent/libtorrent.nix48
-rw-r--r--nixpkgs/pkgs/applications/networking/p2p/libutp/3.4.nix30
-rw-r--r--nixpkgs/pkgs/applications/networking/p2p/libutp/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/networking/p2p/lokinet/default.nix66
-rw-r--r--nixpkgs/pkgs/applications/networking/p2p/magnetico/default.nix45
-rw-r--r--nixpkgs/pkgs/applications/networking/p2p/mldonkey/default.nix46
-rw-r--r--nixpkgs/pkgs/applications/networking/p2p/ncdc/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/networking/p2p/opentracker/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/networking/p2p/pyrosimple/default.nix69
-rw-r--r--nixpkgs/pkgs/applications/networking/p2p/qbittorrent/default.nix58
-rw-r--r--nixpkgs/pkgs/applications/networking/p2p/rakshasa-rtorrent/default.nix73
-rw-r--r--nixpkgs/pkgs/applications/networking/p2p/rakshasa-rtorrent/libtorrent.nix48
-rw-r--r--nixpkgs/pkgs/applications/networking/p2p/retroshare/cpp-filesystem.patch12
-rw-r--r--nixpkgs/pkgs/applications/networking/p2p/retroshare/default.nix54
-rw-r--r--nixpkgs/pkgs/applications/networking/p2p/retroshare/no-submodules.patch62
-rw-r--r--nixpkgs/pkgs/applications/networking/p2p/rqbit/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/networking/p2p/soulseekqt/default.nix57
-rw-r--r--nixpkgs/pkgs/applications/networking/p2p/stig/default.nix68
-rw-r--r--nixpkgs/pkgs/applications/networking/p2p/storrent/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/networking/p2p/synapse-bt/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/networking/p2p/torrential/default.nix84
-rw-r--r--nixpkgs/pkgs/applications/networking/p2p/transgui/default.nix78
-rw-r--r--nixpkgs/pkgs/applications/networking/p2p/transmission-remote-gtk/default.nix65
-rw-r--r--nixpkgs/pkgs/applications/networking/p2p/transmission/4.nix164
-rw-r--r--nixpkgs/pkgs/applications/networking/p2p/transmission/default.nix149
-rw-r--r--nixpkgs/pkgs/applications/networking/p2p/tremc/default.nix61
-rw-r--r--nixpkgs/pkgs/applications/networking/p2p/tremotesf/default.nix52
-rw-r--r--nixpkgs/pkgs/applications/networking/p2p/tribler/default.nix101
-rw-r--r--nixpkgs/pkgs/applications/networking/p2p/vuze/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/networking/p2p/xd/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/networking/p2p/zeronet-conservancy/default.nix60
-rw-r--r--nixpkgs/pkgs/applications/networking/p2p/zeronet/default.nix45
-rw-r--r--nixpkgs/pkgs/applications/networking/pcloud/default.nix125
-rw-r--r--nixpkgs/pkgs/applications/networking/peroxide/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/networking/pjsip/default.nix124
-rw-r--r--nixpkgs/pkgs/applications/networking/pjsip/fix-aarch64.patch13
-rw-r--r--nixpkgs/pkgs/applications/networking/powerdns-admin/default.nix133
-rw-r--r--nixpkgs/pkgs/applications/networking/powerdns-admin/package.json24
-rw-r--r--nixpkgs/pkgs/applications/networking/protocol/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/networking/protonmail-bridge/default.nix56
-rw-r--r--nixpkgs/pkgs/applications/networking/protonvpn-cli/2.nix51
-rw-r--r--nixpkgs/pkgs/applications/networking/protonvpn-cli/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/networking/protonvpn-gui/default.nix74
-rw-r--r--nixpkgs/pkgs/applications/networking/ps2client/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/networking/pyload-ng/default.nix54
-rw-r--r--nixpkgs/pkgs/applications/networking/qv2ray/default.nix84
-rw-r--r--nixpkgs/pkgs/applications/networking/r53-ddns/default.nix22
-rw-r--r--nixpkgs/pkgs/applications/networking/remote/anydesk/default.nix91
-rw-r--r--nixpkgs/pkgs/applications/networking/remote/aws-workspaces/default.nix79
-rw-r--r--nixpkgs/pkgs/applications/networking/remote/citrix-workspace/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/networking/remote/citrix-workspace/generic.nix222
-rw-r--r--nixpkgs/pkgs/applications/networking/remote/citrix-workspace/sources.nix49
-rw-r--r--nixpkgs/pkgs/applications/networking/remote/dayon/default.nix67
-rw-r--r--nixpkgs/pkgs/applications/networking/remote/freerdp/default.nix210
-rw-r--r--nixpkgs/pkgs/applications/networking/remote/nice-dcv-client/default.nix86
-rw-r--r--nixpkgs/pkgs/applications/networking/remote/putty/default.nix55
-rw-r--r--nixpkgs/pkgs/applications/networking/remote/rdesktop/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/networking/remote/remmina/default.nix85
-rw-r--r--nixpkgs/pkgs/applications/networking/remote/rustdesk/Cargo.lock7407
-rw-r--r--nixpkgs/pkgs/applications/networking/remote/rustdesk/default.nix160
-rw-r--r--nixpkgs/pkgs/applications/networking/remote/teamviewer/default.nix140
-rw-r--r--nixpkgs/pkgs/applications/networking/remote/vmware-horizon-client/default.nix154
-rwxr-xr-xnixpkgs/pkgs/applications/networking/remote/vmware-horizon-client/update.sh27
-rw-r--r--nixpkgs/pkgs/applications/networking/remote/waypipe/default.nix39
-rw-r--r--nixpkgs/pkgs/applications/networking/remote/wayvnc/default.nix76
-rw-r--r--nixpkgs/pkgs/applications/networking/remote/x2goclient/default.nix68
-rw-r--r--nixpkgs/pkgs/applications/networking/remote/x2goserver/default.nix93
-rw-r--r--nixpkgs/pkgs/applications/networking/remote/xrdp/default.nix107
-rw-r--r--nixpkgs/pkgs/applications/networking/remote/xrdp/dynamic_config.patch376
-rw-r--r--nixpkgs/pkgs/applications/networking/resilio-sync/default.nix48
-rw-r--r--nixpkgs/pkgs/applications/networking/rofi-vpn/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/networking/rymdport/default.nix52
-rw-r--r--nixpkgs/pkgs/applications/networking/scaleft/default.nix48
-rw-r--r--nixpkgs/pkgs/applications/networking/seafile-client/default.nix55
-rw-r--r--nixpkgs/pkgs/applications/networking/seahub/default.nix98
-rw-r--r--nixpkgs/pkgs/applications/networking/seaweedfs/default.nix61
-rw-r--r--nixpkgs/pkgs/applications/networking/shellhub-agent/default.nix60
-rw-r--r--nixpkgs/pkgs/applications/networking/sieve-connect/default.nix50
-rw-r--r--nixpkgs/pkgs/applications/networking/siproxd/cheaders.patch14
-rw-r--r--nixpkgs/pkgs/applications/networking/siproxd/default.nix23
-rw-r--r--nixpkgs/pkgs/applications/networking/sniffers/etherape/default.nix23
-rw-r--r--nixpkgs/pkgs/applications/networking/sniffers/ettercap/default.nix58
-rw-r--r--nixpkgs/pkgs/applications/networking/sniffers/kismet/default.nix106
-rw-r--r--nixpkgs/pkgs/applications/networking/sniffers/qtwirediff/default.nix54
-rw-r--r--nixpkgs/pkgs/applications/networking/sniffers/savvycan/default.nix64
-rw-r--r--nixpkgs/pkgs/applications/networking/sniffers/sngrep/default.nix65
-rw-r--r--nixpkgs/pkgs/applications/networking/sniffers/whsniff/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/networking/sniffers/wireshark/default.nix183
-rw-r--r--nixpkgs/pkgs/applications/networking/sniffers/wireshark/wireshark-lookup-dumpcap-in-path.patch66
-rw-r--r--nixpkgs/pkgs/applications/networking/sniffnet/default.nix65
-rw-r--r--nixpkgs/pkgs/applications/networking/sniproxy/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/networking/soapui/default.nix59
-rw-r--r--nixpkgs/pkgs/applications/networking/soju/default.nix65
-rw-r--r--nixpkgs/pkgs/applications/networking/soulseek/nicotine-plus/default.nix56
-rw-r--r--nixpkgs/pkgs/applications/networking/spideroak/default.nix61
-rw-r--r--nixpkgs/pkgs/applications/networking/ssb-patchwork/default.nix54
-rw-r--r--nixpkgs/pkgs/applications/networking/station/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/networking/stc-cli/default.nix23
-rw-r--r--nixpkgs/pkgs/applications/networking/sync/acd_cli/default.nix39
-rw-r--r--nixpkgs/pkgs/applications/networking/sync/backintime/common.nix52
-rw-r--r--nixpkgs/pkgs/applications/networking/sync/backintime/qt.nix26
-rw-r--r--nixpkgs/pkgs/applications/networking/sync/casync/default.nix65
-rw-r--r--nixpkgs/pkgs/applications/networking/sync/celeste/default.nix114
-rw-r--r--nixpkgs/pkgs/applications/networking/sync/celeste/librclone-path.patch31
-rw-r--r--nixpkgs/pkgs/applications/networking/sync/celeste/target-dir.patch16
-rw-r--r--nixpkgs/pkgs/applications/networking/sync/desync/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/networking/sync/lcsync/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/networking/sync/lsyncd/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/networking/sync/onedrive/default.nix56
-rw-r--r--nixpkgs/pkgs/applications/networking/sync/openrsync/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/networking/sync/rclone/browser.nix33
-rw-r--r--nixpkgs/pkgs/applications/networking/sync/rclone/default.nix64
-rw-r--r--nixpkgs/pkgs/applications/networking/sync/rsync/default.nix63
-rw-r--r--nixpkgs/pkgs/applications/networking/sync/rsync/rrsync.nix31
-rw-r--r--nixpkgs/pkgs/applications/networking/sync/storj-uplink/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/networking/sync/unison/default.nix75
-rw-r--r--nixpkgs/pkgs/applications/networking/sync/wdt/default.nix50
-rw-r--r--nixpkgs/pkgs/applications/networking/syncplay/default.nix57
-rw-r--r--nixpkgs/pkgs/applications/networking/syncplay/trusted_certificates.patch12
-rw-r--r--nixpkgs/pkgs/applications/networking/syncthing/default.nix124
-rw-r--r--nixpkgs/pkgs/applications/networking/synology-cloud-sync-decryption-tool/default.nix43
-rw-r--r--nixpkgs/pkgs/applications/networking/synology-drive-client/default.nix80
-rw-r--r--nixpkgs/pkgs/applications/networking/taler/default.nix122
-rw-r--r--nixpkgs/pkgs/applications/networking/tcping-go/default.nix22
-rw-r--r--nixpkgs/pkgs/applications/networking/tcpkali/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/networking/termius/default.nix83
-rw-r--r--nixpkgs/pkgs/applications/networking/testssl/default.nix48
-rw-r--r--nixpkgs/pkgs/applications/networking/tetrd/default.nix86
-rw-r--r--nixpkgs/pkgs/applications/networking/tmpmail/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/networking/trayscale/default.nix54
-rw-r--r--nixpkgs/pkgs/applications/networking/tsung/default.nix60
-rw-r--r--nixpkgs/pkgs/applications/networking/twingate/default.nix62
-rw-r--r--nixpkgs/pkgs/applications/networking/twtxt/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/networking/umurmur/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/networking/upnp-router-control/default.nix52
-rw-r--r--nixpkgs/pkgs/applications/networking/utahfs/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/networking/versus/default.nix22
-rw-r--r--nixpkgs/pkgs/applications/networking/vnstat/default.nix45
-rw-r--r--nixpkgs/pkgs/applications/networking/warp/default.nix69
-rw-r--r--nixpkgs/pkgs/applications/networking/wayback_machine_downloader/Gemfile4
-rw-r--r--nixpkgs/pkgs/applications/networking/wayback_machine_downloader/Gemfile.lock13
-rw-r--r--nixpkgs/pkgs/applications/networking/wayback_machine_downloader/default.nix16
-rw-r--r--nixpkgs/pkgs/applications/networking/wayback_machine_downloader/gemset.nix12
-rw-r--r--nixpkgs/pkgs/applications/networking/weather/meteo/default.nix69
-rw-r--r--nixpkgs/pkgs/applications/networking/websocketd/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/networking/wg-bond/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/networking/wgcf/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/networking/wgnord/default.nix65
-rw-r--r--nixpkgs/pkgs/applications/networking/yaup/default.nix47
-rw-r--r--nixpkgs/pkgs/applications/networking/zerobin/default.nix68
-rw-r--r--nixpkgs/pkgs/applications/networking/znc/default.nix49
-rw-r--r--nixpkgs/pkgs/applications/networking/znc/modules.nix202
1066 files changed, 149452 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/applications/networking/3proxy/default.nix b/nixpkgs/pkgs/applications/networking/3proxy/default.nix
new file mode 100644
index 000000000000..ab5ae744d271
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/3proxy/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, fetchFromGitHub, nixosTests }:
+
+stdenv.mkDerivation rec {
+  pname = "3proxy";
+  version = "0.9.4";
+
+  src = fetchFromGitHub {
+    owner = "3proxy";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-4bLlQ/ULvpjs6fr19yBBln5mRRc+yj+zVLiTs1e/Ypc=";
+  };
+
+  # They use 'install -s', that calls the native strip instead of the cross.
+  # Don't strip binary on install, we strip it on fixup phase anyway.
+  postPatch = ''
+    substituteInPlace Makefile.Linux \
+      --replace "(INSTALL_BIN) -s" "(INSTALL_BIN)" \
+      --replace "/usr" ""
+  '';
+
+  makeFlags = [
+    "-f Makefile.Linux"
+    "INSTALL=install"
+    "DESTDIR=${placeholder "out"}"
+    "CC:=$(CC)"
+  ];
+
+  postInstall = ''
+    rm -fr $out/var
+  '';
+
+  passthru.tests = {
+    smoke-test = nixosTests._3proxy;
+  };
+
+  meta = with lib; {
+    description = "Tiny free proxy server";
+    homepage = "https://github.com/3proxy/3proxy";
+    license = licenses.bsd2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ misuzu ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/Sylk/default.nix b/nixpkgs/pkgs/applications/networking/Sylk/default.nix
new file mode 100644
index 000000000000..cc9e218bad35
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/Sylk/default.nix
@@ -0,0 +1,31 @@
+{ appimageTools, fetchurl, lib }:
+
+let
+  pname = "Sylk";
+  version = "3.0.1";
+in
+
+appimageTools.wrapType2 rec {
+  name = "${pname}-${version}";
+
+  src = fetchurl {
+    url = "http://download.ag-projects.com/Sylk/Sylk-${version}-x86_64.AppImage";
+    hash = "sha256-VgepO7LHFmNKq/H0RFcIkafgtiVGt8K/LdiCO5Dw2s4=";
+  };
+
+  profile = ''
+    export LC_ALL=C.UTF-8
+  '';
+
+  multiArch = false; # no 32bit needed
+  extraPkgs = appimageTools.defaultFhsEnvArgs.multiPkgs;
+  extraInstallCommands = "mv $out/bin/{${name},${pname}}";
+
+  meta = with lib; {
+    description = "Sylk WebRTC client";
+    homepage = "https://sylkserver.com/";
+    license = licenses.agpl3Plus;
+    maintainers = with maintainers; [ zimbatm ];
+    platforms = [ "i386-linux" "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/adguardian/default.nix b/nixpkgs/pkgs/applications/networking/adguardian/default.nix
new file mode 100644
index 000000000000..7b85ee2c000c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/adguardian/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "adguardian";
+  version = "1.6.0";
+
+  src = fetchFromGitHub {
+    owner = "Lissy93";
+    repo = "AdGuardian-Term";
+    rev = version;
+    hash = "sha256-WxrSmCwLnXXs5g/hN3xWE66P5n0RD/L9MJpf5N2iNtY=";
+  };
+
+  cargoHash = "sha256-IPkKiXuFN0KFlcrrSjLmML+O5zCrVRKEqdyV2xBsCsg=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  meta = with lib; {
+    description = "Terminal-based, real-time traffic monitoring and statistics for your AdGuard Home instance";
+    homepage = "https://github.com/Lissy93/AdGuardian-Term";
+    license = licenses.mit;
+    maintainers = with maintainers; [ GaetanLepage ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/aether/default.nix b/nixpkgs/pkgs/applications/networking/aether/default.nix
new file mode 100644
index 000000000000..62dbae082d9a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/aether/default.nix
@@ -0,0 +1,112 @@
+{ autoPatchelfHook, makeDesktopItem, lib, stdenv, wrapGAppsHook
+, alsa-lib, at-spi2-atk, at-spi2-core, atk, cairo, cups, dbus, expat, fontconfig
+, freetype, gdk-pixbuf, glib, gtk3, libcxx, libdrm, libnotify, libpulseaudio, libuuid
+, libX11, libXScrnSaver, libXcomposite, libXcursor, libXdamage, libXext
+, libXfixes, libXi, libXrandr, libXrender, libXtst, libxcb, libxshmfence
+, mesa, nspr, nss, pango, systemd, libappindicator-gtk3, libdbusmenu
+, fetchurl, fetchFromGitHub, imagemagick, copyDesktopItems
+}:
+
+let
+  binaryName = "AetherP2P";
+  aether-app-git = fetchFromGitHub {
+    owner = "aethereans";
+    repo = "aether-app";
+    rev = "53b6c8b2a9253cbf056ea3ebb077e0e08cbc5b1d";
+    sha256 = "1kgkzh7ih2q9dsckdkinh5dbzvr7gdykf8yz6h8pyhvzyjhk1v0r";
+  };
+in
+stdenv.mkDerivation rec {
+  pname = "aether";
+  version = "2.0.0-dev.15";
+
+  src = fetchurl {
+    url = "https://static.getaether.net/Releases/Aether-${version}/2011262249.19338c93/linux/Aether-${version}%2B2011262249.19338c93.tar.gz";
+    sha256 = "1hi8w83zal3ciyzg2m62shkbyh6hj7gwsidg3dn88mhfy68himf7";
+    # % in the url / canonical filename causes an error
+    name = "aether-tarball.tar.gz";
+  };
+
+  # there is no logo in the tarball so we grab it from github and convert it in the build phase
+  buildPhase = ''
+    convert ${aether-app-git}/aether-core/aether/client/src/app/ext_dep/images/Linux-Windows-App-Icon.png -resize 512x512 aether.png
+  '';
+
+  dontWrapGApps = true;
+
+  buildInputs = [
+    alsa-lib
+    cups
+    libdrm
+    libuuid
+    libXdamage
+    libX11
+    libXScrnSaver
+    libXtst
+    libxcb
+    libxshmfence
+    mesa
+    nss
+  ];
+
+  nativeBuildInputs = [
+    imagemagick
+    autoPatchelfHook
+    wrapGAppsHook
+    copyDesktopItems
+  ];
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = pname;
+      exec = binaryName;
+      icon = pname;
+      desktopName = "Aether";
+      genericName = meta.description;
+      categories = [ "Network" ];
+      mimeTypes = [ "x-scheme-handler/aether" ];
+    })
+  ];
+
+  installPhase =
+  let
+    libPath = lib.makeLibraryPath [
+      libcxx systemd libpulseaudio libdrm mesa
+      stdenv.cc.cc alsa-lib atk at-spi2-atk at-spi2-core cairo cups dbus expat fontconfig freetype
+      gdk-pixbuf glib gtk3 libnotify libX11 libXcomposite libuuid
+      libXcursor libXdamage libXext libXfixes libXi libXrandr libXrender
+      libXtst nspr nss libxcb pango systemd libXScrnSaver
+      libappindicator-gtk3 libdbusmenu
+    ];
+  in
+  ''
+    mkdir -p $out/{bin,opt/${binaryName},share/icons/hicolor/512x512/apps}
+    mv * $out/opt/${binaryName}
+
+    chmod +x $out/opt/${binaryName}/${binaryName}
+    patchelf --set-interpreter ${stdenv.cc.bintools.dynamicLinker} \
+        $out/opt/${binaryName}/${binaryName}
+
+    wrapProgram $out/opt/${binaryName}/${binaryName} \
+        "''${gappsWrapperArgs[@]}" \
+        --prefix XDG_DATA_DIRS : "${gtk3}/share/gsettings-schemas/${gtk3.name}" \
+        --prefix LD_LIBRARY_PATH : ${libPath}
+
+    ln -s $out/opt/${binaryName}/${binaryName} $out/bin/
+
+    ln -s $out/opt/${binaryName}/aether.png $out/share/icons/hicolor/512x512/apps/
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Peer-to-peer ephemeral public communities";
+    homepage = "https://getaether.net/";
+    downloadPage = "https://getaether.net/download/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.agpl3Only;
+    maintainers = with maintainers; [ maxhille ];
+    # other platforms could be supported by building from source
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/alpnpass/default.nix b/nixpkgs/pkgs/applications/networking/alpnpass/default.nix
new file mode 100644
index 000000000000..1d24c8028770
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/alpnpass/default.nix
@@ -0,0 +1,34 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "alpnpass";
+  version = "0.1";
+
+  src = fetchFromGitHub {
+    owner = "VerSprite";
+    repo = "alpnpass";
+    rev = version;
+    hash = "sha256-hNZqGTV17rFSKLhZzNqH2E4SSb6Jhk7YQ4TN0HnE+9g=";
+  };
+
+  vendorSha256 = null;
+
+  meta = with lib; {
+    description = "Inspect the plaintext payload inside of proxied TLS connections";
+    longDescription = ''
+      This tool will listen on a given port, strip SSL encryption,
+      forward traffic through a plain TCP proxy,
+      then encrypt the returning traffic again
+      and send it to the target of your choice.
+
+      Unlike most SSL stripping solutions this tool will negotiate ALPN and
+      preserve the negotiated protocol all the way to the target.
+    '';
+    homepage = "https://github.com/VerSprite/alpnpass";
+    license = licenses.unlicense;
+    maintainers = [ maintainers.raboof ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/apache-directory-studio/default.nix b/nixpkgs/pkgs/applications/networking/apache-directory-studio/default.nix
new file mode 100644
index 000000000000..0b1047cbc70c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/apache-directory-studio/default.nix
@@ -0,0 +1,58 @@
+{ lib, stdenv, fetchurl, jdk, makeWrapper, autoPatchelfHook, makeDesktopItem, glib, libsecret, webkitgtk }:
+
+stdenv.mkDerivation rec {
+  pname = "apache-directory-studio";
+  version = "2.0.0-M17";
+  versionWithDate = "2.0.0.v20210717-M17";
+
+  src =
+    if stdenv.hostPlatform.system == "x86_64-linux" then
+      fetchurl {
+        url = "mirror://apache/directory/studio/${versionWithDate}/ApacheDirectoryStudio-${versionWithDate}-linux.gtk.x86_64.tar.gz";
+        sha256 = "19zdspzv4n3mfgb1g45s3wh0vbvn6a9zjd4xi5x2afmdjkzlwxi4";
+      }
+    else throw "Unsupported system: ${stdenv.hostPlatform.system}";
+
+  desktopItem = makeDesktopItem {
+    name = "apache-directory-studio";
+    exec = "ApacheDirectoryStudio";
+    icon = "apache-directory-studio";
+    comment = "Eclipse-based LDAP browser and directory client";
+    desktopName = "Apache Directory Studio";
+    genericName = "Apache Directory Studio";
+    categories = [ "Java" "Network" ];
+  };
+
+  buildInputs = [ glib libsecret ];
+  nativeBuildInputs = [ makeWrapper autoPatchelfHook ];
+
+  installPhase = ''
+    dest="$out/libexec/ApacheDirectoryStudio"
+    mkdir -p "$dest"
+    cp -r . "$dest"
+
+    mkdir -p "$out/bin"
+    patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+        "$dest/ApacheDirectoryStudio"
+
+    makeWrapper "$dest/ApacheDirectoryStudio" \
+        "$out/bin/ApacheDirectoryStudio" \
+        --prefix PATH : "${jdk}/bin" \
+        --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath ([ webkitgtk ])}
+    install -D icon.xpm "$out/share/pixmaps/apache-directory-studio.xpm"
+    install -D -t "$out/share/applications" ${desktopItem}/share/applications/*
+  '';
+
+  meta = with lib; {
+    description = "Eclipse-based LDAP browser and directory client";
+    homepage = "https://directory.apache.org/studio/";
+    sourceProvenance = with sourceTypes; [
+      binaryBytecode
+      binaryNativeCode
+    ];
+    license = licenses.asl20;
+    # Upstream supports macOS and Windows too.
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/appgate-sdp/default.nix b/nixpkgs/pkgs/applications/networking/appgate-sdp/default.nix
new file mode 100644
index 000000000000..bd810cfe7310
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/appgate-sdp/default.nix
@@ -0,0 +1,159 @@
+{ alsa-lib
+, at-spi2-atk
+, at-spi2-core
+, atk
+, autoPatchelfHook
+, cairo
+, cups
+, curl
+, dbus
+, dnsmasq
+, dpkg
+, expat
+, fetchurl
+, gdk-pixbuf
+, glib
+, gtk3
+, icu
+, iproute2
+, krb5
+, lib
+, libdrm
+, libsecret
+, libuuid
+, libxcb
+, libxkbcommon
+, lttng-ust
+, makeWrapper
+, mesa
+, networkmanager
+, nspr
+, nss
+, openssl
+, pango
+, python3
+, stdenv
+, systemd
+, xdg-utils
+, xorg
+, zlib
+}:
+
+let
+  deps = [
+    alsa-lib
+    at-spi2-atk
+    at-spi2-core
+    atk
+    cairo
+    cups
+    curl
+    dbus
+    expat
+    gdk-pixbuf
+    glib
+    gtk3
+    icu
+    krb5
+    libdrm
+    libsecret
+    libuuid
+    libxcb
+    libxkbcommon
+    lttng-ust
+    mesa
+    nspr
+    nss
+    openssl
+    pango
+    stdenv.cc.cc
+    systemd
+    xorg.libX11
+    xorg.libXScrnSaver
+    xorg.libXcomposite
+    xorg.libXcursor
+    xorg.libXdamage
+    xorg.libXext
+    xorg.libXfixes
+    xorg.libXi
+    xorg.libXrandr
+    xorg.libXrender
+    xorg.libXtst
+    xorg.libxkbfile
+    xorg.libxshmfence
+    zlib
+  ];
+in
+stdenv.mkDerivation rec {
+  pname = "appgate-sdp";
+  version = "6.2.2";
+
+  src = fetchurl {
+    url = "https://bin.appgate-sdp.com/${lib.versions.majorMinor version}/client/appgate-sdp_${version}_amd64.deb";
+    sha256 = "sha256-5xbwBCLTlZ0cE273n3ErykZSEr59dZjQWhVTK91W9a4=";
+  };
+
+  # just patch interpreter
+  autoPatchelfIgnoreMissingDeps = true;
+  dontConfigure = true;
+  dontBuild = true;
+
+  buildInputs = [
+    python3
+    python3.pkgs.dbus-python
+  ];
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+    makeWrapper
+    dpkg
+  ];
+
+  unpackPhase = ''
+    dpkg-deb -x $src $out
+  '';
+
+  installPhase = ''
+    cp -r $out/usr/share $out/share
+
+    substituteInPlace $out/lib/systemd/system/appgate-dumb-resolver.service \
+        --replace "/opt/" "$out/opt/"
+
+    substituteInPlace $out/lib/systemd/system/appgatedriver.service \
+        --replace "/opt/" "$out/opt/" \
+        --replace "InaccessiblePaths=/mnt /srv /boot /media" "InaccessiblePaths=-/mnt -/srv -/boot -/media"
+
+    substituteInPlace $out/lib/systemd/system/appgate-resolver.service \
+        --replace "/usr/sbin/dnsmasq" "${dnsmasq}/bin/dnsmasq" \
+        --replace "/opt/" "$out/opt/"
+
+    substituteInPlace $out/opt/appgate/linux/nm.py \
+        --replace "/usr/sbin/dnsmasq" "${dnsmasq}/bin/dnsmasq"
+
+    substituteInPlace $out/opt/appgate/linux/set_dns \
+        --replace "/etc/appgate.conf" "$out/etc/appgate.conf"
+
+    wrapProgram $out/opt/appgate/service/createdump \
+        --set LD_LIBRARY_PATH "${lib.makeLibraryPath [ stdenv.cc.cc ]}"
+
+    wrapProgram $out/opt/appgate/appgate-driver \
+        --prefix PATH : ${lib.makeBinPath [ iproute2 networkmanager dnsmasq ]} \
+        --set LD_LIBRARY_PATH $out/opt/appgate/service
+
+    # make xdg-open overrideable at runtime
+    makeWrapper $out/opt/appgate/Appgate $out/bin/appgate \
+        --suffix PATH : ${lib.makeBinPath [ xdg-utils ]} \
+        --set LD_LIBRARY_PATH $out/opt/appgate:${lib.makeLibraryPath deps}
+
+    wrapProgram $out/opt/appgate/linux/set_dns --set PYTHONPATH $PYTHONPATH
+  '';
+
+  meta = with lib; {
+    description = "Appgate SDP (Software Defined Perimeter) desktop client";
+    homepage = "https://www.appgate.com/support/software-defined-perimeter-support";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ymatsiuk ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/asn/default.nix b/nixpkgs/pkgs/applications/networking/asn/default.nix
new file mode 100644
index 000000000000..e2a62c1f8b10
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/asn/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, makeWrapper
+, curl
+, whois
+, bind
+, mtr
+, jq
+, ipcalc
+, grepcidr
+, nmap
+, aha
+}:
+
+stdenv.mkDerivation rec {
+  pname = "asn";
+  version = "0.74";
+
+  src = fetchFromGitHub {
+    owner = "nitefood";
+    repo = "asn";
+    rev = "v${version}";
+    sha256 = "sha256-400I8aWQaPE7qCV/HqyPzuMmKpUyLc+RK7GCVgbt7JQ=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    install -Dv asn "$out/bin/asn"
+
+    wrapProgram $out/bin/asn \
+      --prefix PATH : "${lib.makeBinPath [ curl whois bind mtr jq ipcalc grepcidr nmap aha ]}"
+  '';
+
+  meta = {
+    description = "OSINT command line tool for investigating network data";
+    longDescription = ''
+      ASN / RPKI validity / BGP stats / IPv4v6 / Prefix / URL / ASPath / Organization /
+      IP reputation / IP geolocation / IP fingerprinting / Network recon /
+      lookup API server / Web traceroute server
+    '';
+    homepage = "https://github.com/nitefood/asn";
+    license = with lib.licenses; [ mit ];
+    maintainers = with lib.maintainers; [ devhell ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/avalanchego/default.nix b/nixpkgs/pkgs/applications/networking/avalanchego/default.nix
new file mode 100644
index 000000000000..849520543c01
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/avalanchego/default.nix
@@ -0,0 +1,45 @@
+{ IOKit
+, buildGoModule
+, fetchFromGitHub
+, fetchpatch
+, lib
+, stdenv
+}:
+
+buildGoModule rec {
+  pname = "avalanchego";
+  version = "1.10.9";
+
+  src = fetchFromGitHub {
+    owner = "ava-labs";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-ofIpTDlD8ztC5vR975GhH/yYb4LqVs17kdfbU2UN6gg=";
+  };
+
+  vendorHash = "sha256-EjdlIfY5he1P1JMJNwPNHFSwhlczGZb2ygvxviggesM=";
+  # go mod vendor has a bug, see: https://github.com/golang/go/issues/57529
+  proxyVendor = true;
+
+  buildInputs = lib.optionals stdenv.isDarwin [ IOKit ];
+
+  subPackages = [ "main" ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/ava-labs/avalanchego/version.GitCommit=${version}"
+  ];
+
+  postInstall = ''
+    mv $out/bin/{main,${pname}}
+  '';
+
+  meta = with lib; {
+    description = "Go implementation of an Avalanche node";
+    homepage = "https://github.com/ava-labs/avalanchego";
+    changelog = "https://github.com/ava-labs/avalanchego/releases/tag/v${version}";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ urandom qjoly ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/bee/0001-clef-service-accept-default-CONFIGDIR-from-the-envir.patch b/nixpkgs/pkgs/applications/networking/bee/0001-clef-service-accept-default-CONFIGDIR-from-the-envir.patch
new file mode 100644
index 000000000000..fb551646b7c6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/bee/0001-clef-service-accept-default-CONFIGDIR-from-the-envir.patch
@@ -0,0 +1,44 @@
+From 04933c578f51aa1f536991318dc5aede57f81c0d Mon Sep 17 00:00:00 2001
+From: Attila Lendvai <attila@lendvai.name>
+Date: Sat, 30 Jan 2021 14:02:02 +0100
+Subject: [PATCH 1/2] clef-service: accept default CONFIGDIR from the
+ environment
+
+---
+ packaging/bee-clef-service | 15 ++++++++++-----
+ 1 file changed, 10 insertions(+), 5 deletions(-)
+
+diff --git a/packaging/bee-clef-service b/packaging/bee-clef-service
+index 10bcd92..34c7edd 100755
+--- a/packaging/bee-clef-service
++++ b/packaging/bee-clef-service
+@@ -1,16 +1,21 @@
+ #!/usr/bin/env sh
+ 
+ start() {
+-    KEYSTORE=/var/lib/bee-clef/keystore
+-    CONFIGDIR=/var/lib/bee-clef
++    if [ -z "$CONFIGDIR" ]; then
++        CONFIGDIR=/var/lib/bee-clef
++    fi
++    if [ -z "$PASSWORD_FILE" ]; then
++        PASSWORD_FILE=${CONFIGDIR}/password
++    fi
++    KEYSTORE=${CONFIGDIR}/keystore
++    SECRET=$(cat ${PASSWORD_FILE})
+     CHAINID=5
+-    SECRET=$(cat /var/lib/bee-clef/password)
+     # clef with every start sets permissions back to 600
+-    (sleep 4; chmod 660 /var/lib/bee-clef/clef.ipc) &
++    (sleep 4; chmod 660 ${CONFIGDIR}/clef.ipc) &
+     ( sleep 2; cat << EOF
+ { "jsonrpc": "2.0", "id":1, "result": { "text":"$SECRET" } }
+ EOF
+-) | clef --stdio-ui --keystore $KEYSTORE --configdir $CONFIGDIR --chainid $CHAINID --rules /etc/bee-clef/rules.js --nousb --4bytedb-custom /etc/bee-clef/4byte.json --pcscdpath "" --auditlog "" --loglevel 3 --ipcpath /var/lib/bee-clef
++) | clef --stdio-ui --keystore $KEYSTORE --configdir $CONFIGDIR --chainid $CHAINID --rules /etc/bee-clef/rules.js --nousb --4bytedb-custom /etc/bee-clef/4byte.json --pcscdpath "" --auditlog "" --loglevel 3 --ipcpath ${CONFIGDIR}
+ }
+ 
+ stop() {
+-- 
+2.29.2
+
diff --git a/nixpkgs/pkgs/applications/networking/bee/0002-nix-diff-for-substituteAll.patch b/nixpkgs/pkgs/applications/networking/bee/0002-nix-diff-for-substituteAll.patch
new file mode 100644
index 000000000000..611aed0b890a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/bee/0002-nix-diff-for-substituteAll.patch
@@ -0,0 +1,25 @@
+From 1a1ab986245e8b74648a1a0adb5d1c7019561d18 Mon Sep 17 00:00:00 2001
+From: Attila Lendvai <attila@lendvai.name>
+Date: Sat, 30 Jan 2021 15:24:57 +0100
+Subject: [PATCH 2/2] nix diff for substituteAll
+
+---
+ packaging/bee-clef-service | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/packaging/bee-clef-service b/packaging/bee-clef-service
+index 34c7edd..31e9d95 100755
+--- a/packaging/bee-clef-service
++++ b/packaging/bee-clef-service
+@@ -15,7 +15,7 @@ start() {
+     ( sleep 2; cat << EOF
+ { "jsonrpc": "2.0", "id":1, "result": { "text":"$SECRET" } }
+ EOF
+-) | clef --stdio-ui --keystore $KEYSTORE --configdir $CONFIGDIR --chainid $CHAINID --rules /etc/bee-clef/rules.js --nousb --4bytedb-custom /etc/bee-clef/4byte.json --pcscdpath "" --auditlog "" --loglevel 3 --ipcpath ${CONFIGDIR}
++) | @clefBinary@ --stdio-ui --keystore $KEYSTORE --configdir $CONFIGDIR --chainid $CHAINID --rules @out@/share/bee-clef/rules.js --nousb --4bytedb-custom @out@/share/bee-clef/4byte.json --pcscdpath "" --auditlog "" --loglevel 3 --ipcpath ${CONFIGDIR}
+ }
+ 
+ stop() {
+-- 
+2.29.2
+
diff --git a/nixpkgs/pkgs/applications/networking/bee/bee-clef.nix b/nixpkgs/pkgs/applications/networking/bee/bee-clef.nix
new file mode 100644
index 000000000000..9e36f8670d46
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/bee/bee-clef.nix
@@ -0,0 +1,57 @@
+{ version ? "release", stdenv, lib, fetchFromGitHub, go-ethereum }:
+
+stdenv.mkDerivation rec {
+  pname = "bee-clef";
+  version = "0.4.7";
+
+  src = fetchFromGitHub {
+    owner = "ethersphere";
+    repo = "bee-clef";
+    rev = "refs/tags/v${version}";
+    sha256 = "1sfwql0kvnir8b9ggpqcyc0ar995gxgfbhqb1xpfzp6wl0g3g4zz";
+  };
+
+  buildInputs = [ go-ethereum ];
+
+  clefBinary = "${go-ethereum}/bin/clef";
+
+  patches = [
+    ./0001-clef-service-accept-default-CONFIGDIR-from-the-envir.patch
+    ./0002-nix-diff-for-substituteAll.patch
+  ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/bin/
+    mkdir -p $out/share/bee-clef/
+    mkdir -p $out/lib/systemd/system/
+    cp packaging/bee-clef.service $out/lib/systemd/system/
+    substituteAll packaging/bee-clef-service $out/share/bee-clef/bee-clef-service
+    substituteAll ${./ensure-clef-account} $out/share/bee-clef/ensure-clef-account
+    substituteAll packaging/bee-clef-keys $out/bin/bee-clef-keys
+    cp packaging/rules.js packaging/4byte.json $out/share/bee-clef/
+    chmod +x $out/bin/bee-clef-keys
+    chmod +x $out/share/bee-clef/bee-clef-service
+    chmod +x $out/share/bee-clef/ensure-clef-account
+    patchShebangs $out/
+  '';
+
+  meta = with lib; {
+    # homepage = "https://gateway.ethswarm.org/bzz/docs.swarm.eth/docs/installation/bee-clef/";
+    homepage = "https://docs.ethswarm.org/docs/installation/bee-clef";
+    description = "External signer for Ethereum Swarm Bee";
+    longDescription = ''
+      clef is go-ethereum's external signer.
+
+      bee-clef is a package that starts up a vanilla clef instance as a systemd service,
+      but configured in such a way that is suitable for bee (relaxed security for
+      automated operation).
+
+      This package contains the files necessary to run the bee-clef service.
+    '';
+    license = with licenses; [ bsd3 ];
+    maintainers = with maintainers; [ attila-lendvai ];
+    platforms = go-ethereum.meta.platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/bee/bee.nix b/nixpkgs/pkgs/applications/networking/bee/bee.nix
new file mode 100644
index 000000000000..f2fe81e8379f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/bee/bee.nix
@@ -0,0 +1,75 @@
+{ version ? "release", lib, fetchFromGitHub, buildGoModule }:
+
+let
+
+  versionSpec = rec {
+    unstable = rec {
+      pname = "bee-unstable";
+      version = "2021-01-30";
+      rev = "824636a2c2629c329ab10275cef6a0b7395343ad";
+      goVersionString = "g" + builtins.substring 0 7 rev;     # this seems to be some kind of standard of git describe...
+      sha256 = "0ly1yqjq29arbak8lchdradf39l5bmxpbfir6ljjc7nyqdxz0sxg";
+      vendorHash = "sha256-w5ZijaK8Adt1ZHPMmXqRWq0v0jdprRKRu03rePtZLXA=";
+    };
+    release = rec {
+      pname = "bee";
+      version = "0.5.0";
+      rev = "refs/tags/v${version}";
+      sha256 = "sha256-3Oy9RhgMPRFjUs3Dj8XUhAqoxx5BTi32OiK4Y8YEG2Q=";
+      vendorHash = "sha256-w5ZijaK8Adt1ZHPMmXqRWq0v0jdprRKRu03rePtZLXA=";
+    };
+    "0.5.0" = release;
+    "0.4.1" = rec {
+      pname = "bee";
+      version = "0.4.1";
+      rev = "refs/tags/v${version}";
+      sha256 = "1bmgbav52pcb5p7cgq9756512fzfqhjybyr0dv538plkqx47mpv7";
+      vendorHash = "sha256-UGxiCXWlIfnhRZZBMYcWXFj77pqvJkb5wOllSdQeaUg=";
+    };
+  }.${version};
+
+in
+
+buildGoModule {
+  inherit (versionSpec) pname version vendorHash;
+
+  src = fetchFromGitHub {
+    owner = "ethersphere";
+    repo = "bee";
+    inherit (versionSpec) rev sha256;
+  };
+
+  subPackages = [ "cmd/bee" ];
+
+  # no symbol table, no debug info, and pass the commit for the version string
+  ldflags = lib.optionals ( lib.hasAttr "goVersionString" versionSpec)
+    [ "-s" "-w" "-X=github.com/ethersphere/bee.commit=${versionSpec.goVersionString}" ];
+
+  # Mimic the bee Makefile: without disabling CGO, two (transitive and
+  # unused) dependencies would fail to compile.
+  preBuild = ''
+    export CGO_ENABLED=0
+  '';
+
+  postInstall = ''
+    mkdir -p $out/lib/systemd/system
+    cp packaging/bee.service $out/lib/systemd/system/
+    cp packaging/bee-get-addr $out/bin/
+    chmod +x $out/bin/bee-get-addr
+    patchShebangs $out/bin/
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/ethersphere/bee";
+    description = "Ethereum Swarm Bee";
+    longDescription = ''
+      A decentralised storage and communication system for a sovereign digital society.
+
+      Swarm is a system of peer-to-peer networked nodes that create a decentralised storage and communication service. The system is economically self-sustaining due to a built-in incentive system enforced through smart contracts on the Ethereum blockchain.
+
+      Bee is a Swarm node implementation, written in Go.
+    '';
+    license = with licenses; [ bsd3 ];
+    maintainers = with maintainers; [ attila-lendvai ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/bee/ensure-clef-account b/nixpkgs/pkgs/applications/networking/bee/ensure-clef-account
new file mode 100644
index 000000000000..def67ff9cc33
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/bee/ensure-clef-account
@@ -0,0 +1,47 @@
+#!/usr/bin/env sh
+
+set -e
+
+# NOTE This file is called by the systemd service in its preStart
+# hook, but it's not Nix specific in any way. Ideally, the same file
+# should be called from the postinst scripts of the other packages,
+# but... the world is not ideal.
+
+# What follows was extracted from, and should be in sync with
+# https://github.com/ethersphere/bee-clef/tree/master/packaging
+
+DATA_DIR="$1"
+CONFIG_DIR="$2"
+PASSWORD_FILE=${DATA_DIR}/password
+MASTERSEED=${DATA_DIR}/masterseed.json
+KEYSTORE=${DATA_DIR}/keystore
+
+echo "ensure-clef-account $DATA_DIR $CONFIG_DIR"
+
+if ! test -f ${PASSWORD_FILE}; then
+    < /dev/urandom tr -dc _A-Z-a-z-0-9 2> /dev/null | head -c32 > ${PASSWORD_FILE}
+    chmod 0400 ${PASSWORD_FILE}
+    echo "Initialized ${PASSWORD_FILE} from /dev/urandom"
+fi
+
+if ! test -f ${MASTERSEED}; then
+    parse_json() { echo $1|sed -e 's/[{}]/''/g'|sed -e 's/", "/'\",\"'/g'|sed -e 's/" ,"/'\",\"'/g'|sed -e 's/" , "/'\",\"'/g'|sed -e 's/","/'\"---SEPERATOR---\"'/g'|awk -F=':' -v RS='---SEPERATOR---' "\$1~/\"$2\"/ {print}"|sed -e "s/\"$2\"://"|tr -d "\n\t"|sed -e 's/\\"/"/g'|sed -e 's/\\\\/\\/g'|sed -e 's/^[ \t]*//g'|sed -e 's/^"//' -e 's/"$//' ; }
+    SECRET=$(cat ${PASSWORD_FILE})
+    CLEF="@clefBinary@ --configdir ${DATA_DIR} --keystore ${KEYSTORE} --stdio-ui"
+    $CLEF init >/dev/null << EOF
+$SECRET
+$SECRET
+EOF
+    $CLEF newaccount >/dev/null << EOF
+$SECRET
+EOF
+    $CLEF setpw 0x$(parse_json $(cat ${KEYSTORE}/*) address) >/dev/null << EOF
+$SECRET
+$SECRET
+$SECRET
+EOF
+    $CLEF attest $(sha256sum ${CONFIG_DIR}/rules.js | cut -d' ' -f1 | tr -d '\n') >/dev/null << EOF
+$SECRET
+EOF
+    echo "Clef data dir initialized"
+fi
diff --git a/nixpkgs/pkgs/applications/networking/blocky/default.nix b/nixpkgs/pkgs/applications/networking/blocky/default.nix
new file mode 100644
index 000000000000..bd07776c7df0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/blocky/default.nix
@@ -0,0 +1,35 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+, nixosTests
+}:
+
+buildGoModule rec {
+  pname = "blocky";
+  version = "0.22";
+
+  src = fetchFromGitHub {
+    owner = "0xERR0R";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-iU7fpTn8sPtglZfqLJ6fVYbHtYp0jqItSpJsvN4iKE8=";
+  };
+
+  # needs network connection and fails at
+  # https://github.com/0xERR0R/blocky/blob/development/resolver/upstream_resolver_test.go
+  doCheck = false;
+
+  vendorHash = "sha256-PnqpDAbHCs1wFudYy+nyG+p/E6ig7ZuhbuU4CFFoiyk=";
+
+  ldflags = [ "-s" "-w" "-X github.com/0xERR0R/blocky/util.Version=${version}" ];
+
+  passthru.tests = { inherit (nixosTests) blocky; };
+
+  meta = with lib; {
+    description = "Fast and lightweight DNS proxy as ad-blocker for local network with many features.";
+    homepage = "https://0xerr0r.github.io/blocky";
+    changelog = "https://github.com/0xERR0R/blocky/releases";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ratsclub ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/breitbandmessung/default.nix b/nixpkgs/pkgs/applications/networking/breitbandmessung/default.nix
new file mode 100644
index 000000000000..09ec430e6548
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/breitbandmessung/default.nix
@@ -0,0 +1,94 @@
+{ lib
+, stdenv
+, fetchurl
+, asar
+, dpkg
+, electron_24
+, makeWrapper
+, nixosTests
+, undmg
+}:
+
+let
+  inherit (stdenv.hostPlatform) system;
+
+  version = "3.3.0";
+
+  systemArgs = rec {
+    x86_64-linux = rec {
+      src = fetchurl {
+        url = "https://download.breitbandmessung.de/bbm/Breitbandmessung-${version}-linux.deb";
+        sha256 = "sha256-12mbdxklje9msnRtNk1RAtIg3OCybev/vUersDZj2i4=";
+      };
+
+      nativeBuildInputs = [
+        asar
+        dpkg
+        makeWrapper
+      ];
+
+      unpackPhase = "dpkg-deb -x $src .";
+
+      installPhase = ''
+        mkdir -p $out/bin
+        mv usr/share $out/share
+        mkdir -p $out/share/breitbandmessung/resources
+
+        asar e opt/Breitbandmessung/resources/app.asar $out/share/breitbandmessung/resources
+
+        # At first start, the program checks for supported operating systems by using the `bizzby-lsb-release`
+        # module and only runs when it finds Debian/Ubuntu. So we present us as Debian and make it happy.
+        cat <<EOF > $out/share/breitbandmessung/resources/node_modules/bizzby-lsb-release/lib/lsb-release.js
+        module.exports = function release() {
+          return {
+            distributorID: "Debian",
+            description: "Debian GNU/Linux 10 (buster)",
+            release: "10",
+            codename: "buster"
+          }
+        }
+        EOF
+
+        makeWrapper ${electron_24}/bin/electron $out/bin/breitbandmessung \
+          --add-flags $out/share/breitbandmessung/resources/build/electron.js
+
+        # Fix the desktop link
+        substituteInPlace $out/share/applications/breitbandmessung.desktop \
+          --replace /opt/Breitbandmessung $out/bin
+      '';
+    };
+
+    x86_64-darwin = {
+      src = fetchurl {
+        url = "https://download.breitbandmessung.de/bbm/Breitbandmessung-${version}-mac.dmg";
+        sha256 = "sha256-a27R/N13i4qU2znTKz+LGxSdgSzJ0MzIHeiPHyRd65k=";
+      };
+
+      nativeBuildInputs = [ undmg ];
+
+      installPhase = ''
+        runHook preInstall
+        mkdir -p $out/Applications/Breitbandmessung.app
+        cp -R . $out/Applications/Breitbandmessung.app
+        runHook postInstall
+      '';
+    };
+
+    aarch64-darwin = x86_64-darwin;
+  }.${system} or { src = throw "Unsupported system: ${system}"; };
+in
+stdenv.mkDerivation ({
+  pname = "breitbandmessung";
+  inherit version;
+
+  passthru.tests = { inherit (nixosTests) breitbandmessung; };
+
+  meta = with lib; {
+    description = "Broadband internet speed test app from the german Bundesnetzagentur";
+    homepage = "https://www.breitbandmessung.de";
+    license = licenses.unfree;
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    maintainers = with maintainers; [ b4dm4n ];
+    platforms = [ "x86_64-linux" "x86_64-darwin" "aarch64-darwin" ];
+  };
+} // systemArgs)
diff --git a/nixpkgs/pkgs/applications/networking/brig/default.nix b/nixpkgs/pkgs/applications/networking/brig/default.nix
new file mode 100644
index 000000000000..d049ed4e3893
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/brig/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "brig";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = "sahib";
+    repo = "brig";
+    rev = "v${version}";
+    sha256 = "0gi39jmnzqrgj146yw8lcmgmvzx7ii1dgw4iqig7kx8c0jiqi600";
+  };
+
+  vendorSha256 = null;
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  subPackages = [ "." ];
+
+  ldflags = [ "-s" "-w" ] ++ (with lib;
+    mapAttrsToList (n: v: "-X github.com/sahib/brig/version.${n}=${v}")
+      (with versions; {
+        Major = major version;
+        Minor = minor version;
+        Patch = patch version;
+        ReleaseType = "";
+        BuildTime = "1970-01-01T00:00:00+0000";
+        GitRev = src.rev;
+      }));
+
+  postInstall = ''
+    installShellCompletion --cmd brig \
+      --bash $src/autocomplete/bash_autocomplete \
+      --zsh $src/autocomplete/zsh_autocomplete
+  '';
+
+  # There are no tests for the brig executable.
+  doCheck = false;
+
+  meta = with lib; {
+    description = "File synchronization on top of IPFS with a git-like interface and a FUSE filesystem";
+    longDescription = ''
+      brig is a distributed and secure file synchronization tool with a version
+      control system. It is based on IPFS, written in Go and will feel familiar
+      to git users. Think of it as a swiss army knife for file synchronization
+      or as a peer to peer alternative to Dropbox.
+    '';
+    homepage = "https://brig.readthedocs.io";
+    changelog = "https://github.com/sahib/brig/releases/tag/${src.rev}";
+    license = licenses.agpl3;
+    maintainers = with maintainers; [ offline ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/amfora/default.nix b/nixpkgs/pkgs/applications/networking/browsers/amfora/default.nix
new file mode 100644
index 000000000000..7fd29f1a3942
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/amfora/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "amfora";
+  version = "1.9.2";
+
+  src = fetchFromGitHub {
+    owner = "makeworld-the-better-one";
+    repo = "amfora";
+    rev = "v${version}";
+    sha256 = "sha256-93xNzYPoy8VsbY2JyvDXt4J/gIbI2wzrCD83JUaP150=";
+  };
+
+  vendorHash = "sha256-XtiGj2Tr6sSBduIjBspeZpYaSTd6x6EVf3VEVMXDAD0=";
+
+  postInstall = lib.optionalString (!stdenv.isDarwin) ''
+    sed -i "s:amfora:$out/bin/amfora:" amfora.desktop
+    install -Dm644 amfora.desktop -t $out/share/applications
+  '';
+
+  meta = with lib; {
+    description = "A fancy terminal browser for the Gemini protocol";
+    homepage = "https://github.com/makeworld-the-better-one/amfora";
+    license = with licenses; [ gpl3 ];
+    maintainers = with maintainers; [ deifactor ];
+    changelog = "https://github.com/makeworld-the-better-one/amfora/blob/v${version}/CHANGELOG.md";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/asuka/default.nix b/nixpkgs/pkgs/applications/networking/browsers/asuka/default.nix
new file mode 100644
index 000000000000..a89d2bb36e87
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/asuka/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, rustPlatform, fetchFromSourcehut, pkg-config, ncurses, openssl, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "asuka";
+  version = "0.8.5";
+
+  src = fetchFromSourcehut {
+    owner = "~julienxx";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-+rj6P3ejc4Qb/uqbf3N9MqyqDT7yg9JFE0yfW/uzd6M=";
+  };
+
+  cargoSha256 = "sha256-XrFpvH3qiMvpgbH7Q+KC1zFAqJT4rjxux6Q5KLY2ufI=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ ncurses openssl ]
+    ++ lib.optional stdenv.isDarwin Security;
+
+  meta = with lib; {
+    description = "Gemini Project client written in Rust with NCurses";
+    homepage = "https://git.sr.ht/~julienxx/asuka";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ sikmir ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/av-98/default.nix b/nixpkgs/pkgs/applications/networking/browsers/av-98/default.nix
new file mode 100644
index 000000000000..afd2e9b9c1a7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/av-98/default.nix
@@ -0,0 +1,25 @@
+{ lib, python3Packages, fetchgit }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "av-98";
+  version = "1.0.2dev";
+
+  src = fetchgit {
+    url = "https://tildegit.org/solderpunk/AV-98.git";
+    rev = "96cf8e13fe5714c8cdc754f51eef9f0293b8ca1f";
+    sha256 = "09iskh33hl5aaif763j1fmbz7yvf0yqsxycfd41scj7vbwdsbxl0";
+  };
+
+  propagatedBuildInputs = with python3Packages; [ ansiwrap cryptography ];
+
+  # No tests are available
+  doCheck = false;
+  pythonImportsCheck = [ "av98" ];
+
+  meta = with lib; {
+    homepage = "https://tildegit.org/solderpunk/AV-98";
+    description = "Experimental console client for the Gemini protocol";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ ehmry ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/badwolf/default.nix b/nixpkgs/pkgs/applications/networking/browsers/badwolf/default.nix
new file mode 100644
index 000000000000..41308634186d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/badwolf/default.nix
@@ -0,0 +1,38 @@
+{ stdenv
+, lib
+, fetchgit
+, pkg-config
+, wrapGAppsHook
+, webkitgtk
+, libxml2
+, glib
+, glib-networking
+, gettext
+}:
+stdenv.mkDerivation rec {
+  pname = "badwolf";
+  version = "1.2.2";
+
+  src = fetchgit {
+    url = "git://hacktivis.me/git/badwolf.git";
+    rev = "v${version}";
+    hash = "sha256-HfAsq6z+1kqMAsNxJjWJx9nd2cbv0XN4KRS8cYuhOsQ=";
+  };
+
+  preConfigure = ''
+    export PREFIX=$out
+  '';
+
+  nativeBuildInputs = [ pkg-config wrapGAppsHook ];
+
+  buildInputs = [ webkitgtk libxml2 gettext glib glib-networking ];
+
+  meta = with lib; {
+    description = "Minimalist and privacy-oriented WebKitGTK+ browser";
+    homepage = "https://hacktivis.me/projects/badwolf";
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ laalsaas ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/bombadillo/default.nix b/nixpkgs/pkgs/applications/networking/browsers/bombadillo/default.nix
new file mode 100644
index 000000000000..983f8ac1ee39
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/bombadillo/default.nix
@@ -0,0 +1,29 @@
+{ lib, fetchgit, buildGoModule, installShellFiles }:
+
+buildGoModule rec {
+  pname = "bombadillo";
+  version = "2.4.0";
+
+  src = fetchgit {
+    url = "https://tildegit.org/sloum/bombadillo.git";
+    rev = version;
+    sha256 = "sha256-FjU9AyRAdGFr1bVpkmj5STkbzCXvpxOaOj7WNQJq7A0=";
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  vendorSha256 = null;
+
+  outputs = [ "out" "man" ];
+
+  postInstall = ''
+    installManPage bombadillo.1
+  '';
+
+  meta = with lib; {
+    description = "Non-web client for the terminal, supporting Gopher, Gemini and more";
+    homepage = "https://bombadillo.colorfield.space/";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ ehmry ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/brave/default.nix b/nixpkgs/pkgs/applications/networking/browsers/brave/default.nix
new file mode 100644
index 000000000000..5fa70bd098d6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/brave/default.nix
@@ -0,0 +1,210 @@
+{ lib, stdenv, fetchurl, wrapGAppsHook, makeWrapper
+, alsa-lib
+, at-spi2-atk
+, at-spi2-core
+, atk
+, cairo
+, cups
+, dbus
+, dpkg
+, expat
+, fontconfig
+, freetype
+, gdk-pixbuf
+, glib
+, gnome
+, gsettings-desktop-schemas
+, gtk3
+, libX11
+, libXScrnSaver
+, libXcomposite
+, libXcursor
+, libXdamage
+, libXext
+, libXfixes
+, libXi
+, libXrandr
+, libXrender
+, libXtst
+, libdrm
+, libkrb5
+, libuuid
+, libxkbcommon
+, libxshmfence
+, mesa
+, nspr
+, nss
+, pango
+, pipewire
+, snappy
+, udev
+, wayland
+, xdg-utils
+, xorg
+, zlib
+
+# command line arguments which are always set e.g "--disable-gpu"
+, commandLineArgs ? ""
+
+# Necessary for USB audio devices.
+, pulseSupport ? stdenv.isLinux
+, libpulseaudio
+
+# For GPU acceleration support on Wayland (without the lib it doesn't seem to work)
+, libGL
+
+# For video acceleration via VA-API (--enable-features=VaapiVideoDecoder,VaapiVideoEncoder)
+, libvaSupport ? stdenv.isLinux
+, libva
+, enableVideoAcceleration ? libvaSupport
+
+# For Vulkan support (--enable-features=Vulkan); disabled by default as it seems to break VA-API
+, vulkanSupport ? false
+, addOpenGLRunpath
+, enableVulkan ? vulkanSupport
+}:
+
+let
+  inherit (lib) optional optionals makeLibraryPath makeSearchPathOutput makeBinPath
+    optionalString strings escapeShellArg;
+
+  deps = [
+    alsa-lib at-spi2-atk at-spi2-core atk cairo cups dbus expat
+    fontconfig freetype gdk-pixbuf glib gtk3 libdrm libX11 libGL
+    libxkbcommon libXScrnSaver libXcomposite libXcursor libXdamage
+    libXext libXfixes libXi libXrandr libXrender libxshmfence
+    libXtst libuuid mesa nspr nss pango pipewire udev wayland
+    xorg.libxcb zlib snappy libkrb5
+  ]
+    ++ optional pulseSupport libpulseaudio
+    ++ optional libvaSupport libva;
+
+  rpath = makeLibraryPath deps + ":" + makeSearchPathOutput "lib" "lib64" deps;
+  binpath = makeBinPath deps;
+
+  enableFeatures = optionals enableVideoAcceleration [ "VaapiVideoDecoder" "VaapiVideoEncoder" ]
+    ++ optional enableVulkan "Vulkan";
+
+    # The feature disable is needed for VAAPI to work correctly: https://github.com/brave/brave-browser/issues/20935
+  disableFeatures = optional enableVideoAcceleration "UseChromeOSDirectVideoDecoder";
+in
+
+stdenv.mkDerivation rec {
+  pname = "brave";
+  version = "1.57.62";
+
+  src = fetchurl {
+    url = "https://github.com/brave/brave-browser/releases/download/v${version}/brave-browser_${version}_amd64.deb";
+    sha256 = "sha256-98zhLxlV/pe5fownqQ3k165YfcoLLxz2vBM/4FEq8ug=";
+  };
+
+  dontConfigure = true;
+  dontBuild = true;
+  dontPatchELF = true;
+  doInstallCheck = true;
+
+  nativeBuildInputs = [
+    dpkg
+    (wrapGAppsHook.override { inherit makeWrapper; })
+  ];
+
+  buildInputs = [
+    # needed for GSETTINGS_SCHEMAS_PATH
+    glib gsettings-desktop-schemas gtk3
+
+    # needed for XDG_ICON_DIRS
+    gnome.adwaita-icon-theme
+  ];
+
+  unpackPhase = "dpkg-deb --fsys-tarfile $src | tar -x --no-same-permissions --no-same-owner";
+
+  installPhase = ''
+      runHook preInstall
+
+      mkdir -p $out $out/bin
+
+      cp -R usr/share $out
+      cp -R opt/ $out/opt
+
+      export BINARYWRAPPER=$out/opt/brave.com/brave/brave-browser
+
+      # Fix path to bash in $BINARYWRAPPER
+      substituteInPlace $BINARYWRAPPER \
+          --replace /bin/bash ${stdenv.shell}
+
+      ln -sf $BINARYWRAPPER $out/bin/brave
+
+      for exe in $out/opt/brave.com/brave/{brave,chrome_crashpad_handler}; do
+          patchelf \
+              --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+              --set-rpath "${rpath}" $exe
+      done
+
+      # Fix paths
+      substituteInPlace $out/share/applications/brave-browser.desktop \
+          --replace /usr/bin/brave-browser-stable $out/bin/brave
+      substituteInPlace $out/share/gnome-control-center/default-apps/brave-browser.xml \
+          --replace /opt/brave.com $out/opt/brave.com
+      substituteInPlace $out/share/menu/brave-browser.menu \
+          --replace /opt/brave.com $out/opt/brave.com
+      substituteInPlace $out/opt/brave.com/brave/default-app-block \
+          --replace /opt/brave.com $out/opt/brave.com
+
+      # Correct icons location
+      icon_sizes=("16" "24" "32" "48" "64" "128" "256")
+
+      for icon in ''${icon_sizes[*]}
+      do
+          mkdir -p $out/share/icons/hicolor/$icon\x$icon/apps
+          ln -s $out/opt/brave.com/brave/product_logo_$icon.png $out/share/icons/hicolor/$icon\x$icon/apps/brave-browser.png
+      done
+
+      # Replace xdg-settings and xdg-mime
+      ln -sf ${xdg-utils}/bin/xdg-settings $out/opt/brave.com/brave/xdg-settings
+      ln -sf ${xdg-utils}/bin/xdg-mime $out/opt/brave.com/brave/xdg-mime
+
+      runHook postInstall
+  '';
+
+  preFixup = ''
+    # Add command line args to wrapGApp.
+    gappsWrapperArgs+=(
+      --prefix LD_LIBRARY_PATH : ${rpath}
+      --prefix PATH : ${binpath}
+      --suffix PATH : ${lib.makeBinPath [ xdg-utils ]}
+      ${optionalString (enableFeatures != []) ''
+      --add-flags "--enable-features=${strings.concatStringsSep "," enableFeatures}"
+      ''}
+      ${optionalString (disableFeatures != []) ''
+      --add-flags "--disable-features=${strings.concatStringsSep "," disableFeatures}"
+      ''}
+      --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}"
+      ${optionalString vulkanSupport ''
+      --prefix XDG_DATA_DIRS  : "${addOpenGLRunpath.driverLink}/share"
+      ''}
+      --add-flags ${escapeShellArg commandLineArgs}
+    )
+  '';
+
+  installCheckPhase = ''
+    # Bypass upstream wrapper which suppresses errors
+    $out/opt/brave.com/brave/brave --version
+  '';
+
+  passthru.updateScript = ./update.sh;
+
+  meta = with lib; {
+    homepage = "https://brave.com/";
+    description = "Privacy-oriented browser for Desktop and Laptop computers";
+    changelog = "https://github.com/brave/brave-browser/blob/master/CHANGELOG_DESKTOP.md#" + replaceStrings [ "." ] [ "" ] version;
+    longDescription = ''
+      Brave browser blocks the ads and trackers that slow you down,
+      chew up your bandwidth, and invade your privacy. Brave lets you
+      contribute to your favorite creators automatically.
+    '';
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ uskudnik rht jefflabonte nasirhm ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/brave/update.sh b/nixpkgs/pkgs/applications/networking/browsers/brave/update.sh
new file mode 100755
index 000000000000..b7d974ad259d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/brave/update.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl gnused common-updater-scripts
+
+version="$(curl -sL https://brave-browser-apt-release.s3.brave.com/dists/stable/main/binary-amd64/Packages | sed -r -n 's/^Version: (.*)/\1/p' | head -n1)"
+update-source-version brave "$version"
diff --git a/nixpkgs/pkgs/applications/networking/browsers/browsh/default.nix b/nixpkgs/pkgs/applications/networking/browsers/browsh/default.nix
new file mode 100644
index 000000000000..ee04f9ed04dc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/browsh/default.nix
@@ -0,0 +1,46 @@
+{ lib, buildGoModule, fetchurl, fetchFromGitHub }:
+
+let
+  version = "1.8.2";
+
+  # TODO: must build the extension instead of downloading it. But since it's
+  # literally an asset that is indifferent regardless of the platform, this
+  # might be just enough.
+  webext = fetchurl {
+    url = "https://github.com/browsh-org/browsh/releases/download/v${version}/browsh-${version}.xpi";
+    hash = "sha256-04rLyQt8co3Z7UJnDJmj++E4n7of0Zh1jQ90Bfwnx5A=";
+  };
+
+in
+
+buildGoModule rec {
+  inherit version;
+
+  pname = "browsh";
+
+  sourceRoot = "${src.name}/interfacer";
+
+  src = fetchFromGitHub {
+    owner = "browsh-org";
+    repo = "browsh";
+    rev = "v${version}";
+    hash = "sha256-KbBVcNuERBL94LuRx872zpjQTzR6c5GalsBoNR52SuQ=";
+  };
+
+  vendorHash = "sha256-eCvV3UuM/JtCgMqvwvqWF3bpOmPSos5Pfhu6ETaS58c=";
+
+  preBuild = ''
+    cp "${webext}" src/browsh/browsh.xpi
+  '';
+
+  # Tests require network access
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A fully-modern text-based browser, rendering to TTY and browsers";
+    homepage = "https://www.brow.sh/";
+    maintainers = with maintainers; [ kalbasit siraben ];
+    license = lib.licenses.lgpl21;
+    platforms = lib.platforms.linux ++ lib.platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/captive-browser/default.nix b/nixpkgs/pkgs/applications/networking/browsers/captive-browser/default.nix
new file mode 100644
index 000000000000..ec24158635ee
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/captive-browser/default.nix
@@ -0,0 +1,33 @@
+{ lib, fetchFromGitHub, buildGoModule, fetchpatch }:
+
+buildGoModule rec {
+  pname = "captive-browser";
+  version = "unstable-2021-08-01";
+
+  src = fetchFromGitHub {
+    owner = "FiloSottile";
+    repo = "captive-browser";
+    rev = "9c707dc32afc6e4146e19b43a3406329c64b6f3c";
+    sha256 = "sha256-65lPo5tpE0M/VyyvlzlcVSuHX4AhhVuqK0UF4BIAH/Y=";
+  };
+
+  vendorHash = "sha256-2MFdQ2GIDAdLPuwAiGPO9wU3mm2BDXdyTwoVA1xVlcQ=";
+  deleteVendor = true;
+
+  patches = [
+    # Add go modules support
+    (fetchpatch {
+      url = "https://github.com/FiloSottile/captive-browser/commit/ef50837778ef4eaf38b19887e79c8b6fa830c342.patch";
+      hash = "sha256-w+jDFeO94pMu4ir+G5CzqYlXxYOm9+YfyzbU3sbTyiY=";
+    })
+  ];
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Dedicated Chrome instance to log into captive portals without messing with DNS settings";
+    homepage = "https://blog.filippo.io/captive-browser";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ma27 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/castor/default.nix b/nixpkgs/pkgs/applications/networking/browsers/castor/default.nix
new file mode 100644
index 000000000000..6a898fb0c95d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/castor/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, fetchFromSourcehut
+, rustPlatform
+, pkg-config
+, wrapGAppsHook
+, openssl
+, gtk3
+, gdk-pixbuf
+, pango
+, atk
+, cairo
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "castor";
+  version = "0.9.0";
+
+  src = fetchFromSourcehut {
+    owner = "~julienxx";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-yYLDbxmUR86fdpbHQQTiHVUbicnOD75cl3Vhofw5qr0=";
+  };
+
+  cargoSha256 = "sha256-AHhKfy2AAcDBcknzNb8DAzm51RQqFQDuWN+Hp5731Yk=";
+
+  nativeBuildInputs = [
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    openssl
+    gtk3
+    gdk-pixbuf
+    pango
+    atk
+    cairo
+  ];
+
+  postInstall = "make PREFIX=$out copy-data";
+
+  useNextest = true;
+
+  meta = with lib; {
+    description = "A graphical client for plain-text protocols written in Rust with GTK. It currently supports the Gemini, Gopher and Finger protocols";
+    homepage = "https://sr.ht/~julienxx/Castor";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fgaz ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/chromium/README.md b/nixpkgs/pkgs/applications/networking/browsers/chromium/README.md
new file mode 100644
index 000000000000..c5a537147c48
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/chromium/README.md
@@ -0,0 +1,109 @@
+# Maintainers
+
+- Note: We could always use more contributors, testers, etc. E.g.:
+  - A dedicated maintainer for the NixOS stable channel
+  - PRs with cleanups, improvements, fixes, etc. (but please try to make reviews
+    as easy as possible)
+  - People who handle stale issues/PRs
+- Primary maintainer (responsible for all updates): @primeos
+- Testers (test all stable channel updates)
+  - `nixos-unstable`:
+    - `x86_64`: @danielfullmer
+    - `aarch64`: @thefloweringash
+  - Stable channel:
+    - `x86_64`: @Frostman
+- Other relevant packages:
+  - `chromiumBeta` and `chromiumDev`: For testing purposes only (not build on
+    Hydra). We use these channels for testing and to fix build errors in advance
+    so that `chromium` updates are trivial and can be merged fast.
+  - `google-chrome`, `google-chrome-beta`, `google-chrome-dev`: Updated via
+    Chromium's `upstream-info.nix`
+  - `ungoogled-chromium`: @squalus
+  - `chromedriver`: Updated via Chromium's `upstream-info.nix` and not built
+    from source.
+
+# Upstream links
+
+- Source code: https://source.chromium.org/chromium/chromium/src
+- Bugs: https://bugs.chromium.org/p/chromium/issues/list
+- Release updates: https://chromereleases.googleblog.com/
+  - Available as Atom or RSS feed (filter for
+    "Stable Channel Update for Desktop")
+  - Release API: https://developer.chrome.com/docs/versionhistory/guide/
+  - Release schedule: https://chromiumdash.appspot.com/schedule
+
+# Updating Chromium
+
+Simply run `./pkgs/applications/networking/browsers/chromium/update.py` to
+update `upstream-info.nix`. After updates it is important to test at least
+`nixosTests.chromium` (or basic manual testing) and `google-chrome` (which
+reuses `upstream-info.nix`).
+
+Note: Due to the script downloading many large tarballs it might be
+necessary to adjust the available tmpfs size (it defaults to 10% of the
+systems memory)
+
+```nix
+services.logind.extraConfig = ''
+  RuntimeDirectorySize=4G
+'';
+```
+
+Note: The source tarball is often only available a few hours after the release
+was announced. The CI/CD status can be tracked here:
+- https://ci.chromium.org/p/infra/builders/cron/publish_tarball
+- https://ci.chromium.org/p/infra/builders/cron/publish_tarball_dispatcher
+
+To run all automated NixOS VM tests for Chromium, ungoogled-chromium,
+and Google Chrome (not recommended, currently 6x tests!):
+```
+nix-build nixos/tests/chromium.nix
+```
+
+A single test can be selected, e.g. to test `ungoogled-chromium` (see
+`channelMap` in `nixos/tests/chromium.nix` for all available options):
+```
+nix-build nixos/tests/chromium.nix -A ungoogled
+```
+(Note: Testing Google Chrome requires `export NIXPKGS_ALLOW_UNFREE=1`.)
+
+For custom builds it's possible to "override" `channelMap`.
+
+## Backports
+
+All updates are considered security critical and should be ported to the stable
+channel ASAP. When there is a new stable release the old one should receive
+security updates for roughly one month. After that it is important to mark
+Chromium as insecure (see 69e4ae56c4b for an example; it is important that the
+tested job still succeeds and that all browsers that use `upstream-info.nix`
+are marked as insecure).
+
+## Major version updates
+
+Unfortunately, Chromium regularly breaks on major updates and might need
+various patches. Either due to issues with the Nix build sandbox (e.g. we cannot
+fetch dependencies via the network and do not use standard FHS paths) or due to
+missing upstream fixes that need to be backported.
+
+Good sources for such patches and other hints:
+- https://github.com/archlinux/svntogit-packages/tree/packages/chromium/trunk
+- https://gitweb.gentoo.org/repo/gentoo.git/tree/www-client/chromium
+- https://src.fedoraproject.org/rpms/chromium/tree/master
+
+If the build fails immediately due to unknown compiler flags this usually means
+that a new major release of LLVM is required.
+
+## Beta and Dev channels
+
+Those channels are only used to test and fix builds in advance. They may be
+broken at times and must not delay stable channel updates.
+
+# Testing
+
+Useful tests:
+- Version: chrome://version/
+- GPU acceleration: chrome://gpu/
+- Essential functionality: Browsing, extensions, video+audio, JS, ...
+- WebGL: https://get.webgl.org/
+- VA-API: https://wiki.archlinux.org/index.php/chromium#Hardware_video_acceleration
+- Optional: Widevine CDM (proprietary), Benchmarks, Ozone, etc.
diff --git a/nixpkgs/pkgs/applications/networking/browsers/chromium/browser.nix b/nixpkgs/pkgs/applications/networking/browsers/chromium/browser.nix
new file mode 100644
index 000000000000..1e203fc12e75
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/chromium/browser.nix
@@ -0,0 +1,96 @@
+{ lib, mkChromiumDerivation
+, channel, chromiumVersionAtLeast
+, enableWideVine, ungoogled
+}:
+
+mkChromiumDerivation (base: rec {
+  name = "chromium-browser";
+  packageName = "chromium";
+  buildTargets = [ "run_mksnapshot_default" "chrome_sandbox" "chrome" ];
+
+  outputs = ["out" "sandbox"];
+
+  sandboxExecutableName = "__chromium-suid-sandbox";
+
+  installPhase = ''
+    mkdir -p "$libExecPath"
+    cp -v "$buildPath/"*.so "$buildPath/"*.pak "$buildPath/"*.bin "$libExecPath/"
+    cp -v "$buildPath/libvulkan.so.1" "$libExecPath/"
+    cp -v "$buildPath/vk_swiftshader_icd.json" "$libExecPath/"
+    cp -v "$buildPath/icudtl.dat" "$libExecPath/"
+    cp -vLR "$buildPath/locales" "$buildPath/resources" "$libExecPath/"
+    cp -v "$buildPath/chrome_crashpad_handler" "$libExecPath/"
+    cp -v "$buildPath/chrome" "$libExecPath/$packageName"
+
+    # Swiftshader
+    # See https://stackoverflow.com/a/4264351/263061 for the find invocation.
+    if [ -n "$(find "$buildPath/swiftshader/" -maxdepth 1 -name '*.so' -print -quit)" ]; then
+      echo "Swiftshader files found; installing"
+      mkdir -p "$libExecPath/swiftshader"
+      cp -v "$buildPath/swiftshader/"*.so "$libExecPath/swiftshader/"
+    else
+      echo "Swiftshader files not found"
+    fi
+
+    mkdir -p "$sandbox/bin"
+    cp -v "$buildPath/chrome_sandbox" "$sandbox/bin/${sandboxExecutableName}"
+
+    mkdir -vp "$out/share/man/man1"
+    cp -v "$buildPath/chrome.1" "$out/share/man/man1/$packageName.1"
+
+    for icon_file in chrome/app/theme/chromium/product_logo_*[0-9].png; do
+      num_and_suffix="''${icon_file##*logo_}"
+      icon_size="''${num_and_suffix%.*}"
+      expr "$icon_size" : "^[0-9][0-9]*$" || continue
+      logo_output_prefix="$out/share/icons/hicolor"
+      logo_output_path="$logo_output_prefix/''${icon_size}x''${icon_size}/apps"
+      mkdir -vp "$logo_output_path"
+      cp -v "$icon_file" "$logo_output_path/$packageName.png"
+    done
+
+    # Install Desktop Entry
+    install -D chrome/installer/linux/common/desktop.template \
+      $out/share/applications/chromium-browser.desktop
+
+    substituteInPlace $out/share/applications/chromium-browser.desktop \
+      --replace "@@MENUNAME@@" "Chromium" \
+      --replace "@@PACKAGE@@" "chromium" \
+      --replace "Exec=/usr/bin/@@USR_BIN_SYMLINK_NAME@@" "Exec=chromium"
+
+    # Append more mime types to the end
+    sed -i '/^MimeType=/ s,$,x-scheme-handler/webcal;x-scheme-handler/mailto;x-scheme-handler/about;x-scheme-handler/unknown,' \
+      $out/share/applications/chromium-browser.desktop
+
+    # See https://github.com/NixOS/nixpkgs/issues/12433
+    sed -i \
+      -e '/\[Desktop Entry\]/a\' \
+      -e 'StartupWMClass=chromium-browser' \
+      $out/share/applications/chromium-browser.desktop
+  '';
+
+  passthru = { inherit sandboxExecutableName; };
+
+  requiredSystemFeatures = [ "big-parallel" ];
+
+  meta = {
+    description = "An open source web browser from Google"
+      + lib.optionalString ungoogled ", with dependencies on Google web services removed";
+    longDescription = ''
+      Chromium is an open source web browser from Google that aims to build a
+      safer, faster, and more stable way for all Internet users to experience
+      the web. It has a minimalist user interface and provides the vast majority
+      of source code for Google Chrome (which has some additional features).
+    '';
+    homepage = if ungoogled
+      then "https://github.com/ungoogled-software/ungoogled-chromium"
+      else "https://www.chromium.org/";
+    maintainers = with lib.maintainers; if ungoogled
+      then [ squalus primeos michaeladler networkexception ]
+      else [ primeos thefloweringash networkexception ];
+    license = if enableWideVine then lib.licenses.unfree else lib.licenses.bsd3;
+    platforms = lib.platforms.linux;
+    mainProgram = "chromium";
+    hydraPlatforms = lib.optionals (channel == "stable" || channel == "ungoogled-chromium") ["aarch64-linux" "x86_64-linux"];
+    timeout = 172800; # 48 hours (increased from the Hydra default of 10h)
+  };
+})
diff --git a/nixpkgs/pkgs/applications/networking/browsers/chromium/common.nix b/nixpkgs/pkgs/applications/networking/browsers/chromium/common.nix
new file mode 100644
index 000000000000..6d24f18ec94c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/chromium/common.nix
@@ -0,0 +1,467 @@
+{ stdenv, lib, fetchurl, fetchpatch
+, buildPackages
+, pkgsBuildBuild
+, pkgsBuildTarget
+# Channel data:
+, channel, upstream-info
+# Helper functions:
+, chromiumVersionAtLeast, versionRange
+
+# Native build inputs:
+, ninja, pkg-config
+, python3, perl
+, which
+, llvmPackages_attrName
+, rustc
+, libuuid
+, overrideCC
+# postPatch:
+, pkgsBuildHost
+# configurePhase:
+, gnChromium
+
+# Build inputs:
+, libpng
+, bzip2, flac, speex, libopus
+, libevent, expat, libjpeg, snappy
+, libcap
+, xdg-utils, minizip, libwebp
+, libusb1, re2
+, ffmpeg, libxslt, libxml2
+, nasm
+, nspr, nss
+, util-linux, alsa-lib
+, bison, gperf, libkrb5
+, glib, gtk3, dbus-glib
+, libXScrnSaver, libXcursor, libXtst, libxshmfence, libGLU, libGL
+, mesa
+, pciutils, protobuf, speechd, libXdamage, at-spi2-core
+, pipewire
+, libva
+, libdrm, wayland, libxkbcommon # Ozone
+, curl
+, libffi
+, libepoxy
+, libevdev
+# postPatch:
+, glibc # gconv + locale
+# postFixup:
+, vulkan-loader
+
+# Package customization:
+, cupsSupport ? true, cups ? null
+, proprietaryCodecs ? true
+, pulseSupport ? false, libpulseaudio ? null
+, ungoogled ? false, ungoogled-chromium
+# Optional dependencies:
+, libgcrypt ? null # cupsSupport
+, systemdSupport ? lib.meta.availableOn stdenv.hostPlatform systemd
+, systemd
+}:
+
+buildFun:
+
+let
+  python3WithPackages = python3.pythonForBuild.withPackages(ps: with ps; [
+    ply jinja2 setuptools
+  ]);
+  clangFormatPython3 = fetchurl {
+    url = "https://chromium.googlesource.com/chromium/tools/build/+/e77882e0dde52c2ccf33c5570929b75b4a2a2522/recipes/recipe_modules/chromium/resources/clang-format?format=TEXT";
+    sha256 = "0ic3hn65dimgfhakli1cyf9j3cxcqsf1qib706ihfhmlzxf7256l";
+  };
+
+  # The additional attributes for creating derivations based on the chromium
+  # source tree.
+  extraAttrs = buildFun base;
+
+  githubPatch = { commit, sha256, revert ? false }: fetchpatch {
+    url = "https://github.com/chromium/chromium/commit/${commit}.patch";
+    inherit sha256 revert;
+  };
+
+  mkGnFlags =
+    let
+      # Serialize Nix types into GN types according to this document:
+      # https://source.chromium.org/gn/gn/+/master:docs/language.md
+      mkGnString = value: "\"${lib.escape ["\"" "$" "\\"] value}\"";
+      sanitize = value:
+        if value == true then "true"
+        else if value == false then "false"
+        else if lib.isList value then "[${lib.concatMapStringsSep ", " sanitize value}]"
+        else if lib.isInt value then toString value
+        else if lib.isString value then mkGnString value
+        else throw "Unsupported type for GN value `${value}'.";
+      toFlag = key: value: "${key}=${sanitize value}";
+    in attrs: lib.concatStringsSep " " (lib.attrValues (lib.mapAttrs toFlag attrs));
+
+  # https://source.chromium.org/chromium/chromium/src/+/master:build/linux/unbundle/replace_gn_files.py
+  gnSystemLibraries = [
+    # TODO:
+    # "ffmpeg"
+    # "snappy"
+    "flac"
+    "libjpeg"
+    "libpng"
+    "libwebp"
+    "libxslt"
+    # "opus"
+  ];
+
+  opusWithCustomModes = libopus.override {
+    withCustomModes = true;
+  };
+
+  # build paths and release info
+  packageName = extraAttrs.packageName or extraAttrs.name;
+  buildType = "Release";
+  buildPath = "out/${buildType}";
+  libExecPath = "$out/libexec/${packageName}";
+
+  ungoogler = ungoogled-chromium {
+    inherit (upstream-info.deps.ungoogled-patches) rev sha256;
+  };
+
+  # There currently isn't a (much) more concise way to get a stdenv
+  # that uses lld as its linker without bootstrapping pkgsLLVM; see
+  # https://github.com/NixOS/nixpkgs/issues/142901
+  buildPlatformLlvmStdenv =
+    let
+      llvmPackages = pkgsBuildBuild.${llvmPackages_attrName};
+    in
+      overrideCC llvmPackages.stdenv
+        (llvmPackages.stdenv.cc.override {
+          inherit (llvmPackages) bintools;
+        });
+
+  chromiumRosettaStone = {
+    cpu = platform:
+      let name = platform.parsed.cpu.name;
+      in ({ "x86_64" = "x64";
+            "i686" = "x86";
+            "arm" = "arm";
+            "aarch64" = "arm64";
+          }.${platform.parsed.cpu.name}
+        or (throw "no chromium Rosetta Stone entry for cpu: ${name}"));
+    os = platform:
+      if platform.isLinux
+      then "linux"
+      else throw "no chromium Rosetta Stone entry for os: ${platform.config}";
+  };
+
+  base = rec {
+    pname = "${packageName}-unwrapped";
+    inherit (upstream-info) version;
+    inherit packageName buildType buildPath;
+
+    src = fetchurl {
+      url = "https://commondatastorage.googleapis.com/chromium-browser-official/chromium-${version}.tar.xz";
+      inherit (upstream-info) sha256;
+    };
+
+    nativeBuildInputs = [
+      ninja pkg-config
+      python3WithPackages perl
+      which
+      buildPackages.${llvmPackages_attrName}.bintools
+      bison gperf
+    ];
+
+    depsBuildBuild = [
+      buildPlatformLlvmStdenv
+      buildPlatformLlvmStdenv.cc
+      pkg-config
+      libuuid
+      libpng # needed for "host/generate_colors_info"
+    ]
+    # When cross-compiling, chromium builds a huge proportion of its
+    # components for both the `buildPlatform` (which it calls
+    # `host`) as well as for the `hostPlatform` -- easily more than
+    # half of the dependencies are needed here.  To avoid having to
+    # maintain a separate list of buildPlatform-dependencies, we
+    # simply throw in the kitchen sink.
+    ++ buildInputs
+    ;
+
+    buildInputs = [
+      (libpng.override { apngSupport = false; }) # https://bugs.chromium.org/p/chromium/issues/detail?id=752403
+      bzip2 flac speex opusWithCustomModes
+      libevent expat libjpeg snappy
+      libcap
+    ] ++ lib.optionals (!xdg-utils.meta.broken) [
+      xdg-utils
+    ] ++ [
+      minizip libwebp
+      libusb1 re2
+      ffmpeg libxslt libxml2
+      nasm
+      nspr nss
+      util-linux alsa-lib
+      libkrb5
+      glib gtk3 dbus-glib
+      libXScrnSaver libXcursor libXtst libxshmfence libGLU libGL
+      mesa # required for libgbm
+      pciutils protobuf speechd libXdamage at-spi2-core
+      pipewire
+      libva
+      libdrm wayland mesa.drivers libxkbcommon
+      curl
+      libepoxy
+      libffi
+      libevdev
+    ] ++ lib.optional systemdSupport systemd
+      ++ lib.optionals cupsSupport [ libgcrypt cups ]
+      ++ lib.optional pulseSupport libpulseaudio;
+
+    patches = [
+      ./cross-compile.patch
+      # Optional patch to use SOURCE_DATE_EPOCH in compute_build_timestamp.py (should be upstreamed):
+      ./patches/no-build-timestamps.patch
+      # For bundling Widevine (DRM), might be replaceable via bundle_widevine_cdm=true in gnFlags:
+      ./patches/widevine-79.patch
+      # Required to fix the build with a more recent wayland-protocols version
+      # (we currently package 1.26 in Nixpkgs while Chromium bundles 1.21):
+      # Source: https://bugs.chromium.org/p/angleproject/issues/detail?id=7582#c1
+      ./patches/angle-wayland-include-protocol.patch
+      # We need to revert this patch to build M114+ with LLVM 16:
+      (githubPatch {
+        # Reland [clang] Disable autoupgrading debug info in ThinLTO builds
+        commit = "54969766fd2029c506befc46e9ce14d67c7ed02a";
+        sha256 = "sha256-Vryjg8kyn3cxWg3PmSwYRG6zrHOqYWBMSdEMGiaPg6M=";
+        revert = true;
+      })
+    ];
+
+    postPatch = ''
+      # Workaround/fix for https://bugs.chromium.org/p/chromium/issues/detail?id=1313361:
+      substituteInPlace BUILD.gn \
+        --replace '"//infra/orchestrator:orchestrator_all",' ""
+      # Disable build flags that require LLVM 15:
+      substituteInPlace build/config/compiler/BUILD.gn \
+        --replace '"-Xclang",' "" \
+        --replace '"-no-opaque-pointers",' ""
+      # remove unused third-party
+      for lib in ${toString gnSystemLibraries}; do
+        if [ -d "third_party/$lib" ]; then
+          find "third_party/$lib" -type f \
+            \! -path "third_party/$lib/chromium/*" \
+            \! -path "third_party/$lib/google/*" \
+            \! -path "third_party/harfbuzz-ng/utils/hb_scoped.h" \
+            \! -regex '.*\.\(gn\|gni\|isolate\)' \
+            -delete
+        fi
+      done
+
+      # Required for patchShebangs (unsupported interpreter directive, basename: invalid option -- '*', etc.):
+      substituteInPlace native_client/SConstruct --replace "#! -*- python -*-" ""
+      if [ -e third_party/harfbuzz-ng/src/src/update-unicode-tables.make ]; then
+        substituteInPlace third_party/harfbuzz-ng/src/src/update-unicode-tables.make \
+          --replace "/usr/bin/env -S make -f" "/usr/bin/make -f"
+      fi
+      chmod -x third_party/webgpu-cts/src/tools/run_deno
+      chmod -x third_party/dawn/third_party/webgpu-cts/tools/run_deno
+
+      # We want to be able to specify where the sandbox is via CHROME_DEVEL_SANDBOX
+      substituteInPlace sandbox/linux/suid/client/setuid_sandbox_host.cc \
+        --replace \
+          'return sandbox_binary;' \
+          'return base::FilePath(GetDevelSandboxPath());'
+
+      substituteInPlace services/audio/audio_sandbox_hook_linux.cc \
+        --replace \
+          '/usr/share/alsa/' \
+          '${alsa-lib}/share/alsa/' \
+        --replace \
+          '/usr/lib/x86_64-linux-gnu/gconv/' \
+          '${glibc}/lib/gconv/' \
+        --replace \
+          '/usr/share/locale/' \
+          '${glibc}/share/locale/'
+
+    '' + lib.optionalString (!xdg-utils.meta.broken) ''
+      sed -i -e 's@"\(#!\)\?.*xdg-@"\1${xdg-utils}/bin/xdg-@' \
+        chrome/browser/shell_integration_linux.cc
+
+    '' + lib.optionalString systemdSupport ''
+      sed -i -e '/lib_loader.*Load/s!"\(libudev\.so\)!"${lib.getLib systemd}/lib/\1!' \
+        device/udev_linux/udev?_loader.cc
+    '' + ''
+      sed -i -e '/libpci_loader.*Load/s!"\(libpci\.so\)!"${pciutils}/lib/\1!' \
+        gpu/config/gpu_info_collector_linux.cc
+
+      # Allow to put extensions into the system-path.
+      sed -i -e 's,/usr,/run/current-system/sw,' chrome/common/chrome_paths.cc
+
+      # We need the fix for https://bugs.chromium.org/p/chromium/issues/detail?id=1254408:
+      base64 --decode ${clangFormatPython3} > buildtools/linux64/clang-format
+
+      patchShebangs .
+      # Link to our own Node.js and Java (required during the build):
+      mkdir -p third_party/node/linux/node-linux-x64/bin
+      ln -s "${pkgsBuildHost.nodejs}/bin/node" third_party/node/linux/node-linux-x64/bin/node
+      ln -s "${pkgsBuildHost.jre8_headless}/bin/java" third_party/jdk/current/bin/
+
+      # Allow building against system libraries in official builds
+      sed -i 's/OFFICIAL_BUILD/GOOGLE_CHROME_BUILD/' tools/generate_shim_headers/generate_shim_headers.py
+
+    '' + lib.optionalString (stdenv.hostPlatform == stdenv.buildPlatform && stdenv.hostPlatform.isAarch64) ''
+      substituteInPlace build/toolchain/linux/BUILD.gn \
+        --replace 'toolprefix = "aarch64-linux-gnu-"' 'toolprefix = ""'
+    '' + lib.optionalString ungoogled ''
+      ${ungoogler}/utils/prune_binaries.py . ${ungoogler}/pruning.list || echo "some errors"
+      ${ungoogler}/utils/patches.py . ${ungoogler}/patches
+      ${ungoogler}/utils/domain_substitution.py apply -r ${ungoogler}/domain_regex.list -f ${ungoogler}/domain_substitution.list -c ./ungoogled-domsubcache.tar.gz .
+    '';
+
+    gnFlags = mkGnFlags ({
+      # Main build and toolchain settings:
+      # Create an official and optimized release build (only official builds
+      # should be distributed to users, as non-official builds are intended for
+      # development and may not be configured appropriately for production,
+      # e.g. unsafe developer builds have developer-friendly features that may
+      # weaken or disable security measures like sandboxing or ASLR):
+      is_official_build = true;
+      disable_fieldtrial_testing_config = true;
+
+      # note: chromium calls buildPlatform "host" and calls hostPlatform "target"
+      host_cpu      = chromiumRosettaStone.cpu stdenv.buildPlatform;
+      host_os       = chromiumRosettaStone.os  stdenv.buildPlatform;
+      target_cpu    = chromiumRosettaStone.cpu stdenv.hostPlatform;
+      v8_target_cpu = chromiumRosettaStone.cpu stdenv.hostPlatform;
+      target_os     = chromiumRosettaStone.os  stdenv.hostPlatform;
+
+      # Build Chromium using the system toolchain (for Linux distributions):
+      #
+      # What you would expect to be caled "target_toolchain" is
+      # actually called either "default_toolchain" or "custom_toolchain",
+      # depending on which part of the codebase you are in; see:
+      # https://github.com/chromium/chromium/blob/d36462cc9279464395aea5e65d0893d76444a296/build/config/BUILDCONFIG.gn#L17-L44
+      custom_toolchain = "//build/toolchain/linux/unbundle:default";
+      host_toolchain = "//build/toolchain/linux/unbundle:host";
+      v8_snapshot_toolchain = "//build/toolchain/linux/unbundle:host";
+
+      host_pkg_config = "${pkgsBuildBuild.pkg-config}/bin/pkg-config";
+      pkg_config      = "${pkgsBuildHost.pkg-config}/bin/${stdenv.cc.targetPrefix}pkg-config";
+
+      # Don't build against a sysroot image downloaded from Cloud Storage:
+      use_sysroot = false;
+      # Because we use a different toolchain / compiler version:
+      treat_warnings_as_errors = false;
+      # We aren't compiling with Chrome's Clang (would enable Chrome-specific
+      # plugins for enforcing coding guidelines, etc.):
+      clang_use_chrome_plugins = false;
+      # Disable symbols (they would negatively affect the performance of the
+      # build since the symbols are large and dealing with them is slow):
+      symbol_level = 0;
+      blink_symbol_level = 0;
+
+      # Google API key, see: https://www.chromium.org/developers/how-tos/api-keys
+      # Note: The API key is for NixOS/nixpkgs use ONLY.
+      # For your own distribution, please get your own set of keys.
+      google_api_key = "AIzaSyDGi15Zwl11UNe6Y-5XW_upsfyw31qwZPI";
+
+      # Optional features:
+      use_gio = true;
+      use_cups = cupsSupport;
+
+      # Feature overrides:
+      # Native Client support was deprecated in 2020 and support will end in June 2021:
+      enable_nacl = false;
+      # Enabling the Widevine component here doesn't affect whether we can
+      # redistribute the chromium package; the Widevine component is either
+      # added later in the wrapped -wv build or downloaded from Google:
+      enable_widevine = true;
+      # Provides the enable-webrtc-pipewire-capturer flag to support Wayland screen capture:
+      rtc_use_pipewire = true;
+      # Disable PGO because the profile data requires a newer compiler version (LLVM 14 isn't sufficient):
+      chrome_pgo_phase = 0;
+      clang_base_path = "${pkgsBuildTarget.${llvmPackages_attrName}.stdenv.cc}";
+      use_qt = false;
+      # To fix the build as we don't provide libffi_pic.a
+      # (ld.lld: error: unable to find library -l:libffi_pic.a):
+      use_system_libffi = true;
+      # Use nixpkgs Rust compiler instead of the one shipped by Chromium.
+      # We do intentionally not set rustc_version as nixpkgs will never do incremental
+      # rebuilds, thus leaving this empty is fine.
+      rust_sysroot_absolute = "${rustc}";
+      # Building with rust is disabled for now - this matches the flags in other major distributions.
+      enable_rust = false;
+    } // lib.optionalAttrs (!(stdenv.buildPlatform.canExecute stdenv.hostPlatform)) {
+      # https://www.mail-archive.com/v8-users@googlegroups.com/msg14528.html
+      arm_control_flow_integrity = "none";
+    } // lib.optionalAttrs proprietaryCodecs {
+      # enable support for the H.264 codec
+      proprietary_codecs = true;
+      enable_hangout_services_extension = true;
+      ffmpeg_branding = "Chrome";
+    } // lib.optionalAttrs pulseSupport {
+      use_pulseaudio = true;
+      link_pulseaudio = true;
+    } // lib.optionalAttrs ungoogled (lib.importTOML ./ungoogled-flags.toml)
+    // (extraAttrs.gnFlags or {}));
+
+    configurePhase = ''
+      runHook preConfigure
+
+      # This is to ensure expansion of $out.
+      libExecPath="${libExecPath}"
+      ${python3.pythonForBuild}/bin/python3 build/linux/unbundle/replace_gn_files.py --system-libraries ${toString gnSystemLibraries}
+      ${gnChromium}/bin/gn gen --args=${lib.escapeShellArg gnFlags} out/Release | tee gn-gen-outputs.txt
+
+      # Fail if `gn gen` contains a WARNING.
+      grep -o WARNING gn-gen-outputs.txt && echo "Found gn WARNING, exiting nix build" && exit 1
+
+      runHook postConfigure
+    '';
+
+    # Don't spam warnings about unknown warning options. This is useful because
+    # our Clang is always older than Chromium's and the build logs have a size
+    # of approx. 25 MB without this option (and this saves e.g. 66 %).
+    env.NIX_CFLAGS_COMPILE = "-Wno-unknown-warning-option";
+    env.BUILD_CC = "$CC_FOR_BUILD";
+    env.BUILD_CXX = "$CXX_FOR_BUILD";
+    env.BUILD_AR = "$AR_FOR_BUILD";
+    env.BUILD_NM = "$NM_FOR_BUILD";
+    env.BUILD_READELF = "$READELF_FOR_BUILD";
+
+    buildPhase = let
+      buildCommand = target: ''
+        TERM=dumb ninja -C "${buildPath}" -j$NIX_BUILD_CORES "${target}"
+        (
+          source chrome/installer/linux/common/installer.include
+          PACKAGE=$packageName
+          MENUNAME="Chromium"
+          process_template chrome/app/resources/manpage.1.in "${buildPath}/chrome.1"
+        )
+      '';
+      targets = extraAttrs.buildTargets or [];
+      commands = map buildCommand targets;
+    in ''
+      runHook preBuild
+      ${lib.concatStringsSep "\n" commands}
+      runHook postBuild
+    '';
+
+    postFixup = ''
+      # Make sure that libGLESv2 and libvulkan are found by dlopen.
+      chromiumBinary="$libExecPath/$packageName"
+      origRpath="$(patchelf --print-rpath "$chromiumBinary")"
+      patchelf --set-rpath "${lib.makeLibraryPath [ libGL vulkan-loader ]}:$origRpath" "$chromiumBinary"
+    '';
+
+    passthru = {
+      updateScript = ./update.py;
+      chromiumDeps = {
+        gn = gnChromium;
+      };
+    };
+  }
+  # overwrite `version` with the exact same `version` from the same source,
+  # except it internally points to `upstream-info.nix` for
+  # `builtins.unsafeGetAttrPos`, which is used by ofborg to decide
+  # which maintainers need to be pinged.
+  // builtins.removeAttrs upstream-info (builtins.filter (e: e != "version") (builtins.attrNames upstream-info));
+
+# Remove some extraAttrs we supplied to the base attributes already.
+in stdenv.mkDerivation (base // removeAttrs extraAttrs [
+  "name" "gnFlags" "buildTargets"
+] // { passthru = base.passthru // (extraAttrs.passthru or {}); })
diff --git a/nixpkgs/pkgs/applications/networking/browsers/chromium/cross-compile.patch b/nixpkgs/pkgs/applications/networking/browsers/chromium/cross-compile.patch
new file mode 100644
index 000000000000..7df73299bc43
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/chromium/cross-compile.patch
@@ -0,0 +1,31 @@
+diff --git a/build/toolchain/linux/unbundle/BUILD.gn b/build/toolchain/linux/unbundle/BUILD.gn
+index a091491236bb1..d36fd4e652fbf 100644
+--- a/build/toolchain/linux/unbundle/BUILD.gn
++++ b/build/toolchain/linux/unbundle/BUILD.gn
+@@ -9,6 +9,7 @@ gcc_toolchain("default") {
+   cxx = getenv("CXX")
+   ar = getenv("AR")
+   nm = getenv("NM")
++  readelf = getenv("READELF")
+   ld = cxx
+ 
+   extra_cflags = getenv("CFLAGS")
+@@ -27,6 +28,7 @@ gcc_toolchain("host") {
+   cxx = getenv("BUILD_CXX")
+   ar = getenv("BUILD_AR")
+   nm = getenv("BUILD_NM")
++  readelf = getenv("BUILD_READELF")
+   ld = cxx
+ 
+   extra_cflags = getenv("BUILD_CFLAGS")
+@@ -35,7 +37,8 @@ gcc_toolchain("host") {
+   extra_ldflags = getenv("BUILD_LDFLAGS")
+ 
+   toolchain_args = {
+-    current_cpu = current_cpu
+-    current_os = current_os
++    current_cpu = host_cpu
++    current_os = host_os
++    v8_current_cpu = target_cpu
+   }
+ }
diff --git a/nixpkgs/pkgs/applications/networking/browsers/chromium/default.nix b/nixpkgs/pkgs/applications/networking/browsers/chromium/default.nix
new file mode 100644
index 000000000000..6419fa6a14fd
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/chromium/default.nix
@@ -0,0 +1,255 @@
+{ newScope, config, stdenv, fetchurl, makeWrapper
+, buildPackages
+, llvmPackages_16
+, ed, gnugrep, coreutils, xdg-utils
+, glib, gtk3, gtk4, gnome, gsettings-desktop-schemas, gn, fetchgit
+, libva, pipewire, wayland
+, gcc, nspr, nss, runCommand
+, lib, libkrb5
+
+# package customization
+# Note: enable* flags should not require full rebuilds (i.e. only affect the wrapper)
+, channel ? "stable"
+, proprietaryCodecs ? true
+, enableWideVine ? false
+, ungoogled ? false # Whether to build chromium or ungoogled-chromium
+, cupsSupport ? true
+, pulseSupport ? config.pulseaudio or stdenv.isLinux
+, commandLineArgs ? ""
+, pkgsBuildTarget
+, pkgsBuildBuild
+, pkgs
+}:
+
+let
+  # Sometimes we access `llvmPackages` via `pkgs`, and other times
+  # via `pkgsFooBar`, so a string (attrname) is the only way to have
+  # a single point of control over the LLVM version used.
+  llvmPackages_attrName = "llvmPackages_16";
+  stdenv = pkgs.${llvmPackages_attrName}.stdenv;
+
+  upstream-info = (import ./upstream-info.nix).${channel};
+
+  # Helper functions for changes that depend on specific versions:
+  warnObsoleteVersionConditional = min-version: result:
+    let ungoogled-version = (import ./upstream-info.nix).ungoogled-chromium.version;
+    in lib.warnIf
+         (lib.versionAtLeast ungoogled-version min-version)
+         "chromium: ungoogled version ${ungoogled-version} is newer than a conditional bounded at ${min-version}. You can safely delete it."
+         result;
+  chromiumVersionAtLeast = min-version:
+    let result = lib.versionAtLeast upstream-info.version min-version;
+    in  warnObsoleteVersionConditional min-version result;
+  versionRange = min-version: upto-version:
+    let inherit (upstream-info) version;
+        result = lib.versionAtLeast version min-version && lib.versionOlder version upto-version;
+    in warnObsoleteVersionConditional upto-version result;
+
+  callPackage = newScope chromium;
+
+  chromium = rec {
+    inherit stdenv llvmPackages_attrName upstream-info;
+
+    mkChromiumDerivation = callPackage ./common.nix ({
+      inherit channel chromiumVersionAtLeast versionRange;
+      inherit proprietaryCodecs
+              cupsSupport pulseSupport ungoogled;
+      gnChromium = buildPackages.gn.overrideAttrs (oldAttrs: {
+        inherit (upstream-info.deps.gn) version;
+        src = fetchgit {
+          inherit (upstream-info.deps.gn) url rev sha256;
+        };
+      });
+    });
+
+    browser = callPackage ./browser.nix {
+      inherit channel chromiumVersionAtLeast enableWideVine ungoogled;
+    };
+
+    # ungoogled-chromium is, contrary to its name, not a build of
+    # chromium.  It is a patched copy of chromium's *source code*.
+    # Therefore, it needs to come from buildPackages, because it
+    # contains python scripts which get /nix/store/.../bin/python3
+    # patched into their shebangs.
+    ungoogled-chromium = pkgsBuildBuild.callPackage ./ungoogled.nix {};
+  };
+
+  pkgSuffix = if channel == "dev" then "unstable" else
+    (if channel == "ungoogled-chromium" then "stable" else channel);
+  pkgName = "google-chrome-${pkgSuffix}";
+  chromeSrc =
+    let
+      # Use the latest stable Chrome version if necessary:
+      version = if chromium.upstream-info.sha256bin64 != null
+        then chromium.upstream-info.version
+        else (import ./upstream-info.nix).stable.version;
+      sha256 = if chromium.upstream-info.sha256bin64 != null
+        then chromium.upstream-info.sha256bin64
+        else (import ./upstream-info.nix).stable.sha256bin64;
+    in fetchurl {
+      urls = map (repo: "${repo}/${pkgName}/${pkgName}_${version}-1_amd64.deb") [
+        "https://dl.google.com/linux/chrome/deb/pool/main/g"
+        "http://95.31.35.30/chrome/pool/main/g"
+        "http://mirror.pcbeta.com/google/chrome/deb/pool/main/g"
+        "http://repo.fdzh.org/chrome/deb/pool/main/g"
+      ];
+      inherit sha256;
+  };
+
+  mkrpath = p: "${lib.makeSearchPathOutput "lib" "lib64" p}:${lib.makeLibraryPath p}";
+  widevineCdm = stdenv.mkDerivation {
+    name = "chrome-widevine-cdm";
+
+    src = chromeSrc;
+
+    unpackCmd = let
+      widevineCdmPath =
+        if (channel == "stable" || channel == "ungoogled-chromium") then
+          "./opt/google/chrome/WidevineCdm"
+        else if channel == "beta" then
+          "./opt/google/chrome-beta/WidevineCdm"
+        else if channel == "dev" then
+          "./opt/google/chrome-unstable/WidevineCdm"
+        else
+          throw "Unknown chromium channel.";
+    in ''
+      # Extract just WidevineCdm from upstream's .deb file
+      ar p "$src" data.tar.xz | tar xJ "${widevineCdmPath}"
+
+      # Move things around so that we don't have to reference a particular
+      # chrome-* directory later.
+      mv "${widevineCdmPath}" ./
+
+      # unpackCmd wants a single output directory; let it take WidevineCdm/
+      rm -rf opt
+    '';
+
+    doCheck = true;
+    checkPhase = ''
+      ! find -iname '*.so' -exec ldd {} + | grep 'not found'
+    '';
+
+    PATCH_RPATH = mkrpath [ gcc.cc glib nspr nss ];
+
+    patchPhase = ''
+      patchelf --set-rpath "$PATCH_RPATH" _platform_specific/linux_x64/libwidevinecdm.so
+    '';
+
+    installPhase = ''
+      mkdir -p $out/WidevineCdm
+      cp -a * $out/WidevineCdm/
+    '';
+
+    meta = {
+      platforms = [ "x86_64-linux" ];
+      license = lib.licenses.unfree;
+    };
+  };
+
+  suffix = lib.optionalString (channel != "stable" && channel != "ungoogled-chromium") ("-" + channel);
+
+  sandboxExecutableName = chromium.browser.passthru.sandboxExecutableName;
+
+  # We want users to be able to enableWideVine without rebuilding all of
+  # chromium, so we have a separate derivation here that copies chromium
+  # and adds the unfree WidevineCdm.
+  chromiumWV = let browser = chromium.browser; in if enableWideVine then
+    runCommand (browser.name + "-wv") { version = browser.version; }
+      ''
+        mkdir -p $out
+        cp -a ${browser}/* $out/
+        chmod u+w $out/libexec/chromium
+        cp -a ${widevineCdm}/WidevineCdm $out/libexec/chromium/
+      ''
+    else browser;
+
+in stdenv.mkDerivation {
+  pname = lib.optionalString ungoogled "ungoogled-"
+    + "chromium${suffix}";
+  inherit (chromium.browser) version;
+
+  nativeBuildInputs = [
+    makeWrapper ed
+  ];
+
+  buildInputs = [
+    # needed for GSETTINGS_SCHEMAS_PATH
+    gsettings-desktop-schemas glib gtk3 gtk4
+
+    # needed for XDG_ICON_DIRS
+    gnome.adwaita-icon-theme
+
+    # Needed for kerberos at runtime
+    libkrb5
+  ];
+
+  outputs = ["out" "sandbox"];
+
+  buildCommand = let
+    browserBinary = "${chromiumWV}/libexec/chromium/chromium";
+    libPath = lib.makeLibraryPath [ libva pipewire wayland gtk3 gtk4 libkrb5 ];
+
+  in with lib; ''
+    mkdir -p "$out/bin"
+
+    makeWrapper "${browserBinary}" "$out/bin/chromium" \
+      --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}" \
+      --add-flags ${escapeShellArg commandLineArgs}
+
+    ed -v -s "$out/bin/chromium" << EOF
+    2i
+
+    if [ -x "/run/wrappers/bin/${sandboxExecutableName}" ]
+    then
+      export CHROME_DEVEL_SANDBOX="/run/wrappers/bin/${sandboxExecutableName}"
+    else
+      export CHROME_DEVEL_SANDBOX="$sandbox/bin/${sandboxExecutableName}"
+    fi
+
+    # Make generated desktop shortcuts have a valid executable name.
+    export CHROME_WRAPPER='chromium'
+
+  '' + lib.optionalString (libPath != "") ''
+    # To avoid loading .so files from cwd, LD_LIBRARY_PATH here must not
+    # contain an empty section before or after a colon.
+    export LD_LIBRARY_PATH="\$LD_LIBRARY_PATH\''${LD_LIBRARY_PATH:+:}${libPath}"
+  '' + ''
+
+    # libredirect causes chromium to deadlock on startup
+    export LD_PRELOAD="\$(echo -n "\$LD_PRELOAD" | ${coreutils}/bin/tr ':' '\n' | ${gnugrep}/bin/grep -v /lib/libredirect\\\\.so$ | ${coreutils}/bin/tr '\n' ':')"
+
+    export XDG_DATA_DIRS=$XDG_ICON_DIRS:$GSETTINGS_SCHEMAS_PATH\''${XDG_DATA_DIRS:+:}\$XDG_DATA_DIRS
+
+  '' + lib.optionalString (!xdg-utils.meta.broken) ''
+    # Mainly for xdg-open but also other xdg-* tools (this is only a fallback; \$PATH is suffixed so that other implementations can be used):
+    export PATH="\$PATH\''${PATH:+:}${xdg-utils}/bin"
+  '' + ''
+
+    .
+    w
+    EOF
+
+    ln -sv "${chromium.browser.sandbox}" "$sandbox"
+
+    ln -s "$out/bin/chromium" "$out/bin/chromium-browser"
+
+    mkdir -p "$out/share"
+    for f in '${chromium.browser}'/share/*; do # hello emacs */
+      ln -s -t "$out/share/" "$f"
+    done
+  '';
+
+  inherit (chromium.browser) packageName;
+  meta = chromium.browser.meta;
+  passthru = {
+    inherit (chromium) upstream-info browser;
+    mkDerivation = chromium.mkChromiumDerivation;
+    inherit chromeSrc sandboxExecutableName;
+  };
+}
+# the following is a complicated and long-winded variant of
+# `inherit (chromium.browser) version`, with the added benefit
+# that it keeps the pointer to upstream-info.nix for
+# builtins.unsafeGetAttrPos, which is what ofborg uses to
+# decide which maintainers need to be pinged.
+// builtins.removeAttrs chromium.browser (builtins.filter (e: e != "version") (builtins.attrNames chromium.browser))
diff --git a/nixpkgs/pkgs/applications/networking/browsers/chromium/get-commit-message.py b/nixpkgs/pkgs/applications/networking/browsers/chromium/get-commit-message.py
new file mode 100755
index 000000000000..45f4282582f5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/chromium/get-commit-message.py
@@ -0,0 +1,53 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i python3 -p python3Packages.feedparser python3Packages.requests
+
+# This script prints the Git commit message for stable channel updates.
+# Usage: ./get-commit-message.py [version]
+
+import re
+import sys
+import textwrap
+
+from collections import OrderedDict
+
+import feedparser
+import requests
+
+feed = feedparser.parse('https://chromereleases.googleblog.com/feeds/posts/default')
+html_tags = re.compile(r'<[^>]+>')
+target_version = sys.argv[1] if len(sys.argv) == 2 else None
+
+for entry in feed.entries:
+    url = requests.get(entry.link).url.split('?')[0]
+    if entry.title != 'Stable Channel Update for Desktop':
+        if target_version and entry.title == '':
+            # Workaround for a special case (Chrome Releases bug?):
+            if not 'the-stable-channel-has-been-updated-to' in url:
+                continue
+        else:
+            continue
+    content = entry.content[0].value
+    content = html_tags.sub('', content)  # Remove any HTML tags
+    if re.search(r'Linux', content) is None:
+        continue
+    #print(url)  # For debugging purposes
+    version = re.search(r'\d+(\.\d+){3}', content).group(0)
+    if target_version:
+        if version != target_version:
+            continue
+    else:
+        print('chromium: TODO -> ' + version + '\n')
+    print(url)
+    if fixes := re.search(r'This update includes .+ security fix(es)?\.', content):
+        fixes = fixes.group(0)
+        if zero_days := re.search(r'Google is aware( of reports)? th(e|at) .+ in the wild\.', content):
+            fixes += " " + zero_days.group(0)
+        print('\n' + '\n'.join(textwrap.wrap(fixes, width=72)))
+    if cve_list := re.findall(r'CVE-[^: ]+', content):
+        cve_list = list(OrderedDict.fromkeys(cve_list))  # Remove duplicates but preserve the order
+        cve_string = ' '.join(cve_list)
+        print("\nCVEs:\n" + '\n'.join(textwrap.wrap(cve_string, width=72)))
+    sys.exit(0)  # We only care about the most recent stable channel update
+
+print("Error: No match.")
+sys.exit(1)
diff --git a/nixpkgs/pkgs/applications/networking/browsers/chromium/patches/angle-wayland-include-protocol.patch b/nixpkgs/pkgs/applications/networking/browsers/chromium/patches/angle-wayland-include-protocol.patch
new file mode 100644
index 000000000000..424da9d29115
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/chromium/patches/angle-wayland-include-protocol.patch
@@ -0,0 +1,38 @@
+diff -upr a/third_party/angle/BUILD.gn b/third_party/angle/BUILD.gn
+--- a/third_party/angle/BUILD.gn	2022-08-17 19:38:11.000000000 +0000
++++ b/third_party/angle/BUILD.gn	2022-08-18 11:04:09.061751111 +0000
+@@ -489,6 +489,12 @@ config("angle_vulkan_wayland_config") {
+   if (angle_enable_vulkan && angle_use_wayland &&
+       defined(vulkan_wayland_include_dirs)) {
+     include_dirs = vulkan_wayland_include_dirs
++  } else if (angle_enable_vulkan && angle_use_wayland) {
++    include_dirs = [
++      "$wayland_gn_dir/src/src",
++      "$wayland_gn_dir/include/src",
++      "$wayland_gn_dir/include/protocol",
++    ]
+   }
+ }
+ 
+@@ -1073,6 +1079,7 @@ if (angle_use_wayland) {
+     include_dirs = [
+       "$wayland_dir/egl",
+       "$wayland_dir/src",
++      "$wayland_gn_dir/include/protocol",
+     ]
+   }
+ 
+diff -upr a/third_party/angle/src/third_party/volk/BUILD.gn b/third_party/angle/src/third_party/volk/BUILD.gn
+--- a/third_party/angle/src/third_party/volk/BUILD.gn	2022-08-17 19:38:12.000000000 +0000
++++ b/third_party/angle/src/third_party/volk/BUILD.gn	2022-08-18 11:04:36.499828006 +0000
+@@ -21,6 +21,9 @@ source_set("volk") {
+   configs += [ "$angle_root:angle_no_cfi_icall" ]
+   public_deps = [ "$angle_vulkan_headers_dir:vulkan_headers" ]
+   if (angle_use_wayland) {
+-    include_dirs = [ "$wayland_dir/src" ]
++    include_dirs = [
++      "$wayland_dir/src",
++      "$wayland_gn_dir/include/protocol",
++    ]
+   }
+ }
diff --git a/nixpkgs/pkgs/applications/networking/browsers/chromium/patches/no-build-timestamps.patch b/nixpkgs/pkgs/applications/networking/browsers/chromium/patches/no-build-timestamps.patch
new file mode 100644
index 000000000000..6b788f43d29c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/chromium/patches/no-build-timestamps.patch
@@ -0,0 +1,17 @@
+--- chromium-70.0.3538.67/build/compute_build_timestamp.py.orig	2018-11-02 16:00:34.368933077 +0200
++++ chromium-70.0.3538.67/build/compute_build_timestamp.py	2018-11-08 04:06:21.658105129 +0200
+@@ -94,6 +94,14 @@
+       'build_type', help='The type of build', choices=('official', 'default'))
+   args = argument_parser.parse_args()
+ 
++  # I don't trust LASTCHANGE magic, and I definelly want something deterministic here
++  SOURCE_DATE_EPOCH = os.getenv("SOURCE_DATE_EPOCH", None)
++  if SOURCE_DATE_EPOCH is not None:
++    print(SOURCE_DATE_EPOCH)
++    return 0
++  else:
++    raise RuntimeError("SOURCE_DATE_EPOCH not set")
++
+   # The mtime of the revision in build/util/LASTCHANGE is stored in a file
+   # next to it. Read it, to get a deterministic time close to "now".
+   # That date is then modified as described at the top of the file so that
diff --git a/nixpkgs/pkgs/applications/networking/browsers/chromium/patches/widevine-79.patch b/nixpkgs/pkgs/applications/networking/browsers/chromium/patches/widevine-79.patch
new file mode 100644
index 000000000000..32f0ae2fb5e6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/chromium/patches/widevine-79.patch
@@ -0,0 +1,13 @@
+diff --git a/third_party/widevine/cdm/BUILD.gn b/third_party/widevine/cdm/BUILD.gn
+index ed0e2f5208b..5b431a030d5 100644
+--- a/third_party/widevine/cdm/BUILD.gn
++++ b/third_party/widevine/cdm/BUILD.gn
+@@ -14,7 +14,7 @@ buildflag_header("buildflags") {
+ 
+   flags = [
+     "ENABLE_WIDEVINE=$enable_widevine",
+-    "BUNDLE_WIDEVINE_CDM=$bundle_widevine_cdm",
++    "BUNDLE_WIDEVINE_CDM=true",
+     "ENABLE_WIDEVINE_CDM_COMPONENT=$enable_widevine_cdm_component",
+   ]
+ }
diff --git a/nixpkgs/pkgs/applications/networking/browsers/chromium/ungoogled-flags.toml b/nixpkgs/pkgs/applications/networking/browsers/chromium/ungoogled-flags.toml
new file mode 100644
index 000000000000..8578089ae41a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/chromium/ungoogled-flags.toml
@@ -0,0 +1,21 @@
+build_with_tflite_lib=false
+chrome_pgo_phase=0
+clang_use_chrome_plugins=false
+disable_fieldtrial_testing_config=true
+enable_hangout_services_extension=false
+enable_mdns=false
+enable_mse_mpeg2ts_stream_parser=true
+enable_nacl=false
+enable_reading_list=false
+enable_remoting=false
+enable_reporting=false
+enable_service_discovery=false
+enable_widevine=true
+exclude_unwind_tables=true
+google_api_key=""
+google_default_client_id=""
+google_default_client_secret=""
+safe_browsing_mode=0
+treat_warnings_as_errors=false
+use_official_google_api_keys=false
+use_unofficial_version_number=false
diff --git a/nixpkgs/pkgs/applications/networking/browsers/chromium/ungoogled.nix b/nixpkgs/pkgs/applications/networking/browsers/chromium/ungoogled.nix
new file mode 100644
index 000000000000..549d2853776f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/chromium/ungoogled.nix
@@ -0,0 +1,43 @@
+{ stdenv
+, fetchFromGitHub
+, python3Packages
+, makeWrapper
+, patch
+}:
+
+{ rev
+, sha256
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ungoogled-chromium";
+
+  version = rev;
+
+  src = fetchFromGitHub {
+    owner = "ungoogled-software";
+    repo = "ungoogled-chromium";
+    inherit rev sha256;
+  };
+
+  dontBuild = true;
+
+  buildInputs = [
+    python3Packages.python
+    patch
+  ];
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  patchPhase = ''
+    sed -i '/chromium-widevine/d' patches/series
+  '';
+
+  installPhase = ''
+    mkdir $out
+    cp -R * $out/
+    wrapProgram $out/utils/patches.py --add-flags "apply" --prefix PATH : "${patch}/bin"
+  '';
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/chromium/update.py b/nixpkgs/pkgs/applications/networking/browsers/chromium/update.py
new file mode 100755
index 000000000000..f8dae9593601
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/chromium/update.py
@@ -0,0 +1,252 @@
+#! /usr/bin/env nix-shell
+#! nix-shell -i python -p python3 nix nixfmt nix-prefetch-git
+
+"""This script automatically updates chromium, google-chrome, chromedriver, and ungoogled-chromium
+via upstream-info.nix."""
+# Usage: ./update.py [--commit]
+
+import base64
+import csv
+import json
+import re
+import subprocess
+import sys
+
+from codecs import iterdecode
+from collections import OrderedDict
+from datetime import datetime
+from distutils.version import LooseVersion
+from os.path import abspath, dirname
+from urllib.request import urlopen
+
+RELEASES_URL = 'https://versionhistory.googleapis.com/v1/chrome/platforms/linux/channels/all/versions/all/releases'
+DEB_URL = 'https://dl.google.com/linux/chrome/deb/pool/main/g'
+BUCKET_URL = 'https://commondatastorage.googleapis.com/chromium-browser-official'
+
+PIN_PATH = dirname(abspath(__file__)) + '/upstream-info.nix'
+UNGOOGLED_FLAGS_PATH = dirname(abspath(__file__)) + '/ungoogled-flags.toml'
+COMMIT_MESSAGE_SCRIPT = dirname(abspath(__file__)) + '/get-commit-message.py'
+
+
+def load_as_json(path):
+    """Loads the given nix file as JSON."""
+    out = subprocess.check_output(['nix-instantiate', '--eval', '--strict', '--json', path])
+    return json.loads(out)
+
+def save_dict_as_nix(path, input):
+    """Saves the given dict/JSON as nix file."""
+    json_string = json.dumps(input)
+    nix = subprocess.check_output(['nix-instantiate', '--eval', '--expr', '{ json }: builtins.fromJSON json', '--argstr', 'json', json_string])
+    formatted = subprocess.check_output(['nixfmt'], input=nix)
+    with open(path, 'w') as out:
+        out.write(formatted.decode())
+
+def nix_prefetch_url(url, algo='sha256'):
+    """Prefetches the content of the given URL."""
+    print(f'nix-prefetch-url {url}')
+    out = subprocess.check_output(['nix-prefetch-url', '--type', algo, url])
+    return out.decode('utf-8').rstrip()
+
+
+def nix_prefetch_git(url, rev):
+    """Prefetches the requested Git revision of the given repository URL."""
+    print(f'nix-prefetch-git {url} {rev}')
+    out = subprocess.check_output(['nix-prefetch-git', '--quiet', '--url', url, '--rev', rev])
+    return json.loads(out)
+
+
+def get_file_revision(revision, file_path):
+    """Fetches the requested Git revision of the given Chromium file."""
+    url = f'https://chromium.googlesource.com/chromium/src/+/refs/tags/{revision}/{file_path}?format=TEXT'
+    with urlopen(url) as http_response:
+        resp = http_response.read()
+        return base64.b64decode(resp)
+
+
+def get_chromedriver(channel):
+    """Get the latest chromedriver builds given a channel"""
+    # See https://chromedriver.chromium.org/downloads/version-selection#h.4wiyvw42q63v
+    chromedriver_versions_url = f'https://googlechromelabs.github.io/chrome-for-testing/last-known-good-versions-with-downloads.json'
+    print(f'GET {chromedriver_versions_url}')
+    with urlopen(chromedriver_versions_url) as http_response:
+        chromedrivers = json.load(http_response)
+        channel = chromedrivers['channels'][channel]
+        downloads = channel['downloads']['chromedriver']
+
+        def get_chromedriver_url(platform):
+            for download in downloads:
+                if download['platform'] == platform:
+                    return download['url']
+
+        return {
+            'version': channel['version'],
+            'sha256_linux': nix_prefetch_url(get_chromedriver_url('linux64')),
+            'sha256_darwin': nix_prefetch_url(get_chromedriver_url('mac-x64')),
+            'sha256_darwin_aarch64': nix_prefetch_url(get_chromedriver_url('mac-arm64'))
+        }
+
+
+def get_channel_dependencies(version):
+    """Gets all dependencies for the given Chromium version."""
+    deps = get_file_revision(version, 'DEPS')
+    gn_pattern = b"'gn_version': 'git_revision:([0-9a-f]{40})'"
+    gn_commit = re.search(gn_pattern, deps).group(1).decode()
+    gn = nix_prefetch_git('https://gn.googlesource.com/gn', gn_commit)
+    return {
+        'gn': {
+            'version': datetime.fromisoformat(gn['date']).date().isoformat(),
+            'url': gn['url'],
+            'rev': gn['rev'],
+            'sha256': gn['sha256']
+        }
+    }
+
+
+def get_latest_ungoogled_chromium_tag(linux_stable_versions):
+    """Returns the latest ungoogled-chromium tag for linux using the GitHub API."""
+    api_tag_url = 'https://api.github.com/repos/ungoogled-software/ungoogled-chromium/tags'
+    with urlopen(api_tag_url) as http_response:
+        tags = json.load(http_response)
+        for tag in tags:
+            if not tag['name'].split('-')[0] in linux_stable_versions:
+                continue
+
+            return tag['name']
+
+
+def get_latest_ungoogled_chromium_build(linux_stable_versions):
+    """Returns a dictionary for the latest ungoogled-chromium build."""
+    tag = get_latest_ungoogled_chromium_tag(linux_stable_versions)
+    version = tag.split('-')[0]
+    return {
+        'name': 'chrome/platforms/linux/channels/ungoogled-chromium/versions/',
+        'version': version,
+        'ungoogled_tag': tag
+    }
+
+
+def get_ungoogled_chromium_gn_flags(revision):
+    """Returns ungoogled-chromium's GN build flags for the given revision."""
+    gn_flags_url = f'https://raw.githubusercontent.com/ungoogled-software/ungoogled-chromium/{revision}/flags.gn'
+    return urlopen(gn_flags_url).read().decode()
+
+
+def channel_name_to_attr_name(channel_name):
+    """Maps a channel name to the corresponding main Nixpkgs attribute name."""
+    if channel_name == 'stable':
+        return 'chromium'
+    if channel_name == 'beta':
+        return 'chromiumBeta'
+    if channel_name == 'dev':
+        return 'chromiumDev'
+    if channel_name == 'ungoogled-chromium':
+        return 'ungoogled-chromium'
+    print(f'Error: Unexpected channel: {channel_name}', file=sys.stderr)
+    sys.exit(1)
+
+
+def get_channel_key(item):
+    """Orders Chromium channels by their name."""
+    channel_name = item[0]
+    if channel_name == 'stable':
+        return 0
+    if channel_name == 'beta':
+        return 1
+    if channel_name == 'dev':
+        return 2
+    if channel_name == 'ungoogled-chromium':
+        return 3
+    print(f'Error: Unexpected channel: {channel_name}', file=sys.stderr)
+    sys.exit(1)
+
+
+def print_updates(channels_old, channels_new):
+    """Print a summary of the updates."""
+    print('Updates:')
+    for channel_name in channels_old:
+        version_old = channels_old[channel_name]["version"]
+        version_new = channels_new[channel_name]["version"]
+        if LooseVersion(version_old) < LooseVersion(version_new):
+            attr_name = channel_name_to_attr_name(channel_name)
+            print(f'- {attr_name}: {version_old} -> {version_new}')
+
+
+channels = {}
+last_channels = load_as_json(PIN_PATH)
+
+
+print(f'GET {RELEASES_URL}', file=sys.stderr)
+with urlopen(RELEASES_URL) as resp:
+    releases = json.load(resp)['releases']
+
+    linux_stable_versions = [release['version'] for release in releases if release['name'].startswith('chrome/platforms/linux/channels/stable/versions/')]
+    releases.append(get_latest_ungoogled_chromium_build(linux_stable_versions))
+
+    for release in releases:
+        channel_name = re.findall("chrome\/platforms\/linux\/channels\/(.*)\/versions\/", release['name'])[0]
+
+        # If we've already found a newer release for this channel, we're
+        # no longer interested in it.
+        if channel_name in channels:
+            continue
+
+        # If we're back at the last release we used, we don't need to
+        # keep going -- there's no new version available, and we can
+        # just reuse the info from last time.
+        if release['version'] == last_channels[channel_name]['version']:
+            channels[channel_name] = last_channels[channel_name]
+            continue
+
+        channel = {'version': release['version']}
+        if channel_name == 'dev':
+            google_chrome_suffix = 'unstable'
+        elif channel_name == 'ungoogled-chromium':
+            google_chrome_suffix = 'stable'
+        else:
+            google_chrome_suffix = channel_name
+
+        try:
+            channel['sha256'] = nix_prefetch_url(f'{BUCKET_URL}/chromium-{release["version"]}.tar.xz')
+            channel['sha256bin64'] = nix_prefetch_url(
+                f'{DEB_URL}/google-chrome-{google_chrome_suffix}/' +
+                f'google-chrome-{google_chrome_suffix}_{release["version"]}-1_amd64.deb')
+        except subprocess.CalledProcessError:
+            # This release isn't actually available yet.  Continue to
+            # the next one.
+            continue
+
+        channel['deps'] = get_channel_dependencies(channel['version'])
+        if channel_name == 'stable':
+            channel['chromedriver'] = get_chromedriver('Stable')
+        elif channel_name == 'ungoogled-chromium':
+            ungoogled_repo_url = 'https://github.com/ungoogled-software/ungoogled-chromium.git'
+            channel['deps']['ungoogled-patches'] = {
+                'rev': release['ungoogled_tag'],
+                'sha256': nix_prefetch_git(ungoogled_repo_url, release['ungoogled_tag'])['sha256']
+            }
+            with open(UNGOOGLED_FLAGS_PATH, 'w') as out:
+                out.write(get_ungoogled_chromium_gn_flags(release['ungoogled_tag']))
+
+        channels[channel_name] = channel
+
+
+sorted_channels = OrderedDict(sorted(channels.items(), key=get_channel_key))
+if len(sys.argv) == 2 and sys.argv[1] == '--commit':
+    for channel_name in sorted_channels.keys():
+        version_old = last_channels[channel_name]['version']
+        version_new = sorted_channels[channel_name]['version']
+        if LooseVersion(version_old) < LooseVersion(version_new):
+            last_channels[channel_name] = sorted_channels[channel_name]
+            save_dict_as_nix(PIN_PATH, last_channels)
+            attr_name = channel_name_to_attr_name(channel_name)
+            commit_message = f'{attr_name}: {version_old} -> {version_new}'
+            if channel_name == 'stable':
+                body = subprocess.check_output([COMMIT_MESSAGE_SCRIPT, version_new]).decode('utf-8')
+                commit_message += '\n\n' + body
+            elif channel_name == 'ungoogled-chromium':
+                subprocess.run(['git', 'add', UNGOOGLED_FLAGS_PATH], check=True)
+            subprocess.run(['git', 'add', JSON_PATH], check=True)
+            subprocess.run(['git', 'commit', '--file=-'], input=commit_message.encode(), check=True)
+else:
+    save_dict_as_nix(PIN_PATH, sorted_channels)
+    print_updates(last_channels, sorted_channels)
diff --git a/nixpkgs/pkgs/applications/networking/browsers/chromium/upstream-info.nix b/nixpkgs/pkgs/applications/networking/browsers/chromium/upstream-info.nix
new file mode 100644
index 000000000000..4df0ee191517
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/chromium/upstream-info.nix
@@ -0,0 +1,65 @@
+{
+  beta = {
+    deps = {
+      gn = {
+        rev = "811d332bd90551342c5cbd39e133aa276022d7f8";
+        sha256 = "0jlg3d31p346na6a3yk0x29pm6b7q03ck423n5n6mi8nv4ybwajq";
+        url = "https://gn.googlesource.com/gn";
+        version = "2023-08-01";
+      };
+    };
+    sha256 = "1wf0j189cxpayy6ffmj5j6h5yg3amivryilimjc2ap0jkyj4xrbi";
+    sha256bin64 = "11w1di146mjb9ql30df9yk9x4b9amc6514jzyfbf09mqsrw88dvr";
+    version = "117.0.5938.22";
+  };
+  dev = {
+    deps = {
+      gn = {
+        rev = "cc56a0f98bb34accd5323316e0292575ff17a5d4";
+        sha256 = "1ly7z48v147bfdb1kqkbc98myxpgqq3g6vgr8bjx1ikrk17l82ab";
+        url = "https://gn.googlesource.com/gn";
+        version = "2023-08-10";
+      };
+    };
+    sha256 = "1z01b6w4sgndrlcd26jgimk3rhv3wzpn67nv1fd5ln7dwfwkyq20";
+    sha256bin64 = "11y09hsy7y1vg65xfilq44ffsmn15dqy80fa57psj1kin4a52v2x";
+    version = "118.0.5966.0";
+  };
+  stable = {
+    chromedriver = {
+      sha256_darwin = "0gzx3zka8i2ngsdiqp8sr0v6ir978vywa1pj7j08vsf8kmb93iiy";
+      sha256_darwin_aarch64 =
+        "18iyapwjg0yha8qgbw7f605n0j54nd36shv3497bd84lc9k74b14";
+      sha256_linux = "0d8mqzjc11g1bvxvffk0xyhxfls2ycl7ym4ssyjq752g2apjblhp";
+      version = "116.0.5845.96";
+    };
+    deps = {
+      gn = {
+        rev = "4bd1a77e67958fb7f6739bd4542641646f264e5d";
+        sha256 = "14h9jqspb86sl5lhh6q0kk2rwa9zcak63f8drp7kb3r4dx08vzsw";
+        url = "https://gn.googlesource.com/gn";
+        version = "2023-06-09";
+      };
+    };
+    sha256 = "152lyrw8k36gbmf4fmfny4ajqh0523y5d48yrshbgwn5klmbhaji";
+    sha256bin64 = "118sk39939d52srws2vgs1mfizpikswxh5ihd9x053vzn0aj8cfa";
+    version = "116.0.5845.187";
+  };
+  ungoogled-chromium = {
+    deps = {
+      gn = {
+        rev = "4bd1a77e67958fb7f6739bd4542641646f264e5d";
+        sha256 = "14h9jqspb86sl5lhh6q0kk2rwa9zcak63f8drp7kb3r4dx08vzsw";
+        url = "https://gn.googlesource.com/gn";
+        version = "2023-06-09";
+      };
+      ungoogled-patches = {
+        rev = "116.0.5845.187-1";
+        sha256 = "0br5lms6mxg2mg8ix5mkb79bg6wk5f2hn0xy1xc7gk9h3rl58is1";
+      };
+    };
+    sha256 = "152lyrw8k36gbmf4fmfny4ajqh0523y5d48yrshbgwn5klmbhaji";
+    sha256bin64 = "118sk39939d52srws2vgs1mfizpikswxh5ihd9x053vzn0aj8cfa";
+    version = "116.0.5845.187";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/dillo/default.nix b/nixpkgs/pkgs/applications/networking/browsers/dillo/default.nix
new file mode 100644
index 000000000000..ab79c1bd8f98
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/dillo/default.nix
@@ -0,0 +1,63 @@
+{ lib
+, stdenv
+, fetchhg
+, autoreconfHook
+, fltk
+, libXcursor
+, libXi
+, libXinerama
+, libjpeg
+, libpng
+, mbedtls_2
+, openssl
+, perl
+, pkg-config
+, which
+}:
+
+stdenv.mkDerivation {
+  pname = "dillo";
+  version = "unstable-2021-02-09";
+
+  src = fetchhg {
+    url = "https://hg.sr.ht/~seirdy/dillo-mirror";
+    rev = "67b70f024568b505633524be61fcfbde5337849f";
+    sha256 = "sha256-lbn5u9oEL0zt9yBhznBS9Dz9/6kSwRDJeNXKEojty1g=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+    which
+  ];
+
+  buildInputs = [
+    fltk
+    libXcursor
+    libXi
+    libXinerama
+    libjpeg
+    libpng
+    mbedtls_2
+    openssl
+    perl
+  ];
+
+  # Workaround build failure on -fno-common toolchains:
+  #   ld: main.o:/build/dillo-3.0.5/dpid/dpid.h:64: multiple definition of `sock_set';
+  #     dpid.o:/build/dillo-3.0.5/dpid/dpid.h:64: first defined here
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  configureFlags = [ "--enable-ssl=yes" ];
+
+  meta = with lib; {
+    homepage = "https://hg.sr.ht/~seirdy/dillo-mirror";
+    description = "A fast graphical web browser with a small footprint";
+    longDescription = ''
+      Dillo is a small, fast web browser, tailored for older machines.
+    '';
+    maintainers = [ maintainers.AndersonTorres ];
+    platforms = platforms.linux;
+    license = licenses.gpl3Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/dillong/default.nix b/nixpkgs/pkgs/applications/networking/browsers/dillong/default.nix
new file mode 100644
index 000000000000..365b1119f96b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/dillong/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, pkg-config
+, which
+, fltk
+, mbedtls_2
+}:
+
+stdenv.mkDerivation {
+  pname = "dillong";
+  version = "unstable-2021-12-13";
+
+  src = fetchFromGitHub {
+    owner = "w00fpack";
+    repo = "dilloNG";
+    rev = "2804e6e9074b840de3084abb80473983f8e49f5b";
+    hash = "sha256-JSBd8Lgw3I20Es/jQHBtybnLd0iAcs16TqOrOxGPGiU=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+    which
+  ];
+
+  buildInputs = [
+    fltk
+    mbedtls_2
+  ];
+
+  # The start_page and home settings refer to /usr.
+  # We can't change /usr to $out because dillorc is copied to the home directory
+  # on first launch, so the paths would quickly become outdated.
+  # So we just comment them out, and let dillong use the defaults.
+  postPatch = ''
+    substituteInPlace dillorc \
+      --replace "start_page=" "#start_page=" \
+      --replace "home=" "#home="
+  '';
+
+  configureFlags = [ "--enable-ssl=yes" ];
+
+  # Workaround build failure on -fno-common toolchains:
+  #   ld: main.o:/build/dillo-3.0.5/dpid/dpid.h:64: multiple definition of `sock_set';
+  #     dpid.o:/build/dillo-3.0.5/dpid/dpid.h:64: first defined here
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  meta = with lib; {
+    description = "Fork of Dillo, a lightweight web browser";
+    homepage = "https://github.com/w00fpack/dilloNG";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ fgaz ];
+    mainProgram = "dillo";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/elinks/default.nix b/nixpkgs/pkgs/applications/networking/browsers/elinks/default.nix
new file mode 100644
index 000000000000..914bfec7fad4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/elinks/default.nix
@@ -0,0 +1,73 @@
+{ lib, stdenv, fetchFromGitHub, ncurses, libX11, bzip2, zlib
+, brotli, zstd, xz, openssl, autoreconfHook, gettext, pkg-config, libev
+, gpm, libidn, tre, expat
+, # Incompatible licenses, LGPLv3 - GPLv2
+  enableGuile        ? false,                                         guile ? null
+, enablePython       ? false,                                         python ? null
+, enablePerl         ? (!stdenv.isDarwin) && (stdenv.hostPlatform == stdenv.buildPlatform), perl ? null
+, fetchpatch
+# re-add javascript support when upstream supports modern spidermonkey
+}:
+
+assert enableGuile -> guile != null;
+assert enablePython -> python != null;
+
+stdenv.mkDerivation rec {
+  pname = "elinks";
+  version = "0.16.1.1";
+
+  src = fetchFromGitHub {
+    owner = "rkd77";
+    repo = "felinks";
+    rev = "v${version}";
+    sha256 = "sha256-u6QGhfi+uWeIzSUFuYHAH3Xu0Fky0yw2h4NOKgYFLsM=";
+  };
+
+  patches = [
+    # Fix build bug with perl 5.38.0. Backport of https://github.com/rkd77/elinks/pull/243 by gentoo:
+    # https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=dfefaa456bd69bc14e3a1c2c6c1b0cc19c6b0869
+    (fetchpatch {
+      url = "https://gitweb.gentoo.org/repo/gentoo.git/plain/www-client/elinks/files/elinks-0.16.1.1-perl-5.38.patch?id=dfefaa456bd69bc14e3a1c2c6c1b0cc19c6b0869";
+      hash = "sha256-bHP9bc/l7VEw7oXlkSUQhhuq8rT2QTahh9SM7ZJgK5w=";
+    })
+  ];
+
+  buildInputs = [
+    ncurses libX11 bzip2 zlib brotli zstd xz
+    openssl libidn tre expat libev
+  ]
+    ++ lib.optional stdenv.isLinux gpm
+    ++ lib.optional enableGuile guile
+    ++ lib.optional enablePython python
+    ++ lib.optional enablePerl perl
+    ;
+
+  nativeBuildInputs = [ autoreconfHook gettext pkg-config ];
+
+  configureFlags = [
+    "--enable-finger"
+    "--enable-html-highlight"
+    "--enable-gopher"
+    "--enable-gemini"
+    "--enable-cgi"
+    "--enable-bittorrent"
+    "--enable-nntp"
+    "--enable-256-colors"
+    "--enable-true-color"
+    "--with-brotli"
+    "--with-lzma"
+    "--with-libev"
+    "--with-terminfo"
+  ] ++ lib.optional enableGuile        "--with-guile"
+    ++ lib.optional enablePython       "--with-python"
+    ++ lib.optional enablePerl         "--with-perl"
+    ;
+
+  meta = with lib; {
+    description = "Full-featured text-mode web browser (package based on the fork felinks)";
+    homepage = "https://github.com/rkd77/felinks";
+    license = licenses.gpl2;
+    platforms = with platforms; linux ++ darwin;
+    maintainers = with maintainers; [ iblech gebner ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/eolie/default.nix b/nixpkgs/pkgs/applications/networking/browsers/eolie/default.nix
new file mode 100644
index 000000000000..0508b4a19ef3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/eolie/default.nix
@@ -0,0 +1,79 @@
+{ lib, fetchgit, meson, ninja, pkg-config, nix-update-script
+, python3, gtk3, libsecret, gst_all_1, webkitgtk, glib
+, glib-networking, gtkspell3, hunspell, desktop-file-utils
+, gobject-introspection, wrapGAppsHook, gnome }:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "eolie";
+  version = "0.9.99";
+
+  format = "other";
+  doCheck = false;
+
+  src = fetchgit {
+    url = "https://gitlab.gnome.org/World/eolie";
+    rev = "refs/tags/${version}";
+    fetchSubmodules = true;
+    sha256 = "077jww5mqg6bbqbj0j1gss2j3dxlfr2xw8bc43k8vg52drqg6g8w";
+  };
+
+  nativeBuildInputs = [
+    desktop-file-utils
+    gobject-introspection
+    meson
+    ninja
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  buildInputs = with gst_all_1; [
+    glib-networking
+    gst-libav
+    gst-plugins-base
+    gst-plugins-ugly
+    gstreamer
+    gnome.gnome-settings-daemon
+    gtk3
+    gtkspell3
+    hunspell
+    libsecret
+    webkitgtk
+    glib
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    pyfxa
+    beautifulsoup4
+    cryptography
+    pycairo
+    pygobject3
+    python-dateutil
+    pycrypto
+  ];
+
+  postPatch = ''
+    chmod +x meson_post_install.py
+    patchShebangs meson_post_install.py
+  '';
+
+  dontWrapGApps = true;
+  preFixup = ''
+    buildPythonPath "$out $propagatedBuildInputs"
+    patchPythonScript "$out/libexec/eolie-sp"
+    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  strictDeps = false;
+
+  meta = with lib; {
+    description = "A new GNOME web browser";
+    homepage = "https://wiki.gnome.org/Apps/Eolie";
+    license  = licenses.gpl3Plus;
+    maintainers = with maintainers; [ samdroid-apps ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/ephemeral/default.nix b/nixpkgs/pkgs/applications/networking/browsers/ephemeral/default.nix
new file mode 100644
index 000000000000..4002d52715b3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/ephemeral/default.nix
@@ -0,0 +1,70 @@
+{ lib, stdenv
+, fetchFromGitHub
+, nix-update-script
+, desktop-file-utils
+, vala
+, gettext
+, glib
+, gtk3
+, libgee
+, libdazzle
+, meson
+, ninja
+, pantheon
+, pkg-config
+, python3
+, webkitgtk
+, wrapGAppsHook
+, glib-networking
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ephemeral";
+  version = "7.1.0";
+
+  src = fetchFromGitHub {
+    owner = "cassidyjames";
+    repo = "ephemeral";
+    rev = version;
+    sha256 = "sha256-07HO8nC2Pwz2EAea4ZzmqyMfQdgX8FVqDepdA6j/NT8=";
+  };
+
+  nativeBuildInputs = [
+    desktop-file-utils
+    gettext
+    meson
+    ninja
+    vala
+    pkg-config
+    python3
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    glib
+    glib-networking
+    gtk3
+    libdazzle
+    libgee
+    pantheon.granite
+    webkitgtk
+  ];
+
+  postPatch = ''
+    chmod +x meson/post_install.py
+    patchShebangs meson/post_install.py
+  '';
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    description = "The always-incognito web browser";
+    homepage = "https://github.com/cassidyjames/ephemeral";
+    maintainers = with maintainers; [ xiorcale ] ++ teams.pantheon.members;
+    platforms = platforms.linux;
+    license = licenses.gpl3;
+    mainProgram = "com.github.cassidyjames.ephemeral";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/firefox-bin/beta_sources.nix b/nixpkgs/pkgs/applications/networking/browsers/firefox-bin/beta_sources.nix
new file mode 100644
index 000000000000..bdbca6de93cb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/firefox-bin/beta_sources.nix
@@ -0,0 +1,1015 @@
+{
+  version = "118.0b7";
+  sources = [
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/ach/firefox-118.0b7.tar.bz2";
+      locale = "ach";
+      arch = "linux-x86_64";
+      sha256 = "927b23d08eaa437a049ec0362cbc71667081abd82d91de8a0566a2844198d297";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/af/firefox-118.0b7.tar.bz2";
+      locale = "af";
+      arch = "linux-x86_64";
+      sha256 = "9322442c685898838a374bf02b846539ef3bd314ee083cf58f43c995384e7aa8";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/an/firefox-118.0b7.tar.bz2";
+      locale = "an";
+      arch = "linux-x86_64";
+      sha256 = "ca677646708f56f2544aa2f37f3354237366eedd2a6a4c9c8335d3efdd59dd95";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/ar/firefox-118.0b7.tar.bz2";
+      locale = "ar";
+      arch = "linux-x86_64";
+      sha256 = "a23ac96581616cfbca172b6f7e181b5ae6d6b6b08d16d976d711a18f17dc67b5";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/ast/firefox-118.0b7.tar.bz2";
+      locale = "ast";
+      arch = "linux-x86_64";
+      sha256 = "25ae05c3130a51a9a81686f175652873c5a2b10303315804567ccc9b97597d51";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/az/firefox-118.0b7.tar.bz2";
+      locale = "az";
+      arch = "linux-x86_64";
+      sha256 = "bba681c4e24b1cdaa197d2f903ad630e29e56524831de08e4169cd81e09a8df4";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/be/firefox-118.0b7.tar.bz2";
+      locale = "be";
+      arch = "linux-x86_64";
+      sha256 = "52ad3bae8232c9d9b351226515453c217c6bcd7dac70e82874a168ca63bd01e1";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/bg/firefox-118.0b7.tar.bz2";
+      locale = "bg";
+      arch = "linux-x86_64";
+      sha256 = "49bea19ff2c196f47bba2ed0634df1bed6ef1174fa811910a2ab16224adab0f5";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/bn/firefox-118.0b7.tar.bz2";
+      locale = "bn";
+      arch = "linux-x86_64";
+      sha256 = "41a886c10f0387378dedb39c039a55891d78068d1804eaea1da272a2f9159783";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/br/firefox-118.0b7.tar.bz2";
+      locale = "br";
+      arch = "linux-x86_64";
+      sha256 = "b3a3131baadc9fe9cb556b5b9efcb63f118ce325576bbca01fd458e08b6d93af";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/bs/firefox-118.0b7.tar.bz2";
+      locale = "bs";
+      arch = "linux-x86_64";
+      sha256 = "e2404cbdbe7d3a497093040560ce8cc1d47e3f077008d239dd619fe885f73693";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/ca-valencia/firefox-118.0b7.tar.bz2";
+      locale = "ca-valencia";
+      arch = "linux-x86_64";
+      sha256 = "62ee15f6a28d31152c627efb998ae4c060afa93ed9bd396c58e2959cd6982b60";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/ca/firefox-118.0b7.tar.bz2";
+      locale = "ca";
+      arch = "linux-x86_64";
+      sha256 = "00a58fee6e16d483b339a341167e5bf774c7317d11c997f6b0b5fe86e37b6020";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/cak/firefox-118.0b7.tar.bz2";
+      locale = "cak";
+      arch = "linux-x86_64";
+      sha256 = "97ba1d4daa2fbdee57f08cacf8f8258dc4877215d4ebbee20ed87ffa44cd18c4";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/cs/firefox-118.0b7.tar.bz2";
+      locale = "cs";
+      arch = "linux-x86_64";
+      sha256 = "294c8d2a045793edce11e258715b8ca3b76305e93018b40267288deca26b2a21";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/cy/firefox-118.0b7.tar.bz2";
+      locale = "cy";
+      arch = "linux-x86_64";
+      sha256 = "8be0c23ee3f46c5076a864ecb448fcf999c69eec1b7ccf56c14d4a0f127dddd6";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/da/firefox-118.0b7.tar.bz2";
+      locale = "da";
+      arch = "linux-x86_64";
+      sha256 = "05837b4fada24c35133f01e99538e45af42a52d3b1085d1493489e90c30d498a";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/de/firefox-118.0b7.tar.bz2";
+      locale = "de";
+      arch = "linux-x86_64";
+      sha256 = "f6289b61cd8e85f6be27f98af4e12c81ce1839a9d73c04e80123a79ce8dc99a2";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/dsb/firefox-118.0b7.tar.bz2";
+      locale = "dsb";
+      arch = "linux-x86_64";
+      sha256 = "08f1e61ab9feaf4535f498cb8d24d4f143e8cbedc23e929b3450b80b6787a7fc";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/el/firefox-118.0b7.tar.bz2";
+      locale = "el";
+      arch = "linux-x86_64";
+      sha256 = "d067bfb568504bebcb23b564ece344422c07fb51f816939efc4174e38dc0b6a6";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/en-CA/firefox-118.0b7.tar.bz2";
+      locale = "en-CA";
+      arch = "linux-x86_64";
+      sha256 = "60c6723f39bb51b794f41f710ffbbf068b81ec4fe86d3c12609ded37a4c41c87";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/en-GB/firefox-118.0b7.tar.bz2";
+      locale = "en-GB";
+      arch = "linux-x86_64";
+      sha256 = "2c923d118b83f80697529f02a375c3ab429f3932447a899e29f33535012371da";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/en-US/firefox-118.0b7.tar.bz2";
+      locale = "en-US";
+      arch = "linux-x86_64";
+      sha256 = "7996a74adba7ec91046d4fdac581908b44762159a05a2d6b4da21b225fa53758";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/eo/firefox-118.0b7.tar.bz2";
+      locale = "eo";
+      arch = "linux-x86_64";
+      sha256 = "d10c9bdd4bc1977326b92a7d3f562529295a7117edaf669865ff58cfb33be77d";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/es-AR/firefox-118.0b7.tar.bz2";
+      locale = "es-AR";
+      arch = "linux-x86_64";
+      sha256 = "b8986038b0bb031c136e84d154f100447ebd92aca41ad4d96ed8d31be7703a39";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/es-CL/firefox-118.0b7.tar.bz2";
+      locale = "es-CL";
+      arch = "linux-x86_64";
+      sha256 = "b006eafce9f1ed9cec4187abd85c4379e6e2e197a9a1e1dd77609a31f840232e";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/es-ES/firefox-118.0b7.tar.bz2";
+      locale = "es-ES";
+      arch = "linux-x86_64";
+      sha256 = "7824b476106a39f57329baa9a4b1c0edfd3504e00052328c357ce718e940a63e";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/es-MX/firefox-118.0b7.tar.bz2";
+      locale = "es-MX";
+      arch = "linux-x86_64";
+      sha256 = "e706368b446da3ecc6eda5e21b3b0df5def5d48507dc37e9963d2157f55f27eb";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/et/firefox-118.0b7.tar.bz2";
+      locale = "et";
+      arch = "linux-x86_64";
+      sha256 = "0ec50e56ea2da57075415ee174caa1ebcf497624cd20cecc0f9924eb9878f823";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/eu/firefox-118.0b7.tar.bz2";
+      locale = "eu";
+      arch = "linux-x86_64";
+      sha256 = "66ef55ce60e84677741d4cc25ac0198b7c15d0ee9cc7b1b92e9db7955b280951";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/fa/firefox-118.0b7.tar.bz2";
+      locale = "fa";
+      arch = "linux-x86_64";
+      sha256 = "0ef498486ad9569d11d0e6c861b9669cf89dda47a62af33326d702c411aaa1d3";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/ff/firefox-118.0b7.tar.bz2";
+      locale = "ff";
+      arch = "linux-x86_64";
+      sha256 = "693cd9947724b00f2e1a4bb6b361077af185f823d8bc7b8b0ea3a032a5af49b4";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/fi/firefox-118.0b7.tar.bz2";
+      locale = "fi";
+      arch = "linux-x86_64";
+      sha256 = "889dc27c1bed74b67a1a58d530c13464bf8494a58c558e9c4105d892d3232a7e";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/fr/firefox-118.0b7.tar.bz2";
+      locale = "fr";
+      arch = "linux-x86_64";
+      sha256 = "a0ab2bf72fcc751d53566066799d50013245622304cf9197ec55a7c80d00a6f9";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/fur/firefox-118.0b7.tar.bz2";
+      locale = "fur";
+      arch = "linux-x86_64";
+      sha256 = "5dce0c8b7122fff2f0773430995cc18345d55d9d0362cbc8380574a05f3a09bd";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/fy-NL/firefox-118.0b7.tar.bz2";
+      locale = "fy-NL";
+      arch = "linux-x86_64";
+      sha256 = "8e8f6a84d4077613b14a57bdd3e607f36624332b237e77a57dda6620fcb8de5f";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/ga-IE/firefox-118.0b7.tar.bz2";
+      locale = "ga-IE";
+      arch = "linux-x86_64";
+      sha256 = "383a71b75a9909066afbd69a3aaf8a5ae95a2a3c2f90a59e3028bb01e25c71b1";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/gd/firefox-118.0b7.tar.bz2";
+      locale = "gd";
+      arch = "linux-x86_64";
+      sha256 = "24141e0c75c5114ccde9c3853015bddb8799b12c3113bcd83fd707633ceff676";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/gl/firefox-118.0b7.tar.bz2";
+      locale = "gl";
+      arch = "linux-x86_64";
+      sha256 = "6e348e99f5d0dba196354db82ed99dc586d80d44c02f9136957a770d3bcb457b";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/gn/firefox-118.0b7.tar.bz2";
+      locale = "gn";
+      arch = "linux-x86_64";
+      sha256 = "309d26d9786e1404381c981f355e8d79dfcc859ef55022f3e37746b9c008a32e";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/gu-IN/firefox-118.0b7.tar.bz2";
+      locale = "gu-IN";
+      arch = "linux-x86_64";
+      sha256 = "e42300c6bbd770df2e5f6b5748f2877befccf24131bbd840f3f680041294a34f";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/he/firefox-118.0b7.tar.bz2";
+      locale = "he";
+      arch = "linux-x86_64";
+      sha256 = "db1818b6595d68b48c50cd71f96d038d8f2c55d437869d19bf56c070ccdd98c2";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/hi-IN/firefox-118.0b7.tar.bz2";
+      locale = "hi-IN";
+      arch = "linux-x86_64";
+      sha256 = "18988ac38158a1f4432a0678ad7aaea667e154b77fa5198b4a9a5ade788232aa";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/hr/firefox-118.0b7.tar.bz2";
+      locale = "hr";
+      arch = "linux-x86_64";
+      sha256 = "cd670853ceadaa6bb9206964f0938bbfba6ff84dd0b64294156ec4a3984ab299";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/hsb/firefox-118.0b7.tar.bz2";
+      locale = "hsb";
+      arch = "linux-x86_64";
+      sha256 = "7c33568dc56bd19c6cf6f62270d15d7f6c59327e5ef8433cdb9681bb0ff7d3ac";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/hu/firefox-118.0b7.tar.bz2";
+      locale = "hu";
+      arch = "linux-x86_64";
+      sha256 = "73130c877c94a2e403cae994b310127561c6bdfef4afc53b631b6082c5a8b4a8";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/hy-AM/firefox-118.0b7.tar.bz2";
+      locale = "hy-AM";
+      arch = "linux-x86_64";
+      sha256 = "40d49f285f65ba8d1dd273f988860c0ce5dc1722cb8c050a9e870fdc98835434";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/ia/firefox-118.0b7.tar.bz2";
+      locale = "ia";
+      arch = "linux-x86_64";
+      sha256 = "7856c687fd72302932ecaa8b3ebd2ae827fc0c2ac32ac4a6a0628b43b55fae93";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/id/firefox-118.0b7.tar.bz2";
+      locale = "id";
+      arch = "linux-x86_64";
+      sha256 = "39b46d47f8f9c009e0410a636048e301e7125513bfa07e7d2b26620f26f2f23b";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/is/firefox-118.0b7.tar.bz2";
+      locale = "is";
+      arch = "linux-x86_64";
+      sha256 = "6fa46f794998f34fe0a504a9aa9f515b8f9970337a88f9e2b32e2a6be4f5ec26";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/it/firefox-118.0b7.tar.bz2";
+      locale = "it";
+      arch = "linux-x86_64";
+      sha256 = "0c54af2d504e27d5274fd6f48cb8b310625747399bf1f3652cf2218c32f7e1f6";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/ja/firefox-118.0b7.tar.bz2";
+      locale = "ja";
+      arch = "linux-x86_64";
+      sha256 = "64d06989961b531449e1dafd27ae952300ce13523a257154f3fecc0450677bbb";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/ka/firefox-118.0b7.tar.bz2";
+      locale = "ka";
+      arch = "linux-x86_64";
+      sha256 = "8b0de70801dd1c98b2ecd7bded83e050f8c374ea13a65b804e29a53c39c1a4f3";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/kab/firefox-118.0b7.tar.bz2";
+      locale = "kab";
+      arch = "linux-x86_64";
+      sha256 = "7eb96d67615f8dfd11bf8628e2a9cf54312217a790aab80c3c60067aff99cd02";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/kk/firefox-118.0b7.tar.bz2";
+      locale = "kk";
+      arch = "linux-x86_64";
+      sha256 = "506c3ae8d62c7e744d2763295f7350601c7a2ec77c58f6579daebad49db32546";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/km/firefox-118.0b7.tar.bz2";
+      locale = "km";
+      arch = "linux-x86_64";
+      sha256 = "7c953b3f7fe4714bbecfd3d37a335b30ef90fef40ca883128eb471f0ef337a68";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/kn/firefox-118.0b7.tar.bz2";
+      locale = "kn";
+      arch = "linux-x86_64";
+      sha256 = "b6c834a8a57b2a5f0c01b41e305d3e655a84d19f9241a903121cbe9af0dea884";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/ko/firefox-118.0b7.tar.bz2";
+      locale = "ko";
+      arch = "linux-x86_64";
+      sha256 = "c3ccc27ac5e7c52dd558e703d944e3cc567c6863d75d536564a50318df93d8e4";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/lij/firefox-118.0b7.tar.bz2";
+      locale = "lij";
+      arch = "linux-x86_64";
+      sha256 = "49bb895b55f211ca0302df2d0b7093bd0365cb7eda3a474b79cf3e7e6c0381a3";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/lt/firefox-118.0b7.tar.bz2";
+      locale = "lt";
+      arch = "linux-x86_64";
+      sha256 = "df926cba446cabe9bf2f3f5933ea881e865f0fa567a357557588455446e7619e";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/lv/firefox-118.0b7.tar.bz2";
+      locale = "lv";
+      arch = "linux-x86_64";
+      sha256 = "54e46c92fac0f33cfa59ea1e7be395f874a4c1cdefd1728e7dbdb4ca45732557";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/mk/firefox-118.0b7.tar.bz2";
+      locale = "mk";
+      arch = "linux-x86_64";
+      sha256 = "e6b36e5a24381f8433d47890ac10ce687ebc29644e58db75fe597fa0b471495b";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/mr/firefox-118.0b7.tar.bz2";
+      locale = "mr";
+      arch = "linux-x86_64";
+      sha256 = "32805a9ad156e5895f79d1347367cf58762256d92e11791ca5a24119aea01502";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/ms/firefox-118.0b7.tar.bz2";
+      locale = "ms";
+      arch = "linux-x86_64";
+      sha256 = "ad3292010436f2c63bf6ab8bdbb157dff0a6ec7b1504fccf1c72ce5a663891e2";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/my/firefox-118.0b7.tar.bz2";
+      locale = "my";
+      arch = "linux-x86_64";
+      sha256 = "42394f78559057c2d3c821af4c451b644d3ec700c0b5bccb27905be0ab97b5b7";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/nb-NO/firefox-118.0b7.tar.bz2";
+      locale = "nb-NO";
+      arch = "linux-x86_64";
+      sha256 = "8a7e8100f03d3e67666b87e070e88534add45173edd86a7b5a48a81d9ae7fdf0";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/ne-NP/firefox-118.0b7.tar.bz2";
+      locale = "ne-NP";
+      arch = "linux-x86_64";
+      sha256 = "3c839076057b784dbae0f08c84a4236a8c8fa37f4ddd235aa30b6d9454ba38e3";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/nl/firefox-118.0b7.tar.bz2";
+      locale = "nl";
+      arch = "linux-x86_64";
+      sha256 = "3bbdbcc306b81d976fb4d28503884d0f7d8ea67ef89eafe9bde5c489360d1f3e";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/nn-NO/firefox-118.0b7.tar.bz2";
+      locale = "nn-NO";
+      arch = "linux-x86_64";
+      sha256 = "1257bb17eb1f1f00ae21529950095f0094b06f4bc78de703f889c497c5afdef4";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/oc/firefox-118.0b7.tar.bz2";
+      locale = "oc";
+      arch = "linux-x86_64";
+      sha256 = "b8e74c3f90f988ebe87f4eeda61b533373235eaea7b7147b65bc09e2b8a16ed7";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/pa-IN/firefox-118.0b7.tar.bz2";
+      locale = "pa-IN";
+      arch = "linux-x86_64";
+      sha256 = "e1a542bab18fde992df779bc236ccc5d0cbb16247e5805fbdcd575e4bdb0be4a";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/pl/firefox-118.0b7.tar.bz2";
+      locale = "pl";
+      arch = "linux-x86_64";
+      sha256 = "6341bcaa8a7b670556514b5c315d11f5d47ca75f49731292dd4b482e33887718";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/pt-BR/firefox-118.0b7.tar.bz2";
+      locale = "pt-BR";
+      arch = "linux-x86_64";
+      sha256 = "44cfa500eb0518a4a183ce14c51e1be0bb2a2540dfc78aec5166ea3c2373618f";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/pt-PT/firefox-118.0b7.tar.bz2";
+      locale = "pt-PT";
+      arch = "linux-x86_64";
+      sha256 = "344c3c6e3f8382396ee305d07da5aafd8a5287951f2bd82f12be4ad5fb83de4c";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/rm/firefox-118.0b7.tar.bz2";
+      locale = "rm";
+      arch = "linux-x86_64";
+      sha256 = "40e5bd2aedb9cf4b211742f9ba2d4ad884b90c7b3e99f58ea54503f179d6787b";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/ro/firefox-118.0b7.tar.bz2";
+      locale = "ro";
+      arch = "linux-x86_64";
+      sha256 = "9390b9be83e0f3dc58bac8ca1729b6a40c520ca2d83a439807f7273fe11a42d3";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/ru/firefox-118.0b7.tar.bz2";
+      locale = "ru";
+      arch = "linux-x86_64";
+      sha256 = "e5b49b2e82b442f0727d0f7b5e88a8b914bdd0568eab41f42a0e2e6aab8e2928";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/sc/firefox-118.0b7.tar.bz2";
+      locale = "sc";
+      arch = "linux-x86_64";
+      sha256 = "9e3d2731965410ebc45285d27bf91a6dbd23e95e07c35833d2039f04c26a473a";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/sco/firefox-118.0b7.tar.bz2";
+      locale = "sco";
+      arch = "linux-x86_64";
+      sha256 = "cbd50a5ed50873e82a7a935087ddfe9413a6e181dcd1ebfb9432a19f135fb5f8";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/si/firefox-118.0b7.tar.bz2";
+      locale = "si";
+      arch = "linux-x86_64";
+      sha256 = "590a1aa198a00ae8047b1632bfc6e0f957f9e88b1174a15fea7d8e1d1df00030";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/sk/firefox-118.0b7.tar.bz2";
+      locale = "sk";
+      arch = "linux-x86_64";
+      sha256 = "245957967e87226272c27fa80a4a1655949d37af5d49bbf52add0a03f982574b";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/sl/firefox-118.0b7.tar.bz2";
+      locale = "sl";
+      arch = "linux-x86_64";
+      sha256 = "ad6401ad2be3991018e09be93ceddc2117382d0092a71d3b39b640dc581d1f03";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/son/firefox-118.0b7.tar.bz2";
+      locale = "son";
+      arch = "linux-x86_64";
+      sha256 = "de57c4e28301968faae7a054ca600b327a438a737f10e4f73f6a832ff14bfaff";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/sq/firefox-118.0b7.tar.bz2";
+      locale = "sq";
+      arch = "linux-x86_64";
+      sha256 = "5c06005f2e104d49deff29a88b32118f1272642d1b251e7d0c8e0cd08525ebd6";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/sr/firefox-118.0b7.tar.bz2";
+      locale = "sr";
+      arch = "linux-x86_64";
+      sha256 = "72b8d904f2a3a72489a44b927c7691229f876e63c989ec508ad66401d8f6a0ba";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/sv-SE/firefox-118.0b7.tar.bz2";
+      locale = "sv-SE";
+      arch = "linux-x86_64";
+      sha256 = "c46376ecfeb2f1da8cdeace918b2b59eb1528c4ac5e82afb26b42d4cc483e224";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/szl/firefox-118.0b7.tar.bz2";
+      locale = "szl";
+      arch = "linux-x86_64";
+      sha256 = "a1aa2bce8ba89c2ed0e32713a987b9809ef7424fe2e76020862c1e0af3fe1ce9";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/ta/firefox-118.0b7.tar.bz2";
+      locale = "ta";
+      arch = "linux-x86_64";
+      sha256 = "0220a05ab3ef23cf5ed4e1638a2e0a9230415ce44f99ae9ff538261e045d6ac2";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/te/firefox-118.0b7.tar.bz2";
+      locale = "te";
+      arch = "linux-x86_64";
+      sha256 = "1b5bd39af85f42019688196cdd21b375c9112eb78c48043e28439d24f7a1f9d7";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/tg/firefox-118.0b7.tar.bz2";
+      locale = "tg";
+      arch = "linux-x86_64";
+      sha256 = "618f9570ea2384a67e29d67d8b6e1b97806ac32c6619b0ecb3d53a30490eeae0";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/th/firefox-118.0b7.tar.bz2";
+      locale = "th";
+      arch = "linux-x86_64";
+      sha256 = "e1634d9ff6c5ff3588fd038bde05409ed805a55e0b44d2272b7057a2381103e3";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/tl/firefox-118.0b7.tar.bz2";
+      locale = "tl";
+      arch = "linux-x86_64";
+      sha256 = "fe6dade8035519339ab6b1238198a6e88705ea8b5ac0bdee169496e5a30bad2c";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/tr/firefox-118.0b7.tar.bz2";
+      locale = "tr";
+      arch = "linux-x86_64";
+      sha256 = "ddb0b537342f718e9ef915766b6710c433ae5d595a00a3735b50081c245279c0";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/trs/firefox-118.0b7.tar.bz2";
+      locale = "trs";
+      arch = "linux-x86_64";
+      sha256 = "671d1f388b7d2aff287eca5ebb022b5931dc31362476479cde72db1bae88d34c";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/uk/firefox-118.0b7.tar.bz2";
+      locale = "uk";
+      arch = "linux-x86_64";
+      sha256 = "214799ee81c4160b92689bdf43cc88fb1429b5a96f5311df8118c94c133ee26a";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/ur/firefox-118.0b7.tar.bz2";
+      locale = "ur";
+      arch = "linux-x86_64";
+      sha256 = "7b48f18e3ca3aef824f077185dbcf820254d3c8c28b5bd0f0d2d92950025573a";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/uz/firefox-118.0b7.tar.bz2";
+      locale = "uz";
+      arch = "linux-x86_64";
+      sha256 = "fd8be16eac6c1968b28a09b761a2aac1b5372a651b62ad09712f334cd843ab1b";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/vi/firefox-118.0b7.tar.bz2";
+      locale = "vi";
+      arch = "linux-x86_64";
+      sha256 = "787d8594fbdd3b1a50530ef4bc62e0c75c5d0db305ecaa95be0b9e8797bed558";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/xh/firefox-118.0b7.tar.bz2";
+      locale = "xh";
+      arch = "linux-x86_64";
+      sha256 = "aaf93061c1e64f44a18f85da8a6b492f8367309e7523b8886fc53c32d868e243";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/zh-CN/firefox-118.0b7.tar.bz2";
+      locale = "zh-CN";
+      arch = "linux-x86_64";
+      sha256 = "bdcdc95c1848819594e5bd3547d577469b23ea6a7e81502ba51701d9bccae7f6";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-x86_64/zh-TW/firefox-118.0b7.tar.bz2";
+      locale = "zh-TW";
+      arch = "linux-x86_64";
+      sha256 = "7dbe3b05d06f475c13d2a42a282f2cdaa9fe34cdcd6d8865face2568a103148f";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/ach/firefox-118.0b7.tar.bz2";
+      locale = "ach";
+      arch = "linux-i686";
+      sha256 = "8f0bf83e63a419c8bed0ee8d072da47351b7343015c0be543ef2d86db13a5be7";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/af/firefox-118.0b7.tar.bz2";
+      locale = "af";
+      arch = "linux-i686";
+      sha256 = "cee8c6ab72ad2f21dde5b29bad562e9633d419ce6924617ae4df348d97a6fe6f";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/an/firefox-118.0b7.tar.bz2";
+      locale = "an";
+      arch = "linux-i686";
+      sha256 = "acf491172cd3fa0a23a84dec9064a2484bbf8bf20c7d98283d455185e5865360";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/ar/firefox-118.0b7.tar.bz2";
+      locale = "ar";
+      arch = "linux-i686";
+      sha256 = "4d22e3f7c91a4f49cb8549784a92775922032c9371c737b460bef828d3953ea5";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/ast/firefox-118.0b7.tar.bz2";
+      locale = "ast";
+      arch = "linux-i686";
+      sha256 = "ed0e30a41ca74ddd5bdbca9afb7d8d8f56d88899aa572ea86e41ee9d2bff0fa5";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/az/firefox-118.0b7.tar.bz2";
+      locale = "az";
+      arch = "linux-i686";
+      sha256 = "5c5a2b0a8cba6dabe1a653351659d3b693234534588e447593a795eba2bef701";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/be/firefox-118.0b7.tar.bz2";
+      locale = "be";
+      arch = "linux-i686";
+      sha256 = "61bf3424e44bc6671bc1d9c84084536539287a0f6384b9d8b93b307ac9675773";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/bg/firefox-118.0b7.tar.bz2";
+      locale = "bg";
+      arch = "linux-i686";
+      sha256 = "7a6c2319c8f808125b356411036268e4d3e07057f71ac12f3c8a31479c0e4eab";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/bn/firefox-118.0b7.tar.bz2";
+      locale = "bn";
+      arch = "linux-i686";
+      sha256 = "79a061ad747d3c22d2ca6be8704d803119a15435bdcab5ef27c5c02892787487";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/br/firefox-118.0b7.tar.bz2";
+      locale = "br";
+      arch = "linux-i686";
+      sha256 = "72574d1c512186e9671b055e15ae124a4b1a42551d5f7182b382c3a333143483";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/bs/firefox-118.0b7.tar.bz2";
+      locale = "bs";
+      arch = "linux-i686";
+      sha256 = "6022b703e87f4ff9f1618e3dcb28f116f73e93e9b32de2f50860990e0a726bef";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/ca-valencia/firefox-118.0b7.tar.bz2";
+      locale = "ca-valencia";
+      arch = "linux-i686";
+      sha256 = "c658f016edc5f846f280b53647116e40d4dc8dcbae2c006b3ec77a75300d8158";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/ca/firefox-118.0b7.tar.bz2";
+      locale = "ca";
+      arch = "linux-i686";
+      sha256 = "5310b514a5047f4f0ba7296b6a41c74ba6e64b33dde66d46fb0c77c17bd1a898";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/cak/firefox-118.0b7.tar.bz2";
+      locale = "cak";
+      arch = "linux-i686";
+      sha256 = "fcf3b1f91df686192087119ff75a9e0c98fd43be07a3c07e6769ff4a8c9a728b";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/cs/firefox-118.0b7.tar.bz2";
+      locale = "cs";
+      arch = "linux-i686";
+      sha256 = "a97a2105016c72ef8c756f321aeffb54d65dce043eba5c6cff0bc3d945022012";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/cy/firefox-118.0b7.tar.bz2";
+      locale = "cy";
+      arch = "linux-i686";
+      sha256 = "90e2a6544cd0afc49192124590d4e652aeaf69c9d97abc43b5cb97adf9235166";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/da/firefox-118.0b7.tar.bz2";
+      locale = "da";
+      arch = "linux-i686";
+      sha256 = "3a1d11e555e1eca39fcd7d424f74d2f2f5e2f939570fc65edc502fc73860f9a7";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/de/firefox-118.0b7.tar.bz2";
+      locale = "de";
+      arch = "linux-i686";
+      sha256 = "a41181dbd72a5478d7853ef648fbde0ae221860fd012625491f7f88e4963c50f";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/dsb/firefox-118.0b7.tar.bz2";
+      locale = "dsb";
+      arch = "linux-i686";
+      sha256 = "dbc5d17e8b48f0813ea6e03dfdfb590f7bf9c081191b2a376dec8887afb3b9e0";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/el/firefox-118.0b7.tar.bz2";
+      locale = "el";
+      arch = "linux-i686";
+      sha256 = "bd40bb516861c0d3638bfb7f74968f0bd132582bb4a2c9caca6f456e3ed1aa1a";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/en-CA/firefox-118.0b7.tar.bz2";
+      locale = "en-CA";
+      arch = "linux-i686";
+      sha256 = "c5be2a5a180a86e6decb039f9ec9805a871df2e7ed4208f222de9cc25d95d043";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/en-GB/firefox-118.0b7.tar.bz2";
+      locale = "en-GB";
+      arch = "linux-i686";
+      sha256 = "49553f8f0e12d9fc21fa4772804e97a76449f7d340d09a3242b7dc095d6a5832";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/en-US/firefox-118.0b7.tar.bz2";
+      locale = "en-US";
+      arch = "linux-i686";
+      sha256 = "3b0464248546834209c6c5d0156fc7c124860a0642da1d92e550a6075cc8e650";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/eo/firefox-118.0b7.tar.bz2";
+      locale = "eo";
+      arch = "linux-i686";
+      sha256 = "5d85c7033b9318f6069f98c22c364c161075278b0728aff3f853762709671cc2";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/es-AR/firefox-118.0b7.tar.bz2";
+      locale = "es-AR";
+      arch = "linux-i686";
+      sha256 = "171140b394f30d53b28954c84ac0ea3fcda4efdb578f08e497245faedce7d2fb";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/es-CL/firefox-118.0b7.tar.bz2";
+      locale = "es-CL";
+      arch = "linux-i686";
+      sha256 = "e5109568a762de7d63569d675dedfad11482c1af39f8baa9a279973804436116";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/es-ES/firefox-118.0b7.tar.bz2";
+      locale = "es-ES";
+      arch = "linux-i686";
+      sha256 = "c828143f1c67eb422329340a905bf418d8fce36e30580a2ecc810200de004fbd";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/es-MX/firefox-118.0b7.tar.bz2";
+      locale = "es-MX";
+      arch = "linux-i686";
+      sha256 = "0a0e374129d66c199321b07e9d8647da1d3332e7ab95a8f9fcf8004b8fc3f5a5";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/et/firefox-118.0b7.tar.bz2";
+      locale = "et";
+      arch = "linux-i686";
+      sha256 = "1b9b726b892f7d5a92d6ec4de5dca3873ecdc7bcbd9e634a52c152944b370c3e";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/eu/firefox-118.0b7.tar.bz2";
+      locale = "eu";
+      arch = "linux-i686";
+      sha256 = "e480a8524e6ebaaadc117de3d1a60208c4e5a77f860650e366c98c9df3e89345";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/fa/firefox-118.0b7.tar.bz2";
+      locale = "fa";
+      arch = "linux-i686";
+      sha256 = "6e4d9eb29d7745b3a8217483c5a02b0ecfea89088c4a358574a0918d667d7e71";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/ff/firefox-118.0b7.tar.bz2";
+      locale = "ff";
+      arch = "linux-i686";
+      sha256 = "c1bf681ba47a5ce93596364e285f659a84153d880dde59528e304005e11a7c18";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/fi/firefox-118.0b7.tar.bz2";
+      locale = "fi";
+      arch = "linux-i686";
+      sha256 = "12ca7d5dea586ab75be655b19d9e70af759e1696fc9c8f47cc24c031060f27fb";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/fr/firefox-118.0b7.tar.bz2";
+      locale = "fr";
+      arch = "linux-i686";
+      sha256 = "84e9fcd7b14cb71e05924fc6d218cb3ea7fb99d60589c8f74de8b3133e947607";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/fur/firefox-118.0b7.tar.bz2";
+      locale = "fur";
+      arch = "linux-i686";
+      sha256 = "9dd5189d11a1fc7fbea7806f61ac0516d9603b324e6107ecc123e377d0a5d72e";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/fy-NL/firefox-118.0b7.tar.bz2";
+      locale = "fy-NL";
+      arch = "linux-i686";
+      sha256 = "7a1398de7189ed0377237c0b59cd49e6a74724d6a59d7bbe725fbfb698e718c7";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/ga-IE/firefox-118.0b7.tar.bz2";
+      locale = "ga-IE";
+      arch = "linux-i686";
+      sha256 = "5299ad001b12338f06c7b283b82d12099b7bb779e8a36d6b6d01933a14899ca1";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/gd/firefox-118.0b7.tar.bz2";
+      locale = "gd";
+      arch = "linux-i686";
+      sha256 = "f8d14859bfd28b837457bbe0f04a6625d67b087e7d7167d24c37d816df5998cf";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/gl/firefox-118.0b7.tar.bz2";
+      locale = "gl";
+      arch = "linux-i686";
+      sha256 = "5d0ba4487832b885013dea9649c3f364376e2885c1a8894e94fce071885eccae";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/gn/firefox-118.0b7.tar.bz2";
+      locale = "gn";
+      arch = "linux-i686";
+      sha256 = "9d8343f108b3dd4574b0f2c037f38b89da0101e64c4839a5b780b78a66a49afb";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/gu-IN/firefox-118.0b7.tar.bz2";
+      locale = "gu-IN";
+      arch = "linux-i686";
+      sha256 = "fad3fde6ed19a666c140d30f1c0cd9b3dc0506cdc8d368b5568147fb5a0488a9";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/he/firefox-118.0b7.tar.bz2";
+      locale = "he";
+      arch = "linux-i686";
+      sha256 = "ecd9d157c0de8595d728cb16c17e666a386e343a2b090ac7f7ebf1fc8c7edf3a";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/hi-IN/firefox-118.0b7.tar.bz2";
+      locale = "hi-IN";
+      arch = "linux-i686";
+      sha256 = "f4a06610af8fe577e6805af2b7137df0537b652a0206c3aaeb17e5f95aa10778";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/hr/firefox-118.0b7.tar.bz2";
+      locale = "hr";
+      arch = "linux-i686";
+      sha256 = "4fd6a69a70c970462f95867da9320555b05143820276fd169aab4d7e7a1ade1a";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/hsb/firefox-118.0b7.tar.bz2";
+      locale = "hsb";
+      arch = "linux-i686";
+      sha256 = "3d5563af77c23d73428cc946edc64293c22e50217b36af4be403c86516c77c6b";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/hu/firefox-118.0b7.tar.bz2";
+      locale = "hu";
+      arch = "linux-i686";
+      sha256 = "8db603b623d3a0ddec27aba053e216cc1b8e0099f90fe847ce7983f25ffbf88a";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/hy-AM/firefox-118.0b7.tar.bz2";
+      locale = "hy-AM";
+      arch = "linux-i686";
+      sha256 = "d29bb7e51635f1fc3ebb30bf54668bc38c7ff2871755b933ba4bda3444bbad11";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/ia/firefox-118.0b7.tar.bz2";
+      locale = "ia";
+      arch = "linux-i686";
+      sha256 = "17d976e7cc746187e61ffba1d103e9c86fda529c4e93db047a4a6130253fc540";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/id/firefox-118.0b7.tar.bz2";
+      locale = "id";
+      arch = "linux-i686";
+      sha256 = "94ca91cf7f2cc2fcdbaaa32967a3c59ac886c7d1cd85da09f1ada15d44093eb7";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/is/firefox-118.0b7.tar.bz2";
+      locale = "is";
+      arch = "linux-i686";
+      sha256 = "ae2e3a6a571111eba79cc4c7e9e233c4c88cfdfd5dafabe97b2f15293f4045d3";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/it/firefox-118.0b7.tar.bz2";
+      locale = "it";
+      arch = "linux-i686";
+      sha256 = "5f7755f535b02aa19310d669a4bd7501060d765f9b9709c8cdeaf0eecc5fed0e";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/ja/firefox-118.0b7.tar.bz2";
+      locale = "ja";
+      arch = "linux-i686";
+      sha256 = "6108396998632ca17d07c6a3682e12ec000e058453a85cc925a476b3c97effcf";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/ka/firefox-118.0b7.tar.bz2";
+      locale = "ka";
+      arch = "linux-i686";
+      sha256 = "feffdd08f43e54df69fd2a449f0cf9c3c760c783132afd67cfb2362716714b2c";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/kab/firefox-118.0b7.tar.bz2";
+      locale = "kab";
+      arch = "linux-i686";
+      sha256 = "1064382ea33189da63fc5266a3e137c65e920f1790416dcf9ac25134f01c6031";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/kk/firefox-118.0b7.tar.bz2";
+      locale = "kk";
+      arch = "linux-i686";
+      sha256 = "2a8a3f0590225d08f62a586444ff04fa845df295ce4b00badfbe384269d8af74";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/km/firefox-118.0b7.tar.bz2";
+      locale = "km";
+      arch = "linux-i686";
+      sha256 = "2110d9f3abd88d003e3a282bc16a0625831754679d85d17884397b4bb35e4736";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/kn/firefox-118.0b7.tar.bz2";
+      locale = "kn";
+      arch = "linux-i686";
+      sha256 = "e693ef17e93c1a93d2de62b95a91429d4995beacddc814324265b9e4f03ace5d";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/ko/firefox-118.0b7.tar.bz2";
+      locale = "ko";
+      arch = "linux-i686";
+      sha256 = "0a15daa9a92dbbc41c26fdf9ee2d16ea3c172059d1279aa503cf15d827be3035";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/lij/firefox-118.0b7.tar.bz2";
+      locale = "lij";
+      arch = "linux-i686";
+      sha256 = "a17b17a01b481eca2791be69c9fd36805579a03acf4c81bb1b9c487a521997d7";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/lt/firefox-118.0b7.tar.bz2";
+      locale = "lt";
+      arch = "linux-i686";
+      sha256 = "3eb0dbf192e1794eec93705411fff05bb6750c6b3997733e5b1233166fe5f81d";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/lv/firefox-118.0b7.tar.bz2";
+      locale = "lv";
+      arch = "linux-i686";
+      sha256 = "11142bce2c3ee62564b6912acc5a752170a5d15f95b57f3f8ce4d0b03cdfbc39";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/mk/firefox-118.0b7.tar.bz2";
+      locale = "mk";
+      arch = "linux-i686";
+      sha256 = "0673029c2f79a1fa9a8924bab670f01e70b9874fc5277676b9e3aa7aa4317b30";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/mr/firefox-118.0b7.tar.bz2";
+      locale = "mr";
+      arch = "linux-i686";
+      sha256 = "7bd30775280530d16ca4a72c36e4b22c0dd2a290af1e005f64f1a09c7e3aad8b";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/ms/firefox-118.0b7.tar.bz2";
+      locale = "ms";
+      arch = "linux-i686";
+      sha256 = "faf9e70e5db3bb57b996767ad0c604bfa8f01bfc898c73a24eb14f9b91f8d763";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/my/firefox-118.0b7.tar.bz2";
+      locale = "my";
+      arch = "linux-i686";
+      sha256 = "89dfb392d236b25f7f654915a58a60a1b4d5c6528bb1aa15acd8eb6aeeea204f";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/nb-NO/firefox-118.0b7.tar.bz2";
+      locale = "nb-NO";
+      arch = "linux-i686";
+      sha256 = "5cd920a199628568e5f89957f36862dd675844ef3e49098b90edb3b5a33759e2";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/ne-NP/firefox-118.0b7.tar.bz2";
+      locale = "ne-NP";
+      arch = "linux-i686";
+      sha256 = "d86fa39aa8df975836cde229e4ffbaf27bb3bf32a80125c823fced889268207a";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/nl/firefox-118.0b7.tar.bz2";
+      locale = "nl";
+      arch = "linux-i686";
+      sha256 = "085275fda30e08b38d6916a697d16bae261fc2b2d60503e5d5d28f67037c7365";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/nn-NO/firefox-118.0b7.tar.bz2";
+      locale = "nn-NO";
+      arch = "linux-i686";
+      sha256 = "f6a42642f05cb76db30985699f85a8d9694ccda9111fb3b39071e7a3df3d7109";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/oc/firefox-118.0b7.tar.bz2";
+      locale = "oc";
+      arch = "linux-i686";
+      sha256 = "e565ef61f42880aa74b69b30205659bd62107883acfaa766a09c1159e8f4c7d5";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/pa-IN/firefox-118.0b7.tar.bz2";
+      locale = "pa-IN";
+      arch = "linux-i686";
+      sha256 = "cf4ec497ca0b652f5ffa20d99d9b683a692bfe216d0cc149712847008866a1ff";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/pl/firefox-118.0b7.tar.bz2";
+      locale = "pl";
+      arch = "linux-i686";
+      sha256 = "b404312d5739d2890fc8cab024f179425a9bdbd8282b1967e11f2aa53d4108b3";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/pt-BR/firefox-118.0b7.tar.bz2";
+      locale = "pt-BR";
+      arch = "linux-i686";
+      sha256 = "283fa4854695dc4fa15c6978b4a67d6a46537fb7f55ad0d6c6aaa9f18cb4425d";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/pt-PT/firefox-118.0b7.tar.bz2";
+      locale = "pt-PT";
+      arch = "linux-i686";
+      sha256 = "d4b7785471fc23ab98238dc54400824a9028b5d324db5f7f2cec1cf9c15a2df3";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/rm/firefox-118.0b7.tar.bz2";
+      locale = "rm";
+      arch = "linux-i686";
+      sha256 = "3f6dacda10276174390f7f3abaf0ee339e02e3ce5a4ed5da40955eb8880ceca3";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/ro/firefox-118.0b7.tar.bz2";
+      locale = "ro";
+      arch = "linux-i686";
+      sha256 = "3e2fc1208c1da1901a30c2796e6ddacea6d54cb5ce3e1b8800743d65d07e7390";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/ru/firefox-118.0b7.tar.bz2";
+      locale = "ru";
+      arch = "linux-i686";
+      sha256 = "8e338dd7062f472aeda5f6611dd47149b62006fd4b27b8193c1ec2cad27caec7";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/sc/firefox-118.0b7.tar.bz2";
+      locale = "sc";
+      arch = "linux-i686";
+      sha256 = "5f9361a0838717154820bc8879383998768e0c4b79a6be844df1c51e152fad79";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/sco/firefox-118.0b7.tar.bz2";
+      locale = "sco";
+      arch = "linux-i686";
+      sha256 = "657fb3b29d4f152645c05358211e6633b0157e3ec1a42d74d7315ae7dabc93d7";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/si/firefox-118.0b7.tar.bz2";
+      locale = "si";
+      arch = "linux-i686";
+      sha256 = "7e3881d270c75de0dec6422c503b8e487b3be8a515295b319b899aa40983bac6";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/sk/firefox-118.0b7.tar.bz2";
+      locale = "sk";
+      arch = "linux-i686";
+      sha256 = "81b0e900cc1264c33121bca1f8cfcb0ec450e79cf714b0b9463908eee278fc5e";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/sl/firefox-118.0b7.tar.bz2";
+      locale = "sl";
+      arch = "linux-i686";
+      sha256 = "fbc4ff8940350b2c05573bb40113fb2dc69ab389800ffd952d149d826dd38bfe";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/son/firefox-118.0b7.tar.bz2";
+      locale = "son";
+      arch = "linux-i686";
+      sha256 = "a8368270c1d738c4b39036f141706836f60ffabebd5dd88a4c1bdec1edd139e5";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/sq/firefox-118.0b7.tar.bz2";
+      locale = "sq";
+      arch = "linux-i686";
+      sha256 = "6b04b0b4e0a1dd20619270082f328f844dab73d24354d7ebdd1c34f91cc03234";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/sr/firefox-118.0b7.tar.bz2";
+      locale = "sr";
+      arch = "linux-i686";
+      sha256 = "5143ff6e451e6310ea1f4e6662a348bf701494c0637e6bcc2ffd76ee29b5dd65";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/sv-SE/firefox-118.0b7.tar.bz2";
+      locale = "sv-SE";
+      arch = "linux-i686";
+      sha256 = "ccbed1769cfef251aa069f2a737b9c7e1243d77d6f7aa31bd10ccdbf387f56a8";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/szl/firefox-118.0b7.tar.bz2";
+      locale = "szl";
+      arch = "linux-i686";
+      sha256 = "18abb72373e3299f1346ef2814267be81b0173c1dde15130072fc8d57307d12c";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/ta/firefox-118.0b7.tar.bz2";
+      locale = "ta";
+      arch = "linux-i686";
+      sha256 = "36ce9bc6b36125c0bc66e1927d371f38284430d04bc259429d4884d0ebd2de7a";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/te/firefox-118.0b7.tar.bz2";
+      locale = "te";
+      arch = "linux-i686";
+      sha256 = "62497be732163fa63f2b2083c7ad85affcad24eb07a209e68803293e86baf2c6";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/tg/firefox-118.0b7.tar.bz2";
+      locale = "tg";
+      arch = "linux-i686";
+      sha256 = "3169f4c4c6834de4c78f430a23eaa21d8748e63eadc357a7da45baf5851dc98b";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/th/firefox-118.0b7.tar.bz2";
+      locale = "th";
+      arch = "linux-i686";
+      sha256 = "eb55b37f5490d09b37d871d8a0894cd14a006faa90bae451ca5e01d424151076";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/tl/firefox-118.0b7.tar.bz2";
+      locale = "tl";
+      arch = "linux-i686";
+      sha256 = "d02506e39da67f9c25206a1cd15df9ec202e66912048c56658a93c293fc8461b";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/tr/firefox-118.0b7.tar.bz2";
+      locale = "tr";
+      arch = "linux-i686";
+      sha256 = "70746104bdf0d3364aa8c1b2706d1893dba09a3f4b61ddc4eeeb153d8093304d";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/trs/firefox-118.0b7.tar.bz2";
+      locale = "trs";
+      arch = "linux-i686";
+      sha256 = "317f6b8b6d6c5bb61fae7ed9243862c2418800f5459b2fa79515fdf6d1bf298a";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/uk/firefox-118.0b7.tar.bz2";
+      locale = "uk";
+      arch = "linux-i686";
+      sha256 = "9cbde7254aec1b26876e03142f42fbf8fb30af0fcb5ddb9fa69362b00548bca6";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/ur/firefox-118.0b7.tar.bz2";
+      locale = "ur";
+      arch = "linux-i686";
+      sha256 = "ab7de96d231b73c6dfd03f9729df424a960a2a9a7151280f6817c0484fe8c46a";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/uz/firefox-118.0b7.tar.bz2";
+      locale = "uz";
+      arch = "linux-i686";
+      sha256 = "a108c40647beb9ee78b2094474dee047ca1c726cd8978e8e6834332e2e0d265d";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/vi/firefox-118.0b7.tar.bz2";
+      locale = "vi";
+      arch = "linux-i686";
+      sha256 = "091a67704565a30faf3ffa051117f4ee7b2eeae2f10f96323d4ef1043b249cf4";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/xh/firefox-118.0b7.tar.bz2";
+      locale = "xh";
+      arch = "linux-i686";
+      sha256 = "2ab81a491bb54c7db4cb88b5d570e551f0eee83238cedf5490093c141d0736f5";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/zh-CN/firefox-118.0b7.tar.bz2";
+      locale = "zh-CN";
+      arch = "linux-i686";
+      sha256 = "597dbd8ea1e2825180a5d304cfe2da4b2fe589a2cad0ed397a41af952363ce06";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/118.0b7/linux-i686/zh-TW/firefox-118.0b7.tar.bz2";
+      locale = "zh-TW";
+      arch = "linux-i686";
+      sha256 = "5b78bcc6772f1d52c31cba38930c98e6dd5be71a92cd0bb81408a35bd98b77f9";
+    }
+    ];
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/firefox-bin/default.nix b/nixpkgs/pkgs/applications/networking/browsers/firefox-bin/default.nix
new file mode 100644
index 000000000000..31d1ef692065
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/firefox-bin/default.nix
@@ -0,0 +1,217 @@
+{ lib, stdenv, fetchurl, config, wrapGAppsHook
+, alsa-lib
+, atk
+, cairo
+, curl
+, cups
+, dbus-glib
+, dbus
+, fontconfig
+, freetype
+, gdk-pixbuf
+, glib
+, glibc
+, gtk3
+, libkrb5
+, libX11
+, libXScrnSaver
+, libxcb
+, libXcomposite
+, libXcursor
+, libXdamage
+, libXext
+, libXfixes
+, libXi
+, libXinerama
+, libXrender
+, libXrandr
+, libXt
+, libXtst
+, libcanberra
+, libnotify
+, adwaita-icon-theme
+, libGLU, libGL
+, nspr
+, nss
+, pango
+, pipewire
+, pciutils
+, heimdal
+, libpulseaudio
+, systemd
+, channel
+, generated
+, writeScript
+, writeText
+, xidel
+, coreutils
+, gnused
+, gnugrep
+, gnupg
+, ffmpeg
+, runtimeShell
+, mesa # firefox wants gbm for drm+dmabuf
+, systemLocale ? config.i18n.defaultLocale or "en_US"
+}:
+
+let
+
+  inherit (generated) version sources;
+
+  mozillaPlatforms = {
+    i686-linux = "linux-i686";
+    x86_64-linux = "linux-x86_64";
+  };
+
+  arch = mozillaPlatforms.${stdenv.hostPlatform.system};
+
+  isPrefixOf = prefix: string:
+    builtins.substring 0 (builtins.stringLength prefix) string == prefix;
+
+  sourceMatches = locale: source:
+      (isPrefixOf source.locale locale) && source.arch == arch;
+
+  policies = {
+    DisableAppUpdate = true;
+  } // config.firefox.policies or {};
+
+  policiesJson = writeText "firefox-policies.json" (builtins.toJSON { inherit policies; });
+
+  defaultSource = lib.findFirst (sourceMatches "en-US") {} sources;
+
+  mozLocale =
+    if systemLocale == "ca_ES@valencia"
+    then "ca-valencia"
+    else lib.replaceStrings ["_"] ["-"] systemLocale;
+
+  source = lib.findFirst (sourceMatches mozLocale) defaultSource sources;
+
+  pname = "firefox-${channel}-bin-unwrapped";
+
+in
+
+stdenv.mkDerivation {
+  inherit pname version;
+
+  src = fetchurl { inherit (source) url sha256; };
+
+  libPath = lib.makeLibraryPath
+    [ stdenv.cc.cc
+      alsa-lib
+      atk
+      cairo
+      curl
+      cups
+      dbus-glib
+      dbus
+      fontconfig
+      freetype
+      gdk-pixbuf
+      glib
+      glibc
+      gtk3
+      libkrb5
+      mesa
+      libX11
+      libXScrnSaver
+      libXcomposite
+      libXcursor
+      libxcb
+      libXdamage
+      libXext
+      libXfixes
+      libXi
+      libXinerama
+      libXrender
+      libXrandr
+      libXt
+      libXtst
+      libcanberra
+      libnotify
+      libGLU libGL
+      nspr
+      nss
+      pango
+      pipewire
+      pciutils
+      heimdal
+      libpulseaudio
+      systemd
+      ffmpeg
+    ] + ":" + lib.makeSearchPathOutput "lib" "lib64" [
+      stdenv.cc.cc
+    ];
+
+  inherit gtk3;
+
+  nativeBuildInputs = [ wrapGAppsHook ];
+  buildInputs = [ gtk3 adwaita-icon-theme ];
+
+  # "strip" after "patchelf" may break binaries.
+  # See: https://github.com/NixOS/patchelf/issues/10
+  dontStrip = true;
+  dontPatchELF = true;
+
+  postPatch = ''
+    # Don't download updates from Mozilla directly
+    echo 'pref("app.update.auto", "false");' >> defaults/pref/channel-prefs.js
+  '';
+
+  installPhase =
+    ''
+      mkdir -p "$prefix/usr/lib/firefox-bin-${version}"
+      cp -r * "$prefix/usr/lib/firefox-bin-${version}"
+
+      mkdir -p "$out/bin"
+      ln -s "$prefix/usr/lib/firefox-bin-${version}/firefox" "$out/bin/"
+
+      for executable in \
+        firefox firefox-bin plugin-container \
+        updater crashreporter webapprt-stub \
+        glxtest vaapitest
+      do
+        if [ -e "$out/usr/lib/firefox-bin-${version}/$executable" ]; then
+          patchelf --interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+            "$out/usr/lib/firefox-bin-${version}/$executable"
+        fi
+      done
+
+      find . -executable -type f -exec \
+        patchelf --set-rpath "$libPath" \
+          "$out/usr/lib/firefox-bin-${version}/{}" \;
+
+      # wrapFirefox expects "$out/lib" instead of "$out/usr/lib"
+      ln -s "$out/usr/lib" "$out/lib"
+
+      gappsWrapperArgs+=(--argv0 "$out/bin/.firefox-wrapped")
+
+      # See: https://github.com/mozilla/policy-templates/blob/master/README.md
+      mkdir -p "$out/lib/firefox-bin-${version}/distribution";
+      ln -s ${policiesJson} "$out/lib/firefox-bin-${version}/distribution/policies.json";
+    '';
+
+  passthru.binaryName = "firefox";
+  passthru.libName = "firefox-bin-${version}";
+  passthru.execdir = "/bin";
+  passthru.ffmpegSupport = true;
+  passthru.gssSupport = true;
+  # update with:
+  # $ nix-shell maintainers/scripts/update.nix --argstr package firefox-bin-unwrapped
+  passthru.updateScript = import ./update.nix {
+    inherit pname channel lib writeScript xidel coreutils gnused gnugrep gnupg curl runtimeShell;
+    baseUrl =
+      if channel == "devedition"
+        then "https://archive.mozilla.org/pub/devedition/releases/"
+        else "https://archive.mozilla.org/pub/firefox/releases/";
+  };
+  meta = with lib; {
+    changelog = "https://www.mozilla.org/en-US/firefox/${version}/releasenotes/";
+    description = "Mozilla Firefox, free web browser (binary package)";
+    homepage = "https://www.mozilla.org/firefox/";
+    license = licenses.mpl20;
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    platforms = builtins.attrNames mozillaPlatforms;
+    hydraPlatforms = [];
+    maintainers = with maintainers; [ taku0 lovesegfault ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/firefox-bin/devedition_sources.nix b/nixpkgs/pkgs/applications/networking/browsers/firefox-bin/devedition_sources.nix
new file mode 100644
index 000000000000..592956b31b3e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/firefox-bin/devedition_sources.nix
@@ -0,0 +1,1015 @@
+{
+  version = "118.0b7";
+  sources = [
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/ach/firefox-118.0b7.tar.bz2";
+      locale = "ach";
+      arch = "linux-x86_64";
+      sha256 = "bffe259ec02ebcd73cb03f33f2e2a05bbb2cbe17c93ec9dad4d59f49fb0849d9";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/af/firefox-118.0b7.tar.bz2";
+      locale = "af";
+      arch = "linux-x86_64";
+      sha256 = "a3a77dcb1ac033603f1bfaf57f9996aa45845735b0649b2b9c6d2cc6920bf892";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/an/firefox-118.0b7.tar.bz2";
+      locale = "an";
+      arch = "linux-x86_64";
+      sha256 = "0084396a59769fea84609e038817724356a36843e519c97d4c8f5349711a65cb";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/ar/firefox-118.0b7.tar.bz2";
+      locale = "ar";
+      arch = "linux-x86_64";
+      sha256 = "e1549a1230c45fc7081abc1122acb23a5d0508fa0512337a2d3fdb2bdbf2e550";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/ast/firefox-118.0b7.tar.bz2";
+      locale = "ast";
+      arch = "linux-x86_64";
+      sha256 = "4b758754e7041ed1ef17a3c482638678427a9cabe8f1272e74ece404ab5f9d7d";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/az/firefox-118.0b7.tar.bz2";
+      locale = "az";
+      arch = "linux-x86_64";
+      sha256 = "ad848a6c1943cce84da4e52add2b5aa7705ef406b07317760084dfcc6c2ae2ff";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/be/firefox-118.0b7.tar.bz2";
+      locale = "be";
+      arch = "linux-x86_64";
+      sha256 = "69e3035141a8c1654fdc38f4beb392cb927e2d5da3b1ad4f17e693d3d10593b8";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/bg/firefox-118.0b7.tar.bz2";
+      locale = "bg";
+      arch = "linux-x86_64";
+      sha256 = "3e7f6d2f43a0f039827ac87d976c0676ab7a708a5f4b47438478008a5c0503ce";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/bn/firefox-118.0b7.tar.bz2";
+      locale = "bn";
+      arch = "linux-x86_64";
+      sha256 = "039ab59cb37a129487382ccd8582c0f86c3570c88ea3445e46033d16a3762c2a";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/br/firefox-118.0b7.tar.bz2";
+      locale = "br";
+      arch = "linux-x86_64";
+      sha256 = "3258e92a8c7fb91a40daa19aae8daa11ecb9c3f69d764d06efb6e9decf146e92";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/bs/firefox-118.0b7.tar.bz2";
+      locale = "bs";
+      arch = "linux-x86_64";
+      sha256 = "a8f1da89124be4aa08f4bbfd02d40eea3104a9f268c33de8d6980ea251bc240a";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/ca-valencia/firefox-118.0b7.tar.bz2";
+      locale = "ca-valencia";
+      arch = "linux-x86_64";
+      sha256 = "5453b8b8d451445ef766d6faf0274d6b135d64be0b8e0259975302d5456e6988";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/ca/firefox-118.0b7.tar.bz2";
+      locale = "ca";
+      arch = "linux-x86_64";
+      sha256 = "a78ffe3524d4660ac9e668f17d287410f764e5ebc3d0d09d814831746cbc6c1e";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/cak/firefox-118.0b7.tar.bz2";
+      locale = "cak";
+      arch = "linux-x86_64";
+      sha256 = "1f2f5a97b5c3c6688e6873229cef7d177ee5f67e84eab62e2ec9d6f2c8df5a89";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/cs/firefox-118.0b7.tar.bz2";
+      locale = "cs";
+      arch = "linux-x86_64";
+      sha256 = "6e1dad1f167557bc4cdff4528da5336b76f994049583122f7fa3317f6be74103";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/cy/firefox-118.0b7.tar.bz2";
+      locale = "cy";
+      arch = "linux-x86_64";
+      sha256 = "8c62f04e61381c903e17427afad1b99f5444ce96ca5b2abf62dd5b6b5f3ade79";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/da/firefox-118.0b7.tar.bz2";
+      locale = "da";
+      arch = "linux-x86_64";
+      sha256 = "6cc46fa3cbd9f90338ec17a597b7f0e26a3959b4cf2c9f3d00e5c9814cc006f6";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/de/firefox-118.0b7.tar.bz2";
+      locale = "de";
+      arch = "linux-x86_64";
+      sha256 = "3428a9fd65bf7819c11592d1426e44fd011d90dcb673354f747fe96948717797";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/dsb/firefox-118.0b7.tar.bz2";
+      locale = "dsb";
+      arch = "linux-x86_64";
+      sha256 = "392abb42a7e61e2cd52ab3ba9d517f4e92f68a29df34ba400d12141a75a48a1c";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/el/firefox-118.0b7.tar.bz2";
+      locale = "el";
+      arch = "linux-x86_64";
+      sha256 = "5e275168c88bfc4f73d06d046fe8c93f131340147f15422f8ac9a2ae2b04c45b";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/en-CA/firefox-118.0b7.tar.bz2";
+      locale = "en-CA";
+      arch = "linux-x86_64";
+      sha256 = "7ac75754580ab171efab99b03a8de187f88d062829b9906432db7b34ba63cbf8";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/en-GB/firefox-118.0b7.tar.bz2";
+      locale = "en-GB";
+      arch = "linux-x86_64";
+      sha256 = "079956fd83c6ef2e4b9144593d72f9c0ed3e8d7c70a4090ad7cd8ba767b0c7d4";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/en-US/firefox-118.0b7.tar.bz2";
+      locale = "en-US";
+      arch = "linux-x86_64";
+      sha256 = "f19d6ecb9b84d5c30976408393d5517547301f58ee1b5a8aeb0b969db8cf83a1";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/eo/firefox-118.0b7.tar.bz2";
+      locale = "eo";
+      arch = "linux-x86_64";
+      sha256 = "84a0c01b543e4c5c6531e01713dfe26973f0b85051f58eb89dfa30a3612b3d01";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/es-AR/firefox-118.0b7.tar.bz2";
+      locale = "es-AR";
+      arch = "linux-x86_64";
+      sha256 = "0c35a85eed2029f4384e280170f858f3f2bcdbf2e19e772e053d8d03acd36ff6";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/es-CL/firefox-118.0b7.tar.bz2";
+      locale = "es-CL";
+      arch = "linux-x86_64";
+      sha256 = "678917a730a80dfb98215146cc27e28a6a1a058c8274dcbf315917c1f11fb316";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/es-ES/firefox-118.0b7.tar.bz2";
+      locale = "es-ES";
+      arch = "linux-x86_64";
+      sha256 = "c3921596aba3045c8616bfb9de61afb1e547e9005219716a526291f7c5387cb8";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/es-MX/firefox-118.0b7.tar.bz2";
+      locale = "es-MX";
+      arch = "linux-x86_64";
+      sha256 = "07dc10cc64b2e1c4fc3119d8ddbae3dfa203f1f03659537ea84516044ce45f48";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/et/firefox-118.0b7.tar.bz2";
+      locale = "et";
+      arch = "linux-x86_64";
+      sha256 = "5d7e5c5e1a170cd4851af61865d6c9d53fa53ca37eb3bdcd697d94abc5b30d36";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/eu/firefox-118.0b7.tar.bz2";
+      locale = "eu";
+      arch = "linux-x86_64";
+      sha256 = "bab68930e2affe0d199ad166c981f4b4379127a061aff615bb9d22210de3dcaf";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/fa/firefox-118.0b7.tar.bz2";
+      locale = "fa";
+      arch = "linux-x86_64";
+      sha256 = "ad9890a1ffce8f6fd9646fe792f4c2b73fac74f0f62ded729ca61cecb0beba58";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/ff/firefox-118.0b7.tar.bz2";
+      locale = "ff";
+      arch = "linux-x86_64";
+      sha256 = "d6d746a93a1dd22afbd8b8f0d494cce782791ff3ab9c679d1fd8562892b4717c";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/fi/firefox-118.0b7.tar.bz2";
+      locale = "fi";
+      arch = "linux-x86_64";
+      sha256 = "2a4f99747b0ad812e8e03d83693d9978d48602a96f709eb603579757046692e3";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/fr/firefox-118.0b7.tar.bz2";
+      locale = "fr";
+      arch = "linux-x86_64";
+      sha256 = "2630befc8b6132ed4eab14b863cc0fb82befd27d6796a8fe5b0b331e682d8fb1";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/fur/firefox-118.0b7.tar.bz2";
+      locale = "fur";
+      arch = "linux-x86_64";
+      sha256 = "8b9ac1c405eb852892293c00b3a23ba5c2ad620229e5c24789cad61147cd951f";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/fy-NL/firefox-118.0b7.tar.bz2";
+      locale = "fy-NL";
+      arch = "linux-x86_64";
+      sha256 = "fa4d2fd2aa403c5432e300b61246296f339163e2562f279407e9b0b3302eb3bb";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/ga-IE/firefox-118.0b7.tar.bz2";
+      locale = "ga-IE";
+      arch = "linux-x86_64";
+      sha256 = "c0007e2711a193ddd00a0f4eaeea44a2b4f8c026096622152d1a34a482faf221";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/gd/firefox-118.0b7.tar.bz2";
+      locale = "gd";
+      arch = "linux-x86_64";
+      sha256 = "ff05b1dd402a14ba18c1da2d3a0180e9585828704654133b76416730f9554382";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/gl/firefox-118.0b7.tar.bz2";
+      locale = "gl";
+      arch = "linux-x86_64";
+      sha256 = "a7e5ff0e28e448d472cde39135e54529532803b220a628110d0ffc551d0f5c88";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/gn/firefox-118.0b7.tar.bz2";
+      locale = "gn";
+      arch = "linux-x86_64";
+      sha256 = "bee3a181cc39405c3a5b64b74ee657f64d1ae1eecaf5819905cadaecd5b9fde9";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/gu-IN/firefox-118.0b7.tar.bz2";
+      locale = "gu-IN";
+      arch = "linux-x86_64";
+      sha256 = "19c67ce93792cd1e4d0126680b05444f243f71daf03927f39e1d2e5b9b98d795";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/he/firefox-118.0b7.tar.bz2";
+      locale = "he";
+      arch = "linux-x86_64";
+      sha256 = "11ab5f497b794ece806afa446e57b29fd988e852f3e3492b9034e7e5669f507a";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/hi-IN/firefox-118.0b7.tar.bz2";
+      locale = "hi-IN";
+      arch = "linux-x86_64";
+      sha256 = "11ee3bc1a061d0a49fa60ae277ad75e81c2f06d6a7a479a3ee2a2efbf59ae83b";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/hr/firefox-118.0b7.tar.bz2";
+      locale = "hr";
+      arch = "linux-x86_64";
+      sha256 = "95a2438fcbebe1259cf713397937bfe6d2f628af82926be32ad98fb1ecca0545";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/hsb/firefox-118.0b7.tar.bz2";
+      locale = "hsb";
+      arch = "linux-x86_64";
+      sha256 = "36be28e7ff0f6d60a3b1c7be03276568a56d4f8fe02733373ed5bb8f45b11ac7";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/hu/firefox-118.0b7.tar.bz2";
+      locale = "hu";
+      arch = "linux-x86_64";
+      sha256 = "9891a1aa8e3d7ef46b150c40fbbac6e18b3290d5f94b4b302a57fecfb10b3398";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/hy-AM/firefox-118.0b7.tar.bz2";
+      locale = "hy-AM";
+      arch = "linux-x86_64";
+      sha256 = "778ad472d48ec0f815374f63c738af821efdf14c7f8b5bd7a4dd553be52e7c83";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/ia/firefox-118.0b7.tar.bz2";
+      locale = "ia";
+      arch = "linux-x86_64";
+      sha256 = "5dc4f74683e73b56d9c85b55c3a5f83eb9e82850f040b0695be849431d6d50ae";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/id/firefox-118.0b7.tar.bz2";
+      locale = "id";
+      arch = "linux-x86_64";
+      sha256 = "5559b1aeaafbda0de8d9fe2d451aa353125e5513dadca9ac4e6988b345f4caa3";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/is/firefox-118.0b7.tar.bz2";
+      locale = "is";
+      arch = "linux-x86_64";
+      sha256 = "f8a0dc723a238c001c6d5ad689fc211948103542fbfb2df51913a08f1dde8a10";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/it/firefox-118.0b7.tar.bz2";
+      locale = "it";
+      arch = "linux-x86_64";
+      sha256 = "fe89ccb370b1f34051f6e16626f8066515611475b0eee8d04a67880f7fcf60ca";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/ja/firefox-118.0b7.tar.bz2";
+      locale = "ja";
+      arch = "linux-x86_64";
+      sha256 = "862ad0d21a699180a0088f28c6fc809b2299ce303a8578b1a2cbdb6bb9d39341";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/ka/firefox-118.0b7.tar.bz2";
+      locale = "ka";
+      arch = "linux-x86_64";
+      sha256 = "97e632850dcdcf1b91870e8ebc33c34e1bb4a2bf237f18fbadc2a6b8b343fbd7";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/kab/firefox-118.0b7.tar.bz2";
+      locale = "kab";
+      arch = "linux-x86_64";
+      sha256 = "7f8e5d63a8ec6a0ef12d38ca0eee1825cc65d71184d1ae04e2ec7e8e27918424";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/kk/firefox-118.0b7.tar.bz2";
+      locale = "kk";
+      arch = "linux-x86_64";
+      sha256 = "7261bfcc56175ae19546f43fe9ab1af8a073d8f737de21b63a4154acd61d0215";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/km/firefox-118.0b7.tar.bz2";
+      locale = "km";
+      arch = "linux-x86_64";
+      sha256 = "bee098ede3eecd0d4e3f2cdf986ed0308c898e4d26db779749c2498c3473fea3";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/kn/firefox-118.0b7.tar.bz2";
+      locale = "kn";
+      arch = "linux-x86_64";
+      sha256 = "146ec0fbd0dfdfee163720e68d20d54537485fd0af5e7dd52109dfeb9134242e";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/ko/firefox-118.0b7.tar.bz2";
+      locale = "ko";
+      arch = "linux-x86_64";
+      sha256 = "463290f984148c4979386d52ef7d90daa34d253389f60d4ceaca0e015624f9d6";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/lij/firefox-118.0b7.tar.bz2";
+      locale = "lij";
+      arch = "linux-x86_64";
+      sha256 = "f8384752acdbf6a6c1a4addf0b51aaeeaa94a27e3f4259c5767b42511234a87c";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/lt/firefox-118.0b7.tar.bz2";
+      locale = "lt";
+      arch = "linux-x86_64";
+      sha256 = "1291708184156d282c39ea56817b4d2dd500ef9a35a32efa839ea9cc611e86ae";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/lv/firefox-118.0b7.tar.bz2";
+      locale = "lv";
+      arch = "linux-x86_64";
+      sha256 = "4d680588a0025d49c24930f02c2d5596ab5380c3a474ee29412d2cdaf8ad4b2c";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/mk/firefox-118.0b7.tar.bz2";
+      locale = "mk";
+      arch = "linux-x86_64";
+      sha256 = "73bf936d8a4b68ad42583f6ad0993814490ffd236b68b9f40b61705e28de6b0d";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/mr/firefox-118.0b7.tar.bz2";
+      locale = "mr";
+      arch = "linux-x86_64";
+      sha256 = "114814f3c76a254afc10fb1157e68fed75c49c18b1dc2ee5365174749aa042cd";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/ms/firefox-118.0b7.tar.bz2";
+      locale = "ms";
+      arch = "linux-x86_64";
+      sha256 = "1687b81ccc409bf785b6196c3836437384a8e8d7e1408230c94fef9b20826a73";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/my/firefox-118.0b7.tar.bz2";
+      locale = "my";
+      arch = "linux-x86_64";
+      sha256 = "e17b0aa8a85f9c77d3cbb7adf1e654be269832eee2e38ea92acced3b5721b68c";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/nb-NO/firefox-118.0b7.tar.bz2";
+      locale = "nb-NO";
+      arch = "linux-x86_64";
+      sha256 = "3607e70e5998b2005296a0fade5178f12f4fd3a8600c3d638823537be4941d60";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/ne-NP/firefox-118.0b7.tar.bz2";
+      locale = "ne-NP";
+      arch = "linux-x86_64";
+      sha256 = "0d81a8917a54ddbfe86523d429ac91f41cfcf5e36272fa182df5c95a68175d20";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/nl/firefox-118.0b7.tar.bz2";
+      locale = "nl";
+      arch = "linux-x86_64";
+      sha256 = "7bc7fcccc812fbd51fac484781ecae3f66ccb1e69ea58a8a343cb3b1aef69ba1";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/nn-NO/firefox-118.0b7.tar.bz2";
+      locale = "nn-NO";
+      arch = "linux-x86_64";
+      sha256 = "2a49dd8f0d9176282218bb257218a685a737dba1f46d6307def47ea1644dadf8";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/oc/firefox-118.0b7.tar.bz2";
+      locale = "oc";
+      arch = "linux-x86_64";
+      sha256 = "49245cba684997eda67c3beec35d232ceec5676d1600c03ebe68fb82834de469";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/pa-IN/firefox-118.0b7.tar.bz2";
+      locale = "pa-IN";
+      arch = "linux-x86_64";
+      sha256 = "1cf32aa5f4f67b9eb542caa1f766aa20d70ccba4dbcd779e4b52bc8f6dc091df";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/pl/firefox-118.0b7.tar.bz2";
+      locale = "pl";
+      arch = "linux-x86_64";
+      sha256 = "9ab7c72868141aa407755da27ea2a85b3ff3e03d7cc812ed81139f7a873ce099";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/pt-BR/firefox-118.0b7.tar.bz2";
+      locale = "pt-BR";
+      arch = "linux-x86_64";
+      sha256 = "c71eae58cddaef324a8224545317857c256b991fafb55988b7971d61cdffce70";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/pt-PT/firefox-118.0b7.tar.bz2";
+      locale = "pt-PT";
+      arch = "linux-x86_64";
+      sha256 = "fad23ca6786117f255e77d0c62b6206f5d814a71d781279f4569e1407088646b";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/rm/firefox-118.0b7.tar.bz2";
+      locale = "rm";
+      arch = "linux-x86_64";
+      sha256 = "46daa204122c71839f6ca9382f60440367f2913ebc6a922ba37b70d0d14a87f1";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/ro/firefox-118.0b7.tar.bz2";
+      locale = "ro";
+      arch = "linux-x86_64";
+      sha256 = "58b694236851a63e8102209a8eaa3875f3e5493fcd0dd6cfe44125ec75c8e6c2";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/ru/firefox-118.0b7.tar.bz2";
+      locale = "ru";
+      arch = "linux-x86_64";
+      sha256 = "df21fd9e11cd3de45701078481c3b864eb934aa191f891a98c5d4cf01793a984";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/sc/firefox-118.0b7.tar.bz2";
+      locale = "sc";
+      arch = "linux-x86_64";
+      sha256 = "1988c3c9590a0c7dc0e61bba6b64b9061188c7eae3a7e6ac199ef7753a779967";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/sco/firefox-118.0b7.tar.bz2";
+      locale = "sco";
+      arch = "linux-x86_64";
+      sha256 = "2a7d77d05e959826b3b3e35cda4fdffa991a7890004c6994cc2484626e94e098";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/si/firefox-118.0b7.tar.bz2";
+      locale = "si";
+      arch = "linux-x86_64";
+      sha256 = "b1ebe8fe269e04741dd475c6108d24bd05b93370f8133c4ac988e9dcce0aed58";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/sk/firefox-118.0b7.tar.bz2";
+      locale = "sk";
+      arch = "linux-x86_64";
+      sha256 = "acf1e11a33a91f170e2b5428e8c5151b9830a762d4183c3e2d170976706d23b0";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/sl/firefox-118.0b7.tar.bz2";
+      locale = "sl";
+      arch = "linux-x86_64";
+      sha256 = "1d2eecb13627d16fe5a6a52f7f42024dc70c6aa403ec2d9e8d2ffa1229ccf7ed";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/son/firefox-118.0b7.tar.bz2";
+      locale = "son";
+      arch = "linux-x86_64";
+      sha256 = "13cf3bf391ec9c8fad80fc1f4f91c3982fd765934a93e72183b794f808399289";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/sq/firefox-118.0b7.tar.bz2";
+      locale = "sq";
+      arch = "linux-x86_64";
+      sha256 = "2406f8ef9276a8454e6c09061832d4ff6d4d7f079c5dd92f5c3492a9f9c417b7";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/sr/firefox-118.0b7.tar.bz2";
+      locale = "sr";
+      arch = "linux-x86_64";
+      sha256 = "35ca7c519b9dfb6e15dd1b6cdd2dce49abe62fb5d340f385a14d7a71cdb70209";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/sv-SE/firefox-118.0b7.tar.bz2";
+      locale = "sv-SE";
+      arch = "linux-x86_64";
+      sha256 = "5406b96f9d74ccf54f91301e151735061c47af2c79eed28187f99070b4c03d55";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/szl/firefox-118.0b7.tar.bz2";
+      locale = "szl";
+      arch = "linux-x86_64";
+      sha256 = "449b773dd5bccd1e303e0d13410590da86615cf3187ebe2052093465a5322ca4";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/ta/firefox-118.0b7.tar.bz2";
+      locale = "ta";
+      arch = "linux-x86_64";
+      sha256 = "b6c4e60a8b3be55ce52d2f0073ee1b9b614a28bd4a88fcc5a40acb8adcd1e412";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/te/firefox-118.0b7.tar.bz2";
+      locale = "te";
+      arch = "linux-x86_64";
+      sha256 = "a0e27acb8faf3a51bca39fe00d3350a5504f9e60430f6e8d897a7642856ac5ac";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/tg/firefox-118.0b7.tar.bz2";
+      locale = "tg";
+      arch = "linux-x86_64";
+      sha256 = "c71a6338511dcc8a1d7e8b8d49a9c7f76bd843f8845b79f3b983f4f602c25c38";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/th/firefox-118.0b7.tar.bz2";
+      locale = "th";
+      arch = "linux-x86_64";
+      sha256 = "78d22db0dc7f2f22a4a835ed91a5e1f1838ce56fa0534f6fc1b9419f53f6785c";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/tl/firefox-118.0b7.tar.bz2";
+      locale = "tl";
+      arch = "linux-x86_64";
+      sha256 = "9d33f8f8512d1e12e7ecceccb2297747c6b3689d233829e2a55b7dbbbe5fc62c";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/tr/firefox-118.0b7.tar.bz2";
+      locale = "tr";
+      arch = "linux-x86_64";
+      sha256 = "a938105d7a28786d0d362388f382ae1ff739cfb2f36576af091a684f278f574c";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/trs/firefox-118.0b7.tar.bz2";
+      locale = "trs";
+      arch = "linux-x86_64";
+      sha256 = "af67047db80fcce2faf016543b54ea8494e72e57785378aeba926ba52a4ee6f7";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/uk/firefox-118.0b7.tar.bz2";
+      locale = "uk";
+      arch = "linux-x86_64";
+      sha256 = "d359e7d6fa886268758cf0e06aa9915fa0249446fb6abde154e4bfd048cec689";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/ur/firefox-118.0b7.tar.bz2";
+      locale = "ur";
+      arch = "linux-x86_64";
+      sha256 = "996f33d66d6a81fd4b566830e8f0d175758d1f30cb6bcddd7310815f687da1d6";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/uz/firefox-118.0b7.tar.bz2";
+      locale = "uz";
+      arch = "linux-x86_64";
+      sha256 = "5ba98e76e8b6aab631d33aa20dad4684c17117938be6fdf67889e8d797cd9dbf";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/vi/firefox-118.0b7.tar.bz2";
+      locale = "vi";
+      arch = "linux-x86_64";
+      sha256 = "230baa377ffac4a49d3445624bc54cf01186dd6da1c0b823d6224c5dba1be8e7";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/xh/firefox-118.0b7.tar.bz2";
+      locale = "xh";
+      arch = "linux-x86_64";
+      sha256 = "41dd2d2c66fc9766011ea1a53a8aee6e69b8502fb3cdb623b5d6395c5a8b23b0";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/zh-CN/firefox-118.0b7.tar.bz2";
+      locale = "zh-CN";
+      arch = "linux-x86_64";
+      sha256 = "640681c6cfe69917584b1e0a046cf1009909376ab77d569c072f42dfd0d0f7b5";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-x86_64/zh-TW/firefox-118.0b7.tar.bz2";
+      locale = "zh-TW";
+      arch = "linux-x86_64";
+      sha256 = "905e49d23e23c0841b5cbe5561c1d7ff6dff341113541b06cb8ecdb16ea53c3b";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/ach/firefox-118.0b7.tar.bz2";
+      locale = "ach";
+      arch = "linux-i686";
+      sha256 = "9633a049b8d2f253707733880c727179029e10c1e24b3643e664f0ca42658eb7";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/af/firefox-118.0b7.tar.bz2";
+      locale = "af";
+      arch = "linux-i686";
+      sha256 = "3251d74dc8420bdf8517364d9df7a6c1b3002e05842d18d60145ae4ccae93a6e";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/an/firefox-118.0b7.tar.bz2";
+      locale = "an";
+      arch = "linux-i686";
+      sha256 = "fc2a1260aa0610cf1c96cf148c73eb88e1681cabc61f80e053de37416123daa6";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/ar/firefox-118.0b7.tar.bz2";
+      locale = "ar";
+      arch = "linux-i686";
+      sha256 = "941932017d5458a5a8fbda9c7b0407c8f631d466cfe1c87b93a284dba5a650d6";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/ast/firefox-118.0b7.tar.bz2";
+      locale = "ast";
+      arch = "linux-i686";
+      sha256 = "bdc5630c66e1747515493022c4ac261eb4f2dac39ad0550f3aaecb46228f6a7f";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/az/firefox-118.0b7.tar.bz2";
+      locale = "az";
+      arch = "linux-i686";
+      sha256 = "4a585ac0143472b3895a3376874cd5b4392cf15a28e434a77c42eec8be964919";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/be/firefox-118.0b7.tar.bz2";
+      locale = "be";
+      arch = "linux-i686";
+      sha256 = "9e1f94032707f67dae705c379d0faa0d56259051361348067c55467ee2b7469c";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/bg/firefox-118.0b7.tar.bz2";
+      locale = "bg";
+      arch = "linux-i686";
+      sha256 = "5926851a524e6c3c20ead0bba45afb0baf5b71ed27e1b1e0aa8dd1c6d2f14279";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/bn/firefox-118.0b7.tar.bz2";
+      locale = "bn";
+      arch = "linux-i686";
+      sha256 = "bc62000310cba275d136593420f25b19816d35feee9a07f290769684b8a583e4";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/br/firefox-118.0b7.tar.bz2";
+      locale = "br";
+      arch = "linux-i686";
+      sha256 = "514636d4bb4c4a396a17656f34be24092f5ac39bf8db2fda4bd68f064455927a";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/bs/firefox-118.0b7.tar.bz2";
+      locale = "bs";
+      arch = "linux-i686";
+      sha256 = "301cec1f1ffaa4d8e4d9b3182b47279d6ad486bb94f07d3c719806889e67c80a";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/ca-valencia/firefox-118.0b7.tar.bz2";
+      locale = "ca-valencia";
+      arch = "linux-i686";
+      sha256 = "8d73f703c989bc902ef04e5ce8d437b77dda97be5edc3fae9a351e79b385cbfa";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/ca/firefox-118.0b7.tar.bz2";
+      locale = "ca";
+      arch = "linux-i686";
+      sha256 = "5be1cbb2c161516f64fbeb3e4da10f74de8371b8d3d21f4eb37723c3df983ef6";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/cak/firefox-118.0b7.tar.bz2";
+      locale = "cak";
+      arch = "linux-i686";
+      sha256 = "9754d9ad11fe7a1c19230557749be15cd6b4e9b0efd335c8a6eb8b8f923e66fe";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/cs/firefox-118.0b7.tar.bz2";
+      locale = "cs";
+      arch = "linux-i686";
+      sha256 = "762b156fe91b707ea6299c1601dbd088c61b46320609832680353b82f6add5a8";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/cy/firefox-118.0b7.tar.bz2";
+      locale = "cy";
+      arch = "linux-i686";
+      sha256 = "b33855067a575bb32ef723ef7b43f977853d7cd1f9f5ceb8d2e1cd3e8a841b41";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/da/firefox-118.0b7.tar.bz2";
+      locale = "da";
+      arch = "linux-i686";
+      sha256 = "37b30760440da74accdc5bab08e11f1ee9471cd227c3622d42c9a10b24634cb2";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/de/firefox-118.0b7.tar.bz2";
+      locale = "de";
+      arch = "linux-i686";
+      sha256 = "a86d701ba9b407d37c6fd7d680f84e68cf8a19347b1b79b0329a43d7e7379daf";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/dsb/firefox-118.0b7.tar.bz2";
+      locale = "dsb";
+      arch = "linux-i686";
+      sha256 = "05d1c8d93159c30ff0b39651aa3e197a4645f6f0c5f6174ff6bef17088122ee6";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/el/firefox-118.0b7.tar.bz2";
+      locale = "el";
+      arch = "linux-i686";
+      sha256 = "8d89693b19854bc7337d9789e8e539e65e9535f5c0cfcaa79aadb797614ebdf2";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/en-CA/firefox-118.0b7.tar.bz2";
+      locale = "en-CA";
+      arch = "linux-i686";
+      sha256 = "99a5408dd195096e7d4a0b5929aaec2bf223693a241a183b69b9d5b4e9b4b0e8";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/en-GB/firefox-118.0b7.tar.bz2";
+      locale = "en-GB";
+      arch = "linux-i686";
+      sha256 = "d031be511019267d5e8a6f0d101d3c3d33f3f6a2f6d5c4b6275f41fa24e3cb41";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/en-US/firefox-118.0b7.tar.bz2";
+      locale = "en-US";
+      arch = "linux-i686";
+      sha256 = "2a495ed8cb7ccba98c4bdb4242b1e595bd66c2e4f11784f8464e5b942f52ea7c";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/eo/firefox-118.0b7.tar.bz2";
+      locale = "eo";
+      arch = "linux-i686";
+      sha256 = "bd6c98a9592072253d1dad19d08907cdfc6ba3a8f61405117438799d5d49af25";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/es-AR/firefox-118.0b7.tar.bz2";
+      locale = "es-AR";
+      arch = "linux-i686";
+      sha256 = "ce6a2094592cafb11980f4d539338d7775e6e5f4fcfb4ded0e8d8765a0bdecc7";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/es-CL/firefox-118.0b7.tar.bz2";
+      locale = "es-CL";
+      arch = "linux-i686";
+      sha256 = "3aa19af8a08ca42f66f105e26a77526cabb58cdf3ca44bfbaccdabaff69ef2d4";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/es-ES/firefox-118.0b7.tar.bz2";
+      locale = "es-ES";
+      arch = "linux-i686";
+      sha256 = "4c94a9a6df88eca71e3ef9bc70a8fbf48e3eea77c15bbe3517969d426063138f";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/es-MX/firefox-118.0b7.tar.bz2";
+      locale = "es-MX";
+      arch = "linux-i686";
+      sha256 = "0b33cd4dfd653a03cc9a3fcf21ae8f4b4c0179d6c85d6751bdd93c1f718f20c8";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/et/firefox-118.0b7.tar.bz2";
+      locale = "et";
+      arch = "linux-i686";
+      sha256 = "2a457ac6e5c61ab30ef3f5b3fac87717d20425b209af517013d884245714b50c";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/eu/firefox-118.0b7.tar.bz2";
+      locale = "eu";
+      arch = "linux-i686";
+      sha256 = "2857d6330c20c1189976ce0a9068fa6a73d636434e7096944487be8a215f25fc";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/fa/firefox-118.0b7.tar.bz2";
+      locale = "fa";
+      arch = "linux-i686";
+      sha256 = "227a742ef75dfb9782f88a9306ce38dbe7e4f89f08ce96fcdcae545bc78c70c8";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/ff/firefox-118.0b7.tar.bz2";
+      locale = "ff";
+      arch = "linux-i686";
+      sha256 = "be826fe8eaadc70dcfda4f9fbd1890c1813dbcd0015fe0a482e88f40a983a43a";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/fi/firefox-118.0b7.tar.bz2";
+      locale = "fi";
+      arch = "linux-i686";
+      sha256 = "879d74b0cd6283f8bf03ecaf4fd58010cc42cab4932b893f2d3b5577ed8edd40";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/fr/firefox-118.0b7.tar.bz2";
+      locale = "fr";
+      arch = "linux-i686";
+      sha256 = "3ffcc6d94a8f794c2542b712d279f8dbce45155d77bfc8f9f8874f47e4ac4584";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/fur/firefox-118.0b7.tar.bz2";
+      locale = "fur";
+      arch = "linux-i686";
+      sha256 = "68fae2f583c232033b919e8fab9e67e19f605cf78dc7f600ad969fe8e4998cde";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/fy-NL/firefox-118.0b7.tar.bz2";
+      locale = "fy-NL";
+      arch = "linux-i686";
+      sha256 = "f82ee7bc53c092e1843ed79489219aa0911ca074d797e8ddc91455df272c679d";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/ga-IE/firefox-118.0b7.tar.bz2";
+      locale = "ga-IE";
+      arch = "linux-i686";
+      sha256 = "23e750ef417a773b5287f4600ba3f75fca361e1afb3f88feec61f66c22abdfeb";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/gd/firefox-118.0b7.tar.bz2";
+      locale = "gd";
+      arch = "linux-i686";
+      sha256 = "923540dae77062d701079ab16c7635e0006f456435df7418a42511bf1eb4bedf";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/gl/firefox-118.0b7.tar.bz2";
+      locale = "gl";
+      arch = "linux-i686";
+      sha256 = "831ff917cd21189b853082493e9a3c6d9ffec886fe88bd263fc689b0a02a6739";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/gn/firefox-118.0b7.tar.bz2";
+      locale = "gn";
+      arch = "linux-i686";
+      sha256 = "3834316b88593b717347fa7630c636d30938308a670f1a278f299d35d37ef41e";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/gu-IN/firefox-118.0b7.tar.bz2";
+      locale = "gu-IN";
+      arch = "linux-i686";
+      sha256 = "13c5c2c66e5a6f0e323e906beecea615646e32971a0c334615b59a46d2a93ba8";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/he/firefox-118.0b7.tar.bz2";
+      locale = "he";
+      arch = "linux-i686";
+      sha256 = "d0795b682b78ce839316feb482e5436f9b8a71adbfa47fc061b3648264bcbcb9";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/hi-IN/firefox-118.0b7.tar.bz2";
+      locale = "hi-IN";
+      arch = "linux-i686";
+      sha256 = "e650eba50b0be7ba68cb514fd90eda6dc1ef4413876115b011cda5c82ef3068e";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/hr/firefox-118.0b7.tar.bz2";
+      locale = "hr";
+      arch = "linux-i686";
+      sha256 = "4482eef7da94a3547da7bb405d731e4e09aacd9c30fee478e7fa9018b91a2c1c";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/hsb/firefox-118.0b7.tar.bz2";
+      locale = "hsb";
+      arch = "linux-i686";
+      sha256 = "b09437a8da426106cdc04eb9176a0b58d7f5b2311ed8581dc906ed32d816c2e7";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/hu/firefox-118.0b7.tar.bz2";
+      locale = "hu";
+      arch = "linux-i686";
+      sha256 = "ae50cdbefaf60709e58c8eca5cbfa1ac28a7756e29c93d356eddf19f9a9987c5";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/hy-AM/firefox-118.0b7.tar.bz2";
+      locale = "hy-AM";
+      arch = "linux-i686";
+      sha256 = "a5b1ef342efa242b13bfc2399aa968cfb47532ed7688a23128f0b6645f70f68c";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/ia/firefox-118.0b7.tar.bz2";
+      locale = "ia";
+      arch = "linux-i686";
+      sha256 = "b1810106de12f03347e7a71082ca9b269f24c12bfbe446e1abd27c534199a115";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/id/firefox-118.0b7.tar.bz2";
+      locale = "id";
+      arch = "linux-i686";
+      sha256 = "574948125c2b198fd70764186552009a9f7b9fca915eca580f523fe9631d90ca";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/is/firefox-118.0b7.tar.bz2";
+      locale = "is";
+      arch = "linux-i686";
+      sha256 = "6f5476ef3f91795a27f3dedec74c9003bc1b9dd970df553de570534fed62b240";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/it/firefox-118.0b7.tar.bz2";
+      locale = "it";
+      arch = "linux-i686";
+      sha256 = "a6321b3d4050eb44911b350b84723be56456229db4d39ec33ed1f46c60ab65dd";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/ja/firefox-118.0b7.tar.bz2";
+      locale = "ja";
+      arch = "linux-i686";
+      sha256 = "f0a5d5aec34440623cf6eae3bb8e5949add154d64cd0fb79997b18843e1e5de3";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/ka/firefox-118.0b7.tar.bz2";
+      locale = "ka";
+      arch = "linux-i686";
+      sha256 = "e91a320772255b8d4d9c87e4af7dae4e32e7652dc56b1f2c89e1f64be272953e";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/kab/firefox-118.0b7.tar.bz2";
+      locale = "kab";
+      arch = "linux-i686";
+      sha256 = "1a404dbb0d32a60e0660dfb15c8f88db537b61ec33b9e5dde3002cb7b172d5c3";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/kk/firefox-118.0b7.tar.bz2";
+      locale = "kk";
+      arch = "linux-i686";
+      sha256 = "cace0a95a9c8399d43b59d4cd7866c035234c02e781733aaa442bcde603f604e";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/km/firefox-118.0b7.tar.bz2";
+      locale = "km";
+      arch = "linux-i686";
+      sha256 = "1e1cf638b00f981bc66d8d22d0dde2304f7ae26336e8d15b2e5d014ee8e378db";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/kn/firefox-118.0b7.tar.bz2";
+      locale = "kn";
+      arch = "linux-i686";
+      sha256 = "ec83eeb38bef604d831f0dbb17f94110e3b8e864834c8c821869da70f8e2301d";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/ko/firefox-118.0b7.tar.bz2";
+      locale = "ko";
+      arch = "linux-i686";
+      sha256 = "e83bb1eaee4bc44a35a2af7e825574e33ae02eaad3d2e322b2d70404cd486cf3";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/lij/firefox-118.0b7.tar.bz2";
+      locale = "lij";
+      arch = "linux-i686";
+      sha256 = "5664a928d14d55ba3d6262f7a25ee5f2f82285fd4167d0f5467c9e161876f8bb";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/lt/firefox-118.0b7.tar.bz2";
+      locale = "lt";
+      arch = "linux-i686";
+      sha256 = "bf712487aaf12169ea5f413e9df6b1af497e296a2ab6ae2ff0cbfc352f0beffe";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/lv/firefox-118.0b7.tar.bz2";
+      locale = "lv";
+      arch = "linux-i686";
+      sha256 = "acca2056b657f12e5c8e7a967bbc761ec9eee3620e4ff42497cb50a7e9a7aa32";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/mk/firefox-118.0b7.tar.bz2";
+      locale = "mk";
+      arch = "linux-i686";
+      sha256 = "4e3dcf5237b968cfa26f2250f1965798df65f8a50a1feaa384267831233c7667";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/mr/firefox-118.0b7.tar.bz2";
+      locale = "mr";
+      arch = "linux-i686";
+      sha256 = "f0ac9d3f8c7aea5d54bcb1cbceccd8615491f70d983ea5a67cfb0b74a3d15b50";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/ms/firefox-118.0b7.tar.bz2";
+      locale = "ms";
+      arch = "linux-i686";
+      sha256 = "a287cf7b32bc0573004f86f633ff59aed74d952f6c5ad449b562320f8966e30a";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/my/firefox-118.0b7.tar.bz2";
+      locale = "my";
+      arch = "linux-i686";
+      sha256 = "bb749df1e2b05c6f067d435cabd782bfd98097af0d3d7af172c93f8991968de3";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/nb-NO/firefox-118.0b7.tar.bz2";
+      locale = "nb-NO";
+      arch = "linux-i686";
+      sha256 = "9532e4b6cd5cd3ee988a9b2a3264291f06077a29e825196503284a58d8ad93c2";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/ne-NP/firefox-118.0b7.tar.bz2";
+      locale = "ne-NP";
+      arch = "linux-i686";
+      sha256 = "20aae83f9cadc647d0eb57497f8df9cbbc50617b527a94f902e516c08b0455f2";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/nl/firefox-118.0b7.tar.bz2";
+      locale = "nl";
+      arch = "linux-i686";
+      sha256 = "4139dc73ab90c9480e09da05497be9242c502a9ecd770faf64153e73a4bed4e1";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/nn-NO/firefox-118.0b7.tar.bz2";
+      locale = "nn-NO";
+      arch = "linux-i686";
+      sha256 = "df4bda9a5a3ce620557fb92e7197787de99f0ae6cc266cad71d41edd23ad9521";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/oc/firefox-118.0b7.tar.bz2";
+      locale = "oc";
+      arch = "linux-i686";
+      sha256 = "379b7ed95cef9cf3c687b59122d24212ae6b446734298fcde29d75bf0f3466b2";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/pa-IN/firefox-118.0b7.tar.bz2";
+      locale = "pa-IN";
+      arch = "linux-i686";
+      sha256 = "8e5aaad334b214490f5be7fc18c5116d701eae8d20c5c91cd612aa11040bc7fd";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/pl/firefox-118.0b7.tar.bz2";
+      locale = "pl";
+      arch = "linux-i686";
+      sha256 = "17988519e291b209034e53f91f7ab9c7ef4a08f45a9ef5c6eece5bf88a70767e";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/pt-BR/firefox-118.0b7.tar.bz2";
+      locale = "pt-BR";
+      arch = "linux-i686";
+      sha256 = "fb4472de8f2668a32466edd77b75b410f4219b61a68a61051e2d2180bd8d0af5";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/pt-PT/firefox-118.0b7.tar.bz2";
+      locale = "pt-PT";
+      arch = "linux-i686";
+      sha256 = "2f22ee66d88a309079ec97b48402201e98dcacebedbeaf77f78bbb6202f9fdef";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/rm/firefox-118.0b7.tar.bz2";
+      locale = "rm";
+      arch = "linux-i686";
+      sha256 = "998e667c673fcefd90b70bb23282d73b531c1f59177396626c05d183dd76516b";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/ro/firefox-118.0b7.tar.bz2";
+      locale = "ro";
+      arch = "linux-i686";
+      sha256 = "b872473b0767f161a8f374dcf0271657ee103adc8914147e1e709d0231c576db";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/ru/firefox-118.0b7.tar.bz2";
+      locale = "ru";
+      arch = "linux-i686";
+      sha256 = "c3d0dce516fe7b8948329d78b3883d9f816619208260e10dbaec17fbf1939161";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/sc/firefox-118.0b7.tar.bz2";
+      locale = "sc";
+      arch = "linux-i686";
+      sha256 = "02445ef45b2a0d63793c1b350f8333fb02cab27cd71e70d38c8d3a44e3baef4c";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/sco/firefox-118.0b7.tar.bz2";
+      locale = "sco";
+      arch = "linux-i686";
+      sha256 = "06cc48f568cdb9365671d8f3293e2ad14e863fdef6278ca333dc1868eef7e188";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/si/firefox-118.0b7.tar.bz2";
+      locale = "si";
+      arch = "linux-i686";
+      sha256 = "49a403ab64c2a0fea35b788bb8859622617f8ab88c77d7130afbe78f404e675d";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/sk/firefox-118.0b7.tar.bz2";
+      locale = "sk";
+      arch = "linux-i686";
+      sha256 = "166dee822a0e0e570da721aa7e0ef5b5e5872b32b8a7c78499e66e7963c97fa1";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/sl/firefox-118.0b7.tar.bz2";
+      locale = "sl";
+      arch = "linux-i686";
+      sha256 = "c942eba98ce7dd18024f507972c59b295e0ddb1aeb466feba59b194177ddb812";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/son/firefox-118.0b7.tar.bz2";
+      locale = "son";
+      arch = "linux-i686";
+      sha256 = "70bac7040a9668c4772d4d358806b690739861c9cfa4d6bf13d7a2dca8da9d54";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/sq/firefox-118.0b7.tar.bz2";
+      locale = "sq";
+      arch = "linux-i686";
+      sha256 = "caec4cd469e5369c9ce63f70bbf6bf6ccead4dcc441e597a17ca3980600b39c3";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/sr/firefox-118.0b7.tar.bz2";
+      locale = "sr";
+      arch = "linux-i686";
+      sha256 = "8c858dd723cdd40222a9bae607d3e69e7ea2e29387229f63f3cfab072edfb23f";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/sv-SE/firefox-118.0b7.tar.bz2";
+      locale = "sv-SE";
+      arch = "linux-i686";
+      sha256 = "9bcc32c209cbc2eb42779780b2feace9360189c09f92b98a9dae1c41f6c2c58a";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/szl/firefox-118.0b7.tar.bz2";
+      locale = "szl";
+      arch = "linux-i686";
+      sha256 = "ab35cde3c2c58519684e00471f8864f77a321295dbb1234ed998f9dbbcb812b3";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/ta/firefox-118.0b7.tar.bz2";
+      locale = "ta";
+      arch = "linux-i686";
+      sha256 = "45a6819e56a1e25cc4600a96212c56d07876c0d2d65a2f074bbd5f8c9396197f";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/te/firefox-118.0b7.tar.bz2";
+      locale = "te";
+      arch = "linux-i686";
+      sha256 = "c7783001fd024680b923b9bbb474254c61f9409674c0c933a0d732ee657c2053";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/tg/firefox-118.0b7.tar.bz2";
+      locale = "tg";
+      arch = "linux-i686";
+      sha256 = "da49d9da6390d6a484d0afe80d615ee126f365cb1138ae7759632233032d3df6";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/th/firefox-118.0b7.tar.bz2";
+      locale = "th";
+      arch = "linux-i686";
+      sha256 = "387ab0c1e87ff02baa8a92ff1f5d54248ebadf027b4a8b9d97b4917667129b5f";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/tl/firefox-118.0b7.tar.bz2";
+      locale = "tl";
+      arch = "linux-i686";
+      sha256 = "fe82cd264a7afc608c3e98e3f835650fdfeb2d1820d856e0cdd3447ea40cc2c0";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/tr/firefox-118.0b7.tar.bz2";
+      locale = "tr";
+      arch = "linux-i686";
+      sha256 = "dba4c080cc88205193237b58bc5d63b4976dfeb9ecba568c7ba163185322d3ab";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/trs/firefox-118.0b7.tar.bz2";
+      locale = "trs";
+      arch = "linux-i686";
+      sha256 = "34b9c9e4f103b4380de3881c4b72f90429af228cd4c233b7499b2fcf4866d160";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/uk/firefox-118.0b7.tar.bz2";
+      locale = "uk";
+      arch = "linux-i686";
+      sha256 = "4f1c6c7d372d1933d6c049f5d810c3d18f0e6b32ac6be5bcfbabcead5cf9bc91";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/ur/firefox-118.0b7.tar.bz2";
+      locale = "ur";
+      arch = "linux-i686";
+      sha256 = "7122ab00ade326711ebb2056e2c64e2beb5979f8143d785700e9e6489f434882";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/uz/firefox-118.0b7.tar.bz2";
+      locale = "uz";
+      arch = "linux-i686";
+      sha256 = "bf294c84c1fd874149a04a1668e4410d082bc7548969c09eb40916f7d3f7e99b";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/vi/firefox-118.0b7.tar.bz2";
+      locale = "vi";
+      arch = "linux-i686";
+      sha256 = "1d8c6b2c363b97eba622fc0f81f544a2612054aeb472b77b3dc0a425c80776b8";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/xh/firefox-118.0b7.tar.bz2";
+      locale = "xh";
+      arch = "linux-i686";
+      sha256 = "2756e0adb64baa641673808007ebae2c1e35a20f729d84f73d0846c3e16b25f5";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/zh-CN/firefox-118.0b7.tar.bz2";
+      locale = "zh-CN";
+      arch = "linux-i686";
+      sha256 = "27d1abe983b46ffbf5589edeccfb8702457176b6cd69ec898321351df3e13723";
+    }
+    { url = "https://archive.mozilla.org/pub/devedition/releases/118.0b7/linux-i686/zh-TW/firefox-118.0b7.tar.bz2";
+      locale = "zh-TW";
+      arch = "linux-i686";
+      sha256 = "5143ebf2a461c386cc3c2e8bc8983c4813878c13df57b57052411e8880f36834";
+    }
+    ];
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/firefox-bin/release_sources.nix b/nixpkgs/pkgs/applications/networking/browsers/firefox-bin/release_sources.nix
new file mode 100644
index 000000000000..042059c04462
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/firefox-bin/release_sources.nix
@@ -0,0 +1,1015 @@
+{
+  version = "117.0.1";
+  sources = [
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/ach/firefox-117.0.1.tar.bz2";
+      locale = "ach";
+      arch = "linux-x86_64";
+      sha256 = "bba2d74a558ff32c5e723708ab462cdd3af56aeccd06e5b4e842cd8a99f716e5";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/af/firefox-117.0.1.tar.bz2";
+      locale = "af";
+      arch = "linux-x86_64";
+      sha256 = "d7d3337e66a0cb6d63d669e7f9aa8a1afc970aeaa079dd206f2faea9d86f934c";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/an/firefox-117.0.1.tar.bz2";
+      locale = "an";
+      arch = "linux-x86_64";
+      sha256 = "430c9a492de3dd9d0250901cb8e8ed675c6cf3e492f814a4e386d07998a2724f";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/ar/firefox-117.0.1.tar.bz2";
+      locale = "ar";
+      arch = "linux-x86_64";
+      sha256 = "8043636c3639d4803093eb1ff25a23a0a9e6b3746f06c03e0ac2ba5abeadfd55";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/ast/firefox-117.0.1.tar.bz2";
+      locale = "ast";
+      arch = "linux-x86_64";
+      sha256 = "b628087eb248939b53f744937d9f8c07bc204c65915a019e7cfaecfe2f8548f3";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/az/firefox-117.0.1.tar.bz2";
+      locale = "az";
+      arch = "linux-x86_64";
+      sha256 = "f9398fa0e7e8bd1146a2c28135aaaf785d6ea53e5795cd8aecb7d4df4fe744b0";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/be/firefox-117.0.1.tar.bz2";
+      locale = "be";
+      arch = "linux-x86_64";
+      sha256 = "d8645fdd9c897d46f1ef169dae1e89b70e31adc0df743dac2f06eb4c1783646d";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/bg/firefox-117.0.1.tar.bz2";
+      locale = "bg";
+      arch = "linux-x86_64";
+      sha256 = "6d5d684d096ea94b995c4fdca48dfdd423c7f3f203124ae39413ce301cca7e51";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/bn/firefox-117.0.1.tar.bz2";
+      locale = "bn";
+      arch = "linux-x86_64";
+      sha256 = "054b468d029161b2fcadddc470a200f7d908bde5ae0fe5e187d9b5a594ce703d";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/br/firefox-117.0.1.tar.bz2";
+      locale = "br";
+      arch = "linux-x86_64";
+      sha256 = "4d3c5fb7ec494ca2bd4e52ea62e73405121777d38a2a833b39e4eddc3f21adfc";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/bs/firefox-117.0.1.tar.bz2";
+      locale = "bs";
+      arch = "linux-x86_64";
+      sha256 = "fb2d1bc9329f73b889ad2149f157be4fd9219e4d4d1b160a61562a527d1d610c";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/ca-valencia/firefox-117.0.1.tar.bz2";
+      locale = "ca-valencia";
+      arch = "linux-x86_64";
+      sha256 = "bc263c2196669b93226eda1825b6f2350c6bcf91cffd40ab12d3bd1a3c8148fc";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/ca/firefox-117.0.1.tar.bz2";
+      locale = "ca";
+      arch = "linux-x86_64";
+      sha256 = "15087bd5732537e640034b9c3a70efc3e73b8aed20444b3ad63bdb242cb0aabf";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/cak/firefox-117.0.1.tar.bz2";
+      locale = "cak";
+      arch = "linux-x86_64";
+      sha256 = "de6624dd9c6860d7ac3b03dc299b38e066babcae96187669f6df8257b42235a3";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/cs/firefox-117.0.1.tar.bz2";
+      locale = "cs";
+      arch = "linux-x86_64";
+      sha256 = "d7bdd96c4c595d531cfc086553ab0704ec191e92ed54333f79a25d06bb8d6bec";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/cy/firefox-117.0.1.tar.bz2";
+      locale = "cy";
+      arch = "linux-x86_64";
+      sha256 = "7390d9f3e59a12fb9c181f340dbaca2be199cbac8fcee58b3d791f298f19feb2";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/da/firefox-117.0.1.tar.bz2";
+      locale = "da";
+      arch = "linux-x86_64";
+      sha256 = "41275e9881e4a4a9a61aa148d2f762fa17de9d042fbad7d453b886841e684bc5";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/de/firefox-117.0.1.tar.bz2";
+      locale = "de";
+      arch = "linux-x86_64";
+      sha256 = "dc19cb1199dcd7a86a4948309a5a0b220745f8fd2cf7108688b7f800a8d47510";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/dsb/firefox-117.0.1.tar.bz2";
+      locale = "dsb";
+      arch = "linux-x86_64";
+      sha256 = "535994c82cd9aeb4b29658c0391c7264103cfaea0523db1cfcd649bd625f3402";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/el/firefox-117.0.1.tar.bz2";
+      locale = "el";
+      arch = "linux-x86_64";
+      sha256 = "8adbce720ef045f2a06ff61ac09e4ad36bd9b68c09544615ea4404104caf59c6";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/en-CA/firefox-117.0.1.tar.bz2";
+      locale = "en-CA";
+      arch = "linux-x86_64";
+      sha256 = "11a0d2714181a0d6c3034e11b4d053826f48765baf495c050b0f983855230ba1";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/en-GB/firefox-117.0.1.tar.bz2";
+      locale = "en-GB";
+      arch = "linux-x86_64";
+      sha256 = "99d99376ace7f318e6a972ee14b05c51d43b5cb3431fdea03574a59d34e8c7bc";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/en-US/firefox-117.0.1.tar.bz2";
+      locale = "en-US";
+      arch = "linux-x86_64";
+      sha256 = "e70b282ed0b8ce42981675ca2bc9a69fbad23f31f71fbd700b52dcf79e57761c";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/eo/firefox-117.0.1.tar.bz2";
+      locale = "eo";
+      arch = "linux-x86_64";
+      sha256 = "abcde5b6fe8bd9e543729dd87dc99b1bb42013f1741b3ae4d20ab4dd64186572";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/es-AR/firefox-117.0.1.tar.bz2";
+      locale = "es-AR";
+      arch = "linux-x86_64";
+      sha256 = "cd42590e111f426d607d3a18b1cd27c9b691c2d02800f747c8edbbab8f5e31f1";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/es-CL/firefox-117.0.1.tar.bz2";
+      locale = "es-CL";
+      arch = "linux-x86_64";
+      sha256 = "e8986d426d4bb3a93ca8a084ddd2994c1f876f04c88c9143ce4d6758e3a29ec2";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/es-ES/firefox-117.0.1.tar.bz2";
+      locale = "es-ES";
+      arch = "linux-x86_64";
+      sha256 = "29ed9a0a92684f013a86aa84bb2f897795895635fd96cc3cd6b977dbc36b5449";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/es-MX/firefox-117.0.1.tar.bz2";
+      locale = "es-MX";
+      arch = "linux-x86_64";
+      sha256 = "bcfed213881bd7d2a3fbc2f477d63fa17a614cdc6b6462d20d27ed447d5d58d0";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/et/firefox-117.0.1.tar.bz2";
+      locale = "et";
+      arch = "linux-x86_64";
+      sha256 = "d8be9ecdc37b2df6bb14e20030cc44c116d070f68886825ae84bac95b8d2040a";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/eu/firefox-117.0.1.tar.bz2";
+      locale = "eu";
+      arch = "linux-x86_64";
+      sha256 = "59ad82bd51ca20192bb2e083a49e3af4ab5ef9851b05a3c553306a435ed22d38";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/fa/firefox-117.0.1.tar.bz2";
+      locale = "fa";
+      arch = "linux-x86_64";
+      sha256 = "78a469007c15a02379c5ab8883134e40f4d4ffe4a09b9169d4263cbbc98a64f3";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/ff/firefox-117.0.1.tar.bz2";
+      locale = "ff";
+      arch = "linux-x86_64";
+      sha256 = "33d4f8bf75b61ae0480450385ec6a5a3370a011f82ec626b5805052111f000fe";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/fi/firefox-117.0.1.tar.bz2";
+      locale = "fi";
+      arch = "linux-x86_64";
+      sha256 = "b78e9c2dd1319225ee966c87eaf36deb8b7734642b7122bf89d3d9cd7a8b3efc";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/fr/firefox-117.0.1.tar.bz2";
+      locale = "fr";
+      arch = "linux-x86_64";
+      sha256 = "6087f7fb5d7d898f86feba4dd176aebef55b5cb83a79606f2587482d2113c908";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/fur/firefox-117.0.1.tar.bz2";
+      locale = "fur";
+      arch = "linux-x86_64";
+      sha256 = "a76c39c67d956d1a5a399ad3a951e7ef85f873d4eeb4e0f0447e27482a8aab31";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/fy-NL/firefox-117.0.1.tar.bz2";
+      locale = "fy-NL";
+      arch = "linux-x86_64";
+      sha256 = "e6f2627ad2e47087e34fa2d7de27b28dfd859184cbe717f6ba3b1230753aac1f";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/ga-IE/firefox-117.0.1.tar.bz2";
+      locale = "ga-IE";
+      arch = "linux-x86_64";
+      sha256 = "4cd79d5097fbe4c1b8da60fb7452ec040e6a7404be83af94b3fc7bc430af93ee";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/gd/firefox-117.0.1.tar.bz2";
+      locale = "gd";
+      arch = "linux-x86_64";
+      sha256 = "58ea0722146548b82498682813c3e9ae0aca7cefac15829eb6251df6a09cf989";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/gl/firefox-117.0.1.tar.bz2";
+      locale = "gl";
+      arch = "linux-x86_64";
+      sha256 = "bab03a33af0af44c76a6c45d441060a749bcf9795c35b7879996ca7c229ce9ed";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/gn/firefox-117.0.1.tar.bz2";
+      locale = "gn";
+      arch = "linux-x86_64";
+      sha256 = "c4ac97bb3e86ba34b0167a1a3370c36b092a0eef0d4d85a04411722fa97f9cfe";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/gu-IN/firefox-117.0.1.tar.bz2";
+      locale = "gu-IN";
+      arch = "linux-x86_64";
+      sha256 = "92f267e5e1470e142de0ad2b8679c9021425cea37c7de898f918548bbbe0b46d";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/he/firefox-117.0.1.tar.bz2";
+      locale = "he";
+      arch = "linux-x86_64";
+      sha256 = "773a53545da52e43d96c983842569ae1287494bd0e7363fff62b950fb454e542";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/hi-IN/firefox-117.0.1.tar.bz2";
+      locale = "hi-IN";
+      arch = "linux-x86_64";
+      sha256 = "403c66cb65fc2bb38f72d0483860e6667d5ac0235980b8b31404379908598f85";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/hr/firefox-117.0.1.tar.bz2";
+      locale = "hr";
+      arch = "linux-x86_64";
+      sha256 = "2048e4824d67d4e9b2b7b5517a6b7a5a3e10edd9893bdc59e78602ba7ba751c5";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/hsb/firefox-117.0.1.tar.bz2";
+      locale = "hsb";
+      arch = "linux-x86_64";
+      sha256 = "64dfd241702dca4923608ca22494cc422c36a78afd8633cb1b38e1c0206339c8";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/hu/firefox-117.0.1.tar.bz2";
+      locale = "hu";
+      arch = "linux-x86_64";
+      sha256 = "f1dcc54e3b165ac6c9a5672427dbf07b3ce8a464174fd0561d31945a6da03c46";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/hy-AM/firefox-117.0.1.tar.bz2";
+      locale = "hy-AM";
+      arch = "linux-x86_64";
+      sha256 = "b7675399988090dca87e08815d80fc9c3626fc51323c60fd0c68f6e2b0317ebe";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/ia/firefox-117.0.1.tar.bz2";
+      locale = "ia";
+      arch = "linux-x86_64";
+      sha256 = "aa7202913df0bcdc25df93ce730ca77521736668de2b057cd71f41888056dfc9";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/id/firefox-117.0.1.tar.bz2";
+      locale = "id";
+      arch = "linux-x86_64";
+      sha256 = "f5b57f8b7f7e90c875a3905d12b18a6a50581756803f42cd5c161fdd8dcae278";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/is/firefox-117.0.1.tar.bz2";
+      locale = "is";
+      arch = "linux-x86_64";
+      sha256 = "3961d574adb39f68b608dcd45d1d9060e22ba06fc894c0a4fc91805780143b02";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/it/firefox-117.0.1.tar.bz2";
+      locale = "it";
+      arch = "linux-x86_64";
+      sha256 = "2b5121470b5eca3b09e8cd59471a3aec55a416edc148f11227d283d27d2c11d1";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/ja/firefox-117.0.1.tar.bz2";
+      locale = "ja";
+      arch = "linux-x86_64";
+      sha256 = "d0a500a53d93eb3d87fd5dfb9d47a2bf82dff267144477b9a279c346c0f3b012";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/ka/firefox-117.0.1.tar.bz2";
+      locale = "ka";
+      arch = "linux-x86_64";
+      sha256 = "76c533fdd82f6ef8f3f26372cf203f21a838174e948b48b2f89a3602af0eae50";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/kab/firefox-117.0.1.tar.bz2";
+      locale = "kab";
+      arch = "linux-x86_64";
+      sha256 = "2e32c95bc2c92c4859f3cb93995e08ee3f345b90c31157b57b13ec8521ad2146";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/kk/firefox-117.0.1.tar.bz2";
+      locale = "kk";
+      arch = "linux-x86_64";
+      sha256 = "17d7d5acd90c005e07660092aecb92601e0dfd227f44c460f4e5d7541704f81c";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/km/firefox-117.0.1.tar.bz2";
+      locale = "km";
+      arch = "linux-x86_64";
+      sha256 = "f14f332973af47ac3714b2822c88b55f9412a33935ec4d7a5d58b62cce13f8e7";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/kn/firefox-117.0.1.tar.bz2";
+      locale = "kn";
+      arch = "linux-x86_64";
+      sha256 = "c32350aa7c40cbaf2092de7c3e25288f98f3917f933ca787ac16d948d0cb0d2f";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/ko/firefox-117.0.1.tar.bz2";
+      locale = "ko";
+      arch = "linux-x86_64";
+      sha256 = "3e3fc8664a85319ec3c8694f0f69a943d3d72f7995dbf52a389a13a7869feba2";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/lij/firefox-117.0.1.tar.bz2";
+      locale = "lij";
+      arch = "linux-x86_64";
+      sha256 = "fa5a4e03b3dd82255e33c531784691cb07c98c770445b4992700d11fcaeb7c0c";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/lt/firefox-117.0.1.tar.bz2";
+      locale = "lt";
+      arch = "linux-x86_64";
+      sha256 = "97bb3f0ce856fcd9526f0601280d5621902b4a123e10d2cb7438d2686694d7c4";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/lv/firefox-117.0.1.tar.bz2";
+      locale = "lv";
+      arch = "linux-x86_64";
+      sha256 = "461ac23e44fa7ff9992134cba28abcdb6ace665590f9a6fde293398d4f1a97ff";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/mk/firefox-117.0.1.tar.bz2";
+      locale = "mk";
+      arch = "linux-x86_64";
+      sha256 = "5231feaf4f03931150f3c8efbf76eebaf6b3989c9d9f2fba9a3c3ceb96378ad7";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/mr/firefox-117.0.1.tar.bz2";
+      locale = "mr";
+      arch = "linux-x86_64";
+      sha256 = "fbea27c3f30006571efc5a04b36c7ff34fb6b5665d0cf05d05a7ece70063afcf";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/ms/firefox-117.0.1.tar.bz2";
+      locale = "ms";
+      arch = "linux-x86_64";
+      sha256 = "b210d2b88f9108880f41ef02c5c75529d53853828fc0aa26588d30c7e5dd4754";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/my/firefox-117.0.1.tar.bz2";
+      locale = "my";
+      arch = "linux-x86_64";
+      sha256 = "260ecac1fea5671b769175cdf92b6c0be5f64d30a2cb71d9fb352d39db2e3439";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/nb-NO/firefox-117.0.1.tar.bz2";
+      locale = "nb-NO";
+      arch = "linux-x86_64";
+      sha256 = "b3795293e9684677c94dc442ede2d6bba309ba48ca79d7c8d1eed33d5d2854bf";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/ne-NP/firefox-117.0.1.tar.bz2";
+      locale = "ne-NP";
+      arch = "linux-x86_64";
+      sha256 = "53c2628a86d456d2954777072c0e6ac30d85b7714c8e3a95364955fc07270b99";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/nl/firefox-117.0.1.tar.bz2";
+      locale = "nl";
+      arch = "linux-x86_64";
+      sha256 = "c732de95a1e10e4fc1831d740e782d6a268bf0eb7196cd2ef4a549c0cbc3ab81";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/nn-NO/firefox-117.0.1.tar.bz2";
+      locale = "nn-NO";
+      arch = "linux-x86_64";
+      sha256 = "e2220c2548a9265beeaca69c9b9ab21ae238421d46a0b08cab11914986f89bd0";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/oc/firefox-117.0.1.tar.bz2";
+      locale = "oc";
+      arch = "linux-x86_64";
+      sha256 = "d4c85b3d2e87fa8699661e4ea8f2481bb05888d30c33a6e457f34c77da65cdec";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/pa-IN/firefox-117.0.1.tar.bz2";
+      locale = "pa-IN";
+      arch = "linux-x86_64";
+      sha256 = "f51d558b53650b2a9bb325081cdf1168ba3fbf7cb8668c8a5a8e99d0616c2f76";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/pl/firefox-117.0.1.tar.bz2";
+      locale = "pl";
+      arch = "linux-x86_64";
+      sha256 = "76b5ab1b8aa4e82fb29ef152c103529cb15c06de0a256eb2decf7ab5476f42f5";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/pt-BR/firefox-117.0.1.tar.bz2";
+      locale = "pt-BR";
+      arch = "linux-x86_64";
+      sha256 = "90447a08e0d1c707dedae731b5881415421391c1969db744bd65003cee7657a5";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/pt-PT/firefox-117.0.1.tar.bz2";
+      locale = "pt-PT";
+      arch = "linux-x86_64";
+      sha256 = "017f6a56b39b8abbea5bf72a11ca2a0f6630956e234981206c96eece50147c69";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/rm/firefox-117.0.1.tar.bz2";
+      locale = "rm";
+      arch = "linux-x86_64";
+      sha256 = "64ad854a79bfd50a42a3ea405b93494ab4bc10525d811e66c2acd75a85e14834";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/ro/firefox-117.0.1.tar.bz2";
+      locale = "ro";
+      arch = "linux-x86_64";
+      sha256 = "fb0336084d8e34fe2fd321eb3ad2256c2718442936e34b12479aea3d05edadbd";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/ru/firefox-117.0.1.tar.bz2";
+      locale = "ru";
+      arch = "linux-x86_64";
+      sha256 = "763b3534433c0376a65f6c0e065d6dce05cbf03ca95fe51087cb82bdb8ddac87";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/sc/firefox-117.0.1.tar.bz2";
+      locale = "sc";
+      arch = "linux-x86_64";
+      sha256 = "1b352e4edf8ef5067cc1ddc230fb907f5246ea612898a0c4f0715442f2ac7f47";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/sco/firefox-117.0.1.tar.bz2";
+      locale = "sco";
+      arch = "linux-x86_64";
+      sha256 = "3fc7764ab6b13bdaab3f9a990ab7b2337500a24603b31ef65657c27705041783";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/si/firefox-117.0.1.tar.bz2";
+      locale = "si";
+      arch = "linux-x86_64";
+      sha256 = "79255e4967614e18f11ddf3b32a5cf87058a01df12edc5f04671411796bd4844";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/sk/firefox-117.0.1.tar.bz2";
+      locale = "sk";
+      arch = "linux-x86_64";
+      sha256 = "8111813b6247526b6ab97aa212275f67a8b70556a7565541796cab9700dae295";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/sl/firefox-117.0.1.tar.bz2";
+      locale = "sl";
+      arch = "linux-x86_64";
+      sha256 = "c79c7b15b0bb3fad4b2fcb4cfddd15a3a43e6469a56b8557240700c65c544a28";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/son/firefox-117.0.1.tar.bz2";
+      locale = "son";
+      arch = "linux-x86_64";
+      sha256 = "c14447b86bd4b888db93ecae8f19e7e136365c6f8cf690a07cd5cdf74ea9e58d";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/sq/firefox-117.0.1.tar.bz2";
+      locale = "sq";
+      arch = "linux-x86_64";
+      sha256 = "2575be23194405bfdf20fc8363f81b148b02081f26231977bf6032007a235558";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/sr/firefox-117.0.1.tar.bz2";
+      locale = "sr";
+      arch = "linux-x86_64";
+      sha256 = "018f214f645800c738edb612ac4ff8cc806b382a96a80b720cb5d87607574d44";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/sv-SE/firefox-117.0.1.tar.bz2";
+      locale = "sv-SE";
+      arch = "linux-x86_64";
+      sha256 = "58d136a8a9e9dff6fc4a84a75055a73e90d2da68cc2676863985095691172332";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/szl/firefox-117.0.1.tar.bz2";
+      locale = "szl";
+      arch = "linux-x86_64";
+      sha256 = "b1b76d0cc40f6f44f277db0b15e8877f54f137dd24614095273322b637367d10";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/ta/firefox-117.0.1.tar.bz2";
+      locale = "ta";
+      arch = "linux-x86_64";
+      sha256 = "5efa32abf220da9c35d760bfb3bc46aba03b4f11733751821dcfc85b09ff58fa";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/te/firefox-117.0.1.tar.bz2";
+      locale = "te";
+      arch = "linux-x86_64";
+      sha256 = "a20aec40164aabfbac2e2215665f8bbf0f3719d0317b9975a6f094eeb7d665f4";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/tg/firefox-117.0.1.tar.bz2";
+      locale = "tg";
+      arch = "linux-x86_64";
+      sha256 = "d7f8de05aa85b8a4a7312c6a217fa9ab6cb1765160dc0d45742bb2de9b6497b1";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/th/firefox-117.0.1.tar.bz2";
+      locale = "th";
+      arch = "linux-x86_64";
+      sha256 = "1bcd53cbb98ab3089b1175cc808c9781033a792e786604c13343b2866d3516c0";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/tl/firefox-117.0.1.tar.bz2";
+      locale = "tl";
+      arch = "linux-x86_64";
+      sha256 = "55d52bae09ea4093e1eff96585dfdd477f908f1071fabcfc1bcd13354b94de1a";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/tr/firefox-117.0.1.tar.bz2";
+      locale = "tr";
+      arch = "linux-x86_64";
+      sha256 = "c57af5504418e23cde3402880be0d3797a186aa56954adfc2f3c0ed8942172ae";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/trs/firefox-117.0.1.tar.bz2";
+      locale = "trs";
+      arch = "linux-x86_64";
+      sha256 = "409208e0f3f3cd5e25297f5120fc933ba83dace1449546589a97e62ff0dc9537";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/uk/firefox-117.0.1.tar.bz2";
+      locale = "uk";
+      arch = "linux-x86_64";
+      sha256 = "df08ed863cd7d02e021953290ba609c8d00f63f8c03fa3c837ce0f6bdb121ddf";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/ur/firefox-117.0.1.tar.bz2";
+      locale = "ur";
+      arch = "linux-x86_64";
+      sha256 = "d549573c3571d0c20ddc6c3606d1a4784a6886a757943be423814f9f3e847061";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/uz/firefox-117.0.1.tar.bz2";
+      locale = "uz";
+      arch = "linux-x86_64";
+      sha256 = "7a09b51b30f4152f14e84f4590772daafce02165e1d314b70447cf09985bbd13";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/vi/firefox-117.0.1.tar.bz2";
+      locale = "vi";
+      arch = "linux-x86_64";
+      sha256 = "cfe678b674c001b5818830be0eaf36cfa2b0ed31d005c4a559ecda2dac6fcae6";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/xh/firefox-117.0.1.tar.bz2";
+      locale = "xh";
+      arch = "linux-x86_64";
+      sha256 = "1c7e9e390ddcd9e006f86a5f645546359fa73c1c0f04d3504085bbcf3c82d74d";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/zh-CN/firefox-117.0.1.tar.bz2";
+      locale = "zh-CN";
+      arch = "linux-x86_64";
+      sha256 = "d7636801fd5fa862c7a211f21ec7666eaa30c75d8394ede2e471a6671a9de2f3";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-x86_64/zh-TW/firefox-117.0.1.tar.bz2";
+      locale = "zh-TW";
+      arch = "linux-x86_64";
+      sha256 = "84786eb39341069a27ff31e4f99534bdc1e9d581f48f94234f90f0fe97c548c3";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/ach/firefox-117.0.1.tar.bz2";
+      locale = "ach";
+      arch = "linux-i686";
+      sha256 = "ac3c882130b37750d3ab48d18443a140173220b14f6ece8de238677c7dd00d3f";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/af/firefox-117.0.1.tar.bz2";
+      locale = "af";
+      arch = "linux-i686";
+      sha256 = "bbbf07ae28faf976e4c4cbf87d5d0caf079087679958b43affa019ea8896bfad";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/an/firefox-117.0.1.tar.bz2";
+      locale = "an";
+      arch = "linux-i686";
+      sha256 = "a82e2846b4ef077659f888d71ca415bf4918ab8f2841abb926ca8f86e6767b42";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/ar/firefox-117.0.1.tar.bz2";
+      locale = "ar";
+      arch = "linux-i686";
+      sha256 = "107c2e66caef41e3f4e415f50842eaed1a1f02392f3514d60193b1cde6b0a340";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/ast/firefox-117.0.1.tar.bz2";
+      locale = "ast";
+      arch = "linux-i686";
+      sha256 = "b5c862ad4b1072433eedc82f4df4c13fe7e85b88a19e5b4e1772df01a64db916";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/az/firefox-117.0.1.tar.bz2";
+      locale = "az";
+      arch = "linux-i686";
+      sha256 = "dd43d0cd1897863ed3a2df05af1bd00ca7332954fdd3672f67ba7098691b7b0f";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/be/firefox-117.0.1.tar.bz2";
+      locale = "be";
+      arch = "linux-i686";
+      sha256 = "9badec5971f42c054618c1f6b86df5771278b07a44d8a345271b2241e057c565";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/bg/firefox-117.0.1.tar.bz2";
+      locale = "bg";
+      arch = "linux-i686";
+      sha256 = "0499c5e2b00eaa6df5ed88f699811d8a4d59ab232489eaa49a8ec3912ef4e295";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/bn/firefox-117.0.1.tar.bz2";
+      locale = "bn";
+      arch = "linux-i686";
+      sha256 = "b65f718dbd3400e643f059e62cc46104e9ea6545f79906e81ee796758571a7c1";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/br/firefox-117.0.1.tar.bz2";
+      locale = "br";
+      arch = "linux-i686";
+      sha256 = "b07c8981ce349ffab9c918dff7f14e11abbf47efed549085abafeb27c1d1ec74";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/bs/firefox-117.0.1.tar.bz2";
+      locale = "bs";
+      arch = "linux-i686";
+      sha256 = "90bc7796ea5a98965f313fbfccf892293d1c853b40d3721be646d19ead56d730";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/ca-valencia/firefox-117.0.1.tar.bz2";
+      locale = "ca-valencia";
+      arch = "linux-i686";
+      sha256 = "c2af61e1b96a963afb0990c5604b25b9b8a5d4de3cdbbfaf0f146a710be7df8c";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/ca/firefox-117.0.1.tar.bz2";
+      locale = "ca";
+      arch = "linux-i686";
+      sha256 = "270a4cd83f9aa805348e40b77ed02858a78a72ffcbc11959e9abcaaceab8f969";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/cak/firefox-117.0.1.tar.bz2";
+      locale = "cak";
+      arch = "linux-i686";
+      sha256 = "ea1ca329e0ff8309d24596ae2bacbb82e347626844e66aa39eb4c24b24a59b26";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/cs/firefox-117.0.1.tar.bz2";
+      locale = "cs";
+      arch = "linux-i686";
+      sha256 = "9f4fa709af30679b779f2ccf5a59cb667fc6a94239f80b3503fda365b08da4c4";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/cy/firefox-117.0.1.tar.bz2";
+      locale = "cy";
+      arch = "linux-i686";
+      sha256 = "d9d32157acf6c3c0d32831b0f109c75bfb0e93e4805e8b84ed98fd79107254c6";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/da/firefox-117.0.1.tar.bz2";
+      locale = "da";
+      arch = "linux-i686";
+      sha256 = "b462ffdf869d7fd924708f0118c1aeeed83147d7b6c0b9e8b7e157a45cffbdd5";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/de/firefox-117.0.1.tar.bz2";
+      locale = "de";
+      arch = "linux-i686";
+      sha256 = "717ea34412ec90e31706e88a798907cd0d4da2f9a45c68965e11d451644ae503";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/dsb/firefox-117.0.1.tar.bz2";
+      locale = "dsb";
+      arch = "linux-i686";
+      sha256 = "1cda72a69e674ac5eecedc64718555a9522695d38093a338a38a895bb8d1c40a";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/el/firefox-117.0.1.tar.bz2";
+      locale = "el";
+      arch = "linux-i686";
+      sha256 = "3b36d85a9213e1286e4731be02ec0d4fd959c80aefd8f5cd462c7489a03cd728";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/en-CA/firefox-117.0.1.tar.bz2";
+      locale = "en-CA";
+      arch = "linux-i686";
+      sha256 = "57071ebf1838ed52fcf0406a9c92c03ad8d92710c71dcfce4aeccbcf92e69a34";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/en-GB/firefox-117.0.1.tar.bz2";
+      locale = "en-GB";
+      arch = "linux-i686";
+      sha256 = "c6bb0aabf88c16cde1c8e9cdc084b9392559992d4ac2632487f4e02e04fe645e";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/en-US/firefox-117.0.1.tar.bz2";
+      locale = "en-US";
+      arch = "linux-i686";
+      sha256 = "946bfbddcbf7f373cf597191470cca704323081d40b79240a0deffc47da485e4";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/eo/firefox-117.0.1.tar.bz2";
+      locale = "eo";
+      arch = "linux-i686";
+      sha256 = "e7a7d1d04818c5446c415cd42da9f9861729672ddef665745386bc8cd50a75df";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/es-AR/firefox-117.0.1.tar.bz2";
+      locale = "es-AR";
+      arch = "linux-i686";
+      sha256 = "9cd56ba61d04cd7fecbf870d51c71c3ee73fc40c95f58082cf63bce39bd52eff";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/es-CL/firefox-117.0.1.tar.bz2";
+      locale = "es-CL";
+      arch = "linux-i686";
+      sha256 = "4eb297d641094c32f60ffd97231276a40622cdff051a9d404392361eb1335350";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/es-ES/firefox-117.0.1.tar.bz2";
+      locale = "es-ES";
+      arch = "linux-i686";
+      sha256 = "cd8b324ba4172d4674ef5a3dcca6578e69afd60c865620a14eb8133ca6b090a1";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/es-MX/firefox-117.0.1.tar.bz2";
+      locale = "es-MX";
+      arch = "linux-i686";
+      sha256 = "aca1e6539b860868136de21e7bca7a95294378b8322d66a02ab8799a6fc4c62a";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/et/firefox-117.0.1.tar.bz2";
+      locale = "et";
+      arch = "linux-i686";
+      sha256 = "b3c1b1ec5b65326023e35841f255d7bdc01c962c7e25cf94cee4035c88b0e84a";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/eu/firefox-117.0.1.tar.bz2";
+      locale = "eu";
+      arch = "linux-i686";
+      sha256 = "88129d6df309655acb54488aa58a38a36360396aeaeba1676ac5e487820e475a";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/fa/firefox-117.0.1.tar.bz2";
+      locale = "fa";
+      arch = "linux-i686";
+      sha256 = "abb3d073811dec8f9156832cbef0a2179df8b9247052dd6cfe3aefb12a1f1298";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/ff/firefox-117.0.1.tar.bz2";
+      locale = "ff";
+      arch = "linux-i686";
+      sha256 = "1ae27af807445715e9886e65362949487c39e27e934898af2b951c8c3b1ad23c";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/fi/firefox-117.0.1.tar.bz2";
+      locale = "fi";
+      arch = "linux-i686";
+      sha256 = "8e3822f6f36a3b29d7e8626417376c43c2fdb2eb0882a62bfb451d4e74e49d81";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/fr/firefox-117.0.1.tar.bz2";
+      locale = "fr";
+      arch = "linux-i686";
+      sha256 = "baf787fd2881ffddd1d13045aa0b12ebd6f26e5d7a9b15f6d0178dd16e2f9c60";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/fur/firefox-117.0.1.tar.bz2";
+      locale = "fur";
+      arch = "linux-i686";
+      sha256 = "2da0f32811479ef389cd7594a375cdf0438c6126e142a93b4b9f456ea6124e88";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/fy-NL/firefox-117.0.1.tar.bz2";
+      locale = "fy-NL";
+      arch = "linux-i686";
+      sha256 = "36b7670fc2417f732e62c129dacf9cccc3fd38bcac5ebc8354b4db69ed6357bc";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/ga-IE/firefox-117.0.1.tar.bz2";
+      locale = "ga-IE";
+      arch = "linux-i686";
+      sha256 = "865b29db4fda9589069b3a9b05c2d75850247cadf56faa816536383381292032";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/gd/firefox-117.0.1.tar.bz2";
+      locale = "gd";
+      arch = "linux-i686";
+      sha256 = "2233ff73ea497ec7f8eb3db41289a8a488e21fb43966d2bd6ba3ec6f9bdcdf14";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/gl/firefox-117.0.1.tar.bz2";
+      locale = "gl";
+      arch = "linux-i686";
+      sha256 = "1c3fadb78c4b292302ccc545d9bdb7f3750517487db65e6955fb1d8a159215cb";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/gn/firefox-117.0.1.tar.bz2";
+      locale = "gn";
+      arch = "linux-i686";
+      sha256 = "e0d2c1859907c0385aa89d169c8bbe931484fca77ac28c27f4735e6d98b009bc";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/gu-IN/firefox-117.0.1.tar.bz2";
+      locale = "gu-IN";
+      arch = "linux-i686";
+      sha256 = "fdba80a44f6a82df974894f59fbfab1dcefccd4e710c6377152f8fc025cac06c";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/he/firefox-117.0.1.tar.bz2";
+      locale = "he";
+      arch = "linux-i686";
+      sha256 = "e0d2571389cfdb8191ff2fc796bd062b60b6c56cf0a5d2897896130edba96519";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/hi-IN/firefox-117.0.1.tar.bz2";
+      locale = "hi-IN";
+      arch = "linux-i686";
+      sha256 = "2061872a3adca56a7c8369d44bd9612507c3ca83d0b463380b520ee9c88ad63d";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/hr/firefox-117.0.1.tar.bz2";
+      locale = "hr";
+      arch = "linux-i686";
+      sha256 = "7a1bb05e721957798a72f4703faa0a4b72481d9586566e7dfbb7ed01b4d80fd7";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/hsb/firefox-117.0.1.tar.bz2";
+      locale = "hsb";
+      arch = "linux-i686";
+      sha256 = "b53c89601cd7afffd066f0737d03d5404b97e2edf6dfdb4255abb09d4b798e6b";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/hu/firefox-117.0.1.tar.bz2";
+      locale = "hu";
+      arch = "linux-i686";
+      sha256 = "e5e0a738474a14a22c637291f7071019a0cc8129164383277fe2d87b48df6b1e";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/hy-AM/firefox-117.0.1.tar.bz2";
+      locale = "hy-AM";
+      arch = "linux-i686";
+      sha256 = "2acf47df4c1961b2eaafbbe169dc81fe717cc7568bdd70834e59ee607ab4d499";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/ia/firefox-117.0.1.tar.bz2";
+      locale = "ia";
+      arch = "linux-i686";
+      sha256 = "121a35d0584208dc36cad8633751314c518fd9160d36c487f4c22f80487c6d0a";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/id/firefox-117.0.1.tar.bz2";
+      locale = "id";
+      arch = "linux-i686";
+      sha256 = "a63c847bfbfdbdb54f482bc526d217a3d9e62c6f7da224bcad490558c031177d";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/is/firefox-117.0.1.tar.bz2";
+      locale = "is";
+      arch = "linux-i686";
+      sha256 = "e87e76e9e2f4b3ae8a6b227a1411808b18a11891a8cbe835bacb0b99f0f3d348";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/it/firefox-117.0.1.tar.bz2";
+      locale = "it";
+      arch = "linux-i686";
+      sha256 = "3204ce295752fa450b515431ad62b1a2506b77a5e2d8118f50a8c551cdf121ad";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/ja/firefox-117.0.1.tar.bz2";
+      locale = "ja";
+      arch = "linux-i686";
+      sha256 = "50fc16576bbe98de00d63e8c79b0c41aaf0c013548bcd2222b911fcf1abab564";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/ka/firefox-117.0.1.tar.bz2";
+      locale = "ka";
+      arch = "linux-i686";
+      sha256 = "839e73f97a4517a39484b190bc5419bec36d2065101400a489af1f4d6f2a32ef";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/kab/firefox-117.0.1.tar.bz2";
+      locale = "kab";
+      arch = "linux-i686";
+      sha256 = "c2585304255fc4550510ae3e826745bcba0e586d1eb252675f5eb51ef8ace713";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/kk/firefox-117.0.1.tar.bz2";
+      locale = "kk";
+      arch = "linux-i686";
+      sha256 = "f7ff22dc2094c824c9e2e1585f1d79236b301b0dbf862f93c0de47ade0c1df1f";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/km/firefox-117.0.1.tar.bz2";
+      locale = "km";
+      arch = "linux-i686";
+      sha256 = "65e6263a990c294acebcc61581ddb1e18c5068d59ded08b7d57a47eeb8c43486";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/kn/firefox-117.0.1.tar.bz2";
+      locale = "kn";
+      arch = "linux-i686";
+      sha256 = "f0d510b70df7a89b81e1eaee4aae39e958dabd59d03db569e79f33a7d56d799a";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/ko/firefox-117.0.1.tar.bz2";
+      locale = "ko";
+      arch = "linux-i686";
+      sha256 = "bc6741b5e0d7e712beea5e9a301dfaf9ff5d42c1050b43c0b354bb673242e207";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/lij/firefox-117.0.1.tar.bz2";
+      locale = "lij";
+      arch = "linux-i686";
+      sha256 = "b5767b9b389cc68dd9b4fc8d869dc2517d312ed9d6aa9ca190360b376807d9f3";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/lt/firefox-117.0.1.tar.bz2";
+      locale = "lt";
+      arch = "linux-i686";
+      sha256 = "7a0d7fb9a6969be6e4fc87aef20bea9c4c8359a9608e5a77f63bb2d4eb774182";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/lv/firefox-117.0.1.tar.bz2";
+      locale = "lv";
+      arch = "linux-i686";
+      sha256 = "9302a16902d942ec130dbfdbe2bd147bd5155f5ff575e23023378e76625ac3f2";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/mk/firefox-117.0.1.tar.bz2";
+      locale = "mk";
+      arch = "linux-i686";
+      sha256 = "f7adf51124738ab260edfa03f12b70644b5aa813460c91dd454af8f593d7806a";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/mr/firefox-117.0.1.tar.bz2";
+      locale = "mr";
+      arch = "linux-i686";
+      sha256 = "7612235ad4d915d367d009c7d160bff107d4132b92b16d8e4d4f76f449e0eb4a";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/ms/firefox-117.0.1.tar.bz2";
+      locale = "ms";
+      arch = "linux-i686";
+      sha256 = "7bfcf302486c52310bc6c23cdf955b114d431153e46505e5ebf3abe45f1158c6";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/my/firefox-117.0.1.tar.bz2";
+      locale = "my";
+      arch = "linux-i686";
+      sha256 = "3de439e7ec33d0a98cfe1f0d2b8a96a0350edadc2698474e2a7520ac9dc5e61f";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/nb-NO/firefox-117.0.1.tar.bz2";
+      locale = "nb-NO";
+      arch = "linux-i686";
+      sha256 = "ec1eb9cfb49e6250e3ec1e7d2918a98389315075d7c5a71184605958984d08c7";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/ne-NP/firefox-117.0.1.tar.bz2";
+      locale = "ne-NP";
+      arch = "linux-i686";
+      sha256 = "bd7f0e873a22ee7c8539292b8731d27230160d2ba7a3de223cf357a468c6fa66";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/nl/firefox-117.0.1.tar.bz2";
+      locale = "nl";
+      arch = "linux-i686";
+      sha256 = "37c3289c522d84a785af6afbd1af6d868506569566234a306775e996928e5552";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/nn-NO/firefox-117.0.1.tar.bz2";
+      locale = "nn-NO";
+      arch = "linux-i686";
+      sha256 = "4d977db9e140b846be1562807fb9f4dc72020c25e93fc64428e819c1df1610dd";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/oc/firefox-117.0.1.tar.bz2";
+      locale = "oc";
+      arch = "linux-i686";
+      sha256 = "b642f568fbc00c7c12148e415eac9cae767c043e058c8c3c416cb8b83d8236b0";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/pa-IN/firefox-117.0.1.tar.bz2";
+      locale = "pa-IN";
+      arch = "linux-i686";
+      sha256 = "aaf14c69892fec4fbbf7b93cb01dba86eb26d744eca74e61753c15e06dd32d90";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/pl/firefox-117.0.1.tar.bz2";
+      locale = "pl";
+      arch = "linux-i686";
+      sha256 = "8d7fb18457966adf7ee53459ba8c8faaad2806bb228d3b8acd37dae30b50161a";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/pt-BR/firefox-117.0.1.tar.bz2";
+      locale = "pt-BR";
+      arch = "linux-i686";
+      sha256 = "8a2c8ad808982f53b953f1b3fb34cd7e829b20d6fc298f7c734d0b6eb158634f";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/pt-PT/firefox-117.0.1.tar.bz2";
+      locale = "pt-PT";
+      arch = "linux-i686";
+      sha256 = "73e82c20cf4302427f99c48be6ca10477a23e9e174d960b4267f4ee1d8486beb";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/rm/firefox-117.0.1.tar.bz2";
+      locale = "rm";
+      arch = "linux-i686";
+      sha256 = "54ace8e61c0bd0788a42ac03c665aec1e65c963c30f2d26f39cae1257a5e6ef4";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/ro/firefox-117.0.1.tar.bz2";
+      locale = "ro";
+      arch = "linux-i686";
+      sha256 = "37c720f62c5c66f393d8344781db87b38cb4ed13089a8bc0ec45cef3e49b9672";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/ru/firefox-117.0.1.tar.bz2";
+      locale = "ru";
+      arch = "linux-i686";
+      sha256 = "554ab054c041c279a62ce29a84ca030ec7e2b19b8db7bc61e5f3e2b2dd5118bf";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/sc/firefox-117.0.1.tar.bz2";
+      locale = "sc";
+      arch = "linux-i686";
+      sha256 = "a60581fac2fe16b2692a2e5ad5b625a93690c46ece6e25902193c3c7f5741b5a";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/sco/firefox-117.0.1.tar.bz2";
+      locale = "sco";
+      arch = "linux-i686";
+      sha256 = "63312e044a3b619552a8fcb901952a905d7740c2622234d63802fc90111a7ade";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/si/firefox-117.0.1.tar.bz2";
+      locale = "si";
+      arch = "linux-i686";
+      sha256 = "92d17e48142740d7d5e7e7ede07ad36ddeb82033a716e6532a54b4456a8e84a1";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/sk/firefox-117.0.1.tar.bz2";
+      locale = "sk";
+      arch = "linux-i686";
+      sha256 = "e58b27edd6d1e92bdd3dcc4118e66e7ebd60c716b82e527796a4debfd07888f4";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/sl/firefox-117.0.1.tar.bz2";
+      locale = "sl";
+      arch = "linux-i686";
+      sha256 = "ac0642523b0603114faf56fde13dc2ffba9c80e781c7003ef65bf95f6d19fa8b";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/son/firefox-117.0.1.tar.bz2";
+      locale = "son";
+      arch = "linux-i686";
+      sha256 = "bf1260296304692ed7cc09e8bf6aea61de8c3de7c01ca14d9a7ed98fed64d43d";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/sq/firefox-117.0.1.tar.bz2";
+      locale = "sq";
+      arch = "linux-i686";
+      sha256 = "2379151ddaa60f60864834724be03b8893482979c2a9c627e48502e0d6a7c00b";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/sr/firefox-117.0.1.tar.bz2";
+      locale = "sr";
+      arch = "linux-i686";
+      sha256 = "7e49e729e5bda8973d1e59c486f435bd4a65b37800210e2f99c09fbe40632deb";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/sv-SE/firefox-117.0.1.tar.bz2";
+      locale = "sv-SE";
+      arch = "linux-i686";
+      sha256 = "94530cf755bf8e53354e687d57bd7ccd67a4c39b2985a75e6d8756b8e9fe2ee0";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/szl/firefox-117.0.1.tar.bz2";
+      locale = "szl";
+      arch = "linux-i686";
+      sha256 = "3cf2cf3a9dfc868c830d278c54a0d4634ee1ad3d7f2727a50a9fef3e4786309f";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/ta/firefox-117.0.1.tar.bz2";
+      locale = "ta";
+      arch = "linux-i686";
+      sha256 = "659f85d4e72aa14609e82a37df1048eb039ffb2ff5613273eed7a9b66ae29871";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/te/firefox-117.0.1.tar.bz2";
+      locale = "te";
+      arch = "linux-i686";
+      sha256 = "e9f6025eefbb54340ef73849de76acb838bd31594667d53991fec1fe6a6052f9";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/tg/firefox-117.0.1.tar.bz2";
+      locale = "tg";
+      arch = "linux-i686";
+      sha256 = "9862028cad77ad49e30da59c5a436205466a86aefa3e10c685153394ffc48fc1";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/th/firefox-117.0.1.tar.bz2";
+      locale = "th";
+      arch = "linux-i686";
+      sha256 = "e0aedabb6452b8ab296b4c7ec4e8328108bdd73fd7dd2f34a3ba2febcccb6ff2";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/tl/firefox-117.0.1.tar.bz2";
+      locale = "tl";
+      arch = "linux-i686";
+      sha256 = "e4abf5b13f05d3d6f5373fe178cdf53bc420a277549d5ab8d920ba541474ef1d";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/tr/firefox-117.0.1.tar.bz2";
+      locale = "tr";
+      arch = "linux-i686";
+      sha256 = "80833c233a29bc6064b05f6ae0dd3484814ce8eac9af5b49e19313d47c965454";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/trs/firefox-117.0.1.tar.bz2";
+      locale = "trs";
+      arch = "linux-i686";
+      sha256 = "8f71e5b5660e5fc70728fb4c14d3bd4626c5198964eadd5866604367c444c183";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/uk/firefox-117.0.1.tar.bz2";
+      locale = "uk";
+      arch = "linux-i686";
+      sha256 = "1f4b2710661432b2dcc40b9489c4609f1e6b60147d09e221e74558e2fa595c1f";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/ur/firefox-117.0.1.tar.bz2";
+      locale = "ur";
+      arch = "linux-i686";
+      sha256 = "a6810d749716efe089b5ae67e52ff51e4368213648e64716b91da7806ac60e0c";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/uz/firefox-117.0.1.tar.bz2";
+      locale = "uz";
+      arch = "linux-i686";
+      sha256 = "b02d490c4ad4d3c9148ab9fe9cc28b6484d540832a7850ff049d1f2748bf0d3d";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/vi/firefox-117.0.1.tar.bz2";
+      locale = "vi";
+      arch = "linux-i686";
+      sha256 = "65a7e90b36fa8b96972869c6e83c911cebb20b9de9ac91dadbe9048b0e5e8d5a";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/xh/firefox-117.0.1.tar.bz2";
+      locale = "xh";
+      arch = "linux-i686";
+      sha256 = "ab05ae65b098462761b67409fbcb92cb1c480defc70b9771fe6de0be3ea0a2e5";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/zh-CN/firefox-117.0.1.tar.bz2";
+      locale = "zh-CN";
+      arch = "linux-i686";
+      sha256 = "7fc5a43500f9b190937f72f3d0203489a43b805762c02d48ac0844975f03cabb";
+    }
+    { url = "https://archive.mozilla.org/pub/firefox/releases/117.0.1/linux-i686/zh-TW/firefox-117.0.1.tar.bz2";
+      locale = "zh-TW";
+      arch = "linux-i686";
+      sha256 = "1a4c43ff0c176ede40b17275d2a5eea49e58711d228d1a34c3a15695786e23c1";
+    }
+    ];
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/firefox-bin/update.nix b/nixpkgs/pkgs/applications/networking/browsers/firefox-bin/update.nix
new file mode 100644
index 000000000000..bdef9b125d07
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/firefox-bin/update.nix
@@ -0,0 +1,94 @@
+{ pname
+, channel
+, lib
+, writeScript
+, xidel
+, coreutils
+, gnused
+, gnugrep
+, curl
+, gnupg
+, runtimeShell
+, baseName ? "firefox"
+, basePath ? "pkgs/applications/networking/browsers/firefox-bin"
+, baseUrl
+}:
+
+let
+  isBeta =
+    channel != "release";
+
+in writeScript "update-${pname}" ''
+  #!${runtimeShell}
+  PATH=${coreutils}/bin:${gnused}/bin:${gnugrep}/bin:${xidel}/bin:${curl}/bin:${gnupg}/bin
+  set -eux
+  pushd ${basePath}
+
+  HOME=`mktemp -d`
+  export GNUPGHOME=`mktemp -d`
+
+  gpg --receive-keys ADD7079479700DCADFDD5337E36D3B13F3D93274
+
+  tmpfile=`mktemp`
+  url=${baseUrl}
+
+  # retriving latest released version
+  #  - extracts all links from the $url
+  #  - removes . and ..
+  #  - this line remove everything not starting with a number
+  #  - this line sorts everything with semver in mind
+  #  - we remove lines that are mentioning funnelcake
+  #  - this line removes beta version if we are looking for final release
+  #    versions or removes release versions if we are looking for beta
+  #    versions
+  # - this line pick up latest release
+  version=`xidel -s $url --extract "//a" | \
+           sed s"/.$//" | \
+           grep "^[0-9]" | \
+           sort --version-sort | \
+           grep -v "funnelcake" | \
+           grep -e "${lib.optionalString isBeta "b"}\([[:digit:]]\|[[:digit:]][[:digit:]]\)$" | ${lib.optionalString (!isBeta) "grep -v \"b\" |"} \
+           tail -1`
+
+  curl --silent -o $HOME/shasums "$url$version/SHA256SUMS"
+  curl --silent -o $HOME/shasums.asc "$url$version/SHA256SUMS.asc"
+  gpgv --keyring=$GNUPGHOME/pubring.kbx $HOME/shasums.asc $HOME/shasums
+
+  # this is a list of sha256 and tarballs for both arches
+  # Upstream files contains python repr strings like b'somehash', hence the sed dance
+  shasums=`cat $HOME/shasums | sed -E s/"b'([a-f0-9]{64})'?(.*)"/'\1\2'/ | grep tar.bz2`
+
+  cat > $tmpfile <<EOF
+  {
+    version = "$version";
+    sources = [
+  EOF
+  for arch in linux-x86_64 linux-i686; do
+    # retriving a list of all tarballs for each arch
+    #  - only select tarballs for current arch
+    #  - only select tarballs for current version
+    #  - rename space with colon so that for loop doesnt
+    #  - inteprets sha and path as 2 lines
+    for line in `echo "$shasums" | \
+                 grep $arch | \
+                 grep "${baseName}-$version.tar.bz2$" | \
+                 tr " " ":"`; do
+      # create an entry for every locale
+      cat >> $tmpfile <<EOF
+      { url = "$url$version/`echo $line | cut -d":" -f3`";
+        locale = "`echo $line | cut -d":" -f3 | sed "s/$arch\///" | sed "s/\/.*//"`";
+        arch = "$arch";
+        sha256 = "`echo $line | cut -d":" -f1`";
+      }
+  EOF
+    done
+  done
+  cat >> $tmpfile <<EOF
+      ];
+  }
+  EOF
+
+  mv $tmpfile ${channel}_sources.nix
+
+  popd
+''
diff --git a/nixpkgs/pkgs/applications/networking/browsers/firefox/common.nix b/nixpkgs/pkgs/applications/networking/browsers/firefox/common.nix
new file mode 100644
index 000000000000..bb4b1ba0a85d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/firefox/common.nix
@@ -0,0 +1,590 @@
+{ pname
+, version
+, meta
+, updateScript ? null
+, binaryName ? "firefox"
+, application ? "browser"
+, applicationName ? "Mozilla Firefox"
+, branding ? null
+, src
+, unpackPhase ? null
+, extraPatches ? []
+, extraPostPatch ? ""
+, extraNativeBuildInputs ? []
+, extraConfigureFlags ? []
+, extraBuildInputs ? []
+, extraMakeFlags ? []
+, extraPassthru ? {}
+, tests ? []
+}:
+
+
+{ lib
+, pkgs
+, stdenv
+, fetchpatch
+, patchelf
+
+# build time
+, autoconf
+, cargo
+, dump_syms
+, makeWrapper
+, mimalloc
+, nodejs
+, perl
+, pkg-config
+, pkgsCross # wasm32 rlbox
+, python3
+, runCommand
+, rustc
+, rust-cbindgen
+, rustPlatform
+, unzip
+, which
+, wrapGAppsHook
+
+# runtime
+, bzip2
+, dbus
+, dbus-glib
+, file
+, fontconfig
+, freetype
+, glib
+, gnum4
+, gtk3
+, icu
+, icu72
+, libGL
+, libGLU
+, libevent
+, libffi
+, libjpeg
+, libpng
+, libstartup_notification
+, libvpx
+, libwebp
+, nasm
+, nspr
+, nss_esr
+, nss_latest
+, pango
+, xorg
+, zip
+, zlib
+, pkgsBuildBuild
+
+# optionals
+
+## debugging
+
+, debugBuild ? false
+
+# On 32bit platforms, we disable adding "-g" for easier linking.
+, enableDebugSymbols ? !stdenv.is32bit
+
+## optional libraries
+
+, alsaSupport ? stdenv.isLinux, alsa-lib
+, ffmpegSupport ? true
+, gssSupport ? true, libkrb5
+, jackSupport ? stdenv.isLinux, libjack2
+, jemallocSupport ? !stdenv.hostPlatform.isMusl, jemalloc
+, ltoSupport ? (stdenv.isLinux && stdenv.is64bit && !stdenv.hostPlatform.isRiscV), overrideCC, buildPackages
+, pgoSupport ? (stdenv.isLinux && stdenv.hostPlatform == stdenv.buildPlatform), xvfb-run
+, pipewireSupport ? waylandSupport && webrtcSupport
+, pulseaudioSupport ? stdenv.isLinux, libpulseaudio
+, sndioSupport ? stdenv.isLinux, sndio
+, waylandSupport ? true, libxkbcommon, libdrm
+
+## privacy-related options
+
+, privacySupport ? false
+
+# WARNING: NEVER set any of the options below to `true` by default.
+# Set to `!privacySupport` or `false`.
+
+, crashreporterSupport ? !privacySupport && !stdenv.hostPlatform.isRiscV && !stdenv.hostPlatform.isMusl, curl
+, geolocationSupport ? !privacySupport
+, googleAPISupport ? geolocationSupport
+, mlsAPISupport ? geolocationSupport
+, webrtcSupport ? !privacySupport && !stdenv.hostPlatform.isRiscV
+
+# digital rights managemewnt
+
+# This flag controls whether Firefox will show the nagbar, that allows
+# users at runtime the choice to enable Widevine CDM support when a site
+# requests it.
+# Controlling the nagbar and widevine CDM at runtime is possible by setting
+# `browser.eme.ui.enabled` and `media.gmp-widevinecdm.enabled` accordingly
+, drmSupport ? true
+
+# As stated by Sylvestre Ledru (@sylvestre) on Nov 22, 2017 at
+# https://github.com/NixOS/nixpkgs/issues/31843#issuecomment-346372756 we
+# have permission to use the official firefox branding.
+#
+# For purposes of documentation the statement of @sylvestre:
+# > As the person who did part of the work described in the LWN article
+# > and release manager working for Mozilla, I can confirm the statement
+# > that I made in
+# > https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=815006
+# >
+# > @garbas shared with me the list of patches applied for the Nix package.
+# > As they are just for portability and tiny modifications, they don't
+# > alter the experience of the product. In parallel, Rok also shared the
+# > build options. They seem good (even if I cannot judge the quality of the
+# > packaging of the underlying dependencies like sqlite, png, etc).
+# > Therefor, as long as you keep the patch queue sane and you don't alter
+# > the experience of Firefox users, you won't have any issues using the
+# > official branding.
+, enableOfficialBranding ? true
+}:
+
+assert stdenv.cc.libc or null != null;
+assert pipewireSupport -> !waylandSupport || !webrtcSupport -> throw "${pname}: pipewireSupport requires both wayland and webrtc support.";
+
+let
+  inherit (lib) enableFeature;
+
+  # Target the LLVM version that rustc is built with for LTO.
+  llvmPackages0 = rustc.llvmPackages;
+  llvmPackagesBuildBuild0 = pkgsBuildBuild.rustc.llvmPackages;
+
+  # Force the use of lld and other llvm tools for LTO
+  llvmPackages = llvmPackages0.override {
+    bootBintoolsNoLibc = null;
+    bootBintools = null;
+  };
+  llvmPackagesBuildBuild = llvmPackagesBuildBuild0.override {
+    bootBintoolsNoLibc = null;
+    bootBintools = null;
+  };
+
+  # LTO requires LLVM bintools including ld.lld and llvm-ar.
+  buildStdenv = overrideCC llvmPackages.stdenv (llvmPackages.stdenv.cc.override {
+    bintools = if ltoSupport then buildPackages.rustc.llvmPackages.bintools else stdenv.cc.bintools;
+  });
+
+  # Compile the wasm32 sysroot to build the RLBox Sandbox
+  # https://hacks.mozilla.org/2021/12/webassembly-and-back-again-fine-grained-sandboxing-in-firefox-95/
+  # We only link c++ libs here, our compiler wrapper can find wasi libc and crt itself.
+  wasiSysRoot = runCommand "wasi-sysroot" {} ''
+    mkdir -p $out/lib/wasm32-wasi
+    for lib in ${pkgsCross.wasi32.llvmPackages.libcxx}/lib/* ${pkgsCross.wasi32.llvmPackages.libcxxabi}/lib/*; do
+      ln -s $lib $out/lib/wasm32-wasi
+    done
+  '';
+
+  distributionIni = pkgs.writeText "distribution.ini" (lib.generators.toINI {} {
+    # Some light branding indicating this build uses our distro preferences
+    Global = {
+      id = "nixos";
+      version = "1.0";
+      about = "${applicationName} for NixOS";
+    };
+    Preferences = {
+      # These values are exposed through telemetry
+      "app.distributor" = "nixos";
+      "app.distributor.channel" = "nixpkgs";
+    };
+  });
+
+  defaultPrefs = {
+    "geo.provider.network.url" = {
+      value = "https://location.services.mozilla.com/v1/geolocate?key=%MOZILLA_API_KEY%";
+      reason = "Use MLS by default for geolocation, since our Google API Keys are not working";
+    };
+  };
+
+  defaultPrefsFile = pkgs.writeText "nixos-default-prefs.js" (lib.concatStringsSep "\n" (lib.mapAttrsToList (key: value: ''
+    // ${value.reason}
+    pref("${key}", ${builtins.toJSON value.value});
+  '') defaultPrefs));
+
+in
+
+buildStdenv.mkDerivation {
+  pname = "${pname}-unwrapped";
+  inherit version;
+
+  inherit src unpackPhase meta;
+
+  outputs = [
+    "out"
+  ]
+  ++ lib.optionals crashreporterSupport [ "symbols" ];
+
+  # Add another configure-build-profiling run before the final configure phase if we build with pgo
+  preConfigurePhases = lib.optionals pgoSupport [
+    "configurePhase"
+    "buildPhase"
+    "profilingPhase"
+  ];
+
+  patches = lib.optionals (lib.versionAtLeast version "112.0" && lib.versionOlder version "113.0") [
+    (fetchpatch {
+      # Crash when desktop scaling does not divide window scale on Wayland
+      # https://bugzilla.mozilla.org/show_bug.cgi?id=1803016
+      name = "mozbz1803016.patch";
+      url = "https://hg.mozilla.org/mozilla-central/raw-rev/1068e0955cfb";
+      hash = "sha256-iPqmofsmgvlFNm+mqVPbdgMKmP68ANuzYu+PzfCpoNA=";
+    })
+  ] ++ lib.optionals (lib.versionOlder version "114.0") [
+    # https://bugzilla.mozilla.org/show_bug.cgi?id=1830040
+    # https://hg.mozilla.org/mozilla-central/rev/cddb250a28d8
+    (fetchpatch {
+      url = "https://git.alpinelinux.org/aports/plain/community/firefox/avoid-redefinition.patch?id=2f620d205ed0f9072bbd7714b5ec1b7bf6911c12";
+      hash = "sha256-fLUYaJwhrC/wF24HkuWn2PHqz7LlAaIZ1HYjRDB2w9A=";
+    })
+  ]
+  ++ lib.optionals (lib.versionOlder version "102.13") [
+    # cherry-pick bindgen change to fix build with clang 16
+    (fetchpatch {
+      url = "https://git.alpinelinux.org/aports/plain/community/firefox-esr/bindgen.patch?id=4c4b0c01c808657fffc5b796c56108c57301b28f";
+      hash = "sha256-lTvgT358M4M2vedZ+A6xSKsBYhSN+McdmEeR9t75MLU=";
+    })
+    # cherry-pick mp4parse change fixing build with Rust 1.70+
+    # original change: https://github.com/mozilla/mp4parse-rust/commit/8b5b652d38e007e736bb442ccd5aa5ed699db100
+    # vendored to update checksums
+    ./mp4parse-rust-170.patch
+  ]
+  ++ lib.optional (lib.versionOlder version "111") ./env_var_for_system_dir-ff86.patch
+  ++ lib.optional (lib.versionAtLeast version "111") ./env_var_for_system_dir-ff111.patch
+  ++ lib.optional (lib.versionAtLeast version "96") ./no-buildconfig-ffx96.patch
+  ++ extraPatches;
+
+  postPatch = ''
+    rm -rf obj-x86_64-pc-linux-gnu
+    patchShebangs mach build
+  ''
+  + extraPostPatch;
+
+  # Ignore trivial whitespace changes in patches, this fixes compatibility of
+  # ./env_var_for_system_dir.patch with Firefox >=65 without having to track
+  # two patches.
+  patchFlags = [ "-p1" "-l" ];
+
+  # if not explicitly set, wrong cc from buildStdenv would be used
+  HOST_CC = "${llvmPackagesBuildBuild.stdenv.cc}/bin/cc";
+  HOST_CXX = "${llvmPackagesBuildBuild.stdenv.cc}/bin/c++";
+
+  nativeBuildInputs = [
+    autoconf
+    cargo
+    gnum4
+    llvmPackagesBuildBuild.bintools
+    makeWrapper
+    nodejs
+    perl
+    pkg-config
+    python3
+    rust-cbindgen
+    rustPlatform.bindgenHook
+    rustc
+    unzip
+    which
+    wrapGAppsHook
+  ]
+  ++ lib.optionals crashreporterSupport [ dump_syms patchelf ]
+  ++ lib.optionals pgoSupport [ xvfb-run ]
+  ++ extraNativeBuildInputs;
+
+  setOutputFlags = false; # `./mach configure` doesn't understand `--*dir=` flags.
+
+  preConfigure = ''
+    # remove distributed configuration files
+    rm -f configure js/src/configure .mozconfig*
+
+    # Runs autoconf through ./mach configure in configurePhase
+    configureScript="$(realpath ./mach) configure"
+
+    # Set predictable directories for build and state
+    export MOZ_OBJDIR=$(pwd)/mozobj
+    export MOZBUILD_STATE_PATH=$(pwd)/mozbuild
+
+    # Don't try to send libnotify notifications during build
+    export MOZ_NOSPAM=1
+
+    # Set consistent remoting name to ensure wmclass matches with desktop file
+    export MOZ_APP_REMOTINGNAME="${binaryName}"
+
+    # AS=as in the environment causes build failure
+    # https://bugzilla.mozilla.org/show_bug.cgi?id=1497286
+    unset AS
+
+    # Use our own python
+    export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=system
+
+    # RBox WASM Sandboxing
+    export WASM_CC=${pkgsCross.wasi32.stdenv.cc}/bin/${pkgsCross.wasi32.stdenv.cc.targetPrefix}cc
+    export WASM_CXX=${pkgsCross.wasi32.stdenv.cc}/bin/${pkgsCross.wasi32.stdenv.cc.targetPrefix}c++
+  '' + lib.optionalString pgoSupport ''
+    if [ -e "$TMPDIR/merged.profdata" ]; then
+      echo "Configuring with profiling data"
+      for i in "''${!configureFlagsArray[@]}"; do
+        if [[ ''${configureFlagsArray[i]} = "--enable-profile-generate=cross" ]]; then
+          unset 'configureFlagsArray[i]'
+        fi
+      done
+      configureFlagsArray+=(
+        "--enable-profile-use=cross"
+        "--with-pgo-profile-path="$TMPDIR/merged.profdata""
+        "--with-pgo-jarlog="$TMPDIR/jarlog""
+      )
+      ${lib.optionalString stdenv.hostPlatform.isMusl ''
+        LDFLAGS="$OLD_LDFLAGS"
+        unset OLD_LDFLAGS
+      ''}
+    else
+      echo "Configuring to generate profiling data"
+      configureFlagsArray+=(
+        "--enable-profile-generate=cross"
+      )
+      ${lib.optionalString stdenv.hostPlatform.isMusl
+      # Set the rpath appropriately for the profiling run
+      # During the profiling run, loading libraries from $out would fail,
+      # since the profiling build has not been installed to $out
+      ''
+        OLD_LDFLAGS="$LDFLAGS"
+        LDFLAGS="-Wl,-rpath,$(pwd)/mozobj/dist/${binaryName}"
+      ''}
+    fi
+  '' + lib.optionalString googleAPISupport ''
+    # Google API key used by Chromium and Firefox.
+    # Note: These are for NixOS/nixpkgs use ONLY. For your own distribution,
+    # please get your own set of keys at https://www.chromium.org/developers/how-tos/api-keys/.
+    echo "AIzaSyDGi15Zwl11UNe6Y-5XW_upsfyw31qwZPI" > $TMPDIR/google-api-key
+    # 60.5+ & 66+ did split the google API key arguments: https://bugzilla.mozilla.org/show_bug.cgi?id=1531176
+    configureFlagsArray+=("--with-google-location-service-api-keyfile=$TMPDIR/google-api-key")
+    configureFlagsArray+=("--with-google-safebrowsing-api-keyfile=$TMPDIR/google-api-key")
+  '' + lib.optionalString mlsAPISupport ''
+    # Mozilla Location services API key
+    # Note: These are for NixOS/nixpkgs use ONLY. For your own distribution,
+    # please get your own set of keys at https://location.services.mozilla.com/api.
+    echo "dfd7836c-d458-4917-98bb-421c82d3c8a0" > $TMPDIR/mls-api-key
+    configureFlagsArray+=("--with-mozilla-api-keyfile=$TMPDIR/mls-api-key")
+  '' + lib.optionalString (enableOfficialBranding && !stdenv.is32bit) ''
+    export MOZILLA_OFFICIAL=1
+  '' + lib.optionalString stdenv.hostPlatform.isMusl ''
+    # linking firefox hits the vm.max_map_count kernel limit with the default musl allocator
+    # TODO: Default vm.max_map_count has been increased, retest without this
+    export LD_PRELOAD=${mimalloc}/lib/libmimalloc.so
+  '';
+
+  # firefox has a different definition of configurePlatforms from nixpkgs, see configureFlags
+  configurePlatforms = [ ];
+
+  configureFlags = [
+    "--disable-tests"
+    "--disable-updater"
+    "--enable-application=${application}"
+    "--enable-default-toolkit=cairo-gtk3${lib.optionalString waylandSupport "-wayland"}"
+    "--enable-system-pixman"
+    "--with-distribution-id=org.nixos"
+    "--with-libclang-path=${llvmPackagesBuildBuild.libclang.lib}/lib"
+    "--with-system-ffi"
+    "--with-system-icu"
+    "--with-system-jpeg"
+    "--with-system-libevent"
+    "--with-system-libvpx"
+    "--with-system-nspr"
+    "--with-system-nss"
+    "--with-system-png" # needs APNG support
+    "--with-system-webp"
+    "--with-system-zlib"
+    "--with-wasi-sysroot=${wasiSysRoot}"
+    # for firefox, host is buildPlatform, target is hostPlatform
+    "--host=${buildStdenv.buildPlatform.config}"
+    "--target=${buildStdenv.hostPlatform.config}"
+  ]
+  # LTO is done using clang and lld on Linux.
+  ++ lib.optionals ltoSupport [
+     "--enable-lto=cross" # Cross-Language LTO
+     "--enable-linker=lld"
+  ]
+  # elf-hack is broken when using clang+lld:
+  # https://bugzilla.mozilla.org/show_bug.cgi?id=1482204
+  ++ lib.optional (ltoSupport && (buildStdenv.isAarch32 || buildStdenv.isi686 || buildStdenv.isx86_64)) "--disable-elf-hack"
+  ++ lib.optional (!drmSupport) "--disable-eme"
+  ++ [
+    (enableFeature alsaSupport "alsa")
+    (enableFeature crashreporterSupport "crashreporter")
+    (enableFeature ffmpegSupport "ffmpeg")
+    (enableFeature geolocationSupport "necko-wifi")
+    (enableFeature gssSupport "negotiateauth")
+    (enableFeature jackSupport "jack")
+    (enableFeature jemallocSupport "jemalloc")
+    (enableFeature pulseaudioSupport "pulseaudio")
+    (enableFeature sndioSupport "sndio")
+    (enableFeature webrtcSupport "webrtc")
+    (enableFeature debugBuild "debug")
+    (if debugBuild then "--enable-profiling" else "--enable-optimize")
+    # --enable-release adds -ffunction-sections & LTO that require a big amount
+    # of RAM, and the 32-bit memory space cannot handle that linking
+    (enableFeature (!debugBuild && !stdenv.is32bit) "release")
+    (enableFeature enableDebugSymbols "debug-symbols")
+  ]
+  ++ lib.optionals enableDebugSymbols [ "--disable-strip" "--disable-install-strip" ]
+  ++ lib.optional enableOfficialBranding "--enable-official-branding"
+  ++ lib.optional (branding != null) "--with-branding=${branding}"
+  ++ extraConfigureFlags;
+
+  buildInputs = [
+    bzip2
+    dbus
+    dbus-glib
+    file
+    fontconfig
+    freetype
+    glib
+    gtk3
+    libffi
+    libGL
+    libGLU
+    libevent
+    libjpeg
+    libpng
+    libstartup_notification
+    libvpx
+    libwebp
+    nasm
+    nspr
+    pango
+    perl
+    xorg.libX11
+    xorg.libXcursor
+    xorg.libXdamage
+    xorg.libXext
+    xorg.libXft
+    xorg.libXi
+    xorg.libXrender
+    xorg.libXt
+    xorg.libXtst
+    xorg.pixman
+    xorg.xorgproto
+    zip
+    zlib
+  ]
+  # icu73 changed how it follows symlinks which breaks in the firefox sandbox
+  # https://bugzilla.mozilla.org/show_bug.cgi?id=1839287
+  ++ [ (if (lib.versionAtLeast version "115") then icu else icu72) ]
+  ++ [ (if (lib.versionAtLeast version "116") then nss_latest else nss_esr/*3.90*/) ]
+  ++ lib.optional  alsaSupport alsa-lib
+  ++ lib.optional  jackSupport libjack2
+  ++ lib.optional  pulseaudioSupport libpulseaudio # only headers are needed
+  ++ lib.optional  sndioSupport sndio
+  ++ lib.optional  gssSupport libkrb5
+  ++ lib.optionals waylandSupport [ libxkbcommon libdrm ]
+  ++ lib.optional  jemallocSupport jemalloc
+  ++ extraBuildInputs;
+
+  profilingPhase = lib.optionalString pgoSupport ''
+    # Package up Firefox for profiling
+    ./mach package
+
+    # Run profiling
+    (
+      export HOME=$TMPDIR
+      export LLVM_PROFDATA=llvm-profdata
+      export JARLOG_FILE="$TMPDIR/jarlog"
+
+      xvfb-run -w 10 -s "-screen 0 1920x1080x24" \
+        ./mach python ./build/pgo/profileserver.py
+    )
+
+    # Copy profiling data to a place we can easily reference
+    cp ./merged.profdata $TMPDIR/merged.profdata
+
+    # Clean build dir
+    ./mach clobber
+  '';
+
+  preBuild = ''
+    cd mozobj
+  '';
+
+  postBuild = ''
+    cd ..
+  '';
+
+  makeFlags = extraMakeFlags;
+  separateDebugInfo = enableDebugSymbols;
+  enableParallelBuilding = true;
+  env = lib.optionalAttrs stdenv.hostPlatform.isMusl {
+    # Firefox relies on nonstandard behavior of the glibc dynamic linker. It re-uses
+    # previously loaded libraries even though they are not in the rpath of the newly loaded binary.
+    # On musl we have to explicity set the rpath to include these libraries.
+    LDFLAGS = "-Wl,-rpath,${placeholder "out"}/lib/${binaryName}";
+  };
+
+  # tests were disabled in configureFlags
+  doCheck = false;
+
+  # Generate build symbols once after the final build
+  # https://firefox-source-docs.mozilla.org/crash-reporting/uploading_symbol.html
+  preInstall = lib.optionalString crashreporterSupport ''
+    ./mach buildsymbols
+    mkdir -p $symbols/
+    cp mozobj/dist/*.crashreporter-symbols.zip $symbols/
+  '' + ''
+    cd mozobj
+  '';
+
+  postInstall = ''
+    # Install distribution customizations
+    install -Dvm644 ${distributionIni} $out/lib/${binaryName}/distribution/distribution.ini
+    install -Dvm644 ${defaultPrefsFile} $out/lib/${binaryName}/browser/defaults/preferences/nixos-default-prefs.js
+
+  '' + lib.optionalString buildStdenv.isLinux ''
+    # Remove SDK cruft. FIXME: move to a separate output?
+    rm -rf $out/share/idl $out/include $out/lib/${binaryName}-devel-*
+
+    # Needed to find Mozilla runtime
+    gappsWrapperArgs+=(--argv0 "$out/bin/.${binaryName}-wrapped")
+  '';
+
+  postFixup = lib.optionalString crashreporterSupport ''
+    patchelf --add-rpath "${lib.makeLibraryPath [ curl ]}" $out/lib/${binaryName}/crashreporter
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    # Some basic testing
+    "$out/bin/${binaryName}" --version
+  '';
+
+  passthru = {
+    inherit application extraPatches;
+    inherit updateScript;
+    inherit version;
+    inherit alsaSupport;
+    inherit binaryName;
+    inherit jackSupport;
+    inherit pipewireSupport;
+    inherit sndioSupport;
+    inherit nspr;
+    inherit ffmpegSupport;
+    inherit gssSupport;
+    inherit tests;
+    inherit gtk3;
+    inherit wasiSysRoot;
+  } // extraPassthru;
+
+  hardeningDisable = [ "format" ]; # -Werror=format-security
+
+  # the build system verifies checksums of the bundled rust sources
+  # ./third_party/rust is be patched by our libtool fixup code in stdenv
+  # unfortunately we can't just set this to `false` when we do not want it.
+  # See https://github.com/NixOS/nixpkgs/issues/77289 for more details
+  # Ideally we would figure out how to tell the build system to not
+  # care about changed hashes as we are already doing that when we
+  # fetch the sources. Any further modifications of the source tree
+  # is on purpose by some of our tool (or by accident and a bug?).
+  dontFixLibtool = true;
+
+  # on aarch64 this is also required
+  dontUpdateAutotoolsGnuConfigScripts = true;
+
+  requiredSystemFeatures = [ "big-parallel" ];
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/firefox/env_var_for_system_dir-ff111.patch b/nixpkgs/pkgs/applications/networking/browsers/firefox/env_var_for_system_dir-ff111.patch
new file mode 100644
index 000000000000..71f5272a18e5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/firefox/env_var_for_system_dir-ff111.patch
@@ -0,0 +1,22 @@
+diff --git a/toolkit/xre/nsXREDirProvider.cpp b/toolkit/xre/nsXREDirProvider.cpp
+index 6db876975187..5882c5d7f1d6 100644
+--- a/toolkit/xre/nsXREDirProvider.cpp
++++ b/toolkit/xre/nsXREDirProvider.cpp
+@@ -11,6 +11,7 @@
+ 
+ #include "jsapi.h"
+ #include "xpcpublic.h"
++#include "prenv.h"
+ #include "prprf.h"
+ 
+ #include "nsIAppStartup.h"
+@@ -309,7 +310,8 @@ static nsresult GetSystemParentDirectory(nsIFile** aFile) {
+       "/usr/lib/mozilla"_ns
+ #    endif
+       ;
+-  rv = NS_NewNativeLocalFile(dirname, false, getter_AddRefs(localDir));
++  const char* pathVar = PR_GetEnv("MOZ_SYSTEM_DIR");
++  rv = NS_NewNativeLocalFile((pathVar && *pathVar) ? nsDependentCString(pathVar) : reinterpret_cast<const nsCString&>(dirname), false, getter_AddRefs(localDir));
+ #  endif
+ 
+   if (NS_SUCCEEDED(rv)) {
diff --git a/nixpkgs/pkgs/applications/networking/browsers/firefox/env_var_for_system_dir-ff86.patch b/nixpkgs/pkgs/applications/networking/browsers/firefox/env_var_for_system_dir-ff86.patch
new file mode 100644
index 000000000000..f7a9cb773455
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/firefox/env_var_for_system_dir-ff86.patch
@@ -0,0 +1,21 @@
+diff -r 22fc47c968f2 toolkit/xre/nsXREDirProvider.cpp
+--- a/toolkit/xre/nsXREDirProvider.cpp	Mon Dec 14 15:09:17 2020 +0000
++++ b/toolkit/xre/nsXREDirProvider.cpp	Tue Feb 23 23:38:56 2021 +0100
+@@ -11,6 +11,7 @@
+ 
+ #include "jsapi.h"
+ #include "xpcpublic.h"
++#include "prenv.h"
+ 
+ #include "nsIAppStartup.h"
+ #include "nsIFile.h"
+@@ -305,7 +306,8 @@
+       "/usr/lib/mozilla"_ns
+ #    endif
+       ;
+-  rv = NS_NewNativeLocalFile(dirname, false, getter_AddRefs(localDir));
++  const char* pathVar = PR_GetEnv("MOZ_SYSTEM_DIR");
++  rv = NS_NewNativeLocalFile((pathVar && *pathVar) ? nsDependentCString(pathVar) : reinterpret_cast<const nsCString&>(dirname), false, getter_AddRefs(localDir));
+ #  endif
+ 
+   if (NS_SUCCEEDED(rv)) {
diff --git a/nixpkgs/pkgs/applications/networking/browsers/firefox/mobile-config.nix b/nixpkgs/pkgs/applications/networking/browsers/firefox/mobile-config.nix
new file mode 100644
index 000000000000..6e43295697ea
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/firefox/mobile-config.nix
@@ -0,0 +1,113 @@
+{ stdenv, lib, runCommand, fetchFromGitLab, wrapFirefox, firefox-unwrapped }:
+
+let
+  pkg = fetchFromGitLab {
+    owner = "postmarketOS";
+    repo = "mobile-config-firefox";
+    rev = "ff2f07873f4ebc6e220da0e9b9f04c69f451edda";
+    sha256 = "sha256-8wRz8corz00+0qROMiOmZAddM4tjfmE91bx0+P8JNx4=";
+  };
+  userChrome = runCommand "userChrome.css" {} ''
+    cat ${pkg}/src/userChrome/*.css > $out
+  '';
+  userContent = runCommand "userContent.css" {} ''
+    cat ${pkg}/src/userContent/*.css > $out
+  '';
+in wrapFirefox firefox-unwrapped {
+  # extraPolicies = (lib.importJSON "${pkg}/src/policies.json").policies;
+  extraPoliciesFiles = [ "${pkg}/src/policies.json" ];
+  extraPrefs = ''
+    // Copyright 2022 Arnaud Ferraris, Oliver Smith
+    // SPDX-License-Identifier: MPL-2.0
+
+    // This is a Firefox autoconfig file:
+    // https://support.mozilla.org/en-US/kb/customizing-firefox-using-autoconfig
+
+    // Import custom userChrome.css on startup or new profile creation
+    const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
+    Cu.import("resource://gre/modules/Services.jsm");
+    Cu.import("resource://gre/modules/FileUtils.jsm");
+
+    var updated = false;
+
+    // Create <profile>/chrome/ directory if not already present
+    var chromeDir = Services.dirsvc.get("ProfD", Ci.nsIFile);
+    chromeDir.append("chrome");
+    if (!chromeDir.exists()) {
+        chromeDir.create(Ci.nsIFile.DIRECTORY_TYPE, FileUtils.PERMS_DIRECTORY);
+    }
+
+    // Create nsIFile objects for userChrome.css in <profile>/chrome/ and in /etc/
+    var chromeFile = chromeDir.clone();
+    chromeFile.append("userChrome.css");
+    var defaultChrome = new FileUtils.File("${userChrome}");
+
+    // No auto-upgrade. Should this be replaced with symlinking?
+    // // Remove the existing userChrome.css if older than the installed one
+    // if (chromeFile.exists() && defaultChrome.exists() &&
+    //   chromeFile.lastModifiedTime < defaultChrome.lastModifiedTime) {
+    //   chromeFile.remove(false);
+    // }
+
+    // Copy userChrome.css to <profile>/chrome/
+    if (!chromeFile.exists()) {
+      defaultChrome.copyTo(chromeDir, "userChrome.css");
+      updated = true;
+    }
+
+    // Create nsIFile objects for userContent.css in <profile>/chrome/ and in /etc/
+    var contentFile = chromeDir.clone();
+    contentFile.append("userContent.css");
+    var defaultContent = new FileUtils.File("${userContent}");
+
+    // No auto-upgrade. Should this be replaced with symlinking?
+    // // Remove the existing userContent.css if older than the installed one
+    // if (contentFile.exists() && defaultContent.exists() &&
+    //   contentFile.lastModifiedTime < defaultContent.lastModifiedTime) {
+    //   contentFile.remove(false);
+    // }
+
+    // Copy userContent.css to <profile>/chrome/
+    if (!contentFile.exists()) {
+      defaultContent.copyTo(chromeDir, "userContent.css");
+      updated = true;
+    }
+
+    // Restart Firefox immediately if one of the files got updated
+    if (updated === true) {
+        var appStartup = Cc["@mozilla.org/toolkit/app-startup;1"].getService(Ci.nsIAppStartup);
+        appStartup.quit(Ci.nsIAppStartup.eForceQuit | Ci.nsIAppStartup.eRestart);
+    }
+
+    defaultPref('general.useragent.override', 'Mozilla/5.0 (Android 11; Mobile; rv:96.0) Gecko/96.0 Firefox/96.0');
+    defaultPref('browser.urlbar.suggest.topsites', false);
+    defaultPref('browser.urlbar.suggest.engines', false);
+    defaultPref('browser.newtabpage.enabled', true);
+
+    // Enable android-style pinch-to-zoom
+    pref('dom.w3c.touch_events.enabled', true);
+    pref('apz.allow_zooming', true);
+    pref('apz.allow_double_tap_zooming', true);
+
+    // Save vertical space by hiding the titlebar
+    pref('browser.tabs.inTitlebar', 1);
+
+    // Disable search suggestions
+    pref('browser.search.suggest.enabled', false);
+
+    // Empty new tab page: faster, less distractions
+    pref('browser.newtabpage.enabled', false);
+
+    // Allow UI customizations with userChrome.css and userContent.css
+    pref('toolkit.legacyUserProfileCustomizations.stylesheets', true);
+
+    // Select the entire URL with one click
+    pref('browser.urlbar.clickSelectsAll', true);
+
+    // Disable cosmetic animations, save CPU
+    pref('toolkit.cosmeticAnimations.enabled', false);
+
+    // Disable download animations, save CPU
+    pref('browser.download.animateNotifications', false);
+  '';
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/firefox/mp4parse-rust-170.patch b/nixpkgs/pkgs/applications/networking/browsers/firefox/mp4parse-rust-170.patch
new file mode 100644
index 000000000000..9786c85df0cc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/firefox/mp4parse-rust-170.patch
@@ -0,0 +1,23 @@
+--- a/third_party/rust/mp4parse/.cargo-checksum.json
++++ b/third_party/rust/mp4parse/.cargo-checksum.json
+@@ -1 +1 @@
+-{"files":{"Cargo.toml":"f283fc1597f492cd1e03cd08b9c77f042ae4494fc96b4dcb566ec0abbda65efc","LICENSE":"fab3dd6bdab226f1c08630b1dd917e11fcb4ec5e1e020e2c16f83a0a13863e85","README.md":"86cb40854b93f988e3a63ce6fe39d2ce95367f8ca301a5ba50676ff98a0ad791","benches/avif_benchmark.rs":"cd99c0dde025ab40d2cd860f53dc697a1587a48c164c3e5c8adfd40add29d772","link-u-avif-sample-images/.github/workflows/encode-and-decode-daily.yml":"84b787f721024a100ce09ac5714a1d78a4811893861e89495313f435b9d02359","link-u-avif-sample-images/.gitignore":"ac16d40779ab2d608843a3cb1b0418a1ffdc0e71a06c4d140386fadf007a54a7","link-u-avif-sample-images/LICENSE.txt":"da89f9867822be4b8adb1e601d9e9226c195016c6508015eb7593e68ead0c98a","link-u-avif-sample-images/Makefile":"b5697e8685d2a9ce0f4b4c976a5f707022ed113782d16dc59ae280d3a8ce77b1","link-u-avif-sample-images/README.md":"d249fb7bef4f21359cfc4f2977e1b2f2c6e6dd6e57cb1cdc1da1f0edd8aa55d0","link-u-avif-sample-images/fox.jpg":"927997a90ae88ead007283bf9c1392159d0acd2e9890522146211fda2112a2d9","link-u-avif-sample-images/fox.odd-height.png":"6136247772bd1c0edd50426bca4f3485473ac25a784e5ec8777f7491598e96db","link-u-avif-sample-images/fox.odd-width.odd-height.png":"6f91dc21c137f318d0443ce28bbf3f74d5502180c254327b46e41040a33f1363","link-u-avif-sample-images/fox.odd-width.png":"a8b2328c8700c16280c5ab40a34147edac598d4d48ca101bef649e468ae1492e","link-u-avif-sample-images/fox.png":"c45bfb5780843c70a37426340020e3e7ff41d7cf1df9fec614a5cf429d078573","link-u-avif-sample-images/fox.profile0.10bpc.yuv420.avif":"811af5e96631309030a14cbc30c3bacfaa667f2e36e16a4f30434b8f5a23310c","link-u-avif-sample-images/fox.profile0.10bpc.yuv420.monochrome.avif":"e35713343e9ee04c51ab9cfdc99a0c7d126a1917cb83f5b9a23c71ed59269be2","link-u-avif-sample-images/fox.profile0.10bpc.yuv420.monochrome.odd-height.avif":"485623f7838d8f442c47348c6492765e6aafbc3d5ccd8e90efc9c812ff15e265","link-u-avif-sample-images/fox.profile0.10bpc.yuv420.monochrome.odd-width.avif":"8e75b9a8975267359d827e4cbc6877b1674aa31b87f88f222dde03263f9254df","link-u-avif-sample-images/fox.profile0.10bpc.yuv420.monochrome.odd-width.odd-height.avif":"1fff5915a332d6aaa85d668f3f338bda6fad9c6ec1f380f2c46737d536cea5de","link-u-avif-sample-images/fox.profile0.10bpc.yuv420.odd-height.avif":"cca9785f14c74d865453518c0962dabd6d1b92d2c6c5f5ac67efdbf5606acb83","link-u-avif-sample-images/fox.profile0.10bpc.yuv420.odd-width.avif":"de3399d8b56431f0ed34e2f14200f31dd54544fddbb12f39b4d55449d5660c56","link-u-avif-sample-images/fox.profile0.10bpc.yuv420.odd-width.odd-height.avif":"07507744cb76b74a3586b93fc3b273a98f998d75f7687db3e9cb3725d7b1fb9d","link-u-avif-sample-images/fox.profile0.8bpc.yuv420.avif":"cb884c82ac7b6d4fa03b1f687e9e20abc346107095473e9c1d422aaf0de14eaf","link-u-avif-sample-images/fox.profile0.8bpc.yuv420.monochrome.avif":"15d84077066c47fdbe2a7b8ed583a17017d09a033144ac1b31486d6c8f6f5c82","link-u-avif-sample-images/fox.profile0.8bpc.yuv420.monochrome.odd-height.avif":"365439d2ee2fe5229e066362c03a73a182c7f6626772ecf5345b22752d32e681","link-u-avif-sample-images/fox.profile0.8bpc.yuv420.monochrome.odd-width.avif":"c623b9943123d6c47d3300444f7255cbdfebfe2b47a670287f2baeb717fac42b","link-u-avif-sample-images/fox.profile0.8bpc.yuv420.monochrome.odd-width.odd-height.avif":"dd069f3c3c4f7589f5f7ef1d7b6a91b8cb975d32663a4a92b6d75219edd72954","link-u-avif-sample-images/fox.profile0.8bpc.yuv420.odd-height.avif":"75628450288ace3386651725411c8f0ffff7eb95f82c5307b0faa3350f09f50e","link-u-avif-sample-images/fox.profile0.8bpc.yuv420.odd-width.avif":"f91b6f455412adabc5094011362eaaa1f6a9d5740de0b8a1be42a96c16e7617f","link-u-avif-sample-images/fox.profile0.8bpc.yuv420.odd-width.odd-height.avif":"bb8695cacacaf8f2e13a739de75e5e8a9d970d68c3acdfb7d82171a9bac2f01e","link-u-avif-sample-images/fox.profile1.10bpc.yuv444.avif":"a10de8204aee73ba1786daca6390546bd7aa6b069aaa644012219a1c11246a43","link-u-avif-sample-images/fox.profile1.10bpc.yuv444.odd-height.avif":"734a5badc59a8bed19e8eb476911048ddb011ca7c9eac31b7a7ed20e0135ac2c","link-u-avif-sample-images/fox.profile1.10bpc.yuv444.odd-width.avif":"68d15d76d95f268e810dfd87bbf96d8c3197580afce2d30b50bb1f07865077f3","link-u-avif-sample-images/fox.profile1.10bpc.yuv444.odd-width.odd-height.avif":"01e469b33bacb7e07e15e23b2997907bbcf02d8fcc99885a027494d31c45547c","link-u-avif-sample-images/fox.profile1.8bpc.yuv444.avif":"a0cdc981a6b056c8af2d177a1438c332d630040dacbfd1c89bb5e3e381ba5822","link-u-avif-sample-images/fox.profile1.8bpc.yuv444.odd-height.avif":"77e0510def73213c00ebcf051cf45fa63cf27d7c69340cc145ab6d44ec77bb07","link-u-avif-sample-images/fox.profile1.8bpc.yuv444.odd-width.avif":"12787042364bd13be01830f988cb714220bde340a3329baa808df27a269b83f8","link-u-avif-sample-images/fox.profile1.8bpc.yuv444.odd-width.odd-height.avif":"fad3b6dd9cb99e6925858f69aafae3f68c861845f2c3d4a6d1c51c6161490134","link-u-avif-sample-images/fox.profile2.10bpc.yuv422.avif":"e34f3bab5df802be2d422c685824464eb5f7e182b235ca99bde11c4c34ff3ac2","link-u-avif-sample-images/fox.profile2.10bpc.yuv422.monochrome.avif":"05804752621e2fd7a9d85b01e2995a50e3efd30693efd934152560622d66e841","link-u-avif-sample-images/fox.profile2.10bpc.yuv422.monochrome.odd-height.avif":"ef041f2efa0424d3a6dcfc5f0c3f619aea0e197aaeb5a050a2d877a457513921","link-u-avif-sample-images/fox.profile2.10bpc.yuv422.monochrome.odd-width.avif":"b711b321b8a4d3a41e08f80a17c2203b839458cb6346aff6fff3f8d7699032e6","link-u-avif-sample-images/fox.profile2.10bpc.yuv422.monochrome.odd-width.odd-height.avif":"e3f40aad0ddd6c04ffacf4a754a0525986c89d519119d37655282551e3ea3a59","link-u-avif-sample-images/fox.profile2.10bpc.yuv422.odd-height.avif":"4ef74c37712b41d6e5269d939f9d52031bc10746f7c8c029db618c5935aff9a6","link-u-avif-sample-images/fox.profile2.10bpc.yuv422.odd-width.avif":"4cf6c849f4a48a639217ad9a1e0d027f4fc804d524c03e6707ec9714a252532f","link-u-avif-sample-images/fox.profile2.10bpc.yuv422.odd-width.odd-height.avif":"3d3978e8e8d07270f82a877d3535f9483b88fce93a1c4accb658b494452b1d36","link-u-avif-sample-images/fox.profile2.12bpc.yuv420.avif":"626d73272e59722084c528b27b72a0920bec462a10749b3e87036e42bf8a24e5","link-u-avif-sample-images/fox.profile2.12bpc.yuv420.monochrome.avif":"caf50c467242b3fa0b895a2af131fa0d03dd7b34989f2b1a51d25b2246c98fab","link-u-avif-sample-images/fox.profile2.12bpc.yuv420.monochrome.odd-height.avif":"1e88b92df592c02af53ff5258fa898ac8fe1d71954e9a440500ef7879b8a1c46","link-u-avif-sample-images/fox.profile2.12bpc.yuv420.monochrome.odd-width.avif":"466efdd269f3be3b1c88afc093c839e50ba5eaf6bd0c2425e157000d02a3c21a","link-u-avif-sample-images/fox.profile2.12bpc.yuv420.monochrome.odd-width.odd-height.avif":"36014509d0688cb307e0ffcdb5b4c16ff6e6c79772c7fbbeea33b4d483a1566f","link-u-avif-sample-images/fox.profile2.12bpc.yuv420.odd-height.avif":"d1786723a5d6ea1e1764b0045dc3f669fe3905ffc2913011a2b1b424d2393397","link-u-avif-sample-images/fox.profile2.12bpc.yuv420.odd-width.avif":"a2d9178cc5622e28472a735650d9c4deaec6d27d69830110911f4158f9d4a04e","link-u-avif-sample-images/fox.profile2.12bpc.yuv420.odd-width.odd-height.avif":"89a9fc7598d72251b903e0c7088ab3e7a7f316b5e02b85f8c69e51f8eb0c7e69","link-u-avif-sample-images/fox.profile2.12bpc.yuv422.avif":"51476b8471e1c0a5ebbd1e7545709495bef619cc96c02d277aad32b1deff8ea9","link-u-avif-sample-images/fox.profile2.12bpc.yuv422.monochrome.avif":"caf50c467242b3fa0b895a2af131fa0d03dd7b34989f2b1a51d25b2246c98fab","link-u-avif-sample-images/fox.profile2.12bpc.yuv422.monochrome.odd-height.avif":"1e88b92df592c02af53ff5258fa898ac8fe1d71954e9a440500ef7879b8a1c46","link-u-avif-sample-images/fox.profile2.12bpc.yuv422.monochrome.odd-width.avif":"466efdd269f3be3b1c88afc093c839e50ba5eaf6bd0c2425e157000d02a3c21a","link-u-avif-sample-images/fox.profile2.12bpc.yuv422.monochrome.odd-width.odd-height.avif":"36014509d0688cb307e0ffcdb5b4c16ff6e6c79772c7fbbeea33b4d483a1566f","link-u-avif-sample-images/fox.profile2.12bpc.yuv422.odd-height.avif":"4808960cdcd1207b29eb6ef5b4db81ae5e63c5d40ef92f7a1e8f4430e765bde4","link-u-avif-sample-images/fox.profile2.12bpc.yuv422.odd-width.avif":"71f3c73737bc04c23d93ea2c61a8a07408f604192fe53fe12c65050927dacb4e","link-u-avif-sample-images/fox.profile2.12bpc.yuv422.odd-width.odd-height.avif":"8f9649384fa09c70af0c2e9e0d94ecd17492c702e015d9d6290d3aefc57c548c","link-u-avif-sample-images/fox.profile2.12bpc.yuv444.avif":"ed96eca6ed79863eaf91e4d666e4e220b5fa4e5a6cb1696477ba901ac12f5dde","link-u-avif-sample-images/fox.profile2.12bpc.yuv444.monochrome.avif":"caf50c467242b3fa0b895a2af131fa0d03dd7b34989f2b1a51d25b2246c98fab","link-u-avif-sample-images/fox.profile2.12bpc.yuv444.monochrome.odd-height.avif":"1e88b92df592c02af53ff5258fa898ac8fe1d71954e9a440500ef7879b8a1c46","link-u-avif-sample-images/fox.profile2.12bpc.yuv444.monochrome.odd-width.avif":"466efdd269f3be3b1c88afc093c839e50ba5eaf6bd0c2425e157000d02a3c21a","link-u-avif-sample-images/fox.profile2.12bpc.yuv444.monochrome.odd-width.odd-height.avif":"36014509d0688cb307e0ffcdb5b4c16ff6e6c79772c7fbbeea33b4d483a1566f","link-u-avif-sample-images/fox.profile2.12bpc.yuv444.odd-height.avif":"c43b4c607e301e34eb953770133d89d15e77d63be8d6421a80d6212fbbbf3453","link-u-avif-sample-images/fox.profile2.12bpc.yuv444.odd-width.avif":"0e6218ce250ee7f84a621f3af73286fd4dabea19e9898d3575c20c5955aa427d","link-u-avif-sample-images/fox.profile2.12bpc.yuv444.odd-width.odd-height.avif":"9f19846d884ac7d161ac2ca15811bb22ff7f3847bc1ad5d7713971ea024631aa","link-u-avif-sample-images/fox.profile2.8bpc.yuv422.avif":"2cb363d30f83bff58ee049874b1808b37cb1d35342edf16b3ce25cb243c9ea55","link-u-avif-sample-images/fox.profile2.8bpc.yuv422.monochrome.avif":"8217b88f350c5d3812d7f863fe9d710c4c1b846b0be8df29ce6b3eb30d2b8d8f","link-u-avif-sample-images/fox.profile2.8bpc.yuv422.monochrome.odd-height.avif":"51eccd8c1368ddec9bc1f3a7631dadb00682e985fbfea66c0a2f533f6a73b67e","link-u-avif-sample-images/fox.profile2.8bpc.yuv422.monochrome.odd-width.avif":"83fe4593ab839cf296a2ccb8a146daf826d1d602f4f239cb63ee020f2cc326f6","link-u-avif-sample-images/fox.profile2.8bpc.yuv422.monochrome.odd-width.odd-height.avif":"4e63b84a980a81adde586314a94d8f834ec763749d8797c286471415b6b75647","link-u-avif-sample-images/fox.profile2.8bpc.yuv422.odd-height.avif":"efc70882aacbb533c0e833a4401949d152dceb364846442cdccca5048ad17a60","link-u-avif-sample-images/fox.profile2.8bpc.yuv422.odd-width.avif":"c07575c88ef400c1725c9260a19439e0e784da41c7db3867059019ddbdb3bebe","link-u-avif-sample-images/fox.profile2.8bpc.yuv422.odd-width.odd-height.avif":"86aee64fd7b11b9834537ea14b2eff234c062c98d32fab51ff14aba262d5b106","link-u-avif-sample-images/hato.16bpc.png":"53b550c587cd1d19a1997184e47f4a3ff2a05cedf7cb4e42a9466a6d6cb60d8d","link-u-avif-sample-images/hato.jpg":"6d4804e5e4adf36a6b138544c81b743ed7abdd9a495a43e883ec77689ca28943","link-u-avif-sample-images/hato.png":"313880f4cc51160fec522d78f1fb7f06df70fe1929a731fc86c68ecefd312277","link-u-avif-sample-images/hato.profile0.10bpc.yuv420.avif":"1e84598c94bc795c55a551bdf6f283b4eed4997bda15e5c4bb2e29d0dc70897b","link-u-avif-sample-images/hato.profile0.10bpc.yuv420.monochrome.avif":"25c19a187d10eac963bb51b3fae1ffe50f3ccbc7ad02e51948dc7467b397ce61","link-u-avif-sample-images/hato.profile0.8bpc.yuv420.avif":"07cd454de19dd638354f75d9e97aab08bc8a04dd45c4f7531cb62a1a5656c8c9","link-u-avif-sample-images/hato.profile0.8bpc.yuv420.monochrome.avif":"120a3f26f3d6cde80869fb52bdb8fdd55b443882c98070ea938575e4790982ff","link-u-avif-sample-images/hato.profile2.10bpc.yuv422.avif":"d54251d4bc023f2e53624a46cb18e56cbc45768bd1bd50394de191c2a42106e8","link-u-avif-sample-images/hato.profile2.10bpc.yuv422.monochrome.avif":"ed33dfdb5e663b3394298b6921f9b19b129e14788dead776430eee2f14780a73","link-u-avif-sample-images/hato.profile2.12bpc.yuv422.avif":"ad361ac7d94fbc6af7ef30cbd3601ff366bc360c304480387a58a4c6fecee9b6","link-u-avif-sample-images/hato.profile2.12bpc.yuv422.monochrome.avif":"e28b4cacda95750e465e205fbfcba6a6af1d8418dac649838730c555ff7d828f","link-u-avif-sample-images/hato.profile2.8bpc.yuv422.avif":"69c353c482c2eb3d3671bb55f7ccfc932e4d781c714a72116e9138ffc6f6c720","link-u-avif-sample-images/hato.profile2.8bpc.yuv422.monochrome.avif":"e7d6f7d42a8519e1482f225fe447b5642d19a54ee830529223eac114a0dec189","link-u-avif-sample-images/images.html":"9e18453dfe5b205600f158282c6896265281e3b04b2fbc332804fab1dbdb3faf","link-u-avif-sample-images/kimono.avif":"63412e0f67f37c8b6fcf0e8269a2afae0a017fa6a3a99d37d055c590b0be52d3","link-u-avif-sample-images/kimono.crop.avif":"f175dcd9c64813b759da185fa67076fb772b76059845b2aad3ddcfab257f75ad","link-u-avif-sample-images/kimono.crop.png":"0d5605bae0ec9d39aad9dc8e1a371d0327c6a224643983e3ee1f4d44cb00f19d","link-u-avif-sample-images/kimono.jpg":"a6ad58e3cea437ee0c841115ba67ae7354de7af734de50de9d0853dd4e571577","link-u-avif-sample-images/kimono.mirror-horizontal.avif":"2bbc004d91145488610158a5acdb4d706495a2b15511db20ff57bb9efd80885c","link-u-avif-sample-images/kimono.mirror-horizontal.png":"9af9e839fe6bf6342831970c20291f619570d2fc687951ae00cd81ea766f53fe","link-u-avif-sample-images/kimono.mirror-vertical.avif":"f10eb04791fcca3409868b367128649f32e6b6fffcf02484cdefa57909f6bb74","link-u-avif-sample-images/kimono.mirror-vertical.png":"4ed003c5868fd2e78c7b2dcbd54a67a0e7593dabb3ac82b1c9e5e2dbdf09b8ec","link-u-avif-sample-images/kimono.mirror-vertical.rotate270.avif":"33c36ec2274b00ac6f81c9f61e55c20cbfce1649ad27520afe635310f516ead1","link-u-avif-sample-images/kimono.mirror-vertical.rotate270.crop.avif":"90ca48f657455b8f8e4a4e1769a05af90a3e34dca11a8b3c32552daf378ee956","link-u-avif-sample-images/kimono.mirror-vertical.rotate270.png":"74b9b7ffa8955761f747a0e6e81d5b7ecb5e325383546110e1b6aa9986728035","link-u-avif-sample-images/kimono.png":"84fd6cfb97a27739608e21779f874b4ae7e80342b2588e8b0b092dee2d57c881","link-u-avif-sample-images/kimono.rotate270.avif":"79a99a0415276cc11f2e871d070a9df84df3385888a2f2fa3534320f6bed98ed","link-u-avif-sample-images/kimono.rotate270.png":"1918a47c02b378945a705301abd4250ddc65bb95afce9424572ffd0fdd1f45ef","link-u-avif-sample-images/kimono.rotate90.avif":"bd1157d8c840713c82b907b9d3ae80bc3817849e11c323d875f8016e035bd3cc","link-u-avif-sample-images/kimono.rotate90.png":"1a73c61692abe96d0a7a9accdb36a83d51bceac79bbb83a00571570f494cca49","link-u-avif-sample-images/plum-blossom-large.png":"af6ea005b726ca39f342e946aa53bed88e5a140413ce896d166bb35ab0aa3b4f","link-u-avif-sample-images/plum-blossom-large.profile0.10bpc.yuv420.alpha-full.avif":"cf8e15ec4b210235f3d68332a1adeb64e35c41b8d8e1e7586ae38b6d9cd8926c","link-u-avif-sample-images/plum-blossom-large.profile0.10bpc.yuv420.alpha-full.monochrome.avif":"b413440309d5669a7aefa06f291f72de0d0c09972e3da9a385e6016d6a1c5562","link-u-avif-sample-images/plum-blossom-large.profile0.10bpc.yuv420.alpha-limited.avif":"64f6f2b1fda594af5c9e2d6e4bc752b55e8121000cdcedc0066018e53f76de40","link-u-avif-sample-images/plum-blossom-large.profile0.10bpc.yuv420.alpha-limited.monochrome.avif":"2b175a600aed64c1c1de4b2d661fb405437b1ff000b964d4be6ac437ce73136f","link-u-avif-sample-images/plum-blossom-large.profile0.8bpc.yuv420.alpha-full.avif":"21ebb3732186bf7c6c13cf7197155b64201e674b9c79cf613b6e5718bde14c2a","link-u-avif-sample-images/plum-blossom-large.profile0.8bpc.yuv420.alpha-full.monochrome.avif":"65917797e511c9033b3e225eb5d84f3c0440b7a496d4b8ab5674e123ad68aab7","link-u-avif-sample-images/plum-blossom-large.profile0.8bpc.yuv420.alpha-limited.avif":"f4809df9188fa46ed100f63c78c4cf42559d90a98351a8f69e177385920672b4","link-u-avif-sample-images/plum-blossom-large.profile0.8bpc.yuv420.alpha-limited.monochrome.avif":"dffc213dc36f0b5ff3d86254f5185c2d1fb03380918a8fa39d186fb59cbba7cc","link-u-avif-sample-images/plum-blossom-large.profile1.10bpc.yuv444.alpha-full.avif":"0a615cfb673ab45e37da3582c17dd36f86d5da3d81246a32951d1db4ed90149d","link-u-avif-sample-images/plum-blossom-large.profile1.10bpc.yuv444.alpha-limited.avif":"d1cc6a0db116a68e229676b289e8ced84d42a9f0e8d3ccd760fc92dbeb932547","link-u-avif-sample-images/plum-blossom-large.profile1.8bpc.yuv444.alpha-full.avif":"8626cf0b2c60fee51cf1df7fe4d8a18081b72e3604f7d3ff14cc5a35581927d9","link-u-avif-sample-images/plum-blossom-large.profile1.8bpc.yuv444.alpha-limited.avif":"56bf18e4bcbfbea460c306ab900fc506169854d2b91690e1a48156a86fff3264","link-u-avif-sample-images/plum-blossom-large.profile2.10bpc.yuv422.alpha-full.avif":"b56f3c33797e4c5bb80418ae25f6f2c6fc88ddc1f6965d82abc44059f052f36c","link-u-avif-sample-images/plum-blossom-large.profile2.10bpc.yuv422.alpha-full.monochrome.avif":"c3c6db4ce801c68e2afd7bfb72abacc13287cc2e247917a817ff5632bd4b18fb","link-u-avif-sample-images/plum-blossom-large.profile2.10bpc.yuv422.alpha-limited.avif":"095f57fff1dc037a6414c60263415dcfa86b10d81f58e8e4c3aef17cffae0e5f","link-u-avif-sample-images/plum-blossom-large.profile2.10bpc.yuv422.alpha-limited.monochrome.avif":"ba3035a69296d12f47d1c450f2de8cc0c9059ebbf27bb8b0996ff6d1ab1132a1","link-u-avif-sample-images/plum-blossom-large.profile2.12bpc.yuv420.alpha-full.avif":"a9551e1963049b874216b40aaf9be45bc44dc11887770712b77240862c6c08a9","link-u-avif-sample-images/plum-blossom-large.profile2.12bpc.yuv420.alpha-full.monochrome.avif":"a8a0ba881cd0aef45a5874f412e97812ca457eaf12e56b34bac2ba051e142828","link-u-avif-sample-images/plum-blossom-large.profile2.12bpc.yuv420.alpha-limited.avif":"6891b5bdbed7f541c673c66cec4584b191bb737a49b37cca16ae069830890b42","link-u-avif-sample-images/plum-blossom-large.profile2.12bpc.yuv420.alpha-limited.monochrome.avif":"67e66826637e349e1c3c46316c7048d152aed8453d8cdd00c6b786f87fe176d8","link-u-avif-sample-images/plum-blossom-large.profile2.12bpc.yuv422.alpha-full.avif":"a466503110f60dcadaafe78c2cb0a8ca58334c22868efe428c7ac12b69407c95","link-u-avif-sample-images/plum-blossom-large.profile2.12bpc.yuv422.alpha-full.monochrome.avif":"a8a0ba881cd0aef45a5874f412e97812ca457eaf12e56b34bac2ba051e142828","link-u-avif-sample-images/plum-blossom-large.profile2.12bpc.yuv422.alpha-limited.avif":"061b4c70707e7fc8866580656cca7ca2da2263645829a564dbf8f205d639f058","link-u-avif-sample-images/plum-blossom-large.profile2.12bpc.yuv422.alpha-limited.monochrome.avif":"67e66826637e349e1c3c46316c7048d152aed8453d8cdd00c6b786f87fe176d8","link-u-avif-sample-images/plum-blossom-large.profile2.12bpc.yuv444.alpha-full.avif":"4a03c8bcfcaadccdeb07432ed80680b06aba5ae5e616fc370b376acb478f6cd1","link-u-avif-sample-images/plum-blossom-large.profile2.12bpc.yuv444.alpha-full.monochrome.avif":"a8a0ba881cd0aef45a5874f412e97812ca457eaf12e56b34bac2ba051e142828","link-u-avif-sample-images/plum-blossom-large.profile2.12bpc.yuv444.alpha-limited.avif":"376625ce4e7ec3b57344a9f2185a34975fe380774c9f8e0dd4ef61c46da94fca","link-u-avif-sample-images/plum-blossom-large.profile2.12bpc.yuv444.alpha-limited.monochrome.avif":"67e66826637e349e1c3c46316c7048d152aed8453d8cdd00c6b786f87fe176d8","link-u-avif-sample-images/plum-blossom-large.profile2.8bpc.yuv422.alpha-full.avif":"1e17b7dd8e351cb667bc6ec0b81fdebca9fd30ad5e588b3eac57bf9f90a9b58b","link-u-avif-sample-images/plum-blossom-large.profile2.8bpc.yuv422.alpha-full.monochrome.avif":"f77588d2ff39e4461869a95ca236efdf4a3fdc17b8a6e3907e63b417e56c81b5","link-u-avif-sample-images/plum-blossom-large.profile2.8bpc.yuv422.alpha-limited.avif":"f2eabd3fc2db07b361d55b5af63023d28b5bdd0047a665e9d0685651ce9db94b","link-u-avif-sample-images/plum-blossom-large.profile2.8bpc.yuv422.alpha-limited.monochrome.avif":"dd88c377b253d689bfd4600d7c3007448df0ed92f679b661d5d51e051a6916d8","link-u-avif-sample-images/plum-blossom-small.png":"c859fd97b647e494461f65835b9c1c3476807aee77076599adf18a832b3617a4","link-u-avif-sample-images/plum-blossom-small.profile0.10bpc.yuv420.alpha-full.avif":"fe3379620f983e5da4210b0f7c5d164e86208b34106d6b11d56e2b52beee5dfe","link-u-avif-sample-images/plum-blossom-small.profile0.10bpc.yuv420.alpha-full.monochrome.avif":"9e6234686053dba2e44bb32192c641074095a61e45aa1bede85bb83751e6e157","link-u-avif-sample-images/plum-blossom-small.profile0.10bpc.yuv420.alpha-limited.avif":"60ffa59dd007aea3bb596cfb03853b3dad490b1ffd10471ad4fe1901ec819907","link-u-avif-sample-images/plum-blossom-small.profile0.10bpc.yuv420.alpha-limited.monochrome.avif":"58abfa027525aca7339a705f311bc30b000aef9822c7c50b232894ece1ba9cb1","link-u-avif-sample-images/plum-blossom-small.profile0.8bpc.yuv420.alpha-full.avif":"541ca66a11b1430d11f77b74a13f859239a3bd9f44976b8dfe163c5d7595a69f","link-u-avif-sample-images/plum-blossom-small.profile0.8bpc.yuv420.alpha-full.monochrome.avif":"6d7852c63c27a77bef94443e178ecf6b6a3da8cc846f9f0c1adc17f7fc35e1f3","link-u-avif-sample-images/plum-blossom-small.profile0.8bpc.yuv420.alpha-limited.avif":"3712216ffc7edb95a976b68469ead533fda6fe9f3d2e8cb09cbdb0d01d9c094b","link-u-avif-sample-images/plum-blossom-small.profile0.8bpc.yuv420.alpha-limited.monochrome.avif":"59672af536b169ebf7e48129167dc91cb253925517c37db28b64539f7afba5d3","link-u-avif-sample-images/plum-blossom-small.profile1.10bpc.yuv444.alpha-full.avif":"561d5158425ad39425916a3be048b0202e82efef44cf1a9f711db57192d2ff01","link-u-avif-sample-images/plum-blossom-small.profile1.10bpc.yuv444.alpha-limited.avif":"88336f29457c1dc4ae0b754ef14b791de4d8c337f2b44d7960aafcca08a5586e","link-u-avif-sample-images/plum-blossom-small.profile1.8bpc.yuv444.alpha-full.avif":"245a3dad6371dc702f29eb7e9735f843b63c525da871859728bedbe5bb274985","link-u-avif-sample-images/plum-blossom-small.profile1.8bpc.yuv444.alpha-limited.avif":"490c216b5850c670f6088ee72c7fd906102b2dd0c8432c01a517b3328db27c75","link-u-avif-sample-images/plum-blossom-small.profile2.10bpc.yuv422.alpha-full.avif":"0d0bbbcb0c9ade1c827317a6409ce6ba25027b36da1b6752379a5f5d4c8af056","link-u-avif-sample-images/plum-blossom-small.profile2.10bpc.yuv422.alpha-full.monochrome.avif":"418a9d4b7dcbc1f67fc4b95ccb2e7946c446fddd35a79f0d587b3f2165cb3f14","link-u-avif-sample-images/plum-blossom-small.profile2.10bpc.yuv422.alpha-limited.avif":"a41dcfabb3795ed93a05881a91bf4d1c5d1b9b0e5d0db728f12684b12613e0c9","link-u-avif-sample-images/plum-blossom-small.profile2.10bpc.yuv422.alpha-limited.monochrome.avif":"4b6a18f4f608d1b00598e67c1c91a4e8f4943ae5acf0166ae0121cc21f3b7437","link-u-avif-sample-images/plum-blossom-small.profile2.12bpc.yuv420.alpha-full.avif":"5e6b83adee3aeac4bba3f38e854e2ed7585aa1557a74b5fa66596098c53e26f2","link-u-avif-sample-images/plum-blossom-small.profile2.12bpc.yuv420.alpha-full.monochrome.avif":"fb0937564c08f4e1c22ebbde426a0eff6a1d388434c30148bc7e5582dc378caa","link-u-avif-sample-images/plum-blossom-small.profile2.12bpc.yuv420.alpha-limited.avif":"f42e780bff644167e27525fee65b23e70814f7665ea19b6d693eb127c5eeebd8","link-u-avif-sample-images/plum-blossom-small.profile2.12bpc.yuv420.alpha-limited.monochrome.avif":"d41ead1d69d33d0cf5f6fe575beb5f60d9565300c535f9042113dd8a748c1d31","link-u-avif-sample-images/plum-blossom-small.profile2.12bpc.yuv422.alpha-full.avif":"c6ee9234ee7783d0203f9512e3cc8fe76a694675bcf03c320ff8bab4684bd4e9","link-u-avif-sample-images/plum-blossom-small.profile2.12bpc.yuv422.alpha-full.monochrome.avif":"fb0937564c08f4e1c22ebbde426a0eff6a1d388434c30148bc7e5582dc378caa","link-u-avif-sample-images/plum-blossom-small.profile2.12bpc.yuv422.alpha-limited.avif":"21e1e51fc6da66e090e12e1df5aeabf1f478df64bcb8151caaa687ad262bdd9d","link-u-avif-sample-images/plum-blossom-small.profile2.12bpc.yuv422.alpha-limited.monochrome.avif":"d41ead1d69d33d0cf5f6fe575beb5f60d9565300c535f9042113dd8a748c1d31","link-u-avif-sample-images/plum-blossom-small.profile2.12bpc.yuv444.alpha-full.avif":"dfed73d646d7159d3ee4f9ce95ea628fdd33bf8bf1bb02a83d88302d088f4d97","link-u-avif-sample-images/plum-blossom-small.profile2.12bpc.yuv444.alpha-full.monochrome.avif":"fb0937564c08f4e1c22ebbde426a0eff6a1d388434c30148bc7e5582dc378caa","link-u-avif-sample-images/plum-blossom-small.profile2.12bpc.yuv444.alpha-limited.avif":"5539cd575256772ba31d6e87cb0136d5f465f84b041a4677b1023cfd6bee9956","link-u-avif-sample-images/plum-blossom-small.profile2.12bpc.yuv444.alpha-limited.monochrome.avif":"d41ead1d69d33d0cf5f6fe575beb5f60d9565300c535f9042113dd8a748c1d31","link-u-avif-sample-images/plum-blossom-small.profile2.8bpc.yuv422.alpha-full.avif":"f205cf2c05265b84e45ceb723e9a3707fd8749130166d4797e64c8c62b497f8c","link-u-avif-sample-images/plum-blossom-small.profile2.8bpc.yuv422.alpha-full.monochrome.avif":"ad2244cb7b2ac487a5104d6e5a07270f9ceb2550e4d56d3662fcc1868910ced5","link-u-avif-sample-images/plum-blossom-small.profile2.8bpc.yuv422.alpha-limited.avif":"7ef9468effdc970e4e6e8cc7533d66dc967686e357dda3dda186c021f9e6156b","link-u-avif-sample-images/plum-blossom-small.profile2.8bpc.yuv422.alpha-limited.monochrome.avif":"3dd34d854ff83b6e27a2bf98301380a6cac272084ed863735285ab5dc8acda00","link-u-avif-sample-images/plum-blossom.svg":"be1f03dd05f63292c85a96b1c48fb06727283610cc69b1e116d547bab27b171d","link-u-avif-sample-images/red-at-12-oclock-with-color-profile-10bpc.avif":"5842951d81118d256962384e08a986816e8ade6b05530269f0208c6b69cedb3b","link-u-avif-sample-images/red-at-12-oclock-with-color-profile-12bpc.avif":"1f0c9f36d69b9aa13eff3897ada3e78b81099c613b329a402c27e09453e7e261","link-u-avif-sample-images/red-at-12-oclock-with-color-profile-8bpc.avif":"3e6f2f4016e66e3c94707eaa8373e6f582321e005964cd35b64bc183e1bf10ea","link-u-avif-sample-images/red-at-12-oclock-with-color-profile-lossy.avif":"79483242f2dca12c4ec18bd33ff8099216b3094fb55a26a909f046b2f9b4ce58","link-u-avif-sample-images/red-at-12-oclock-with-color-profile.jpg":"d56f809ea5eda74578af57e2f80b41856a1fe2ff436c741aa58757387af998bd","link-u-avif-sample-images/red-at-12-oclock-with-color-profile.png":"4eab95e358eb48e052c7b8c94d30a8c6cb1c9c3c2dfd9845240281dd5dd7b800","link-u-avif-sample-images/scripts/compare.sh":"0562689bcd40e9fc1322bf037d6f999aa4406a2229f19e74b96cc450e370e429","link-u-avif-sample-images/star-10bpc-with-alpha.avifs":"5643ac1f235ae6599186dd66c66507db6fa46a17b2b18e82ea9344870eb98a9b","link-u-avif-sample-images/star-10bpc.avifs":"c61d899a59dbd8c7b2f7bcfca9069a0e13ff1606899af227938a28502e6cbf88","link-u-avif-sample-images/star-12bpc-with-alpha.avifs":"88a350c3550ce36c1777fe7eb1e906c6829d3ed8b241aa1e0e46f1a4e2567c4b","link-u-avif-sample-images/star-12bpc.avifs":"c1a59db6f180208a3177d77c7f9ab08290e903c7bdaf929331b807a510f8c619","link-u-avif-sample-images/star-8bpc-with-alpha.avifs":"13a12908cb162a855cccc9221a5f9f736e8ea07902ffbdcf007f8fde5ed255f2","link-u-avif-sample-images/star-8bpc.avifs":"ae35b161de67a5afeb195ee401f369c34990f0ff8662f70ab4065bc6931f0a66","link-u-avif-sample-images/star.gif":"389cdd02efbdce4f0205cae6e91c1f64e34fa0ca1fe02351da1b37e16cbb642a","link-u-avif-sample-images/star.input.txt":"970163b942843618616f42233abe91d40fb68f6f5451860db259551711867b55","link-u-avif-sample-images/star.png":"18569167cf7ebd265ab6973d071d259aacfbb46c0408b7d4874c8cc9df9bb1ad","link-u-avif-sample-images/star.svg":"13089d0986b31b87919029fa69f2b68981af4023306bf0f79922f6772396008a","link-u-avif-sample-images/star180.png":"21bc11be2b51334fe4589634507612e7edce96d36e6a99219d029e440164e8b8","link-u-avif-sample-images/star270.png":"5c93f538dcdc70840b9925b4089083acc9c25e95265b3f3dea18d695451b441e","link-u-avif-sample-images/star90.png":"2defc5d21e70447653fec5dc14a697d9dd555d7a0c14e79cb2d9f80796a51a6d","src/boxes.rs":"270a3e3bf90279bfc83f95acadaba9611c25243280bca71dfa9c044d5441cf15","src/lib.rs":"73114a5c28472e77082ad259113ffafb418ed602c1741f26da3e10278b0bf93e","src/macros.rs":"76c840f9299797527fe71aa5b378ffb01312767372b45cc62deddb19775400ae","src/tests.rs":"75fe5467109242b2cc7991f8228e2e2ad1de5be2f29272a4a7f08c4e21ab5fa4","src/unstable.rs":"c2cef9a3b2b08a4da66fa0305fce7a117bd99c9b8d57b0a044e1d99dbda6faf5","tests/1x1-black-alpha-50pct-premultiplied.avif":"31a8c235bf2cf601a593a7bc33f7f2779f2d5b2e0cd145897b931fce94b0c0b8","tests/a1lx.avif":"81a784c568e7619bd47c4e7153181e9a86c8a03221097aa63979f97affd7efbb","tests/a1op.avif":"184e50efd3ad226800c610da7bc470d29b548d9fa942fd1fd1848ed02e2e5f0a","tests/alpha_video_avif_major_avis_compatible.avif":"81771981248c4e0d708f0828eadb20e9e37e7c21280efe5726666958f899c237","tests/alpha_video_fixed.avif":"67051d1a4ccf9f3e38d4514d8a6b3a2e07f1beb979369cabdc60881a698a36ac","tests/alpha_video_no_avis.avif":"a95f0e7c818bc5bf646143cf43474b70722e17669d4f2a32874c125936207d6a","tests/amr_nb_1f.3gp":"d1423e3414ad06b69f8b58d5c916ec353ba2d0402d99dec9f1c88acc33b6a127","tests/amr_wb_1f.3gp":"be635b24097e8757b0c04d70ab28e00417ca113e86108b6c269b79b64b89bcd5","tests/av1C-missing-essential.avif":"a1501254c4071847b2269fe40b81409c389ff14e91cf7c0005a47e6ea97a6803","tests/bad-ipma-flags.avif":"ecde7997b97db1910b9dcc7ca8e3c8957da0e83681ea9008c66dc9f12b78ad19","tests/bad-ipma-version.avif":"7f9a1a0b4ebbf8d800d22eaae5ff78970cc6b811317db6c1467c6883952b7c9b","tests/bbb_sunflower_QCIF_30fps_h263_noaudio_1f.3gp":"03e5b1264d0a188d77b9e676ba3ce23a801b17aaa11c0343dfd851d6ea4e3a40","tests/clap-basic-1_3x3-to-1x1.avif":"83af9c8196fa93b2475163585a23d0eb5a8f8015d0db8da7a5d6de61adfb1876","tests/clap-missing-essential.avif":"4d61aacd2327661a456abc76d3d490e5ddd2b6f8cbfa52922a6c541c9d983193","tests/clusterfuzz-testcase-minimized-mp4-6093954524250112":"af7044a470732d4e7e34ac7ab5ff038c58b66f09702cbcd774931d7766bbfd35","tests/corrupt/a1lx-marked-essential.avif":"0d481240222450827ea335ae9a1a300777a0db4f9b0f4c17ed77c758c5133fa3","tests/corrupt/a1op-missing-essential.avif":"33c24d54f43f1a7be7a8334718881c8a0de24730c997c7842b9d7140e75017ea","tests/corrupt/alpha_video_moov_is_moop.avif":"89e0091edd6efc2c5b163525553c5abc56263fe1b3b885184bb07b9ea4bf346d","tests/corrupt/bug-1655846.avif":"e0a5a06225800fadf05f5352503a4cec11af73eef705c43b4acab5f4a99dea50","tests/corrupt/bug-1661347.avif":"31c26561e1d9eafb60f7c5968b82a0859d203d73f17f26b29276256acee12966","tests/corrupt/clusterfuzz-testcase-minimized-avif-4914209301856256.avif":"34a142c7916e314881f3fb6394add1c543fac0e5b45109e3a425eeb4c68998d0","tests/corrupt/hdlr-not-first.avif":"2c29308af077209b9c984921b7e36f8fb7ca7cf379cf8eba4c7a91f65bc7a304","tests/corrupt/hdlr-not-pict.avif":"9fe37619606645a95725300a9e34fada9190d1e0b3919881db84353941ca9291","tests/corrupt/imir-before-clap.avif":"22d6b5dacf0ef0be59053beba7564b08037fed859ada2885e3476e0ff0d19c95","tests/corrupt/invalid-avif-colr-multiple-nclx.avif":"7990a995855120dc4f724a6098816595becc35077fcd9e0de8c68300b49c4f1f","tests/corrupt/invalid-avif-colr-multiple-prof.avif":"b077a6b58e3a13ad743ee3f19fbae53b521eab8727606e0dba9bf06384f3121c","tests/corrupt/invalid-avif-colr-multiple-rICC.avif":"88b24d4d588744b9f2cdc03944f28283e9315eb3de7d7d57773a0541137f6529","tests/corrupt/invalid-avif-colr-multiple.zip":"9abddcbc47fde6da20263a29b770c6a9e76c8ab8dc785ef8512f35d9cb3206ed","tests/corrupt/ipma-duplicate-item_id.avif":"ca8c5275b0b8b79c1068489a52d0a5c8f0b4453463971e72b694189f11c10745","tests/corrupt/ipma-duplicate-version-and-flags.avif":"cf8e15ec4b210235f3d68332a1adeb64e35c41b8d8e1e7586ae38b6d9cd8926c","tests/corrupt/ipma-invalid-property-index.avif":"2480e773fa716d22883032d05fd4cf2c6b00fba8796cf4ff286a5d1ba26adff6","tests/corrupt/lsel-missing-essential.avif":"43c3b1e4c4acecd7559a9a7197a7befd43c71705748f0f8c063bca3be1c6d074","tests/corrupt/no-alpha-av1C.avif":"ad3d34d6331db7d9bea0c5f37efb88923520e33e08e7c636a5df435a4575eae7","tests/corrupt/no-av1C.avif":"eeb4fc50930c91465999f787c4a2a3b12de20556da0857be72da5a1a9eaa3f01","tests/corrupt/no-ftyp.avif":"74b431f32b2e2761e77df7fdb260f623b4e8f7e3f4c8af8a42d6826911706d7b","tests/corrupt/no-hdlr.avif":"91a1eb70c7b6adf2104e471d7deeeb98084a591d64ce09ba106c27edfbc3a409","tests/corrupt/no-ispe.avif":"4b6edfd8c9b40c25dc40305a6057e32b5e65f40da4a9d810c58dbff53254113f","tests/corrupt/no-pitm.avif":"7960eeb9e6e5140fbe5eb6d281e6974efd6c3c0147562f3dcf06f6b009dc540a","tests/corrupt/no-pixi-for-alpha.avif":"f8adc3573c79ee25bf6d4dd2693c61661469b28f86a5c7b1d9e41b0e8d2d53bb","tests/corrupt/no-pixi.avif":"4b1776def440dc8b913c170e4479772ee6bbb299b8679f7c564704bd03c9597e","tests/hdlr-nonzero-reserved.avif":"b872dcd7b4f49c6808d6da109cf4fedc26a237c42e8529c5aa8f7130abaf40a9","tests/imir-missing-essential.avif":"b1226e4b1358528befbd3f1126b5caf0c5051b4354777b87e71f6001f3829f87","tests/invalid-avif-hdlr-name-multiple-nul.avif":"0d3e4a6ce42154ee288c18339c2b59ff2104fd890cd2d616e5dbf26375a90e98","tests/irot-missing-essential.avif":"b7da1fc1d1b45bb1b7ca3494476e052f711d794a6d010df6870872ed8b9da10e","tests/lsel.avif":"ef8ba6827709f48cd45f749efb580129162d9599ea98f3363d2140957502d806","tests/multiple-extents.avif":"b5549ac68793e155a726d754e565cea0da03fa17833d3545f45c79e13f4c9360","tests/no-mif1.avif":"1442aa6ffaeb9512724287768bfd1850d3aa29a651ef05abb33e5dec2b3ee5c2","tests/overflow.rs":"16b591d8def1a155b3b997622f6ea255536870d99c3d8f97c51755b77a50de3c","tests/public.rs":"8918d5190a36c697445aa4b140a31cd3032582f1e504b4c2527f75a2155f80ae","tests/valid-alpha.avif":"9d417a35b9b62ad3ff66ffbc55f16552aacf821a092aa5ef4adff7e746bd4c2f","tests/valid-avif-colr-nclx-and-prof-and-rICC.avif":"ab6f5e786d26f8bcade5993f8b9cca3cd004a3d7fcec76e829f5d0f98cb18e7b","tests/valid-avif-colr-nclx-and-prof.avif":"0e982818de61869fcb85a2a4c2b7b8aeecb3053cbfdc6276987f91204998eefb","tests/valid-avif-colr-nclx-and-rICC.avif":"8530ef1305ff956a0c2912d0b3d1e0fc3a68cf3103e70b04cc2574530389b030","tests/valid-avif-colr-nclx.avif":"345ab58b7b1cb48aba2e21eb8dc5ab0a751a78a752ce1896c59b4bf361992f38","tests/valid-avif-colr-prof-and-rICC.avif":"1f0f085141106885bda78b0879c768818420d8196b39440a36578456a7d50a6c","tests/valid-avif-colr-prof.avif":"5d7aaefb5204ebe1cc296456866b8e46e023748b921a38ee56fd6c776a9733ff","tests/valid-avif-colr-rICC.avif":"e1c7b49bfad5904b484bd5118e6b33b78e2dc708a31a10fcbb0e4a373ed8dbb7","tests/valid.avif":"f0b33e09bf01232e0877df325f47986c0bee7764f2a81c9c908ae109e7dc63c4"},"package":null}
++{"files":{"Cargo.toml":"f283fc1597f492cd1e03cd08b9c77f042ae4494fc96b4dcb566ec0abbda65efc","LICENSE":"fab3dd6bdab226f1c08630b1dd917e11fcb4ec5e1e020e2c16f83a0a13863e85","README.md":"86cb40854b93f988e3a63ce6fe39d2ce95367f8ca301a5ba50676ff98a0ad791","benches/avif_benchmark.rs":"cd99c0dde025ab40d2cd860f53dc697a1587a48c164c3e5c8adfd40add29d772","link-u-avif-sample-images/.github/workflows/encode-and-decode-daily.yml":"84b787f721024a100ce09ac5714a1d78a4811893861e89495313f435b9d02359","link-u-avif-sample-images/.gitignore":"ac16d40779ab2d608843a3cb1b0418a1ffdc0e71a06c4d140386fadf007a54a7","link-u-avif-sample-images/LICENSE.txt":"da89f9867822be4b8adb1e601d9e9226c195016c6508015eb7593e68ead0c98a","link-u-avif-sample-images/Makefile":"b5697e8685d2a9ce0f4b4c976a5f707022ed113782d16dc59ae280d3a8ce77b1","link-u-avif-sample-images/README.md":"d249fb7bef4f21359cfc4f2977e1b2f2c6e6dd6e57cb1cdc1da1f0edd8aa55d0","link-u-avif-sample-images/fox.jpg":"927997a90ae88ead007283bf9c1392159d0acd2e9890522146211fda2112a2d9","link-u-avif-sample-images/fox.odd-height.png":"6136247772bd1c0edd50426bca4f3485473ac25a784e5ec8777f7491598e96db","link-u-avif-sample-images/fox.odd-width.odd-height.png":"6f91dc21c137f318d0443ce28bbf3f74d5502180c254327b46e41040a33f1363","link-u-avif-sample-images/fox.odd-width.png":"a8b2328c8700c16280c5ab40a34147edac598d4d48ca101bef649e468ae1492e","link-u-avif-sample-images/fox.png":"c45bfb5780843c70a37426340020e3e7ff41d7cf1df9fec614a5cf429d078573","link-u-avif-sample-images/fox.profile0.10bpc.yuv420.avif":"811af5e96631309030a14cbc30c3bacfaa667f2e36e16a4f30434b8f5a23310c","link-u-avif-sample-images/fox.profile0.10bpc.yuv420.monochrome.avif":"e35713343e9ee04c51ab9cfdc99a0c7d126a1917cb83f5b9a23c71ed59269be2","link-u-avif-sample-images/fox.profile0.10bpc.yuv420.monochrome.odd-height.avif":"485623f7838d8f442c47348c6492765e6aafbc3d5ccd8e90efc9c812ff15e265","link-u-avif-sample-images/fox.profile0.10bpc.yuv420.monochrome.odd-width.avif":"8e75b9a8975267359d827e4cbc6877b1674aa31b87f88f222dde03263f9254df","link-u-avif-sample-images/fox.profile0.10bpc.yuv420.monochrome.odd-width.odd-height.avif":"1fff5915a332d6aaa85d668f3f338bda6fad9c6ec1f380f2c46737d536cea5de","link-u-avif-sample-images/fox.profile0.10bpc.yuv420.odd-height.avif":"cca9785f14c74d865453518c0962dabd6d1b92d2c6c5f5ac67efdbf5606acb83","link-u-avif-sample-images/fox.profile0.10bpc.yuv420.odd-width.avif":"de3399d8b56431f0ed34e2f14200f31dd54544fddbb12f39b4d55449d5660c56","link-u-avif-sample-images/fox.profile0.10bpc.yuv420.odd-width.odd-height.avif":"07507744cb76b74a3586b93fc3b273a98f998d75f7687db3e9cb3725d7b1fb9d","link-u-avif-sample-images/fox.profile0.8bpc.yuv420.avif":"cb884c82ac7b6d4fa03b1f687e9e20abc346107095473e9c1d422aaf0de14eaf","link-u-avif-sample-images/fox.profile0.8bpc.yuv420.monochrome.avif":"15d84077066c47fdbe2a7b8ed583a17017d09a033144ac1b31486d6c8f6f5c82","link-u-avif-sample-images/fox.profile0.8bpc.yuv420.monochrome.odd-height.avif":"365439d2ee2fe5229e066362c03a73a182c7f6626772ecf5345b22752d32e681","link-u-avif-sample-images/fox.profile0.8bpc.yuv420.monochrome.odd-width.avif":"c623b9943123d6c47d3300444f7255cbdfebfe2b47a670287f2baeb717fac42b","link-u-avif-sample-images/fox.profile0.8bpc.yuv420.monochrome.odd-width.odd-height.avif":"dd069f3c3c4f7589f5f7ef1d7b6a91b8cb975d32663a4a92b6d75219edd72954","link-u-avif-sample-images/fox.profile0.8bpc.yuv420.odd-height.avif":"75628450288ace3386651725411c8f0ffff7eb95f82c5307b0faa3350f09f50e","link-u-avif-sample-images/fox.profile0.8bpc.yuv420.odd-width.avif":"f91b6f455412adabc5094011362eaaa1f6a9d5740de0b8a1be42a96c16e7617f","link-u-avif-sample-images/fox.profile0.8bpc.yuv420.odd-width.odd-height.avif":"bb8695cacacaf8f2e13a739de75e5e8a9d970d68c3acdfb7d82171a9bac2f01e","link-u-avif-sample-images/fox.profile1.10bpc.yuv444.avif":"a10de8204aee73ba1786daca6390546bd7aa6b069aaa644012219a1c11246a43","link-u-avif-sample-images/fox.profile1.10bpc.yuv444.odd-height.avif":"734a5badc59a8bed19e8eb476911048ddb011ca7c9eac31b7a7ed20e0135ac2c","link-u-avif-sample-images/fox.profile1.10bpc.yuv444.odd-width.avif":"68d15d76d95f268e810dfd87bbf96d8c3197580afce2d30b50bb1f07865077f3","link-u-avif-sample-images/fox.profile1.10bpc.yuv444.odd-width.odd-height.avif":"01e469b33bacb7e07e15e23b2997907bbcf02d8fcc99885a027494d31c45547c","link-u-avif-sample-images/fox.profile1.8bpc.yuv444.avif":"a0cdc981a6b056c8af2d177a1438c332d630040dacbfd1c89bb5e3e381ba5822","link-u-avif-sample-images/fox.profile1.8bpc.yuv444.odd-height.avif":"77e0510def73213c00ebcf051cf45fa63cf27d7c69340cc145ab6d44ec77bb07","link-u-avif-sample-images/fox.profile1.8bpc.yuv444.odd-width.avif":"12787042364bd13be01830f988cb714220bde340a3329baa808df27a269b83f8","link-u-avif-sample-images/fox.profile1.8bpc.yuv444.odd-width.odd-height.avif":"fad3b6dd9cb99e6925858f69aafae3f68c861845f2c3d4a6d1c51c6161490134","link-u-avif-sample-images/fox.profile2.10bpc.yuv422.avif":"e34f3bab5df802be2d422c685824464eb5f7e182b235ca99bde11c4c34ff3ac2","link-u-avif-sample-images/fox.profile2.10bpc.yuv422.monochrome.avif":"05804752621e2fd7a9d85b01e2995a50e3efd30693efd934152560622d66e841","link-u-avif-sample-images/fox.profile2.10bpc.yuv422.monochrome.odd-height.avif":"ef041f2efa0424d3a6dcfc5f0c3f619aea0e197aaeb5a050a2d877a457513921","link-u-avif-sample-images/fox.profile2.10bpc.yuv422.monochrome.odd-width.avif":"b711b321b8a4d3a41e08f80a17c2203b839458cb6346aff6fff3f8d7699032e6","link-u-avif-sample-images/fox.profile2.10bpc.yuv422.monochrome.odd-width.odd-height.avif":"e3f40aad0ddd6c04ffacf4a754a0525986c89d519119d37655282551e3ea3a59","link-u-avif-sample-images/fox.profile2.10bpc.yuv422.odd-height.avif":"4ef74c37712b41d6e5269d939f9d52031bc10746f7c8c029db618c5935aff9a6","link-u-avif-sample-images/fox.profile2.10bpc.yuv422.odd-width.avif":"4cf6c849f4a48a639217ad9a1e0d027f4fc804d524c03e6707ec9714a252532f","link-u-avif-sample-images/fox.profile2.10bpc.yuv422.odd-width.odd-height.avif":"3d3978e8e8d07270f82a877d3535f9483b88fce93a1c4accb658b494452b1d36","link-u-avif-sample-images/fox.profile2.12bpc.yuv420.avif":"626d73272e59722084c528b27b72a0920bec462a10749b3e87036e42bf8a24e5","link-u-avif-sample-images/fox.profile2.12bpc.yuv420.monochrome.avif":"caf50c467242b3fa0b895a2af131fa0d03dd7b34989f2b1a51d25b2246c98fab","link-u-avif-sample-images/fox.profile2.12bpc.yuv420.monochrome.odd-height.avif":"1e88b92df592c02af53ff5258fa898ac8fe1d71954e9a440500ef7879b8a1c46","link-u-avif-sample-images/fox.profile2.12bpc.yuv420.monochrome.odd-width.avif":"466efdd269f3be3b1c88afc093c839e50ba5eaf6bd0c2425e157000d02a3c21a","link-u-avif-sample-images/fox.profile2.12bpc.yuv420.monochrome.odd-width.odd-height.avif":"36014509d0688cb307e0ffcdb5b4c16ff6e6c79772c7fbbeea33b4d483a1566f","link-u-avif-sample-images/fox.profile2.12bpc.yuv420.odd-height.avif":"d1786723a5d6ea1e1764b0045dc3f669fe3905ffc2913011a2b1b424d2393397","link-u-avif-sample-images/fox.profile2.12bpc.yuv420.odd-width.avif":"a2d9178cc5622e28472a735650d9c4deaec6d27d69830110911f4158f9d4a04e","link-u-avif-sample-images/fox.profile2.12bpc.yuv420.odd-width.odd-height.avif":"89a9fc7598d72251b903e0c7088ab3e7a7f316b5e02b85f8c69e51f8eb0c7e69","link-u-avif-sample-images/fox.profile2.12bpc.yuv422.avif":"51476b8471e1c0a5ebbd1e7545709495bef619cc96c02d277aad32b1deff8ea9","link-u-avif-sample-images/fox.profile2.12bpc.yuv422.monochrome.avif":"caf50c467242b3fa0b895a2af131fa0d03dd7b34989f2b1a51d25b2246c98fab","link-u-avif-sample-images/fox.profile2.12bpc.yuv422.monochrome.odd-height.avif":"1e88b92df592c02af53ff5258fa898ac8fe1d71954e9a440500ef7879b8a1c46","link-u-avif-sample-images/fox.profile2.12bpc.yuv422.monochrome.odd-width.avif":"466efdd269f3be3b1c88afc093c839e50ba5eaf6bd0c2425e157000d02a3c21a","link-u-avif-sample-images/fox.profile2.12bpc.yuv422.monochrome.odd-width.odd-height.avif":"36014509d0688cb307e0ffcdb5b4c16ff6e6c79772c7fbbeea33b4d483a1566f","link-u-avif-sample-images/fox.profile2.12bpc.yuv422.odd-height.avif":"4808960cdcd1207b29eb6ef5b4db81ae5e63c5d40ef92f7a1e8f4430e765bde4","link-u-avif-sample-images/fox.profile2.12bpc.yuv422.odd-width.avif":"71f3c73737bc04c23d93ea2c61a8a07408f604192fe53fe12c65050927dacb4e","link-u-avif-sample-images/fox.profile2.12bpc.yuv422.odd-width.odd-height.avif":"8f9649384fa09c70af0c2e9e0d94ecd17492c702e015d9d6290d3aefc57c548c","link-u-avif-sample-images/fox.profile2.12bpc.yuv444.avif":"ed96eca6ed79863eaf91e4d666e4e220b5fa4e5a6cb1696477ba901ac12f5dde","link-u-avif-sample-images/fox.profile2.12bpc.yuv444.monochrome.avif":"caf50c467242b3fa0b895a2af131fa0d03dd7b34989f2b1a51d25b2246c98fab","link-u-avif-sample-images/fox.profile2.12bpc.yuv444.monochrome.odd-height.avif":"1e88b92df592c02af53ff5258fa898ac8fe1d71954e9a440500ef7879b8a1c46","link-u-avif-sample-images/fox.profile2.12bpc.yuv444.monochrome.odd-width.avif":"466efdd269f3be3b1c88afc093c839e50ba5eaf6bd0c2425e157000d02a3c21a","link-u-avif-sample-images/fox.profile2.12bpc.yuv444.monochrome.odd-width.odd-height.avif":"36014509d0688cb307e0ffcdb5b4c16ff6e6c79772c7fbbeea33b4d483a1566f","link-u-avif-sample-images/fox.profile2.12bpc.yuv444.odd-height.avif":"c43b4c607e301e34eb953770133d89d15e77d63be8d6421a80d6212fbbbf3453","link-u-avif-sample-images/fox.profile2.12bpc.yuv444.odd-width.avif":"0e6218ce250ee7f84a621f3af73286fd4dabea19e9898d3575c20c5955aa427d","link-u-avif-sample-images/fox.profile2.12bpc.yuv444.odd-width.odd-height.avif":"9f19846d884ac7d161ac2ca15811bb22ff7f3847bc1ad5d7713971ea024631aa","link-u-avif-sample-images/fox.profile2.8bpc.yuv422.avif":"2cb363d30f83bff58ee049874b1808b37cb1d35342edf16b3ce25cb243c9ea55","link-u-avif-sample-images/fox.profile2.8bpc.yuv422.monochrome.avif":"8217b88f350c5d3812d7f863fe9d710c4c1b846b0be8df29ce6b3eb30d2b8d8f","link-u-avif-sample-images/fox.profile2.8bpc.yuv422.monochrome.odd-height.avif":"51eccd8c1368ddec9bc1f3a7631dadb00682e985fbfea66c0a2f533f6a73b67e","link-u-avif-sample-images/fox.profile2.8bpc.yuv422.monochrome.odd-width.avif":"83fe4593ab839cf296a2ccb8a146daf826d1d602f4f239cb63ee020f2cc326f6","link-u-avif-sample-images/fox.profile2.8bpc.yuv422.monochrome.odd-width.odd-height.avif":"4e63b84a980a81adde586314a94d8f834ec763749d8797c286471415b6b75647","link-u-avif-sample-images/fox.profile2.8bpc.yuv422.odd-height.avif":"efc70882aacbb533c0e833a4401949d152dceb364846442cdccca5048ad17a60","link-u-avif-sample-images/fox.profile2.8bpc.yuv422.odd-width.avif":"c07575c88ef400c1725c9260a19439e0e784da41c7db3867059019ddbdb3bebe","link-u-avif-sample-images/fox.profile2.8bpc.yuv422.odd-width.odd-height.avif":"86aee64fd7b11b9834537ea14b2eff234c062c98d32fab51ff14aba262d5b106","link-u-avif-sample-images/hato.16bpc.png":"53b550c587cd1d19a1997184e47f4a3ff2a05cedf7cb4e42a9466a6d6cb60d8d","link-u-avif-sample-images/hato.jpg":"6d4804e5e4adf36a6b138544c81b743ed7abdd9a495a43e883ec77689ca28943","link-u-avif-sample-images/hato.png":"313880f4cc51160fec522d78f1fb7f06df70fe1929a731fc86c68ecefd312277","link-u-avif-sample-images/hato.profile0.10bpc.yuv420.avif":"1e84598c94bc795c55a551bdf6f283b4eed4997bda15e5c4bb2e29d0dc70897b","link-u-avif-sample-images/hato.profile0.10bpc.yuv420.monochrome.avif":"25c19a187d10eac963bb51b3fae1ffe50f3ccbc7ad02e51948dc7467b397ce61","link-u-avif-sample-images/hato.profile0.8bpc.yuv420.avif":"07cd454de19dd638354f75d9e97aab08bc8a04dd45c4f7531cb62a1a5656c8c9","link-u-avif-sample-images/hato.profile0.8bpc.yuv420.monochrome.avif":"120a3f26f3d6cde80869fb52bdb8fdd55b443882c98070ea938575e4790982ff","link-u-avif-sample-images/hato.profile2.10bpc.yuv422.avif":"d54251d4bc023f2e53624a46cb18e56cbc45768bd1bd50394de191c2a42106e8","link-u-avif-sample-images/hato.profile2.10bpc.yuv422.monochrome.avif":"ed33dfdb5e663b3394298b6921f9b19b129e14788dead776430eee2f14780a73","link-u-avif-sample-images/hato.profile2.12bpc.yuv422.avif":"ad361ac7d94fbc6af7ef30cbd3601ff366bc360c304480387a58a4c6fecee9b6","link-u-avif-sample-images/hato.profile2.12bpc.yuv422.monochrome.avif":"e28b4cacda95750e465e205fbfcba6a6af1d8418dac649838730c555ff7d828f","link-u-avif-sample-images/hato.profile2.8bpc.yuv422.avif":"69c353c482c2eb3d3671bb55f7ccfc932e4d781c714a72116e9138ffc6f6c720","link-u-avif-sample-images/hato.profile2.8bpc.yuv422.monochrome.avif":"e7d6f7d42a8519e1482f225fe447b5642d19a54ee830529223eac114a0dec189","link-u-avif-sample-images/images.html":"9e18453dfe5b205600f158282c6896265281e3b04b2fbc332804fab1dbdb3faf","link-u-avif-sample-images/kimono.avif":"63412e0f67f37c8b6fcf0e8269a2afae0a017fa6a3a99d37d055c590b0be52d3","link-u-avif-sample-images/kimono.crop.avif":"f175dcd9c64813b759da185fa67076fb772b76059845b2aad3ddcfab257f75ad","link-u-avif-sample-images/kimono.crop.png":"0d5605bae0ec9d39aad9dc8e1a371d0327c6a224643983e3ee1f4d44cb00f19d","link-u-avif-sample-images/kimono.jpg":"a6ad58e3cea437ee0c841115ba67ae7354de7af734de50de9d0853dd4e571577","link-u-avif-sample-images/kimono.mirror-horizontal.avif":"2bbc004d91145488610158a5acdb4d706495a2b15511db20ff57bb9efd80885c","link-u-avif-sample-images/kimono.mirror-horizontal.png":"9af9e839fe6bf6342831970c20291f619570d2fc687951ae00cd81ea766f53fe","link-u-avif-sample-images/kimono.mirror-vertical.avif":"f10eb04791fcca3409868b367128649f32e6b6fffcf02484cdefa57909f6bb74","link-u-avif-sample-images/kimono.mirror-vertical.png":"4ed003c5868fd2e78c7b2dcbd54a67a0e7593dabb3ac82b1c9e5e2dbdf09b8ec","link-u-avif-sample-images/kimono.mirror-vertical.rotate270.avif":"33c36ec2274b00ac6f81c9f61e55c20cbfce1649ad27520afe635310f516ead1","link-u-avif-sample-images/kimono.mirror-vertical.rotate270.crop.avif":"90ca48f657455b8f8e4a4e1769a05af90a3e34dca11a8b3c32552daf378ee956","link-u-avif-sample-images/kimono.mirror-vertical.rotate270.png":"74b9b7ffa8955761f747a0e6e81d5b7ecb5e325383546110e1b6aa9986728035","link-u-avif-sample-images/kimono.png":"84fd6cfb97a27739608e21779f874b4ae7e80342b2588e8b0b092dee2d57c881","link-u-avif-sample-images/kimono.rotate270.avif":"79a99a0415276cc11f2e871d070a9df84df3385888a2f2fa3534320f6bed98ed","link-u-avif-sample-images/kimono.rotate270.png":"1918a47c02b378945a705301abd4250ddc65bb95afce9424572ffd0fdd1f45ef","link-u-avif-sample-images/kimono.rotate90.avif":"bd1157d8c840713c82b907b9d3ae80bc3817849e11c323d875f8016e035bd3cc","link-u-avif-sample-images/kimono.rotate90.png":"1a73c61692abe96d0a7a9accdb36a83d51bceac79bbb83a00571570f494cca49","link-u-avif-sample-images/plum-blossom-large.png":"af6ea005b726ca39f342e946aa53bed88e5a140413ce896d166bb35ab0aa3b4f","link-u-avif-sample-images/plum-blossom-large.profile0.10bpc.yuv420.alpha-full.avif":"cf8e15ec4b210235f3d68332a1adeb64e35c41b8d8e1e7586ae38b6d9cd8926c","link-u-avif-sample-images/plum-blossom-large.profile0.10bpc.yuv420.alpha-full.monochrome.avif":"b413440309d5669a7aefa06f291f72de0d0c09972e3da9a385e6016d6a1c5562","link-u-avif-sample-images/plum-blossom-large.profile0.10bpc.yuv420.alpha-limited.avif":"64f6f2b1fda594af5c9e2d6e4bc752b55e8121000cdcedc0066018e53f76de40","link-u-avif-sample-images/plum-blossom-large.profile0.10bpc.yuv420.alpha-limited.monochrome.avif":"2b175a600aed64c1c1de4b2d661fb405437b1ff000b964d4be6ac437ce73136f","link-u-avif-sample-images/plum-blossom-large.profile0.8bpc.yuv420.alpha-full.avif":"21ebb3732186bf7c6c13cf7197155b64201e674b9c79cf613b6e5718bde14c2a","link-u-avif-sample-images/plum-blossom-large.profile0.8bpc.yuv420.alpha-full.monochrome.avif":"65917797e511c9033b3e225eb5d84f3c0440b7a496d4b8ab5674e123ad68aab7","link-u-avif-sample-images/plum-blossom-large.profile0.8bpc.yuv420.alpha-limited.avif":"f4809df9188fa46ed100f63c78c4cf42559d90a98351a8f69e177385920672b4","link-u-avif-sample-images/plum-blossom-large.profile0.8bpc.yuv420.alpha-limited.monochrome.avif":"dffc213dc36f0b5ff3d86254f5185c2d1fb03380918a8fa39d186fb59cbba7cc","link-u-avif-sample-images/plum-blossom-large.profile1.10bpc.yuv444.alpha-full.avif":"0a615cfb673ab45e37da3582c17dd36f86d5da3d81246a32951d1db4ed90149d","link-u-avif-sample-images/plum-blossom-large.profile1.10bpc.yuv444.alpha-limited.avif":"d1cc6a0db116a68e229676b289e8ced84d42a9f0e8d3ccd760fc92dbeb932547","link-u-avif-sample-images/plum-blossom-large.profile1.8bpc.yuv444.alpha-full.avif":"8626cf0b2c60fee51cf1df7fe4d8a18081b72e3604f7d3ff14cc5a35581927d9","link-u-avif-sample-images/plum-blossom-large.profile1.8bpc.yuv444.alpha-limited.avif":"56bf18e4bcbfbea460c306ab900fc506169854d2b91690e1a48156a86fff3264","link-u-avif-sample-images/plum-blossom-large.profile2.10bpc.yuv422.alpha-full.avif":"b56f3c33797e4c5bb80418ae25f6f2c6fc88ddc1f6965d82abc44059f052f36c","link-u-avif-sample-images/plum-blossom-large.profile2.10bpc.yuv422.alpha-full.monochrome.avif":"c3c6db4ce801c68e2afd7bfb72abacc13287cc2e247917a817ff5632bd4b18fb","link-u-avif-sample-images/plum-blossom-large.profile2.10bpc.yuv422.alpha-limited.avif":"095f57fff1dc037a6414c60263415dcfa86b10d81f58e8e4c3aef17cffae0e5f","link-u-avif-sample-images/plum-blossom-large.profile2.10bpc.yuv422.alpha-limited.monochrome.avif":"ba3035a69296d12f47d1c450f2de8cc0c9059ebbf27bb8b0996ff6d1ab1132a1","link-u-avif-sample-images/plum-blossom-large.profile2.12bpc.yuv420.alpha-full.avif":"a9551e1963049b874216b40aaf9be45bc44dc11887770712b77240862c6c08a9","link-u-avif-sample-images/plum-blossom-large.profile2.12bpc.yuv420.alpha-full.monochrome.avif":"a8a0ba881cd0aef45a5874f412e97812ca457eaf12e56b34bac2ba051e142828","link-u-avif-sample-images/plum-blossom-large.profile2.12bpc.yuv420.alpha-limited.avif":"6891b5bdbed7f541c673c66cec4584b191bb737a49b37cca16ae069830890b42","link-u-avif-sample-images/plum-blossom-large.profile2.12bpc.yuv420.alpha-limited.monochrome.avif":"67e66826637e349e1c3c46316c7048d152aed8453d8cdd00c6b786f87fe176d8","link-u-avif-sample-images/plum-blossom-large.profile2.12bpc.yuv422.alpha-full.avif":"a466503110f60dcadaafe78c2cb0a8ca58334c22868efe428c7ac12b69407c95","link-u-avif-sample-images/plum-blossom-large.profile2.12bpc.yuv422.alpha-full.monochrome.avif":"a8a0ba881cd0aef45a5874f412e97812ca457eaf12e56b34bac2ba051e142828","link-u-avif-sample-images/plum-blossom-large.profile2.12bpc.yuv422.alpha-limited.avif":"061b4c70707e7fc8866580656cca7ca2da2263645829a564dbf8f205d639f058","link-u-avif-sample-images/plum-blossom-large.profile2.12bpc.yuv422.alpha-limited.monochrome.avif":"67e66826637e349e1c3c46316c7048d152aed8453d8cdd00c6b786f87fe176d8","link-u-avif-sample-images/plum-blossom-large.profile2.12bpc.yuv444.alpha-full.avif":"4a03c8bcfcaadccdeb07432ed80680b06aba5ae5e616fc370b376acb478f6cd1","link-u-avif-sample-images/plum-blossom-large.profile2.12bpc.yuv444.alpha-full.monochrome.avif":"a8a0ba881cd0aef45a5874f412e97812ca457eaf12e56b34bac2ba051e142828","link-u-avif-sample-images/plum-blossom-large.profile2.12bpc.yuv444.alpha-limited.avif":"376625ce4e7ec3b57344a9f2185a34975fe380774c9f8e0dd4ef61c46da94fca","link-u-avif-sample-images/plum-blossom-large.profile2.12bpc.yuv444.alpha-limited.monochrome.avif":"67e66826637e349e1c3c46316c7048d152aed8453d8cdd00c6b786f87fe176d8","link-u-avif-sample-images/plum-blossom-large.profile2.8bpc.yuv422.alpha-full.avif":"1e17b7dd8e351cb667bc6ec0b81fdebca9fd30ad5e588b3eac57bf9f90a9b58b","link-u-avif-sample-images/plum-blossom-large.profile2.8bpc.yuv422.alpha-full.monochrome.avif":"f77588d2ff39e4461869a95ca236efdf4a3fdc17b8a6e3907e63b417e56c81b5","link-u-avif-sample-images/plum-blossom-large.profile2.8bpc.yuv422.alpha-limited.avif":"f2eabd3fc2db07b361d55b5af63023d28b5bdd0047a665e9d0685651ce9db94b","link-u-avif-sample-images/plum-blossom-large.profile2.8bpc.yuv422.alpha-limited.monochrome.avif":"dd88c377b253d689bfd4600d7c3007448df0ed92f679b661d5d51e051a6916d8","link-u-avif-sample-images/plum-blossom-small.png":"c859fd97b647e494461f65835b9c1c3476807aee77076599adf18a832b3617a4","link-u-avif-sample-images/plum-blossom-small.profile0.10bpc.yuv420.alpha-full.avif":"fe3379620f983e5da4210b0f7c5d164e86208b34106d6b11d56e2b52beee5dfe","link-u-avif-sample-images/plum-blossom-small.profile0.10bpc.yuv420.alpha-full.monochrome.avif":"9e6234686053dba2e44bb32192c641074095a61e45aa1bede85bb83751e6e157","link-u-avif-sample-images/plum-blossom-small.profile0.10bpc.yuv420.alpha-limited.avif":"60ffa59dd007aea3bb596cfb03853b3dad490b1ffd10471ad4fe1901ec819907","link-u-avif-sample-images/plum-blossom-small.profile0.10bpc.yuv420.alpha-limited.monochrome.avif":"58abfa027525aca7339a705f311bc30b000aef9822c7c50b232894ece1ba9cb1","link-u-avif-sample-images/plum-blossom-small.profile0.8bpc.yuv420.alpha-full.avif":"541ca66a11b1430d11f77b74a13f859239a3bd9f44976b8dfe163c5d7595a69f","link-u-avif-sample-images/plum-blossom-small.profile0.8bpc.yuv420.alpha-full.monochrome.avif":"6d7852c63c27a77bef94443e178ecf6b6a3da8cc846f9f0c1adc17f7fc35e1f3","link-u-avif-sample-images/plum-blossom-small.profile0.8bpc.yuv420.alpha-limited.avif":"3712216ffc7edb95a976b68469ead533fda6fe9f3d2e8cb09cbdb0d01d9c094b","link-u-avif-sample-images/plum-blossom-small.profile0.8bpc.yuv420.alpha-limited.monochrome.avif":"59672af536b169ebf7e48129167dc91cb253925517c37db28b64539f7afba5d3","link-u-avif-sample-images/plum-blossom-small.profile1.10bpc.yuv444.alpha-full.avif":"561d5158425ad39425916a3be048b0202e82efef44cf1a9f711db57192d2ff01","link-u-avif-sample-images/plum-blossom-small.profile1.10bpc.yuv444.alpha-limited.avif":"88336f29457c1dc4ae0b754ef14b791de4d8c337f2b44d7960aafcca08a5586e","link-u-avif-sample-images/plum-blossom-small.profile1.8bpc.yuv444.alpha-full.avif":"245a3dad6371dc702f29eb7e9735f843b63c525da871859728bedbe5bb274985","link-u-avif-sample-images/plum-blossom-small.profile1.8bpc.yuv444.alpha-limited.avif":"490c216b5850c670f6088ee72c7fd906102b2dd0c8432c01a517b3328db27c75","link-u-avif-sample-images/plum-blossom-small.profile2.10bpc.yuv422.alpha-full.avif":"0d0bbbcb0c9ade1c827317a6409ce6ba25027b36da1b6752379a5f5d4c8af056","link-u-avif-sample-images/plum-blossom-small.profile2.10bpc.yuv422.alpha-full.monochrome.avif":"418a9d4b7dcbc1f67fc4b95ccb2e7946c446fddd35a79f0d587b3f2165cb3f14","link-u-avif-sample-images/plum-blossom-small.profile2.10bpc.yuv422.alpha-limited.avif":"a41dcfabb3795ed93a05881a91bf4d1c5d1b9b0e5d0db728f12684b12613e0c9","link-u-avif-sample-images/plum-blossom-small.profile2.10bpc.yuv422.alpha-limited.monochrome.avif":"4b6a18f4f608d1b00598e67c1c91a4e8f4943ae5acf0166ae0121cc21f3b7437","link-u-avif-sample-images/plum-blossom-small.profile2.12bpc.yuv420.alpha-full.avif":"5e6b83adee3aeac4bba3f38e854e2ed7585aa1557a74b5fa66596098c53e26f2","link-u-avif-sample-images/plum-blossom-small.profile2.12bpc.yuv420.alpha-full.monochrome.avif":"fb0937564c08f4e1c22ebbde426a0eff6a1d388434c30148bc7e5582dc378caa","link-u-avif-sample-images/plum-blossom-small.profile2.12bpc.yuv420.alpha-limited.avif":"f42e780bff644167e27525fee65b23e70814f7665ea19b6d693eb127c5eeebd8","link-u-avif-sample-images/plum-blossom-small.profile2.12bpc.yuv420.alpha-limited.monochrome.avif":"d41ead1d69d33d0cf5f6fe575beb5f60d9565300c535f9042113dd8a748c1d31","link-u-avif-sample-images/plum-blossom-small.profile2.12bpc.yuv422.alpha-full.avif":"c6ee9234ee7783d0203f9512e3cc8fe76a694675bcf03c320ff8bab4684bd4e9","link-u-avif-sample-images/plum-blossom-small.profile2.12bpc.yuv422.alpha-full.monochrome.avif":"fb0937564c08f4e1c22ebbde426a0eff6a1d388434c30148bc7e5582dc378caa","link-u-avif-sample-images/plum-blossom-small.profile2.12bpc.yuv422.alpha-limited.avif":"21e1e51fc6da66e090e12e1df5aeabf1f478df64bcb8151caaa687ad262bdd9d","link-u-avif-sample-images/plum-blossom-small.profile2.12bpc.yuv422.alpha-limited.monochrome.avif":"d41ead1d69d33d0cf5f6fe575beb5f60d9565300c535f9042113dd8a748c1d31","link-u-avif-sample-images/plum-blossom-small.profile2.12bpc.yuv444.alpha-full.avif":"dfed73d646d7159d3ee4f9ce95ea628fdd33bf8bf1bb02a83d88302d088f4d97","link-u-avif-sample-images/plum-blossom-small.profile2.12bpc.yuv444.alpha-full.monochrome.avif":"fb0937564c08f4e1c22ebbde426a0eff6a1d388434c30148bc7e5582dc378caa","link-u-avif-sample-images/plum-blossom-small.profile2.12bpc.yuv444.alpha-limited.avif":"5539cd575256772ba31d6e87cb0136d5f465f84b041a4677b1023cfd6bee9956","link-u-avif-sample-images/plum-blossom-small.profile2.12bpc.yuv444.alpha-limited.monochrome.avif":"d41ead1d69d33d0cf5f6fe575beb5f60d9565300c535f9042113dd8a748c1d31","link-u-avif-sample-images/plum-blossom-small.profile2.8bpc.yuv422.alpha-full.avif":"f205cf2c05265b84e45ceb723e9a3707fd8749130166d4797e64c8c62b497f8c","link-u-avif-sample-images/plum-blossom-small.profile2.8bpc.yuv422.alpha-full.monochrome.avif":"ad2244cb7b2ac487a5104d6e5a07270f9ceb2550e4d56d3662fcc1868910ced5","link-u-avif-sample-images/plum-blossom-small.profile2.8bpc.yuv422.alpha-limited.avif":"7ef9468effdc970e4e6e8cc7533d66dc967686e357dda3dda186c021f9e6156b","link-u-avif-sample-images/plum-blossom-small.profile2.8bpc.yuv422.alpha-limited.monochrome.avif":"3dd34d854ff83b6e27a2bf98301380a6cac272084ed863735285ab5dc8acda00","link-u-avif-sample-images/plum-blossom.svg":"be1f03dd05f63292c85a96b1c48fb06727283610cc69b1e116d547bab27b171d","link-u-avif-sample-images/red-at-12-oclock-with-color-profile-10bpc.avif":"5842951d81118d256962384e08a986816e8ade6b05530269f0208c6b69cedb3b","link-u-avif-sample-images/red-at-12-oclock-with-color-profile-12bpc.avif":"1f0c9f36d69b9aa13eff3897ada3e78b81099c613b329a402c27e09453e7e261","link-u-avif-sample-images/red-at-12-oclock-with-color-profile-8bpc.avif":"3e6f2f4016e66e3c94707eaa8373e6f582321e005964cd35b64bc183e1bf10ea","link-u-avif-sample-images/red-at-12-oclock-with-color-profile-lossy.avif":"79483242f2dca12c4ec18bd33ff8099216b3094fb55a26a909f046b2f9b4ce58","link-u-avif-sample-images/red-at-12-oclock-with-color-profile.jpg":"d56f809ea5eda74578af57e2f80b41856a1fe2ff436c741aa58757387af998bd","link-u-avif-sample-images/red-at-12-oclock-with-color-profile.png":"4eab95e358eb48e052c7b8c94d30a8c6cb1c9c3c2dfd9845240281dd5dd7b800","link-u-avif-sample-images/scripts/compare.sh":"0562689bcd40e9fc1322bf037d6f999aa4406a2229f19e74b96cc450e370e429","link-u-avif-sample-images/star-10bpc-with-alpha.avifs":"5643ac1f235ae6599186dd66c66507db6fa46a17b2b18e82ea9344870eb98a9b","link-u-avif-sample-images/star-10bpc.avifs":"c61d899a59dbd8c7b2f7bcfca9069a0e13ff1606899af227938a28502e6cbf88","link-u-avif-sample-images/star-12bpc-with-alpha.avifs":"88a350c3550ce36c1777fe7eb1e906c6829d3ed8b241aa1e0e46f1a4e2567c4b","link-u-avif-sample-images/star-12bpc.avifs":"c1a59db6f180208a3177d77c7f9ab08290e903c7bdaf929331b807a510f8c619","link-u-avif-sample-images/star-8bpc-with-alpha.avifs":"13a12908cb162a855cccc9221a5f9f736e8ea07902ffbdcf007f8fde5ed255f2","link-u-avif-sample-images/star-8bpc.avifs":"ae35b161de67a5afeb195ee401f369c34990f0ff8662f70ab4065bc6931f0a66","link-u-avif-sample-images/star.gif":"389cdd02efbdce4f0205cae6e91c1f64e34fa0ca1fe02351da1b37e16cbb642a","link-u-avif-sample-images/star.input.txt":"970163b942843618616f42233abe91d40fb68f6f5451860db259551711867b55","link-u-avif-sample-images/star.png":"18569167cf7ebd265ab6973d071d259aacfbb46c0408b7d4874c8cc9df9bb1ad","link-u-avif-sample-images/star.svg":"13089d0986b31b87919029fa69f2b68981af4023306bf0f79922f6772396008a","link-u-avif-sample-images/star180.png":"21bc11be2b51334fe4589634507612e7edce96d36e6a99219d029e440164e8b8","link-u-avif-sample-images/star270.png":"5c93f538dcdc70840b9925b4089083acc9c25e95265b3f3dea18d695451b441e","link-u-avif-sample-images/star90.png":"2defc5d21e70447653fec5dc14a697d9dd555d7a0c14e79cb2d9f80796a51a6d","src/boxes.rs":"270a3e3bf90279bfc83f95acadaba9611c25243280bca71dfa9c044d5441cf15","src/lib.rs":"a88d6cc10ec1322b53a8f4c782b5133135ace0fdfcf03d1624b768788e17be0f","src/macros.rs":"76c840f9299797527fe71aa5b378ffb01312767372b45cc62deddb19775400ae","src/tests.rs":"75fe5467109242b2cc7991f8228e2e2ad1de5be2f29272a4a7f08c4e21ab5fa4","src/unstable.rs":"c2cef9a3b2b08a4da66fa0305fce7a117bd99c9b8d57b0a044e1d99dbda6faf5","tests/1x1-black-alpha-50pct-premultiplied.avif":"31a8c235bf2cf601a593a7bc33f7f2779f2d5b2e0cd145897b931fce94b0c0b8","tests/a1lx.avif":"81a784c568e7619bd47c4e7153181e9a86c8a03221097aa63979f97affd7efbb","tests/a1op.avif":"184e50efd3ad226800c610da7bc470d29b548d9fa942fd1fd1848ed02e2e5f0a","tests/alpha_video_avif_major_avis_compatible.avif":"81771981248c4e0d708f0828eadb20e9e37e7c21280efe5726666958f899c237","tests/alpha_video_fixed.avif":"67051d1a4ccf9f3e38d4514d8a6b3a2e07f1beb979369cabdc60881a698a36ac","tests/alpha_video_no_avis.avif":"a95f0e7c818bc5bf646143cf43474b70722e17669d4f2a32874c125936207d6a","tests/amr_nb_1f.3gp":"d1423e3414ad06b69f8b58d5c916ec353ba2d0402d99dec9f1c88acc33b6a127","tests/amr_wb_1f.3gp":"be635b24097e8757b0c04d70ab28e00417ca113e86108b6c269b79b64b89bcd5","tests/av1C-missing-essential.avif":"a1501254c4071847b2269fe40b81409c389ff14e91cf7c0005a47e6ea97a6803","tests/bad-ipma-flags.avif":"ecde7997b97db1910b9dcc7ca8e3c8957da0e83681ea9008c66dc9f12b78ad19","tests/bad-ipma-version.avif":"7f9a1a0b4ebbf8d800d22eaae5ff78970cc6b811317db6c1467c6883952b7c9b","tests/bbb_sunflower_QCIF_30fps_h263_noaudio_1f.3gp":"03e5b1264d0a188d77b9e676ba3ce23a801b17aaa11c0343dfd851d6ea4e3a40","tests/clap-basic-1_3x3-to-1x1.avif":"83af9c8196fa93b2475163585a23d0eb5a8f8015d0db8da7a5d6de61adfb1876","tests/clap-missing-essential.avif":"4d61aacd2327661a456abc76d3d490e5ddd2b6f8cbfa52922a6c541c9d983193","tests/clusterfuzz-testcase-minimized-mp4-6093954524250112":"af7044a470732d4e7e34ac7ab5ff038c58b66f09702cbcd774931d7766bbfd35","tests/corrupt/a1lx-marked-essential.avif":"0d481240222450827ea335ae9a1a300777a0db4f9b0f4c17ed77c758c5133fa3","tests/corrupt/a1op-missing-essential.avif":"33c24d54f43f1a7be7a8334718881c8a0de24730c997c7842b9d7140e75017ea","tests/corrupt/alpha_video_moov_is_moop.avif":"89e0091edd6efc2c5b163525553c5abc56263fe1b3b885184bb07b9ea4bf346d","tests/corrupt/bug-1655846.avif":"e0a5a06225800fadf05f5352503a4cec11af73eef705c43b4acab5f4a99dea50","tests/corrupt/bug-1661347.avif":"31c26561e1d9eafb60f7c5968b82a0859d203d73f17f26b29276256acee12966","tests/corrupt/clusterfuzz-testcase-minimized-avif-4914209301856256.avif":"34a142c7916e314881f3fb6394add1c543fac0e5b45109e3a425eeb4c68998d0","tests/corrupt/hdlr-not-first.avif":"2c29308af077209b9c984921b7e36f8fb7ca7cf379cf8eba4c7a91f65bc7a304","tests/corrupt/hdlr-not-pict.avif":"9fe37619606645a95725300a9e34fada9190d1e0b3919881db84353941ca9291","tests/corrupt/imir-before-clap.avif":"22d6b5dacf0ef0be59053beba7564b08037fed859ada2885e3476e0ff0d19c95","tests/corrupt/invalid-avif-colr-multiple-nclx.avif":"7990a995855120dc4f724a6098816595becc35077fcd9e0de8c68300b49c4f1f","tests/corrupt/invalid-avif-colr-multiple-prof.avif":"b077a6b58e3a13ad743ee3f19fbae53b521eab8727606e0dba9bf06384f3121c","tests/corrupt/invalid-avif-colr-multiple-rICC.avif":"88b24d4d588744b9f2cdc03944f28283e9315eb3de7d7d57773a0541137f6529","tests/corrupt/invalid-avif-colr-multiple.zip":"9abddcbc47fde6da20263a29b770c6a9e76c8ab8dc785ef8512f35d9cb3206ed","tests/corrupt/ipma-duplicate-item_id.avif":"ca8c5275b0b8b79c1068489a52d0a5c8f0b4453463971e72b694189f11c10745","tests/corrupt/ipma-duplicate-version-and-flags.avif":"cf8e15ec4b210235f3d68332a1adeb64e35c41b8d8e1e7586ae38b6d9cd8926c","tests/corrupt/ipma-invalid-property-index.avif":"2480e773fa716d22883032d05fd4cf2c6b00fba8796cf4ff286a5d1ba26adff6","tests/corrupt/lsel-missing-essential.avif":"43c3b1e4c4acecd7559a9a7197a7befd43c71705748f0f8c063bca3be1c6d074","tests/corrupt/no-alpha-av1C.avif":"ad3d34d6331db7d9bea0c5f37efb88923520e33e08e7c636a5df435a4575eae7","tests/corrupt/no-av1C.avif":"eeb4fc50930c91465999f787c4a2a3b12de20556da0857be72da5a1a9eaa3f01","tests/corrupt/no-ftyp.avif":"74b431f32b2e2761e77df7fdb260f623b4e8f7e3f4c8af8a42d6826911706d7b","tests/corrupt/no-hdlr.avif":"91a1eb70c7b6adf2104e471d7deeeb98084a591d64ce09ba106c27edfbc3a409","tests/corrupt/no-ispe.avif":"4b6edfd8c9b40c25dc40305a6057e32b5e65f40da4a9d810c58dbff53254113f","tests/corrupt/no-pitm.avif":"7960eeb9e6e5140fbe5eb6d281e6974efd6c3c0147562f3dcf06f6b009dc540a","tests/corrupt/no-pixi-for-alpha.avif":"f8adc3573c79ee25bf6d4dd2693c61661469b28f86a5c7b1d9e41b0e8d2d53bb","tests/corrupt/no-pixi.avif":"4b1776def440dc8b913c170e4479772ee6bbb299b8679f7c564704bd03c9597e","tests/hdlr-nonzero-reserved.avif":"b872dcd7b4f49c6808d6da109cf4fedc26a237c42e8529c5aa8f7130abaf40a9","tests/imir-missing-essential.avif":"b1226e4b1358528befbd3f1126b5caf0c5051b4354777b87e71f6001f3829f87","tests/invalid-avif-hdlr-name-multiple-nul.avif":"0d3e4a6ce42154ee288c18339c2b59ff2104fd890cd2d616e5dbf26375a90e98","tests/irot-missing-essential.avif":"b7da1fc1d1b45bb1b7ca3494476e052f711d794a6d010df6870872ed8b9da10e","tests/lsel.avif":"ef8ba6827709f48cd45f749efb580129162d9599ea98f3363d2140957502d806","tests/multiple-extents.avif":"b5549ac68793e155a726d754e565cea0da03fa17833d3545f45c79e13f4c9360","tests/no-mif1.avif":"1442aa6ffaeb9512724287768bfd1850d3aa29a651ef05abb33e5dec2b3ee5c2","tests/overflow.rs":"16b591d8def1a155b3b997622f6ea255536870d99c3d8f97c51755b77a50de3c","tests/public.rs":"8918d5190a36c697445aa4b140a31cd3032582f1e504b4c2527f75a2155f80ae","tests/valid-alpha.avif":"9d417a35b9b62ad3ff66ffbc55f16552aacf821a092aa5ef4adff7e746bd4c2f","tests/valid-avif-colr-nclx-and-prof-and-rICC.avif":"ab6f5e786d26f8bcade5993f8b9cca3cd004a3d7fcec76e829f5d0f98cb18e7b","tests/valid-avif-colr-nclx-and-prof.avif":"0e982818de61869fcb85a2a4c2b7b8aeecb3053cbfdc6276987f91204998eefb","tests/valid-avif-colr-nclx-and-rICC.avif":"8530ef1305ff956a0c2912d0b3d1e0fc3a68cf3103e70b04cc2574530389b030","tests/valid-avif-colr-nclx.avif":"345ab58b7b1cb48aba2e21eb8dc5ab0a751a78a752ce1896c59b4bf361992f38","tests/valid-avif-colr-prof-and-rICC.avif":"1f0f085141106885bda78b0879c768818420d8196b39440a36578456a7d50a6c","tests/valid-avif-colr-prof.avif":"5d7aaefb5204ebe1cc296456866b8e46e023748b921a38ee56fd6c776a9733ff","tests/valid-avif-colr-rICC.avif":"e1c7b49bfad5904b484bd5118e6b33b78e2dc708a31a10fcbb0e4a373ed8dbb7","tests/valid.avif":"f0b33e09bf01232e0877df325f47986c0bee7764f2a81c9c908ae109e7dc63c4"},"package":null}
+--- a/third_party/rust/mp4parse/src/lib.rs
++++ b//third_party/rust/mp4parse/src/lib.rs
+@@ -3184,8 +3184,13 @@ macro_rules! impl_mul {
+             type Output = $output;
+
+             fn mul(self, rhs: $rhs) -> Self::Output {
+-                static_assertions::const_assert!(<$output>::MAX <= <$inner>::MAX as u64);
+-                static_assertions::const_assert!(<$lhs>::MAX * <$rhs>::MAX <= <$output>::MAX);
++                static_assertions::const_assert!(
++                    <$output as UpperBounded>::MAX <= <$inner>::MAX as u64
++                );
++                static_assertions::const_assert!(
++                    <$lhs as UpperBounded>::MAX * <$rhs as UpperBounded>::MAX
++                        <= <$output as UpperBounded>::MAX
++                );
+
+                 let lhs: $inner = self.get().into();
+                 let rhs: $inner = rhs.get().into();
diff --git a/nixpkgs/pkgs/applications/networking/browsers/firefox/no-buildconfig-ffx96.patch b/nixpkgs/pkgs/applications/networking/browsers/firefox/no-buildconfig-ffx96.patch
new file mode 100644
index 000000000000..51f9f0e354f2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/firefox/no-buildconfig-ffx96.patch
@@ -0,0 +1,27 @@
+diff --git a/docshell/base/nsAboutRedirector.cpp b/docshell/base/nsAboutRedirector.cpp
+index e7be91a248..5eb98534ee 100644
+--- a/docshell/base/nsAboutRedirector.cpp
++++ b/docshell/base/nsAboutRedirector.cpp
+@@ -66,9 +66,6 @@ static const RedirEntry kRedirMap[] = {
+     {"about", "chrome://global/content/aboutAbout.html", 0},
+     {"addons", "chrome://mozapps/content/extensions/aboutaddons.html",
+      nsIAboutModule::ALLOW_SCRIPT | nsIAboutModule::IS_SECURE_CHROME_UI},
+-    {"buildconfig", "chrome://global/content/buildconfig.html",
+-     nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT |
+-         nsIAboutModule::IS_SECURE_CHROME_UI},
+     {"checkerboard", "chrome://global/content/aboutCheckerboard.html",
+      nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT |
+          nsIAboutModule::ALLOW_SCRIPT},
+diff --git a/toolkit/content/jar.mn b/toolkit/content/jar.mn
+index 74c0ae8f34..a5d9645a96 100644
+--- a/toolkit/content/jar.mn
++++ b/toolkit/content/jar.mn
+@@ -41,8 +41,6 @@ toolkit.jar:
+    content/global/plugins.css
+    content/global/plugins.js
+ #endif
+-*   content/global/buildconfig.html
+-   content/global/buildconfig.css
+    content/global/contentAreaUtils.js
+    content/global/datepicker.xhtml
+ #ifndef MOZ_FENNEC
diff --git a/nixpkgs/pkgs/applications/networking/browsers/firefox/packages.nix b/nixpkgs/pkgs/applications/networking/browsers/firefox/packages.nix
new file mode 100644
index 000000000000..2d05c4699348
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/firefox/packages.nix
@@ -0,0 +1,119 @@
+{ stdenv, lib, callPackage, fetchurl, fetchpatch, nixosTests, buildMozillaMach }:
+
+{
+  firefox = buildMozillaMach rec {
+    pname = "firefox";
+    version = "117.0.1";
+    src = fetchurl {
+      url = "mirror://mozilla/firefox/releases/${version}/source/firefox-${version}.source.tar.xz";
+      sha512 = "1583b0ad3b3b17c59bfbfb3e416074766327d0b926ef4f6c6b1e3b2d7cf6a18dec592b7d17fab9493ba1506f3540a02277096d28616dd29b6e7b9e93905f2071";
+    };
+
+    meta = {
+      changelog = "https://www.mozilla.org/en-US/firefox/${version}/releasenotes/";
+      description = "A web browser built from Firefox source tree";
+      homepage = "http://www.mozilla.com/en-US/firefox/";
+      maintainers = with lib.maintainers; [ lovesegfault hexa ];
+      platforms = lib.platforms.unix;
+      badPlatforms = lib.platforms.darwin;
+      broken = stdenv.buildPlatform.is32bit; # since Firefox 60, build on 32-bit platforms fails with "out of memory".
+                                             # not in `badPlatforms` because cross-compilation on 64-bit machine might work.
+      maxSilent = 14400; # 4h, double the default of 7200s (c.f. #129212, #129115)
+      license = lib.licenses.mpl20;
+      mainProgram = "firefox";
+    };
+    tests = [ nixosTests.firefox ];
+    updateScript = callPackage ./update.nix {
+      attrPath = "firefox-unwrapped";
+    };
+  };
+
+  firefox-beta = buildMozillaMach rec {
+    pname = "firefox-beta";
+    version = "118.0b7";
+    applicationName = "Mozilla Firefox Beta";
+    src = fetchurl {
+      url = "mirror://mozilla/firefox/releases/${version}/source/firefox-${version}.source.tar.xz";
+      sha512 = "17dc6dbfe1c3085a7c85d53d7980660471253e64d081a01e59d0273b75c4000476bad31fe155c976a18c561c09c21ae9a95775c81bb99c5a53bea89f79b07cfb";
+    };
+
+    meta = {
+      description = "A web browser built from Firefox Beta Release source tree";
+      homepage = "http://www.mozilla.com/en-US/firefox/";
+      maintainers = with lib.maintainers; [ jopejoe1 ];
+      platforms = lib.platforms.unix;
+      badPlatforms = lib.platforms.darwin;
+      broken = stdenv.buildPlatform.is32bit; # since Firefox 60, build on 32-bit platforms fails with "out of memory".
+                                             # not in `badPlatforms` because cross-compilation on 64-bit machine might work.
+      maxSilent = 14400; # 4h, double the default of 7200s (c.f. #129212, #129115)
+      license = lib.licenses.mpl20;
+      mainProgram = "firefox";
+    };
+    tests = [ nixosTests.firefox-beta ];
+    updateScript = callPackage ./update.nix {
+      attrPath = "firefox-beta-unwrapped";
+      versionSuffix = "b[0-9]*";
+    };
+  };
+
+  firefox-devedition = (buildMozillaMach rec {
+    pname = "firefox-devedition";
+    version = "118.0b7";
+    applicationName = "Mozilla Firefox Developer Edition";
+    branding = "browser/branding/aurora";
+    src = fetchurl {
+      url = "mirror://mozilla/devedition/releases/${version}/source/firefox-${version}.source.tar.xz";
+      sha512 = "636df06a41bba9909c50a1c433a6d14d42573cfa8ba28e57b87ed709fb06d81c1fcf4a24a8e1c794b6b7eb894a72e188d5e91bb46ce589a3438c8b75acb6e812";
+    };
+
+    meta = {
+      description = "A web browser built from Firefox Developer Edition source tree";
+      homepage = "http://www.mozilla.com/en-US/firefox/";
+      maintainers = with lib.maintainers; [ jopejoe1 ];
+      platforms = lib.platforms.unix;
+      badPlatforms = lib.platforms.darwin;
+      broken = stdenv.buildPlatform.is32bit; # since Firefox 60, build on 32-bit platforms fails with "out of memory".
+                                             # not in `badPlatforms` because cross-compilation on 64-bit machine might work.
+      maxSilent = 14400; # 4h, double the default of 7200s (c.f. #129212, #129115)
+      license = lib.licenses.mpl20;
+      mainProgram = "firefox";
+    };
+    tests = [ nixosTests.firefox-devedition ];
+    updateScript = callPackage ./update.nix {
+      attrPath = "firefox-devedition-unwrapped";
+      versionSuffix = "b[0-9]*";
+      baseUrl = "https://archive.mozilla.org/pub/devedition/releases/";
+    };
+  }).overrideAttrs (prev: {
+    env.MOZ_REQUIRE_SIGNING = "";
+  });
+
+  firefox-esr-115 = buildMozillaMach rec {
+    pname = "firefox-esr-115";
+    version = "115.2.1esr";
+    applicationName = "Mozilla Firefox ESR";
+    src = fetchurl {
+      url = "mirror://mozilla/firefox/releases/${version}/source/firefox-${version}.source.tar.xz";
+      sha512 = "5f9ff96996e3c482fa4d2e2861fdf14d2154bf0277d412bf9c9435204c7e2e2539ce7ef0891d8dafc74d5a12650a5ccd33d79547aa1bbb2c2a0972aaeb755edf";
+    };
+
+    meta = {
+      changelog = "https://www.mozilla.org/en-US/firefox/${lib.removeSuffix "esr" version}/releasenotes/";
+      description = "A web browser built from Firefox Extended Support Release source tree";
+      homepage = "http://www.mozilla.com/en-US/firefox/";
+      maintainers = with lib.maintainers; [ hexa ];
+      platforms = lib.platforms.unix;
+      badPlatforms = lib.platforms.darwin;
+      broken = stdenv.buildPlatform.is32bit; # since Firefox 60, build on 32-bit platforms fails with "out of memory".
+                                             # not in `badPlatforms` because cross-compilation on 64-bit machine might work.
+      license = lib.licenses.mpl20;
+      mainProgram = "firefox";
+    };
+    tests = [ nixosTests.firefox-esr-115 ];
+    updateScript = callPackage ./update.nix {
+      attrPath = "firefox-esr-115-unwrapped";
+      versionPrefix = "115";
+      versionSuffix = "esr";
+    };
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/firefox/update.nix b/nixpkgs/pkgs/applications/networking/browsers/firefox/update.nix
new file mode 100644
index 000000000000..46e3a5cb4a95
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/firefox/update.nix
@@ -0,0 +1,48 @@
+{ writeScript
+, lib
+, xidel
+, common-updater-scripts
+, coreutils
+, gnused
+, gnugrep
+, curl
+, gnupg
+, attrPath
+, runtimeShell
+, baseUrl ? "https://archive.mozilla.org/pub/firefox/releases/"
+, versionPrefix ? ""
+, versionSuffix ? ""
+, versionKey ? "version"
+}:
+
+writeScript "update-${attrPath}" ''
+  #!${runtimeShell}
+  PATH=${lib.makeBinPath [ common-updater-scripts coreutils curl gnugrep gnupg gnused xidel ]}
+
+  set -eux
+  HOME=`mktemp -d`
+  export GNUPGHOME=`mktemp -d`
+  gpg --receive-keys ADD7079479700DCADFDD5337E36D3B13F3D93274
+
+  url=${baseUrl}
+
+  # retriving latest released version
+  #  - extracts all links from the $url
+  #  - extracts lines only with number and dots followed by a slash
+  #  - removes trailing slash
+  #  - sorts everything with semver in mind
+  #  - picks up latest release
+  version=`xidel -s $url --extract "//a" | \
+           grep "^${versionPrefix}[0-9.]*${versionSuffix}/$" | \
+           sed s/[/]$// | \
+           sort --version-sort | \
+           tail -n 1`
+
+  curl --silent --show-error -o "$HOME"/shasums "$url$version/SHA512SUMS"
+  curl --silent --show-error -o "$HOME"/shasums.asc "$url$version/SHA512SUMS.asc"
+  gpgv --keyring="$GNUPGHOME"/pubring.kbx "$HOME"/shasums.asc "$HOME"/shasums
+
+  hash=$(grep '\.source\.tar\.xz$' "$HOME"/shasums | grep '^[^ ]*' -o)
+
+  update-source-version ${attrPath} "$version" "$hash" "" --version-key=${versionKey}
+''
diff --git a/nixpkgs/pkgs/applications/networking/browsers/firefox/wrapper.nix b/nixpkgs/pkgs/applications/networking/browsers/firefox/wrapper.nix
new file mode 100644
index 000000000000..e909b15f77ae
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/firefox/wrapper.nix
@@ -0,0 +1,412 @@
+{ stdenv, lib, makeDesktopItem, makeWrapper, makeBinaryWrapper, lndir, config
+, buildPackages
+, jq, xdg-utils, writeText
+
+## various stuff that can be plugged in
+, ffmpeg_5, xorg, alsa-lib, libpulseaudio, libcanberra-gtk3, libglvnd, libnotify, opensc
+, gnome/*.gnome-shell*/
+, browserpass, gnome-browser-connector, uget-integrator, plasma5Packages, bukubrow, pipewire
+, tridactyl-native
+, fx-cast-bridge
+, udev
+, libkrb5
+, libva
+, mesa # firefox wants gbm for drm+dmabuf
+, cups
+, pciutils
+, sndio
+, libjack2
+, speechd
+}:
+
+## configurability of the wrapper itself
+
+browser:
+
+let
+  wrapper =
+    { applicationName ? browser.binaryName or (lib.getName browser)
+    , pname ? applicationName
+    , version ? lib.getVersion browser
+    , desktopName ? # applicationName with first letter capitalized
+      (lib.toUpper (lib.substring 0 1 applicationName) + lib.substring 1 (-1) applicationName)
+    , nameSuffix ? ""
+    , icon ? applicationName
+    , wmClass ? applicationName
+    , extraNativeMessagingHosts ? []
+    , pkcs11Modules ? []
+    , useGlvnd ? true
+    , cfg ? config.${applicationName} or {}
+
+    ## Following options are needed for extra prefs & policies
+    # For more information about anti tracking (german website)
+    # visit https://wiki.kairaven.de/open/app/firefox
+    , extraPrefs ? ""
+    , extraPrefsFiles ? []
+    # For more information about policies visit
+    # https://github.com/mozilla/policy-templates#enterprisepoliciesenabled
+    , extraPolicies ? {}
+    , extraPoliciesFiles ? []
+    , libName ? browser.libName or "firefox" # Important for tor package or the like
+    , nixExtensions ? null
+    }:
+
+    let
+      ffmpegSupport = browser.ffmpegSupport or false;
+      gssSupport = browser.gssSupport or false;
+      alsaSupport = browser.alsaSupport or false;
+      pipewireSupport = browser.pipewireSupport or false;
+      sndioSupport = browser.sndioSupport or false;
+      jackSupport = browser.jackSupport or false;
+      # PCSC-Lite daemon (services.pcscd) also must be enabled for firefox to access smartcards
+      smartcardSupport = cfg.smartcardSupport or false;
+
+      nativeMessagingHosts =
+        [ ]
+          ++ lib.optional (cfg.enableBrowserpass or false) (lib.getBin browserpass)
+          ++ lib.optional (cfg.enableBukubrow or false) bukubrow
+          ++ lib.optional (cfg.enableTridactylNative or false) tridactyl-native
+          ++ lib.optional (cfg.enableGnomeExtensions or false) gnome-browser-connector
+          ++ lib.optional (cfg.enableUgetIntegrator or false) uget-integrator
+          ++ lib.optional (cfg.enablePlasmaBrowserIntegration or false) plasma5Packages.plasma-browser-integration
+          ++ lib.optional (cfg.enableFXCastBridge or false) fx-cast-bridge
+          ++ extraNativeMessagingHosts
+        ;
+      libs =   lib.optionals stdenv.isLinux [ udev libva mesa libnotify xorg.libXScrnSaver cups pciutils ]
+            ++ lib.optional pipewireSupport pipewire
+            ++ lib.optional ffmpegSupport ffmpeg_5
+            ++ lib.optional gssSupport libkrb5
+            ++ lib.optional useGlvnd libglvnd
+            ++ lib.optionals (cfg.enableQuakeLive or false)
+            (with xorg; [ stdenv.cc libX11 libXxf86dga libXxf86vm libXext libXt alsa-lib zlib ])
+            ++ lib.optional (config.pulseaudio or true) libpulseaudio
+            ++ lib.optional alsaSupport alsa-lib
+            ++ lib.optional sndioSupport sndio
+            ++ lib.optional jackSupport libjack2
+            ++ lib.optional smartcardSupport opensc
+            ++ lib.optional (cfg.speechSynthesisSupport or false) speechd
+            ++ pkcs11Modules;
+      gtk_modules = [ libcanberra-gtk3 ];
+
+      launcherName = "${applicationName}${nameSuffix}";
+
+      #########################
+      #                       #
+      #   EXTRA PREF CHANGES  #
+      #                       #
+      #########################
+      policiesJson = writeText "policies.json" (builtins.toJSON enterprisePolicies);
+
+      usesNixExtensions = nixExtensions != null;
+
+      nameArray = builtins.map(a: a.name) (lib.optionals usesNixExtensions nixExtensions);
+
+      requiresSigning = browser ? MOZ_REQUIRE_SIGNING
+                     -> toString browser.MOZ_REQUIRE_SIGNING != "";
+
+      # Check that every extension has a unqiue .name attribute
+      # and an extid attribute
+      extensions = if nameArray != (lib.unique nameArray) then
+        throw "Firefox addon name needs to be unique"
+      else if requiresSigning && !lib.hasSuffix "esr" browser.name then
+        throw "Nix addons are only supported without signature enforcement (eg. Firefox ESR)"
+      else builtins.map (a:
+        if ! (builtins.hasAttr "extid" a) then
+        throw "nixExtensions has an invalid entry. Missing extid attribute. Please use fetchfirefoxaddon"
+        else
+        a
+      ) (lib.optionals usesNixExtensions nixExtensions);
+
+      enterprisePolicies =
+      {
+        policies = {
+          DisableAppUpdate = true;
+        } //
+        lib.optionalAttrs usesNixExtensions {
+          ExtensionSettings = {
+            "*" = {
+              blocked_install_message = "You can't have manual extension mixed with nix extensions";
+              installation_mode = "blocked";
+            };
+          } // lib.foldr (e: ret:
+            ret // {
+              "${e.extid}" = {
+                installation_mode = "allowed";
+              };
+            }
+          ) {} extensions;
+
+          Extensions = {
+            Install = lib.foldr (e: ret:
+              ret ++ [ "${e.outPath}/${e.extid}.xpi" ]
+            ) [] extensions;
+          };
+        } // lib.optionalAttrs smartcardSupport {
+          SecurityDevices = {
+            "OpenSC PKCS#11 Module" = "opensc-pkcs11.so";
+          };
+        }
+        // extraPolicies;
+      };
+
+      mozillaCfg = ''
+        // First line must be a comment
+
+        // Disables addon signature checking
+        // to be able to install addons that do not have an extid
+        // Security is maintained because only user whitelisted addons
+        // with a checksum can be installed
+        ${ lib.optionalString usesNixExtensions ''lockPref("xpinstall.signatures.required", false)'' };
+      '';
+
+      #############################
+      #                           #
+      #   END EXTRA PREF CHANGES  #
+      #                           #
+      #############################
+
+    in stdenv.mkDerivation {
+      inherit pname version;
+
+      desktopItem = makeDesktopItem ({
+        name = launcherName;
+        exec = "${launcherName} --name ${wmClass} %U";
+        inherit icon;
+        inherit desktopName;
+        startupNotify = true;
+        startupWMClass = wmClass;
+        terminal = false;
+      } // (if libName == "thunderbird"
+            then {
+              genericName = "Email Client";
+              comment = "Read and write e-mails or RSS feeds, or manage tasks on calendars.";
+              categories = [
+                "Network" "Chat" "Email" "Feed" "GTK" "News"
+              ];
+              keywords = [
+                "mail" "email" "e-mail" "messages" "rss" "calendar"
+                "address book" "addressbook" "chat"
+              ];
+              mimeTypes = [
+                "message/rfc822"
+                "x-scheme-handler/mailto"
+                "text/calendar"
+                "text/x-vcard"
+              ];
+              actions = {
+                profile-manager-window = {
+                  name = "Profile Manager";
+                  exec = "${launcherName} --ProfileManager";
+                };
+              };
+            }
+            else {
+              genericName = "Web Browser";
+              categories = [ "Network" "WebBrowser" ];
+              mimeTypes = [
+                "text/html"
+                "text/xml"
+                "application/xhtml+xml"
+                "application/vnd.mozilla.xul+xml"
+                "x-scheme-handler/http"
+                "x-scheme-handler/https"
+              ];
+              actions = {
+                new-window = {
+                  name = "New Window";
+                  exec = "${launcherName} --new-window %U";
+                };
+                new-private-window = {
+                  name = "New Private Window";
+                  exec = "${launcherName} --private-window %U";
+                };
+                profile-manager-window = {
+                  name = "Profile Manager";
+                  exec = "${launcherName} --ProfileManager";
+                };
+              };
+            }));
+
+      nativeBuildInputs = [ makeWrapper lndir jq ];
+      buildInputs = [ browser.gtk3 ];
+
+
+      buildCommand = ''
+        if [ ! -x "${browser}/bin/${applicationName}" ]
+        then
+            echo "cannot find executable file \`${browser}/bin/${applicationName}'"
+            exit 1
+        fi
+
+        #########################
+        #                       #
+        #   EXTRA PREF CHANGES  #
+        #                       #
+        #########################
+        # Link the runtime. The executable itself has to be copied,
+        # because it will resolve paths relative to its true location.
+        # Any symbolic links have to be replicated as well.
+        cd "${browser}"
+        find . -type d -exec mkdir -p "$out"/{} \;
+
+        find . -type f \( -not -name "${applicationName}" \) -exec ln -sT "${browser}"/{} "$out"/{} \;
+
+        find . -type f \( -name "${applicationName}" -o -name "${applicationName}-bin" \) -print0 | while read -d $'\0' f; do
+          cp -P --no-preserve=mode,ownership --remove-destination "${browser}/$f" "$out/$f"
+          chmod a+rwx "$out/$f"
+        done
+
+        # fix links and absolute references
+
+        find . -type l -print0 | while read -d $'\0' l; do
+          target="$(readlink "$l")"
+          target=''${target/#"${browser}"/"$out"}
+          ln -sfT "$target" "$out/$l"
+        done
+
+        cd "$out"
+
+        # create the wrapper
+
+        executablePrefix="$out/bin"
+        executablePath="$executablePrefix/${applicationName}"
+        oldWrapperArgs=()
+
+        if [[ -L $executablePath ]]; then
+          # Symbolic link: wrap the link's target.
+          oldExe="$(readlink -v --canonicalize-existing "$executablePath")"
+          rm "$executablePath"
+        elif wrapperCmd=$(${buildPackages.makeBinaryWrapper.extractCmd} "$executablePath"); [[ $wrapperCmd ]]; then
+          # If the executable is a binary wrapper, we need to update its target to
+          # point to $out, but we can't just edit the binary in-place because of length
+          # issues. So we extract the command used to create the wrapper and add the
+          # arguments to our wrapper.
+          parseMakeCWrapperCall() {
+            shift # makeCWrapper
+            oldExe=$1; shift
+            oldWrapperArgs=("$@")
+          }
+          eval "parseMakeCWrapperCall ''${wrapperCmd//"${browser}"/"$out"}"
+          rm "$executablePath"
+        else
+          if read -rn2 shebang < "$executablePath" && [[ $shebang == '#!' ]]; then
+            # Shell wrapper: patch in place to point to $out.
+            sed -i "s@${browser}@$out@g" "$executablePath"
+          fi
+          # Suffix the executable with -old, because -wrapped might already be used by the old wrapper.
+          oldExe="$executablePrefix/.${applicationName}"-old
+          mv "$executablePath" "$oldExe"
+        fi
+
+        # make xdg-open overrideable at runtime
+        makeWrapper "$oldExe" \
+          "''${executablePath}${nameSuffix}" \
+            --prefix LD_LIBRARY_PATH ':' "$libs" \
+            --suffix-each GTK_PATH ':' "$gtk_modules" \
+            ${lib.optionalString (!xdg-utils.meta.broken) "--suffix PATH ':' \"${xdg-utils}/bin\""} \
+            --suffix PATH ':' "$out/bin" \
+            --set MOZ_APP_LAUNCHER "${launcherName}" \
+            --set MOZ_SYSTEM_DIR "$out/lib/mozilla" \
+            --set MOZ_LEGACY_PROFILES 1 \
+            --set MOZ_ALLOW_DOWNGRADE 1 \
+            --prefix XDG_DATA_DIRS : "$GSETTINGS_SCHEMAS_PATH" \
+            --suffix XDG_DATA_DIRS : '${gnome.adwaita-icon-theme}/share' \
+            --set-default MOZ_ENABLE_WAYLAND 1 \
+            "''${oldWrapperArgs[@]}"
+        #############################
+        #                           #
+        #   END EXTRA PREF CHANGES  #
+        #                           #
+        #############################
+
+        if [ -e "${browser}/share/icons" ]; then
+            mkdir -p "$out/share"
+            ln -s "${browser}/share/icons" "$out/share/icons"
+        else
+            for res in 16 32 48 64 128; do
+            mkdir -p "$out/share/icons/hicolor/''${res}x''${res}/apps"
+            icon=$( find "${browser}/lib/" -name "default''${res}.png" )
+              if [ -e "$icon" ]; then ln -s "$icon" \
+                "$out/share/icons/hicolor/''${res}x''${res}/apps/${icon}.png"
+              fi
+            done
+        fi
+
+        install -D -t $out/share/applications $desktopItem/share/applications/*
+
+        mkdir -p $out/lib/mozilla/native-messaging-hosts
+        for ext in ${toString nativeMessagingHosts}; do
+            ln -sLt $out/lib/mozilla/native-messaging-hosts $ext/lib/mozilla/native-messaging-hosts/*
+        done
+
+        mkdir -p $out/lib/mozilla/pkcs11-modules
+        for ext in ${toString pkcs11Modules}; do
+            ln -sLt $out/lib/mozilla/pkcs11-modules $ext/lib/mozilla/pkcs11-modules/*
+        done
+
+
+        #########################
+        #                       #
+        #   EXTRA PREF CHANGES  #
+        #                       #
+        #########################
+        # user customization
+        mkdir -p $out/lib/${libName}
+
+        # creating policies.json
+        mkdir -p "$out/lib/${libName}/distribution"
+
+        POL_PATH="$out/lib/${libName}/distribution/policies.json"
+        rm -f "$POL_PATH"
+        cat ${policiesJson} >> "$POL_PATH"
+
+        extraPoliciesFiles=(${builtins.toString extraPoliciesFiles})
+        for extraPoliciesFile in "''${extraPoliciesFiles[@]}"; do
+          jq -s '.[0] + .[1]' "$POL_PATH" $extraPoliciesFile > .tmp.json
+          mv .tmp.json "$POL_PATH"
+        done
+
+        # preparing for autoconfig
+        mkdir -p "$out/lib/${libName}/defaults/pref"
+
+        echo 'pref("general.config.filename", "mozilla.cfg");' > "$out/lib/${libName}/defaults/pref/autoconfig.js"
+        echo 'pref("general.config.obscure_value", 0);' >> "$out/lib/${libName}/defaults/pref/autoconfig.js"
+
+        cat > "$out/lib/${libName}/mozilla.cfg" << EOF
+        ${mozillaCfg}
+        EOF
+
+        extraPrefsFiles=(${builtins.toString extraPrefsFiles})
+        for extraPrefsFile in "''${extraPrefsFiles[@]}"; do
+          cat "$extraPrefsFile" >> "$out/lib/${libName}/mozilla.cfg"
+        done
+
+        cat >> "$out/lib/${libName}/mozilla.cfg" << EOF
+        ${extraPrefs}
+        EOF
+
+        mkdir -p $out/lib/${libName}/distribution/extensions
+
+        #############################
+        #                           #
+        #   END EXTRA PREF CHANGES  #
+        #                           #
+        #############################
+      '';
+
+      preferLocalBuild = true;
+
+      libs = lib.makeLibraryPath libs + ":" + lib.makeSearchPathOutput "lib" "lib64" libs;
+      gtk_modules = map (x: x + x.gtkModule) gtk_modules;
+
+      passthru = { unwrapped = browser; };
+
+      disallowedRequisites = [ stdenv.cc ];
+
+      meta = browser.meta // {
+        inherit (browser.meta) description;
+        hydraPlatforms = [];
+        priority = (browser.meta.priority or 0) - 1; # prefer wrapper over the package
+      };
+    };
+in lib.makeOverridable wrapper
diff --git a/nixpkgs/pkgs/applications/networking/browsers/gmni/default.nix b/nixpkgs/pkgs/applications/networking/browsers/gmni/default.nix
new file mode 100644
index 000000000000..4bc4e360120f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/gmni/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, lib, fetchFromSourcehut, bearssl, scdoc }:
+
+stdenv.mkDerivation rec {
+  pname = "gmni";
+  version = "1.0";
+
+  src = fetchFromSourcehut {
+    owner = "~sircmpwn";
+    repo = "gmni";
+    rev = version;
+    sha256 = "sha256-3MFNAI/SfFigNfitfFs3o9kkz7JeEflMHiH7iJpLfi4=";
+  };
+
+  nativeBuildInputs = [ scdoc ];
+  buildInputs = [ bearssl ];
+
+  meta = with lib; {
+    description = "A Gemini client";
+    homepage = "https://git.sr.ht/~sircmpwn/gmni";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ bsima jb55 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/google-chrome/default.nix b/nixpkgs/pkgs/applications/networking/browsers/google-chrome/default.nix
new file mode 100644
index 000000000000..cd770b18b71a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/google-chrome/default.nix
@@ -0,0 +1,174 @@
+{ lib, stdenv, patchelf, makeWrapper
+
+# Linked dynamic libraries.
+, glib, fontconfig, freetype, pango, cairo, libX11, libXi, atk, nss, nspr
+, libXcursor, libXext, libXfixes, libXrender, libXScrnSaver, libXcomposite, libxcb
+, alsa-lib, libXdamage, libXtst, libXrandr, libxshmfence, expat, cups
+, dbus, gtk3, gtk4, gdk-pixbuf, gcc-unwrapped, at-spi2-atk, at-spi2-core
+, libkrb5, libdrm, libglvnd, mesa
+, libxkbcommon, pipewire, wayland # ozone/wayland
+
+# Command line programs
+, coreutils
+
+# command line arguments which are always set e.g "--disable-gpu"
+, commandLineArgs ? ""
+
+# Will crash without.
+, systemd
+
+# Loaded at runtime.
+, libexif, pciutils
+
+# Additional dependencies according to other distros.
+## Ubuntu
+, liberation_ttf, curl, util-linux, xdg-utils, wget
+## Arch Linux.
+, flac, harfbuzz, icu, libpng, libopus, snappy, speechd
+## Gentoo
+, bzip2, libcap
+
+# Which distribution channel to use.
+, channel ? "stable"
+
+# Necessary for USB audio devices.
+, pulseSupport ? true, libpulseaudio
+
+# Only needed for getting information about upstream binaries
+, chromium
+
+, gsettings-desktop-schemas
+, gnome
+
+# For video acceleration via VA-API (--enable-features=VaapiVideoDecoder)
+, libvaSupport ? true, libva
+
+# For Vulkan support (--enable-features=Vulkan)
+, addOpenGLRunpath
+}:
+
+let
+  opusWithCustomModes = libopus.override {
+    withCustomModes = true;
+  };
+
+  version = chromium.upstream-info.version;
+
+  deps = [
+    glib fontconfig freetype pango cairo libX11 libXi atk nss nspr
+    libXcursor libXext libXfixes libXrender libXScrnSaver libXcomposite libxcb
+    alsa-lib libXdamage libXtst libXrandr libxshmfence expat cups
+    dbus gdk-pixbuf gcc-unwrapped.lib
+    systemd
+    libexif pciutils
+    liberation_ttf curl util-linux wget
+    flac harfbuzz icu libpng opusWithCustomModes snappy speechd
+    bzip2 libcap at-spi2-atk at-spi2-core
+    libkrb5 libdrm libglvnd mesa coreutils
+    libxkbcommon pipewire wayland
+  ] ++ lib.optional pulseSupport libpulseaudio
+    ++ lib.optional libvaSupport libva
+    ++ [ gtk3 gtk4 ];
+
+  suffix = lib.optionalString (channel != "stable") "-${channel}";
+
+  crashpadHandlerBinary = if lib.versionAtLeast version "94"
+    then "chrome_crashpad_handler"
+    else "crashpad_handler";
+
+in stdenv.mkDerivation {
+  inherit version;
+
+  name = "google-chrome${suffix}-${version}";
+
+  src = chromium.chromeSrc;
+
+  nativeBuildInputs = [ patchelf makeWrapper ];
+  buildInputs = [
+    # needed for GSETTINGS_SCHEMAS_PATH
+    gsettings-desktop-schemas glib gtk3
+
+    # needed for XDG_ICON_DIRS
+    gnome.adwaita-icon-theme
+  ];
+
+  unpackPhase = ''
+    ar x $src
+    tar xf data.tar.xz
+  '';
+
+  rpath = lib.makeLibraryPath deps + ":" + lib.makeSearchPathOutput "lib" "lib64" deps;
+  binpath = lib.makeBinPath deps;
+
+  installPhase = ''
+    runHook preInstall
+
+    case ${channel} in
+      beta) appname=chrome-beta      dist=beta     ;;
+      dev)  appname=chrome-unstable  dist=unstable ;;
+      *)    appname=chrome           dist=stable   ;;
+    esac
+
+    exe=$out/bin/google-chrome-$dist
+
+    mkdir -p $out/bin $out/share
+
+    cp -a opt/* $out/share
+    cp -a usr/share/* $out/share
+
+
+    substituteInPlace $out/share/google/$appname/google-$appname \
+      --replace 'CHROME_WRAPPER' 'WRAPPER'
+    substituteInPlace $out/share/applications/google-$appname.desktop \
+      --replace /usr/bin/google-chrome-$dist $exe
+    substituteInPlace $out/share/gnome-control-center/default-apps/google-$appname.xml \
+      --replace /opt/google/$appname/google-$appname $exe
+    substituteInPlace $out/share/menu/google-$appname.menu \
+      --replace /opt $out/share \
+      --replace $out/share/google/$appname/google-$appname $exe
+
+    for icon_file in $out/share/google/chrome*/product_logo_[0-9]*.png; do
+      num_and_suffix="''${icon_file##*logo_}"
+      if [ $dist = "stable" ]; then
+        icon_size="''${num_and_suffix%.*}"
+      else
+        icon_size="''${num_and_suffix%_*}"
+      fi
+      logo_output_prefix="$out/share/icons/hicolor"
+      logo_output_path="$logo_output_prefix/''${icon_size}x''${icon_size}/apps"
+      mkdir -p "$logo_output_path"
+      mv "$icon_file" "$logo_output_path/google-$appname.png"
+    done
+
+    makeWrapper "$out/share/google/$appname/google-$appname" "$exe" \
+      --prefix LD_LIBRARY_PATH : "$rpath" \
+      --prefix PATH            : "$binpath" \
+      --suffix PATH            : "${lib.makeBinPath [ xdg-utils ]}" \
+      --prefix XDG_DATA_DIRS   : "$XDG_ICON_DIRS:$GSETTINGS_SCHEMAS_PATH:${addOpenGLRunpath.driverLink}/share" \
+      --set CHROME_WRAPPER  "google-chrome-$dist" \
+      --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}" \
+      --add-flags ${lib.escapeShellArg commandLineArgs}
+
+    for elf in $out/share/google/$appname/{chrome,chrome-sandbox,${crashpadHandlerBinary},nacl_helper}; do
+      patchelf --set-rpath $rpath $elf
+      patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $elf
+    done
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A freeware web browser developed by Google";
+    homepage = "https://www.google.com/chrome/browser/";
+    license = licenses.unfree;
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    maintainers = with maintainers; [ primeos ];
+    # Note from primeos: By updating Chromium I also update Google Chrome and
+    # will try to merge PRs and respond to issues but I'm not actually using
+    # Google Chrome.
+    platforms = [ "x86_64-linux" ];
+    mainProgram =
+      if (channel == "dev") then "google-chrome-unstable"
+      else "google-chrome-${channel}";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/kristall/default.nix b/nixpkgs/pkgs/applications/networking/browsers/kristall/default.nix
new file mode 100644
index 000000000000..1435d2472635
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/kristall/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, fetchFromGitHub, wrapQtAppsHook, qmake, qtmultimedia }:
+
+stdenv.mkDerivation rec {
+  pname = "kristall";
+  version = "0.3";
+
+  src = fetchFromGitHub {
+    owner = "MasterQ32";
+    repo = "kristall";
+    rev = "V${version}";
+    sha256 = "07nf7w6ilzs5g6isnvsmhh4qa1zsprgjyf0zy7rhpx4ikkj8c8zq";
+  };
+
+  postPatch = lib.optionalString stdenv.cc.isClang ''
+    sed -i '1i #include <errno.h>' src/browsertab.cpp
+  '';
+
+  nativeBuildInputs = [ wrapQtAppsHook qmake ];
+
+  buildInputs = [ qtmultimedia ];
+
+  qmakeFlags = [ "src/kristall.pro" ];
+
+  installPhase = if stdenv.isDarwin then ''
+    mkdir -p $out/Applications
+    mv kristall.app $out/Applications
+  '' else ''
+    install -Dt $out/bin kristall
+    install -D Kristall.desktop $out/share/applications/net.random-projects.kristall.desktop
+    install -D src/icons/kristall.svg $out/share/icons/hicolor/scalable/apps/net.random-projects.kristall.svg
+    for size in 16 32 64 128; do
+      install -D src/icons/kristall-''${size}.png $out/share/icons/hicolor/''${size}x''${size}/apps/net.random-projects.kristall.png
+    done
+  '';
+
+  meta = with lib; {
+    description =
+      "Graphical small-internet client, supports gemini, http, https, gopher, finger";
+    homepage = "https://random-projects.net/projects/kristall.gemini";
+    maintainers = with maintainers; [ ehmry ];
+    license = licenses.gpl3Only;
+    inherit (qtmultimedia.meta) platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/ladybird/default.nix b/nixpkgs/pkgs/applications/networking/browsers/ladybird/default.nix
new file mode 100644
index 000000000000..c29400c32fdf
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/ladybird/default.nix
@@ -0,0 +1,73 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, ninja
+, unzip
+, wrapQtAppsHook
+, libxcrypt
+, qtbase
+, nixosTests
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "ladybird";
+  version = "unstable-2023-01-17";
+
+  src = fetchFromGitHub {
+    owner = "SerenityOS";
+    repo = "serenity";
+    rev = "45e85d20b64862df119f643f24e2d500c76c58f3";
+    hash = "sha256-n2mLg9wNfdMGsJuGj+ukjto9qYjGOIz4cZjgvMGQUrY=";
+  };
+
+  sourceRoot = "${finalAttrs.src.name}/Ladybird";
+
+  postPatch = ''
+    substituteInPlace CMakeLists.txt \
+      --replace "MACOSX_BUNDLE TRUE" "MACOSX_BUNDLE FALSE"
+    # https://github.com/SerenityOS/serenity/issues/17062
+    substituteInPlace main.cpp \
+      --replace "./SQLServer/SQLServer" "$out/bin/SQLServer"
+    # https://github.com/SerenityOS/serenity/issues/10055
+    substituteInPlace ../Meta/Lagom/CMakeLists.txt \
+      --replace "@rpath" "$out/lib"
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    ninja
+    unzip
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    libxcrypt
+    qtbase
+  ];
+
+  cmakeFlags = [
+    # Disable network operations
+    "-DENABLE_TIME_ZONE_DATABASE_DOWNLOAD=false"
+    "-DENABLE_UNICODE_DATABASE_DOWNLOAD=false"
+  ];
+
+  env.NIX_CFLAGS_COMPILE = "-Wno-error";
+
+  # https://github.com/SerenityOS/serenity/issues/10055
+  postInstall = lib.optionalString stdenv.isDarwin ''
+    install_name_tool -add_rpath $out/lib $out/bin/ladybird
+  '';
+
+  passthru.tests = {
+    nixosTest = nixosTests.ladybird;
+  };
+
+  meta = with lib; {
+    description = "A browser using the SerenityOS LibWeb engine with a Qt GUI";
+    homepage = "https://github.com/awesomekling/ladybird";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ fgaz ];
+    platforms = platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/networking/browsers/lagrange/default.nix b/nixpkgs/pkgs/applications/networking/browsers/lagrange/default.nix
new file mode 100644
index 000000000000..3957d4c2a0d7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/lagrange/default.nix
@@ -0,0 +1,63 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, nix-update-script
+, cmake
+, pkg-config
+, fribidi
+, harfbuzz
+, libwebp
+, mpg123
+, SDL2
+, the-foundation
+, AppKit
+, zip
+, enableTUI ? false, ncurses, sealcurses
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "lagrange";
+  version = "1.16.7";
+
+  src = fetchFromGitHub {
+    owner = "skyjake";
+    repo = "lagrange";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-d9QmFXDDeYDR1KFtOyQKfaYvex8TFDiYJUrKEp7H5K8=";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config zip ];
+
+  buildInputs = [ the-foundation ]
+    ++ lib.optionals (!enableTUI) [ fribidi harfbuzz libwebp mpg123 SDL2 ]
+    ++ lib.optionals enableTUI [ ncurses sealcurses ]
+    ++ lib.optional stdenv.isDarwin AppKit;
+
+  cmakeFlags = lib.optionals enableTUI [
+    "-DENABLE_TUI=YES"
+    "-DENABLE_MPG123=NO"
+    "-DENABLE_WEBP=NO"
+    "-DENABLE_FRIBIDI=NO"
+    "-DENABLE_HARFBUZZ=NO"
+    "-DENABLE_POPUP_MENUS=NO"
+    "-DENABLE_IDLE_SLEEP=NO"
+    "-DCMAKE_INSTALL_DATADIR=${placeholder "out"}/share"
+  ];
+
+  installPhase = lib.optionalString (stdenv.isDarwin && !enableTUI) ''
+    mkdir -p $out/Applications
+    mv Lagrange.app $out/Applications
+  '';
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    description = "A Beautiful Gemini Client";
+    homepage = "https://gmi.skyjake.fi/lagrange/";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ sikmir ];
+    platforms = platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/networking/browsers/librewolf/default.nix b/nixpkgs/pkgs/applications/networking/browsers/librewolf/default.nix
new file mode 100644
index 000000000000..4dde2d57d7e0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/librewolf/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, lib, callPackage, buildMozillaMach, nixosTests }:
+
+let
+  librewolf-src = callPackage ./librewolf.nix { };
+in
+((buildMozillaMach rec {
+  pname = "librewolf";
+  applicationName = "LibreWolf";
+  binaryName = "librewolf";
+  version = librewolf-src.packageVersion;
+  src = librewolf-src.firefox;
+  inherit (librewolf-src) extraConfigureFlags extraPatches extraPostPatch extraPassthru;
+
+  meta = {
+    description = "A fork of Firefox, focused on privacy, security and freedom";
+    homepage = "https://librewolf.net/";
+    maintainers = with lib.maintainers; [ squalus ];
+    platforms = lib.platforms.unix;
+    badPlatforms = lib.platforms.darwin;
+    broken = stdenv.buildPlatform.is32bit; # since Firefox 60, build on 32-bit platforms fails with "out of memory".
+                                           # not in `badPlatforms` because cross-compilation on 64-bit machine might work.
+    maxSilent = 14400; # 4h, double the default of 7200s (c.f. #129212, #129115)
+    license = lib.licenses.mpl20;
+  };
+  tests = [ nixosTests.librewolf ];
+  updateScript = callPackage ./update.nix {
+    attrPath = "librewolf-unwrapped";
+  };
+}).override {
+  crashreporterSupport = false;
+  enableOfficialBranding = false;
+}).overrideAttrs (prev: {
+  MOZ_REQUIRE_SIGNING = "";
+})
diff --git a/nixpkgs/pkgs/applications/networking/browsers/librewolf/librewolf.nix b/nixpkgs/pkgs/applications/networking/browsers/librewolf/librewolf.nix
new file mode 100644
index 000000000000..baa76488f661
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/librewolf/librewolf.nix
@@ -0,0 +1,41 @@
+{ callPackage }:
+let
+  src = callPackage ./src.nix { };
+in
+rec {
+
+  inherit (src) packageVersion firefox source;
+
+  extraPatches = [ ];
+
+  extraConfigureFlags = [
+    "--with-app-name=librewolf"
+    "--with-app-basename=LibreWolf"
+    "--with-branding=browser/branding/librewolf"
+    "--with-distribution-id=io.gitlab.librewolf-community"
+    "--with-unsigned-addon-scopes=app,system"
+    "--allow-addon-sideload"
+  ];
+
+  extraPostPatch = ''
+    while read patch_name; do
+      echo "applying LibreWolf patch: $patch_name"
+      patch -p1 < ${source}/$patch_name
+    done <${source}/assets/patches.txt
+
+    cp -r ${source}/themes/browser .
+    cp ${source}/assets/search-config.json services/settings/dumps/main/search-config.json
+    sed -i '/MOZ_SERVICES_HEALTHREPORT/ s/True/False/' browser/moz.configure
+    sed -i '/MOZ_NORMANDY/ s/True/False/' browser/moz.configure
+  '';
+
+  extraPrefsFiles = [ "${source}/submodules/settings/librewolf.cfg" ];
+
+  extraPoliciesFiles = [ "${source}/submodules/settings/distribution/policies.json" ];
+
+  extraPassthru = {
+    librewolf = { inherit src extraPatches; };
+    inherit extraPrefsFiles extraPoliciesFiles;
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/networking/browsers/librewolf/src.json b/nixpkgs/pkgs/applications/networking/browsers/librewolf/src.json
new file mode 100644
index 000000000000..c9ecd3de9219
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/librewolf/src.json
@@ -0,0 +1,11 @@
+{
+  "packageVersion": "116.0.3-1",
+  "source": {
+    "rev": "116.0.3-1",
+    "sha256": "19l5nny96p89xm8c9f5m1435sglshn7izmjnj338c8qh217zxiyq"
+  },
+  "firefox": {
+    "version": "116.0.3",
+    "sha512": "194c50e9ba5a918c37fbef8cd72ffb98e5e9f51955d8172b6666a758b5f20777ca0a7f79dff0328305fb6dafefb102ab002e326f47d0965a4dc6d3e9287c42b9"
+  }
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/librewolf/src.nix b/nixpkgs/pkgs/applications/networking/browsers/librewolf/src.nix
new file mode 100644
index 000000000000..a2100ac2ab8b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/librewolf/src.nix
@@ -0,0 +1,18 @@
+{ lib, fetchurl, fetchFromGitLab }:
+let src = lib.importJSON ./src.json;
+in
+{
+  inherit (src) packageVersion;
+  source = fetchFromGitLab {
+    owner = "librewolf-community";
+    repo = "browser/source";
+    fetchSubmodules = true;
+    inherit (src.source) rev sha256;
+  };
+  firefox = fetchurl {
+    url =
+      "mirror://mozilla/firefox/releases/${src.firefox.version}/source/firefox-${src.firefox.version}.source.tar.xz";
+    inherit (src.firefox) sha512;
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/networking/browsers/librewolf/update.nix b/nixpkgs/pkgs/applications/networking/browsers/librewolf/update.nix
new file mode 100644
index 000000000000..b8bc64afafe0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/librewolf/update.nix
@@ -0,0 +1,65 @@
+{ writeScript
+, lib
+, coreutils
+, gnused
+, gnugrep
+, curl
+, gnupg
+, jq
+, nix-prefetch-git
+, moreutils
+, runtimeShell
+, ...
+}:
+
+writeScript "update-librewolf" ''
+  #!${runtimeShell}
+  PATH=${lib.makeBinPath [ coreutils curl gnugrep gnupg gnused jq moreutils nix-prefetch-git ]}
+  set -euo pipefail
+
+  latestTag=$(curl https://gitlab.com/api/v4/projects/librewolf-community%2Fbrowser%2Fsource/repository/tags?per_page=1 | jq -r .[0].name)
+  echo "latestTag=$latestTag"
+
+  srcJson=pkgs/applications/networking/browsers/librewolf/src.json
+  localRev=$(jq -r .source.rev < $srcJson)
+  echo "localRev=$localRev"
+
+  if [ "$localRev" == "$latestTag" ]; then
+    exit 0
+  fi
+
+  prefetchOut=$(mktemp)
+  repoUrl=https://gitlab.com/librewolf-community/browser/source.git/
+  nix-prefetch-git $repoUrl --quiet --rev $latestTag --fetch-submodules > $prefetchOut
+  srcDir=$(jq -r .path < $prefetchOut)
+  srcHash=$(jq -r .sha256 < $prefetchOut)
+
+  ffVersion=$(<$srcDir/version)
+  lwRelease=$(<$srcDir/release)
+  lwVersion="$ffVersion-$lwRelease"
+  echo "lwVersion=$lwVersion"
+  echo "ffVersion=$ffVersion"
+  if [ "$lwVersion" != "$latestTag" ]; then
+    echo "error: Tag name does not match the computed LibreWolf version"
+    exit 1
+  fi
+
+  HOME=$(mktemp -d)
+  export GNUPGHOME=$(mktemp -d)
+  gpg --receive-keys 14F26682D0916CDD81E37B6D61B7B526D98F0353
+
+  mozillaUrl=https://archive.mozilla.org/pub/firefox/releases/
+
+  curl --silent --show-error -o "$HOME"/shasums "$mozillaUrl$ffVersion/SHA512SUMS"
+  curl --silent --show-error -o "$HOME"/shasums.asc "$mozillaUrl$ffVersion/SHA512SUMS.asc"
+  gpgv --keyring="$GNUPGHOME"/pubring.kbx "$HOME"/shasums.asc "$HOME"/shasums
+
+  ffHash=$(grep '\.source\.tar\.xz$' "$HOME"/shasums | grep '^[^ ]*' -o)
+  echo "ffHash=$ffHash"
+
+  jq ".source.rev = \"$latestTag\"" $srcJson | sponge $srcJson
+  jq ".source.sha256 = \"$srcHash\"" $srcJson | sponge $srcJson
+  jq ".firefox.version = \"$ffVersion\"" $srcJson | sponge $srcJson
+  jq ".firefox.sha512 = \"$ffHash\"" $srcJson | sponge $srcJson
+  jq ".packageVersion = \"$lwVersion\"" $srcJson | sponge $srcJson
+''
diff --git a/nixpkgs/pkgs/applications/networking/browsers/links2/default.nix b/nixpkgs/pkgs/applications/networking/browsers/links2/default.nix
new file mode 100644
index 000000000000..1bb3fbc97d97
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/links2/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchurl
+, gpm, openssl, pkg-config, libev # Misc.
+, libpng, libjpeg, libtiff, librsvg # graphic formats
+, bzip2, zlib, xz # Transfer encodings
+, enableFB ? true
+, enableDirectFB ? false, directfb
+, enableX11 ? true, libX11, libXt, libXau # GUI support
+}:
+
+stdenv.mkDerivation rec {
+  version = "2.29";
+  pname = "links2";
+
+  src = fetchurl {
+    url = "${meta.homepage}/download/links-${version}.tar.bz2";
+    sha256 = "sha256-IqqWwLOOGm+PftnXpBZ6R/w3JGCXdZ72BZ7Pj56teZg=";
+  };
+
+  buildInputs = with lib;
+    [ libev librsvg libpng libjpeg libtiff openssl xz bzip2 zlib ]
+    ++ optionals stdenv.isLinux [ gpm ]
+    ++ optionals enableX11 [ libX11 libXau libXt ]
+    ++ optionals enableDirectFB [ directfb ];
+
+  nativeBuildInputs = [ pkg-config bzip2 ];
+
+  configureFlags = [ "--with-ssl" ]
+    ++ lib.optional (enableX11 || enableFB || enableDirectFB) "--enable-graphics"
+    ++ lib.optional enableX11 "--with-x"
+    ++ lib.optional enableFB "--with-fb"
+    ++ lib.optional enableDirectFB "--with-directfb";
+
+  meta = with lib; {
+    homepage = "http://links.twibright.com/";
+    description = "A small browser with some graphics support";
+    maintainers = with maintainers; [ raskin ];
+    mainProgram = "links";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/litebrowser/default.nix b/nixpkgs/pkgs/applications/networking/browsers/litebrowser/default.nix
new file mode 100644
index 000000000000..2158d0bb2f57
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/litebrowser/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, pkg-config
+, gtk3
+, gtkmm3
+, curl
+, poco
+, gumbo # litehtml dependency
+}:
+
+stdenv.mkDerivation {
+  pname = "litebrowser";
+  version = "unstable-2022-10-31";
+
+  src = fetchFromGitHub {
+    owner = "litehtml";
+    repo = "litebrowser-linux";
+    rev = "4654f8fb2d5e2deba7ac6223b6639341bd3b7eba";
+    hash = "sha256-SvW1AOxLBLKqa+/2u2Zn+/t33ZzQHmqlcLRl6z0rK9U=";
+    fetchSubmodules = true; # litehtml submodule
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+  ];
+
+  buildInputs = [
+    gtk3
+    gtkmm3
+    curl
+    poco
+    gumbo
+  ];
+
+  cmakeFlags = [
+    "-DEXTERNAL_GUMBO=ON"
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm755 litebrowser $out/bin/litebrowser
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A simple browser based on the litehtml engine";
+    homepage = "https://github.com/litehtml/litebrowser-linux";
+    license = licenses.bsd3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ fgaz ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/luakit/default.nix b/nixpkgs/pkgs/applications/networking/browsers/luakit/default.nix
new file mode 100644
index 000000000000..66188f174753
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/luakit/default.nix
@@ -0,0 +1,90 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, wrapGAppsHook
+, help2man
+, glib-networking
+, gst_all_1
+, gtk3
+, luafilesystem
+, luajit
+, sqlite
+, webkitgtk
+}:
+
+stdenv.mkDerivation rec {
+  pname = "luakit";
+  version = "2.3.3";
+
+  src = fetchFromGitHub {
+    owner = "luakit";
+    repo = pname;
+    rev = version;
+    hash = "sha256-DtoixcLq+ddbacTAo+Qq6q4k1i6thirACw1zqUeOxXo=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    help2man
+    wrapGAppsHook
+  ];
+  buildInputs = [
+    gtk3
+    glib-networking # TLS support
+    luafilesystem
+    luajit
+    sqlite
+    webkitgtk
+  ] ++ ( with gst_all_1; [
+    gstreamer
+    gst-plugins-base
+    gst-plugins-good
+    gst-plugins-bad
+    gst-plugins-ugly
+    gst-libav
+  ]);
+
+
+  # build-utils/docgen/gen.lua:2: module 'lib.lousy.util' not found
+  # TODO: why is not this the default? The test runner adds
+  # ';./lib/?.lua;./lib/?/init.lua' to package.path, but the build-utils
+  # scripts don't add an equivalent
+  preBuild = ''
+    export LUA_PATH="$LUA_PATH;./?.lua;./?/init.lua"
+  '';
+
+  makeFlags = [
+    "DEVELOPMENT_PATHS=0"
+    "USE_LUAJIT=1"
+    "INSTALLDIR=${placeholder "out"}"
+    "PREFIX=${placeholder "out"}"
+    "USE_GTK3=1"
+    "XDGPREFIX=${placeholder "out"}/etc/xdg"
+  ];
+
+  preFixup = let
+    luaKitPath = "$out/share/luakit/lib/?/init.lua;$out/share/luakit/lib/?.lua";
+  in ''
+    gappsWrapperArgs+=(
+      --prefix XDG_CONFIG_DIRS : "$out/etc/xdg"
+      --prefix LUA_PATH ';' "${luaKitPath};$LUA_PATH"
+      --prefix LUA_CPATH ';' "$LUA_CPATH"
+    )
+  '';
+
+  meta = with lib; {
+    homepage = "https://luakit.github.io/";
+    description = "Fast, small, webkit-based browser framework extensible in Lua";
+    longDescription = ''
+      Luakit is a highly configurable browser framework based on the WebKit web
+      content engine and the GTK+ toolkit. It is very fast, extensible with Lua,
+      and licensed under the GNU GPLv3 license. It is primarily targeted at
+      power users, developers and anyone who wants to have fine-grained control
+      over their web browser’s behaviour and interface.
+    '';
+    license     = licenses.gpl3Only;
+    maintainers = [ maintainers.AndersonTorres ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/lynx/default.nix b/nixpkgs/pkgs/applications/networking/browsers/lynx/default.nix
new file mode 100644
index 000000000000..e2d6854295a5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/lynx/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, stdenv
+, buildPackages
+, fetchurl
+, pkg-config
+, ncurses
+, gzip
+, sslSupport ? true
+, openssl
+, nukeReferences
+, fetchpatch
+}:
+
+stdenv.mkDerivation rec {
+  pname = "lynx";
+  version = "2.8.9rel.1";
+
+  src = fetchurl {
+    urls = [
+      "ftp://ftp.invisible-island.net/lynx/tarballs/lynx${version}.tar.bz2"
+      "https://invisible-mirror.net/archives/lynx/tarballs/lynx${version}.tar.bz2"
+    ];
+    sha256 = "15cmyyma2kz1hfaa6mwjgli8zwdzq3jv0q2cl6nwzycjfwyijzrq";
+  };
+
+  enableParallelBuilding = true;
+
+  hardeningEnable = [ "pie" ];
+
+  patches = [
+    (fetchpatch {
+      name = "CVE-2021-38165.patch";
+      url = "https://git.alpinelinux.org/aports/plain/main/lynx/CVE-2021-38165.patch?id=3400945dbbb8a87065360963e4caa0e17d3dcc61";
+      sha256 = "1aykb9y2g2vdpbbpvjlm4r40x7py2yv6jbywwcqcxrlciqcw4x57";
+    })
+  ];
+
+  configureFlags = [
+    "--enable-default-colors"
+    "--enable-widec"
+    "--enable-ipv6"
+  ] ++ lib.optional sslSupport "--with-ssl";
+
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+  nativeBuildInputs = [ nukeReferences ]
+    ++ lib.optional sslSupport pkg-config;
+
+  buildInputs = [ ncurses gzip ]
+    ++ lib.optional sslSupport openssl;
+
+  # cfg_defs.h captures lots of references to build-only dependencies, derived
+  # from config.cache.
+  postConfigure = ''
+    make cfg_defs.h
+    nuke-refs cfg_defs.h
+  '';
+
+  meta = with lib; {
+    description = "A text-mode web browser";
+    homepage = "https://lynx.invisible-island.net/";
+    maintainers = with maintainers; [ ];
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/microsoft-edge/browser.nix b/nixpkgs/pkgs/applications/networking/browsers/microsoft-edge/browser.nix
new file mode 100644
index 000000000000..7f72a42ffe0d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/microsoft-edge/browser.nix
@@ -0,0 +1,192 @@
+{ channel, version, revision, sha256 }:
+
+{ stdenv
+, fetchurl
+, lib
+, makeWrapper
+
+, binutils-unwrapped
+, xz
+, gnutar
+, file
+
+, glibc
+, glib
+, nss
+, nspr
+, atk
+, at-spi2-atk
+, xorg
+, cups
+, dbus
+, expat
+, libdrm
+, libxkbcommon
+, gtk3
+, pango
+, cairo
+, gdk-pixbuf
+, mesa
+, alsa-lib
+, at-spi2-core
+, libuuid
+, systemd
+, wayland
+}:
+
+let
+
+  baseName = "microsoft-edge";
+
+  shortName = if channel == "stable"
+              then "msedge"
+              else "msedge-" + channel;
+
+  longName = if channel == "stable"
+             then baseName
+             else baseName + "-" + channel;
+
+  iconSuffix = lib.optionalString (channel != "stable") "_${channel}";
+
+  desktopSuffix = lib.optionalString (channel != "stable") "-${channel}";
+in
+
+stdenv.mkDerivation rec {
+  name="${baseName}-${channel}-${version}";
+
+  src = fetchurl {
+    url = "https://packages.microsoft.com/repos/edge/pool/main/m/${baseName}-${channel}/${baseName}-${channel}_${version}-${revision}_amd64.deb";
+    inherit sha256;
+  };
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  unpackCmd = "${binutils-unwrapped}/bin/ar p $src data.tar.xz | ${xz}/bin/xz -dc | ${gnutar}/bin/tar -xf -";
+  sourceRoot = ".";
+
+  dontPatch = true;
+  dontConfigure = true;
+  dontPatchELF = true;
+
+  buildPhase = let
+    libPath = {
+      msedge = lib.makeLibraryPath [
+        glibc glib nss nspr atk at-spi2-atk xorg.libX11
+        xorg.libxcb cups.lib dbus.lib expat libdrm
+        xorg.libXcomposite xorg.libXdamage xorg.libXext
+        xorg.libXfixes xorg.libXrandr libxkbcommon
+        gtk3 pango cairo gdk-pixbuf mesa
+        alsa-lib at-spi2-core xorg.libxshmfence systemd wayland
+      ];
+      naclHelper = lib.makeLibraryPath [
+        glib nspr atk libdrm xorg.libxcb mesa xorg.libX11
+        xorg.libXext dbus.lib libxkbcommon
+      ];
+      libwidevinecdm = lib.makeLibraryPath [
+        glib nss nspr
+      ];
+      libGLESv2 = lib.makeLibraryPath [
+        xorg.libX11 xorg.libXext xorg.libxcb wayland
+      ];
+      libsmartscreenn = lib.makeLibraryPath [
+        libuuid
+      ];
+      liboneauth = lib.makeLibraryPath [
+        libuuid xorg.libX11
+      ];
+    };
+  in ''
+    patchelf \
+      --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+      --set-rpath "${libPath.msedge}" \
+      opt/microsoft/${shortName}/msedge
+
+    patchelf \
+      --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+      opt/microsoft/${shortName}/msedge-sandbox
+
+    patchelf \
+      --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+      opt/microsoft/${shortName}/msedge_crashpad_handler
+
+    patchelf \
+      --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+      --set-rpath "${libPath.naclHelper}" \
+      opt/microsoft/${shortName}/nacl_helper
+
+    patchelf \
+      --set-rpath "${libPath.libwidevinecdm}" \
+      opt/microsoft/${shortName}/WidevineCdm/_platform_specific/linux_x64/libwidevinecdm.so
+
+    patchelf \
+      --set-rpath "${libPath.libGLESv2}" \
+      opt/microsoft/${shortName}/libGLESv2.so
+
+    patchelf \
+      --set-rpath "${libPath.libsmartscreenn}" \
+      opt/microsoft/${shortName}/libsmartscreenn.so
+
+    patchelf \
+      --set-rpath "${libPath.liboneauth}" \
+      opt/microsoft/${shortName}/liboneauth.so
+  '';
+
+  installPhase = ''
+    mkdir -p $out
+    cp -R opt usr/bin usr/share $out
+
+    ${if channel == "stable"
+      then "ln -sf $out/bin/${longName} $out/bin/${baseName}-${channel}"
+      else "ln -sf $out/opt/microsoft/${shortName}/${baseName}-${channel} $out/opt/microsoft/${shortName}/${baseName}"}
+
+    ln -sf $out/opt/microsoft/${shortName}/${longName} $out/bin/${longName}
+
+    rm -rf $out/share/doc
+    rm -rf $out/opt/microsoft/${shortName}/cron
+
+    for icon in '16' '24' '32' '48' '64' '128' '256'
+    do
+      ${ "icon_source=$out/opt/microsoft/${shortName}/product_logo_\${icon}${iconSuffix}.png" }
+      ${ "icon_target=$out/share/icons/hicolor/\${icon}x\${icon}/apps" }
+      mkdir -p $icon_target
+      cp $icon_source $icon_target/microsoft-edge${desktopSuffix}.png
+    done
+
+    substituteInPlace $out/share/applications/${longName}.desktop \
+      --replace /usr/bin/${baseName}-${channel} $out/bin/${longName}
+
+    substituteInPlace $out/share/gnome-control-center/default-apps/${longName}.xml \
+      --replace /opt/microsoft/${shortName} $out/opt/microsoft/${shortName}
+
+    substituteInPlace $out/share/menu/${longName}.menu \
+      --replace /opt/microsoft/${shortName} $out/opt/microsoft/${shortName}
+
+    substituteInPlace $out/opt/microsoft/${shortName}/xdg-mime \
+      --replace "\''${XDG_DATA_DIRS:-/usr/local/share:/usr/share}" "\''${XDG_DATA_DIRS:-/run/current-system/sw/share}" \
+      --replace "xdg_system_dirs=/usr/local/share/:/usr/share/" "xdg_system_dirs=/run/current-system/sw/share/" \
+      --replace /usr/bin/file ${file}/bin/file
+
+    substituteInPlace $out/opt/microsoft/${shortName}/default-app-block \
+      --replace /opt/microsoft/${shortName} $out/opt/microsoft/${shortName}
+
+    substituteInPlace $out/opt/microsoft/${shortName}/xdg-settings \
+      --replace "\''${XDG_DATA_DIRS:-/usr/local/share:/usr/share}" "\''${XDG_DATA_DIRS:-/run/current-system/sw/share}" \
+      --replace "\''${XDG_CONFIG_DIRS:-/etc/xdg}" "\''${XDG_CONFIG_DIRS:-/run/current-system/sw/etc/xdg}"
+  '';
+
+  postFixup = ''
+    wrapProgram "$out/bin/${longName}" \
+      --prefix XDG_DATA_DIRS : "${gtk3}/share/gsettings-schemas/${gtk3.pname}-${gtk3.version}"
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.microsoft.com/en-us/edge";
+    description = "The web browser from Microsoft";
+    license = licenses.unfree;
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ zanculmarktum kuwii ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/microsoft-edge/default.nix b/nixpkgs/pkgs/applications/networking/browsers/microsoft-edge/default.nix
new file mode 100644
index 000000000000..f1427bbbf579
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/microsoft-edge/default.nix
@@ -0,0 +1,20 @@
+{
+  stable = import ./browser.nix {
+    channel = "stable";
+    version = "115.0.1901.188";
+    revision = "1";
+    sha256 = "sha256-mRM3zakYwCptfKWYbiaDnPqv9Vt5WnDA7xIK1rlownU=";
+  };
+  beta = import ./browser.nix {
+    channel = "beta";
+    version = "115.0.1901.165";
+    revision = "1";
+    sha256 = "sha256-2DUWkGItissLGtJAMDKHNjMDPhsYNKaQVJ30+tMlkow=";
+  };
+  dev = import ./browser.nix {
+    channel = "dev";
+    version = "116.0.1938.10";
+    revision = "1";
+    sha256 = "sha256-NQXaLmX8AtLEWPkkzAA90XfmFflwulxVRHtIJ+nxCk4=";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/microsoft-edge/update.py b/nixpkgs/pkgs/applications/networking/browsers/microsoft-edge/update.py
new file mode 100755
index 000000000000..0e9bfa8fe89a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/microsoft-edge/update.py
@@ -0,0 +1,67 @@
+#! /usr/bin/env nix-shell
+#! nix-shell -i python3 -p python3Packages.packaging python3Packages.debian
+
+import base64
+import textwrap
+from urllib import request
+
+from collections import OrderedDict
+from debian.deb822 import Packages
+from debian.debian_support import Version
+
+def packages():
+    packages_url = 'https://packages.microsoft.com/repos/edge/dists/stable/main/binary-amd64/Packages'
+    handle = request.urlopen(packages_url)
+    return handle
+
+
+def latest_packages(packages: bytes):
+    latest_packages: OrderedDict[str, Packages] = {}
+    for package in Packages.iter_paragraphs(packages, use_apt_pkg=False):
+        name: str = package['Package']
+        if not name.startswith('microsoft-edge-'):
+            continue
+        channel = name.replace('microsoft-edge-', '')
+        if channel not in latest_packages:
+            latest_packages[channel] = package
+        else:
+            old_package = latest_packages[channel]
+            if old_package.get_version() < package.get_version():  # type: ignore
+                latest_packages[channel] = package
+    return latest_packages
+
+
+def nix_expressions(latest: dict[str, Packages]):
+    channel_strs: list[str] = []
+    for channel, package in latest.items():
+        print(f"Processing {channel} {package['Version']}")
+        match = Version.re_valid_version.match(package['Version'])
+        assert match is not None
+
+        version = match.group('upstream_version')
+        revision = match.group('debian_revision')
+        sri = 'sha256-' + \
+            base64.b64encode(bytes.fromhex(package['SHA256'])).decode('ascii')
+
+        channel_str = textwrap.dedent(
+            f'''\
+            {channel} = import ./browser.nix {{
+              channel = "{channel}";
+              version = "{version}";
+              revision = "{revision}";
+              sha256 = "{sri}";
+            }};'''
+        )
+        channel_strs.append(channel_str)
+    return channel_strs
+
+
+def write_expression():
+    latest = latest_packages(packages())
+    channel_strs = nix_expressions(latest)
+    nix_expr = '{\n' + textwrap.indent('\n'.join(channel_strs), '  ') + '\n}\n'
+    with open('default.nix', 'w') as f:
+        f.write(nix_expr)
+
+
+write_expression()
diff --git a/nixpkgs/pkgs/applications/networking/browsers/midori/default.nix b/nixpkgs/pkgs/applications/networking/browsers/midori/default.nix
new file mode 100644
index 000000000000..187914740f25
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/midori/default.nix
@@ -0,0 +1,63 @@
+{ lib, stdenv
+, fetchurl
+, cmake
+, ninja
+, pkg-config
+, intltool
+, vala
+, wrapGAppsHook
+, gcr
+, libpeas
+, gtk3
+, webkitgtk
+, sqlite
+, gsettings-desktop-schemas
+, libsoup
+, glib-networking
+, json-glib
+, libarchive
+}:
+
+stdenv.mkDerivation rec {
+  pname = "midori";
+  version = "9.0";
+
+  src = fetchurl {
+    url = "https://github.com/midori-browser/core/releases/download/v${version}/midori-v${version}.tar.gz";
+    sha256 = "05i04qa83dnarmgkx4xsk6fga5lw1lmslh4rb3vhyyy4ala562jy";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    intltool
+    ninja
+    pkg-config
+    vala
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    (libsoup.override { gnomeSupport = true; })
+    gcr
+    glib-networking
+    gsettings-desktop-schemas
+    gtk3
+    libpeas
+    sqlite
+    webkitgtk
+    json-glib
+    libarchive
+  ];
+
+  passthru = {
+    inherit gtk3;
+  };
+
+  meta = with lib; {
+    description = "Lightweight WebKitGTK web browser";
+    homepage = "https://www.midori-browser.org/";
+    license = with licenses; [ lgpl21Plus ];
+    platforms = with platforms; linux;
+    maintainers = with maintainers; [ raskin ramkromberg ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/misc/widevine-cdm.nix b/nixpkgs/pkgs/applications/networking/browsers/misc/widevine-cdm.nix
new file mode 100644
index 000000000000..b9ba40a2932e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/misc/widevine-cdm.nix
@@ -0,0 +1,34 @@
+{ lib
+, stdenv
+, fetchzip
+}:
+
+stdenv.mkDerivation rec {
+  pname = "widevine-cdm";
+  version = "4.10.2557.0";
+
+  src = fetchzip {
+    url = "https://dl.google.com/widevine-cdm/${version}-linux-x64.zip";
+    hash = "sha256-XxTjuPjWy06SmHC6GaIVIp3zD76isCVATWwwdZljntE=";
+    stripRoot = false;
+  };
+
+  installPhase = ''
+    runHook preInstall
+
+    install -vD manifest.json $out/share/google/chrome/WidevineCdm/manifest.json
+    install -vD LICENSE.txt $out/share/google/chrome/WidevineCdm/LICENSE.txt
+    install -vD libwidevinecdm.so $out/share/google/chrome/WidevineCdm/_platform_specific/linux_x64/libwidevinecdm.so
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Widevine CDM";
+    homepage = "https://www.widevine.com";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = with maintainers; [ jlamur ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/moonlander/default.nix b/nixpkgs/pkgs/applications/networking/browsers/moonlander/default.nix
new file mode 100644
index 000000000000..94bbbadecc91
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/moonlander/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, stdenv
+, fetchFromSourcehut
+, rustPlatform
+, atk
+, cairo
+, gdk-pixbuf
+, glib
+, gtk3
+, pango
+, pkg-config
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "moonlander";
+  version = "unstable-2021-05-23";
+
+  src = fetchFromSourcehut {
+    owner = "~admicos";
+    repo = "moonlander";
+    rev = "abfb9cd421092b73609a32d0a04d110294a48f5e";
+    hash = "sha256-kpaJRZPPVj8QTFfOx7nq3wN2jmyYASou7cgf+XY2RVU=";
+  };
+
+  cargoHash = "sha256-DL/EtZomrZlOFjUgNm6qnrB1MpXApkYKGubi+dB8aho=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [
+    atk
+    cairo
+    gdk-pixbuf
+    glib
+    gtk3
+    pango
+  ];
+
+  meta = with lib; {
+    description = "Just another \"fancy\" Gemini client";
+    homepage = "https://sr.ht/~admicos/moonlander/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ azahi ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/mullvad-browser/default.nix b/nixpkgs/pkgs/applications/networking/browsers/mullvad-browser/default.nix
new file mode 100644
index 000000000000..48d4fd3611a1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/mullvad-browser/default.nix
@@ -0,0 +1,246 @@
+{ lib
+, stdenv
+, fetchurl
+, makeDesktopItem
+, copyDesktopItems
+, makeWrapper
+, writeText
+, wrapGAppsHook
+, callPackage
+
+# Common run-time dependencies
+, zlib
+
+# libxul run-time dependencies
+, atk
+, cairo
+, dbus
+, dbus-glib
+, fontconfig
+, freetype
+, gdk-pixbuf
+, glib
+, gtk3
+, libxcb
+, libX11
+, libXext
+, libXrender
+, libXt
+, libXtst
+, mesa
+, pango
+, pciutils
+
+, libnotifySupport ? stdenv.isLinux
+, libnotify
+
+, audioSupport ? mediaSupport
+, pulseaudioSupport ? mediaSupport
+, libpulseaudio
+, apulse
+, alsa-lib
+
+# Media support (implies audio support)
+, mediaSupport ? true
+, ffmpeg
+
+# Extra preferences
+, extraPrefs ? ""
+}:
+
+let
+  libPath = lib.makeLibraryPath (
+    [
+      alsa-lib
+      atk
+      cairo
+      dbus
+      dbus-glib
+      fontconfig
+      freetype
+      gdk-pixbuf
+      glib
+      gtk3
+      libxcb
+      libX11
+      libXext
+      libXrender
+      libXt
+      libXtst
+      mesa # for libgbm
+      pango
+      pciutils
+      stdenv.cc.cc
+      stdenv.cc.libc
+      zlib
+    ] ++ lib.optionals libnotifySupport [ libnotify ]
+      ++ lib.optionals pulseaudioSupport [ libpulseaudio ]
+      ++ lib.optionals mediaSupport [ ffmpeg ]
+  );
+
+  version = "12.5.3";
+
+  sources = {
+    x86_64-linux = fetchurl {
+      urls = [
+        "https://cdn.mullvad.net/browser/${version}/mullvad-browser-linux64-${version}_ALL.tar.xz"
+        "https://github.com/mullvad/mullvad-browser/releases/download/${version}/mullvad-browser-linux64-${version}_ALL.tar.xz"
+      ];
+      hash = "sha256-vnxpmZSqPe7wE4USDbYGm+5k9J/nuUk2uJx4CmwFPvw=";
+    };
+  };
+
+  distributionIni = writeText "distribution.ini" (lib.generators.toINI {} {
+    # Some light branding indicating this build uses our distro preferences
+    Global = {
+      id = "nixos";
+      version = "1.0";
+      about = "Mullvad Browser for NixOS";
+    };
+  });
+
+  policiesJson = writeText "policies.json" (builtins.toJSON {
+    policies.DisableAppUpdate = true;
+  });
+in
+stdenv.mkDerivation rec {
+  pname = "mullvad-browser";
+  inherit version;
+
+  src = sources.${stdenv.hostPlatform.system} or (throw "unsupported system: ${stdenv.hostPlatform.system}");
+
+  nativeBuildInputs = [ copyDesktopItems makeWrapper wrapGAppsHook ];
+
+  preferLocalBuild = true;
+  allowSubstitutes = false;
+
+  desktopItems = [(makeDesktopItem {
+    name = "mullvadbrowser";
+    exec = "mullvad-browser %U";
+    icon = "mullvad-browser";
+    desktopName = "Mullvad Browser";
+    genericName = "Web Browser";
+    comment = meta.description;
+    categories = [ "Network" "WebBrowser" "Security" ];
+  })];
+
+  buildPhase = ''
+    runHook preBuild
+
+    # For convenience ...
+    MB_IN_STORE=$out/share/mullvad-browser
+
+    # Unpack & enter
+    mkdir -p "$MB_IN_STORE"
+    tar xf "$src" -C "$MB_IN_STORE" --strip-components=2
+    pushd "$MB_IN_STORE"
+
+    patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" "mullvadbrowser.real"
+
+    # mullvadbrowser is a wrapper that checks for a more recent libstdc++ & appends it to the ld path
+    mv mullvadbrowser.real mullvadbrowser
+
+    # store state at `~/.mullvad` instead of relative to executable
+    touch "$MB_IN_STORE/system-install"
+
+    # Add bundled libraries to libPath.
+    libPath=${libPath}:$MB_IN_STORE
+
+    # apulse uses a non-standard library path.  For now special-case it.
+    ${lib.optionalString (audioSupport && !pulseaudioSupport) ''
+      libPath=${apulse}/lib/apulse:$libPath
+    ''}
+
+    # Prepare for autoconfig.
+    #
+    # See https://developer.mozilla.org/en-US/Firefox/Enterprise_deployment
+    cat >defaults/pref/autoconfig.js <<EOF
+    //
+    pref("general.config.filename", "mozilla.cfg");
+    pref("general.config.obscure_value", 0);
+    EOF
+
+    # Hard-coded Firefox preferences.
+    cat >mozilla.cfg <<EOF
+    // First line must be a comment
+
+    // Reset pref that captures store paths.
+    clearPref("extensions.xpiState");
+
+    // Stop obnoxious first-run redirection.
+    lockPref("noscript.firstRunRedirection", false);
+
+    // Allow sandbox access to sound devices if using ALSA directly
+    ${if (audioSupport && !pulseaudioSupport) then ''
+      pref("security.sandbox.content.write_path_whitelist", "/dev/snd/");
+    '' else ''
+      clearPref("security.sandbox.content.write_path_whitelist");
+    ''}
+
+    ${lib.optionalString (extraPrefs != "") ''
+      ${extraPrefs}
+    ''}
+    EOF
+
+    # FONTCONFIG_FILE is required to make fontconfig read the MB
+    # fonts.conf; upstream uses FONTCONFIG_PATH, but FC_DEBUG=1024
+    # indicates the system fonts.conf being used instead.
+    FONTCONFIG_FILE=$MB_IN_STORE/fontconfig/fonts.conf
+    sed -i "$FONTCONFIG_FILE" \
+      -e "s,<dir>fonts</dir>,<dir>$MB_IN_STORE/fonts</dir>,"
+
+    mkdir -p $out/bin
+
+    makeWrapper "$MB_IN_STORE/mullvadbrowser" "$out/bin/mullvad-browser" \
+      --prefix LD_LIBRARY_PATH : "$libPath" \
+      --set FONTCONFIG_FILE "$FONTCONFIG_FILE" \
+      --set-default MOZ_ENABLE_WAYLAND 1
+
+    # Easier access to docs
+    mkdir -p $out/share/doc
+    ln -s $MB_IN_STORE/Data/Docs $out/share/doc/mullvad-browser
+
+    # Install icons
+    for i in 16 32 48 64 128; do
+      mkdir -p $out/share/icons/hicolor/''${i}x''${i}/apps/
+      ln -s $out/share/mullvad-browser/browser/chrome/icons/default/default$i.png $out/share/icons/hicolor/''${i}x''${i}/apps/mullvad-browser.png
+    done
+
+    # Check installed apps
+    echo "Checking mullvad-browser wrapper ..."
+    $out/bin/mullvad-browser --version >/dev/null
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    # Install distribution customizations
+    install -Dvm644 ${distributionIni} $out/share/mullvad-browser/distribution/distribution.ini
+    install -Dvm644 ${policiesJson} $out/share/mullvad-browser/distribution/policies.json
+
+    runHook postInstall
+  '';
+
+  passthru = {
+    inherit sources;
+    updateScript = callPackage ../tor-browser-bundle-bin/update.nix {
+      inherit pname version meta;
+      baseUrl = "https://cdn.mullvad.net/browser/";
+      prefix = "mullvad-browser-";
+    };
+  };
+
+  meta = with lib; {
+    description = "Privacy-focused browser made in a collaboration between The Tor Project and Mullvad";
+    homepage = "https://mullvad.net/en/browser";
+    platforms = attrNames sources;
+    maintainers = with maintainers; [ felschr panicgh ];
+    # MPL2.0+, GPL+, &c.  While it's not entirely clear whether
+    # the compound is "libre" in a strict sense (some components place certain
+    # restrictions on redistribution), it's free enough for our purposes.
+    license = with licenses; [ mpl20 lgpl21Plus lgpl3Plus free ];
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/netsurf/browser.nix b/nixpkgs/pkgs/applications/networking/browsers/netsurf/browser.nix
new file mode 100644
index 000000000000..d9df75b00c2b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/netsurf/browser.nix
@@ -0,0 +1,130 @@
+{ lib
+, stdenv
+, fetchurl
+, SDL
+, check
+, curl
+, expat
+, gtk2
+, gtk3
+, libXcursor
+, libXrandr
+, libidn
+, libjpeg
+, libpng
+, libwebp
+, libxml2
+, makeWrapper
+, openssl
+, perlPackages
+, pkg-config
+, wrapGAppsHook
+, xxd
+
+# Netsurf-specific dependencies
+, buildsystem
+, libcss
+, libdom
+, libhubbub
+, libnsbmp
+, libnsfb
+, libnsgif
+, libnslog
+, libnspsl
+, libnsutils
+, libparserutils
+, libsvgtiny
+, libutf8proc
+, libwapcaplet
+, nsgenbind
+
+# Configuration
+, uilib
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "netsurf";
+  version = "3.10";
+
+  src = fetchurl {
+    url = "http://download.netsurf-browser.org/netsurf/releases/source/netsurf-${finalAttrs.version}-src.tar.gz";
+    hash = "sha256-NkhEKeGTYUaFwv8kb1W9Cm3d8xoBi+5F4NH3wohRmV4=";
+  };
+
+  nativeBuildInputs = [
+    makeWrapper
+    perlPackages.HTMLParser
+    perlPackages.perl
+    pkg-config
+    xxd
+  ]
+  ++ lib.optional (uilib == "gtk2" || uilib == "gtk3") wrapGAppsHook;
+
+  buildInputs = [
+    check
+    curl
+    libXcursor
+    libXrandr
+    libidn
+    libjpeg
+    libpng
+    libwebp
+    libxml2
+    openssl
+
+    libcss
+    libdom
+    libhubbub
+    libnsbmp
+    libnsfb
+    libnsgif
+    libnslog
+    libnspsl
+    libnsutils
+    libparserutils
+    libsvgtiny
+    libutf8proc
+    libwapcaplet
+    nsgenbind
+  ]
+  ++ lib.optionals (uilib == "framebuffer") [ expat SDL ]
+  ++ lib.optional (uilib == "gtk2") gtk2
+  ++ lib.optional (uilib == "gtk3") gtk3
+  ;
+
+  # Since at least 2018 AD, GCC and other compilers run in `-fno-common` mode as
+  # default, in order to comply with C standards and also get rid of some bad
+  # quality code. Because of this, many codebases that weren't updated need to
+  # be patched -- or the `-fcommon` flag should be explicitly passed to the
+  # compiler
+
+  # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85678
+  # https://github.com/NixOS/nixpkgs/issues/54506
+
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  preConfigure = ''
+    cat <<EOF > Makefile.conf
+    override NETSURF_GTK_RES_PATH  := $out/share/
+    override NETSURF_USE_GRESOURCE := YES
+    EOF
+  '';
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+    "TARGET=${uilib}"
+  ];
+
+  meta = {
+    homepage = "https://www.netsurf-browser.org/";
+    description = "A free, open source, small web browser";
+    longDescription = ''
+      NetSurf is a free, open source web browser. It is written in C and
+      released under the GNU Public Licence version 2. NetSurf has its own
+      layout and rendering engine entirely written from scratch. It is small and
+      capable of handling many of the web standards in use today.
+    '';
+    license = lib.licenses.gpl2Only;
+    inherit (buildsystem.meta) maintainers platforms;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/networking/browsers/netsurf/buildsystem.nix b/nixpkgs/pkgs/applications/networking/browsers/netsurf/buildsystem.nix
new file mode 100644
index 000000000000..385deef99fdf
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/netsurf/buildsystem.nix
@@ -0,0 +1,26 @@
+{ lib
+, stdenv
+, fetchurl
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "netsurf-buildsystem";
+  version = "1.9";
+
+  src = fetchurl {
+    url = "http://download.netsurf-browser.org/libs/releases/buildsystem-${finalAttrs.version}.tar.gz";
+    hash = "sha256-k4QeMUpoggmiC4dF8GU5PzqQ8Bvmj0Xpa8jS9KKqmio=";
+  };
+
+  makeFlags = [
+    "PREFIX=$(out)"
+  ];
+
+  meta = {
+    homepage = "https://www.netsurf-browser.org/";
+    description = "NetSurf browser shared build system";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ vrthra AndersonTorres ];
+    platforms = lib.platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/networking/browsers/netsurf/default.nix b/nixpkgs/pkgs/applications/networking/browsers/netsurf/default.nix
new file mode 100644
index 000000000000..36bfe10d5d24
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/netsurf/default.nix
@@ -0,0 +1,39 @@
+{ lib, pkgs }:
+
+lib.makeScope pkgs.newScope (self:
+  let
+    inherit (self) callPackage;
+  in {
+  # ui can be: gtk2, gtk3, sixel, framebuffer. Note that console display (sixel)
+  # requires a terminal that supports `sixel` capabilities, such as mlterm
+  # or xterm -ti 340
+  ui = "gtk3";
+  uilib = {
+    "framebuffer" = "framebuffer";
+    "gtk2" = "gtk2";
+    "gtk3" = "gtk3";
+    "sixel" = "framebuffer";
+  }.${self.ui} or null; # Null will never happen
+  SDL = {
+    "sixel" = pkgs.SDL_sixel;
+    "framebuffer" = pkgs.SDL;
+  }.${self.ui} or null;
+
+  browser = callPackage ./browser.nix { };
+
+  buildsystem    = callPackage ./buildsystem.nix { };
+  libcss         = callPackage ./libcss.nix { };
+  libdom         = callPackage ./libdom.nix { };
+  libhubbub      = callPackage ./libhubbub.nix { };
+  libnsbmp       = callPackage ./libnsbmp.nix { };
+  libnsfb        = callPackage ./libnsfb.nix { };
+  libnsgif       = callPackage ./libnsgif.nix { };
+  libnslog       = callPackage ./libnslog.nix { };
+  libnspsl       = callPackage ./libnspsl.nix { };
+  libnsutils     = callPackage ./libnsutils.nix { };
+  libparserutils = callPackage ./libparserutils.nix { };
+  libsvgtiny     = callPackage ./libsvgtiny.nix { };
+  libutf8proc    = callPackage ./libutf8proc.nix { };
+  libwapcaplet   = callPackage ./libwapcaplet.nix { };
+  nsgenbind      = callPackage ./nsgenbind.nix { };
+})
diff --git a/nixpkgs/pkgs/applications/networking/browsers/netsurf/libcss.nix b/nixpkgs/pkgs/applications/networking/browsers/netsurf/libcss.nix
new file mode 100644
index 000000000000..66a3a4057d85
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/netsurf/libcss.nix
@@ -0,0 +1,51 @@
+{ lib
+, stdenv
+, fetchurl
+, perl
+, pkg-config
+, buildsystem
+, libparserutils
+, libwapcaplet
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "netsurf-libcss";
+  version = "0.9.1";
+
+  src = fetchurl {
+    url = "http://download.netsurf-browser.org/libs/releases/libcss-${finalAttrs.version}-src.tar.gz";
+    hash = "sha256-0tzhbpM5Lo1qcglCDUfC1Wo4EXAaDoGnJPxUHGPTxtw=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [
+    perl
+    buildsystem
+    libparserutils
+    libwapcaplet
+  ];
+
+  makeFlags = [
+    "PREFIX=$(out)"
+    "NSSHARED=${buildsystem}/share/netsurf-buildsystem"
+  ];
+
+  env.NIX_CFLAGS_COMPILE = toString [
+    "-Wno-error=implicit-fallthrough"
+    "-Wno-error=maybe-uninitialized"
+  ];
+
+  meta = {
+    homepage = "https://www.netsurf-browser.org/projects/libcss/";
+    description = "Cascading Style Sheets library for netsurf browser";
+    longDescription = ''
+      LibCSS is a CSS parser and selection engine. It aims to parse the forward
+      compatible CSS grammar. It was developed as part of the NetSurf project
+      and is available for use by other software, under a more permissive
+      license.
+    '';
+    license = lib.licenses.mit;
+    inherit (buildsystem.meta) maintainers platforms;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/networking/browsers/netsurf/libdom.nix b/nixpkgs/pkgs/applications/networking/browsers/netsurf/libdom.nix
new file mode 100644
index 000000000000..328bed30f17d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/netsurf/libdom.nix
@@ -0,0 +1,47 @@
+{ lib
+, stdenv
+, fetchurl
+, expat
+, pkg-config
+, buildsystem
+, libparserutils
+, libwapcaplet
+, libhubbub
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "netsurf-libdom";
+  version = "0.4.1";
+
+  src = fetchurl {
+    url = "http://download.netsurf-browser.org/libs/releases/libdom-${finalAttrs.version}-src.tar.gz";
+    hash = "sha256-mO4HJHHlXiCMmHjlFcQQrUYso2+HtK/L7K0CPzos70o=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [
+    expat
+    buildsystem
+    libhubbub
+    libparserutils
+    libwapcaplet
+  ];
+
+  makeFlags = [
+    "PREFIX=$(out)"
+    "NSSHARED=${buildsystem}/share/netsurf-buildsystem"
+  ];
+
+  meta = {
+    homepage = "https://www.netsurf-browser.org/projects/libdom/";
+    description = "Document Object Model library for netsurf browser";
+    longDescription = ''
+      LibDOM is an implementation of the W3C DOM, written in C. It is currently
+      in development for use with NetSurf and is intended to be suitable for use
+      in other projects under a more permissive license.
+    '';
+    license = lib.licenses.mit;
+    inherit (buildsystem.meta) maintainers platforms;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/networking/browsers/netsurf/libhubbub.nix b/nixpkgs/pkgs/applications/networking/browsers/netsurf/libhubbub.nix
new file mode 100644
index 000000000000..29a312928092
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/netsurf/libhubbub.nix
@@ -0,0 +1,48 @@
+{ lib
+, stdenv
+, fetchurl
+, perl
+, pkg-config
+, buildsystem
+, libparserutils
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "netsurf-libhubbub";
+  version = "0.3.7";
+
+  src = fetchurl {
+    url = "http://download.netsurf-browser.org/libs/releases/libhubbub-${finalAttrs.version}-src.tar.gz";
+    hash = "sha256-nnriU+bJBp51frmtTkhG84tNtSwMoBUURqn6Spd3NbY=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [
+    perl
+    buildsystem
+    libparserutils
+  ];
+
+  makeFlags = [
+    "PREFIX=$(out)"
+    "NSSHARED=${buildsystem}/share/netsurf-buildsystem"
+  ];
+
+  meta = {
+    homepage = "https://www.netsurf-browser.org/projects/hubbub/";
+    description = "HTML5 parser library for netsurf browser";
+    longDescription = ''
+      Hubbub is an HTML5 compliant parsing library, written in C. It was
+      developed as part of the NetSurf project and is available for use by other
+      software under the MIT licence.
+
+      The HTML5 specification defines a parsing algorithm, based on the
+      behaviour of mainstream browsers, which provides instructions for how to
+      parse all markup, both valid and invalid. As a result, Hubbub parses web
+      content well.
+    '';
+    license = lib.licenses.mit;
+    inherit (buildsystem.meta) maintainers platforms;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/networking/browsers/netsurf/libnsbmp.nix b/nixpkgs/pkgs/applications/networking/browsers/netsurf/libnsbmp.nix
new file mode 100644
index 000000000000..9ae8dafa1b0d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/netsurf/libnsbmp.nix
@@ -0,0 +1,32 @@
+{ lib
+, stdenv
+, fetchurl
+, pkg-config
+, buildsystem
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "netsurf-libnsbmp";
+  version = "0.1.6";
+
+  src = fetchurl {
+    url = "http://download.netsurf-browser.org/libs/releases/libnsbmp-${finalAttrs.version}-src.tar.gz";
+    hash = "sha256-ecSTZfhg7UUb/EEJ7d7I3j6bfOWjvgaVlr0qoZJ5Mk8=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ buildsystem ];
+
+  makeFlags = [
+    "PREFIX=$(out)"
+    "NSSHARED=${buildsystem}/share/netsurf-buildsystem"
+  ];
+
+  meta = {
+    homepage = "https://www.netsurf-browser.org/";
+    description = "BMP Decoder for netsurf browser";
+    license = lib.licenses.mit;
+    inherit (buildsystem.meta) maintainers platforms;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/networking/browsers/netsurf/libnsfb.nix b/nixpkgs/pkgs/applications/networking/browsers/netsurf/libnsfb.nix
new file mode 100644
index 000000000000..079e351ab18a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/netsurf/libnsfb.nix
@@ -0,0 +1,35 @@
+{ lib
+, stdenv
+, fetchurl
+, SDL
+, pkg-config
+, buildsystem
+, uilib
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "netsurf-libnsfb";
+  version = "0.2.2";
+
+  src = fetchurl {
+    url = "http://download.netsurf-browser.org/libs/releases/libnsfb-${finalAttrs.version}-src.tar.gz";
+    hash = "sha256-vkRso+tU35A/LamDEdEH11dM0R9awHE+YZFW1NGeo5o=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ SDL buildsystem ];
+
+  makeFlags = [
+    "PREFIX=$(out)"
+    "NSSHARED=${buildsystem}/share/netsurf-buildsystem"
+    "TARGET=${uilib}"
+  ];
+
+  meta = {
+    homepage = "https://www.netsurf-browser.org/projects/libnsfb/";
+    description = "Netsurf framebuffer abstraction library";
+    license = lib.licenses.mit;
+    inherit (buildsystem.meta) maintainers platforms;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/networking/browsers/netsurf/libnsgif.nix b/nixpkgs/pkgs/applications/networking/browsers/netsurf/libnsgif.nix
new file mode 100644
index 000000000000..20c990448e77
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/netsurf/libnsgif.nix
@@ -0,0 +1,36 @@
+{ lib
+, stdenv
+, fetchurl
+, pkg-config
+, buildPackages
+, buildsystem
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "netsurf-libnsgif";
+  version = "0.2.1";
+
+  src = fetchurl {
+    url = "http://download.netsurf-browser.org/libs/releases/libnsgif-${finalAttrs.version}-src.tar.gz";
+    hash = "sha256-nq6lNM1wtTxar0UxeulXcBaFprSojb407Sb0+q6Hmks=";
+  };
+
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ buildsystem ];
+
+  makeFlags = [
+    "PREFIX=$(out)"
+    "NSSHARED=${buildsystem}/share/netsurf-buildsystem"
+    "BUILD_CC=$(CC_FOR_BUILD)"
+  ];
+
+  meta = {
+    homepage = "https://www.netsurf-browser.org/projects/libnsgif/";
+    description = "GIF Decoder for netsurf browser";
+    license = lib.licenses.mit;
+    inherit (buildsystem.meta) maintainers platforms;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/networking/browsers/netsurf/libnslog.nix b/nixpkgs/pkgs/applications/networking/browsers/netsurf/libnslog.nix
new file mode 100644
index 000000000000..f9243ec56888
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/netsurf/libnslog.nix
@@ -0,0 +1,38 @@
+{ lib
+, stdenv
+, fetchurl
+, bison
+, flex
+, pkg-config
+, buildsystem
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "netsurf-libnslog";
+  version = "0.1.3";
+
+  src = fetchurl {
+    url = "http://download.netsurf-browser.org/libs/releases/libnslog-${finalAttrs.version}-src.tar.gz";
+    hash = "sha256-/JjcqdfvpnCWRwpdlsAjFG4lv97AjA23RmHHtNsEU9A=";
+  };
+
+  nativeBuildInputs = [
+    bison
+    flex
+    pkg-config
+  ];
+
+  buildInputs = [ buildsystem ];
+
+  makeFlags = [
+    "PREFIX=$(out)"
+    "NSSHARED=${buildsystem}/share/netsurf-buildsystem"
+  ];
+
+  meta = {
+    homepage = "https://www.netsurf-browser.org/";
+    description = "NetSurf Parametric Logging Library";
+    license = lib.licenses.isc;
+    inherit (buildsystem.meta) maintainers platforms;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/networking/browsers/netsurf/libnspsl.nix b/nixpkgs/pkgs/applications/networking/browsers/netsurf/libnspsl.nix
new file mode 100644
index 000000000000..30c91908d9f3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/netsurf/libnspsl.nix
@@ -0,0 +1,32 @@
+{ lib
+, stdenv
+, fetchurl
+, pkg-config
+, buildsystem
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "netsurf-libnspsl";
+  version = "0.1.6";
+
+  src = fetchurl {
+    url = "http://download.netsurf-browser.org/libs/releases/libnspsl-${finalAttrs.version}-src.tar.gz";
+    hash = "sha256-08WCBct40xC/gcpVNHotCYcZzsrHBGvDZ5g7E4tFAgs=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ buildsystem ];
+
+  makeFlags = [
+    "PREFIX=$(out)"
+    "NSSHARED=${buildsystem}/share/netsurf-buildsystem"
+  ];
+
+  meta = {
+    homepage = "https://www.netsurf-browser.org/";
+    description = "NetSurf Public Suffix List - Handling library";
+    license = lib.licenses.mit;
+    inherit (buildsystem.meta) maintainers platforms;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/networking/browsers/netsurf/libnsutils.nix b/nixpkgs/pkgs/applications/networking/browsers/netsurf/libnsutils.nix
new file mode 100644
index 000000000000..80e883e4b244
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/netsurf/libnsutils.nix
@@ -0,0 +1,32 @@
+{ lib
+, stdenv
+, fetchurl
+, pkg-config
+, buildsystem
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "netsurf-libnsutils";
+  version = "0.1.0";
+
+  src = fetchurl {
+    url = "http://download.netsurf-browser.org/libs/releases/libnsutils-${finalAttrs.version}-src.tar.gz";
+    hash = "sha256-eQxlFjRKvoL2KJ1lY5LpzOvkdbIMx+Hi2EMBE4X3rvA=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ buildsystem ];
+
+  makeFlags = [
+    "PREFIX=$(out)"
+    "NSSHARED=${buildsystem}/share/netsurf-buildsystem"
+  ];
+
+  meta = {
+    homepage = "https://www.netsurf-browser.org/";
+    description = "Generalised utility library for netsurf browser";
+    license = lib.licenses.mit;
+    inherit (buildsystem.meta) maintainers platforms;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/networking/browsers/netsurf/libparserutils.nix b/nixpkgs/pkgs/applications/networking/browsers/netsurf/libparserutils.nix
new file mode 100644
index 000000000000..411495b8e215
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/netsurf/libparserutils.nix
@@ -0,0 +1,33 @@
+{ lib
+, stdenv
+, fetchurl
+, perl
+, buildsystem
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "netsurf-libparserutils";
+  version = "0.2.4";
+
+  src = fetchurl {
+    url = "http://download.netsurf-browser.org/libs/releases/libparserutils-${finalAttrs.version}-src.tar.gz";
+    hash = "sha256-MiuuYbMMzt4+MFv26uJBSSBkl3W8X/HRtogBKjxJR9g=";
+  };
+
+  buildInputs = [
+    perl
+    buildsystem
+  ];
+
+  makeFlags = [
+    "PREFIX=$(out)"
+    "NSSHARED=${buildsystem}/share/netsurf-buildsystem"
+  ];
+
+  meta = {
+    homepage = "https://www.netsurf-browser.org/projects/libparserutils/";
+    description = "Parser building library for netsurf browser";
+    license = lib.licenses.mit;
+    inherit (buildsystem.meta) maintainers platforms;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/networking/browsers/netsurf/libsvgtiny.nix b/nixpkgs/pkgs/applications/networking/browsers/netsurf/libsvgtiny.nix
new file mode 100644
index 000000000000..19b523ce50ff
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/netsurf/libsvgtiny.nix
@@ -0,0 +1,46 @@
+{ lib
+, stdenv
+, fetchurl
+, gperf
+, pkg-config
+, buildsystem
+, libdom
+, libhubbub
+, libparserutils
+, libwapcaplet
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "netsurf-libsvgtiny";
+  version = "0.1.7";
+
+  src = fetchurl {
+    url = "http://download.netsurf-browser.org/libs/releases/libsvgtiny-${finalAttrs.version}-src.tar.gz";
+    hash = "sha256-LA3PlS8c2ILD6VQB75RZ8W27U8XT5FEjObL563add4E=";
+  };
+
+  nativeBuildInputs = [
+    gperf
+    pkg-config
+  ];
+
+  buildInputs = [
+    buildsystem
+    libdom
+    libhubbub
+    libparserutils
+    libwapcaplet
+  ];
+
+  makeFlags = [
+    "PREFIX=$(out)"
+    "NSSHARED=${buildsystem}/share/netsurf-buildsystem"
+  ];
+
+  meta = {
+    homepage = "https://www.netsurf-browser.org/projects/libsvgtiny/";
+    description = "NetSurf SVG decoder";
+    license = lib.licenses.mit;
+    inherit (buildsystem.meta) maintainers platforms;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/networking/browsers/netsurf/libutf8proc.nix b/nixpkgs/pkgs/applications/networking/browsers/netsurf/libutf8proc.nix
new file mode 100644
index 000000000000..adbd138b2260
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/netsurf/libutf8proc.nix
@@ -0,0 +1,32 @@
+{ lib
+, stdenv
+, fetchurl
+, pkg-config
+, buildsystem
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "netsurf-libutf8proc";
+  version = "2.4.0-1";
+
+  src = fetchurl {
+    url = "http://download.netsurf-browser.org/libs/releases/libutf8proc-${finalAttrs.version}-src.tar.gz";
+    hash = "sha256-AasdaYnBx3VQkNskw/ZOSflcVgrknCa+xRQrrGgCxHI=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ buildsystem ];
+
+  makeFlags = [
+    "PREFIX=$(out)"
+    "NSSHARED=${buildsystem}/share/netsurf-buildsystem"
+  ];
+
+  meta = {
+    homepage = "https://www.netsurf-browser.org/";
+    description = "UTF8 Processing library for netsurf browser";
+    license = lib.licenses.mit;
+    inherit (buildsystem.meta) maintainers platforms;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/networking/browsers/netsurf/libwapcaplet.nix b/nixpkgs/pkgs/applications/networking/browsers/netsurf/libwapcaplet.nix
new file mode 100644
index 000000000000..01c1b6c67f3a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/netsurf/libwapcaplet.nix
@@ -0,0 +1,31 @@
+{ lib
+, stdenv
+, fetchurl
+, buildsystem
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "netsurf-libwapcaplet";
+  version = "0.4.3";
+
+  src = fetchurl {
+    url = "http://download.netsurf-browser.org/libs/releases/libwapcaplet-${finalAttrs.version}-src.tar.gz";
+    hash = "sha256-myqh3W1mRfjpkrNpf9vYfwwOHaVyH6VO0ptITRMWDFw=";
+  };
+
+  buildInputs = [ buildsystem ];
+
+  makeFlags = [
+    "PREFIX=$(out)"
+    "NSSHARED=${buildsystem}/share/netsurf-buildsystem"
+  ];
+
+  env.NIX_CFLAGS_COMPILE = "-Wno-error=cast-function-type";
+
+  meta = {
+    homepage = "https://www.netsurf-browser.org/projects/libwapcaplet/";
+    description = "String internment library for netsurf browser";
+    license = lib.licenses.mit;
+    inherit (buildsystem.meta) maintainers platforms;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/networking/browsers/netsurf/nsgenbind.nix b/nixpkgs/pkgs/applications/networking/browsers/netsurf/nsgenbind.nix
new file mode 100644
index 000000000000..fc2b99280380
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/netsurf/nsgenbind.nix
@@ -0,0 +1,36 @@
+{ lib
+, stdenv
+, fetchurl
+, bison
+, flex
+, buildsystem
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "netsurf-nsgenbind";
+  version = "0.8";
+
+  src = fetchurl {
+    url = "http://download.netsurf-browser.org/libs/releases/nsgenbind-${finalAttrs.version}-src.tar.gz";
+    hash = "sha256-TY1TrQAK2nEncjZeanPrj8XOl1hK+chlrFsmohh/HLM=";
+  };
+
+  nativeBuildInputs = [
+    bison
+    flex
+  ];
+
+  buildInputs = [ buildsystem ];
+
+  makeFlags = [
+    "PREFIX=$(out)"
+    "NSSHARED=${buildsystem}/share/netsurf-buildsystem"
+  ];
+
+  meta = {
+    homepage = "https://www.netsurf-browser.org/";
+    description = "Generator for JavaScript bindings for netsurf browser";
+    license = lib.licenses.mit;
+    inherit (buildsystem.meta) maintainers platforms;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/networking/browsers/nyxt/default.nix b/nixpkgs/pkgs/applications/networking/browsers/nyxt/default.nix
new file mode 100644
index 000000000000..ecc75cd5cd30
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/nyxt/default.nix
@@ -0,0 +1,61 @@
+{ stdenv, lib, sbclPackages
+, makeWrapper, wrapGAppsHook, gst_all_1
+, glib, gdk-pixbuf, cairo
+, mailcap, pango, gtk3
+, glib-networking, gsettings-desktop-schemas
+, xclip, wl-clipboard, notify-osd, enchant
+}:
+
+stdenv.mkDerivation rec {
+  pname = "nyxt";
+  inherit (sbclPackages.nyxt) version;
+
+  src = sbclPackages.nyxt;
+
+  nativeBuildInputs = [ makeWrapper wrapGAppsHook ];
+  gstBuildInputs = with gst_all_1; [
+    gstreamer gst-libav
+    gst-plugins-base
+    gst-plugins-good
+    gst-plugins-bad
+    gst-plugins-ugly
+  ];
+  buildInputs = [
+    glib gdk-pixbuf cairo
+    mailcap pango gtk3
+    glib-networking gsettings-desktop-schemas
+    notify-osd enchant
+  ] ++ gstBuildInputs;
+
+  GST_PLUGIN_SYSTEM_PATH_1_0 = lib.makeSearchPathOutput "lib" "lib/gstreamer-1.0" gstBuildInputs;
+
+  # The executable is already built in sbclPackages.nyxt, buildPhase tries to build using the makefile which we ignore
+  dontBuild = true;
+
+  dontWrapGApps = true;
+  installPhase = ''
+    mkdir -p $out/share/applications/
+    sed "s/VERSION/$version/" $src/assets/nyxt.desktop > $out/share/applications/nyxt.desktop
+    for i in 16 32 128 256 512; do
+      mkdir -p "$out/share/icons/hicolor/''${i}x''${i}/apps/"
+      cp -f $src/assets/nyxt_''${i}x''${i}.png "$out/share/icons/hicolor/''${i}x''${i}/apps/nyxt.png"
+    done
+
+    mkdir -p $out/bin && makeWrapper $src/bin/nyxt $out/bin/nyxt \
+      --prefix PATH : ${lib.makeBinPath [ xclip wl-clipboard ]} \
+      --prefix GST_PLUGIN_SYSTEM_PATH_1_0 : "${GST_PLUGIN_SYSTEM_PATH_1_0}" \
+      --argv0 nyxt "''${gappsWrapperArgs[@]}"
+  '';
+
+  checkPhase = ''
+    $out/bin/nyxt -h
+  '';
+
+  meta = with lib; {
+    description = "Infinitely extensible web-browser (with Lisp development files using WebKitGTK platform port)";
+    homepage = "https://nyxt.atlas.engineer";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ lewo dariof4 ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/offpunk/default.nix b/nixpkgs/pkgs/applications/networking/browsers/offpunk/default.nix
new file mode 100644
index 000000000000..7adb6a1130f5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/offpunk/default.nix
@@ -0,0 +1,62 @@
+{
+  fetchFromSourcehut,
+  installShellFiles,
+  less,
+  lib,
+  offpunk,
+  python3Packages,
+  testers,
+  timg,
+  xdg-utils,
+  xsel,
+}:
+
+let
+  pythonDependencies = with python3Packages; [
+    beautifulsoup4
+    chardet
+    cryptography
+    feedparser
+    pillow
+    readability-lxml
+    requests
+    setproctitle
+  ];
+  otherDependencies = [
+    less
+    timg
+    xdg-utils
+    xsel
+  ];
+in
+python3Packages.buildPythonPackage rec {
+  pname = "offpunk";
+  version = "1.10";
+  format = "flit";
+
+  disabled = python3Packages.pythonOlder "3.7";
+
+  src = fetchFromSourcehut {
+    owner = "~lioploum";
+    repo = "offpunk";
+    rev = "v${version}";
+    hash = "sha256-+jGKPPnKZHn+l6VAwuae6kICwR7ymkYJjsM2OHQAEmU=";
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+  propagatedBuildInputs = otherDependencies ++ pythonDependencies;
+
+  postInstall = ''
+    installManPage man/*.1
+  '';
+
+  passthru.tests.version = testers.testVersion { package = offpunk; };
+
+  meta = with lib; {
+    description = "An Offline-First browser for the smolnet ";
+    homepage = src.meta.homepage;
+    maintainers = with maintainers; [ DamienCassou ];
+    platforms = platforms.linux;
+    license = licenses.bsd2;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/opera/default.nix b/nixpkgs/pkgs/applications/networking/browsers/opera/default.nix
new file mode 100644
index 000000000000..02e000cf4e65
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/opera/default.nix
@@ -0,0 +1,142 @@
+{ alsa-lib
+, atk
+, cairo
+, cups
+, curl
+, dbus
+, dpkg
+, expat
+, fetchurl
+, fontconfig
+, freetype
+, gdk-pixbuf
+, glib
+, gtk3
+, gtk4
+, lib
+, libX11
+, libxcb
+, libXScrnSaver
+, libXcomposite
+, libXcursor
+, libXdamage
+, libXext
+, libXfixes
+, libXi
+, libXrandr
+, libXrender
+, libXtst
+, libdrm
+, libnotify
+, libpulseaudio
+, libuuid
+, libxshmfence
+, mesa
+, nspr
+, nss
+, pango
+, stdenv
+, systemd
+, at-spi2-atk
+, at-spi2-core
+, autoPatchelfHook
+, wrapGAppsHook
+, qt5
+, proprietaryCodecs ? false
+, vivaldi-ffmpeg-codecs
+}:
+
+let
+  mirror = "https://get.geo.opera.com/pub/opera/desktop";
+in
+stdenv.mkDerivation rec {
+  pname = "opera";
+  version = "100.0.4815.47";
+
+  src = fetchurl {
+    url = "${mirror}/${version}/linux/${pname}-stable_${version}_amd64.deb";
+    hash = "sha256-746imLXqxzf9zK2QEVRuWkLA6m+HHXBYZFUwTD0HEVc=";
+  };
+
+  unpackPhase = "dpkg-deb -x $src .";
+
+  nativeBuildInputs = [
+    dpkg
+    autoPatchelfHook
+    wrapGAppsHook
+    qt5.wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    alsa-lib
+    at-spi2-atk
+    at-spi2-core
+    atk
+    cairo
+    cups
+    curl
+    dbus
+    expat
+    fontconfig.lib
+    freetype
+    gdk-pixbuf
+    glib
+    gtk3
+    libX11
+    libXScrnSaver
+    libXcomposite
+    libXcursor
+    libXdamage
+    libXext
+    libXfixes
+    libXi
+    libXrandr
+    libXrender
+    libXtst
+    libdrm
+    libnotify
+    libuuid
+    libxcb
+    libxshmfence
+    mesa
+    nspr
+    nss
+    pango
+    stdenv.cc.cc.lib
+  ];
+
+  runtimeDependencies = [
+    # Works fine without this except there is no sound.
+    libpulseaudio.out
+
+    # This is a little tricky. Without it the app starts then crashes. Then it
+    # brings up the crash report, which also crashes. `strace -f` hints at a
+    # missing libudev.so.0.
+    (lib.getLib systemd)
+
+    # Error at startup:
+    # "Illegal instruction (core dumped)"
+    gtk3
+    gtk4
+  ] ++ lib.optionals proprietaryCodecs [
+    vivaldi-ffmpeg-codecs
+  ];
+
+  dontWrapQtApps = true;
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -r usr $out
+    cp -r usr/share $out/share
+    ln -s $out/usr/bin/opera $out/bin/opera
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.opera.com";
+    description = "Faster, safer and smarter web browser";
+    platforms = [ "x86_64-linux" ];
+    license = licenses.unfree;
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    maintainers = with maintainers; [ kindrowboat ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/palemoon/bin.nix b/nixpkgs/pkgs/applications/networking/browsers/palemoon/bin.nix
new file mode 100644
index 000000000000..ece75ad87257
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/palemoon/bin.nix
@@ -0,0 +1,189 @@
+{ stdenv
+, lib
+, fetchzip
+, alsa-lib
+, autoPatchelfHook
+, copyDesktopItems
+, dbus-glib
+, ffmpeg
+, gtk2-x11
+, withGTK3 ? true
+, gtk3
+, libXt
+, libpulseaudio
+, makeDesktopItem
+, wrapGAppsHook
+, testers
+, palemoon-bin
+}:
+
+stdenv.mkDerivation rec {
+  pname = "palemoon-bin";
+  version = "32.3.1";
+
+  src = fetchzip {
+    urls = [
+      "https://rm-eu.palemoon.org/release/palemoon-${version}.linux-x86_64-gtk${if withGTK3 then "3" else "2"}.tar.xz"
+      "https://rm-us.palemoon.org/release/palemoon-${version}.linux-x86_64-gtk${if withGTK3 then "3" else "2"}.tar.xz"
+    ];
+    hash = if withGTK3 then
+      "sha256-1JYaxxkqgg/gLdZ+uGDB5BI0NKjHO4huk0b/M9QFuII="
+    else
+      "sha256-p/Lid6Uv3XTEg+43Gke5VLILhzENHoBP6XjGVHy7wCY=";
+  };
+
+  preferLocalBuild = true;
+
+  strictDeps = true;
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+    copyDesktopItems
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    alsa-lib
+    dbus-glib
+    gtk2-x11
+    libXt
+    stdenv.cc.cc.lib
+  ] ++ lib.optionals withGTK3 [
+    gtk3
+  ];
+
+  desktopItems = [(makeDesktopItem rec {
+    name = pname;
+    desktopName = "Pale Moon Web Browser";
+    comment = "Browse the World Wide Web";
+    keywords = [
+      "Internet"
+      "WWW"
+      "Browser"
+      "Web"
+      "Explorer"
+    ];
+    exec = "palemoon %u";
+    terminal = false;
+    type = "Application";
+    icon = "palemoon";
+    categories = [
+      "Network"
+      "WebBrowser"
+    ];
+    mimeTypes = [
+      "text/html"
+      "text/xml"
+      "application/xhtml+xml"
+      "application/xml"
+      "application/rss+xml"
+      "application/rdf+xml"
+      "image/gif"
+      "image/jpeg"
+      "image/png"
+      "x-scheme-handler/http"
+      "x-scheme-handler/https"
+      "x-scheme-handler/ftp"
+      "x-scheme-handler/chrome"
+      "video/webm"
+      "application/x-xpinstall"
+    ];
+    startupNotify = true;
+    startupWMClass = "Pale moon";
+    extraConfig = {
+      X-MultipleArgs = "false";
+    };
+    actions = {
+      "NewTab" = {
+        name = "Open new tab";
+        exec = "palemoon -new-tab https://start.palemoon.org";
+      };
+      "NewWindow" = {
+        name = "Open new window";
+        exec = "palemoon -new-window";
+      };
+      "NewPrivateWindow" = {
+        name = "Open new private window";
+        exec = "palemoon -private-window";
+      };
+      "ProfileManager" = {
+        name = "Open the Profile Manager";
+        exec = "palemoon --ProfileManager";
+      };
+    };
+  })];
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/{bin,lib/palemoon}
+    cp -R * $out/lib/palemoon/
+
+    ln -s $out/{lib/palemoon,bin}/palemoon
+
+    for iconpath in chrome/icons/default/default{16,32,48} icons/mozicon128; do
+      n=''${iconpath//[^0-9]/}
+      size=$n"x"$n
+      mkdir -p $out/share/icons/hicolor/$size/apps
+      ln -s $out/lib/palemoon/browser/"$iconpath".png $out/share/icons/hicolor/$size/apps/palemoon.png
+    done
+
+    # Disable built-in updater
+    # https://forum.palemoon.org/viewtopic.php?f=5&t=25073&p=197771#p197747
+    # > Please do not take this as permission to change, remove, or alter any other preferences as that is forbidden
+    # > without express permission according to the Pale Moon Redistribution License.
+    # > We are allowing this one and **ONLY** one exception in order to properly facilitate [package manager] repacks.
+    install -Dm644 ${./zz-disableUpdater.js} $out/lib/palemoon/browser/defaults/preferences/zz-disableUpdates.js
+
+    runHook postInstall
+  '';
+
+  dontWrapGApps = true;
+
+  preFixup = ''
+    # Make optional dependencies available
+    gappsWrapperArgs+=(
+      --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [
+        ffmpeg
+        libpulseaudio
+      ]}"
+    )
+    wrapGApp $out/lib/palemoon/palemoon
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = palemoon-bin;
+  };
+
+  meta = with lib; {
+    homepage = "https://www.palemoon.org/";
+    description = "An Open Source, Goanna-based web browser focusing on efficiency and customization";
+    longDescription = ''
+      Pale Moon is an Open Source, Goanna-based web browser focusing on
+      efficiency and customization.
+      Pale Moon offers you a browsing experience in a browser completely built
+      from its own, independently developed source that has been forked off from
+      Firefox/Mozilla code a number of years ago, with carefully selected
+      features and optimizations to improve the browser's stability and user
+      experience, while offering full customization and a growing collection of
+      extensions and themes to make the browser truly your own.
+    '';
+    changelog = "https://repo.palemoon.org/MoonchildProductions/Pale-Moon/releases/tag/${version}_Release";
+    license = [
+      licenses.mpl20
+      {
+        fullName = "Pale Moon Redistribution License";
+        url = "https://www.palemoon.org/redist.shtml";
+        # TODO free, redistributable? Has strict limitations on what modifications may be done & shipped by packagers
+      }
+    ];
+    maintainers = with maintainers; [ AndersonTorres OPNA2608 ];
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    mainProgram = "palemoon";
+    platforms = [ "x86_64-linux" ];
+    hydraPlatforms = [];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/palemoon/zz-disableUpdater.js b/nixpkgs/pkgs/applications/networking/browsers/palemoon/zz-disableUpdater.js
new file mode 100644
index 000000000000..50b8a79f627a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/palemoon/zz-disableUpdater.js
@@ -0,0 +1,7 @@
+/* https://forum.palemoon.org/viewtopic.php?f=5&t=25073&p=197771#p197747 */
+
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+pref("app.update.enabled", false);
diff --git a/nixpkgs/pkgs/applications/networking/browsers/polypane/default.nix b/nixpkgs/pkgs/applications/networking/browsers/polypane/default.nix
new file mode 100644
index 000000000000..4426eabe60e5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/polypane/default.nix
@@ -0,0 +1,41 @@
+{ lib, fetchurl, appimageTools }:
+
+let
+  pname = "polypane";
+  version = "14.1.0";
+
+  src = fetchurl {
+    url = "https://github.com/firstversionist/${pname}/releases/download/v${version}/${pname}-${version}.AppImage";
+    name = "${pname}-${version}.AppImage";
+    sha256 = "sha256-UJ4Ccz9PjpmZqJGbJjw3lyqR3VCl9xf3F6WUoBaUEVg=";
+  };
+
+  appimageContents = appimageTools.extractType2 {
+    inherit pname src version;
+  };
+in appimageTools.wrapType2 {
+  inherit pname src version;
+
+  multiArch = false;
+  extraPkgs = pkgs: appimageTools.defaultFhsEnvArgs.multiPkgs pkgs ++ [ pkgs.bash ];
+
+  extraInstallCommands = ''
+    ln -s $out/bin/${pname}-${version} $out/bin/${pname}
+    install -m 444 -D ${appimageContents}/${pname}.desktop $out/share/applications/${pname}.desktop
+    install -m 444 -D ${appimageContents}/${pname}.png \
+      $out/share/icons/hicolor/512x512/apps/${pname}.png
+  '';
+
+  meta = with lib; {
+    description = "Browser with unified devtools targeting responsability and accessibility";
+    longDescription = ''
+      The stand-alone browser for ambitious developers that want to build responsive,
+      accessible and performant websites in a fraction of the time it takes with other browsers.
+    '';
+    homepage = "https://polypane.app/";
+    maintainers = with maintainers; [ zoedsoupe ];
+    platforms = [ "x86_64-linux" ];
+    changelog = "https://polypane.app/docs/changelog/";
+    license = licenses.unfree;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/qtchan/default.nix b/nixpkgs/pkgs/applications/networking/browsers/qtchan/default.nix
new file mode 100644
index 000000000000..8ad81139fbe9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/qtchan/default.nix
@@ -0,0 +1,30 @@
+{ mkDerivation, lib, fetchFromGitHub, qmake, qtbase }:
+
+mkDerivation rec {
+  pname = "qtchan";
+  version = "1.0.1";
+
+  src = fetchFromGitHub {
+    owner  = "siavash119";
+    repo   = "qtchan";
+    rev    = "v${version}";
+    sha256 = "1x11m1kwqindzc0dkpfifcglsb362impaxs85kgzx50p898sz9ll";
+  };
+
+  nativeBuildInputs = [ qmake ];
+  buildInputs = [ qtbase ];
+  qmakeFlags = [ "CONFIG-=app_bundle" ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp qtchan $out/bin
+  '';
+
+  meta = with lib; {
+    description = "4chan browser in qt5";
+    homepage    = "https://github.com/siavash119/qtchan";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ Madouura ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/qutebrowser/default.nix b/nixpkgs/pkgs/applications/networking/browsers/qutebrowser/default.nix
new file mode 100644
index 000000000000..1f898ed87986
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/qutebrowser/default.nix
@@ -0,0 +1,129 @@
+{ stdenv, lib, fetchurl, fetchzip, python3
+, wrapQtAppsHook, glib-networking
+, asciidoc, docbook_xml_dtd_45, docbook_xsl, libxml2
+, libxslt, gst_all_1 ? null
+, withPdfReader      ? true
+, withMediaPlayback  ? true
+, backend            ? "webengine"
+, pipewireSupport    ? stdenv.isLinux
+, pipewire
+, qtwayland
+, qtbase
+, qtwebengine
+, wrapGAppsHook
+, enableWideVine ? false
+, widevine-cdm
+}:
+
+let
+  pdfjs = let
+    version = "3.9.179";
+  in
+  fetchzip {
+    url = "https://github.com/mozilla/pdf.js/releases/download/v${version}/pdfjs-${version}-dist.zip";
+    hash = "sha256-QoJFb7MlZN6lDe2Yalsd10sseukL6+tNRi6JzLPVBYw=";
+    stripRoot = false;
+  };
+
+  pname = "qutebrowser";
+  version = "3.0.0";
+in
+
+assert withMediaPlayback -> gst_all_1 != null;
+assert lib.assertMsg (backend != "webkit") ''
+  Support for the QtWebKit backend has been removed.
+  Please remove the `backend = "webkit"` option from your qutebrowser override.
+'';
+
+python3.pkgs.buildPythonApplication {
+  inherit pname version;
+  src = fetchurl {
+    url = "https://github.com/qutebrowser/qutebrowser/releases/download/v${version}/${pname}-${version}.tar.gz";
+    hash = "sha256-Oer0p/DwUfOejUCgSCSkMvLLAjNyJx51qgN7bcQQ2Pw=";
+  };
+
+  # Needs tox
+  doCheck = false;
+
+  buildInputs = [
+    qtbase
+    glib-networking
+  ] ++ lib.optionals withMediaPlayback (with gst_all_1; [
+    gst-plugins-base gst-plugins-good
+    gst-plugins-bad gst-plugins-ugly gst-libav
+  ]);
+
+  nativeBuildInputs = [
+    wrapQtAppsHook wrapGAppsHook asciidoc
+    docbook_xml_dtd_45 docbook_xsl libxml2 libxslt
+    python3.pkgs.pygments
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; ([
+    pyyaml pyqt6-webengine jinja2 pygments
+    # scripts and userscripts libs
+    tldextract beautifulsoup4
+    readability-lxml pykeepass stem
+    pynacl
+    # extensive ad blocking
+    adblock
+  ] ++ lib.optional stdenv.isLinux qtwayland
+  );
+
+  patches = [
+    ./fix-restart.patch
+  ];
+
+  dontWrapGApps = true;
+  dontWrapQtApps = true;
+
+  postPatch = ''
+    substituteInPlace qutebrowser/misc/quitter.py --subst-var-by qutebrowser "$out/bin/qutebrowser"
+
+    sed -i "s,/usr,$out,g" qutebrowser/utils/standarddir.py
+  '' + lib.optionalString withPdfReader ''
+    sed -i "s,/usr/share/pdf.js,${pdfjs},g" qutebrowser/browser/pdfjs.py
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    make -f misc/Makefile \
+      PYTHON=${python3}/bin/python3 \
+      PREFIX=. \
+      DESTDIR="$out" \
+      DATAROOTDIR=/share \
+      install
+
+    runHook postInstall
+  '';
+
+  postInstall = ''
+    # Patch python scripts
+    buildPythonPath "$out $propagatedBuildInputs"
+    scripts=$(grep -rl python "$out"/share/qutebrowser/{user,}scripts/)
+    for i in $scripts; do
+      patchPythonScript "$i"
+    done
+  '';
+
+  preFixup = let
+    libPath = lib.makeLibraryPath [ pipewire ];
+  in
+    ''
+    makeWrapperArgs+=(
+      "''${gappsWrapperArgs[@]}"
+      "''${qtWrapperArgs[@]}"
+      ${lib.optionalString pipewireSupport ''--prefix LD_LIBRARY_PATH : ${libPath}''}
+      ${lib.optionalString enableWideVine ''--add-flags "--qt-flag widevine-path=${widevine-cdm}/share/google/chrome/WidevineCdm/_platform_specific/linux_x64/libwidevinecdm.so"''}
+    )
+  '';
+
+  meta = with lib; {
+    homepage    = "https://github.com/qutebrowser/qutebrowser";
+    description = "Keyboard-focused browser with a minimal GUI";
+    license     = licenses.gpl3Plus;
+    platforms   = if enableWideVine then [ "x86_64-linux" ] else qtwebengine.meta.platforms;
+    maintainers = with maintainers; [ jagajaga rnhmjoj ebzzry dotlambda nrdxp ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/qutebrowser/fix-restart.patch b/nixpkgs/pkgs/applications/networking/browsers/qutebrowser/fix-restart.patch
new file mode 100644
index 000000000000..828fa5e107c9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/qutebrowser/fix-restart.patch
@@ -0,0 +1,19 @@
+diff --git a/quitter.py b/quitter.py
+index a42b9d0..f544ccb 100644
+--- a/qutebrowser/misc/quitter.py
++++ b/qutebrowser/misc/quitter.py
+@@ -112,13 +112,7 @@ class Quitter(QObject):
+         Return:
+             The commandline as a list of strings.
+         """
+-        if os.path.basename(sys.argv[0]) == 'qutebrowser':
+-            # Launched via launcher script
+-            args = [sys.argv[0]]
+-        elif hasattr(sys, 'frozen'):
+-            args = [sys.executable]
+-        else:
+-            args = [sys.executable, '-m', 'qutebrowser']
++        args = ['@qutebrowser@']
+ 
+         # Add all open pages so they get reopened.
+         page_args = []  # type: typing.MutableSequence[str]
diff --git a/nixpkgs/pkgs/applications/networking/browsers/surf/default.nix b/nixpkgs/pkgs/applications/networking/browsers/surf/default.nix
new file mode 100644
index 000000000000..6573821d0598
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/surf/default.nix
@@ -0,0 +1,63 @@
+{ lib, stdenv, fetchgit
+, pkg-config, wrapGAppsHook
+, glib, gcr, glib-networking, gsettings-desktop-schemas, gtk, libsoup, webkitgtk
+, xorg, dmenu, findutils, gnused, coreutils, gst_all_1
+, patches ? null
+}:
+
+stdenv.mkDerivation rec {
+  pname = "surf";
+  version = "2.1";
+
+  # tarball is missing file common.h
+  src = fetchgit {
+    url = "git://git.suckless.org/surf";
+    rev = version;
+    sha256 = "1v926hiayddylq79n8l7dy51bm0dsa9n18nx9bkhg666cx973x4z";
+  };
+
+  nativeBuildInputs = [ pkg-config wrapGAppsHook ];
+  buildInputs = [
+    glib
+    gcr
+    glib-networking
+    gsettings-desktop-schemas
+    gtk
+    libsoup
+    webkitgtk
+  ] ++ (with gst_all_1; [
+    # Audio & video support for webkitgtk WebView
+    gstreamer
+    gst-plugins-base
+    gst-plugins-good
+    gst-plugins-bad
+  ]);
+
+  inherit patches;
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  # Add run-time dependencies to PATH. Append them to PATH so the user can
+  # override the dependencies with their own PATH.
+  preFixup = let
+    depsPath = lib.makeBinPath [ xorg.xprop dmenu findutils gnused coreutils ];
+  in ''
+    gappsWrapperArgs+=(
+      --suffix PATH : ${depsPath}
+    )
+  '';
+
+  meta = with lib; {
+    description = "A simple web browser based on WebKitGTK";
+    longDescription = ''
+      surf is a simple web browser based on WebKitGTK. It is able to display
+      websites and follow links. It supports the XEmbed protocol which makes it
+      possible to embed it in another application. Furthermore, one can point
+      surf to another URI by setting its XProperties.
+    '';
+    homepage = "https://surf.suckless.org";
+    license = licenses.mit;
+    platforms = webkitgtk.meta.platforms;
+    maintainers = with maintainers; [ joachifm ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/telescope/default.nix b/nixpkgs/pkgs/applications/networking/browsers/telescope/default.nix
new file mode 100644
index 000000000000..92124531691d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/telescope/default.nix
@@ -0,0 +1,48 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, pkg-config
+, bison
+, libevent
+, libressl
+, ncurses
+, autoreconfHook
+, buildPackages
+, memstreamHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "telescope";
+  version = "0.8.1";
+
+  src = fetchFromGitHub {
+    owner = "omar-polo";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-9gZeBAC7AGU5vb+692npjKbbqFEAr9iGLu1u68EJ0W8=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+    bison
+  ];
+
+  buildInputs = [
+    libevent
+    libressl
+    ncurses
+  ] ++ lib.optional stdenv.isDarwin memstreamHook;
+
+  configureFlags = [
+    "HOSTCC=${buildPackages.stdenv.cc}/bin/${buildPackages.stdenv.cc.targetPrefix}cc"
+  ];
+
+  meta = with lib; {
+    description = "Telescope is a w3m-like browser for Gemini";
+    homepage = "https://telescope.omarpolo.com/";
+    license = licenses.isc;
+    maintainers = with maintainers; [ heph2 ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/tor-browser-bundle-bin/default.nix b/nixpkgs/pkgs/applications/networking/browsers/tor-browser-bundle-bin/default.nix
new file mode 100644
index 000000000000..c6f01cfbca87
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/tor-browser-bundle-bin/default.nix
@@ -0,0 +1,483 @@
+{ lib, stdenv
+, fetchurl
+, makeDesktopItem
+, writeText
+, callPackage
+
+# Common run-time dependencies
+, zlib
+
+# libxul run-time dependencies
+, atk
+, cairo
+, dbus
+, dbus-glib
+, fontconfig
+, freetype
+, gdk-pixbuf
+, glib
+, gtk3
+, libxcb
+, libX11
+, libXext
+, libXrender
+, libXt
+, pango
+
+, audioSupport ? mediaSupport
+, pulseaudioSupport ? mediaSupport
+, libpulseaudio
+, apulse
+, alsa-lib
+
+# Media support (implies audio support)
+, mediaSupport ? true
+, ffmpeg
+
+, gmp
+
+# Wrapper runtime
+, coreutils
+, glibcLocales
+, gnome
+, runtimeShell
+, shared-mime-info
+, gsettings-desktop-schemas
+
+# Hardening
+, graphene-hardened-malloc
+# Whether to use graphene-hardened-malloc
+, useHardenedMalloc ? null
+
+# Whether to disable multiprocess support
+, disableContentSandbox ? false
+
+# Extra preferences
+, extraPrefs ? ""
+}:
+
+lib.warnIf (useHardenedMalloc != null)
+  "tor-browser-bundle-bin: useHardenedMalloc is deprecated and enabling it can cause issues"
+
+(let
+  libPath = lib.makeLibraryPath libPkgs;
+
+  libPkgs = [
+    alsa-lib
+    atk
+    cairo
+    dbus
+    dbus-glib
+    fontconfig
+    freetype
+    gdk-pixbuf
+    glib
+    gtk3
+    libxcb
+    libX11
+    libXext
+    libXrender
+    libXt
+    pango
+    stdenv.cc.cc
+    stdenv.cc.libc
+    zlib
+  ]
+  ++ lib.optionals pulseaudioSupport [ libpulseaudio ]
+  ++ lib.optionals mediaSupport [
+    ffmpeg
+  ];
+
+  # Library search path for the fte transport
+  fteLibPath = lib.makeLibraryPath [ stdenv.cc.cc gmp ];
+
+  # Upstream source
+  version = "12.5.3";
+
+  lang = "ALL";
+
+  sources = {
+    x86_64-linux = fetchurl {
+      urls = [
+        "https://dist.torproject.org/torbrowser/${version}/tor-browser-linux64-${version}_${lang}.tar.xz"
+        "https://archive.torproject.org/tor-package-archive/torbrowser/${version}/tor-browser-linux64-${version}_${lang}.tar.xz"
+        "https://tor.eff.org/dist/torbrowser/${version}/tor-browser-linux64-${version}_${lang}.tar.xz"
+        "https://tor.calyxinstitute.org/dist/torbrowser/${version}/tor-browser-linux64-${version}_${lang}.tar.xz"
+      ];
+      hash = "sha256-QF71UXZXwLjr1XugKeFWZH9RXb4xeKWZScds+xtNekI=";
+    };
+
+    i686-linux = fetchurl {
+      urls = [
+        "https://dist.torproject.org/torbrowser/${version}/tor-browser-linux32-${version}_${lang}.tar.xz"
+        "https://archive.torproject.org/tor-package-archive/torbrowser/${version}/tor-browser-linux32-${version}_${lang}.tar.xz"
+        "https://tor.eff.org/dist/torbrowser/${version}/tor-browser-linux32-${version}_${lang}.tar.xz"
+        "https://tor.calyxinstitute.org/dist/torbrowser/${version}/tor-browser-linux32-${version}_${lang}.tar.xz"
+      ];
+      hash = "sha256-xaLTYo8aJO0DzFQLSUHF12vKOEMO6hbVXQdL3PHLb8s=";
+    };
+  };
+
+  distributionIni = writeText "distribution.ini" (lib.generators.toINI {} {
+    # Some light branding indicating this build uses our distro preferences
+    Global = {
+      id = "nixos";
+      version = "1.0";
+      about = "Tor Browser for NixOS";
+    };
+  });
+
+  policiesJson = writeText "policies.json" (builtins.toJSON {
+    policies.DisableAppUpdate = true;
+  });
+in
+stdenv.mkDerivation rec {
+  pname = "tor-browser-bundle-bin";
+  inherit version;
+
+  src = sources.${stdenv.hostPlatform.system} or (throw "unsupported system: ${stdenv.hostPlatform.system}");
+
+  preferLocalBuild = true;
+  allowSubstitutes = false;
+
+  desktopItem = makeDesktopItem {
+    name = "torbrowser";
+    exec = "tor-browser";
+    icon = "torbrowser";
+    desktopName = "Tor Browser";
+    genericName = "Web Browser";
+    comment = meta.description;
+    categories = [ "Network" "WebBrowser" "Security" ];
+  };
+
+  buildPhase = ''
+    runHook preBuild
+
+    # For convenience ...
+    TBB_IN_STORE=$out/share/tor-browser
+    interp=$(< $NIX_CC/nix-support/dynamic-linker)
+
+    # Unpack & enter
+    mkdir -p "$TBB_IN_STORE"
+    tar xf "$src" -C "$TBB_IN_STORE" --strip-components=2
+    pushd "$TBB_IN_STORE"
+
+    # Set ELF interpreter
+    for exe in firefox.real TorBrowser/Tor/tor ; do
+      echo "Setting ELF interpreter on $exe ..." >&2
+      patchelf --set-interpreter "$interp" "$exe"
+    done
+
+    # firefox is a wrapper that checks for a more recent libstdc++ & appends it to the ld path
+    mv firefox.real firefox
+
+    # The final libPath.  Note, we could split this into firefoxLibPath
+    # and torLibPath for accuracy, but this is more convenient ...
+    libPath=${libPath}:$TBB_IN_STORE:$TBB_IN_STORE/TorBrowser/Tor
+
+    # apulse uses a non-standard library path.  For now special-case it.
+    ${lib.optionalString (audioSupport && !pulseaudioSupport) ''
+      libPath=${apulse}/lib/apulse:$libPath
+    ''}
+
+    # Fixup paths to pluggable transports.
+    sed -i TorBrowser/Data/Tor/torrc-defaults \
+        -e "s,./TorBrowser,$TBB_IN_STORE/TorBrowser,g"
+
+    # Fixup obfs transport.  Work around patchelf failing to set
+    # interpreter for pre-compiled Go binaries by invoking the interpreter
+    # directly.
+    sed -i TorBrowser/Data/Tor/torrc-defaults \
+        -e "s|\(ClientTransportPlugin meek_lite,obfs2,obfs3,obfs4,scramblesuit\) exec|\1 exec $interp|"
+
+    # Similarly fixup snowflake
+    sed -i TorBrowser/Data/Tor/torrc-defaults \
+        -e "s|\(ClientTransportPlugin snowflake\) exec|\1 exec $interp|"
+
+
+    # Prepare for autoconfig.
+    #
+    # See https://developer.mozilla.org/en-US/Firefox/Enterprise_deployment
+    cat >defaults/pref/autoconfig.js <<EOF
+    //
+    pref("general.config.filename", "mozilla.cfg");
+    pref("general.config.obscure_value", 0);
+    EOF
+
+    # Hard-coded Firefox preferences.
+    cat >mozilla.cfg <<EOF
+    // First line must be a comment
+
+    // Always update via Nixpkgs
+    lockPref("app.update.auto", false);
+    lockPref("app.update.enabled", false);
+    lockPref("extensions.update.autoUpdateDefault", false);
+    lockPref("extensions.update.enabled", false);
+    lockPref("extensions.torbutton.versioncheck_enabled", false);
+
+    // User should never change these.  Locking prevents these
+    // values from being written to prefs.js, avoiding Store
+    // path capture.
+    lockPref("extensions.torlauncher.torrc-defaults_path", "$TBB_IN_STORE/TorBrowser/Data/Tor/torrc-defaults");
+    lockPref("extensions.torlauncher.tor_path", "$TBB_IN_STORE/TorBrowser/Tor/tor");
+
+    // Reset pref that captures store paths.
+    clearPref("extensions.xpiState");
+
+    // Stop obnoxious first-run redirection.
+    lockPref("noscript.firstRunRedirection", false);
+
+    // Insist on using IPC for communicating with Tor
+    //
+    // Defaults to creating \$XDG_RUNTIME_DIR/Tor/{socks,control}.socket
+    lockPref("extensions.torlauncher.control_port_use_ipc", true);
+    lockPref("extensions.torlauncher.socks_port_use_ipc", true);
+
+    // Optionally disable multiprocess support.  We always set this to ensure that
+    // toggling the pref takes effect.
+    lockPref("browser.tabs.remote.autostart.2", ${if disableContentSandbox then "false" else "true"});
+
+    // Allow sandbox access to sound devices if using ALSA directly
+    ${if (audioSupport && !pulseaudioSupport) then ''
+      pref("security.sandbox.content.write_path_whitelist", "/dev/snd/");
+    '' else ''
+      clearPref("security.sandbox.content.write_path_whitelist");
+    ''}
+
+    ${lib.optionalString (extraPrefs != "") ''
+      ${extraPrefs}
+    ''}
+    EOF
+
+    # Hard-code path to TBB fonts; see also FONTCONFIG_FILE in
+    # the wrapper below.
+    FONTCONFIG_FILE=$TBB_IN_STORE/fontconfig/fonts.conf
+    sed -i "$FONTCONFIG_FILE" \
+        -e "s,<dir>fonts</dir>,<dir>$TBB_IN_STORE/fonts</dir>,"
+
+    # Preload extensions by moving into the runtime instead of storing under the
+    # user's profile directory.
+    # See https://support.mozilla.org/en-US/kb/deploying-firefox-with-extensions
+    mkdir -p "$TBB_IN_STORE/distribution/extensions"
+    mv "$TBB_IN_STORE/TorBrowser/Data/Browser/profile.default/extensions/"* \
+      "$TBB_IN_STORE/distribution/extensions"
+
+    # Hard-code paths to geoip data files.  TBB resolves the geoip files
+    # relative to torrc-defaults_path but if we do not hard-code them
+    # here, these paths end up being written to the torrc in the user's
+    # state dir.
+    cat >>TorBrowser/Data/Tor/torrc-defaults <<EOF
+    GeoIPFile $TBB_IN_STORE/TorBrowser/Data/Tor/geoip
+    GeoIPv6File $TBB_IN_STORE/TorBrowser/Data/Tor/geoip6
+    EOF
+
+    WRAPPER_LD_PRELOAD=${lib.optionalString (useHardenedMalloc == true)
+      "${graphene-hardened-malloc}/lib/libhardened_malloc.so"}
+
+    WRAPPER_XDG_DATA_DIRS=${lib.concatMapStringsSep ":" (x: "${x}/share") [
+      gnome.adwaita-icon-theme
+      shared-mime-info
+    ]}
+    WRAPPER_XDG_DATA_DIRS+=":"${lib.concatMapStringsSep ":" (x: "${x}/share/gsettings-schemas/${x.name}") [
+      glib
+      gsettings-desktop-schemas
+      gtk3
+    ]};
+
+    # Generate wrapper
+    mkdir -p $out/bin
+    cat > "$out/bin/tor-browser" << EOF
+    #! ${runtimeShell}
+    set -o errexit -o nounset
+
+    PATH=${lib.makeBinPath [ coreutils ]}
+    export LC_ALL=C
+    export LOCALE_ARCHIVE=${glibcLocales}/lib/locale/locale-archive
+
+    # Enter local state directory.
+    REAL_HOME=\''${HOME%/}
+    TBB_HOME=\''${TBB_HOME:-''${XDG_DATA_HOME:-\$REAL_HOME/.local/share}/tor-browser}
+    HOME=\$TBB_HOME
+
+    mkdir -p "\$HOME"
+    cd "\$HOME"
+
+    # Initialize empty TBB local state directory hierarchy.  We
+    # intentionally mirror the layout that TBB would see if executed from
+    # the unpacked bundle dir.
+    mkdir -p "\$HOME/TorBrowser" "\$HOME/TorBrowser/Data"
+
+    # Initialize the Tor data directory.
+    mkdir -p "\$HOME/TorBrowser/Data/Tor"
+
+    # TBB will fail if ownership is too permissive
+    chmod 0700 "\$HOME/TorBrowser/Data/Tor"
+
+    # Initialize the browser profile state.
+    # All files under user's profile dir are generated by TBB.
+    mkdir -p "\$HOME/TorBrowser/Data/Browser/profile.default"
+
+    # Clear some files if the last known store path is different from the new one
+    : "\''${KNOWN_STORE_PATH:=\$HOME/known-store-path}"
+    if ! [ "\$KNOWN_STORE_PATH" -ef $out ]; then
+      echo "Cleanup files with outdated store references"
+      ln -Tsf $out "\$KNOWN_STORE_PATH"
+
+      # Clear out some files that tend to capture store references but are
+      # easily generated by firefox at startup.
+      rm -f "\$HOME/TorBrowser/Data/Browser/profile.default"/{addonStartup.json.lz4,compatibility.ini,extensions.ini,extensions.json}
+      rm -f "\$HOME/TorBrowser/Data/Browser/profile.default"/startupCache/*
+    fi
+
+    # XDG
+    : "\''${XDG_RUNTIME_DIR:=/run/user/\$(id -u)}"
+    : "\''${XDG_CONFIG_HOME:=\$REAL_HOME/.config}"
+
+    ${lib.optionalString pulseaudioSupport ''
+      # Figure out some envvars for pulseaudio
+      : "\''${PULSE_SERVER:=\$XDG_RUNTIME_DIR/pulse/native}"
+      : "\''${PULSE_COOKIE:=\$XDG_CONFIG_HOME/pulse/cookie}"
+    ''}
+
+    # Font cache files capture store paths; clear them out on the off
+    # chance that TBB would continue using old font files.
+    rm -rf "\$HOME/.cache/fontconfig"
+
+    # Workaround a bug in 12.0.X that Tor directories are not cleaned up and tor gets confused where its socket is
+    rm -rf \$XDG_RUNTIME_DIR/Tor*
+
+    # Manually specify data paths (by default TB attempts to create these in the store)
+    {
+      echo "user_pref(\"extensions.torlauncher.toronionauthdir_path\", \"\$HOME/TorBrowser/Data/Tor/onion-auth\");"
+      echo "user_pref(\"extensions.torlauncher.torrc_path\", \"\$HOME/TorBrowser/Data/Tor/torrc\");"
+      echo "user_pref(\"extensions.torlauncher.tordatadir_path\", \"\$HOME/TorBrowser/Data/Tor\");"
+      echo "user_pref(\"network.proxy.socks\", \"file://\$XDG_RUNTIME_DIR/Tor/socks.socket\");"
+    } >> "\$HOME/TorBrowser/Data/Browser/profile.default/prefs.js"
+
+    # Lift-off
+    #
+    # XAUTHORITY and DISPLAY are required for TBB to work at all.
+    #
+    # DBUS_SESSION_BUS_ADDRESS is inherited to avoid auto-launch; to
+    # prevent that, set it to an empty/invalid value prior to running
+    # tor-browser.
+    #
+    # PULSE_SERVER is necessary for audio playback.
+    #
+    # Setting FONTCONFIG_FILE is required to make fontconfig read the TBB
+    # fonts.conf; upstream uses FONTCONFIG_PATH, but FC_DEBUG=1024
+    # indicates the system fonts.conf being used instead.
+    #
+    # XDG_DATA_DIRS is set to prevent searching system dirs (looking for .desktop & icons)
+    exec env -i \
+      LD_PRELOAD=$WRAPPER_LD_PRELOAD \
+      \
+      TZ=":" \
+      TZDIR="\''${TZDIR:-}" \
+      LOCALE_ARCHIVE="\$LOCALE_ARCHIVE" \
+      \
+      TMPDIR="\''${TMPDIR:-/tmp}" \
+      HOME="\$HOME" \
+      XAUTHORITY="\''${XAUTHORITY:-\$HOME/.Xauthority}" \
+      DISPLAY="\''${DISPLAY:-}" \
+      DBUS_SESSION_BUS_ADDRESS="\''${DBUS_SESSION_BUS_ADDRESS:-unix:path=\$XDG_RUNTIME_DIR/bus}" \\
+      \
+      XDG_DATA_HOME="\$HOME/.local/share" \
+      XDG_DATA_DIRS="$WRAPPER_XDG_DATA_DIRS" \
+      \
+      PULSE_SERVER="\''${PULSE_SERVER:-}" \
+      PULSE_COOKIE="\''${PULSE_COOKIE:-}" \
+      \
+      MOZ_ENABLE_WAYLAND="\''${MOZ_ENABLE_WAYLAND:-}" \
+      WAYLAND_DISPLAY="\''${WAYLAND_DISPLAY:-}" \
+      XDG_RUNTIME_DIR="\''${XDG_RUNTIME_DIR:-}" \
+      XCURSOR_PATH="\''${XCURSOR_PATH:-}" \
+      \
+      APULSE_PLAYBACK_DEVICE="\''${APULSE_PLAYBACK_DEVICE:-plug:dmix}" \
+      \
+      TOR_SKIP_LAUNCH="\''${TOR_SKIP_LAUNCH:-}" \
+      TOR_CONTROL_HOST="\''${TOR_CONTROL_HOST:-}" \
+      TOR_CONTROL_PORT="\''${TOR_CONTROL_PORT:-}" \
+      TOR_CONTROL_COOKIE_AUTH_FILE="\''${TOR_CONTROL_COOKIE_AUTH_FILE:-}" \
+      TOR_CONTROL_PASSWD="\''${TOR_CONTROL_PASSWD:-}" \
+      TOR_SOCKS_HOST="\''${TOR_SOCKS_HOST:-}" \
+      TOR_SOCKS_PORT="\''${TOR_SOCKS_PORT:-}" \
+      \
+      FONTCONFIG_FILE="$FONTCONFIG_FILE" \
+      \
+      LD_LIBRARY_PATH="$libPath" \
+      \
+      "$TBB_IN_STORE/firefox" \
+        --class "Tor Browser" \
+        -no-remote \
+        -profile "\$HOME/TorBrowser/Data/Browser/profile.default" \
+        "\''${@}"
+    EOF
+    chmod +x $out/bin/tor-browser
+
+    # Easier access to docs
+    mkdir -p $out/share/doc
+    ln -s $TBB_IN_STORE/TorBrowser/Docs $out/share/doc/tor-browser
+
+    # Install .desktop item
+    mkdir -p $out/share/applications
+    cp $desktopItem/share/applications"/"* $out/share/applications
+    sed -i $out/share/applications/torbrowser.desktop \
+        -e "s,Exec=.*,Exec=$out/bin/tor-browser," \
+        -e "s,Icon=.*,Icon=tor-browser,"
+    for i in 16 32 48 64 128; do
+      mkdir -p $out/share/icons/hicolor/''${i}x''${i}/apps/
+      ln -s $out/share/tor-browser/browser/chrome/icons/default/default$i.png $out/share/icons/hicolor/''${i}x''${i}/apps/tor-browser.png
+    done
+
+    # Check installed apps
+    echo "Checking bundled Tor ..."
+    LD_LIBRARY_PATH=$libPath $TBB_IN_STORE/TorBrowser/Tor/tor --version >/dev/null
+
+    echo "Checking tor-browser wrapper ..."
+      TBB_HOME=$(mktemp -d) \
+      $out/bin/tor-browser --version >/dev/null
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    # Install distribution customizations
+    install -Dvm644 ${distributionIni} $out/share/tor-browser/distribution/distribution.ini
+    install -Dvm644 ${policiesJson} $out/share/tor-browser/distribution/policies.json
+
+    runHook postInstall
+  '';
+
+  passthru = {
+    inherit sources;
+    updateScript = callPackage ./update.nix {
+      inherit pname version meta;
+    };
+  };
+
+  meta = with lib; {
+    description = "Tor Browser Bundle built by torproject.org";
+    longDescription = ''
+      Tor Browser Bundle is a bundle of the Tor daemon, Tor Browser (heavily patched version of
+      Firefox), several essential extensions for Tor Browser, and some tools that glue those
+      together with a convenient UI.
+
+      `tor-browser-bundle-bin` package is the official version built by torproject.org patched with
+      `patchelf` to work under nix and with bundled scripts adapted to the read-only nature of
+      the `/nix/store`.
+    '';
+    homepage = "https://www.torproject.org/";
+    changelog = "https://gitweb.torproject.org/builders/tor-browser-build.git/plain/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt?h=maint-${version}";
+    platforms = attrNames sources;
+    maintainers = with maintainers; [ felschr panicgh joachifm hax404 ];
+    mainProgram = "tor-browser";
+    # MPL2.0+, GPL+, &c.  While it's not entirely clear whether
+    # the compound is "libre" in a strict sense (some components place certain
+    # restrictions on redistribution), it's free enough for our purposes.
+    license = licenses.free;
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+  };
+})
diff --git a/nixpkgs/pkgs/applications/networking/browsers/tor-browser-bundle-bin/update.nix b/nixpkgs/pkgs/applications/networking/browsers/tor-browser-bundle-bin/update.nix
new file mode 100644
index 000000000000..f169bd3c4efa
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/tor-browser-bundle-bin/update.nix
@@ -0,0 +1,62 @@
+{ lib
+, writeShellScript
+, coreutils
+, gnused
+, gnugrep
+, curl
+, gnupg
+, nix
+, common-updater-scripts
+
+# options
+, pname
+, version
+, meta
+, baseUrl ? "https://dist.torproject.org/torbrowser/"
+# prefix used to match published archive
+, prefix ? "tor-browser-"
+# suffix used to match published archive
+, suffix ? "_ALL.tar.xz"
+}:
+
+writeShellScript "update-${pname}" ''
+  PATH="${lib.makeBinPath [ coreutils curl gnugrep gnused gnupg nix common-updater-scripts ]}"
+  set -euo pipefail
+
+  trap
+
+  url=${baseUrl}
+  version=$(curl -s $url \
+            | sed -rne 's,^.*href="([0-9]+(\.[0-9]+)*)/".*,\1,p' \
+            | sort --version-sort | tail -1)
+
+  if [[ "${version}" = "$version" ]]; then
+      echo "The new version same as the old version."
+      exit 0
+  fi
+
+  HOME=$(mktemp -d)
+  export GNUPGHOME=$(mktemp -d)
+  trap 'rm -rf "$HOME" "$GNUPGHOME"' EXIT
+
+  gpg --auto-key-locate nodefault,wkd --locate-keys torbrowser@torproject.org
+  gpg --output $HOME/tor.keyring --export 0xEF6E286DDA85EA2A4BA7DE684E2C6E8793298290
+
+  curl --silent --show-error --fail -o $HOME/shasums "$url$version/sha256sums-signed-build.txt"
+  curl --silent --show-error --fail -o $HOME/shasums.asc "$url$version/sha256sums-signed-build.txt.asc"
+  gpgv --keyring=$HOME/tor.keyring $HOME/shasums.asc $HOME/shasums
+
+  declare -A platforms=(
+    ['x86_64-linux']='linux64'
+    ['i686-linux']='linux32'
+  )
+
+  for platform in ${lib.escapeShellArgs meta.platforms}; do
+    arch="''${platforms[$platform]}"
+    sha256=$(cat "$HOME/shasums" | grep "${prefix}""$arch-$version""${suffix}" | cut -d" " -f1)
+    hash=$(nix hash to-sri --type sha256 "$sha256")
+
+    update-source-version "${pname}" "0" "sha256-${lib.fakeSha256}" --source-key="sources.$platform"
+    update-source-version "${pname}" "$version" "$hash" --source-key="sources.$platform"
+  done
+''
diff --git a/nixpkgs/pkgs/applications/networking/browsers/vieb/default.nix b/nixpkgs/pkgs/applications/networking/browsers/vieb/default.nix
new file mode 100644
index 000000000000..ee0492c3253b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/vieb/default.nix
@@ -0,0 +1,64 @@
+{ stdenv, buildNpmPackage, fetchFromGitHub, electron, makeWrapper, python3, makeDesktopItem, nix-update-script, lib }:
+
+buildNpmPackage rec {
+  pname = "vieb";
+  version = "10.2.0";
+
+  src = fetchFromGitHub {
+    owner = "Jelmerro";
+    repo = pname;
+    rev = version;
+    hash = "sha256-eI+doYI5kssuVLNLlAj67CRvBuWQ+TRm0RKXPcW+S8c=";
+  };
+
+  postPatch = ''
+    sed -i '/"electron"/d' package.json
+  '';
+
+  npmDepsHash = "sha256-Emiw5ZlHh4+YqtW+T3iQW/ldr1Exx/66vsQteCijObQ=";
+  dontNpmBuild = true;
+
+  nativeBuildInputs = [ makeWrapper ] ++ lib.optional stdenv.isAarch64 python3;
+
+  desktopItem = makeDesktopItem {
+    name = "vieb";
+    exec = "vieb %U";
+    icon = "vieb";
+    desktopName = "Web Browser";
+    genericName = "Web Browser";
+    categories = [ "Network" "WebBrowser" ];
+    mimeTypes = [
+      "text/html"
+      "application/xhtml+xml"
+      "x-scheme-handler/http"
+      "x-scheme-handler/https"
+    ];
+  };
+
+  postInstall = ''
+    install -Dm0644 {${desktopItem},$out}/share/applications/vieb.desktop
+
+    pushd $out/lib/node_modules/vieb/app/img/icons
+    for file in *.png; do
+      install -Dm0644 $file $out/share/icons/hicolor/''${file//.png}/apps/vieb.png
+    done
+    popd
+
+    makeWrapper ${electron}/bin/electron $out/bin/vieb \
+      --add-flags $out/lib/node_modules/vieb/app \
+      --set npm_package_version ${version}
+  '';
+
+  distPhase = ":"; # disable useless $out/tarballs directory
+
+  passthru.updateScript = nix-update-script {};
+
+  meta = with lib; {
+    homepage = "https://vieb.dev/";
+    changelog = "https://github.com/Jelmerro/Vieb/releases/tag/${version}";
+    description = "Vim Inspired Electron Browser";
+    maintainers = with maintainers; [ gebner fortuneteller2k tejing ];
+    platforms = platforms.unix;
+    license = licenses.gpl3Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/vimb/default.nix b/nixpkgs/pkgs/applications/networking/browsers/vimb/default.nix
new file mode 100644
index 000000000000..35fece92529b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/vimb/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, libsoup, webkitgtk, gtk3, glib-networking
+, gsettings-desktop-schemas, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "vimb";
+  version = "3.6.0";
+
+  src = fetchFromGitHub {
+    owner = "fanglingsu";
+    repo = "vimb";
+    rev = version;
+    sha256 = "sha256-Eq4riJSznKpkW9JJDnTCLxZ9oMJTmWkIoGphOiCcSAg=";
+  };
+
+  nativeBuildInputs = [ wrapGAppsHook pkg-config ];
+  buildInputs = [ gtk3 libsoup webkitgtk glib-networking gsettings-desktop-schemas ];
+
+  passthru = {
+    inherit gtk3;
+  };
+
+  makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  meta = {
+    description = "A Vim-like browser";
+    longDescription = ''
+      A fast and lightweight vim like web browser based on the webkit web
+      browser engine and the GTK toolkit. Vimb is modal like the great vim
+      editor and also easily configurable during runtime. Vimb is mostly
+      keyboard driven and does not detract you from your daily work.
+    '';
+    homepage = "https://fanglingsu.github.io/vimb/";
+    license = lib.licenses.gpl3;
+    maintainers = [];
+    platforms = with lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/vivaldi/default.nix b/nixpkgs/pkgs/applications/networking/browsers/vivaldi/default.nix
new file mode 100644
index 000000000000..79e439a6a058
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/vivaldi/default.nix
@@ -0,0 +1,132 @@
+{ lib, stdenv, fetchurl, zlib, libX11, libXext, libSM, libICE, libxkbcommon, libxshmfence
+, libXfixes, libXt, libXi, libXcursor, libXScrnSaver, libXcomposite, libXdamage, libXtst, libXrandr
+, alsa-lib, dbus, cups, libexif, ffmpeg, systemd, libva, libGL
+, freetype, fontconfig, libXft, libXrender, libxcb, expat
+, libuuid
+, libxml2
+, glib, gtk3, pango, gdk-pixbuf, cairo, atk, at-spi2-atk, at-spi2-core
+, qt5
+, libdrm, mesa
+, vulkan-loader
+, nss, nspr
+, patchelf, makeWrapper
+, wayland, pipewire
+, isSnapshot ? false
+, proprietaryCodecs ? false, vivaldi-ffmpeg-codecs ? null
+, enableWidevine ? false, widevine-cdm ? null
+, commandLineArgs ? ""
+, pulseSupport ? stdenv.isLinux, libpulseaudio
+}:
+
+let
+  branch = if isSnapshot then "snapshot" else "stable";
+  vivaldiName = if isSnapshot then "vivaldi-snapshot" else "vivaldi";
+in stdenv.mkDerivation rec {
+  pname = "vivaldi";
+  version = "6.2.3105.45";
+
+  suffix = {
+    aarch64-linux = "arm64";
+    x86_64-linux = "amd64";
+  }.${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
+
+  src = fetchurl {
+    url = "https://downloads.vivaldi.com/${branch}/vivaldi-${branch}_${version}-1_${suffix}.deb";
+    hash = {
+      aarch64-linux = "sha256-AumYFbCa5+Ou89e6MDQZFlyCu30IvX8jbz+deRojzOQ=";
+      x86_64-linux = "sha256-9U7vPvmCbwgkYGIZblKghuqClhOfGSEQqTVkaDgc0Ms=";
+    }.${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
+  };
+
+  unpackPhase = ''
+    ar vx $src
+    tar -xvf data.tar.xz
+  '';
+
+  nativeBuildInputs = [ patchelf makeWrapper ];
+
+  dontWrapQtApps = true;
+
+  buildInputs = [
+    stdenv.cc.cc stdenv.cc.libc zlib libX11 libXt libXext libSM libICE libxcb libxkbcommon libxshmfence
+    libXi libXft libXcursor libXfixes libXScrnSaver libXcomposite libXdamage libXtst libXrandr
+    atk at-spi2-atk at-spi2-core alsa-lib dbus cups gtk3 gdk-pixbuf libexif ffmpeg systemd libva
+    qt5.qtbase
+    freetype fontconfig libXrender libuuid expat glib nss nspr libGL
+    libxml2 pango cairo
+    libdrm mesa vulkan-loader
+    wayland pipewire
+  ] ++ lib.optional proprietaryCodecs vivaldi-ffmpeg-codecs
+    ++ lib.optional pulseSupport libpulseaudio;
+
+  libPath = lib.makeLibraryPath buildInputs
+    + lib.optionalString (stdenv.is64bit)
+      (":" + lib.makeSearchPathOutput "lib" "lib64" buildInputs)
+    + ":$out/opt/${vivaldiName}/lib";
+
+  buildPhase = ''
+    runHook preBuild
+    echo "Patching Vivaldi binaries"
+    for f in chrome_crashpad_handler vivaldi-bin vivaldi-sandbox ; do
+      patchelf \
+        --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+        --set-rpath "${libPath}" \
+        opt/${vivaldiName}/$f
+    done
+
+    for f in libGLESv2.so libqt5_shim.so ; do
+      patchelf --set-rpath "${libPath}" opt/${vivaldiName}/$f
+    done
+  '' + lib.optionalString proprietaryCodecs ''
+    ln -s ${vivaldi-ffmpeg-codecs}/lib/libffmpeg.so opt/${vivaldiName}/libffmpeg.so.''${version%\.*\.*}
+  '' + ''
+    echo "Finished patching Vivaldi binaries"
+    runHook postBuild
+  '';
+
+  dontPatchELF = true;
+  dontStrip    = true;
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p "$out"
+    cp -r opt "$out"
+    mkdir "$out/bin"
+    ln -s "$out/opt/${vivaldiName}/${vivaldiName}" "$out/bin/vivaldi"
+    mkdir -p "$out/share"
+    cp -r usr/share/{applications,xfce4} "$out"/share
+    substituteInPlace "$out"/share/applications/*.desktop \
+      --replace /usr/bin/${vivaldiName} "$out"/bin/vivaldi
+    substituteInPlace "$out"/share/applications/*.desktop \
+      --replace vivaldi-stable vivaldi
+    local d
+    for d in 16 22 24 32 48 64 128 256; do
+      mkdir -p "$out"/share/icons/hicolor/''${d}x''${d}/apps
+      ln -s \
+        "$out"/opt/${vivaldiName}/product_logo_''${d}.png \
+        "$out"/share/icons/hicolor/''${d}x''${d}/apps/vivaldi.png
+    done
+    wrapProgram "$out/bin/vivaldi" \
+      --add-flags ${lib.escapeShellArg commandLineArgs} \
+      --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}" \
+      --set-default FONTCONFIG_FILE "${fontconfig.out}/etc/fonts/fonts.conf" \
+      --set-default FONTCONFIG_PATH "${fontconfig.out}/etc/fonts" \
+      --suffix XDG_DATA_DIRS : ${gtk3}/share/gsettings-schemas/${gtk3.name}/ \
+      ${lib.optionalString enableWidevine "--suffix LD_LIBRARY_PATH : ${libPath}"}
+  '' + lib.optionalString enableWidevine ''
+    ln -sf ${widevine-cdm}/share/google/chrome/WidevineCdm $out/opt/${vivaldiName}/WidevineCdm
+  '' + ''
+    runHook postInstall
+  '';
+
+  passthru.updateScript = ./update-vivaldi.sh;
+
+  meta = with lib; {
+    description = "A Browser for our Friends, powerful and personal";
+    homepage    = "https://vivaldi.com";
+    license     = licenses.unfree;
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    maintainers = with maintainers; [ otwieracz badmutex ];
+    platforms   = [ "x86_64-linux" "aarch64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/vivaldi/ffmpeg-codecs.nix b/nixpkgs/pkgs/applications/networking/browsers/vivaldi/ffmpeg-codecs.nix
new file mode 100644
index 000000000000..5e49e35313ea
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/vivaldi/ffmpeg-codecs.nix
@@ -0,0 +1,32 @@
+{ squashfsTools, fetchurl, lib, stdenv }:
+
+# This derivation roughly follows the update-ffmpeg script that ships with the official Vivaldi
+# downloads at https://vivaldi.com/download/
+stdenv.mkDerivation rec {
+  pname = "chromium-codecs-ffmpeg-extra";
+  version = "111306";
+
+  src = fetchurl {
+    url = "https://api.snapcraft.io/api/v1/snaps/download/XXzVIXswXKHqlUATPqGCj2w2l7BxosS8_34.snap";
+    sha256 = "sha256-Dna9yFgP7JeQLAeZWvSZ+eSMX2yQbX2/+mX0QC22lYY=";
+  };
+
+  buildInputs = [ squashfsTools ];
+
+  unpackPhase = ''
+    unsquashfs -dest . $src
+  '';
+
+  installPhase = ''
+    install -vD chromium-ffmpeg-${version}/chromium-ffmpeg/libffmpeg.so $out/lib/libffmpeg.so
+  '';
+
+  meta = with lib; {
+    description = "Additional support for proprietary codecs for Vivaldi";
+    homepage    = "https://ffmpeg.org/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license     = licenses.lgpl21;
+    maintainers = with maintainers; [ betaboon cawilliamson fptje ];
+    platforms   = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/vivaldi/update-vivaldi.sh b/nixpkgs/pkgs/applications/networking/browsers/vivaldi/update-vivaldi.sh
new file mode 100755
index 000000000000..6e1d68f13994
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/vivaldi/update-vivaldi.sh
@@ -0,0 +1,16 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl common-updater-scripts
+
+set -eu -o pipefail
+
+version=$(curl -sS https://vivaldi.com/download/ | sed -rne 's/.*vivaldi-stable_([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)-1_amd64\.deb.*/\1/p')
+
+update_hash() {
+    url="https://downloads.vivaldi.com/stable/vivaldi-stable_$version-1_$2.deb"
+    hash=$(nix hash to-sri --type sha256 $(nix-prefetch-url --type sha256 "$url"))
+    update-source-version vivaldi 0 sha256-BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB= --system=$1
+    update-source-version vivaldi "$version" "$hash" --system=$1
+}
+
+update_hash aarch64-linux arm64
+update_hash x86_64-linux amd64
diff --git a/nixpkgs/pkgs/applications/networking/browsers/vivaldi/update.sh b/nixpkgs/pkgs/applications/networking/browsers/vivaldi/update.sh
new file mode 100755
index 000000000000..461b38e3ec44
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/vivaldi/update.sh
@@ -0,0 +1,47 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p libarchive curl common-updater-scripts
+
+set -eu -o pipefail
+
+cd "$(dirname "${BASH_SOURCE[0]}")"
+root=../../../../..
+export NIXPKGS_ALLOW_UNFREE=1
+
+version() {
+  (cd "$root" && nix-instantiate --eval --strict -A "$1.version" | tr -d '"')
+}
+
+vivaldi_version_old=$(version vivaldi)
+vivaldi_version=$(curl -sS https://vivaldi.com/download/ | sed -rne 's/.*vivaldi-stable_([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)-1_amd64\.deb.*/\1/p')
+
+if [[ ! "$vivaldi_version" = "$vivaldi_version_old" ]]; then
+  echo "vivaldi is not up-to-date, not updating codecs"
+  (cd "$root" && nix-shell maintainers/scripts/update.nix --argstr package vivaldi)
+  exit
+fi
+
+echo "vivaldi is up-to-date, updating codecs"
+
+# Download vivaldi and save file path.
+url="https://downloads.vivaldi.com/stable/vivaldi-stable_${vivaldi_version}-1_amd64.deb"
+mapfile -t prefetch < <(nix-prefetch-url --print-path "$url")
+path=${prefetch[1]}
+
+nixpkgs="$(git rev-parse --show-toplevel)"
+default_nix="$nixpkgs/pkgs/applications/networking/browsers/vivaldi/default.nix"
+ffmpeg_nix="$nixpkgs/pkgs/applications/networking/browsers/vivaldi/ffmpeg-codecs.nix"
+
+# Check vivaldi-ffmpeg-codecs version.
+chromium_version_old=$(version vivaldi-ffmpeg-codecs)
+ffmpeg_update_script=$(bsdtar xOf "$path" data.tar.xz | bsdtar xOf - ./opt/vivaldi/update-ffmpeg)
+chromium_version=$(sed -rne 's/^FFMPEG_VERSION_DEB\=([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+).*/\1/p' <<< $ffmpeg_update_script)
+download_subdir=$(sed -rne 's/.*FFMPEG_URL_DEB\=https:\/\/launchpadlibrarian\.net\/([0-9]+)\/.*_amd64\.deb/\1/p' <<< $ffmpeg_update_script)
+
+if [[ "$chromium_version" != "$chromium_version_old" ]]; then
+  # replace the download prefix
+  sed -i $ffmpeg_nix -e "s/\(https:\/\/launchpadlibrarian\.net\/\)[0-9]\+/\1$download_subdir/g"
+  (cd "$root" && update-source-version vivaldi-ffmpeg-codecs "$chromium_version")
+
+  git add "${ffmpeg_nix}"
+  git commit -m "vivaldi-ffmpeg-codecs: $chromium_version_old -> $chromium_version"
+fi
diff --git a/nixpkgs/pkgs/applications/networking/browsers/w3m/RAND_egd.libressl.patch b/nixpkgs/pkgs/applications/networking/browsers/w3m/RAND_egd.libressl.patch
new file mode 100644
index 000000000000..49dd417d1c39
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/w3m/RAND_egd.libressl.patch
@@ -0,0 +1,11 @@
+--- a/url.c  2014-07-14 12:31:30.476563116 +0200
++++ b/url.c   2014-07-14 12:32:16.364918248 +0200
+@@ -268,7 +268,7 @@ init_PRNG()
+     if (RAND_status())
+ 	return;
+     if ((file = RAND_file_name(buffer, sizeof(buffer)))) {
+-#ifdef USE_EGD
++#if defined(USE_EGD) && defined(HAVE_SSL_RAND_EGD)
+ 	if (RAND_egd(file) > 0)
+ 	    return;
+ #endif
diff --git a/nixpkgs/pkgs/applications/networking/browsers/w3m/default.nix b/nixpkgs/pkgs/applications/networking/browsers/w3m/default.nix
new file mode 100644
index 000000000000..e4a064e79059
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/w3m/default.nix
@@ -0,0 +1,103 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch
+, ncurses, boehmgc, gettext, zlib
+, sslSupport ? true, openssl
+, graphicsSupport ? !stdenv.isDarwin, imlib2
+, x11Support ? graphicsSupport, libX11
+, mouseSupport ? !stdenv.isDarwin, gpm-ncurses
+, perl, man, pkg-config, buildPackages, w3m
+, testers
+}:
+
+let
+  mktable = buildPackages.stdenv.mkDerivation {
+    name = "w3m-mktable";
+    inherit (w3m) src;
+    nativeBuildInputs = [ pkg-config boehmgc ];
+    makeFlags = [ "mktable" ];
+    installPhase = ''
+      install -D mktable $out/bin/mktable
+    '';
+  };
+in stdenv.mkDerivation rec {
+  pname = "w3m";
+  version = "0.5.3+git20230121";
+
+  src = fetchFromGitHub {
+    owner = "tats";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-upb5lWqhC1jRegzTncIz5e21v4Pw912FyVn217HucFs=";
+  };
+
+  NIX_LDFLAGS = lib.optionalString stdenv.isSunOS "-lsocket -lnsl";
+
+  # we must set these so that the generated files (e.g. w3mhelp.cgi) contain
+  # the correct paths.
+  PERL = "${perl}/bin/perl";
+  MAN = "${man}/bin/man";
+
+  makeFlags = [ "AR=${stdenv.cc.bintools.targetPrefix}ar" ];
+
+  patches = [
+    ./RAND_egd.libressl.patch
+    (fetchpatch {
+      name = "https.patch";
+      url = "https://aur.archlinux.org/cgit/aur.git/plain/https.patch?h=w3m-mouse&id=5b5f0fbb59f674575e87dd368fed834641c35f03";
+      sha256 = "08skvaha1hjyapsh8zw5dgfy433mw2hk7qy9yy9avn8rjqj7kjxk";
+    })
+  ];
+
+  postPatch = lib.optionalString (stdenv.hostPlatform != stdenv.buildPlatform) ''
+    ln -s ${mktable}/bin/mktable mktable
+    # stop make from recompiling mktable
+    sed -ie 's!mktable.*:.*!mktable:!' Makefile.in
+  '';
+
+  nativeBuildInputs = [ pkg-config gettext ];
+  buildInputs = [ ncurses boehmgc zlib ]
+    ++ lib.optional sslSupport openssl
+    ++ lib.optional mouseSupport gpm-ncurses
+    ++ lib.optional graphicsSupport imlib2
+    ++ lib.optional x11Support libX11;
+
+  postInstall = lib.optionalString graphicsSupport ''
+    ln -s $out/libexec/w3m/w3mimgdisplay $out/bin
+  '';
+
+  hardeningDisable = [ "format" ];
+
+  configureFlags =
+    [ "--with-ssl=${openssl.dev}" "--with-gc=${boehmgc.dev}" ]
+    ++ lib.optionals (stdenv.buildPlatform != stdenv.hostPlatform) [
+      "ac_cv_func_setpgrp_void=yes"
+    ]
+    ++ lib.optional graphicsSupport "--enable-image=${lib.optionalString x11Support "x11,"}fb"
+    ++ lib.optional (graphicsSupport && !x11Support) "--without-x";
+
+  preConfigure = ''
+    substituteInPlace ./configure --replace "/lib /usr/lib /usr/local/lib /usr/ucblib /usr/ccslib /usr/ccs/lib /lib64 /usr/lib64" /no-such-path
+    substituteInPlace ./configure --replace /usr /no-such-path
+  '';
+
+  enableParallelBuilding = false;
+
+  # for w3mimgdisplay
+  # see: https://bbs.archlinux.org/viewtopic.php?id=196093
+  LIBS = lib.optionalString x11Support "-lX11";
+
+  passthru.tests.version = testers.testVersion {
+    inherit version;
+    package = w3m;
+    command = "w3m -version";
+  };
+
+  meta = with lib; {
+    homepage = "https://w3m.sourceforge.net/";
+    changelog = "https://github.com/tats/w3m/blob/v${version}/ChangeLog";
+    description = "A text-mode web browser";
+    maintainers = with maintainers; [ cstrahan anthonyroussel ];
+    platforms = platforms.unix;
+    license = licenses.mit;
+    mainProgram = "w3m";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/webmacs/default.nix b/nixpkgs/pkgs/applications/networking/browsers/webmacs/default.nix
new file mode 100644
index 000000000000..de3c1cfdcdba
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/webmacs/default.nix
@@ -0,0 +1,75 @@
+{ lib
+, mkDerivationWith
+, fetchFromGitHub
+, python3Packages
+, herbstluftwm
+}:
+
+mkDerivationWith python3Packages.buildPythonApplication rec {
+  pname = "webmacs";
+  version = "0.8";
+
+  disabled = python3Packages.isPy27;
+
+  src = fetchFromGitHub {
+    owner = "parkouss";
+    repo = "webmacs";
+    rev = version;
+    fetchSubmodules = true;
+    sha256 = "1hzb9341hybgrqcy1w20hshm6xaiby4wbjpjkigf4zq389407368";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    pyqtwebengine
+    setuptools
+    dateparser
+    jinja2
+    pygments
+  ];
+
+  nativeCheckInputs = [
+    python3Packages.pytest
+    #python3Packages.pytest-xvfb
+    #python3Packages.pytest-qt
+    python3Packages.pytestCheckHook
+    herbstluftwm
+
+    # The following are listed in test-requirements.txt but appear not
+    # to be needed at present:
+
+    # python3Packages.pytest-mock
+    # python3Packages.flake8
+  ];
+
+  # See https://github.com/parkouss/webmacs/blob/1a04fb7bd3f33d39cb4d71621b48c2458712ed39/setup.py#L32
+  # Don't know why they're using CC for g++.
+  preConfigure = ''
+   export CC=$CXX
+  '';
+
+  doCheck = false; # test dependencies not packaged up yet
+
+  dontWrapQtApps = true;
+
+  preFixup = ''
+    makeWrapperArgs+=("''${qtWrapperArgs[@]}")
+  '';
+
+  meta = with lib; {
+    description = "Keyboard-based web browser with Emacs/conkeror heritage";
+    longDescription = ''
+      webmacs is yet another browser for keyboard-based web navigation.
+
+      It mainly targets emacs-like navigation, and started as a clone (in terms of
+      features) of conkeror.
+
+      Based on QtWebEngine and Python 3. Fully customizable in Python.
+    '';
+    homepage = "https://webmacs.readthedocs.io/en/latest/";
+    changelog = "https://github.com/parkouss/webmacs/blob/master/CHANGELOG.md";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ jacg ];
+    platforms = platforms.all;
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/networking/browsers/yandex-browser/default.nix b/nixpkgs/pkgs/applications/networking/browsers/yandex-browser/default.nix
new file mode 100644
index 000000000000..e7a9f8cf6804
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/browsers/yandex-browser/default.nix
@@ -0,0 +1,140 @@
+{ stdenv
+, lib
+, fetchurl
+, autoPatchelfHook
+, wrapGAppsHook
+, flac
+, gnome2
+, harfbuzzFull
+, nss
+, snappy
+, xdg-utils
+, xorg
+, alsa-lib
+, atk
+, cairo
+, cups
+, curl
+, dbus
+, expat
+, fontconfig
+, freetype
+, gdk-pixbuf
+, glib
+, gtk3
+, libX11
+, libxcb
+, libXScrnSaver
+, libXcomposite
+, libXcursor
+, libXdamage
+, libXext
+, libXfixes
+, libXi
+, libXrandr
+, libXrender
+, libXtst
+, libdrm
+, libnotify
+, libopus
+, libpulseaudio
+, libuuid
+, libxshmfence
+, mesa
+, nspr
+, pango
+, systemd
+, at-spi2-atk
+, at-spi2-core
+, libqt5pas
+}:
+
+stdenv.mkDerivation rec {
+  pname = "yandex-browser";
+  version = "23.7.1.1148-1";
+
+  src = fetchurl {
+    url = "http://repo.yandex.ru/yandex-browser/deb/pool/main/y/${pname}-beta/${pname}-beta_${version}_amd64.deb";
+    sha256 = "sha256-SJbuT2MnsXcqOSk4xCUokseDotjbWgAnvwnfNPF9zi4=";
+  };
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    flac
+    harfbuzzFull
+    nss
+    snappy
+    xdg-utils
+    xorg.libxkbfile
+    alsa-lib
+    at-spi2-atk
+    at-spi2-core
+    atk
+    cairo
+    cups
+    curl
+    dbus
+    expat
+    fontconfig.lib
+    freetype
+    gdk-pixbuf
+    glib
+    gnome2.GConf
+    gtk3
+    libX11
+    libXScrnSaver
+    libXcomposite
+    libXcursor
+    libXdamage
+    libXext
+    libXfixes
+    libXi
+    libXrandr
+    libXrender
+    libXtst
+    libdrm
+    libnotify
+    libopus
+    libuuid
+    libxcb
+    libxshmfence
+    mesa
+    nspr
+    nss
+    pango
+    stdenv.cc.cc.lib
+    libqt5pas
+  ];
+
+  unpackPhase = ''
+    mkdir $TMP/ya/ $out/bin/ -p
+    ar vx $src
+    tar --no-overwrite-dir -xvf data.tar.xz -C $TMP/ya/
+  '';
+
+  installPhase = ''
+    cp $TMP/ya/{usr/share,opt} $out/ -R
+    substituteInPlace $out/share/applications/yandex-browser-beta.desktop --replace /usr/ $out/
+    ln -sf $out/opt/yandex/browser-beta/yandex_browser $out/bin/yandex-browser
+    ln -sf $out/opt/yandex/browser-beta/yandex_browser $out/bin/yandex-browser-beta
+  '';
+
+  runtimeDependencies = map lib.getLib [
+    libpulseaudio
+    curl
+    systemd
+  ] ++ buildInputs;
+
+  meta = with lib; {
+    description = "Yandex Web Browser";
+    homepage = "https://browser.yandex.ru/";
+    license = licenses.unfree;
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    maintainers = with maintainers; [ dan4ik605743 ionutnechita ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/calls/default.nix b/nixpkgs/pkgs/applications/networking/calls/default.nix
new file mode 100644
index 000000000000..250355aa4284
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/calls/default.nix
@@ -0,0 +1,114 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, meson
+, ninja
+, pkg-config
+, libhandy
+, modemmanager
+, gtk3
+, gom
+, gsound
+, feedbackd
+, callaudiod
+, evolution-data-server
+, glib
+, folks
+, desktop-file-utils
+, appstream-glib
+, libpeas
+, libgdata
+, dbus
+, vala
+, wrapGAppsHook
+, xvfb-run
+, gtk-doc
+, docbook-xsl-nons
+, docbook_xml_dtd_43
+, docutils
+, gobject-introspection
+, gst_all_1
+, sofia_sip
+}:
+
+stdenv.mkDerivation rec {
+  pname = "calls";
+  version = "43.3";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.gnome.org";
+    owner = "GNOME";
+    repo = pname;
+    rev = "v${version}";
+    fetchSubmodules = true;
+    hash = "sha256-GNICAk9SPrLc+zm3tHVwkQdiS20j4MVktGIbNWEEMHs=";
+  };
+
+  outputs = [ "out" "devdoc" ];
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    desktop-file-utils
+    appstream-glib
+    vala
+    wrapGAppsHook
+    gtk-doc
+    docbook-xsl-nons
+    docbook_xml_dtd_43
+    docutils
+  ];
+
+  buildInputs = [
+    modemmanager
+    libhandy
+    evolution-data-server
+    folks
+    gom
+    gsound
+    gst_all_1.gstreamer
+    gst_all_1.gst-plugins-base
+    gst_all_1.gst-plugins-good
+    gst_all_1.gst-plugins-bad
+    gst_all_1.gst-plugins-ugly
+    feedbackd
+    callaudiod
+    gtk3
+    libpeas
+    sofia_sip
+  ];
+
+  nativeCheckInputs = [
+    dbus
+    xvfb-run
+  ];
+
+  env.NIX_CFLAGS_COMPILE = "-I${glib.dev}/include/gio-unix-2.0";
+
+  mesonFlags = [
+    "-Dgtk_doc=true"
+  ];
+
+  # Disable until tests are fixed upstream https://gitlab.gnome.org/GNOME/calls/-/issues/258
+  doCheck = false;
+
+  checkPhase = ''
+    runHook preCheck
+    NO_AT_BRIDGE=1 \
+    XDG_DATA_DIRS=${folks}/share/gsettings-schemas/${folks.name} \
+    xvfb-run -s '-screen 0 800x600x24' dbus-run-session \
+      --config-file=${dbus}/share/dbus-1/session.conf \
+      meson test --print-errorlogs
+    runHook postCheck
+  '';
+
+  meta = with lib; {
+    description = "A phone dialer and call handler";
+    longDescription = "GNOME Calls is a phone dialer and call handler. Setting NixOS option `programs.calls.enable = true` is recommended.";
+    homepage = "https://gitlab.gnome.org/GNOME/calls";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ craigem lheckemann tomfitzhenry ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/charles/default.nix b/nixpkgs/pkgs/applications/networking/charles/default.nix
new file mode 100644
index 000000000000..27fa0981f170
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/charles/default.nix
@@ -0,0 +1,79 @@
+{ lib
+, stdenv
+, makeWrapper
+, makeDesktopItem
+, fetchurl
+, jdk11
+, jdk8
+}:
+
+let
+  generic = { version, sha256, platform ? "", jdk, ... }@attrs:
+  let
+    desktopItem = makeDesktopItem {
+      categories = [ "Network" "Development" "WebDevelopment" "Java" ];
+      desktopName = "Charles";
+      exec = "charles %F";
+      genericName  = "Web Debugging Proxy";
+      icon = "charles-proxy";
+      mimeTypes = [
+        "application/x-charles-savedsession"
+        "application/x-charles-savedsession+xml"
+        "application/x-charles-savedsession+json"
+        "application/har+json"
+        "application/vnd.tcpdump.pcap"
+        "application/x-charles-trace"
+      ];
+      name = "Charles";
+      startupNotify = true;
+    };
+
+  in stdenv.mkDerivation {
+      pname = "charles";
+      inherit version;
+
+      src = fetchurl {
+        url = "https://www.charlesproxy.com/assets/release/${version}/charles-proxy-${version}${platform}.tar.gz";
+        curlOptsList = [ "--user-agent" "Mozilla/5.0" ]; # HTTP 104 otherwise
+        inherit sha256;
+      };
+      nativeBuildInputs = [ makeWrapper ];
+
+      installPhase = ''
+        makeWrapper ${jdk}/bin/java $out/bin/charles \
+          --add-flags "-Xmx1024M -Dcharles.config='~/.charles.config' -jar $out/share/java/charles.jar"
+
+        for fn in lib/*.jar; do
+          install -D -m644 $fn $out/share/java/$(basename $fn)
+        done
+
+        mkdir -p $out/share/applications
+        ln -s ${desktopItem}/share/applications/* $out/share/applications/
+
+        mkdir -p $out/share/icons
+        cp -r icon $out/share/icons/hicolor
+      '';
+
+      meta = with lib; {
+        description = "Web Debugging Proxy";
+        homepage = "https://www.charlesproxy.com/";
+        maintainers = with maintainers; [ kalbasit kashw2 ];
+        sourceProvenance = with sourceTypes; [ binaryBytecode ];
+        license = licenses.unfree;
+        platforms = platforms.unix;
+      };
+    };
+
+in {
+  charles4 = (generic {
+    version = "4.6.4";
+    sha256 = "KEQYb90kt41dS3TJLZqdaV9P3mQA9UPsEyiFb/knm3w=";
+    platform = "_amd64";
+    jdk = jdk11;
+  });
+  charles3 = (generic {
+    version = "3.12.3";
+    sha256 = "13zk82ny1w5zd9qcs9qkq0kdb22ni5byzajyshpxdfm4zv6p32ss";
+    jdk = jdk8.jre;
+  });
+}
diff --git a/nixpkgs/pkgs/applications/networking/circumflex/default.nix b/nixpkgs/pkgs/applications/networking/circumflex/default.nix
new file mode 100644
index 000000000000..832456d35d3f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/circumflex/default.nix
@@ -0,0 +1,30 @@
+{ lib, less, ncurses, buildGoModule, fetchFromGitHub, makeWrapper }:
+
+buildGoModule rec {
+  pname = "circumflex";
+  version = "3.2";
+
+  src = fetchFromGitHub {
+    owner = "bensadeh";
+    repo = "circumflex";
+    rev = version;
+    hash = "sha256-3cu5Y9Z20CbFN+4/2LLM3pcXofuc8oztoZVPhDzFLas=";
+  };
+
+  vendorHash = "sha256-w9WDbNvnaRgZ/rpI450C7AA244AXRE8u960xZnAiXn4=";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postInstall = ''
+    wrapProgram $out/bin/clx \
+      --prefix PATH : ${lib.makeBinPath [ less ncurses ]}
+  '';
+
+  meta = with lib; {
+    description = "A command line tool for browsing Hacker News in your terminal";
+    homepage = "https://github.com/bensadeh/circumflex";
+    license = licenses.agpl3;
+    maintainers = with maintainers; [ mktip ];
+    mainProgram = "clx";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cisco-packet-tracer/7.nix b/nixpkgs/pkgs/applications/networking/cisco-packet-tracer/7.nix
new file mode 100644
index 000000000000..620e7420439b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cisco-packet-tracer/7.nix
@@ -0,0 +1,90 @@
+{ stdenv
+, lib
+, buildFHSEnv
+, copyDesktopItems
+, dpkg
+, lndir
+, makeDesktopItem
+, makeWrapper
+, requireFile
+}:
+
+let
+  version = "7.3.1";
+
+  ptFiles = stdenv.mkDerivation {
+    name = "PacketTracer7drv";
+    inherit version;
+
+    dontUnpack = true;
+    src = requireFile {
+      name = "PacketTracer_${builtins.replaceStrings ["."] [""] version}_amd64.deb";
+      sha256 = "c39802d15dd61d00ba27fb8c116da45fd8562ab4b49996555ad66b88deace27f";
+      url = "https://www.netacad.com";
+    };
+
+    nativeBuildInputs = [ dpkg makeWrapper ];
+
+    installPhase = ''
+      dpkg-deb -x $src $out
+      makeWrapper "$out/opt/pt/bin/PacketTracer7" "$out/bin/packettracer7" \
+          --prefix LD_LIBRARY_PATH : "$out/opt/pt/bin"
+    '';
+  };
+
+  desktopItem = makeDesktopItem {
+    name = "cisco-pt7.desktop";
+    desktopName = "Cisco Packet Tracer 7";
+    icon = "${ptFiles}/opt/pt/art/app.png";
+    exec = "packettracer7 %f";
+    mimeTypes = [ "application/x-pkt" "application/x-pka" "application/x-pkz" ];
+  };
+
+  fhs = buildFHSEnv {
+    name = "packettracer7";
+    runScript = "${ptFiles}/bin/packettracer7";
+
+    targetPkgs = pkgs: with pkgs; [
+      alsa-lib
+      dbus
+      expat
+      fontconfig
+      glib
+      libglvnd
+      libpulseaudio
+      libudev0-shim
+      libxkbcommon
+      libxml2
+      libxslt
+      nspr
+      nss
+      xorg.libICE
+      xorg.libSM
+      xorg.libX11
+      xorg.libXScrnSaver
+    ];
+  };
+in stdenv.mkDerivation {
+  pname = "ciscoPacketTracer7";
+  inherit version;
+
+  dontUnpack = true;
+
+  installPhase = ''
+    mkdir $out
+    ${lndir}/bin/lndir -silent ${fhs} $out
+  '';
+
+  desktopItems = [ desktopItem ];
+
+  nativeBuildInputs = [ copyDesktopItems ];
+
+  meta = with lib; {
+    description = "Network simulation tool from Cisco";
+    homepage = "https://www.netacad.com/courses/packet-tracer";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = with maintainers; [ lucasew ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cisco-packet-tracer/8.nix b/nixpkgs/pkgs/applications/networking/cisco-packet-tracer/8.nix
new file mode 100644
index 000000000000..5784c156e956
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cisco-packet-tracer/8.nix
@@ -0,0 +1,118 @@
+{ stdenvNoCC
+, lib
+, alsa-lib
+, autoPatchelfHook
+, buildFHSEnv
+, ciscoPacketTracer8
+, copyDesktopItems
+, dbus
+, dpkg
+, expat
+, fontconfig
+, glib
+, libdrm
+, libglvnd
+, libpulseaudio
+, libudev0-shim
+, libxkbcommon
+, libxml2
+, libxslt
+, lndir
+, makeDesktopItem
+, makeWrapper
+, nspr
+, nss
+, qt5
+, requireFile
+, xorg
+}:
+
+let
+  hashes = {
+    "8.2.0" = "1b19885d59f6130ee55414fb02e211a1773460689db38bfd1ac7f0d45117ed16";
+    "8.2.1" = "1fh79r4fnh9gjxjh39gcp4j7npgs5hh3qhrhx74x8x546an3i0s2";
+  };
+in
+
+stdenvNoCC.mkDerivation rec {
+  pname = "ciscoPacketTracer8";
+
+  version = "8.2.1";
+
+  src = requireFile {
+    name = "CiscoPacketTracer_${builtins.replaceStrings ["."] [""] version}_Ubuntu_64bit.deb";
+    sha256 = hashes.${version};
+    url = "https://www.netacad.com";
+  };
+
+  unpackPhase = ''
+    runHook preUnpack
+
+    dpkg-deb -x $src $out
+    chmod 755 "$out"
+
+    runHook postUnpack
+  '';
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+    copyDesktopItems
+    dpkg
+    makeWrapper
+    qt5.wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    alsa-lib
+    dbus
+    expat
+    fontconfig
+    glib
+    qt5.qtbase
+    qt5.qtmultimedia
+    qt5.qtnetworkauth
+    qt5.qtscript
+    qt5.qtspeech
+    qt5.qtwebengine
+    qt5.qtwebsockets
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    makeWrapper "$out/opt/pt/bin/PacketTracer" "$out/bin/packettracer8" \
+      "''${qtWrapperArgs[@]}" \
+      --prefix LD_LIBRARY_PATH : "$out/opt/pt/bin"
+
+    install -D $out/opt/pt/art/app.png $out/share/icons/hicolor/128x128/apps/ciscoPacketTracer8.png
+
+    rm $out/opt/pt/bin/libQt5* -f
+
+    runHook postInstall
+  '';
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "cisco-pt8.desktop";
+      desktopName = "Cisco Packet Tracer 8";
+      icon = "ciscoPacketTracer8";
+      exec = "packettracer8 %f";
+      mimeTypes = [ "application/x-pkt" "application/x-pka" "application/x-pkz" ];
+    })
+  ];
+
+  dontWrapQtApps = true;
+
+  passthru = {
+    inherit hashes;
+  };
+
+  meta = with lib; {
+    description = "Network simulation tool from Cisco";
+    homepage = "https://www.netacad.com/courses/packet-tracer";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = with maintainers; [ lucasew ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/clash-verge/default.nix b/nixpkgs/pkgs/applications/networking/clash-verge/default.nix
new file mode 100644
index 000000000000..bbe36cb0d661
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/clash-verge/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, stdenv
+, fetchurl
+, dpkg
+, wrapGAppsHook
+, autoPatchelfHook
+, clash
+, clash-meta
+, openssl
+, webkitgtk
+, udev
+, libayatana-appindicator
+}:
+
+stdenv.mkDerivation rec {
+  pname = "clash-verge";
+  version = "1.3.5";
+
+  src = fetchurl {
+    url = "https://github.com/zzzgydi/clash-verge/releases/download/v${version}/clash-verge_${version}_amd64.deb";
+    hash = "sha256-dMlJ7f1wpaiJrK5Xwx+e1tsWkGG9gJUyiIjhvVCWEJQ=";
+  };
+
+  nativeBuildInputs = [
+    dpkg
+    wrapGAppsHook
+    autoPatchelfHook
+  ];
+
+  buildInputs = [
+    openssl
+    webkitgtk
+    stdenv.cc.cc
+  ];
+
+  runtimeDependencies = [
+    (lib.getLib udev)
+    libayatana-appindicator
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    mv usr/* $out
+    rm $out/bin/{clash,clash-meta}
+
+    runHook postInstall
+  '';
+
+  postFixup = ''
+    ln -s ${lib.getExe clash} $out/bin/clash
+    ln -s ${lib.getExe clash-meta} $out/bin/clash-meta
+  '';
+
+  meta = with lib; {
+    description = "A Clash GUI based on tauri";
+    homepage = "https://github.com/zzzgydi/clash-verge";
+    platforms = [ "x86_64-linux" ];
+    license = licenses.gpl3Plus;
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    maintainers = with maintainers; [ zendo ];
+    mainProgram = "clash-verge";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cloudflare-dyndns/default.nix b/nixpkgs/pkgs/applications/networking/cloudflare-dyndns/default.nix
new file mode 100644
index 000000000000..7f11ec257038
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cloudflare-dyndns/default.nix
@@ -0,0 +1,60 @@
+{ lib
+, python3
+, fetchFromGitHub
+, fetchpatch
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "cloudflare-dyndns";
+  version = "4.1";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "kissgyorgy";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-6Q5fpJ+HuQ+hc3xTtB5tR43pn9WZ0nZZR723iLAkpis=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    poetry-core
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    attrs
+    click
+    cloudflare
+    pydantic
+    requests
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytestCheckHook
+  ];
+
+  patches = [
+    # Switch to poetry-core, https://github.com/kissgyorgy/cloudflare-dyndns/pull/22
+    (fetchpatch {
+      name = "switch-to-poetry-core.patch";
+      url = "https://github.com/kissgyorgy/cloudflare-dyndns/commit/741ed1ccb3373071ce15683a3b8ddc78d64866f8.patch";
+      sha256 = "sha256-mjSah0DWptZB6cjhP6dJg10BpJylPSQ2K4TKda7VmHw=";
+    })
+  ];
+
+  postPatch = ''
+    substituteInPlace pyproject.toml \
+      --replace 'click = "^7.0"' 'click = "*"' \
+      --replace 'attrs = "^21.1.0"' 'attrs = "*"'
+  '';
+
+  disabledTests = [
+    "test_get_ipv4"
+  ];
+
+  meta = with lib; {
+    description = "CloudFlare Dynamic DNS client";
+    homepage = "https://github.com/kissgyorgy/cloudflare-dyndns";
+    license = licenses.mit;
+    maintainers = with maintainers; [ lovesegfault ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cloudflared/default.nix b/nixpkgs/pkgs/applications/networking/cloudflared/default.nix
new file mode 100644
index 000000000000..a83f1e1dfa61
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cloudflared/default.nix
@@ -0,0 +1,84 @@
+{ lib
+, stdenv
+, buildGoModule
+, fetchFromGitHub
+, callPackage
+}:
+
+buildGoModule rec {
+  pname = "cloudflared";
+  version = "2023.8.2";
+
+  src = fetchFromGitHub {
+    owner = "cloudflare";
+    repo = "cloudflared";
+    rev = "refs/tags/${version}";
+    hash = "sha256-8khwpGOBSpbAHnKeKFZUrJoE0dgQB3bN6Y/W2gwRfCM=";
+  };
+
+  vendorHash = null;
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.Version=${version}"
+    "-X github.com/cloudflare/cloudflared/cmd/cloudflared/updater.BuiltForPackageManager=nixpkgs"
+  ];
+
+  preCheck = ''
+    # Workaround for: sshgen_test.go:74: mkdir /homeless-shelter/.cloudflared: no such file or directory
+    export HOME="$(mktemp -d)"
+
+    # Workaround for: protocol_test.go:11:
+    #   lookup protocol-v2.argotunnel.com on [::1]:53: read udp [::1]:51876->[::1]:53: read: connection refused
+    substituteInPlace "edgediscovery/protocol_test.go" \
+      --replace "TestProtocolPercentage" "SkipProtocolPercentage"
+
+    # Workaround for: origin_icmp_proxy_test.go:46:
+    #   cannot create ICMPv4 proxy: socket: permission denied nor ICMPv6 proxy: socket: permission denied
+    substituteInPlace "ingress/origin_icmp_proxy_test.go" \
+      --replace "TestICMPRouterEcho" "SkipICMPRouterEcho"
+
+    # Workaround for: origin_icmp_proxy_test.go:110:
+    #   cannot create ICMPv4 proxy: socket: permission denied nor ICMPv6 proxy: socket: permission denied
+    substituteInPlace "ingress/origin_icmp_proxy_test.go" \
+      --replace "TestConcurrentRequestsToSameDst" "SkipConcurrentRequestsToSameDst"
+
+    # Workaround for: origin_icmp_proxy_test.go:242:
+    #   cannot create ICMPv4 proxy: socket: permission denied nor ICMPv6 proxy: socket: permission denied
+    substituteInPlace "ingress/origin_icmp_proxy_test.go" \
+      --replace "TestICMPRouterRejectNotEcho" "SkipICMPRouterRejectNotEcho"
+
+    # Workaround for: origin_icmp_proxy_test.go:108:
+    #   Received unexpected error: cannot create ICMPv4 proxy: Group ID 100 is not between ping group 65534 to 65534 nor ICMPv6 proxy: socket: permission denied
+    substituteInPlace "ingress/origin_icmp_proxy_test.go" \
+      --replace "TestTraceICMPRouterEcho" "SkipTraceICMPRouterEcho"
+
+    # Workaround for: icmp_posix_test.go:28: socket: permission denied
+    substituteInPlace "ingress/icmp_posix_test.go" \
+      --replace "TestFunnelIdleTimeout" "SkipFunnelIdleTimeout"
+
+    # Workaround for: icmp_posix_test.go:88: Received unexpected error: Group ID 100 is not between ping group 65534 to 65534
+    substituteInPlace "ingress/icmp_posix_test.go" \
+      --replace "TestReuseFunnel" "SkipReuseFunnel"
+
+    # Workaround for: manager_test.go:197:
+    #   Should be false
+    substituteInPlace "datagramsession/manager_test.go" \
+      --replace "TestManagerCtxDoneCloseSessions" "SkipManagerCtxDoneCloseSessions"
+  '';
+
+  doCheck = !stdenv.isDarwin;
+
+  passthru.tests.simple = callPackage ./tests.nix { inherit version; };
+
+  meta = with lib; {
+    description = "Cloudflare Tunnel daemon, Cloudflare Access toolkit, and DNS-over-HTTPS client";
+    homepage = "https://www.cloudflare.com/products/tunnel";
+    changelog = "https://github.com/cloudflare/cloudflared/releases/tag/${version}";
+    license = licenses.asl20;
+    platforms = platforms.unix ++ platforms.windows;
+    maintainers = with maintainers; [ bbigras enorris thoughtpolice piperswe qjoly ];
+    mainProgram = "cloudflared";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cloudflared/tests.nix b/nixpkgs/pkgs/applications/networking/cloudflared/tests.nix
new file mode 100644
index 000000000000..8314e84075fd
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cloudflared/tests.nix
@@ -0,0 +1,44 @@
+{ version, lib, stdenv, pkgsCross, testers, cloudflared, runCommand, wine, wine64 }:
+
+let
+  inherit (stdenv) buildPlatform;
+in
+{
+  version = testers.testVersion {
+    package = cloudflared;
+    command = "cloudflared help";
+  };
+  refuses-to-autoupdate = runCommand "cloudflared-${version}-refuses-to-autoupdate"
+    {
+      nativeBuildInputs = [ cloudflared ];
+    } ''
+    set -e
+    cloudflared update 2>&1 | tee output.txt
+    if ! grep "cloudflared was installed by nixpkgs" output.txt
+    then
+      echo "cloudflared's output didn't contain the package manager name"
+      exit 1
+    fi
+    mkdir $out
+  '';
+} // lib.optionalAttrs (buildPlatform.isLinux && (buildPlatform.isi686 || buildPlatform.isx86_64)) {
+  runs-through-wine = runCommand "cloudflared-${version}-runs-through-wine"
+    {
+      nativeBuildInputs = [ wine ];
+      exe = "${pkgsCross.mingw32.cloudflared}/bin/cloudflared.exe";
+    } ''
+    export HOME="$(mktemp -d)"
+    wine $exe help
+    mkdir $out
+  '';
+} // lib.optionalAttrs (buildPlatform.isLinux && buildPlatform.isx86_64) {
+  runs-through-wine64 = runCommand "cloudflared-${version}-runs-through-wine64"
+    {
+      nativeBuildInputs = [ wine64 ];
+      exe = "${pkgsCross.mingwW64.cloudflared}/bin/cloudflared.exe";
+    } ''
+    export HOME="$(mktemp -d)"
+    wine64 $exe help
+    mkdir $out
+  '';
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/acorn/default.nix b/nixpkgs/pkgs/applications/networking/cluster/acorn/default.nix
new file mode 100644
index 000000000000..4b6e44ab020f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/acorn/default.nix
@@ -0,0 +1,32 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "acorn";
+  version = "0.8.0";
+
+  src = fetchFromGitHub {
+    owner = "acorn-io";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-ZS3YxXgMSu8+eRnpqrtaBTQIlSY3cscudcTbztiRsbM=";
+  };
+
+  vendorHash = "sha256-jkkzlMc2y8HvPZjpmRIQz64JK5yjhdoJevE0dclBHvA=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/acorn-io/acorn/pkg/version.Tag=v${version}"
+  ];
+
+  # integration tests require network and kubernetes master
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://docs.acorn.io";
+    changelog = "https://github.com/acorn-io/${pname}/releases/tag/v${version}";
+    description = "A simple application deployment framework for Kubernetes";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ urandom ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/aiac/default.nix b/nixpkgs/pkgs/applications/networking/cluster/aiac/default.nix
new file mode 100644
index 000000000000..92f04fa88815
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/aiac/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "aiac";
+  version = "2.5.0";
+  excludedPackages = [".ci"];
+
+  src = fetchFromGitHub {
+    owner = "gofireflyio";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-BCcoMftnvfAqmabnSz/oRAlJg95KJ236mduxV2DfRG4=";
+  };
+
+  vendorHash = "sha256-Uqr9wH7hCLdZEu6DXddgB7NuLtqcjUbOPJ2YX+9ehKM=";
+  ldflags = [ "-s" "-w" "-X github.com/gofireflyio/aiac/v3/libaiac.Version=v${version}" ];
+
+  meta = with lib; {
+    description = ''Artificial Intelligence Infrastructure-as-Code Generator.'';
+    homepage = "https://github.com/gofireflyio/aiac/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ qjoly ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/argo-rollouts/default.nix b/nixpkgs/pkgs/applications/networking/cluster/argo-rollouts/default.nix
new file mode 100644
index 000000000000..4c5a1b211303
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/argo-rollouts/default.nix
@@ -0,0 +1,27 @@
+{ buildGoModule, lib, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "argo-rollouts";
+  version = "1.5.1";
+
+  src = fetchFromGitHub {
+    owner = "argoproj";
+    repo = "argo-rollouts";
+    rev = "v${version}";
+    sha256 = "sha256-ODcT7dc4xBHOKYTP2pUTq2z3GMUEpZ9OUKKxlbd+Vvk=";
+  };
+
+  vendorHash = "sha256-IxSLlRsOz/Xamguxm+7jy8qAAEZZFm/NHDIBjm5tnCs=";
+
+  # Disable tests since some test fail because of missing test data
+  doCheck = false;
+
+  subPackages = [ "cmd/rollouts-controller" "cmd/kubectl-argo-rollouts" ];
+
+  meta = with lib; {
+    description = "Kubernetes Progressive Delivery Controller";
+    homepage = "https://github.com/argoproj/argo-rollouts/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ psibi ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/argo/default.nix b/nixpkgs/pkgs/applications/networking/cluster/argo/default.nix
new file mode 100644
index 000000000000..6ffc939e23f3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/argo/default.nix
@@ -0,0 +1,94 @@
+{ lib
+, stdenv
+, buildGoModule
+, buildGoPackage
+, fetchFromGitHub
+, installShellFiles
+, pkgsBuildBuild
+}:
+
+let
+  # Argo can package a static server in the CLI using the `staticfiles` go module.
+  # We build the CLI without the static server for simplicity, but the tool is still required for
+  # compilation to succeed.
+  # See: https://github.com/argoproj/argo/blob/d7690e32faf2ac5842468831daf1443283703c25/Makefile#L117
+  staticfiles = pkgsBuildBuild.buildGoModule rec {
+    name = "staticfiles";
+
+    src = fetchFromGitHub {
+      owner = "bouk";
+      repo = "staticfiles";
+      rev = "827d7f6389cd410d0aa3f3d472a4838557bf53dd";
+      hash = "sha256-wchj5KjhTmhc4XVW0sRFCcyx5W9am8TNAIhej3WFWXU=";
+    };
+
+    vendorHash = null;
+
+    excludedPackages = [ "./example" ];
+
+    preBuild = ''
+      cp ${./staticfiles.go.mod} go.mod
+    '';
+
+    ldflags = [ "-s" "-w" ];
+  };
+in
+buildGoModule rec {
+  pname = "argo";
+  version = "3.4.10";
+
+  src = fetchFromGitHub {
+    owner = "argoproj";
+    repo = "argo";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-uhXwCaAVFLlGeqkBbeA5DINo9CjNMzU9rRmOYoYJASI=";
+  };
+
+  vendorHash = "sha256-0563OHMNkKZcmLY1nHS70pbtrufY1d1WNXrxcCl6MKY=";
+
+  doCheck = false;
+
+  subPackages = [
+    "cmd/argo"
+  ];
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  preBuild = ''
+    mkdir -p ui/dist/app
+    echo "Built without static files" > ui/dist/app/index.html
+
+    ${staticfiles}/bin/staticfiles -o server/static/files.go ui/dist/app
+  '';
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/argoproj/argo-workflows/v3.buildDate=unknown"
+    "-X github.com/argoproj/argo-workflows/v3.gitCommit=${src.rev}"
+    "-X github.com/argoproj/argo-workflows/v3.gitTag=${src.rev}"
+    "-X github.com/argoproj/argo-workflows/v3.gitTreeState=clean"
+    "-X github.com/argoproj/argo-workflows/v3.version=${version}"
+  ];
+
+  postInstall = ''
+    for shell in bash zsh; do
+      ${if (stdenv.buildPlatform == stdenv.hostPlatform)
+        then "$out/bin/argo"
+        else "${pkgsBuildBuild.argo}/bin/argo"
+      } completion $shell > argo.$shell
+      installShellCompletion argo.$shell
+    done
+  '';
+
+  meta = with lib; {
+    description = "Container native workflow engine for Kubernetes";
+    homepage = "https://github.com/argoproj/argo";
+    changelog = "https://github.com/argoproj/argo-workflows/blob/v${version}/CHANGELOG.md";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ groodt ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/argo/staticfiles.go.mod b/nixpkgs/pkgs/applications/networking/cluster/argo/staticfiles.go.mod
new file mode 100644
index 000000000000..952de850dc72
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/argo/staticfiles.go.mod
@@ -0,0 +1,3 @@
+module bou.ke/staticfiles
+
+go 1.18
diff --git a/nixpkgs/pkgs/applications/networking/cluster/argocd-autopilot/default.nix b/nixpkgs/pkgs/applications/networking/cluster/argocd-autopilot/default.nix
new file mode 100644
index 000000000000..4a0f192ea321
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/argocd-autopilot/default.nix
@@ -0,0 +1,54 @@
+{ lib, stdenv, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "argocd-autopilot";
+  version = "0.4.15";
+
+  src = fetchFromGitHub {
+    owner = "argoproj-labs";
+    repo = "argocd-autopilot";
+    rev = "v${version}";
+    sha256 = "sha256-E0Y2GBklUiQBSdrKerFO0B8AAPYnDuxbdRk7uU7cQBI=";
+  };
+
+  vendorHash = "sha256-5YGe9OnZhjswLMlXohPGzpebocuJFfBd94cc1y88irs=";
+
+  proxyVendor = true;
+
+  ldflags =
+    let package_url = "github.com/argoproj-labs/argocd-autopilot/pkg/store"; in
+    [
+      "-s"
+      "-w"
+      "-X ${package_url}.binaryName=${pname}"
+      "-X ${package_url}.version=${src.rev}"
+      "-X ${package_url}.buildDate=unknown"
+      "-X ${package_url}.gitCommit=${src.rev}"
+      "-X ${package_url}.installationManifestsURL=github.com/argoproj-labs/argocd-autopilot/manifests/base?ref=${src.rev}"
+      "-X ${package_url}.installationManifestsNamespacedURL=github.com/argoproj-labs/argocd-autopilot/manifests/insecure?ref=${src.rev}"
+    ];
+
+  subPackages = [ "cmd" ];
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/argocd-autopilot version | grep ${src.rev} > /dev/null
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    install -Dm755 "$GOPATH/bin/cmd" -T $out/bin/argocd-autopilot
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "ArgoCD Autopilot";
+    downloadPage = "https://github.com/argoproj-labs/argocd-autopilot";
+    homepage = "https://argocd-autopilot.readthedocs.io/en/stable/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ sagikazarmark bryanasdev000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/argocd/default.nix b/nixpkgs/pkgs/applications/networking/cluster/argocd/default.nix
new file mode 100644
index 000000000000..b754edb111cc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/argocd/default.nix
@@ -0,0 +1,64 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "argocd";
+  version = "2.8.3";
+
+  src = fetchFromGitHub {
+    owner = "argoproj";
+    repo = "argo-cd";
+    rev = "v${version}";
+    hash = "sha256-sVaUItort09n2aShrE0MqOKQps44qNQv0Nox4P21xqg=";
+  };
+
+  proxyVendor = true; # darwin/linux hash mismatch
+  vendorHash = "sha256-WeDIvw9KHDL5h/MQ9H1rOZkAlUOzROGw/gwpZB2jvOg=";
+
+  # Set target as ./cmd per cli-local
+  # https://github.com/argoproj/argo-cd/blob/master/Makefile#L227
+  subPackages = [ "cmd" ];
+
+  ldflags =
+    let package_url = "github.com/argoproj/argo-cd/v2/common"; in
+    [
+      "-s" "-w"
+      "-X ${package_url}.version=${version}"
+      "-X ${package_url}.buildDate=unknown"
+      "-X ${package_url}.gitCommit=${src.rev}"
+      "-X ${package_url}.gitTag=${src.rev}"
+      "-X ${package_url}.gitTreeState=clean"
+      "-X ${package_url}.kubectlVersion=v0.24.2"
+      # NOTE: Update kubectlVersion when upgrading this package with
+      # https://github.com/argoproj/argo-cd/blob/v${version}/go.mod#L95
+      # Per https://github.com/argoproj/argo-cd/blob/master/Makefile#L18
+      # Will need a way to automate it :P
+    ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/bin
+    install -Dm755 "$GOPATH/bin/cmd" -T $out/bin/argocd
+    runHook postInstall
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/argocd version --client | grep ${src.rev} > /dev/null
+  '';
+
+  postInstall = ''
+    installShellCompletion --cmd argocd \
+      --bash <($out/bin/argocd completion bash) \
+      --zsh <($out/bin/argocd completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "Declarative continuous deployment for Kubernetes";
+    downloadPage = "https://github.com/argoproj/argo-cd";
+    homepage = "https://argo-cd.readthedocs.io/en/stable/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ shahrukh330 bryanasdev000 qjoly ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/arkade/default.nix b/nixpkgs/pkgs/applications/networking/cluster/arkade/default.nix
new file mode 100644
index 000000000000..e1afef0794fa
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/arkade/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, stdenv
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "arkade";
+  version = "0.10.0";
+
+  src = fetchFromGitHub {
+    owner = "alexellis";
+    repo = "arkade";
+    rev = version;
+    hash = "sha256-XjJt2bLGBl6T3nrTdwr8lNKW0cBZH+gYFAy6lkNtwgw=";
+  };
+
+  CGO_ENABLED = 0;
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  vendorHash = null;
+
+  # Exclude pkg/get: tests downloading of binaries which fail when sandbox=true
+  subPackages = [
+    "."
+    "cmd"
+    "pkg/apps"
+    "pkg/archive"
+    "pkg/config"
+    "pkg/env"
+    "pkg/helm"
+    "pkg/k8s"
+    "pkg/types"
+  ];
+
+  ldflags = [
+    "-s" "-w"
+    "-X github.com/alexellis/arkade/pkg.GitCommit=ref/tags/${version}"
+    "-X github.com/alexellis/arkade/pkg.Version=${version}"
+  ];
+
+  postInstall = ''
+    installShellCompletion --cmd arkade \
+      --bash <($out/bin/arkade completion bash) \
+      --zsh <($out/bin/arkade completion zsh) \
+      --fish <($out/bin/arkade completion fish)
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/alexellis/arkade";
+    description = "Open Source Kubernetes Marketplace";
+    license = licenses.mit;
+    maintainers = with maintainers; [ welteki techknowlogick qjoly ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/assign-lb-ip/default.nix b/nixpkgs/pkgs/applications/networking/cluster/assign-lb-ip/default.nix
new file mode 100644
index 000000000000..7b85443db3f0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/assign-lb-ip/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "assign-lb-ip";
+  version = "2.3.1";
+
+  src = fetchFromGitHub {
+    owner = "Nordix";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-Sfi58wcX61HNCmlDoparTqnfsuxu6barSnV0uYlC+ng=";
+  };
+
+  vendorHash = "sha256-N78a0pjs2Bg2Bslk/I0ntL88ui4IkRGenL0Pn17Lt/w=";
+
+  meta = with lib; {
+    description = "Assigns loadBalancerIP address to a Kubernetes service for testing purposes";
+    homepage    = "https://github.com/Nordix/assign-lb-ip";
+    license     = licenses.asl20;
+    maintainers = [ maintainers.starcraft66 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/atlantis/default.nix b/nixpkgs/pkgs/applications/networking/cluster/atlantis/default.nix
new file mode 100644
index 000000000000..ba99106c0960
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/atlantis/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "atlantis";
+  version = "0.22.3";
+
+  src = fetchFromGitHub {
+    owner = "runatlantis";
+    repo = "atlantis";
+    rev = "v${version}";
+    sha256 = "sha256-A/FT9t5Z+Iw1mVwS3d5Cc86A9e6jVbEtmEWroVUhhtw=";
+  };
+
+  vendorHash = "sha256-KUkh5yx+v5g0N4yIpgpt3i+uCtOtR0Jvf2PFQcGWtm8=";
+
+  subPackages = [ "." ];
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/atlantis version | grep ${version} > /dev/null
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/runatlantis/atlantis";
+    description = "Terraform Pull Request Automation";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ jpotier ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/atmos/default.nix b/nixpkgs/pkgs/applications/networking/cluster/atmos/default.nix
new file mode 100644
index 000000000000..e3bd97e91dad
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/atmos/default.nix
@@ -0,0 +1,40 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "atmos";
+  version = "1.16.0";
+
+  src = fetchFromGitHub {
+    owner = "cloudposse";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-6NUuKU8KQBfHE6fcN3a9lBcUk7p5I9SuY9g+qJxGXmU=";
+  };
+
+  vendorHash = "sha256-vZwADD7fi9ZvJby9Ijdeueid8jRfUyyj6Nu4kgkO5Wo=";
+
+  ldflags = [ "-s" "-w" "-X github.com/cloudposse/atmos/cmd.Version=v${version}" ];
+
+  preCheck = ''
+    # Remove tests that depend on a network connection.
+    rm -f pkg/vender/component_vendor_test.go
+  '';
+
+  doCheck = true;
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+    $out/bin/atmos version | grep "v${version}"
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    homepage = "https://atmos.tools";
+    changelog = "https://github.com/cloudposse/atmos/releases/tag/v${version}";
+    description = "Universal Tool for DevOps and Cloud Automation (works with terraform, helm, helmfile, etc)";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ rb ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/networking/cluster/bosh-cli/default.nix b/nixpkgs/pkgs/applications/networking/cluster/bosh-cli/default.nix
new file mode 100644
index 000000000000..98a051cb7c3b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/bosh-cli/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, fetchFromGitHub
+, buildGoModule
+, makeWrapper
+, openssh
+}:
+
+buildGoModule rec {
+  pname = "bosh-cli";
+
+  version = "7.4.0";
+
+  src = fetchFromGitHub {
+    owner = "cloudfoundry";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-Hxak76S3+i5G81Xv4wdFvR/+vg5Eh86YjeqRzNUmfh4=";
+  };
+  vendorHash = null;
+
+  postPatch = ''
+    substituteInPlace cmd/version.go --replace '[DEV BUILD]' '${version}'
+  '';
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  subPackages = [ "." ];
+
+  doCheck = false;
+
+  postInstall = ''
+    mv $out/bin/bosh-cli $out/bin/bosh
+    wrapProgram $out/bin/bosh --prefix PATH : '${lib.makeBinPath [ openssh ]}'
+  '';
+
+  meta = with lib; {
+    description = "A command line interface to CloudFoundry BOSH";
+    homepage = "https://bosh.io";
+    changelog = "https://github.com/cloudfoundry/bosh-cli/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ris ];
+    mainProgram = "bosh";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/calico/default.nix b/nixpkgs/pkgs/applications/networking/cluster/calico/default.nix
new file mode 100644
index 000000000000..17f1331e4612
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/calico/default.nix
@@ -0,0 +1,82 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+builtins.mapAttrs (pname: { doCheck ? true, mainProgram ? pname, subPackages }: buildGoModule rec {
+  inherit pname;
+  version = "3.26.1";
+
+  src = fetchFromGitHub {
+    owner = "projectcalico";
+    repo = "calico";
+    rev = "v${version}";
+    hash = "sha256-QSebSc4V8DFSKufSB6M4YSuwDJ9rn/6IR6Fr38F8BBQ=";
+  };
+
+  vendorHash = "sha256-SuV7OEt0ZlVt0i8L5rgQd0HJn63XuDHi7+pe+bq+6Yw=";
+
+  inherit doCheck subPackages;
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    homepage = "https://projectcalico.docs.tigera.io";
+    changelog = "https://github.com/projectcalico/calico/releases/tag/v${version}";
+    description = "Cloud native networking and network security";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ urandom ];
+    platforms = platforms.linux;
+    inherit mainProgram;
+  };
+}) {
+  calico-apiserver = {
+    mainProgram = "apiserver";
+    subPackages = [
+      "apiserver/cmd/..."
+    ];
+  };
+  calico-app-policy = {
+    # integration tests require network
+    doCheck = false;
+    mainProgram = "dikastes";
+    subPackages = [
+      "app-policy/cmd/..."
+    ];
+  };
+  calico-cni-plugin = {
+    mainProgram = "calico";
+    subPackages = [
+      "cni-plugin/cmd/..."
+    ];
+  };
+  calico-kube-controllers = {
+    # integration tests require network and docker
+    doCheck = false;
+    mainProgram = "kube-controllers";
+    subPackages = [
+      "kube-controllers/cmd/..."
+    ];
+  };
+  calico-pod2daemon = {
+    mainProgram = "flexvol";
+    subPackages = [
+      "pod2daemon/csidriver"
+      "pod2daemon/flexvol"
+      "pod2daemon/nodeagent"
+    ];
+  };
+  calico-typha = {
+    subPackages = [
+      "typha/cmd/..."
+    ];
+  };
+  calicoctl = {
+    subPackages = [
+      "calicoctl/calicoctl"
+    ];
+  };
+  confd-calico = {
+    mainProgram = "confd";
+    subPackages = [
+      "confd"
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/cilium/default.nix b/nixpkgs/pkgs/applications/networking/cluster/cilium/default.nix
new file mode 100644
index 000000000000..8b4183337051
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/cilium/default.nix
@@ -0,0 +1,47 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "cilium-cli";
+  version = "0.15.7";
+
+  src = fetchFromGitHub {
+    owner = "cilium";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-kQpQszKyesM9qFlpgwYElrC9B4YBig62Pf9FoZJ2epM=";
+  };
+
+  vendorHash = null;
+
+  subPackages = [ "cmd/cilium" ];
+
+  ldflags = [
+    "-s" "-w"
+    "-X github.com/cilium/cilium-cli/cli.Version=${version}"
+  ];
+
+  # Required to workaround install check error:
+  # 2022/06/25 10:36:22 Unable to start gops: mkdir /homeless-shelter: permission denied
+  HOME = "$TMPDIR";
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/cilium version | grep ${version} > /dev/null
+  '';
+
+  nativeBuildInputs = [ installShellFiles ];
+  postInstall = ''
+    installShellCompletion --cmd cilium \
+      --bash <($out/bin/cilium completion bash) \
+      --fish <($out/bin/cilium completion fish) \
+      --zsh <($out/bin/cilium completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "CLI to install, manage & troubleshoot Kubernetes clusters running Cilium";
+    license = licenses.asl20;
+    homepage = "https://www.cilium.io/";
+    maintainers = with maintainers; [ humancalico bryanasdev000 qjoly ];
+    mainProgram = "cilium";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/civo/default.nix b/nixpkgs/pkgs/applications/networking/cluster/civo/default.nix
new file mode 100644
index 000000000000..ac6cea0fb2ba
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/civo/default.nix
@@ -0,0 +1,46 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "civo";
+  version = "1.0.65";
+
+  src = fetchFromGitHub {
+    owner  = "civo";
+    repo   = "cli";
+    rev    = "v${version}";
+    sha256 = "sha256-zuWKU2bZM0zdEupvWi1CV3S7urEhm4dc+sFYoQmljCk=";
+  };
+
+  vendorHash = "sha256-Tym9Xu+oECUm78nIAyDwYYpR88wNxT4bmoy7iUwUQTU=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  CGO_ENABLED = 0;
+
+  # Some lint checks fail
+  doCheck = false;
+
+  ldflags = [
+    "-s"
+    "-X github.com/civo/cli/common.VersionCli=${version}"
+    "-X github.com/civo/cli/common.CommitCli=${src.rev}"
+    "-X github.com/civo/cli/common.DateCli=unknown"
+  ];
+
+  doInstallCheck = false;
+
+  postInstall = ''
+    mv $out/bin/cli $out/bin/civo
+    installShellCompletion --cmd civo \
+      --bash <($out/bin/civo completion bash) \
+      --fish <($out/bin/civo completion fish) \
+      --zsh <($out/bin/civo completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "CLI for interacting with Civo resources";
+    homepage = "https://github.com/civo/cli";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ berryp ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/click/default.nix b/nixpkgs/pkgs/applications/networking/cluster/click/default.nix
new file mode 100644
index 000000000000..37bbcec1a2c4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/click/default.nix
@@ -0,0 +1,29 @@
+{ darwin, fetchFromGitHub, rustPlatform, lib, stdenv, pkg-config, openssl }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "click";
+  version = "0.6.2";
+
+  src = fetchFromGitHub {
+    owner = "databricks";
+    repo = "click";
+    rev = "v${version}";
+    hash = "sha256-rwS08miRpc+Q9DRuspr21NMYpEYmmscvzarDnjyVe5c=";
+  };
+
+  cargoHash = "sha256-WNITVYTS7JWrBBwxlQuVTmLddWLbDJACizEsRiustGg=";
+
+  nativeBuildInputs = lib.optionals stdenv.isLinux [ pkg-config ];
+
+  buildInputs = lib.optionals stdenv.isLinux [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ darwin.apple_sdk.frameworks.Security ];
+
+  meta = with lib; {
+    description = ''The "Command Line Interactive Controller for Kubernetes"'';
+    homepage = "https://github.com/databricks/click";
+    license = [ licenses.asl20 ];
+    maintainers = [ maintainers.mbode ];
+    platforms = [ "x86_64-linux" "x86_64-darwin" ];
+    mainProgram = "click";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/cloudfoundry-cli/default.nix b/nixpkgs/pkgs/applications/networking/cluster/cloudfoundry-cli/default.nix
new file mode 100644
index 000000000000..ee7411b118be
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/cloudfoundry-cli/default.nix
@@ -0,0 +1,45 @@
+{ lib, buildGoModule, fetchFromGitHub, fetchurl, installShellFiles }:
+
+buildGoModule rec {
+  pname = "cloudfoundry-cli";
+  version = "8.7.2";
+
+  src = fetchFromGitHub {
+    owner = "cloudfoundry";
+    repo = "cli";
+    rev = "v${version}";
+    sha256 = "sha256-6Ce9fmL0wZXCCRbJMqSD6xZQfDZl6EsiPpmfvYFT2tA=";
+  };
+  vendorHash = "sha256-5/aGyJ+SksnjuKsWVyz60OsAcz3z/BP+wCwlKEmxHb4=";
+
+  subPackages = [ "." ];
+
+  # upstream have helpfully moved the bash completion script to a separate
+  # repo which receives no releases or even tags
+  bashCompletionScript = fetchurl {
+    url = "https://raw.githubusercontent.com/cloudfoundry/cli-ci/5f4f0d5d01e89c6333673f0fa96056749e71b3cd/ci/installers/completion/cf8";
+    sha256 = "06w26kpnjd3f2wdjhb4pp0kaq2gb9kf87v7pjd9n2g7s7qhdqyhy";
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X code.cloudfoundry.org/cli/version.binaryBuildDate=1970-01-01"
+    "-X code.cloudfoundry.org/cli/version.binaryVersion=${version}"
+  ];
+
+  postInstall = ''
+    mv "$out/bin/cli" "$out/bin/cf"
+    installShellCompletion --bash $bashCompletionScript
+  '';
+
+  meta = with lib; {
+    description = "The official command line client for Cloud Foundry";
+    homepage = "https://github.com/cloudfoundry/cli";
+    maintainers = with maintainers; [ ris ];
+    mainProgram = "cf";
+    license = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/clusterctl/default.nix b/nixpkgs/pkgs/applications/networking/cluster/clusterctl/default.nix
new file mode 100644
index 000000000000..2f8e7cf0a7c4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/clusterctl/default.nix
@@ -0,0 +1,48 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles, testers, clusterctl }:
+
+buildGoModule rec {
+  pname = "clusterctl";
+  version = "1.5.1";
+
+  src = fetchFromGitHub {
+    owner = "kubernetes-sigs";
+    repo = "cluster-api";
+    rev = "v${version}";
+    hash = "sha256-yzk2zIk3igi7xlOi8RlGsthxy/M051SsiLi2v0gMWYk=";
+  };
+
+  vendorHash = "sha256-FUimSBMZI4BDtNKnlzmxe2HiL7MGIUh7SFC2dwWYT3I=";
+
+  subPackages = [ "cmd/clusterctl" ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = let t = "sigs.k8s.io/cluster-api/version"; in [
+    "-X ${t}.gitMajor=${lib.versions.major version}"
+    "-X ${t}.gitMinor=${lib.versions.minor version}"
+    "-X ${t}.gitVersion=v${version}"
+  ];
+
+  postInstall = ''
+    # errors attempting to write config to read-only $HOME
+    export HOME=$TMPDIR
+
+    installShellCompletion --cmd clusterctl \
+      --bash <($out/bin/clusterctl completion bash) \
+      --zsh <($out/bin/clusterctl completion zsh)
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = clusterctl;
+    command = "HOME=$TMPDIR clusterctl version";
+    version = "v${version}";
+  };
+
+  meta = with lib; {
+    changelog = "https://github.com/kubernetes-sigs/cluster-api/releases/tag/${src.rev}";
+    description = "Kubernetes cluster API tool";
+    homepage = "https://cluster-api.sigs.k8s.io/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ qjoly ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/cmctl/default.nix b/nixpkgs/pkgs/applications/networking/cluster/cmctl/default.nix
new file mode 100644
index 000000000000..ac5273242472
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/cmctl/default.nix
@@ -0,0 +1,55 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "cmctl";
+  version = "1.11.2";
+
+  src = fetchFromGitHub {
+    owner = "cert-manager";
+    repo = "cert-manager";
+    rev = "4767427a40e0e193c976fd6bc228f50de8950572";
+    sha256 = "128s5vd4hp5mr0rnb21grzmijzx0ibpv71as36dcgw7z4v3gq7lx";
+  };
+
+  vendorHash = "sha256-+r0QpD97r6dokUr07Qjb9kvoK+oz2rvml0cIebtYuHg=";
+
+  subPackages = [ "cmd/ctl" ];
+
+  ldflags = [
+    "-s" "-w"
+    "-X github.com/cert-manager/cert-manager/cmd/ctl/pkg/build.name=cmctl"
+    "-X github.com/cert-manager/cert-manager/cmd/ctl/pkg/build/commands.registerCompletion=true"
+    "-X github.com/cert-manager/cert-manager/pkg/util.AppVersion=v${version}"
+    "-X github.com/cert-manager/cert-manager/pkg/util.AppGitCommit=${src.rev}"
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    mv $out/bin/ctl $out/bin/cmctl
+    installShellCompletion --cmd cmctl \
+      --bash <($out/bin/cmctl completion bash) \
+      --fish <($out/bin/cmctl completion fish) \
+      --zsh <($out/bin/cmctl completion zsh)
+  '';
+
+  passthru.updateScript = ./update.sh;
+
+  meta = with lib; {
+    description = "A CLI tool for managing cert-manager service on Kubernetes clusters";
+    longDescription = ''
+      cert-manager adds certificates and certificate issuers as resource types
+      in Kubernetes clusters, and simplifies the process of obtaining, renewing
+      and using those certificates.
+
+      It can issue certificates from a variety of supported sources, including
+      Let's Encrypt, HashiCorp Vault, and Venafi as well as private PKI, and it
+      ensures certificates remain valid and up to date, attempting to renew
+      certificates at an appropriate time before expiry.
+    '';
+    downloadPage = "https://github.com/cert-manager/cert-manager";
+    license = licenses.asl20;
+    homepage = "https://cert-manager.io/";
+    maintainers = with maintainers; [ joshvanl ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/cmctl/update.sh b/nixpkgs/pkgs/applications/networking/cluster/cmctl/update.sh
new file mode 100755
index 000000000000..16a20edb577b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/cmctl/update.sh
@@ -0,0 +1,41 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl gnugrep gnused jq
+
+set -x -eu -o pipefail
+
+NIXPKGS_PATH="$(git rev-parse --show-toplevel)"
+CMCTL_PATH="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
+
+OLD_VERSION="$(nix-instantiate --eval -E "with import $NIXPKGS_PATH {}; cmctl.version or (builtins.parseDrvName cmctl.name).version" | tr -d '"')"
+LATEST_TAG="$(curl -s ${GITHUB_TOKEN:+-u ":$GITHUB_TOKEN"} "https://api.github.com/repos/cert-manager/cert-manager/releases" | jq '.[].tag_name' --raw-output | sed '/-/d' | sort --version-sort -r | head -n 1)"
+LATEST_VERSION="${LATEST_TAG:1}"
+
+if [ ! "$OLD_VERSION" = "$LATEST_VERSION" ]; then
+    SHA256=$(nix-prefetch-url --quiet --unpack https://github.com/cert-manager/cert-manager/archive/refs/tags/${LATEST_TAG}.tar.gz)
+    TAG_SHA=$(curl -s ${GITHUB_TOKEN:+-u ":$GITHUB_TOKEN"}  "https://api.github.com/repos/cert-manager/cert-manager/git/ref/tags/${LATEST_TAG}" | jq -r '.object.sha')
+    TAG_COMMIT_SHA=$(curl -s ${GITHUB_TOKEN:+-u ":$GITHUB_TOKEN"} "https://api.github.com/repos/cert-manager/cert-manager/git/tags/${TAG_SHA}" | jq '.object.sha' --raw-output)
+
+    setKV () {
+        sed -i "s|$1 = \".*\"|$1 = \"${2:-}\"|" "${CMCTL_PATH}/default.nix"
+    }
+
+    setKV version ${LATEST_VERSION}
+    setKV sha256 "${SHA256}"
+    setKV rev ${TAG_COMMIT_SHA}
+    setKV vendorSha256 "0000000000000000000000000000000000000000000000000000" # The same as lib.fakeSha256
+
+    set +e
+    VENDOR_SHA256=$(nix-build --no-out-link -A cmctl $NIXPKGS_PATH 2>&1 >/dev/null | grep "got:" | cut -d':' -f2 | sed 's| ||g')
+    set -e
+
+    if [ -n "${VENDOR_SHA256:-}" ]; then
+        setKV vendorSha256 ${VENDOR_SHA256}
+    else
+        echo "Update failed. VENDOR_SHA256 is empty."
+        exit 1
+    fi
+
+    echo "updated cmctl to $LATEST_VERSION, please commit changes."
+else
+    echo "cmctl is already up-to-date at $OLD_VERSION"
+fi
diff --git a/nixpkgs/pkgs/applications/networking/cluster/cni/default.nix b/nixpkgs/pkgs/applications/networking/cluster/cni/default.nix
new file mode 100644
index 000000000000..33688148985f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/cni/default.nix
@@ -0,0 +1,29 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "cni";
+  version = "1.1.2";
+
+  src = fetchFromGitHub {
+    owner = "containernetworking";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-g7fVeoqquxPa17AfTu6wnB6PQJDluJ21T3ETrcvWtWg=";
+  };
+
+  vendorHash = "sha256-nH/myA/KdTeFXvmBymXITyx5fdCGnWRn6hNRinXc3/s=";
+
+  subPackages = [
+    "./cnitool"
+  ];
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Container Network Interface - networking for Linux containers";
+    license = licenses.asl20;
+    homepage = "https://github.com/containernetworking/cni";
+    maintainers = with maintainers; [ offline vdemeester ];
+    platforms = [ "x86_64-linux" "aarch64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/cni/plugins.nix b/nixpkgs/pkgs/applications/networking/cluster/cni/plugins.nix
new file mode 100644
index 000000000000..ce6aece37803
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/cni/plugins.nix
@@ -0,0 +1,53 @@
+{ lib, fetchFromGitHub, buildGoModule, nixosTests }:
+
+buildGoModule rec {
+  pname = "cni-plugins";
+  version = "1.3.0";
+
+  src = fetchFromGitHub {
+    owner = "containernetworking";
+    repo = "plugins";
+    rev = "v${version}";
+    hash = "sha256-cbmG9wK3yd79jCiNAKcSSx0COyh6CxR1bgIiCO3i++g=";
+  };
+
+  vendorHash = null;
+
+  doCheck = false;
+
+  ldflags = [
+    "-X github.com/containernetworking/plugins/pkg/utils/buildversion.BuildVersion=v${version}"
+  ];
+
+  subPackages = [
+    "plugins/ipam/dhcp"
+    "plugins/ipam/host-local"
+    "plugins/ipam/static"
+    "plugins/main/bridge"
+    "plugins/main/dummy"
+    "plugins/main/host-device"
+    "plugins/main/ipvlan"
+    "plugins/main/loopback"
+    "plugins/main/macvlan"
+    "plugins/main/ptp"
+    "plugins/main/tap"
+    "plugins/main/vlan"
+    "plugins/meta/bandwidth"
+    "plugins/meta/firewall"
+    "plugins/meta/portmap"
+    "plugins/meta/sbr"
+    "plugins/meta/tuning"
+    "plugins/meta/vrf"
+  ];
+
+  passthru.tests = { inherit (nixosTests) cri-o; };
+
+  meta = with lib; {
+    changelog = "https://github.com/containernetworking/plugins/releases/tag/${src.rev}";
+    description = "Some standard networking plugins, maintained by the CNI team";
+    homepage = "https://www.cni.dev/plugins/";
+    license = licenses.asl20;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ cstrahan ] ++ teams.podman.members;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/containerpilot/default.nix b/nixpkgs/pkgs/applications/networking/cluster/containerpilot/default.nix
new file mode 100644
index 000000000000..dc6e5f3402fa
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/containerpilot/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  version = "3.9.0pre";
+  pname = "containerpilot";
+
+  src = fetchFromGitHub {
+    owner = "joyent";
+    repo = pname;
+    rev = "d999b632b0c96d9e27f092dc9f81a9d82dfe0106";
+    sha256 = "0wsc8canr1c9wzr1lv40yixj9l10c66i6d14yrljsyagl2z02v4n";
+  };
+
+  goPackagePath = "github.com/joyent/${pname}";
+  goDeps = ./deps.nix;
+
+  meta = with lib; {
+    homepage = "https://www.joyent.com/containerpilot";
+    description = "An application centric micro-orchestrator.";
+    platforms = platforms.unix;
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ cpcloud ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/containerpilot/deps.nix b/nixpkgs/pkgs/applications/networking/cluster/containerpilot/deps.nix
new file mode 100644
index 000000000000..9df154389cbc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/containerpilot/deps.nix
@@ -0,0 +1,173 @@
+# file generated from go.mod using vgo2nix (https://github.com/nix-community/vgo2nix)
+[
+  {
+    goPackagePath = "github.com/beorn7/perks";
+    fetch = {
+      type = "git";
+      url = "https://github.com/beorn7/perks";
+      rev = "4c0e84591b9a";
+      sha256 = "1hrybsql68xw57brzj805xx2mghydpdiysv3gbhr7f5wlxj2514y";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/client9/reopen";
+    fetch = {
+      type = "git";
+      url = "https://github.com/client9/reopen";
+      rev = "1a6ccbeaae3f";
+      sha256 = "0iarv0sn9hb26sr75bwilz3m86kcfad4m5klmzixbd4yw1ipnffa";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/flynn/json5";
+    fetch = {
+      type = "git";
+      url = "https://github.com/flynn/json5";
+      rev = "7620272ed633";
+      sha256 = "1l3rqfis8b72mqwm88lx78d0mbdihyamj8cgg2pa5vfbq49cpydf";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/golang/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/protobuf";
+      rev = "6a1fa9404c0a";
+      sha256 = "0dsd6vlfdyarn3v822x9p2s94gfi5lhvqc2vm3bqmqjgcik3c51z";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/hashicorp/consul";
+    fetch = {
+      type = "git";
+      url = "https://github.com/hashicorp/consul";
+      rev = "v1.0.1-rc1";
+      sha256 = "10xqi86n2h39q3qlkxfhnrqwm1bgijs5n2kryaq9yalv5p3qxczg";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/hashicorp/go-cleanhttp";
+    fetch = {
+      type = "git";
+      url = "https://github.com/hashicorp/go-cleanhttp";
+      rev = "3573b8b52aa7";
+      sha256 = "1pbl6p7w5wp1c70x7fp94h4ynk2ajfa76rqin3d2hq1w2fcb7byr";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/hashicorp/go-rootcerts";
+    fetch = {
+      type = "git";
+      url = "https://github.com/hashicorp/go-rootcerts";
+      rev = "6bb64b370b90";
+      sha256 = "1a81fcm1i0ji2iva0dcimiichgwpbcb7lx0vyaks87zj5wf04qy9";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/hashicorp/serf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/hashicorp/serf";
+      rev = "91fd53b1d3e6";
+      sha256 = "0p9mhv6w85cxxl95kvl3rk04yif6v5bhf5kxw8i1cphv5kddv7j9";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/matttproud/golang_protobuf_extensions";
+    fetch = {
+      type = "git";
+      url = "https://github.com/matttproud/golang_protobuf_extensions";
+      rev = "v1.0.1";
+      sha256 = "1d0c1isd2lk9pnfq2nk0aih356j30k3h1gi2w0ixsivi5csl7jya";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/mitchellh/go-homedir";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mitchellh/go-homedir";
+      rev = "b8bc1bf76747";
+      sha256 = "13ry4lylalkh4g2vny9cxwvryslzyzwp9r92z0b10idhdq3wad1q";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/mitchellh/mapstructure";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mitchellh/mapstructure";
+      rev = "d2dd02622084";
+      sha256 = "1idj9h0g9z3s21y2hivaf1dknxhpd7yy0kn6wk3311hlr7s543j5";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/client_golang";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/client_golang";
+      rev = "v0.8.0";
+      sha256 = "1xqny3147g12n4j03kxm8s9mvdbs3ln6i56c655mybrn9jjy48kd";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/client_model";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/client_model";
+      rev = "6f3806018612";
+      sha256 = "1413ibprinxhni51p0755dp57r9wvbw7xgj9nmdaxmhzlqhc86j4";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/common";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/common";
+      rev = "0866df4b85a1";
+      sha256 = "0zw4rxs6zh9vgxz5wwhjnwa6mgac8jh7mb63viircgh08r889chp";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/prometheus/procfs";
+    fetch = {
+      type = "git";
+      url = "https://github.com/prometheus/procfs";
+      rev = "e645f4e5aaa8";
+      sha256 = "18hwygbawbqilz7h8fl25xpbciwalkslb4igqn4cr9d8sqp7d3np";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "github.com/sirupsen/logrus";
+    fetch = {
+      type = "git";
+      url = "https://github.com/sirupsen/logrus";
+      rev = "v1.0.0";
+      sha256 = "0kyvaa4m8w5wijjvrh0amd9bl3sci1vj4y9v9a97sx3rf7xww52l";
+      moduleDir = "";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/sys";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/sys";
+      rev = "94b76065f2d2";
+      sha256 = "0lxd3gmkvza3mah5m8nncdsgd1y6r25vaz4wzdmrs3i1ikzknn93";
+      moduleDir = "";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/applications/networking/cluster/crc/default.nix b/nixpkgs/pkgs/applications/networking/cluster/crc/default.nix
new file mode 100644
index 000000000000..6f975de875db
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/crc/default.nix
@@ -0,0 +1,74 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, git
+, stdenv
+, testers
+, crc
+, runtimeShell
+, coreutils
+}:
+
+let
+  openShiftVersion = "4.12.5";
+  okdVersion = "4.12.0-0.okd-2023-02-18-033438";
+  podmanVersion = "4.3.1";
+  writeKey = "cvpHsNcmGCJqVzf6YxrSnVlwFSAZaYtp";
+  gitHash = "sha256-zk/26cG2Rt3jpbhKgprtq2vx7pIQVi7cPUA90uoQa80=";
+in
+buildGoModule rec {
+  version = "2.15.0";
+  pname = "crc";
+  gitCommit = "72256c3cb00ac01519b26658dd5cfb0dd09b37a1";
+  modRoot = "cmd/crc";
+
+  src = fetchFromGitHub {
+    owner = "crc-org";
+    repo = "crc";
+    rev = "v${version}";
+    hash = gitHash;
+  };
+
+  vendorHash = null;
+
+  nativeBuildInputs = [ git ];
+
+  postPatch = ''
+    substituteInPlace pkg/crc/oc/oc_linux_test.go \
+      --replace "/bin/echo" "${coreutils}/bin/echo"
+
+    substituteInPlace Makefile \
+      --replace "/bin/bash" "${runtimeShell}"
+  '';
+
+  tags = [ "containers_image_openpgp" ];
+
+  ldflags = [
+    "-X github.com/crc-org/crc/pkg/crc/version.crcVersion=${version}"
+    "-X github.com/crc-org/crc/pkg/crc/version.ocpVersion=${openShiftVersion}"
+    "-X github.com/crc-org/crc/pkg/crc/version.okdVersion=${okdVersion}"
+    "-X github.com/crc-org/crc/pkg/crc/version.podmanVersion=${podmanVersion}"
+    "-X github.com/crc-org/crc/pkg/crc/version.commitSha=${builtins.substring 0 8 gitCommit}"
+    "-X github.com/crc-org/crc/pkg/crc/segment.WriteKey=${writeKey}"
+  ];
+
+  preBuild = ''
+    export HOME=$(mktemp -d)
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = crc;
+    command = ''
+      export HOME=$(mktemp -d)
+      crc version
+    '';
+  };
+  passthru.updateScript = ./update.sh;
+
+  meta = with lib; {
+    description = "Manages a local OpenShift 4.x cluster or a Podman VM optimized for testing and development purposes";
+    homepage = "https://crc.dev";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ matthewpi shikanime tricktron ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/crc/update.sh b/nixpkgs/pkgs/applications/networking/cluster/crc/update.sh
new file mode 100755
index 000000000000..6114ee46bc09
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/crc/update.sh
@@ -0,0 +1,65 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl gnugrep gnused jq
+
+set -x -eu -o pipefail
+
+WORKDIR=$(mktemp -d)
+trap "rm -rf ${WORKDIR}" EXIT
+
+NIXPKGS_CRC_FOLDER=$(
+    cd $(dirname ${BASH_SOURCE[0]})
+    pwd -P
+)
+cd ${NIXPKGS_CRC_FOLDER}
+
+LATEST_TAG_RAWFILE=${WORKDIR}/latest_tag.json
+curl --silent ${GITHUB_TOKEN:+-u ":$GITHUB_TOKEN"} \
+    https://api.github.com/repos/crc-org/crc/releases  >${LATEST_TAG_RAWFILE}
+
+LATEST_TAG_NAME=$(jq 'map(.tag_name)' ${LATEST_TAG_RAWFILE} |
+    grep -v -e rc -e engine | tail -n +2 | head -n -1 | sed 's|[", ]||g' | sort -rV | head -n1)
+
+CRC_VERSION=$(echo ${LATEST_TAG_NAME} | sed 's/^v//')
+
+CRC_COMMIT=$(curl --silent ${GITHUB_TOKEN:+-u ":$GITHUB_TOKEN"} \
+    https://api.github.com/repos/crc-org/crc/tags |
+    jq -r "map(select(.name == \"${LATEST_TAG_NAME}\")) | .[0] | .commit.sha")
+
+CRC_GIT_PREFETCH=$(nix-prefetch-url --unpack https://github.com/crc-org/crc/archive/${CRC_COMMIT}.tar.gz)
+CRC_GIT_HASH=$(nix hash to-sri --type sha256 ${CRC_GIT_PREFETCH})
+
+FILE_MAKEFILE=${WORKDIR}/Makefile
+curl --silent https://raw.githubusercontent.com/crc-org/crc/${CRC_COMMIT}/Makefile >$FILE_MAKEFILE
+
+OPENSHIFT_VERSION=$(grep 'OPENSHIFT_VERSION' ${FILE_MAKEFILE} |
+    head -n1 | awk '{print $3}')
+
+OKD_VERSION=$(grep 'OKD_VERSION' ${FILE_MAKEFILE} |
+    head -n1 | awk '{print $3}')
+
+PODMAN_VERSION=$(grep 'PODMAN_VERSION' ${FILE_MAKEFILE} |
+    head -n1 | awk '{print $3}')
+
+WRITE_KEY=$(grep '$(REPOPATH)/pkg/crc/segment.WriteKey' ${FILE_MAKEFILE} |
+    head -n1 | awk '{print $4}' | sed -e 's/$(REPOPATH)\/pkg\/crc\/segment.WriteKey=//g')
+
+sed -i "s|version = \".*\"|version = \"${CRC_VERSION:-}\"|" \
+    ${NIXPKGS_CRC_FOLDER}/default.nix
+
+sed -i "s|gitCommit = \".*\"|gitCommit = \"${CRC_COMMIT:-}\"|" \
+    ${NIXPKGS_CRC_FOLDER}/default.nix
+
+sed -i "s|gitHash = \".*\"|gitHash = \"${CRC_GIT_HASH}\"|" \
+    ${NIXPKGS_CRC_FOLDER}/default.nix
+
+sed -i "s|openShiftVersion = \".*\"|openShiftVersion = \"${OPENSHIFT_VERSION:-}\"|" \
+    ${NIXPKGS_CRC_FOLDER}/default.nix
+
+sed -i "s|okdVersion = \".*\"|okdVersion = \"${OKD_VERSION:-}\"|" \
+    ${NIXPKGS_CRC_FOLDER}/default.nix
+
+sed -i "s|podmanVersion = \".*\"|podmanVersion = \"${PODMAN_VERSION:-}\"|" \
+    ${NIXPKGS_CRC_FOLDER}/default.nix
+
+sed -i "s|writeKey = \".*\"|writeKey = \"${WRITE_KEY:-}\"|" \
+    ${NIXPKGS_CRC_FOLDER}/default.nix
diff --git a/nixpkgs/pkgs/applications/networking/cluster/dnsname-cni/default.nix b/nixpkgs/pkgs/applications/networking/cluster/dnsname-cni/default.nix
new file mode 100644
index 000000000000..3a543f40dd49
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/dnsname-cni/default.nix
@@ -0,0 +1,37 @@
+{
+  buildGoModule,
+  dnsmasq,
+  fetchFromGitHub,
+  lib,
+  makeWrapper,
+}:
+
+buildGoModule rec {
+  pname = "cni-plugin-dnsname";
+  version = "1.3.1";
+
+  src = fetchFromGitHub {
+    owner = "containers";
+    repo = "dnsname";
+    rev = "v${version}";
+    sha256 = "sha256-kebN1OLMOrBKBz4aBV0VYm+LmLm6S0mKnVgG2u5I+d4=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  postInstall = ''
+    wrapProgram $out/bin/dnsname --prefix PATH : ${lib.makeBinPath [ dnsmasq ]}
+  '';
+
+  vendorSha256 = null;
+  subPackages = [ "plugins/meta/dnsname" ];
+
+  doCheck = false; # NOTE: requires root privileges
+
+  meta = with lib; {
+    description = "DNS name resolution for containers";
+    homepage = "https://github.com/containers/dnsname";
+    license = licenses.asl20;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ mikroskeem ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/docker-machine/default.nix b/nixpkgs/pkgs/applications/networking/cluster/docker-machine/default.nix
new file mode 100644
index 000000000000..7fd163f6968a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/docker-machine/default.nix
@@ -0,0 +1,33 @@
+# This file was generated by go2nix.
+{ lib, buildGoPackage, fetchFromGitHub, installShellFiles }:
+
+buildGoPackage rec {
+  pname = "machine";
+  version = "0.16.2";
+
+  goPackagePath = "github.com/docker/machine";
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "docker";
+    repo = "machine";
+    sha256 = "sha256-Mo2OGpem3p6hCNJ46+RH3BfC7kmKB4yk4Vzo38K88UM=";
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    pushd go/src/${goPackagePath}/contrib/completion
+    installShellCompletion --bash bash/*
+    installShellCompletion --zsh zsh/*
+    popd
+  '';
+
+  meta = with lib; {
+    homepage = "https://docs.docker.com/machine/";
+    description = "Docker Machine is a tool that lets you install Docker Engine on virtual hosts, and manage Docker Engine on the hosts";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ offline ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/docker-machine/hyperkit.nix b/nixpkgs/pkgs/applications/networking/cluster/docker-machine/hyperkit.nix
new file mode 100644
index 000000000000..381cd1d456b5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/docker-machine/hyperkit.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, minikube }:
+
+buildGoModule rec {
+  inherit (minikube) version src nativeBuildInputs buildInputs vendorHash doCheck;
+
+  pname = "docker-machine-hyperkit";
+
+  buildPhase = ''
+    make docker-machine-driver-hyperkit COMMIT=${src.rev}
+  '';
+
+  installPhase = ''
+    install out/docker-machine-driver-hyperkit -Dt $out/bin
+  '';
+
+  meta = with lib; {
+    homepage = "https://minikube.sigs.k8s.io/docs/drivers/hyperkit";
+    description = "HyperKit driver for docker-machine";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ atkinschang ];
+    platforms = platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/docker-machine/kvm-deps.nix b/nixpkgs/pkgs/applications/networking/cluster/docker-machine/kvm-deps.nix
new file mode 100644
index 000000000000..e321b2c1b0ac
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/docker-machine/kvm-deps.nix
@@ -0,0 +1,21 @@
+# This file was generated by go2nix.
+[
+  {
+    goPackagePath = "github.com/docker/machine";
+    fetch = {
+      type = "git";
+      url = "https://github.com/docker/machine";
+      rev = "457c02d06a155827c1c4af9b5ab38c0b6b4e48ea";
+      sha256 = "0hx5bhjc7q9ml6h6d2a5csqg6vqwjj68599q0cccw3pcfrb34gmd";
+    };
+  }
+  {
+    goPackagePath = "github.com/libvirt/libvirt-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/libvirt/libvirt-go";
+      rev = "e9642325d747c353ca7b76b4893d5dbdc81c296f";
+      sha256 = "1822b2kbwyxb2gigbiashcs7v4fsyw7k3sdlqh43ga0l6058fmhl";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/applications/networking/cluster/docker-machine/kvm.nix b/nixpkgs/pkgs/applications/networking/cluster/docker-machine/kvm.nix
new file mode 100644
index 000000000000..4940f6331d44
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/docker-machine/kvm.nix
@@ -0,0 +1,28 @@
+# This file was generated by go2nix.
+{ lib, buildGoPackage, fetchFromGitHub, libvirt, pkg-config }:
+
+buildGoPackage rec {
+  pname = "docker-machine-kvm";
+  version = "0.10.0";
+
+  goPackagePath = "github.com/dhiltgen/docker-machine-kvm";
+  goDeps = ./kvm-deps.nix;
+
+  src = fetchFromGitHub {
+    rev    = "v${version}";
+    owner  = "dhiltgen";
+    repo   = "docker-machine-kvm";
+    sha256 = "0ch4zwb6h7hnr5l3skj1daypvpyms2i666lbnmakpw1fw3zvjmgy";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libvirt ];
+
+  meta = with lib; {
+    homepage = "https://github.com/dhiltgen/docker-machine-kvm";
+    description = "KVM driver for docker-machine";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ offline ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/docker-machine/kvm2.nix b/nixpkgs/pkgs/applications/networking/cluster/docker-machine/kvm2.nix
new file mode 100644
index 000000000000..a35cfab16cd7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/docker-machine/kvm2.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoModule, minikube }:
+
+buildGoModule rec {
+  inherit (minikube) version src nativeBuildInputs buildInputs vendorHash doCheck;
+
+  pname = "docker-machine-kvm2";
+
+  postPatch = ''
+    sed -i '/GOARCH=$*/d' Makefile
+  '';
+
+  buildPhase = ''
+    make docker-machine-driver-kvm2 COMMIT=${src.rev}
+  '';
+
+  installPhase = ''
+    install out/docker-machine-driver-kvm2 -Dt $out/bin
+  '';
+
+  meta = with lib; {
+    homepage = "https://minikube.sigs.k8s.io/docs/drivers/kvm2";
+    description = "KVM2 driver for docker-machine";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ tadfisher atkinschang ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/docker-machine/xhyve.nix b/nixpkgs/pkgs/applications/networking/cluster/docker-machine/xhyve.nix
new file mode 100644
index 000000000000..4e75d66bee07
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/docker-machine/xhyve.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, buildGoPackage, fetchFromGitHub, fetchpatch, pkg-config, cctools, Hypervisor, vmnet }:
+
+buildGoPackage rec {
+  pname = "docker-machine-xhyve";
+  version = "0.4.0";
+
+  goPackagePath = "github.com/zchee/docker-machine-driver-xhyve";
+
+  # https://github.com/machine-drivers/docker-machine-driver-xhyve/pull/225
+  patches = fetchpatch {
+    url = "https://github.com/machine-drivers/docker-machine-driver-xhyve/commit/546256494bf2ccc33e4125bf45f504b0e3027d5a.patch";
+    sha256 = "1i8wxqccqkxvqrbsyd0g9s0kdskd8xi2jv0c1bji9aj4rq0a8cgz";
+  };
+
+  preBuild = ''
+    make -C go/src/${goPackagePath} CC=${stdenv.cc}/bin/cc LIBTOOL=${cctools}/bin/libtool GIT_CMD=: lib9p
+    export CGO_CFLAGS=-I$(pwd)/go/src/${goPackagePath}/vendor/github.com/jceel/lib9p
+    export CGO_LDFLAGS=$(pwd)/go/src/${goPackagePath}/vendor/build/lib9p/lib9p.a
+  '';
+  tags = [ "lib9p" ];
+
+  src = fetchFromGitHub {
+    rev    = "v${version}";
+    owner  = "machine-drivers";
+    repo   = "docker-machine-driver-xhyve";
+    sha256 = "0000v97fr8xc5b39v44hsa87wrbk4bcwyaaivxv4hxlf4vlgg863";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ Hypervisor vmnet ];
+
+  meta = with lib; {
+    homepage = "https://github.com/machine-drivers/docker-machine-driver-xhyve";
+    description = "Xhyve driver for docker-machine";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ periklis ];
+    platforms = platforms.darwin;
+    # never built on aarch64-darwin since first introduction in nixpkgs
+    broken = stdenv.isDarwin && stdenv.isAarch64;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/driftctl/default.nix b/nixpkgs/pkgs/applications/networking/cluster/driftctl/default.nix
new file mode 100644
index 000000000000..4104c40bf045
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/driftctl/default.nix
@@ -0,0 +1,56 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "driftctl";
+  version = "0.39.0";
+
+  src = fetchFromGitHub {
+    owner = "snyk";
+    repo = "driftctl";
+    rev = "v${version}";
+    sha256 = "sha256-1i5x05q0Mo3E3ExM9qONRtQCH3nO7pXyNqOaAtz7qYE=";
+  };
+
+  vendorHash = "sha256-H/+LORl7Bjy1NshjtWDzj13YCrlQQgtBr4+Rz/rxQkY=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/snyk/driftctl/pkg/version.version=v${version}"
+    "-X github.com/snyk/driftctl/build.env=release"
+    "-X github.com/snyk/driftctl/build.enableUsageReporting=false"
+  ];
+
+  postInstall = ''
+    installShellCompletion --cmd driftctl \
+      --bash <($out/bin/driftctl completion bash) \
+      --fish <($out/bin/driftctl completion fish) \
+      --zsh <($out/bin/driftctl completion zsh)
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+
+    $out/bin/driftctl --help
+    $out/bin/driftctl version | grep "v${version}"
+    # check there's no telemetry flag
+    $out/bin/driftctl --help | grep -vz "telemetry"
+
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    homepage = "https://driftctl.com/";
+    changelog = "https://github.com/snyk/driftctl/releases/tag/v${version}";
+    description = "Detect, track and alert on infrastructure drift";
+    longDescription = ''
+      driftctl is a free and open-source CLI that warns of infrastructure drift
+      and fills in the missing piece in your DevSecOps toolbox.
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ kaction jk qjoly ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/eks-node-viewer/default.nix b/nixpkgs/pkgs/applications/networking/cluster/eks-node-viewer/default.nix
new file mode 100644
index 000000000000..b4f9ce722e79
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/eks-node-viewer/default.nix
@@ -0,0 +1,37 @@
+{ lib, buildGoModule, fetchFromGitHub, testers, eks-node-viewer }:
+
+buildGoModule rec {
+  pname = "eks-node-viewer";
+  version = "0.4.3";
+
+  src = fetchFromGitHub {
+    owner = "awslabs";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-570wOLUtKKzDDLLDrAOPAnAUpZeAqrwKsQWoHCBjKKk=";
+  };
+
+  vendorHash = "sha256-kRRUaA/psQDmcM1ZhzdZE3eyw8DWZpesJVA2zVfORGk=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=main.builtBy=nixpkgs"
+    "-X=main.commit=${src.rev}"
+    "-X=main.version=${version}"
+  ];
+
+  passthru.tests = {
+    version = testers.testVersion {
+      package = eks-node-viewer;
+    };
+  };
+
+  meta = with lib; {
+    description = "Tool to visualize dynamic node usage within a cluster";
+    homepage = "https://github.com/awslabs/eks-node-viewer";
+    changelog = "https://github.com/awslabs/eks-node-viewer/releases/tag/${src.rev}";
+    license = licenses.asl20;
+    maintainers = [ maintainers.ivankovnatsky ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/falcoctl/default.nix b/nixpkgs/pkgs/applications/networking/cluster/falcoctl/default.nix
new file mode 100644
index 000000000000..1c582447fa8a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/falcoctl/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "falcoctl";
+  version = "0.5.1";
+
+  src = fetchFromGitHub {
+    owner = "falcosecurity";
+    repo = "falcoctl";
+    rev = "v${version}";
+    hash = "sha256-X4fZBTEbOIQbfmuxDODEkYW43ntVIkwFDULYq+ps+9s=";
+  };
+
+  vendorHash = "sha256-26EXoXMWK/zPX4M7kG3QRAb4aqtIWgSnSgXcxKUwfZk=";
+
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/falcosecurity/falcoctl/cmd/version.semVersion=${version}"
+  ];
+
+  meta = with lib; {
+    description = "Administrative tooling for Falco";
+    homepage = "https://github.com/falcosecurity/falcoctl";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ developer-guy kranurag7 LucaGuerra ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/fetchit/default.nix b/nixpkgs/pkgs/applications/networking/cluster/fetchit/default.nix
new file mode 100644
index 000000000000..cadc331a9605
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/fetchit/default.nix
@@ -0,0 +1,82 @@
+{ lib
+, stdenv
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, lvm2
+, pkg-config
+}:
+
+buildGoModule rec {
+  pname = "fetchit";
+  version = "0.0.1";
+
+  src = fetchFromGitHub {
+    owner = "containers";
+    repo = "fetchit";
+    rev = "v${version}";
+    sha256 = "sha256-hxS/+/fbYOpMJ5VfvvG5l7wWKBUUR22rYn9X79DzUUk=";
+  };
+
+  vendorHash = "sha256-SyPd8P9s8R2YbGEPqFeztF98W1QyGSBumtirSdpm8VI=";
+
+  subPackages = [ "cmd/fetchit" ];
+
+  nativeBuildInputs = [ pkg-config installShellFiles ];
+  buildInputs = [ lvm2 ];
+
+  # Flags are derived from
+  # https://github.com/containers/fetchit/blob/v0.0.1/Makefile#L20-L29
+  ldflags = [
+    "-X k8s.io/client-go/pkg/version.gitMajor=0"
+    "-X k8s.io/client-go/pkg/version.gitMinor=0"
+    "-X k8s.io/client-go/pkg/version.gitTreeState=clean"
+    "-X k8s.io/client-go/pkg/version.gitVersion=v0.0.0"
+    "-X k8s.io/component-base/version.gitMajor=0"
+    "-X k8s.io/component-base/version.gitMajor=0"
+    "-X k8s.io/component-base/version.gitMinor=0"
+    "-X k8s.io/component-base/version.gitTreeState=clean"
+    "-X k8s.io/component-base/version.gitVersion=v0.0.0"
+    "-s"
+    "-w"
+  ];
+
+  tags = [
+    "containers_image_openpgp"
+    "exclude_graphdriver_btrfs"
+    "gssapi"
+    "include_gcs"
+    "include_oss"
+    "netgo"
+    "osusergo"
+    "providerless"
+  ];
+
+  # There are no tests for cmd/fetchit.
+  doCheck = false;
+
+  postInstall = ''
+    for i in bash fish zsh; do
+      installShellCompletion --cmd fetchit \
+        --$i <($out/bin/fetchit completion $i)
+    done
+  '';
+
+  meta = with lib; {
+    description = "A tool to manage the life cycle and configuration of Podman containers";
+    longDescription = ''
+      FetchIt allows for a GitOps based approach to manage containers running on
+      a single host or multiple hosts based on a git repository. This allows for
+      us to deploy a new host and provide the host a configuration value for
+      FetchIt and automatically any containers defined in the git repository and
+      branch will be deployed onto the host. This can be beneficial for
+      environments that do not require the complexity of Kubernetes to manage
+      the containers running on the host.
+    '';
+    homepage = "https://fetchit.readthedocs.io";
+    changelog = "https://github.com/containers/fetchit/releases/tag/${src.rev}";
+    license = licenses.agpl3Plus;
+    maintainers = with maintainers; [ azahi ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/flink/default.nix b/nixpkgs/pkgs/applications/networking/cluster/flink/default.nix
new file mode 100644
index 000000000000..f0547dcf5609
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/flink/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchurl, makeWrapper, jre }:
+
+stdenv.mkDerivation rec {
+  pname = "flink";
+  version = "1.17.1";
+
+  src = fetchurl {
+    url = "mirror://apache/flink/${pname}-${version}/${pname}-${version}-bin-scala_2.12.tgz";
+    sha256 = "sha256-HpVDS3ydi2Z1SINAUed9lni9i8FCr0SI8yBCYP4wxyM=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildInputs = [ jre ];
+
+  installPhase = ''
+    rm bin/*.bat || true
+
+    mkdir -p $out/bin $out/opt/flink
+    mv * $out/opt/flink/
+    makeWrapper $out/opt/flink/bin/flink $out/bin/flink \
+      --prefix PATH : ${jre}/bin
+
+    cat <<EOF >> $out/opt/flink/conf/flink-conf.yaml
+    env.java.home: ${jre}"
+    env.log.dir: /tmp/flink-logs
+    EOF
+  '';
+
+  meta = with lib; {
+    description = "A distributed stream processing framework";
+    homepage = "https://flink.apache.org";
+    downloadPage = "https://flink.apache.org/downloads.html";
+    license = licenses.asl20;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ mbode autophagy ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/fluxcd/default.nix b/nixpkgs/pkgs/applications/networking/cluster/fluxcd/default.nix
new file mode 100644
index 000000000000..500bd2a752b9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/fluxcd/default.nix
@@ -0,0 +1,72 @@
+{ lib, buildGoModule, fetchFromGitHub, fetchzip, installShellFiles, stdenv }:
+
+let
+  version = "2.1.0";
+  sha256 = "08g9awlgij8privpmzmrg63aygcjqmycr981ak0lkbx5chynlnmn";
+  manifestsSha256 = "06iqmc5rg9l7zwcyg66fvy6h1g4bg1mr496n17piapjiqiv3j3q4";
+
+  manifests = fetchzip {
+    url =
+      "https://github.com/fluxcd/flux2/releases/download/v${version}/manifests.tar.gz";
+    sha256 = manifestsSha256;
+    stripRoot = false;
+  };
+
+in buildGoModule rec {
+  pname = "fluxcd";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "fluxcd";
+    repo = "flux2";
+    rev = "v${version}";
+    inherit sha256;
+  };
+
+  vendorHash = "sha256-RVHDiJS1MhskVorS/SNZlXWP/oc8OXjUjApeanBkIWQ=";
+
+  postUnpack = ''
+    cp -r ${manifests} source/cmd/flux/manifests
+
+    # disable tests that require network access
+    rm source/cmd/flux/create_secret_git_test.go
+  '';
+
+  ldflags = [ "-s" "-w" "-X main.VERSION=${version}" ];
+
+  subPackages = [ "cmd/flux" ];
+
+  # Required to workaround test error:
+  #   panic: mkdir /homeless-shelter: permission denied
+  HOME = "$TMPDIR";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/flux --version | grep ${version} > /dev/null
+  '';
+
+  postInstall = lib.optionalString (stdenv.hostPlatform == stdenv.buildPlatform) ''
+    for shell in bash fish zsh; do
+      $out/bin/flux completion $shell > flux.$shell
+      installShellCompletion flux.$shell
+    done
+  '';
+
+  passthru.updateScript = ./update.sh;
+
+  meta = with lib; {
+    description =
+      "Open and extensible continuous delivery solution for Kubernetes";
+    longDescription = ''
+      Flux is a tool for keeping Kubernetes clusters in sync
+      with sources of configuration (like Git repositories), and automating
+      updates to configuration when there is new code to deploy.
+    '';
+    homepage = "https://fluxcd.io";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ bryanasdev000 jlesquembre ];
+    mainProgram = "flux";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/fluxcd/update.sh b/nixpkgs/pkgs/applications/networking/cluster/fluxcd/update.sh
new file mode 100755
index 000000000000..8c80ef9fda34
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/fluxcd/update.sh
@@ -0,0 +1,47 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl gnugrep gnused jq
+
+set -x -eu -o pipefail
+
+NIXPKGS_PATH="$(git rev-parse --show-toplevel)"
+FLUXCD_PATH="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
+
+OLD_VERSION="$(nix-instantiate --eval -E "with import $NIXPKGS_PATH {}; fluxcd.version or (builtins.parseDrvName fluxcd.name).version" | tr -d '"')"
+LATEST_TAG=$(curl ${GITHUB_TOKEN:+" -u \":$GITHUB_TOKEN\""} --silent https://api.github.com/repos/fluxcd/flux2/releases/latest | jq -r '.tag_name')
+LATEST_VERSION=$(echo ${LATEST_TAG} | sed 's/^v//')
+
+if [ ! "$OLD_VERSION" = "$LATEST_VERSION" ]; then
+    SHA256=$(nix-prefetch-url --quiet --unpack https://github.com/fluxcd/flux2/archive/refs/tags/${LATEST_TAG}.tar.gz)
+    SPEC_SHA256=$(nix-prefetch-url --quiet --unpack https://github.com/fluxcd/flux2/releases/download/${LATEST_TAG}/manifests.tar.gz)
+
+    setKV () {
+        sed -i "s|$1 = \".*\"|$1 = \"${2:-}\"|" "${FLUXCD_PATH}/default.nix"
+    }
+
+    setKV version ${LATEST_VERSION}
+    setKV sha256 ${SHA256}
+    setKV manifestsSha256 ${SPEC_SHA256}
+    setKV vendorSha256 "0000000000000000000000000000000000000000000000000000" # The same as lib.fakeSha256
+
+    set +e
+    VENDOR_SHA256=$(nix-build --no-out-link -A fluxcd $NIXPKGS_PATH 2>&1 >/dev/null | grep "got:" | cut -d':' -f2 | sed 's| ||g')
+    set -e
+
+    if [ -n "${VENDOR_SHA256:-}" ]; then
+        setKV vendorSha256 ${VENDOR_SHA256}
+    else
+        echo "Update failed. VENDOR_SHA256 is empty."
+        exit 1
+    fi
+
+    # `git` flag here is to be used by local maintainers to speed up the bump process
+    if [ $# -eq 1 ] && [ "$1" = "git" ]; then
+        git switch -c "package-fluxcd-${LATEST_VERSION}"
+        git add "$FLUXCD_PATH"/default.nix
+        git commit -m "fluxcd: ${OLD_VERSION} -> ${LATEST_VERSION}
+
+Release: https://github.com/fluxcd/flux2/releases/tag/v${LATEST_VERSION}"
+    fi
+else
+    echo "fluxcd is already up-to-date at $OLD_VERSION"
+fi
diff --git a/nixpkgs/pkgs/applications/networking/cluster/fluxctl/default.nix b/nixpkgs/pkgs/applications/networking/cluster/fluxctl/default.nix
new file mode 100644
index 000000000000..589193446285
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/fluxctl/default.nix
@@ -0,0 +1,37 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "fluxctl";
+  version = "1.25.4";
+
+  src = fetchFromGitHub {
+    owner = "weaveworks";
+    repo = "flux";
+    rev = version;
+    sha256 = "sha256-rKZ0fI9UN4oq6gfDMNR2+kCazlDexE1+UVzQ3xgkSA8=";
+  };
+
+  vendorHash = "sha256-6Trk49Vo3oMjSaHRDm2v+elPDHwdn2D3Z6i4UYcx0IQ=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  doCheck = false;
+
+  subPackages = [ "cmd/fluxctl" ];
+
+  ldflags = [ "-s" "-w" "-X main.version=${version}" ];
+
+  postInstall = ''
+    for shell in bash fish zsh; do
+      $out/bin/fluxctl completion $shell > fluxctl.$shell
+      installShellCompletion fluxctl.$shell
+    done
+  '';
+
+  meta = with lib; {
+    description = "CLI client for Flux, the GitOps Kubernetes operator";
+    homepage = "https://github.com/fluxcd/flux";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ Gonzih Br1ght0ne ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/fn-cli/default.nix b/nixpkgs/pkgs/applications/networking/cluster/fn-cli/default.nix
new file mode 100644
index 000000000000..572c05e2a787
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/fn-cli/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, buildGoModule, fetchFromGitHub, docker }:
+
+buildGoModule rec {
+  pname = "fn";
+  version = "0.6.26";
+
+  src = fetchFromGitHub {
+    owner = "fnproject";
+    repo = "cli";
+    rev = version;
+    hash = "sha256-Tj64/8uYEy4qZISjmtpOGTMzgSkBB516/Dej6/biYRY=";
+  };
+
+  vendorHash = null;
+
+  subPackages = ["."];
+
+  buildInputs = [
+    docker
+  ];
+
+  preBuild = ''
+    export HOME=$TMPDIR
+  '';
+
+  postInstall = ''
+    mv $out/bin/cli $out/bin/fn
+  '';
+
+  meta = with lib; {
+    description = "Command-line tool for the fn project";
+    homepage = "https://fnproject.io";
+    license = licenses.asl20;
+    maintainers = [ maintainers.c4605 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/func/default.nix b/nixpkgs/pkgs/applications/networking/cluster/func/default.nix
new file mode 100644
index 000000000000..7145d1277c9b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/func/default.nix
@@ -0,0 +1,46 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles, testers, func }:
+
+buildGoModule rec {
+  pname = "func";
+  version = "1.10.0";
+
+  src = fetchFromGitHub {
+    owner = "knative";
+    repo = "func";
+    rev = "knative-v${version}";
+    hash = "sha256-x/SrRkgeLvjcd9LNgMGOf5TLU1GXpjY2Z2MyxrBZckc=";
+  };
+
+  vendorHash = null;
+
+  subPackages = [ "cmd/func" ];
+
+  ldflags = [
+    "-X main.vers=v${version}"
+    "-X main.date=19700101T000000Z"
+    "-X main.hash=${version}"
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+
+  postInstall = ''
+    installShellCompletion --cmd func \
+      --bash <($out/bin/func completion bash) \
+      --zsh <($out/bin/func completion zsh)
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = func;
+    command = "func version";
+    version = "v${version}";
+  };
+
+  meta = with lib; {
+    description = "The Knative client library and CLI for creating, building, and deploying Knative Functions";
+    homepage = "https://github.com/knative/func";
+    changelog = "https://github.com/knative/func/releases/tag/knative-v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ maxwell-lt ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/gatekeeper/default.nix b/nixpkgs/pkgs/applications/networking/cluster/gatekeeper/default.nix
new file mode 100644
index 000000000000..05fa118e2a07
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/gatekeeper/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "gatekeeper";
+  version = "3.13.0";
+
+  src = fetchFromGitHub {
+    owner = "open-policy-agent";
+    repo = "gatekeeper";
+    rev = "v${version}";
+    hash = "sha256-7ciI8KgkC1NRYP8bFW5RnZ2oLXaCuPHQBd2tvgQ+YO8=";
+  };
+
+  vendorHash = null;
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  subPackages = [ "cmd/gator" ];
+
+  postInstall = ''
+    installShellCompletion --cmd gator \
+      --bash <($out/bin/gator completion bash) \
+      --fish <($out/bin/gator completion fish) \
+      --zsh <($out/bin/gator completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "Policy Controller for Kubernetes";
+    homepage = "https://github.com/open-policy-agent/gatekeeper";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ SuperSandro2000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/glooctl/default.nix b/nixpkgs/pkgs/applications/networking/cluster/glooctl/default.nix
new file mode 100644
index 000000000000..be6cef66b1bc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/glooctl/default.nix
@@ -0,0 +1,36 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "glooctl";
+  version = "1.15.4";
+
+  src = fetchFromGitHub {
+    owner = "solo-io";
+    repo = "gloo";
+    rev = "v${version}";
+    hash = "sha256-dQvvWlfCCc9QZFdOryX0bvLVdoBlhVMeP8MqQAYKua4=";
+  };
+
+  subPackages = [ "projects/gloo/cli/cmd" ];
+  vendorHash = "sha256-FU8Siea+oH4xtSVwGk/dcivS6eNpIkWZiZqQ3EX9dwI=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    mv $out/bin/cmd $out/bin/glooctl
+
+    export HOME=$TMP
+    installShellCompletion --cmd glooctl \
+      --bash <($out/bin/glooctl completion bash) \
+      --zsh <($out/bin/glooctl completion zsh)
+  '';
+
+  ldflags = [ "-s" "-w" "-X github.com/solo-io/gloo/pkg/version.Version=${version}" ];
+
+  meta = with lib; {
+    description = "glooctl is the unified CLI for Gloo";
+    homepage = "https://docs.solo.io/gloo-edge/latest/reference/cli/glooctl/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ nelsonjeppesen ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/habitat/Cargo.lock b/nixpkgs/pkgs/applications/networking/cluster/habitat/Cargo.lock
new file mode 100644
index 000000000000..71c5ab204a70
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/habitat/Cargo.lock
@@ -0,0 +1,4675 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "actix-codec"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57a7559404a7f3573127aab53c08ce37a6c6a315c374a31070f3c91cd1b4a7fe"
+dependencies = [
+ "bitflags 1.3.2",
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "log 0.4.20",
+ "memchr",
+ "pin-project-lite",
+ "tokio",
+ "tokio-util 0.7.8",
+]
+
+[[package]]
+name = "actix-http"
+version = "3.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0070905b2c4a98d184c4e81025253cb192aa8a73827553f38e9410801ceb35bb"
+dependencies = [
+ "actix-codec",
+ "actix-rt",
+ "actix-service",
+ "actix-tls",
+ "actix-utils",
+ "ahash",
+ "base64 0.21.2",
+ "bitflags 1.3.2",
+ "bytes",
+ "bytestring",
+ "derive_more",
+ "encoding_rs",
+ "futures-core",
+ "h2",
+ "http",
+ "httparse",
+ "httpdate",
+ "itoa 1.0.1",
+ "language-tags",
+ "local-channel",
+ "mime",
+ "percent-encoding",
+ "pin-project-lite",
+ "rand 0.8.5",
+ "sha1",
+ "smallvec",
+ "tokio",
+ "tokio-util 0.7.8",
+ "tracing",
+]
+
+[[package]]
+name = "actix-macros"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "465a6172cf69b960917811022d8f29bc0b7fa1398bc4f78b3c466673db1213b6"
+dependencies = [
+ "quote",
+ "syn 1.0.104",
+]
+
+[[package]]
+name = "actix-router"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb60846b52c118f2f04a56cc90880a274271c489b2498623d58176f8ca21fa80"
+dependencies = [
+ "bytestring",
+ "firestorm",
+ "http",
+ "log 0.4.20",
+ "regex 1.7.3",
+ "serde",
+]
+
+[[package]]
+name = "actix-rt"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15265b6b8e2347670eb363c47fc8c75208b4a4994b27192f345fcbe707804f3e"
+dependencies = [
+ "actix-macros",
+ "futures-core",
+ "tokio",
+]
+
+[[package]]
+name = "actix-server"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0da34f8e659ea1b077bb4637948b815cd3768ad5a188fdcd74ff4d84240cd824"
+dependencies = [
+ "actix-rt",
+ "actix-service",
+ "actix-utils",
+ "futures-core",
+ "futures-util",
+ "mio 0.8.8",
+ "num_cpus",
+ "socket2 0.4.9",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "actix-service"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77f5f9d66a8730d0fae62c26f3424f5751e5518086628a40b7ab6fca4a705034"
+dependencies = [
+ "futures-core",
+ "paste",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "actix-tls"
+version = "3.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9fde0cf292f7cdc7f070803cb9a0d45c018441321a78b1042ffbbb81ec333297"
+dependencies = [
+ "actix-codec",
+ "actix-rt",
+ "actix-service",
+ "actix-utils",
+ "futures-core",
+ "log 0.4.20",
+ "pin-project-lite",
+ "tokio-rustls",
+ "tokio-util 0.7.8",
+ "webpki-roots",
+]
+
+[[package]]
+name = "actix-utils"
+version = "3.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e491cbaac2e7fc788dfff99ff48ef317e23b3cf63dbaf7aaab6418f40f92aa94"
+dependencies = [
+ "local-waker",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "actix-web"
+version = "4.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd3cb42f9566ab176e1ef0b8b3a896529062b4efc6be0123046095914c4c1c96"
+dependencies = [
+ "actix-codec",
+ "actix-http",
+ "actix-router",
+ "actix-rt",
+ "actix-server",
+ "actix-service",
+ "actix-tls",
+ "actix-utils",
+ "ahash",
+ "bytes",
+ "bytestring",
+ "cfg-if 1.0.0",
+ "derive_more",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "http",
+ "itoa 1.0.1",
+ "language-tags",
+ "log 0.4.20",
+ "mime",
+ "once_cell",
+ "pin-project-lite",
+ "regex 1.7.3",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "smallvec",
+ "socket2 0.4.9",
+ "time 0.3.11",
+ "url",
+]
+
+[[package]]
+name = "addr"
+version = "0.15.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a93b8a41dbe230ad5087cc721f8d41611de654542180586b315d9f4cf6b72bef"
+dependencies = [
+ "psl",
+ "psl-types",
+]
+
+[[package]]
+name = "addr2line"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e61f2b7f93d2c7d2b08263acaa4a363b3e276806c68af6134c44f523bf1aacd"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "ahash"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43bb833f0bf979d8475d38fbf09ed3b8a55e1885fe93ad3f93239fc6a4f17b98"
+dependencies = [
+ "getrandom 0.2.3",
+ "once_cell",
+ "version_check",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "0.6.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81ce3d38065e618af2d7b77e10c5ad9a069859b4be3c2250f674af3840d9c8a5"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "android-tzdata"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "ansi_term"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.75"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
+dependencies = [
+ "backtrace",
+]
+
+[[package]]
+name = "arc-swap"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c5d78ce20460b82d3fa150275ed9d55e21064fc7951177baacf86a145c4a4b1f"
+
+[[package]]
+name = "arrayref"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544"
+
+[[package]]
+name = "arrayvec"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6"
+
+[[package]]
+name = "async-trait"
+version = "0.1.73"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "backtrace"
+version = "0.3.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7a905d892734eea339e896738c14b9afce22b5318f64b951e70bf3844419b01"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if 1.0.0",
+ "libc",
+ "miniz_oxide 0.4.4",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base64"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+[[package]]
+name = "base64"
+version = "0.21.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d"
+
+[[package]]
+name = "bimap"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "230c5f1ca6a325a32553f8640d31ac9b49f2411e901e427570154868b46da4f7"
+
+[[package]]
+name = "bincode"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "bit-set"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1"
+dependencies = [
+ "bit-vec",
+]
+
+[[package]]
+name = "bit-vec"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635"
+
+[[package]]
+name = "blake2b_simd"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c2f0dc9a68c6317d884f97cc36cf5a3d20ba14ce404227df55e1af708ab04bc"
+dependencies = [
+ "arrayref",
+ "arrayvec",
+ "constant_time_eq",
+]
+
+[[package]]
+name = "block-buffer"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "block-buffer"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "broadcast"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb214f702da3cc6aa1666520f40ea66f506644db5e1065be4bbc972f7ec3750b"
+
+[[package]]
+name = "bumpalo"
+version = "3.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "bytes"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
+
+[[package]]
+name = "bytestring"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90706ba19e97b90786e19dc0d5e2abd80008d99d4c0c5d1ad0b5e72cec7c494d"
+dependencies = [
+ "bytes",
+]
+
+[[package]]
+name = "caps"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "190baaad529bcfbde9e1a19022c42781bdb6ff9de25721abdb8fd98c0807730b"
+dependencies = [
+ "libc",
+ "thiserror",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "cfg-if"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chrono"
+version = "0.4.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5"
+dependencies = [
+ "android-tzdata",
+ "iana-time-zone",
+ "js-sys",
+ "num-traits",
+ "serde",
+ "time 0.1.43",
+ "wasm-bindgen",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "clap"
+version = "2.33.1"
+source = "git+https://github.com/habitat-sh/clap.git?branch=v2-master#21690ba25d1ac5783f4fb413ff87e6d086d15b49"
+dependencies = [
+ "ansi_term",
+ "atty",
+ "bitflags 1.3.2",
+ "strsim",
+ "textwrap",
+ "unicode-width",
+ "vec_map",
+]
+
+[[package]]
+name = "codespan-reporting"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
+dependencies = [
+ "termcolor",
+ "unicode-width",
+]
+
+[[package]]
+name = "colosseum"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "370c83b49aedf022ee27942e8ae1d9de1cf40dc9653ee6550e4455d08f6406f9"
+
+[[package]]
+name = "configopt"
+version = "0.1.0"
+source = "git+https://github.com/habitat-sh/configopt.git#98e4041a9922d6ebb5e548c3241fb82c76c6a4c0"
+dependencies = [
+ "colosseum",
+ "configopt-derive",
+ "lazy_static 1.4.0",
+ "serde",
+ "structopt",
+ "toml 0.7.6",
+]
+
+[[package]]
+name = "configopt-derive"
+version = "0.1.0"
+source = "git+https://github.com/habitat-sh/configopt.git#98e4041a9922d6ebb5e548c3241fb82c76c6a4c0"
+dependencies = [
+ "heck 0.3.3",
+ "proc-macro2",
+ "proc_macro_roids",
+ "quote",
+ "syn 1.0.104",
+]
+
+[[package]]
+name = "constant_time_eq"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3ad85c1f65dc7b37604eb0e89748faf0b9653065f2a8ef69f96a687ec1e9279"
+
+[[package]]
+name = "convert_case"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
+
+[[package]]
+name = "core-foundation"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a89e2ae426ea83155dccf10c0fa6b1463ef6d5fcb44cee0b224a408fa640a62"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
+
+[[package]]
+name = "cpu-time"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e9e393a7668fe1fad3075085b86c781883000b4ede868f43627b34a87c8b7ded"
+dependencies = [
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "cpufeatures"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "66c99696f6c9dd7f35d486b9d04d7e6e202aa3e8c40d553f2fdf5e7e0c6a71ef"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b153fe7cbef478c567df0f972e02e6d736db11affe43dfc9c56a9374d1adfb87"
+dependencies = [
+ "crossbeam-utils 0.7.2",
+ "maybe-uninit",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+dependencies = [
+ "cfg-if 1.0.0",
+ "crossbeam-utils 0.8.15",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8"
+dependencies = [
+ "autocfg",
+ "cfg-if 0.1.10",
+ "lazy_static 1.4.0",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "crypto-mac"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714"
+dependencies = [
+ "generic-array",
+ "subtle",
+]
+
+[[package]]
+name = "ctrlc"
+version = "3.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a011bbe2c35ce9c1f143b7af6f94f29a167beb4cd1d29e6740ce836f723120e"
+dependencies = [
+ "nix",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "cxx"
+version = "1.0.92"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a140f260e6f3f79013b8bfc65e7ce630c9ab4388c6a89c71e07226f49487b72"
+dependencies = [
+ "cc",
+ "cxxbridge-flags",
+ "cxxbridge-macro",
+ "link-cplusplus",
+]
+
+[[package]]
+name = "cxx-build"
+version = "1.0.92"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da6383f459341ea689374bf0a42979739dc421874f112ff26f829b8040b8e613"
+dependencies = [
+ "cc",
+ "codespan-reporting",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "scratch",
+ "syn 1.0.104",
+]
+
+[[package]]
+name = "cxxbridge-flags"
+version = "1.0.92"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90201c1a650e95ccff1c8c0bb5a343213bdd317c6e600a93075bca2eff54ec97"
+
+[[package]]
+name = "cxxbridge-macro"
+version = "1.0.92"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b75aed41bb2e6367cae39e6326ef817a851db13c13e4f3263714ca3cfb8de56"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.104",
+]
+
+[[package]]
+name = "derivative"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.104",
+]
+
+[[package]]
+name = "derive_more"
+version = "0.99.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "40eebddd2156ce1bb37b20bbe5151340a31828b1f2d22ba4141f3531710e38df"
+dependencies = [
+ "convert_case",
+ "proc-macro2",
+ "quote",
+ "rustc_version 0.3.3",
+ "syn 1.0.104",
+]
+
+[[package]]
+name = "destructure_traitobject"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c877555693c14d2f84191cfd3ad8582790fc52b5e2274b40b59cf5f5cea25c7"
+
+[[package]]
+name = "digest"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506"
+dependencies = [
+ "block-buffer 0.10.2",
+ "crypto-common",
+]
+
+[[package]]
+name = "dirs"
+version = "5.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225"
+dependencies = [
+ "dirs-sys",
+]
+
+[[package]]
+name = "dirs-next"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
+dependencies = [
+ "cfg-if 1.0.0",
+ "dirs-sys-next",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c"
+dependencies = [
+ "libc",
+ "option-ext",
+ "redox_users",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "dirs-sys-next"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "dns-lookup"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f332aa79f9e9de741ac013237294ef42ce2e9c6394dc7d766725812f1238812"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "socket2 0.5.3",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "downcast-rs"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650"
+
+[[package]]
+name = "ed25519"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4620d40f6d2601794401d6dd95a5cf69b6c157852539470eeda433a99b3c0efc"
+dependencies = [
+ "signature",
+]
+
+[[package]]
+name = "either"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80df024fbc5ac80f87dfef0d9f5209a252f2a497f7f42944cff24d8253cac065"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "env"
+version = "0.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "876927d21ef1ae98001c8c35a1d8dfd682136914b23ef04276820fa6d43c3630"
+
+[[package]]
+name = "env_logger"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0"
+dependencies = [
+ "humantime",
+ "is-terminal",
+ "log 0.4.20",
+ "regex 1.7.3",
+ "termcolor",
+]
+
+[[package]]
+name = "env_proxy"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a5019be18538406a43b5419a5501461f0c8b49ea7dfda0cfc32f4e51fc44be1"
+dependencies = [
+ "log 0.4.20",
+ "url",
+]
+
+[[package]]
+name = "equivalent"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88bffebc5d80432c9b140ee17875ff173a8ab62faad5b257da912bd2f6c1c0a1"
+
+[[package]]
+name = "erased-serde"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f2b0c2380453a92ea8b6c8e5f64ecaafccddde8ceab55ff7a8ac1029f894569"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "errno"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "errno"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b30f669a7961ef1631673d2766cc92f52d64f7ef354d4fe0ddfd30ed52f0f4f"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14ca354e36190500e1e1fb267c647932382b54053c50b14970856c0b00a35067"
+dependencies = [
+ "gcc",
+ "libc",
+]
+
+[[package]]
+name = "error-chain"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9435d864e017c3c6afeac1654189b06cdb491cf2ff73dbf0d73b0f292f42ff8"
+
+[[package]]
+name = "fancy-regex"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b95f7c0680e4142284cf8b22c14a476e87d61b004a3a0861872b32ef7ead40a2"
+dependencies = [
+ "bit-set",
+ "regex 1.7.3",
+]
+
+[[package]]
+name = "fastrand"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764"
+
+[[package]]
+name = "field-offset"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e1c54951450cbd39f3dbcf1005ac413b49487dabf18a720ad2383eccfeffb92"
+dependencies = [
+ "memoffset 0.6.4",
+ "rustc_version 0.3.3",
+]
+
+[[package]]
+name = "filetime"
+version = "0.2.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4029edd3e734da6fe05b6cd7bd2960760a616bd2ddd0d59a0124746d6272af0"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "redox_syscall 0.3.5",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "firestorm"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c5f6c2c942da57e2aaaa84b8a521489486f14e75e7fa91dab70aba913975f98"
+
+[[package]]
+name = "fixedbitset"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "398ea4fabe40b9b0d885340a2a991a44c8a645624075ad966d21f88688e2b69e"
+
+[[package]]
+name = "flate2"
+version = "1.0.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c6c98ee8095e9d1dcbf2fcc6d95acccb90d1c81db1e44725c6a984b1dbdfb010"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide 0.7.1",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "fs2"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213"
+dependencies = [
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "fsevent-sys"
+version = "4.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "fuchsia-zircon"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82"
+dependencies = [
+ "bitflags 1.3.2",
+ "fuchsia-zircon-sys",
+]
+
+[[package]]
+name = "fuchsia-zircon-sys"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
+
+[[package]]
+name = "futures"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
+
+[[package]]
+name = "futures-macro"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
+
+[[package]]
+name = "futures-task"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
+
+[[package]]
+name = "futures-util"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "gcc"
+version = "0.3.55"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2"
+
+[[package]]
+name = "generator"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1d9279ca822891c1a4dae06d185612cf8fc6acfe5dff37781b41297811b12ee"
+dependencies = [
+ "cc",
+ "libc",
+ "log 0.4.20",
+ "rustversion",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "wasi 0.9.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "wasi 0.10.2+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "gimli"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0a01e0497841a3b2db4f8afa483cce65f7e96a3498bd6c541734792aeac8fe7"
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "h2"
+version = "0.3.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d357c7ae988e7d2182f7d7871d0b963962420b0678b0997ce7de72001aeab782"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap 1.9.2",
+ "slab",
+ "tokio",
+ "tokio-util 0.7.8",
+ "tracing",
+]
+
+[[package]]
+name = "hab"
+version = "0.0.0"
+dependencies = [
+ "anyhow",
+ "atty",
+ "base64 0.21.2",
+ "bitflags 2.4.0",
+ "chrono",
+ "clap",
+ "configopt",
+ "ctrlc",
+ "dirs",
+ "env_logger",
+ "flate2",
+ "futures",
+ "glob",
+ "habitat-sup-client",
+ "habitat-sup-protocol",
+ "habitat_api_client",
+ "habitat_common",
+ "habitat_core",
+ "handlebars 0.29.1",
+ "lazy_static 1.4.0",
+ "libc",
+ "log 0.4.20",
+ "pbr",
+ "rants",
+ "reqwest",
+ "retry",
+ "rustls",
+ "same-file",
+ "serde",
+ "serde_json",
+ "serde_yaml 0.9.25",
+ "structopt",
+ "tabwriter",
+ "tar",
+ "tempfile",
+ "termcolor",
+ "thiserror",
+ "tokio",
+ "toml 0.7.6",
+ "url",
+ "uuid 1.2.2",
+ "walkdir",
+ "webpki",
+ "widestring 1.0.2",
+ "winapi 0.3.9",
+ "winreg 0.51.0",
+]
+
+[[package]]
+name = "habitat-launcher"
+version = "0.0.0"
+dependencies = [
+ "anyhow",
+ "env_logger",
+ "habitat-launcher-protocol",
+ "habitat_common",
+ "habitat_core",
+ "ipc-channel",
+ "libc",
+ "log 0.4.20",
+ "nix",
+ "prost",
+ "semver 1.0.18",
+ "thiserror",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "habitat-launcher-client"
+version = "0.0.0"
+dependencies = [
+ "bincode",
+ "env_logger",
+ "habitat-launcher-protocol",
+ "habitat_common",
+ "habitat_core",
+ "ipc-channel",
+ "libc",
+ "log 0.4.20",
+ "prost",
+ "serde",
+ "thiserror",
+]
+
+[[package]]
+name = "habitat-launcher-protocol"
+version = "0.0.0"
+dependencies = [
+ "bytes",
+ "prost",
+ "prost-build",
+ "serde",
+]
+
+[[package]]
+name = "habitat-rst-reader"
+version = "0.0.0"
+dependencies = [
+ "clap",
+ "env_logger",
+ "habitat_butterfly",
+ "log 0.4.20",
+]
+
+[[package]]
+name = "habitat-sup-client"
+version = "0.0.0"
+dependencies = [
+ "futures",
+ "habitat-sup-protocol",
+ "habitat_common",
+ "habitat_core",
+ "log 0.4.20",
+ "prost",
+ "rustls",
+ "termcolor",
+ "tokio",
+ "tokio-util 0.7.8",
+]
+
+[[package]]
+name = "habitat-sup-protocol"
+version = "0.0.0"
+dependencies = [
+ "base64 0.21.2",
+ "bytes",
+ "habitat_core",
+ "lazy_static 1.4.0",
+ "log 0.4.20",
+ "prost",
+ "prost-build",
+ "rand 0.8.5",
+ "serde",
+ "tempfile",
+ "tokio",
+ "tokio-util 0.7.8",
+ "toml 0.7.6",
+]
+
+[[package]]
+name = "habitat_api_client"
+version = "0.0.0"
+dependencies = [
+ "broadcast",
+ "bytes",
+ "chrono",
+ "env",
+ "futures",
+ "habitat_core",
+ "habitat_http_client",
+ "log 0.4.20",
+ "pbr",
+ "percent-encoding",
+ "rand 0.8.5",
+ "regex 1.7.3",
+ "reqwest",
+ "serde",
+ "serde_json",
+ "tee",
+ "tokio",
+ "tokio-util 0.7.8",
+ "url",
+]
+
+[[package]]
+name = "habitat_butterfly"
+version = "0.1.0"
+dependencies = [
+ "byteorder",
+ "bytes",
+ "env_logger",
+ "habitat_common",
+ "habitat_core",
+ "lazy_static 1.4.0",
+ "log 0.4.20",
+ "mktemp",
+ "parking_lot",
+ "prometheus",
+ "prost",
+ "prost-build",
+ "rand 0.8.5",
+ "serde",
+ "serde_json",
+ "tempfile",
+ "threadpool",
+ "toml 0.7.6",
+ "uuid 1.2.2",
+ "winapi 0.3.9",
+ "zmq",
+]
+
+[[package]]
+name = "habitat_common"
+version = "0.0.0"
+dependencies = [
+ "async-trait",
+ "bimap",
+ "bitflags 2.4.0",
+ "clap",
+ "dirs",
+ "glob",
+ "habitat_api_client",
+ "habitat_core",
+ "handlebars 0.28.3",
+ "lazy_static 1.4.0",
+ "libc",
+ "log 0.4.20",
+ "native-tls",
+ "nix",
+ "owning_ref",
+ "parking_lot",
+ "pbr",
+ "petgraph",
+ "regex 1.7.3",
+ "reqwest",
+ "retry",
+ "rustls",
+ "serde",
+ "serde-transcode",
+ "serde_json",
+ "serde_yaml 0.9.25",
+ "tempfile",
+ "termcolor",
+ "thiserror",
+ "tokio",
+ "toml 0.7.6",
+ "uuid 1.2.2",
+ "valico",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "habitat_core"
+version = "0.0.0"
+dependencies = [
+ "base64 0.21.2",
+ "blake2b_simd",
+ "caps",
+ "cc",
+ "chrono",
+ "ctrlc",
+ "dirs",
+ "dns-lookup",
+ "errno 0.3.2",
+ "glob",
+ "habitat_win_users",
+ "hex",
+ "lazy_static 1.4.0",
+ "libc",
+ "log 0.4.20",
+ "native-tls",
+ "nix",
+ "num_cpus",
+ "os_info",
+ "paste",
+ "pem 3.0.1",
+ "pin-project",
+ "rand 0.8.5",
+ "rcgen",
+ "regex 1.7.3",
+ "reqwest",
+ "rustls",
+ "rustls-pemfile",
+ "serde",
+ "serde_json",
+ "serde_test",
+ "sodiumoxide",
+ "tabwriter",
+ "tar",
+ "tempfile",
+ "thiserror",
+ "tokio",
+ "tokio-rustls",
+ "toml 0.7.6",
+ "url",
+ "webpki",
+ "widestring 1.0.2",
+ "winapi 0.3.9",
+ "windows-acl",
+ "xz2",
+]
+
+[[package]]
+name = "habitat_http_client"
+version = "0.0.0"
+dependencies = [
+ "base64 0.21.2",
+ "env_proxy",
+ "habitat_core",
+ "httparse",
+ "log 0.4.20",
+ "native-tls",
+ "pem 3.0.1",
+ "reqwest",
+ "serde",
+ "serde_json",
+ "tempfile",
+ "url",
+]
+
+[[package]]
+name = "habitat_pkg_export_container"
+version = "0.0.0"
+dependencies = [
+ "anyhow",
+ "base64 0.21.2",
+ "clap",
+ "env_logger",
+ "hab",
+ "habitat_common",
+ "habitat_core",
+ "handlebars 0.29.1",
+ "lazy_static 1.4.0",
+ "linked-hash-map",
+ "log 0.4.20",
+ "rusoto_core",
+ "rusoto_credential",
+ "rusoto_ecr",
+ "serde",
+ "serde_json",
+ "tempfile",
+ "termcolor",
+ "thiserror",
+ "tokio",
+ "url",
+]
+
+[[package]]
+name = "habitat_pkg_export_tar"
+version = "0.0.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "env_logger",
+ "flate2",
+ "habitat_common",
+ "habitat_core",
+ "handlebars 0.29.1",
+ "lazy_static 1.4.0",
+ "log 0.4.20",
+ "mktemp",
+ "serde",
+ "serde_json",
+ "tar",
+ "tempfile",
+ "thiserror",
+ "tokio",
+ "url",
+]
+
+[[package]]
+name = "habitat_sup"
+version = "0.0.0"
+dependencies = [
+ "actix-rt",
+ "actix-web",
+ "anyhow",
+ "byteorder",
+ "bytes",
+ "caps",
+ "clap",
+ "configopt",
+ "cpu-time",
+ "ctrlc",
+ "derivative",
+ "fs2",
+ "futures",
+ "glob",
+ "hab",
+ "habitat-launcher-client",
+ "habitat-launcher-protocol",
+ "habitat-sup-protocol",
+ "habitat_api_client",
+ "habitat_butterfly",
+ "habitat_common",
+ "habitat_core",
+ "habitat_http_client",
+ "hyper",
+ "lazy_static 1.4.0",
+ "libc",
+ "log 0.4.20",
+ "log4rs",
+ "mio 0.8.8",
+ "multimap 0.9.0",
+ "nix",
+ "notify",
+ "num_cpus",
+ "parking_lot",
+ "pin-project",
+ "prometheus",
+ "prost",
+ "prost-build",
+ "prost-types",
+ "rand 0.8.5",
+ "rants",
+ "regex 1.7.3",
+ "reqwest",
+ "rustls",
+ "rustls-pemfile",
+ "serde",
+ "serde-transcode",
+ "serde_derive",
+ "serde_json",
+ "serde_yaml 0.9.25",
+ "state",
+ "structopt",
+ "tempfile",
+ "termcolor",
+ "thiserror",
+ "tokio",
+ "tokio-rustls",
+ "tokio-util 0.7.8",
+ "toml 0.7.6",
+ "url",
+ "uuid 1.2.2",
+ "valico",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "habitat_win_users"
+version = "0.0.0"
+dependencies = [
+ "cc",
+ "log 0.4.20",
+ "widestring 1.0.2",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "handlebars"
+version = "0.28.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bed53dfb11098ec893ed54aa8b9828ffb98d28acbe56a49419935e5a8688ca9"
+dependencies = [
+ "lazy_static 0.2.11",
+ "log 0.3.9",
+ "pest 0.3.3",
+ "quick-error",
+ "regex 0.2.11",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "handlebars"
+version = "0.29.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb04af2006ea09d985fef82b81e0eb25337e51b691c76403332378a53d521edc"
+dependencies = [
+ "lazy_static 0.2.11",
+ "log 0.3.9",
+ "pest 0.3.3",
+ "quick-error",
+ "regex 0.2.11",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+dependencies = [
+ "ahash",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a"
+
+[[package]]
+name = "heck"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "heck"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b"
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
+name = "hmac"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b"
+dependencies = [
+ "crypto-mac",
+ "digest 0.9.0",
+]
+
+[[package]]
+name = "http"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa 1.0.1",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "399c583b2979440c60be0821a6199eca73bc3c8dcd9d070d75ac726e2c6186e5"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6456b8a6c8f33fee7d958fcd1b60d55b11940a79e63ae87013e6d22e26034440"
+
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[package]]
+name = "hyper"
+version = "0.14.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa 1.0.1",
+ "pin-project-lite",
+ "socket2 0.4.9",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-tls"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
+dependencies = [
+ "bytes",
+ "hyper",
+ "native-tls",
+ "tokio",
+ "tokio-native-tls",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.53"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca"
+dependencies = [
+ "cxx",
+ "cxx-build",
+]
+
+[[package]]
+name = "idna"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399"
+dependencies = [
+ "autocfg",
+ "hashbrown 0.12.3",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d"
+dependencies = [
+ "equivalent",
+ "hashbrown 0.14.0",
+]
+
+[[package]]
+name = "inotify"
+version = "0.9.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff"
+dependencies = [
+ "bitflags 1.3.2",
+ "inotify-sys",
+ "libc",
+]
+
+[[package]]
+name = "inotify-sys"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
+dependencies = [
+ "hermit-abi 0.3.2",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "iovec"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "ipc-channel"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad9b32d360ae2d4662212f1d29bc8a277256f49029cea20fd6c182b89819aea7"
+dependencies = [
+ "bincode",
+ "crossbeam-channel 0.4.4",
+ "fnv",
+ "lazy_static 1.4.0",
+ "libc",
+ "mio 0.6.23",
+ "rand 0.7.3",
+ "serde",
+ "tempfile",
+ "uuid 0.8.2",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68f2d64f2edebec4ce84ad108148e67e1064789bee435edc5b60ad398714a3a9"
+
+[[package]]
+name = "is-terminal"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21b6b32576413a8e69b90e952e4a026476040d81017b80445deda5f2d3921857"
+dependencies = [
+ "hermit-abi 0.3.2",
+ "io-lifetimes",
+ "rustix 0.36.8",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "itertools"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69ddb889f9d0d08a67338271fa9b62996bc788c7796a5c18cf057420aaed5eaf"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736"
+
+[[package]]
+name = "itoa"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35"
+
+[[package]]
+name = "js-sys"
+version = "0.3.52"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce791b7ca6638aae45be056e068fc756d871eb3b3b10b8efa62d1c9cec616752"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "json-pointer"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fe841b94e719a482213cee19dd04927cf412f26d8dc84c5a446c081e49c2997"
+dependencies = [
+ "serde_json",
+]
+
+[[package]]
+name = "jsonway"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "effcb749443c905fbaef49d214f8b1049c240e0adb7af9baa0e201e625e4f9de"
+dependencies = [
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "kernel32-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
+dependencies = [
+ "winapi 0.2.8",
+ "winapi-build",
+]
+
+[[package]]
+name = "kqueue"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c8fc60ba15bf51257aa9807a48a61013db043fcf3a78cb0d916e8e396dcad98"
+dependencies = [
+ "kqueue-sys",
+ "libc",
+]
+
+[[package]]
+name = "kqueue-sys"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8367585489f01bc55dd27404dcf56b95e6da061a256a666ab23be9ba96a2e587"
+dependencies = [
+ "bitflags 1.3.2",
+ "libc",
+]
+
+[[package]]
+name = "language-tags"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388"
+
+[[package]]
+name = "lazy_static"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73"
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libc"
+version = "0.2.147"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
+
+[[package]]
+name = "libsodium-sys"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b779387cd56adfbc02ea4a668e704f729be8d6a6abd2c27ca5ee537849a92fd"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "walkdir",
+]
+
+[[package]]
+name = "link-cplusplus"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "linked-hash-map"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09fc20d2ca12cb9f044c93e3bd6d32d523e6e2ec3db4f7b2939cd99026ecd3f0"
+
+[[package]]
+name = "local-channel"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6246c68cf195087205a0512559c97e15eaf95198bf0e206d662092cdcb03fe9f"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "local-waker",
+]
+
+[[package]]
+name = "local-waker"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "84f9a2d3e27ce99ce2c3aad0b09b1a7b916293ea9b2bf624c13fe646fadd8da4"
+
+[[package]]
+name = "lock_api"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88943dd7ef4a2e5a4bfa2753aaab3013e34ce2533d1996fb18ef591e315e2b3b"
+dependencies = [
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b"
+dependencies = [
+ "log 0.4.20",
+]
+
+[[package]]
+name = "log"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "log-mdc"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a94d21414c1f4a51209ad204c1776a3d0765002c76c6abcb602a6f09f1e881c7"
+
+[[package]]
+name = "log4rs"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d36ca1786d9e79b8193a68d480a0907b612f109537115c6ff655a3a1967533fd"
+dependencies = [
+ "anyhow",
+ "arc-swap",
+ "chrono",
+ "derivative",
+ "fnv",
+ "humantime",
+ "libc",
+ "log 0.4.20",
+ "log-mdc",
+ "parking_lot",
+ "serde",
+ "serde-value",
+ "serde_json",
+ "serde_yaml 0.8.26",
+ "thiserror",
+ "thread-id",
+ "typemap-ors",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "loom"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2111607c723d7857e0d8299d5ce7a0bf4b844d3e44f8de136b13da513eaf8fc4"
+dependencies = [
+ "cfg-if 1.0.0",
+ "generator",
+ "scoped-tls",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "lzma-sys"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e06754c4acf47d49c727d5665ca9fb828851cda315ed3bd51edd148ef78a8772"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "maybe-uninit"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00"
+
+[[package]]
+name = "md-5"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b5a279bb9607f9f53c22d496eade00d138d1bdcccd07d74650387cf94942a15"
+dependencies = [
+ "block-buffer 0.9.0",
+ "digest 0.9.0",
+ "opaque-debug",
+]
+
+[[package]]
+name = "memchr"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b16bd47d9e329435e309c58469fe0791c2d0d1ba96ec0954152a5ae2b04387dc"
+
+[[package]]
+name = "memoffset"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59accc507f1338036a0477ef61afdae33cde60840f4dfe481319ce3ad116ddf9"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "metadeps"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73b122901b3a675fac8cecf68dcb2f0d3036193bc861d1ac0e1c337f7d5254c2"
+dependencies = [
+ "error-chain",
+ "pkg-config",
+ "toml 0.2.1",
+]
+
+[[package]]
+name = "mime"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b"
+dependencies = [
+ "adler",
+ "autocfg",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.6.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4"
+dependencies = [
+ "cfg-if 0.1.10",
+ "fuchsia-zircon",
+ "fuchsia-zircon-sys",
+ "iovec",
+ "kernel32-sys",
+ "libc",
+ "log 0.4.20",
+ "miow",
+ "net2",
+ "slab",
+ "winapi 0.2.8",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2"
+dependencies = [
+ "libc",
+ "log 0.4.20",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "miow"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d"
+dependencies = [
+ "kernel32-sys",
+ "net2",
+ "winapi 0.2.8",
+ "ws2_32-sys",
+]
+
+[[package]]
+name = "mktemp"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bdc1f74dd7bb717d39f784f844e490d935b3aa7e383008006dbbf29c1f7820a"
+dependencies = [
+ "uuid 1.2.2",
+]
+
+[[package]]
+name = "multimap"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a"
+
+[[package]]
+name = "multimap"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70db9248a93dc36a36d9a47898caa007a32755c7ad140ec64eeeb50d5a730631"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "native-tls"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
+dependencies = [
+ "lazy_static 1.4.0",
+ "libc",
+ "log 0.4.20",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
+]
+
+[[package]]
+name = "net2"
+version = "0.2.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "391630d12b68002ae1e25e8f974306474966550ad82dac6886fb8910c19568ae"
+dependencies = [
+ "cfg-if 0.1.10",
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "nix"
+version = "0.26.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if 1.0.0",
+ "libc",
+ "memoffset 0.7.1",
+ "pin-utils",
+ "static_assertions",
+]
+
+[[package]]
+name = "nom"
+version = "7.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "notify"
+version = "6.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6205bd8bb1e454ad2e27422015fb5e4f2bcc7e08fa8f27058670d208324a4d2d"
+dependencies = [
+ "bitflags 2.4.0",
+ "crossbeam-channel 0.5.8",
+ "filetime",
+ "fsevent-sys",
+ "inotify",
+ "kqueue",
+ "libc",
+ "log 0.4.20",
+ "mio 0.8.8",
+ "walkdir",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
+dependencies = [
+ "hermit-abi 0.3.2",
+ "libc",
+]
+
+[[package]]
+name = "num_threads"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "object"
+version = "0.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c55827317fb4c08822499848a14237d2874d6f139828893017237e7ab93eb386"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1"
+
+[[package]]
+name = "opaque-debug"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
+
+[[package]]
+name = "openssl"
+version = "0.10.55"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "345df152bc43501c5eb9e4654ff05f794effb78d4efe3d53abc158baddc0703d"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if 1.0.0",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.104",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a"
+
+[[package]]
+name = "openssl-src"
+version = "111.25.0+1.1.1t"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3173cd3626c43e3854b1b727422a276e568d9ec5fe8cec197822cf52cfb743d6"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.90"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "374533b0e45f3a7ced10fcaeccca020e66656bc03dac384f852e4e5a7a8104a6"
+dependencies = [
+ "cc",
+ "libc",
+ "openssl-src",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "option-ext"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
+
+[[package]]
+name = "ordered-float"
+version = "2.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "039f02eb0f69271f26abe3202189275d7aa2258b903cb0281b5de710a2570ff3"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "os_info"
+version = "3.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "006e42d5b888366f1880eda20371fedde764ed2213dc8496f49622fa0c99cd5e"
+dependencies = [
+ "log 0.4.20",
+ "serde",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "owning_ref"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ff55baddef9e4ad00f88b6c743a2a8062d4c6ade126c2a528644b8e444d52ce"
+dependencies = [
+ "stable_deref_trait",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "995f667a6c822200b0433ac218e05582f0e2efa1b922a3fd2fbaadc5f87bab37"
+dependencies = [
+ "backtrace",
+ "cfg-if 1.0.0",
+ "libc",
+ "petgraph",
+ "redox_syscall 0.2.10",
+ "smallvec",
+ "thread-id",
+ "windows-sys 0.34.0",
+]
+
+[[package]]
+name = "paste"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c"
+
+[[package]]
+name = "pbr"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed5827dfa0d69b6c92493d6c38e633bbaa5937c153d0d7c28bf12313f8c6d514"
+dependencies = [
+ "crossbeam-channel 0.5.8",
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "pem"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b13fe415cdf3c8e44518e18a7c95a13431d9bdf6d15367d82b23c377fdd441a"
+dependencies = [
+ "base64 0.21.2",
+ "serde",
+]
+
+[[package]]
+name = "pem"
+version = "3.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed3127afbfc30b4cad60c34aeb741fb562a808642b81142bcf4afb73142da960"
+dependencies = [
+ "base64 0.21.2",
+ "serde",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
+
+[[package]]
+name = "pest"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a6dda33d67c26f0aac90d324ab2eb7239c819fc7b2552fe9faa4fe88441edc8"
+
+[[package]]
+name = "pest"
+version = "2.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53"
+dependencies = [
+ "ucd-trie",
+]
+
+[[package]]
+name = "petgraph"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9"
+dependencies = [
+ "fixedbitset",
+ "indexmap 2.0.0",
+]
+
+[[package]]
+name = "phf"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "928c6535de93548188ef63bb7c4036bd415cd8f36ad25af44b9789b2ee72a48c"
+dependencies = [
+ "phf_shared",
+]
+
+[[package]]
+name = "phf_codegen"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a56ac890c5e3ca598bbdeaa99964edb5b0258a583a9eb6ef4e89fc85d9224770"
+dependencies = [
+ "phf_generator",
+ "phf_shared",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1181c94580fa345f50f19d738aaa39c0ed30a600d95cb2d3e23f94266f14fbf"
+dependencies = [
+ "phf_shared",
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1fb5f6f826b772a8d4c0394209441e7d37cbbb967ae9c7e0e8134365c9ee676"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "pin-project"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12cc1b0bf1727a77a54b6654e7b5f1af8604923edc8b81885f8ec92f9e3f0a05"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857"
+
+[[package]]
+name = "prettyplease"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e97e3215779627f01ee256d2fad52f3d95e8e1c11e9fc6fd08f7cd455d5d5c78"
+dependencies = [
+ "proc-macro2",
+ "syn 1.0.104",
+]
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.104",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.63"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b368fba921b0dce7e60f5e04ec15e565b3303972b42bcfde1d0713b881959eb"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "proc_macro_roids"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06675fa2c577f52bcf77fbb511123927547d154faa08097cc012c66ec3c9611a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.104",
+]
+
+[[package]]
+name = "prometheus"
+version = "0.13.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "449811d15fbdf5ceb5c1144416066429cf82316e2ec8ce0c1f6f8a02e7bbcf8c"
+dependencies = [
+ "cfg-if 1.0.0",
+ "fnv",
+ "lazy_static 1.4.0",
+ "memchr",
+ "parking_lot",
+ "protobuf",
+ "thiserror",
+]
+
+[[package]]
+name = "prost"
+version = "0.11.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd"
+dependencies = [
+ "bytes",
+ "prost-derive",
+]
+
+[[package]]
+name = "prost-build"
+version = "0.11.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270"
+dependencies = [
+ "bytes",
+ "heck 0.4.0",
+ "itertools",
+ "lazy_static 1.4.0",
+ "log 0.4.20",
+ "multimap 0.8.3",
+ "petgraph",
+ "prettyplease",
+ "prost",
+ "prost-types",
+ "regex 1.7.3",
+ "syn 1.0.104",
+ "tempfile",
+ "which",
+]
+
+[[package]]
+name = "prost-derive"
+version = "0.11.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4"
+dependencies = [
+ "anyhow",
+ "itertools",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.104",
+]
+
+[[package]]
+name = "prost-types"
+version = "0.11.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13"
+dependencies = [
+ "prost",
+]
+
+[[package]]
+name = "protobuf"
+version = "2.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "020f86b07722c5c4291f7c723eac4676b3892d47d9a7708dc2779696407f039b"
+
+[[package]]
+name = "psl"
+version = "2.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ac31add97d7c393248c273c9f862bcfd396e870db1ff5dec63e0e707db82ae4"
+dependencies = [
+ "psl-types",
+]
+
+[[package]]
+name = "psl-types"
+version = "2.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac"
+
+[[package]]
+name = "quick-error"
+version = "1.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
+
+[[package]]
+name = "quote"
+version = "1.0.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "573015e8ab27661678357f27dc26460738fd2b6c86e46f386fde94cb5d913105"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
+dependencies = [
+ "getrandom 0.1.16",
+ "libc",
+ "rand_chacha 0.2.2",
+ "rand_core 0.5.1",
+ "rand_hc",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha 0.3.1",
+ "rand_core 0.6.3",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.6.3",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
+dependencies = [
+ "getrandom 0.1.16",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
+dependencies = [
+ "getrandom 0.2.3",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
+dependencies = [
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rants"
+version = "0.6.0"
+source = "git+https://github.com/habitat-sh/rants.git#7fd1434ecaaf9af743ccab1840034f5d71329935"
+dependencies = [
+ "bytes",
+ "futures",
+ "log 0.4.20",
+ "native-tls",
+ "nom",
+ "owning_ref",
+ "pin-project",
+ "rand 0.8.5",
+ "serde",
+ "serde_json",
+ "tokio",
+ "tokio-native-tls",
+ "tokio-stream",
+ "tokio-util 0.7.8",
+ "uuid 1.2.2",
+]
+
+[[package]]
+name = "rcgen"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4954fbc00dcd4d8282c987710e50ba513d351400dbdd00e803a05172a90d8976"
+dependencies = [
+ "pem 2.0.1",
+ "ring",
+ "time 0.3.11",
+ "yasna",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64"
+dependencies = [
+ "getrandom 0.2.3",
+ "redox_syscall 0.2.10",
+]
+
+[[package]]
+name = "regex"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9329abc99e39129fcceabd24cf5d85b4671ef7c29c50e972bc5afe32438ec384"
+dependencies = [
+ "aho-corasick 0.6.10",
+ "memchr",
+ "regex-syntax 0.5.6",
+ "thread_local",
+ "utf8-ranges",
+]
+
+[[package]]
+name = "regex"
+version = "1.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b1f693b24f6ac912f4893ef08244d70b6067480d2f1a46e950c9691e6749d1d"
+dependencies = [
+ "aho-corasick 0.7.18",
+ "memchr",
+ "regex-syntax 0.6.29",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d707a4fa2637f2dca2ef9fd02225ec7661fe01a53623c1e6515b6916511f7a7"
+dependencies = [
+ "ucd-util",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
+
+[[package]]
+name = "reqwest"
+version = "0.11.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87f242f1488a539a79bac6dbe7c8609ae43b7914b7736210f239a37cccb32525"
+dependencies = [
+ "base64 0.13.1",
+ "bytes",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-tls",
+ "ipnet",
+ "js-sys",
+ "lazy_static 1.4.0",
+ "log 0.4.20",
+ "mime",
+ "native-tls",
+ "percent-encoding",
+ "pin-project-lite",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "tokio",
+ "tokio-native-tls",
+ "tokio-util 0.6.10",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "winreg 0.7.0",
+]
+
+[[package]]
+name = "retry"
+version = "1.0.0"
+source = "git+https://github.com/habitat-sh/retry#42c71e75aa231d8bf9befa7a0ec93dd570a21454"
+dependencies = [
+ "rand 0.8.5",
+ "tokio",
+]
+
+[[package]]
+name = "ring"
+version = "0.16.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
+dependencies = [
+ "cc",
+ "libc",
+ "once_cell",
+ "spin",
+ "untrusted",
+ "web-sys",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "rusoto_core"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1db30db44ea73551326269adcf7a2169428a054f14faf9e1768f2163494f2fa2"
+dependencies = [
+ "async-trait",
+ "base64 0.13.1",
+ "bytes",
+ "crc32fast",
+ "futures",
+ "http",
+ "hyper",
+ "hyper-tls",
+ "lazy_static 1.4.0",
+ "log 0.4.20",
+ "rusoto_credential",
+ "rusoto_signature",
+ "rustc_version 0.4.0",
+ "serde",
+ "serde_json",
+ "tokio",
+ "xml-rs",
+]
+
+[[package]]
+name = "rusoto_credential"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee0a6c13db5aad6047b6a44ef023dbbc21a056b6dab5be3b79ce4283d5c02d05"
+dependencies = [
+ "async-trait",
+ "chrono",
+ "dirs-next",
+ "futures",
+ "hyper",
+ "serde",
+ "serde_json",
+ "shlex",
+ "tokio",
+ "zeroize",
+]
+
+[[package]]
+name = "rusoto_ecr"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2acfd092a618d37dbfb6f42e519c6e530a11115859a3e1f03d1daf8cc648d09"
+dependencies = [
+ "async-trait",
+ "bytes",
+ "futures",
+ "rusoto_core",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "rusoto_signature"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a5ae95491c8b4847931e291b151127eccd6ff8ca13f33603eb3d0035ecb05272"
+dependencies = [
+ "base64 0.13.1",
+ "bytes",
+ "chrono",
+ "digest 0.9.0",
+ "futures",
+ "hex",
+ "hmac",
+ "http",
+ "hyper",
+ "log 0.4.20",
+ "md-5",
+ "percent-encoding",
+ "pin-project-lite",
+ "rusoto_credential",
+ "rustc_version 0.4.0",
+ "serde",
+ "sha2",
+ "tokio",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dead70b0b5e03e9c814bcb6b01e03e68f7c57a80aa48c72ec92152ab3e818d49"
+
+[[package]]
+name = "rustc_version"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee"
+dependencies = [
+ "semver 0.11.0",
+]
+
+[[package]]
+name = "rustc_version"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver 1.0.18",
+]
+
+[[package]]
+name = "rustix"
+version = "0.36.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f43abb88211988493c1abb44a70efa56ff0ce98f233b7b276146f1f3f7ba9644"
+dependencies = [
+ "bitflags 1.3.2",
+ "errno 0.2.8",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys 0.1.4",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "rustix"
+version = "0.38.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a962918ea88d644592894bc6dc55acc6c0956488adcebbfb6e273506b7fd6e5"
+dependencies = [
+ "bitflags 2.4.0",
+ "errno 0.3.2",
+ "libc",
+ "linux-raw-sys 0.4.3",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rustls"
+version = "0.20.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f"
+dependencies = [
+ "log 0.4.20",
+ "ring",
+ "sct",
+ "webpki",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2"
+dependencies = [
+ "base64 0.21.2",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61b3909d758bb75c79f23d4736fac9433868679d3ad2ea7a61e3c25cfda9a088"
+
+[[package]]
+name = "ryu"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e"
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "schannel"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75"
+dependencies = [
+ "lazy_static 1.4.0",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "scoped-tls"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2"
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "scratch"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1"
+
+[[package]]
+name = "sct"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "security-framework"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23a2ac85147a3a11d77ecf1bc7166ec0b92febfa4461c37944e180f319ece467"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e4effb91b4b8b6fb7732e670b6cee160278ff8e6bf485c7805d9e319d76e284"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "semver"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6"
+dependencies = [
+ "semver-parser",
+]
+
+[[package]]
+name = "semver"
+version = "1.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918"
+
+[[package]]
+name = "semver-parser"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7"
+dependencies = [
+ "pest 2.1.3",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.185"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be9b6f69f1dfd54c3b568ffa45c310d6973a5e5148fd40cf515acaf38cf5bc31"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde-transcode"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "590c0e25c2a5bb6e85bf5c1bce768ceb86b316e7a01bdf07d2cb4ec2271990e2"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde-value"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c"
+dependencies = [
+ "ordered-float",
+ "serde",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.185"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc59dfdcbad1437773485e0367fea4b090a2e0a16d9ffc46af47764536a298ec"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.105"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "693151e1ac27563d6dbcec9dee9fbd5da8539b20fa14ad3752b2e6d363ace360"
+dependencies = [
+ "indexmap 2.0.0",
+ "itoa 1.0.1",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_test"
+version = "1.0.176"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a2f49ace1498612d14f7e0b8245519584db8299541dfe31a06374a828d620ab"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "edfa57a7f8d9c1d260a549e7224100f6c43d43f9103e06dd8b4095a9b2b43ce9"
+dependencies = [
+ "form_urlencoded",
+ "itoa 0.4.7",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_yaml"
+version = "0.8.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b"
+dependencies = [
+ "indexmap 1.9.2",
+ "ryu",
+ "serde",
+ "yaml-rust",
+]
+
+[[package]]
+name = "serde_yaml"
+version = "0.9.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a49e178e4452f45cb61d0cd8cebc1b0fafd3e41929e996cef79aa3aca91f574"
+dependencies = [
+ "indexmap 2.0.0",
+ "itoa 1.0.1",
+ "ryu",
+ "serde",
+ "unsafe-libyaml",
+]
+
+[[package]]
+name = "sha1"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c77f4e7f65455545c2153c1253d25056825e77ee2533f0e41deb65a93a34852f"
+dependencies = [
+ "cfg-if 1.0.0",
+ "cpufeatures 0.2.5",
+ "digest 0.10.3",
+]
+
+[[package]]
+name = "sha2"
+version = "0.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b362ae5752fd2137731f9fa25fd4d9058af34666ca1966fb969119cc35719f12"
+dependencies = [
+ "block-buffer 0.9.0",
+ "cfg-if 1.0.0",
+ "cpufeatures 0.1.5",
+ "digest 0.9.0",
+ "opaque-debug",
+]
+
+[[package]]
+name = "shlex"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42a568c8f2cd051a4d283bd6eb0343ac214c1b0f1ac19f93e1175b2dee38c73d"
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "signature"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c19772be3c4dd2ceaacf03cb41d5885f2a02c4d8804884918e3a258480803335"
+
+[[package]]
+name = "siphasher"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "729a25c17d72b06c68cb47955d44fda88ad2d3e7d77e025663fdd69b93dd71a1"
+
+[[package]]
+name = "slab"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c307a32c1c5c437f38c7fd45d753050587732ba8628319fbdf12a7e289ccc590"
+
+[[package]]
+name = "smallvec"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e"
+
+[[package]]
+name = "socket2"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
+dependencies = [
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "socket2"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2538b18701741680e0322a2302176d3253a35388e2e62f172f64f4f16605f877"
+dependencies = [
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "sodiumoxide"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e26be3acb6c2d9a7aac28482586a7856436af4cfe7100031d219de2d2ecb0028"
+dependencies = [
+ "ed25519",
+ "libc",
+ "libsodium-sys",
+ "serde",
+]
+
+[[package]]
+name = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[package]]
+name = "stable_deref_trait"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
+
+[[package]]
+name = "state"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b8c4a4445d81357df8b1a650d0d0d6fbbbfe99d064aa5e02f3e4022061476d8"
+dependencies = [
+ "loom",
+]
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "strsim"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+
+[[package]]
+name = "structopt"
+version = "0.3.15"
+source = "git+https://github.com/habitat-sh/structopt.git#63c56f42ae330b15f44a86c160b0cf6868b90a6f"
+dependencies = [
+ "clap",
+ "lazy_static 1.4.0",
+ "structopt-derive",
+]
+
+[[package]]
+name = "structopt-derive"
+version = "0.4.8"
+source = "git+https://github.com/habitat-sh/structopt.git#63c56f42ae330b15f44a86c160b0cf6868b90a6f"
+dependencies = [
+ "heck 0.3.3",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.104",
+]
+
+[[package]]
+name = "subtle"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
+
+[[package]]
+name = "syn"
+version = "1.0.104"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ae548ec36cf198c0ef7710d3c230987c2d6d7bd98ad6edc0274462724c585ce"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04361975b3f5e348b2189d8dc55bc942f278b2d482a6a0365de5bdd62d351567"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tabwriter"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36205cfc997faadcc4b0b87aaef3fbedafe20d38d4959a7ca6ff803564051111"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "tar"
+version = "0.4.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b16afcea1f22891c49a00c751c7b63b2233284064f11a200fc624137c51e2ddb"
+dependencies = [
+ "filetime",
+ "libc",
+ "xattr",
+]
+
+[[package]]
+name = "tee"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37c12559dba7383625faaff75be24becf35bfc885044375bcab931111799a3da"
+
+[[package]]
+name = "tempfile"
+version = "3.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef"
+dependencies = [
+ "cfg-if 1.0.0",
+ "fastrand",
+ "redox_syscall 0.3.5",
+ "rustix 0.38.4",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "test-probe"
+version = "0.1.0"
+dependencies = [
+ "actix-rt",
+ "actix-web",
+ "clap",
+ "serde",
+ "serde_json",
+ "toml 0.7.6",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.47"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97a802ec30afc17eee47b2855fc72e0c4cd62be9b4efe6591edde0ec5bd68d8f"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.47"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bb623b56e39ab7dcd4b1b98bb6c8f8d907ed255b18de254088016b27a8ee19b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "thread-id"
+version = "4.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fdfe0627923f7411a43ec9ec9c39c3a9b4151be313e0922042581fb6c9b717f"
+dependencies = [
+ "libc",
+ "redox_syscall 0.2.10",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "thread_local"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b"
+dependencies = [
+ "lazy_static 1.4.0",
+]
+
+[[package]]
+name = "threadpool"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa"
+dependencies = [
+ "num_cpus",
+]
+
+[[package]]
+name = "time"
+version = "0.1.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438"
+dependencies = [
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "time"
+version = "0.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72c91f41dcb2f096c05f0873d667dceec1087ce5bcf984ec8ffb19acddbb3217"
+dependencies = [
+ "itoa 1.0.1",
+ "libc",
+ "num_threads",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "848a1e1181b9f6753b5e96a092749e29b11d19ede67dfbbd6c7dc7e0f49b5338"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
+
+[[package]]
+name = "tokio"
+version = "1.32.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17ed6077ed6cd6c74735e21f37eb16dc3935f96878b1fe961074089cc80893f9"
+dependencies = [
+ "backtrace",
+ "bytes",
+ "libc",
+ "mio 0.8.8",
+ "num_cpus",
+ "parking_lot",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2 0.5.3",
+ "tokio-macros",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "tokio-native-tls"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b"
+dependencies = [
+ "native-tls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.23.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59"
+dependencies = [
+ "rustls",
+ "tokio",
+ "webpki",
+]
+
+[[package]]
+name = "tokio-stream"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df54d54117d6fdc4e4fea40fe1e4e566b3505700e148a6827e59b34b0d2600d9"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+ "tokio",
+ "tokio-util 0.7.8",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.6.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "log 0.4.20",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-io",
+ "futures-sink",
+ "futures-util",
+ "hashbrown 0.12.3",
+ "pin-project-lite",
+ "slab",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "toml"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "736b60249cb25337bc196faa43ee12c705e426f3d55c214d73a4e7be06f92cb4"
+
+[[package]]
+name = "toml"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c17e963a819c331dcacd7ab957d80bc2b9a9c1e71c804826d2f283dd65306542"
+dependencies = [
+ "indexmap 2.0.0",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.19.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c500344a19072298cd05a7224b3c0c629348b78692bf48466c5238656e315a78"
+dependencies = [
+ "indexmap 2.0.0",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "tower-service"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6"
+
+[[package]]
+name = "tracing"
+version = "0.1.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a400e31aa60b9d44a52a8ee0343b5b18566b03a8321e0d321f695cf56e940160"
+dependencies = [
+ "cfg-if 1.0.0",
+ "log 0.4.20",
+ "pin-project-lite",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b7358be39f2f274f322d2aaed611acc57f382e8eb1e5b48cb9ae30933495ce7"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642"
+
+[[package]]
+name = "typemap-ors"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a68c24b707f02dd18f1e4ccceb9d49f2058c2fb86384ef9972592904d7a28867"
+dependencies = [
+ "unsafe-any-ors",
+]
+
+[[package]]
+name = "typenum"
+version = "1.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987"
+
+[[package]]
+name = "ucd-trie"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c"
+
+[[package]]
+name = "ucd-util"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c85f514e095d348c279b1e5cd76795082cf15bd59b93207832abe0b1d8fed236"
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d22af068fba1eb5edcb4aea19d382b2a3deb4c8f9d475c589b6ada9e0fd493ee"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8895849a949e7845e06bd6dc1aa51731a103c42707010a5b591c0038fb73385b"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3"
+
+[[package]]
+name = "unsafe-any-ors"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0a303d30665362d9680d7d91d78b23f5f899504d4f08b3c4cf08d055d87c0ad"
+dependencies = [
+ "destructure_traitobject",
+]
+
+[[package]]
+name = "unsafe-libyaml"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1865806a559042e51ab5414598446a5871b561d21b6764f2eabb0dd481d880a6"
+
+[[package]]
+name = "untrusted"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+
+[[package]]
+name = "uritemplate-next"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bcde98d1fc3f528255b1ecb22fb688ee0d23deb672a8c57127df10b98b4bd18c"
+dependencies = [
+ "regex 1.7.3",
+]
+
+[[package]]
+name = "url"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+ "serde",
+]
+
+[[package]]
+name = "utf8-ranges"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4ae116fef2b7fea257ed6440d3cfcff7f190865f170cdad00bb6465bf18ecba"
+
+[[package]]
+name = "uuid"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7"
+dependencies = [
+ "getrandom 0.2.3",
+]
+
+[[package]]
+name = "uuid"
+version = "1.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "422ee0de9031b5b948b97a8fc04e3aa35230001a722ddd27943e0be31564ce4c"
+dependencies = [
+ "getrandom 0.2.3",
+]
+
+[[package]]
+name = "valico"
+version = "4.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca8a0a4df97f827fcbcbe69c65364acddddf3a4bb50e6507f63361177a7ea7a4"
+dependencies = [
+ "addr",
+ "base64 0.21.2",
+ "chrono",
+ "downcast-rs",
+ "erased-serde",
+ "fancy-regex",
+ "json-pointer",
+ "jsonway",
+ "percent-encoding",
+ "phf",
+ "phf_codegen",
+ "serde",
+ "serde_json",
+ "uritemplate-next",
+ "url",
+ "uuid 1.2.2",
+]
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "vec_map"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+
+[[package]]
+name = "version_check"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe"
+
+[[package]]
+name = "walkdir"
+version = "2.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "want"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
+dependencies = [
+ "log 0.4.20",
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.9.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
+
+[[package]]
+name = "wasi"
+version = "0.10.2+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.75"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b608ecc8f4198fe8680e2ed18eccab5f0cd4caaf3d83516fa5fb2e927fda2586"
+dependencies = [
+ "cfg-if 1.0.0",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.75"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "580aa3a91a63d23aac5b6b267e2d13cb4f363e31dce6c352fca4752ae12e479f"
+dependencies = [
+ "bumpalo",
+ "lazy_static 1.4.0",
+ "log 0.4.20",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.104",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16646b21c3add8e13fdb8f20172f8a28c3dbf62f45406bcff0233188226cfe0c"
+dependencies = [
+ "cfg-if 1.0.0",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.75"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "171ebf0ed9e1458810dfcb31f2e766ad6b3a89dbda42d8901f2b268277e5f09c"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.75"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c2657dd393f03aa2a659c25c6ae18a13a4048cebd220e147933ea837efc589f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.104",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.75"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e0c4a743a309662d45f4ede961d7afa4ba4131a59a639f29b0069c3798bbcc2"
+
+[[package]]
+name = "web-sys"
+version = "0.3.52"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01c70a82d842c9979078c772d4a1344685045f1a5628f677c2b2eab4dd7d2696"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webpki"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.22.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1c760f0d366a6c24a02ed7816e23e691f5d92291f94d15e836006fd11b04daf"
+dependencies = [
+ "webpki",
+]
+
+[[package]]
+name = "which"
+version = "4.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea187a8ef279bc014ec368c27a920da2024d2a711109bfbe3440585d5cf27ad9"
+dependencies = [
+ "either",
+ "lazy_static 1.4.0",
+ "libc",
+]
+
+[[package]]
+name = "widestring"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c168940144dd21fd8046987c16a46a33d5fc84eec29ef9dcddc2ac9e31526b7c"
+
+[[package]]
+name = "widestring"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "653f141f39ec16bba3c5abe400a0c60da7468261cc2cbf36805022876bc721a8"
+
+[[package]]
+name = "winapi"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-build"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-acl"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "177b1723986bcb4c606058e77f6e8614b51c7f9ad2face6f6fd63dd5c8b3cec3"
+dependencies = [
+ "field-offset",
+ "libc",
+ "widestring 0.4.3",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5acdd78cb4ba54c0045ac14f62d8f94a03d10047904ae2a40afa1e99d8f70825"
+dependencies = [
+ "windows_aarch64_msvc 0.34.0",
+ "windows_i686_gnu 0.34.0",
+ "windows_i686_msvc 0.34.0",
+ "windows_x86_64_gnu 0.34.0",
+ "windows_x86_64_msvc 0.34.0",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.1",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.0",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.1",
+ "windows_aarch64_msvc 0.42.1",
+ "windows_i686_gnu 0.42.1",
+ "windows_i686_msvc 0.42.1",
+ "windows_x86_64_gnu 0.42.1",
+ "windows_x86_64_gnullvm 0.42.1",
+ "windows_x86_64_msvc 0.42.1",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.0",
+ "windows_aarch64_msvc 0.48.0",
+ "windows_i686_gnu 0.48.0",
+ "windows_i686_msvc 0.48.0",
+ "windows_x86_64_gnu 0.48.0",
+ "windows_x86_64_gnullvm 0.48.0",
+ "windows_x86_64_msvc 0.48.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
+
+[[package]]
+name = "winnow"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61de7bac303dc551fe038e2b3cef0f571087a47571ea6e79a87692ac99b99699"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "winreg"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "winreg"
+version = "0.51.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "937f3df7948156640f46aacef17a70db0de5917bda9c92b0f751f3a955b588fc"
+dependencies = [
+ "cfg-if 1.0.0",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "ws2_32-sys"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e"
+dependencies = [
+ "winapi 0.2.8",
+ "winapi-build",
+]
+
+[[package]]
+name = "xattr"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4686009f71ff3e5c4dbcf1a282d0a44db3f021ba69350cd42086b3e5f1c6985"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "xml-rs"
+version = "0.8.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52839dc911083a8ef63efa4d039d1f58b5e409f923e44c80828f206f66e5541c"
+
+[[package]]
+name = "xz2"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "388c44dc09d76f1536602ead6d325eb532f5c122f17782bd57fb47baeeb767e2"
+dependencies = [
+ "lzma-sys",
+]
+
+[[package]]
+name = "yaml-rust"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
+dependencies = [
+ "linked-hash-map",
+]
+
+[[package]]
+name = "yasna"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e17bb3549cc1321ae1296b9cdc2698e2b6cb1992adfa19a8c72e5b7a738f44cd"
+dependencies = [
+ "time 0.3.11",
+]
+
+[[package]]
+name = "zeroize"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "377db0846015f7ae377174787dd452e1c5f5a9050bc6f954911d01f116daa0cd"
+
+[[package]]
+name = "zmq"
+version = "0.9.2"
+source = "git+https://github.com/habitat-sh/rust-zmq?branch=v0.9.2-symlinks-removed#048f33ed4b9241a2c63b4c9b61fdf8bcd142ae00"
+dependencies = [
+ "bitflags 1.3.2",
+ "libc",
+ "log 0.4.20",
+ "zmq-sys",
+]
+
+[[package]]
+name = "zmq-sys"
+version = "0.11.0"
+source = "git+https://github.com/habitat-sh/rust-zmq?branch=v0.9.2-symlinks-removed#048f33ed4b9241a2c63b4c9b61fdf8bcd142ae00"
+dependencies = [
+ "libc",
+ "metadeps",
+]
diff --git a/nixpkgs/pkgs/applications/networking/cluster/habitat/default.nix b/nixpkgs/pkgs/applications/networking/cluster/habitat/default.nix
new file mode 100644
index 000000000000..03f6d79a5387
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/habitat/default.nix
@@ -0,0 +1,66 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, protobuf
+, libsodium
+, openssl
+, xz
+, zeromq
+, cacert
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "habitat";
+  version = "1.6.848";
+
+  src = fetchFromGitHub {
+    owner = "habitat-sh";
+    repo = "habitat";
+    rev = version;
+    hash = "sha256-oK9ZzENwpEq6W1qnhSgkr7Rhy7Fxt/BS4U5nxecyPu8=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "clap-2.33.1" = "sha256-ixyNr91VNB2ce2cIr0CdPmvKYRlckhKLeaSbqxouIAY=";
+      "configopt-0.1.0" = "sha256-76MeSoRD796ZzBqX3CoDJnunekVo2XfctpxrpspxmAU=";
+      "rants-0.6.0" = "sha256-B8uDoiqddCki3j7aC8kilEcmJjvB4ICjZjjTun2UEkY=";
+      "retry-1.0.0" = "sha256-ZaHnzOCelV4V0+MTIbH3DXxdz8QZVgcMq2YeV0S6X6o=";
+      "structopt-0.3.15" = "sha256-0vIX7J7VktKytT3ZnOm45qPRMHDkdJg20eU6pZBIH+Q=";
+      "zmq-0.9.2" = "sha256-bsDCPYLb9hUr6htPQ7rSoasKAqoWBx5FiEY1gOOtdJQ=";
+    };
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    protobuf
+  ];
+
+  buildInputs = [
+    libsodium
+    openssl
+    xz
+    zeromq
+  ];
+
+  cargoBuildFlags = [ "-p" "hab" ];
+  cargoTestFlags = cargoBuildFlags;
+
+  env = {
+    OPENSSL_NO_VENDOR = true;
+    SODIUM_USE_PKG_CONFIG = true;
+    SSL_CERT_FILE = "${cacert}/etc/ssl/certs/ca-bundle.crt";
+  };
+
+  meta = with lib; {
+    description = "An application automation framework";
+    homepage = "https://www.habitat.sh";
+    changelog = "https://github.com/habitat-sh/habitat/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ rushmorem qjoly ];
+    mainProgram = "hab";
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/hadoop/default.nix b/nixpkgs/pkgs/applications/networking/cluster/hadoop/default.nix
new file mode 100644
index 000000000000..65512de2031b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/hadoop/default.nix
@@ -0,0 +1,147 @@
+{ lib
+, stdenv
+, fetchurl
+, makeWrapper
+, autoPatchelfHook
+, jdk8_headless
+, jdk11_headless
+, bash
+, coreutils
+, which
+, bzip2
+, cyrus_sasl
+, protobuf
+, snappy
+, zlib
+, zstd
+, openssl
+, glibc
+, nixosTests
+, sparkSupport ? true
+, spark
+}:
+
+with lib;
+
+assert elem stdenv.system [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin" ];
+
+let
+  common = { pname, platformAttrs, untarDir ? "${pname}-${version}", jdk, openssl ? null, nativeLibs ? [ ], libPatches ? "", tests }:
+    stdenv.mkDerivation rec {
+      inherit pname jdk libPatches untarDir openssl;
+      version = platformAttrs.${stdenv.system}.version or (throw "Unsupported system: ${stdenv.system}");
+      src = fetchurl {
+        url = "mirror://apache/hadoop/common/hadoop-${version}/hadoop-${version}" + optionalString stdenv.isAarch64 "-aarch64" + ".tar.gz";
+        inherit (platformAttrs.${stdenv.system}) hash;
+      };
+      doCheck = true;
+
+      nativeBuildInputs = [ makeWrapper ]
+        ++ optionals (stdenv.isLinux && (nativeLibs != [ ] || libPatches != "")) [ autoPatchelfHook ];
+      buildInputs = [ openssl ] ++ nativeLibs;
+
+      installPhase = ''
+        mkdir -p $out/{lib/${untarDir}/conf,bin,lib}
+        mv * $out/lib/${untarDir}
+      '' + optionalString stdenv.isLinux ''
+        # All versions need container-executor, but some versions can't use autoPatchelf because of broken SSL versions
+        patchelf --set-interpreter ${glibc.out}/lib64/ld-linux-x86-64.so.2 $out/lib/${untarDir}/bin/container-executor
+      '' + ''
+        for n in $(find $out/lib/${untarDir}/bin -type f ! -name "*.*"); do
+          makeWrapper "$n" "$out/bin/$(basename $n)"\
+            --set-default JAVA_HOME ${jdk.home}\
+            --set-default HADOOP_HOME $out/lib/${untarDir}\
+            --run "test -d /etc/hadoop-conf && export HADOOP_CONF_DIR=\''${HADOOP_CONF_DIR-'/etc/hadoop-conf/'}"\
+            --set-default HADOOP_CONF_DIR $out/lib/${untarDir}/etc/hadoop/\
+            --prefix PATH : "${makeBinPath [ bash coreutils which]}"\
+            --prefix JAVA_LIBRARY_PATH : "${makeLibraryPath buildInputs}"
+        done
+      '' + optionalString sparkSupport ''
+        # Add the spark shuffle service jar to YARN
+        cp ${spark.src}/yarn/spark-${spark.version}-yarn-shuffle.jar $out/lib/${untarDir}/share/hadoop/yarn/
+      '' + libPatches;
+
+      passthru = { inherit tests; };
+
+      meta = recursiveUpdate {
+        homepage = "https://hadoop.apache.org/";
+        description = "Framework for distributed processing of large data sets across clusters of computers";
+        license = licenses.asl20;
+        sourceProvenance = with sourceTypes; [ binaryBytecode ];
+
+        longDescription = ''
+          The Apache Hadoop software library is a framework that allows for
+          the distributed processing of large data sets across clusters of
+          computers using a simple programming model. It is designed to
+          scale up from single servers to thousands of machines, each
+          offering local computation and storage. Rather than rely on
+          hardware to deliver high-avaiability, the library itself is
+          designed to detect and handle failures at the application layer,
+          so delivering a highly-availabile service on top of a cluster of
+          computers, each of which may be prone to failures.
+        '';
+        maintainers = with maintainers; [ illustris ];
+        platforms = attrNames platformAttrs;
+      } (attrByPath [ stdenv.system "meta" ] {} platformAttrs);
+    };
+in
+{
+  # Different version of hadoop support different java runtime versions
+  # https://cwiki.apache.org/confluence/display/HADOOP/Hadoop+Java+Versions
+  hadoop_3_3 = common rec {
+    pname = "hadoop";
+    platformAttrs = rec {
+        x86_64-linux = {
+          version = "3.3.5";
+          hash = "sha256-RG4FypL6I6YGF6ixeUbe3kcoGvFQQEFhfLfV9i50JSo=";
+        };
+        x86_64-darwin = x86_64-linux;
+        aarch64-linux = {
+          version = "3.3.5";
+          hash = "sha256-qcKjbE881isauWBxIv+NY0UFbYit704/Re8Kdl6x1LA=";
+        };
+        aarch64-darwin = aarch64-linux;
+    };
+    untarDir = "${pname}-${platformAttrs.${stdenv.system}.version}";
+    jdk = jdk11_headless;
+    inherit openssl;
+    # TODO: Package and add Intel Storage Acceleration Library
+    nativeLibs = [ stdenv.cc.cc.lib protobuf zlib snappy ];
+    libPatches = ''
+      ln -s ${getLib cyrus_sasl}/lib/libsasl2.so $out/lib/${untarDir}/lib/native/libsasl2.so.2
+      ln -s ${getLib openssl}/lib/libcrypto.so $out/lib/${untarDir}/lib/native/
+      ln -s ${getLib zlib}/lib/libz.so.1 $out/lib/${untarDir}/lib/native/
+      ln -s ${getLib zstd}/lib/libzstd.so.1 $out/lib/${untarDir}/lib/native/
+      ln -s ${getLib bzip2}/lib/libbz2.so.1 $out/lib/${untarDir}/lib/native/
+    '' + optionalString stdenv.isLinux ''
+      # libjvm.so for Java >=11
+      patchelf --add-rpath ${jdk.home}/lib/server $out/lib/${untarDir}/lib/native/libnativetask.so.1.0.0
+      # Java 8 has libjvm.so at a different path
+      patchelf --add-rpath ${jdk.home}/jre/lib/amd64/server $out/lib/${untarDir}/lib/native/libnativetask.so.1.0.0
+      # NixOS/nixpkgs#193370
+      # This workaround is needed to use protobuf 3.19
+      patchelf --replace-needed libprotobuf.so.18 libprotobuf.so $out/lib/${untarDir}/lib/native/libhdfspp.so
+    '';
+    tests = nixosTests.hadoop;
+  };
+  hadoop_3_2 = common rec {
+    pname = "hadoop";
+    platformAttrs.x86_64-linux = {
+      version = "3.2.4";
+      hash = "sha256-qt2gpMr+NHuiVR+/zFRzRyRKG725/ZNBIM69z9J9wNw=";
+    };
+    jdk = jdk8_headless;
+    # not using native libs because of broken openssl_1_0_2 dependency
+    # can be manually overridden
+    tests = nixosTests.hadoop_3_2;
+  };
+  hadoop2 = common rec {
+    pname = "hadoop";
+    platformAttrs.x86_64-linux = {
+      version = "2.10.2";
+      hash = "sha256-xhA4zxqIRGNhIeBnJO9dLKf/gx/Bq+uIyyZwsIafEyo=";
+    };
+    jdk = jdk8_headless;
+    tests = nixosTests.hadoop2;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/hashi-up/default.nix b/nixpkgs/pkgs/applications/networking/cluster/hashi-up/default.nix
new file mode 100644
index 000000000000..583a0c32b1d1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/hashi-up/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "hashi-up";
+  version = "0.16.0";
+
+  src = fetchFromGitHub {
+    owner = "jsiebens";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-PdZ8X2pJ5TfT0bJ4/P/XbMTv+yyL5/1AxIFHnL/qNcg=";
+  };
+
+  vendorHash = "sha256-dircE3WlDPsPnF+0wT5RG/c4hC8qPs8NaSGM5wpvVlM=";
+
+  meta = with lib; {
+    description = "A lightweight utility to install HashiCorp Consul, Nomad, or Vault on any remote Linux host";
+    homepage = "https://github.com/jsiebens/hashi-up";
+    license = licenses.mit;
+    maintainers = with maintainers; [ lucperkins ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/helm-dashboard/default.nix b/nixpkgs/pkgs/applications/networking/cluster/helm-dashboard/default.nix
new file mode 100644
index 000000000000..bcd24be5c922
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/helm-dashboard/default.nix
@@ -0,0 +1,31 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "helm-dashboard";
+  version = "1.3.3";
+
+  src = fetchFromGitHub {
+    owner = "komodorio";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-hjIo2AEXNcFK0z4op59NnC2R8GspF5t808DZ72AxgMw=";
+  };
+
+  vendorHash = "sha256-ROffm1SGYnhUcp46nzQ951eaeQdO1pb+f8AInm0eSq0=";
+
+  # tests require internet access
+  doCheck = false;
+
+  ldflags = [ "-s" "-w" "-X main.version=v${version}" ];
+
+  meta = {
+    description = "A simplified way of working with Helm";
+    longDescription = ''
+      Helm Dashboard is an open-source project which offers a UI-driven way to view the installed Helm charts,
+      see their revision history and corresponding k8s resources.
+    '';
+    homepage = "https://github.com/komodorio/helm-dashboard/";
+    license = lib.licenses.asl20;
+    maintainers = with lib.maintainers; [ qjoly ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/helm-docs/default.nix b/nixpkgs/pkgs/applications/networking/cluster/helm-docs/default.nix
new file mode 100644
index 000000000000..657d428912dd
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/helm-docs/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "helm-docs";
+  version = "1.11.1";
+
+  src = fetchFromGitHub {
+    owner = "norwoodj";
+    repo = "helm-docs";
+    rev = "v${version}";
+    hash = "sha256-4o3hdqaW/AtegKStMKVerE3dRr3iZxQ+Lm2Aj3aOy98=";
+  };
+
+  vendorHash = "sha256-6byD8FdeqdRDNUZFZ7FUUdyTuFOO8s3rb6YPGKdwLB8=";
+
+  subPackages = [ "cmd/helm-docs" ];
+  ldflags = [
+    "-w"
+    "-s"
+    "-X main.version=${version}"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/norwoodj/helm-docs";
+    description = "A tool for automatically generating markdown documentation for Helm charts";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ sagikazarmark ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/helm/chart-testing/default.nix b/nixpkgs/pkgs/applications/networking/cluster/helm/chart-testing/default.nix
new file mode 100644
index 000000000000..cf0ec824b035
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/helm/chart-testing/default.nix
@@ -0,0 +1,68 @@
+{ buildGoModule
+, coreutils
+, fetchFromGitHub
+, git
+, installShellFiles
+, kubectl
+, kubernetes-helm
+, lib
+, makeWrapper
+, yamale
+, yamllint
+}:
+
+buildGoModule rec {
+  pname = "chart-testing";
+  version = "3.9.0";
+
+  src = fetchFromGitHub {
+    owner = "helm";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-H9Pw4HPffFmRJXGh+e2hcddYfhgmvnUOxezQ6Zc8NwY=";
+  };
+
+  vendorHash = "sha256-9XdLSTr9FKuatJzpWM8AwrPtYDS+LC14bpz6evvJRuQ=";
+
+  postPatch = ''
+    substituteInPlace pkg/config/config.go \
+      --replace "\"/etc/ct\"," "\"$out/etc/ct\","
+  '';
+
+  ldflags = [
+    "-w"
+    "-s"
+    "-X github.com/helm/chart-testing/v3/ct/cmd.Version=${version}"
+    "-X github.com/helm/chart-testing/v3/ct/cmd.GitCommit=${src.rev}"
+    "-X github.com/helm/chart-testing/v3/ct/cmd.BuildDate=19700101-00:00:00"
+  ];
+
+  nativeBuildInputs = [ installShellFiles makeWrapper ];
+
+  postInstall = ''
+    install -Dm644 -t $out/etc/ct etc/chart_schema.yaml
+    install -Dm644 -t $out/etc/ct etc/lintconf.yaml
+
+    installShellCompletion --cmd ct \
+      --bash <($out/bin/ct completion bash) \
+      --zsh <($out/bin/ct completion zsh) \
+      --fish <($out/bin/ct completion fish) \
+
+    wrapProgram $out/bin/ct --prefix PATH : ${lib.makeBinPath [
+      coreutils
+      git
+      kubectl
+      kubernetes-helm
+      yamale
+      yamllint
+    ]}
+  '';
+
+  meta = with lib; {
+    description = "A tool for testing Helm charts";
+    homepage = "https://github.com/helm/chart-testing";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ atkinschang ];
+    mainProgram = "ct";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/helm/default.nix b/nixpkgs/pkgs/applications/networking/cluster/helm/default.nix
new file mode 100644
index 000000000000..f3af1036a8ff
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/helm/default.nix
@@ -0,0 +1,58 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles, testers, kubernetes-helm }:
+
+buildGoModule rec {
+  pname = "kubernetes-helm";
+  version = "3.12.2";
+
+  src = fetchFromGitHub {
+    owner = "helm";
+    repo = "helm";
+    rev = "v${version}";
+    sha256 = "sha256-nUkUb41UX9kCIjBrz3AMnaHZSgNoEc+lS6J8Edy6lVA=";
+  };
+  vendorHash = "sha256-4NsGosKFyl3T3bIndYRP0hhJQ5oj6KuSv4kYH9b83WE=";
+
+  subPackages = [ "cmd/helm" ];
+  ldflags = [
+    "-w"
+    "-s"
+    "-X helm.sh/helm/v3/internal/version.version=v${version}"
+    "-X helm.sh/helm/v3/internal/version.gitCommit=${src.rev}"
+  ];
+
+  __darwinAllowLocalNetworking = true;
+
+  preCheck = ''
+    # skipping version tests because they require dot git directory
+    substituteInPlace cmd/helm/version_test.go \
+      --replace "TestVersion" "SkipVersion"
+    # skipping plugin tests
+    substituteInPlace cmd/helm/plugin_test.go \
+      --replace "TestPluginDynamicCompletion" "SkipPluginDynamicCompletion" \
+      --replace "TestLoadPlugins" "SkipLoadPlugins"
+    substituteInPlace cmd/helm/helm_test.go \
+      --replace "TestPluginExitCode" "SkipPluginExitCode"
+  '';
+
+  nativeBuildInputs = [ installShellFiles ];
+  postInstall = ''
+    $out/bin/helm completion bash > helm.bash
+    $out/bin/helm completion zsh > helm.zsh
+    $out/bin/helm completion fish > helm.fish
+    installShellCompletion helm.{bash,zsh,fish}
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = kubernetes-helm;
+    command = "helm version";
+    version = "v${version}";
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/kubernetes/helm";
+    description = "A package manager for kubernetes";
+    mainProgram = "helm";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ rlupton20 edude03 saschagrunert Frostman Chili-Man techknowlogick ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/helm/plugins/default.nix b/nixpkgs/pkgs/applications/networking/cluster/helm/plugins/default.nix
new file mode 100644
index 000000000000..1a6aa12a91e5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/helm/plugins/default.nix
@@ -0,0 +1,17 @@
+{ callPackage }:
+
+{
+
+  helm-diff = callPackage ./helm-diff.nix { };
+
+  helm-git = callPackage ./helm-git.nix { };
+
+  helm-cm-push = callPackage ./helm-cm-push.nix { };
+
+  helm-s3 = callPackage ./helm-s3.nix { };
+
+  helm-secrets = callPackage ./helm-secrets.nix { };
+
+  helm-unittest = callPackage ./helm-unittest.nix { };
+
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/helm/plugins/helm-cm-push.nix b/nixpkgs/pkgs/applications/networking/cluster/helm/plugins/helm-cm-push.nix
new file mode 100644
index 000000000000..a5a2f7566b46
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/helm/plugins/helm-cm-push.nix
@@ -0,0 +1,44 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "helm-cm-push";
+  version = "0.10.4";
+
+  src = fetchFromGitHub {
+    owner = "chartmuseum";
+    repo = "helm-push";
+    rev = "v${version}";
+    hash = "sha256-YnhI1/BDk9swr3YFm5ajGf4LLgPty7blA2tlsMH0erY=";
+  };
+
+  vendorHash = "sha256-7bUDKqkvBV1Upcrj4DQnVCP74QtKlSwF0Kl2sPFZpjc=";
+
+  subPackage = [ "cmd/helm-cm-push" ];
+
+  # Remove hooks.
+  postPatch = ''
+    sed -e '/^hooks:/,+2 d' -i plugin.yaml
+  '';
+
+  CGO_ENABLED = 0;
+
+  ldflags = [ "-s" "-w" ];
+
+  postInstall = ''
+    install -Dm644 plugin.yaml $out/helm-cm-push/plugin.yaml
+    mv $out/bin $out/helm-cm-push
+  '';
+
+  # Tests require the ChartMuseum service.
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Helm plugin to push chart package to ChartMuseum";
+    homepage = "https://github.com/chartmuseum/helm-push";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ azahi ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/helm/plugins/helm-diff.nix b/nixpkgs/pkgs/applications/networking/cluster/helm/plugins/helm-diff.nix
new file mode 100644
index 000000000000..ec5a4eb4f35e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/helm/plugins/helm-diff.nix
@@ -0,0 +1,36 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "helm-diff";
+  version = "3.8.1";
+
+  src = fetchFromGitHub {
+    owner = "databus23";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-x3tTHiuw0CtvsOCB7oPd9EB+B5T1m6Hn7O1CriYahuA=";
+  };
+
+  vendorHash = "sha256-2tiBFS3gvSbnyighSorg/ar058ZJmiQviaT13zOS8KA=";
+
+  ldflags = [ "-s" "-w" "-X github.com/databus23/helm-diff/v3/cmd.Version=${version}" ];
+
+  # NOTE: Remove the install and upgrade hooks.
+  postPatch = ''
+    sed -i '/^hooks:/,+2 d' plugin.yaml
+  '';
+
+  postInstall = ''
+    install -dm755 $out/${pname}
+    mv $out/bin $out/${pname}/
+    mv $out/${pname}/bin/{helm-,}diff
+    install -m644 -Dt $out/${pname} plugin.yaml
+  '';
+
+  meta = with lib; {
+    description = "A Helm plugin that shows a diff";
+    homepage = "https://github.com/databus23/helm-diff";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ yurrriq ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/helm/plugins/helm-git.nix b/nixpkgs/pkgs/applications/networking/cluster/helm/plugins/helm-git.nix
new file mode 100644
index 000000000000..d72b152cc5bf
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/helm/plugins/helm-git.nix
@@ -0,0 +1,46 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, coreutils
+, findutils
+, git
+, gnugrep
+, gnused
+, makeWrapper
+}:
+
+stdenv.mkDerivation rec {
+  pname = "helm-git";
+  version = "0.10.0";
+
+  src = fetchFromGitHub {
+    owner = "aslafy-z";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0hvycqibmlw2zw3nm8rn73v5x1zcgm2jrfdlljbvc1n4n5vnzdrg";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  # NOTE: helm-git is comprised of shell scripts.
+  dontBuild = true;
+
+  installPhase = ''
+    install -dm755 $out/helm-git
+    install -m644 -Dt $out/helm-git plugin.yaml
+    cp helm-git helm-git-plugin.sh $out/helm-git/
+
+    patchShebangs $out/helm-git/helm-git{,-plugin.sh}
+    wrapProgram $out/helm-git/helm-git \
+        --prefix PATH : ${lib.makeBinPath [ coreutils findutils git gnugrep gnused ]}
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "The Helm downloader plugin that provides GIT protocol support";
+    homepage = "https://github.com/aslafy-z/helm-git";
+    license = licenses.mit;
+    maintainers = with maintainers; [ flokli ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/helm/plugins/helm-s3.nix b/nixpkgs/pkgs/applications/networking/cluster/helm/plugins/helm-s3.nix
new file mode 100644
index 000000000000..9d2159f2c34b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/helm/plugins/helm-s3.nix
@@ -0,0 +1,42 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "helm-s3";
+  version = "0.14.0";
+
+  src = fetchFromGitHub {
+    owner = "hypnoglow";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-81Rzqu2fj6xSZbKvAhHzaGnr/3ACZvqJhYe+6Vyc0qk=";
+  };
+
+  vendorHash = "sha256-Jvfl0sdZXV497RIgoZUJD0zK/pXK6yeAnuSdq42nky8=";
+
+  # NOTE: Remove the install and upgrade hooks.
+  postPatch = ''
+    sed -i '/^hooks:/,+2 d' plugin.yaml
+  '';
+
+  # NOTE: make test-unit, but skip awsutil, which needs internet access
+  checkPhase = ''
+    go test $(go list ./... | grep -vE '(awsutil|e2e)')
+  '';
+
+  ldflags = [ "-s" "-w" "-X main.version=${version}" ];
+
+  subPackages = [ "cmd/helm-s3" ];
+
+  postInstall = ''
+    install -dm755 $out/${pname}
+    mv $out/bin $out/${pname}/
+    install -m644 -Dt $out/${pname} plugin.yaml
+  '';
+
+  meta = with lib; {
+    description = "A Helm plugin that allows to set up a chart repository using AWS S3";
+    homepage = "https://github.com/hypnoglow/helm-s3";
+    license = licenses.mit;
+    maintainers = with maintainers; [ yurrriq ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/helm/plugins/helm-secrets.nix b/nixpkgs/pkgs/applications/networking/cluster/helm/plugins/helm-secrets.nix
new file mode 100644
index 000000000000..22a993a017eb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/helm/plugins/helm-secrets.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, coreutils, findutils, getopt, gnugrep, gnused, sops, vault }:
+
+stdenv.mkDerivation rec {
+  pname = "helm-secrets";
+  version = "4.4.2";
+
+  src = fetchFromGitHub {
+    owner = "jkroepke";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-GpPgjRqzH4fcnaHs9SWfdaCZimwBleXnxQLjqy8SArs=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ getopt sops ];
+
+  # NOTE: helm-secrets is comprised of shell scripts.
+  dontBuild = true;
+
+  # NOTE: Fix version string
+  postPatch = ''
+    sed -i 's/^version:.*/version: "${version}"/' plugin.yaml
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -dm755 $out/${pname} $out/${pname}/scripts
+    install -m644 -Dt $out/${pname} plugin.yaml
+    cp -r scripts/* $out/${pname}/scripts
+    wrapProgram $out/${pname}/scripts/run.sh \
+        --prefix PATH : ${lib.makeBinPath [ coreutils findutils getopt gnugrep gnused sops vault ]}
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A Helm plugin that helps manage secrets";
+    homepage = "https://github.com/jkroepke/helm-secrets";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ yurrriq ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/helm/plugins/helm-unittest.nix b/nixpkgs/pkgs/applications/networking/cluster/helm/plugins/helm-unittest.nix
new file mode 100644
index 000000000000..9b88d99e44ac
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/helm/plugins/helm-unittest.nix
@@ -0,0 +1,34 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "helm-unittest";
+  version = "0.3.3";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-11rgARUfTbr8FkmR2lI4uoIqzi9cRuVPalUOsxsnO3E=";
+  };
+
+  vendorHash = "sha256-E9HSP8c/rGG+PLbnT8V5GflpnFItCeXyeLGiqDj4tRI=";
+
+  # NOTE: Remove the install and upgrade hooks.
+  postPatch = ''
+    sed -i '/^hooks:/,+2 d' plugin.yaml
+  '';
+
+  postInstall = ''
+    install -dm755 $out/${pname}
+    mv $out/bin/helm-unittest $out/${pname}/untt
+    rmdir $out/bin
+    install -m644 -Dt $out/${pname} plugin.yaml
+  '';
+
+  meta = with lib; {
+    description = "BDD styled unit test framework for Kubernetes Helm charts as a Helm plugin";
+    homepage = "https://github.com/helm-unittest/helm-unittest";
+    license = licenses.mit;
+    maintainers = with maintainers; [ yurrriq ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/helm/wrapper.nix b/nixpkgs/pkgs/applications/networking/cluster/helm/wrapper.nix
new file mode 100644
index 000000000000..3b13668abf68
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/helm/wrapper.nix
@@ -0,0 +1,47 @@
+{ symlinkJoin, lib, makeWrapper, writeText }:
+
+helm:
+
+let
+  wrapper = {
+    plugins ? [],
+    extraMakeWrapperArgs ? ""
+  }:
+  let
+
+  initialMakeWrapperArgs = [
+  ];
+
+  pluginsDir = symlinkJoin {
+    name = "helm-plugins";
+    paths = plugins;
+  };
+in
+  symlinkJoin {
+    name = "helm-${lib.getVersion helm}";
+
+    # Remove the symlinks created by symlinkJoin which we need to perform
+    # extra actions upon
+    postBuild = ''
+      wrapProgram "$out/bin/helm" \
+        "--set" "HELM_PLUGINS" "${pluginsDir}" ${extraMakeWrapperArgs}
+    '';
+    paths = [ helm pluginsDir ];
+
+    preferLocalBuild = true;
+
+    nativeBuildInputs = [ makeWrapper ];
+    passthru = {
+      inherit pluginsDir;
+      unwrapped = helm;
+    };
+
+    meta = helm.meta // {
+      # To prevent builds on hydra
+      hydraPlatforms = [];
+      # prefer wrapper over the package
+      priority = (helm.meta.priority or 0) - 1;
+    };
+  };
+in
+  lib.makeOverridable wrapper
diff --git a/nixpkgs/pkgs/applications/networking/cluster/helmfile/default.nix b/nixpkgs/pkgs/applications/networking/cluster/helmfile/default.nix
new file mode 100644
index 000000000000..e175c4915540
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/helmfile/default.nix
@@ -0,0 +1,52 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, makeWrapper
+, pluginsDir ? null
+}:
+
+buildGoModule rec {
+  pname = "helmfile";
+  version = "0.156.0";
+
+  src = fetchFromGitHub {
+    owner = "helmfile";
+    repo = "helmfile";
+    rev = "v${version}";
+    sha256 = "sha256-MrDhOsjXo4aaeWSo/WNheUqom7kF2MzyaqeZXVAAzz4=";
+  };
+
+  vendorHash = "sha256-hMoBwA9KmQSBJkEu3UAxM1wi6RRHZdUhYqri5JGwEmw=";
+
+  doCheck = false;
+
+  subPackages = [ "." ];
+
+  ldflags = [ "-s" "-w" "-X go.szostok.io/version.version=v${version}" ];
+
+  nativeBuildInputs =
+    [ installShellFiles ] ++
+    lib.optional (pluginsDir != null) makeWrapper;
+
+  postInstall = lib.optionalString (pluginsDir != null) ''
+    wrapProgram $out/bin/helmfile \
+      --set HELM_PLUGINS "${pluginsDir}"
+  '' + ''
+    installShellCompletion --cmd helmfile \
+      --bash <($out/bin/helmfile completion bash) \
+      --fish <($out/bin/helmfile completion fish) \
+      --zsh <($out/bin/helmfile completion zsh)
+  '';
+
+  meta = {
+    description = "Declarative spec for deploying Helm charts";
+    longDescription = ''
+      Declaratively deploy your Kubernetes manifests, Kustomize configs,
+      and charts as Helm releases in one shot.
+    '';
+    homepage = "https://helmfile.readthedocs.io/";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ pneumaticat yurrriq ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/helmsman/default.nix b/nixpkgs/pkgs/applications/networking/cluster/helmsman/default.nix
new file mode 100644
index 000000000000..0e0a69496f98
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/helmsman/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub, ... }:
+
+buildGoModule rec {
+  pname = "helmsman";
+  version = "3.17.0";
+
+  src = fetchFromGitHub {
+    owner = "Praqma";
+    repo = "helmsman";
+    rev = "v${version}";
+    sha256 = "sha256-mXc3CVKh4pFAZVppvk5TTg6s6dOA2Gv+ROLNV37DAl4=";
+  };
+
+  vendorHash = "sha256-zn8q3HpyQWNsksYbqJcgnjOxaBVUr3dIYHk+FAalNxA=";
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Helm Charts (k8s applications) as Code tool";
+    homepage = "https://github.com/Praqma/helmsman";
+    license = licenses.mit;
+    maintainers = with maintainers; [ lynty ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/hetzner-kube/default.nix b/nixpkgs/pkgs/applications/networking/cluster/hetzner-kube/default.nix
new file mode 100644
index 000000000000..a1fceb10ea7b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/hetzner-kube/default.nix
@@ -0,0 +1,48 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "hetzner-kube";
+  version = "0.5.1";
+
+  src = fetchFromGitHub {
+    owner = "xetys";
+    repo = "hetzner-kube";
+    rev = version;
+    hash = "sha256-XHvR+31yq0o3txMBHh2rCh2peDlG5Kh3hdl0LGm9D8c=";
+  };
+
+  patches = [
+    # Use $HOME instead of the OS user database.
+    # Upstream PR: https://github.com/xetys/hetzner-kube/pull/346
+    # Unfortunately, the PR patch does not apply against release.
+    ./fix-home.patch
+  ];
+
+  vendorHash = "sha256-sIjSu9U+uNc5dgt9Qg328W/28nX4F5d5zjUb7Y1xAso=";
+
+  doCheck = false;
+
+  ldflags = [
+    "-X github.com/xetys/hetzner-kube/cmd.version=${version}"
+  ];
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  postInstall = ''
+    # Need a writable home, because it fails if unable to write config.
+    export HOME=$TMP
+    $out/bin/hetzner-kube completion bash > hetzner-kube
+    $out/bin/hetzner-kube completion zsh > _hetzner-kube
+    installShellCompletion --zsh _hetzner-kube
+    installShellCompletion --bash hetzner-kube
+  '';
+
+  meta = {
+    description = "A CLI tool for provisioning Kubernetes clusters on Hetzner Cloud";
+    homepage = "https://github.com/xetys/hetzner-kube";
+    license = lib.licenses.asl20;
+    maintainers = with lib.maintainers; [ eliasp ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/hetzner-kube/fix-home.patch b/nixpkgs/pkgs/applications/networking/cluster/hetzner-kube/fix-home.patch
new file mode 100644
index 000000000000..1b3bbae65f43
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/hetzner-kube/fix-home.patch
@@ -0,0 +1,53 @@
+diff --git a/cmd/cluster_kubeconfig.go b/cmd/cluster_kubeconfig.go
+index 54cc0c9..fab288a 100644
+--- a/cmd/cluster_kubeconfig.go
++++ b/cmd/cluster_kubeconfig.go
+@@ -6,7 +6,7 @@ import (
+ 	"io/ioutil"
+ 	"log"
+ 	"os"
+-	"os/user"
++	"path/filepath"
+ 	"strings"
+ 
+ 	"github.com/spf13/cobra"
+@@ -52,9 +52,8 @@ Example 4: hetzner-kube cluster kubeconfig -n my-cluster -p > my-conf.yaml # pri
+ 		} else {
+ 			fmt.Println("create file")
+ 
+-			usr, _ := user.Current()
+-			dir := usr.HomeDir
+-			path := fmt.Sprintf("%s/.kube", dir)
++			dir, _ := os.UserHomeDir()
++			path := filepath.Join(dir, ".kube")
+ 
+ 			if _, err := os.Stat(path); os.IsNotExist(err) {
+ 				os.MkdirAll(path, 0755)
+diff --git a/cmd/config.go b/cmd/config.go
+index ce0f3e5..a03c4ba 100644
+--- a/cmd/config.go
++++ b/cmd/config.go
+@@ -8,7 +8,6 @@ import (
+ 	"io/ioutil"
+ 	"log"
+ 	"os"
+-	"os/user"
+ 	"path/filepath"
+ 
+ 	"github.com/hetznercloud/hcloud-go/hcloud"
+@@ -28,13 +27,8 @@ type AppSSHClient struct {
+ // NewAppConfig creates a new AppConfig struct using the locally saved configuration file. If no local
+ // configuration file is found a new config will be created.
+ func NewAppConfig() AppConfig {
+-	usr, err := user.Current()
+-	if err != nil {
+-		return AppConfig{}
+-	}
+-	if usr.HomeDir != "" {
+-		DefaultConfigPath = filepath.Join(usr.HomeDir, ".hetzner-kube")
+-	}
++	dir, _ := os.UserHomeDir()
++	DefaultConfigPath = filepath.Join(dir, ".hetzner-kube")
+ 
+ 	appConf := AppConfig{
+ 		Context: context.Background(),
diff --git a/nixpkgs/pkgs/applications/networking/cluster/hubble/default.nix b/nixpkgs/pkgs/applications/networking/cluster/hubble/default.nix
new file mode 100644
index 000000000000..447dbb4e8d1c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/hubble/default.nix
@@ -0,0 +1,47 @@
+{ stdenv, lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "hubble";
+  version = "0.12.0";
+
+  src = fetchFromGitHub {
+    owner = "cilium";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-QtslAJC9qPR1jnyK4SLPVv8YTxOUvrzrSA1TzEwajS8=";
+  };
+
+  vendorHash = null;
+
+  ldflags = [
+    "-s" "-w"
+    "-X github.com/cilium/hubble/pkg.GitBranch=none"
+    "-X github.com/cilium/hubble/pkg.GitHash=none"
+    "-X github.com/cilium/hubble/pkg.Version=${version}"
+  ];
+
+  # Test fails at Test_getFlowsRequestWithInvalidRawFilters in github.com/cilium/hubble/cmd/observe
+  # https://github.com/NixOS/nixpkgs/issues/178976
+  # https://github.com/cilium/hubble/pull/656
+  # https://github.com/cilium/hubble/pull/655
+  doCheck = false;
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/hubble version | grep ${version} > /dev/null
+  '';
+
+  nativeBuildInputs = [ installShellFiles ];
+  postInstall = ''
+    installShellCompletion --cmd hubble \
+      --bash <($out/bin/hubble completion bash) \
+      --fish <($out/bin/hubble completion fish) \
+      --zsh <($out/bin/hubble completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "Network, Service & Security Observability for Kubernetes using eBPF";
+    license = licenses.asl20;
+    homepage = "https://github.com/cilium/hubble/";
+    maintainers = with maintainers; [ humancalico bryanasdev000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/inframap/default.nix b/nixpkgs/pkgs/applications/networking/cluster/inframap/default.nix
new file mode 100644
index 000000000000..38307cadc765
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/inframap/default.nix
@@ -0,0 +1,30 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+buildGoModule rec {
+  pname = "inframap";
+  version = "0.6.7";
+
+  src = fetchFromGitHub {
+    owner = "cycloidio";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-Ol2FkCP7Wq7FcwOaDw9d20v4jkNIfewdMErz/kJR0/g=";
+  };
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/cycloidio/inframap/cmd.Version=${version}"
+  ];
+
+  vendorHash = "sha256-fD/u0gYfbhyYWjXtBDtL7zWRu7b7mzpLPEjB+ictP6o=";
+
+  meta = with lib; {
+    description = "Read your tfstate or HCL to generate a graph specific for each provider, showing only the resources that are most important/relevant.";
+    homepage = "https://github.com/cycloidio/inframap";
+    license = licenses.mit;
+    maintainers = with maintainers; [ urandom ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/istioctl/default.nix b/nixpkgs/pkgs/applications/networking/cluster/istioctl/default.nix
new file mode 100644
index 000000000000..a44214238309
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/istioctl/default.nix
@@ -0,0 +1,47 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "istioctl";
+  version = "1.18.2";
+
+  src = fetchFromGitHub {
+    owner = "istio";
+    repo = "istio";
+    rev = version;
+    sha256 = "sha256-eSftWXwV8W/mpxZNvUUDS27z3vU36vJj/z0/Wo5qEts=";
+  };
+  vendorHash = "sha256-tuiQ11pcfoTOu+OVey+YmU4tTOj5C7p5bKP2ylEkUug=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  # Bundle release metadata
+  ldflags = let
+    attrs = [
+      "istio.io/pkg/version.buildVersion=${version}"
+      "istio.io/pkg/version.buildStatus=Nix"
+      "istio.io/pkg/version.buildTag=${version}"
+      "istio.io/pkg/version.buildHub=docker.io/istio"
+    ];
+  in ["-s" "-w" "${lib.concatMapStringsSep " " (attr: "-X ${attr}") attrs}"];
+
+  subPackages = [ "istioctl/cmd/istioctl" ];
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/istioctl version --remote=false | grep ${version} > /dev/null
+  '';
+
+  postInstall = ''
+    $out/bin/istioctl collateral --man --bash --zsh
+    installManPage *.1
+    installShellCompletion istioctl.bash
+    installShellCompletion --zsh _istioctl
+  '';
+
+  meta = with lib; {
+    description = "Istio configuration command line utility for service operators to debug and diagnose their Istio mesh";
+    homepage = "https://istio.io/latest/docs/reference/commands/istioctl";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ bryanasdev000 veehaitch ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/jx/default.nix b/nixpkgs/pkgs/applications/networking/cluster/jx/default.nix
new file mode 100644
index 000000000000..204b08962454
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/jx/default.nix
@@ -0,0 +1,49 @@
+{ stdenv, buildGoModule, fetchFromGitHub, lib, installShellFiles }:
+
+buildGoModule rec {
+  pname = "jx";
+  version = "2.1.155";
+
+  src = fetchFromGitHub {
+    owner = "jenkins-x";
+    repo = "jx";
+    rev = "v${version}";
+    sha256 = "sha256-kwcmZSOA26XuSgNSHitGaMohalnLobabXf4z3ybSJtk=";
+  };
+
+  vendorHash = "sha256-ZtcCBXcJXX9ThzY6T0MhNfDDzRC9PYzRB1VyS4LLXLs=";
+
+  doCheck = false;
+
+  subPackages = [ "cmd/jx" ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [
+    "-s -w"
+    "-X github.com/jenkins-x/jx/pkg/version.Version=${version}"
+    "-X github.com/jenkins-x/jx/pkg/version.Revision=${src.rev}"
+    "-X github.com/jenkins-x/jx/pkg/version.GitTreeState=clean"
+  ];
+
+  postInstall = ''
+    for shell in bash zsh; do
+      $out/bin/jx completion $shell > jx.$shell
+      installShellCompletion jx.$shell
+    done
+  '';
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    description = "Command line tool for installing and using Jenkins X";
+    homepage = "https://jenkins-x.io";
+    longDescription = ''
+      Jenkins X provides automated CI+CD for Kubernetes with Preview
+      Environments on Pull Requests using Jenkins, Knative Build, Prow,
+      Skaffold and Helm.
+    '';
+    license = licenses.asl20 ;
+    maintainers = with maintainers; [ kalbasit ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/k0sctl/default.nix b/nixpkgs/pkgs/applications/networking/cluster/k0sctl/default.nix
new file mode 100644
index 000000000000..c7b66eaac77c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/k0sctl/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "k0sctl";
+  version = "0.15.5";
+
+  src = fetchFromGitHub {
+    owner = "k0sproject";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-ntjrk2OEIkAmNpf9Ag6HkSIOSA3NtO9hSJOBgvne4b0=";
+  };
+
+  vendorHash = "sha256-JlaXQqDO/b1xe9NA2JtuB1DZZlphWu3Mo/Mf4lhmKNo=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/k0sproject/k0sctl/version.Environment=production"
+    "-X github.com/carlmjohnson/versioninfo.Version=${version}"
+    "-X github.com/carlmjohnson/versioninfo.Revision=${version}"
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    for shell in bash zsh fish; do
+      installShellCompletion --cmd ${pname} \
+        --$shell <($out/bin/${pname} completion --shell $shell)
+    done
+  '';
+
+  meta = with lib; {
+    description = "A bootstrapping and management tool for k0s clusters.";
+    homepage = "https://k0sproject.io/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ nickcao qjoly ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/k3d/default.nix b/nixpkgs/pkgs/applications/networking/cluster/k3d/default.nix
new file mode 100644
index 000000000000..e74595903b51
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/k3d/default.nix
@@ -0,0 +1,74 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, k3sVersion ? null
+}:
+
+let
+  hasVPrefix = ver: (builtins.elemAt (lib.stringToCharacters ver) 0) == "v";
+  k3sVersionSet =
+    if k3sVersion != null then
+      if hasVPrefix k3sVersion then throw "k3sVersion should not have a v prefix" else true
+    else
+      false;
+in
+buildGoModule rec {
+  pname = "k3d";
+  version = "5.6.0";
+
+  src = fetchFromGitHub {
+    owner = "k3d-io";
+    repo = "k3d";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-KIYwuDPkxhtQy989XW+DcI5NJPhfLP07mYUFc180Sdw=";
+  };
+
+  vendorHash = null;
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  excludedPackages = [ "tools" "docgen" ];
+
+  ldflags =
+    let t = "github.com/k3d-io/k3d/v${lib.versions.major version}/version"; in
+    [ "-s" "-w" "-X ${t}.Version=v${version}" ] ++ lib.optionals k3sVersionSet [ "-X ${t}.K3sVersion=v${k3sVersion}" ];
+
+  preCheck = ''
+    # skip test that uses networking
+    substituteInPlace version/version_test.go \
+      --replace "TestGetK3sVersion" "SkipGetK3sVersion"
+  '';
+
+  postInstall = ''
+    installShellCompletion --cmd k3d \
+      --bash <($out/bin/k3d completion bash) \
+      --fish <($out/bin/k3d completion fish) \
+      --zsh <($out/bin/k3d completion zsh)
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+    $out/bin/k3d --help
+    $out/bin/k3d --version | grep -e "k3d version v${version}" ${lib.optionalString k3sVersionSet "-e \"k3s version v${k3sVersion}\""}
+    runHook postInstallCheck
+  '';
+
+  env.GOWORK = "off";
+
+  meta = with lib; {
+    homepage = "https://github.com/k3d-io/k3d/";
+    changelog = "https://github.com/k3d-io/k3d/blob/v${version}/CHANGELOG.md";
+    description = "A helper to run k3s (Lightweight Kubernetes. 5 less than k8s) in a docker container";
+    longDescription = ''
+      k3s is the lightweight Kubernetes distribution by Rancher: rancher/k3s
+
+      k3d creates containerized k3s clusters. This means, that you can spin up a
+      multi-node k3s cluster on a single machine using docker.
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ kuznero jlesquembre ngerstle jk ricochet ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/k3s/1_24/chart-versions.nix b/nixpkgs/pkgs/applications/networking/cluster/k3s/1_24/chart-versions.nix
new file mode 100644
index 000000000000..8c40604d0f1c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/k3s/1_24/chart-versions.nix
@@ -0,0 +1,10 @@
+{
+    traefik-crd  = {
+        url = "https://k3s.io/k3s-charts/assets/traefik-crd/traefik-crd-20.3.1+up20.3.0.tgz";
+        sha256 = "1775vjldvqvhzdbzanxhbaqbmkih09yb91im651q8bc7z5sb9ckn";
+    };
+    traefik = {
+        url = "https://k3s.io/k3s-charts/assets/traefik/traefik-20.3.1+up20.3.0.tgz";
+        sha256 = "1rj0f0n0vgjcbzfwzhqmsd501i2f6vw145w9plbp8gwdyzmg2nc6";
+    };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/k3s/1_24/default.nix b/nixpkgs/pkgs/applications/networking/cluster/k3s/1_24/default.nix
new file mode 100644
index 000000000000..6f7644dd543b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/k3s/1_24/default.nix
@@ -0,0 +1,332 @@
+{ stdenv
+, lib
+, makeWrapper
+, socat
+, iptables
+, iproute2
+, ipset
+, bridge-utils
+, btrfs-progs
+, conntrack-tools
+, buildGoModule
+, runc
+, rsync
+, kmod
+, libseccomp
+, pkg-config
+, ethtool
+, util-linux
+, fetchFromGitHub
+, fetchurl
+, fetchzip
+, fetchgit
+, zstd
+, yq-go
+, sqlite
+, nixosTests
+, k3s
+, pkgsBuildBuild
+}:
+
+# k3s is a kinda weird derivation. One of the main points of k3s is the
+# simplicity of it being one binary that can perform several tasks.
+# However, when you have a good package manager (like nix), that doesn't
+# actually make much of a difference; you don't really care if it's one binary
+# or 10 since with a good package manager, installing and running it is
+# identical.
+# Since upstream k3s packages itself as one large binary with several
+# "personalities" (in the form of subcommands like 'k3s agent' and 'k3s
+# kubectl'), it ends up being easiest to mostly mimic upstream packaging, with
+# some exceptions.
+# K3s also carries patches to some packages (such as containerd and cni
+# plugins), so we intentionally use the k3s versions of those binaries for k3s,
+# even if the upstream version of those binaries exist in nixpkgs already. In
+# the end, that means we have a thick k3s binary that behaves like the upstream
+# one for the most part.
+# However, k3s also bundles several pieces of unpatched software, from the
+# strongswan vpn software, to iptables, to socat, conntrack, busybox, etc.
+# Those pieces of software we entirely ignore upstream's handling of, and just
+# make sure they're in the path if desired.
+let
+  k3sVersion = "1.24.10+k3s1";     # k3s git tag
+  k3sCommit = "546a94e9ae1c3be6f9c0dcde32a6e6672b035bc8"; # k3s git commit at the above version
+  k3sRepoSha256 = "sha256-HfkGb3GtR2wQkVIze26aFh6A6W0fegr8ovpSel7oujQ=";
+  k3sVendorSha256 = "sha256-YAerisDr/knlKPaO2fVMZA4FUpwshFmkpi3mJAmLqKM=";
+
+  # Based on the traefik charts here: https://github.com/k3s-io/k3s/blob/v1.24.10%2Bk3s1/scripts/download#L29-L32
+  # see also https://github.com/k3s-io/k3s/blob/v1.24.10%2Bk3s1/manifests/traefik.yaml#L8-L16
+  # At the time of writing, there are two traefik charts, and that's it
+  charts = import ./chart-versions.nix;
+
+  # taken from ./scripts/version.sh VERSION_ROOT https://github.com/k3s-io/k3s/blob/v1.24.10%2Bk3s1/scripts/version.sh#L56
+  k3sRootVersion = "0.12.1";
+  k3sRootSha256 = "sha256-xCXbarWztnvW2xn3cGa84hie3OevVZeGEDWh+Uf3RBw=";
+
+  # taken from ./scripts/version.sh VERSION_CNIPLUGINS https://github.com/k3s-io/k3s/blob/v1.24.10%2Bk3s1/scripts/version.sh#L49
+  k3sCNIVersion = "1.1.1-k3s1";
+  k3sCNISha256 = "14mb3zsqibj1sn338gjmsyksbm0mxv9p016dij7zidccx2rzn6nl";
+
+  # taken from go.mod, the 'github.com/containerd/containerd' line
+  # run `grep github.com/containerd/containerd go.mod | head -n1 | awk '{print $4}'`
+  # https://github.com/k3s-io/k3s/blob/v1.24.10%2Bk3s1/go.mod#L10
+  containerdVersion = "1.5.16-k3s1";
+  containerdSha256 = "sha256-dxC44qE1A20Hd2j77Ir9Sla8xncttswWIuGGM/5FWi8=";
+
+  # run `grep github.com/kubernetes-sigs/cri-tools go.mod | head -n1 | awk '{print $4}'` in the k3s repo at the tag
+  # https://github.com/k3s-io/k3s/blob/v1.24.10%2Bk3s1/go.mod#L18
+  criCtlVersion = "1.24.0-k3s1";
+
+  baseMeta = k3s.meta;
+
+  # https://github.com/k3s-io/k3s/blob/5fb370e53e0014dc96183b8ecb2c25a61e891e76/scripts/build#L19-L40
+  versionldflags = [
+    "-X github.com/rancher/k3s/pkg/version.Version=v${k3sVersion}"
+    "-X github.com/rancher/k3s/pkg/version.GitCommit=${lib.substring 0 8 k3sCommit}"
+    "-X k8s.io/client-go/pkg/version.gitVersion=v${k3sVersion}"
+    "-X k8s.io/client-go/pkg/version.gitCommit=${k3sCommit}"
+    "-X k8s.io/client-go/pkg/version.gitTreeState=clean"
+    "-X k8s.io/client-go/pkg/version.buildDate=1970-01-01T01:01:01Z"
+    "-X k8s.io/component-base/version.gitVersion=v${k3sVersion}"
+    "-X k8s.io/component-base/version.gitCommit=${k3sCommit}"
+    "-X k8s.io/component-base/version.gitTreeState=clean"
+    "-X k8s.io/component-base/version.buildDate=1970-01-01T01:01:01Z"
+    "-X github.com/kubernetes-sigs/cri-tools/pkg/version.Version=v${criCtlVersion}"
+    "-X github.com/containerd/containerd/version.Version=v${containerdVersion}"
+    "-X github.com/containerd/containerd/version.Package=github.com/k3s-io/containerd"
+  ];
+
+  # bundled into the k3s binary
+  traefikChart = fetchurl charts.traefik;
+  traefik-crdChart = fetchurl charts.traefik-crd;
+
+  # so, k3s is a complicated thing to package
+  # This derivation attempts to avoid including any random binaries from the
+  # internet. k3s-root is _mostly_ binaries built to be bundled in k3s (which
+  # we don't care about doing, we can add those as build or runtime
+  # dependencies using a real package manager).
+  # In addition to those binaries, it's also configuration though (right now
+  # mostly strongswan configuration), and k3s does use those files.
+  # As such, we download it in order to grab 'etc' and bundle it into the final
+  # k3s binary.
+  k3sRoot = fetchzip {
+    # Note: marked as apache 2.0 license
+    url = "https://github.com/k3s-io/k3s-root/releases/download/v${k3sRootVersion}/k3s-root-amd64.tar";
+    sha256 = k3sRootSha256;
+    stripRoot = false;
+  };
+  k3sCNIPlugins = buildGoModule rec {
+    pname = "k3s-cni-plugins";
+    version = k3sCNIVersion;
+    vendorSha256 = null;
+
+    subPackages = [ "." ];
+
+    src = fetchFromGitHub {
+      owner = "rancher";
+      repo = "plugins";
+      rev = "v${version}";
+      sha256 = k3sCNISha256;
+    };
+
+    postInstall = ''
+      mv $out/bin/plugins $out/bin/cni
+    '';
+
+    meta = baseMeta // {
+      description = "CNI plugins, as patched by rancher for k3s";
+    };
+  };
+  # Grab this separately from a build because it's used by both stages of the
+  # k3s build.
+  k3sRepo = fetchgit {
+    url = "https://github.com/k3s-io/k3s";
+    rev = "v${k3sVersion}";
+    sha256 = k3sRepoSha256;
+  };
+  # Stage 1 of the k3s build:
+  # Let's talk about how k3s is structured.
+  # One of the ideas of k3s is that there's the single "k3s" binary which can
+  # do everything you need, from running a k3s server, to being a worker node,
+  # to running kubectl.
+  # The way that actually works is that k3s is a single go binary that contains
+  # a bunch of bindata that it unpacks at runtime into directories (either the
+  # user's home directory or /var/lib/rancher if run as root).
+  # This bindata includes both binaries and configuration.
+  # In order to let nixpkgs do all its autostripping/patching/etc, we split this into two derivations.
+  # First, we build all the binaries that get packed into the thick k3s binary
+  # (and output them from one derivation so they'll all be suitably patched up).
+  # Then, we bundle those binaries into our thick k3s binary and use that as
+  # the final single output.
+  # This approach was chosen because it ensures the bundled binaries all are
+  # correctly built to run with nix (we can lean on the existing buildGoModule
+  # stuff), and we can again lean on that tooling for the final k3s binary too.
+  # Other alternatives would be to manually run the
+  # strip/patchelf/remove-references step ourselves in the installPhase of the
+  # derivation when we've built all the binaries, but haven't bundled them in
+  # with generated bindata yet.
+
+  k3sServer = buildGoModule rec {
+    pname = "k3s-server";
+    version = k3sVersion;
+
+    src = k3sRepo;
+    vendorSha256 = k3sVendorSha256;
+
+    nativeBuildInputs = [ pkg-config ];
+    buildInputs = [ libseccomp sqlite.dev ];
+
+    subPackages = [ "cmd/server" ];
+    ldflags = versionldflags;
+
+    tags = [ "libsqlite3" "linux" ];
+
+    # create the multicall symlinks for k3s
+    postInstall = ''
+      mv $out/bin/server $out/bin/k3s
+      pushd $out
+      # taken verbatim from https://github.com/k3s-io/k3s/blob/v1.24.10%2Bk3s1/scripts/build#L123-L131
+      ln -s k3s ./bin/k3s-agent
+      ln -s k3s ./bin/k3s-server
+      ln -s k3s ./bin/k3s-etcd-snapshot
+      ln -s k3s ./bin/k3s-secrets-encrypt
+      ln -s k3s ./bin/k3s-certificate
+      ln -s k3s ./bin/k3s-completion
+      ln -s k3s ./bin/kubectl
+      ln -s k3s ./bin/crictl
+      ln -s k3s ./bin/ctr
+      popd
+    '';
+
+    meta = baseMeta // {
+      description = "The various binaries that get packaged into the final k3s binary";
+    };
+  };
+  k3sContainerd = buildGoModule {
+    pname = "k3s-containerd";
+    version = containerdVersion;
+    src = fetchFromGitHub {
+      owner = "k3s-io";
+      repo = "containerd";
+      rev = "v${containerdVersion}";
+      sha256 = containerdSha256;
+    };
+    vendorSha256 = null;
+    buildInputs = [ btrfs-progs ];
+    subPackages = [ "cmd/containerd" "cmd/containerd-shim-runc-v2" ];
+    ldflags = versionldflags;
+  };
+in
+buildGoModule rec {
+  pname = "k3s";
+  version = k3sVersion;
+
+  src = k3sRepo;
+  vendorSha256 = k3sVendorSha256;
+
+  postPatch = ''
+    # Nix prefers dynamically linked binaries over static binary.
+
+    substituteInPlace scripts/package-cli \
+      --replace '"$LDFLAGS $STATIC" -o' \
+                '"$LDFLAGS" -o' \
+      --replace "STATIC=\"-extldflags \'-static\'\"" \
+                ""
+
+    # Upstream codegen fails with trimpath set. Removes "trimpath" for 'go generate':
+
+    substituteInPlace scripts/package-cli \
+      --replace '"''${GO}" generate' \
+                'GOFLAGS="" \
+                 GOOS="${pkgsBuildBuild.go.GOOS}" \
+                 GOARCH="${pkgsBuildBuild.go.GOARCH}" \
+                 CC="${pkgsBuildBuild.stdenv.cc}/bin/cc" \
+                 "''${GO}" generate'
+  '';
+
+  # Important utilities used by the kubelet, see
+  # https://github.com/kubernetes/kubernetes/issues/26093#issuecomment-237202494
+  # Note the list in that issue is stale and some aren't relevant for k3s.
+  k3sRuntimeDeps = [
+    kmod
+    socat
+    iptables
+    iproute2
+    ipset
+    bridge-utils
+    ethtool
+    util-linux # kubelet wants 'nsenter' from util-linux: https://github.com/kubernetes/kubernetes/issues/26093#issuecomment-705994388
+    conntrack-tools
+  ];
+
+  buildInputs = k3sRuntimeDeps;
+
+  nativeBuildInputs = [
+    makeWrapper
+    rsync
+    yq-go
+    zstd
+  ];
+
+  # embedded in the final k3s cli
+  propagatedBuildInputs = [
+    k3sCNIPlugins
+    k3sContainerd
+    k3sServer
+    runc
+  ];
+
+  # We override most of buildPhase due to peculiarities in k3s's build.
+  # Specifically, it has a 'go generate' which runs part of the package. See
+  # this comment:
+  # https://github.com/NixOS/nixpkgs/pull/158089#discussion_r799965694
+  # So, why do we use buildGoModule at all? For the `vendorSha256` / `go mod download` stuff primarily.
+  buildPhase = ''
+    patchShebangs ./scripts/package-cli ./scripts/download ./scripts/build-upload
+
+    # copy needed 'go generate' inputs into place
+    mkdir -p ./bin/aux
+    rsync -a --no-perms ${k3sServer}/bin/ ./bin/
+    ln -vsf ${runc}/bin/runc ./bin/runc
+    ln -vsf ${k3sCNIPlugins}/bin/cni ./bin/cni
+    ln -vsf ${k3sContainerd}/bin/* ./bin/
+    rsync -a --no-perms --chmod u=rwX ${k3sRoot}/etc/ ./etc/
+    mkdir -p ./build/static/charts
+
+    cp ${traefikChart} ./build/static/charts
+    cp ${traefik-crdChart} ./build/static/charts
+
+    export ARCH=$GOARCH
+    export DRONE_TAG="v${k3sVersion}"
+    export DRONE_COMMIT="${k3sCommit}"
+    # use ./scripts/package-cli to run 'go generate' + 'go build'
+
+    ./scripts/package-cli
+    mkdir -p $out/bin
+  '';
+
+  # Otherwise it depends on 'getGoDirs', which is normally set in buildPhase
+  doCheck = false;
+
+  installPhase = ''
+    # wildcard to match the arm64 build too
+    install -m 0755 dist/artifacts/k3s* -D $out/bin/k3s
+    wrapProgram $out/bin/k3s \
+      --prefix PATH : ${lib.makeBinPath k3sRuntimeDeps} \
+      --prefix PATH : "$out/bin"
+    ln -s $out/bin/k3s $out/bin/kubectl
+    ln -s $out/bin/k3s $out/bin/crictl
+    ln -s $out/bin/k3s $out/bin/ctr
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/k3s --version | grep -F "v${k3sVersion}" >/dev/null
+  '';
+
+  # Fix-Me: Needs to be adapted specifically for 1.24
+  # passthru.updateScript = ./update.sh;
+
+  passthru.tests = k3s.passthru.mkTests k3sVersion;
+
+  meta = baseMeta;
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/k3s/1_25/0001-script-download-strip-downloading-just-package-CRD.patch b/nixpkgs/pkgs/applications/networking/cluster/k3s/1_25/0001-script-download-strip-downloading-just-package-CRD.patch
new file mode 100644
index 000000000000..115fd6824772
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/k3s/1_25/0001-script-download-strip-downloading-just-package-CRD.patch
@@ -0,0 +1,41 @@
+From 6f53bd36a40da4c71486e3b79f6e32d53d6eea5d Mon Sep 17 00:00:00 2001
+From: Euan Kemp <euank@euank.com>
+Date: Thu, 3 Feb 2022 23:50:40 -0800
+Subject: [PATCH 2/2] scrips/download: strip downloading, just package CRD
+
+The CRD packaging is a complicated set of commands, so let's reuse it.
+---
+ scripts/download | 10 ++--------
+ 1 file changed, 2 insertions(+), 8 deletions(-)
+
+diff --git a/scripts/download b/scripts/download
+index 5effc0562a..82361803ee 100755
+--- a/scripts/download
++++ b/scripts/download
+@@ -24,12 +24,6 @@ rm -rf ${CONTAINERD_DIR}
+ mkdir -p ${CHARTS_DIR}
+ mkdir -p ${DATA_DIR}
+ 
+-curl --compressed -sfL https://github.com/k3s-io/k3s-root/releases/download/${VERSION_ROOT}/k3s-root-${ARCH}.tar | tar xf - --exclude=bin/socat
+-
+-git clone --single-branch --branch=${VERSION_RUNC} --depth=1 https://github.com/opencontainers/runc ${RUNC_DIR}
+-
+-git clone --single-branch --branch=${VERSION_CONTAINERD} --depth=1 https://github.com/k3s-io/containerd ${CONTAINERD_DIR}
+-
+ setup_tmp() {
+     TMP_DIR=$(mktemp -d --tmpdir=${CHARTS_DIR})
+     cleanup() {
+@@ -44,8 +38,8 @@ setup_tmp() {
+ 
+ download_and_package_traefik () {
+   echo "Downloading Traefik Helm chart from ${TRAEFIK_URL}"
+-  curl -sfL ${TRAEFIK_URL} -o ${TMP_DIR}/${TRAEFIK_FILE}
+-  code=$?
++  # nixpkgs: copy in our known traefik chart instead
++  cp $TRAEFIK_CHART_FILE ${TMP_DIR}/${TRAEFIK_FILE}
+ 
+   if [ $code -ne 0 ]; then
+     echo "Error: Failed to download Traefik Helm chart!"
+-- 
+2.34.1
+
diff --git a/nixpkgs/pkgs/applications/networking/cluster/k3s/1_25/default.nix b/nixpkgs/pkgs/applications/networking/cluster/k3s/1_25/default.nix
new file mode 100644
index 000000000000..47c3b5886c59
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/k3s/1_25/default.nix
@@ -0,0 +1,336 @@
+{ stdenv
+, lib
+, makeWrapper
+, socat
+, iptables
+, iproute2
+, ipset
+, bridge-utils
+, btrfs-progs
+, conntrack-tools
+, buildGoModule
+, runc
+, rsync
+, kmod
+, libseccomp
+, pkg-config
+, ethtool
+, util-linux
+, fetchFromGitHub
+, fetchurl
+, fetchzip
+, fetchgit
+, zstd
+, yq-go
+, sqlite
+, nixosTests
+, pkgsBuildBuild
+, k3s
+}:
+
+# k3s is a kinda weird derivation. One of the main points of k3s is the
+# simplicity of it being one binary that can perform several tasks.
+# However, when you have a good package manager (like nix), that doesn't
+# actually make much of a difference; you don't really care if it's one binary
+# or 10 since with a good package manager, installing and running it is
+# identical.
+# Since upstream k3s packages itself as one large binary with several
+# "personalities" (in the form of subcommands like 'k3s agent' and 'k3s
+# kubectl'), it ends up being easiest to mostly mimic upstream packaging, with
+# some exceptions.
+# K3s also carries patches to some packages (such as containerd and cni
+# plugins), so we intentionally use the k3s versions of those binaries for k3s,
+# even if the upstream version of those binaries exist in nixpkgs already. In
+# the end, that means we have a thick k3s binary that behaves like the upstream
+# one for the most part.
+# However, k3s also bundles several pieces of unpatched software, from the
+# strongswan vpn software, to iptables, to socat, conntrack, busybox, etc.
+# Those pieces of software we entirely ignore upstream's handling of, and just
+# make sure they're in the path if desired.
+let
+  k3sVersion = "1.25.3+k3s1";     # k3s git tag
+  k3sCommit = "f2585c1671b31b4b34bddbb3bf4e7d69662b0821"; # k3s git commit at the above version
+  k3sRepoSha256 = "0zwf3iwjcidx14zw36s1hr0q8wmmbfc0rfqwd7fmpjq597h8zkms";
+  k3sVendorSha256 = "sha256-U67tJRGqPFk5AfRe7I50zKGC9HJ2oh+iI/C7qF/76BQ=";
+
+  # taken from ./manifests/traefik.yaml, extracted from '.spec.chart' https://github.com/k3s-io/k3s/blob/v1.23.3%2Bk3s1/scripts/download#L9
+  # The 'patch' and 'minor' versions are currently hardcoded as single digits only, so ignore the trailing two digits. Weird, I know.
+  traefikChartVersion = "12.0.0";
+  traefikChartSha256 = "1sqmi71fi3ad5dh5fmsp9mv80x6pkgqwi4r9fr8l6i9sdnai6f1a";
+
+  # taken from ./scripts/version.sh VERSION_ROOT https://github.com/k3s-io/k3s/blob/v1.23.3%2Bk3s1/scripts/version.sh#L47
+  k3sRootVersion = "0.11.0";
+  k3sRootSha256 = "016n56vi09xkvjph7wgzb2m86mhd5x65fs4d11pmh20hl249r620";
+
+  # taken from ./scripts/version.sh VERSION_CNIPLUGINS https://github.com/k3s-io/k3s/blob/v1.23.3%2Bk3s1/scripts/version.sh#L45
+  k3sCNIVersion = "1.1.1-k3s1";
+  k3sCNISha256 = "14mb3zsqibj1sn338gjmsyksbm0mxv9p016dij7zidccx2rzn6nl";
+
+  # taken from go.mod, the 'github.com/containerd/containerd' line
+  # run `grep github.com/containerd/containerd go.mod | head -n1 | awk '{print $4}'`
+  containerdVersion = "1.5.13-k3s2";
+  containerdSha256 = "1pfr2ji4aij9js90gf4a3hqnhyw5hshcjdccm62l700j68gs5z97";
+
+  # run `grep github.com/kubernetes-sigs/cri-tools go.mod | head -n1 | awk '{print $4}'` in the k3s repo at the tag
+  criCtlVersion = "1.25.0-k3s1";
+
+  baseMeta = k3s.meta;
+
+  # https://github.com/k3s-io/k3s/blob/5fb370e53e0014dc96183b8ecb2c25a61e891e76/scripts/build#L19-L40
+  versionldflags = [
+    "-X github.com/rancher/k3s/pkg/version.Version=v${k3sVersion}"
+    "-X github.com/rancher/k3s/pkg/version.GitCommit=${lib.substring 0 8 k3sCommit}"
+    "-X k8s.io/client-go/pkg/version.gitVersion=v${k3sVersion}"
+    "-X k8s.io/client-go/pkg/version.gitCommit=${k3sCommit}"
+    "-X k8s.io/client-go/pkg/version.gitTreeState=clean"
+    "-X k8s.io/client-go/pkg/version.buildDate=1970-01-01T01:01:01Z"
+    "-X k8s.io/component-base/version.gitVersion=v${k3sVersion}"
+    "-X k8s.io/component-base/version.gitCommit=${k3sCommit}"
+    "-X k8s.io/component-base/version.gitTreeState=clean"
+    "-X k8s.io/component-base/version.buildDate=1970-01-01T01:01:01Z"
+    "-X github.com/kubernetes-sigs/cri-tools/pkg/version.Version=v${criCtlVersion}"
+    "-X github.com/containerd/containerd/version.Version=v${containerdVersion}"
+    "-X github.com/containerd/containerd/version.Package=github.com/k3s-io/containerd"
+  ];
+
+  # bundled into the k3s binary
+  traefikChart = fetchurl {
+    url = "https://helm.traefik.io/traefik/traefik-${traefikChartVersion}.tgz";
+    sha256 = traefikChartSha256;
+  };
+  # so, k3s is a complicated thing to package
+  # This derivation attempts to avoid including any random binaries from the
+  # internet. k3s-root is _mostly_ binaries built to be bundled in k3s (which
+  # we don't care about doing, we can add those as build or runtime
+  # dependencies using a real package manager).
+  # In addition to those binaries, it's also configuration though (right now
+  # mostly strongswan configuration), and k3s does use those files.
+  # As such, we download it in order to grab 'etc' and bundle it into the final
+  # k3s binary.
+  k3sRoot = fetchzip {
+    # Note: marked as apache 2.0 license
+    url = "https://github.com/k3s-io/k3s-root/releases/download/v${k3sRootVersion}/k3s-root-amd64.tar";
+    sha256 = k3sRootSha256;
+    stripRoot = false;
+  };
+  k3sCNIPlugins = buildGoModule rec {
+    pname = "k3s-cni-plugins";
+    version = k3sCNIVersion;
+    vendorSha256 = null;
+
+    subPackages = [ "." ];
+
+    src = fetchFromGitHub {
+      owner = "rancher";
+      repo = "plugins";
+      rev = "v${version}";
+      sha256 = k3sCNISha256;
+    };
+
+    postInstall = ''
+      mv $out/bin/plugins $out/bin/cni
+    '';
+
+    meta = baseMeta // {
+      description = "CNI plugins, as patched by rancher for k3s";
+    };
+  };
+  # Grab this separately from a build because it's used by both stages of the
+  # k3s build.
+  k3sRepo = fetchgit {
+    url = "https://github.com/k3s-io/k3s";
+    rev = "v${k3sVersion}";
+    sha256 = k3sRepoSha256;
+  };
+  # Stage 1 of the k3s build:
+  # Let's talk about how k3s is structured.
+  # One of the ideas of k3s is that there's the single "k3s" binary which can
+  # do everything you need, from running a k3s server, to being a worker node,
+  # to running kubectl.
+  # The way that actually works is that k3s is a single go binary that contains
+  # a bunch of bindata that it unpacks at runtime into directories (either the
+  # user's home directory or /var/lib/rancher if run as root).
+  # This bindata includes both binaries and configuration.
+  # In order to let nixpkgs do all its autostripping/patching/etc, we split this into two derivations.
+  # First, we build all the binaries that get packed into the thick k3s binary
+  # (and output them from one derivation so they'll all be suitably patched up).
+  # Then, we bundle those binaries into our thick k3s binary and use that as
+  # the final single output.
+  # This approach was chosen because it ensures the bundled binaries all are
+  # correctly built to run with nix (we can lean on the existing buildGoModule
+  # stuff), and we can again lean on that tooling for the final k3s binary too.
+  # Other alternatives would be to manually run the
+  # strip/patchelf/remove-references step ourselves in the installPhase of the
+  # derivation when we've built all the binaries, but haven't bundled them in
+  # with generated bindata yet.
+
+  k3sServer = buildGoModule rec {
+    pname = "k3s-server";
+    version = k3sVersion;
+
+    src = k3sRepo;
+    vendorSha256 = k3sVendorSha256;
+
+    nativeBuildInputs = [ pkg-config ];
+    buildInputs = [ libseccomp sqlite.dev ];
+
+    subPackages = [ "cmd/server" ];
+    ldflags = versionldflags;
+
+    tags = [ "libsqlite3" "linux" ];
+
+    # create the multicall symlinks for k3s
+    postInstall = ''
+      mv $out/bin/server $out/bin/k3s
+      pushd $out
+      # taken verbatim from https://github.com/k3s-io/k3s/blob/v1.23.3%2Bk3s1/scripts/build#L105-L113
+      ln -s k3s ./bin/k3s-agent
+      ln -s k3s ./bin/k3s-server
+      ln -s k3s ./bin/k3s-etcd-snapshot
+      ln -s k3s ./bin/k3s-secrets-encrypt
+      ln -s k3s ./bin/k3s-certificate
+      ln -s k3s ./bin/kubectl
+      ln -s k3s ./bin/crictl
+      ln -s k3s ./bin/ctr
+      popd
+    '';
+
+    meta = baseMeta // {
+      description = "The various binaries that get packaged into the final k3s binary";
+    };
+  };
+  k3sContainerd = buildGoModule {
+    pname = "k3s-containerd";
+    version = containerdVersion;
+    src = fetchFromGitHub {
+      owner = "k3s-io";
+      repo = "containerd";
+      rev = "v${containerdVersion}";
+      sha256 = containerdSha256;
+    };
+    vendorSha256 = null;
+    buildInputs = [ btrfs-progs ];
+    subPackages = [ "cmd/containerd" "cmd/containerd-shim-runc-v2" ];
+    ldflags = versionldflags;
+  };
+in
+buildGoModule rec {
+  pname = "k3s";
+  version = k3sVersion;
+
+  src = k3sRepo;
+  vendorSha256 = k3sVendorSha256;
+
+  patches = [
+    ./0001-script-download-strip-downloading-just-package-CRD.patch
+  ];
+
+  postPatch = ''
+    # Nix prefers dynamically linked binaries over static binary.
+
+    substituteInPlace scripts/package-cli \
+      --replace '"$LDFLAGS $STATIC" -o' \
+                '"$LDFLAGS" -o' \
+      --replace "STATIC=\"-extldflags \'-static\'\"" \
+                ""
+
+    # Upstream codegen fails with trimpath set. Removes "trimpath" for 'go generate':
+
+    substituteInPlace scripts/package-cli \
+      --replace '"''${GO}" generate' \
+                'GOFLAGS="" \
+                 GOOS="${pkgsBuildBuild.go.GOOS}" \
+                 GOARCH="${pkgsBuildBuild.go.GOARCH}" \
+                 CC="${pkgsBuildBuild.stdenv.cc}/bin/cc" \
+                 "''${GO}" generate'
+  '';
+
+  # Important utilities used by the kubelet, see
+  # https://github.com/kubernetes/kubernetes/issues/26093#issuecomment-237202494
+  # Note the list in that issue is stale and some aren't relevant for k3s.
+  k3sRuntimeDeps = [
+    kmod
+    socat
+    iptables
+    iproute2
+    ipset
+    bridge-utils
+    ethtool
+    util-linux # kubelet wants 'nsenter' from util-linux: https://github.com/kubernetes/kubernetes/issues/26093#issuecomment-705994388
+    conntrack-tools
+  ];
+
+  buildInputs = k3sRuntimeDeps;
+
+  nativeBuildInputs = [
+    makeWrapper
+    rsync
+    yq-go
+    zstd
+  ];
+
+  # embedded in the final k3s cli
+  propagatedBuildInputs = [
+    k3sCNIPlugins
+    k3sContainerd
+    k3sServer
+    runc
+  ];
+
+  # We override most of buildPhase due to peculiarities in k3s's build.
+  # Specifically, it has a 'go generate' which runs part of the package. See
+  # this comment:
+  # https://github.com/NixOS/nixpkgs/pull/158089#discussion_r799965694
+  # So, why do we use buildGoModule at all? For the `vendorSha256` / `go mod download` stuff primarily.
+  buildPhase = ''
+    patchShebangs ./scripts/package-cli ./scripts/download ./scripts/build-upload
+
+    # copy needed 'go generate' inputs into place
+    mkdir -p ./bin/aux
+    rsync -a --no-perms ${k3sServer}/bin/ ./bin/
+    ln -vsf ${runc}/bin/runc ./bin/runc
+    ln -vsf ${k3sCNIPlugins}/bin/cni ./bin/cni
+    ln -vsf ${k3sContainerd}/bin/* ./bin/
+    rsync -a --no-perms --chmod u=rwX ${k3sRoot}/etc/ ./etc/
+    mkdir -p ./build/static/charts
+    # Note, upstream's chart has a 00 suffix. This seems to not matter though, so we're ignoring that naming detail.
+    export TRAEFIK_CHART_FILE=${traefikChart}
+    # place the traefik chart using their code since it's complicated
+    # We trim the actual download, see patches
+    ./scripts/download
+
+    export ARCH=$GOARCH
+    export DRONE_TAG="v${k3sVersion}"
+    export DRONE_COMMIT="${k3sCommit}"
+    # use ./scripts/package-cli to run 'go generate' + 'go build'
+
+    ./scripts/package-cli
+    mkdir -p $out/bin
+  '';
+
+  # Otherwise it depends on 'getGoDirs', which is normally set in buildPhase
+  doCheck = false;
+
+  installPhase = ''
+    # wildcard to match the arm64 build too
+    install -m 0755 dist/artifacts/k3s* -D $out/bin/k3s
+    wrapProgram $out/bin/k3s \
+      --prefix PATH : ${lib.makeBinPath k3sRuntimeDeps} \
+      --prefix PATH : "$out/bin"
+    ln -s $out/bin/k3s $out/bin/kubectl
+    ln -s $out/bin/k3s $out/bin/crictl
+    ln -s $out/bin/k3s $out/bin/ctr
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/k3s --version | grep -F "v${k3sVersion}" >/dev/null
+  '';
+
+  # Fix-Me: Needs to be adapted specifically for 1.25
+  # passthru.updateScript = ./update.sh;
+
+  passthru.tests = k3s.passthru.mkTests k3sVersion;
+
+  meta = baseMeta;
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/k3s/1_26/chart-versions.nix b/nixpkgs/pkgs/applications/networking/cluster/k3s/1_26/chart-versions.nix
new file mode 100644
index 000000000000..d3ff99358af2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/k3s/1_26/chart-versions.nix
@@ -0,0 +1,10 @@
+{
+    traefik-crd  = {
+        url = "https://k3s.io/k3s-charts/assets/traefik-crd/traefik-crd-21.2.1+up21.2.0.tgz";
+        sha256 = "05j3vyikb7g2z2i07rij9h4ki5lb2hb2rynpiqfd4l1y5qm0qhw9";
+    };
+    traefik = {
+        url = "https://k3s.io/k3s-charts/assets/traefik/traefik-21.2.1+up21.2.0.tgz";
+        sha256 = "0gvz0yzph2893scd0q10b938yc7f36b3zqs57pkjgqqpl1d0nwhg";
+    };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/k3s/1_26/versions.nix b/nixpkgs/pkgs/applications/networking/cluster/k3s/1_26/versions.nix
new file mode 100644
index 000000000000..799fd3f9b1db
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/k3s/1_26/versions.nix
@@ -0,0 +1,14 @@
+{
+  k3sVersion = "1.26.6+k3s1";
+  k3sCommit = "3b1919b0d55811707bd1168f0abf11cccc656c26";
+  k3sRepoSha256 = "1g82bkq4w0jpfn1fanj1d24bj46rw908wk50p3cm47rqiqlys72y";
+  k3sVendorSha256 = "sha256-+a9/q5a28zA9SmAdp2IItHR1MdJvlbMW5796bHTfKBw=";
+  chartVersions = import ./chart-versions.nix;
+  k3sRootVersion = "0.12.2";
+  k3sRootSha256 = "1gjynvr350qni5mskgm7pcc7alss4gms4jmkiv453vs8mmma9c9k";
+  k3sCNIVersion = "1.2.0-k3s1";
+  k3sCNISha256 = "0hzcap4vbl94zsiqc66dlwjgql50gw5g6f0adag0p8yqwcy6vaw2";
+  containerdVersion = "1.7.1-k3s1";
+  containerdSha256 = "00k7nkclfxwbzcgnn8s7rkrxyn0zpk57nyy18icf23wsj352gfrn";
+  criCtlVersion = "1.26.0-rc.0-k3s1";
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/k3s/1_27/chart-versions.nix b/nixpkgs/pkgs/applications/networking/cluster/k3s/1_27/chart-versions.nix
new file mode 100644
index 000000000000..d3ff99358af2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/k3s/1_27/chart-versions.nix
@@ -0,0 +1,10 @@
+{
+    traefik-crd  = {
+        url = "https://k3s.io/k3s-charts/assets/traefik-crd/traefik-crd-21.2.1+up21.2.0.tgz";
+        sha256 = "05j3vyikb7g2z2i07rij9h4ki5lb2hb2rynpiqfd4l1y5qm0qhw9";
+    };
+    traefik = {
+        url = "https://k3s.io/k3s-charts/assets/traefik/traefik-21.2.1+up21.2.0.tgz";
+        sha256 = "0gvz0yzph2893scd0q10b938yc7f36b3zqs57pkjgqqpl1d0nwhg";
+    };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/k3s/1_27/versions.nix b/nixpkgs/pkgs/applications/networking/cluster/k3s/1_27/versions.nix
new file mode 100644
index 000000000000..257b8e28a868
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/k3s/1_27/versions.nix
@@ -0,0 +1,14 @@
+{
+  k3sVersion = "1.27.4+k3s1";
+  k3sCommit = "36645e7311e9bdbbf2adb79ecd8bd68556bc86f6";
+  k3sRepoSha256 = "0nvh66c4c01kcz63vk2arh0cd9kcss7c83r92ds6f15x1fxv1w3z";
+  k3sVendorSha256 = "sha256-azHl2jv/ioI7FVWpgtp7a1dmO9Dlr4CnRmGCIh5Biyg=";
+  chartVersions = import ./chart-versions.nix;
+  k3sRootVersion = "0.12.2";
+  k3sRootSha256 = "1gjynvr350qni5mskgm7pcc7alss4gms4jmkiv453vs8mmma9c9k";
+  k3sCNIVersion = "1.2.0-k3s1";
+  k3sCNISha256 = "0hzcap4vbl94zsiqc66dlwjgql50gw5g6f0adag0p8yqwcy6vaw2";
+  containerdVersion = "1.7.1-k3s1";
+  containerdSha256 = "00k7nkclfxwbzcgnn8s7rkrxyn0zpk57nyy18icf23wsj352gfrn";
+  criCtlVersion = "1.26.0-rc.0-k3s1";
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/k3s/README.md b/nixpkgs/pkgs/applications/networking/cluster/k3s/README.md
new file mode 100644
index 000000000000..2e16de7bfa6d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/k3s/README.md
@@ -0,0 +1,73 @@
+# k3s versions
+
+K3s, Kubernetes, and other clustered software has the property of not being able to update atomically. Most software in nixpkgs, like for example bash, can be updated as part of a "nixos-rebuild switch" without having to worry about the old and the new bash interacting in some way.
+
+K3s/Kubernetes, on the other hand, is typically run across several NixOS machines, and each NixOS machine is updated independently. As such, different versions of the package and NixOS module must maintain compatibility with each other through temporary version skew during updates.
+
+The upstream Kubernetes project [documents this in their version-skew policy](https://kubernetes.io/releases/version-skew-policy/#supported-component-upgrade-order).
+
+Within nixpkgs, we strive to maintain a valid "upgrade path" that does not run
+afoul of the upstream version skew policy.
+
+## Upstream release cadence and support
+
+K3s is built on top of K8s, and typically provides a similar release cadence and support window (simply by cherry-picking over k8s patches). As such, we assume k3s's support lifecycle is identical to upstream K8s.
+
+This is documented upstream [here](https://kubernetes.io/releases/patch-releases/#support-period).
+
+In short, a new Kubernetes version is released roughly every 4 months, and each release is supported for a little over 1 year.
+
+Any version that is not supported by upstream should be dropped from nixpkgs.
+
+## Versions in NixOS releases
+
+NixOS releases should avoid having deprecated software, or making major version upgrades, wherever possible.
+
+As such, we would like to have only the newest K3s version in each NixOS
+release at the time the release branch is branched off, which will ensure the
+K3s version in that release will receieve updates for the longest duration
+possible.
+
+However, this conflicts with another desire: we would like people to be able to upgrade between NixOS stable releases without needing to make a large enough k3s version jump that they violate the Kubernetes version skew policy.
+
+To give an example, we may have the following timeline for k8s releases:
+
+(Note, the exact versions and dates may be wrong, this is an illustrative example, reality may differ).
+
+```mermaid
+gitGraph
+    branch k8s
+    commit
+    branch "k8s-1.24"
+    checkout "k8s-1.24"
+    commit id: "1.24.0" tag: "2022-05-03"
+    branch "k8s-1.25"
+    checkout "k8s-1.25"
+    commit id: "1.25.0" tag: "2022-08-23"
+    branch "k8s-1.26"
+    checkout "k8s-1.26"
+    commit id: "1.26.0" tag: "2022-12-08"
+    checkout k8s-1.24
+    commit id: "1.24-EOL" tag: "2023-07-28"
+    checkout k8s-1.25
+    commit id: "1.25-EOL" tag: "2023-10-27"
+    checkout k8s-1.26
+    commit id: "1.26-EOL" tag: "2024-02-28"
+```
+
+(Note: the above graph will render if you view this markdown on GitHub, or when using [mermaid](https://mermaid.js.org/))
+
+In this scenario even though k3s 1.24 is still technically supported when the NixOS 23.05
+release is cut, since it goes EOL before the NixOS 23.11 release is made, we would
+not want to include it. Similarly, k3s 1.25 would go EOL before NixOS 23.11.
+
+As such, we should only include k3s 1.26 in the 23.05 release.
+
+We can then make a similar argument when NixOS 23.11 comes around to not
+include k3s 1.26 or 1.27. However, that means someone upgrading from the NixOS
+22.05 release to the NixOS 23.11 would not have a supported upgrade path.
+
+In order to resolve this issue, we propose backporting not just new patch releases to older NixOS releases, but also new k3s versions, up to one version before the first version that is included in the next NixOS release.
+
+In the above example, where NixOS 23.05 included k3s 1.26, and 23.11 included k3s 1.28, that means we would backport 1.27 to the NixOS 23.05 release, and backport all patches for 1.26 and 1.27.
+This would allow someone to upgrade between those NixOS releases in a supported configuration.
diff --git a/nixpkgs/pkgs/applications/networking/cluster/k3s/builder.nix b/nixpkgs/pkgs/applications/networking/cluster/k3s/builder.nix
new file mode 100644
index 000000000000..9605ff9f9476
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/k3s/builder.nix
@@ -0,0 +1,354 @@
+lib:
+{
+  # git tag
+  k3sVersion,
+  # commit hash
+  k3sCommit,
+  k3sRepoSha256 ? lib.fakeHash,
+  k3sVendorSha256 ? lib.fakeHash,
+  # taken from ./scripts/version.sh VERSION_ROOT https://github.com/k3s-io/k3s/blob/v1.23.3%2Bk3s1/scripts/version.sh#L47
+  k3sRootVersion,
+  k3sRootSha256 ? lib.fakeHash,
+  # Based on the traefik charts here: https://github.com/k3s-io/k3s/blob/d71ab6317e22dd34673faa307a412a37a16767f6/scripts/download#L29-L32
+  # see also https://github.com/k3s-io/k3s/blob/d71ab6317e22dd34673faa307a412a37a16767f6/manifests/traefik.yaml#L8
+  chartVersions,
+  # taken from ./scripts/version.sh VERSION_CNIPLUGINS https://github.com/k3s-io/k3s/blob/v1.23.3%2Bk3s1/scripts/version.sh#L45
+  k3sCNIVersion,
+  k3sCNISha256 ? lib.fakeHash,
+  # taken from ./scripts/version.sh VERSION_CONTAINERD
+  containerdVersion,
+  containerdSha256 ? lib.fakeHash,
+  # run `grep github.com/kubernetes-sigs/cri-tools go.mod | head -n1 | awk '{print $4}'` in the k3s repo at the tag
+  criCtlVersion,
+  updateScript ? null,
+}:
+
+# builder.nix contains a "builder" expression that, given k3s version and hash
+# variables, creates a package for that version.
+# Due to variance in k3s's build process, this builder only works for k3s 1.26+
+# currently.
+# It is likely we will have to split out additional builders for additional
+# versions in the future, or customize this one further.
+{ lib
+, makeWrapper
+, socat
+, iptables
+, iproute2
+, ipset
+, bridge-utils
+, btrfs-progs
+, conntrack-tools
+, buildGoModule
+, runc
+, rsync
+, kmod
+, libseccomp
+, pkg-config
+, ethtool
+, util-linux
+, fetchFromGitHub
+, fetchurl
+, fetchzip
+, fetchgit
+, zstd
+, yq-go
+, sqlite
+, nixosTests
+, pkgsBuildBuild
+}:
+
+# k3s is a kinda weird derivation. One of the main points of k3s is the
+# simplicity of it being one binary that can perform several tasks.
+# However, when you have a good package manager (like nix), that doesn't
+# actually make much of a difference; you don't really care if it's one binary
+# or 10 since with a good package manager, installing and running it is
+# identical.
+# Since upstream k3s packages itself as one large binary with several
+# "personalities" (in the form of subcommands like 'k3s agent' and 'k3s
+# kubectl'), it ends up being easiest to mostly mimic upstream packaging, with
+# some exceptions.
+# K3s also carries patches to some packages (such as containerd and cni
+# plugins), so we intentionally use the k3s versions of those binaries for k3s,
+# even if the upstream version of those binaries exist in nixpkgs already. In
+# the end, that means we have a thick k3s binary that behaves like the upstream
+# one for the most part.
+# However, k3s also bundles several pieces of unpatched software, from the
+# strongswan vpn software, to iptables, to socat, conntrack, busybox, etc.
+# Those pieces of software we entirely ignore upstream's handling of, and just
+# make sure they're in the path if desired.
+let
+
+  baseMeta = with lib; {
+    description = "A lightweight Kubernetes distribution";
+    license = licenses.asl20;
+    homepage = "https://k3s.io";
+    maintainers = with maintainers; [ euank mic92 yajo ];
+    platforms = platforms.linux;
+
+    # resolves collisions with other installations of kubectl, crictl, ctr
+    # prefer non-k3s versions
+    priority = 5;
+  };
+
+  # https://github.com/k3s-io/k3s/blob/5fb370e53e0014dc96183b8ecb2c25a61e891e76/scripts/build#L19-L40
+  versionldflags = [
+    "-X github.com/rancher/k3s/pkg/version.Version=v${k3sVersion}"
+    "-X github.com/rancher/k3s/pkg/version.GitCommit=${lib.substring 0 8 k3sCommit}"
+    "-X k8s.io/client-go/pkg/version.gitVersion=v${k3sVersion}"
+    "-X k8s.io/client-go/pkg/version.gitCommit=${k3sCommit}"
+    "-X k8s.io/client-go/pkg/version.gitTreeState=clean"
+    "-X k8s.io/client-go/pkg/version.buildDate=1970-01-01T01:01:01Z"
+    "-X k8s.io/component-base/version.gitVersion=v${k3sVersion}"
+    "-X k8s.io/component-base/version.gitCommit=${k3sCommit}"
+    "-X k8s.io/component-base/version.gitTreeState=clean"
+    "-X k8s.io/component-base/version.buildDate=1970-01-01T01:01:01Z"
+    "-X github.com/kubernetes-sigs/cri-tools/pkg/version.Version=v${criCtlVersion}"
+    "-X github.com/containerd/containerd/version.Version=v${containerdVersion}"
+    "-X github.com/containerd/containerd/version.Package=github.com/k3s-io/containerd"
+  ];
+
+  # bundled into the k3s binary
+  traefikChart = fetchurl chartVersions.traefik;
+  traefik-crdChart = fetchurl chartVersions.traefik-crd;
+
+  # so, k3s is a complicated thing to package
+  # This derivation attempts to avoid including any random binaries from the
+  # internet. k3s-root is _mostly_ binaries built to be bundled in k3s (which
+  # we don't care about doing, we can add those as build or runtime
+  # dependencies using a real package manager).
+  # In addition to those binaries, it's also configuration though (right now
+  # mostly strongswan configuration), and k3s does use those files.
+  # As such, we download it in order to grab 'etc' and bundle it into the final
+  # k3s binary.
+  k3sRoot = fetchzip {
+    # Note: marked as apache 2.0 license
+    url = "https://github.com/k3s-io/k3s-root/releases/download/v${k3sRootVersion}/k3s-root-amd64.tar";
+    sha256 = k3sRootSha256;
+    stripRoot = false;
+  };
+  k3sCNIPlugins = buildGoModule rec {
+    pname = "k3s-cni-plugins";
+    version = k3sCNIVersion;
+    vendorSha256 = null;
+
+    subPackages = [ "." ];
+
+    src = fetchFromGitHub {
+      owner = "rancher";
+      repo = "plugins";
+      rev = "v${version}";
+      sha256 = k3sCNISha256;
+    };
+
+    postInstall = ''
+      mv $out/bin/plugins $out/bin/cni
+    '';
+
+    meta = baseMeta // {
+      description = "CNI plugins, as patched by rancher for k3s";
+    };
+  };
+  # Grab this separately from a build because it's used by both stages of the
+  # k3s build.
+  k3sRepo = fetchgit {
+    url = "https://github.com/k3s-io/k3s";
+    rev = "v${k3sVersion}";
+    sha256 = k3sRepoSha256;
+  };
+  # Stage 1 of the k3s build:
+  # Let's talk about how k3s is structured.
+  # One of the ideas of k3s is that there's the single "k3s" binary which can
+  # do everything you need, from running a k3s server, to being a worker node,
+  # to running kubectl.
+  # The way that actually works is that k3s is a single go binary that contains
+  # a bunch of bindata that it unpacks at runtime into directories (either the
+  # user's home directory or /var/lib/rancher if run as root).
+  # This bindata includes both binaries and configuration.
+  # In order to let nixpkgs do all its autostripping/patching/etc, we split this into two derivations.
+  # First, we build all the binaries that get packed into the thick k3s binary
+  # (and output them from one derivation so they'll all be suitably patched up).
+  # Then, we bundle those binaries into our thick k3s binary and use that as
+  # the final single output.
+  # This approach was chosen because it ensures the bundled binaries all are
+  # correctly built to run with nix (we can lean on the existing buildGoModule
+  # stuff), and we can again lean on that tooling for the final k3s binary too.
+  # Other alternatives would be to manually run the
+  # strip/patchelf/remove-references step ourselves in the installPhase of the
+  # derivation when we've built all the binaries, but haven't bundled them in
+  # with generated bindata yet.
+
+  k3sServer = buildGoModule {
+    pname = "k3s-server";
+    version = k3sVersion;
+
+    src = k3sRepo;
+    vendorSha256 = k3sVendorSha256;
+
+    nativeBuildInputs = [ pkg-config ];
+    buildInputs = [ libseccomp sqlite.dev ];
+
+    subPackages = [ "cmd/server" ];
+    ldflags = versionldflags;
+
+    tags = [ "ctrd" "libsqlite3" "linux" ];
+
+    # create the multicall symlinks for k3s
+    postInstall = ''
+      mv $out/bin/server $out/bin/k3s
+      pushd $out
+      # taken verbatim from https://github.com/k3s-io/k3s/blob/v1.23.3%2Bk3s1/scripts/build#L105-L113
+      ln -s k3s ./bin/containerd
+      ln -s k3s ./bin/crictl
+      ln -s k3s ./bin/ctr
+      ln -s k3s ./bin/k3s-agent
+      ln -s k3s ./bin/k3s-certificate
+      ln -s k3s ./bin/k3s-completion
+      ln -s k3s ./bin/k3s-etcd-snapshot
+      ln -s k3s ./bin/k3s-secrets-encrypt
+      ln -s k3s ./bin/k3s-server
+      ln -s k3s ./bin/k3s-token
+      ln -s k3s ./bin/kubectl
+      popd
+    '';
+
+    meta = baseMeta // {
+      description = "The various binaries that get packaged into the final k3s binary";
+    };
+  };
+  # Only used for the shim since
+  # https://github.com/k3s-io/k3s/blob/v1.27.2%2Bk3s1/scripts/build#L153
+  k3sContainerd = buildGoModule {
+    pname = "k3s-containerd";
+    version = containerdVersion;
+    src = fetchFromGitHub {
+      owner = "k3s-io";
+      repo = "containerd";
+      rev = "v${containerdVersion}";
+      sha256 = containerdSha256;
+    };
+    vendorSha256 = null;
+    buildInputs = [ btrfs-progs ];
+    subPackages = [ "cmd/containerd-shim-runc-v2" ];
+    ldflags = versionldflags;
+  };
+in
+buildGoModule rec {
+  pname = "k3s";
+  version = k3sVersion;
+
+  tags = [ "libsqlite3" "linux" "ctrd" ];
+  src = k3sRepo;
+  vendorSha256 = k3sVendorSha256;
+
+  postPatch = ''
+    # Nix prefers dynamically linked binaries over static binary.
+
+    substituteInPlace scripts/package-cli \
+      --replace '"$LDFLAGS $STATIC" -o' \
+                '"$LDFLAGS" -o' \
+      --replace "STATIC=\"-extldflags \'-static\'\"" \
+                ""
+
+    # Upstream codegen fails with trimpath set. Removes "trimpath" for 'go generate':
+
+    substituteInPlace scripts/package-cli \
+      --replace '"''${GO}" generate' \
+                'GOFLAGS="" \
+                 GOOS="${pkgsBuildBuild.go.GOOS}" \
+                 GOARCH="${pkgsBuildBuild.go.GOARCH}" \
+                 CC="${pkgsBuildBuild.stdenv.cc}/bin/cc" \
+                 "''${GO}" generate'
+  '';
+
+  # Important utilities used by the kubelet, see
+  # https://github.com/kubernetes/kubernetes/issues/26093#issuecomment-237202494
+  # Note the list in that issue is stale and some aren't relevant for k3s.
+  k3sRuntimeDeps = [
+    kmod
+    socat
+    iptables
+    iproute2
+    ipset
+    bridge-utils
+    ethtool
+    util-linux # kubelet wants 'nsenter' from util-linux: https://github.com/kubernetes/kubernetes/issues/26093#issuecomment-705994388
+    conntrack-tools
+    runc
+  ];
+
+  buildInputs = k3sRuntimeDeps;
+
+  nativeBuildInputs = [
+    makeWrapper
+    rsync
+    yq-go
+    zstd
+  ];
+
+  # embedded in the final k3s cli
+  propagatedBuildInputs = [
+    k3sCNIPlugins
+    k3sContainerd
+    k3sServer
+  ];
+
+  # We override most of buildPhase due to peculiarities in k3s's build.
+  # Specifically, it has a 'go generate' which runs part of the package. See
+  # this comment:
+  # https://github.com/NixOS/nixpkgs/pull/158089#discussion_r799965694
+  # So, why do we use buildGoModule at all? For the `vendorSha256` / `go mod download` stuff primarily.
+  buildPhase = ''
+    patchShebangs ./scripts/package-cli ./scripts/download ./scripts/build-upload
+
+    # copy needed 'go generate' inputs into place
+    mkdir -p ./bin/aux
+    rsync -a --no-perms ${k3sServer}/bin/ ./bin/
+    ln -vsf ${k3sCNIPlugins}/bin/cni ./bin/cni
+    ln -vsf ${k3sContainerd}/bin/containerd-shim-runc-v2 ./bin
+    rsync -a --no-perms --chmod u=rwX ${k3sRoot}/etc/ ./etc/
+    mkdir -p ./build/static/charts
+
+    cp ${traefikChart} ./build/static/charts
+    cp ${traefik-crdChart} ./build/static/charts
+
+    export ARCH=$GOARCH
+    export DRONE_TAG="v${k3sVersion}"
+    export DRONE_COMMIT="${k3sCommit}"
+    # use ./scripts/package-cli to run 'go generate' + 'go build'
+
+    ./scripts/package-cli
+    mkdir -p $out/bin
+  '';
+
+  # Otherwise it depends on 'getGoDirs', which is normally set in buildPhase
+  doCheck = false;
+
+  installPhase = ''
+    # wildcard to match the arm64 build too
+    install -m 0755 dist/artifacts/k3s* -D $out/bin/k3s
+    wrapProgram $out/bin/k3s \
+      --prefix PATH : ${lib.makeBinPath k3sRuntimeDeps} \
+      --prefix PATH : "$out/bin"
+    ln -s $out/bin/k3s $out/bin/kubectl
+    ln -s $out/bin/k3s $out/bin/crictl
+    ln -s $out/bin/k3s $out/bin/ctr
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/k3s --version | grep -F "v${k3sVersion}" >/dev/null
+  '';
+
+  passthru.updateScript = updateScript;
+
+  passthru.mkTests = version:
+    let k3s_version = "k3s_" + lib.replaceStrings ["."] ["_"] (lib.versions.majorMinor version);
+    in {
+      single-node = nixosTests.k3s.single-node.${k3s_version};
+      multi-node = nixosTests.k3s.multi-node.${k3s_version};
+    };
+  passthru.tests = passthru.mkTests k3sVersion;
+
+
+  meta = baseMeta;
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/k3s/default.nix b/nixpkgs/pkgs/applications/networking/cluster/k3s/default.nix
new file mode 100644
index 000000000000..503a4ff0c0d1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/k3s/default.nix
@@ -0,0 +1,16 @@
+{ lib, stdenv, callPackage }:
+
+let
+  k3s_builder = import ./builder.nix lib;
+  common = opts: callPackage (k3s_builder opts);
+in
+{
+  k3s_1_26 = common ((import ./1_26/versions.nix) // {
+    updateScript = [ ./update-script.sh "26" ];
+  }) { };
+
+  # 1_27 can be built with the same builder as 1_26
+  k3s_1_27 = common ((import ./1_27/versions.nix) // {
+    updateScript = [ ./update-script.sh "27" ];
+  }) { };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/k3s/update-script.sh b/nixpkgs/pkgs/applications/networking/cluster/k3s/update-script.sh
new file mode 100755
index 000000000000..d1dad25b07a4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/k3s/update-script.sh
@@ -0,0 +1,137 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl gnugrep gnused jq yq-go nix-prefetch
+
+set -x -eu -o pipefail
+
+MINOR_VERSION="${1:?Must provide a minor version number, like '26', as the only argument}"
+
+WORKDIR=$(mktemp -d)
+trap "rm -rf ${WORKDIR}" EXIT
+
+NIXPKGS_ROOT="$(git rev-parse --show-toplevel)"/
+NIXPKGS_K3S_PATH=$(cd $(dirname ${BASH_SOURCE[0]}); pwd -P)/
+cd ${NIXPKGS_K3S_PATH}
+
+cd 1_${MINOR_VERSION}
+
+
+LATEST_TAG_RAWFILE=${WORKDIR}/latest_tag.json
+curl --silent -f ${GITHUB_TOKEN:+-u ":$GITHUB_TOKEN"} \
+    https://api.github.com/repos/k3s-io/k3s/releases > ${LATEST_TAG_RAWFILE}
+
+LATEST_TAG_NAME=$(jq 'map(.tag_name)' ${LATEST_TAG_RAWFILE} | \
+    grep -v -e rc -e engine | tail -n +2 | head -n -1 | sed 's|[", ]||g' | sort -rV | grep -E "^v1\.${MINOR_VERSION}\." | head -n1)
+
+K3S_VERSION=$(echo ${LATEST_TAG_NAME} | sed 's/^v//')
+
+K3S_COMMIT=$(curl --silent -f ${GITHUB_TOKEN:+-u ":$GITHUB_TOKEN"} \
+    https://api.github.com/repos/k3s-io/k3s/tags \
+    | jq -r "map(select(.name == \"${LATEST_TAG_NAME}\")) | .[0] | .commit.sha")
+
+K3S_REPO_SHA256=$(nix-prefetch-url --quiet --unpack https://github.com/k3s-io/k3s/archive/refs/tags/${LATEST_TAG_NAME}.tar.gz)
+
+FILE_SCRIPTS_DOWNLOAD=${WORKDIR}/scripts-download
+curl --silent -f https://raw.githubusercontent.com/k3s-io/k3s/${K3S_COMMIT}/scripts/download > $FILE_SCRIPTS_DOWNLOAD
+
+FILE_SCRIPTS_VERSION=${WORKDIR}/scripts-version.sh
+curl --silent -f https://raw.githubusercontent.com/k3s-io/k3s/${K3S_COMMIT}/scripts/version.sh > $FILE_SCRIPTS_VERSION
+
+FILE_TRAEFIK_MANIFEST=${WORKDIR}/traefik.yml
+curl --silent -f -o "$FILE_TRAEFIK_MANIFEST" https://raw.githubusercontent.com/k3s-io/k3s/${K3S_COMMIT}/manifests/traefik.yaml
+
+CHART_FILES=( $(yq eval --no-doc .spec.chart "$FILE_TRAEFIK_MANIFEST" | xargs -n1 basename) )
+# These files are:
+#   1. traefik-crd-20.3.1+up20.3.0.tgz
+#   2. traefik-20.3.1+up20.3.0.tgz
+# at the time of writing
+
+if [[ "${#CHART_FILES[@]}" != "2" ]]; then
+    echo "New manifest charts added, the packaging scripts will need to be updated: ${CHART_FILES}"
+    exit 1
+fi
+
+CHARTS_URL=https://k3s.io/k3s-charts/assets
+# Get metadata for both files
+rm -f chart-versions.nix.update
+cat > chart-versions.nix.update <<EOF
+{
+    traefik-crd  = {
+        url = "${CHARTS_URL}/traefik-crd/${CHART_FILES[0]}";
+        sha256 = "$(nix-prefetch-url --quiet "${CHARTS_URL}/traefik-crd/${CHART_FILES[0]}")";
+    };
+    traefik = {
+        url = "${CHARTS_URL}/traefik/${CHART_FILES[1]}";
+        sha256 = "$(nix-prefetch-url --quiet "${CHARTS_URL}/traefik/${CHART_FILES[1]}")";
+    };
+}
+EOF
+mv chart-versions.nix.update chart-versions.nix
+
+FILE_GO_MOD=${WORKDIR}/go.mod
+curl --silent https://raw.githubusercontent.com/k3s-io/k3s/${K3S_COMMIT}/go.mod > $FILE_GO_MOD
+
+
+K3S_ROOT_VERSION=$(grep 'VERSION_ROOT=' ${FILE_SCRIPTS_VERSION} \
+    | cut -d'=' -f2 | sed -e 's/"//g' -e 's/^v//')
+K3S_ROOT_SHA256=$(nix-prefetch-url --quiet --unpack \
+    "https://github.com/k3s-io/k3s-root/releases/download/v${K3S_ROOT_VERSION}/k3s-root-amd64.tar")
+
+CNIPLUGINS_VERSION=$(grep 'VERSION_CNIPLUGINS=' ${FILE_SCRIPTS_VERSION} \
+    | cut -d'=' -f2 | sed -e 's/"//g' -e 's/^v//')
+CNIPLUGINS_SHA256=$(nix-prefetch-url --quiet --unpack \
+    "https://github.com/rancher/plugins/archive/refs/tags/v${CNIPLUGINS_VERSION}.tar.gz")
+
+# mimics https://github.com/k3s-io/k3s/blob/v1.26.5%2Bk3s1/scripts/version.sh#L25
+CONTAINERD_VERSION=$(grep github.com/containerd/containerd ${FILE_GO_MOD} \
+    | head -n1 | awk '{print $4}' | sed -e 's/^v//')
+CONTAINERD_SHA256=$(nix-prefetch-url --quiet --unpack \
+    "https://github.com/k3s-io/containerd/archive/refs/tags/v${CONTAINERD_VERSION}.tar.gz")
+
+CRI_CTL_VERSION=$(grep github.com/kubernetes-sigs/cri-tools ${FILE_GO_MOD} \
+    | head -n1 | awk '{print $4}' | sed -e 's/"//g' -e 's/^v//')
+
+setKV () {
+    sed -i "s|$1 = \".*\"|$1 = \"${2:-}\"|" ${NIXPKGS_K3S_PATH}default.nix
+}
+
+FAKE_HASH="sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";
+
+cat >versions.nix <<EOF
+{
+  k3sVersion = "${K3S_VERSION}";
+  k3sCommit = "${K3S_COMMIT}";
+  k3sRepoSha256 = "${K3S_REPO_SHA256}";
+  k3sVendorSha256 = "${FAKE_HASH}";
+  chartVersions = import ./chart-versions.nix;
+  k3sRootVersion = "${K3S_ROOT_VERSION}";
+  k3sRootSha256 = "${K3S_ROOT_SHA256}";
+  k3sCNIVersion = "${CNIPLUGINS_VERSION}";
+  k3sCNISha256 = "${CNIPLUGINS_SHA256}";
+  containerdVersion = "${CONTAINERD_VERSION}";
+  containerdSha256 = "${CONTAINERD_SHA256}";
+  criCtlVersion = "${CRI_CTL_VERSION}";
+}
+EOF
+
+set +e
+K3S_VENDOR_SHA256=$(nix-prefetch -I nixpkgs=${NIXPKGS_ROOT} "{ sha256 }: (import ${NIXPKGS_ROOT}. {}).k3s_1_${MINOR_VERSION}.goModules.overrideAttrs (_: { vendorSha256 = sha256; })")
+set -e
+
+if [ -n "${K3S_VENDOR_SHA256:-}" ]; then
+    sed -i "s|${FAKE_HASH}|${K3S_VENDOR_SHA256}|g" ./versions.nix
+else
+    echo "Update failed. K3S_VENDOR_SHA256 is empty."
+    exit 1
+fi
+
+# Implement commit
+# See https://nixos.org/manual/nixpkgs/stable/#var-passthru-updateScript-commit
+OLD_VERSION="$(nix-instantiate --eval -E "with import $NIXPKGS_ROOT. {}; k3s.version or (builtins.parseDrvName k3s.name).version" | tr -d '"')"
+cat <<EOF
+[{
+    "attrPath": "k3s_1_${MINOR_VERSION}",
+    "oldVersion": "$OLD_VERSION",
+    "newVersion": "$K3S_VERSION",
+    "files": ["$PWD/versions.nix","$PWD/chart-versions.nix"]
+}]
+EOF
diff --git a/nixpkgs/pkgs/applications/networking/cluster/k3sup/default.nix b/nixpkgs/pkgs/applications/networking/cluster/k3sup/default.nix
new file mode 100644
index 000000000000..c45970ddeef8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/k3sup/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, makeWrapper
+, installShellFiles
+, bash
+, openssh
+}:
+
+buildGoModule rec {
+  pname = "k3sup";
+  version = "0.13.0";
+
+  src = fetchFromGitHub {
+    owner = "alexellis";
+    repo = "k3sup";
+    rev = version;
+    sha256 = "sha256-GppNYNqX/YqRtCYQIe3t2x6eNJCZc/yi6F2xHvA3YXE=";
+  };
+
+  nativeBuildInputs = [ makeWrapper installShellFiles ];
+
+  vendorHash = null;
+
+  postConfigure = ''
+    substituteInPlace vendor/github.com/alexellis/go-execute/pkg/v1/exec.go \
+      --replace "/bin/bash" "${bash}/bin/bash"
+  '';
+
+  CGO_ENABLED = 0;
+
+  ldflags = [
+    "-s" "-w"
+    "-X github.com/alexellis/k3sup/cmd.GitCommit=ref/tags/${version}"
+    "-X github.com/alexellis/k3sup/cmd.Version=${version}"
+  ];
+
+  postInstall = ''
+    wrapProgram "$out/bin/k3sup" \
+      --prefix PATH : ${lib.makeBinPath [ openssh ]}
+
+    installShellCompletion --cmd k3sup \
+      --bash <($out/bin/k3sup completion bash) \
+      --zsh <($out/bin/k3sup completion zsh) \
+      --fish <($out/bin/k3sup completion fish)
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/alexellis/k3sup";
+    description = "Bootstrap Kubernetes with k3s over SSH";
+    license = licenses.mit;
+    maintainers = with maintainers; [ welteki qjoly ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/k8sgpt/default.nix b/nixpkgs/pkgs/applications/networking/cluster/k8sgpt/default.nix
new file mode 100644
index 000000000000..81e2408528be
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/k8sgpt/default.nix
@@ -0,0 +1,32 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "k8sgpt";
+  version = "0.3.14";
+
+  src = fetchFromGitHub {
+    owner = "k8sgpt-ai";
+    repo = "k8sgpt";
+    rev = "v${version}";
+    hash = "sha256-n1bWAx3BQxgiuhDdTb2HU1DSEBQqOP/ek9bJBZlbWEM=";
+  };
+
+  vendorHash = "sha256-FUgIziVI99kL3dLJLqVFPEmQqLKXxAMie2q46sp0PeU=";
+
+  CGO_ENABLED = 0;
+
+  ldflags = [
+    "-s" "-w"
+    "-X main.version=v${version}"
+    "-X main.commit=${src.rev}"
+    "-X main.date=1970-01-01-00:00:01"
+  ];
+
+  meta = with lib; {
+    description = "Giving Kubernetes Superpowers to everyone";
+    homepage = "https://k8sgpt.ai";
+    changelog = "https://github.com/k8sgpt-ai/k8sgpt/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ developer-guy kranurag7 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/k9s/default.nix b/nixpkgs/pkgs/applications/networking/cluster/k9s/default.nix
new file mode 100644
index 000000000000..bcd553c117a6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/k9s/default.nix
@@ -0,0 +1,51 @@
+{ stdenv, lib, buildGoModule, fetchFromGitHub, installShellFiles, testers, k9s }:
+
+buildGoModule rec {
+  pname = "k9s";
+  version = "0.27.4";
+
+  src = fetchFromGitHub {
+    owner  = "derailed";
+    repo   = "k9s";
+    rev    = "v${version}";
+    sha256 = "sha256-SMdpjeMerIEc0oeNe0SfZyc3yQTq6eif1fDLICNceKY=";
+  };
+
+  ldflags = [
+    "-s" "-w"
+    "-X github.com/derailed/k9s/cmd.version=${version}"
+    "-X github.com/derailed/k9s/cmd.commit=${src.rev}"
+    "-X github.com/derailed/k9s/cmd.date=1970-01-01T00:00:00Z"
+  ];
+
+  tags = [ "netgo" ];
+
+  vendorHash = "sha256-wh4WjfDBX9xdtF9fBjSLPBbqb6k8H/LpWO9eTn86le4=";
+
+  # TODO investigate why some config tests are failing
+  doCheck = !(stdenv.isDarwin && stdenv.isAarch64);
+  # Required to workaround test check error:
+  preCheck = "export HOME=$(mktemp -d)";
+  # For arch != x86
+  # {"level":"fatal","error":"could not create any of the following paths: /homeless-shelter/.config, /etc/xdg","time":"2022-06-28T15:52:36Z","message":"Unable to create configuration directory for k9s"}
+  passthru.tests.version = testers.testVersion {
+    package = k9s;
+    command = "HOME=$(mktemp -d) k9s version -s";
+    inherit version;
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+  postInstall = ''
+    installShellCompletion --cmd k9s \
+      --bash <($out/bin/k9s completion bash) \
+      --fish <($out/bin/k9s completion fish) \
+      --zsh <($out/bin/k9s completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "Kubernetes CLI To Manage Your Clusters In Style";
+    homepage = "https://github.com/derailed/k9s";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ Gonzih markus1189 bryanasdev000 qjoly ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kanif/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kanif/default.nix
new file mode 100644
index 000000000000..b4bb69dc1f62
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kanif/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchurl, perl , taktuk}:
+
+stdenv.mkDerivation rec {
+  version = "1.2.2";
+  pname = "kanif";
+
+  src = fetchurl {
+    url = "https://gforge.inria.fr/frs/download.php/26773/${pname}-${version}.tar.gz";
+    sha256 = "3f0c549428dfe88457c1db293cfac2a22b203f872904c3abf372651ac12e5879";
+  };
+
+  preBuild = ''
+      substituteInPlace ./kanif --replace "/usr/bin/perl" "${perl}/bin/perl"
+      substituteInPlace ./kanif --replace '$taktuk_command = "taktuk";' '$taktuk_command = "${taktuk}/bin/taktuk";'
+  '';
+
+  meta = {
+    description = "Cluster management and administration swiss army knife";
+    longDescription = ''
+      Kanif is a tool for high performance computing clusters management and
+      administration. It combines the main functionalities of well-known cluster
+      management tools such as c3, pdsh and dsh, and mimics their syntax. It
+      provides three tools to run the same command on several nodes ("parallel
+      ssh", using the 'kash' command), to broadcast the copy of files or
+      directories to several nodes ('kaput' command), and to gather several
+      remote files or directories locally ('kaget' command). It relies on TakTuk
+      for efficiency and scalability.'';
+    homepage = "http://taktuk.gforge.inria.fr/kanif";
+    license = lib.licenses.gpl2;
+    maintainers = [ lib.maintainers.bzizou ];
+    platforms = lib.platforms.linux;
+  };
+
+}
+
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kaniko/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kaniko/default.nix
new file mode 100644
index 000000000000..7c6c76edc0c4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kaniko/default.nix
@@ -0,0 +1,53 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, buildGoModule
+, installShellFiles
+, testers
+, kaniko
+}:
+
+buildGoModule rec {
+  pname = "kaniko";
+  version = "1.15.0";
+
+  src = fetchFromGitHub {
+    owner = "GoogleContainerTools";
+    repo = "kaniko";
+    rev = "v${version}";
+    hash = "sha256-PNAqdeB/ya3i1hRbagpfmpwS0tNRZbWBm9YIXME1HMc=";
+  };
+
+  vendorHash = null;
+
+  ldflags = [
+    "-s" "-w"
+    "-X github.com/GoogleContainerTools/kaniko/pkg/version.version=${version}"
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  doCheck = false; # requires docker, container-diff (unpackaged yet)
+
+  postInstall = lib.optionalString (stdenv.hostPlatform == stdenv.buildPlatform) ''
+    for shell in bash fish zsh; do
+      $out/bin/executor completion $shell > executor.$shell
+      installShellCompletion executor.$shell
+    done
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = kaniko;
+    version = version;
+    command = "${kaniko}/bin/executor version";
+  };
+
+  meta = {
+    description = "A tool to build container images from a Dockerfile, inside a container or Kubernetes cluster";
+    homepage = "https://github.com/GoogleContainerTools/kaniko";
+    license = lib.licenses.asl20;
+    platforms = lib.platforms.linux;
+    maintainers = with lib.maintainers; [ jk qjoly ];
+    mainProgram = "executor";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/karmor/default.nix b/nixpkgs/pkgs/applications/networking/cluster/karmor/default.nix
new file mode 100644
index 000000000000..b3b480015156
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/karmor/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, testers
+, karmor
+}:
+
+buildGoModule rec {
+  pname = "karmor";
+  version = "0.13.16";
+
+  src = fetchFromGitHub {
+    owner = "kubearmor";
+    repo = "kubearmor-client";
+    rev = "v${version}";
+    hash = "sha256-MEP7OlmsPe5qpdFBEOzCsJqLdZ5t7bMwPE/JhP9bGTY=";
+  };
+
+  vendorHash = "sha256-5r5UqWRmqrLcpTeYpezGxIMj9JnPaohhd1i7VvaBVGM=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=github.com/kubearmor/kubearmor-client/selfupdate.BuildDate=1970-01-01"
+    "-X=github.com/kubearmor/kubearmor-client/selfupdate.GitSummary=${version}"
+  ];
+
+  # integration tests require network access
+  doCheck = false;
+
+  postInstall = ''
+    mv $out/bin/{kubearmor-client,karmor}
+    installShellCompletion --cmd karmor \
+      --bash <($out/bin/karmor completion bash) \
+      --fish <($out/bin/karmor completion fish) \
+      --zsh  <($out/bin/karmor completion zsh)
+  '';
+
+  passthru.tests = {
+    version = testers.testVersion {
+      package = karmor;
+      command = "karmor version || true";
+    };
+  };
+
+  meta = with lib; {
+    description = "A client tool to help manage KubeArmor";
+    homepage = "https://kubearmor.io";
+    changelog = "https://github.com/kubearmor/kubearmor-client/releases/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ urandom kashw2 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kbst/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kbst/default.nix
new file mode 100644
index 000000000000..30207b07457f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kbst/default.nix
@@ -0,0 +1,40 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "kbst";
+  version = "0.2.1";
+
+  src = fetchFromGitHub{
+    owner = "kbst";
+    repo = "kbst";
+    rev = "v${version}";
+    hash = "sha256-tbSYNJp/gzEz+wEAe3bvIiZL5axZvW+bxqTOBkYSpMY=";
+  };
+
+  vendorHash = "sha256-+FY6KGX606CfTVKM1HeHxCm9PkaqfnT5XeOEXUX3Q5I=";
+
+  ldflags =
+    let package_url = "github.com/kbst/kbst"; in
+    [
+      "-s" "-w"
+      "-X ${package_url}.version=${version}"
+      "-X ${package_url}.buildDate=unknown"
+      "-X ${package_url}.gitCommit=${src.rev}"
+      "-X ${package_url}.gitTag=v${version}"
+      "-X ${package_url}.gitTreeState=clean"
+    ];
+
+  doCheck = false;
+
+  doPostInstallCheck = true;
+  PostInstallCheckPhase = ''
+    $out/bin/kbst help | grep v${version} > /dev/null
+  '';
+
+  meta = with lib; {
+    description = "Kubestack framework CLI";
+    homepage = "https://www.kubestack.com/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ mtrsk ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kconf/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kconf/default.nix
new file mode 100644
index 000000000000..78ff236085e5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kconf/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "kconf";
+  version = "1.12.0";
+
+  src = fetchFromGitHub {
+    owner = "particledecay";
+    repo = "kconf";
+    rev = "v${version}";
+    sha256 = "sha256-aEZTwXccKZDXRNWr4XS2ZpqtEnNGbsIVau8zPvaHTkk=";
+  };
+
+  vendorHash = "sha256-7mzk2OP1p8FfRsbs4B6XP/szBeckm7Q7hf8AkbZUG2Q=";
+
+  ldflags = [
+      "-s" "-w" "-X github.com/particledecay/kconf/build.Version=${version}"
+  ];
+
+  meta = with lib; {
+    description = "An opinionated command line tool for managing multiple kubeconfigs";
+    homepage = "https://github.com/particledecay/kconf";
+    license = licenses.mit;
+    maintainers = with maintainers; [ thmzlt ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kfilt/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kfilt/default.nix
new file mode 100644
index 000000000000..dd85bd8bbddc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kfilt/default.nix
@@ -0,0 +1,31 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "kfilt";
+  version = "0.0.8";
+
+  src = fetchFromGitHub {
+    owner = "ryane";
+    repo = "kfilt";
+    rev = "v${version}";
+    hash = "sha256-TUhZKf4fJyJF/qDmvs4jqAMVTXN4MXE+YLc4FcOVlwo=";
+  };
+
+  vendorHash = "sha256-c77CzpE9cPyobt87uO0QlkKD+xC/tM7wOy4orM62tnI=";
+
+  subPackages = [ "." ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/ryane/kfilt/cmd.Version=${version}"
+    "-X github.com/ryane/kfilt/cmd.GitCommit=${src.rev}"
+  ];
+
+  meta = {
+    description = "Command-line tool that filters Kubernetes resources";
+    homepage = "https://github.com/ryane/kfilt";
+    license = lib.licenses.asl20;
+    maintainers = [ lib.maintainers.ryane ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kluctl/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kluctl/default.nix
new file mode 100644
index 000000000000..0dff89cad4b0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kluctl/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, buildGoModule, fetchFromGitHub, testers, kluctl }:
+
+buildGoModule rec {
+  pname = "kluctl";
+  version = "2.20.8";
+
+  src = fetchFromGitHub {
+    owner = "kluctl";
+    repo = "kluctl";
+    rev = "v${version}";
+    hash = "sha256-F4vEHzN44+d0EtfJukEq5WVm8aLVWqmT5Xcpa/DBPng=";
+  };
+
+  vendorHash = "sha256-x5Zy8H7DzxU+uBCUL6edv8x2LwiIjXl5UrRUMDtUEk8=";
+
+  ldflags = [ "-s" "-w" "-X main.version=v${version}" ];
+
+  # Depends on docker
+  doCheck = false;
+
+  passthru.tests.version = testers.testVersion {
+    package = kluctl;
+    version = "v${version}";
+  };
+
+  postInstall = ''
+    mv $out/bin/{cmd,kluctl}
+  '';
+
+  meta = with lib; {
+    description = "The missing glue to put together large Kubernetes deployments";
+    homepage = "https://kluctl.io/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ sikmir ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kn/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kn/default.nix
new file mode 100644
index 000000000000..ce4a5e83c6f4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kn/default.nix
@@ -0,0 +1,44 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "kn";
+  version = "1.11.0";
+
+  src = fetchFromGitHub {
+    owner = "knative";
+    repo = "client";
+    rev = "knative-v${version}";
+    sha256 = "sha256-Aiu8SedWCP2yIw51+aVEFcskJKee8RvUcW6yGtagSnI=";
+  };
+
+  vendorHash = null;
+
+  subPackages = [ "cmd/kn" ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [
+    "-X knative.dev/client/pkg/kn/commands/version.Version=v${version}"
+    "-X knative.dev/client/pkg/kn/commands/version.VersionEventing=v${version}"
+    "-X knative.dev/client/pkg/kn/commands/version.VersionServing=v${version}"
+  ];
+
+  postInstall = ''
+    installShellCompletion --cmd kn \
+      --bash <($out/bin/kn completion bash) \
+      --zsh <($out/bin/kn completion zsh)
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/kn version | grep ${version} > /dev/null
+  '';
+
+  meta = with lib; {
+    description = "The Knative client kn is your door to the Knative world. It allows you to create Knative resources interactively from the command line or from within scripts";
+    homepage = "https://github.com/knative/client";
+    changelog = "https://github.com/knative/client/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ bryanasdev000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kns/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kns/default.nix
new file mode 100644
index 000000000000..522209d59183
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kns/default.nix
@@ -0,0 +1,38 @@
+{ stdenvNoCC
+, lib
+, fetchFromGitHub
+, fzf
+, kubectl
+}:
+stdenvNoCC.mkDerivation {
+  pname = "kns";
+  version = "unstable-2023-04-25";
+
+  src = fetchFromGitHub {
+    owner = "blendle";
+    repo = "kns";
+    rev = "86502949c31432bd95895cfb26d1c5893c533d5c";
+    hash = "sha256-8AR/fEKPAfiKCZrp/AyJo3Ic8dH7SfncYZSdQA2GywQ=";
+  };
+
+  strictDeps = true;
+
+  buildInputs = [ fzf kubectl ];
+
+  installPhase = ''
+    runHook preInstall
+
+    substituteInPlace bin/kns bin/ktx --replace fzf ${fzf}/bin/fzf --replace kubectl ${kubectl}/bin/kubectl
+    install -D -m755 -t $out/bin bin/kns bin/ktx
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Kubernetes namespace switcher";
+    homepage = "https://github.com/blendle/kns";
+    license = licenses.isc;
+    maintainers = with maintainers; [ mmlb ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kompose/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kompose/default.nix
new file mode 100644
index 000000000000..c1df35b75dc6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kompose/default.nix
@@ -0,0 +1,47 @@
+{ lib, buildGoModule, fetchFromGitHub, fetchpatch, installShellFiles, testers, kompose, git }:
+
+buildGoModule rec {
+  pname = "kompose";
+  version = "1.26.1";
+
+  src = fetchFromGitHub {
+    owner = "kubernetes";
+    repo = "kompose";
+    rev = "v${version}";
+    sha256 = "sha256-NfzqGG5ZwPpmjhvcvXN1AA+kfZG/oujbAEtXkm1mzeU=";
+  };
+
+  vendorHash = "sha256-/i4R50heqf0v2F2GTZCKGq10+xKKr+zPkqWKa+afue8=";
+
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/kubernetes/kompose/commit/0964a7ccd16504b6e5ef49a07978c87cca803d46.patch";
+      hash = "sha256-NMHLxx7Ae6Z+pacj538ivxIby7rNz3IbfDPbeLA0sMc=";
+    })
+  ];
+
+  nativeBuildInputs = [ installShellFiles git ];
+
+  ldflags = [ "-s" "-w" ];
+
+  checkFlags = [ "-short" ];
+
+  postInstall = ''
+    for shell in bash zsh; do
+      $out/bin/kompose completion $shell > kompose.$shell
+      installShellCompletion kompose.$shell
+    done
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = kompose;
+    command = "kompose version";
+  };
+
+  meta = with lib; {
+    description = "A tool to help users who are familiar with docker-compose move to Kubernetes";
+    homepage = "https://kompose.io";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ thpham vdemeester ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kontemplate/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kontemplate/default.nix
new file mode 100644
index 000000000000..10c161f45d05
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kontemplate/default.nix
@@ -0,0 +1,34 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "kontemplate";
+  version       = "1.8.0";
+  goPackagePath = "github.com/tazjin/kontemplate";
+  goDeps        = ./deps.nix;
+
+  src = fetchFromGitHub {
+    owner  = "tazjin";
+    repo   = "kontemplate";
+    rev    = "v${version}";
+    sha256 = "123mjmmm4hynraq1fpn3j5i0a1i87l265kkjraxxxbl0zacv74i1";
+  };
+
+  meta = with lib; {
+    description      = "Extremely simple Kubernetes resource templates";
+    homepage         = "http://kontemplate.works";
+    downloadPage     = "https://github.com/tazjin/kontemplate/releases";
+    license          = licenses.gpl3;
+    maintainers      = with maintainers; [ mbode tazjin ];
+    platforms        = platforms.unix;
+
+    longDescription = ''
+      Kontemplate is a simple CLI tool that can take sets of
+      Kubernetes resource files with placeholders and insert values
+      per environment.
+
+      It can be used as a simple way of deploying the same set of
+      resources to different Kubernetes contexts with context-specific
+      configuration.
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kontemplate/deps.nix b/nixpkgs/pkgs/applications/networking/cluster/kontemplate/deps.nix
new file mode 100644
index 000000000000..7693968bd550
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kontemplate/deps.nix
@@ -0,0 +1,111 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.3.0
+[
+  {
+    goPackagePath = "github.com/Masterminds/goutils";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Masterminds/goutils";
+      rev = "41ac8693c5c10a92ea1ff5ac3a7f95646f6123b0";
+      sha256 = "180px47gj936qyk5bkv5mbbgiil9abdjq6kwkf7sq70vyi9mcfiq";
+    };
+  }
+  {
+    goPackagePath = "github.com/Masterminds/semver";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Masterminds/semver";
+      rev = "5bc3b9184d48f1412b300b87a200cf020d9254cf";
+      sha256 = "1vdfm653v50jf63cw0kg2hslx50cn4mk6lj3p51bi11jrg48kfng";
+    };
+  }
+  {
+    goPackagePath = "github.com/Masterminds/sprig";
+    fetch = {
+      type = "git";
+      url = "https://github.com/Masterminds/sprig";
+      rev = "6f509977777c33eae63b2136d97f7b976cb971cc";
+      sha256 = "05h9k6fhjxnpwlihj3z02q9kvqvnq53jix0ab84sx0666bci3cdh";
+    };
+  }
+  {
+    goPackagePath = "github.com/alecthomas/template";
+    fetch = {
+      type = "git";
+      url = "https://github.com/alecthomas/template";
+      rev = "fb15b899a75114aa79cc930e33c46b577cc664b1";
+      sha256 = "1vlasv4dgycydh5wx6jdcvz40zdv90zz1h7836z7lhsi2ymvii26";
+    };
+  }
+  {
+    goPackagePath = "github.com/alecthomas/units";
+    fetch = {
+      type = "git";
+      url = "https://github.com/alecthomas/units";
+      rev = "c3de453c63f4bdb4dadffab9805ec00426c505f7";
+      sha256 = "0js37zlgv37y61j4a2d46jh72xm5kxmpaiw0ya9v944bjpc386my";
+    };
+  }
+  {
+    goPackagePath = "github.com/ghodss/yaml";
+    fetch = {
+      type = "git";
+      url = "https://github.com/ghodss/yaml";
+      rev = "25d852aebe32c875e9c044af3eef9c7dc6bc777f";
+      sha256 = "1w9yq0bxzygc4qwkwwiy7k1k1yviaspcqqv18255k2xkjv5ipccz";
+    };
+  }
+  {
+    goPackagePath = "github.com/google/uuid";
+    fetch = {
+      type = "git";
+      url = "https://github.com/google/uuid";
+      rev = "c2e93f3ae59f2904160ceaab466009f965df46d6";
+      sha256 = "0zw8fvl6jqg0fmv6kmvhss0g4gkrbvgyvl2zgy5wdbdlgp4fja0h";
+    };
+  }
+  {
+    goPackagePath = "github.com/huandu/xstrings";
+    fetch = {
+      type = "git";
+      url = "https://github.com/huandu/xstrings";
+      rev = "8bbcf2f9ccb55755e748b7644164cd4bdce94c1d";
+      sha256 = "1ivvc95514z63k7cpz71l0dwlanffmsh1pijhaqmp41kfiby8rsx";
+    };
+  }
+  {
+    goPackagePath = "github.com/imdario/mergo";
+    fetch = {
+      type = "git";
+      url = "https://github.com/imdario/mergo";
+      rev = "4c317f2286be3bd0c4f1a0e622edc6398ec4656d";
+      sha256 = "0bihha1qsgfjk14yv1hwddv3d8dzxpbjlaxwwyys6lhgxz1cr9h9";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev = "9756ffdc24725223350eb3266ffb92590d28f278";
+      sha256 = "0q7hxaaq6lp0v8qqzifvysl47z5rfdlrxkh3d29vsl3wyby3dxl8";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/alecthomas/kingpin.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/alecthomas/kingpin.v2";
+      rev = "947dcec5ba9c011838740e680966fd7087a71d0d";
+      sha256 = "0mndnv3hdngr3bxp7yxfd47cas4prv98sqw534mx7vp38gd88n5r";
+    };
+  }
+  {
+    goPackagePath = "gopkg.in/yaml.v2";
+    fetch = {
+      type = "git";
+      url = "https://gopkg.in/yaml.v2";
+      rev = "51d6538a90f86fe93ac480b35f37b2be17fef232";
+      sha256 = "01wj12jzsdqlnidpyjssmj0r4yavlqy7dwrg7adqd8dicjc4ncsa";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kops/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kops/default.nix
new file mode 100644
index 000000000000..9494729b68d7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kops/default.nix
@@ -0,0 +1,68 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+let
+  generic = { version, sha256, rev ? version, ... }@attrs:
+    let attrs' = builtins.removeAttrs attrs [ "version" "sha256" "rev" ]; in
+    buildGoModule
+      {
+        pname = "kops";
+        inherit version;
+
+        src = fetchFromGitHub {
+          rev = rev;
+          owner = "kubernetes";
+          repo = "kops";
+          inherit sha256;
+        };
+
+        vendorHash = null;
+
+        nativeBuildInputs = [ installShellFiles ];
+
+        subPackages = [ "cmd/kops" ];
+
+        ldflags = [
+          "-s"
+          "-w"
+          "-X k8s.io/kops.Version=${version}"
+          "-X k8s.io/kops.GitVersion=${version}"
+        ];
+
+        doCheck = false;
+
+        postInstall = ''
+          installShellCompletion --cmd kops \
+            --bash <($GOPATH/bin/kops completion bash) \
+            --fish <($GOPATH/bin/kops completion fish) \
+            --zsh <($GOPATH/bin/kops completion zsh)
+        '';
+
+        meta = with lib; {
+          description = "Easiest way to get a production Kubernetes up and running";
+          homepage = "https://github.com/kubernetes/kops";
+          changelog = "https://github.com/kubernetes/kops/tree/master/docs/releases";
+          license = licenses.asl20;
+          maintainers = with maintainers; [ offline zimbatm diegolelis yurrriq ];
+        };
+      } // attrs';
+in
+rec {
+  mkKops = generic;
+
+  kops_1_25 = mkKops rec {
+    version = "1.25.4";
+    sha256 = "sha256-Q40d62D+H7CpLmrjweCy75U3LgnHEV2pFZs2Ze+koqo=";
+    rev = "v${version}";
+  };
+
+  kops_1_26 = mkKops rec {
+    version = "1.26.5";
+    sha256 = "sha256-DbKzqfcQCHP3ZWJQcRhPDkKVzHB/MkcfukguUDG4UQg=";
+    rev = "v${version}";
+  };
+
+  kops_1_27 = mkKops rec {
+    version = "1.27.1";
+    sha256 = "sha256-WV+0380yj8GHckY4PDM3WspbZ/YuYZOAQEMd2ygEOjo=";
+    rev = "v${version}";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kpt/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kpt/default.nix
new file mode 100644
index 000000000000..ff5c8588ccee
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kpt/default.nix
@@ -0,0 +1,27 @@
+{ buildGoModule, fetchFromGitHub, lib, stdenv }:
+
+buildGoModule rec {
+  pname = "kpt";
+  version = "0.39.3";
+
+  src = fetchFromGitHub {
+    owner = "GoogleContainerTools";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-vidrKfmP0Lw6EYYufLDxh3ROOJ3hPIusDTI/Hr73NYM=";
+  };
+
+  vendorHash = "sha256-CoXlUX9hkP8gijA/vg19AS9030w95A2oKGD1wjzO8ak=";
+
+  subPackages = [ "." ];
+
+  ldflags = [ "-s" "-w" "-X github.com/GoogleContainerTools/kpt/run.version=${version}" ];
+
+  meta = with lib; {
+    description = "A toolkit to help you manage, manipulate, customize, and apply Kubernetes Resource configuration data files";
+    homepage = "https://googlecontainertools.github.io/kpt/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ mikefaille ];
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/krane/Gemfile b/nixpkgs/pkgs/applications/networking/cluster/krane/Gemfile
new file mode 100644
index 000000000000..94ff895ab390
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/krane/Gemfile
@@ -0,0 +1,3 @@
+source 'https://rubygems.org'
+
+gem 'krane'
diff --git a/nixpkgs/pkgs/applications/networking/cluster/krane/Gemfile.lock b/nixpkgs/pkgs/applications/networking/cluster/krane/Gemfile.lock
new file mode 100644
index 000000000000..5a930bf2c99e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/krane/Gemfile.lock
@@ -0,0 +1,101 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    activesupport (7.0.7.2)
+      concurrent-ruby (~> 1.0, >= 1.0.2)
+      i18n (>= 1.6, < 2)
+      minitest (>= 5.1)
+      tzinfo (~> 2.0)
+    addressable (2.8.5)
+      public_suffix (>= 2.0.2, < 6.0)
+    colorize (0.8.1)
+    concurrent-ruby (1.2.2)
+    domain_name (0.5.20190701)
+      unf (>= 0.0.5, < 1.0.0)
+    ejson (1.4.1)
+    faraday (2.7.10)
+      faraday-net_http (>= 2.0, < 3.1)
+      ruby2_keywords (>= 0.0.4)
+    faraday-net_http (3.0.2)
+    ffi (1.15.5)
+    ffi-compiler (1.0.1)
+      ffi (>= 1.0.0)
+      rake
+    googleauth (1.7.0)
+      faraday (>= 0.17.3, < 3.a)
+      jwt (>= 1.4, < 3.0)
+      memoist (~> 0.16)
+      multi_json (~> 1.11)
+      os (>= 0.9, < 2.0)
+      signet (>= 0.16, < 2.a)
+    http (5.1.1)
+      addressable (~> 2.8)
+      http-cookie (~> 1.0)
+      http-form_data (~> 2.2)
+      llhttp-ffi (~> 0.4.0)
+    http-accept (1.7.0)
+    http-cookie (1.0.5)
+      domain_name (~> 0.5)
+    http-form_data (2.3.0)
+    i18n (1.14.1)
+      concurrent-ruby (~> 1.0)
+    jsonpath (1.1.3)
+      multi_json
+    jwt (2.7.1)
+    krane (3.3.0)
+      activesupport (>= 5.0)
+      colorize (~> 0.8)
+      concurrent-ruby (~> 1.1)
+      ejson (~> 1.0)
+      googleauth (~> 1.2)
+      jsonpath (~> 1.0)
+      kubeclient (~> 4.9)
+      multi_json
+      statsd-instrument (>= 2.8, < 4)
+      thor (>= 1.0, < 2.0)
+    kubeclient (4.11.0)
+      http (>= 3.0, < 6.0)
+      jsonpath (~> 1.0)
+      recursive-open-struct (~> 1.1, >= 1.1.1)
+      rest-client (~> 2.0)
+    llhttp-ffi (0.4.0)
+      ffi-compiler (~> 1.0)
+      rake (~> 13.0)
+    memoist (0.16.2)
+    mime-types (3.5.1)
+      mime-types-data (~> 3.2015)
+    mime-types-data (3.2023.0808)
+    minitest (5.19.0)
+    multi_json (1.15.0)
+    netrc (0.11.0)
+    os (1.1.4)
+    public_suffix (5.0.3)
+    rake (13.0.6)
+    recursive-open-struct (1.1.3)
+    rest-client (2.1.0)
+      http-accept (>= 1.7.0, < 2.0)
+      http-cookie (>= 1.0.2, < 2.0)
+      mime-types (>= 1.16, < 4.0)
+      netrc (~> 0.8)
+    ruby2_keywords (0.0.5)
+    signet (0.17.0)
+      addressable (~> 2.8)
+      faraday (>= 0.17.5, < 3.a)
+      jwt (>= 1.5, < 3.0)
+      multi_json (~> 1.10)
+    statsd-instrument (3.5.11)
+    thor (1.2.2)
+    tzinfo (2.0.6)
+      concurrent-ruby (~> 1.0)
+    unf (0.1.4)
+      unf_ext
+    unf_ext (0.0.8.2)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  krane
+
+BUNDLED WITH
+   2.4.18
diff --git a/nixpkgs/pkgs/applications/networking/cluster/krane/default.nix b/nixpkgs/pkgs/applications/networking/cluster/krane/default.nix
new file mode 100644
index 000000000000..cc9d19fd8152
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/krane/default.nix
@@ -0,0 +1,19 @@
+{ lib
+, bundlerApp
+, bundlerUpdateScript
+}:
+
+bundlerApp {
+  pname = "krane";
+  gemdir = ./.;
+  exes = [ "krane" ];
+
+  passthru.updateScript = bundlerUpdateScript "krane";
+
+  meta = with lib; {
+    description = "A command-line tool that helps you ship changes to a Kubernetes namespace and understand the result";
+    homepage = "https://github.com/Shopify/krane";
+    license = licenses.mit;
+    maintainers = with maintainers; [ kira-bruneau ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/krane/gemset.nix b/nixpkgs/pkgs/applications/networking/cluster/krane/gemset.nix
new file mode 100644
index 000000000000..50c859eb7223
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/krane/gemset.nix
@@ -0,0 +1,410 @@
+{
+  activesupport = {
+    dependencies = ["concurrent-ruby" "i18n" "minitest" "tzinfo"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vlzcnyqlbchaq85phmdv73ydlc18xpvxy1cbsk191cwd29i7q32";
+      type = "gem";
+    };
+    version = "7.0.7.2";
+  };
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05r1fwy487klqkya7vzia8hnklcxy4vr92m9dmni3prfwk6zpw33";
+      type = "gem";
+    };
+    version = "2.8.5";
+  };
+  colorize = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "133rqj85n400qk6g3dhf2bmfws34mak1wqihvh3bgy9jhajw580b";
+      type = "gem";
+    };
+    version = "0.8.1";
+  };
+  concurrent-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0krcwb6mn0iklajwngwsg850nk8k9b35dhmc2qkbdqvmifdi2y9q";
+      type = "gem";
+    };
+    version = "1.2.2";
+  };
+  domain_name = {
+    dependencies = ["unf"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lcqjsmixjp52bnlgzh4lg9ppsk52x9hpwdjd53k8jnbah2602h0";
+      type = "gem";
+    };
+    version = "0.5.20190701";
+  };
+  ejson = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1bpry4i9ajh2h8fyljp0cb17iy03ar36yc9mpfxflmdznl7dwsjf";
+      type = "gem";
+    };
+    version = "1.4.1";
+  };
+  faraday = {
+    dependencies = ["faraday-net_http" "ruby2_keywords"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "187clqhp9mv5mnqmjlfdp57svhsg1bggz84ak8v333j9skrnrgh9";
+      type = "gem";
+    };
+    version = "2.7.10";
+  };
+  faraday-net_http = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13byv3mp1gsjyv8k0ih4612y6vw5kqva6i03wcg4w2fqpsd950k8";
+      type = "gem";
+    };
+    version = "3.0.2";
+  };
+  ffi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1862ydmclzy1a0cjbvm8dz7847d9rch495ib0zb64y84d3xd4bkg";
+      type = "gem";
+    };
+    version = "1.15.5";
+  };
+  ffi-compiler = {
+    dependencies = ["ffi" "rake"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0c2caqm9wqnbidcb8dj4wd3s902z15qmgxplwyfyqbwa0ydki7q1";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  googleauth = {
+    dependencies = ["faraday" "jwt" "memoist" "multi_json" "os" "signet"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0h1k47vjaq37l0w9q49g3f50j1b0c1svhk07rmd1h49w38v2hxag";
+      type = "gem";
+    };
+    version = "1.7.0";
+  };
+  http = {
+    dependencies = ["addressable" "http-cookie" "http-form_data" "llhttp-ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1bzb8p31kzv6q5p4z5xq88mnqk414rrw0y5rkhpnvpl29x5c3bpw";
+      type = "gem";
+    };
+    version = "5.1.1";
+  };
+  http-accept = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09m1facypsdjynfwrcv19xcb1mqg8z6kk31g8r33pfxzh838c9n6";
+      type = "gem";
+    };
+    version = "1.7.0";
+  };
+  http-cookie = {
+    dependencies = ["domain_name"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13rilvlv8kwbzqfb644qp6hrbsj82cbqmnzcvqip1p6vqx36sxbk";
+      type = "gem";
+    };
+    version = "1.0.5";
+  };
+  http-form_data = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wx591jdhy84901pklh1n9sgh74gnvq1qyqxwchni1yrc49ynknc";
+      type = "gem";
+    };
+    version = "2.3.0";
+  };
+  i18n = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qaamqsh5f3szhcakkak8ikxlzxqnv49n2p7504hcz2l0f4nj0wx";
+      type = "gem";
+    };
+    version = "1.14.1";
+  };
+  jsonpath = {
+    dependencies = ["multi_json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1i1idcl0rpfkzkxngadw33a33v3gqf93a3kj52y2ha2zs26bdzjp";
+      type = "gem";
+    };
+    version = "1.1.3";
+  };
+  jwt = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16z11alz13vfc4zs5l3fk6n51n2jw9lskvc4h4prnww0y797qd87";
+      type = "gem";
+    };
+    version = "2.7.1";
+  };
+  krane = {
+    dependencies = ["activesupport" "colorize" "concurrent-ruby" "ejson" "googleauth" "jsonpath" "kubeclient" "multi_json" "statsd-instrument" "thor"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qf5la1w4zrbda5n3s01pb9gij5hyknwglsnqsrc0vcm6bslfygj";
+      type = "gem";
+    };
+    version = "3.3.0";
+  };
+  kubeclient = {
+    dependencies = ["http" "jsonpath" "recursive-open-struct" "rest-client"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1k1zi27fnasqpinfxnajm81pyr11k2j510wacr53d37v97bzr1a9";
+      type = "gem";
+    };
+    version = "4.11.0";
+  };
+  llhttp-ffi = {
+    dependencies = ["ffi-compiler" "rake"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00dh6zmqdj59rhcya0l4b9aaxq6n8xizfbil93k0g06gndyk5xz5";
+      type = "gem";
+    };
+    version = "0.4.0";
+  };
+  memoist = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0i9wpzix3sjhf6d9zw60dm4371iq8kyz7ckh2qapan2vyaim6b55";
+      type = "gem";
+    };
+    version = "0.16.2";
+  };
+  mime-types = {
+    dependencies = ["mime-types-data"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0q8d881k1b3rbsfcdi3fx0b5vpdr5wcrhn88r2d9j7zjdkxp5mw5";
+      type = "gem";
+    };
+    version = "3.5.1";
+  };
+  mime-types-data = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17zdim7kzrh5j8c97vjqp4xp78wbyz7smdp4hi5iyzk0s9imdn5a";
+      type = "gem";
+    };
+    version = "3.2023.0808";
+  };
+  minitest = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jnpsbb2dbcs95p4is4431l2pw1l5pn7dfg3vkgb4ga464j0c5l6";
+      type = "gem";
+    };
+    version = "5.19.0";
+  };
+  multi_json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pb1g1y3dsiahavspyzkdy39j4q377009f6ix0bh1ag4nqw43l0z";
+      type = "gem";
+    };
+    version = "1.15.0";
+  };
+  netrc = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gzfmcywp1da8nzfqsql2zqi648mfnx6qwkig3cv36n9m0yy676y";
+      type = "gem";
+    };
+    version = "0.11.0";
+  };
+  os = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gwd20smyhxbm687vdikfh1gpi96h8qb1x28s2pdcysf6dm6v0ap";
+      type = "gem";
+    };
+    version = "1.1.4";
+  };
+  public_suffix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0n9j7mczl15r3kwqrah09cxj8hxdfawiqxa60kga2bmxl9flfz9k";
+      type = "gem";
+    };
+    version = "5.0.3";
+  };
+  rake = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15whn7p9nrkxangbs9hh75q585yfn66lv0v2mhj6q6dl6x8bzr2w";
+      type = "gem";
+    };
+    version = "13.0.6";
+  };
+  recursive-open-struct = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nnyr6qsqrcszf6c10n4zfjs8h9n67zvsmx6mp8brkigamr8llx3";
+      type = "gem";
+    };
+    version = "1.1.3";
+  };
+  rest-client = {
+    dependencies = ["http-accept" "http-cookie" "mime-types" "netrc"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qs74yzl58agzx9dgjhcpgmzfn61fqkk33k1js2y5yhlvc5l19im";
+      type = "gem";
+    };
+    version = "2.1.0";
+  };
+  ruby2_keywords = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vz322p8n39hz3b4a9gkmz9y7a5jaz41zrm2ywf31dvkqm03glgz";
+      type = "gem";
+    };
+    version = "0.0.5";
+  };
+  signet = {
+    dependencies = ["addressable" "faraday" "jwt" "multi_json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0100rclkhagf032rg3r0gf3f4znrvvvqrimy6hpa73f21n9k2a0x";
+      type = "gem";
+    };
+    version = "0.17.0";
+  };
+  statsd-instrument = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zpr5ms18ynygpwx73v0a8nkf41kpjylc9m3fyhvchq3ms17hcb0";
+      type = "gem";
+    };
+    version = "3.5.11";
+  };
+  thor = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0k7j2wn14h1pl4smibasw0bp66kg626drxb59z7rzflch99cd4rg";
+      type = "gem";
+    };
+    version = "1.2.2";
+  };
+  tzinfo = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16w2g84dzaf3z13gxyzlzbf748kylk5bdgg3n1ipvkvvqy685bwd";
+      type = "gem";
+    };
+    version = "2.0.6";
+  };
+  unf = {
+    dependencies = ["unf_ext"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bh2cf73i2ffh4fcpdn9ir4mhq8zi50ik0zqa1braahzadx536a9";
+      type = "gem";
+    };
+    version = "0.1.4";
+  };
+  unf_ext = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yj2nz2l101vr1x9w2k83a0fag1xgnmjwp8w8rw4ik2rwcz65fch";
+      type = "gem";
+    };
+    version = "0.0.8.2";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/krelay/default.nix b/nixpkgs/pkgs/applications/networking/cluster/krelay/default.nix
new file mode 100644
index 000000000000..ce890323a86a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/krelay/default.nix
@@ -0,0 +1,32 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "krelay";
+  version = "0.0.6";
+
+  src = fetchFromGitHub {
+    owner = "knight42";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-hyjseBIyPdY/xy163bGtfNR1rN/cQczJO53gu4/WmiU=";
+  };
+
+  vendorHash = "sha256-uDLc1W3jw3F+23C5S65Tcljiurobw4IRw7gYzZyBxQ0=";
+
+  subPackages = [ "cmd/client" ];
+
+  ldflags = [ "-s" "-w" "-X github.com/knight42/krelay/pkg/constants.ClientVersion=${version}" ];
+
+  postInstall = ''
+    mv $out/bin/client $out/bin/kubectl-relay
+  '';
+
+  meta = with lib; {
+    description = "A better alternative to `kubectl port-forward` that can forward TCP or UDP traffic to IP/Host which is accessible inside the cluster.";
+    homepage = "https://github.com/knight42/krelay";
+    changelog = "https://github.com/knight42/krelay/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ivankovnatsky ];
+    mainProgram = "kubectl-relay";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/ktop/default.nix b/nixpkgs/pkgs/applications/networking/cluster/ktop/default.nix
new file mode 100644
index 000000000000..58fca5221c0d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/ktop/default.nix
@@ -0,0 +1,33 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "ktop";
+  version = "0.3.5";
+  excludedPackages = [".ci"];
+
+  src = fetchFromGitHub {
+    owner = "vladimirvivien";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-nkIRVt2kqsE9QBYvvHmupohnzH+OBcwWwV16rMePw4I=";
+  };
+
+  vendorHash = "sha256-IiAMmHOq69WMT2B1q9ZV2fGDnLr7AbRm1P7ACSde2FE=";
+  ldflags = [ "-s" "-w" "-X github.com/vladimirvivien/ktop/buildinfo.Version=v${version}" ];
+
+  postInstall = ''
+    rm $out/bin/hack
+  '';
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A top-like tool for your Kubernetes cluster";
+    longDescription = ''
+      Following the tradition of Unix/Linux top tools, ktop is a tool that displays useful metrics information about nodes, pods, and other workload resources running in a Kubernetes cluster.
+    '';
+    homepage = "https://github.com/vladimirvivien/ktop/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ qjoly ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/ktunnel/default.nix b/nixpkgs/pkgs/applications/networking/cluster/ktunnel/default.nix
new file mode 100644
index 000000000000..73e1fff2db36
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/ktunnel/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, lib, buildGoModule, fetchFromGitHub }:
+let
+  version = "1.5.3";
+in
+buildGoModule {
+  pname = "ktunnel";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner  = "omrikiei";
+    repo   = "ktunnel";
+    rev    = "v${version}";
+    sha256 = "sha256-7SWj9Emm78xpzdvJFKqpI5HVQi0ohbixkgXKGTy5C/A=";
+  };
+
+  ldflags = [
+    "-s" "-w"
+  ];
+
+  vendorHash = "sha256-Q8t/NWGeUB1IpxdsxvyvbYh/adtcA4p+7bcCy9YFjsw=";
+
+  preCheck = "export HOME=$(mktemp -d)";
+
+  # # TODO investigate why some tests are failing
+  doCheck = false;
+
+  installCheckPhase = ''
+    runHook preInstallCheck
+    "$out/bin/ktunnel" --version
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    description = "A cli that exposes your local resources to kubernetes ";
+    homepage = "https://github.com/omrikiei/ktunnel";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ happysalada ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kube-capacity/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kube-capacity/default.nix
new file mode 100644
index 000000000000..be8834d05f53
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kube-capacity/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "kube-capacity";
+  version = "0.7.4";
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "robscott";
+    repo = pname;
+    sha256 = "sha256-zf6e8+jkgJns1c71QLL1gd0zK34X7gJo1gS38A1DPJo=";
+  };
+
+  vendorHash = "sha256-qfSya42wZEmJCC7o8zJQEv0BWrxTuBT2Jzcq/AfI+OE=";
+
+  meta = with lib; {
+    description =
+      "A simple CLI that provides an overview of the resource requests, limits, and utilization in a Kubernetes cluster";
+    homepage = "https://github.com/robscott/kube-capacity";
+    changelog = "https://github.com/robscott/kube-capacity/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = [ maintainers.bryanasdev000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kube-router/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kube-router/default.nix
new file mode 100644
index 000000000000..20788e6943f6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kube-router/default.nix
@@ -0,0 +1,36 @@
+{ lib, buildGoModule, fetchFromGitHub, testers, kube-router }:
+
+buildGoModule rec {
+  pname = "kube-router";
+  version = "1.6.0";
+
+  src = fetchFromGitHub {
+    owner = "cloudnativelabs";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-3hfStQ87t8zKyRqUoUViAqRcI8AQXhYSwOGqwIm6Q/w=";
+  };
+
+  vendorHash = "sha256-kV5tUGhOm0/q5btOQu4TtDO5dVmACNNvDS7iNgm/Xio=";
+
+  CGO_ENABLED = 0;
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/cloudnativelabs/kube-router/pkg/version.Version=${version}"
+    "-X github.com/cloudnativelabs/kube-router/pkg/version.BuildDate=Nix"
+  ];
+
+  passthru.tests.version = testers.testVersion {
+    package = kube-router;
+  };
+
+  meta = with lib; {
+    homepage = "https://www.kube-router.io/";
+    description = "All-in-one router, firewall and service proxy for Kubernetes";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ colemickens johanot ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kube-score/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kube-score/default.nix
new file mode 100644
index 000000000000..3caa17c2a5e2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kube-score/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, testers
+, kube-score
+}:
+
+buildGoModule rec {
+  pname = "kube-score";
+  version = "1.17.0";
+
+  src = fetchFromGitHub {
+    owner = "zegl";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-/4xnUb60ARGO6hM5PQ3ZkuwjEQUT4Xnj/InIsfw2bzI=";
+  };
+
+  vendorHash = "sha256-UpuwkQHcNg3rohr+AdALakIdHroIySlTnXHgoUdY+EQ=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=main.version=${version}"
+    "-X=main.commit=${src.rev}"
+  ];
+
+  passthru.tests = {
+    version = testers.testVersion {
+      package = kube-score;
+      command = "kube-score version";
+    };
+  };
+
+  meta = with lib; {
+    description = "Kubernetes object analysis with recommendations for improved reliability and security";
+    homepage = "https://github.com/zegl/kube-score";
+    changelog = "https://github.com/zegl/kube-score/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ j4m3s ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kubebuilder/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kubebuilder/default.nix
new file mode 100644
index 000000000000..7ac56042a3fa
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kubebuilder/default.nix
@@ -0,0 +1,68 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, makeWrapper
+, git
+, go
+, gnumake
+, installShellFiles
+, testers
+, kubebuilder
+}:
+
+buildGoModule rec {
+  pname = "kubebuilder";
+  version = "3.11.1";
+
+  src = fetchFromGitHub {
+    owner = "kubernetes-sigs";
+    repo = "kubebuilder";
+    rev = "v${version}";
+    hash = "sha256-VT9S8Ijf684rowfoU1kvgPSTzR8ZGr3GwxWiYHWLANc=";
+  };
+
+  vendorHash = "sha256-5XUYmAfFH6UlLF09PqcSLUxkgZ5iHZGj0Vurab+Jl1g=";
+
+  subPackages = ["cmd"];
+
+  allowGoReference = true;
+
+  ldflags = [
+    "-X main.kubeBuilderVersion=v${version}"
+    "-X main.goos=${go.GOOS}"
+    "-X main.goarch=${go.GOARCH}"
+    "-X main.gitCommit=unknown"
+    "-X main.buildDate=unknown"
+  ];
+
+  nativeBuildInputs = [
+    makeWrapper
+    git
+    installShellFiles
+  ];
+
+  postInstall = ''
+    mv $out/bin/cmd $out/bin/kubebuilder
+    wrapProgram $out/bin/kubebuilder \
+      --prefix PATH : ${lib.makeBinPath [ go gnumake ]}
+
+    installShellCompletion --cmd kubebuilder \
+      --bash <($out/bin/kubebuilder completion bash) \
+      --fish <($out/bin/kubebuilder completion fish) \
+      --zsh <($out/bin/kubebuilder completion zsh)
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    command = "${kubebuilder}/bin/kubebuilder version";
+    package = kubebuilder;
+    version = "v${version}";
+  };
+
+  meta = with lib; {
+    description = "SDK for building Kubernetes APIs using CRDs";
+    homepage = "https://github.com/kubernetes-sigs/kubebuilder";
+    changelog = "https://github.com/kubernetes-sigs/kubebuilder/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ cmars ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kubecfg/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kubecfg/default.nix
new file mode 100644
index 000000000000..bfc95207a6ca
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kubecfg/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "kubecfg";
+  version = "0.33.0";
+
+  src = fetchFromGitHub {
+    owner = "kubecfg";
+    repo = "kubecfg";
+    rev = "v${version}";
+    hash = "sha256-a/2qKiqn9en67uJD/jzU3G1k6gT73DTzjY32mi51xSQ=";
+  };
+
+  vendorHash = "sha256-mSYc12pjx34PhMx7jbKD/nPhPaK7jINmUSWxomikx7U=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.version=v${version}"
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installShellCompletion --cmd kubecfg \
+      --bash <($out/bin/kubecfg completion --shell=bash) \
+      --zsh  <($out/bin/kubecfg completion --shell=zsh)
+  '';
+
+  meta = with lib; {
+    description = "A tool for managing Kubernetes resources as code";
+    homepage = "https://github.com/kubecfg/kubecfg";
+    changelog = "https://github.com/kubecfg/kubecfg/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ benley qjoly ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kubecm/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kubecm/default.nix
new file mode 100644
index 000000000000..bdb9ce1a5c85
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kubecm/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "kubecm";
+  version = "0.25.0";
+
+  src = fetchFromGitHub {
+    owner = "sunny0826";
+    repo = "kubecm";
+    rev = "v${version}";
+    hash = "sha256-8Y8JChZxjbN/nOw2tzDfJvYSMAtAadf6QMsDFK4IIOg=";
+  };
+
+  vendorHash = "sha256-HjMgXEDX9pDpK+1Hm0xI0wYRfpj7K6xkZJXCUBqbE3Y=";
+  ldflags = [ "-s" "-w" "-X github.com/sunny0826/kubecm/version.Version=${version}"];
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Manage your kubeconfig more easily";
+    homepage = "https://github.com/sunny0826/kubecm/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ qjoly ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kubecolor/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kubecolor/default.nix
new file mode 100644
index 000000000000..d7742cbfc233
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kubecolor/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "kubecolor";
+  version = "0.0.21";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-d1gtbpeK9vp8bwhsMOPVKmohfyEZtQuvRB36VZCB3sY=";
+  };
+
+  vendorHash = "sha256-g5bLi0HQ7LQM+DKn5x8enXn8/9j3LFhgDjQ+YN0M7dM=";
+
+  ldflags = [ "-s" "-w" "-X main.Version=${version}" ];
+
+  meta = with lib; {
+    description = "Colorizes kubectl output";
+    homepage = "https://github.com/kubecolor/kubecolor";
+    changelog = "https://github.com/kubecolor/kubecolor/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ivankovnatsky SuperSandro2000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kubeconform/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kubeconform/default.nix
new file mode 100644
index 000000000000..76f81be00ea5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kubeconform/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "kubeconform";
+  version = "0.6.3";
+
+  src = fetchFromGitHub {
+    owner = "yannh";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-Tu1hAWAqnTGq9NL0kjG2VGzSKDh55HyAoa0nhsJdNLw=";
+  };
+
+  vendorHash = null;
+
+  meta = with lib; {
+    description = "A FAST Kubernetes manifests validator, with support for Custom Resources!";
+    homepage    = "https://github.com/yannh/kubeconform/";
+    license     = licenses.asl20;
+    maintainers = [ maintainers.j4m3s ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kubectl-cnpg/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kubectl-cnpg/default.nix
new file mode 100644
index 000000000000..8df27913dc10
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kubectl-cnpg/default.nix
@@ -0,0 +1,27 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "kubectl-cnpg";
+  version = "1.20.2";
+
+  src = fetchFromGitHub {
+    owner = "cloudnative-pg";
+    repo = "cloudnative-pg";
+    rev = "v${version}";
+    hash = "sha256-JkvaFhzazvuqRJ6ertwMQhp+H2zsjRGA23XbvLCIYg0=";
+  };
+
+  vendorHash = "sha256-unOPTQeJW9rUOpZh7gTjD8IZDh4wi04oBAfDO5juJf8=";
+
+  subPackages = [ "cmd/kubectl-cnpg" ];
+
+  meta = with lib; {
+    homepage = "https://cloudnative-pg.io/";
+    description = "Plugin for kubectl to manage a CloudNativePG cluster in Kubernetes";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ devusb ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kubectl-doctor/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kubectl-doctor/default.nix
new file mode 100644
index 000000000000..e198de456cca
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kubectl-doctor/default.nix
@@ -0,0 +1,36 @@
+{ lib, buildGoModule, fetchFromGitHub, fetchpatch }:
+
+buildGoModule rec {
+  pname = "kubectl-doctor";
+  version = "0.3.1";
+
+  src = fetchFromGitHub {
+    owner = "emirozer";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-yp5OfSDxIASiCgISUVNxfe3dsLukgIoHARVPALIaQfY=";
+  };
+
+  patches = [
+    (fetchpatch {
+      # https://github.com/emirozer/kubectl-doctor/pull/21
+      name = "go-1.19-client-go-0.25.patch";
+      url = "https://github.com/emirozer/kubectl-doctor/commit/a987ef58063e305409034af280d688a11682dbb9.patch";
+      sha256 = "sha256-NQd/WxUfYwBDowhnoUWaOV8k7msiOhff3Bjux+a9R9E=";
+    })
+  ];
+
+  vendorHash = "sha256-qhffg/s1RZFNW0nHLbJ89yqLzdC72ARXdbSfMLJK2pQ=";
+
+  postInstall = ''
+    mv $out/bin/{cmd,kubectl-doctor}
+  '';
+
+  meta = with lib; {
+    description = "kubectl cluster triage plugin for k8s";
+    homepage = "https://github.com/emirozer/kubectl-doctor";
+    changelog = "https://github.com/emirozer/kubectl-doctor/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = [ maintainers.zimbatm ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kubectl-evict-pod/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kubectl-evict-pod/default.nix
new file mode 100644
index 000000000000..54f99f91c8a2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kubectl-evict-pod/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "kubectl-evict-pod";
+  version = "0.0.12";
+
+  src = fetchFromGitHub {
+    owner = "rajatjindal";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-alU1c1ppn4cQi582kcA/PIAJJt73i3uG02cQvSYij1A=";
+  };
+
+  vendorSha256 = null;
+
+  meta = with lib; {
+    description = "This plugin evicts the given pod and is useful for testing pod disruption budget rules";
+    homepage    = "https://github.com/rajatjindal/kubectl-evict-pod";
+    license     = licenses.asl20;
+    maintainers = [ maintainers.j4m3s ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kubectl-example/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kubectl-example/default.nix
new file mode 100644
index 000000000000..76562de2bd76
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kubectl-example/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "kubectl-example";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "seredot";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-YvB4l+7GLSyYWX2Fbk4gT2WLaQpNxeV0aHY3Pg+9LCM=";
+  };
+
+  vendorHash = null;
+
+  meta = with lib; {
+    description = "kubectl plugin for retrieving resource example YAMLs";
+    homepage = "https://github.com/seredot/kubectl-example";
+    changelog = "https://github.com/seredot/kubectl-example/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = [ maintainers.bryanasdev000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kubectl-explore/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kubectl-explore/default.nix
new file mode 100644
index 000000000000..e19929b9e3e6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kubectl-explore/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "kubectl-explore";
+  version = "0.7.1";
+
+  src = fetchFromGitHub {
+    owner = "keisku";
+    repo = "kubectl-explore";
+    rev = "v${version}";
+    hash = "sha256-4WxvVsA05Mta7AcrGe26B+Up+x/gwdlCnb/PN9Ehu18=";
+  };
+
+  vendorHash = "sha256-z/bPfY9UVqOnrA9jNUtM7jg53/URAMAJQAqH9D5KVPQ=";
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A better kubectl explain with the fuzzy finder";
+    homepage = "https://github.com/keisku/kubectl-explore";
+    changelog = "https://github.com/keisku/kubectl-explore/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = [ maintainers.koralowiec ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kubectl-gadget/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kubectl-gadget/default.nix
new file mode 100644
index 000000000000..8ba0d50dd362
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kubectl-gadget/default.nix
@@ -0,0 +1,36 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "kubectl-gadget";
+  version = "0.19.0";
+
+  src = fetchFromGitHub {
+    owner = "inspektor-gadget";
+    repo = "inspektor-gadget";
+    rev = "v${version}";
+    hash = "sha256-5FbjD02HsMChaMMvTjsB/hzivO4s1H5tLK1QMIMlBCI=";
+  };
+
+  vendorHash = "sha256-Beas+oXcK5i4ibE5EAa9+avYuax/kr3op1xbtMPJMas=";
+
+  CGO_ENABLED = 0;
+
+  ldflags = [
+    "-s" "-w"
+    "-X main.version=v${version}"
+    "-extldflags=-static"
+  ];
+
+  tags = [
+    "withoutebpf"
+  ];
+
+  subPackages = [ "cmd/kubectl-gadget" ];
+
+  meta = with lib; {
+    description = "A collection of gadgets for troubleshooting Kubernetes applications using eBPF";
+    homepage = "https://inspektor-gadget.io";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ kranurag7 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kubectl-images/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kubectl-images/default.nix
new file mode 100644
index 000000000000..7ab487d3dda1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kubectl-images/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "kubectl-images";
+  version = "0.6.3";
+
+  src = fetchFromGitHub {
+    owner = "chenjiandongx";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-FHfj2qRypqQA0Vj9Hq7wuYd0xmpD+IZj3MkwKljQio0=";
+  };
+
+  vendorHash = "sha256-8zV2iZ10H5X6fkRqElfc7lOf3FhmDzR2lb3Jgyhjyio=";
+
+  postInstall = ''
+    mv $out/bin/cmd $out/bin/kubectl-images
+  '';
+
+  meta = with lib; {
+    description = "Show container images used in the cluster.";
+    homepage = "https://github.com/chenjiandongx/kubectl-images";
+    changelog = "https://github.com/chenjiandongx/kubectl-images/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = [ maintainers.ivankovnatsky ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kubectl-klock/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kubectl-klock/default.nix
new file mode 100644
index 000000000000..dc9f8c25b5c8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kubectl-klock/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGo121Module, fetchFromGitHub }:
+
+buildGo121Module rec {
+  pname = "kubectl-klock";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "jillejr";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-HO9/hr/CBmJkrbNdX8tp2pNRfZDaWNW8shyCR46G77A=";
+  };
+
+  vendorHash = "sha256-QvD5yVaisq5Zz/M81HAMKpgQJRB5qPCYveLgldHHGf0=";
+
+  meta = with lib; {
+    description = "A kubectl plugin to render watch output in a more readable fashion";
+    homepage = "https://github.com/jillejr/kubectl-klock";
+    changelog = "https://github.com/jillejr/kubectl-klock/releases/tag/v${version}";
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.scm2342 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kubectl-ktop/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kubectl-ktop/default.nix
new file mode 100644
index 000000000000..a7a27e54c065
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kubectl-ktop/default.nix
@@ -0,0 +1,36 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "kubectl-ktop";
+  version = "0.3.5";
+
+  src = fetchFromGitHub {
+    owner = "vladimirvivien";
+    repo = "ktop";
+    rev = "v${version}";
+    sha256 = "sha256-nkIRVt2kqsE9QBYvvHmupohnzH+OBcwWwV16rMePw4I=";
+  };
+
+  vendorHash = "sha256-IiAMmHOq69WMT2B1q9ZV2fGDnLr7AbRm1P7ACSde2FE=";
+
+  subPackages = [ "." ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/vladimirvivien/ktop/buildinfo.Version=v${version}"
+    "-X github.com/vladimirvivien/ktop/buildinfo.GitSHA=${src.rev}"
+  ];
+
+  postInstall = ''
+    ln -s $out/bin/ktop $out/bin/kubectl-ktop
+  '';
+
+  meta = with lib; {
+    description = "A top-like tool for your Kubernetes clusters";
+    homepage = "https://github.com/vladimirvivien/ktop";
+    changelog = "https://github.com/vladimirvivien/ktop/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = [ maintainers.ivankovnatsky ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kubectl-node-shell/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kubectl-node-shell/default.nix
new file mode 100644
index 000000000000..4eb0a43687d1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kubectl-node-shell/default.nix
@@ -0,0 +1,32 @@
+{ stdenvNoCC, lib, fetchFromGitHub, bash }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "kubectl-node-shell";
+  version = "1.8.0";
+
+  src = fetchFromGitHub {
+    owner = "kvaps";
+    repo = "kubectl-node-shell";
+    rev = "v${version}";
+    sha256 = "sha256-+JRHSigjsxuZFQg73wTMWWKtCVXd2mMFqivYGcwYznE=";
+  };
+
+  strictDeps = true;
+  buildInputs = [ bash ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -m755 ./kubectl-node_shell -D $out/bin/kubectl-node_shell
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Exec into node via kubectl";
+    homepage = "https://github.com/kvaps/kubectl-node-shell";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ jocelynthode ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kubectl-tree/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kubectl-tree/default.nix
new file mode 100644
index 000000000000..1cb0cc3e9419
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kubectl-tree/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "kubectl-tree";
+  version = "0.4.3";
+
+  src = fetchFromGitHub {
+    owner = "ahmetb";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-J4/fiTECcTE0N2E+MPrQKE9Msvvm8DLdvLbnDUnUo74=";
+  };
+
+  vendorHash = "sha256-iblEfpYOvTjd3YXQ3Mmj5XckivHoXf4336H+F7NEfBA=";
+
+  meta = with lib; {
+    description = "kubectl plugin to browse Kubernetes object hierarchies as a tree";
+    homepage = "https://github.com/ahmetb/kubectl-tree";
+    changelog = "https://github.com/ahmetb/kubectl-tree/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = [ maintainers.ivankovnatsky ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kubectl-view-allocations/Cargo.lock b/nixpkgs/pkgs/applications/networking/cluster/kubectl-view-allocations/Cargo.lock
new file mode 100644
index 000000000000..f7acb320b36b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kubectl-view-allocations/Cargo.lock
@@ -0,0 +1,2172 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "ahash"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f"
+dependencies = [
+ "cfg-if",
+ "getrandom",
+ "once_cell",
+ "version_check",
+]
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "anstream"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "342258dd14006105c2b75ab1bd7543a03bdf0cfc94383303ac212a04939dff6f"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-wincon",
+ "concolor-override",
+ "concolor-query",
+ "is-terminal",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23ea9e81bd02e310c216d080f6223c179012256e5151c41db88d12c88a1684d2"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7d1bb534e9efed14f3e5f44e7dd1a4f709384023a4165199a4241e18dff0116"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3127af6145b149f3287bb9a0d10ad9c5692dba8c53ad48285e5bec4063834fa"
+dependencies = [
+ "anstyle",
+ "windows-sys",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.70"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4"
+
+[[package]]
+name = "async-compression"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "942c7cd7ae39e91bde4820d74132e9862e62c2f386c3aa90ccf55949f5bad63a"
+dependencies = [
+ "flate2",
+ "futures-core",
+ "memchr",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "backtrace"
+version = "0.3.67"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base64"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+[[package]]
+name = "base64"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ea22880d78093b0cbe17c89f64a7d457941e65759157ec6cb31a31d652b05e5"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bumpalo"
+version = "3.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535"
+
+[[package]]
+name = "bytes"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
+
+[[package]]
+name = "cc"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chrono"
+version = "0.4.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b"
+dependencies = [
+ "iana-time-zone",
+ "js-sys",
+ "num-integer",
+ "num-traits",
+ "serde",
+ "time 0.1.45",
+ "wasm-bindgen",
+ "winapi",
+]
+
+[[package]]
+name = "clap"
+version = "4.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "046ae530c528f252094e4a77886ee1374437744b2bff1497aa898bbddbbb29b3"
+dependencies = [
+ "clap_builder",
+ "clap_derive",
+ "once_cell",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "223163f58c9a40c3b0a43e1c4b50a9ce09f007ea2cb1ec258a687945b4b7929f"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "bitflags",
+ "clap_lex",
+ "strsim",
+]
+
+[[package]]
+name = "clap_derive"
+version = "4.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9644cd56d6b87dbe899ef8b053e331c0637664e9e21a33dfcdc36093f5c5c4"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.13",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a2dd5a6fe8c6e3502f568a6353e5273bbb15193ad9a89e457b9970798efbea1"
+
+[[package]]
+name = "codespan-reporting"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
+dependencies = [
+ "termcolor",
+ "unicode-width",
+]
+
+[[package]]
+name = "color-eyre"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a667583cca8c4f8436db8de46ea8233c42a7d9ae424a82d338f2e4675229204"
+dependencies = [
+ "backtrace",
+ "color-spantrace",
+ "eyre",
+ "indenter",
+ "once_cell",
+ "owo-colors",
+ "tracing-error",
+]
+
+[[package]]
+name = "color-spantrace"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ba75b3d9449ecdccb27ecbc479fdc0b87fa2dd43d2f8298f9bf0e59aacc8dce"
+dependencies = [
+ "once_cell",
+ "owo-colors",
+ "tracing-core",
+ "tracing-error",
+]
+
+[[package]]
+name = "concolor-override"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a855d4a1978dc52fb0536a04d384c2c0c1aa273597f08b77c8c4d3b2eec6037f"
+
+[[package]]
+name = "concolor-query"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88d11d52c3d7ca2e6d0040212be9e4dbbcd78b6447f535b6b561f449427944cf"
+dependencies = [
+ "windows-sys",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "cxx"
+version = "1.0.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f61f1b6389c3fe1c316bf8a4dccc90a38208354b330925bce1f74a6c4756eb93"
+dependencies = [
+ "cc",
+ "cxxbridge-flags",
+ "cxxbridge-macro",
+ "link-cplusplus",
+]
+
+[[package]]
+name = "cxx-build"
+version = "1.0.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12cee708e8962df2aeb38f594aae5d827c022b6460ac71a7a3e2c3c2aae5a07b"
+dependencies = [
+ "cc",
+ "codespan-reporting",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "scratch",
+ "syn 2.0.13",
+]
+
+[[package]]
+name = "cxxbridge-flags"
+version = "1.0.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7944172ae7e4068c533afbb984114a56c46e9ccddda550499caa222902c7f7bb"
+
+[[package]]
+name = "cxxbridge-macro"
+version = "1.0.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.13",
+]
+
+[[package]]
+name = "dirs-next"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
+dependencies = [
+ "cfg-if",
+ "dirs-sys-next",
+]
+
+[[package]]
+name = "dirs-sys-next"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "either"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
+
+[[package]]
+name = "encode_unicode"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0"
+
+[[package]]
+name = "errno"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d6a0976c999d473fe89ad888d5a284e55366d9dc9038b1ba2aa15128c4afa0"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "eyre"
+version = "0.6.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c2b6b5a29c02cdc822728b7d7b8ae1bab3e3b05d44522770ddd49722eeac7eb"
+dependencies = [
+ "indenter",
+ "once_cell",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "fuchsia-cprng"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
+
+[[package]]
+name = "futures"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
+
+[[package]]
+name = "futures-macro"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.13",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
+
+[[package]]
+name = "futures-task"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
+
+[[package]]
+name = "futures-util"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "gethostname"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "gimli"
+version = "0.27.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4"
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
+
+[[package]]
+name = "http"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "http-range-header"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29"
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
+
+[[package]]
+name = "hyper"
+version = "0.14.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc5e554ff619822309ffd57d8734d77cd5ce6238bc956f037ea06c58238c9899"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-openssl"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6ee5d7a8f718585d1c3c61dfde28ef5b0bb14734b4db13f5ada856cdc6c612b"
+dependencies = [
+ "http",
+ "hyper",
+ "linked_hash_set",
+ "once_cell",
+ "openssl",
+ "openssl-sys",
+ "parking_lot",
+ "tokio",
+ "tokio-openssl",
+ "tower-layer",
+]
+
+[[package]]
+name = "hyper-timeout"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1"
+dependencies = [
+ "hyper",
+ "pin-project-lite",
+ "tokio",
+ "tokio-io-timeout",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.54"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c17cc76786e99f8d2f055c11159e7f0091c42474dcc3189fbab96072e873e6d"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "windows",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca"
+dependencies = [
+ "cxx",
+ "cxx-build",
+]
+
+[[package]]
+name = "idna"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "indenter"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683"
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+dependencies = [
+ "autocfg",
+ "hashbrown",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09270fd4fa1111bc614ed2246c7ef56239a3063d5be0d1ec3b589c505d400aeb"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "is-terminal"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "256017f749ab3117e93acb91063009e1f1bb56d03965b14c2c8df4eb02c524d8"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "io-lifetimes",
+ "rustix",
+ "windows-sys",
+]
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
+
+[[package]]
+name = "js-sys"
+version = "0.3.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "jsonpath_lib"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eaa63191d68230cccb81c5aa23abd53ed64d83337cacbb25a7b8c7979523774f"
+dependencies = [
+ "log",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "k8s-openapi"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d1985030683a2bac402cbda61222195de80d3f66b4c87ab56e5fea379bd98c3"
+dependencies = [
+ "base64 0.20.0",
+ "bytes",
+ "chrono",
+ "serde",
+ "serde-value",
+ "serde_json",
+]
+
+[[package]]
+name = "kube"
+version = "0.80.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "414d80c69906a91e8ecf4ae16d0fb504e19aa6b099135d35d85298b4e4be3ed3"
+dependencies = [
+ "k8s-openapi",
+ "kube-client",
+ "kube-core",
+]
+
+[[package]]
+name = "kube-client"
+version = "0.80.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6dc5ae0b9148b4e2ebb0dabda06a0cd65b1eed2f41d792d49787841a68050283"
+dependencies = [
+ "base64 0.20.0",
+ "bytes",
+ "chrono",
+ "dirs-next",
+ "either",
+ "futures",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-openssl",
+ "hyper-timeout",
+ "jsonpath_lib",
+ "k8s-openapi",
+ "kube-core",
+ "openssl",
+ "pem",
+ "pin-project",
+ "secrecy",
+ "serde",
+ "serde_json",
+ "serde_yaml",
+ "tame-oauth",
+ "thiserror",
+ "tokio",
+ "tokio-util",
+ "tower",
+ "tower-http",
+ "tracing",
+]
+
+[[package]]
+name = "kube-core"
+version = "0.80.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "98331c6f1354893f7c50da069e43a3fd1c84e55bbedc7765d9db22ec3291d07d"
+dependencies = [
+ "chrono",
+ "form_urlencoded",
+ "http",
+ "k8s-openapi",
+ "once_cell",
+ "serde",
+ "serde_json",
+ "thiserror",
+]
+
+[[package]]
+name = "kubectl-view-allocations"
+version = "0.16.3"
+dependencies = [
+ "anyhow",
+ "chrono",
+ "clap",
+ "color-eyre",
+ "itertools",
+ "k8s-openapi",
+ "kube",
+ "openssl",
+ "prettytable-rs",
+ "serde",
+ "serde_json",
+ "spectral",
+ "thiserror",
+ "tokio",
+ "tracing",
+ "tracing-bunyan-formatter",
+ "tracing-error",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libc"
+version = "0.2.140"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c"
+
+[[package]]
+name = "link-cplusplus"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "linked-hash-map"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
+
+[[package]]
+name = "linked_hash_set"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "47186c6da4d81ca383c7c47c1bfc80f4b95f4720514d860a5407aaf4233f9588"
+dependencies = [
+ "linked-hash-map",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d59d8c75012853d2e872fb56bc8a2e53718e2cafe1a4c823143141c6d90c322f"
+
+[[package]]
+name = "lock_api"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "matchers"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
+dependencies = [
+ "regex-automata",
+]
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9"
+dependencies = [
+ "libc",
+ "log",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "windows-sys",
+]
+
+[[package]]
+name = "num"
+version = "0.1.42"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4703ad64153382334aa8db57c637364c322d3372e097840c72000dabdcf6156e"
+dependencies = [
+ "num-bigint",
+ "num-complex",
+ "num-integer",
+ "num-iter",
+ "num-rational",
+ "num-traits",
+]
+
+[[package]]
+name = "num-bigint"
+version = "0.1.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e63899ad0da84ce718c14936262a41cee2c79c981fc0a0e7c7beb47d5a07e8c1"
+dependencies = [
+ "num-integer",
+ "num-traits",
+ "rand",
+ "rustc-serialize",
+]
+
+[[package]]
+name = "num-complex"
+version = "0.1.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b288631d7878aaf59442cffd36910ea604ecd7745c36054328595114001c9656"
+dependencies = [
+ "num-traits",
+ "rustc-serialize",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-iter"
+version = "0.1.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-rational"
+version = "0.1.42"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee314c74bd753fc86b4780aa9475da469155f3848473a261d2d18e35245a784e"
+dependencies = [
+ "num-bigint",
+ "num-integer",
+ "num-traits",
+ "rustc-serialize",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
+dependencies = [
+ "hermit-abi 0.2.6",
+ "libc",
+]
+
+[[package]]
+name = "object"
+version = "0.30.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+
+[[package]]
+name = "openssl"
+version = "0.10.49"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d2f106ab837a24e03672c59b1239669a0596406ff657c3c0835b6b7f0f35a33"
+dependencies = [
+ "bitflags",
+ "cfg-if",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.13",
+]
+
+[[package]]
+name = "openssl-src"
+version = "111.25.2+1.1.1t"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "320708a054ad9b3bf314688b5db87cf4d6683d64cfc835e2337924ae62bf4431"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a20eace9dc2d82904039cb76dcf50fb1a0bba071cfd1629720b5d6f1ddba0fa"
+dependencies = [
+ "cc",
+ "libc",
+ "openssl-src",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "ordered-float"
+version = "2.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7940cf2ca942593318d07fcf2596cdca60a85c9e7fab408a5e21a4f9dcd40d87"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "owo-colors"
+version = "3.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f"
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "windows-sys",
+]
+
+[[package]]
+name = "pem"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8"
+dependencies = [
+ "base64 0.13.1",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
+
+[[package]]
+name = "pin-project"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160"
+
+[[package]]
+name = "prettytable-rs"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eea25e07510aa6ab6547308ebe3c036016d162b8da920dbb079e3ba8acf3d95a"
+dependencies = [
+ "encode_unicode",
+ "is-terminal",
+ "lazy_static",
+ "term",
+ "unicode-width",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.55"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d0dd4be24fcdcfeaa12a432d588dc59bbad6cad3510c67e74a2b6b2fc950564"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293"
+dependencies = [
+ "fuchsia-cprng",
+ "libc",
+ "rand_core 0.3.1",
+ "rdrand",
+ "winapi",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
+dependencies = [
+ "rand_core 0.4.2",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
+
+[[package]]
+name = "rdrand"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
+dependencies = [
+ "getrandom",
+ "redox_syscall",
+ "thiserror",
+]
+
+[[package]]
+name = "regex"
+version = "1.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b1f693b24f6ac912f4893ef08244d70b6067480d2f1a46e950c9691e6749d1d"
+dependencies = [
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+dependencies = [
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
+
+[[package]]
+name = "ring"
+version = "0.16.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
+dependencies = [
+ "cc",
+ "libc",
+ "once_cell",
+ "spin",
+ "untrusted",
+ "web-sys",
+ "winapi",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4a36c42d1873f9a77c53bde094f9664d9891bc604a45b4798fd2c389ed12e5b"
+
+[[package]]
+name = "rustc-serialize"
+version = "0.3.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda"
+
+[[package]]
+name = "rustix"
+version = "0.37.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d097081ed288dfe45699b72f5b5d648e5f15d64d900c7080273baa20c16a6849"
+dependencies = [
+ "bitflags",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06"
+
+[[package]]
+name = "ryu"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "scratch"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1"
+
+[[package]]
+name = "secrecy"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e"
+dependencies = [
+ "serde",
+ "zeroize",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.159"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c04e8343c3daeec41f58990b9d77068df31209f2af111e059e9fe9646693065"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde-value"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c"
+dependencies = [
+ "ordered-float",
+ "serde",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.159"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c614d17805b093df4b147b51339e7e44bf05ef59fba1e45d83500bcfb4d8585"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.13",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.95"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d721eca97ac802aa7777b701877c8004d950fc142651367300d21c1cc0194744"
+dependencies = [
+ "indexmap",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_yaml"
+version = "0.8.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b"
+dependencies = [
+ "indexmap",
+ "ryu",
+ "serde",
+ "yaml-rust",
+]
+
+[[package]]
+name = "sharded-slab"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "slab"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
+
+[[package]]
+name = "socket2"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "spectral"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae3c15181f4b14e52eeaac3efaeec4d2764716ce9c86da0c934c3e318649c5ba"
+dependencies = [
+ "num",
+]
+
+[[package]]
+name = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c9da457c5285ac1f936ebd076af6dac17a61cfe7826f2076b4d015cf47bc8ec"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tame-oauth"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7aa56576cb543707e19361a4c69431c37a712e85e4472aff0834a6c31f8df833"
+dependencies = [
+ "base64 0.13.1",
+ "http",
+ "ring",
+ "serde",
+ "serde_json",
+ "twox-hash",
+ "url",
+]
+
+[[package]]
+name = "term"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f"
+dependencies = [
+ "dirs-next",
+ "rustversion",
+ "winapi",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.13",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+]
+
+[[package]]
+name = "time"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"
+dependencies = [
+ "libc",
+ "wasi 0.10.0+wasi-snapshot-preview1",
+ "winapi",
+]
+
+[[package]]
+name = "time"
+version = "0.3.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd0cbfecb4d19b5ea75bb31ad904eb5b9fa13f21079c3b92017ebdf4999a5890"
+dependencies = [
+ "itoa",
+ "serde",
+ "time-core",
+ "time-macros",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd"
+
+[[package]]
+name = "time-macros"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd80a657e71da814b8e5d60d3374fc6d35045062245d80224748ae522dd76f36"
+dependencies = [
+ "time-core",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "1.27.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0de47a4eecbe11f498978a9b29d792f0d2692d1dd003650c24c76510e3bc001"
+dependencies = [
+ "autocfg",
+ "bytes",
+ "libc",
+ "mio",
+ "num_cpus",
+ "parking_lot",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2",
+ "tokio-macros",
+ "windows-sys",
+]
+
+[[package]]
+name = "tokio-io-timeout"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf"
+dependencies = [
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61a573bdc87985e9d6ddeed1b3d864e8a302c847e40d647746df2f1de209d1ce"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.13",
+]
+
+[[package]]
+name = "tokio-openssl"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c08f9ffb7809f1b20c1b398d92acf4cc719874b3b2b2d9ea2f09b4a80350878a"
+dependencies = [
+ "futures-util",
+ "openssl",
+ "openssl-sys",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5427d89453009325de0d8f342c9490009f76e999cb7672d77e46267448f7e6b2"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "tower"
+version = "0.4.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c"
+dependencies = [
+ "futures-core",
+ "futures-util",
+ "pin-project",
+ "pin-project-lite",
+ "tokio",
+ "tokio-util",
+ "tower-layer",
+ "tower-service",
+ "tracing",
+]
+
+[[package]]
+name = "tower-http"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f873044bf02dd1e8239e9c1293ea39dad76dc594ec16185d0a1bf31d8dc8d858"
+dependencies = [
+ "async-compression",
+ "base64 0.13.1",
+ "bitflags",
+ "bytes",
+ "futures-core",
+ "futures-util",
+ "http",
+ "http-body",
+ "http-range-header",
+ "pin-project-lite",
+ "tokio",
+ "tokio-util",
+ "tower-layer",
+ "tower-service",
+ "tracing",
+]
+
+[[package]]
+name = "tower-layer"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0"
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tracing"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+dependencies = [
+ "cfg-if",
+ "log",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "tracing-bunyan-formatter"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25a348912d4e90923cb93343691d3be97e3409607363706c400fc935bb032fb0"
+dependencies = [
+ "ahash",
+ "gethostname",
+ "log",
+ "serde",
+ "serde_json",
+ "time 0.3.20",
+ "tracing",
+ "tracing-core",
+ "tracing-log",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a"
+dependencies = [
+ "once_cell",
+ "valuable",
+]
+
+[[package]]
+name = "tracing-error"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d686ec1c0f384b1277f097b2f279a2ecc11afe8c133c1aabf036a27cb4cd206e"
+dependencies = [
+ "tracing",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "tracing-log"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922"
+dependencies = [
+ "lazy_static",
+ "log",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-subscriber"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6176eae26dd70d0c919749377897b54a9276bd7061339665dd68777926b5a70"
+dependencies = [
+ "matchers",
+ "once_cell",
+ "regex",
+ "sharded-slab",
+ "thread_local",
+ "tracing",
+ "tracing-core",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+
+[[package]]
+name = "twox-hash"
+version = "1.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675"
+dependencies = [
+ "cfg-if",
+ "static_assertions",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "untrusted"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+
+[[package]]
+name = "url"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+]
+
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
+[[package]]
+name = "valuable"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "want"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
+dependencies = [
+ "log",
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.10.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d"
+
+[[package]]
+name = "web-sys"
+version = "0.3.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cdacb41e6a96a052c6cb63a144f24900236121c6f63f4f8219fef5977ecb0c25"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "yaml-rust"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
+dependencies = [
+ "linked-hash-map",
+]
+
+[[package]]
+name = "zeroize"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9"
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kubectl-view-allocations/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kubectl-view-allocations/default.nix
new file mode 100644
index 000000000000..046165f8f33a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kubectl-view-allocations/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, perl
+, Security ? null
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "kubectl-view-allocations";
+  version = "0.16.3";
+
+  src = fetchFromGitHub {
+    owner = "davidB";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-udi39j/K4Wsxva171i7mMUQ6Jb8Ny2IEHfldt3B8IoY=";
+  };
+
+  postPatch = ''
+    cp ${./Cargo.lock} Cargo.lock
+  '';
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+  };
+
+  nativeBuildInputs = [ perl ];
+  buildInputs = lib.optionals stdenv.isDarwin [ Security ];
+
+  meta = with lib; {
+    description = "kubectl plugin to list allocations (cpu, memory, gpu,... X utilization, requested, limit, allocatable,...)";
+    homepage = "https://github.com/davidB/kubectl-view-allocations";
+    license = licenses.cc0;
+    maintainers = [ maintainers.mrene ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kubectl-view-secret/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kubectl-view-secret/default.nix
new file mode 100644
index 000000000000..0bfdaafd5f56
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kubectl-view-secret/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "kubectl-view-secret";
+  version = "0.11.0";
+
+  src = fetchFromGitHub {
+    owner = "elsesiy";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-IdbJQ3YCIPcp09/NORWGezqjbwktObN7TuQdq5uAN4A=";
+  };
+
+  vendorHash = "sha256-Q6OosaHDzq9a2Nt18LGiGJ1C2i1/BRYGaNEBeK0Ohiw=";
+
+  subPackages = [ "./cmd/" ];
+
+  postInstall = ''
+    mv $out/bin/cmd $out/bin/kubectl-view-secret
+  '';
+
+  meta = with lib; {
+    description = "Kubernetes CLI plugin to decode Kubernetes secrets";
+    homepage = "https://github.com/elsesiy/kubectl-view-secret";
+    changelog = "https://github.com/elsesiy/kubectl-view-secret/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = [ maintainers.sagikazarmark ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kubedb-cli/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kubedb-cli/default.nix
new file mode 100644
index 000000000000..43e3941a0ef4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kubedb-cli/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "kubedb-cli";
+  version = "0.35.0";
+
+  src = fetchFromGitHub {
+    owner = "kubedb";
+    repo = "cli";
+    rev = "v${version}";
+    sha256 = "sha256-keYCF/Jte3sgJi4fnVO1ZDAsYyqXlHzX91tyS5oVCW4=";
+  };
+
+  vendorHash = null;
+
+  # Don't compile the documentation stuff
+  subPackages = [ "cmd/kubectl-dba" ];
+
+  meta = with lib; {
+    description = "kubectl plugin for KubeDB by AppsCode.";
+    homepage    = "https://github.com/kubedb/cli";
+    license     = licenses.unfree;
+    maintainers = [ maintainers.starcraft66 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kubedog/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kubedog/default.nix
new file mode 100644
index 000000000000..dc67ccc36e63
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kubedog/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, stdenv
+, buildGoModule
+, fetchFromGitHub
+, testers
+, kubedog
+}:
+
+buildGoModule rec {
+  pname = "kubedog";
+  version = "0.9.12";
+
+  src = fetchFromGitHub {
+    owner = "werf";
+    repo = "kubedog";
+    rev = "v${version}";
+    hash = "sha256-B667EnlOD0kXqkW73XXcyQwROWh5SmsM8565sjcGinI=";
+  };
+
+  vendorHash = "sha256-OgfgCsysNtY7mZQXdmHFyJ0FqmBD3SeQdTLd5Lw3F7k=";
+
+  subPackages = [ "cmd/kubedog" ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/werf/kubedog.Version=${src.rev}"
+  ];
+
+  # There are no tests.
+  doCheck = false;
+
+  passthru.tests.version = testers.testVersion {
+    package = kubedog;
+    command = "kubedog version";
+    version = src.rev;
+  };
+
+  meta = with lib; {
+    description = ''
+      A tool to watch and follow Kubernetes resources in CI/CD deployment
+      pipelines
+    '';
+    homepage = "https://github.com/werf/kubedog";
+    changelog = "https://github.com/werf/kubedog/releases/tag/${src.rev}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ azahi ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kubefirst/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kubefirst/default.nix
new file mode 100644
index 000000000000..d7eb94810951
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kubefirst/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "kubefirst";
+  version = "2.2.17";
+
+  src = fetchFromGitHub {
+    owner = "kubefirst";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-cqKnoGRW+IquuZ7wvCRipRJ6mO18w/yhf5nS094vs7c=";
+  };
+
+  vendorHash = "sha256-0J27JSewc0DCcc3xvl2DBZE/b0qKuozuP7tFdbrRX7I=";
+
+  ldflags = [ "-s" "-w" "-X github.com/kubefirst/runtime/configs.K1Version=v${version}"];
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "The Kubefirst CLI creates instant GitOps platforms that integrate some of the best tools in cloud native from scratch.";
+    homepage = "https://github.com/kubefirst/kubefirst/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ qjoly ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kubelogin-oidc/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kubelogin-oidc/default.nix
new file mode 100644
index 000000000000..a771972b6948
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kubelogin-oidc/default.nix
@@ -0,0 +1,30 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "kubelogin";
+  version = "1.28.0";
+
+  src = fetchFromGitHub {
+    owner = "int128";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-8atEUJLXSbLHdxo1wKtAHAFrZkQYWdW6tP2oKoxahXA=";
+  };
+
+  subPackages = ["."];
+
+  vendorHash = "sha256-rLpXBFNBJG3H0+2inCG4wN0I2LuKUhuqozeafUD3aMI=";
+
+  # Rename the binary instead of symlinking to avoid conflict with the
+  # Azure version of kubelogin
+  postInstall = ''
+    mv $out/bin/kubelogin $out/bin/kubectl-oidc_login
+  '';
+
+  meta = with lib; {
+    description = "A Kubernetes credential plugin implementing OpenID Connect (OIDC) authentication";
+    inherit (src.meta) homepage;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ benley ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kubelogin/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kubelogin/default.nix
new file mode 100644
index 000000000000..09213261dae5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kubelogin/default.nix
@@ -0,0 +1,27 @@
+{ lib, fetchFromGitHub, buildGoModule, go }:
+
+buildGoModule rec {
+  pname = "kubelogin";
+  version = "0.0.31";
+
+  src = fetchFromGitHub {
+    owner = "Azure";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-yIRiIZKq+Q10Uo/9qEToeMHMipA5rApkxIRr/IJ0yfY=";
+  };
+
+  vendorHash = "sha256-XHSVLATWKklg1jWL4Lnaey7hCkYHAk/cNyUgQZ6WIq0=";
+
+  ldflags = [
+    "-X main.version=${version}"
+    "-X main.goVersion=${lib.getVersion go}"
+  ];
+
+  meta = with lib; {
+    description = "A Kubernetes credential plugin implementing Azure authentication";
+    inherit (src.meta) homepage;
+    license = licenses.mit;
+    maintainers = with maintainers; [ yurrriq ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kubemqctl/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kubemqctl/default.nix
new file mode 100644
index 000000000000..7185ff5a42dc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kubemqctl/default.nix
@@ -0,0 +1,31 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "kubemqctl";
+  version = "3.7.2";
+
+  src = fetchFromGitHub {
+    owner = "kubemq-io";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-PaB5+Sy2ccEQz+wuz88w/M4NXayKA41/ugSPJdtjfiE=";
+  };
+
+  vendorHash = "sha256-rou4IC5wMIq7i/OGAvE28qke0X6C5S7Iw+gwCPf5Zdk=";
+
+  preBuild = ''
+    # The go.sum file is missing from the upstream.
+    cp ${./go.sum} go.sum
+  '';
+
+  ldflags = [ "-w" "-s" "-X main.version=${version}" ];
+
+  doCheck = false; # TODO tests are failing
+
+  meta = {
+    homepage = "https://github.com/kubemq-io/kubemqctl";
+    description = "Kubemqctl is a command line interface (CLI) for Kubemq Kubernetes Message Broker.";
+    license = lib.licenses.asl20;
+    maintainers = with lib.maintainers; [ brianmcgee ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kubemqctl/go.sum b/nixpkgs/pkgs/applications/networking/cluster/kubemqctl/go.sum
new file mode 100644
index 000000000000..306959e4f942
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kubemqctl/go.sum
@@ -0,0 +1,664 @@
+cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
+cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
+cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
+cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
+cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
+cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
+cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
+cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4=
+cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M=
+cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc=
+cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk=
+cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs=
+cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc=
+cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
+cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI=
+cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk=
+cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY=
+cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
+cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
+cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
+cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
+cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
+cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
+cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
+cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
+cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
+cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
+cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
+cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU=
+cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
+cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
+cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
+cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
+cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
+cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo=
+dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
+github.com/AlecAivazis/survey/v2 v2.3.6 h1:NvTuVHISgTHEHeBFqt6BHOe4Ny/NwGZr7w+F8S9ziyw=
+github.com/AlecAivazis/survey/v2 v2.3.6/go.mod h1:4AuI9b7RjAR+G7v9+C4YSlX/YL3K3cWNXgWXOhllqvI=
+github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
+github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI=
+github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU=
+github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww=
+github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y=
+github.com/Masterminds/sprig v2.22.0+incompatible h1:z4yfnGrZ7netVz+0EDJ0Wi+5VZCSYp4Z0m2dk6cEM60=
+github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o=
+github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2 h1:+vx7roKuyA63nhn5WAunQHLTznkw5W8b1Xc0dNjp83s=
+github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2/go.mod h1:HBCaDeC1lPdgDeDbhX8XFpy1jqjK0IBG8W5K+xYqA0w=
+github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
+github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
+github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
+github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
+github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
+github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
+github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
+github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
+github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w=
+github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
+github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
+github.com/creack/pty v1.1.17 h1:QeVUsEDNrLBW4tMgZHvxy18sKtr6VI492kBhUfhDJNI=
+github.com/creack/pty v1.1.17/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
+github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153 h1:yUdfgN0XgIJw7foRItutHYUIhlcKzcSf5vDpdhQAKTc=
+github.com/emicklei/go-restful/v3 v3.9.0 h1:XwGDlfxEnQZzuopoqxwSEllNcCOM9DhhFyhFIIGKwxE=
+github.com/emicklei/go-restful/v3 v3.9.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
+github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
+github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
+github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
+github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po=
+github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
+github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
+github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs=
+github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw=
+github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE=
+github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=
+github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
+github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
+github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
+github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
+github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
+github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
+github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0=
+github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
+github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY=
+github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
+github.com/go-openapi/jsonreference v0.20.0 h1:MYlu0sBgChmCfJxxUKZ8g1cPWFOB37YSZqewK7OKeyA=
+github.com/go-openapi/jsonreference v0.20.0/go.mod h1:Ag74Ico3lPc+zR+qjn4XBUmXymS4zJbYVCZmcgkasdo=
+github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
+github.com/go-openapi/swag v0.19.14 h1:gm3vOOXfiuw5i9p5N9xJvfjvuofpyvLA9Wr6QfK5Fng=
+github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ=
+github.com/go-resty/resty/v2 v2.7.0 h1:me+K9p3uhSmXtrBZ4k9jcEAfJmuC8IivWHwaLZwPrFY=
+github.com/go-resty/resty/v2 v2.7.0/go.mod h1:9PWDzw47qPphMRFfhsyk0NnSgvluHcljSMVIq3w7q0I=
+github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
+github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
+github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg=
+github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
+github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
+github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
+github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
+github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
+github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
+github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
+github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
+github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=
+github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
+github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
+github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
+github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
+github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
+github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
+github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
+github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
+github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
+github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
+github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
+github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
+github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
+github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
+github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
+github.com/google/gnostic v0.5.7-v3refs h1:FhTMOKj2VhjpouxvWJAV1TL304uMlb9zcDqkl6cEI54=
+github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ=
+github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
+github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
+github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
+github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g=
+github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
+github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
+github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
+github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
+github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
+github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
+github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
+github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
+github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
+github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
+github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
+github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
+github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
+github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
+github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
+github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
+github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
+github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g=
+github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
+github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
+github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
+github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
+github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
+github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
+github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
+github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec h1:qv2VnGeEQHchGaZ/u7lxST/RaJw+cv273q79D81Xbog=
+github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec/go.mod h1:Q48J4R4DvxnHolD5P8pOtXigYlRuPLGl6moFx3ulM68=
+github.com/huandu/xstrings v1.4.0 h1:D17IlohoQq4UcpqD7fDk80P7l+lwAmlFaBHgOipl2FU=
+github.com/huandu/xstrings v1.4.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
+github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
+github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
+github.com/imdario/mergo v0.3.11 h1:3tnifQM4i+fbajXKBHXWEH+KvNHqojZ778UH75j3bGA=
+github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
+github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
+github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
+github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
+github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
+github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
+github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
+github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
+github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
+github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs=
+github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
+github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
+github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
+github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
+github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
+github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
+github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
+github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
+github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
+github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
+github.com/kubemq-io/kubemq-go v1.7.9 h1:dGTcs+cwmoLnnBX1H3xrKU2qd37JODNO/LHRk6V2NlQ=
+github.com/kubemq-io/kubemq-go v1.7.9/go.mod h1:f6n4qByudW/018Ymol/3s5sjJvt6flEN+ZgP1VVVv0U=
+github.com/kubemq-io/protobuf v1.3.1 h1:b4QcnpujV8U3go8pa2+FTESl6ygU6hY8APYibRtyemo=
+github.com/kubemq-io/protobuf v1.3.1/go.mod h1:mzbGBI05R+GhFLD520xweEIvDM+m4nI7ruJDhgEncas=
+github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
+github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
+github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
+github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
+github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA=
+github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
+github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
+github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
+github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
+github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
+github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
+github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng=
+github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
+github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4=
+github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
+github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
+github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
+github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
+github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
+github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
+github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
+github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8=
+github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c=
+github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
+github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
+github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
+github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
+github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw=
+github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c=
+github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
+github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
+github.com/onsi/ginkgo/v2 v2.4.0 h1:+Ig9nvqgS5OBSACXNk15PLdp0U9XPYROt9CFzVdFGIs=
+github.com/onsi/gomega v1.23.0 h1:/oxKu9c2HVap+F3PfKort2Hw5DEU+HGlW8n+tguWsys=
+github.com/pelletier/go-toml/v2 v2.0.6 h1:nrzqCb7j9cDFj2coyLNLaZuJTLjWjlaz6nvTvIwycIU=
+github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek=
+github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU=
+github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI=
+github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
+github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
+github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k=
+github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
+github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
+github.com/spf13/afero v1.9.3 h1:41FoI0fD7OR7mGcKE/aOiLkGreyf8ifIOQmJANWogMk=
+github.com/spf13/afero v1.9.3/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y=
+github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w=
+github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU=
+github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I=
+github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0=
+github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
+github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
+github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
+github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
+github.com/spf13/viper v1.15.0 h1:js3yy885G8xwJa6iOISGFwd+qlUo5AvyXb7CiihdtiU=
+github.com/spf13/viper v1.15.0/go.mod h1:fFcTBJxvhhzSJiZy8n+PeW6t8l+KeT/uTARa0jHOQLA=
+github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
+github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
+github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
+github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
+github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
+github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
+github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
+github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8=
+github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
+github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8=
+github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0=
+github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
+go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
+go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
+go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
+go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
+go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
+go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
+go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
+go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ=
+go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
+golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
+golang.org/x/crypto v0.1.0 h1:MDRAIl0xIo9Io2xV565hzXHw3zVseKrJKodhohM5CjU=
+golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw=
+golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
+golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
+golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
+golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
+golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
+golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
+golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
+golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
+golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
+golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
+golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
+golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
+golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
+golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
+golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
+golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
+golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
+golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
+golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
+golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
+golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
+golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
+golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
+golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
+golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
+golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
+golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
+golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
+golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
+golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
+golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
+golang.org/x/net v0.0.0-20211029224645-99673261e6eb/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
+golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ=
+golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
+golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
+golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
+golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
+golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
+golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
+golang.org/x/oauth2 v0.4.0 h1:NF0gk8LVPg1Ml7SSbGyySuoxdsXitj7TvgvuRxIMc/M=
+golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec=
+golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ=
+golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/term v0.0.0-20210503060354-a79de5458b56/go.mod h1:tfny5GFUkzUvx4ps4ajbZsCe5lw1metzhBm9T3x7oIY=
+golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw=
+golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
+golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
+golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68=
+golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
+golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.1.0 h1:xYY+Bajn2a7VBmTM5GikTmnK8ZuX8YgnQCqZpbBNtmA=
+golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
+golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
+golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
+golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
+golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
+golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
+golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
+golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE=
+golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
+golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
+google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
+google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
+google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
+google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
+google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
+google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
+google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
+google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
+google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
+google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
+google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
+google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
+google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
+google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM=
+google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc=
+google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg=
+google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE=
+google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8=
+google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
+google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
+google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
+google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
+google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
+google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
+google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
+google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
+google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
+google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
+google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA=
+google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U=
+google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
+google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
+google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f h1:BWUVssLB0HVOSY78gIdvk1dTVYtT1y8SBWtPYuTJ/6w=
+google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM=
+google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
+google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
+google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
+google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
+google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
+google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60=
+google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
+google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
+google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
+google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
+google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
+google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8=
+google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
+google.golang.org/grpc v1.54.0 h1:EhTqbhiYeixwWQtAEZAxmV9MGqcjEU2mFx52xCzNyag=
+google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g=
+google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
+google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
+google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
+google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
+google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
+google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
+google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
+google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
+google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w=
+google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU=
+gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
+gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
+gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
+gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
+gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
+gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
+gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
+gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
+honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
+honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
+k8s.io/api v0.26.2 h1:dM3cinp3PGB6asOySalOZxEG4CZ0IAdJsrYZXE/ovGQ=
+k8s.io/api v0.26.2/go.mod h1:1kjMQsFE+QHPfskEcVNgL3+Hp88B80uj0QtSOlj8itU=
+k8s.io/apiextensions-apiserver v0.26.2 h1:/yTG2B9jGY2Q70iGskMf41qTLhL9XeNN2KhI0uDgwko=
+k8s.io/apiextensions-apiserver v0.26.2/go.mod h1:Y7UPgch8nph8mGCuVk0SK83LnS8Esf3n6fUBgew8SH8=
+k8s.io/apimachinery v0.26.2 h1:da1u3D5wfR5u2RpLhE/ZtZS2P7QvDgLZTi9wrNZl/tQ=
+k8s.io/apimachinery v0.26.2/go.mod h1:ats7nN1LExKHvJ9TmwootT00Yz05MuYqPXEXaVeOy5I=
+k8s.io/client-go v0.26.2 h1:s1WkVujHX3kTp4Zn4yGNFK+dlDXy1bAAkIl+cFAiuYI=
+k8s.io/client-go v0.26.2/go.mod h1:u5EjOuSyBa09yqqyY7m3abZeovO/7D/WehVVlZ2qcqU=
+k8s.io/klog/v2 v2.80.1 h1:atnLQ121W371wYYFawwYx1aEY2eUfs4l3J72wtgAwV4=
+k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
+k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280 h1:+70TFaan3hfJzs+7VK2o+OGxg8HsuBr/5f6tVAjDu6E=
+k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280/go.mod h1:+Axhij7bCpeqhklhUTe3xmOn6bWxolyZEeyaFpjGtl4=
+k8s.io/utils v0.0.0-20221107191617-1a15be271d1d h1:0Smp/HP1OH4Rvhe+4B8nWGERtlqAGSftbSbbmm45oFs=
+k8s.io/utils v0.0.0-20221107191617-1a15be271d1d/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
+rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
+rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
+rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
+sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 h1:iXTIw73aPyC+oRdyqqvVJuloN1p0AC/kzH07hu3NE+k=
+sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
+sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE=
+sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E=
+sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
+sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kubent/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kubent/default.nix
new file mode 100644
index 000000000000..f54b6875a92b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kubent/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "kubent";
+  version = "0.7.0";
+
+  src = fetchFromGitHub {
+    owner = "doitintl";
+    repo = "kube-no-trouble";
+    rev = version;
+    sha256 = "sha256-QIvMhKAo30gInqJBpHvhcyjgVkdRqgBKwLQ80ng/75U=";
+  };
+
+  vendorHash = "sha256-XXf6CPPHVvCTZA4Ve5/wmlgXQ/gZZUW0W/jXA0bJgLA=";
+
+  ldflags = [
+    "-w" "-s"
+    "-X main.version=v${version}"
+  ];
+
+  subPackages = [ "cmd/kubent" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/doitintl/kube-no-trouble";
+    description = "Easily check your cluster for use of deprecated APIs";
+    license = licenses.mit;
+    maintainers = with maintainers; [ peterromfeldhk ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kubeone/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kubeone/default.nix
new file mode 100644
index 000000000000..36fcf3dd2398
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kubeone/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, kubeone
+, testers
+}:
+
+buildGoModule rec {
+  pname = "kubeone";
+  version = "1.7.0";
+
+  src = fetchFromGitHub {
+    owner = "kubermatic";
+    repo = "kubeone";
+    rev = "v${version}";
+    hash = "sha256-izUjiRQAdTpdk86s1lQwLfpHy4eJo3mGAgTwWfGkNAQ=";
+  };
+
+  vendorHash = "sha256-AFyvTv1uVeq2KtRG6VToTBnX+8tHorDZPSturJhsrG4=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X k8c.io/kubeone/pkg/cmd.version=${version}"
+    "-X k8c.io/kubeone/pkg/cmd.date=unknown"
+  ];
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  postInstall = ''
+    installShellCompletion --cmd kubeone \
+      --bash <($out/bin/kubeone completion bash) \
+      --zsh <($out/bin/kubeone completion zsh)
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = kubeone;
+    command = "kubeone version";
+  };
+
+  meta = with lib; {
+    description = "Automate cluster operations on all your cloud, on-prem, edge, and IoT environments";
+    homepage = "https://kubeone.io/";
+    changelog = "https://github.com/kubermatic/kubeone/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ lblasc ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kubergrunt/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kubergrunt/default.nix
new file mode 100644
index 000000000000..c38e4e247334
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kubergrunt/default.nix
@@ -0,0 +1,31 @@
+{ buildGoModule, lib, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "kubergrunt";
+  version = "0.12.1";
+
+  src = fetchFromGitHub {
+    owner = "gruntwork-io";
+    repo = "kubergrunt";
+    rev = "v${version}";
+    sha256 = "sha256-qd+7tYvRpRMg8Y83L/K8g8fWrfO4rAQj72EpunqfSsc=";
+  };
+
+  vendorHash = "sha256-AUw1wJNWjpNVsjw/Hr1ZCePYWQkf1SqRVnQgi8tOFG0=";
+
+  # Disable tests since it requires network access and relies on the
+  # presence of certain AWS infrastructure
+  doCheck = false;
+
+  postInstall = ''
+    # The binary is named kubergrunt
+    mv $out/bin/cmd $out/bin/kubergrunt
+  '';
+
+  meta = with lib; {
+    description = "Collection of commands to fill in the gaps between Terraform, Helm, and Kubectl";
+    homepage = "https://github.com/gruntwork-io/kubergrunt";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ psibi ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kubernetes-metrics-server/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kubernetes-metrics-server/default.nix
new file mode 100644
index 000000000000..9efefd064667
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kubernetes-metrics-server/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "kubernetes-metrics-server";
+  version = "0.6.4";
+
+  src = fetchFromGitHub {
+    owner = "kubernetes-sigs";
+    repo = "metrics-server";
+    rev = "v${version}";
+    sha256 = "sha256-e9iFOe2iZaKbYNUk0vuyzcGDCNxot34kRH06L5UQs4I=";
+  };
+
+  vendorHash = "sha256-BR9mBBH5QE3FMTNtyHfHA1ei18CIDr5Yhvg28hGbDR4=";
+
+  preCheck = ''
+    # the e2e test breaks the sandbox, so let's skip that
+    rm test/e2e_test.go
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/kubernetes-sigs/metrics-server";
+    description = "Kubernetes container resource metrics collector";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ eskytthe ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kubernetes/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kubernetes/default.nix
new file mode 100644
index 000000000000..afb82ff37d6d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kubernetes/default.nix
@@ -0,0 +1,94 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, which
+, makeWrapper
+, rsync
+, installShellFiles
+, runtimeShell
+, kubectl
+, nixosTests
+
+, components ? [
+    "cmd/kubelet"
+    "cmd/kube-apiserver"
+    "cmd/kube-controller-manager"
+    "cmd/kube-proxy"
+    "cmd/kube-scheduler"
+  ]
+}:
+
+buildGoModule rec {
+  pname = "kubernetes";
+  version = "1.28.1";
+
+  src = fetchFromGitHub {
+    owner = "kubernetes";
+    repo = "kubernetes";
+    rev = "v${version}";
+    hash = "sha256-SsYSjGACGqg+RW7X1OVgPC7MF4KufyskXuES9YKM2mk=";
+  };
+
+  vendorHash = null;
+
+  doCheck = false;
+
+  nativeBuildInputs = [ makeWrapper which rsync installShellFiles ];
+
+  outputs = [ "out" "man" "pause" ];
+
+  patches = [ ./fixup-addonmanager-lib-path.patch ];
+
+  WHAT = lib.concatStringsSep " " ([
+    "cmd/kubeadm"
+  ] ++ components);
+
+  buildPhase = ''
+    runHook preBuild
+    substituteInPlace "hack/update-generated-docs.sh" --replace "make" "make SHELL=${runtimeShell}"
+    patchShebangs ./hack ./cluster/addons/addon-manager
+    make "SHELL=${runtimeShell}" "WHAT=$WHAT"
+    ./hack/update-generated-docs.sh
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    for p in $WHAT; do
+      install -D _output/local/go/bin/''${p##*/} -t $out/bin
+    done
+
+    cc build/pause/linux/pause.c -o pause
+    install -D pause -t $pause/bin
+
+    rm docs/man/man1/kubectl*
+    installManPage docs/man/man1/*.[1-9]
+
+    ln -s ${kubectl}/bin/kubectl $out/bin/kubectl
+
+    # Unfortunately, kube-addons-main.sh only looks for the lib file in either the
+    # current working dir or in /opt. We have to patch this for now.
+    substitute cluster/addons/addon-manager/kube-addons-main.sh $out/bin/kube-addons \
+      --subst-var out
+
+    chmod +x $out/bin/kube-addons
+    wrapProgram $out/bin/kube-addons --set "KUBECTL_BIN" "$out/bin/kubectl"
+
+    cp cluster/addons/addon-manager/kube-addons.sh $out/bin/kube-addons-lib.sh
+
+    installShellCompletion --cmd kubeadm \
+      --bash <($out/bin/kubeadm completion bash) \
+      --zsh <($out/bin/kubeadm completion zsh)
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Production-Grade Container Scheduling and Management";
+    license = licenses.asl20;
+    homepage = "https://kubernetes.io";
+    maintainers = with maintainers; [ ] ++ teams.kubernetes.members;
+    platforms = platforms.linux;
+  };
+
+  passthru.tests = nixosTests.kubernetes // { inherit kubectl; };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kubernetes/fixup-addonmanager-lib-path.patch b/nixpkgs/pkgs/applications/networking/cluster/kubernetes/fixup-addonmanager-lib-path.patch
new file mode 100644
index 000000000000..ef2904bdcfe7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kubernetes/fixup-addonmanager-lib-path.patch
@@ -0,0 +1,23 @@
+diff --git a/cluster/addons/addon-manager/kube-addons-main.sh b/cluster/addons/addon-manager/kube-addons-main.sh
+index 849973470d1..e4fef30eaea 100755
+--- a/cluster/addons/addon-manager/kube-addons-main.sh
++++ b/cluster/addons/addon-manager/kube-addons-main.sh
+@@ -17,17 +17,7 @@
+ # Import required functions. The addon manager is installed to /opt in
+ # production use (see the Dockerfile)
+ # Disabling shellcheck following files as the full path would be required.
+-if [ -f "kube-addons.sh" ]; then
+-  # shellcheck disable=SC1091
+-  source "kube-addons.sh"
+-elif [ -f "/opt/kube-addons.sh" ]; then
+-  # shellcheck disable=SC1091
+-  source "/opt/kube-addons.sh"
+-else
+-  # If the required source is missing, we have to fail.
+-  log ERR "== Could not find kube-addons.sh (not in working directory or /opt) at $(date -Is) =="
+-  exit 1
+-fi
++source "@out@/bin/kube-addons-lib.sh"
+ 
+ # The business logic for whether a given object should be created
+ # was already enforced by salt, and /etc/kubernetes/addons is the
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kubernetes/kubectl.nix b/nixpkgs/pkgs/applications/networking/cluster/kubernetes/kubectl.nix
new file mode 100644
index 000000000000..1176f0f28f68
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kubernetes/kubectl.nix
@@ -0,0 +1,32 @@
+{ lib, kubernetes }:
+
+kubernetes.overrideAttrs (_: rec {
+  pname = "kubectl";
+
+  outputs = [ "out" "man" "convert" ];
+
+  WHAT = lib.concatStringsSep " " [
+    "cmd/kubectl"
+    "cmd/kubectl-convert"
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    install -D _output/local/go/bin/kubectl -t $out/bin
+    install -D _output/local/go/bin/kubectl-convert -t $convert/bin
+
+    installManPage docs/man/man1/kubectl*
+
+    installShellCompletion --cmd kubectl \
+      --bash <($out/bin/kubectl completion bash) \
+      --fish <($out/bin/kubectl completion fish) \
+      --zsh <($out/bin/kubectl completion zsh)
+    runHook postInstall
+  '';
+
+  meta = kubernetes.meta // {
+    description = "Kubernetes CLI";
+    homepage = "https://github.com/kubernetes/kubectl";
+    platforms = lib.platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kubernix/Cargo.lock b/nixpkgs/pkgs/applications/networking/cluster/kubernix/Cargo.lock
new file mode 100644
index 000000000000..11445b7cc085
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kubernix/Cargo.lock
@@ -0,0 +1,921 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "ansi_term"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "arc-swap"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "atty"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "autocfg"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "base64"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "bitflags"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "c2-chacha"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "ppv-lite86 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.47"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "cfg-if"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "clap"
+version = "3.0.0-beta.1"
+source = "git+https://github.com/clap-rs/clap#335f34bee26ceb31c63c17206bd56bb5847e697a"
+dependencies = [
+ "ansi_term 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "clap_derive 0.3.0 (git+https://github.com/clap-rs/clap_derive)",
+ "indexmap 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "strsim 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "term_size 1.0.0-beta1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "clap_derive"
+version = "0.3.0"
+source = "git+https://github.com/clap-rs/clap_derive#4a46684b1c522fe3fd45d653d6ba6c7cb885baa5"
+dependencies = [
+ "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "clicolors-control"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "cloudabi"
+version = "0.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "console"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "clicolors-control 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "encode_unicode 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "termios 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "crossbeam-epoch 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "memoffset 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "crossbeam-queue"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "dtoa"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "either"
+version = "1.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "encode_unicode"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "err-derive"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "proc-macro-error 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "synstructure 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.1.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+ "wasi 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "getset"
+version = "0.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "hostname"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+ "match_cfg 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "indicatif"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "console 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "number_prefix 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "ipnetwork"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "itoa"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "kernel32-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "kubernix"
+version = "0.2.0"
+dependencies = [
+ "anyhow 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)",
+ "base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "clap 3.0.0-beta.1 (git+https://github.com/clap-rs/clap)",
+ "console 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "crossbeam-channel 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "getset 0.0.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "hostname 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "indicatif 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "ipnetwork 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "nix 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-mounts 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rayon 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_json 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_yaml 0.8.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "signal-hook 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "toml 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "libc"
+version = "0.2.65"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "linked-hash-map"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "lock_api"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "log"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "match_cfg"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "maybe-uninit"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "memoffset"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "nix"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cc 1.0.47 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+ "void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "hermit-abi 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "number_prefix"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "parking_lot"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "lock_api 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "parking_lot_core 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+ "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "partition-identity"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "err-derive 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "proc-macro-error"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "0.4.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "proc-mounts"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "partition-identity 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "quote"
+version = "0.6.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rand"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "getrandom 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_chacha 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_hc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "c2-chacha 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "getrandom 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rayon"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rayon-core 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.1.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "regex"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "regex-syntax 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "remove_dir_all"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rustc_version"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "scopeguard"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "semver"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "semver-parser"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "serde"
+version = "1.0.102"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "serde_derive 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.102"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.41"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "ryu 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "serde_yaml"
+version = "0.8.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "dtoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "linked-hash-map 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)",
+ "yaml-rust 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "signal-hook"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+ "signal-hook-registry 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "arc-swap 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "smallvec"
+version = "0.6.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "strsim"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "syn"
+version = "0.15.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "synstructure"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)",
+ "remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "term_size"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "term_size"
+version = "1.0.0-beta1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "termios"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "term_size 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "unicode-width"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "unicode-xid"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "vec_map"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "void"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "wasi"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "winapi-build"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "yaml-rust"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "linked-hash-map 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[metadata]
+"checksum ansi_term 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+"checksum anyhow 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)" = "57114fc2a6cc374bce195d3482057c846e706d252ff3604363449695684d7a0d"
+"checksum arc-swap 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "f1a1eca3195b729bbd64e292ef2f5fff6b1c28504fed762ce2b1013dde4d8e92"
+"checksum atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)" = "1803c647a3ec87095e7ae7acfca019e98de5ec9a7d01343f611cf3152ed71a90"
+"checksum autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2"
+"checksum base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7"
+"checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
+"checksum c2-chacha 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "214238caa1bf3a496ec3392968969cab8549f96ff30652c9e56885329315f6bb"
+"checksum cc 1.0.47 (registry+https://github.com/rust-lang/crates.io-index)" = "aa87058dce70a3ff5621797f1506cb837edd02ac4c0ae642b4542dce802908b8"
+"checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
+"checksum clap 3.0.0-beta.1 (git+https://github.com/clap-rs/clap)" = "<none>"
+"checksum clap_derive 0.3.0 (git+https://github.com/clap-rs/clap_derive)" = "<none>"
+"checksum clicolors-control 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "90082ee5dcdd64dc4e9e0d37fbf3ee325419e39c0092191e0393df65518f741e"
+"checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
+"checksum console 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f5d540c2d34ac9dd0deb5f3b5f54c36c79efa78f6b3ad19106a554d07a7b5d9f"
+"checksum crossbeam-channel 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "acec9a3b0b3559f15aee4f90746c4e5e293b701c0f7d3925d24e01645267b68c"
+"checksum crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c3aa945d63861bfe624b55d153a39684da1e8c0bc8fba932f7ee3a3c16cea3ca"
+"checksum crossbeam-epoch 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5064ebdbf05ce3cb95e45c8b086f72263f4166b29b97f6baff7ef7fe047b55ac"
+"checksum crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7c979cd6cfe72335896575c6b5688da489e420d36a27a0b9eb0c73db574b4a4b"
+"checksum crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "04973fa96e96579258a5091af6003abde64af786b860f18622b82e026cca60e6"
+"checksum crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ce446db02cdc3165b94ae73111e570793400d0794e46125cc4056c81cbb039f4"
+"checksum dtoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "ea57b42383d091c85abcc2706240b94ab2a8fa1fc81c10ff23c4de06e2a90b5e"
+"checksum either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3"
+"checksum encode_unicode 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
+"checksum err-derive 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "b41487fadaa500d02a819eefcde5f713599a01dd51626ef25d2d72d87115667b"
+"checksum getrandom 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "e7db7ca94ed4cd01190ceee0d8a8052f08a247aa1b469a7f68c6a3b71afcf407"
+"checksum getset 0.0.9 (registry+https://github.com/rust-lang/crates.io-index)" = "5bb3f5b7d8d70c9bd23cf29b2b38094661418fb0ea79f1b0cc2019a11d6f5429"
+"checksum hermit-abi 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "307c3c9f937f38e3534b1d6447ecf090cafcc9744e4a6360e8b037b2cf5af120"
+"checksum hostname 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "dc5260e6c63877196b6fca5a7fb4eaff751134045ad3415716192baa36f5b9a0"
+"checksum indexmap 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712d7b3ea5827fcb9d4fda14bf4da5f136f0db2ae9c8f4bd4e2d1c6fde4e6db2"
+"checksum indicatif 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8572bccfb0665e70b7faf44ee28841b8e0823450cd4ad562a76b5a3c4bf48487"
+"checksum ipnetwork 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bf7762e2b430ad80cbef992a1d4f15a15d9d4068bdd8e57acb0a3d21d0cf7f40"
+"checksum itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f"
+"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
+"checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+"checksum libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)" = "1a31a0627fdf1f6a39ec0dd577e101440b7db22672c0901fe00a9a6fbb5c24e8"
+"checksum linked-hash-map 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ae91b68aebc4ddb91978b11a1b02ddd8602a05ec19002801c5666000e05e0f83"
+"checksum lock_api 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f8912e782533a93a167888781b836336a6ca5da6175c05944c86cf28c31104dc"
+"checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7"
+"checksum match_cfg 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4"
+"checksum maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00"
+"checksum memoffset 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "75189eb85871ea5c2e2c15abbdd541185f63b408415e5051f5cac122d8c774b9"
+"checksum nix 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3b2e0b4f3320ed72aaedb9a5ac838690a8047c7b275da22711fddff4f8a14229"
+"checksum num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)" = "76dac5ed2a876980778b8b85f75a71b6cbf0db0b1232ee12f826bccb00d09d72"
+"checksum number_prefix 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "17b02fc0ff9a9e4b35b3342880f48e896ebf69f2967921fe8646bf5b7125956a"
+"checksum parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252"
+"checksum parking_lot_core 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b876b1b9e7ac6e1a74a6da34d25c42e17e8862aa409cbbbdcfc8d86c6f3bc62b"
+"checksum partition-identity 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "b33909267193c7babe396e0570d0a12ba997b539edfdb2aea1e767e0ea728f05"
+"checksum ppv-lite86 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "74490b50b9fbe561ac330df47c08f3f33073d2d00c150f719147d7c54522fa1b"
+"checksum proc-macro-error 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "aeccfe4d5d8ea175d5f0e4a2ad0637e0f4121d63bd99d356fb1f39ab2e7c6097"
+"checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759"
+"checksum proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "9c9e470a8dc4aeae2dee2f335e8f533e2d4b347e1434e5671afc49b054592f27"
+"checksum proc-mounts 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "eaa1472134431dd27fcb4477d702d14cf5571a32ad92f2902522d354de42adda"
+"checksum quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1"
+"checksum quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe"
+"checksum rand 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "3ae1b169243eaf61759b8475a998f0a385e42042370f3a7dbaf35246eacc8412"
+"checksum rand_chacha 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "03a2a90da8c7523f554344f921aa97283eadf6ac484a6d2a7d0212fa7f8d6853"
+"checksum rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
+"checksum rand_hc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
+"checksum rayon 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "83a27732a533a1be0a0035a111fe76db89ad312f6f0347004c220c57f209a123"
+"checksum rayon-core 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "98dcf634205083b17d0861252431eb2acbfb698ab7478a2d20de07954f47ec7b"
+"checksum redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)" = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84"
+"checksum regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dc220bd33bdce8f093101afe22a037b8eb0e5af33592e6a9caafff0d4cb81cbd"
+"checksum regex-syntax 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)" = "11a7e20d1cce64ef2fed88b66d347f88bd9babb82845b2b858f3edbf59a4f716"
+"checksum remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e"
+"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
+"checksum ryu 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "bfa8506c1de11c9c4e4c38863ccbe02a305c8188e85a05a784c9e11e1c3910c8"
+"checksum scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b42e15e59b18a828bbf5c58ea01debb36b9b096346de35d941dcb89009f24a0d"
+"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
+"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
+"checksum serde 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)" = "0c4b39bd9b0b087684013a792c59e3e07a46a01d2322518d8a1104641a0b1be0"
+"checksum serde_derive 1.0.102 (registry+https://github.com/rust-lang/crates.io-index)" = "ca13fc1a832f793322228923fbb3aba9f3f44444898f835d31ad1b74fa0a2bf8"
+"checksum serde_json 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)" = "2f72eb2a68a7dc3f9a691bfda9305a1c017a6215e5a4545c258500d2099a37c2"
+"checksum serde_yaml 0.8.11 (registry+https://github.com/rust-lang/crates.io-index)" = "691b17f19fc1ec9d94ec0b5864859290dff279dbd7b03f017afda54eb36c3c35"
+"checksum signal-hook 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "cb543aecec4ba8b867f41284729ddfdb7e8fcd70ec3d7d37fca3007a4b53675f"
+"checksum signal-hook-registry 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1797d48f38f91643908bb14e35e79928f9f4b3cefb2420a564dde0991b4358dc"
+"checksum smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "f7b0758c52e15a8b5e3691eae6cc559f08eee9406e548a4477ba4e67770a82b6"
+"checksum strsim 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)" = "032c03039aae92b350aad2e3779c352e104d919cb192ba2fabbd7b831ce4f0f6"
+"checksum syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)" = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5"
+"checksum syn 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)" = "661641ea2aa15845cddeb97dad000d22070bb5c1fb456b96c1cba883ec691e92"
+"checksum synstructure 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "67656ea1dc1b41b1451851562ea232ec2e5a80242139f7e679ceccfb5d61f545"
+"checksum tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9"
+"checksum term_size 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9e5b9a66db815dcfd2da92db471106457082577c3c278d4138ab3e3b4e189327"
+"checksum term_size 1.0.0-beta1 (registry+https://github.com/rust-lang/crates.io-index)" = "a8a17d8699e154863becdf18e4fd28bd0be27ca72856f54daf75c00f2566898f"
+"checksum termios 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "72b620c5ea021d75a735c943269bb07d30c9b77d6ac6b236bc8b5c496ef05625"
+"checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+"checksum toml 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "01d1404644c8b12b16bfcffa4322403a91a451584daaaa7c28d3152e6cbc98cf"
+"checksum unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7007dbd421b92cc6e28410fe7362e2e0a2503394908f417b68ec8d1c364c4e20"
+"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc"
+"checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c"
+"checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a"
+"checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
+"checksum wasi 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b89c3ce4ce14bdc6fb6beaf9ec7928ca331de5df7e5ea278375642a2f478570d"
+"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
+"checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6"
+"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
+"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+"checksum yaml-rust 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "65923dd1784f44da1d2c3dbbc5e822045628c590ba72123e1c73d3c230c4434d"
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kubernix/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kubernix/default.nix
new file mode 100644
index 000000000000..4495a8590f42
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kubernix/default.nix
@@ -0,0 +1,30 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "kubernix";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "saschagrunert";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "04dzfdzjwcwwaw9min322g30q0saxpq5kqzld4f22fmk820ki6gp";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "clap-3.0.0-beta.1" = "sha256-tErZmEiAF1v39AtgRUHoEmoYqXPWRDXBEkWUbH+fPyY=";
+      "clap_derive-0.3.0" = "sha256-VijH+XB4WeKYUsJH9h/ID8EGZ89R3oauYO8Yg331dPU=";
+    };
+  };
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Single dependency Kubernetes clusters for local testing, experimenting and development";
+    homepage = "https://github.com/saschagrunert/kubernix";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ saschagrunert ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kubeseal/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kubeseal/default.nix
new file mode 100644
index 000000000000..e76b69696fe1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kubeseal/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "kubeseal";
+  version = "0.23.1";
+
+  src = fetchFromGitHub {
+    owner = "bitnami-labs";
+    repo = "sealed-secrets";
+    rev = "v${version}";
+    sha256 = "sha256-FhkeovWuDQZ7KwyIk6YY/iWfRQxTUT0fcAJcCiTZ9Cg=";
+  };
+
+  vendorHash = "sha256-mtWh5nJrdy7PIk4+S+66Xgqpllg6lAyc73lW/bjV5AE=";
+
+  subPackages = [ "cmd/kubeseal" ];
+
+  ldflags = [ "-s" "-w" "-X main.VERSION=${version}" ];
+
+  meta = with lib; {
+    description = "A Kubernetes controller and tool for one-way encrypted Secrets";
+    homepage = "https://github.com/bitnami-labs/sealed-secrets";
+    changelog = "https://github.com/bitnami-labs/sealed-secrets/blob/v${version}/RELEASE-NOTES.md";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ groodt ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kubeshark/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kubeshark/default.nix
new file mode 100644
index 000000000000..23f43688d5c9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kubeshark/default.nix
@@ -0,0 +1,60 @@
+{ stdenv, lib, buildGoModule, fetchFromGitHub, installShellFiles, testers, kubeshark, nix-update-script }:
+
+buildGoModule rec {
+  pname = "kubeshark";
+  version = "50.2";
+
+  src = fetchFromGitHub {
+    owner = "kubeshark";
+    repo = "kubeshark";
+    rev = version;
+    sha256 = "sha256-bABPfy790cMIfunKYfZwDbEn07fhq6g0m/yqeFgJg4Y=";
+  };
+
+  vendorHash = "sha256-rcxnvKkc9zerfULRdU5eGRRqSDQQDNMYaLJ7oEMQghk=";
+
+  ldflags = let t = "github.com/kubeshark/kubeshark"; in [
+   "-s" "-w"
+   "-X ${t}/misc.GitCommitHash=${src.rev}"
+   "-X ${t}/misc.Branch=master"
+   "-X ${t}/misc.BuildTimestamp=0"
+   "-X ${t}/misc.Platform=unknown"
+   "-X ${t}/misc.Ver=${version}"
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  checkPhase = ''
+    go test ./...
+  '';
+  doCheck = true;
+
+  postInstall = lib.optionalString (stdenv.hostPlatform == stdenv.buildPlatform) ''
+    installShellCompletion --cmd kubeshark \
+      --bash <($out/bin/kubeshark completion bash) \
+      --fish <($out/bin/kubeshark completion fish) \
+      --zsh <($out/bin/kubeshark completion zsh)
+  '';
+
+  passthru = {
+    tests.version = testers.testVersion {
+      package = kubeshark;
+      command = "kubeshark version";
+      inherit version;
+    };
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    changelog = "https://github.com/kubeshark/kubeshark/releases/tag/${version}";
+    description = "The API Traffic Viewer for Kubernetes";
+    homepage = "https://kubeshark.co/";
+    license = licenses.asl20;
+    longDescription = ''
+      The API traffic viewer for Kubernetes providing real-time, protocol-aware visibility into Kubernetes’ internal network,
+      Think TCPDump and Wireshark re-invented for Kubernetes
+      capturing, dissecting and monitoring all traffic and payloads going in, out and across containers, pods, nodes and clusters.
+    '';
+    maintainers = with maintainers; [ bryanasdev000 qjoly ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kubespy/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kubespy/default.nix
new file mode 100644
index 000000000000..88a56e3c72e3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kubespy/default.nix
@@ -0,0 +1,35 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "kubespy";
+  version = "0.6.2";
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "pulumi";
+    repo = "kubespy";
+    sha256 = "sha256-eSQl8K+a9YcKXE80bl25+alHoBG8T+LCYOd4Bd9QSdY=";
+  };
+
+  vendorHash = "sha256-brs4QIo4QoLHU95llBHN51zYcgQgN7kbMJDMy2OYOsk=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  doCheck = false;
+
+  ldflags = [ "-X" "github.com/pulumi/kubespy/version.Version=${version}" ];
+
+  postInstall = ''
+    for shell in bash fish zsh; do
+      $out/bin/kubespy completion $shell > kubespy.$shell
+      installShellCompletion kubespy.$shell
+    done
+  '';
+
+  meta = with lib; {
+    description = "A tool to observe Kubernetes resources in real time";
+    homepage = "https://github.com/pulumi/kubespy";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ blaggacao ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kubetail/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kubetail/default.nix
new file mode 100644
index 000000000000..c7858cf994d3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kubetail/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchFromGitHub, lib, installShellFiles, makeWrapper, kubectl }:
+
+stdenv.mkDerivation rec {
+  pname = "kubetail";
+  version = "1.6.18";
+
+  src = fetchFromGitHub {
+    owner = "johanhaleby";
+    repo = "kubetail";
+    rev = version;
+    sha256 = "sha256-Gde5thEpMX3h0e1eoC8SeDdkZfa02CmQf3ELLMeEWGU=";
+  };
+
+  nativeBuildInputs = [ installShellFiles makeWrapper ];
+
+  installPhase = ''
+    install -Dm755 kubetail "$out/bin/kubetail"
+    wrapProgram $out/bin/kubetail --prefix PATH : ${lib.makeBinPath [ kubectl ]}
+
+    installShellCompletion completion/kubetail.{bash,fish,zsh}
+  '';
+
+  meta = with lib; {
+    description = "Bash script to tail Kubernetes logs from multiple pods at the same time";
+    longDescription = ''
+      Bash script that enables you to aggregate (tail/follow) logs from
+      multiple pods into one stream. This is the same as running "kubectl logs
+      -f " but for multiple pods.
+    '';
+    homepage = "https://github.com/johanhaleby/kubetail";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ kalbasit qjoly ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kubeval/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kubeval/default.nix
new file mode 100644
index 000000000000..574bfc61bb87
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kubeval/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, fetchFromGitHub
+, buildGoModule
+, fetchpatch
+}:
+
+buildGoModule rec {
+  pname = "kubeval";
+  version = "0.16.1";
+
+  src = fetchFromGitHub {
+    owner = "instrumenta";
+    repo = "kubeval";
+    rev = "v${version}";
+    sha256 = "sha256-pwJOV7V78H2XaMiiJvKMcx0dEwNDrhgFHmCRLAwMirg=";
+  };
+
+  patches = [
+    # https://github.com/instrumenta/kubeval/pull/346
+    (fetchpatch {
+      name = "bump-golang.org/x/sys.patch";
+      url = "https://github.com/instrumenta/kubeval/commit/d64502b04d9e1b85fd3d5509049adb50f3e39954.patch";
+      sha256 = "sha256-S/lgwdykFLU2QZRW927fgCPxaIAMK3vSqmH08pXBQxM=";
+    })
+  ];
+
+  vendorHash = "sha256-R/vVrLsVSA9SGra4ytoHlQkPaIgQaj/XdivcQp8xjSM=";
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Validate your Kubernetes configuration files";
+    homepage = "https://github.com/instrumenta/kubeval";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ johanot nicknovitski ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kubeval/schema.nix b/nixpkgs/pkgs/applications/networking/cluster/kubeval/schema.nix
new file mode 100644
index 000000000000..370fe9a1cd82
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kubeval/schema.nix
@@ -0,0 +1,15 @@
+{ fetchFromGitHub }:
+# To cache schema as a package so network calls are not
+# necessary at runtime, allowing use in package builds you can use the following:
+
+#   KUBEVAL_SCHEMA_LOCATION="file:///${kubeval-schema}";
+(fetchFromGitHub {
+  name = "kubeval-schema";
+  owner = "instrumenta";
+  repo = "kubernetes-json-schema";
+  rev = "6a498a60dc68c5f6a1cc248f94b5cd1e7241d699";
+  sha256 = "1y9m2ma3n4h7sf2lg788vjw6pkfyi0fa7gzc870faqv326n6x2jr";
+}) // {
+  # the schema is huge (> 7GB), we don't get any benefit from building int on hydra
+  meta.hydraPlatforms = [];
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kubevpn/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kubevpn/default.nix
new file mode 100644
index 000000000000..ef12d8ae2e6d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kubevpn/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "kubevpn";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner  = "KubeNetworks";
+    repo   = "kubevpn";
+    rev    = "v${version}";
+    sha256 = "sha256-C/GXcINuAtDdSN5CdoN62zeYlT9L6cXDTDR9S3eMP4w=";
+  };
+
+  vendorHash = "sha256-24mw5ku0pQX2QNQPA9E+wowS3y0J+oKiIxuyVGcgBro=";
+
+  # TODO investigate why some config tests are failing
+  doCheck = false;
+
+  meta = with lib; {
+    changelog = "https://github.com/KubeNetworks/kubevpn/releases/tag/${src.rev}";
+    description = "Create a VPN and connect to Kubernetes cluster network, access resources, and more";
+    homepage = "https://github.com/KubeNetworks/kubevpn";
+    license = licenses.mit;
+    maintainers = with maintainers; [ mig4ng ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kubexit/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kubexit/default.nix
new file mode 100644
index 000000000000..bf086de6d78b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kubexit/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "kubexit";
+  version = "0.3.2";
+
+  src = fetchFromGitHub {
+    owner = "karlkfi";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-Kzom+/Xad6SI9czw4xvmTbJ+bNB9mF2oSq37IFn384U=";
+  };
+
+  vendorHash = "sha256-RA3+S5Pad+4mNUgcZ2Z0K0FKA3Za5o1ko049GM4yQQ8=";
+  ldflags = [ "-s" "-w" ];
+  meta = with lib; {
+    description = "Command supervisor for coordinated Kubernetes pod container termination.";
+    homepage = "https://github.com/karlkfi/kubexit/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ qjoly ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kuma/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kuma/default.nix
new file mode 100644
index 000000000000..f662e965ff21
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kuma/default.nix
@@ -0,0 +1,67 @@
+{ lib
+, fetchFromGitHub
+, buildGoModule
+, coredns
+, installShellFiles
+, isFull ? false
+, enableGateway ? false
+, pname ? "kuma"
+, components ? lib.optionals isFull [
+    "kumactl"
+    "kuma-cp"
+    "kuma-dp"
+  ]
+}:
+
+buildGoModule rec {
+  inherit pname;
+  version = "2.3.1";
+  tags = lib.optionals enableGateway [ "gateway" ];
+
+  src = fetchFromGitHub {
+    owner = "kumahq";
+    repo = "kuma";
+    rev = version;
+    hash = "sha256-BayfHBTTqgc0ArD6ux9HOqaZy0GrEpqgDa7zHZtiG2I=";
+  };
+
+  vendorHash = "sha256-St+jGks7ojKrgecmN7UJ9FjGrmjtgEKsunSY+4itUyA=";
+
+  # no test files
+  doCheck = false;
+
+  nativeBuildInputs = [ installShellFiles ] ++ lib.optionals isFull [ coredns ];
+
+  preBuild = ''
+    export HOME=$TMPDIR
+  '';
+
+  subPackages = map (p: "app/" + p) components;
+
+  postInstall = lib.concatMapStringsSep "\n" (p: ''
+    installShellCompletion --cmd ${p} \
+      --bash <($out/bin/${p} completion bash) \
+      --fish <($out/bin/${p} completion fish) \
+      --zsh <($out/bin/${p} completion zsh)
+  '') components + lib.optionalString isFull ''
+    ln -sLf ${coredns}/bin/coredns $out/bin
+  '';
+
+  ldflags = let
+    prefix = "github.com/kumahq/kuma/pkg/version";
+  in [
+    "-s" "-w"
+    "-X ${prefix}.version=${version}"
+    "-X ${prefix}.gitTag=${version}"
+    "-X ${prefix}.gitCommit=${version}"
+    "-X ${prefix}.buildDate=${version}"
+  ];
+
+  meta = with lib; {
+    description = "Service mesh controller";
+    homepage = "https://kuma.io/";
+    changelog = "https://github.com/kumahq/kuma/blob/${version}/CHANGELOG.md";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ zbioe ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kuttl/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kuttl/default.nix
new file mode 100644
index 000000000000..cae6540e39fe
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kuttl/default.nix
@@ -0,0 +1,32 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "kuttl";
+  version = "0.15.0";
+  cli = "kubectl-kuttl";
+
+  src = fetchFromGitHub {
+    owner = "kudobuilder";
+    repo = "kuttl";
+    rev = "v${version}";
+    sha256 = "sha256-u+j1ulM6B238qXvLMJZwLqglr9CGk81MsnBYiNiZVJQ=";
+  };
+
+  vendorHash = "sha256-taJAQPa0EA0Ph9OpCs7jzLqBV61kVstZrWyNEYc/GBk=";
+
+  subPackages = [ "cmd/kubectl-kuttl" ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/kudobuilder/kuttl/pkg/version.gitVersion=${version}"
+  ];
+
+  meta = with lib; {
+    description = "The KUbernetes Test TooL (KUTTL) provides a declarative approach to testing production-grade Kubernetes operators";
+    homepage = "https://github.com/kudobuilder/kuttl";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ diegolelis ];
+    mainProgram = "kubectl-kuttl";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/kyverno/default.nix b/nixpkgs/pkgs/applications/networking/cluster/kyverno/default.nix
new file mode 100644
index 000000000000..f0f7c2135ec9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/kyverno/default.nix
@@ -0,0 +1,49 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles, testers, kyverno }:
+
+buildGoModule rec {
+  pname = "kyverno";
+  version = "1.10.3";
+
+  src = fetchFromGitHub {
+    owner = "kyverno";
+    repo = "kyverno";
+    rev = "v${version}";
+    sha256 = "sha256-SRDabFN0ITXwHzvE5m3pIAk42kQa2yINpT64x+k3r3g=";
+  };
+
+  ldflags = [
+    "-s" "-w"
+    "-X github.com/kyverno/kyverno/pkg/version.BuildVersion=v${version}"
+    "-X github.com/kyverno/kyverno/pkg/version.BuildHash=${version}"
+    "-X github.com/kyverno/kyverno/pkg/version.BuildTime=1970-01-01_00:00:00"
+  ];
+
+  vendorHash = "sha256-YFlf0lqG4vWn9d5RAvi12ti/wV+qvsHWn123hhfmxRU=";
+
+  subPackages = [ "cmd/cli/kubectl-kyverno" ];
+
+  nativeBuildInputs = [ installShellFiles ];
+  postInstall = ''
+    # we have no integration between krew and kubectl
+    # so better rename binary to kyverno and use as a standalone
+    mv $out/bin/kubectl-kyverno $out/bin/kyverno
+    installShellCompletion --cmd kyverno \
+      --bash <($out/bin/kyverno completion bash) \
+      --zsh <($out/bin/kyverno completion zsh) \
+      --fish <($out/bin/kyverno completion fish)
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = kyverno;
+    command = "kyverno version";
+    inherit version;
+  };
+
+  meta = with lib; {
+    description = "Kubernetes Native Policy Management";
+    homepage = "https://kyverno.io/";
+    changelog = "https://github.com/kyverno/kyverno/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ bryanasdev000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/lens/common.nix b/nixpkgs/pkgs/applications/networking/cluster/lens/common.nix
new file mode 100644
index 000000000000..e14a176bf464
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/lens/common.nix
@@ -0,0 +1,22 @@
+{ fetchurl }:
+let
+  build = "2023.5.310801-latest";
+in
+{
+  pname = "lens-desktop";
+  version = "6.5.2";
+  sources = {
+    x86_64-darwin = fetchurl {
+      sha256 = "sha256-AGU1kOQEYBAGqWaxftqSNVdPEblPDujKSBjMeaVNx6M=";
+      url = "https://api.k8slens.dev/binaries/Lens-${build}.dmg";
+    };
+    aarch64-darwin = fetchurl {
+      sha256 = "sha256-Xx+6GPAfjioTrqfFS7cFh6deraR+TtqLlwLbVQxfN8g=";
+      url = "https://api.k8slens.dev/binaries/Lens-${build}-arm64.dmg";
+    };
+    x86_64-linux = fetchurl {
+      sha256 = "sha256-DPgeAhM8k6RXg1Qw2bqJFLPh5q2o7Va6EAe/InQNXLg=";
+      url = "https://api.k8slens.dev/binaries/Lens-${build}.x86_64.AppImage";
+    };
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/lens/darwin.nix b/nixpkgs/pkgs/applications/networking/cluster/lens/darwin.nix
new file mode 100644
index 000000000000..e8f17422ec1f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/lens/darwin.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, undmg, fetchurl }:
+let
+  common = import ./common.nix { inherit fetchurl; };
+  inherit (stdenv.hostPlatform) system;
+in
+stdenv.mkDerivation rec {
+  inherit (common) pname version;
+  src = common.sources.${system} or (throw "Source for ${pname} is not available for ${system}");
+
+  appName = "Lens";
+
+  sourceRoot = "${appName}.app";
+
+  buildInputs = [ undmg ];
+  installPhase = ''
+    mkdir -p "$out/Applications/${appName}.app"
+    cp -R . "$out/Applications/${appName}.app"
+  '';
+
+  meta = with lib; {
+    description = "The Kubernetes IDE";
+    homepage = "https://k8slens.dev/";
+    license = licenses.lens;
+    maintainers = with maintainers; [ dbirks ];
+    platforms = [ "x86_64-darwin" "aarch64-darwin" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/lens/default.nix b/nixpkgs/pkgs/applications/networking/cluster/lens/default.nix
new file mode 100644
index 000000000000..455065b07036
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/lens/default.nix
@@ -0,0 +1,5 @@
+{ stdenv, callPackage }:
+if stdenv.isDarwin then
+  callPackage ./darwin.nix { }
+else
+  callPackage ./linux.nix { }
diff --git a/nixpkgs/pkgs/applications/networking/cluster/lens/linux.nix b/nixpkgs/pkgs/applications/networking/cluster/lens/linux.nix
new file mode 100644
index 000000000000..8a21ceb432da
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/lens/linux.nix
@@ -0,0 +1,40 @@
+{ lib, fetchurl, appimageTools, makeWrapper, nss_latest, stdenv }:
+let
+  common = import ./common.nix { inherit fetchurl; };
+
+  inherit (stdenv.hostPlatform) system;
+
+  inherit (common) pname version;
+  src = common.sources.${stdenv.hostPlatform.system} or (throw "Source for ${pname} is not available for ${system}");
+  name = "${pname}-${version}";
+
+  appimageContents = appimageTools.extractType2 {
+    inherit name src;
+  };
+in
+appimageTools.wrapType2 {
+  inherit name src;
+
+  extraInstallCommands =
+    ''
+      mv $out/bin/${name} $out/bin/${pname}
+      source "${makeWrapper}/nix-support/setup-hook"
+      wrapProgram $out/bin/${pname} \
+        --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}"
+      install -m 444 -D ${appimageContents}/${pname}.desktop $out/share/applications/${pname}.desktop
+      install -m 444 -D ${appimageContents}/usr/share/icons/hicolor/512x512/apps/${pname}.png \
+         $out/share/icons/hicolor/512x512/apps/${pname}.png
+      substituteInPlace $out/share/applications/${pname}.desktop \
+        --replace 'Exec=AppRun' 'Exec=${pname}'
+    '';
+
+  extraPkgs = _: [ nss_latest ];
+
+  meta = with lib; {
+    description = "The Kubernetes IDE";
+    homepage = "https://k8slens.dev/";
+    license = licenses.lens;
+    maintainers = with maintainers; [ dbirks RossComputerGuy ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/levant/default.nix b/nixpkgs/pkgs/applications/networking/cluster/levant/default.nix
new file mode 100644
index 000000000000..48e07567a853
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/levant/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "levant";
+  version = "0.3.2";
+
+  src = fetchFromGitHub {
+    owner = "hashicorp";
+    repo = "levant";
+    rev = "v${version}";
+    sha256 = "sha256-UI8PVvTqk8D4S9kq3sgxrm8dkRokpgkLyTN6pzUXNV0=";
+  };
+
+  vendorHash = "sha256-MzKttGfuIg0Pp/iz68EpXuk4I+tFozhIabKlsWuvJ48=";
+
+  # The tests try to connect to a Nomad cluster.
+  doCheck = false;
+
+  meta = with lib; {
+    description = "An open source templating and deployment tool for HashiCorp Nomad jobs";
+    homepage = "https://github.com/hashicorp/levant";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ max-niederman ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/linkerd/default.nix b/nixpkgs/pkgs/applications/networking/cluster/linkerd/default.nix
new file mode 100644
index 000000000000..ecc92bd07f18
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/linkerd/default.nix
@@ -0,0 +1,8 @@
+{ callPackage }:
+
+(callPackage ./generic.nix { }) {
+  channel = "stable";
+  version = "2.14.0";
+  sha256 = "0j4qzmfhi286vsngf1j3s8zhk7xj2saqr27clmjy7ypjszlz5rvm";
+  vendorHash = "sha256-HxxekAipoWNxcLUSOSwUOXlrWMODw7gS8fcyTD3CMYE=";
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/linkerd/edge.nix b/nixpkgs/pkgs/applications/networking/cluster/linkerd/edge.nix
new file mode 100644
index 000000000000..31b07419b4dd
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/linkerd/edge.nix
@@ -0,0 +1,8 @@
+{ callPackage }:
+
+(callPackage ./generic.nix { }) {
+  channel = "edge";
+  version = "23.8.3";
+  sha256 = "1mj16nzs2da530lvvsg6gh8fcgy8rwq13mryqznflgyr39x4c56i";
+  vendorHash = "sha256-HxxekAipoWNxcLUSOSwUOXlrWMODw7gS8fcyTD3CMYE=";
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/linkerd/generic.nix b/nixpkgs/pkgs/applications/networking/cluster/linkerd/generic.nix
new file mode 100644
index 000000000000..0384f56f14aa
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/linkerd/generic.nix
@@ -0,0 +1,63 @@
+{ lib, fetchFromGitHub, buildGoModule, installShellFiles }:
+
+{ channel, version, sha256, vendorHash }:
+
+buildGoModule rec {
+  pname = "linkerd-${channel}";
+  inherit version vendorHash;
+
+  src = fetchFromGitHub {
+    owner = "linkerd";
+    repo = "linkerd2";
+    rev = "${channel}-${version}";
+    inherit sha256;
+  };
+
+  subPackages = [ "cli" ];
+
+  preBuild = ''
+    env GOFLAGS="" go generate ./pkg/charts/static
+    env GOFLAGS="" go generate ./jaeger/static
+    env GOFLAGS="" go generate ./multicluster/static
+    env GOFLAGS="" go generate ./viz/static
+
+    # Necessary for building Musl
+    if [[ $NIX_HARDENING_ENABLE =~ "pie" ]]; then
+        export GOFLAGS="-buildmode=pie $GOFLAGS"
+    fi
+  '';
+
+  tags = [
+    "prod"
+  ];
+
+  ldflags = [
+    "-s" "-w"
+    "-X github.com/linkerd/linkerd2/pkg/version.Version=${src.rev}"
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    mv $out/bin/cli $out/bin/linkerd
+    installShellCompletion --cmd linkerd \
+      --bash <($out/bin/linkerd completion bash) \
+      --zsh <($out/bin/linkerd completion zsh) \
+      --fish <($out/bin/linkerd completion fish)
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/linkerd version --client | grep ${src.rev} > /dev/null
+  '';
+
+  passthru.updateScript = (./. + "/update-${channel}.sh");
+
+  meta = with lib; {
+    description = "A simple Kubernetes service mesh that improves security, observability and reliability";
+    downloadPage = "https://github.com/linkerd/linkerd2/";
+    homepage = "https://linkerd.io/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ bryanasdev000 Gonzih ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/linkerd/update-edge.sh b/nixpkgs/pkgs/applications/networking/cluster/linkerd/update-edge.sh
new file mode 100755
index 000000000000..0e5be4f197e1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/linkerd/update-edge.sh
@@ -0,0 +1,33 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl gnugrep gnused jq
+
+set -x -eu -o pipefail
+
+cd $(dirname "$0")
+
+VERSION=$(curl ${GITHUB_TOKEN:+" -u \":$GITHUB_TOKEN\""} \
+    --silent https://api.github.com/repos/linkerd/linkerd2/releases | \
+    jq 'map(.tag_name)' | grep -v -e '-rc' | grep edge | sed 's/["|,| ]//g' | sed 's/edge-//' | sort -V -r | head -n1)
+
+SHA256=$(nix-prefetch-url --quiet --unpack https://github.com/linkerd/linkerd2/archive/refs/tags/edge-${VERSION}.tar.gz)
+
+setKV () {
+    sed -i "s|$1 = \".*\"|$1 = \"${2:-}\"|" ./edge.nix
+}
+
+setKV version ${VERSION}
+setKV sha256 ${SHA256}
+setKV vendorSha256 "0000000000000000000000000000000000000000000000000000" # Necessary to force clean build.
+
+cd ../../../../../
+set +e
+VENDOR_SHA256=$(nix-build --no-out-link -A linkerd_edge 2>&1 >/dev/null | grep "got:" | cut -d':' -f2 | sed 's| ||g')
+set -e
+cd - > /dev/null
+
+if [ -n "${VENDOR_SHA256:-}" ]; then
+    setKV vendorSha256 ${VENDOR_SHA256}
+else
+    echo "Update failed. VENDOR_SHA256 is empty."
+    exit 1
+fi
diff --git a/nixpkgs/pkgs/applications/networking/cluster/linkerd/update-stable.sh b/nixpkgs/pkgs/applications/networking/cluster/linkerd/update-stable.sh
new file mode 100755
index 000000000000..19aa4274bed3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/linkerd/update-stable.sh
@@ -0,0 +1,33 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl gnugrep gnused jq
+
+set -x -eu -o pipefail
+
+cd $(dirname "$0")
+
+VERSION=$(curl ${GITHUB_TOKEN:+" -u \":$GITHUB_TOKEN\""} \
+    --silent https://api.github.com/repos/linkerd/linkerd2/releases | \
+    jq 'map(.tag_name)' | grep -v -e '-rc' | grep stable | sed 's/["|,| ]//g' | sed 's/stable-//' | sort -V -r | head -n1)
+
+SHA256=$(nix-prefetch-url --quiet --unpack https://github.com/linkerd/linkerd2/archive/refs/tags/stable-${VERSION}.tar.gz)
+
+setKV () {
+  sed -i "s|$1 = \".*\"|$1 = \"${2:-}\"|" ./default.nix
+}
+
+setKV version ${VERSION}
+setKV sha256 ${SHA256}
+setKV vendorSha256 "0000000000000000000000000000000000000000000000000000" # Necessary to force clean build.
+
+cd ../../../../../
+set +e
+VENDOR_SHA256=$(nix-build --no-out-link -A linkerd 2>&1 >/dev/null | grep "got:" | cut -d':' -f2 | sed 's| ||g')
+set -e
+cd - > /dev/null
+
+if [ -n "${VENDOR_SHA256:-}" ]; then
+  setKV vendorSha256 ${VENDOR_SHA256}
+else
+  echo "Update failed. VENDOR_SHA256 is empty."
+  exit 1
+fi
diff --git a/nixpkgs/pkgs/applications/networking/cluster/luigi/default.nix b/nixpkgs/pkgs/applications/networking/cluster/luigi/default.nix
new file mode 100644
index 000000000000..7cbdab0d654b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/luigi/default.nix
@@ -0,0 +1,31 @@
+{ lib, python3, fetchPypi }:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "luigi";
+  version = "3.3.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-zIZC3rbiLwYB7o34rT3mOagVIbfmY6elBEkZGFrSs1c=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [ python-dateutil tornado python-daemon boto3 tenacity ];
+
+  # Requires tox, hadoop, and google cloud
+  doCheck = false;
+
+  # This enables accessing modules stored in cwd
+  makeWrapperArgs = [ "--prefix PYTHONPATH . :" ];
+
+  meta = with lib; {
+    description = "Python package that helps you build complex pipelines of batch jobs";
+    longDescription = ''
+      Luigi handles dependency resolution, workflow management, visualization,
+      handling failures, command line integration, and much more.
+    '';
+    homepage = "https://github.com/spotify/luigi";
+    changelog = "https://github.com/spotify/luigi/releases/tag/${version}";
+    license = [ licenses.asl20 ];
+    maintainers = [ maintainers.bhipple ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/minikube/default.nix b/nixpkgs/pkgs/applications/networking/cluster/minikube/default.nix
new file mode 100644
index 000000000000..924052c2d9b0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/minikube/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, stdenv
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, pkg-config
+, which
+, libvirt
+, vmnet
+, makeWrapper
+}:
+
+buildGoModule rec {
+  pname = "minikube";
+  version = "1.31.2";
+
+  vendorHash = "sha256-5ChPdSIRI+Q3OLW+joukMpIFbUjU4TKpXT4wAARVVP8=";
+
+  doCheck = false;
+
+  src = fetchFromGitHub {
+    owner = "kubernetes";
+    repo = "minikube";
+    rev = "v${version}";
+    sha256 = "sha256-Ha0liXc2oXJ3dLty1veN5xN5BUKIiNXe8NTGqWDbTD0=";
+  };
+
+  nativeBuildInputs = [ installShellFiles pkg-config which makeWrapper ];
+
+  buildInputs = if stdenv.isDarwin then [ vmnet ] else if stdenv.isLinux then [ libvirt ] else null;
+
+  buildPhase = ''
+    make COMMIT=${src.rev}
+  '';
+
+  installPhase = ''
+    install out/minikube -Dt $out/bin
+
+    wrapProgram $out/bin/minikube --set MINIKUBE_WANTUPDATENOTIFICATION false
+    export HOME=$PWD
+
+    for shell in bash zsh fish; do
+      $out/bin/minikube completion $shell > minikube.$shell
+      installShellCompletion minikube.$shell
+    done
+  '';
+
+  meta = with lib; {
+    homepage = "https://minikube.sigs.k8s.io";
+    description = "A tool that makes it easy to run Kubernetes locally";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ebzzry copumpkin vdemeester atkinschang Chili-Man ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/minishift/default.nix b/nixpkgs/pkgs/applications/networking/cluster/minishift/default.nix
new file mode 100644
index 000000000000..bee4d4785293
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/minishift/default.nix
@@ -0,0 +1,66 @@
+{ lib, buildGoPackage, fetchFromGitHub, go-bindata, pkg-config, makeWrapper
+, glib, gtk3, libappindicator-gtk3, gpgme, openshift, ostree, libselinux, btrfs-progs
+, lvm2, docker-machine-kvm
+}:
+
+let
+  version = "1.34.3";
+
+  # Update these on version bumps according to Makefile
+  centOsIsoVersion = "v1.17.0";
+  openshiftVersion = "v3.11.0";
+
+in buildGoPackage rec {
+  pname = "minishift";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "minishift";
+    repo = "minishift";
+    rev = "v${version}";
+    sha256 = "0yhln3kyc0098hbnjyxhbd915g6j7s692c0z8yrhh9gdpc5cr2aa";
+  };
+
+  nativeBuildInputs = [ pkg-config go-bindata makeWrapper ];
+  buildInputs = [ glib gtk3 libappindicator-gtk3 gpgme ostree libselinux btrfs-progs lvm2 ];
+
+  goPackagePath = "github.com/minishift/minishift";
+  subPackages = [ "cmd/minishift" ];
+
+  postPatch = ''
+    # minishift downloads openshift if not found therefore set the cache to /nix/store/...
+    substituteInPlace pkg/minishift/cache/oc_caching.go \
+      --replace 'filepath.Join(oc.MinishiftCacheDir, OC_CACHE_DIR, oc.OpenShiftVersion, runtime.GOOS)' '"${openshift}/bin"' \
+      --replace '"runtime"' ""
+  '';
+
+  ldflags = [
+    "-X ${goPackagePath}/pkg/version.minishiftVersion=${version}"
+    "-X ${goPackagePath}/pkg/version.centOsIsoVersion=${centOsIsoVersion}"
+    "-X ${goPackagePath}/pkg/version.openshiftVersion=${openshiftVersion}"
+  ];
+
+  preBuild = ''
+    (cd go/src/github.com/minishift/minishift
+      mkdir -p out/bindata
+      go-bindata -prefix addons -o out/bindata/addon_assets.go -pkg bindata addons/...)
+  '';
+
+  postInstall = ''
+    wrapProgram "$out/bin/minishift" \
+      --prefix PATH ':' '${lib.makeBinPath [ docker-machine-kvm openshift ]}'
+  '';
+
+  meta = with lib; {
+    description = "Run OpenShift locally";
+    longDescription = ''
+      Minishift is a tool that helps you run OpenShift locally by running
+      a single-node OpenShift cluster inside a VM. You can try out OpenShift
+      or develop with it, day-to-day, on your local host.
+    '';
+    homepage = "https://github.com/minishift/minishift";
+    maintainers = with maintainers; [ vdemeester ];
+    platforms = platforms.linux;
+    license = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/multus-cni/default.nix b/nixpkgs/pkgs/applications/networking/cluster/multus-cni/default.nix
new file mode 100644
index 000000000000..ceda5e60c4f4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/multus-cni/default.nix
@@ -0,0 +1,39 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "multus-cni";
+  version = "4.0.2";
+
+  src = fetchFromGitHub {
+    owner = "k8snetworkplumbingwg";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-Q6ACXOv1E3Ouki4ksdlUZFbWcDgo9xbCiTfEiVG5l18=";
+  };
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=gopkg.in/k8snetworkplumbingwg/multus-cni.v3/pkg/multus.version=${version}"
+  ];
+
+  subPackages = [
+    "cmd/multus-daemon"
+    "cmd/multus-shim"
+    "cmd/multus"
+    "cmd/thin_entrypoint"
+  ];
+
+  vendorHash = null;
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Multus CNI is a container network interface (CNI) plugin for Kubernetes that enables attaching multiple network interfaces to pods";
+    homepage = "https://github.com/k8snetworkplumbingwg/multus-cni";
+    license = licenses.asl20;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ onixie kashw2 ];
+    mainProgram = "multus";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/nerdctl/default.nix b/nixpkgs/pkgs/applications/networking/cluster/nerdctl/default.nix
new file mode 100644
index 000000000000..401b5b156f76
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/nerdctl/default.nix
@@ -0,0 +1,59 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, makeWrapper
+, installShellFiles
+, buildkit
+, cni-plugins
+, extraPackages ? [ ]
+}:
+
+buildGoModule rec {
+  pname = "nerdctl";
+  version = "1.5.0";
+
+  src = fetchFromGitHub {
+    owner = "containerd";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-ngR+xlhTy3oxPN34+MoT9TSOI0+Epp8QG3KiiPmRUts=";
+  };
+
+  vendorHash = "sha256-lsD8AtbREVKFXiPsteSFA7xntRlNgOQ1y5c44vOqMa8=";
+
+  nativeBuildInputs = [ makeWrapper installShellFiles ];
+
+  ldflags = let t = "github.com/containerd/nerdctl/pkg/version"; in
+    [ "-s" "-w" "-X ${t}.Version=v${version}" "-X ${t}.Revision=<unknown>" ];
+
+  # Many checks require a containerd socket and running nerdctl after it's built
+  doCheck = false;
+
+  postInstall = ''
+    wrapProgram $out/bin/nerdctl \
+      --prefix PATH : "${lib.makeBinPath ([ buildkit ] ++ extraPackages)}" \
+      --prefix CNI_PATH : "${cni-plugins}/bin"
+
+    installShellCompletion --cmd nerdctl \
+      --bash <($out/bin/nerdctl completion bash) \
+      --fish <($out/bin/nerdctl completion fish) \
+      --zsh <($out/bin/nerdctl completion zsh)
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+    $out/bin/nerdctl --help
+    $out/bin/nerdctl --version | grep "nerdctl version ${version}"
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/containerd/nerdctl/";
+    changelog = "https://github.com/containerd/nerdctl/releases/tag/v${version}";
+    description = "A Docker-compatible CLI for containerd";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ jk developer-guy ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/nixops/default.nix b/nixpkgs/pkgs/applications/networking/cluster/nixops/default.nix
new file mode 100644
index 000000000000..0b63cc7b0f5a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/nixops/default.nix
@@ -0,0 +1,108 @@
+{ nixosTests
+, pkgs
+, poetry2nix
+, lib
+, overrides ? (self: super: {})
+}:
+
+let
+
+  interpreter = (
+    poetry2nix.mkPoetryPackages {
+      projectDir = ./.;
+      python = pkgs.python310;
+      overrides = [
+        poetry2nix.defaultPoetryOverrides
+        (import ./poetry-git-overlay.nix { inherit pkgs; })
+        (
+          self: super: {
+
+            nixops = super.nixops.overridePythonAttrs (
+              old: {
+                version = "${old.version}-pre-${lib.substring 0 7 super.nixops.src.rev or "dirty"}";
+
+                postPatch = ''
+                  substituteInPlace nixops/args.py --subst-var version
+                '';
+
+                meta = old.meta // {
+                  homepage = "https://github.com/NixOS/nixops";
+                  description = "NixOS cloud provisioning and deployment tool";
+                  maintainers = with lib.maintainers; [ adisbladis aminechikhaoui eelco rob domenkozar ];
+                  platforms = lib.platforms.unix;
+                  license = lib.licenses.lgpl3;
+                  mainProgram = "nixops";
+                };
+
+              }
+            );
+          }
+        )
+
+        # User provided overrides
+        overrides
+
+        # Make nixops pluginable
+        (self: super: let
+          # Create a fake sphinx directory that doesn't pull the entire setup hook and incorrect python machinery
+          sphinx = pkgs.runCommand "sphinx" {} ''
+            mkdir -p $out/bin
+            for f in ${pkgs.python3.pkgs.sphinx}/bin/*; do
+              ln -s $f $out/bin/$(basename $f)
+            done
+          '';
+
+        in {
+          nixops = super.__toPluginAble {
+            drv = super.nixops;
+            finalDrv = self.nixops;
+
+            nativeBuildInputs = [ sphinx ];
+
+            postInstall = ''
+              doc_cache=$(mktemp -d)
+              sphinx-build -b man -d $doc_cache doc/ $out/share/man/man1
+
+              html=$(mktemp -d)
+              sphinx-build -b html -d $doc_cache doc/ $out/share/nixops/doc
+            '';
+
+          };
+        })
+
+        (self: super: {
+          cryptography = super.cryptography.overridePythonAttrs (old: {
+            meta = old.meta // {
+              knownVulnerabilities = old.meta.knownVulnerabilities or [ ]
+                ++ lib.optionals (lib.versionOlder old.version "41.0.0") [
+                  "CVE-2023-2650"
+                  "CVE-2023-2975"
+                  "CVE-2023-3446"
+                  "CVE-2023-3817"
+                  "CVE-2023-38325"
+                ];
+            };
+          });
+        })
+
+      ];
+    }
+  ).python;
+
+  pkg = (interpreter.pkgs.nixops.withPlugins(ps: [
+    ps.nixops-aws
+    ps.nixops-digitalocean
+    ps.nixops-encrypted-links
+    ps.nixops-gcp
+    ps.nixops-hercules-ci
+    ps.nixops-hetzner
+    ps.nixopsvbox
+    ps.nixops-virtd
+    ps.nixops-hetznercloud
+  ])).overrideAttrs (finalAttrs: prevAttrs: {
+    passthru = prevAttrs.passthru or {} // {
+      tests = prevAttrs.passthru.tests or {} //
+        nixosTests.nixops.unstable.passthru.override { nixopsPkg = pkg; };
+    };
+  });
+in pkg
diff --git a/nixpkgs/pkgs/applications/networking/cluster/nixops/poetry-git-overlay.nix b/nixpkgs/pkgs/applications/networking/cluster/nixops/poetry-git-overlay.nix
new file mode 100644
index 000000000000..7de5435ddc4a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/nixops/poetry-git-overlay.nix
@@ -0,0 +1,114 @@
+{ pkgs }:
+self: super: {
+
+  nixops = super.nixops.overridePythonAttrs (
+    _: {
+      src = pkgs.fetchgit {
+        url = "https://github.com/NixOS/nixops.git";
+        rev = "fc9b55c55da62f949028143b974f67fdc7f40c8b";
+        sha256 = "0f5r17rq3rf3ylp16cq50prn8qmfc1gwpqgqfj491w38sr5sspf8";
+      };
+    }
+  );
+
+  nixops-aws = super.nixops-aws.overridePythonAttrs (
+    _: {
+      src = pkgs.fetchgit {
+        url = "https://github.com/NixOS/nixops-aws.git";
+        rev = "8802d1cda9004ec1362815292c2a8ab95e6d64e8";
+        sha256 = "1rf2dxn4gdm9a91jji4f100y62ap3p3svs6qhxf78319phba6hlb";
+      };
+    }
+  );
+
+  nixops-digitalocean = super.nixops-digitalocean.overridePythonAttrs (
+    _: {
+      src = pkgs.fetchgit {
+        url = "https://github.com/nix-community/nixops-digitalocean.git";
+        rev = "e977b7f11e264a6a2bff2dcbc7b94c6a97b92fff";
+        sha256 = "020fg1kjh3x57dj95micpq6mxjg5j50jy6cs5f10i33ayy3556v8";
+      };
+    }
+  );
+
+  nixops-encrypted-links = super.nixops-encrypted-links.overridePythonAttrs (
+    _: {
+      src = pkgs.fetchgit {
+        url = "https://github.com/nix-community/nixops-encrypted-links.git";
+        rev = "e2f196fce15fcfb00d18c055e1ac53aec33b8fb1";
+        sha256 = "12ynqwd5ad6wfyv6sma55wnmrlr8i14kd5d42zqv4zl23h0xnd6m";
+      };
+    }
+  );
+
+  nixops-gcp = super.nixops-gcp.overridePythonAttrs (
+    _: {
+      src = pkgs.fetchgit {
+        url = "https://github.com/nix-community/nixops-gce.git";
+        rev = "d13cb794aef763338f544010ceb1816fe31d7f42";
+        sha256 = "0i57qhiga4nr0ms9gj615l599vxy78lzw7hap4rbzbhl5bl1yijj";
+      };
+    }
+  );
+
+  nixops-hercules-ci = super.nixops-hercules-ci.overridePythonAttrs (
+    _: {
+      src = pkgs.fetchgit {
+        url = "https://github.com/hercules-ci/nixops-hercules-ci.git";
+        rev = "e601d5baffd003fd5f22deeaea0cb96444b054dc";
+        sha256 = "0rcpv5hc6l9ia8lq8ivwa80b2pwssmdz8an25lhr4i2472mpx1p0";
+      };
+    }
+  );
+
+  nixops-hetzner = super.nixops-hetzner.overridePythonAttrs (
+    _: {
+      src = pkgs.fetchgit {
+        url = "https://github.com/NixOS/nixops-hetzner";
+        rev = "bc7a68070c7371468bcc8bf6e36baebc6bd2da35";
+        sha256 = "0kmzv5dzh828yh5jwjs5klfslx3lklrqvpvbh29b398m5r9bbqkn";
+      };
+    }
+  );
+
+  nixops-hetznercloud = super.nixops-hetznercloud.overridePythonAttrs (
+    _: {
+      src = pkgs.fetchgit {
+        url = "https://github.com/lukebfox/nixops-hetznercloud.git";
+        rev = "e14f340f7ffe9e2aa7ffbaac0b8a2e3b4cc116b3";
+        sha256 = "0vhapgzhqfk3y8a26ck09g0ilydsbjlx5g77f8bscdqz818lki12";
+      };
+    }
+  );
+
+  nixops-virtd = super.nixops-virtd.overridePythonAttrs (
+    _: {
+      src = pkgs.fetchgit {
+        url = "https://github.com/nix-community/nixops-libvirtd.git";
+        rev = "be1ea32e02d8abb3dbe1b09b7c5a7419a7412991";
+        sha256 = "1mklm3lmicvhs0vcib3ss21an45wk24m1mkcwy1zvbpbmvhdz2m4";
+      };
+    }
+  );
+
+  nixopsvbox = super.nixopsvbox.overridePythonAttrs (
+    _: {
+      src = pkgs.fetchgit {
+        url = "https://github.com/nix-community/nixops-vbox.git";
+        rev = "2729672865ebe2aa973c062a3fbddda8c1359da0";
+        sha256 = "07bmrbg3g2prnba2kwg1rg6rvmnx1vzc538y2q3g04s958hala56";
+      };
+    }
+  );
+
+  nixos-modules-contrib = super.nixos-modules-contrib.overridePythonAttrs (
+    _: {
+      src = pkgs.fetchgit {
+        url = "https://github.com/nix-community/nixos-modules-contrib.git";
+        rev = "81a1c2ef424dcf596a97b2e46a58ca73a1dd1ff8";
+        sha256 = "0f6ra5r8i1jz8ymw6l3j68b676a1lv0466lv0xa6mi80k6v9457x";
+      };
+    }
+  );
+
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/nixops/poetry.lock b/nixpkgs/pkgs/applications/networking/cluster/nixops/poetry.lock
new file mode 100644
index 000000000000..900875191e3c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/nixops/poetry.lock
@@ -0,0 +1,731 @@
+# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand.
+
+[[package]]
+name = "apache-libcloud"
+version = "3.7.0"
+description = "A standard Python library that abstracts away differences among multiple cloud provider APIs. For more information and documentation, please see https://libcloud.apache.org"
+optional = false
+python-versions = ">=3.6, <4"
+files = [
+    {file = "apache-libcloud-3.7.0.tar.gz", hash = "sha256:148a9e50069654432a7d34997954e91434dd38ebf68832eb9c75d442b3e62fad"},
+    {file = "apache_libcloud-3.7.0-py2.py3-none-any.whl", hash = "sha256:027a9aff2c01db9c8e6f9f94b6eb44b3153d82702c42bfbe7af5624dabf1f950"},
+]
+
+[package.dependencies]
+requests = ">=2.26.0"
+
+[[package]]
+name = "boto"
+version = "2.49.0"
+description = "Amazon Web Services Library"
+optional = false
+python-versions = "*"
+files = [
+    {file = "boto-2.49.0-py2.py3-none-any.whl", hash = "sha256:147758d41ae7240dc989f0039f27da8ca0d53734be0eb869ef16e3adcfa462e8"},
+    {file = "boto-2.49.0.tar.gz", hash = "sha256:ea0d3b40a2d852767be77ca343b58a9e3a4b00d9db440efb8da74b4e58025e5a"},
+]
+
+[[package]]
+name = "boto3"
+version = "1.28.22"
+description = "The AWS SDK for Python"
+optional = false
+python-versions = ">= 3.7"
+files = [
+    {file = "boto3-1.28.22-py3-none-any.whl", hash = "sha256:0c1c1d19232018ac49fd2c0a94aa0b802f5d222e89448ff50734626bce454b32"},
+    {file = "boto3-1.28.22.tar.gz", hash = "sha256:af1ce129f462cdc8dfb1a1c559d7ed725e51344fb0ae4a56d9453196bf416555"},
+]
+
+[package.dependencies]
+botocore = ">=1.31.22,<1.32.0"
+jmespath = ">=0.7.1,<2.0.0"
+s3transfer = ">=0.6.0,<0.7.0"
+
+[package.extras]
+crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
+
+[[package]]
+name = "botocore"
+version = "1.31.22"
+description = "Low-level, data-driven core of boto 3."
+optional = false
+python-versions = ">= 3.7"
+files = [
+    {file = "botocore-1.31.22-py3-none-any.whl", hash = "sha256:b91025ca1a16b13ae662bdb46e7c16d2c53619df23bf3583a43791519da14870"},
+    {file = "botocore-1.31.22.tar.gz", hash = "sha256:d193ab0742ddc4af3a3994af4ec993acf5ac75460f298880fe869765e7bc578d"},
+]
+
+[package.dependencies]
+jmespath = ">=0.7.1,<2.0.0"
+python-dateutil = ">=2.1,<3.0.0"
+urllib3 = ">=1.25.4,<1.27"
+
+[package.extras]
+crt = ["awscrt (==0.16.26)"]
+
+[[package]]
+name = "certifi"
+version = "2023.7.22"
+description = "Python package for providing Mozilla's CA Bundle."
+optional = false
+python-versions = ">=3.6"
+files = [
+    {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"},
+    {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"},
+]
+
+[[package]]
+name = "cffi"
+version = "1.15.1"
+description = "Foreign Function Interface for Python calling C code."
+optional = false
+python-versions = "*"
+files = [
+    {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"},
+    {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"},
+    {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"},
+    {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"},
+    {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"},
+    {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"},
+    {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"},
+    {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"},
+    {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"},
+    {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"},
+    {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"},
+    {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"},
+    {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"},
+    {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"},
+    {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"},
+    {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"},
+    {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"},
+    {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"},
+    {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"},
+    {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"},
+    {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"},
+    {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"},
+    {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"},
+    {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"},
+    {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"},
+    {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"},
+    {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"},
+    {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"},
+    {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"},
+    {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"},
+    {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"},
+    {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"},
+    {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"},
+    {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"},
+    {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"},
+    {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"},
+    {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"},
+    {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"},
+    {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"},
+    {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"},
+    {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"},
+    {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"},
+    {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"},
+    {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"},
+    {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"},
+    {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"},
+    {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"},
+    {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"},
+    {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"},
+    {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"},
+    {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"},
+    {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"},
+    {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"},
+    {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"},
+    {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"},
+    {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"},
+    {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"},
+    {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"},
+    {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"},
+    {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"},
+    {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"},
+    {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"},
+    {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"},
+    {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"},
+]
+
+[package.dependencies]
+pycparser = "*"
+
+[[package]]
+name = "charset-normalizer"
+version = "3.2.0"
+description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
+optional = false
+python-versions = ">=3.7.0"
+files = [
+    {file = "charset-normalizer-3.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"},
+    {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"},
+    {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"},
+    {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"},
+    {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"},
+    {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"},
+    {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"},
+    {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"},
+    {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"},
+    {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"},
+    {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"},
+    {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"},
+    {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"},
+    {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"},
+    {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"},
+    {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"},
+    {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"},
+    {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"},
+    {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"},
+    {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"},
+    {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"},
+    {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"},
+    {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"},
+    {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"},
+    {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"},
+    {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"},
+    {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"},
+    {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"},
+    {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"},
+    {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"},
+    {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"},
+    {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"},
+    {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"},
+    {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"},
+    {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"},
+    {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"},
+    {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"},
+    {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"},
+    {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"},
+    {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"},
+    {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"},
+    {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"},
+    {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"},
+    {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"},
+    {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"},
+    {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"},
+    {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"},
+    {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"},
+    {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"},
+    {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"},
+    {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"},
+    {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"},
+    {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"},
+    {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"},
+    {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"},
+    {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"},
+    {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"},
+    {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"},
+    {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"},
+    {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"},
+    {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"},
+    {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"},
+    {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"},
+    {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"},
+    {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"},
+    {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"},
+    {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"},
+    {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"},
+    {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"},
+    {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"},
+    {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"},
+    {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"},
+    {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"},
+    {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"},
+    {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"},
+]
+
+[[package]]
+name = "cryptography"
+version = "40.0.1"
+description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
+optional = false
+python-versions = ">=3.6"
+files = [
+    {file = "cryptography-40.0.1-cp36-abi3-macosx_10_12_universal2.whl", hash = "sha256:918cb89086c7d98b1b86b9fdb70c712e5a9325ba6f7d7cfb509e784e0cfc6917"},
+    {file = "cryptography-40.0.1-cp36-abi3-macosx_10_12_x86_64.whl", hash = "sha256:9618a87212cb5200500e304e43691111570e1f10ec3f35569fdfcd17e28fd797"},
+    {file = "cryptography-40.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a4805a4ca729d65570a1b7cac84eac1e431085d40387b7d3bbaa47e39890b88"},
+    {file = "cryptography-40.0.1-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63dac2d25c47f12a7b8aa60e528bfb3c51c5a6c5a9f7c86987909c6c79765554"},
+    {file = "cryptography-40.0.1-cp36-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:0a4e3406cfed6b1f6d6e87ed243363652b2586b2d917b0609ca4f97072994405"},
+    {file = "cryptography-40.0.1-cp36-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:1e0af458515d5e4028aad75f3bb3fe7a31e46ad920648cd59b64d3da842e4356"},
+    {file = "cryptography-40.0.1-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:d8aa3609d337ad85e4eb9bb0f8bcf6e4409bfb86e706efa9a027912169e89122"},
+    {file = "cryptography-40.0.1-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:cf91e428c51ef692b82ce786583e214f58392399cf65c341bc7301d096fa3ba2"},
+    {file = "cryptography-40.0.1-cp36-abi3-win32.whl", hash = "sha256:650883cc064297ef3676b1db1b7b1df6081794c4ada96fa457253c4cc40f97db"},
+    {file = "cryptography-40.0.1-cp36-abi3-win_amd64.whl", hash = "sha256:a805a7bce4a77d51696410005b3e85ae2839bad9aa38894afc0aa99d8e0c3160"},
+    {file = "cryptography-40.0.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cd033d74067d8928ef00a6b1327c8ea0452523967ca4463666eeba65ca350d4c"},
+    {file = "cryptography-40.0.1-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:d36bbeb99704aabefdca5aee4eba04455d7a27ceabd16f3b3ba9bdcc31da86c4"},
+    {file = "cryptography-40.0.1-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:32057d3d0ab7d4453778367ca43e99ddb711770477c4f072a51b3ca69602780a"},
+    {file = "cryptography-40.0.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:f5d7b79fa56bc29580faafc2ff736ce05ba31feaa9d4735048b0de7d9ceb2b94"},
+    {file = "cryptography-40.0.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7c872413353c70e0263a9368c4993710070e70ab3e5318d85510cc91cce77e7c"},
+    {file = "cryptography-40.0.1-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:28d63d75bf7ae4045b10de5413fb1d6338616e79015999ad9cf6fc538f772d41"},
+    {file = "cryptography-40.0.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6f2bbd72f717ce33100e6467572abaedc61f1acb87b8d546001328d7f466b778"},
+    {file = "cryptography-40.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:cc3a621076d824d75ab1e1e530e66e7e8564e357dd723f2533225d40fe35c60c"},
+    {file = "cryptography-40.0.1.tar.gz", hash = "sha256:2803f2f8b1e95f614419926c7e6f55d828afc614ca5ed61543877ae668cc3472"},
+]
+
+[package.dependencies]
+cffi = ">=1.12"
+
+[package.extras]
+docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"]
+docstest = ["pyenchant (>=1.6.11)", "sphinxcontrib-spelling (>=4.0.1)", "twine (>=1.12.0)"]
+pep8test = ["black", "check-manifest", "mypy", "ruff"]
+sdist = ["setuptools-rust (>=0.11.4)"]
+ssh = ["bcrypt (>=3.1.5)"]
+test = ["iso8601", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-shard (>=0.1.2)", "pytest-subtests", "pytest-xdist"]
+test-randomorder = ["pytest-randomly"]
+tox = ["tox"]
+
+[[package]]
+name = "hcloud"
+version = "1.18.2"
+description = "Official Hetzner Cloud python library"
+optional = false
+python-versions = ">3.5"
+files = [
+    {file = "hcloud-1.18.2-py2.py3-none-any.whl", hash = "sha256:fcd73c7aab1d6e729333697e5214b26727775eccdbfb50effd1863c3424caa59"},
+    {file = "hcloud-1.18.2.tar.gz", hash = "sha256:37bd5ba56387e3c491c5babd3e08ab91d5f0390cd5e880e4dfea19e21681bc9e"},
+]
+
+[package.dependencies]
+python-dateutil = ">=2.7.5"
+requests = ">=2.20"
+
+[package.extras]
+docs = ["Sphinx (==1.8.1)", "sphinx-rtd-theme (==0.4.2)"]
+
+[[package]]
+name = "hetzner"
+version = "0.8.3"
+description = "High level access to the Hetzner robot"
+optional = false
+python-versions = "*"
+files = [
+    {file = "hetzner-0.8.3.tar.gz", hash = "sha256:9a43dbbeb4a1f3efc86c5fe1c1d7039aaa635dfdb829506ec3aa34382d3a7114"},
+]
+
+[[package]]
+name = "idna"
+version = "3.4"
+description = "Internationalized Domain Names in Applications (IDNA)"
+optional = false
+python-versions = ">=3.5"
+files = [
+    {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"},
+    {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"},
+]
+
+[[package]]
+name = "jmespath"
+version = "1.0.1"
+description = "JSON Matching Expressions"
+optional = false
+python-versions = ">=3.7"
+files = [
+    {file = "jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980"},
+    {file = "jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe"},
+]
+
+[[package]]
+name = "jsonpickle"
+version = "3.0.1"
+description = "Python library for serializing any arbitrary object graph into JSON"
+optional = false
+python-versions = ">=3.7"
+files = [
+    {file = "jsonpickle-3.0.1-py2.py3-none-any.whl", hash = "sha256:130d8b293ea0add3845de311aaba55e6d706d0bb17bc123bd2c8baf8a39ac77c"},
+    {file = "jsonpickle-3.0.1.tar.gz", hash = "sha256:032538804795e73b94ead410800ac387fdb6de98f8882ac957fcd247e3a85200"},
+]
+
+[package.extras]
+docs = ["jaraco.packaging (>=3.2)", "rst.linker (>=1.9)", "sphinx"]
+testing = ["ecdsa", "feedparser", "gmpy2", "numpy", "pandas", "pymongo", "pytest (>=3.5,!=3.7.3)", "pytest-black-multipy", "pytest-checkdocs (>=1.2.3)", "pytest-cov", "pytest-flake8 (>=1.1.1)", "scikit-learn", "sqlalchemy"]
+testing-libs = ["simplejson", "ujson"]
+
+[[package]]
+name = "libvirt-python"
+version = "9.6.0"
+description = "The libvirt virtualization API python binding"
+optional = false
+python-versions = ">=3.6"
+files = [
+    {file = "libvirt-python-9.6.0.tar.gz", hash = "sha256:53422d8e3110139655c3d9c2ff2602b238f8a39b7bf61a92a620119b45550a99"},
+]
+
+[[package]]
+name = "nixops"
+version = "2.0.0"
+description = "NixOS cloud provisioning and deployment tool"
+optional = false
+python-versions = "^3.10"
+files = []
+develop = false
+
+[package.dependencies]
+pluggy = "^1.0.0"
+PrettyTable = "^0.7.2"
+typeguard = "^2.7.1"
+typing-extensions = "^3.7.4"
+
+[package.source]
+type = "git"
+url = "https://github.com/NixOS/nixops.git"
+reference = "master"
+resolved_reference = "fc9b55c55da62f949028143b974f67fdc7f40c8b"
+
+[[package]]
+name = "nixops-aws"
+version = "1.0"
+description = "NixOps AWS plugin"
+optional = false
+python-versions = "^3.7"
+files = []
+develop = false
+
+[package.dependencies]
+boto = "^2.49.0"
+boto3 = "^1.13.7"
+nixops = {git = "https://github.com/NixOS/nixops.git", rev = "master"}
+nixos-modules-contrib = {git = "https://github.com/nix-community/nixos-modules-contrib.git", rev = "master"}
+typing-extensions = "^3.7.4"
+
+[package.source]
+type = "git"
+url = "https://github.com/NixOS/nixops-aws.git"
+reference = "HEAD"
+resolved_reference = "8802d1cda9004ec1362815292c2a8ab95e6d64e8"
+
+[[package]]
+name = "nixops-digitalocean"
+version = "2.0"
+description = "NixOps plugin for Digital Ocean"
+optional = false
+python-versions = "^3.7"
+files = []
+develop = false
+
+[package.dependencies]
+nixops = {git = "https://github.com/NixOS/nixops.git"}
+python-digitalocean = "^1.15.0"
+
+[package.source]
+type = "git"
+url = "https://github.com/nix-community/nixops-digitalocean.git"
+reference = "HEAD"
+resolved_reference = "e977b7f11e264a6a2bff2dcbc7b94c6a97b92fff"
+
+[[package]]
+name = "nixops-encrypted-links"
+version = "1.0"
+description = "Encrypted links support for NixOps"
+optional = false
+python-versions = "^3.7"
+files = []
+develop = false
+
+[package.dependencies]
+nixops = {git = "https://github.com/NixOS/nixops.git"}
+
+[package.source]
+type = "git"
+url = "https://github.com/nix-community/nixops-encrypted-links.git"
+reference = "HEAD"
+resolved_reference = "e2f196fce15fcfb00d18c055e1ac53aec33b8fb1"
+
+[[package]]
+name = "nixops-gcp"
+version = "1.0"
+description = "NixOps backend for Google Cloud Platform"
+optional = false
+python-versions = "^3.10"
+files = []
+develop = false
+
+[package.dependencies]
+apache-libcloud = "^3.7.0"
+cryptography = "40.0.1"
+nixops = {git = "https://github.com/NixOS/nixops.git", rev = "master"}
+nixos-modules-contrib = {git = "https://github.com/nix-community/nixos-modules-contrib.git", rev = "master"}
+
+[package.source]
+type = "git"
+url = "https://github.com/nix-community/nixops-gce.git"
+reference = "HEAD"
+resolved_reference = "d13cb794aef763338f544010ceb1816fe31d7f42"
+
+[[package]]
+name = "nixops-hercules-ci"
+version = "0.1.0"
+description = ""
+optional = false
+python-versions = "^3.8"
+files = []
+develop = false
+
+[package.dependencies]
+nixops = {git = "https://github.com/NixOS/nixops.git"}
+
+[package.source]
+type = "git"
+url = "https://github.com/hercules-ci/nixops-hercules-ci.git"
+reference = "HEAD"
+resolved_reference = "e601d5baffd003fd5f22deeaea0cb96444b054dc"
+
+[[package]]
+name = "nixops-hetzner"
+version = "1.0"
+description = "NixOS deployment tool, but for hetzner"
+optional = false
+python-versions = "^3.7"
+files = []
+develop = false
+
+[package.dependencies]
+hetzner = "0.8.3"
+nixops = {git = "https://github.com/NixOS/nixops.git", rev = "master"}
+nixos-modules-contrib = {git = "https://github.com/nix-community/nixos-modules-contrib.git", rev = "master"}
+typing-extensions = "^3.7.4"
+
+[package.source]
+type = "git"
+url = "https://github.com/NixOS/nixops-hetzner"
+reference = "HEAD"
+resolved_reference = "bc7a68070c7371468bcc8bf6e36baebc6bd2da35"
+
+[[package]]
+name = "nixops-hetznercloud"
+version = "0.1.3"
+description = "NixOps Hetzner Cloud plugin"
+optional = false
+python-versions = "^3.10"
+files = []
+develop = false
+
+[package.dependencies]
+hcloud = "1.18.2"
+nixops = {git = "https://github.com/NixOS/nixops.git", rev = "master"}
+typing-extensions = "^3.7.4"
+
+[package.source]
+type = "git"
+url = "https://github.com/lukebfox/nixops-hetznercloud.git"
+reference = "HEAD"
+resolved_reference = "e14f340f7ffe9e2aa7ffbaac0b8a2e3b4cc116b3"
+
+[[package]]
+name = "nixops-virtd"
+version = "1.0"
+description = "NixOps plugin for virtd"
+optional = false
+python-versions = "^3.10"
+files = []
+develop = false
+
+[package.dependencies]
+libvirt-python = "^9.0"
+nixops = {git = "https://github.com/NixOS/nixops.git"}
+
+[package.source]
+type = "git"
+url = "https://github.com/nix-community/nixops-libvirtd.git"
+reference = "HEAD"
+resolved_reference = "be1ea32e02d8abb3dbe1b09b7c5a7419a7412991"
+
+[[package]]
+name = "nixopsvbox"
+version = "1.7"
+description = "NixOps backend for VirtualBox"
+optional = false
+python-versions = "^3.7"
+files = []
+develop = false
+
+[package.dependencies]
+nixops = {git = "https://github.com/NixOS/nixops.git", rev = "master"}
+
+[package.source]
+type = "git"
+url = "https://github.com/nix-community/nixops-vbox.git"
+reference = "HEAD"
+resolved_reference = "2729672865ebe2aa973c062a3fbddda8c1359da0"
+
+[[package]]
+name = "nixos-modules-contrib"
+version = "0.1.0"
+description = "NixOS modules that don't quite belong in NixOS."
+optional = false
+python-versions = "^3.7"
+files = []
+develop = false
+
+[package.dependencies]
+nixops = {git = "https://github.com/NixOS/nixops.git", rev = "master"}
+
+[package.source]
+type = "git"
+url = "https://github.com/nix-community/nixos-modules-contrib.git"
+reference = "master"
+resolved_reference = "81a1c2ef424dcf596a97b2e46a58ca73a1dd1ff8"
+
+[[package]]
+name = "pluggy"
+version = "1.2.0"
+description = "plugin and hook calling mechanisms for python"
+optional = false
+python-versions = ">=3.7"
+files = [
+    {file = "pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"},
+    {file = "pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"},
+]
+
+[package.extras]
+dev = ["pre-commit", "tox"]
+testing = ["pytest", "pytest-benchmark"]
+
+[[package]]
+name = "prettytable"
+version = "0.7.2"
+description = "A simple Python library for easily displaying tabular data in a visually appealing ASCII table format."
+optional = false
+python-versions = "*"
+files = [
+    {file = "prettytable-0.7.2.tar.bz2", hash = "sha256:853c116513625c738dc3ce1aee148b5b5757a86727e67eff6502c7ca59d43c36"},
+    {file = "prettytable-0.7.2.tar.gz", hash = "sha256:2d5460dc9db74a32bcc8f9f67de68b2c4f4d2f01fa3bd518764c69156d9cacd9"},
+    {file = "prettytable-0.7.2.zip", hash = "sha256:a53da3b43d7a5c229b5e3ca2892ef982c46b7923b51e98f0db49956531211c4f"},
+]
+
+[[package]]
+name = "pycparser"
+version = "2.21"
+description = "C parser in Python"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+files = [
+    {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"},
+    {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"},
+]
+
+[[package]]
+name = "python-dateutil"
+version = "2.8.2"
+description = "Extensions to the standard Python datetime module"
+optional = false
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
+files = [
+    {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"},
+    {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"},
+]
+
+[package.dependencies]
+six = ">=1.5"
+
+[[package]]
+name = "python-digitalocean"
+version = "1.17.0"
+description = "digitalocean.com API to manage Droplets and Images"
+optional = false
+python-versions = "*"
+files = [
+    {file = "python-digitalocean-1.17.0.tar.gz", hash = "sha256:107854fde1aafa21774e8053cf253b04173613c94531f75d5a039ad770562b24"},
+    {file = "python_digitalocean-1.17.0-py3-none-any.whl", hash = "sha256:0032168e022e85fca314eb3f8dfaabf82087f2ed40839eb28f1eeeeca5afb1fa"},
+]
+
+[package.dependencies]
+jsonpickle = "*"
+requests = "*"
+
+[[package]]
+name = "requests"
+version = "2.31.0"
+description = "Python HTTP for Humans."
+optional = false
+python-versions = ">=3.7"
+files = [
+    {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"},
+    {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"},
+]
+
+[package.dependencies]
+certifi = ">=2017.4.17"
+charset-normalizer = ">=2,<4"
+idna = ">=2.5,<4"
+urllib3 = ">=1.21.1,<3"
+
+[package.extras]
+socks = ["PySocks (>=1.5.6,!=1.5.7)"]
+use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"]
+
+[[package]]
+name = "s3transfer"
+version = "0.6.1"
+description = "An Amazon S3 Transfer Manager"
+optional = false
+python-versions = ">= 3.7"
+files = [
+    {file = "s3transfer-0.6.1-py3-none-any.whl", hash = "sha256:3c0da2d074bf35d6870ef157158641178a4204a6e689e82546083e31e0311346"},
+    {file = "s3transfer-0.6.1.tar.gz", hash = "sha256:640bb492711f4c0c0905e1f62b6aaeb771881935ad27884852411f8e9cacbca9"},
+]
+
+[package.dependencies]
+botocore = ">=1.12.36,<2.0a.0"
+
+[package.extras]
+crt = ["botocore[crt] (>=1.20.29,<2.0a.0)"]
+
+[[package]]
+name = "six"
+version = "1.16.0"
+description = "Python 2 and 3 compatibility utilities"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
+files = [
+    {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
+    {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
+]
+
+[[package]]
+name = "typeguard"
+version = "2.13.3"
+description = "Run-time type checker for Python"
+optional = false
+python-versions = ">=3.5.3"
+files = [
+    {file = "typeguard-2.13.3-py3-none-any.whl", hash = "sha256:5e3e3be01e887e7eafae5af63d1f36c849aaa94e3a0112097312aabfa16284f1"},
+    {file = "typeguard-2.13.3.tar.gz", hash = "sha256:00edaa8da3a133674796cf5ea87d9f4b4c367d77476e185e80251cc13dfbb8c4"},
+]
+
+[package.extras]
+doc = ["sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"]
+test = ["mypy", "pytest", "typing-extensions"]
+
+[[package]]
+name = "typing-extensions"
+version = "3.10.0.2"
+description = "Backported and Experimental Type Hints for Python 3.5+"
+optional = false
+python-versions = "*"
+files = [
+    {file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"},
+    {file = "typing_extensions-3.10.0.2-py3-none-any.whl", hash = "sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34"},
+    {file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"},
+]
+
+[[package]]
+name = "urllib3"
+version = "1.26.16"
+description = "HTTP library with thread-safe connection pooling, file post, and more."
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
+files = [
+    {file = "urllib3-1.26.16-py2.py3-none-any.whl", hash = "sha256:8d36afa7616d8ab714608411b4a3b13e58f463aee519024578e062e141dce20f"},
+    {file = "urllib3-1.26.16.tar.gz", hash = "sha256:8f135f6502756bde6b2a9b28989df5fbe87c9970cecaa69041edcce7f0589b14"},
+]
+
+[package.extras]
+brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"]
+secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"]
+socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
+
+[metadata]
+lock-version = "2.0"
+python-versions = "^3.10"
+content-hash = "3d42a61f93a1a6b6816e317a78f3385271bd838430200f69154ebc5bebeb6162"
diff --git a/nixpkgs/pkgs/applications/networking/cluster/nixops/pyproject.toml b/nixpkgs/pkgs/applications/networking/cluster/nixops/pyproject.toml
new file mode 100644
index 000000000000..84739cb09dce
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/nixops/pyproject.toml
@@ -0,0 +1,28 @@
+[tool.poetry]
+name = "nixopsenv"
+version = "2.0.0"
+description = "NixOps 2.0"
+authors = ["Adam Hoese <adam.hose@tweag.io>"]
+
+[tool.poetry.dependencies]
+python = "^3.10"
+nixops = {git = "https://github.com/NixOS/nixops.git"}
+nixops-aws = {git = "https://github.com/NixOS/nixops-aws.git"}
+nixops-digitalocean = {git = "https://github.com/nix-community/nixops-digitalocean.git"}
+nixops-encrypted-links = {git = "https://github.com/nix-community/nixops-encrypted-links.git"}
+nixops-gcp = {git = "https://github.com/nix-community/nixops-gce.git"}
+nixops-hercules-ci = {git = "https://github.com/hercules-ci/nixops-hercules-ci.git"}
+nixops-hetzner = {git = "https://github.com/NixOS/nixops-hetzner"}
+nixops-hetznercloud = {git = "https://github.com/lukebfox/nixops-hetznercloud.git"}
+nixopsvbox = {git = "https://github.com/nix-community/nixops-vbox.git"}
+nixops-virtd = {git = "https://github.com/nix-community/nixops-libvirtd.git"}
+
+# poetry lock would download an excessive number of wheels looking for a compatible version, so
+# we pin a feasible range here. This does not represent a real constraint on the version and
+# would be ok to remove/update/ignore in future upgrades. Note that a botocore wheel is about 50MB.
+boto3 = "^1.26"
+botocore = "^1.29"
+
+[build-system]
+requires = ["poetry>=0.12"]
+build-backend = "poetry.masonry.api"
diff --git a/nixpkgs/pkgs/applications/networking/cluster/nixops/shell.nix b/nixpkgs/pkgs/applications/networking/cluster/nixops/shell.nix
new file mode 100644
index 000000000000..a7926d0fd533
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/nixops/shell.nix
@@ -0,0 +1,11 @@
+{ pkgs ? import <nixpkgs> { } }:
+
+pkgs.mkShell {
+  packages = [
+    pkgs.python310
+    pkgs.poetry2nix.cli
+    pkgs.pkg-config
+    pkgs.libvirt
+    pkgs.poetry
+  ];
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/nixops/update b/nixpkgs/pkgs/applications/networking/cluster/nixops/update
new file mode 100755
index 000000000000..1d1fd93fdbea
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/nixops/update
@@ -0,0 +1,11 @@
+#!/usr/bin/env nix-shell
+#! nix-shell -I nixpkgs=../../../../../. -i bash
+set -eux
+
+rm -f ./poetry.lock ./poetry-git-overlay.nix
+
+poetry lock
+
+# builtins.fetchGit is disabled in restricted eval
+# Pin fixed-output derivations from lock file
+poetry2nix lock
diff --git a/nixpkgs/pkgs/applications/networking/cluster/node-problem-detector/default.nix b/nixpkgs/pkgs/applications/networking/cluster/node-problem-detector/default.nix
new file mode 100644
index 000000000000..047a44e84fd5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/node-problem-detector/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, buildGoModule, fetchFromGitHub, systemd }:
+
+buildGoModule rec {
+  pname = "node-problem-detector";
+  version = "0.8.14";
+
+  src = fetchFromGitHub {
+    owner = "kubernetes";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-kh9rYg6UszBMCWYfVU+tP4ZRoigEm6+Z+7pnZWdbcwU=";
+  };
+
+  vendorHash = null;
+
+  doCheck = false;
+
+  # Optionally, a log counter binary can be created to parse journald logs.
+  # The binary is dynamically linked against systemd libraries, making it a
+  # Linux-only feature. See 'ENABLE_JOURNALD' upstream:
+  # https://github.com/kubernetes/node-problem-detector/blob/master/Makefile
+  subPackages = [ "cmd/nodeproblemdetector" ] ++
+    lib.optionals stdenv.isLinux [ "cmd/logcounter" ];
+
+  preBuild = ''
+    export CGO_ENABLED=${if stdenv.isLinux then "1" else "0"}
+  '';
+
+  buildInputs = lib.optionals stdenv.isLinux [ systemd ];
+
+  tags = lib.optionals stdenv.isLinux [ "journald" ];
+
+  ldflags = [
+    "-X k8s.io/${pname}/pkg/version.version=v${version}"
+  ];
+
+  meta = with lib; {
+    description = "Various problem detectors running on the Kubernetes nodes";
+    homepage = "https://github.com/kubernetes/node-problem-detector";
+    changelog = "https://github.com/kubernetes/node-problem-detector/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ lbpdt ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/nomad-autoscaler/default.nix b/nixpkgs/pkgs/applications/networking/cluster/nomad-autoscaler/default.nix
new file mode 100644
index 000000000000..acd0643b4bdf
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/nomad-autoscaler/default.nix
@@ -0,0 +1,110 @@
+{ lib, fetchFromGitHub, buildGoModule, buildEnv }:
+
+let
+  package = buildGoModule rec {
+    pname = "nomad-autoscaler";
+    version = "0.3.6";
+
+    outputs = [
+      "out"
+      "bin"
+      "aws_asg"
+      "azure_vmss"
+      "datadog"
+      "fixed_value"
+      "gce_mig"
+      "nomad_apm"
+      "nomad_target"
+      "pass_through"
+      "prometheus"
+      "target_value"
+      "threshold"
+    ];
+
+    src = fetchFromGitHub {
+      owner = "hashicorp";
+      repo = "nomad-autoscaler";
+      rev = "v${version}";
+      sha256 = "sha256-fK5GsszNhz/WP0zVk2lOfU/gwYijdQa5qhNYO33RhXc=";
+    };
+
+    vendorHash = "sha256-Duzjpl011mj/SNoX/jQGMXwqUHPDz7iIMygRmK1vC3Q=";
+
+    buildPhase = ''
+      runHook preBuild
+      make build plugins
+      runHook postBuild
+    '';
+
+    # tries to pull tests from network, and fails silently anyway
+    doCheck = false;
+
+    installPhase = ''
+      runHook preInstall
+      mkdir -p $bin/bin $out/bin
+      mv bin/nomad-autoscaler $bin/bin
+      ln -s $bin/bin/nomad-autoscaler $out/bin/nomad-autoscaler
+
+      for d in $(getAllOutputNames); do
+        mkdir -p ''${!d}/share
+      done
+      rmdir $bin/share
+
+      # have out contain all of the plugins
+      for plugin in bin/plugins/*; do
+        cp "$plugin" $out/share/
+      done
+
+      # populate the outputs as individual plugins
+      # can't think of a more generic way to handle this
+      # bash doesn't allow for dashes '-' to be in a variable name
+      # this means that the output names will need to differ slightly from the binary
+      mv bin/plugins/aws-asg $aws_asg/share/
+      mv bin/plugins/azure-vmss $azure_vmss/share/
+      mv bin/plugins/datadog $datadog/share/
+      mv bin/plugins/fixed-value $fixed_value/share/
+      mv bin/plugins/gce-mig $gce_mig/share/
+      mv bin/plugins/nomad-apm $nomad_apm/share/
+      mv bin/plugins/nomad-target $nomad_target/share/
+      mv bin/plugins/pass-through $pass_through/share/
+      mv bin/plugins/prometheus $prometheus/share/
+      mv bin/plugins/target-value $target_value/share/
+      mv bin/plugins/threshold $threshold/share/
+      runHook postInstall
+    '';
+
+    # make toggle-able, so that overrided versions can disable this check if
+    # they want newer versions of the plugins without having to modify
+    # the output logic
+    doInstallCheck = true;
+    installCheckPhase = ''
+      rmdir bin/plugins || {
+        echo "Not all plugins were extracted"
+        echo "Please move the following to their related output: $(ls bin/plugins)"
+        exit 1
+      }
+    '';
+
+    passthru = {
+      inherit plugins withPlugins;
+    };
+
+    meta = with lib; {
+      description = "Autoscaling daemon for Nomad";
+      homepage = "https://github.com/hashicorp/nomad-autoscaler";
+      license = licenses.mpl20;
+      maintainers = with maintainers; [ jonringer ];
+    };
+  };
+
+  plugins = let
+      plugins = builtins.filter (n: !(lib.elem n [ "out" "bin" ])) package.outputs;
+    in lib.genAttrs plugins (output: package.${output});
+
+  # Intended to be used as: (nomad-autoscaler.withPlugins (ps: [ ps.aws_asg ps.nomad_target ])
+  withPlugins = f: buildEnv {
+    name = "nomad-autoscaler-env";
+    paths = [ package.bin ] ++ f plugins;
+  };
+in
+  package
diff --git a/nixpkgs/pkgs/applications/networking/cluster/nomad-driver-podman/default.nix b/nixpkgs/pkgs/applications/networking/cluster/nomad-driver-podman/default.nix
new file mode 100644
index 000000000000..224da229b084
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/nomad-driver-podman/default.nix
@@ -0,0 +1,28 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "nomad-driver-podman";
+  version = "0.5.1";
+
+  src = fetchFromGitHub {
+    owner = "hashicorp";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-MYqsTuMLxbVNWLAWjQ8xQts5qJvhTylle7YLtGyswjY=";
+  };
+
+  vendorHash = "sha256-wjJ+mq/m7IjbwypoBvBhjOyAT4v4HDSChHY5OE0xA2U=";
+
+  subPackages = [ "." ];
+
+  # some tests require a running podman service
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://www.github.com/hashicorp/nomad-driver-podman";
+    description = "Podman task driver for Nomad";
+    platforms = platforms.linux;
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ cpcloud ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/nomad-pack/default.nix b/nixpkgs/pkgs/applications/networking/cluster/nomad-pack/default.nix
new file mode 100644
index 000000000000..92c98c44fde6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/nomad-pack/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, fetchFromGitHub
+, buildGoModule
+}:
+
+buildGoModule rec {
+  pname = "nomad-pack";
+  version = "0.0.1-techpreview.3";
+  rev   = "3b4163b3b826c8408ae824238daaa45307d03380";
+
+  src = fetchFromGitHub {
+    owner = "hashicorp";
+    repo = pname;
+    inherit rev;
+    sha256 = "sha256-Br+BJRAo9qSJQjg2awQTnsYz76WReVWsTUw6XoUb1YY=";
+  };
+
+  vendorHash = "sha256-dUPDwKdkBXBfyfbFxrpgHwZ0Q5jB7aamClNmv+tLCGA=";
+
+  # skip running go tests as they require network access
+  doCheck = false;
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+    $out/bin/nomad-pack --version
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/hashicorp/nomad-pack";
+    changelog = "https://github.com/hashicorp/nomad-pack/blob/main/CHANGELOG.md";
+    description = "Nomad Pack is a templating and packaging tool used with HashiCorp Nomad.";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ techknowlogick ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/nomad/default.nix b/nixpkgs/pkgs/applications/networking/cluster/nomad/default.nix
new file mode 100644
index 000000000000..b9bb93249a25
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/nomad/default.nix
@@ -0,0 +1,85 @@
+{ lib
+, buildGoModule
+, buildGo120Module
+, fetchFromGitHub
+, nixosTests
+, installShellFiles
+}:
+
+let
+  generic =
+    { buildGoModule, version, sha256, vendorHash, ... }@attrs:
+    let attrs' = builtins.removeAttrs attrs [ "buildGoModule" "version" "sha256" "vendorHash" ];
+    in
+    buildGoModule (rec {
+      pname = "nomad";
+      inherit version vendorHash;
+
+      subPackages = [ "." ];
+
+      src = fetchFromGitHub {
+        owner = "hashicorp";
+        repo = pname;
+        rev = "v${version}";
+        inherit sha256;
+      };
+
+      nativeBuildInputs = [ installShellFiles ];
+
+      # ui:
+      #  Nomad release commits include the compiled version of the UI, but the file
+      #  is only included if we build with the ui tag.
+      tags = [ "ui" ];
+
+      postInstall = ''
+        echo "complete -C $out/bin/nomad nomad" > nomad.bash
+        installShellCompletion nomad.bash
+      '';
+
+      meta = with lib; {
+        homepage = "https://www.nomadproject.io/";
+        description = "A Distributed, Highly Available, Datacenter-Aware Scheduler";
+        license = licenses.mpl20;
+        maintainers = with maintainers; [ rushmorem pradeepchhetri endocrimes amaxine techknowlogick ];
+      };
+    } // attrs');
+in
+rec {
+  # Nomad never updates major go versions within a release series and is unsupported
+  # on Go versions that it did not ship with. Due to historic bugs when compiled
+  # with different versions we pin Go for all versions.
+  # Upstream partially documents used Go versions here
+  # https://github.com/hashicorp/nomad/blob/master/contributing/golang.md
+
+  nomad = nomad_1_5;
+
+  nomad_1_4 = generic {
+    buildGoModule = buildGo120Module;
+    version = "1.4.12";
+    sha256 = "sha256-dO98FOaO5MB5pWzeF705s/aBDTaF0OyWnVxWGB91suI=";
+    vendorHash = "sha256-D5TcTZa64Jr47u4mrTXK4lUIC5gfBQNVgL6QKh1CaQM=";
+    passthru.tests.nomad = nixosTests.nomad;
+  };
+
+  nomad_1_5 = generic {
+    buildGoModule = buildGo120Module;
+    version = "1.5.8";
+    sha256 = "sha256-5VAUNunQz4s1Icd+s5i8Kx6u1P0By+ikl4C5wXM1oho=";
+    vendorHash = "sha256-y3WiQuoQn6SdwTgtPWuB6EBtsJC+YleQPzownZQNkno=";
+    passthru.tests.nomad = nixosTests.nomad;
+    preCheck = ''
+      export PATH="$PATH:$NIX_BUILD_TOP/go/bin"
+    '';
+  };
+
+  nomad_1_6 = generic {
+    buildGoModule = buildGo120Module;
+    version = "1.6.1";
+    sha256 = "sha256-RsyGUaLteGiNf0PTkKLcjHTevhKb/mNx2JORpXhHJMw=";
+    vendorHash = "sha256-Y3O7ADzZPlLWFbXSYBcI6b5MAhMD0UnkhQxO9VJMpOY=";
+    passthru.tests.nomad = nixosTests.nomad;
+    preCheck = ''
+      export PATH="$PATH:$NIX_BUILD_TOP/go/bin"
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/nova/default.nix b/nixpkgs/pkgs/applications/networking/cluster/nova/default.nix
new file mode 100644
index 000000000000..2686b79c4b7f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/nova/default.nix
@@ -0,0 +1,30 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "nova";
+  version = "3.7.0";
+
+  src = fetchFromGitHub {
+    owner = "FairwindsOps";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-K4D8vCZxOPRalSDlAmva7Qm72EJ2Xdz20oqKKqkD6iA=";
+  };
+
+  vendorHash = "sha256-c30B8Wjvwp4NnB1P8h4/raGiGAX/cbTZ/KQqh/qeNhA=";
+
+  ldflags = [ "-X main.version=${version}" "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Find outdated or deprecated Helm charts running in your cluster";
+    longDescription = ''
+      Nova scans your cluster for installed Helm charts, then
+      cross-checks them against all known Helm repositories. If it
+      finds an updated version of the chart you're using, or notices
+      your current version is deprecated, it will let you know.
+    '';
+    homepage = "https://nova.docs.fairwinds.com/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ qjoly ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/ocm/default.nix b/nixpkgs/pkgs/applications/networking/cluster/ocm/default.nix
new file mode 100644
index 000000000000..cd9b90f565ef
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/ocm/default.nix
@@ -0,0 +1,48 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles, stdenv, testers, ocm }:
+
+buildGoModule rec {
+  pname = "ocm";
+  version = "0.1.67";
+
+  src = fetchFromGitHub {
+    owner = "openshift-online";
+    repo = "ocm-cli";
+    rev = "v${version}";
+    sha256 = "sha256-MNagqeT6Uw9fLl6gJ+2FYTRZ2rO2qTYi8SBDoOR9EUM=";
+  };
+
+  vendorHash = "sha256-4d8IGe/gTt4HAqyg05pYtAFfHp6NCmUBtfxRA64rEmM=";
+
+  # Strip the final binary.
+  ldflags = [ "-s" "-w" ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  # Tests expect the binary to be located in the root directory.
+  preCheck = ''
+    ln -s $GOPATH/bin/ocm ocm
+  '';
+
+  # Tests fail in Darwin sandbox.
+  doCheck = !stdenv.isDarwin;
+
+  postInstall = ''
+    installShellCompletion --cmd ocm \
+      --bash <($out/bin/ocm completion bash) \
+      --fish <($out/bin/ocm completion fish) \
+      --zsh <($out/bin/ocm completion zsh)
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = ocm;
+    command = "ocm version";
+  };
+
+  meta = with lib; {
+    description = "CLI for the Red Hat OpenShift Cluster Manager";
+    license = licenses.asl20;
+    homepage = "https://github.com/openshift-online/ocm-cli";
+    maintainers = with maintainers; [ stehessel ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/octant/default.nix b/nixpkgs/pkgs/applications/networking/cluster/octant/default.nix
new file mode 100644
index 000000000000..733e4c04a9cc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/octant/default.nix
@@ -0,0 +1,67 @@
+{ lib, stdenv, fetchzip }:
+
+stdenv.mkDerivation rec {
+  pname = "octant";
+  version = "0.25.1";
+
+  src =
+    let
+      inherit (stdenv.hostPlatform) system;
+      suffix = {
+        x86_64-linux = "Linux-64bit";
+        aarch64-linux = "Linux-arm64";
+        x86_64-darwin = "macOS-64bit";
+        aarch64-darwin = "macOS-arm64";
+      }.${system} or (throw "Unsupported system: ${system}");
+      fetchsrc = version: sha256: fetchzip {
+        url = "https://github.com/vmware-tanzu/octant/releases/download/v${version}/octant_${version}_${suffix}.tar.gz";
+        sha256 = sha256.${system};
+      };
+    in
+    fetchsrc version {
+      x86_64-linux = "sha256-bYqycTB036J8trojySPNkC+jrw76F7+N4I4puGCyalU=";
+      aarch64-linux = "sha256-DlzSIZCAASPnflXQ8ndPU7/0jXA18U4bGGOfmgLXPr0=";
+      x86_64-darwin = "sha256-FaPyrPzO7AzC6LHQP5c58NjLTqU+ei8vFffT8x6mUhQ=";
+      aarch64-darwin = "sha256-31CYhAsHYIVAenp8hFHYj8LhFf3lSiOTw7gULBu3gio=";
+    };
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+    install -D octant $out/bin/octant
+    runHook postInstall
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+    $out/bin/octant --help
+    $out/bin/octant version | grep "${version}"
+    runHook postInstallCheck
+  '';
+
+  dontPatchELF = true;
+  dontPatchShebangs = true;
+
+  passthru.updateScript = ./update.sh;
+
+  meta = with lib; {
+    homepage = "https://octant.dev/";
+    changelog = "https://github.com/vmware-tanzu/octant/blob/v${version}/CHANGELOG.md";
+    description = "Highly extensible platform for developers to better understand the complexity of Kubernetes clusters";
+    longDescription = ''
+      Octant is a tool for developers to understand how applications run on a
+      Kubernetes cluster.
+      It aims to be part of the developer's toolkit for gaining insight and
+      approaching complexity found in Kubernetes. Octant offers a combination of
+      introspective tooling, cluster navigation, and object management along
+      with a plugin system to further extend its capabilities.
+    '';
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.asl20;
+    maintainers = with maintainers; [ jk ];
+    platforms = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/octant/desktop.nix b/nixpkgs/pkgs/applications/networking/cluster/octant/desktop.nix
new file mode 100644
index 000000000000..fc48ce1e9ef4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/octant/desktop.nix
@@ -0,0 +1,77 @@
+{ lib, stdenv, appimageTools, fetchurl, undmg }:
+
+let
+  pname = "octant-desktop";
+  version = "0.23.0";
+  name = "${pname}-${version}";
+
+  inherit (stdenv.hostPlatform) system;
+
+  suffix = {
+    x86_64-linux = "AppImage";
+    x86_64-darwin = "dmg";
+  }.${system} or (throw "Unsupported system: ${system}");
+
+  src = fetchurl {
+    url = "https://github.com/vmware-tanzu/octant/releases/download/v${version}/Octant-${version}.${suffix}";
+    sha256 = {
+      x86_64-linux = "sha256-K4z6SVCiuqy3xkWMWpm8KM7iYVXyKcnERljMG3NEFMw=";
+      x86_64-darwin = "sha256-WYra0yw/aPW/wUGrlIn5ud3kjFTkekYEi2LWZcYO5Nw=";
+    }.${system};
+  };
+
+  linux = appimageTools.wrapType2 {
+    inherit name src passthru meta;
+
+    profile = ''
+      export LC_ALL=C.UTF-8
+    '';
+
+    multiArch = false; # no 32bit needed
+    extraPkgs = appimageTools.defaultFhsEnvArgs.multiPkgs;
+    extraInstallCommands =
+      let appimageContents = appimageTools.extractType2 { inherit name src; }; in
+      ''
+        mv $out/bin/{${name},${pname}}
+        install -Dm444 ${appimageContents}/octant.desktop -t $out/share/applications
+        substituteInPlace $out/share/applications/octant.desktop \
+          --replace 'Exec=AppRun --no-sandbox' 'Exec=${pname}'
+        install -m 444 -D ${appimageContents}/octant.png \
+          $out/share/icons/hicolor/512x512/apps/octant.png
+      '';
+  };
+
+  darwin = stdenv.mkDerivation {
+    inherit name src passthru meta;
+
+    nativeBuildInputs = [ undmg ];
+    sourceRoot = "Octant.app";
+    installPhase = ''
+      mkdir -p $out/Applications/Octant.app
+      cp -R . $out/Applications/Octant.app
+    '';
+  };
+
+  passthru = { updateScript = ./update-desktop.sh; };
+
+  meta = with lib; {
+    homepage = "https://octant.dev/";
+    changelog = "https://github.com/vmware-tanzu/octant/blob/v${version}/CHANGELOG.md";
+    description = "Highly extensible platform for developers to better understand the complexity of Kubernetes clusters";
+    longDescription = ''
+      Octant is a tool for developers to understand how applications run on a
+      Kubernetes cluster.
+      It aims to be part of the developer's toolkit for gaining insight and
+      approaching complexity found in Kubernetes. Octant offers a combination of
+      introspective tooling, cluster navigation, and object management along
+      with a plugin system to further extend its capabilities.
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ jk ];
+    platforms = [ "x86_64-linux" "x86_64-darwin" ];
+  };
+
+in
+if stdenv.isDarwin
+then darwin
+else linux
diff --git a/nixpkgs/pkgs/applications/networking/cluster/octant/plugins/starboard-octant-plugin.nix b/nixpkgs/pkgs/applications/networking/cluster/octant/plugins/starboard-octant-plugin.nix
new file mode 100644
index 000000000000..f59b8d26de08
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/octant/plugins/starboard-octant-plugin.nix
@@ -0,0 +1,31 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "starboard-octant-plugin";
+  version = "0.12.0";
+
+  src = fetchFromGitHub {
+    owner = "aquasecurity";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-JTSZtIRVFdUjhQsp2EMukeoVIo6nNx4xofq+3iOZUIk=";
+  };
+
+  vendorHash = "sha256-1zrB+CobUBgdpBHRJPpfDYCD6oVWY4j4Met9EqNQQbE=";
+
+  ldflags = [
+    "-s" "-w"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/aquasecurity/starboard-octant-plugin";
+    changelog = "https://github.com/aquasecurity/starboard-octant-plugin/releases/tag/v${version}";
+    description = "Octant plugin for viewing Starboard security information";
+    longDescription = ''
+      This is an Octant plugin for Starboard which provides visibility into vulnerability assessment reports for
+      Kubernetes workloads stored as custom security resources.
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ jk ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/octant/update-desktop.sh b/nixpkgs/pkgs/applications/networking/cluster/octant/update-desktop.sh
new file mode 100755
index 000000000000..4450834b4b70
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/octant/update-desktop.sh
@@ -0,0 +1,36 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl gnused gawk nix-prefetch
+
+set -euo pipefail
+
+ROOT="$(dirname "$(readlink -f "$0")")"
+NIX_DRV="$ROOT/desktop.nix"
+if [ ! -f "$NIX_DRV" ]; then
+  echo "ERROR: cannot find desktop.nix in $ROOT"
+  exit 1
+fi
+
+fetch_arch() {
+  VER="$1"; SUFFIX="$2"
+  URL="https://github.com/vmware-tanzu/octant/releases/download/v${VER}/Octant-${VER}.${SUFFIX}"
+  nix-prefetch "{ stdenv, fetchurl }:
+stdenv.mkDerivation rec {
+  pname = \"octant-desktop\"; version = \"${VER}\";
+  src = fetchurl { url = \"$URL\"; };
+}
+"
+}
+
+replace_sha() {
+  sed -i "s#$1 = \"sha256-.\{44\}\"#$1 = \"$2\"#" "$NIX_DRV"
+}
+
+OCTANT_VER=$(curl -Ls -w "%{url_effective}" -o /dev/null https://github.com/vmware-tanzu/octant/releases/latest | awk -F'/' '{print $NF}' | sed 's/v//')
+
+OCTANT_DESKTOP_LINUX_X64_SHA256=$(fetch_arch "$OCTANT_VER" "AppImage")
+OCTANT_DESKTOP_DARWIN_X64_SHA256=$(fetch_arch "$OCTANT_VER" "dmg")
+
+sed -i "s/version = \".*\"/version = \"$OCTANT_VER\"/" "$NIX_DRV"
+
+replace_sha "x86_64-linux" "$OCTANT_DESKTOP_LINUX_X64_SHA256"
+replace_sha "x86_64-darwin" "$OCTANT_DESKTOP_DARWIN_X64_SHA256"
diff --git a/nixpkgs/pkgs/applications/networking/cluster/octant/update.sh b/nixpkgs/pkgs/applications/networking/cluster/octant/update.sh
new file mode 100755
index 000000000000..3e2b56b7a619
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/octant/update.sh
@@ -0,0 +1,40 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl gnused gawk nix-prefetch
+
+set -euo pipefail
+
+ROOT="$(dirname "$(readlink -f "$0")")"
+NIX_DRV="$ROOT/default.nix"
+if [ ! -f "$NIX_DRV" ]; then
+  echo "ERROR: cannot find default.nix in $ROOT"
+  exit 1
+fi
+
+fetch_arch() {
+  VER="$1"; ARCH="$2"
+  URL="https://github.com/vmware-tanzu/octant/releases/download/v${VER}/octant_${VER}_${ARCH}.tar.gz"
+  nix-prefetch "{ stdenv, fetchzip }:
+stdenv.mkDerivation rec {
+  pname = \"octant\"; version = \"${VER}\";
+  src = fetchzip { url = \"$URL\"; };
+}
+"
+}
+
+replace_sha() {
+  sed -i "s#$1 = \"sha256-.\{44\}\"#$1 = \"$2\"#" "$NIX_DRV"
+}
+
+OCTANT_VER=$(curl -Ls -w "%{url_effective}" -o /dev/null https://github.com/vmware-tanzu/octant/releases/latest | awk -F'/' '{print $NF}' | sed 's/v//')
+
+OCTANT_LINUX_X64_SHA256=$(fetch_arch "$OCTANT_VER" "Linux-64bit")
+OCTANT_LINUX_AARCH64_SHA256=$(fetch_arch "$OCTANT_VER" "Linux-arm64")
+OCTANT_DARWIN_X64_SHA256=$(fetch_arch "$OCTANT_VER" "macOS-64bit")
+OCTANT_DARWIN_AARCH64_SHA256=$(fetch_arch "$OCTANT_VER" "macOS-arm64")
+
+sed -i "s/version = \".*\"/version = \"$OCTANT_VER\"/" "$NIX_DRV"
+
+replace_sha "x86_64-linux" "$OCTANT_LINUX_X64_SHA256"
+replace_sha "aarch64-linux" "$OCTANT_LINUX_AARCH64_SHA256"
+replace_sha "x86_64-darwin" "$OCTANT_DARWIN_X64_SHA256"
+replace_sha "aarch64-darwin" "$OCTANT_DARWIN_AARCH64_SHA256"
diff --git a/nixpkgs/pkgs/applications/networking/cluster/odo/default.nix b/nixpkgs/pkgs/applications/networking/cluster/odo/default.nix
new file mode 100644
index 000000000000..630b64b4c19e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/odo/default.nix
@@ -0,0 +1,38 @@
+{ lib, buildGoModule, fetchFromGitHub, testers, odo }:
+
+buildGoModule rec {
+  pname = "odo";
+  version = "3.14.0";
+
+  src = fetchFromGitHub {
+    owner = "redhat-developer";
+    repo = "odo";
+    rev = "v${version}";
+    sha256 = "sha256-d6C+nOz60CPnEsSf74+WBTaeIXGKtysVELg0+dXM1cU=";
+  };
+
+  vendorHash = null;
+
+  buildPhase = ''
+    make bin
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -a odo $out/bin
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = odo;
+    command = "odo version";
+    version = "v${version}";
+  };
+
+  meta = with lib; {
+    description = "Developer-focused CLI for OpenShift and Kubernetes";
+    license = licenses.asl20;
+    homepage = "https://odo.dev";
+    changelog = "https://github.com/redhat-developer/odo/releases/v${version}";
+    maintainers = with maintainers; [ stehessel ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/openlens/default.nix b/nixpkgs/pkgs/applications/networking/cluster/openlens/default.nix
new file mode 100644
index 000000000000..d1eea9d61370
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/openlens/default.nix
@@ -0,0 +1,40 @@
+{ lib, fetchurl, appimageTools }:
+
+let
+  pname = "openlens";
+  version = "6.5.2-366";
+
+  src = fetchurl {
+    url = "https://github.com/MuhammedKalkan/OpenLens/releases/download/v${version}/OpenLens-${version}.x86_64.AppImage";
+    sha256 = "sha256-ZAltAS/U/xh4kCT7vQ+NHAzWV7z0uE5GMQICHKSdj8k=";
+  };
+
+  appimageContents = appimageTools.extractType2 {
+    inherit pname version src;
+  };
+
+in
+appimageTools.wrapType2 {
+  inherit pname version src;
+  unshareIpc = false;
+
+  extraInstallCommands = ''
+    mv $out/bin/${pname}-${version} $out/bin/${pname}
+
+    install -m 444 -D ${appimageContents}/open-lens.desktop $out/share/applications/${pname}.desktop
+    install -m 444 -D ${appimageContents}/usr/share/icons/hicolor/512x512/apps/open-lens.png \
+       $out/share/icons/hicolor/512x512/apps/${pname}.png
+
+    substituteInPlace $out/share/applications/${pname}.desktop \
+      --replace 'Icon=open-lens' 'Icon=${pname}' \
+      --replace 'Exec=AppRun' 'Exec=${pname}'
+  '';
+
+  meta = with lib; {
+    description = "The Kubernetes IDE";
+    homepage = "https://github.com/MuhammedKalkan/OpenLens";
+    license = licenses.mit;
+    maintainers = with maintainers; [ benwbooth sebtm ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/openshift/default.nix b/nixpkgs/pkgs/applications/networking/cluster/openshift/default.nix
new file mode 100644
index 000000000000..8dbe03f3ba2e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/openshift/default.nix
@@ -0,0 +1,67 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, gpgme
+, installShellFiles
+, pkg-config
+, testers
+, openshift
+}:
+buildGoModule rec {
+  pname = "openshift";
+  version = "4.13.0";
+  gitCommit = "e561d37";
+
+  src = fetchFromGitHub {
+    owner = "openshift";
+    repo = "oc";
+    rev = "e561d37285c8bde273ce00d086bea599a9cdd3be";
+    hash = "sha256-/ar96N+MSy0DPdza3UWiyolg1EZPBR6LCku4GV+HppM=";
+  };
+
+  vendorHash = null;
+
+  buildInputs = [ gpgme ];
+
+  nativeBuildInputs = [ installShellFiles pkg-config ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/openshift/oc/pkg/version.commitFromGit=${gitCommit}"
+    "-X github.com/openshift/oc/pkg/version.versionFromGit=v${version}"
+  ];
+
+  doCheck = false;
+
+  postInstall = ''
+    # Install man pages.
+    mkdir -p man
+    $out/bin/genman man oc
+    installManPage man/*.1
+
+    # Remove unwanted tooling.
+    rm $out/bin/clicheck $out/bin/gendocs $out/bin/genman
+
+    # Install shell completions.
+    installShellCompletion --cmd oc \
+      --bash <($out/bin/oc completion bash) \
+      --fish <($out/bin/oc completion fish) \
+      --zsh <($out/bin/oc completion zsh)
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = openshift;
+    command = "oc version";
+    version = "v${version}";
+  };
+
+  meta = with lib; {
+    description = "Build, deploy, and manage your applications with Docker and Kubernetes";
+    homepage = "http://www.openshift.org";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ offline bachp moretea stehessel ];
+    mainProgram = "oc";
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/pachyderm/default.nix b/nixpkgs/pkgs/applications/networking/cluster/pachyderm/default.nix
new file mode 100644
index 000000000000..5483fc1e0f49
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/pachyderm/default.nix
@@ -0,0 +1,31 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "pachyderm";
+  version = "2.7.0";
+
+  src = fetchFromGitHub {
+    owner = "pachyderm";
+    repo = "pachyderm";
+    rev = "v${version}";
+    hash = "sha256-OA6NY8hI/Aw6vdtDfN1cRXdsLLfxW5ECg5tobPZB66Y=";
+  };
+
+  vendorHash = "sha256-q8Cx+J5BjMvO5wuvH5Tc5Oa9rjW7vXvS4DhSVv/E3E4=";
+
+  subPackages = [ "src/server/cmd/pachctl" ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/pachyderm/pachyderm/v${lib.versions.major version}/src/version.AppVersion=${version}"
+  ];
+
+  meta = with lib; {
+    description = "Containerized Data Analytics";
+    homepage = "https://www.pachyderm.com/";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ offline ];
+    mainProgram = "pachctl";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/pgo-client/default.nix b/nixpkgs/pkgs/applications/networking/cluster/pgo-client/default.nix
new file mode 100644
index 000000000000..47062588dd61
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/pgo-client/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "pgo-client";
+  version = "4.7.10";
+
+  src = fetchFromGitHub {
+    owner = "CrunchyData";
+    repo = "postgres-operator";
+    rev = "v${version}";
+    sha256 = "sha256-ZwKfbmKPvhxLpCGH+IlfoQjnw8go4N6mfseY2LWCktA=";
+  };
+
+  vendorHash = "sha256-qpS1TLShJwXgmtuhWIPOlcHMofUgOWZ8vbri36i+hpM=";
+
+  subPackages = [ "cmd/pgo" ];
+
+  meta = with lib; {
+    description = "A CLI client for Crunchy PostgreSQL Kubernetes Operator";
+    homepage = "https://github.com/CrunchyData/postgres-operator";
+    changelog = "https://github.com/CrunchyData/postgres-operator/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = [ maintainers.bryanasdev000 ];
+    mainProgram = "pgo";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/pig/default.nix b/nixpkgs/pkgs/applications/networking/cluster/pig/default.nix
new file mode 100644
index 000000000000..a4270fbcea35
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/pig/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchurl, makeWrapper, hadoop, jre, bash }:
+
+stdenv.mkDerivation rec {
+  pname = "pig";
+  version = "0.17.0";
+
+  src = fetchurl {
+    url = "mirror://apache/pig/${pname}-${version}/${pname}-${version}.tar.gz";
+    sha256 = "1wwpg0w47f49rnivn2d26vrxgyfl9gpqx3vmzbl5lhx6x5l3fqbd";
+
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out
+    mv * $out
+
+    # no need for the windows batch script
+    rm $out/bin/pig.cmd $out/bin/pig.py
+
+    for n in $out/{bin,sbin}"/"*; do
+      wrapProgram $n \
+        --prefix PATH : "${lib.makeBinPath [ jre bash ]}" \
+        --set JAVA_HOME "${jre}" --set HADOOP_PREFIX "${hadoop}"
+    done
+  '';
+
+  meta = with lib; {
+    homepage = "https://pig.apache.org/";
+    description = "High-level language for Apache Hadoop";
+    license = licenses.asl20;
+
+    longDescription = ''
+      Apache Pig is a platform for analyzing large data sets that consists of a
+      high-level language for expressing data analysis programs, coupled with
+      infrastructure for evaluating these programs. The salient property of Pig
+      programs is that their structure is amenable to substantial parallelization,
+      which in turns enables them to handle very large data sets.
+    '';
+
+    platforms = platforms.linux;
+    maintainers = [ maintainers.skeidel ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/pinniped/default.nix b/nixpkgs/pkgs/applications/networking/cluster/pinniped/default.nix
new file mode 100644
index 000000000000..b04c770dd981
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/pinniped/default.nix
@@ -0,0 +1,35 @@
+{ lib, fetchFromGitHub, buildGoModule, installShellFiles }:
+
+buildGoModule rec{
+  pname = "pinniped";
+  version = "0.25.0";
+
+  src = fetchFromGitHub {
+    owner = "vmware-tanzu";
+    repo = "pinniped";
+    rev = "v${version}";
+    sha256 = "sha256-tUdPeBqAXYaBB2rtkhrhN3kRSVv8dg0UI7GEmIdO+fc=";
+  };
+
+  subPackages = "cmd/pinniped";
+
+  vendorHash = "sha256-IFVXNd1UkfZiw8YKG3v9uHCJQCE3ajOsjbHv5r3y3L4=";
+
+  ldflags = [ "-s" "-w" ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installShellCompletion --cmd pinniped \
+      --bash <($out/bin/pinniped completion bash) \
+      --fish <($out/bin/pinniped completion fish) \
+      --zsh <($out/bin/pinniped completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "Tool to securely log in to your Kubernetes clusters";
+    homepage = "https://pinniped.dev/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ bpaulin ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/pluto/default.nix b/nixpkgs/pkgs/applications/networking/cluster/pluto/default.nix
new file mode 100644
index 000000000000..de8eaa0e0185
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/pluto/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "pluto";
+  version = "5.18.4";
+
+  src = fetchFromGitHub {
+    owner = "FairwindsOps";
+    repo = "pluto";
+    rev = "v${version}";
+    hash = "sha256-/8ZJXy5FErLnnXpED0UL+xqOo4QZtmR1hpcSpVsE8mw=";
+  };
+
+  vendorHash = "sha256-ysMRE/OwMf4rBnlkpkW9K8ZHEEbHpQ02RXNwLLSr0nY=";
+
+  ldflags = [
+    "-w" "-s"
+    "-X main.version=v${version}"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/FairwindsOps/pluto";
+    description = "Find deprecated Kubernetes apiVersions";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ peterromfeldhk kashw2 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/popeye/default.nix b/nixpkgs/pkgs/applications/networking/cluster/popeye/default.nix
new file mode 100644
index 000000000000..c65c795a173b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/popeye/default.nix
@@ -0,0 +1,34 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "popeye";
+  version = "0.11.1";
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "derailed";
+    repo = "popeye";
+    sha256 = "sha256-A1jUlEgjBoiN+NYwpyW/1eYzkCK3UuPID++fu+zGvzk=";
+  };
+
+  ldflags = [
+    "-s" "-w"
+    "-X github.com/derailed/popeye/cmd.version=${version}"
+    "-X github.com/derailed/popeye/cmd.commit=${version}"
+  ];
+
+  vendorHash = "sha256-MEsChBBn0mixgJ7pzRoqAqup75b/mVv6k3OMmzgyLC4=";
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/popeye version | grep ${version} > /dev/null
+  '';
+
+  meta = with lib; {
+    description = "A Kubernetes cluster resource sanitizer";
+    homepage = "https://github.com/derailed/popeye";
+    changelog = "https://github.com/derailed/popeye/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = [ maintainers.bryanasdev000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/prow/default.nix b/nixpkgs/pkgs/applications/networking/cluster/prow/default.nix
new file mode 100644
index 000000000000..b1ea88a11a33
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/prow/default.nix
@@ -0,0 +1,68 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "prow-unstable";
+  version = "2020-04-01";
+  rev = "32e3b5ce7695fb622381421653db436cb57b47c5";
+
+  src = fetchFromGitHub {
+    inherit rev;
+
+    owner = "kubernetes";
+    repo = "test-infra";
+    sha256 = "0mc3ynmbf3kidibdy8k3v3xjlvmxl8w7zm1z2m0skmhd0y4bpmk4";
+  };
+
+  vendorSha256 = "16fdc5r28andm8my4fxj0f1yygx6j2mvn92i6xdfhbcra0lvr4ql";
+
+  doCheck = false;
+
+  subPackages = [
+    "prow/cmd/admission"
+    "prow/cmd/branchprotector"
+    "prow/cmd/checkconfig"
+    "prow/cmd/clonerefs"
+    "prow/cmd/cm2kc"
+    "prow/cmd/config-bootstrapper"
+    "prow/cmd/crier"
+    "prow/cmd/deck"
+    "prow/cmd/entrypoint"
+    "prow/cmd/exporter"
+    "prow/cmd/gcsupload"
+    "prow/cmd/gerrit"
+    "prow/cmd/hook"
+    "prow/cmd/horologium"
+    "prow/cmd/initupload"
+    "prow/cmd/jenkins-operator"
+    "prow/cmd/mkbuild-cluster"
+    "prow/cmd/mkpj"
+    "prow/cmd/mkpod"
+    "prow/cmd/peribolos"
+    "prow/cmd/phaino"
+    "prow/cmd/phony"
+    "prow/cmd/pipeline"
+    "prow/cmd/plank"
+    "prow/cmd/sidecar"
+    "prow/cmd/sinker"
+    "prow/cmd/status-reconciler"
+    "prow/cmd/sub"
+    "prow/cmd/tackle"
+    "prow/cmd/tide"
+    "prow/cmd/tot"
+  ];
+
+  meta = with lib; {
+    description = "A Kubernetes based CI/CD system";
+    longDescription = ''
+      Prow is a Kubernetes based CI/CD system. Jobs can be triggered by various
+      types of events and report their status to many different services. In
+      addition to job execution, Prow provides GitHub automation in the form of
+      policy enforcement, chat-ops via /foo style commands, and automatic PR
+      merging.
+    '';
+    homepage = "https://github.com/kubernetes/test-infra/tree/master/prow";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ kalbasit ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/pv-migrate/default.nix b/nixpkgs/pkgs/applications/networking/cluster/pv-migrate/default.nix
new file mode 100644
index 000000000000..67f19882205e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/pv-migrate/default.nix
@@ -0,0 +1,44 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "pv-migrate";
+  version = "1.3.0";
+
+  src = fetchFromGitHub {
+    owner = "utkuozdemir";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-J4GsXLff9OQNiLv3AvBLtmz383E2JPEB3VEN3nzE5R8=";
+  };
+
+  subPackages = [ "cmd/pv-migrate" ];
+
+  vendorHash = "sha256-PzmNCBTw9AfDUBh/tWlukH5EGJffEBCBT1gJTMIZRO0=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.version=v${version}"
+    "-X main.commit=${src.rev}"
+    "-X main.date=1970-01-01-00:00:01"
+  ];
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  postInstall = ''
+    installShellCompletion --cmd pv-migrate \
+      --bash <($out/bin/pv-migrate completion bash) \
+      --fish <($out/bin/pv-migrate completion fish) \
+      --zsh <($out/bin/pv-migrate completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "CLI tool to easily migrate Kubernetes persistent volumes ";
+    homepage = "https://github.com/utkuozdemir/pv-migrate";
+    changelog = "https://github.com/utkuozdemir/pv-migrate/releases/tag/${version}";
+    license = licenses.afl20;
+    maintainers = with lib.maintainers; [ ivankovnatsky qjoly ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/qbec/default.nix b/nixpkgs/pkgs/applications/networking/cluster/qbec/default.nix
new file mode 100644
index 000000000000..ea7c1479ef13
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/qbec/default.nix
@@ -0,0 +1,31 @@
+{ lib, go, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "qbec";
+  version = "0.15.2";
+
+  src = fetchFromGitHub {
+    owner = "splunk";
+    repo = "qbec";
+    rev = "v${version}";
+    sha256 = "sha256-js/UjnNYRW7s3b4TeprhmBe4cDLDYDrMeLtpASI9aN4=";
+  };
+
+  vendorHash = "sha256-oEbKk9cMbI0ZWXrfM8Y19OF/A75mwHl0C/PJx0oTOBo=";
+
+  doCheck = false;
+
+  ldflags = [
+    "-s" "-w"
+    "-X github.com/splunk/qbec/internal/commands.version=${version}"
+    "-X github.com/splunk/qbec/internal/commands.commit=${src.rev}"
+    "-X github.com/splunk/qbec/internal/commands.goVersion=${lib.getVersion go}"
+  ];
+
+  meta = with lib; {
+    description = "Configure kubernetes objects on multiple clusters using jsonnet https://qbec.io";
+    homepage = "https://github.com/splunk/qbec";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ groodt ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/rancher/default.nix b/nixpkgs/pkgs/applications/networking/cluster/rancher/default.nix
new file mode 100644
index 000000000000..df8380010bbd
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/rancher/default.nix
@@ -0,0 +1,39 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "rancher";
+  version = "2.7.0";
+
+  src = fetchFromGitHub {
+    owner  = "rancher";
+    repo   = "cli";
+    rev    = "v${version}";
+    sha256 = "sha256-co4LVd5A0bJ4CIuCfv6WyV8XCMbPCFAAcV12WekYrw4=";
+  };
+
+  ldflags = [
+    "-w"
+    "-s"
+    "-X main.VERSION=${version}"
+    "-extldflags"
+    "-static"
+  ];
+
+  vendorHash = "sha256-oclMnt6uJa8SG2fNM0fi+HCVMMi4rkykx8VpK/tXilQ=";
+
+  postInstall = ''
+    mv $out/bin/cli $out/bin/rancher
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/rancher | grep ${version} > /dev/null
+  '';
+
+  meta = with lib; {
+    description = "The Rancher Command Line Interface (CLI) is a unified tool for interacting with your Rancher Server";
+    homepage = "https://github.com/rancher/cli";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ bryanasdev000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/rke/default.nix b/nixpkgs/pkgs/applications/networking/cluster/rke/default.nix
new file mode 100644
index 000000000000..38bdff136ace
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/rke/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "rke";
+  version = "1.4.8";
+
+  src = fetchFromGitHub {
+    owner = "rancher";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-tc3XZyn1jdjkxWXG6qjsE2udpoq+RhhIWHXGmUQyO0Y=";
+  };
+
+  vendorHash = "sha256-MFXNwEEXtsEwB0Hcx8gn/Pz9dZM1zUUKhNYp5BlRUEk=";
+
+  subPackages = [ "." ];
+
+  ldflags = [ "-s" "-w" "-X=main.VERSION=v${version}" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/rancher/rke";
+    description = "An extremely simple, lightning fast Kubernetes distribution that runs entirely within containers";
+    changelog = "https://github.com/rancher/rke/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ urandom ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/rke2/default.nix b/nixpkgs/pkgs/applications/networking/cluster/rke2/default.nix
new file mode 100644
index 000000000000..04271e7798e9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/rke2/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "rke2";
+  version = "1.27.5+rke2r1";
+
+  src = fetchFromGitHub {
+    owner = "rancher";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-LKVz/oKt3WDf84KEEj4dRyjkRWZIWbOnEgG03EHvfGQ=";
+  };
+
+  vendorHash = "sha256-Ck3/sMvCLoXKtOIhn0uE8hHdTlPFjIT04l3zoZQNKPs=";
+
+  postPatch = ''
+    # Patch the build scripts so they work in the Nix build environment.
+    patchShebangs ./scripts
+
+    # Disable the static build as it breaks.
+    sed -e 's/STATIC_FLAGS=.*/STATIC_FLAGS=/g' -i scripts/build-binary
+  '';
+
+  buildPhase = ''
+    DRONE_TAG="v${version}" ./scripts/build-binary
+  '';
+
+  installPhase = ''
+    install -D ./bin/rke2 $out/bin/rke2
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/rancher/rke2";
+    description = "RKE2, also known as RKE Government, is Rancher's next-generation Kubernetes distribution.";
+    changelog = "https://github.com/rancher/rke2/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ zimbatm zygot ];
+    mainProgram = "rke2";
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/roxctl/default.nix b/nixpkgs/pkgs/applications/networking/cluster/roxctl/default.nix
new file mode 100644
index 000000000000..bfd8c740fa79
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/roxctl/default.nix
@@ -0,0 +1,44 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles, testers, roxctl }:
+
+buildGoModule rec {
+  pname = "roxctl";
+  version = "4.1.2";
+
+  src = fetchFromGitHub {
+    owner = "stackrox";
+    repo = "stackrox";
+    rev = version;
+    sha256 = "sha256-5wNf80kiYnKg/urIQQqe4HijqxQweiFx0UktFiOTeaU=";
+  };
+
+  vendorHash = "sha256-5glD904guK+TR9YFzeuIyHOXrJblcEVi9EReQz0fCCA=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  subPackages = [ "roxctl" ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/stackrox/rox/pkg/version/internal.MainVersion=${version}"
+  ];
+
+  postInstall = ''
+    installShellCompletion --cmd roxctl \
+      --bash <($out/bin/roxctl completion bash) \
+      --fish <($out/bin/roxctl completion fish) \
+      --zsh <($out/bin/roxctl completion zsh)
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = roxctl;
+    command = "roxctl version";
+  };
+
+  meta = with lib; {
+    description = "Command-line client of the StackRox Kubernetes Security Platform";
+    license = licenses.asl20;
+    homepage = "https://www.stackrox.io";
+    maintainers = with maintainers; [ stehessel ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/sonobuoy/default.nix b/nixpkgs/pkgs/applications/networking/cluster/sonobuoy/default.nix
new file mode 100644
index 000000000000..f4d50d3dbbcd
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/sonobuoy/default.nix
@@ -0,0 +1,45 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+# SHA of ${version} for the tool's help output. Unfortunately this is needed in build flags.
+let rev = "bd5465d6b2b2b92b517f4c6074008d22338ff509";
+in
+buildGoModule rec {
+  pname = "sonobuoy";
+  version = "0.56.14"; # Do not forget to update `rev` above
+
+  ldflags =
+    let t = "github.com/vmware-tanzu/sonobuoy";
+    in [
+      "-s"
+      "-X ${t}/pkg/buildinfo.Version=v${version}"
+      "-X ${t}/pkg/buildinfo.GitSHA=${rev}"
+      "-X ${t}/pkg/buildDate=unknown"
+    ];
+
+  src = fetchFromGitHub {
+    owner = "vmware-tanzu";
+    repo = "sonobuoy";
+    rev = "v${version}";
+    sha256 = "sha256-YiVCdAdwdK9PcQ6VQQNAjLQq2X54vJmZfbHRjV2d8VQ=";
+  };
+
+  vendorHash = "sha256-Fqxkyl9AKZ7H4QSp2V/yztpeXHt57+LjpzzGtOPndX0=";
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = ''
+      Diagnostic tool that makes it easier to understand the
+      state of a Kubernetes cluster.
+    '';
+    longDescription = ''
+      Sonobuoy is a diagnostic tool that makes it easier to understand the state of
+      a Kubernetes cluster by running a set of Kubernetes conformance tests in an
+      accessible and non-destructive manner.
+    '';
+
+    homepage = "https://sonobuoy.io";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ carlosdagos saschagrunert wilsonehusin ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/spark/default.nix b/nixpkgs/pkgs/applications/networking/cluster/spark/default.nix
new file mode 100644
index 000000000000..80142048c6fe
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/spark/default.nix
@@ -0,0 +1,91 @@
+{ lib
+, stdenv
+, fetchzip
+, makeWrapper
+, jdk8
+, python3Packages
+, extraPythonPackages ? [ ]
+, coreutils
+, hadoopSupport ? true
+, hadoop
+, RSupport ? true
+, R
+}:
+
+let
+  spark = { pname, version, hash, extraMeta ? {} }:
+    stdenv.mkDerivation rec {
+      inherit pname version;
+      jdk = if hadoopSupport then hadoop.jdk else jdk8;
+      src = fetchzip {
+        url = "mirror://apache/spark/${pname}-${version}/${pname}-${version}-bin-without-hadoop.tgz";
+        inherit hash;
+      };
+      nativeBuildInputs = [ makeWrapper ];
+      buildInputs = [ jdk python3Packages.python ]
+        ++ extraPythonPackages
+        ++ lib.optional RSupport R;
+
+      untarDir = "${pname}-${version}";
+      installPhase = ''
+        mkdir -p $out/{lib/${untarDir}/conf,bin,/share/java}
+        mv * $out/lib/${untarDir}
+
+        cp $out/lib/${untarDir}/conf/log4j.properties{.template,} || \
+          cp $out/lib/${untarDir}/conf/log4j2.properties{.template,}
+
+        cat > $out/lib/${untarDir}/conf/spark-env.sh <<- EOF
+        export JAVA_HOME="${jdk}"
+        export SPARK_HOME="$out/lib/${untarDir}"
+      '' + lib.optionalString hadoopSupport ''
+        export SPARK_DIST_CLASSPATH=$(${hadoop}/bin/hadoop classpath)
+      '' + ''
+        export PYSPARK_PYTHON="${python3Packages.python}/bin/${python3Packages.python.executable}"
+        export PYTHONPATH="\$PYTHONPATH:$PYTHONPATH"
+        ${lib.optionalString RSupport ''
+          export SPARKR_R_SHELL="${R}/bin/R"
+          export PATH="\$PATH:${R}/bin"''}
+        EOF
+
+        for n in $(find $out/lib/${untarDir}/bin -type f ! -name "*.*"); do
+          makeWrapper "$n" "$out/bin/$(basename $n)"
+          substituteInPlace "$n" --replace dirname ${coreutils.out}/bin/dirname
+        done
+        for n in $(find $out/lib/${untarDir}/sbin -type f); do
+          # Spark deprecated scripts with "slave" in the name.
+          # This line adds forward compatibility with the nixos spark module for
+          # older versions of spark that don't have the new "worker" scripts.
+          ln -s "$n" $(echo "$n" | sed -r 's/slave(s?).sh$/worker\1.sh/g') || true
+        done
+        ln -s $out/lib/${untarDir}/lib/spark-assembly-*.jar $out/share/java
+      '';
+
+      meta = {
+        description = "Apache Spark is a fast and general engine for large-scale data processing";
+        homepage = "https://spark.apache.org/";
+        sourceProvenance = with lib.sourceTypes; [ binaryBytecode ];
+        license = lib.licenses.asl20;
+        platforms = lib.platforms.all;
+        maintainers = with lib.maintainers; [ thoughtpolice offline kamilchm illustris ];
+      } // extraMeta;
+    };
+in
+{
+  spark_3_4 = spark rec {
+    pname = "spark";
+    version = "3.4.0";
+    hash = "sha256-0y80dRYzb6Ceu6MlGQHtpMdzOob/TBg6kf8dtF6KyCk=";
+  };
+  spark_3_3 = spark rec {
+    pname = "spark";
+    version = "3.3.2";
+    hash = "sha256-AeKe2QN+mhUJgZRSIgbi/DttAWlDgwC1kl9p7syEvbo=";
+    extraMeta.knownVulnerabilities = [ "CVE-2023-22946" ];
+  };
+  spark_3_2 = spark rec {
+    pname = "spark";
+    version = "3.2.4";
+    hash = "sha256-xL4W+dTWbvmmncq3/8iXmhp24rp5SftvoRfkTyxCI8E=";
+    extraMeta.knownVulnerabilities = [ "CVE-2023-22946" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/ssm-agent/0001-Disable-NIC-tests-that-fail-in-the-Nix-sandbox.patch b/nixpkgs/pkgs/applications/networking/cluster/ssm-agent/0001-Disable-NIC-tests-that-fail-in-the-Nix-sandbox.patch
new file mode 100644
index 000000000000..364f7653efa3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/ssm-agent/0001-Disable-NIC-tests-that-fail-in-the-Nix-sandbox.patch
@@ -0,0 +1,44 @@
+From bea6307ec2a77d90d59c13940381d73ec0f05b70 Mon Sep 17 00:00:00 2001
+From: Graham Christensen <graham@grahamc.com>
+Date: Mon, 1 Mar 2021 10:57:44 -0500
+Subject: [PATCH] Disable NIC tests that fail in the Nix sandbox.
+
+---
+ agent/managedInstances/fingerprint/fingerprint_integ_test.go | 2 ++
+ agent/ssm/service_test.go                                    | 1 +
+ 2 files changed, 3 insertions(+)
+
+diff --git a/agent/managedInstances/fingerprint/fingerprint_integ_test.go b/agent/managedInstances/fingerprint/fingerprint_integ_test.go
+index a1f969ff..631ea1f5 100644
+--- a/agent/managedInstances/fingerprint/fingerprint_integ_test.go
++++ b/agent/managedInstances/fingerprint/fingerprint_integ_test.go
+@@ -28,12 +28,14 @@ func TestHostnameInfo(t *testing.T) {
+ }
+ 
+ func TestPrimaryIpInfo(t *testing.T) {
++	t.Skip("The Nix build sandbox has no non-loopback IPs, causing this test to fail.");
+ 	ip, err := primaryIpInfo()
+ 	assert.NoError(t, err, "expected no error fetching the primary ip")
+ 	assert.NotEmpty(t, ip, "expected to fetch primary ip")
+ }
+ 
+ func TestMacAddrInfo(t *testing.T) {
++	t.Skip("The Nix build sandbox has no non-loopback interfaces, causing this test to fail.");
+ 	mac, err := macAddrInfo()
+ 	assert.NoError(t, err, "expected no error fetching the mac addr")
+ 	assert.NotEmpty(t, mac, "expected to fetch mac address")
+diff --git a/agent/ssm/service_test.go b/agent/ssm/service_test.go
+index f4b34f83..d8216dba 100644
+--- a/agent/ssm/service_test.go
++++ b/agent/ssm/service_test.go
+@@ -85,6 +85,7 @@ func (suite *SsmServiceTestSuite) TestUpdateEmptyInstanceInformation() {
+ // Test function for update instance information
+ // This function update the agent name, agent statuc, and agent version.
+ func (suite *SsmServiceTestSuite) TestUpdateInstanceInformation() {
++	suite.T().Skip("The Nix build sandbox has no interfaces for IP and MAC address reports.");
+ 	// Give mock value to test UpdateInstanceInformation, assert the error is nil, assert the log.Debug function get called.
+ 	response, err := suite.sdkService.UpdateInstanceInformation(suite.logMock, "2.2.3.2", "active", "Amazon-ssm-agent")
+ 	assert.Nil(suite.T(), err, "Err should be nil")
+-- 
+2.29.2
+
diff --git a/nixpkgs/pkgs/applications/networking/cluster/ssm-agent/0002-version-gen-don-t-use-unnecessary-constants.patch b/nixpkgs/pkgs/applications/networking/cluster/ssm-agent/0002-version-gen-don-t-use-unnecessary-constants.patch
new file mode 100644
index 000000000000..234e510d3d17
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/ssm-agent/0002-version-gen-don-t-use-unnecessary-constants.patch
@@ -0,0 +1,46 @@
+From 473e3f8544915a35b3a45c548743978b34e5310e Mon Sep 17 00:00:00 2001
+From: Cole Helbling <cole.e.helbling@outlook.com>
+Date: Tue, 2 Mar 2021 00:24:00 -0800
+Subject: [PATCH] version-gen: don't use unnecessary constants
+
+This prevents the tool from being built with Nix, because this project
+doesn't use Go modules (or something; I'm not really familiar with Go,
+much less Go + Nix).
+---
+ agent/version/versiongenerator/version-gen.go | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/agent/version/versiongenerator/version-gen.go b/agent/version/versiongenerator/version-gen.go
+index d710effc..55c9a001 100644
+--- a/agent/version/versiongenerator/version-gen.go
++++ b/agent/version/versiongenerator/version-gen.go
+@@ -22,8 +22,6 @@ import (
+ 	"path/filepath"
+ 	"strings"
+ 	"text/template"
+-
+-	"github.com/aws/amazon-ssm-agent/agent/appconfig"
+ )
+ 
+ const versiongoTemplate = `// This is an autogenerated file and should not be edited.
+@@ -59,7 +57,7 @@ func main() {
+ 	versionStr := strings.TrimSpace(string(versionContent))
+ 
+ 	fmt.Printf("Agent Version: %v", versionStr)
+-	if err := ioutil.WriteFile(filepath.Join("VERSION"), []byte(versionStr), appconfig.ReadWriteAccess); err != nil {
++	if err := ioutil.WriteFile(filepath.Join("VERSION"), []byte(versionStr), 0600); err != nil {
+ 		log.Fatalf("Error writing to VERSION file. %v", err)
+ 	}
+ 
+@@ -108,7 +106,7 @@ func main() {
+ 
+ 	releaseNoteOutFile := strings.Join(releaseNoteLines, "\n")
+ 
+-	if err = ioutil.WriteFile(filepath.Join(releaseNotesFile), []byte(releaseNoteOutFile), appconfig.ReadWriteAccess); err != nil {
++	if err = ioutil.WriteFile(filepath.Join(releaseNotesFile), []byte(releaseNoteOutFile), 0600); err != nil {
+ 		log.Fatalf("Error writing to RELEASENOTES.md file. %v", err)
+ 	}
+ 
+-- 
+2.30.0
+
diff --git a/nixpkgs/pkgs/applications/networking/cluster/ssm-agent/default.nix b/nixpkgs/pkgs/applications/networking/cluster/ssm-agent/default.nix
new file mode 100644
index 000000000000..5a0dc0d2d97e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/ssm-agent/default.nix
@@ -0,0 +1,139 @@
+{ lib
+, writeShellScriptBin
+, buildGoPackage
+, makeWrapper
+, fetchFromGitHub
+, coreutils
+, nettools
+, dmidecode
+, util-linux
+, bashInteractive
+, overrideEtc ? true
+}:
+
+let
+  # Tests use lsb_release, so we mock it (the SSM agent used to not
+  # read from our /etc/os-release file, but now it does) because in
+  # reality, it won't (shouldn't) be used when active on a system with
+  # /etc/os-release. If it is, we fake the only two fields it cares about.
+  fake-lsb-release = writeShellScriptBin "lsb_release" ''
+    . /etc/os-release || true
+
+    case "$1" in
+      -i) echo "''${NAME:-unknown}";;
+      -r) echo "''${VERSION:-unknown}";;
+    esac
+  '';
+in
+buildGoPackage rec {
+  pname = "amazon-ssm-agent";
+  version = "3.2.1297.0";
+
+  goPackagePath = "github.com/aws/${pname}";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  src = fetchFromGitHub {
+    rev = version;
+    owner = "aws";
+    repo = "amazon-ssm-agent";
+    hash = "sha256-zRs7RsShZPH3hb5MsADUNrTfHbJVwCELE9mCqEWaTng=";
+  };
+
+  patches = [
+    # Some tests use networking, so we skip them.
+    ./0001-Disable-NIC-tests-that-fail-in-the-Nix-sandbox.patch
+
+    # They used constants from another package that I couldn't figure
+    # out how to resolve, so hardcoded the constants.
+    ./0002-version-gen-don-t-use-unnecessary-constants.patch
+  ];
+
+  # See the list https://github.com/aws/amazon-ssm-agent/blob/3.2.1297.0/makefile#L120-L138
+  # The updater is not built because it cannot work on NixOS
+  subPackages = [
+    "core"
+    "agent"
+    "agent/cli-main"
+    "agent/framework/processor/executer/outofproc/worker"
+    "agent/session/logging"
+    "agent/framework/processor/executer/outofproc/sessionworker"
+  ];
+
+  ldflags = [
+    "-s"
+    "-w"
+  ];
+
+  preConfigure = ''
+    printf "#!/bin/sh\ntrue" > ./Tools/src/checkstyle.sh
+
+    substituteInPlace agent/platform/platform_unix.go \
+        --replace "/usr/bin/uname" "${coreutils}/bin/uname" \
+        --replace '"/bin", "hostname"' '"${nettools}/bin/hostname"' \
+        --replace '"lsb_release"' '"${fake-lsb-release}/bin/lsb_release"'
+
+    substituteInPlace agent/managedInstances/fingerprint/hardwareInfo_unix.go \
+        --replace /usr/sbin/dmidecode ${dmidecode}/bin/dmidecode
+
+    substituteInPlace agent/session/shell/shell_unix.go \
+        --replace '"script"' '"${util-linux}/bin/script"'
+
+    echo "${version}" > VERSION
+  '' + lib.optionalString overrideEtc ''
+    substituteInPlace agent/appconfig/constants_unix.go \
+      --replace '"/etc/amazon/ssm/"' '"${placeholder "out"}/etc/amazon/ssm/"'
+  '';
+
+  preBuild = ''
+    pushd go/src/${goPackagePath}
+
+    # Note: if this step fails, please patch the code to fix it! Please only skip
+    # tests if it is not feasible for the test to pass in a sandbox.
+    make quick-integtest
+
+    make pre-release
+    make pre-build
+
+    popd
+  '';
+
+  postBuild = ''
+    pushd go/bin
+
+    mv core amazon-ssm-agent
+    mv agent ssm-agent-worker
+    mv cli-main ssm-cli
+    mv worker ssm-document-worker
+    mv logging ssm-session-logger
+    mv sessionworker ssm-session-worker
+
+    popd
+  '';
+
+  # These templates retain their `.template` extensions on installation. The
+  # amazon-ssm-agent.json.template is required as default configuration when an
+  # amazon-ssm-agent.json isn't present. Here, we retain the template to show
+  # we're using the default configuration.
+
+  # seelog.xml isn't actually required to run, but it does ship as a template
+  # with debian packages, so it's here for reference. Future work in the nixos
+  # module could use this template and substitute a different log level.
+  postInstall = ''
+    mkdir -p $out/etc/amazon/ssm
+    cp go/src/${goPackagePath}/amazon-ssm-agent.json.template $out/etc/amazon/ssm/amazon-ssm-agent.json.template
+    cp go/src/${goPackagePath}/seelog_unix.xml $out/etc/amazon/ssm/seelog.xml.template
+  '';
+
+  postFixup = ''
+    wrapProgram $out/bin/amazon-ssm-agent --prefix PATH : ${bashInteractive}/bin
+  '';
+
+  meta = with lib; {
+    description = "Agent to enable remote management of your Amazon EC2 instance configuration";
+    homepage = "https://github.com/aws/amazon-ssm-agent";
+    license = licenses.asl20;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ copumpkin manveru ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/ssm-session-manager-plugin/default.nix b/nixpkgs/pkgs/applications/networking/cluster/ssm-session-manager-plugin/default.nix
new file mode 100644
index 000000000000..128482d705b0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/ssm-session-manager-plugin/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, fetchFromGitHub
+, buildGoPackage
+}:
+
+buildGoPackage rec {
+  pname = "ssm-session-manager-plugin";
+  version = "1.2.497.0";
+
+  goPackagePath = "github.com/aws/session-manager-plugin";
+
+  src = fetchFromGitHub {
+    owner = "aws";
+    repo = "session-manager-plugin";
+    rev = version;
+    hash = "sha256-DX+Jm7u0gNX3o0QYIbE6Vzsmqys+09lQGHpIuqBEwMI=";
+  };
+
+  postPatch = ''
+    mv vendor{,-old}
+    mv vendor-old/src vendor
+    rm -r vendor-old
+  '';
+
+  preBuild = ''
+    pushd go/src/${lib.escapeShellArg goPackagePath}
+    echo -n ${lib.escapeShellArg version} > VERSION
+    go run src/version/versiongenerator/version-gen.go
+    popd
+  '';
+
+  doCheck = true;
+  checkFlags = [ "-skip=TestSetSessionHandlers" ];
+
+  preCheck = ''
+    if ! [[ $(go/bin/sessionmanagerplugin-main --version) = ${lib.escapeShellArg version} ]]; then
+      echo 'wrong version'
+      exit 1
+    fi
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm555 go/bin/sessionmanagerplugin-main "$out/bin/session-manager-plugin"
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html";
+    description = "Amazon SSM Session Manager Plugin";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ amarshall mbaillie ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/starboard/default.nix b/nixpkgs/pkgs/applications/networking/cluster/starboard/default.nix
new file mode 100644
index 000000000000..337d86f9fedb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/starboard/default.nix
@@ -0,0 +1,84 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "starboard";
+  version = "0.15.13";
+
+  src = fetchFromGitHub {
+    owner = "aquasecurity";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-8sEhR32CaTYGHi6tdhjGl8c42QUbaaUDdFwtpEFwRHo=";
+    # populate values that require us to use git. By doing this in postFetch we
+    # can delete .git afterwards and maintain better reproducibility of the src.
+    leaveDotGit = true;
+    postFetch = ''
+      cd "$out"
+      git rev-parse HEAD > $out/COMMIT
+      # 0000-00-00T00:00:00Z
+      date -u -d "@$(git log -1 --pretty=%ct)" "+%Y-%m-%dT%H:%M:%SZ" > $out/SOURCE_DATE_EPOCH
+      find "$out" -name .git -print0 | xargs -0 rm -rf
+    '';
+  };
+  vendorHash = "sha256-JEji1wPXLfVireuIVD2Ct/1Nvf92ukwRpMDCrT/CbOE=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  subPackages = [ "cmd/starboard" ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.version=v${version}"
+  ];
+
+  # ldflags based on metadata from git and source
+  preBuild = ''
+    ldflags+=" -X main.gitCommit=$(cat COMMIT)"
+    ldflags+=" -X main.buildDate=$(cat SOURCE_DATE_EPOCH)"
+  '';
+
+  preCheck = ''
+    # Remove test that requires networking
+    rm pkg/plugin/aqua/client/client_integration_test.go
+
+    # Feed in all but the integration tests for testing
+    # This is because subPackages above limits what is built to just what we
+    # want but also limits the tests
+    getGoDirs() {
+      go list ./... | grep -v itest
+    }
+  '';
+
+  postInstall = ''
+    installShellCompletion --cmd starboard \
+      --bash <($out/bin/starboard completion bash) \
+      --fish <($out/bin/starboard completion fish) \
+      --zsh <($out/bin/starboard completion zsh)
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+    $out/bin/starboard --help
+    $out/bin/starboard version | grep "v${version}"
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/aquasecurity/starboard";
+    changelog = "https://github.com/aquasecurity/starboard/releases/tag/v${version}";
+    description = "Kubernetes-native security tool kit";
+    longDescription = ''
+      Starboard integrates security tools into the Kubernetes environment, so
+      that users can find and view the risks that relate to different resources
+      in a Kubernetes-native way. Starboard provides custom security resources
+      definitions and a Go module to work with a range of existing security
+      tools, as well as a kubectl-compatible command-line tool and an Octant
+      plug-in that make security reports available through familiar Kubernetes
+      tools.
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ jk ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/stern/default.nix b/nixpkgs/pkgs/applications/networking/cluster/stern/default.nix
new file mode 100644
index 000000000000..b144df23bd24
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/stern/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, lib, buildPackages, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "stern";
+  version = "1.26.0";
+
+  src = fetchFromGitHub {
+    owner = "stern";
+    repo = "stern";
+    rev = "v${version}";
+    sha256 = "sha256-86XoYzw1bnIWwGiFgRl9RcZSYrF4byYKnDlJ4QSqXV0=";
+  };
+
+  vendorHash = "sha256-LLVd9WB8ixH78CHYe0sS4sCDCD+6SQ7PxWr2MHiAOxI=";
+
+  subPackages = [ "." ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [ "-s" "-w" "-X github.com/stern/stern/cmd.version=${version}" ];
+
+  postInstall = let
+    stern = if stdenv.buildPlatform.canExecute stdenv.hostPlatform then "$out" else buildPackages.stern;
+  in
+    ''
+      for shell in bash zsh; do
+        ${stern}/bin/stern --completion $shell > stern.$shell
+        installShellCompletion stern.$shell
+      done
+    '';
+
+  meta = with lib; {
+    description = "Multi pod and container log tailing for Kubernetes";
+    homepage = "https://github.com/stern/stern";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ mbode preisschild ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/taktuk/default.nix b/nixpkgs/pkgs/applications/networking/cluster/taktuk/default.nix
new file mode 100644
index 000000000000..5cb9f8160067
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/taktuk/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchurl, perl }:
+
+stdenv.mkDerivation rec {
+  version = "3.7.7";
+  pname = "taktuk";
+
+  buildInputs = [ perl ];
+
+  src = fetchurl {
+    url = "https://gforge.inria.fr/frs/download.php/33412/${pname}-${version}.tar.gz";
+    sha256 = "0w0h3ynlcxvq2nzm8hkj20g0805ww3vkw53g0qwj7wvp7p3gcvnr";
+  };
+
+  preBuild = ''
+      substituteInPlace ./taktuk --replace "/usr/bin/perl" "${perl}/bin/perl"
+  '';
+
+  meta = {
+    description = "Efficient, large scale, parallel remote execution of commands";
+    longDescription = ''
+      TakTuk allows one to execute commands in parallel on a potentially large set
+      of remote nodes (using ssh to connect to each node). It is typically used
+      inside high performance computing clusters and grids. It uses an adaptive
+      algorithm to efficiently distribute the work and sets up an interconnection
+      network to transport commands and perform I/Os multiplexing. It doesn't
+      require any specific software on the nodes thanks to a self-propagation
+      algorithm.'';
+    homepage = "http://taktuk.gforge.inria.fr/";
+    license = lib.licenses.gpl2;
+    maintainers = [ lib.maintainers.bzizou ];
+    platforms = lib.platforms.linux;
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/networking/cluster/talosctl/default.nix b/nixpkgs/pkgs/applications/networking/cluster/talosctl/default.nix
new file mode 100644
index 000000000000..05a4382001d5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/talosctl/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "talosctl";
+  version = "1.5.1";
+
+  src = fetchFromGitHub {
+    owner = "siderolabs";
+    repo = "talos";
+    rev = "v${version}";
+    hash = "sha256-HYIk1oZbtcnHLap+4AMwoQN0k44zjiiwDzGcNW+9qqM=";
+  };
+
+  vendorHash = "sha256-Aefwa8zdKWV9TE9rwNA4pzKZekTurkD0pTDm3QfKdUQ=";
+
+  ldflags = [ "-s" "-w" ];
+
+  GOWORK = "off";
+
+  subPackages = [ "cmd/talosctl" ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installShellCompletion --cmd talosctl \
+      --bash <($out/bin/talosctl completion bash) \
+      --fish <($out/bin/talosctl completion fish) \
+      --zsh <($out/bin/talosctl completion zsh)
+  '';
+
+  doCheck = false; # no tests
+
+  meta = with lib; {
+    description = "A CLI for out-of-band management of Kubernetes nodes created by Talos";
+    homepage = "https://www.talos.dev/";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ flokli ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/tanka/default.nix b/nixpkgs/pkgs/applications/networking/cluster/tanka/default.nix
new file mode 100644
index 000000000000..61f56f425216
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/tanka/default.nix
@@ -0,0 +1,36 @@
+{ buildGoModule, fetchFromGitHub, lib, installShellFiles }:
+
+buildGoModule rec {
+  pname = "tanka";
+  version = "0.26.0";
+
+  src = fetchFromGitHub {
+    owner = "grafana";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-xKB/SKiw3cKqdpl869Bs/NO1Jbrla8Un0hH4kIGqAPs=";
+  };
+
+  vendorHash = "sha256-+BCUQ+czqWkxbDoSvCaAxewTN0SuI+hCHEQpLOvNGj4=";
+
+  doCheck = false;
+
+  subPackages = [ "cmd/tk" ];
+
+  ldflags = [ "-s" "-w" "-extldflags '-static'" "-X github.com/grafana/tanka/pkg/tanka.CurrentVersion=v${version}" ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    echo "complete -C $out/bin/tk tk" > tk.bash
+    installShellCompletion tk.bash
+  '';
+
+  meta = with lib; {
+    description = "Flexible, reusable and concise configuration for Kubernetes";
+    homepage = "https://tanka.dev";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ mikefaille ];
+    mainProgram = "tk";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/tektoncd-cli/default.nix b/nixpkgs/pkgs/applications/networking/cluster/tektoncd-cli/default.nix
new file mode 100644
index 000000000000..0cb84284bf80
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/tektoncd-cli/default.nix
@@ -0,0 +1,67 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "tektoncd-cli";
+  version = "0.31.2";
+
+  src = fetchFromGitHub {
+    owner = "tektoncd";
+    repo = "cli";
+    rev = "v${version}";
+    sha256 = "sha256-QBJ8UoR61XOFT6u5glpL+DHaj5Kyqq73r0pyteINQNA=";
+  };
+
+  vendorHash = null;
+
+  ldflags = [ "-s" "-w" "-X github.com/tektoncd/cli/pkg/cmd/version.clientVersion=${version}" ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  subPackages = [ "cmd/tkn" ];
+
+  preCheck = ''
+    # some tests try to write to the home dir
+    export HOME="$TMPDIR"
+
+    # run all tests
+    unset subPackages
+
+    # the tests expect the clientVersion ldflag not to be set
+    unset ldflags
+
+    # remove tests with networking
+    rm pkg/cmd/version/version_test.go
+  '';
+
+  postInstall = ''
+    installManPage docs/man/man1/*
+
+    installShellCompletion --cmd tkn \
+      --bash <($out/bin/tkn completion bash) \
+      --fish <($out/bin/tkn completion fish) \
+      --zsh <($out/bin/tkn completion zsh)
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+    $out/bin/tkn --help
+    $out/bin/tkn version | grep "Client version: ${version}"
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    homepage = "https://tekton.dev";
+    changelog = "https://github.com/tektoncd/cli/releases/tag/v${version}";
+    description = "Provides a CLI for interacting with Tekton - tkn";
+    longDescription = ''
+      The Tekton Pipelines cli project provides a CLI for interacting with
+      Tekton! For your convenience, it is recommended that you install the
+      Tekton CLI, tkn, together with the core component of Tekton, Tekton
+      Pipelines.
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ jk mstrangfeld vdemeester ];
+    mainProgram = "tkn";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/temporal-cli/darwin-sandbox-fix.patch b/nixpkgs/pkgs/applications/networking/cluster/temporal-cli/darwin-sandbox-fix.patch
new file mode 100644
index 000000000000..b390d492467c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/temporal-cli/darwin-sandbox-fix.patch
@@ -0,0 +1,20 @@
+--- vendor/modernc.org/libc/honnef.co/go/netdb/netdb.go
++++ vendor/modernc.org/libc/honnef.co/go/netdb/netdb.go
+@@ -696,7 +696,7 @@ func init() {
+ 	// Load protocols
+ 	data, err := ioutil.ReadFile("/etc/protocols")
+ 	if err != nil {
+-		if !os.IsNotExist(err) {
++		if !os.IsNotExist(err) && !os.IsPermission(err) {
+ 			panic(err)
+ 		}
+ 
+@@ -732,7 +732,7 @@ func init() {
+ 	// Load services
+ 	data, err = ioutil.ReadFile("/etc/services")
+ 	if err != nil {
+-		if !os.IsNotExist(err) {
++		if !os.IsNotExist(err) && !os.IsPermission(err) {
+ 			panic(err)
+ 		}
+ 
diff --git a/nixpkgs/pkgs/applications/networking/cluster/temporal-cli/default.nix b/nixpkgs/pkgs/applications/networking/cluster/temporal-cli/default.nix
new file mode 100644
index 000000000000..126a083b5b34
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/temporal-cli/default.nix
@@ -0,0 +1,117 @@
+{ lib, fetchFromGitHub, buildGoModule, installShellFiles, symlinkJoin, stdenv }:
+
+let
+  metaCommon = with lib; {
+    description = "Command-line interface for running Temporal Server and interacting with Workflows, Activities, Namespaces, and other parts of Temporal";
+    homepage = "https://docs.temporal.io/cli";
+    license = licenses.mit;
+    maintainers = with maintainers; [ aaronjheng ];
+  };
+
+  overrideModAttrs = old: {
+    # https://gitlab.com/cznic/libc/-/merge_requests/10
+    postBuild = ''
+      patch -p0 < ${./darwin-sandbox-fix.patch}
+    '';
+  };
+
+  tctl-next = buildGoModule rec {
+    pname = "tctl-next";
+    version = "0.9.0";
+
+    src = fetchFromGitHub {
+      owner = "temporalio";
+      repo = "cli";
+      rev = "v${version}";
+      hash = "sha256-zgi1wNx7fWf/iFGKaVffcXnC90vUz+mBT6HhCGdXMa0=";
+    };
+
+    vendorHash = "sha256-EX1T3AygarJn4Zae2I8CHQrZakmbNF1OwE4YZFF+nKc=";
+
+    inherit overrideModAttrs;
+
+    nativeBuildInputs = [ installShellFiles ];
+
+    excludedPackages = [ "./cmd/docgen" "./tests" ];
+
+    ldflags = [
+      "-s"
+      "-w"
+      "-X github.com/temporalio/cli/headers.Version=${version}"
+    ];
+
+    # Tests fail with x86 on macOS Rosetta 2
+    doCheck = !(stdenv.isDarwin && stdenv.hostPlatform.isx86_64);
+
+    preCheck = ''
+      export HOME=$(mktemp -d)
+    '';
+
+    postInstall = ''
+      installShellCompletion --cmd temporal \
+        --bash <($out/bin/temporal completion bash) \
+        --zsh <($out/bin/temporal completion zsh)
+    '';
+
+    __darwinAllowLocalNetworking = true;
+
+    meta = metaCommon // {
+      mainProgram = "temporal";
+    };
+  };
+
+  tctl = buildGoModule rec {
+    pname = "tctl";
+    version = "1.18.0";
+
+    src = fetchFromGitHub {
+      owner = "temporalio";
+      repo = "tctl";
+      rev = "v${version}";
+      hash = "sha256-LcBKkx3mcDOrGT6yJx98CSgxbwskqGPWqOzHWOu6cig=";
+    };
+
+    vendorHash = "sha256-5wCIY95mJ6+FCln4yBu+fM4ZcsxBGcXkCvxjGzt0+dM=";
+
+    inherit overrideModAttrs;
+
+    nativeBuildInputs = [ installShellFiles ];
+
+    excludedPackages = [ "./cmd/copyright" ];
+
+    ldflags = [ "-s" "-w" ];
+
+    preCheck = ''
+      export HOME=$(mktemp -d)
+    '';
+
+    postInstall = ''
+      installShellCompletion --cmd tctl \
+        --bash <($out/bin/tctl completion bash) \
+        --zsh <($out/bin/tctl completion zsh)
+    '';
+
+    __darwinAllowLocalNetworking = true;
+
+    meta = metaCommon // {
+      mainProgram = "tctl";
+    };
+  };
+in
+symlinkJoin rec {
+  pname = "temporal-cli";
+  inherit (tctl) version;
+  name = "${pname}-${version}";
+
+  paths = [
+    tctl-next
+    tctl
+  ];
+
+  passthru = { inherit tctl tctl-next; };
+
+  meta = metaCommon // {
+    mainProgram = "temporal";
+    platforms = lib.unique (lib.concatMap (drv: drv.meta.platforms) paths);
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/temporal/default.nix b/nixpkgs/pkgs/applications/networking/cluster/temporal/default.nix
new file mode 100644
index 000000000000..b53a6800111b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/temporal/default.nix
@@ -0,0 +1,51 @@
+{ lib, fetchFromGitHub, buildGoModule, testers, temporal }:
+
+buildGoModule rec {
+  pname = "temporal";
+  version = "1.21.5";
+
+  src = fetchFromGitHub {
+    owner = "temporalio";
+    repo = "temporal";
+    rev = "v${version}";
+    hash = "sha256-G8HqoTdkAAGSadJRF+22hD8q0htwl21HWupfx1/5muc=";
+  };
+
+  vendorHash = "sha256-AVij8Xb729UQt8BuRf+SoGhoDFzsVELAFV5xCBwnx4c=";
+
+  excludedPackages = [ "./build" ];
+
+  CGO_ENABLED = 0;
+
+  ldflags = [ "-s" "-w" ];
+
+  # There too many integration tests.
+  doCheck = false;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/share
+    cp -r ./schema $out/share/
+
+    install -Dm755 "$GOPATH/bin/server" -T $out/bin/temporal-server
+    install -Dm755 "$GOPATH/bin/cassandra" -T $out/bin/temporal-cassandra-tool
+    install -Dm755 "$GOPATH/bin/sql" -T $out/bin/temporal-sql-tool
+    install -Dm755 "$GOPATH/bin/tdbg" -T $out/bin/tdbg
+
+    runHook postInstall
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = temporal;
+  };
+
+  meta = with lib; {
+    description = "A microservice orchestration platform which enables developers to build scalable applications without sacrificing productivity or reliability";
+    homepage = "https://temporal.io";
+    changelog = "https://github.com/temporalio/temporal/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ titanous ];
+    mainProgram = "temporal-server";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/temporalite/default.nix b/nixpkgs/pkgs/applications/networking/cluster/temporalite/default.nix
new file mode 100644
index 000000000000..efe1f2d30c5d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/temporalite/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "temporalite";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "temporalio";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-IEB9AFEt8U2zXYfbChfL/UH1rNSLPnfS396/cPE8UdE=";
+  };
+
+  vendorHash = "sha256-w86/XCMRGBmXM+oQ5+0qiX0fdwiKXvsmEkApuRLUOiA=";
+
+  subPackages = [ "cmd/temporalite" ];
+
+  postPatch = ''
+    substituteInPlace cmd/temporalite/ui_test.go \
+      --replace "TestNewUIConfigWithMissingConfigFile" "SkipNewUIConfigWithMissingConfigFile"
+
+    substituteInPlace cmd/temporalite/mtls_test.go \
+      --replace "TestMTLSConfig" "SkipMTLSConfig"
+  '';
+
+  meta = with lib; {
+    description = "An experimental distribution of Temporal that runs as a single process";
+    homepage = "https://github.com/temporalio/temporalite";
+    license = licenses.mit;
+    maintainers = with maintainers; [ lucperkins ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/terraform-backend-git/default.nix b/nixpkgs/pkgs/applications/networking/cluster/terraform-backend-git/default.nix
new file mode 100644
index 000000000000..09cc62352d7b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/terraform-backend-git/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "terraform-backend-git";
+  version = "0.1.5";
+
+  src = fetchFromGitHub {
+    owner = "plumber-cd";
+    repo = "terraform-backend-git";
+    rev = "v${version}";
+    hash = "sha256-ryHFuHIEJ4i1R3oBW3w3aAvtv+vIrO745qwx0+SqBF4=";
+  };
+
+  vendorHash = "sha256-Y/4UgG/2Vp+gxBnGrNpAgRNfPZWJXhVo8TVa/VfOYt0=";
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=github.com/plumber-cd/terraform-backend-git/cmd.Version=${version}"
+  ];
+
+  postInstall = ''
+    installShellCompletion --cmd terraform-backend-git \
+      --bash <($out/bin/terraform-backend-git completion bash) \
+      --fish <($out/bin/terraform-backend-git completion fish) \
+      --zsh <($out/bin/terraform-backend-git completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "Terraform HTTP Backend implementation that uses Git repository as storage";
+    homepage = "https://github.com/plumber-cd/terraform-backend-git";
+    changelog = "https://github.com/plumber-cd/terraform-backend-git/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ blaggacao ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/terraform-compliance/default.nix b/nixpkgs/pkgs/applications/networking/cluster/terraform-compliance/default.nix
new file mode 100644
index 000000000000..669af001e54f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/terraform-compliance/default.nix
@@ -0,0 +1,60 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "terraform-compliance";
+  version = "1.3.44";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "terraform-compliance";
+    repo = "cli";
+    rev = "refs/tags/${version}";
+    sha256 = "sha256-eE9bqu9ipuas+rdcJpn09V6nkdoYPOpChHgPH8U0rNw=";
+  };
+
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace "IPython==7.16.1" "IPython" \
+      --replace "diskcache==5.1.0" "diskcache>=5.1.0" \
+      --replace "radish-bdd==0.13.1" "radish-bdd" \
+  '';
+
+  propagatedBuildInputs = with python3.pkgs; [
+    diskcache
+    emoji
+    filetype
+    gitpython
+    ipython
+    junit-xml
+    lxml
+    mock
+    netaddr
+    radish-bdd
+    semver
+    orjson
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytestCheckHook
+  ];
+
+  disabledTests = [
+    "test_which_success"
+    "test_readable_plan_file_is_not_json"
+  ];
+
+  pythonImportsCheck = [
+    "terraform_compliance"
+  ];
+
+  meta = with lib; {
+    description = "BDD test framework for terraform";
+    homepage = "https://github.com/terraform-compliance/cli";
+    changelog = "https://github.com/terraform-compliance/cli/releases/tag/${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ kalbasit kashw2 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/terraform-docs/default.nix b/nixpkgs/pkgs/applications/networking/cluster/terraform-docs/default.nix
new file mode 100644
index 000000000000..319db3c9b873
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/terraform-docs/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+buildGoModule rec {
+  pname = "terraform-docs";
+  version = "0.16.0";
+
+  src = fetchFromGitHub {
+    owner = "terraform-docs";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-zSSK2WfcbD1DvqsFUKdTydLfyApWzm1h+ihSnLUmq2E=";
+  };
+
+  vendorHash = "sha256-0Bkjx/gq2MAWjxoMSGtBcRzv40SSUVDZBh4PzEtKj5o=";
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "A utility to generate documentation from Terraform modules in various output formats";
+    homepage = "https://github.com/terraform-docs/terraform-docs/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ zimbatm ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/terraform-inventory/default.nix b/nixpkgs/pkgs/applications/networking/cluster/terraform-inventory/default.nix
new file mode 100644
index 000000000000..89d4b769e9af
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/terraform-inventory/default.nix
@@ -0,0 +1,30 @@
+{ lib, buildGoModule, fetchFromGitHub, testers, terraform-inventory }:
+
+buildGoModule rec {
+  pname = "terraform-inventory";
+  version = "0.10";
+
+  src = fetchFromGitHub {
+    owner = "adammck";
+    repo = "terraform-inventory";
+    rev = "v${version}";
+    sha256 = "sha256-gkSDxcBoYmCBzkO8y1WKcRtZdfl8w5qVix0zbyb4Myo=";
+  };
+
+  vendorHash = "sha256-pj9XLzaGU1PuNnpTL/7XaKJZUymX+i8hFMroZtHIqTc=";
+
+  ldflags = [ "-s" "-w" "-X main.build_version=${version}" ];
+
+  doCheck = false;
+
+  passthru.tests.version = testers.testVersion {
+    package = terraform-inventory;
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/adammck/terraform-inventory";
+    description = "Terraform state to ansible inventory adapter";
+    license = licenses.mit;
+    maintainers = with maintainers; [ htr ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/terraform-landscape/Gemfile b/nixpkgs/pkgs/applications/networking/cluster/terraform-landscape/Gemfile
new file mode 100644
index 000000000000..c4f9a5511de9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/terraform-landscape/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'terraform_landscape'
diff --git a/nixpkgs/pkgs/applications/networking/cluster/terraform-landscape/Gemfile.lock b/nixpkgs/pkgs/applications/networking/cluster/terraform-landscape/Gemfile.lock
new file mode 100644
index 000000000000..7307d8a33f3c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/terraform-landscape/Gemfile.lock
@@ -0,0 +1,25 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    colorize (0.8.1)
+    commander (4.4.6)
+      highline (~> 1.7.2)
+    diffy (3.2.1)
+    highline (1.7.10)
+    polyglot (0.3.5)
+    terraform_landscape (0.2.1)
+      colorize (~> 0.7)
+      commander (~> 4.4)
+      diffy (~> 3.0)
+      treetop (~> 1.6)
+    treetop (1.6.10)
+      polyglot (~> 0.3)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  terraform_landscape
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/applications/networking/cluster/terraform-landscape/default.nix b/nixpkgs/pkgs/applications/networking/cluster/terraform-landscape/default.nix
new file mode 100644
index 000000000000..903aa9abb6e2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/terraform-landscape/default.nix
@@ -0,0 +1,18 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "terraform_landscape";
+
+  gemdir = ./.;
+  exes = [ "landscape" ];
+
+  passthru.updateScript = bundlerUpdateScript "terraform-landscape";
+
+  meta = with lib; {
+    description = "Improve Terraform's plan output to be easier to read and understand";
+    homepage    = "https://github.com/coinbase/terraform-landscape";
+    license     = with licenses; asl20;
+    maintainers = with maintainers; [ mbode manveru nicknovitski ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/terraform-landscape/gemset.nix b/nixpkgs/pkgs/applications/networking/cluster/terraform-landscape/gemset.nix
new file mode 100644
index 000000000000..bf3767486eaf
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/terraform-landscape/gemset.nix
@@ -0,0 +1,61 @@
+{
+  colorize = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "133rqj85n400qk6g3dhf2bmfws34mak1wqihvh3bgy9jhajw580b";
+      type = "gem";
+    };
+    version = "0.8.1";
+  };
+  commander = {
+    dependencies = ["highline"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "11sd2sb0id2dbxkv4pvymdiia1xxhms45kh4nr8mryqybad0fwwf";
+      type = "gem";
+    };
+    version = "4.4.6";
+  };
+  diffy = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "119imrkn01agwhx5raxhknsi331y5i4yda7r0ws0an6905ximzjg";
+      type = "gem";
+    };
+    version = "3.2.1";
+  };
+  highline = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01ib7jp85xjc4gh4jg0wyzllm46hwv8p0w1m4c75pbgi41fps50y";
+      type = "gem";
+    };
+    version = "1.7.10";
+  };
+  polyglot = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1bqnxwyip623d8pr29rg6m8r0hdg08fpr2yb74f46rn1wgsnxmjr";
+      type = "gem";
+    };
+    version = "0.3.5";
+  };
+  terraform_landscape = {
+    dependencies = ["colorize" "commander" "diffy" "treetop"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1i93pih7r6zcqpjhsmvkpfkgbh0l66c60i6fkiymq7vy2xd6wnns";
+      type = "gem";
+    };
+    version = "0.2.1";
+  };
+  treetop = {
+    dependencies = ["polyglot"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0g31pijhnv7z960sd09lckmw9h8rs3wmc8g4ihmppszxqm99zpv7";
+      type = "gem";
+    };
+    version = "1.6.10";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/terraform-providers/default.nix b/nixpkgs/pkgs/applications/networking/cluster/terraform-providers/default.nix
new file mode 100644
index 000000000000..94bc2827ec9d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/terraform-providers/default.nix
@@ -0,0 +1,104 @@
+{ lib
+, stdenv
+, buildGoModule
+, buildGo121Module
+, fetchFromGitHub
+, fetchFromGitLab
+, callPackage
+, config
+, writeShellScript
+
+, cdrtools # libvirt
+}:
+let
+  # Our generic constructor to build new providers.
+  #
+  # Is designed to combine with the terraform.withPlugins implementation.
+  mkProvider = lib.makeOverridable
+    ({ owner
+     , repo
+     , rev
+     , spdx ? "UNSET"
+     , version ? lib.removePrefix "v" rev
+     , hash
+     , vendorHash
+     , deleteVendor ? false
+     , proxyVendor ? false
+     , mkProviderFetcher ? fetchFromGitHub
+     , mkProviderGoModule ? buildGoModule
+       # "https://registry.terraform.io/providers/vancluever/acme"
+     , homepage ? ""
+       # "registry.terraform.io/vancluever/acme"
+     , provider-source-address ? lib.replaceStrings [ "https://registry" ".io/providers" ] [ "registry" ".io" ] homepage
+     , ...
+     }@attrs:
+      assert lib.stringLength provider-source-address > 0;
+      mkProviderGoModule {
+        pname = repo;
+        inherit vendorHash version deleteVendor proxyVendor;
+        subPackages = [ "." ];
+        doCheck = false;
+        # https://github.com/hashicorp/terraform-provider-scaffolding/blob/a8ac8375a7082befe55b71c8cbb048493dd220c2/.goreleaser.yml
+        # goreleaser (used for builds distributed via terraform registry) requires that CGO is disabled
+        CGO_ENABLED = 0;
+        ldflags = [ "-s" "-w" "-X main.version=${version}" "-X main.commit=${rev}" ];
+        src = mkProviderFetcher {
+          name = "source-${rev}";
+          inherit owner repo rev hash;
+        };
+
+        meta = {
+          inherit homepage;
+          license = lib.getLicenseFromSpdxId spdx;
+        };
+
+        # Move the provider to libexec
+        postInstall = ''
+          dir=$out/libexec/terraform-providers/${provider-source-address}/${version}/''${GOOS}_''${GOARCH}
+          mkdir -p "$dir"
+          mv $out/bin/* "$dir/terraform-provider-$(basename ${provider-source-address})_${version}"
+          rmdir $out/bin
+        '';
+
+        # Keep the attributes around for later consumption
+        passthru = attrs // {
+          inherit provider-source-address;
+          updateScript = writeShellScript "update" ''
+            provider="$(basename ${provider-source-address})"
+            ./pkgs/applications/networking/cluster/terraform-providers/update-provider "$provider"
+          '';
+        };
+      });
+
+  list = lib.importJSON ./providers.json;
+
+  # These providers are managed with the ./update-all script
+  automated-providers = lib.mapAttrs (_: attrs: mkProvider attrs) list;
+
+  # These are the providers that don't fall in line with the default model
+  special-providers =
+    {
+      # github api seems to be broken, doesn't just fail to recognize the license, it's ignored entirely.
+      checkly = automated-providers.checkly.override { spdx = "MIT"; };
+      gitlab = automated-providers.gitlab.override { mkProviderFetcher = fetchFromGitLab; owner = "gitlab-org"; };
+      # actions update always fails but can't reproduce the failure.
+      heroku = automated-providers.heroku.override { spdx = "MPL-2.0"; };
+      # mkisofs needed to create ISOs holding cloud-init data and wrapped to terraform via deecb4c1aab780047d79978c636eeb879dd68630
+      libvirt = automated-providers.libvirt.overrideAttrs (_: { propagatedBuildInputs = [ cdrtools ]; });
+      tailscale = automated-providers.tailscale.override { mkProviderGoModule = buildGo121Module; };
+    };
+
+  # Put all the providers we not longer support in this list.
+  removed-providers =
+    let
+      archived = name: date: throw "the ${name} terraform provider has been archived by upstream on ${date}";
+      removed = name: date: throw "the ${name} terraform provider removed from nixpkgs on ${date}";
+    in
+    lib.optionalAttrs config.allowAliases {
+      ksyun = removed "ksyun" "2023/04";
+    };
+
+  # excluding aliases, used by terraform-full
+  actualProviders = automated-providers // special-providers;
+in
+actualProviders // removed-providers // { inherit actualProviders mkProvider; }
diff --git a/nixpkgs/pkgs/applications/networking/cluster/terraform-providers/providers.json b/nixpkgs/pkgs/applications/networking/cluster/terraform-providers/providers.json
new file mode 100644
index 000000000000..0031fb03971c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/terraform-providers/providers.json
@@ -0,0 +1,1290 @@
+{
+  "aci": {
+    "hash": "sha256-rJ4xiBLrwhYkVPFDo6vZkk+w3v07EuK5a2gn1cbEA6Q=",
+    "homepage": "https://registry.terraform.io/providers/CiscoDevNet/aci",
+    "owner": "CiscoDevNet",
+    "repo": "terraform-provider-aci",
+    "rev": "v2.10.1",
+    "spdx": "MPL-2.0",
+    "vendorHash": null
+  },
+  "acme": {
+    "hash": "sha256-5KR32V4sE5AkOVroLmelNBzBZpD4KfhC491X+5eo+n8=",
+    "homepage": "https://registry.terraform.io/providers/vancluever/acme",
+    "owner": "vancluever",
+    "proxyVendor": true,
+    "repo": "terraform-provider-acme",
+    "rev": "v2.17.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-UIV0dIoRZxNiaEq1HGPIV4mFLn4pAoGPo6tx6zV3r3A="
+  },
+  "age": {
+    "hash": "sha256-bJrzjvkrCX93bNqCA+FdRibHnAw6cb61StqtwUY5ok4=",
+    "homepage": "https://registry.terraform.io/providers/clementblaise/age",
+    "owner": "clementblaise",
+    "repo": "terraform-provider-age",
+    "rev": "v0.1.1",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-jK7JuARpoxq7hvq5+vTtUwcYot0YqlOZdtDwq4IqKvk="
+  },
+  "aiven": {
+    "hash": "sha256-3agD22viTP+yntNg2nyYi5OpknXnfI2Jk/xEcvXgia8=",
+    "homepage": "https://registry.terraform.io/providers/aiven/aiven",
+    "owner": "aiven",
+    "repo": "terraform-provider-aiven",
+    "rev": "v4.8.2",
+    "spdx": "MIT",
+    "vendorHash": "sha256-sVPby/MLAgU7DfBDACqxvkLWblBhisHcUaoOgR3fMaM="
+  },
+  "akamai": {
+    "hash": "sha256-jVl4B7YfBDri+G/cJHTvPJquCALEdKxRY1DKeJOC2p0=",
+    "homepage": "https://registry.terraform.io/providers/akamai/akamai",
+    "owner": "akamai",
+    "repo": "terraform-provider-akamai",
+    "rev": "v5.2.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-GjGv4q0+Yfu4Vc/eZHcch/Y5MMj1QszDrIlu/sY33Ho="
+  },
+  "alicloud": {
+    "hash": "sha256-Ni69AvtyRgwT89OayULlqS8mWdoK+BLK35H0sQEiksg=",
+    "homepage": "https://registry.terraform.io/providers/aliyun/alicloud",
+    "owner": "aliyun",
+    "repo": "terraform-provider-alicloud",
+    "rev": "v1.209.1",
+    "spdx": "MPL-2.0",
+    "vendorHash": null
+  },
+  "ansible": {
+    "hash": "sha256-3nha5V4rNgVzgqliebmbC5e12Lj/zlCsyyiIVFlmUrY=",
+    "homepage": "https://registry.terraform.io/providers/nbering/ansible",
+    "owner": "nbering",
+    "repo": "terraform-provider-ansible",
+    "rev": "v1.0.4",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-OAd8SeTqTrH0kMoM2LsK3vM2PI23b3gl57FaJYM9hM0="
+  },
+  "archive": {
+    "hash": "sha256-fhKN7aqQlurzKB568LC7wt0yikUrsEjS8vngMedqQY8=",
+    "homepage": "https://registry.terraform.io/providers/hashicorp/archive",
+    "owner": "hashicorp",
+    "repo": "terraform-provider-archive",
+    "rev": "v2.4.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-LSAxibOYXxyIAsprMzbW+mnUXX7gHtYjMZYaUrGLtD4="
+  },
+  "argocd": {
+    "hash": "sha256-7BOBk2wrCvI8sAzjgDWYNhK+Uht4SaySLK6lJdR1o9Q=",
+    "homepage": "https://registry.terraform.io/providers/oboukili/argocd",
+    "owner": "oboukili",
+    "repo": "terraform-provider-argocd",
+    "rev": "v6.0.2",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-q9PO9tMbaXTs3nBLElwU05GcDZMZqNmLVVGDmiSRSfo="
+  },
+  "auth0": {
+    "hash": "sha256-QljqPcupvU7AgVSuarpd0FwLuAPJI9umgsgMXc2/v6w=",
+    "homepage": "https://registry.terraform.io/providers/auth0/auth0",
+    "owner": "auth0",
+    "repo": "terraform-provider-auth0",
+    "rev": "v0.50.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-+ZYbaQICwcABnJE9p6Lwk0gXqeHfO/TLkvwvLD9v8ng="
+  },
+  "avi": {
+    "hash": "sha256-xis3uVCK+dck6R5ru8suNQov9qTLwLIdeQCAR9Jwqcs=",
+    "homepage": "https://registry.terraform.io/providers/vmware/avi",
+    "owner": "vmware",
+    "proxyVendor": true,
+    "repo": "terraform-provider-avi",
+    "rev": "v22.1.4",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-vORXHX6VKP/JHP/InB2b9Rqej2JIIDOzS3r05wO2I+c="
+  },
+  "aviatrix": {
+    "hash": "sha256-T/GPJBcKxWhBxB7fVACkkwRm6dqixQpkAzi6UYw6TRw=",
+    "homepage": "https://registry.terraform.io/providers/AviatrixSystems/aviatrix",
+    "owner": "AviatrixSystems",
+    "repo": "terraform-provider-aviatrix",
+    "rev": "v3.1.2",
+    "spdx": "MPL-2.0",
+    "vendorHash": null
+  },
+  "aws": {
+    "hash": "sha256-Wt6rcHCxn1RPIxblL/Y6JWfsmOcloMZ8DMWvoVz/xrI=",
+    "homepage": "https://registry.terraform.io/providers/hashicorp/aws",
+    "owner": "hashicorp",
+    "repo": "terraform-provider-aws",
+    "rev": "v5.14.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-wF4dsQItVSXpJWBiOmdt/5ZaZeROmIxNW66Ec80PudU="
+  },
+  "azuread": {
+    "hash": "sha256-aLckXkWxMsDS1ddPucAmjFS6+mkwHeAO1+BlPNaF6cI=",
+    "homepage": "https://registry.terraform.io/providers/hashicorp/azuread",
+    "owner": "hashicorp",
+    "repo": "terraform-provider-azuread",
+    "rev": "v2.41.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": null
+  },
+  "azurerm": {
+    "hash": "sha256-l26MIkMpB4/vO6r2u7vyepAGxRw8CNPDhcUD/USWteg=",
+    "homepage": "https://registry.terraform.io/providers/hashicorp/azurerm",
+    "owner": "hashicorp",
+    "repo": "terraform-provider-azurerm",
+    "rev": "v3.71.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": null
+  },
+  "azurestack": {
+    "hash": "sha256-aSwVa7y1AJ6sExx+bO/93oLBNgSBDJjuPYPY8i3C9T0=",
+    "homepage": "https://registry.terraform.io/providers/hashicorp/azurestack",
+    "owner": "hashicorp",
+    "repo": "terraform-provider-azurestack",
+    "rev": "v1.0.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": null
+  },
+  "baiducloud": {
+    "hash": "sha256-5tydl+IMHz1wYxNUHJY6l+yIgtjc0gy5ufa+DQHiNf0=",
+    "homepage": "https://registry.terraform.io/providers/baidubce/baiducloud",
+    "owner": "baidubce",
+    "repo": "terraform-provider-baiducloud",
+    "rev": "v1.19.15",
+    "spdx": "MPL-2.0",
+    "vendorHash": null
+  },
+  "bigip": {
+    "hash": "sha256-dlQRjIf2lffWqD42ykZdm6HJT0qdID9gdc0vjq2nl9k=",
+    "homepage": "https://registry.terraform.io/providers/F5Networks/bigip",
+    "owner": "F5Networks",
+    "repo": "terraform-provider-bigip",
+    "rev": "v1.19.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": null
+  },
+  "bitbucket": {
+    "hash": "sha256-En53+Lj7cQxzkKgXDPWNptVbg0wMAc5WRmsilBOlgEM=",
+    "homepage": "https://registry.terraform.io/providers/DrFaust92/bitbucket",
+    "owner": "DrFaust92",
+    "repo": "terraform-provider-bitbucket",
+    "rev": "v2.35.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-xaa/NAJfKlSM4P9o4xNsJhL5ZyUGNYMC9/WbCqMKiLM="
+  },
+  "brightbox": {
+    "hash": "sha256-pwFbCP+qDL/4IUfbPRCkddkbsEEeAu7Wp12/mDL0ABA=",
+    "homepage": "https://registry.terraform.io/providers/brightbox/brightbox",
+    "owner": "brightbox",
+    "repo": "terraform-provider-brightbox",
+    "rev": "v3.4.3",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-/dOiXO2aPkuZaFiwv/6AXJdIADgx8T7eOwvJfBBoqg8="
+  },
+  "buildkite": {
+    "hash": "sha256-LZyfyiPyGToJMMue9049CnMnioJblko/WXt2PSNv4WE=",
+    "homepage": "https://registry.terraform.io/providers/buildkite/buildkite",
+    "owner": "buildkite",
+    "repo": "terraform-provider-buildkite",
+    "rev": "v0.26.0",
+    "spdx": "MIT",
+    "vendorHash": "sha256-G4aKekEqEZVMxXDjPgnzvXidv0u1WydZqxSPj5d+WKg="
+  },
+  "checkly": {
+    "hash": "sha256-tOTrAi6hd4HFbHAj0p/LTYdxQl1R1WuQ9L4hzqmDVqI=",
+    "homepage": "https://registry.terraform.io/providers/checkly/checkly",
+    "owner": "checkly",
+    "repo": "terraform-provider-checkly",
+    "rev": "v1.6.9",
+    "spdx": null,
+    "vendorHash": "sha256-EhsfA53xkGFgiwJxBtpD1ZKjb0+14dKD9rQ0Jrrm3ck="
+  },
+  "ciscoasa": {
+    "hash": "sha256-xzc44FEy2MPo51Faq/VFwg411JK9e0kQucpt0vdN8yg=",
+    "homepage": "https://registry.terraform.io/providers/CiscoDevNet/ciscoasa",
+    "owner": "CiscoDevNet",
+    "repo": "terraform-provider-ciscoasa",
+    "rev": "v1.3.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": null
+  },
+  "cloudamqp": {
+    "hash": "sha256-35pcXFmVCO2naCeDDcNtgzUeMdkGfGBxZvYSSGtH824=",
+    "homepage": "https://registry.terraform.io/providers/cloudamqp/cloudamqp",
+    "owner": "cloudamqp",
+    "repo": "terraform-provider-cloudamqp",
+    "rev": "v1.27.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-qIgr+ynaNSfNx1iW5RJrNHvEnlr46dBzIi+5IXYn+3Q="
+  },
+  "cloudflare": {
+    "hash": "sha256-l1cTzPiOOLyvbvbt7dWR9lRgqVFiO5gRq4XNnLqvac0=",
+    "homepage": "https://registry.terraform.io/providers/cloudflare/cloudflare",
+    "owner": "cloudflare",
+    "repo": "terraform-provider-cloudflare",
+    "rev": "v4.13.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-uZ0zc+/RmEiqxBSZLgLPmwN29BEJitPN13HE88zPxcI="
+  },
+  "cloudfoundry": {
+    "hash": "sha256-yEqsdgTSlwppt6ILRZQ6Epyh5WVN6Il3xsBOa/NfIdo=",
+    "homepage": "https://registry.terraform.io/providers/cloudfoundry-community/cloudfoundry",
+    "owner": "cloudfoundry-community",
+    "repo": "terraform-provider-cloudfoundry",
+    "rev": "v0.51.3",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-0hq4dR1KqnE2IXMwif2/NVKQKRO/QplW/A6sB4pJ+FM="
+  },
+  "cloudinit": {
+    "hash": "sha256-fdtUKD8XC1Y72IzrsCfTZYVYZwLqY3gV2sajiw4Krzw=",
+    "homepage": "https://registry.terraform.io/providers/hashicorp/cloudinit",
+    "owner": "hashicorp",
+    "repo": "terraform-provider-cloudinit",
+    "rev": "v2.3.2",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-h4CO3sC41RPSmkTlWUCiRvQ1NRZkT2v1uHFOemvBN8s="
+  },
+  "cloudscale": {
+    "hash": "sha256-fthgKxMYubc0y+6C6ON/zw+bZ9pd73N0Q0qDR715KCo=",
+    "homepage": "https://registry.terraform.io/providers/cloudscale-ch/cloudscale",
+    "owner": "cloudscale-ch",
+    "repo": "terraform-provider-cloudscale",
+    "rev": "v4.2.0",
+    "spdx": "MIT",
+    "vendorHash": null
+  },
+  "constellix": {
+    "deleteVendor": true,
+    "hash": "sha256-ecwXWYrs7XJM1web+kia2ccpvTjxAVFPzav6lLal4e4=",
+    "homepage": "https://registry.terraform.io/providers/Constellix/constellix",
+    "owner": "Constellix",
+    "repo": "terraform-provider-constellix",
+    "rev": "v0.4.5",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-UJHDX/vx3n/RTuQ50Y6TAhpEEFk9yBoaz8yK02E8Fhw="
+  },
+  "consul": {
+    "hash": "sha256-2oujZd7tqvMnp48m3bs45p5dRC7U5a7hsiS5qBuPUHU=",
+    "homepage": "https://registry.terraform.io/providers/hashicorp/consul",
+    "owner": "hashicorp",
+    "repo": "terraform-provider-consul",
+    "rev": "v2.18.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-0SRbKFKl1lfiiMDZW20ak9m09T3tSOH/fc+UwGeXmuk="
+  },
+  "ct": {
+    "hash": "sha256-c1cqTfMlZ5fXDNMYLsk4447X0p/qIQYvRTqVY8cSs+E=",
+    "homepage": "https://registry.terraform.io/providers/poseidon/ct",
+    "owner": "poseidon",
+    "repo": "terraform-provider-ct",
+    "rev": "v0.13.0",
+    "spdx": "Apache-2.0",
+    "vendorHash": "sha256-ZCMSmOCPEMxCSpl3DjIUGPj1W/KNJgyjtHpmQ19JquA="
+  },
+  "datadog": {
+    "hash": "sha256-FAqtbze6Lw6SCU84R6aB0oY+pcWyDBdTZRBZhM2pjyc=",
+    "homepage": "https://registry.terraform.io/providers/DataDog/datadog",
+    "owner": "DataDog",
+    "repo": "terraform-provider-datadog",
+    "rev": "v3.29.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-UJRuj5qmWWjkqMBGf0500//83ky0Dxx04IQETPwwSsw="
+  },
+  "dexidp": {
+    "hash": "sha256-69r3m3lIKftZQ8NXBD5KEHbsNUwCGpFgn/CYO+921M4=",
+    "homepage": "https://registry.terraform.io/providers/marcofranssen/dexidp",
+    "owner": "marcofranssen",
+    "repo": "terraform-provider-dexidp",
+    "rev": "v0.3.0",
+    "spdx": "MIT",
+    "vendorHash": "sha256-EWEc7tILolAIzT7ZOLXlrlrt3hsgJxFD89y/USLeE40="
+  },
+  "dhall": {
+    "hash": "sha256-K0j90YAzYqdyJD4aofyxAJF9QBYNMbhSVm/s1GvWuJ4=",
+    "homepage": "https://registry.terraform.io/providers/awakesecurity/dhall",
+    "owner": "awakesecurity",
+    "repo": "terraform-provider-dhall",
+    "rev": "v0.0.3",
+    "spdx": "BSD-3-Clause",
+    "vendorHash": "sha256-BpXhKjfxyCLdGRHn1GexW0MoLj4/C6Bn7scZ76JARxQ="
+  },
+  "digitalocean": {
+    "hash": "sha256-CnakqGO/adv44knzp3Q5nC17tD+ZpOEFqfQXPk20klg=",
+    "homepage": "https://registry.terraform.io/providers/digitalocean/digitalocean",
+    "owner": "digitalocean",
+    "repo": "terraform-provider-digitalocean",
+    "rev": "v2.29.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": null
+  },
+  "dme": {
+    "hash": "sha256-QNkr+6lKlKY+os0Pf6dqlmIn9u2LtMOo6ONahDeA9mE=",
+    "homepage": "https://registry.terraform.io/providers/DNSMadeEasy/dme",
+    "owner": "DNSMadeEasy",
+    "repo": "terraform-provider-dme",
+    "rev": "v1.0.6",
+    "spdx": "MPL-2.0",
+    "vendorHash": null
+  },
+  "dns": {
+    "hash": "sha256-feMN0Fpq8ct3l0u1Y8Zjgee4iC+e90CwAZmk5VQj2So=",
+    "homepage": "https://registry.terraform.io/providers/hashicorp/dns",
+    "owner": "hashicorp",
+    "repo": "terraform-provider-dns",
+    "rev": "v3.3.2",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-SvyeMKuAJ4vu++7Fx0hutx3vQvgf1sh1PFSLPRqJPjw="
+  },
+  "dnsimple": {
+    "hash": "sha256-Q/EjVBjZyML1coMblzqGU7AFdG+of1hVQ4GibM7MiRw=",
+    "homepage": "https://registry.terraform.io/providers/dnsimple/dnsimple",
+    "owner": "dnsimple",
+    "repo": "terraform-provider-dnsimple",
+    "rev": "v1.1.2",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-rCM+PL78zD1FYK2v9ihdLkoFwbkgtJTSEq5vKXZPAsU="
+  },
+  "docker": {
+    "hash": "sha256-UyHOI8C0eDV5YllAi9clHp/CEldHjIp3FHHMPy1rK58=",
+    "homepage": "https://registry.terraform.io/providers/kreuzwerker/docker",
+    "owner": "kreuzwerker",
+    "repo": "terraform-provider-docker",
+    "rev": "v3.0.2",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-XxltOTtCgmJ9wZX8Yw39HkwVVZb58kZjAH7jfKPhjKM="
+  },
+  "doppler": {
+    "hash": "sha256-VwyJrgPiZW9DzAFS3SeLxV6sdVjD5MzsekOSg3ByhXk=",
+    "homepage": "https://registry.terraform.io/providers/DopplerHQ/doppler",
+    "owner": "DopplerHQ",
+    "repo": "terraform-provider-doppler",
+    "rev": "v1.2.4",
+    "spdx": "Apache-2.0",
+    "vendorHash": "sha256-Z5GKIty78BUFF3VbTcsZKi437gw/kOIHEKkAYu3uB2o="
+  },
+  "elasticsearch": {
+    "hash": "sha256-a6kHN3w0sQCP+0+ZtFwcg9erfVBYkhNo+yOrnwweGWo=",
+    "homepage": "https://registry.terraform.io/providers/phillbaker/elasticsearch",
+    "owner": "phillbaker",
+    "repo": "terraform-provider-elasticsearch",
+    "rev": "v2.0.7",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-oVTanZpCWs05HwyIKW2ajiBPz1HXOFzBAt5Us+EtTRw="
+  },
+  "equinix": {
+    "hash": "sha256-6fY1gDQLPOaq2FiuT0Mue8dcsJbFCFQ1N38tmyBcdWg=",
+    "homepage": "https://registry.terraform.io/providers/equinix/equinix",
+    "owner": "equinix",
+    "repo": "terraform-provider-equinix",
+    "rev": "v1.16.0",
+    "spdx": "MIT",
+    "vendorHash": "sha256-SqT25WhGmJM/ZTd7QdVPJFxo7zo5OB9AuuDK4RdjKeI="
+  },
+  "exoscale": {
+    "hash": "sha256-93pCsHrsYLJYgg8MXHz2Gg+vaPC9gcHdLastb89/BMg=",
+    "homepage": "https://registry.terraform.io/providers/exoscale/exoscale",
+    "owner": "exoscale",
+    "repo": "terraform-provider-exoscale",
+    "rev": "v0.51.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": null
+  },
+  "external": {
+    "hash": "sha256-+0AqlVGKSEeXlcKfNiYDqh0B9rRqyt9FDNWstdOFACI=",
+    "homepage": "https://registry.terraform.io/providers/hashicorp/external",
+    "owner": "hashicorp",
+    "repo": "terraform-provider-external",
+    "rev": "v2.3.1",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-E1gzdES/YVxQq2J47E2zosvud2C/ViBeQ8+RfNHMBAg="
+  },
+  "fastly": {
+    "hash": "sha256-Pd79xIFu+vwynwVqDFqkuhg8NczkbCF2eWOXrLOPCGI=",
+    "homepage": "https://registry.terraform.io/providers/fastly/fastly",
+    "owner": "fastly",
+    "repo": "terraform-provider-fastly",
+    "rev": "v5.3.1",
+    "spdx": "MPL-2.0",
+    "vendorHash": null
+  },
+  "flexibleengine": {
+    "hash": "sha256-9qwGI7JBhX2WDX7u3SY2l9RJeiDffEpkE16f8/qqlI8=",
+    "homepage": "https://registry.terraform.io/providers/FlexibleEngineCloud/flexibleengine",
+    "owner": "FlexibleEngineCloud",
+    "repo": "terraform-provider-flexibleengine",
+    "rev": "v1.40.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-RqYzqKPzb5GcrzHnEDZC7GaBt1zP8g28Wo3WNAe07Ck="
+  },
+  "fly": {
+    "hash": "sha256-9QB2fbggCKcJz8tkSYgq/X8r+MB2M76VCWXgsHARTkU=",
+    "homepage": "https://registry.terraform.io/providers/fly-apps/fly",
+    "owner": "fly-apps",
+    "repo": "terraform-provider-fly",
+    "rev": "v0.0.23",
+    "spdx": "BSD-3-Clause",
+    "vendorHash": "sha256-f+Z6Y2WPxqJoHoCwuK6sgFa8nUnkW/WwrD55dtU0wtM="
+  },
+  "fortios": {
+    "hash": "sha256-fWz3OAIOSVHNA6x8i6f/ewcC0WwWDYzeaT8rz3vFDWA=",
+    "homepage": "https://registry.terraform.io/providers/fortinetdev/fortios",
+    "owner": "fortinetdev",
+    "proxyVendor": true,
+    "repo": "terraform-provider-fortios",
+    "rev": "1.17.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-DwRfbD4AqB+4KLuYtqY5fUdzRrEpTIvL4VAM7nieJJA="
+  },
+  "gandi": {
+    "hash": "sha256-eVSMjXSYRedig93Tm2ZLpbuJhG3wKSBwfLli7OWs3dU=",
+    "homepage": "https://registry.terraform.io/providers/go-gandi/gandi",
+    "owner": "go-gandi",
+    "repo": "terraform-provider-gandi",
+    "rev": "v2.2.3",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-uWTY8cFztXFrQQ7GW6/R+x9M6vHmsb934ldq+oeW5vk="
+  },
+  "github": {
+    "hash": "sha256-I1FOJitXPJo/mlJCTXsJ1i+UCTImbtkJtEWAvV8wUP0=",
+    "homepage": "https://registry.terraform.io/providers/integrations/github",
+    "owner": "integrations",
+    "repo": "terraform-provider-github",
+    "rev": "v5.34.0",
+    "spdx": "MIT",
+    "vendorHash": null
+  },
+  "gitlab": {
+    "hash": "sha256-91hv73KEer3FyS9FWoQ0gV1VwRKZqAu/6fAughmX5D0=",
+    "homepage": "https://registry.terraform.io/providers/gitlabhq/gitlab",
+    "owner": "gitlabhq",
+    "repo": "terraform-provider-gitlab",
+    "rev": "v16.3.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-G7+3vqxdi4i21o1hYj2GVvoCdcmFN3ue1i4fuepucsw="
+  },
+  "google": {
+    "hash": "sha256-MysIqOj2FTxZL1K/+Ai9/Fv69kIFGEmhWJpWxvsiTcc=",
+    "homepage": "https://registry.terraform.io/providers/hashicorp/google",
+    "owner": "hashicorp",
+    "proxyVendor": true,
+    "repo": "terraform-provider-google",
+    "rev": "v4.80.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-jf7BnPmCMTMS3+vCy5AVIO4/tFBDtLDItXn9sDZNLRM="
+  },
+  "google-beta": {
+    "hash": "sha256-xaSse89edfKWBM56oAE3r7IwJ7gdaArSw6flcFC7ZLk=",
+    "homepage": "https://registry.terraform.io/providers/hashicorp/google-beta",
+    "owner": "hashicorp",
+    "proxyVendor": true,
+    "repo": "terraform-provider-google-beta",
+    "rev": "v4.80.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-jf7BnPmCMTMS3+vCy5AVIO4/tFBDtLDItXn9sDZNLRM="
+  },
+  "googleworkspace": {
+    "hash": "sha256-dedYnsKHizxJZibuvJOMbJoux0W6zgKaK5fxIofKqCY=",
+    "homepage": "https://registry.terraform.io/providers/hashicorp/googleworkspace",
+    "owner": "hashicorp",
+    "repo": "terraform-provider-googleworkspace",
+    "rev": "v0.7.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-fqVBnAivVekV+4tpkl+E6eNA3wi8mhLevJRCs3W7L2g="
+  },
+  "grafana": {
+    "hash": "sha256-pgyyOLkMu7W4llDb4oY72ujZ26SiQqvufVGWVv7y3Sk=",
+    "homepage": "https://registry.terraform.io/providers/grafana/grafana",
+    "owner": "grafana",
+    "repo": "terraform-provider-grafana",
+    "rev": "v2.2.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-+I0nCbe/OK+9ax8PzLw+PCBHrNDTm96J1GITiNCQEfc="
+  },
+  "gridscale": {
+    "hash": "sha256-Xs3eWLwsHFTvuH0rUroB6lkzusjUiH3ajt6ila9v/9M=",
+    "homepage": "https://registry.terraform.io/providers/gridscale/gridscale",
+    "owner": "gridscale",
+    "repo": "terraform-provider-gridscale",
+    "rev": "v1.21.1",
+    "spdx": "MPL-2.0",
+    "vendorHash": null
+  },
+  "hcloud": {
+    "hash": "sha256-kuC4tm8ob9bg7iLcUaGEHMYh6XaZp4rQiVlnbo1Xzek=",
+    "homepage": "https://registry.terraform.io/providers/hetznercloud/hcloud",
+    "owner": "hetznercloud",
+    "repo": "terraform-provider-hcloud",
+    "rev": "v1.42.1",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-r8njRjQGYESeHuD8pF6rRUe1j2VVMwoDITFi2StC5bk="
+  },
+  "helm": {
+    "hash": "sha256-pgV1xXhg8WIyF4RhJwAenTI6eAmtINveO8zqrKzLajQ=",
+    "homepage": "https://registry.terraform.io/providers/hashicorp/helm",
+    "owner": "hashicorp",
+    "repo": "terraform-provider-helm",
+    "rev": "v2.11.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-a80+gjjoFOKI96pUMvTMyM90F5oCb1Ime8hPQcFedFE="
+  },
+  "heroku": {
+    "hash": "sha256-PexzolGXe0dy+6vGXVDTqtHGjF66DTtt4/GUyx78RMQ=",
+    "homepage": "https://registry.terraform.io/providers/heroku/heroku",
+    "owner": "heroku",
+    "repo": "terraform-provider-heroku",
+    "rev": "v5.2.6",
+    "spdx": null,
+    "vendorHash": null
+  },
+  "hetznerdns": {
+    "hash": "sha256-wmXZ6+5Ex3G2JUdw2is2VIo/X1X0V1Auw5KmYpGllug=",
+    "homepage": "https://registry.terraform.io/providers/timohirt/hetznerdns",
+    "owner": "timohirt",
+    "repo": "terraform-provider-hetznerdns",
+    "rev": "v2.2.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-Bat/S4e5vzT0/XOhJ9zCWLa4IE4owLC6ec1yvEh+c0Y="
+  },
+  "htpasswd": {
+    "hash": "sha256-3Az8iNoau+2KGkdDjR+QAfuEcEhKfRmZFb5f4kaFyoU=",
+    "homepage": "https://registry.terraform.io/providers/loafoe/htpasswd",
+    "owner": "loafoe",
+    "proxyVendor": true,
+    "repo": "terraform-provider-htpasswd",
+    "rev": "v1.0.4",
+    "spdx": "MIT",
+    "vendorHash": "sha256-+D8HxLRUSh7bCN6j+NSkPZTabvqknY7uJ9F5JxefomA="
+  },
+  "http": {
+    "hash": "sha256-zffR6NS3i+aWF89c5NzKvuqWe6q8OPbRONY5gjsrUWE=",
+    "homepage": "https://registry.terraform.io/providers/hashicorp/http",
+    "owner": "hashicorp",
+    "repo": "terraform-provider-http",
+    "rev": "v3.4.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-hxT9mpKifb63wlCUeUzgVo4UB2TnYZy9lXF4fmGYpc4="
+  },
+  "huaweicloud": {
+    "hash": "sha256-ogxzt57zD122xJv0qpHVyUzhHrH8U1RHfJihTLUcBbI=",
+    "homepage": "https://registry.terraform.io/providers/huaweicloud/huaweicloud",
+    "owner": "huaweicloud",
+    "repo": "terraform-provider-huaweicloud",
+    "rev": "v1.54.1",
+    "spdx": "MPL-2.0",
+    "vendorHash": null
+  },
+  "huaweicloudstack": {
+    "hash": "sha256-WSJDp+LFjVPquQVMgib/YZV35kktLH2vMCIZJWqakXs=",
+    "homepage": "https://registry.terraform.io/providers/huaweicloud/huaweicloudstack",
+    "owner": "huaweicloud",
+    "repo": "terraform-provider-huaweicloudstack",
+    "rev": "v1.3.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": null
+  },
+  "hydra": {
+    "hash": "sha256-A9BemEPLhvYzhksvYRfmhQXY3EEdTxQcmjE9+2+BKqg=",
+    "homepage": "https://registry.terraform.io/providers/DeterminateSystems/hydra",
+    "owner": "DeterminateSystems",
+    "repo": "terraform-provider-hydra",
+    "rev": "v0.1.2",
+    "spdx": "MPL-2.0",
+    "vendorHash": null
+  },
+  "ibm": {
+    "hash": "sha256-AGAr1O6gzkEG3MQ/AQZarzYnhMK2yilyf9rtKDOwKsM=",
+    "homepage": "https://registry.terraform.io/providers/IBM-Cloud/ibm",
+    "owner": "IBM-Cloud",
+    "repo": "terraform-provider-ibm",
+    "rev": "v1.56.2",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-uUVU+2mXyhWq653ig8YlsRyqcQBHO9rrRJQwSHovQiM="
+  },
+  "icinga2": {
+    "hash": "sha256-Y/Oq0aTzP+oSKPhHiHY9Leal4HJJm7TNDpcdqkUsCmk=",
+    "homepage": "https://registry.terraform.io/providers/Icinga/icinga2",
+    "owner": "Icinga",
+    "repo": "terraform-provider-icinga2",
+    "rev": "v0.5.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": null
+  },
+  "infoblox": {
+    "hash": "sha256-655WGpwE1BmWRdikvHtxxX8u4kOZ9cSLCZDr6QGfn5Y=",
+    "homepage": "https://registry.terraform.io/providers/infobloxopen/infoblox",
+    "owner": "infobloxopen",
+    "repo": "terraform-provider-infoblox",
+    "rev": "v2.4.1",
+    "spdx": "MPL-2.0",
+    "vendorHash": null
+  },
+  "jetstream": {
+    "hash": "sha256-CFjgF02JZJ072mAMvRnObaq3t+SPeT2uXqkRvlRrG5c=",
+    "homepage": "https://registry.terraform.io/providers/nats-io/jetstream",
+    "owner": "nats-io",
+    "repo": "terraform-provider-jetstream",
+    "rev": "v0.0.35",
+    "spdx": "Apache-2.0",
+    "vendorHash": "sha256-OMDMpL9ox6tI9tkoSU0oVuFzRObmUGgGQy6RtsNbyIg="
+  },
+  "kafka": {
+    "hash": "sha256-cWFPuKU7CQU8TYy125N88saBGPkrGa+7mKLi3TlnM2I=",
+    "homepage": "https://registry.terraform.io/providers/Mongey/kafka",
+    "owner": "Mongey",
+    "repo": "terraform-provider-kafka",
+    "rev": "v0.5.4",
+    "spdx": "MIT",
+    "vendorHash": "sha256-gWomOX/NaYdcqspquqpRjqGnzLRY3iIUJALACf78TV8="
+  },
+  "kafka-connect": {
+    "hash": "sha256-PiSVfzNPEXAgONb/eaVAN4yPudn5glcHL0BLqE5PWsw=",
+    "homepage": "https://registry.terraform.io/providers/Mongey/kafka-connect",
+    "owner": "Mongey",
+    "repo": "terraform-provider-kafka-connect",
+    "rev": "v0.3.0",
+    "spdx": "MIT",
+    "vendorHash": "sha256-cLp8w0UcO9Hork/GTLOGCcSvfaYEIKl5so3/0ELm79Y="
+  },
+  "keycloak": {
+    "hash": "sha256-itnXalLx5Bku7sxM5wKJs2vCvDeJnhR1bQ55ye1tpKs=",
+    "homepage": "https://registry.terraform.io/providers/mrparkers/keycloak",
+    "owner": "mrparkers",
+    "repo": "terraform-provider-keycloak",
+    "rev": "v4.3.1",
+    "spdx": "MIT",
+    "vendorHash": "sha256-GhmawLENmRuG5ZbXEZAw8pYmHn2SN2ONzfSIVEyN4U4="
+  },
+  "kubectl": {
+    "hash": "sha256-UkUwWi7Z9cSMyZakD6JxMl+qdczAYfZQgwroCUjFIUM=",
+    "homepage": "https://registry.terraform.io/providers/gavinbunney/kubectl",
+    "owner": "gavinbunney",
+    "repo": "terraform-provider-kubectl",
+    "rev": "v1.14.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-lXQHo66b9X0jZhoF+5Ix5qewQGyI82VPJ7gGzc2CHao="
+  },
+  "kubernetes": {
+    "hash": "sha256-aPplKT6L9Lmp4St6DLtHywiunqLaABEB9urbtSfK8Ec=",
+    "homepage": "https://registry.terraform.io/providers/hashicorp/kubernetes",
+    "owner": "hashicorp",
+    "repo": "terraform-provider-kubernetes",
+    "rev": "v2.23.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-9AmfvoEf7E6lAblPIWizElng5GQJG/hQ5o6Mo3AN+EA="
+  },
+  "launchdarkly": {
+    "hash": "sha256-sIu+3Vu99wxcA+fdYMXRMZzK7RpUlV37136wyn5H4WQ=",
+    "homepage": "https://registry.terraform.io/providers/launchdarkly/launchdarkly",
+    "owner": "launchdarkly",
+    "repo": "terraform-provider-launchdarkly",
+    "rev": "v2.15.1",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-I+9hfKWBbclXXpthQc9LAHhZ7MYr/8I89mLeIVeae+Q="
+  },
+  "libvirt": {
+    "hash": "sha256-VO9fbRLz7mDYT8WORodnN4l3II2j+TdpV8cZ9M+NjTM=",
+    "homepage": "https://registry.terraform.io/providers/dmacvicar/libvirt",
+    "owner": "dmacvicar",
+    "repo": "terraform-provider-libvirt",
+    "rev": "v0.7.1",
+    "spdx": "Apache-2.0",
+    "vendorHash": "sha256-4jAJf2FC83NdH4t1l7EA26yQ0pqteWmTIyrZDJdi7fg="
+  },
+  "linode": {
+    "hash": "sha256-rGInk/2GCwd+pNnL3+009xuqhpR4kr7u8NYho1XRtqs=",
+    "homepage": "https://registry.terraform.io/providers/linode/linode",
+    "owner": "linode",
+    "repo": "terraform-provider-linode",
+    "rev": "v2.7.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-KlzQ336zOsMUsCX8eanypXP32LxP+iTJDBvQdeWSv2k="
+  },
+  "linuxbox": {
+    "hash": "sha256-MzasMVtXO7ZeZ+qEx2Z+7881fOIA0SFzSvXVHeEROtg=",
+    "homepage": "https://registry.terraform.io/providers/numtide/linuxbox",
+    "owner": "numtide",
+    "repo": "terraform-provider-linuxbox",
+    "rev": "v0.4.3",
+    "spdx": "BSD-3-Clause",
+    "vendorHash": "sha256-Jlg3a91pOhMC5SALzL9onajZUZ2H9mXfU5CKvotbCbw="
+  },
+  "local": {
+    "hash": "sha256-LN9mYtFNPPlG3Wdz0ggS57zYMO2chf6JipRmn+OKCnw=",
+    "homepage": "https://registry.terraform.io/providers/hashicorp/local",
+    "owner": "hashicorp",
+    "repo": "terraform-provider-local",
+    "rev": "v2.4.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-ZjS40Xc8y2UBPn4rX3EgRoSapRvMEeVMGZE6z9tpsAQ="
+  },
+  "lxd": {
+    "hash": "sha256-0/nIdfCsmPaUkGkSkmWWioc6RZGTb0XWtvprjuDg2gU=",
+    "homepage": "https://registry.terraform.io/providers/terraform-lxd/lxd",
+    "owner": "terraform-lxd",
+    "repo": "terraform-provider-lxd",
+    "rev": "v1.10.2",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-DMOyP8BX1502a+Hd7rwhpV2/nT0ECFKmKDPtWE6o0IM="
+  },
+  "mailgun": {
+    "hash": "sha256-r1E2Y5JRu77T29ebUNTXUEypnrsfYYbBhvpKZGt5T9w=",
+    "homepage": "https://registry.terraform.io/providers/wgebis/mailgun",
+    "owner": "wgebis",
+    "repo": "terraform-provider-mailgun",
+    "rev": "v0.7.4",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-yUXxq8NTOv8ZmWp0WiIID2cRU6AZiItIs99uGZpt9dc="
+  },
+  "matchbox": {
+    "hash": "sha256-vWhdStfwReeD1PHTihBoj4GoKnP85nzNzIV/Tjfcz1M=",
+    "homepage": "https://registry.terraform.io/providers/poseidon/matchbox",
+    "owner": "poseidon",
+    "repo": "terraform-provider-matchbox",
+    "rev": "v0.5.2",
+    "spdx": "Apache-2.0",
+    "vendorHash": "sha256-coARdDQVs38dVdUH/fsoGVlwh3wYr3aTxKp/FpUzhis="
+  },
+  "metal": {
+    "hash": "sha256-1HTSDVMk2VhoYRLInrBK3bDuYU0SwyhBV1p5A2tlU/I=",
+    "homepage": "https://registry.terraform.io/providers/equinix/metal",
+    "owner": "equinix",
+    "repo": "terraform-provider-metal",
+    "rev": "v3.3.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-QxbZv6YMa5/I4bTeQBNdmG3EKtLEmstnH7HMiZzFJrI="
+  },
+  "minio": {
+    "hash": "sha256-skwM0rqhsqQaut0Vuh5Baf8bWzsLOFCjUDk9w2mgB1E=",
+    "homepage": "https://registry.terraform.io/providers/aminueza/minio",
+    "owner": "aminueza",
+    "repo": "terraform-provider-minio",
+    "rev": "v1.17.2",
+    "spdx": "Apache-2.0",
+    "vendorHash": "sha256-4axdVO1VujG9qXtuNJHQqhANjciHIACMjuneqCj2omc="
+  },
+  "mongodbatlas": {
+    "hash": "sha256-xFVCYeEcdQ/w+s99Ykd10liASIDJaA/eTfnMGT2hybU=",
+    "homepage": "https://registry.terraform.io/providers/mongodb/mongodbatlas",
+    "owner": "mongodb",
+    "repo": "terraform-provider-mongodbatlas",
+    "rev": "v1.11.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-Ae3y/lwIYFi6p5gCBVgo1GuCu218JB3zKljexETWu0s="
+  },
+  "namecheap": {
+    "hash": "sha256-cms8YUL+SjTeYyIOQibksi8ZHEBYq2JlgTEpOO1uMZE=",
+    "homepage": "https://registry.terraform.io/providers/namecheap/namecheap",
+    "owner": "namecheap",
+    "repo": "terraform-provider-namecheap",
+    "rev": "v2.1.0",
+    "spdx": "Apache-2.0",
+    "vendorHash": null
+  },
+  "netlify": {
+    "hash": "sha256-7U+hHN/6GqcbI1gX7L01YqVjlUgvdfhgpXvLF2lwbkA=",
+    "homepage": "https://registry.terraform.io/providers/AegirHealth/netlify",
+    "owner": "AegirHealth",
+    "repo": "terraform-provider-netlify",
+    "rev": "v0.6.12",
+    "spdx": "MPL-2.0",
+    "vendorHash": null
+  },
+  "newrelic": {
+    "hash": "sha256-tbXRo7VNwjidyg/KcnwqmrxbnplMsUkCQAAsQb0WxSE=",
+    "homepage": "https://registry.terraform.io/providers/newrelic/newrelic",
+    "owner": "newrelic",
+    "repo": "terraform-provider-newrelic",
+    "rev": "v3.26.1",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-BWCL84bDsfrcM9Bkc3G6r0RQ1YnonH1D9bDSywTcigw="
+  },
+  "nomad": {
+    "hash": "sha256-urxTfyBv/vuX3Xowca625aNEsU4sxkmd24tis2YjR3Y=",
+    "homepage": "https://registry.terraform.io/providers/hashicorp/nomad",
+    "owner": "hashicorp",
+    "repo": "terraform-provider-nomad",
+    "rev": "v2.0.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-L8BpkzTs5qcr31Nho66xzlNMVg2SqfZbj9pPAZrNuqA="
+  },
+  "ns1": {
+    "hash": "sha256-faxvq99kkJS0rxNflmIhSDCO/VAVvPsIGV4MTgyRf+Y=",
+    "homepage": "https://registry.terraform.io/providers/ns1-terraform/ns1",
+    "owner": "ns1-terraform",
+    "repo": "terraform-provider-ns1",
+    "rev": "v2.0.5",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-FLQhshuqIcMeqrW6h68pXzPaY0VqRXhfL0YMpHyKfkY="
+  },
+  "null": {
+    "hash": "sha256-ExXDbAXMVCTZBlYmi4kD/7JFB1fCFAoPL637+1N6rEI=",
+    "homepage": "https://registry.terraform.io/providers/hashicorp/null",
+    "owner": "hashicorp",
+    "repo": "terraform-provider-null",
+    "rev": "v3.2.1",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-vXyE0/tXzFHJPNq8MZ+NZItDWS3K7ZhtY23hGjtqRh8="
+  },
+  "nutanix": {
+    "deleteVendor": true,
+    "hash": "sha256-p7ryvJEoMxfJWKNkUlpZL6lgJt5I93eHRh5qev5RGJ4=",
+    "homepage": "https://registry.terraform.io/providers/nutanix/nutanix",
+    "owner": "nutanix",
+    "repo": "terraform-provider-nutanix",
+    "rev": "v1.9.2",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-LRIfxQGwG988HE5fftGl6JmBG7tTknvmgpm4Fu1NbWI="
+  },
+  "oci": {
+    "hash": "sha256-xZHk/rkq2H4Bkr+ugTHrkb4Al2ky0zOWEQmZtiXV48s=",
+    "homepage": "https://registry.terraform.io/providers/oracle/oci",
+    "owner": "oracle",
+    "repo": "terraform-provider-oci",
+    "rev": "v5.11.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": null
+  },
+  "okta": {
+    "hash": "sha256-Y3sLtuN55vgO35aWM6c2zIChkF5Q+8zlvH5NOJF/tRU=",
+    "homepage": "https://registry.terraform.io/providers/okta/okta",
+    "owner": "okta",
+    "repo": "terraform-provider-okta",
+    "rev": "v4.3.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-2w/cdB8ySt+nimU4KXSpWjWMkeX7rEmhYHBJWQPJ5PI="
+  },
+  "oktaasa": {
+    "hash": "sha256-2LhxgowqKvDDDOwdznusL52p2DKP+UiXALHcs9ZQd0U=",
+    "homepage": "https://registry.terraform.io/providers/oktadeveloper/oktaasa",
+    "owner": "oktadeveloper",
+    "repo": "terraform-provider-oktaasa",
+    "rev": "v1.0.1",
+    "spdx": "MPL-2.0",
+    "vendorHash": null
+  },
+  "opennebula": {
+    "hash": "sha256-0XeGaHyN+u5QEU9RUr51FVi13HNmjBN6mnFwfilPw5s=",
+    "homepage": "https://registry.terraform.io/providers/OpenNebula/opennebula",
+    "owner": "OpenNebula",
+    "repo": "terraform-provider-opennebula",
+    "rev": "v1.3.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-W7UGOtyFsIMXPqFDnde2XlzU7klR7Fs00mSuJ9ID20A="
+  },
+  "openstack": {
+    "hash": "sha256-Iauu0sQf8wq4Ev8JflxrthXYe99YDnt5ZzWQ/q3Bjfw=",
+    "homepage": "https://registry.terraform.io/providers/terraform-provider-openstack/openstack",
+    "owner": "terraform-provider-openstack",
+    "repo": "terraform-provider-openstack",
+    "rev": "v1.52.1",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-NnB8deqIeiB66Kba9LWT62fyI23HL57VcsTickoTRwI="
+  },
+  "opentelekomcloud": {
+    "hash": "sha256-dNA6rNzbXFycKRKwJl+/HqUKCKn678KqthIRhmOe72M=",
+    "homepage": "https://registry.terraform.io/providers/opentelekomcloud/opentelekomcloud",
+    "owner": "opentelekomcloud",
+    "repo": "terraform-provider-opentelekomcloud",
+    "rev": "v1.35.6",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-PHtTE3puaeIKXr9mf2bDhhHI51L4XVfOPhL7c5AvlBA="
+  },
+  "opsgenie": {
+    "hash": "sha256-Jz3JMq39C2NvA0kvJdjjkOHNvZOMuw4Fq2+nyVHRIL4=",
+    "homepage": "https://registry.terraform.io/providers/opsgenie/opsgenie",
+    "owner": "opsgenie",
+    "repo": "terraform-provider-opsgenie",
+    "rev": "v0.6.29",
+    "spdx": "MPL-2.0",
+    "vendorHash": null
+  },
+  "ovh": {
+    "hash": "sha256-U1gjD3NUm3/KqnbjgM91qe5gy/x/9Mn3Q4VW2XXBRw4=",
+    "homepage": "https://registry.terraform.io/providers/ovh/ovh",
+    "owner": "ovh",
+    "repo": "terraform-provider-ovh",
+    "rev": "v0.33.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": null
+  },
+  "pagerduty": {
+    "hash": "sha256-wVXGDWpKVujS5FfvDM7quCuXRFP2MBlJra7qTyFJgDM=",
+    "homepage": "https://registry.terraform.io/providers/PagerDuty/pagerduty",
+    "owner": "PagerDuty",
+    "repo": "terraform-provider-pagerduty",
+    "rev": "v2.16.2",
+    "spdx": "MPL-2.0",
+    "vendorHash": null
+  },
+  "pass": {
+    "hash": "sha256-hFgNWw6ZmATo0bFZvJL9z/lJF506KsBewigGoFj67sM=",
+    "homepage": "https://registry.terraform.io/providers/camptocamp/pass",
+    "owner": "camptocamp",
+    "repo": "terraform-provider-pass",
+    "rev": "v2.0.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-sV6JPKzpA1+uoUBmdWpUSk70cl9ofQqr7USbK+4RVDs="
+  },
+  "postgresql": {
+    "hash": "sha256-8ihu/qnPknrHeZjZ0MNcUL3qjH/gvEsOnZKDI93Hdh4=",
+    "homepage": "https://registry.terraform.io/providers/cyrilgdn/postgresql",
+    "owner": "cyrilgdn",
+    "repo": "terraform-provider-postgresql",
+    "rev": "v1.20.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-zsjx61qUV7nB26ghpl3T2AcXVMHblUQ0JNQ0xUnO+6Y="
+  },
+  "powerdns": {
+    "hash": "sha256-NtJs2oNJbjUYNFsbrfo2RYhqOlKA15GJt9gi1HuTIw0=",
+    "homepage": "https://registry.terraform.io/providers/pan-net/powerdns",
+    "owner": "pan-net",
+    "repo": "terraform-provider-powerdns",
+    "rev": "v1.5.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": null
+  },
+  "rabbitmq": {
+    "hash": "sha256-ArteHTNNUxgiBJamnR1bJFDrvNnqjbJ6D3mj1XlpVUA=",
+    "homepage": "https://registry.terraform.io/providers/cyrilgdn/rabbitmq",
+    "owner": "cyrilgdn",
+    "repo": "terraform-provider-rabbitmq",
+    "rev": "v1.8.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-j+3qtGlueKZgf0LuNps4Wc9G3EmpSgl8ZNSLqslyizI="
+  },
+  "rancher2": {
+    "hash": "sha256-thojEtfA8vn5fMTBuOClAKt3rlKs2XK7/RRMYSHAoMM=",
+    "homepage": "https://registry.terraform.io/providers/rancher/rancher2",
+    "owner": "rancher",
+    "repo": "terraform-provider-rancher2",
+    "rev": "v3.1.1",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-2uNawlNPmByjoIjufl3yMfo2MdV+MsXqSRVEWursHKc="
+  },
+  "random": {
+    "hash": "sha256-IsXKdS3B5kWY5LlNKM0fYjp2uM96ngi6vZ9F46MmfcA=",
+    "homepage": "https://registry.terraform.io/providers/hashicorp/random",
+    "owner": "hashicorp",
+    "repo": "terraform-provider-random",
+    "rev": "v3.5.1",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-ScY/hAb14SzEGhKLpnJ8HrWOccwc2l0XW6t+f62LyWM="
+  },
+  "remote": {
+    "hash": "sha256-x0mTouv+hRGznyn2XxohWzPb0vjJvJf6kDlWrLJ/JvA=",
+    "homepage": "https://registry.terraform.io/providers/tenstad/remote",
+    "owner": "tenstad",
+    "repo": "terraform-provider-remote",
+    "rev": "v0.1.2",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-dMT3PEYNu9NxwLmY5SHa79yeVSB8Pi3UBEHiGvGGVmU="
+  },
+  "rundeck": {
+    "hash": "sha256-GkX5p6hV66G45JG3aJmYD5e2LQvf6kmfa6fQK10tc68=",
+    "homepage": "https://registry.terraform.io/providers/rundeck/rundeck",
+    "owner": "rundeck",
+    "repo": "terraform-provider-rundeck",
+    "rev": "v0.4.3",
+    "spdx": "MPL-2.0",
+    "vendorHash": null
+  },
+  "scaleway": {
+    "hash": "sha256-YARTRjmrweBJAa5PAWZ/2yayBa9Q09vp1AgVJNxB53Q=",
+    "homepage": "https://registry.terraform.io/providers/scaleway/scaleway",
+    "owner": "scaleway",
+    "repo": "terraform-provider-scaleway",
+    "rev": "v2.27.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-TiR7t6RaaLT+1gqgdq/Dsegft3dqv7xwFAeeT6pNRbM="
+  },
+  "secret": {
+    "hash": "sha256-MmAnA/4SAPqLY/gYcJSTnEttQTsDd2kEdkQjQj6Bb+A=",
+    "homepage": "https://registry.terraform.io/providers/numtide/secret",
+    "owner": "numtide",
+    "repo": "terraform-provider-secret",
+    "rev": "v1.2.1",
+    "spdx": "MPL-2.0",
+    "vendorHash": null
+  },
+  "selectel": {
+    "hash": "sha256-oA//8+TedHk1zB4xj47kUNVEYXaMhEGas72xjU2uVHk=",
+    "homepage": "https://registry.terraform.io/providers/selectel/selectel",
+    "owner": "selectel",
+    "repo": "terraform-provider-selectel",
+    "rev": "v3.11.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-3oVyxtl/d9coyNDk2Cj3WnkVUAsW56YZPXhUXL3DJGk="
+  },
+  "sentry": {
+    "hash": "sha256-L/aZ4/xCVZk3C6AGglzCj5T9XnoI/uiLbRASNAHwcro=",
+    "homepage": "https://registry.terraform.io/providers/jianyuan/sentry",
+    "owner": "jianyuan",
+    "repo": "terraform-provider-sentry",
+    "rev": "v0.11.2",
+    "spdx": "MIT",
+    "vendorHash": "sha256-5XAetSjMtRffP/xExRUXfclDutEFV0VL3drusaB4rnM="
+  },
+  "shell": {
+    "hash": "sha256-LTWEdXxi13sC09jh+EFZ6pOi1mzuvgBz5vceIkNE/JY=",
+    "homepage": "https://registry.terraform.io/providers/scottwinkler/shell",
+    "owner": "scottwinkler",
+    "repo": "terraform-provider-shell",
+    "rev": "v1.7.10",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-MIO0VHofPtKPtynbvjvEukMNr5NXHgk7BqwIhbc9+u0="
+  },
+  "signalfx": {
+    "hash": "sha256-ILh5mdTyzU0AfJzyGH9JK1QsOER0BtKn9vXyRaGeb8g=",
+    "homepage": "https://registry.terraform.io/providers/splunk-terraform/signalfx",
+    "owner": "splunk-terraform",
+    "repo": "terraform-provider-signalfx",
+    "rev": "v9.0.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-PQU4VC5wHcB70UkZaRT8jtz+qOAONU2SxtRrTmml9vY="
+  },
+  "skytap": {
+    "hash": "sha256-JII4czazo6Di2sad1uFHMKDO2gWgZlQE8l/+IRYHQHU=",
+    "homepage": "https://registry.terraform.io/providers/skytap/skytap",
+    "owner": "skytap",
+    "repo": "terraform-provider-skytap",
+    "rev": "v0.15.1",
+    "spdx": "MPL-2.0",
+    "vendorHash": null
+  },
+  "snowflake": {
+    "hash": "sha256-v4rpdOsEYy0coZUq7frvF+IVLhI3Vz8Q6fk4koFg9a4=",
+    "homepage": "https://registry.terraform.io/providers/Snowflake-Labs/snowflake",
+    "owner": "Snowflake-Labs",
+    "repo": "terraform-provider-snowflake",
+    "rev": "v0.70.0",
+    "spdx": "MIT",
+    "vendorHash": "sha256-7jB1p6+EVUp03Bw7AyL8jH/n1tslkPmK7FIqFbde1n4="
+  },
+  "sops": {
+    "hash": "sha256-D1Yzs8hDimMP9y8ZRbizEhic3vGtLcZjOVSuSMUAqPk=",
+    "homepage": "https://registry.terraform.io/providers/carlpett/sops",
+    "owner": "carlpett",
+    "repo": "terraform-provider-sops",
+    "rev": "v0.7.2",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-NO1r/EWLgH1Gogru+qPeZ4sW7FuDENxzNnpLSKstnE8="
+  },
+  "spotinst": {
+    "hash": "sha256-PzIQ8hYCoZOdNoFvHGBGG/3ROIBl6micozonoMojG0Q=",
+    "homepage": "https://registry.terraform.io/providers/spotinst/spotinst",
+    "owner": "spotinst",
+    "repo": "terraform-provider-spotinst",
+    "rev": "v1.134.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-ptMO8xtL5STVapeZbie+6UHR4AcLbHkzXTz7sPfbsV4="
+  },
+  "stackpath": {
+    "hash": "sha256-7KQUddq+M35WYyAIAL8sxBjAaXFcsczBRO1R5HURUZg=",
+    "homepage": "https://registry.terraform.io/providers/stackpath/stackpath",
+    "owner": "stackpath",
+    "repo": "terraform-provider-stackpath",
+    "rev": "v1.5.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-OGYiynCwbJU2KisS7Y6xmLuBKOtQvh3MWPrvBk/x95U="
+  },
+  "statuscake": {
+    "hash": "sha256-yky6aCRK1I9NOEWcz6n6uvU+6HBJcLPQr1LLVO+34jE=",
+    "homepage": "https://registry.terraform.io/providers/StatusCakeDev/statuscake",
+    "owner": "StatusCakeDev",
+    "repo": "terraform-provider-statuscake",
+    "rev": "v2.1.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-fgvNdBwkz+YHOrLRQSe1D+3/VUhttKkJGzV6cg57g8s="
+  },
+  "sumologic": {
+    "hash": "sha256-R2t754J438nDkifE0zEtYO5q6g6N4CVQdZn9DoBiuVQ=",
+    "homepage": "https://registry.terraform.io/providers/SumoLogic/sumologic",
+    "owner": "SumoLogic",
+    "repo": "terraform-provider-sumologic",
+    "rev": "v2.25.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-iNBM4Y24vDGPKyb5cppSogk145F0/pAFmOzEeiWgfLI="
+  },
+  "tailscale": {
+    "hash": "sha256-kQARVkZM0lZtZNTftQ5JXHtVoeCiChNmq9t9yRXvK0g=",
+    "homepage": "https://registry.terraform.io/providers/tailscale/tailscale",
+    "owner": "tailscale",
+    "repo": "terraform-provider-tailscale",
+    "rev": "v0.13.9",
+    "spdx": "MIT",
+    "vendorHash": "sha256-7qDPVKcBQuJQlya6UHjo5YPLgKl0qz1NlU2TuEf8T+0="
+  },
+  "talos": {
+    "hash": "sha256-aP5hiR+b31+QjVWvNPxYkzijTUnFGpgR3f5XuN1Pzx8=",
+    "homepage": "https://registry.terraform.io/providers/siderolabs/talos",
+    "owner": "siderolabs",
+    "repo": "terraform-provider-talos",
+    "rev": "v0.3.2",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-0HRhwUGDE4y7UFlXyD0w8zl4NV5436L4SRhrb8vQGyc="
+  },
+  "tencentcloud": {
+    "hash": "sha256-OA/GnrdOv9gbnGESdMdw7sc9kRcWI4A6A79ZLOQzyJU=",
+    "homepage": "https://registry.terraform.io/providers/tencentcloudstack/tencentcloud",
+    "owner": "tencentcloudstack",
+    "repo": "terraform-provider-tencentcloud",
+    "rev": "v1.81.22",
+    "spdx": "MPL-2.0",
+    "vendorHash": null
+  },
+  "tfe": {
+    "hash": "sha256-KYJ37/lr/ZC3CSbWEYemM9pzzWDAlfNQS0KP68VqPso=",
+    "homepage": "https://registry.terraform.io/providers/hashicorp/tfe",
+    "owner": "hashicorp",
+    "repo": "terraform-provider-tfe",
+    "rev": "v0.48.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-Q66BRTiZ/Yuk7+fQWhqM8WCCRNVnfu6qx4E9jr+goXI="
+  },
+  "thunder": {
+    "hash": "sha256-CZjoWme/f1F5JzYlntEKL5ijRF/qR3h4ZTiv9vwzbJI=",
+    "homepage": "https://registry.terraform.io/providers/a10networks/thunder",
+    "owner": "a10networks",
+    "repo": "terraform-provider-thunder",
+    "rev": "v1.2.2",
+    "spdx": "BSD-2-Clause",
+    "vendorHash": null
+  },
+  "time": {
+    "hash": "sha256-FehWmIkL0o2pleafN/mlBa46cdFqCFUS+coOwFPdb9M=",
+    "homepage": "https://registry.terraform.io/providers/hashicorp/time",
+    "owner": "hashicorp",
+    "repo": "terraform-provider-time",
+    "rev": "v0.9.1",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-MLh/we8KNrDBy2BAMZ6B/gBe0p3xJ7l/imNzTHciJjs="
+  },
+  "tls": {
+    "hash": "sha256-DBOkfvT0+mlgaWiBHggZUKvHL8jLZjQjRi0xFZKgcoM=",
+    "homepage": "https://registry.terraform.io/providers/hashicorp/tls",
+    "owner": "hashicorp",
+    "repo": "terraform-provider-tls",
+    "rev": "v4.0.4",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-k7aW5ZD6pAtdT6tTXy8YaJlFS5WR5FzPd9eINgPBYJM="
+  },
+  "triton": {
+    "deleteVendor": true,
+    "hash": "sha256-NrXK1ic5F8fBC0lvq7GxlrZe9lMbHvNhodijsC/VG0o=",
+    "homepage": "https://registry.terraform.io/providers/joyent/triton",
+    "owner": "joyent",
+    "repo": "terraform-provider-triton",
+    "rev": "v0.8.2",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-UuLHaOEG6jmOAgfdNOtLyUimlAr3g6K8n3Ehu64sKqk="
+  },
+  "turbot": {
+    "hash": "sha256-oG6Mme9Q4T/IgQF1jheL0SaV3NDCEGHvw5fbXIcgwPE=",
+    "homepage": "https://registry.terraform.io/providers/turbot/turbot",
+    "owner": "turbot",
+    "repo": "terraform-provider-turbot",
+    "rev": "v1.10.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": null
+  },
+  "ucloud": {
+    "hash": "sha256-+xqt0y/DIx+h8L+73B00ou0Cy9f60sGijgw95N8eROk=",
+    "homepage": "https://registry.terraform.io/providers/ucloud/ucloud",
+    "owner": "ucloud",
+    "repo": "terraform-provider-ucloud",
+    "rev": "v1.37.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": null
+  },
+  "utils": {
+    "hash": "sha256-+11qnWZPtCyAjON5XZye9069332lKEpJdy504dYhOLw=",
+    "homepage": "https://registry.terraform.io/providers/cloudposse/utils",
+    "owner": "cloudposse",
+    "repo": "terraform-provider-utils",
+    "rev": "1.11.0",
+    "spdx": "Apache-2.0",
+    "vendorHash": "sha256-D7geLjmJoelbHolyS5IhnGNNl6kD8ZGtCRWcy+j2dxA="
+  },
+  "vault": {
+    "hash": "sha256-IPVD4VVC6jn3BWltqfCk2+GFSkQRNK7jkJ3/QmgBxqg=",
+    "homepage": "https://registry.terraform.io/providers/hashicorp/vault",
+    "owner": "hashicorp",
+    "proxyVendor": true,
+    "repo": "terraform-provider-vault",
+    "rev": "v3.20.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-xd2tsJ5k/8PCSegHqeyJ1ePFBS0ho8SD+4m4QyFMTL0="
+  },
+  "vcd": {
+    "hash": "sha256-ltdkB9PqmuCs5daRjcThVhy1wIoDW21yBiwtRo/pMss=",
+    "homepage": "https://registry.terraform.io/providers/vmware/vcd",
+    "owner": "vmware",
+    "repo": "terraform-provider-vcd",
+    "rev": "v3.10.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-p/wTnEr/+qe8S83x6EtfsnIMVUF1VWZVHOq0vLDbh60="
+  },
+  "venafi": {
+    "hash": "sha256-/5X/+BilaYwi1Vce7mIvVeHjTpVX/OuYquZ+2BGfxrs=",
+    "homepage": "https://registry.terraform.io/providers/Venafi/venafi",
+    "owner": "Venafi",
+    "repo": "terraform-provider-venafi",
+    "rev": "v0.16.1",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-smeySV1kReZyF9bRCunEr89IV219f9845wcHHI1zFz8="
+  },
+  "vpsadmin": {
+    "hash": "sha256-MFEerVGKros+9zubcjK8qUpYQveKuBgbfyai32Y0KLI=",
+    "homepage": "https://registry.terraform.io/providers/vpsfreecz/vpsadmin",
+    "owner": "vpsfreecz",
+    "repo": "terraform-provider-vpsadmin",
+    "rev": "v1.0.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-OzcDMLWwnBYIkBcL6U1t9oCNhZZokBUf2TONb+OfgPE="
+  },
+  "vra7": {
+    "hash": "sha256-J+lhKDl8CGpDgdfuv0uWd7yDNiwrWAzoXCxkEidqJH4=",
+    "homepage": "https://registry.terraform.io/providers/vmware/vra7",
+    "owner": "vmware",
+    "repo": "terraform-provider-vra7",
+    "rev": "v3.0.7",
+    "spdx": "MPL-2.0",
+    "vendorHash": null
+  },
+  "vsphere": {
+    "hash": "sha256-Tvc3+HVsrD2CgfRVqfcF7DtszI+s7HrIgP2wiImqOXo=",
+    "homepage": "https://registry.terraform.io/providers/hashicorp/vsphere",
+    "owner": "hashicorp",
+    "repo": "terraform-provider-vsphere",
+    "rev": "v2.4.2",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-MrDY1zx4aXKRGmhTPMLnIVBAJh+szdL6rH0m0amlYS8="
+  },
+  "vultr": {
+    "hash": "sha256-h9MQv4BTv9y4A6HSDE3dIV7aKwaIWRYy5EyE2T0mpG4=",
+    "homepage": "https://registry.terraform.io/providers/vultr/vultr",
+    "owner": "vultr",
+    "repo": "terraform-provider-vultr",
+    "rev": "v2.15.1",
+    "spdx": "MPL-2.0",
+    "vendorHash": null
+  },
+  "wavefront": {
+    "hash": "sha256-bBJZT5h/2ZFTKhFXMWj/xf+DAMGdUZw8E07PuIsMVpU=",
+    "homepage": "https://registry.terraform.io/providers/vmware/wavefront",
+    "owner": "vmware",
+    "repo": "terraform-provider-wavefront",
+    "rev": "v5.0.1",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-77pijBYzCQoaZgMRNRwZEAJVM51EMGezXXcrfn9ae1Q="
+  },
+  "yandex": {
+    "hash": "sha256-Y4bEbqUTxP1QDf1r8a3vtxV+RG3dqjHxHN9p/nB3qz8=",
+    "homepage": "https://registry.terraform.io/providers/yandex-cloud/yandex",
+    "owner": "yandex-cloud",
+    "repo": "terraform-provider-yandex",
+    "rev": "v0.97.0",
+    "spdx": "MPL-2.0",
+    "vendorHash": "sha256-1Sw4a9HFYt24Om5Bbbmx6JskhbMd4zTv6K6WOrQetpQ="
+  }
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/terraform-providers/update-all-providers b/nixpkgs/pkgs/applications/networking/cluster/terraform-providers/update-all-providers
new file mode 100755
index 000000000000..9c39282bc969
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/terraform-providers/update-all-providers
@@ -0,0 +1,25 @@
+#!/usr/bin/env nix-shell
+#! nix-shell -i bash -p jq
+# shellcheck shell=bash
+
+# Update all providers which have specified provider source address
+set -euo pipefail
+
+readarray -t providers < <(
+  jq -r 'to_entries
+  | map_values(.value + { alias: .key })
+  | .[]
+  | select(."homepage"?)
+  | .alias' providers.json
+)
+
+cat <<EOF
+Will update ${#providers[@]} providers:
+
+${providers[*]}
+
+EOF
+
+for provider in "${providers[@]}"; do
+  ./update-provider --no-spdx "$@" "${provider}"
+done
diff --git a/nixpkgs/pkgs/applications/networking/cluster/terraform-providers/update-provider b/nixpkgs/pkgs/applications/networking/cluster/terraform-providers/update-provider
new file mode 100755
index 000000000000..4d380a141b8f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/terraform-providers/update-provider
@@ -0,0 +1,164 @@
+#!/usr/bin/env nix-shell
+#! nix-shell -i bash -p coreutils curl git jq moreutils nix nurl
+# shellcheck shell=bash
+# vim: ft=sh
+#
+# Update a terraform provider to the latest version advertised at the
+# provider source address.
+#
+set -euo pipefail
+shopt -s inherit_errexit
+
+show_usage() {
+  cat <<DOC
+Usage: ./update-provider [--force] [--no-build] [<owner>/]<provider>
+
+Update a single provider in the providers.json inventory file.
+
+For example to update 'terraform-providers.aws' run:
+
+    ./update-provider aws
+
+If the provider is not in the list already, use the form '<owner>/<provider>'
+to add the provider to the list:
+
+    ./update-provider hetznercloud/hcloud
+
+Options:
+
+  * --force: Force the update even if the version matches.
+  * --no-build: Don't build provider
+DOC
+}
+
+build=1
+force=
+provider=
+spdx=1
+
+while [[ $# -gt 0 ]]; do
+  case "$1" in
+  -h | --help)
+    show_usage
+    exit
+    ;;
+  --force)
+    force=1
+    shift
+    ;;
+  --no-build)
+    build=0
+    shift
+    ;;
+  --no-spdx)
+    spdx=0
+    shift
+    ;;
+  *)
+    if [[ -n ${provider} ]]; then
+      echo "ERROR: provider name was passed two times: '${provider}' and '$1'"
+      echo "Use --help for more info"
+      exit 1
+    fi
+    provider=$1
+    shift
+    ;;
+  esac
+done
+
+if [[ -z ${provider} ]]; then
+  echo "ERROR: No providers specified!"
+  echo
+  show_usage
+  exit 1
+fi
+
+# Usage: read_attr <key>
+read_attr() {
+  jq -r ".\"${provider}\".\"$1\"" providers.json
+}
+
+# Usage: update_attr <key> <value>
+update_attr() {
+  if [[ $2 == "null" ]]; then
+    jq -S ".\"${provider}\".\"$1\" = null" providers.json | sponge providers.json
+  else
+    jq -S ".\"${provider}\".\"$1\" = \"$2\"" providers.json | sponge providers.json
+  fi
+}
+
+repo_root=$(git rev-parse --show-toplevel)
+
+generate_hash() {
+  nurl --expr "(import ${repo_root} {}).terraform-providers.${provider}.$1"
+}
+
+echo_provider() {
+  echo "== terraform-providers.${provider}: $* =="
+}
+
+pushd "$(dirname "$0")" >/dev/null
+
+if [[ ${provider} =~ ^[^/]+/[^/]+$ ]]; then
+  homepage="https://registry.terraform.io/providers/${provider}"
+  provider=$(basename "${provider}")
+  echo_provider "init"
+  update_attr homepage "${homepage}"
+  # create empty stings so nix-prefetch works
+  update_attr hash ""
+  update_attr vendorHash ""
+  update_attr spdx ""
+fi
+
+homepage="$(read_attr homepage)"
+
+registry_response=$(curl -s "${homepage//providers/v1/providers}")
+
+old_rev="$(read_attr rev)"
+rev="$(jq -r '.tag' <<<"${registry_response}")"
+if [[ ${force} != 1 ]]; then
+  if [[ ${old_rev} == "${rev}" ]]; then
+    echo_provider "already at version ${rev}"
+    exit
+  fi
+  if [[ ${rev//v/} =~ [[:alpha:]] ]]; then
+    echo_provider "not updating to unstable version ${rev}"
+    exit
+  fi
+fi
+echo_provider "updating from ${old_rev} to ${rev}"
+update_attr rev "${rev}"
+
+provider_source_url="$(jq -r '.source' <<<"${registry_response}")"
+
+org="$(echo "${provider_source_url}" | cut -d '/' -f 4)"
+update_attr owner "${org}"
+repo="$(echo "${provider_source_url}" | cut -d '/' -f 5)"
+update_attr repo "${repo}"
+
+if [[ ${spdx} == 1 ]]; then
+  old_spdx="$(read_attr spdx)"
+  if [[ ${old_spdx} != null ]]; then
+    spdx="$(curl -L -s ${GITHUB_TOKEN:+-u ":${GITHUB_TOKEN}"} "https://api.github.com/repos/${org}/${repo}/license" | jq -r '.license.spdx_id')"
+    update_attr spdx "${spdx}"
+  fi
+fi
+
+echo_provider "calculating hash"
+hash=$(generate_hash src)
+update_attr hash "${hash}"
+
+old_vendor_hash="$(read_attr vendorHash)"
+if [[ ${old_vendor_hash} != null ]]; then
+  echo_provider "calculating vendorHash"
+  vendorHash=$(generate_hash goModules)
+  update_attr vendorHash "${vendorHash}"
+fi
+
+# Check that the provider builds
+if [[ ${build} == 1 ]]; then
+  echo_provider "building"
+  nix-build --no-out-link "${repo_root}" -A "terraform-providers.${provider}"
+fi
+
+popd >/dev/null
diff --git a/nixpkgs/pkgs/applications/networking/cluster/terraform/default.nix b/nixpkgs/pkgs/applications/networking/cluster/terraform/default.nix
new file mode 100644
index 000000000000..a13dbfb54363
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/terraform/default.nix
@@ -0,0 +1,202 @@
+{ stdenv
+, lib
+, buildGoModule
+, fetchFromGitHub
+, makeWrapper
+, coreutils
+, runCommand
+, runtimeShell
+, writeText
+, terraform-providers
+, installShellFiles
+}:
+
+let
+  generic = { version, hash, vendorHash ? null, ... }@attrs:
+    let attrs' = builtins.removeAttrs attrs [ "version" "hash" "vendorHash" ];
+    in
+    buildGoModule ({
+      pname = "terraform";
+      inherit version vendorHash;
+
+      src = fetchFromGitHub {
+        owner = "hashicorp";
+        repo = "terraform";
+        rev = "v${version}";
+        inherit hash;
+      };
+
+      ldflags = [ "-s" "-w" ];
+
+      postConfigure = ''
+        # speakeasy hardcodes /bin/stty https://github.com/bgentry/speakeasy/issues/22
+        substituteInPlace vendor/github.com/bgentry/speakeasy/speakeasy_unix.go \
+          --replace "/bin/stty" "${coreutils}/bin/stty"
+      '';
+
+      nativeBuildInputs = [ installShellFiles ];
+
+      postInstall = ''
+        # https://github.com/posener/complete/blob/9a4745ac49b29530e07dc2581745a218b646b7a3/cmd/install/bash.go#L8
+        installShellCompletion --bash --name terraform <(echo complete -C terraform terraform)
+      '';
+
+      preCheck = ''
+        export HOME=$TMPDIR
+        export TF_SKIP_REMOTE_TESTS=1
+      '';
+
+      subPackages = [ "." ];
+
+      meta = with lib; {
+        description =
+          "Tool for building, changing, and versioning infrastructure";
+        homepage = "https://www.terraform.io/";
+        changelog = "https://github.com/hashicorp/terraform/blob/v${version}/CHANGELOG.md";
+        license = licenses.mpl20;
+        maintainers = with maintainers; [
+          Chili-Man
+          babariviere
+          kalbasit
+          amaxine
+          timstott
+          zimbatm
+          zowoq
+          techknowlogick
+          qjoly
+        ];
+        mainProgram = "terraform";
+      };
+    } // attrs');
+
+  pluggable = terraform:
+    let
+      withPlugins = plugins:
+        let
+          actualPlugins = plugins terraform.plugins;
+
+          # Wrap PATH of plugins propagatedBuildInputs, plugins may have runtime dependencies on external binaries
+          wrapperInputs = lib.unique (lib.flatten
+            (lib.catAttrs "propagatedBuildInputs"
+              (builtins.filter (x: x != null) actualPlugins)));
+
+          passthru = {
+            withPlugins = newplugins:
+              withPlugins (x: newplugins x ++ actualPlugins);
+            full = withPlugins (p: lib.filter lib.isDerivation (lib.attrValues p.actualProviders));
+
+            # Expose wrappers around the override* functions of the terraform
+            # derivation.
+            #
+            # Note that this does not behave as anyone would expect if plugins
+            # are specified. The overrides are not on the user-visible wrapper
+            # derivation but instead on the function application that eventually
+            # generates the wrapper. This means:
+            #
+            # 1. When using overrideAttrs, only `passthru` attributes will
+            #    become visible on the wrapper derivation. Other overrides that
+            #    modify the derivation *may* still have an effect, but it can be
+            #    difficult to follow.
+            #
+            # 2. Other overrides may work if they modify the terraform
+            #    derivation, or they may have no effect, depending on what
+            #    exactly is being changed.
+            #
+            # 3. Specifying overrides on the wrapper is unsupported.
+            #
+            # See nixpkgs#158620 for details.
+            overrideDerivation = f:
+              (pluggable (terraform.overrideDerivation f)).withPlugins plugins;
+            overrideAttrs = f:
+              (pluggable (terraform.overrideAttrs f)).withPlugins plugins;
+            override = x:
+              (pluggable (terraform.override x)).withPlugins plugins;
+          };
+          # Don't bother wrapping unless we actually have plugins, since the wrapper will stop automatic downloading
+          # of plugins, which might be counterintuitive if someone just wants a vanilla Terraform.
+        in
+        if actualPlugins == [ ] then
+          terraform.overrideAttrs
+            (orig: { passthru = orig.passthru // passthru; })
+        else
+          lib.appendToName "with-plugins" (stdenv.mkDerivation {
+            inherit (terraform) meta pname version;
+            nativeBuildInputs = [ makeWrapper ];
+
+            # Expose the passthru set with the override functions
+            # defined above, as well as any passthru values already
+            # set on `terraform` at this point (relevant in case a
+            # user overrides attributes).
+            passthru = terraform.passthru // passthru;
+
+            buildCommand = ''
+              # Create wrappers for terraform plugins because Terraform only
+              # walks inside of a tree of files.
+              for providerDir in ${toString actualPlugins}
+              do
+                for file in $(find $providerDir/libexec/terraform-providers -type f)
+                do
+                  relFile=''${file#$providerDir/}
+                  mkdir -p $out/$(dirname $relFile)
+                  cat <<WRAPPER > $out/$relFile
+              #!${runtimeShell}
+              exec "$file" "$@"
+              WRAPPER
+                  chmod +x $out/$relFile
+                done
+              done
+
+              # Create a wrapper for terraform to point it to the plugins dir.
+              mkdir -p $out/bin/
+              makeWrapper "${terraform}/bin/terraform" "$out/bin/terraform" \
+                --set NIX_TERRAFORM_PLUGIN_DIR $out/libexec/terraform-providers \
+                --prefix PATH : "${lib.makeBinPath wrapperInputs}"
+            '';
+          });
+    in
+    withPlugins (_: [ ]);
+
+  plugins = removeAttrs terraform-providers [
+    "override"
+    "overrideDerivation"
+    "recurseForDerivations"
+  ];
+in
+rec {
+  # Constructor for other terraform versions
+  mkTerraform = attrs: pluggable (generic attrs);
+
+  terraform_1 = mkTerraform {
+    version = "1.5.7";
+    hash = "sha256-pIhwJfa71/gW7lw/KRFBO4Q5Z5YMcTt3r9kD25k8cqM=";
+    vendorHash = "sha256-lQgWNMBf+ioNxzAV7tnTQSIS840XdI9fg9duuwoK+U4=";
+    patches = [ ./provider-path-0_15.patch ];
+    passthru = {
+      inherit plugins;
+      tests = { inherit terraform_plugins_test; };
+    };
+  };
+
+  # Tests that the plugins are being used. Terraform looks at the specific
+  # file pattern and if the plugin is not found it will try to download it
+  # from the Internet. With sandboxing enable this test will fail if that is
+  # the case.
+  terraform_plugins_test =
+    let
+      mainTf = writeText "main.tf" ''
+        resource "random_id" "test" {}
+      '';
+      terraform = terraform_1.withPlugins (p: [ p.random ]);
+      test =
+        runCommand "terraform-plugin-test" { buildInputs = [ terraform ]; } ''
+          set -e
+          # make it fail outside of sandbox
+          export HTTP_PROXY=http://127.0.0.1:0 HTTPS_PROXY=https://127.0.0.1:0
+          cp ${mainTf} main.tf
+          terraform init
+          touch $out
+        '';
+    in
+    test;
+
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/terraform/provider-path-0_15.patch b/nixpkgs/pkgs/applications/networking/cluster/terraform/provider-path-0_15.patch
new file mode 100644
index 000000000000..318df9ab69a8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/terraform/provider-path-0_15.patch
@@ -0,0 +1,23 @@
+diff -Naur terraform.old/internal/command/init.go terraform.new/internal/command/init.go
+--- terraform.old/internal/command/init.go
++++ terraform.new/internal/command/init.go
+@@ -3,6 +3,7 @@
+ import (
+ 	"context"
+ 	"fmt"
++	"os"
+ 	"log"
+ 	"strings"
+ 
+@@ -55,6 +56,11 @@
+ 
+ 	var diags tfdiags.Diagnostics
+ 
++	val, ok := os.LookupEnv("NIX_TERRAFORM_PLUGIN_DIR")
++	if ok {
++		flagPluginPath = append(flagPluginPath, val)
++	}
++
+ 	if len(flagPluginPath) > 0 {
+ 		c.pluginPath = flagPluginPath
+ 	}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/terraforming/Gemfile b/nixpkgs/pkgs/applications/networking/cluster/terraforming/Gemfile
new file mode 100644
index 000000000000..e6a4991e899d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/terraforming/Gemfile
@@ -0,0 +1,3 @@
+source "https://rubygems.org"
+
+gem 'terraforming'
diff --git a/nixpkgs/pkgs/applications/networking/cluster/terraforming/Gemfile.lock b/nixpkgs/pkgs/applications/networking/cluster/terraforming/Gemfile.lock
new file mode 100644
index 000000000000..ae2a40cc35b0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/terraforming/Gemfile.lock
@@ -0,0 +1,92 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    aws-eventstream (1.1.1)
+    aws-partitions (1.436.0)
+    aws-sdk-autoscaling (1.59.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-cloudwatch (1.50.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-core (3.113.0)
+      aws-eventstream (~> 1, >= 1.0.2)
+      aws-partitions (~> 1, >= 1.239.0)
+      aws-sigv4 (~> 1.1)
+      jmespath (~> 1.0)
+    aws-sdk-dynamodb (1.60.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-ec2 (1.230.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-efs (1.39.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-elasticache (1.54.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-elasticloadbalancing (1.31.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-elasticloadbalancingv2 (1.61.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-iam (1.51.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-kms (1.43.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-rds (1.117.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-redshift (1.58.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-route53 (1.48.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-s3 (1.93.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sdk-kms (~> 1)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-sns (1.39.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-sqs (1.38.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sigv4 (1.2.3)
+      aws-eventstream (~> 1, >= 1.0.2)
+    jmespath (1.4.0)
+    multi_json (1.12.2)
+    terraforming (0.18.0)
+      aws-sdk-autoscaling (~> 1)
+      aws-sdk-cloudwatch (~> 1)
+      aws-sdk-dynamodb (~> 1.18)
+      aws-sdk-ec2 (~> 1)
+      aws-sdk-efs (~> 1, >= 1.13.0)
+      aws-sdk-elasticache (~> 1)
+      aws-sdk-elasticloadbalancing (~> 1)
+      aws-sdk-elasticloadbalancingv2 (~> 1)
+      aws-sdk-iam (~> 1)
+      aws-sdk-kms (~> 1)
+      aws-sdk-rds (~> 1)
+      aws-sdk-redshift (~> 1)
+      aws-sdk-route53 (~> 1)
+      aws-sdk-s3 (~> 1)
+      aws-sdk-sns (~> 1)
+      aws-sdk-sqs (~> 1)
+      multi_json (~> 1.12.1)
+      thor
+    thor (1.1.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  terraforming
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/applications/networking/cluster/terraforming/default.nix b/nixpkgs/pkgs/applications/networking/cluster/terraforming/default.nix
new file mode 100644
index 000000000000..85d522257cde
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/terraforming/default.nix
@@ -0,0 +1,20 @@
+{ lib, bundlerApp, bundlerUpdateScript, ruby }:
+
+bundlerApp rec {
+  inherit ruby;
+
+  pname = "terraforming";
+  gemdir = ./.;
+  exes = [ "terraforming" ];
+
+  passthru.updateScript = bundlerUpdateScript "terraforming";
+
+  meta = with lib; {
+    inherit (ruby.meta) platforms;
+
+    description = "Export existing AWS resources to Terraform style (tf, tfstate)";
+    homepage    = "https://github.com/dtan4/terraforming";
+    license     = with licenses; mit;
+    maintainers = with maintainers; [ kalbasit ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/terraforming/gemset.nix b/nixpkgs/pkgs/applications/networking/cluster/terraforming/gemset.nix
new file mode 100644
index 000000000000..9882efc29e80
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/terraforming/gemset.nix
@@ -0,0 +1,261 @@
+{
+  aws-eventstream = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jfki5ikfr8ln5cdgv4iv1643kax0bjpp29jh78chzy713274jh3";
+      type = "gem";
+    };
+    version = "1.1.1";
+  };
+  aws-partitions = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gn09cafg2n6gdc3ja80r3xjllly05r0m7x3w3b3rywir6k6ai4f";
+      type = "gem";
+    };
+    version = "1.436.0";
+  };
+  aws-sdk-autoscaling = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0br6hfi2i5rri8ivamkmnx00p640s24pqmp8s67sm5asvdfzx4vr";
+      type = "gem";
+    };
+    version = "1.59.0";
+  };
+  aws-sdk-cloudwatch = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xga00dn925rfgz4p2zf734aaik00dqb9psll27lg5626jd6xr0c";
+      type = "gem";
+    };
+    version = "1.50.0";
+  };
+  aws-sdk-core = {
+    dependencies = ["aws-eventstream" "aws-partitions" "aws-sigv4" "jmespath"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1774xyfqf307qvh5npvf01948ayrviaadq576r4jxin6xvlg8j9z";
+      type = "gem";
+    };
+    version = "3.113.0";
+  };
+  aws-sdk-dynamodb = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1dfsmkzv9cziykzc56g9pwxmbdqjpykxka3fq07b6iarzh38j1i3";
+      type = "gem";
+    };
+    version = "1.60.0";
+  };
+  aws-sdk-ec2 = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1c7qqly2f94db3643xwjj9mcb34vilx11awbv40v2f8z7xisvvz3";
+      type = "gem";
+    };
+    version = "1.230.0";
+  };
+  aws-sdk-efs = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0kmpz86sxkm6nzcf80nd65902fy29hz8lvx1kjwl5idx07ls8pnd";
+      type = "gem";
+    };
+    version = "1.39.0";
+  };
+  aws-sdk-elasticache = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05kn2k437rnsf9nkwc1x5i2klrasjgyk1pj89f2gb0za86swjcza";
+      type = "gem";
+    };
+    version = "1.54.0";
+  };
+  aws-sdk-elasticloadbalancing = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j3px8dn2yxsnmy010kfkwa1a2flbdxachmly20f436ysi3ql3v3";
+      type = "gem";
+    };
+    version = "1.31.0";
+  };
+  aws-sdk-elasticloadbalancingv2 = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16hknbqv5s1im04dch9kdbc79x072613imdih62w48mvsf12c1mm";
+      type = "gem";
+    };
+    version = "1.61.0";
+  };
+  aws-sdk-iam = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0x2768blsy8lpib9pi2f2d67flabar3bq6chmbj07iqzpwvpz569";
+      type = "gem";
+    };
+    version = "1.51.0";
+  };
+  aws-sdk-kms = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01pd0f4srsa65zl4zq4014p9j5yrr2yy9h9ab17g3w9d0qqm2vsh";
+      type = "gem";
+    };
+    version = "1.43.0";
+  };
+  aws-sdk-rds = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hwxgcka6bmzdn5pazss0fv8xgbbgas4h2cwpzwhkjkwhh23dx6a";
+      type = "gem";
+    };
+    version = "1.117.0";
+  };
+  aws-sdk-redshift = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1sp186v00lj517hia6rsn28ph8rqknz9r79vbkbyh5fgrbh2j6bd";
+      type = "gem";
+    };
+    version = "1.58.0";
+  };
+  aws-sdk-route53 = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0p9g0scw9c6qancdwvaw3kkj3pywchy2vl3qz2rqpjncqvj04pn5";
+      type = "gem";
+    };
+    version = "1.48.0";
+  };
+  aws-sdk-s3 = {
+    dependencies = ["aws-sdk-core" "aws-sdk-kms" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0iy2f9z43pc6fgwmga2cz8nf9gy2pwcw4jib141vp8z8dhylqj94";
+      type = "gem";
+    };
+    version = "1.93.0";
+  };
+  aws-sdk-sns = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pmxi871r2nkl6by89vsy05ahk8dr6hmkny56fycrby6r9kri9q4";
+      type = "gem";
+    };
+    version = "1.39.0";
+  };
+  aws-sdk-sqs = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01m2l8y4q4fixjvl70w5bi1ihmmx2y4krms9kkjwd3ch21y14hif";
+      type = "gem";
+    };
+    version = "1.38.0";
+  };
+  aws-sigv4 = {
+    dependencies = ["aws-eventstream"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1d9zhmi3mpfzkkpg7yw7s9r1dwk157kh9875j3c7gh6cy95lmmaw";
+      type = "gem";
+    };
+    version = "1.2.3";
+  };
+  jmespath = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1d4wac0dcd1jf6kc57891glih9w57552zgqswgy74d1xhgnk0ngf";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  multi_json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1raim9ddjh672m32psaa9niw67ywzjbxbdb8iijx3wv9k5b0pk2x";
+      type = "gem";
+    };
+    version = "1.12.2";
+  };
+  terraforming = {
+    dependencies = ["aws-sdk-autoscaling" "aws-sdk-cloudwatch" "aws-sdk-dynamodb" "aws-sdk-ec2" "aws-sdk-efs" "aws-sdk-elasticache" "aws-sdk-elasticloadbalancing" "aws-sdk-elasticloadbalancingv2" "aws-sdk-iam" "aws-sdk-kms" "aws-sdk-rds" "aws-sdk-redshift" "aws-sdk-route53" "aws-sdk-s3" "aws-sdk-sns" "aws-sdk-sqs" "multi_json" "thor"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03fyhqx6bxpbn26pbcz748gz7rh7q3r9r0jimq7vj07fl454fmwh";
+      type = "gem";
+    };
+    version = "0.18.0";
+  };
+  thor = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18yhlvmfya23cs3pvhr1qy38y41b6mhr5q9vwv5lrgk16wmf3jna";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/terragrunt/default.nix b/nixpkgs/pkgs/applications/networking/cluster/terragrunt/default.nix
new file mode 100644
index 000000000000..39197cb3af4b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/terragrunt/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "terragrunt";
+  version = "0.50.14";
+
+  src = fetchFromGitHub {
+    owner = "gruntwork-io";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-jPRSwq7pLFG56NB+HaP2GP2GdK1wsOeM+y396o70Q3A=";
+  };
+
+  vendorHash = "sha256-wQ5jxOTuYkiW5zHcduByKZ+vHPKn/1ELL3DskKze+UI=";
+
+  doCheck = false;
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/gruntwork-io/go-commons/version.Version=v${version}"
+  ];
+
+  doInstallCheck = true;
+
+  installCheckPhase = ''
+    runHook preInstallCheck
+    $out/bin/terragrunt --help
+    $out/bin/terragrunt --version | grep "v${version}"
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    homepage = "https://terragrunt.gruntwork.io";
+    changelog = "https://github.com/gruntwork-io/terragrunt/releases/tag/v${version}";
+    description = "A thin wrapper for Terraform that supports locking for Terraform state and enforces best practices";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jk qjoly kashw2 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/terranix/default.nix b/nixpkgs/pkgs/applications/networking/cluster/terranix/default.nix
new file mode 100644
index 000000000000..f1781cca3950
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/terranix/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, lib, fetchFromGitHub, jq, nix, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "terranix";
+  version = "2.6.0";
+
+  src = fetchFromGitHub {
+    owner = "mrVanDalo";
+    repo = "terranix";
+    rev = version;
+    sha256 = "sha256-pNuJxmVMGbBHw7pa+Bx0HY0orXIXoyyAXOKuQ1zpfus=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/{bin,core,modules,lib}
+    mv bin core modules lib share $out/
+
+    wrapProgram $out/bin/terranix-doc-json \
+      --prefix PATH : ${lib.makeBinPath [ jq nix ]}
+  '';
+
+  meta = with lib; {
+    description = "A NixOS like terraform-json generator";
+    homepage = "https://terranix.org";
+    license = licenses.gpl3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ mrVanDalo ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/terraspace/Gemfile b/nixpkgs/pkgs/applications/networking/cluster/terraspace/Gemfile
new file mode 100644
index 000000000000..7a6bbf7cc943
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/terraspace/Gemfile
@@ -0,0 +1,2 @@
+source "https://rubygems.org"
+gem "terraspace", '~> 2.2.8'
diff --git a/nixpkgs/pkgs/applications/networking/cluster/terraspace/Gemfile.lock b/nixpkgs/pkgs/applications/networking/cluster/terraspace/Gemfile.lock
new file mode 100644
index 000000000000..4fce1f819664
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/terraspace/Gemfile.lock
@@ -0,0 +1,129 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    activesupport (7.0.6)
+      concurrent-ruby (~> 1.0, >= 1.0.2)
+      i18n (>= 1.6, < 2)
+      minitest (>= 5.1)
+      tzinfo (~> 2.0)
+    aws-eventstream (1.2.0)
+    aws-partitions (1.785.0)
+    aws-sdk-core (3.177.0)
+      aws-eventstream (~> 1, >= 1.0.2)
+      aws-partitions (~> 1, >= 1.651.0)
+      aws-sigv4 (~> 1.5)
+      jmespath (~> 1, >= 1.6.1)
+    aws-sdk-kms (1.70.0)
+      aws-sdk-core (~> 3, >= 3.177.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-s3 (1.128.0)
+      aws-sdk-core (~> 3, >= 3.177.0)
+      aws-sdk-kms (~> 1)
+      aws-sigv4 (~> 1.6)
+    aws-sigv4 (1.6.0)
+      aws-eventstream (~> 1, >= 1.0.2)
+    cli-format (0.2.2)
+      activesupport
+      text-table
+      zeitwerk
+    concurrent-ruby (1.2.2)
+    deep_merge (1.2.2)
+    diff-lcs (1.5.0)
+    dotenv (2.8.1)
+    dsl_evaluator (0.3.1)
+      activesupport
+      memoist
+      rainbow
+      zeitwerk
+    eventmachine (1.2.7)
+    eventmachine-tail (0.6.5)
+      eventmachine
+    graph (2.11.0)
+    hcl_parser (0.2.2)
+      rhcl
+    i18n (1.14.1)
+      concurrent-ruby (~> 1.0)
+    jmespath (1.6.2)
+    memoist (0.16.2)
+    minitest (5.18.1)
+    nokogiri (1.15.3)
+      racc (~> 1.4)
+      mini_portile2 (~> 2.8.2)
+    racc (1.7.1)
+    mini_portile2 (2.8.2)
+    rainbow (3.1.1)
+    render_me_pretty (0.9.0)
+      activesupport
+      rainbow
+      tilt
+    rexml (3.2.5)
+    rhcl (0.1.0)
+      deep_merge
+    rspec (3.12.0)
+      rspec-core (~> 3.12.0)
+      rspec-expectations (~> 3.12.0)
+      rspec-mocks (~> 3.12.0)
+    rspec-core (3.12.2)
+      rspec-support (~> 3.12.0)
+    rspec-expectations (3.12.3)
+      diff-lcs (>= 1.2.0, < 2.0)
+      rspec-support (~> 3.12.0)
+    rspec-mocks (3.12.5)
+      diff-lcs (>= 1.2.0, < 2.0)
+      rspec-support (~> 3.12.0)
+    rspec-support (3.12.1)
+    rspec-terraspace (0.3.3)
+      activesupport
+      memoist
+      rainbow
+      rspec
+      zeitwerk
+    rubyzip (2.3.2)
+    terraspace (2.2.8)
+      activesupport
+      bundler
+      cli-format
+      deep_merge
+      dotenv
+      dsl_evaluator
+      eventmachine-tail
+      graph
+      hcl_parser
+      memoist
+      rainbow
+      render_me_pretty
+      rexml
+      rspec-terraspace (>= 0.3.1)
+      terraspace-bundler (>= 0.5.0)
+      thor
+      tty-tree
+      zeitwerk
+      zip_folder
+    terraspace-bundler (0.5.0)
+      activesupport
+      aws-sdk-s3
+      dsl_evaluator
+      memoist
+      nokogiri
+      rainbow
+      rubyzip
+      thor
+      zeitwerk
+    text-table (1.2.4)
+    thor (1.2.2)
+    tilt (2.2.0)
+    tty-tree (0.4.0)
+    tzinfo (2.0.6)
+      concurrent-ruby (~> 1.0)
+    zeitwerk (2.6.8)
+    zip_folder (0.1.0)
+      rubyzip
+
+PLATFORMS
+  x86_64-linux
+
+DEPENDENCIES
+  terraspace (~> 2.2.8)
+
+BUNDLED WITH
+   2.3.26
diff --git a/nixpkgs/pkgs/applications/networking/cluster/terraspace/default.nix b/nixpkgs/pkgs/applications/networking/cluster/terraspace/default.nix
new file mode 100644
index 000000000000..af7c1025356a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/terraspace/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, lib, bundlerEnv, bundlerUpdateScript, makeWrapper, ruby }:
+let
+  rubyEnv = bundlerEnv {
+    inherit ruby;
+    name = "terraspace";
+    gemdir  = ./.;
+  };
+in stdenv.mkDerivation {
+  pname = "terraspace";
+  version = (import ./gemset.nix).terraspace.version;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontUnpack = true;
+
+  installPhase = ''
+    mkdir -p $out/bin
+    makeWrapper ${rubyEnv}/bin/terraspace $out/bin/terraspace
+    wrapProgram $out/bin/terraspace \
+      --prefix PATH : ${lib.makeBinPath [ rubyEnv.ruby ]}
+  '';
+
+  passthru.updateScript = bundlerUpdateScript "terraspace";
+
+  meta = with lib; {
+    description = "Terraform framework that provides an organized structure, and keeps your code DRY";
+    homepage    = "https://github.com/boltops-tools/terraspace";
+    license     = licenses.asl20;
+    platforms   = ruby.meta.platforms;
+    maintainers = with maintainers; [ mislavzanic ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/terraspace/gemset.nix b/nixpkgs/pkgs/applications/networking/cluster/terraspace/gemset.nix
new file mode 100644
index 000000000000..a4e082c6d0d8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/terraspace/gemset.nix
@@ -0,0 +1,464 @@
+{
+  activesupport = {
+    dependencies = ["concurrent-ruby" "i18n" "minitest" "tzinfo"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1cjsf26656996hv48wgv2mkwxf0fy1qc68ikgzq7mzfq2mmvmayk";
+      type = "gem";
+    };
+    version = "7.0.6";
+  };
+  aws-eventstream = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pyis1nvnbjxk12a43xvgj2gv0mvp4cnkc1gzw0v1018r61399gz";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  aws-partitions = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05m0c3h1z0jhaqiciil55fshrjvc725cf1lc0g933pf98vqflb0r";
+      type = "gem";
+    };
+    version = "1.785.0";
+  };
+  aws-sdk-core = {
+    dependencies = ["aws-eventstream" "aws-partitions" "aws-sigv4" "jmespath"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09firi4bin3ay4pd59qgxspq2f1isfi1li8rabpw6lvvbhnar168";
+      type = "gem";
+    };
+    version = "3.177.0";
+  };
+  aws-sdk-kms = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1x73qj2c39ap926by14x56cjmp2cd5jpq5gv33xynypy1idyb0fj";
+      type = "gem";
+    };
+    version = "1.70.0";
+  };
+  aws-sdk-s3 = {
+    dependencies = ["aws-sdk-core" "aws-sdk-kms" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "11cxk6b3p1bsl1gg3pi93qx2ynbjrrsrsc68nnqsjm4npvaj052v";
+      type = "gem";
+    };
+    version = "1.128.0";
+  };
+  aws-sigv4 = {
+    dependencies = ["aws-eventstream"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0z889c4c1w7wsjm3szg64ay5j51kjl4pdf94nlr1yks2rlanm7na";
+      type = "gem";
+    };
+    version = "1.6.0";
+  };
+  cli-format = {
+    dependencies = ["activesupport" "text-table" "zeitwerk"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mr8vkw5zwb3flhhf8s923mi7r85g1ky0lmjz4q5xhwb48ji55qf";
+      type = "gem";
+    };
+    version = "0.2.2";
+  };
+  concurrent-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0krcwb6mn0iklajwngwsg850nk8k9b35dhmc2qkbdqvmifdi2y9q";
+      type = "gem";
+    };
+    version = "1.2.2";
+  };
+  deep_merge = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fjn4civid68a3zxnbgyjj6krs3l30dy8b4djpg6fpzrsyix7kl3";
+      type = "gem";
+    };
+    version = "1.2.2";
+  };
+  diff-lcs = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rwvjahnp7cpmracd8x732rjgnilqv2sx7d1gfrysslc3h039fa9";
+      type = "gem";
+    };
+    version = "1.5.0";
+  };
+  dotenv = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1n0pi8x8ql5h1mijvm8lgn6bhq4xjb5a500p5r1krq4s6j9lg565";
+      type = "gem";
+    };
+    version = "2.8.1";
+  };
+  dsl_evaluator = {
+    dependencies = ["activesupport" "memoist" "rainbow" "zeitwerk"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0mck2j0gr851kj9l7pix97jmmwwazfjq83ryamx5rpdbgv5mrh51";
+      type = "gem";
+    };
+    version = "0.3.1";
+  };
+  eventmachine = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wh9aqb0skz80fhfn66lbpr4f86ya2z5rx6gm5xlfhd05bj1ch4r";
+      type = "gem";
+    };
+    version = "1.2.7";
+  };
+  eventmachine-tail = {
+    dependencies = ["eventmachine"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0x5ly7mnfr6gibjyxz6lrxb4jbf05p0r8257qcgkf8rkwg9ynw0c";
+      type = "gem";
+    };
+    version = "0.6.5";
+  };
+  graph = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "10l1bdqc9yzdk6kqwh9vw918lyw846gpqw2z8kfcwl53zdjdzcl9";
+      type = "gem";
+    };
+    version = "2.11.0";
+  };
+  hcl_parser = {
+    dependencies = ["rhcl"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09d55i9y187xkw0fi0b5aq8wyzvq8w73ryi939dvzdzgss25m7jj";
+      type = "gem";
+    };
+    version = "0.2.2";
+  };
+  i18n = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qaamqsh5f3szhcakkak8ikxlzxqnv49n2p7504hcz2l0f4nj0wx";
+      type = "gem";
+    };
+    version = "1.14.1";
+  };
+  jmespath = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1cdw9vw2qly7q7r41s7phnac264rbsdqgj4l0h4nqgbjb157g393";
+      type = "gem";
+    };
+    version = "1.6.2";
+  };
+  memoist = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0i9wpzix3sjhf6d9zw60dm4371iq8kyz7ckh2qapan2vyaim6b55";
+      type = "gem";
+    };
+    version = "0.16.2";
+  };
+  mini_portile2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0z7f38iq37h376n9xbl4gajdrnwzq284c9v1py4imw3gri2d5cj6";
+      type = "gem";
+    };
+    version = "2.8.2";
+  };
+  minitest = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1kg9wh7jlc9zsr3hkhpzkbn0ynf4np5ap9m2d8xdrb8shy0y6pmb";
+      type = "gem";
+    };
+    version = "5.18.1";
+  };
+  nokogiri = {
+    dependencies = ["mini_portile2" "racc"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jw8a20a9k05fpz3q24im19b97idss3179z76yn5scc5b8lk2rl7";
+      type = "gem";
+    };
+    version = "1.15.3";
+  };
+  racc = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "11v3l46mwnlzlc371wr3x6yylpgafgwdf0q7hc7c1lzx6r414r5g";
+      type = "gem";
+    };
+    version = "1.7.1";
+  };
+  rainbow = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0smwg4mii0fm38pyb5fddbmrdpifwv22zv3d3px2xx497am93503";
+      type = "gem";
+    };
+    version = "3.1.1";
+  };
+  render_me_pretty = {
+    dependencies = ["activesupport" "rainbow" "tilt"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qx9pv0irkcqjx9f0mh5s6d9m0fck329bp845ryic34nsvnbsp4k";
+      type = "gem";
+    };
+    version = "0.9.0";
+  };
+  rexml = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08ximcyfjy94pm1rhcx04ny1vx2sk0x4y185gzn86yfsbzwkng53";
+      type = "gem";
+    };
+    version = "3.2.5";
+  };
+  rhcl = {
+    dependencies = ["deep_merge"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1c7xp9y9438mnqrfrvjp1fwy2lk0b1ixz45qi2g2kbl91ilhn834";
+      type = "gem";
+    };
+    version = "0.1.0";
+  };
+  rspec = {
+    dependencies = ["rspec-core" "rspec-expectations" "rspec-mocks"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "171rc90vcgjl8p1bdrqa92ymrj8a87qf6w20x05xq29mljcigi6c";
+      type = "gem";
+    };
+    version = "3.12.0";
+  };
+  rspec-core = {
+    dependencies = ["rspec-support"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0l95bnjxdabrn79hwdhn2q1n7mn26pj7y1w5660v5qi81x458nqm";
+      type = "gem";
+    };
+    version = "3.12.2";
+  };
+  rspec-expectations = {
+    dependencies = ["diff-lcs" "rspec-support"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05j44jfqlv7j2rpxb5vqzf9hfv7w8ba46wwgxwcwd8p0wzi1hg89";
+      type = "gem";
+    };
+    version = "3.12.3";
+  };
+  rspec-mocks = {
+    dependencies = ["diff-lcs" "rspec-support"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hfm17xakfvwya236graj6c2arr4sb9zasp35q5fykhyz8mhs0w2";
+      type = "gem";
+    };
+    version = "3.12.5";
+  };
+  rspec-support = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ky86j3ksi26ng9ybd7j0qsdf1lpr8mzrmn98yy9gzv801fvhsgr";
+      type = "gem";
+    };
+    version = "3.12.1";
+  };
+  rspec-terraspace = {
+    dependencies = ["activesupport" "memoist" "rainbow" "rspec" "zeitwerk"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1q8dlamvd11d5q2p6yvq0gkm3smz42mzsva4qimim7jn2yjbh58y";
+      type = "gem";
+    };
+    version = "0.3.3";
+  };
+  rubyzip = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0grps9197qyxakbpw02pda59v45lfgbgiyw48i0mq9f2bn9y6mrz";
+      type = "gem";
+    };
+    version = "2.3.2";
+  };
+  terraspace = {
+    dependencies = ["activesupport" "cli-format" "deep_merge" "dotenv" "dsl_evaluator" "eventmachine-tail" "graph" "hcl_parser" "memoist" "rainbow" "render_me_pretty" "rexml" "rspec-terraspace" "terraspace-bundler" "thor" "tty-tree" "zeitwerk" "zip_folder"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zhcdaiq0sgk2gcy4krkzm4qrvcaibkf5n755qgqgcp1f1b0w6gl";
+      type = "gem";
+    };
+    version = "2.2.8";
+  };
+  terraspace-bundler = {
+    dependencies = ["activesupport" "aws-sdk-s3" "dsl_evaluator" "memoist" "nokogiri" "rainbow" "rubyzip" "thor" "zeitwerk"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0kn6is7zqlw8l4njj4pjwbdi95w651nz3qvqgc3vw07rchs08nnx";
+      type = "gem";
+    };
+    version = "0.5.0";
+  };
+  text-table = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06yhlnb49fn0fhkmi6lrziyv2hd42gcm2zi3sggm2qab48qxn94j";
+      type = "gem";
+    };
+    version = "1.2.4";
+  };
+  thor = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0k7j2wn14h1pl4smibasw0bp66kg626drxb59z7rzflch99cd4rg";
+      type = "gem";
+    };
+    version = "1.2.2";
+  };
+  tilt = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bmjgbv8158klwp2r3klxjwaj93nh1sbl4xvj9wsha0ic478avz7";
+      type = "gem";
+    };
+    version = "2.2.0";
+  };
+  tty-tree = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0w3nh9yppb7zaswa7d9hnhf6k64z5d3jd8xvpyg2mjfrzcw9rbgs";
+      type = "gem";
+    };
+    version = "0.4.0";
+  };
+  tzinfo = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16w2g84dzaf3z13gxyzlzbf748kylk5bdgg3n1ipvkvvqy685bwd";
+      type = "gem";
+    };
+    version = "2.0.6";
+  };
+  zeitwerk = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ck6bj7wa73dkdh13735jl06k6cfny98glxjkas82aivlmyzqqbk";
+      type = "gem";
+    };
+    version = "2.6.8";
+  };
+  zip_folder = {
+    dependencies = ["rubyzip"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1884a1ixy7bzm9yp8cjikhdfcn8205p4fsjq894ilby8i1whl58k";
+      type = "gem";
+    };
+    version = "0.1.0";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/tf-summarize/default.nix b/nixpkgs/pkgs/applications/networking/cluster/tf-summarize/default.nix
new file mode 100644
index 000000000000..d4958d762b4f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/tf-summarize/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, testers
+, tf-summarize
+}:
+
+buildGoModule rec {
+  pname = "tf-summarize";
+  version = "0.3.2";
+
+  src = fetchFromGitHub {
+    owner = "dineshba";
+    repo = "tf-summarize";
+    rev = "v${version}";
+    hash = "sha256-d8DIVPQkuEvDCO0wKl+aK1jSu6MJCpTxQrgKYcFnzjA=";
+  };
+
+  vendorHash = "sha256-cnybdZth7qlP2BHK8uvLCoqJtggMIkvaL2+YugiUZRE=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.version=${version}"
+  ];
+
+  passthru.tests.version = testers.testVersion {
+    package = tf-summarize;
+    command = "tf-summarize -v";
+    inherit version;
+  };
+
+  meta = with lib; {
+    description = "Command-line utility to print the summary of the terraform plan";
+    homepage = "https://github.com/dineshba/tf-summarize";
+    license = licenses.mit;
+    maintainers = with maintainers; [ pjrm ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/tfautomv/default.nix b/nixpkgs/pkgs/applications/networking/cluster/tfautomv/default.nix
new file mode 100644
index 000000000000..7409ec8ea446
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/tfautomv/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "tfautomv";
+  version = "0.5.3";
+
+  src = fetchFromGitHub {
+    owner = "busser";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-A1/sf+QjxQ8S2Cqmw9mD0r4aqA2Ssopeni0YNLND9L8=";
+  };
+
+  vendorHash = "sha256-zAshnSqZT9lx9EWvJsMwi6rqvhUWJ/3uJnk+44TGzlU=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/busser/tfautomv";
+    description = "When refactoring a Terraform codebase, you often need to write moved blocks. This can be tedious. Let tfautomv do it for you";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ qjoly ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/tfswitch/default.nix b/nixpkgs/pkgs/applications/networking/cluster/tfswitch/default.nix
new file mode 100644
index 000000000000..c8f2fb070fba
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/tfswitch/default.nix
@@ -0,0 +1,31 @@
+{ buildGoModule, lib, fetchFromGitHub }:
+buildGoModule rec {
+  pname = "tfswitch";
+  version = "0.13.1308";
+
+  src = fetchFromGitHub {
+    owner = "warrensbox";
+    repo = "terraform-switcher";
+    rev = version;
+    sha256 = "sha256-EyA7LwfL3vCNzd2wpyUbrUnvkM0/f7/cQp+jcAcGZsg=";
+  };
+
+  vendorHash = "sha256-NX+vzI/Fa/n9ZQjpESes4fNVAmKlA1rqPwSKsL2GEUY=";
+
+  # Disable tests since it requires network access and relies on the
+  # presence of release.hashicorp.com
+  doCheck = false;
+
+  postInstall = ''
+    # The binary is named tfswitch
+    mv $out/bin/terraform-switcher $out/bin/tfswitch
+  '';
+
+  meta = with lib; {
+    description =
+      "A command line tool to switch between different versions of terraform";
+    homepage = "https://github.com/warrensbox/terraform-switcher";
+    license = licenses.mit;
+    maintainers = with maintainers; [ psibi ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/tfupdate/default.nix b/nixpkgs/pkgs/applications/networking/cluster/tfupdate/default.nix
new file mode 100644
index 000000000000..24f7e36049b0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/tfupdate/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "tfupdate";
+  version = "0.7.2";
+
+  src = fetchFromGitHub {
+    owner = "minamijoyo";
+    repo = "tfupdate";
+    rev = "v${version}";
+    sha256 = "sha256-ii37Au/2jjGdQjc2LnBPkyNNBMbD5XPPo7i3krF33W0=";
+  };
+
+  vendorHash = "sha256-gtAenM1URr2wFfe2/zCIyNvG7echjIxSxG1hX2vq16g=";
+
+  # Tests start http servers which need to bind to local addresses:
+  # panic: httptest: failed to listen on a port: listen tcp6 [::1]:0: bind: operation not permitted
+  __darwinAllowLocalNetworking = true;
+
+  meta = with lib; {
+    description = "Update version constraints in your Terraform configurations";
+    homepage = "https://github.com/minamijoyo/tfupdate";
+    changelog = "https://github.com/minamijoyo/tfupdate/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ Intuinewin qjoly ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/tgswitch/default.nix b/nixpkgs/pkgs/applications/networking/cluster/tgswitch/default.nix
new file mode 100644
index 000000000000..25c301f0cbb5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/tgswitch/default.nix
@@ -0,0 +1,29 @@
+{ buildGoModule, lib, fetchFromGitHub }:
+buildGoModule rec {
+  pname = "tgswitch";
+  version = "0.6.0";
+
+  src = fetchFromGitHub {
+    owner = "warrensbox";
+    repo = "tgswitch";
+    rev = version;
+    sha256 = "sha256-Q3Cef3B7hfVHLvW8Rx6IdH9g/3luDhpUMZ8TXVpb8gQ=";
+  };
+
+  vendorHash = "sha256-PlTdbA8Z2I2SWoG7oYG87VQfczx9zP1SCJx70UWOEog=";
+
+  ldflags = [ "-s" "-w" ];
+
+  # There are many modifications need to be done to make tests run. For example:
+  # 1. Network access
+  # 2. Operation on `/var/empty` not permitted on macOS
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Command line tool to switch between different versions of terragrunt";
+    homepage = "https://github.com/warrensbox/tgswitch";
+    license = licenses.mit;
+    maintainers = with maintainers; [ psibi ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/networking/cluster/tilt/default.nix b/nixpkgs/pkgs/applications/networking/cluster/tilt/default.nix
new file mode 100644
index 000000000000..ba870fea7618
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/tilt/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "tilt";
+  /* Do not use "dev" as a version. If you do, Tilt will consider itself
+    running in development environment and try to serve assets from the
+    source tree, which is not there once build completes.  */
+  version = "0.33.5";
+
+  src = fetchFromGitHub {
+    owner = "tilt-dev";
+    repo = "tilt";
+    rev = "v${version}";
+    hash = "sha256-o78PoIKj+0FvZRpm0AqtUq3N9a9/LDYc7DIPZgSZe4s=";
+  };
+
+  vendorHash = null;
+
+  subPackages = [ "cmd/tilt" ];
+
+  ldflags = [ "-X main.version=${version}" ];
+
+  meta = {
+    description = "Local development tool to manage your developer instance when your team deploys to Kubernetes in production";
+    homepage = "https://tilt.dev/";
+    license = lib.licenses.asl20;
+    maintainers = with lib.maintainers; [ anton-dessiatov ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/timoni/default.nix b/nixpkgs/pkgs/applications/networking/cluster/timoni/default.nix
new file mode 100644
index 000000000000..7aa077054495
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/timoni/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "timoni";
+  version = "0.12.1";
+
+  src = fetchFromGitHub {
+    owner = "stefanprodan";
+    repo = "timoni";
+    rev = "v${version}";
+    hash = "sha256-GILJAaid1kSO9281HQx7NI+mjmyJbTYTkwhvX4V/Idc=";
+  };
+
+  vendorHash = "sha256-nGYAk9dwQ/+3SmNqGzbpptqBDAO/vNT9jhlcJf4y8jg=";
+
+  subPackages = [ "cmd/timoni" ];
+  nativeBuildInputs = [ installShellFiles ];
+
+  # Some tests require running Kubernetes instance
+  doCheck = false;
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.VERSION=${version}"
+  ];
+
+  postInstall = ''
+    installShellCompletion --cmd timoni \
+    --bash <($out/bin/timoni completion bash) \
+    --fish <($out/bin/timoni completion fish) \
+    --zsh <($out/bin/timoni completion zsh)
+  '';
+
+  meta = with lib; {
+    homepage = "https://timoni.sh";
+    changelog = "https://github.com/stefanprodan/timoni/releases/tag/${src.rev}";
+    description = "A package manager for Kubernetes, powered by CUE and inspired by Helm";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ votava ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/tubekit/default.nix b/nixpkgs/pkgs/applications/networking/cluster/tubekit/default.nix
new file mode 100644
index 000000000000..afcef293c1d8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/tubekit/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "tubekit";
+  version = "5";
+
+  src = fetchFromGitHub {
+    owner = "reconquest";
+    repo = "tubekit";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-fUe5bMFF569A9Xdx3bfQH2DzbQDRfZ+ewlDL+gK2gWw=";
+  };
+
+  vendorHash = "sha256-qAmkUV5l5g8/w8ZTYFGYvd9I8NUk8rMYjutenHvTRnw=";
+
+  meta = with lib; {
+    description = "Kubectl alternative with quick context switching";
+    homepage = "https://github.com/reconquest/tubekit";
+    license = licenses.mit;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ farcaller ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/tubekit/wrapper.nix b/nixpkgs/pkgs/applications/networking/cluster/tubekit/wrapper.nix
new file mode 100644
index 000000000000..7cba11c97a3a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/tubekit/wrapper.nix
@@ -0,0 +1,17 @@
+{ lib
+, runCommand
+, makeWrapper
+, tubekit-unwrapped
+, pname ? "tubekit"
+, version ? tubekit-unwrapped.version
+, kubectl
+}:
+runCommand "${pname}-${version}"
+{
+  inherit pname version;
+  inherit (tubekit-unwrapped) src meta;
+  nativeBuildInputs = [ makeWrapper ];
+} ''
+  mkdir -p $out/bin
+  makeWrapper ${tubekit-unwrapped}/bin/tubectl $out/bin/tubectl --set-default TUBEKIT_KUBECTL ${kubectl}/bin/kubectl
+''
diff --git a/nixpkgs/pkgs/applications/networking/cluster/vcluster/default.nix b/nixpkgs/pkgs/applications/networking/cluster/vcluster/default.nix
new file mode 100644
index 000000000000..af0642c14c5c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/vcluster/default.nix
@@ -0,0 +1,45 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "vcluster";
+  version = "0.15.6";
+
+  src = fetchFromGitHub {
+    owner = "loft-sh";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-frYE/0PcVNlk+hwSCoPwSbL2se4dEP9g6aLDMGdn6x8=";
+  };
+
+  vendorHash = null;
+
+  subPackages = [ "cmd/vclusterctl" ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [ "-s" "-w" ];
+
+  # Test is disabled because e2e tests expect k8s.
+  doCheck = false;
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/bin
+    install -Dm755 "$GOPATH/bin/vclusterctl" -T $out/bin/vcluster
+    runHook postInstall
+  '';
+
+  postInstall = ''
+    installShellCompletion --cmd vcluster \
+      --bash <($out/bin/vcluster completion bash) \
+      --zsh <($out/bin/vcluster completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "Create fully functional virtual Kubernetes clusters";
+    downloadPage = "https://github.com/loft-sh/vcluster";
+    homepage = "https://www.vcluster.com/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ peterromfeldhk berryp qjoly ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/velero/default.nix b/nixpkgs/pkgs/applications/networking/cluster/velero/default.nix
new file mode 100644
index 000000000000..9092dfb30739
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/velero/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "velero";
+  version = "1.11.1";
+
+
+  src = fetchFromGitHub {
+    owner = "vmware-tanzu";
+    repo = "velero";
+    rev = "v${version}";
+    sha256 = "sha256-G1+zdzHj8fDKVEVQpBEH3o/em+gxCyQmrpSXj8bE/P4=";
+  };
+
+  ldflags = [
+    "-s" "-w"
+    "-X github.com/vmware-tanzu/velero/pkg/buildinfo.Version=v${version}"
+    "-X github.com/vmware-tanzu/velero/pkg/buildinfo.ImageRegistry=velero"
+    "-X github.com/vmware-tanzu/velero/pkg/buildinfo.GitTreeState=clean"
+    "-X github.com/vmware-tanzu/velero/pkg/buildinfo.GitSHA=none"
+  ];
+
+  vendorHash = "sha256-WkJk+46+9U4TegDnGtQ+EoqqV/D7githz2pJvxCbV4c=";
+
+  excludedPackages = [ "issue-template-gen" "release-tools" "v1" "velero-restic-restore-helper" ];
+
+  doCheck = false; # Tests expect a running cluster see https://github.com/vmware-tanzu/velero/tree/main/test/e2e
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/velero version --client-only | grep ${version} > /dev/null
+  '';
+
+  nativeBuildInputs = [ installShellFiles ];
+  postInstall = lib.optionalString (stdenv.hostPlatform == stdenv.buildPlatform) ''
+    $out/bin/velero completion bash > velero.bash
+    $out/bin/velero completion zsh > velero.zsh
+    installShellCompletion velero.{bash,zsh}
+  '';
+
+  meta = with lib; {
+    description =
+      "A utility for managing disaster recovery, specifically for your Kubernetes cluster resources and persistent volumes";
+    homepage = "https://velero.io/";
+    changelog =
+      "https://github.com/vmware-tanzu/velero/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = [ maintainers.mbode maintainers.bryanasdev000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/waagent/default.nix b/nixpkgs/pkgs/applications/networking/cluster/waagent/default.nix
new file mode 100644
index 000000000000..a1a72a69885a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/waagent/default.nix
@@ -0,0 +1,67 @@
+{ fetchFromGitHub,
+  findutils,
+  gnugrep,
+  gnused,
+  iproute2,
+  iptables,
+  lib,
+  nettools, # for hostname
+  openssh,
+  openssl,
+  parted,
+  procps, # for pidof,
+  python3,
+  shadow, # for useradd, usermod
+  util-linux, # for (u)mount, fdisk, sfdisk, mkswap
+}:
+
+let
+  inherit (lib) makeBinPath;
+
+in
+python3.pkgs.buildPythonPackage rec {
+  pname = "waagent";
+  version = "2.8.0.11";
+  src = fetchFromGitHub {
+    owner = "Azure";
+    repo = "WALinuxAgent";
+    rev = "04ded9f0b708cfaf4f9b68eead1aef4cc4f32eeb";
+    sha256 = "0fvjanvsz1zyzhbjr2alq5fnld43mdd776r2qid5jy5glzv0xbhf";
+  };
+  doCheck = false;
+
+  buildInputs = with python3.pkgs; [ distro ];
+  runtimeDeps = [
+    findutils
+    gnugrep
+    gnused
+    iproute2
+    iptables
+    nettools # for hostname
+    openssh
+    openssl
+    parted
+    procps # for pidof
+    shadow # for useradd, usermod
+    util-linux # for (u)mount, fdisk, sfdisk, mkswap
+  ];
+
+  fixupPhase = ''
+     mkdir -p $out/bin/
+     WAAGENT=$(find $out -name waagent | grep sbin)
+     cp $WAAGENT $out/bin/waagent
+     wrapProgram "$out/bin/waagent" \
+         --prefix PYTHONPATH : $PYTHONPATH \
+         --prefix PATH : "${makeBinPath runtimeDeps}"
+     patchShebangs --build "$out/bin/"
+  '';
+
+  meta = {
+    description = "The Microsoft Azure Linux Agent (waagent)
+                   manages Linux provisioning and VM interaction with the Azure
+                   Fabric Controller";
+    homepage = "https://github.com/Azure/WALinuxAgent";
+    license = with lib.licenses; [ asl20 ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/waypoint/default.nix b/nixpkgs/pkgs/applications/networking/cluster/waypoint/default.nix
new file mode 100644
index 000000000000..880095c72098
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/waypoint/default.nix
@@ -0,0 +1,81 @@
+{ lib, buildGoModule, fetchFromGitHub, go-bindata, installShellFiles }:
+
+buildGoModule rec {
+  pname = "waypoint";
+  version = "0.11.4";
+
+  src = fetchFromGitHub {
+    owner = "hashicorp";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-Zn11mVQV8lN62BVYfhXauKets7/mIqA0r+mG2TkRyPk=";
+  };
+
+  vendorHash = "sha256-z0qe8zSQ9PopGeyvMDhRpU+3jUgHoh+8jTsYGLPk3i4=";
+
+  nativeBuildInputs = [ go-bindata installShellFiles ];
+
+  # GIT_{COMMIT,DIRTY} filled in blank to prevent trying to run git and ending up blank anyway
+  buildPhase = ''
+    runHook preBuild
+    make bin GIT_DESCRIBE="v${version}" GIT_COMMIT="" GIT_DIRTY=""
+    runHook postBuild
+  '';
+
+  doCheck = false;
+
+  installPhase = ''
+    runHook preInstall
+
+    local INSTALL="$out/bin/waypoint"
+    install -D waypoint $out/bin/waypoint
+
+    # waypoint's completion install command alters your <something>rc files
+    # below is the equivalent of what it injects
+
+    # Write to a file as it doesn't like EOF within <()
+    cat > waypoint.fish <<EOF
+    function __complete_waypoint
+      set -lx COMP_LINE (commandline -cp)
+      test -z (commandline -ct)
+      and set COMP_LINE "$COMP_LINE "
+      $INSTALL
+    end
+    complete -f -c waypoint -a "(__complete_waypoint)"
+    EOF
+    installShellCompletion --cmd waypoint \
+      --bash <(echo "complete -C $INSTALL waypoint") \
+      --fish <(cat waypoint.fish) \
+      --zsh <(echo "complete -o nospace -C $INSTALL waypoint")
+
+    runHook postInstall
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+    # `version` tries to write to ~/.config/waypoint
+    export HOME="$TMPDIR"
+
+    $out/bin/waypoint --help
+    $out/bin/waypoint version | grep "CLI: v${version}"
+    runHook postInstallCheck
+  '';
+
+  # Binary is static
+  dontPatchELF = true;
+  dontPatchShebangs = true;
+
+  meta = with lib; {
+    homepage = "https://waypointproject.io";
+    changelog = "https://github.com/hashicorp/waypoint/blob/v${version}/CHANGELOG.md";
+    description = "A tool to build, deploy, and release any application on any platform";
+    longDescription = ''
+      Waypoint allows developers to define their application build, deploy, and
+      release lifecycle as code, reducing the time to deliver deployments
+      through a consistent and repeatable workflow.
+    '';
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ winpat jk techknowlogick ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/weave-gitops/default.nix b/nixpkgs/pkgs/applications/networking/cluster/weave-gitops/default.nix
new file mode 100644
index 000000000000..607955ef5c68
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/weave-gitops/default.nix
@@ -0,0 +1,37 @@
+{ lib, fetchFromGitHub, buildGoModule, stdenv, installShellFiles }:
+
+buildGoModule rec {
+  pname = "weave-gitops";
+  version = "0.29.0";
+
+  src = fetchFromGitHub {
+    owner = "weaveworks";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-d/MC+QJypLvURLRRp4U3oErf+MdyJ291Pa+gNPkV4xQ=";
+  };
+
+  ldflags = [ "-s" "-w" "-X github.com/weaveworks/weave-gitops/cmd/gitops/version.Version=${version}" ];
+
+  vendorHash = "sha256-qwuV/c4lWjtmLp197EOScgZHMe4Wmnbj/Jy8x0n2VSo=";
+
+  subPackages = [ "cmd/gitops" ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = lib.optionalString (stdenv.buildPlatform.canExecute stdenv.hostPlatform) ''
+    installShellCompletion --cmd gitops \
+      --bash <($out/bin/gitops completion bash 2>/dev/null) \
+      --fish <($out/bin/gitops completion fish 2>/dev/null) \
+      --zsh <($out/bin/gitops completion zsh 2>/dev/null)
+  '';
+
+  meta = with lib; {
+    homepage = "https://docs.gitops.weave.works";
+    description = "Weave Gitops CLI";
+    license = licenses.mpl20;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ nullx76 ];
+    mainProgram = "gitops";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/werf/default.nix b/nixpkgs/pkgs/applications/networking/cluster/werf/default.nix
new file mode 100644
index 000000000000..632fcaee21d1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/werf/default.nix
@@ -0,0 +1,95 @@
+{ lib
+, stdenv
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, btrfs-progs
+, testers
+, werf
+}:
+
+buildGoModule rec {
+  pname = "werf";
+  version = "1.2.253";
+
+  src = fetchFromGitHub {
+    owner = "werf";
+    repo = "werf";
+    rev = "v${version}";
+    hash = "sha256-cHMMLV2NdYueL3qV0wpB4n0+2XZTvg4mfKTSgGZHqqY=";
+  };
+
+  vendorHash = "sha256-vuEqimNRWQGwybzOkGVoevpyVpU8XyXqhAIa7I66ajs=";
+
+  proxyVendor = true;
+
+  subPackages = [ "cmd/werf" ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildInputs = lib.optionals stdenv.isLinux [ btrfs-progs ]
+    ++ lib.optionals stdenv.hostPlatform.isGnu [ stdenv.cc.libc.static ];
+
+  CGO_ENABLED = if stdenv.isLinux then 1 else 0;
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/werf/werf/pkg/werf.Version=${src.rev}"
+  ] ++ lib.optionals (CGO_ENABLED == 1) [
+    "-extldflags=-static"
+    "-linkmode external"
+  ];
+
+  tags = [
+    "containers_image_openpgp"
+    "dfrunmount"
+    "dfrunnetwork"
+    "dfrunsecurity"
+    "dfssh"
+  ] ++ lib.optionals (CGO_ENABLED == 1) [
+    "exclude_graphdriver_devicemapper"
+    "netgo"
+    "no_devmapper"
+    "osusergo"
+    "static_build"
+  ];
+
+  preCheck = ''
+    # Test all targets.
+    unset subPackages
+
+    # Remove tests that require external services.
+    rm -rf \
+      integration/suites \
+      pkg/true_git/*test.go \
+      test/e2e
+  '' + lib.optionalString (CGO_ENABLED == 0) ''
+    # A workaround for osusergo.
+    export USER=nixbld
+  '';
+
+  postInstall = ''
+    installShellCompletion --cmd werf \
+      --bash <($out/bin/werf completion --shell=bash) \
+      --zsh <($out/bin/werf completion --shell=zsh)
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = werf;
+    command = "werf version";
+    version = src.rev;
+  };
+
+  meta = with lib; {
+    description = "GitOps delivery tool";
+    longDescription = ''
+      The CLI tool gluing Git, Docker, Helm & Kubernetes with any CI system to
+      implement CI/CD and Giterminism.
+    '';
+    homepage = "https://werf.io";
+    changelog = "https://github.com/werf/werf/releases/tag/${src.rev}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ azahi ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/yor/default.nix b/nixpkgs/pkgs/applications/networking/cluster/yor/default.nix
new file mode 100644
index 000000000000..9177ed8110da
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/yor/default.nix
@@ -0,0 +1,42 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "yor";
+  version = "0.1.185";
+
+  src = fetchFromGitHub {
+    owner = "bridgecrewio";
+    repo = pname;
+    rev = version;
+    hash = "sha256-5CBOLbqsEVzYyU67c7QTGTe471XQlEC/826wYCPHzEo=";
+  };
+
+  vendorHash = "sha256-ZeTjGmlu8LndD2DKNncPzlpECdvkOjfwaVvV6S3sL9E=";
+
+  doCheck = false;
+
+  # https://github.com/bridgecrewio/yor/blob/main/set-version.sh
+  preBuild = ''
+    cat << EOF > src/common/version.go
+    package common
+
+    const Version = "${version}"
+    EOF
+  '';
+
+  ldflags = [
+    "-s"
+    "-w"
+  ];
+
+  meta = with lib; {
+    description = "Extensible auto-tagger for your IaC files. The ultimate way to link entities in the cloud back to the codified resource which created it.";
+    homepage = "https://github.com/bridgecrewio/yor";
+    changelog = "https://github.com/bridgecrewio/yor/releases/tag/${version}";
+    license = licenses.asl20;
+    maintainers = [ maintainers.ivankovnatsky ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cluster/zarf/default.nix b/nixpkgs/pkgs/applications/networking/cluster/zarf/default.nix
new file mode 100644
index 000000000000..7d730763c16f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cluster/zarf/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "zarf";
+  version = "0.29.1";
+
+  src = fetchFromGitHub {
+    owner = "defenseunicorns";
+    repo = "zarf";
+    rev = "v${version}";
+    hash = "sha256-m/eyy3MpHHlxlWU9Y7tsQw5jGGZIKCvBkIgoRmvecBI=";
+  };
+
+  vendorHash = "sha256-p1QLNbkNlIwqHzLjGX5YGC2Xxu0nAjmMfGwKXhi9XkU=";
+  proxyVendor = true;
+
+  preBuild = ''
+    mkdir -p build/ui
+    touch build/ui/index.html
+  '';
+
+  doCheck = false;
+
+  ldflags = [ "-s" "-w" "-X" "github.com/defenseunicorns/zarf/src/config.CLIVersion=${src.rev}" "-X" "k8s.io/component-base/version.gitVersion=v0.0.0+zarf${src.rev}" "-X" "k8s.io/component-base/version.gitCommit=${src.rev}" "-X" "k8s.io/component-base/version.buildDate=1970-01-01T00:00:00Z" ];
+
+  meta = with lib; {
+    description = "DevSecOps for Air Gap & Limited-Connection Systems. https://zarf.dev";
+    homepage = "https://github.com/defenseunicorns/zarf.git";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ragingpastry ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/compactor/default.nix b/nixpkgs/pkgs/applications/networking/compactor/default.nix
new file mode 100644
index 000000000000..6ddc5b0c0098
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/compactor/default.nix
@@ -0,0 +1,72 @@
+{ lib, stdenv, fetchFromGitHub
+, asciidoctor, autoreconfHook, pkg-config
+, boost, libctemplate, libmaxminddb, libpcap, libtins, openssl, protobuf, xz, zlib, catch2
+, cbor-diag, cddl, diffutils, file, mktemp, netcat, tcpdump, wireshark-cli
+}:
+
+stdenv.mkDerivation rec {
+  pname = "compactor";
+  version = "1.2.3";
+
+  src = fetchFromGitHub {
+    owner = "dns-stats";
+    repo = pname;
+    rev = version;
+    fetchSubmodules = true;
+    hash = "sha256-5Z14suhO5ghhmZsSj4DsSoKm+ct2gQFO6qxhjmx4Xm4=";
+  };
+
+  nativeBuildInputs = [
+    asciidoctor
+    autoreconfHook
+    pkg-config
+  ];
+  buildInputs = [
+    boost
+    libctemplate
+    libmaxminddb
+    libpcap
+    libtins
+    openssl
+    protobuf
+    xz
+    zlib
+  ];
+
+  postPatch = ''
+    patchShebangs test-scripts/
+    cp ${catch2}/include/catch2/catch.hpp tests/catch.hpp
+  '';
+
+  preConfigure = ''
+    substituteInPlace configure \
+      --replace "/usr/bin/file" "${file}/bin/file"
+  '';
+
+  configureFlags = [
+    "--with-boost-libdir=${boost.out}/lib"
+    "--with-boost=${boost.dev}"
+  ];
+  enableParallelBuilding = true;
+
+  doCheck = !stdenv.isDarwin; # check-dnstap.sh failing on Darwin
+  nativeCheckInputs = [
+    cbor-diag
+    cddl
+    diffutils
+    file
+    mktemp
+    netcat
+    tcpdump
+    wireshark-cli
+  ];
+
+  meta = with lib; {
+    description = "Tools to capture DNS traffic and record it in C-DNS files";
+    homepage    = "https://dns-stats.org/";
+    changelog   = "https://github.com/dns-stats/${pname}/raw/${version}/ChangeLog.txt";
+    license     = licenses.mpl20;
+    maintainers = with maintainers; [ fdns ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/coreth/default.nix b/nixpkgs/pkgs/applications/networking/coreth/default.nix
new file mode 100644
index 000000000000..b06de9cdc675
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/coreth/default.nix
@@ -0,0 +1,45 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+, stdenv
+}:
+
+buildGoModule rec {
+  pname = "coreth";
+  version = "0.12.4";
+
+  src = fetchFromGitHub {
+    owner = "ava-labs";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-AcU/1/TBS0nT7bXYguM8KI4mBUQzvSTVwuQkzq3t3EY=";
+  };
+
+  # go mod vendor has a bug, see: golang/go#57529
+  proxyVendor = true;
+
+  vendorHash = "sha256-GVSI3yv7YzW2QPC26gA2C3TqjBnTxyiPzmW+hsGGdaQ=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/ava-labs/coreth/plugin/evm.Version=${version}"
+    "-X github.com/ava-labs/coreth/cmd/abigen.gitCommit=${version}"
+    "-X github.com/ava-labs/coreth/cmd/abigen.gitDate=1970-01-01"
+  ];
+
+  subPackages = [
+    "cmd/abigen"
+    "plugin"
+  ];
+
+  postInstall = "mv $out/bin/{plugin,evm}";
+
+  meta = with lib; {
+    description = "Code and wrapper to extract Ethereum blockchain functionalities without network/consensus, for building custom blockchain services";
+    homepage = "https://github.com/ava-labs/coreth";
+    changelog = "https://github.com/ava-labs/coreth/releases/tag/v${version}";
+    license = licenses.lgpl3Only;
+    maintainers = with maintainers; [ urandom ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cozy-drive/default.nix b/nixpkgs/pkgs/applications/networking/cozy-drive/default.nix
new file mode 100644
index 000000000000..c945576f32e1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cozy-drive/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, fetchurl
+, appimageTools
+}:
+
+let
+  pname = "cozydrive";
+  version = "3.38.0";
+  name = "${pname}-${version}";
+
+  src = fetchurl {
+    url = "https://github.com/cozy-labs/cozy-desktop/releases/download/v${version}/Cozy-Drive-${version}-x86_64.AppImage";
+    sha256 = "3liOzZVOjtV1cGrKlOKiFRRqnt8KHPr5Ye5HU0e/BYo=";
+  };
+  appimageContents = appimageTools.extract { inherit name src; };
+
+in
+appimageTools.wrapType2 {
+  inherit name src;
+  extraInstallCommands = ''
+    mv $out/bin/${name} $out/bin/${pname}
+    install -m 444 -D ${appimageContents}/cozydrive.desktop -t $out/share/applications
+    substituteInPlace $out/share/applications/cozydrive.desktop \
+      --replace 'Exec=AppRun' 'Exec=${pname}'
+    cp -r ${appimageContents}/usr/share/icons $out/share
+  '';
+
+  meta = with lib; {
+    description = "Cozy Drive is a synchronization tool for your files and folders with Cozy Cloud.";
+    homepage = "https://cozy.io";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ simarra ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/cyberduck/default.nix b/nixpkgs/pkgs/applications/networking/cyberduck/default.nix
new file mode 100644
index 000000000000..2fb966443718
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/cyberduck/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, stdenvNoCC
+, fetchurl
+, unzip
+}:
+stdenvNoCC.mkDerivation (finalAttrs: {
+  pname = "cyberduck";
+  version = "8.6.0.39818";
+
+  src = fetchurl {
+    url = "https://update.cyberduck.io/Cyberduck-${finalAttrs.version}.zip";
+    sha256 = "1iqq54n267lmmdlv8wmr9k461p49jindc1mn5wy742k08cqxc5ab";
+  };
+  dontUnpack = true;
+
+  nativeBuildInputs = [ unzip ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/Applications
+    unzip -d $out/Applications $src
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Libre file transfer client for Mac and Windows";
+    homepage = "https://cyberduck.io";
+    license = licenses.gpl3Plus;
+    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+    maintainers = with maintainers; [ emilytrau Enzime ];
+    platforms = platforms.darwin;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/networking/datovka/default.nix b/nixpkgs/pkgs/applications/networking/datovka/default.nix
new file mode 100644
index 000000000000..f86fd87573b3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/datovka/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, mkDerivation
+, fetchurl
+, libxml2
+, libdatovka
+, qmake
+, qtbase
+, qtwebsockets
+, qtsvg
+, pkg-config
+}:
+
+mkDerivation rec {
+  pname = "datovka";
+  version = "4.22.1";
+
+  src = fetchurl {
+    url = "https://gitlab.nic.cz/datovka/datovka/-/archive/v${version}/datovka-v${version}.tar.gz";
+    sha256 = "sha256-R18dBsfrMBcBB3EraC0tIJABwZBROFqi/fhm62IDa2g=";
+  };
+
+  buildInputs = [ libdatovka qmake qtbase qtsvg libxml2 qtwebsockets ];
+
+  nativeBuildInputs = [ pkg-config ];
+
+  meta = with lib; {
+    description = "Client application for operating Czech government-provided Databox infomation system";
+    homepage = "https://www.datovka.cz/";
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.mmahut ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/davmail/default.nix b/nixpkgs/pkgs/applications/networking/davmail/default.nix
new file mode 100644
index 000000000000..3f6c52a4d473
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/davmail/default.nix
@@ -0,0 +1,62 @@
+{ stdenv
+, fetchurl
+, lib
+, makeWrapper
+, unzip
+, glib
+, gtk2
+, gtk3
+, jre
+, libXtst
+, zulu
+, preferGtk3 ? true
+, preferZulu ? true
+}:
+
+let
+  rev = 3423;
+  jre' = if preferZulu then zulu else jre;
+  gtk' = if preferGtk3 then gtk3 else gtk2;
+
+  inherit (lib) makeLibraryPath versions;
+
+in
+stdenv.mkDerivation rec {
+  pname = "davmail";
+  version = "6.1.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${version}/${pname}-${version}-${toString rev}.zip";
+    sha256 = "sha256-/JsJFtGalNuOz21eeCPR/LvLueMtQAR7VSKN8SpnPvA=";
+  };
+
+  postPatch = ''
+    sed -i -e '/^JAVA_OPTS/d' davmail
+  '';
+
+  sourceRoot = ".";
+
+  nativeBuildInputs = [ makeWrapper unzip ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/share/davmail
+    cp -vR ./* $out/share/davmail
+    makeWrapper $out/share/davmail/davmail $out/bin/davmail \
+      --set-default JAVA_OPTS "-Xmx512M -Dsun.net.inetaddr.ttl=60 -Djdk.gtk.version=${lib.versions.major gtk'.version}" \
+      --prefix PATH : ${jre'}/bin \
+      --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ glib gtk' libXtst ]}
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A Java application which presents a Microsoft Exchange server as local CALDAV, IMAP and SMTP servers";
+    homepage = "https://davmail.sourceforge.net/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms = platforms.all;
+    mainProgram = "davmail";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/deck/default.nix b/nixpkgs/pkgs/applications/networking/deck/default.nix
new file mode 100644
index 000000000000..ba5204b66139
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/deck/default.nix
@@ -0,0 +1,39 @@
+{ buildGoModule, lib, installShellFiles, fetchFromGitHub }:
+let
+  short_hash = "63b9742";
+in buildGoModule rec {
+  pname = "deck";
+  version = "1.26.0";
+
+  src = fetchFromGitHub {
+    owner = "Kong";
+    repo = "deck";
+    rev = "v${version}";
+    hash = "sha256-DxmIHJfvRZKsMyFllbfpriT4Ts9f7ha4aZcfVr/b9eA=";
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  CGO_ENABLED = 0;
+
+  ldflags = [
+    "-s -w -X github.com/kong/deck/cmd.VERSION=${version}"
+    "-X github.com/kong/deck/cmd.COMMIT=${short_hash}"
+  ];
+
+  vendorHash = "sha256-jhLZvusYpX5fW1NCmJtwE/p9/wTwzA2hbwt657VsZts=";
+
+  postInstall = ''
+    installShellCompletion --cmd deck \
+      --bash <($out/bin/deck completion bash) \
+      --fish <($out/bin/deck completion fish) \
+      --zsh <($out/bin/deck completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "A configuration management and drift detection tool for Kong";
+    homepage = "https://github.com/Kong/deck";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ liyangau ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/discordo/default.nix b/nixpkgs/pkgs/applications/networking/discordo/default.nix
new file mode 100644
index 000000000000..c7de76d279a8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/discordo/default.nix
@@ -0,0 +1,39 @@
+{ lib, buildGoModule, fetchFromGitHub, nix-update-script, makeWrapper, xsel
+, wl-clipboard }:
+
+buildGoModule rec {
+  pname = "discordo";
+  version = "unstable-2023-04-07";
+
+  src = fetchFromGitHub {
+    owner = "ayn2op";
+    repo = pname;
+    rev = "f8c58057945b1ded2f78dc0956ea25aa281a0b31";
+    hash = "sha256-FUSPQK4rB0J89s+I7yhF8SQ/Q9uygQSCF9o6ltYxOk4=";
+  };
+
+  vendorHash = "sha256-fLhyyIChqh+eEzht3CSLPfx6glw0YhiTb9PsbWJafWQ=";
+
+  CGO_ENABLED = 0;
+
+  ldflags = [ "-s" "-w" ];
+
+  # Clipboard support on X11 and Wayland
+  nativeBuildInputs = [ makeWrapper ];
+
+  postInstall = ''
+    wrapProgram $out/bin/discordo \
+      --prefix PATH : ${lib.makeBinPath [ xsel wl-clipboard ]}
+  '';
+
+  passthru.updateScript = nix-update-script {
+    extraArgs = [ "--version=branch" ];
+  };
+
+  meta = with lib; {
+    description = "A lightweight, secure, and feature-rich Discord terminal client";
+    homepage = "https://github.com/ayn2op/discordo";
+    license = licenses.mit;
+    maintainers = [ maintainers.arian-d ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/diswall/default.nix b/nixpkgs/pkgs/applications/networking/diswall/default.nix
new file mode 100644
index 000000000000..f7ef51b7040f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/diswall/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub, darwin }:
+
+let
+  inherit (darwin.apple_sdk.frameworks) Security;
+in
+rustPlatform.buildRustPackage rec {
+  pname = "diswall";
+  version = "0.4.2";
+
+  src = fetchFromGitHub {
+    owner = "dis-works";
+    repo = "diswall-rs";
+    rev = "v${version}";
+    sha256 = "sha256-uWGpSpT8TyEkF5OI2enZwbcsyoHIemC0Dm1LExi+AC8=";
+  };
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    Security
+  ];
+
+  cargoHash = "sha256-Te2mqrBKHDKbFaO0ZNV2C6AHz07v1jWCMm05YiXg+w0=";
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Distributed firewall";
+    longDescription = ''
+      Diswall (distributed firewall) - a client of distributed firewall
+      working on many servers and using NATS for the transport level.
+      Its purpose - blocking IPs with a blink of the eye on all servers
+      in any infrastructure when some IP checks any of the closed ports
+      of anyone of these servers. Therefore, diswall provides good
+      protection of whole infrastructure (as anti-shodan) preventing
+      intruder to get any system information.
+    '';
+    homepage = "https://www.diswall.stream";
+    license = with licenses; [ gpl3 ];
+    maintainers = with maintainers; [ izorkin ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/dnscontrol/default.nix b/nixpkgs/pkgs/applications/networking/dnscontrol/default.nix
new file mode 100644
index 000000000000..4b9b37925910
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/dnscontrol/default.nix
@@ -0,0 +1,33 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "dnscontrol";
+  version = "4.3.0";
+
+  src = fetchFromGitHub {
+    owner = "StackExchange";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-poLRt/T7BGzcIBjBcm943XnSurO3DJOx2QyqjDcqNRo=";
+  };
+
+  vendorHash = "sha256-3xT5WPBcEclXad8zBA+T7/M6fDmfMWljV8NuxvtvTsA=";
+
+  subPackages = [ "." ];
+
+  ldflags = [ "-s" "-w" "-X=main.Version=${version}" ];
+
+  preCheck = ''
+    # requires network
+    rm pkg/spflib/flatten_test.go pkg/spflib/parse_test.go
+  '';
+
+  meta = with lib; {
+    description = "Synchronize your DNS to multiple providers from a simple DSL";
+    homepage = "https://dnscontrol.org/";
+    changelog = "https://github.com/StackExchange/dnscontrol/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ mmahut SuperSandro2000 ];
+    mainProgram = "dnscontrol";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/drive/default.nix b/nixpkgs/pkgs/applications/networking/drive/default.nix
new file mode 100644
index 000000000000..b90be9e2a55d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/drive/default.nix
@@ -0,0 +1,34 @@
+{ lib, buildGoModule, fetchFromGitHub, fetchpatch }:
+
+buildGoModule rec {
+  pname = "drive";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "odeke-em";
+    repo = "drive";
+    rev = "v${version}";
+    hash = "sha256-mNOeOB0Tn5eqULFJZuE18PvLoHtnspv4AElmgEQKXcU=";
+  };
+
+  vendorHash = "sha256-F/ikdr7UCVlNv2yiEemyB7eIkYi3mX+rJvSfX488RFc=";
+
+  patches = [
+    # Add Go Modules support
+    (fetchpatch {
+      url = "https://github.com/odeke-em/drive/commit/0fb4bb2cf83a7293d9a33b00f8fc07e1c8dd8b7c.patch";
+      hash = "sha256-4PxsgfufhTfmy/7N5QahIhmRa0rb2eUDXJ66pYb6jFg=";
+    })
+  ];
+
+  subPackages = [ "cmd/drive" ];
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/odeke-em/drive";
+    description = "Google Drive client for the commandline";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ aaronjheng ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/droopy/default.nix b/nixpkgs/pkgs/applications/networking/droopy/default.nix
new file mode 100644
index 000000000000..47298fb4dbc2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/droopy/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, lib, fetchFromGitHub, wrapPython, fetchpatch }:
+
+stdenv.mkDerivation {
+  pname = "droopy";
+  version = "20160830";
+
+  src = fetchFromGitHub {
+    owner = "stackp";
+    repo = "Droopy";
+    rev = "7a9c7bc46c4ff8b743755be86a9b29bd1a8ba1d9";
+    sha256 = "03i1arwyj9qpfyyvccl21lbpz3rnnp1hsadvc0b23nh1z2ng9sff";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://patch-diff.githubusercontent.com/raw/stackp/Droopy/pull/30.patch";
+      sha256 = "Y6jBraKvVQAiScbvLwezSKeWY3vaAbhaNXEGNaItigQ=";
+    })
+    (fetchpatch {
+      url = "https://patch-diff.githubusercontent.com/raw/stackp/Droopy/pull/31.patch";
+      sha256 = "1ig054rxn5r0ph4w4fhmrxlh158c97iqqc7dbnc819adn9nw96l5";
+    })
+  ];
+
+  nativeBuildInputs = [ wrapPython ];
+
+  installPhase = ''
+    install -vD droopy $out/bin/droopy
+    install -vD -m 644 man/droopy.1 $out/share/man/man1/droopy.1
+    wrapPythonPrograms
+  '';
+
+  meta = with lib; {
+    description = "Mini Web server that let others upload files to your computer";
+    homepage = "http://stackp.online.fr/droopy";
+    license = licenses.bsd3;
+    maintainers = [ maintainers.Profpatsch ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/networking/dropbox/cli.nix b/nixpkgs/pkgs/applications/networking/dropbox/cli.nix
new file mode 100644
index 000000000000..c6b0baa9d3f6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/dropbox/cli.nix
@@ -0,0 +1,76 @@
+{ lib, stdenv
+, substituteAll
+, autoreconfHook
+, pkg-config
+, fetchurl
+, python3
+, dropbox
+, gtk3
+, gnome
+, gdk-pixbuf
+, gobject-introspection
+}:
+
+let
+  version = "2020.03.04";
+  dropboxd = "${dropbox}/bin/dropbox";
+in
+stdenv.mkDerivation {
+  pname = "dropbox-cli";
+  inherit version;
+
+  outputs = [ "out" "nautilusExtension" ];
+
+  src = fetchurl {
+    url = "https://linux.dropbox.com/packages/nautilus-dropbox-${version}.tar.bz2";
+    sha256 = "1jjc835n2j61d23kvygdb4n4jsrw33r9mbwxrm4fqin6x01l2w7k";
+  };
+
+  strictDeps = true;
+
+  patches = [
+    # Fix extension for Nautilus 43
+    # https://github.com/dropbox/nautilus-dropbox/pull/105
+    ./nautilus-43.patch
+
+    (substituteAll {
+      src = ./fix-cli-paths.patch;
+      inherit dropboxd;
+    })
+  ];
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+    gobject-introspection
+    gdk-pixbuf
+    # only for build, the install command also wants to use GTK through introspection
+    # but we are using Nix for installation so we will not need that.
+    (python3.withPackages (ps: with ps; [
+      docutils
+      pygobject3
+    ]))
+  ];
+
+  buildInputs = [
+    python3
+    gtk3
+    gnome.nautilus
+  ];
+
+  configureFlags = [
+    "--with-nautilus-extension-dir=${placeholder "nautilusExtension"}/lib/nautilus/extensions-3.0"
+  ];
+
+  makeFlags = [
+    "EMBLEM_DIR=${placeholder "nautilusExtension"}/share/nautilus-dropbox/emblems"
+  ];
+
+  meta = {
+    homepage = "https://www.dropbox.com";
+    description = "Command line client for the dropbox daemon";
+    license = lib.licenses.gpl3Plus;
+    # NOTE: Dropbox itself only works on linux, so this is ok.
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/dropbox/default.nix b/nixpkgs/pkgs/applications/networking/dropbox/default.nix
new file mode 100644
index 000000000000..cf2edf767316
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/dropbox/default.nix
@@ -0,0 +1,91 @@
+{ stdenv, lib, buildFHSEnv, writeScript, makeDesktopItem }:
+
+let platforms = [ "i686-linux" "x86_64-linux" ]; in
+
+assert lib.elem stdenv.hostPlatform.system platforms;
+
+# Dropbox client to bootstrap installation.
+# The client is self-updating, so the actual version may be newer.
+let
+  version = "111.3.447";
+
+  arch = {
+    x86_64-linux = "x86_64";
+    i686-linux   = "x86";
+  }.${stdenv.hostPlatform.system};
+
+  installer = "https://clientupdates.dropboxstatic.com/dbx-releng/client/dropbox-lnx.${arch}-${version}.tar.gz";
+in
+
+let
+  desktopItem = makeDesktopItem {
+    name = "dropbox";
+    exec = "dropbox";
+    comment = "Sync your files across computers and to the web";
+    desktopName = "Dropbox";
+    genericName = "File Synchronizer";
+    categories = [ "Network" "FileTransfer" ];
+    startupNotify = false;
+    icon = "dropbox";
+  };
+in
+
+buildFHSEnv {
+  name = "dropbox";
+
+  # dropbox-cli (i.e. nautilus-dropbox) needs the PID to confirm dropbox is running.
+  # Dropbox's internal limit-to-one-instance check also relies on the PID.
+  unsharePid = false;
+
+  targetPkgs = pkgs: with pkgs; with xorg; [
+    libICE libSM libX11 libXcomposite libXdamage libXext libXfixes libXrender
+    libXxf86vm libxcb xkeyboardconfig
+    curl dbus firefox-bin fontconfig freetype gcc glib gnutar libxml2 libxslt
+    procps zlib mesa libxshmfence libpthreadstubs libappindicator
+  ];
+
+  extraInstallCommands = ''
+    mkdir -p "$out/share/applications"
+    cp "${desktopItem}/share/applications/"* $out/share/applications
+  '';
+
+  runScript = writeScript "install-and-start-dropbox" ''
+    export BROWSER=firefox
+
+    set -e
+
+    do_install=
+    if ! [ -d "$HOME/.dropbox-dist" ]; then
+        do_install=1
+    else
+        installed_version=$(cat "$HOME/.dropbox-dist/VERSION")
+        latest_version=$(printf "${version}\n$installed_version\n" | sort -rV | head -n 1)
+        if [ "x$installed_version" != "x$latest_version" ]; then
+            do_install=1
+        fi
+    fi
+
+    if [ -n "$do_install" ]; then
+        installer=$(mktemp)
+        # Dropbox is not installed.
+        # Download and unpack the client. If a newer version is available,
+        # the client will update itself when run.
+        curl '${installer}' >"$installer"
+        pkill dropbox || true
+        rm -fr "$HOME/.dropbox-dist"
+        tar -C "$HOME" -x -z -f "$installer"
+        rm "$installer"
+    fi
+
+    exec "$HOME/.dropbox-dist/dropboxd" "$@"
+  '';
+
+  meta = with lib; {
+    description = "Online stored folders (daemon version)";
+    homepage    = "http://www.dropbox.com/";
+    license     = licenses.unfree;
+    maintainers = with maintainers; [ ttuegel ];
+    platforms   = [ "i686-linux" "x86_64-linux" ];
+    mainProgram = "dropbox";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/dropbox/fix-cli-paths.patch b/nixpkgs/pkgs/applications/networking/dropbox/fix-cli-paths.patch
new file mode 100644
index 000000000000..84cd8014e1e6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/dropbox/fix-cli-paths.patch
@@ -0,0 +1,11 @@
+--- a/dropbox.in
++++ b/dropbox.in
+@@ -71,7 +71,7 @@
+ 
+ PARENT_DIR = os.path.expanduser("~")
+ DROPBOX_DIST_PATH = "%s/.dropbox-dist" % PARENT_DIR
+-DROPBOXD_PATH = os.path.join(DROPBOX_DIST_PATH, "dropboxd")
++DROPBOXD_PATH = "@dropboxd@"
+ DESKTOP_FILE = "@DESKTOP_FILE_DIR@/dropbox.desktop"
+ 
+ enc = locale.getpreferredencoding()
diff --git a/nixpkgs/pkgs/applications/networking/dropbox/nautilus-43.patch b/nixpkgs/pkgs/applications/networking/dropbox/nautilus-43.patch
new file mode 100644
index 000000000000..b4b557843197
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/dropbox/nautilus-43.patch
@@ -0,0 +1,195 @@
+diff --git a/configure.ac b/configure.ac
+index 025289c..42b49fa 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -12,7 +12,7 @@ AM_CONFIG_HEADER(config.h)
+ #AC_PROG_INTLTOOL([0.29])
+ 
+ # Dependency checks
+-NAUTILUS_REQUIRED=2.16.0
++NAUTILUS_REQUIRED=43.rc
+ GLIB_REQUIRED=2.14.0
+ 
+ # Used programs
+@@ -26,8 +26,11 @@ if test "x$HAVE_PKGCONFIG" = "xno"; then
+ 	AC_MSG_ERROR(you need to have pkgconfig installed !)
+ fi
+ 
+-PKG_CHECK_MODULES(NAUTILUS, libnautilus-extension >= $NAUTILUS_REQUIRED)
++PKG_CHECK_MODULES(NAUTILUS, libnautilus-extension-4 >= $NAUTILUS_REQUIRED)
+ PKG_CHECK_MODULES(GLIB, glib-2.0 >= $GLIB_REQUIRED)
++PKG_CHECK_MODULES(GTK, gtk4 >= 4.6.0)
++
++AC_SUBST(GTK_CFLAGS)
+ 
+ AC_PATH_PROG([PYTHON3], [python3])
+ 
+@@ -84,10 +87,10 @@ AC_MSG_CHECKING([for nautilus extension directory])
+ if test -n "$with_nautilus_extension_dir"; then
+     NAUTILUS_EXTENSION_DIR=$with_nautilus_extension_dir
+ else
+-    NAUTILUS_EXTENSION_DIR=`$PKG_CONFIG --variable=extensiondir libnautilus-extension`
++    NAUTILUS_EXTENSION_DIR=`$PKG_CONFIG --variable=extensiondir libnautilus-extension-4`
+ fi
+ if test -z "$NAUTILUS_EXTENSION_DIR"; then
+-    NAUTILUS_EXTENSION_DIR='${exec_prefix}/lib/nautilus/extension-1.0'
++    NAUTILUS_EXTENSION_DIR='${exec_prefix}/lib/nautilus/extension-4'
+ fi
+ 
+ AC_MSG_RESULT([${NAUTILUS_EXTENSION_DIR}])
+diff --git a/src/Makefile.am b/src/Makefile.am
+index 15d6687..c521ec5 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -13,6 +13,7 @@ libnautilus_dropbox_la_CFLAGS = 	                \
+ 	$(WARN_CFLAGS)                                  \
+ 	$(DISABLE_DEPRECATED_CFLAGS)					\
+ 	$(NAUTILUS_CFLAGS)                              \
++	$(GTK_CFLAGS)                              \
+ 	$(GLIB_CFLAGS)
+ 
+ if DEBUG
+diff --git a/src/dropbox.c b/src/dropbox.c
+index 0d59559..8162aa9 100644
+--- a/src/dropbox.c
++++ b/src/dropbox.c
+@@ -27,9 +27,6 @@
+ 
+ #include <glib-object.h>
+ 
+-#include <gdk/gdk.h>
+-#include <gtk/gtk.h>
+-
+ #include "nautilus-dropbox.h"
+ 
+ static GType type_list[1];
+@@ -41,9 +38,6 @@ nautilus_module_initialize (GTypeModule *module) {
+   nautilus_dropbox_register_type (module);
+   type_list[0] = NAUTILUS_TYPE_DROPBOX;
+ 
+-  dropbox_use_nautilus_submenu_workaround
+-    = (NAUTILUS_VERSION_MAJOR < 2 ||
+-       (NAUTILUS_VERSION_MAJOR == 2 && NAUTILUS_VERSION_MINOR <= 22));
+   dropbox_use_operation_in_progress_workaround = TRUE;
+ }
+ 
+diff --git a/src/nautilus-dropbox.c b/src/nautilus-dropbox.c
+index c75ccbf..b9c10b4 100644
+--- a/src/nautilus-dropbox.c
++++ b/src/nautilus-dropbox.c
+@@ -37,9 +37,7 @@
+ #include <glib-object.h>
+ #include <gtk/gtk.h>
+ 
+-#include <libnautilus-extension/nautilus-extension-types.h>
+-#include <libnautilus-extension/nautilus-menu-provider.h>
+-#include <libnautilus-extension/nautilus-info-provider.h>
++#include <nautilus-extension.h>
+ 
+ #include "g-util.h"
+ #include "dropbox-command-client.h"
+@@ -49,7 +47,7 @@
+ static char *emblems[] = {"dropbox-uptodate", "dropbox-syncing", "dropbox-unsyncable"};
+ gchar *DEFAULT_EMBLEM_PATHS[2] = { EMBLEMDIR , NULL };
+ 
+-gboolean dropbox_use_nautilus_submenu_workaround;
++
+ gboolean dropbox_use_operation_in_progress_workaround;
+ 
+ static GType dropbox_type = 0;
+@@ -630,13 +628,6 @@ nautilus_dropbox_parse_menu(gchar			**options,
+ 	g_object_set_property (G_OBJECT(item), "sensitive", &sensitive);
+       }
+ 
+-      /* taken from nautilus-file-repairer (http://repairer.kldp.net/):
+-       * this code is a workaround for a bug of nautilus
+-       * See: http://bugzilla.gnome.org/show_bug.cgi?id=508878 */
+-      if (dropbox_use_nautilus_submenu_workaround) {
+-	toret = g_list_append(toret, item);
+-      }
+-
+       g_object_unref(item);
+       g_string_free(new_action_string, TRUE);
+       ret++;
+@@ -661,7 +652,6 @@ get_file_items_callback(GHashTable *response, gpointer ud)
+ 
+ static GList *
+ nautilus_dropbox_get_file_items(NautilusMenuProvider *provider,
+-                                GtkWidget            *window,
+ 				GList                *files)
+ {
+   /*
+@@ -778,14 +768,13 @@ add_emblem_paths(GHashTable* emblem_paths_response)
+ 
+   gchar **emblem_paths_list;
+   int i;
+-
+-  GtkIconTheme *theme = gtk_icon_theme_get_default();
++  GtkIconTheme *theme = gtk_icon_theme_get_for_display (gdk_display_get_default ());
+ 
+   if (emblem_paths_response &&
+       (emblem_paths_list = g_hash_table_lookup(emblem_paths_response, "path"))) {
+       for (i = 0; emblem_paths_list[i] != NULL; i++) {
+ 	if (emblem_paths_list[i][0])
+-	  gtk_icon_theme_append_search_path(theme, emblem_paths_list[i]);
++	  gtk_icon_theme_add_search_path(theme, emblem_paths_list[i]);
+       }
+   }
+   g_hash_table_unref(emblem_paths_response);
+@@ -804,15 +793,14 @@ remove_emblem_paths(GHashTable* emblem_paths_response)
+       goto exit;
+ 
+   // We need to remove the old paths.
+-  GtkIconTheme * icon_theme = gtk_icon_theme_get_default();
+   gchar ** paths;
+-  gint path_count;
++  GtkIconTheme *theme = gtk_icon_theme_get_for_display (gdk_display_get_default ());
+ 
+-  gtk_icon_theme_get_search_path(icon_theme, &paths, &path_count);
++  paths = gtk_icon_theme_get_search_path(theme);
+ 
+   gint i, j, out = 0;
+   gboolean found = FALSE;
+-  for (i = 0; i < path_count; i++) {
++  for (i = 0; paths[i] != NULL; i++) {
+       gboolean keep = TRUE;
+       for (j = 0; emblem_paths_list[j] != NULL; j++) {
+ 	  if (emblem_paths_list[j][0]) {
+@@ -834,7 +822,7 @@ remove_emblem_paths(GHashTable* emblem_paths_response)
+      accomodate the changes */
+   if (found) {
+     paths[out] = NULL; /* Clear the last one */
+-    gtk_icon_theme_set_search_path(icon_theme, (const gchar **)paths, out);
++    gtk_icon_theme_set_search_path(theme, (const gchar **)paths);
+   }
+ 
+   g_strfreev(paths);
+@@ -888,13 +876,13 @@ on_disconnect(NautilusDropbox *cvs) {
+ 
+ 
+ static void
+-nautilus_dropbox_menu_provider_iface_init (NautilusMenuProviderIface *iface) {
++nautilus_dropbox_menu_provider_iface_init (NautilusMenuProviderInterface *iface) {
+   iface->get_file_items = nautilus_dropbox_get_file_items;
+   return;
+ }
+ 
+ static void
+-nautilus_dropbox_info_provider_iface_init (NautilusInfoProviderIface *iface) {
++nautilus_dropbox_info_provider_iface_init (NautilusInfoProviderInterface *iface) {
+   iface->update_file_info = nautilus_dropbox_update_file_info;
+   iface->cancel_update = nautilus_dropbox_cancel_update;
+   return;
+diff --git a/src/nautilus-dropbox.h b/src/nautilus-dropbox.h
+index 65734be..44faa27 100644
+--- a/src/nautilus-dropbox.h
++++ b/src/nautilus-dropbox.h
+@@ -27,7 +27,7 @@
+ #include <glib.h>
+ #include <glib-object.h>
+ 
+-#include <libnautilus-extension/nautilus-info-provider.h>
++#include <nautilus-extension.h>
+ 
+ #include "dropbox-command-client.h"
+ #include "nautilus-dropbox-hooks.h"
diff --git a/nixpkgs/pkgs/applications/networking/dsvpn/default.nix b/nixpkgs/pkgs/applications/networking/dsvpn/default.nix
new file mode 100644
index 000000000000..f165e6a59942
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/dsvpn/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "dsvpn";
+  version = "0.1.4";
+
+  src = fetchFromGitHub {
+    owner = "jedisct1";
+    repo = pname;
+    rev = version;
+    sha256 = "1gbj3slwmq990qxsbsaxasi98alnnzv3adp6f8w8sxd4gi6qxhdh";
+  };
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 -t $out/bin dsvpn
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A Dead Simple VPN";
+    homepage = "https://github.com/jedisct1/dsvpn";
+    license = licenses.mit;
+    maintainers = [ maintainers.marsam ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/dyndns/cfdyndns/default.nix b/nixpkgs/pkgs/applications/networking/dyndns/cfdyndns/default.nix
new file mode 100644
index 000000000000..af52ed7b64ba
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/dyndns/cfdyndns/default.nix
@@ -0,0 +1,25 @@
+{ lib, fetchFromGitHub, rustPlatform, pkg-config, openssl }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cfdyndns";
+  version = "0.0.4";
+  src = fetchFromGitHub {
+    owner = "colemickens";
+    repo = "cfdyndns";
+    rev = "v${version}";
+    hash = "sha256-kgpTKhMvxuy+Q9M5U/PKJt7pZ2kSQxkCNjNu8aIyutg=";
+  };
+
+  cargoHash = "sha256-78TQkRHEbSaCyCM48hH1h8GG0BGJmC2zc7gTZc2t9Nc=";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ openssl ];
+
+  meta = with lib; {
+    description = "CloudFlare Dynamic DNS Client";
+    homepage = "https://github.com/colemickens/cfdyndns";
+    license = lib.licenses.mit;
+    maintainers = with maintainers; [ colemickens ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/dyndns/dyndnsc/default.nix b/nixpkgs/pkgs/applications/networking/dyndns/dyndnsc/default.nix
new file mode 100644
index 000000000000..776bfd501b00
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/dyndns/dyndnsc/default.nix
@@ -0,0 +1,60 @@
+{ lib, python3Packages, fetchPypi, stdenv }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "dyndnsc";
+  version = "0.6.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "13078d29eea2f9a4ca01f05676c3309ead5e341dab047e0d51c46f23d4b7fbb4";
+  };
+
+  postPatch = ''
+    substituteInPlace setup.py --replace "bottle==" "bottle>="
+  '';
+
+  nativeBuildInputs = with python3Packages; [ pytest-runner ];
+  propagatedBuildInputs = with python3Packages; [
+    daemonocle
+    dnspython
+    netifaces
+    requests
+    json-logging
+    setuptools
+  ];
+  nativeCheckInputs = with python3Packages; [ bottle mock pytest-console-scripts pytestCheckHook ];
+
+  disabledTests = [
+    # dnswanip connects to an external server to discover the
+    # machine's IP address.
+    "dnswanip"
+  ] ++ lib.optionals stdenv.isDarwin [
+    # The tests that spawn a server using Bottle cannot be run on
+    # macOS or Windows as the default multiprocessing start method
+    # on those platforms is 'spawn', which requires the code to be
+    # run to be picklable, which this code isn't.
+    # Additionaly, other start methods are unsafe and prone to failure
+    # on macOS; see https://bugs.python.org/issue33725.
+    "BottleServer"
+  ];
+  # Allow tests that bind or connect to localhost on macOS.
+  __darwinAllowLocalNetworking = true;
+
+  meta = with lib; {
+    description = "Dynamic DNS update client with support for multiple protocols";
+    longDescription = ''
+      Dyndnsc is a command line client for sending updates to Dynamic
+      DNS (DDNS, DynDNS) services.  It supports multiple protocols and
+      services, and it has native support for IPv6.  The configuration
+      file allows using foreign, but compatible services.  Dyndnsc
+      ships many different IP detection mechanisms, support for
+      configuring multiple services in one place and it has a daemon
+      mode for running unattended.  It has a plugin system to provide
+      external notification services.
+    '';
+    homepage = "https://github.com/infothrill/python-dyndnsc";
+    license = licenses.mit;
+    maintainers = with maintainers; [ AluisioASG ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/errbot/default.nix b/nixpkgs/pkgs/applications/networking/errbot/default.nix
new file mode 100644
index 000000000000..7085ac5f38ba
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/errbot/default.nix
@@ -0,0 +1,72 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "errbot";
+  version = "6.1.9";
+
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "errbotio";
+    repo = "errbot";
+    rev = version;
+    hash = "sha256-BmHChLWWnrtg0p4WH8bANwpo+p4RTwjYbXfyPnz6mp8=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    pythonRelaxDepsHook
+  ];
+
+  pythonRelaxDeps = true;
+
+  propagatedBuildInputs = with python3.pkgs; [
+    ansi
+    colorlog
+    daemonize
+    deepmerge
+    dulwich
+    flask
+    irc
+    jinja2
+    markdown
+    pyasn1
+    pyasn1-modules
+    pygments
+    pygments-markdown-lexer
+    pyopenssl
+    requests
+    slixmpp
+    python-telegram-bot
+    webtest
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    mock
+    pytestCheckHook
+  ];
+
+  # errbot-backend-slackv3 has not been packaged
+  pytestFlagsArray = [ "--ignore=tests/backend_tests/slack_test.py" ];
+
+  disabledTests = [
+    # require networking
+    "test_backup"
+    "test_broken_plugin"
+    "test_plugin_cycle"
+  ];
+
+  pythonImportsCheck = [ "errbot" ];
+
+  meta = with lib; {
+    changelog = "https://github.com/errbotio/errbot/blob/${version}/CHANGES.rst";
+    description = "Chatbot designed to be simple to extend with plugins written in Python";
+    homepage = "http://errbot.io/";
+    maintainers = with maintainers; [ globin ];
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    # flaky on darwin, "RuntimeError: can't start new thread"
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/expressvpn/default.nix b/nixpkgs/pkgs/applications/networking/expressvpn/default.nix
new file mode 100644
index 000000000000..5334fc01ffc4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/expressvpn/default.nix
@@ -0,0 +1,98 @@
+{ autoPatchelfHook
+, buildFHSEnv
+, dpkg
+, fetchurl
+, inotify-tools
+, lib
+, stdenvNoCC
+, sysctl
+, writeScript
+}:
+
+let
+  pname = "expressvpn";
+  clientVersion = "3.52.0";
+  clientBuild = "2";
+  version = lib.strings.concatStringsSep "." [ clientVersion clientBuild ];
+
+  expressvpnBase = stdenvNoCC.mkDerivation {
+    inherit pname version;
+
+    src = fetchurl {
+      url = "https://www.expressvpn.works/clients/linux/expressvpn_${version}-1_amd64.deb";
+      hash = "sha256-cDZ9R+MA3FXEto518bH4/c1X4W9XxgTvXns7zisylew=";
+    };
+
+    nativeBuildInputs = [ dpkg autoPatchelfHook ];
+
+    dontConfigure = true;
+    dontBuild = true;
+
+    unpackPhase = ''
+      runHook preUnpack
+      dpkg --fsys-tarfile $src | tar --extract
+      runHook postUnpack
+    '';
+
+    installPhase = ''
+      runHook preInstall
+      mv usr/ $out/
+      runHook postInstall
+    '';
+  };
+
+  expressvpndFHS = buildFHSEnv {
+    name = "expressvpnd";
+
+    # When connected, it directly creates/deletes resolv.conf to change the DNS entries.
+    # Since it's running in an FHS environment, it has no effect on actual resolv.conf.
+    # Hence, place a watcher that updates host resolv.conf when FHS resolv.conf changes.
+    runScript = writeScript "${pname}-wrapper" ''
+      cp /host/etc/resolv.conf /etc/resolv.conf;
+      while inotifywait /etc 2>/dev/null;
+      do
+        cp /etc/resolv.conf /host/etc/resolv.conf;
+      done &
+      expressvpnd --client-version ${clientVersion} --client-build ${clientBuild}
+    '';
+
+    # expressvpnd binary has hard-coded the path /sbin/sysctl hence below workaround.
+    extraBuildCommands = ''
+      chmod +w sbin
+      ln -s ${sysctl}/bin/sysctl sbin/sysctl
+    '';
+
+    # The expressvpnd binary also uses hard-coded paths to the other binaries and files
+    # it ships with, hence the FHS environment.
+
+    targetPkgs = pkgs: with pkgs; [
+      expressvpnBase
+      inotify-tools
+      iproute2
+    ];
+  };
+in
+stdenvNoCC.mkDerivation {
+  inherit pname version;
+
+  dontUnpack = true;
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/bin $out/share
+    ln -s ${expressvpnBase}/bin/expressvpn $out/bin
+    ln -s ${expressvpndFHS}/bin/expressvpnd $out/bin
+    ln -s ${expressvpnBase}/share/{bash-completion,doc,man} $out/share/
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "CLI client for ExpressVPN";
+    homepage = "https://www.expressvpn.com";
+    license = licenses.unfree;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ yureien ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/feedreaders/canto-curses/default.nix b/nixpkgs/pkgs/applications/networking/feedreaders/canto-curses/default.nix
new file mode 100644
index 000000000000..729d12c1e5b9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/feedreaders/canto-curses/default.nix
@@ -0,0 +1,32 @@
+{ lib, fetchFromGitHub, python3Packages, readline, ncurses, canto-daemon }:
+
+python3Packages.buildPythonApplication rec {
+  version = "0.9.9";
+  pname = "canto-curses";
+
+  src = fetchFromGitHub {
+    owner = "themoken";
+    repo = "canto-curses";
+    rev = "v${version}";
+    sha256 = "1vzb9n1j4gxigzll6654ln79lzbrrm6yy0lyazd9kldyl349b8sr";
+  };
+
+  buildInputs = [ readline ncurses canto-daemon ];
+  propagatedBuildInputs = [ canto-daemon ];
+
+  meta = {
+    description = "An ncurses-based console Atom/RSS feed reader";
+    longDescription = ''
+      Canto is an Atom/RSS feed reader for the console that is meant to be
+      quick, concise, and colorful. It's meant to allow you to crank through
+      feeds like you've never cranked before by providing a minimal, yet
+      information packed interface. No navigating menus. No dense blocks of
+      unreadable white text. An interface with almost infinite customization
+      and extensibility using the excellent Python programming language.
+    '';
+    homepage = "https://codezen.org/canto-ng/";
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
+    maintainers = [ lib.maintainers.devhell ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/feedreaders/canto-daemon/default.nix b/nixpkgs/pkgs/applications/networking/feedreaders/canto-daemon/default.nix
new file mode 100644
index 000000000000..5eb8c9d74379
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/feedreaders/canto-daemon/default.nix
@@ -0,0 +1,35 @@
+{ lib, fetchFromGitHub, python3Packages, }:
+
+python3Packages.buildPythonApplication rec {
+  version = "0.9.8";
+  pname = "canto-daemon";
+
+  src = fetchFromGitHub {
+    owner = "themoken";
+    repo = "canto-next";
+    rev = "v${version}";
+    sha256 = "0fmsdn28z09bvivdkqcla5bnalky7k744iir25z70bv4pz1jcvnk";
+  };
+
+  propagatedBuildInputs = with python3Packages; [ feedparser ];
+
+  doCheck = false;
+
+  pythonImportsCheck = [ "canto_next" ];
+
+  meta = with lib; {
+    description = "Daemon for the canto Atom/RSS feed reader";
+    longDescription = ''
+      Canto is an Atom/RSS feed reader for the console that is meant to be
+      quick, concise, and colorful. It's meant to allow you to crank through
+      feeds like you've never cranked before by providing a minimal, yet
+      information packed interface. No navigating menus. No dense blocks of
+      unreadable white text. An interface with almost infinite customization
+      and extensibility using the excellent Python programming language.
+    '';
+    homepage = "https://codezen.org/canto-ng/";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers;[ devhell ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/feedreaders/castget/default.nix b/nixpkgs/pkgs/applications/networking/feedreaders/castget/default.nix
new file mode 100644
index 000000000000..e79a387e07f5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/feedreaders/castget/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, stdenv
+, fetchurl
+, pkg-config
+, glib
+, ronn
+, curl
+, id3lib
+, libxml2
+, glibcLocales
+}:
+
+stdenv.mkDerivation rec {
+  pname = "castget";
+  version = "2.0.1";
+
+  src = fetchurl {
+    url = "http://savannah.nongnu.org/download/castget/castget-${version}.tar.bz2";
+    hash = "sha256-Q4tffsfjGkXtN1ZjD+RH9CAVrNpT7AkgL0hihya16HU=";
+  };
+
+  # without this, the build fails because of an encoding issue with the manual page.
+  # https://stackoverflow.com/a/17031697/4935114
+  # This requires glibcLocales to be present in the build so it will have an impact.
+  # See https://github.com/NixOS/nixpkgs/issues/8398
+  preBuild = ''
+    export LC_ALL="en_US.UTF-8";
+  '';
+
+  buildInputs = [
+    glib
+    curl
+    id3lib
+    libxml2
+  ];
+  nativeBuildInputs = [
+    ronn
+    # See comment on locale above
+    glibcLocales
+    pkg-config
+  ];
+
+  meta = with lib; {
+    description = "A simple, command-line based RSS enclosure downloader";
+    longDescription = ''
+      castget is a simple, command-line based RSS enclosure downloader. It is
+      primarily intended for automatic, unattended downloading of podcasts.
+    '';
+    homepage = "https://castget.johndal.com/";
+    maintainers = with maintainers; [ doronbehar ];
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/feedreaders/feed2imap-go/default.nix b/nixpkgs/pkgs/applications/networking/feedreaders/feed2imap-go/default.nix
new file mode 100644
index 000000000000..b0bce2b71c5e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/feedreaders/feed2imap-go/default.nix
@@ -0,0 +1,33 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "feed2imap-go";
+  version = "1.7.0";
+
+  src = fetchFromGitHub {
+    owner = "Necoro";
+    repo = "feed2imap-go";
+    rev = "v${version}";
+    sha256 = "sha256-Qtpg8DvIFkba+Do8IwemBF0rt85wS4Tq7yOLsdpQFCs=";
+  };
+
+  ldflags = [
+    "-s" "-w"
+    "-X github.com/Necoro/feed2imap-go/pkg/version.version=${version}"
+    "-X github.com/Necoro/feed2imap-go/pkg/version.commit=nixpkgs"
+  ];
+
+  vendorHash = "sha256-WFbfSzU1N2RAOMfCM7wqiAQ6R1HRaT0EfX4KYhstHJU=";
+
+  # The print-cache tool is not an end-user tool (https://github.com/Necoro/feed2imap-go/issues/94)
+  postInstall = ''
+    rm -f $out/bin/print-cache
+  '';
+
+  meta = with lib; {
+    description = "Uploads rss feeds as e-mails onto an IMAP server";
+    homepage = "https://github.com/Necoro/feed2imap-go";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ nomeata ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/feedreaders/fluent-reader/default.nix b/nixpkgs/pkgs/applications/networking/feedreaders/fluent-reader/default.nix
new file mode 100644
index 000000000000..968e8dd84a14
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/feedreaders/fluent-reader/default.nix
@@ -0,0 +1,35 @@
+{ lib, fetchurl, appimageTools }:
+
+let
+  pname = "fluent-reader";
+  version = "1.1.3";
+
+  src = fetchurl {
+    url = "https://github.com/yang991178/fluent-reader/releases/download/v${version}/Fluent.Reader.${version}.AppImage";
+    hash = "sha256-CzvhOaWfZ4rt2HmL/yv6P7IxEPLoyuBhftOxcjdMInU=";
+  };
+
+  appimageContents = appimageTools.extractType2 { inherit pname version src; };
+in appimageTools.wrapType2 {
+  inherit pname version src;
+
+  extraInstallCommands = ''
+    mv $out/bin/${pname}-${version} $out/bin/${pname}
+
+    mkdir -p $out/share/${pname}
+    cp -a ${appimageContents}/{locales,resources} $out/share/${pname}
+    install -Dm 444 ${appimageContents}/${pname}.desktop -t $out/share/applications
+    cp -a ${appimageContents}/usr/share/icons $out/share/
+
+    substituteInPlace $out/share/applications/${pname}.desktop \
+      --replace 'Exec=AppRun' 'Exec=${pname}'
+  '';
+
+  meta = with lib; {
+    description = "Modern desktop RSS reader built with Electron, React, and Fluent UI";
+    homepage = "https://hyliu.me/fluent-reader";
+    license = licenses.bsd3;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ zendo ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/feedreaders/gnome-feeds/default.nix b/nixpkgs/pkgs/applications/networking/feedreaders/gnome-feeds/default.nix
new file mode 100644
index 000000000000..7563e8c22d78
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/feedreaders/gnome-feeds/default.nix
@@ -0,0 +1,88 @@
+{ lib
+, callPackage
+
+, fetchFromGitLab
+
+, appstream
+, gobject-introspection
+, meson
+, ninja
+, pkg-config
+, wrapGAppsHook
+
+, glib
+, glib-networking
+, gtk3
+, libhandy
+, listparser ? callPackage ./listparser.nix { }
+, webkitgtk
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "gnome-feeds";
+  version = "0.16.2";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.gnome.org";
+    owner = "World";
+    repo = "gfeeds";
+    rev = version;
+    sha256 = "sha256-66dwVR9owg050aHCHJek7jYnT+/yyCKo4AaUE0hCqBA=";
+  };
+
+  format = "other";
+
+  nativeBuildInputs = [
+    appstream
+    glib # for glib-compile-schemas
+    gobject-introspection
+    meson
+    ninja
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    glib
+    glib-networking
+    gtk3
+    libhandy
+    webkitgtk
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    beautifulsoup4
+    python-dateutil
+    feedparser
+    html5lib
+    listparser
+    lxml
+    pillow
+    pygments
+    pygobject3
+    readability-lxml
+    pytz
+    requests
+  ];
+
+  dontWrapGApps = true;
+
+  preFixup = ''
+    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  passthru = {
+    inherit listparser;
+  };
+
+  meta = with lib; {
+    description = "An RSS/Atom feed reader for GNOME";
+    homepage = "https://gitlab.gnome.org/World/gfeeds";
+    license = licenses.gpl3Plus;
+    maintainers = [
+      maintainers.pbogdan
+    ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/feedreaders/gnome-feeds/listparser.nix b/nixpkgs/pkgs/applications/networking/feedreaders/gnome-feeds/listparser.nix
new file mode 100644
index 000000000000..77aa94a3b863
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/feedreaders/gnome-feeds/listparser.nix
@@ -0,0 +1,33 @@
+{ lib
+, python3
+, fetchPypi
+}:
+
+python3.pkgs.buildPythonPackage rec {
+  pname = "listparser";
+  version = "0.18";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0hdqs1mmayw1r8yla43hgb4d9y3zqs5483vgf8j9ygczkd2wrq2b";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    requests
+    six
+  ];
+
+  checkPhase = ''
+    ${python3.interpreter} lptest.py
+  '';
+
+  meta = with lib; {
+    description = "A parser for subscription lists";
+    homepage = "https://github.com/kurtmckee/listparser";
+    license = licenses.lgpl3Plus;
+    maintainers = [
+      maintainers.pbogdan
+    ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/feedreaders/goeland/default.nix b/nixpkgs/pkgs/applications/networking/feedreaders/goeland/default.nix
new file mode 100644
index 000000000000..70da2b8796a4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/feedreaders/goeland/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "goeland";
+  version = "0.15.0";
+
+  src = fetchFromGitHub {
+    owner = "slurdge";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-b/A76f9/pFDdG1ZiHQnJrxYmlvFIjhZZhTIGl09cMcg=";
+  };
+
+  vendorHash = "sha256-jOtIA7+rM/2qObhR61utvmXD+Rxi/+dEvzgYkGR76I8=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/slurdge/goeland/version.GitCommit=${version}"
+  ];
+
+  meta = with lib; {
+    description = "An alternative to rss2email written in golang with many filters";
+    longDescription = ''
+      Goeland excels at creating beautiful emails from RSS feeds,
+      tailored for daily or weekly digest. It includes a number of
+      filters that can transform the RSS content along the way.
+      It can also consume other sources, such as Imgur tags.
+    '';
+    homepage = "https://github.com/slurdge/goeland";
+    changelog = "https://github.com/slurdge/goeland/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ mit ];
+    maintainers = [ maintainers.sweenu ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/feedreaders/indigenous-desktop/default.nix b/nixpkgs/pkgs/applications/networking/feedreaders/indigenous-desktop/default.nix
new file mode 100644
index 000000000000..22bd33b87717
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/feedreaders/indigenous-desktop/default.nix
@@ -0,0 +1,55 @@
+{ stdenv, lib, fetchurl, unzip, makeDesktopItem, copyDesktopItems
+, makeWrapper, electron }:
+
+stdenv.mkDerivation rec {
+  pname = "indigenous-desktop";
+  version = "1.3.0";
+
+  src = fetchurl {
+    url = "https://github.com/marksuth/indigenous-desktop/releases/download/v${version}/indigenous-linux-x64-${version}.zip";
+    sha256 = "sha256-1nqj9N5RQE0PogJSULu75CTVLHeQsHIimtFXSCP6SPA=";
+  };
+
+  nativeBuildInputs = [
+    copyDesktopItems
+    makeWrapper
+    unzip
+  ];
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = pname;
+      exec = "indigenous-desktop";
+      icon = "indigenous-desktop";
+      comment = meta.description;
+      desktopName = "Indigenous";
+      genericName = "Feed Reader";
+    })
+  ];
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/opt/indigenous $out/share/indigenous $out/share/pixmaps
+    cp -r ./ $out/opt/indigenous
+    mv $out/opt/indigenous/{locales,resources} $out/share/indigenous
+    mv $out/share/indigenous/resources/app/images/icon.png $out/share/pixmaps/indigenous-desktop.png
+
+    makeWrapper ${electron}/bin/electron $out/bin/indigenous-desktop \
+      --add-flags $out/share/indigenous/resources/app
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "IndieWeb app with extensions for sharing to/reading from micropub endpoints";
+    homepage = "https://indigenous.realize.be/indigenous-desktop";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ wolfangaukang ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/feedreaders/newsboat/default.nix b/nixpkgs/pkgs/applications/networking/feedreaders/newsboat/default.nix
new file mode 100644
index 000000000000..cbfe6a8958ac
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/feedreaders/newsboat/default.nix
@@ -0,0 +1,70 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub, stfl, sqlite, curl, gettext, pkg-config, libxml2, json_c, ncurses
+, asciidoctor, libiconv, Security, Foundation, makeWrapper, nix-update-script }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "newsboat";
+  version = "2.32";
+
+  src = fetchFromGitHub {
+    owner = "newsboat";
+    repo = "newsboat";
+    rev = "r${version}";
+    hash = "sha256-ACPnCm2cu9BEpMd02t+G4mg6DZ8jCydfK4p+Ad87Hek=";
+  };
+
+  cargoHash = "sha256-HHc8HSNWoBkDR7lQgvXUML5ly8sShDn16DWNf/Jig2g=";
+
+  # TODO: Check if that's still needed
+  postPatch = lib.optionalString stdenv.isDarwin ''
+    # Allow other ncurses versions on Darwin
+    substituteInPlace config.sh \
+      --replace "ncurses5.4" "ncurses"
+  '';
+
+  nativeBuildInputs = [
+    pkg-config
+    asciidoctor
+    gettext
+  ] ++ lib.optionals stdenv.isDarwin [ makeWrapper ncurses ];
+
+  buildInputs = [ stfl sqlite curl libxml2 json_c ncurses ]
+    ++ lib.optionals stdenv.isDarwin [ Security Foundation libiconv gettext ];
+
+  postBuild = ''
+    make -j $NIX_BUILD_CORES prefix="$out"
+  '';
+
+  # https://github.com/NixOS/nixpkgs/pull/98471#issuecomment-703100014 . We set
+  # these for all platforms, since upstream's gettext crate behavior might
+  # change in the future.
+  GETTEXT_LIB_DIR = "${lib.getLib gettext}/lib";
+  GETTEXT_INCLUDE_DIR = "${lib.getDev gettext}/include";
+  GETTEXT_BIN_DIR = "${lib.getBin gettext}/bin";
+
+  doCheck = true;
+
+  preCheck = ''
+    make -j $NIX_BUILD_CORES test
+  '';
+
+  postInstall = ''
+    make -j $NIX_BUILD_CORES prefix="$out" install
+  '' + lib.optionalString stdenv.isDarwin ''
+    for prog in $out/bin/*; do
+      wrapProgram "$prog" --prefix DYLD_LIBRARY_PATH : "${stfl}/lib"
+    done
+  '';
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    homepage    = "https://newsboat.org/";
+    changelog   = "https://github.com/newsboat/newsboat/blob/${src.rev}/CHANGELOG.md";
+    description = "A fork of Newsbeuter, an RSS/Atom feed reader for the text console";
+    maintainers = with maintainers; [ dotlambda nicknovitski ];
+    license     = licenses.mit;
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/feedreaders/newsflash/Cargo.lock b/nixpkgs/pkgs/applications/networking/feedreaders/newsflash/Cargo.lock
new file mode 100644
index 000000000000..1e058229933d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/feedreaders/newsflash/Cargo.lock
@@ -0,0 +1,4937 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "aes"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8"
+dependencies = [
+ "cfg-if",
+ "cipher",
+ "cpufeatures",
+ "opaque-debug",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67fc08ce920c31afb70f013dcce1bfc3a3195de6a228474e45e1f145b36f8d04"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "alloc-no-stdlib"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3"
+
+[[package]]
+name = "alloc-stdlib"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece"
+dependencies = [
+ "alloc-no-stdlib",
+]
+
+[[package]]
+name = "ammonia"
+version = "3.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64e6d1c7838db705c9b756557ee27c384ce695a1c51a6fe528784cb1c6840170"
+dependencies = [
+ "html5ever",
+ "maplit",
+ "once_cell",
+ "tendril",
+ "url",
+]
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "anstream"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6342bd4f5a1205d7f41e94a41a901f5647c938cdfa96036338e8533c9d6c2450"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "is-terminal",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41ed9a86bf92ae6580e0a31281f65a1b1d867c0cc68d5346e2ae128dddfa6a7d"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e765fd216e48e067936442276d1d57399e37bce53c264d6fefbe298080cb57ee"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188"
+dependencies = [
+ "anstyle",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.71"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8"
+
+[[package]]
+name = "arc-swap"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6"
+
+[[package]]
+name = "article_scraper"
+version = "2.0.0-alpha.0"
+source = "git+https://gitlab.com/news-flash/article_scraper.git#d8ceee140330137501ad187eab057b31ee289c40"
+dependencies = [
+ "base64 0.21.0",
+ "chrono",
+ "encoding_rs",
+ "escaper",
+ "futures",
+ "image",
+ "libxml",
+ "log",
+ "once_cell",
+ "regex",
+ "reqwest",
+ "rust-embed",
+ "thiserror",
+ "tokio",
+ "url",
+]
+
+[[package]]
+name = "ashpd"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31688b40eb5d739049f721d8405c33d3796b3f51f2bea84421a542dafe397e41"
+dependencies = [
+ "async-std",
+ "enumflags2",
+ "futures-channel",
+ "futures-util",
+ "once_cell",
+ "rand 0.8.5",
+ "serde",
+ "serde_repr",
+ "url",
+ "zbus",
+]
+
+[[package]]
+name = "async-broadcast"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c48ccdbf6ca6b121e0f586cbc0e73ae440e56c67c30fa0873b4e110d9c26d2b"
+dependencies = [
+ "event-listener",
+ "futures-core",
+]
+
+[[package]]
+name = "async-channel"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf46fee83e5ccffc220104713af3292ff9bc7c64c7de289f66dae8e38d826833"
+dependencies = [
+ "concurrent-queue",
+ "event-listener",
+ "futures-core",
+]
+
+[[package]]
+name = "async-compression"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "942c7cd7ae39e91bde4820d74132e9862e62c2f386c3aa90ccf55949f5bad63a"
+dependencies = [
+ "brotli",
+ "flate2",
+ "futures-core",
+ "memchr",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "async-executor"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fa3dc5f2a8564f07759c008b9109dc0d39de92a88d5588b8a5036d286383afb"
+dependencies = [
+ "async-lock",
+ "async-task",
+ "concurrent-queue",
+ "fastrand",
+ "futures-lite",
+ "slab",
+]
+
+[[package]]
+name = "async-fs"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06"
+dependencies = [
+ "async-lock",
+ "autocfg",
+ "blocking",
+ "futures-lite",
+]
+
+[[package]]
+name = "async-global-executor"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1b6f5d7df27bd294849f8eec66ecfc63d11814df7a4f5d74168a2394467b776"
+dependencies = [
+ "async-channel",
+ "async-executor",
+ "async-io",
+ "async-lock",
+ "blocking",
+ "futures-lite",
+ "once_cell",
+]
+
+[[package]]
+name = "async-io"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af"
+dependencies = [
+ "async-lock",
+ "autocfg",
+ "cfg-if",
+ "concurrent-queue",
+ "futures-lite",
+ "log",
+ "parking",
+ "polling",
+ "rustix",
+ "slab",
+ "socket2",
+ "waker-fn",
+]
+
+[[package]]
+name = "async-lock"
+version = "2.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa24f727524730b077666307f2734b4a1a1c57acb79193127dcc8914d5242dd7"
+dependencies = [
+ "event-listener",
+]
+
+[[package]]
+name = "async-recursion"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e97ce7de6cf12de5d7226c73f5ba9811622f4db3a5b91b55c53e987e5f91cba"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "async-std"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d"
+dependencies = [
+ "async-channel",
+ "async-global-executor",
+ "async-io",
+ "async-lock",
+ "crossbeam-utils",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-lite",
+ "gloo-timers",
+ "kv-log-macro",
+ "log",
+ "memchr",
+ "once_cell",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+ "wasm-bindgen-futures",
+]
+
+[[package]]
+name = "async-task"
+version = "4.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ecc7ab41815b3c653ccd2978ec3255c81349336702dfdf62ee6f7069b12a3aae"
+
+[[package]]
+name = "async-trait"
+version = "0.1.68"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "atomic-waker"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1181e1e0d1fce796a03db1ae795d67167da795f9cf4a39c37589e85ef57f26d3"
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "backtrace"
+version = "0.3.67"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide 0.6.2",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base64"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+[[package]]
+name = "base64"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a"
+
+[[package]]
+name = "bigdecimal"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6aaf33151a6429fe9211d1b276eafdf70cdff28b071e76c0b0e1503221ea3744"
+dependencies = [
+ "num-bigint",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "bit_field"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24a6904aef64d73cf10ab17ebace7befb918b82164785cb89907993be7f83813"
+
+[[package]]
+name = "block"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
+
+[[package]]
+name = "block-buffer"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4"
+dependencies = [
+ "block-padding",
+ "generic-array",
+]
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "block-modes"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2cb03d1bed155d89dce0f845b7899b18a9a163e148fd004e1c28421a783e2d8e"
+dependencies = [
+ "block-padding",
+ "cipher",
+]
+
+[[package]]
+name = "block-padding"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae"
+
+[[package]]
+name = "blocking"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77231a1c8f801696fc0123ec6150ce92cffb8e164a02afb9c8ddee0e9b65ad65"
+dependencies = [
+ "async-channel",
+ "async-lock",
+ "async-task",
+ "atomic-waker",
+ "fastrand",
+ "futures-lite",
+ "log",
+]
+
+[[package]]
+name = "brotli"
+version = "3.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68"
+dependencies = [
+ "alloc-no-stdlib",
+ "alloc-stdlib",
+ "brotli-decompressor",
+]
+
+[[package]]
+name = "brotli-decompressor"
+version = "2.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b6561fd3f895a11e8f72af2cb7d22e08366bebc2b6b57f7744c4bda27034744"
+dependencies = [
+ "alloc-no-stdlib",
+ "alloc-stdlib",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b1ce199063694f33ffb7dd4e0ee620741495c32833cde5aa08f02a0bf96f0c8"
+
+[[package]]
+name = "bytemuck"
+version = "1.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "bytes"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
+
+[[package]]
+name = "cairo-rs"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8af54f5d48af1226928adc1f57edd22f5df1349e7da1fc96ae15cf43db0e871"
+dependencies = [
+ "bitflags 1.3.2",
+ "cairo-sys-rs",
+ "glib",
+ "libc",
+ "once_cell",
+ "thiserror",
+]
+
+[[package]]
+name = "cairo-sys-rs"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f55382a01d30e5e53f185eee269124f5e21ab526595b872751278dfbb463594e"
+dependencies = [
+ "glib-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+
+[[package]]
+name = "cfg-expr"
+version = "0.15.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c8790cf1286da485c72cf5fc7aeba308438800036ec67d89425924c4807268c9"
+dependencies = [
+ "smallvec",
+ "target-lexicon",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chrono"
+version = "0.4.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b"
+dependencies = [
+ "iana-time-zone",
+ "js-sys",
+ "num-integer",
+ "num-traits",
+ "time 0.1.45",
+ "wasm-bindgen",
+ "winapi",
+]
+
+[[package]]
+name = "cipher"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "clap"
+version = "4.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a1f23fa97e1d1641371b51f35535cb26959b8e27ab50d167a8b996b5bada819"
+dependencies = [
+ "clap_builder",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fdc5d93c358224b4d6867ef1356d740de2303e9892edc06c5340daeccd96bab"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "bitflags 1.3.2",
+ "clap_lex",
+ "strsim",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a2dd5a6fe8c6e3502f568a6353e5273bbb15193ad9a89e457b9970798efbea1"
+
+[[package]]
+name = "codespan-reporting"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
+dependencies = [
+ "termcolor",
+ "unicode-width",
+]
+
+[[package]]
+name = "color-backtrace"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd6c04463c99389fff045d2b90ce84f5131332712c7ffbede020f5e9ad1ed685"
+dependencies = [
+ "atty",
+ "backtrace",
+ "termcolor",
+]
+
+[[package]]
+name = "color_quant"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
+
+[[package]]
+name = "colorchoice"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
+
+[[package]]
+name = "concurrent-queue"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62ec6771ecfa0762d24683ee5a32ad78487a3d3afdc0fb8cae19d2c5deb50b7c"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "cookie"
+version = "0.16.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e859cd57d0710d9e06c381b550c06e76992472a8c6d527aecd2fc673dcc231fb"
+dependencies = [
+ "percent-encoding",
+ "time 0.3.20",
+ "version_check",
+]
+
+[[package]]
+name = "cookie_store"
+version = "0.16.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e4b6aa369f41f5faa04bb80c9b1f4216ea81646ed6124d76ba5c49a7aafd9cd"
+dependencies = [
+ "cookie",
+ "idna 0.2.3",
+ "log",
+ "publicsuffix",
+ "serde",
+ "serde_json",
+ "time 0.3.20",
+ "url",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc-any"
+version = "2.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "774646b687f63643eb0f4bf13dc263cb581c8c9e57973b6ddf78bda3994d88df"
+dependencies = [
+ "debug-helper",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+dependencies = [
+ "cfg-if",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "crossbeam-utils",
+ "memoffset 0.8.0",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crunchy"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "ctor"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096"
+dependencies = [
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "cxx"
+version = "1.0.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f61f1b6389c3fe1c316bf8a4dccc90a38208354b330925bce1f74a6c4756eb93"
+dependencies = [
+ "cc",
+ "cxxbridge-flags",
+ "cxxbridge-macro",
+ "link-cplusplus",
+]
+
+[[package]]
+name = "cxx-build"
+version = "1.0.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12cee708e8962df2aeb38f594aae5d827c022b6460ac71a7a3e2c3c2aae5a07b"
+dependencies = [
+ "cc",
+ "codespan-reporting",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "scratch",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "cxxbridge-flags"
+version = "1.0.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7944172ae7e4068c533afbb984114a56c46e9ccddda550499caa222902c7f7bb"
+
+[[package]]
+name = "cxxbridge-macro"
+version = "1.0.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "data-encoding"
+version = "2.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23d8666cb01533c39dde32bcbab8e227b4ed6679b2c925eba05feabea39508fb"
+
+[[package]]
+name = "debug-helper"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f578e8e2c440e7297e008bb5486a3a8a194775224bbc23729b0dbdfaeebf162e"
+
+[[package]]
+name = "derivative"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "des"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac41dd49fb554432020d52c875fc290e110113f864c6b1b525cd62c7e7747a5d"
+dependencies = [
+ "byteorder",
+ "cipher",
+ "opaque-debug",
+]
+
+[[package]]
+name = "destructure_traitobject"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c877555693c14d2f84191cfd3ad8582790fc52b5e2274b40b59cf5f5cea25c7"
+
+[[package]]
+name = "diesel"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72eb77396836a4505da85bae0712fa324b74acfe1876d7c2f7e694ef3d0ee373"
+dependencies = [
+ "bigdecimal",
+ "chrono",
+ "diesel_derives",
+ "ipnetwork",
+ "libc",
+ "libsqlite3-sys",
+ "num-bigint",
+ "num-integer",
+ "num-traits",
+ "r2d2",
+ "serde_json",
+ "time 0.3.20",
+ "uuid",
+]
+
+[[package]]
+name = "diesel_derives"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ad74fdcf086be3d4fdd142f67937678fe60ed431c3b2f08599e7687269410c4"
+dependencies = [
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "diesel_migrations"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e9ae22beef5e9d6fab9225ddb073c1c6c1a7a6ded5019d5da11d1e5c5adc34e2"
+dependencies = [
+ "diesel",
+ "migrations_internals",
+ "migrations_macros",
+]
+
+[[package]]
+name = "diffus"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c0ff24a73b51d9009c40897faf87d31b77345c90ffbf4dc3a1d2957032c5653"
+dependencies = [
+ "diffus-derive",
+ "itertools",
+]
+
+[[package]]
+name = "diffus-derive"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b93a2d033d9e1887e8ea6e13a03b9fcf20e66b4891cd0dfb98ef280cff7afaa8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "digest"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f"
+dependencies = [
+ "block-buffer 0.10.4",
+ "crypto-common",
+]
+
+[[package]]
+name = "dirs"
+version = "4.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059"
+dependencies = [
+ "dirs-sys 0.3.7",
+]
+
+[[package]]
+name = "dirs"
+version = "5.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dece029acd3353e3a58ac2e3eb3c8d6c35827a892edc6cc4138ef9c33df46ecd"
+dependencies = [
+ "dirs-sys 0.4.0",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04414300db88f70d74c5ff54e50f9e1d1737d9a5b90f53fcf2e95ca2a9ab554b"
+dependencies = [
+ "libc",
+ "redox_users",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "either"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "entities"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5320ae4c3782150d900b79807611a59a99fc9a1d61d686faafc24b93fc8d7ca"
+
+[[package]]
+name = "enum-as-inner"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c9720bba047d567ffc8a3cba48bf19126600e249ab7f128e9233e6376976a116"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "enumflags2"
+version = "0.7.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c041f5090df68b32bcd905365fd51769c8b9d553fe87fde0b683534f10c01bd2"
+dependencies = [
+ "enumflags2_derive",
+ "serde",
+]
+
+[[package]]
+name = "enumflags2_derive"
+version = "0.7.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e9a1f9f7d83e59740248a6e14ecf93929ade55027844dfcea78beafccc15745"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "errno"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "escaper"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a53eb97b7349ba1bdb31839eceafe9aaae8f1d8d944dc589b67fb0b26e1c1666"
+dependencies = [
+ "entities",
+]
+
+[[package]]
+name = "event-listener"
+version = "2.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
+
+[[package]]
+name = "exr"
+version = "1.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bdd2162b720141a91a054640662d3edce3d50a944a50ffca5313cd951abb35b4"
+dependencies = [
+ "bit_field",
+ "flume",
+ "half",
+ "lebe",
+ "miniz_oxide 0.6.2",
+ "rayon-core",
+ "smallvec",
+ "zune-inflate",
+]
+
+[[package]]
+name = "eyre"
+version = "0.6.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c2b6b5a29c02cdc822728b7d7b8ae1bab3e3b05d44522770ddd49722eeac7eb"
+dependencies = [
+ "indenter",
+ "once_cell",
+]
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "fdeflate"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d329bdeac514ee06249dabc27877490f17f5d371ec693360768b838e19f3ae10"
+dependencies = [
+ "simd-adler32",
+]
+
+[[package]]
+name = "feed-rs"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9dbec361cb401c1b86aea784fb809073733da06b1a1fd794222e7bf9845db327"
+dependencies = [
+ "chrono",
+ "lazy_static",
+ "mime",
+ "quick-xml",
+ "regex",
+ "serde",
+ "serde_json",
+ "siphasher",
+ "url",
+ "uuid",
+]
+
+[[package]]
+name = "feedbin_api"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e548b6bc1c89c0c92d269bccd154c9052e423c45fb950770077374be1b6b9749"
+dependencies = [
+ "chrono",
+ "reqwest",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "thiserror",
+ "url",
+]
+
+[[package]]
+name = "feedly_api"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fa0d0ad6e1cd3faf4e83ffba99584c501a909141fb0bc9ffbd6124778587608"
+dependencies = [
+ "chrono",
+ "log",
+ "percent-encoding",
+ "reqwest",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "thiserror",
+ "url",
+]
+
+[[package]]
+name = "fever_api"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "144611f6ff1f24937d3591684495c6c929872fe88dd73e2bbf050e415a0ef566"
+dependencies = [
+ "log",
+ "md5",
+ "reqwest",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "url",
+]
+
+[[package]]
+name = "field-offset"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3cf3a800ff6e860c863ca6d4b16fd999db8b752819c1606884047b73e468535"
+dependencies = [
+ "memoffset 0.8.0",
+ "rustc_version",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide 0.7.1",
+]
+
+[[package]]
+name = "flume"
+version = "0.10.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+ "nanorand",
+ "pin-project",
+ "spin 0.9.8",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "futf"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843"
+dependencies = [
+ "mac",
+ "new_debug_unreachable",
+]
+
+[[package]]
+name = "futures"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+ "num_cpus",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
+
+[[package]]
+name = "futures-lite"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce"
+dependencies = [
+ "fastrand",
+ "futures-core",
+ "futures-io",
+ "memchr",
+ "parking",
+ "pin-project-lite",
+ "waker-fn",
+]
+
+[[package]]
+name = "futures-macro"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
+
+[[package]]
+name = "futures-task"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
+
+[[package]]
+name = "futures-util"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "gdk-pixbuf"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b023fbe0c6b407bd3d9805d107d9800da3829dc5a676653210f1d5f16d7f59bf"
+dependencies = [
+ "bitflags 1.3.2",
+ "gdk-pixbuf-sys",
+ "gio",
+ "glib",
+ "libc",
+ "once_cell",
+]
+
+[[package]]
+name = "gdk-pixbuf-sys"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b41bd2b44ed49d99277d3925652a163038bd5ed943ec9809338ffb2f4391e3b"
+dependencies = [
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "gdk4"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3abf96408a26e3eddf881a7f893a1e111767137136e347745e8ea6ed12731ff"
+dependencies = [
+ "bitflags 1.3.2",
+ "cairo-rs",
+ "gdk-pixbuf",
+ "gdk4-sys",
+ "gio",
+ "glib",
+ "libc",
+ "pango",
+]
+
+[[package]]
+name = "gdk4-sys"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bc92aa1608c089c49393d014c38ac0390d01e4841e1fedaa75dbcef77aaed64"
+dependencies = [
+ "cairo-sys-rs",
+ "gdk-pixbuf-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "pango-sys",
+ "pkg-config",
+ "system-deps",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.9.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "gettext-rs"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e49ea8a8fad198aaa1f9655a2524b64b70eb06b2f3ff37da407566c93054f364"
+dependencies = [
+ "gettext-sys",
+ "locale_config",
+]
+
+[[package]]
+name = "gettext-sys"
+version = "0.21.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c63ce2e00f56a206778276704bbe38564c8695249fdc8f354b4ef71c57c3839d"
+dependencies = [
+ "cc",
+ "temp-dir",
+]
+
+[[package]]
+name = "gif"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80792593675e051cf94a4b111980da2ba60d4a83e43e0048c5693baab3977045"
+dependencies = [
+ "color_quant",
+ "weezl",
+]
+
+[[package]]
+name = "gimli"
+version = "0.27.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4"
+
+[[package]]
+name = "gio"
+version = "0.17.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d14522e56c6bcb6f7a3aebc25cbcfb06776af4c0c25232b601b4383252d7cb92"
+dependencies = [
+ "bitflags 1.3.2",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-util",
+ "gio-sys",
+ "glib",
+ "libc",
+ "once_cell",
+ "pin-project-lite",
+ "smallvec",
+ "thiserror",
+]
+
+[[package]]
+name = "gio-sys"
+version = "0.17.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b1d43b0d7968b48455244ecafe41192871257f5740aa6b095eb19db78e362a5"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+ "winapi",
+]
+
+[[package]]
+name = "glib"
+version = "0.17.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7f1de7cbde31ea4f0a919453a2dcece5d54d5b70e08f8ad254dc4840f5f09b6"
+dependencies = [
+ "bitflags 1.3.2",
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-task",
+ "futures-util",
+ "gio-sys",
+ "glib-macros",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "memchr",
+ "once_cell",
+ "smallvec",
+ "thiserror",
+]
+
+[[package]]
+name = "glib-macros"
+version = "0.17.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a7206c5c03851ef126ea1444990e81fdd6765fb799d5bc694e4897ca01bb97f"
+dependencies = [
+ "anyhow",
+ "heck",
+ "proc-macro-crate",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "glib-sys"
+version = "0.17.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49f00ad0a1bf548e61adfff15d83430941d9e1bb620e334f779edd1c745680a5"
+dependencies = [
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "gloo-timers"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "gobject-sys"
+version = "0.17.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15e75b0000a64632b2d8ca3cf856af9308e3a970844f6e9659bd197f026793d0"
+dependencies = [
+ "glib-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "graphene-rs"
+version = "0.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21cf11565bb0e4dfc2f99d4775b6c329f0d40a2cff9c0066214d31a0e1b46256"
+dependencies = [
+ "glib",
+ "graphene-sys",
+ "libc",
+]
+
+[[package]]
+name = "graphene-sys"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf80a4849a8d9565410a8fec6fc3678e9c617f4ac7be182ca55ab75016e07af9"
+dependencies = [
+ "glib-sys",
+ "libc",
+ "pkg-config",
+ "system-deps",
+]
+
+[[package]]
+name = "greader_api"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f83b96865d8645f89a0353148d8c8a466e877f5f62ceef5342b6b8891d5ca23"
+dependencies = [
+ "chrono",
+ "log",
+ "reqwest",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "tokio",
+ "url",
+]
+
+[[package]]
+name = "gsk4"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f01ef44fa7cac15e2da9978529383e6bee03e570ba5bf7036b4c10a15cc3a3c"
+dependencies = [
+ "bitflags 1.3.2",
+ "cairo-rs",
+ "gdk4",
+ "glib",
+ "graphene-rs",
+ "gsk4-sys",
+ "libc",
+ "pango",
+]
+
+[[package]]
+name = "gsk4-sys"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c07a84fb4dcf1323d29435aa85e2f5f58bef564342bef06775ec7bd0da1f01b0"
+dependencies = [
+ "cairo-sys-rs",
+ "gdk4-sys",
+ "glib-sys",
+ "gobject-sys",
+ "graphene-sys",
+ "libc",
+ "pango-sys",
+ "system-deps",
+]
+
+[[package]]
+name = "gtk4"
+version = "0.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b28a32a04cd75cef14a0983f8b0c669e0fe152a0a7725accdeb594e2c764c88b"
+dependencies = [
+ "bitflags 1.3.2",
+ "cairo-rs",
+ "field-offset",
+ "futures-channel",
+ "gdk-pixbuf",
+ "gdk4",
+ "gio",
+ "glib",
+ "graphene-rs",
+ "gsk4",
+ "gtk4-macros",
+ "gtk4-sys",
+ "libc",
+ "once_cell",
+ "pango",
+]
+
+[[package]]
+name = "gtk4-macros"
+version = "0.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a4d6b61570f76d3ee542d984da443b1cd69b6105264c61afec3abed08c2500f"
+dependencies = [
+ "anyhow",
+ "proc-macro-crate",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "gtk4-sys"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f8283f707b07e019e76c7f2934bdd4180c277e08aa93f4c0d8dd07b7a34e22f"
+dependencies = [
+ "cairo-sys-rs",
+ "gdk-pixbuf-sys",
+ "gdk4-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "graphene-sys",
+ "gsk4-sys",
+ "libc",
+ "pango-sys",
+ "system-deps",
+]
+
+[[package]]
+name = "h2"
+version = "0.3.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17f8a914c2987b688368b5138aa05321db91f4090cf26118185672ad588bce21"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "half"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02b4af3693f1b705df946e9fe5631932443781d0aabb423b62fcd4d73f6d2fd0"
+dependencies = [
+ "crunchy",
+]
+
+[[package]]
+name = "hard-xml"
+version = "1.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e352818f3837f84861450edf5d274ff601663a38a4488e96c42f08cc112f797"
+dependencies = [
+ "hard-xml-derive",
+ "jetscii",
+ "lazy_static",
+ "memchr",
+ "xmlparser",
+]
+
+[[package]]
+name = "hard-xml-derive"
+version = "1.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52e644596eb580f65e712e6e0957f1eaa642197ea865011ca540376ae6a21881"
+dependencies = [
+ "bitflags 1.3.2",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
+name = "hostname"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867"
+dependencies = [
+ "libc",
+ "match_cfg",
+ "winapi",
+]
+
+[[package]]
+name = "html2pango"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e22f189d26bf7cf4652dbe49da86f3a27628f745469365f1d2575ea8caf54eaf"
+dependencies = [
+ "ammonia",
+ "anyhow",
+ "html5ever",
+ "linkify",
+ "maplit",
+ "markup5ever_rcdom",
+ "once_cell",
+ "regex",
+]
+
+[[package]]
+name = "html5ever"
+version = "0.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bea68cab48b8459f17cf1c944c67ddc572d272d9f2b274140f223ecb1da4a3b7"
+dependencies = [
+ "log",
+ "mac",
+ "markup5ever",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "http"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
+
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[package]]
+name = "hyper"
+version = "0.14.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab302d72a6f11a3b910431ff93aae7e773078c769f0a3ef15fb9ec692ed147d4"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-rustls"
+version = "0.23.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c"
+dependencies = [
+ "http",
+ "hyper",
+ "rustls",
+ "tokio",
+ "tokio-rustls",
+]
+
+[[package]]
+name = "hyper-tls"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
+dependencies = [
+ "bytes",
+ "hyper",
+ "native-tls",
+ "tokio",
+ "tokio-native-tls",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0722cd7114b7de04316e7ea5456a0bbb20e4adb46fd27a3697adb812cff0f37c"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "windows",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca"
+dependencies = [
+ "cxx",
+ "cxx-build",
+]
+
+[[package]]
+name = "idna"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8"
+dependencies = [
+ "matches",
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "idna"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "image"
+version = "0.24.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "527909aa81e20ac3a44803521443a765550f09b5130c2c2fa1ea59c2f8f50a3a"
+dependencies = [
+ "bytemuck",
+ "byteorder",
+ "color_quant",
+ "exr",
+ "gif",
+ "jpeg-decoder",
+ "num-rational",
+ "num-traits",
+ "png",
+ "qoi",
+ "tiff",
+]
+
+[[package]]
+name = "indenter"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683"
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+dependencies = [
+ "autocfg",
+ "hashbrown",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "ipconfig"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd302af1b90f2463a98fa5ad469fc212c8e3175a41c3068601bfa2727591c5be"
+dependencies = [
+ "socket2",
+ "widestring",
+ "winapi",
+ "winreg",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f"
+
+[[package]]
+name = "ipnetwork"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf466541e9d546596ee94f9f69590f89473455f88372423e0008fc1a7daf100e"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "is-terminal"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "io-lifetimes",
+ "rustix",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
+
+[[package]]
+name = "javascriptcore6"
+version = "0.1.0"
+source = "git+https://gitlab.gnome.org/JanGernert/webkit6-rs.git?branch=crates-io#eeb540d62cf41d216493e7837008571826d50473"
+dependencies = [
+ "bitflags 1.3.2",
+ "glib",
+ "javascriptcore6-sys",
+ "libc",
+ "once_cell",
+]
+
+[[package]]
+name = "javascriptcore6-sys"
+version = "0.1.0"
+source = "git+https://gitlab.gnome.org/JanGernert/webkit6-rs.git?branch=crates-io#eeb540d62cf41d216493e7837008571826d50473"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "jetscii"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "47f142fe24a9c9944451e8349de0a56af5f3e7226dc46f3ed4d4ecc0b85af75e"
+
+[[package]]
+name = "jpeg-decoder"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e"
+dependencies = [
+ "rayon",
+]
+
+[[package]]
+name = "js-sys"
+version = "0.3.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "kv-log-macro"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f"
+dependencies = [
+ "log",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "lebe"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8"
+
+[[package]]
+name = "libadwaita"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e82776542b73ac5691b2bddf3e2aaf0157d34f35193fb522de2fc258006c1785"
+dependencies = [
+ "bitflags 1.3.2",
+ "futures-channel",
+ "gdk-pixbuf",
+ "gdk4",
+ "gio",
+ "glib",
+ "gtk4",
+ "libadwaita-sys",
+ "libc",
+ "once_cell",
+ "pango",
+]
+
+[[package]]
+name = "libadwaita-sys"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91be74a61f26efa6946c02dad76eb4cd3021addb0ff85dde445c1cd41d2eca2d"
+dependencies = [
+ "gdk4-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "gtk4-sys",
+ "libc",
+ "pango-sys",
+ "system-deps",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.142"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a987beff54b60ffa6d51982e1aa1146bc42f19bd26be28b0586f252fccf5317"
+
+[[package]]
+name = "libsqlite3-sys"
+version = "0.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "afc22eff61b133b115c6e8c74e818c628d6d5e7a502afea6f64dee076dd94326"
+dependencies = [
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "libxml"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca310e4db05e9b7386ad0734975fabc912b66f6bc50a98f525e690822da1ee0e"
+dependencies = [
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "link-cplusplus"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "linked-hash-map"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
+
+[[package]]
+name = "linkify"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96dd5884008358112bc66093362197c7248ece00d46624e2cf71e50029f8cff5"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b64f40e5e03e0d54f03845c8197d0291253cdbedfb1cb46b13c2c117554a9f4c"
+
+[[package]]
+name = "locale_config"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d2c35b16f4483f6c26f0e4e9550717a2f6575bcd6f12a53ff0c490a94a6934"
+dependencies = [
+ "lazy_static",
+ "objc",
+ "objc-foundation",
+ "regex",
+ "winapi",
+]
+
+[[package]]
+name = "lock_api"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if",
+ "serde",
+ "value-bag",
+]
+
+[[package]]
+name = "log-mdc"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a94d21414c1f4a51209ad204c1776a3d0765002c76c6abcb602a6f09f1e881c7"
+
+[[package]]
+name = "log4rs"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d36ca1786d9e79b8193a68d480a0907b612f109537115c6ff655a3a1967533fd"
+dependencies = [
+ "anyhow",
+ "arc-swap",
+ "chrono",
+ "derivative",
+ "fnv",
+ "humantime",
+ "libc",
+ "log",
+ "log-mdc",
+ "parking_lot",
+ "serde",
+ "serde-value",
+ "serde_json",
+ "serde_yaml",
+ "thiserror",
+ "thread-id",
+ "typemap-ors",
+ "winapi",
+]
+
+[[package]]
+name = "lru-cache"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c"
+dependencies = [
+ "linked-hash-map",
+]
+
+[[package]]
+name = "mac"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4"
+
+[[package]]
+name = "magic-crypt"
+version = "3.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0196bd5c76f5f51d7d6563545f86262fef4c82d75466ba6f6d359c40a523318d"
+dependencies = [
+ "aes",
+ "base64 0.13.1",
+ "block-modes",
+ "crc-any",
+ "des",
+ "digest 0.9.0",
+ "md-5",
+ "sha2 0.9.9",
+ "tiger",
+]
+
+[[package]]
+name = "malloc_buf"
+version = "0.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "maplit"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d"
+
+[[package]]
+name = "markup5ever"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a2629bb1404f3d34c2e921f21fd34ba00b206124c81f65c50b43b6aaefeb016"
+dependencies = [
+ "log",
+ "phf",
+ "phf_codegen",
+ "string_cache",
+ "string_cache_codegen",
+ "tendril",
+]
+
+[[package]]
+name = "markup5ever_rcdom"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9521dd6750f8e80ee6c53d65e2e4656d7de37064f3a7a5d2d11d05df93839c2"
+dependencies = [
+ "html5ever",
+ "markup5ever",
+ "tendril",
+ "xml5ever",
+]
+
+[[package]]
+name = "match_cfg"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4"
+
+[[package]]
+name = "matches"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5"
+
+[[package]]
+name = "md-5"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b5a279bb9607f9f53c22d496eade00d138d1bdcccd07d74650387cf94942a15"
+dependencies = [
+ "block-buffer 0.9.0",
+ "digest 0.9.0",
+ "opaque-debug",
+]
+
+[[package]]
+name = "md5"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771"
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memoffset"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "migrations_internals"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c493c09323068c01e54c685f7da41a9ccf9219735c3766fbfd6099806ea08fbc"
+dependencies = [
+ "serde",
+ "toml 0.5.11",
+]
+
+[[package]]
+name = "migrations_macros"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a8ff27a350511de30cdabb77147501c36ef02e0451d957abea2f30caffb2b58"
+dependencies = [
+ "migrations_internals",
+ "proc-macro2",
+ "quote",
+]
+
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
+[[package]]
+name = "mime_guess"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef"
+dependencies = [
+ "mime",
+ "unicase",
+]
+
+[[package]]
+name = "miniflux_api"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c402b227e14d83831bfb5a5d4bc347b1a925889f733b27697610a307b0bd8e89"
+dependencies = [
+ "base64 0.13.1",
+ "log",
+ "reqwest",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "thiserror",
+ "url",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+ "simd-adler32",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9"
+dependencies = [
+ "libc",
+ "log",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "nanorand"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3"
+dependencies = [
+ "getrandom 0.2.9",
+]
+
+[[package]]
+name = "native-tls"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "log",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
+]
+
+[[package]]
+name = "new_debug_unreachable"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54"
+
+[[package]]
+name = "news-flash"
+version = "2.3.0-alpha.0"
+source = "git+https://gitlab.com/news-flash/news_flash.git#60eff75c158aa04f67289900c7e7fe958f29f130"
+dependencies = [
+ "article_scraper",
+ "async-trait",
+ "base64 0.21.0",
+ "bitflags 2.2.1",
+ "bytes",
+ "chrono",
+ "diesel",
+ "diesel_migrations",
+ "escaper",
+ "feed-rs",
+ "feedbin_api",
+ "feedly_api",
+ "fever_api",
+ "futures",
+ "greader_api",
+ "hex",
+ "image",
+ "libxml",
+ "log",
+ "magic-crypt",
+ "mime",
+ "mime_guess",
+ "miniflux_api",
+ "newsblur_api",
+ "nextcloud_news_api",
+ "obfstr",
+ "once_cell",
+ "opml",
+ "parking_lot",
+ "random_color",
+ "rayon",
+ "regex",
+ "reqwest",
+ "rust-embed",
+ "semver",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "tokio",
+ "url",
+]
+
+[[package]]
+name = "news_flash_gtk"
+version = "0.0.0"
+dependencies = [
+ "ashpd",
+ "chrono",
+ "clap",
+ "color-backtrace",
+ "diffus",
+ "dirs 5.0.0",
+ "eyre",
+ "feedly_api",
+ "futures",
+ "futures-util",
+ "gdk4",
+ "gettext-rs",
+ "gio",
+ "glib",
+ "gsk4",
+ "gtk4",
+ "html2pango",
+ "javascriptcore6",
+ "libadwaita",
+ "log",
+ "log4rs",
+ "news-flash",
+ "num_cpus",
+ "once_cell",
+ "pango",
+ "parking_lot",
+ "percent-encoding",
+ "rc-writer",
+ "regex",
+ "reqwest",
+ "rust-embed",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "tokio",
+ "url",
+ "webkit6",
+ "xmltree",
+]
+
+[[package]]
+name = "newsblur_api"
+version = "0.2.0"
+source = "git+https://gitlab.com/news-flash/newsblur_api.git#de359af9cfaea40cb603efd6f939a162f2973500"
+dependencies = [
+ "reqwest",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "url",
+]
+
+[[package]]
+name = "nextcloud_news_api"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "488e5fb51484deb6bc5bc22f0b0db4902ae7e391d075f8d1a1b9a9674ea326d3"
+dependencies = [
+ "base64 0.21.0",
+ "log",
+ "reqwest",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "serde_repr",
+ "thiserror",
+ "url",
+]
+
+[[package]]
+name = "nix"
+version = "0.26.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if",
+ "libc",
+ "memoffset 0.7.1",
+ "static_assertions",
+]
+
+[[package]]
+name = "num-bigint"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-rational"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
+dependencies = [
+ "hermit-abi 0.2.6",
+ "libc",
+]
+
+[[package]]
+name = "obfstr"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3ba2979b86cc910a6d13837ef97fef0c6b68fa807c5e014d622449db18351dc"
+
+[[package]]
+name = "objc"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
+dependencies = [
+ "malloc_buf",
+]
+
+[[package]]
+name = "objc-foundation"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9"
+dependencies = [
+ "block",
+ "objc",
+ "objc_id",
+]
+
+[[package]]
+name = "objc_id"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b"
+dependencies = [
+ "objc",
+]
+
+[[package]]
+name = "object"
+version = "0.30.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+
+[[package]]
+name = "opaque-debug"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
+
+[[package]]
+name = "openssl"
+version = "0.10.52"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01b8574602df80f7b85fdfc5392fa884a4e3b3f4f35402c070ab34c3d3f78d56"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e17f59264b2809d77ae94f0e1ebabc434773f370d6ca667bd223ea10e06cc7e"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "opml"
+version = "1.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "657e16a7677a52c9bcfca579d77c087bc4240644d7e5491b359bb76ed62c779d"
+dependencies = [
+ "hard-xml",
+ "serde",
+ "thiserror",
+]
+
+[[package]]
+name = "ordered-float"
+version = "2.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7940cf2ca942593318d07fcf2596cdca60a85c9e7fab408a5e21a4f9dcd40d87"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "ordered-stream"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "pango"
+version = "0.17.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52c280b82a881e4208afb3359a8e7fde27a1b272280981f1f34610bed5770d37"
+dependencies = [
+ "bitflags 1.3.2",
+ "gio",
+ "glib",
+ "libc",
+ "once_cell",
+ "pango-sys",
+]
+
+[[package]]
+name = "pango-sys"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4293d0f0b5525eb5c24734d30b0ed02cd02aa734f216883f376b54de49625de8"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "parking"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14f2252c834a40ed9bb5422029649578e63aa341ac401f74e719dd1afda8394e"
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall 0.2.16",
+ "smallvec",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
+
+[[package]]
+name = "phf"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259"
+dependencies = [
+ "phf_shared",
+]
+
+[[package]]
+name = "phf_codegen"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd"
+dependencies = [
+ "phf_generator",
+ "phf_shared",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6"
+dependencies = [
+ "phf_shared",
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "pin-project"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160"
+
+[[package]]
+name = "png"
+version = "0.17.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aaeebc51f9e7d2c150d3f3bfeb667f2aa985db5ef1e3d212847bdedb488beeaa"
+dependencies = [
+ "bitflags 1.3.2",
+ "crc32fast",
+ "fdeflate",
+ "flate2",
+ "miniz_oxide 0.7.1",
+]
+
+[[package]]
+name = "polling"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce"
+dependencies = [
+ "autocfg",
+ "bitflags 1.3.2",
+ "cfg-if",
+ "concurrent-queue",
+ "libc",
+ "log",
+ "pin-project-lite",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "precomputed-hash"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
+
+[[package]]
+name = "proc-macro-crate"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919"
+dependencies = [
+ "once_cell",
+ "toml_edit",
+]
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "psl-types"
+version = "2.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac"
+
+[[package]]
+name = "publicsuffix"
+version = "2.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96a8c1bda5ae1af7f99a2962e49df150414a43d62404644d98dd5c3a93d07457"
+dependencies = [
+ "idna 0.3.0",
+ "psl-types",
+]
+
+[[package]]
+name = "qoi"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001"
+dependencies = [
+ "bytemuck",
+]
+
+[[package]]
+name = "quick-error"
+version = "1.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
+
+[[package]]
+name = "quick-xml"
+version = "0.27.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffc053f057dd768a56f62cd7e434c42c831d296968997e9ac1f76ea7c2d14c41"
+dependencies = [
+ "encoding_rs",
+ "memchr",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "r2d2"
+version = "0.8.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51de85fb3fb6524929c8a2eb85e6b6d363de4e8c48f9e2c2eac4944abc181c93"
+dependencies = [
+ "log",
+ "parking_lot",
+ "scheduled-thread-pool",
+]
+
+[[package]]
+name = "rand"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
+dependencies = [
+ "getrandom 0.1.16",
+ "libc",
+ "rand_chacha 0.2.2",
+ "rand_core 0.5.1",
+ "rand_hc",
+ "rand_pcg",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha 0.3.1",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
+dependencies = [
+ "getrandom 0.1.16",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom 0.2.9",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
+dependencies = [
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rand_pcg"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429"
+dependencies = [
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "random_color"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f5f34bd6526786b2ce5141fd37a4084b5da1ebae74595b5b0d05482a7cef7181"
+dependencies = [
+ "rand 0.7.3",
+]
+
+[[package]]
+name = "rayon"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-utils",
+ "num_cpus",
+]
+
+[[package]]
+name = "rc-writer"
+version = "1.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca8049c74229f22d8cba889ee1d541b05da9c9668d8fe2011bb922250d0be148"
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
+dependencies = [
+ "getrandom 0.2.9",
+ "redox_syscall 0.2.16",
+ "thiserror",
+]
+
+[[package]]
+name = "regex"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af83e617f331cc6ae2da5443c602dfa5af81e517212d9d611a5b3ba1777b5370"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a5996294f19bd3aae0453a862ad728f60e6600695733dd5df01da90c54363a3c"
+
+[[package]]
+name = "reqwest"
+version = "0.11.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13293b639a097af28fc8a90f22add145a9c954e49d77da06263d58cf44d5fb91"
+dependencies = [
+ "async-compression",
+ "base64 0.21.0",
+ "bytes",
+ "cookie",
+ "cookie_store",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-rustls",
+ "hyper-tls",
+ "ipnet",
+ "js-sys",
+ "log",
+ "mime",
+ "mime_guess",
+ "native-tls",
+ "once_cell",
+ "percent-encoding",
+ "pin-project-lite",
+ "rustls",
+ "rustls-pemfile",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "tokio",
+ "tokio-native-tls",
+ "tokio-rustls",
+ "tokio-socks",
+ "tokio-util",
+ "tower-service",
+ "trust-dns-resolver",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "wasm-streams",
+ "web-sys",
+ "webpki-roots",
+ "winreg",
+]
+
+[[package]]
+name = "resolv-conf"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00"
+dependencies = [
+ "hostname",
+ "quick-error",
+]
+
+[[package]]
+name = "ring"
+version = "0.16.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
+dependencies = [
+ "cc",
+ "libc",
+ "once_cell",
+ "spin 0.5.2",
+ "untrusted",
+ "web-sys",
+ "winapi",
+]
+
+[[package]]
+name = "rust-embed"
+version = "6.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b68543d5527e158213414a92832d2aab11a84d2571a5eb021ebe22c43aab066"
+dependencies = [
+ "rust-embed-impl",
+ "rust-embed-utils",
+ "walkdir",
+]
+
+[[package]]
+name = "rust-embed-impl"
+version = "6.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d4e0f0ced47ded9a68374ac145edd65a6c1fa13a96447b873660b2a568a0fd7"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "rust-embed-utils",
+ "shellexpand",
+ "syn 1.0.109",
+ "walkdir",
+]
+
+[[package]]
+name = "rust-embed-utils"
+version = "7.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "512b0ab6853f7e14e3c8754acb43d6f748bb9ced66aa5915a6553ac8213f7731"
+dependencies = [
+ "sha2 0.10.6",
+ "walkdir",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+
+[[package]]
+name = "rustc_version"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "rustix"
+version = "0.37.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8bbfc1d1c7c40c01715f47d71444744a81669ca84e8b63e25a55e169b1f86433"
+dependencies = [
+ "bitflags 1.3.2",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rustls"
+version = "0.20.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f"
+dependencies = [
+ "log",
+ "ring",
+ "sct",
+ "webpki",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b"
+dependencies = [
+ "base64 0.21.0",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "schannel"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3"
+dependencies = [
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "scheduled-thread-pool"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3cbc66816425a074528352f5789333ecff06ca41b36b0b0efdfbb29edc391a19"
+dependencies = [
+ "parking_lot",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "scratch"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1"
+
+[[package]]
+name = "sct"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "security-framework"
+version = "2.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "semver"
+version = "1.0.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed"
+
+[[package]]
+name = "serde"
+version = "1.0.160"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb2f3770c8bce3bcda7e149193a069a0f4365bda1fa5cd88e03bca26afc1216c"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde-value"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c"
+dependencies = [
+ "ordered-float",
+ "serde",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.160"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "291a097c63d8497e00160b166a967a4a79c64f3facdd01cbd7502231688d77df"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.96"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_repr"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bcec881020c684085e55a25f7fd888954d56609ef363479dc5a1305eb0d40cab"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0efd8caf556a6cebd3b285caf480045fcc1ac04f6bd786b09a6f11af30c4fcf4"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_yaml"
+version = "0.8.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b"
+dependencies = [
+ "indexmap",
+ "ryu",
+ "serde",
+ "yaml-rust",
+]
+
+[[package]]
+name = "sha1"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest 0.10.6",
+]
+
+[[package]]
+name = "sha2"
+version = "0.9.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800"
+dependencies = [
+ "block-buffer 0.9.0",
+ "cfg-if",
+ "cpufeatures",
+ "digest 0.9.0",
+ "opaque-debug",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest 0.10.6",
+]
+
+[[package]]
+name = "shellexpand"
+version = "2.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ccc8076840c4da029af4f87e4e8daeb0fca6b87bbb02e10cb60b791450e11e4"
+dependencies = [
+ "dirs 4.0.0",
+]
+
+[[package]]
+name = "simd-adler32"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "238abfbb77c1915110ad968465608b68e869e0772622c9656714e73e5a1a522f"
+
+[[package]]
+name = "siphasher"
+version = "0.3.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
+
+[[package]]
+name = "slab"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
+
+[[package]]
+name = "socket2"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "soup3"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5efe3b0d8335955d6433720767503233dc50ef4fb7fb72cd66634dbf764bb019"
+dependencies = [
+ "bitflags 1.3.2",
+ "futures-channel",
+ "gio",
+ "glib",
+ "libc",
+ "once_cell",
+ "soup3-sys",
+]
+
+[[package]]
+name = "soup3-sys"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "468c7c093ce5665bd19d19a871faf7b92f257788d1311ac874ab157b18867648"
+dependencies = [
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[package]]
+name = "spin"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
+dependencies = [
+ "lock_api",
+]
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "string_cache"
+version = "0.8.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b"
+dependencies = [
+ "new_debug_unreachable",
+ "once_cell",
+ "parking_lot",
+ "phf_shared",
+ "precomputed-hash",
+ "serde",
+]
+
+[[package]]
+name = "string_cache_codegen"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988"
+dependencies = [
+ "phf_generator",
+ "phf_shared",
+ "proc-macro2",
+ "quote",
+]
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "system-deps"
+version = "6.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0fe581ad25d11420b873cf9aedaca0419c2b411487b134d4d21065f3d092055"
+dependencies = [
+ "cfg-expr",
+ "heck",
+ "pkg-config",
+ "toml 0.7.3",
+ "version-compare",
+]
+
+[[package]]
+name = "target-lexicon"
+version = "0.12.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd1ba337640d60c3e96bc6f0638a939b9c9a7f2c316a1598c279828b3d1dc8c5"
+
+[[package]]
+name = "temp-dir"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af547b166dd1ea4b472165569fc456cfb6818116f854690b0ff205e636523dab"
+
+[[package]]
+name = "tempfile"
+version = "3.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "redox_syscall 0.3.5",
+ "rustix",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "tendril"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0"
+dependencies = [
+ "futf",
+ "mac",
+ "utf-8",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "thread-id"
+version = "4.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fdfe0627923f7411a43ec9ec9c39c3a9b4151be313e0922042581fb6c9b717f"
+dependencies = [
+ "libc",
+ "redox_syscall 0.2.16",
+ "winapi",
+]
+
+[[package]]
+name = "tiff"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7449334f9ff2baf290d55d73983a7d6fa15e01198faef72af07e2a8db851e471"
+dependencies = [
+ "flate2",
+ "jpeg-decoder",
+ "weezl",
+]
+
+[[package]]
+name = "tiger"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "443e531cbcf9de83258cfef70bcd56c91188de5819ebd4b19c85f589e0617005"
+dependencies = [
+ "block-buffer 0.9.0",
+ "byteorder",
+ "digest 0.9.0",
+]
+
+[[package]]
+name = "time"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"
+dependencies = [
+ "libc",
+ "wasi 0.10.0+wasi-snapshot-preview1",
+ "winapi",
+]
+
+[[package]]
+name = "time"
+version = "0.3.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd0cbfecb4d19b5ea75bb31ad904eb5b9fa13f21079c3b92017ebdf4999a5890"
+dependencies = [
+ "itoa",
+ "serde",
+ "time-core",
+ "time-macros",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd"
+
+[[package]]
+name = "time-macros"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd80a657e71da814b8e5d60d3374fc6d35045062245d80224748ae522dd76f36"
+dependencies = [
+ "time-core",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "1.28.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3c786bf8134e5a3a166db9b29ab8f48134739014a3eca7bc6bfa95d673b136f"
+dependencies = [
+ "autocfg",
+ "bytes",
+ "libc",
+ "mio",
+ "num_cpus",
+ "pin-project-lite",
+ "socket2",
+ "tokio-macros",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "tokio-native-tls"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
+dependencies = [
+ "native-tls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.23.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59"
+dependencies = [
+ "rustls",
+ "tokio",
+ "webpki",
+]
+
+[[package]]
+name = "tokio-socks"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51165dfa029d2a65969413a6cc96f354b86b464498702f174a4efa13608fd8c0"
+dependencies = [
+ "either",
+ "futures-util",
+ "thiserror",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b403acf6f2bb0859c93c7f0d967cb4a75a7ac552100f9322faf64dc047669b21"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.19.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "239410c8609e8125456927e6707163a3b1fdb40561e4b803bc041f466ccfdc13"
+dependencies = [
+ "indexmap",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tracing"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+dependencies = [
+ "cfg-if",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f57e3ca2a01450b1a921183a9c9cbfda207fd822cef4ccb00a65402cbba7a74"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "trust-dns-proto"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f7f83d1e4a0e4358ac54c5c3681e5d7da5efc5a7a632c90bb6d6669ddd9bc26"
+dependencies = [
+ "async-trait",
+ "cfg-if",
+ "data-encoding",
+ "enum-as-inner",
+ "futures-channel",
+ "futures-io",
+ "futures-util",
+ "idna 0.2.3",
+ "ipnet",
+ "lazy_static",
+ "rand 0.8.5",
+ "smallvec",
+ "thiserror",
+ "tinyvec",
+ "tokio",
+ "tracing",
+ "url",
+]
+
+[[package]]
+name = "trust-dns-resolver"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aff21aa4dcefb0a1afbfac26deb0adc93888c7d295fb63ab273ef276ba2b7cfe"
+dependencies = [
+ "cfg-if",
+ "futures-util",
+ "ipconfig",
+ "lazy_static",
+ "lru-cache",
+ "parking_lot",
+ "resolv-conf",
+ "smallvec",
+ "thiserror",
+ "tokio",
+ "tracing",
+ "trust-dns-proto",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+
+[[package]]
+name = "typemap-ors"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a68c24b707f02dd18f1e4ccceb9d49f2058c2fb86384ef9972592904d7a28867"
+dependencies = [
+ "unsafe-any-ors",
+]
+
+[[package]]
+name = "typenum"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
+
+[[package]]
+name = "uds_windows"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce65604324d3cce9b966701489fbd0cf318cb1f7bd9dd07ac9a4ee6fb791930d"
+dependencies = [
+ "tempfile",
+ "winapi",
+]
+
+[[package]]
+name = "unicase"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "unsafe-any-ors"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0a303d30665362d9680d7d91d78b23f5f899504d4f08b3c4cf08d055d87c0ad"
+dependencies = [
+ "destructure_traitobject",
+]
+
+[[package]]
+name = "untrusted"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+
+[[package]]
+name = "url"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
+dependencies = [
+ "form_urlencoded",
+ "idna 0.3.0",
+ "percent-encoding",
+ "serde",
+]
+
+[[package]]
+name = "utf-8"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
+
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
+[[package]]
+name = "uuid"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dad5567ad0cf5b760e5665964bec1b47dfd077ba8a2544b513f3556d3d239a2"
+dependencies = [
+ "getrandom 0.2.9",
+]
+
+[[package]]
+name = "value-bag"
+version = "1.0.0-alpha.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2209b78d1249f7e6f3293657c9779fe31ced465df091bbd433a1cf88e916ec55"
+dependencies = [
+ "ctor",
+ "version_check",
+]
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "version-compare"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "waker-fn"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca"
+
+[[package]]
+name = "walkdir"
+version = "2.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "want"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
+dependencies = [
+ "log",
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.9.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
+
+[[package]]
+name = "wasi"
+version = "0.10.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d"
+
+[[package]]
+name = "wasm-streams"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bbae3363c08332cadccd13b67db371814cd214c2524020932f0804b8cf7c078"
+dependencies = [
+ "futures-util",
+ "js-sys",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+]
+
+[[package]]
+name = "web-sys"
+version = "0.3.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webkit6"
+version = "0.1.0"
+source = "git+https://gitlab.gnome.org/JanGernert/webkit6-rs.git?branch=crates-io#eeb540d62cf41d216493e7837008571826d50473"
+dependencies = [
+ "bitflags 1.3.2",
+ "gdk4",
+ "gio",
+ "glib",
+ "gtk4",
+ "javascriptcore6",
+ "libc",
+ "once_cell",
+ "soup3",
+ "webkit6-sys",
+]
+
+[[package]]
+name = "webkit6-sys"
+version = "0.1.0"
+source = "git+https://gitlab.gnome.org/JanGernert/webkit6-rs.git?branch=crates-io#eeb540d62cf41d216493e7837008571826d50473"
+dependencies = [
+ "gdk4-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "gtk4-sys",
+ "javascriptcore6-sys",
+ "libc",
+ "soup3-sys",
+ "system-deps",
+]
+
+[[package]]
+name = "webpki"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.22.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87"
+dependencies = [
+ "webpki",
+]
+
+[[package]]
+name = "weezl"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb"
+
+[[package]]
+name = "widestring"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17882f045410753661207383517a6f62ec3dbeb6a4ed2acce01f0728238d1983"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
+dependencies = [
+ "windows-targets 0.48.0",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.0",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.0",
+ "windows_aarch64_msvc 0.48.0",
+ "windows_i686_gnu 0.48.0",
+ "windows_i686_msvc 0.48.0",
+ "windows_x86_64_gnu 0.48.0",
+ "windows_x86_64_gnullvm 0.48.0",
+ "windows_x86_64_msvc 0.48.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
+
+[[package]]
+name = "winnow"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5617da7e1f97bf363947d767b91aaf3c2bbc19db7fda9c65af1278713d58e0a2"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "winreg"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "xdg-home"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2769203cd13a0c6015d515be729c526d041e9cf2c0cc478d57faee85f40c6dcd"
+dependencies = [
+ "nix",
+ "winapi",
+]
+
+[[package]]
+name = "xml-rs"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3"
+
+[[package]]
+name = "xml5ever"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4034e1d05af98b51ad7214527730626f019682d797ba38b51689212118d8e650"
+dependencies = [
+ "log",
+ "mac",
+ "markup5ever",
+]
+
+[[package]]
+name = "xmlparser"
+version = "0.13.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d25c75bf9ea12c4040a97f829154768bbbce366287e2dc044af160cd79a13fd"
+
+[[package]]
+name = "xmltree"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d7d8a75eaf6557bb84a65ace8609883db44a29951042ada9b393151532e41fcb"
+dependencies = [
+ "xml-rs",
+]
+
+[[package]]
+name = "yaml-rust"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
+dependencies = [
+ "linked-hash-map",
+]
+
+[[package]]
+name = "zbus"
+version = "3.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29242fa5ec5693629ae74d6eb1f69622a9511f600986d6d9779bccf36ac316e3"
+dependencies = [
+ "async-broadcast",
+ "async-executor",
+ "async-fs",
+ "async-io",
+ "async-lock",
+ "async-recursion",
+ "async-task",
+ "async-trait",
+ "byteorder",
+ "derivative",
+ "enumflags2",
+ "event-listener",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "hex",
+ "nix",
+ "once_cell",
+ "ordered-stream",
+ "rand 0.8.5",
+ "serde",
+ "serde_repr",
+ "sha1",
+ "static_assertions",
+ "tracing",
+ "uds_windows",
+ "winapi",
+ "xdg-home",
+ "zbus_macros",
+ "zbus_names",
+ "zvariant",
+]
+
+[[package]]
+name = "zbus_macros"
+version = "3.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "537793e26e9af85f774801dc52c6f6292352b2b517c5cf0449ffd3735732a53a"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "syn 1.0.109",
+ "zvariant_utils",
+]
+
+[[package]]
+name = "zbus_names"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f34f314916bd89bdb9934154627fab152f4f28acdda03e7c4c68181b214fe7e3"
+dependencies = [
+ "serde",
+ "static_assertions",
+ "zvariant",
+]
+
+[[package]]
+name = "zune-inflate"
+version = "0.2.53"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "440a08fd59c6442e4b846ea9b10386c38307eae728b216e1ab2c305d1c9daaf8"
+dependencies = [
+ "simd-adler32",
+]
+
+[[package]]
+name = "zvariant"
+version = "3.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46fe4914a985446d6fd287019b5fceccce38303d71407d9e6e711d44954a05d8"
+dependencies = [
+ "byteorder",
+ "enumflags2",
+ "libc",
+ "serde",
+ "static_assertions",
+ "url",
+ "zvariant_derive",
+]
+
+[[package]]
+name = "zvariant_derive"
+version = "3.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34c20260af4b28b3275d6676c7e2a6be0d4332e8e0aba4616d34007fd84e462a"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "zvariant_utils",
+]
+
+[[package]]
+name = "zvariant_utils"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53b22993dbc4d128a17a3b6c92f1c63872dd67198537ee728d8b5d7c40640a8b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
diff --git a/nixpkgs/pkgs/applications/networking/feedreaders/newsflash/default.nix b/nixpkgs/pkgs/applications/networking/feedreaders/newsflash/default.nix
new file mode 100644
index 000000000000..481113682bce
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/feedreaders/newsflash/default.nix
@@ -0,0 +1,108 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitLab
+, cargo
+, meson
+, ninja
+, pkg-config
+, rustc
+, wrapGAppsHook4
+, gdk-pixbuf
+, glib
+, gtk4
+, libadwaita
+, libxml2
+, openssl
+, sqlite
+, webkitgtk
+, glib-networking
+, librsvg
+, gst_all_1
+, gitUpdater
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "newsflash";
+  version = "2.3.1";
+
+  src = fetchFromGitLab {
+    owner = "news-flash";
+    repo = "news_flash_gtk";
+    rev = "refs/tags/v.${finalAttrs.version}";
+    sha256 = "sha256-JUAlDc2mp8M0vjiWcDoyBw/sKCmd4J8e9wEwZoiW0AE=";
+  };
+
+  cargoDeps = rustPlatform.importCargoLock {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "javascriptcore6-0.1.0" = "sha256-7w8CDY13dCRlFc77XxJ2/xZqlKSjqM0eiOvILOrJ4ic=";
+      "news-flash-2.3.0-alpha.0" = "sha256-phoZmTY1YVZIIktqLMnal9H5SMgNWwx7m+7AMtDcFJM=";
+      "newsblur_api-0.2.0" = "sha256-6vnFeJbdFeIau2rpUk9o72DD2ZCqicljmQjFVhY71NI=";
+      "article_scraper-2.0.0-alpha.0" = "sha256-HPEKZc7O7pbgcwR2l0kD/5442W1hzrfMadc0amrjxwI=";
+    };
+  };
+
+  patches = [
+    # Post install tries to generate an icon cache & update the
+    # desktop database. The gtk setup hook drop-icon-theme-cache.sh
+    # would strip out the icon cache and the desktop database wouldn't
+    # be included in $out. They will generated by xdg.mime.enable &
+    # gtk.iconCache.enable instead.
+    ./no-post-install.patch
+  ];
+
+  postPatch = ''
+    patchShebangs build-aux/cargo.sh
+  '';
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    wrapGAppsHook4
+
+    # Provides setup hook to fix "Unrecognized image file format"
+    gdk-pixbuf
+
+    # Provides glib-compile-resources to compile gresources
+    glib
+    rustPlatform.cargoSetupHook
+    cargo
+    rustc
+  ];
+
+  buildInputs = [
+    gtk4
+    libadwaita
+    libxml2
+    openssl
+    sqlite
+    webkitgtk
+
+    # TLS support for loading external content in webkitgtk WebView
+    glib-networking
+
+    # SVG support for gdk-pixbuf
+    librsvg
+  ] ++ (with gst_all_1; [
+    # Audio & video support for webkitgtk WebView
+    gstreamer
+    gst-plugins-base
+    gst-plugins-good
+    gst-plugins-bad
+  ]);
+
+  passthru.updateScript = gitUpdater {
+    rev-prefix = "v.";
+  };
+
+  meta = with lib; {
+    description = "A modern feed reader designed for the GNOME desktop";
+    homepage = "https://gitlab.com/news-flash/news_flash_gtk";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ kira-bruneau stunkymonkey ];
+    platforms = platforms.unix;
+    mainProgram = "com.gitlab.newsflash";
+  };
+})
diff --git a/nixpkgs/pkgs/applications/networking/feedreaders/newsflash/no-post-install.patch b/nixpkgs/pkgs/applications/networking/feedreaders/newsflash/no-post-install.patch
new file mode 100644
index 000000000000..b638f30cd44c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/feedreaders/newsflash/no-post-install.patch
@@ -0,0 +1,10 @@
+diff --git a/meson.build b/meson.build
+index 1d7089c..1952e7f 100644
+--- a/meson.build
++++ b/meson.build
+@@ -61,5 +61,3 @@ meson.add_dist_script(
+   meson.source_root(),
+   join_paths(meson.build_root(), 'meson-dist', meson.project_name() + '-' + newsflash_version)
+ )
+-
+-meson.add_install_script('build-aux/meson_post_install.py')
diff --git a/nixpkgs/pkgs/applications/networking/feedreaders/photon/default.nix b/nixpkgs/pkgs/applications/networking/feedreaders/photon/default.nix
new file mode 100644
index 000000000000..34612e2a87fc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/feedreaders/photon/default.nix
@@ -0,0 +1,27 @@
+{ buildGoModule, fetchFromSourcehut, lib, xorg }:
+
+buildGoModule rec {
+  pname = "photon";
+  version = "unstable-2022-01-11";
+
+  src = fetchFromSourcehut {
+    owner = "~ghost08";
+    repo = "photon";
+    rev = "5d1f7dd8d0d526096886b03c7bc0ef56cbdd6d79";
+    sha256 = "sha256-2RSGLWfthcChd5YhDSBfLSch6wuTUv1Sh1f7flgzQwc=";
+  };
+
+  buildInputs = [ xorg.libX11 ];
+
+  proxyVendor = true;
+
+  vendorHash = "sha256-n9XNqXIoqn+f0xKCenJWXUYXtQhtbNBar68onWH/WV4=";
+
+  meta = with lib; {
+    description = "RSS/Atom reader with the focus on speed, usability and a bit of unix philosophy";
+    homepage = "https://sr.ht/~ghost08/photon";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ kmein ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/feedreaders/rss2email/default.nix b/nixpkgs/pkgs/applications/networking/feedreaders/rss2email/default.nix
new file mode 100644
index 000000000000..2653af6f51ae
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/feedreaders/rss2email/default.nix
@@ -0,0 +1,50 @@
+{ pythonPackages, fetchurl, lib, nixosTests }:
+
+with pythonPackages;
+
+buildPythonApplication rec {
+  pname = "rss2email";
+  version = "3.14";
+
+  propagatedBuildInputs = [ feedparser html2text ];
+  nativeCheckInputs = [ beautifulsoup4 ];
+
+  src = fetchurl {
+    url = "mirror://pypi/r/rss2email/${pname}-${version}.tar.gz";
+    sha256 = "sha256-RwORS2PHquxBZLNKqCJtR5XX4SHqPCb/Fn+Y68dfI/g=";
+  };
+
+  outputs = [ "out" "man" "doc" ];
+
+  postPatch = ''
+    # sendmail executable is called from PATH instead of sbin by default
+    sed -e 's|/usr/sbin/sendmail|sendmail|' \
+        -i rss2email/config.py
+  '';
+
+  postInstall = ''
+    install -Dm 644 r2e.1 $man/share/man/man1/r2e.1
+    # an alias for better finding the manpage
+    ln -s -T r2e.1 $man/share/man/man1/rss2email.1
+
+    # copy documentation
+    mkdir -p $doc/share/doc/rss2email
+    cp AUTHORS COPYING CHANGELOG README.rst $doc/share/doc/rss2email/
+  '';
+
+  checkPhase = ''
+    runHook preCheck
+    env PATH=$out/bin:$PATH python ./test/test.py
+    runHook postCheck
+  '';
+
+  meta = with lib; {
+    description = "A tool that converts RSS/Atom newsfeeds to email";
+    homepage = "https://pypi.python.org/pypi/rss2email";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ ekleog ];
+  };
+  passthru.tests = {
+    smoke-test = nixosTests.rss2email;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/feedreaders/rssguard/default.nix b/nixpkgs/pkgs/applications/networking/feedreaders/rssguard/default.nix
new file mode 100644
index 000000000000..95c274ab88ad
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/feedreaders/rssguard/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, qtwebengine
+, qttools
+, wrapGAppsHook
+, wrapQtAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "rssguard";
+  version = "4.5.0";
+
+  src = fetchFromGitHub {
+    owner = "martinrotter";
+    repo = pname;
+    rev = "refs/tags/${version}";
+    sha256 = "sha256-R3fw5GLQUYZUX1kH6e0IRQ/I/IsFTOK6aP5h5QVU0Ps=";
+  };
+
+  buildInputs =  [ qtwebengine qttools ];
+  nativeBuildInputs = [ cmake wrapGAppsHook wrapQtAppsHook ];
+  qmakeFlags = [ "CONFIG+=release" ];
+
+  meta = with lib; {
+    description = "Simple RSS/Atom feed reader with online synchronization";
+    longDescription = ''
+      RSS Guard is a simple, light and easy-to-use RSS/ATOM feed aggregator
+      developed using Qt framework and with online feed synchronization support
+      for ownCloud/Nextcloud.
+    '';
+    homepage = "https://github.com/martinrotter/rssguard";
+    changelog = "https://github.com/martinrotter/rssguard/releases/tag/${version}";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ jluttine ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/feedreaders/rsstail/default.nix b/nixpkgs/pkgs/applications/networking/feedreaders/rsstail/default.nix
new file mode 100644
index 000000000000..af2dbd1a9a4f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/feedreaders/rsstail/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromGitHub, libmrss, libiconv }:
+
+stdenv.mkDerivation {
+  pname = "rsstail";
+  version = "2.1";
+
+  src = fetchFromGitHub {
+    owner = "folkertvanheusden";
+    repo = "rsstail";
+    rev = "6f2436185372b3f945a4989406c4b6a934fe8a95";
+    sha256 = "12p69i3g1fwlw0bds9jqsdmzkid3k5a41w31d227i7vm12wcvjf6";
+  };
+
+  buildInputs = [ libmrss ] ++ lib.optionals stdenv.isDarwin [ libiconv ];
+
+  postPatch = ''
+    substituteInPlace Makefile --replace -liconv_hook ""
+  '';
+
+  makeFlags = [ "prefix=$(out)" ];
+  enableParallelBuilding = true;
+
+  # just runs cppcheck linter
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Monitor RSS feeds for new entries";
+    longDescription = ''
+      RSSTail is more or less an RSS reader: it monitors an RSS feed and if it
+      detects a new entry it'll emit only that new entry.
+    '';
+    homepage = "https://www.vanheusden.com/rsstail/";
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.Necior ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/feedreaders/russ/default.nix b/nixpkgs/pkgs/applications/networking/feedreaders/russ/default.nix
new file mode 100644
index 000000000000..4bf3c2a34000
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/feedreaders/russ/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, xorg
+}:
+
+rustPlatform.buildRustPackage {
+  pname = "russ";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "ckampfe";
+    repo = "russ";
+    rev = "1482bb1df13738fdd4ea1badf2146a9ed8e6656e";
+    hash = "sha256-MvTMo2q/cQ/LQNdUV8SmHgGlA42kLl0i9mdcoAFV/I4=";
+  };
+
+  cargoHash = "sha256-ObWrwXMGXkLqqM7VXhOXArshk2lVkbOTXhrQImDQp1s=";
+
+  # tests are network based :(
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A TUI RSS reader with vim-like controls and a local-first, offline-first focus";
+    homepage = "https://github.com/ckampfe/russ";
+    license = with licenses; [ agpl3Only ];
+    maintainers = with maintainers; [ blusk ];
+    changelog = "https://github.com/ckampfe/russ/blob/master/CHANGELOG.md";
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/feedreaders/tuifeed/default.nix b/nixpkgs/pkgs/applications/networking/feedreaders/tuifeed/default.nix
new file mode 100644
index 000000000000..89494bb6d017
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/feedreaders/tuifeed/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, stdenv
+, fetchCrate
+, rustPlatform
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "tuifeed";
+  version = "0.3.2";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-JG/l6NfN5RqBpz9NVcVY3mP/iE31TXvw+Vjq8N8rNIY=";
+  };
+
+  cargoHash = "sha256-QKSNbpVRtSKp2q1jVPYTS8XCMtQAyg3AWvD/6+OjI7Y=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Security ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A terminal feed reader with a fancy UI";
+    homepage = "https://github.com/veeso/tuifeed";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ devhell ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/feedreaders/yarr/default.nix b/nixpkgs/pkgs/applications/networking/feedreaders/yarr/default.nix
new file mode 100644
index 000000000000..ab3e6af5723e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/feedreaders/yarr/default.nix
@@ -0,0 +1,38 @@
+{ lib, buildGoModule, fetchFromGitHub, testers, yarr }:
+
+buildGoModule rec {
+  pname = "yarr";
+  version = "2.4";
+
+  src = fetchFromGitHub {
+    owner = "nkanaev";
+    repo = "yarr";
+    rev = "v${version}";
+    hash = "sha256-ZMQ+IX8dZuxyxQhD/eWAe4bGGCVcaCeVgF+Wqs79G+k=";
+  };
+
+  vendorHash = null;
+
+  subPackages = [ "src" ];
+
+  ldflags = [ "-s" "-w" "-X main.Version=${version}" "-X main.GitHash=none" ];
+
+  tags = [ "sqlite_foreign_keys" "release" ];
+
+  postInstall = ''
+    mv $out/bin/{src,yarr}
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = yarr;
+    version = "v${version}";
+  };
+
+  meta = with lib; {
+    description = "Yet another rss reader";
+    homepage = "https://github.com/nkanaev/yarr";
+    changelog = "https://github.com/nkanaev/yarr/blob/v${version}/doc/changelog.txt";
+    license = licenses.mit;
+    maintainers = with maintainers; [ sikmir ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/filebrowser/default.nix b/nixpkgs/pkgs/applications/networking/filebrowser/default.nix
new file mode 100644
index 000000000000..153cc791cbf9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/filebrowser/default.nix
@@ -0,0 +1,60 @@
+{ buildGoModule, buildNpmPackage, fetchFromGitHub, lib }:
+
+let
+  frontend = buildNpmPackage rec {
+    pname = "filebrowser-frontend";
+    version = "2.23.0";
+
+    src = fetchFromGitHub {
+      owner = "filebrowser";
+      repo = "filebrowser";
+      rev = "v${version}";
+      hash = "sha256-xhBIJcEtxDdMXSgQtLAV0UWzPtrvKEil0WV76K5ycBc=";
+    };
+
+    sourceRoot = "${src.name}/frontend";
+
+    npmDepsHash = "sha256-acNIMKHc4q7eiFLPBtKZBNweEsrt+//0VR6dqwXHTvA=";
+
+    NODE_OPTIONS = "--openssl-legacy-provider";
+
+    installPhase = ''
+      runHook preInstall
+
+      mkdir $out
+      mv dist $out
+
+      runHook postInstall
+    '';
+  };
+in
+buildGoModule rec {
+  pname = "filebrowser";
+  version = "2.23.0";
+
+  src = fetchFromGitHub {
+    owner = "filebrowser";
+    repo = "filebrowser";
+    rev = "v${version}";
+    hash = "sha256-xhBIJcEtxDdMXSgQtLAV0UWzPtrvKEil0WV76K5ycBc=";
+  };
+
+  vendorHash = "sha256-MR0ju2Nomb3j78Z+1YcJY+jPd40MZpuOTuQJM94AM8A=";
+
+  excludedPackages = [ "tools" ];
+
+  preBuild = ''
+    cp -r ${frontend}/dist frontend/
+  '';
+
+  passthru = {
+    inherit frontend;
+  };
+
+  meta = with lib; {
+    description = "Filebrowser is a web application for managing files and directories";
+    homepage = "https://filebrowser.org";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ nielsegberts ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/firehol/default.nix b/nixpkgs/pkgs/applications/networking/firehol/default.nix
new file mode 100644
index 000000000000..47b69eaed6ea
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/firehol/default.nix
@@ -0,0 +1,58 @@
+{ stdenv, lib, fetchFromGitHub, autoconf, automake, curl, iprange, iproute2, iptables, iputils
+, kmod, nettools, procps, tcpdump, traceroute, util-linux, whois
+
+# If true, just install FireQOS without FireHOL
+, onlyQOS ? false
+}:
+
+stdenv.mkDerivation rec {
+  pname = "firehol";
+  version = "3.1.7";
+
+  src = fetchFromGitHub {
+    owner = "firehol";
+    repo = "firehol";
+    rev = "v${version}";
+    sha256 = "sha256-gq7l7QoUsK+j5DUn84kD9hlUTC4hz3ds3gNJc1tRygs=";
+  };
+
+  patches = [
+    # configure tries to determine if `ping6` or the newer, combined
+    # `ping` is installed by using `ping -6` which would fail.
+    ./firehol-ping6.patch
+
+    # put firehol config files in /etc/firehol (not $out/etc/firehol)
+    # to avoid error on startup, see #35114
+    ./firehol-sysconfdir.patch
+
+    # we must quote "$UNAME_CMD", or the dash in
+    # /nix/store/...-coreutils-.../bin/uname will be interpreted as
+    # IFS -> error. this might be considered an upstream bug but only
+    # appears when there are dashes in the command path
+    ./firehol-uname-command.patch
+  ];
+
+  nativeBuildInputs = [ autoconf automake ];
+  buildInputs = [
+    curl iprange iproute2 iptables iputils kmod
+    nettools procps tcpdump traceroute util-linux whois
+  ];
+
+  preConfigure = "./autogen.sh";
+  configureFlags = [ "--localstatedir=/var"
+                     "--disable-doc" "--disable-man"
+                     "--disable-update-ipsets" ] ++
+                   lib.optionals onlyQOS [ "--disable-firehol" ];
+
+  meta = with lib; {
+    description = "A firewall for humans";
+    longDescription = ''
+      FireHOL, an iptables stateful packet filtering firewall for humans!
+      FireQOS, a TC based bandwidth shaper for humans!
+    '';
+    homepage = "https://firehol.org/";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ oxzi ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/firehol/firehol-ping6.patch b/nixpkgs/pkgs/applications/networking/firehol/firehol-ping6.patch
new file mode 100644
index 000000000000..7e06e503ef6f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/firehol/firehol-ping6.patch
@@ -0,0 +1,29 @@
+--- a/m4/ax_check_ping_ipv6.m4
++++ b/m4/ax_check_ping_ipv6.m4
+@@ -42,16 +42,16 @@ AC_DEFUN([AX_CHECK_PING_IPV6],
+
+     AC_CACHE_CHECK([whether ]PING[ has working -6 option], [ac_cv_ping_6_opt],
+     [
+-        ac_cv_ping_6_opt=no
+-        if test -n "$PING"; then
+-            echo "Trying '$PING -6 -c 1 ::1'" >&AS_MESSAGE_LOG_FD
+-            $PING -6 -c 1 ::1 > conftest.out 2>&1
+-            if test "$?" = 0; then
+-                ac_cv_ping_6_opt=yes
+-            fi
+-            cat conftest.out >&AS_MESSAGE_LOG_FD
+-            rm -f conftest.out
+-        fi
++        ac_cv_ping_6_opt=yes
++        #if test -n "$PING"; then
++        #    echo "Trying '$PING -6 -c 1 ::1'" >&AS_MESSAGE_LOG_FD
++        #    $PING -6 -c 1 ::1 > conftest.out 2>&1
++        #    if test "$?" = 0; then
++        #        ac_cv_ping_6_opt=yes
++        #    fi
++        #    cat conftest.out >&AS_MESSAGE_LOG_FD
++        #    rm -f conftest.out
++        #fi
+     ])
+
+     AS_IF([test "x$ac_cv_ping_6_opt" = "xyes"],[
diff --git a/nixpkgs/pkgs/applications/networking/firehol/firehol-sysconfdir.patch b/nixpkgs/pkgs/applications/networking/firehol/firehol-sysconfdir.patch
new file mode 100644
index 000000000000..c541dd585acc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/firehol/firehol-sysconfdir.patch
@@ -0,0 +1,5 @@
+--- a/sbin/install.config.in.in
++++ b/sbin/install.config.in.in
+@@ -4,1 +4,1 @@
+-SYSCONFDIR="@sysconfdir_POST@"
++SYSCONFDIR="/etc"
diff --git a/nixpkgs/pkgs/applications/networking/firehol/firehol-uname-command.patch b/nixpkgs/pkgs/applications/networking/firehol/firehol-uname-command.patch
new file mode 100644
index 000000000000..92ab4cd93214
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/firehol/firehol-uname-command.patch
@@ -0,0 +1,11 @@
+--- a/sbin/firehol
++++ b/sbin/firehol
+@@ -10295,7 +10295,7 @@
+ 	kmaj=$1
+ 	kmin=$2
+
+-	set -- $($UNAME_CMD -r)
++	set -- $("$UNAME_CMD" -r)
+ 	eval $kmaj=\$1 $kmin=\$2
+ }
+ kernel_maj_min KERNELMAJ KERNELMIN
diff --git a/nixpkgs/pkgs/applications/networking/firehol/iprange.nix b/nixpkgs/pkgs/applications/networking/firehol/iprange.nix
new file mode 100644
index 000000000000..7dc43d5c116c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/firehol/iprange.nix
@@ -0,0 +1,18 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "iprange";
+  version = "1.0.4";
+
+  src = fetchurl {
+    url = "https://github.com/firehol/iprange/releases/download/v${version}/iprange-${version}.tar.xz";
+    sha256 = "0rymw4ydn09dng34q4g5111706fyppzs2gd5br76frgvfj4x2f71";
+  };
+
+  meta = with lib; {
+    description = "manage IP ranges";
+    homepage = "https://github.com/firehol/iprange";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ oxzi ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/firewalld/default.nix b/nixpkgs/pkgs/applications/networking/firewalld/default.nix
new file mode 100644
index 000000000000..5a7dc544bf19
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/firewalld/default.nix
@@ -0,0 +1,104 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, bash
+, docbook_xml_dtd_42
+, docbook-xsl-nons
+, glib
+, gobject-introspection
+, gtk3
+, intltool
+, libnotify
+, libxml2
+, libxslt
+, networkmanagerapplet
+, pkg-config
+, python3
+, wrapGAppsNoGuiHook
+, withGui ? false
+}:
+
+let
+  pythonPath = python3.withPackages (ps: with ps; [
+    dbus-python
+    nftables
+    pygobject3
+  ] ++ lib.optionals withGui [
+    pyqt5
+    pyqt5_sip
+  ]);
+in
+stdenv.mkDerivation rec {
+  pname = "firewalld";
+  version = "2.0.0";
+
+  src = fetchFromGitHub {
+    owner = "firewalld";
+    repo = "firewalld";
+    rev = "v${version}";
+    sha256 = "sha256-seOokeFbjCuwUsB6MbrxaeTlPUzwNzkJPbByM9/oDDU=";
+  };
+
+  patches = [
+    ./respect-xml-catalog-files-var.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace src/firewall/config/__init__.py.in \
+      --replace "/usr/share" "$out/share"
+
+    for file in config/firewall-{applet,config}.desktop.in; do
+      substituteInPlace $file \
+        --replace "/usr/bin/" "$out/bin/"
+    done
+  '' + lib.optionalString withGui ''
+    substituteInPlace src/firewall-applet.in \
+      --replace "/usr/bin/nm-connection-editor" "${networkmanagerapplet}/bin/nm-conenction-editor"
+  '';
+
+  nativeBuildInputs = [
+    autoreconfHook
+    docbook_xml_dtd_42
+    docbook-xsl-nons
+    glib
+    intltool
+    libxml2
+    libxslt
+    pkg-config
+    python3
+    python3.pkgs.wrapPython
+  ] ++ lib.optionals withGui [
+    gobject-introspection
+    wrapGAppsNoGuiHook
+  ];
+
+  buildInputs = [
+    bash
+    glib
+  ] ++ lib.optionals withGui [
+    gtk3
+    libnotify
+    pythonPath
+  ];
+
+  dontWrapGApps = true;
+
+  preFixup = lib.optionalString withGui ''
+    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  postFixup = ''
+    chmod +x $out/share/firewalld/*.py $out/share/firewalld/testsuite/python/*.py $out/share/firewalld/testsuite/{,integration/}testsuite
+    patchShebangs --host $out/share/firewalld/testsuite/{,integration/}testsuite $out/share/firewalld/*.py
+    wrapPythonProgramsIn "$out/bin" "$out ${pythonPath}"
+    wrapPythonProgramsIn "$out/share/firewalld/testsuite/python" "$out ${pythonPath}"
+  '';
+
+  meta = with lib; {
+    description = "Firewall daemon with D-Bus interface";
+    homepage = "https://github.com/firewalld/firewalld";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/firewalld/respect-xml-catalog-files-var.patch b/nixpkgs/pkgs/applications/networking/firewalld/respect-xml-catalog-files-var.patch
new file mode 100644
index 000000000000..03a10121c6be
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/firewalld/respect-xml-catalog-files-var.patch
@@ -0,0 +1,13 @@
+--- a/m4/jh_path_xml_catalog.m4
++++ b/m4/jh_path_xml_catalog.m4
+@@ -40,8 +40,8 @@ AC_DEFUN([JH_CHECK_XML_CATALOG],
+ [
+   AC_REQUIRE([JH_PATH_XML_CATALOG],[JH_PATH_XML_CATALOG(,[:])])dnl
+   AC_MSG_CHECKING([for ifelse([$2],,[$1],[$2]) in XML catalog])
+-  if $jh_found_xmlcatalog && \
+-     AC_RUN_LOG([$XMLCATALOG --noout "$XML_CATALOG_FILE" "$1" >&2]); then
++  # empty argument forces libxml to use XML_CATALOG_FILES variable
++  if AC_RUN_LOG([$XMLCATALOG --noout "" "$1" >&2]); then
+     AC_MSG_RESULT([found])
+     ifelse([$3],,,[$3
+ ])dnl
diff --git a/nixpkgs/pkgs/applications/networking/flent/default.nix b/nixpkgs/pkgs/applications/networking/flent/default.nix
new file mode 100644
index 000000000000..8da9a49f90a5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/flent/default.nix
@@ -0,0 +1,55 @@
+{
+  lib,
+  buildPythonApplication,
+  fetchPypi,
+  procps,
+  python,
+  qt5,
+  xvfb-run,
+}:
+buildPythonApplication rec {
+  pname = "flent";
+  version = "2.1.1";
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-21gd6sPYCZll3Q2O7kucTRhXvc5byXeQr50+1bZVT3M=";
+  };
+
+  buildInputs = [python.pkgs.sphinx];
+  nativeBuildInputs = [qt5.wrapQtAppsHook];
+  propagatedBuildInputs = [
+    procps
+    python.pkgs.matplotlib
+    python.pkgs.pyqt5
+    python.pkgs.qtpy
+  ];
+  nativeCheckInputs = [
+    python.pkgs.mock
+    xvfb-run
+  ];
+
+  checkPhase = ''
+    # we want the gui tests to always run
+    sed -i 's|self.skip|pass; #&|' unittests/test_gui.py
+
+    cat >test-runner <<EOF
+    #!/bin/sh
+    ${python.pythonForBuild.interpreter} nix_run_setup test
+    EOF
+    chmod +x test-runner
+    wrapQtApp test-runner --prefix PYTHONPATH : $PYTHONPATH
+    xvfb-run -s '-screen 0 800x600x24' ./test-runner
+  '';
+
+  preFixup = ''
+    makeWrapperArgs+=("''${qtWrapperArgs[@]}")
+  '';
+
+  meta = with lib; {
+    description = "The FLExible Network Tester";
+    homepage = "https://flent.org";
+    license = licenses.gpl3;
+
+    maintainers = [maintainers.mmlb];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/flent/http-getter.nix b/nixpkgs/pkgs/applications/networking/flent/http-getter.nix
new file mode 100644
index 000000000000..21c9d3ca6fb1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/flent/http-getter.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchFromGitHub, cmake, curl, pkg-config }:
+
+stdenv.mkDerivation {
+  pname = "http-getter";
+  version = "unstable-2020-12-08";
+
+  src = fetchFromGitHub {
+    owner = "tohojo";
+    repo = "http-getter";
+    rev = "0b20f08133206aaf225946814ceb6b85ab37e136";
+    sha256 = "0plyqqwfm9bysichda0w3akbdxf6279wd4mx8mda0c4mxd4xy9nl";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ curl ];
+
+  meta = with lib; {
+    homepage = "https://github.com/tohojo/http-getter";
+    description = "Simple getter for HTTP URLs using cURL";
+    platforms = platforms.unix;
+    license = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/flexget/default.nix b/nixpkgs/pkgs/applications/networking/flexget/default.nix
new file mode 100644
index 000000000000..b6f88f87f481
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/flexget/default.nix
@@ -0,0 +1,89 @@
+{ lib
+, python3
+, fetchPypi
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "flexget";
+  version = "3.9.7";
+  format = "pyproject";
+
+  # Fetch from GitHub in order to use `requirements.in`
+  src = fetchFromGitHub {
+    owner = "Flexget";
+    repo = "Flexget";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-UDh5rEcnuoiXjxYZqh0KJXi02M3xjwXGNKhrEBrLtCs=";
+  };
+
+  postPatch = ''
+    # remove dependency constraints but keep environment constraints
+    sed 's/[~<>=][^;]*//' -i requirements.txt
+  '';
+
+  nativeBuildInputs = with python3.pkgs; [
+    setuptools
+    wheel
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    # See https://github.com/Flexget/Flexget/blob/master/requirements.txt
+    apscheduler
+    beautifulsoup4
+    click
+    colorama
+    commonmark
+    feedparser
+    guessit
+    html5lib
+    jinja2
+    jsonschema
+    loguru
+    more-itertools
+    packaging
+    psutil
+    pynzb
+    pyrsistent
+    pyrss2gen
+    python-dateutil
+    pyyaml
+    rebulk
+    requests
+    rich
+    rpyc
+    sqlalchemy
+    typing-extensions
+
+    # WebUI requirements
+    cherrypy
+    flask-compress
+    flask-cors
+    flask-login
+    flask-restful
+    flask-restx
+    flask
+    pyparsing
+    werkzeug
+    zxcvbn
+
+    # Plugins requirements
+    transmission-rpc
+  ];
+
+  pythonImportsCheck = [
+    "flexget"
+    "flexget.plugins.clients.transmission"
+  ];
+
+  # ~400 failures
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://flexget.com/";
+    changelog = "https://github.com/Flexget/Flexget/releases/tag/v${version}";
+    description = "Multipurpose automation tool for all of your media";
+    license = licenses.mit;
+    maintainers = with maintainers; [ marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/freefilesync/default.nix b/nixpkgs/pkgs/applications/networking/freefilesync/default.nix
new file mode 100644
index 000000000000..63c674c1a0ce
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/freefilesync/default.nix
@@ -0,0 +1,130 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchpatch
+, copyDesktopItems
+, pkg-config
+, wrapGAppsHook
+, unzip
+, curl
+, glib
+, gtk3
+, libssh2
+, openssl
+, wxGTK32
+, makeDesktopItem
+}:
+
+stdenv.mkDerivation rec {
+  pname = "freefilesync";
+  version = "12.5";
+
+  src = fetchurl {
+    url = "https://freefilesync.org/download/FreeFileSync_${version}_Source.zip";
+    # The URL only redirects to the file on the second attempt
+    postFetch = ''
+      rm -f $out
+      tryDownload "$url"
+    '';
+    hash = "sha256-KTN/HbNLP/+z5rryp3wDRo6c7l03vi6tUxCXZPMGUoM=";
+  };
+
+  sourceRoot = ".";
+
+  # Patches from Debian
+  patches = [
+    # Disable loading of the missing Animal.dat
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/f/freefilesync/12.0-2/debian/patches/ffs_devuan.patch";
+      postFetch = ''
+        substituteInPlace $out \
+          --replace "-std=c++2b" "-std=c++23"
+      '';
+      excludes = [ "FreeFileSync/Source/ffs_paths.cpp" ];
+      hash = "sha256-CtUC94AoYTxoqSMWZrzuO3jTD46rj11JnbNyXtWckCo=";
+    })
+    # Fix build with GTK 3
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/f/freefilesync/12.0-2/debian/patches/ffs_devuan_gtk3.patch";
+      hash = "sha256-0n58Np4JI3hYK/CRBytkPHl9Jp4xK+IRjgUvoYti/f4=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    copyDesktopItems
+    pkg-config
+    wrapGAppsHook
+    unzip
+  ];
+
+  buildInputs = [
+    curl
+    glib
+    gtk3
+    libssh2
+    openssl
+    wxGTK32
+  ];
+
+  env.NIX_CFLAGS_COMPILE = toString [
+    # Undef g_object_ref on GLib 2.56+
+    "-DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_54"
+    "-DGLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_54"
+    # Define libssh2 constants
+    "-DMAX_SFTP_READ_SIZE=30000"
+    "-DMAX_SFTP_OUTGOING_SIZE=30000"
+  ];
+
+  buildPhase = ''
+    runHook preBuild
+
+    chmod +w FreeFileSync/Build
+    cd FreeFileSync/Source
+    make -j$NIX_BUILD_CORES
+    cd RealTimeSync
+    make -j$NIX_BUILD_CORES
+    cd ../../..
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out
+    cp -R FreeFileSync/Build/* $out
+    mv $out/{Bin,bin}
+
+    mkdir -p $out/share/pixmaps
+    unzip -j $out/Resources/Icons.zip '*Sync.png' -d $out/share/pixmaps
+
+    runHook postInstall
+  '';
+
+  desktopItems = [
+    (makeDesktopItem rec {
+      name = "FreeFileSync";
+      desktopName = name;
+      genericName = "Folder Comparison and Synchronization";
+      icon = name;
+      exec = name;
+      categories = [ "Utility" "FileTools" ];
+    })
+    (makeDesktopItem rec {
+      name = "RealTimeSync";
+      desktopName = name;
+      genericName = "Automated Synchronization";
+      icon = name;
+      exec = name;
+      categories = [ "Utility" "FileTools" ];
+    })
+  ];
+
+  meta = with lib; {
+    description = "Open Source File Synchronization & Backup Software";
+    homepage = "https://freefilesync.org";
+    license = [ licenses.gpl3Only licenses.openssl licenses.curl licenses.libssh2 ];
+    maintainers = with maintainers; [ wegank ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/ftp/filezilla/default.nix b/nixpkgs/pkgs/applications/networking/ftp/filezilla/default.nix
new file mode 100644
index 000000000000..ee114446ac1f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/ftp/filezilla/default.nix
@@ -0,0 +1,66 @@
+{ lib, stdenv
+, fetchurl
+, autoreconfHook
+, dbus
+, gettext
+, gnutls
+, libfilezilla
+, libidn
+, nettle
+, pkg-config
+, pugixml
+, sqlite
+, tinyxml
+, wrapGAppsHook
+, wxGTK32
+, gtk3
+, xdg-utils
+}:
+
+stdenv.mkDerivation rec {
+  pname = "filezilla";
+  version = "3.63.1";
+
+  src = fetchurl {
+    url = "https://download.filezilla-project.org/client/FileZilla_${version}_src.tar.bz2";
+    hash = "sha256-TgtcD3n0+LykuiHnE7qXuG1bRcRyPeZ7nBDSO/QXo38=";
+  };
+
+  configureFlags = [
+    "--disable-manualupdatecheck"
+    "--disable-autoupdatecheck"
+  ];
+
+  nativeBuildInputs = [ autoreconfHook pkg-config wrapGAppsHook ];
+
+  buildInputs = [
+    dbus
+    gettext
+    gnutls
+    libfilezilla
+    libidn
+    nettle
+    pugixml
+    sqlite
+    tinyxml
+    wxGTK32
+    gtk3
+    xdg-utils
+  ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    homepage = "https://filezilla-project.org/";
+    description = "Graphical FTP, FTPS and SFTP client";
+    longDescription = ''
+      FileZilla Client is a free, open source FTP client. It supports
+      FTP, SFTP, and FTPS (FTP over SSL/TLS). The client is available
+      under many platforms, binaries for Windows, Linux and macOS are
+      provided.
+    '';
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ pSub ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/ftp/gftp/default.nix b/nixpkgs/pkgs/applications/networking/ftp/gftp/default.nix
new file mode 100644
index 000000000000..3007fdd67183
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/ftp/gftp/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoconf
+, automake
+, gettext
+, gtk
+, intltool
+, libtool
+, ncurses
+, openssl
+, pkg-config
+, readline
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gftp";
+  version = "2.9.1b";
+
+  src = fetchFromGitHub {
+    owner = "masneyb";
+    repo = pname;
+    rev = version;
+    hash = "sha256-0zdv2oYl24BXh61IGCWby/2CCkzNjLpDrAFc0J89Pw4=";
+  };
+
+  nativeBuildInputs = [
+    autoconf
+    automake
+    gettext
+    intltool
+    libtool
+    pkg-config
+  ];
+
+  buildInputs = [
+    gtk
+    ncurses
+    openssl
+    readline
+  ];
+
+  preConfigure = ''
+    ./autogen.sh
+  '';
+
+  hardeningDisable = [ "format" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/masneyb/gftp";
+    description = "GTK-based multithreaded FTP client for *nix-based machines";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.unix;
+  };
+}
+# TODO: report the hardeningDisable to upstream
diff --git a/nixpkgs/pkgs/applications/networking/ftp/taxi/default.nix b/nixpkgs/pkgs/applications/networking/ftp/taxi/default.nix
new file mode 100644
index 000000000000..75e3b43a1a27
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/ftp/taxi/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, gobject-introspection
+, gtk3
+, libgee
+, libhandy
+, libsecret
+, libsoup
+, meson
+, ninja
+, nix-update-script
+, pantheon
+, pkg-config
+, python3
+, vala
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "taxi";
+  version = "2.0.2";
+
+  src = fetchFromGitHub {
+    owner = "Alecaddd";
+    repo = pname;
+    rev = version;
+    sha256 = "1a4a14b2d5vqbk56drzbbldp0nngfqhwycpyv8d3svi2nchkvpqa";
+  };
+
+  nativeBuildInputs = [
+    gobject-introspection
+    meson
+    ninja
+    pkg-config
+    python3
+    vala
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gtk3
+    libgee
+    libhandy
+    libsecret
+    libsoup
+    pantheon.granite
+  ];
+
+  postPatch = ''
+    chmod +x meson/post_install.py
+    patchShebangs meson/post_install.py
+  '';
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    homepage = "https://github.com/Alecaddd/taxi";
+    description = "The FTP Client that drives you anywhere";
+    license = licenses.lgpl3Plus;
+    maintainers = with maintainers; [ AndersonTorres ] ++ teams.pantheon.members;
+    platforms = platforms.linux;
+    mainProgram = "com.github.alecaddd.taxi";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/gabutdm/default.nix b/nixpkgs/pkgs/applications/networking/gabutdm/default.nix
new file mode 100644
index 000000000000..6fbe0222112c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/gabutdm/default.nix
@@ -0,0 +1,64 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, meson
+, pkg-config
+, cmake
+, ninja
+, vala
+, wrapGAppsHook4
+, desktop-file-utils
+, sqlite
+, libcanberra
+, libsoup_3
+, libgee
+, json-glib
+, qrencode
+, curl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gabutdm";
+  version = "2.1.6";
+
+  src = fetchFromGitHub {
+    owner = "gabutakut";
+    repo = pname;
+    rev = version;
+    hash = "sha256-ai5LsoK21XwXqL4LRuKsOR1/JV6LnP+1ZJ9fMHpj178=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    pkg-config
+    cmake
+    ninja
+    vala
+    wrapGAppsHook4
+    desktop-file-utils
+  ];
+
+  buildInputs = [
+    sqlite
+    libcanberra
+    libsoup_3
+    libgee
+    json-glib
+    qrencode
+    curl
+  ];
+
+  postPatch = ''
+    substituteInPlace meson/post_install.py \
+      --replace gtk-update-icon-cache gtk4-update-icon-cache
+  '';
+
+  meta = with lib; {
+    description = "Simple and fast download manager";
+    homepage = "https://github.com/gabutakut/gabutdm";
+    license = licenses.lgpl21Plus;
+    mainProgram = "com.github.gabutakut.gabutdm";
+    maintainers = with maintainers; [ aleksana ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/gdrive/default.nix b/nixpkgs/pkgs/applications/networking/gdrive/default.nix
new file mode 100644
index 000000000000..c442303e6758
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/gdrive/default.nix
@@ -0,0 +1,33 @@
+{ lib, buildGoModule, fetchFromGitHub, fetchpatch }:
+
+buildGoModule rec {
+  pname = "gdrive";
+  version = "2.1.1";
+
+  src = fetchFromGitHub {
+    owner = "prasmussen";
+    repo = "gdrive";
+    rev = version;
+    hash = "sha256-2dJmGFHfGSroucn4WgiV2NExBs5wtMDe2kX1jDBwbRs=";
+  };
+
+  deleteVendor = true;
+  vendorHash = "sha256-sHNP1YwnZYu0UfgLx5+gxJmesY8Brt7rr9cptlyk9Bk=";
+
+  patches = [
+    # Add Go Modules support
+    (fetchpatch {
+      url = "https://github.com/prasmussen/gdrive/pull/585/commits/faa6fc3dc104236900caa75eb22e9ed2e5ecad42.patch";
+      hash = "sha256-W8o2ZfhQFJISHfPavjx9sw5UB6xOZ7qRW4L0bHNddS8=";
+    })
+  ];
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/prasmussen/gdrive";
+    description = "A command line utility for interacting with Google Drive";
+    license = licenses.mit;
+    maintainers = [ maintainers.rzetterberg ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/gdrive3/Cargo.lock b/nixpkgs/pkgs/applications/networking/gdrive3/Cargo.lock
new file mode 100644
index 000000000000..c0570d5164b7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/gdrive3/Cargo.lock
@@ -0,0 +1,1769 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.68"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2cb2f989d18dd141ab8ae82f64d1a8cdd37e0840f73a406896cf5e99502fab61"
+
+[[package]]
+name = "async-recursion"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b015a331cc64ebd1774ba119538573603427eaace0a1950c423ab971f903796"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "async-trait"
+version = "0.1.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "705339e0e4a9690e2908d2b3d049d85682cf19fbd5782494498fbf7003a6a282"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "base64"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+[[package]]
+name = "base64"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bumpalo"
+version = "3.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba"
+
+[[package]]
+name = "bytes"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dfb24e866b15a1af2a1b663f10c6b6b8f397a84aadb828f12e5b289ec23a3a3c"
+
+[[package]]
+name = "cc"
+version = "1.0.78"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a20104e2335ce8a659d6dd92a51a767a0c062599c73b343fd152cb401e828c3d"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chrono"
+version = "0.4.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f"
+dependencies = [
+ "iana-time-zone",
+ "num-integer",
+ "num-traits",
+ "serde",
+ "winapi",
+]
+
+[[package]]
+name = "clap"
+version = "4.0.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7db700bc935f9e43e88d00b0850dae18a63773cfbec6d8e070fccf7fef89a39"
+dependencies = [
+ "bitflags",
+ "clap_derive",
+ "clap_lex",
+ "is-terminal",
+ "once_cell",
+ "strsim",
+ "termcolor",
+]
+
+[[package]]
+name = "clap_derive"
+version = "4.0.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0177313f9f02afc995627906bbd8967e2be069f5261954222dac78290c2b9014"
+dependencies = [
+ "heck",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d4198f73e42b4936b35b5bb248d81d2b595ecb170da0bac7655c54eedfa8da8"
+dependencies = [
+ "os_str_bytes",
+]
+
+[[package]]
+name = "codespan-reporting"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
+dependencies = [
+ "termcolor",
+ "unicode-width",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
+
+[[package]]
+name = "cxx"
+version = "1.0.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51d1075c37807dcf850c379432f0df05ba52cc30f279c5cfc43cc221ce7f8579"
+dependencies = [
+ "cc",
+ "cxxbridge-flags",
+ "cxxbridge-macro",
+ "link-cplusplus",
+]
+
+[[package]]
+name = "cxx-build"
+version = "1.0.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5044281f61b27bc598f2f6647d480aed48d2bf52d6eb0b627d84c0361b17aa70"
+dependencies = [
+ "cc",
+ "codespan-reporting",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "scratch",
+ "syn",
+]
+
+[[package]]
+name = "cxxbridge-flags"
+version = "1.0.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61b50bc93ba22c27b0d31128d2d130a0a6b3d267ae27ef7e4fae2167dfe8781c"
+
+[[package]]
+name = "cxxbridge-macro"
+version = "1.0.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39e61fda7e62115119469c7b3591fd913ecca96fb766cfd3f2e2502ab7bc87a5"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "darling"
+version = "0.14.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0dd3cd20dc6b5a876612a6e5accfe7f3dd883db6d07acfbf14c128f61550dfa"
+dependencies = [
+ "darling_core",
+ "darling_macro",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.14.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a784d2ccaf7c98501746bf0be29b2022ba41fd62a2e622af997a03e9f972859f"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "strsim",
+ "syn",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.14.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7618812407e9402654622dd402b0a89dff9ba93badd6540781526117b92aab7e"
+dependencies = [
+ "darling_core",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "either"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797"
+
+[[package]]
+name = "errno"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "exponential-backoff"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "851c5c1b202b7317c442c5f9c1f55f4cb6cb7e3dee875dd422d124c081a8da88"
+dependencies = [
+ "rand",
+]
+
+[[package]]
+name = "fastrand"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "filetime"
+version = "0.2.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e884668cd0c7480504233e951174ddc3b382f7c2666e3b7310b5c4e7b0c37f9"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "windows-sys",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
+dependencies = [
+ "percent-encoding 2.2.0",
+]
+
+[[package]]
+name = "futures"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38390104763dc37a5145a53c29c63c1290b5d316d6086ec32c293f6736051bb0"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52ba265a92256105f45b719605a571ffe2d1f0fea3807304b522c1d778f79eed"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7acc85df6714c176ab5edf386123fafe217be88c0840ec11f199441134a074e2"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00f5fb52a06bdcadeb54e8d3671f8888a39697dcb0b81b23b55174030427f4eb"
+
+[[package]]
+name = "futures-macro"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bdfb8ce053d86b91919aad980c220b1fb8401a9394410e1c289ed7e66b61835d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39c15cf1a4aa79df40f1bb462fb39676d0ad9e366c2a33b590d7c66f4f81fcf9"
+
+[[package]]
+name = "futures-task"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ffb393ac5d9a6eaa9d3fdf37ae2776656b706e200c8e16b1bdb227f5198e6ea"
+
+[[package]]
+name = "futures-util"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "197676987abd2f9cadff84926f410af1c183608d36641465df73ae8211dc65d6"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "gdrive"
+version = "3.9.0"
+dependencies = [
+ "async-recursion",
+ "bytes",
+ "clap",
+ "exponential-backoff",
+ "futures",
+ "google-drive3",
+ "home",
+ "human_bytes",
+ "hyper",
+ "md5",
+ "mime",
+ "mime_guess",
+ "rustc_version_runtime",
+ "serde",
+ "serde_json",
+ "tabwriter",
+ "tar",
+ "tempfile",
+ "tokio",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.9.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "google-apis-common"
+version = "5.0.2"
+source = "git+https://github.com/prasmussen/google-apis-rs?branch=resumable-fix#1f75444516a3bbba3441ee6ff65d6aa0f2d2f1af"
+dependencies = [
+ "base64 0.13.1",
+ "chrono",
+ "http",
+ "hyper",
+ "itertools",
+ "mime",
+ "serde",
+ "serde_json",
+ "serde_with",
+ "tokio",
+ "tower-service",
+ "url 1.7.2",
+ "yup-oauth2",
+]
+
+[[package]]
+name = "google-drive3"
+version = "5.0.2-beta-1+20220225"
+source = "git+https://github.com/prasmussen/google-apis-rs?branch=resumable-fix#1f75444516a3bbba3441ee6ff65d6aa0f2d2f1af"
+dependencies = [
+ "anyhow",
+ "google-apis-common",
+ "http",
+ "hyper",
+ "hyper-rustls",
+ "itertools",
+ "mime",
+ "serde",
+ "serde_json",
+ "tokio",
+ "tower-service",
+ "url 1.7.2",
+]
+
+[[package]]
+name = "h2"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f9f29bc9dda355256b2916cf526ab02ce0aeaaaf2bad60d65ef3f12f11dd0f4"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "heck"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
+
+[[package]]
+name = "hermit-abi"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
+name = "home"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "747309b4b440c06d57b0b25f2aee03ee9b5e5397d288c60e21fc709bb98a7408"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "http"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
+
+[[package]]
+name = "human_bytes"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39b528196c838e8b3da8b665e08c30958a6f2ede91d79f2ffcd0d4664b9c64eb"
+
+[[package]]
+name = "hyper"
+version = "0.14.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "034711faac9d2166cb1baf1a2fb0b60b1f277f8492fd72176c17f3515e1abd3c"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-rustls"
+version = "0.23.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c"
+dependencies = [
+ "http",
+ "hyper",
+ "log",
+ "rustls",
+ "rustls-native-certs",
+ "tokio",
+ "tokio-rustls",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.53"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "winapi",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca"
+dependencies = [
+ "cxx",
+ "cxx-build",
+]
+
+[[package]]
+name = "ident_case"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+
+[[package]]
+name = "idna"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e"
+dependencies = [
+ "matches",
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "idna"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399"
+dependencies = [
+ "autocfg",
+ "hashbrown",
+ "serde",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46112a93252b123d31a119a8d1a1ac19deac4fac6e0e8b0df58f0d4e5870e63c"
+dependencies = [
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "is-terminal"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28dfb6c8100ccc63462345b67d1bbc3679177c75ee4bf59bf29c8b1d110b8189"
+dependencies = [
+ "hermit-abi",
+ "io-lifetimes",
+ "rustix",
+ "windows-sys",
+]
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440"
+
+[[package]]
+name = "js-sys"
+version = "0.3.60"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.139"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79"
+
+[[package]]
+name = "link-cplusplus"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4"
+
+[[package]]
+name = "lock_api"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "matches"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f"
+
+[[package]]
+name = "md5"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771"
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "mime"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
+
+[[package]]
+name = "mime_guess"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef"
+dependencies = [
+ "mime",
+ "unicase",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de"
+dependencies = [
+ "libc",
+ "log",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "windows-sys",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "num_threads"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66"
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "os_str_bytes"
+version = "6.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee"
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ff9f3fef3968a3ec5945535ed654cb38ff72d7495a25619e2247fb15a2ed9ba"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "windows-sys",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831"
+
+[[package]]
+name = "percent-encoding"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.49"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57a8eca9f9c4ffde41714334dee777596264c7825420f521abc92b5b5deb63a5"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
+dependencies = [
+ "getrandom",
+ "libc",
+ "rand_chacha",
+ "rand_core",
+ "rand_hc",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
+dependencies = [
+ "rand_core",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "remove_dir_all"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "ring"
+version = "0.16.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
+dependencies = [
+ "cc",
+ "libc",
+ "once_cell",
+ "spin",
+ "untrusted",
+ "web-sys",
+ "winapi",
+]
+
+[[package]]
+name = "rustc_version"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "rustc_version_runtime"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d31b7153270ebf48bf91c65ae5b0c00e749c4cfad505f66530ac74950249582f"
+dependencies = [
+ "rustc_version",
+ "semver",
+]
+
+[[package]]
+name = "rustix"
+version = "0.36.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4feacf7db682c6c329c4ede12649cd36ecab0f3be5b7d74e6a20304725db4549"
+dependencies = [
+ "bitflags",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys",
+]
+
+[[package]]
+name = "rustls"
+version = "0.20.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "539a2bfe908f471bfa933876bd1eb6a19cf2176d375f82ef7f99530a40e48c2c"
+dependencies = [
+ "log",
+ "ring",
+ "sct",
+ "webpki",
+]
+
+[[package]]
+name = "rustls-native-certs"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50"
+dependencies = [
+ "openssl-probe",
+ "rustls-pemfile",
+ "schannel",
+ "security-framework",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b"
+dependencies = [
+ "base64 0.21.0",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde"
+
+[[package]]
+name = "schannel"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3"
+dependencies = [
+ "windows-sys",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "scratch"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ddccb15bcce173023b3fedd9436f882a0739b8dfb45e4f6b6002bee5929f61b2"
+
+[[package]]
+name = "sct"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "seahash"
+version = "4.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b"
+
+[[package]]
+name = "security-framework"
+version = "2.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bc1bb97804af6631813c55739f771071e0f2ed33ee20b68c86ec505d906356c"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "semver"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
+dependencies = [
+ "semver-parser",
+]
+
+[[package]]
+name = "semver-parser"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
+
+[[package]]
+name = "serde"
+version = "1.0.152"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.152"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.91"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "877c235533714907a8c2464236f5c4b2a17262ef1bd71f38f35ea592c8da6883"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_with"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30d904179146de381af4c93d3af6ca4984b3152db687dacb9c3c35e86f39809c"
+dependencies = [
+ "base64 0.13.1",
+ "chrono",
+ "hex",
+ "indexmap",
+ "serde",
+ "serde_json",
+ "serde_with_macros",
+ "time",
+]
+
+[[package]]
+name = "serde_with_macros"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1966009f3c05f095697c537312f5415d1e3ed31ce0a56942bac4c771c5c335e"
+dependencies = [
+ "darling",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "slab"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
+
+[[package]]
+name = "socket2"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "syn"
+version = "1.0.107"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tabwriter"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36205cfc997faadcc4b0b87aaef3fbedafe20d38d4959a7ca6ff803564051111"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "tar"
+version = "0.4.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6"
+dependencies = [
+ "filetime",
+ "libc",
+ "xattr",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "libc",
+ "redox_syscall",
+ "remove_dir_all",
+ "winapi",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "time"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a561bf4617eebd33bca6434b988f39ed798e527f51a1e797d0ee4f61c0a38376"
+dependencies = [
+ "itoa",
+ "libc",
+ "num_threads",
+ "serde",
+ "time-core",
+ "time-macros",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd"
+
+[[package]]
+name = "time-macros"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d967f99f534ca7e495c575c62638eebc2898a8c84c119b89e250477bc4ba16b2"
+dependencies = [
+ "time-core",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
+
+[[package]]
+name = "tokio"
+version = "1.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d9f76183f91ecfb55e1d7d5602bd1d979e38a3a522fe900241cf195624d67ae"
+dependencies = [
+ "autocfg",
+ "bytes",
+ "libc",
+ "memchr",
+ "mio",
+ "num_cpus",
+ "parking_lot",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2",
+ "tokio-macros",
+ "windows-sys",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "1.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.23.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59"
+dependencies = [
+ "rustls",
+ "tokio",
+ "webpki",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tracing"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+dependencies = [
+ "cfg-if",
+ "pin-project-lite",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+
+[[package]]
+name = "unicase"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "untrusted"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+
+[[package]]
+name = "url"
+version = "1.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a"
+dependencies = [
+ "idna 0.1.5",
+ "matches",
+ "percent-encoding 1.0.1",
+]
+
+[[package]]
+name = "url"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
+dependencies = [
+ "form_urlencoded",
+ "idna 0.3.0",
+ "percent-encoding 2.2.0",
+]
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "want"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
+dependencies = [
+ "log",
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.9.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f"
+
+[[package]]
+name = "web-sys"
+version = "0.3.60"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webpki"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5"
+
+[[package]]
+name = "xattr"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "yup-oauth2"
+version = "8.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8cb398cca4dedd0203666d7c3e7a089d14557be759efd57ab75f067949276e7"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "base64 0.13.1",
+ "futures",
+ "http",
+ "hyper",
+ "hyper-rustls",
+ "itertools",
+ "log",
+ "percent-encoding 2.2.0",
+ "rustls",
+ "rustls-pemfile",
+ "seahash",
+ "serde",
+ "serde_json",
+ "time",
+ "tokio",
+ "tower-service",
+ "url 2.3.1",
+]
diff --git a/nixpkgs/pkgs/applications/networking/gdrive3/default.nix b/nixpkgs/pkgs/applications/networking/gdrive3/default.nix
new file mode 100644
index 000000000000..8d9553270906
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/gdrive3/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "gdrive";
+  version = "3.9.0";
+
+  src = fetchFromGitHub {
+    owner = "glotlabs";
+    repo = "gdrive";
+    rev = version;
+    hash = "sha256-vWd1sto89U2ZJWZZebPjrbMyBjZMs9buoPEPKocDVnY=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "google-apis-common-5.0.2" = "sha256-E4ON66waUzp4qqpVWTFBD0+M2V80YlYmsewEYZygTuE=";
+    };
+  };
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  meta = with lib; {
+    description = "Google Drive CLI Client";
+    homepage = "https://github.com/glotlabs/gdrive";
+    changelog = "https://github.com/glotlabs/gdrive/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/geph/default.nix b/nixpkgs/pkgs/applications/networking/geph/default.nix
new file mode 100644
index 000000000000..36de704dbc71
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/geph/default.nix
@@ -0,0 +1,122 @@
+{ lib
+, stdenvNoCC
+, rustPlatform
+, fetchFromGitHub
+, buildNpmPackage
+, perl
+, pkg-config
+, glib
+, webkitgtk
+, libappindicator-gtk3
+, libayatana-appindicator
+, cairo
+, openssl
+}:
+
+let
+  version = "4.7.8";
+  geph-meta = with lib; {
+    description = "A modular Internet censorship circumvention system designed specifically to deal with national filtering.";
+    homepage = "https://geph.io";
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ penalty1083 ];
+  };
+in
+{
+  cli = rustPlatform.buildRustPackage rec {
+    pname = "geph4-client";
+    inherit version;
+
+    src = fetchFromGitHub {
+      owner = "geph-official";
+      repo = pname;
+      rev = "v${version}";
+      hash = "sha256-DVGbLyFgraQMSIUAqDehF8DqbnvcaeWbuLVgiSQY3KE=";
+    };
+
+    cargoHash = "sha256-uBq6rjUnKEscwhu60HEZffLvuXcArz+AiR52org+qKw=";
+
+    nativeBuildInputs = [ perl ];
+
+    meta = geph-meta // {
+      license = with lib.licenses; [ gpl3Only ];
+    };
+  };
+
+  gui = stdenvNoCC.mkDerivation rec {
+    pname = "geph-gui";
+    inherit version;
+
+    src = fetchFromGitHub {
+      owner = "geph-official";
+      repo = "gephgui-pkg";
+      rev = "85a55bfc2f4314d9c49608f252080696b1f8e2a9";
+      hash = "sha256-id/sfaQsF480kUXg//O5rBIciuuhDuXY19FQe1E3OQs=";
+      fetchSubmodules = true;
+    };
+
+    gephgui = buildNpmPackage {
+      pname = "gephgui";
+      inherit version src;
+
+      sourceRoot = "${src.name}/gephgui-wry/gephgui";
+
+      postPatch = "ln -s ${./package-lock.json} ./package-lock.json";
+
+      npmDepsHash = "sha256-5y6zpMF4M56DiWVhMvjJGsYpVdlJSoWoWyPgLc7hJoo=";
+
+      installPhase = ''
+        runHook preInstall
+
+        mkdir -p $out
+        mv dist $out
+
+        runHook postInstall
+      '';
+    };
+
+    gephgui-wry = rustPlatform.buildRustPackage rec {
+      pname = "gephgui-wry";
+      inherit version src;
+
+      sourceRoot = "${src.name}/gephgui-wry";
+
+      cargoHash = "sha256-lidlUUfHXKPUlICdaVv/SFlyyWsZ7cYHyTJ3kkMn3L4=";
+
+      nativeBuildInputs = [ pkg-config ];
+
+      buildInputs = [
+        glib
+        webkitgtk
+        libappindicator-gtk3
+        libayatana-appindicator
+        cairo
+        openssl
+      ];
+
+      preBuild = ''
+        ln -s ${gephgui}/dist ./gephgui
+      '';
+    };
+
+    dontBuild = true;
+
+    installPhase = ''
+      install -Dt $out/bin ${gephgui-wry}/bin/gephgui-wry
+      install -d $out/share/icons/hicolor
+      for i in '16' '32' '64' '128' '256'
+      do
+        name=''${i}x''${i}
+        dir=$out/share/icons/hicolor
+        mkdir -p $dir
+        mv flatpak/icons/$name $dir
+      done
+      install -Dt $out/share/applications flatpak/icons/io.geph.GephGui.desktop
+      sed -i -e '/StartupWMClass/s/=.*/=gephgui-wry/' $out/share/applications/io.geph.GephGui.desktop
+    '';
+
+    meta = geph-meta // {
+      license = with lib.licenses; [ unfree ];
+    };
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/geph/package-lock.json b/nixpkgs/pkgs/applications/networking/geph/package-lock.json
new file mode 100644
index 000000000000..1523705c1891
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/geph/package-lock.json
@@ -0,0 +1,3658 @@
+{
+  "name": "gephgui-html",
+  "version": "0.0.0",
+  "lockfileVersion": 3,
+  "requires": true,
+  "packages": {
+    "": {
+      "name": "gephgui-html",
+      "version": "0.0.0",
+      "dependencies": {
+        "@extractus/feed-extractor": "^6.2.1",
+        "@smui/chips": "7.0.0-beta.0",
+        "@smui/form-field": "7.0.0-beta.0",
+        "@vitejs/plugin-legacy": "^2.3.0",
+        "country-code-emoji": "^2.3.0",
+        "country-flag-icons": "^1.5.5",
+        "darkreader": "^4.9.58",
+        "detect-nearest-browser-locale": "^19.0.0",
+        "knuth-shuffle": "^1.0.8",
+        "knuth-shuffle-seeded": "^1.0.6",
+        "openmoji": "^14.0.0",
+        "stream-browserify": "^3.0.0",
+        "svelte-material-icons": "^2.0.4",
+        "svelte-material-ui": "^6.2.0",
+        "terser": "^5.15.1",
+        "tinyld": "=1.3.1",
+        "twemoji": "^14.0.2",
+        "uplot": "^1.6.22"
+      },
+      "devDependencies": {
+        "@rollup/plugin-dsv": "^2.0.3",
+        "@smui/button": "^6.1.4",
+        "@smui/checkbox": "^6.1.4",
+        "@smui/circular-progress": "^6.1.4",
+        "@smui/data-table": "^6.2.0",
+        "@smui/dialog": "^6.1.4",
+        "@smui/icon-button": "^6.1.4",
+        "@smui/linear-progress": "^6.1.4",
+        "@smui/ripple": "^6.1.4",
+        "@smui/select": "^6.2.0",
+        "@smui/snackbar": "^6.1.4",
+        "@smui/switch": "^6.1.4",
+        "@smui/tab": "^6.1.4",
+        "@smui/tab-bar": "^6.1.4",
+        "@smui/textfield": "^6.1.4",
+        "@sveltejs/vite-plugin-svelte": "^1.0.2",
+        "@tsconfig/svelte": "^3.0.0",
+        "rollup": "^2.79.1",
+        "svelte": "^3.50.1",
+        "svelte-check": "^2.8.1",
+        "svelte-preprocess": "^4.10.7",
+        "tslib": "^2.4.0",
+        "typescript": "^4.6.4",
+        "vite": "^3.1.0"
+      }
+    },
+    "node_modules/@babel/standalone": {
+      "version": "7.21.2",
+      "resolved": "https://registry.npmmirror.com/@babel/standalone/-/standalone-7.21.2.tgz",
+      "integrity": "sha512-ySP/TJcyqMJVg1M/lmnPVi6L+F+IJpQ4+0lqtf723LERbk1N8/0JgLgm346cRAzfHaoXkLq/M/mJBd2uo25RBA==",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@esbuild/android-arm": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.18.tgz",
+      "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==",
+      "cpu": [
+        "arm"
+      ],
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/linux-loong64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz",
+      "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==",
+      "cpu": [
+        "loong64"
+      ],
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@extractus/feed-extractor": {
+      "version": "6.2.1",
+      "resolved": "https://registry.npmmirror.com/@extractus/feed-extractor/-/feed-extractor-6.2.1.tgz",
+      "integrity": "sha512-zCIcvp4CDhgqdX17MJenBCXXm4NMVFJyKmvVMzl3LwOyFUEmpO4WGjtzXhxw1XN1Mjj5gvPclJNPgRBGlom2zA==",
+      "dependencies": {
+        "bellajs": "^11.1.1",
+        "cross-fetch": "^3.1.5",
+        "fast-xml-parser": "^4.0.13",
+        "html-entities": "^2.3.3"
+      },
+      "engines": {
+        "node": ">= 14"
+      }
+    },
+    "node_modules/@jridgewell/gen-mapping": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
+      "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
+      "dependencies": {
+        "@jridgewell/set-array": "^1.0.1",
+        "@jridgewell/sourcemap-codec": "^1.4.10",
+        "@jridgewell/trace-mapping": "^0.3.9"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@jridgewell/resolve-uri": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
+      "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@jridgewell/set-array": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.1.2.tgz",
+      "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@jridgewell/source-map": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.2.tgz",
+      "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==",
+      "dependencies": {
+        "@jridgewell/gen-mapping": "^0.3.0",
+        "@jridgewell/trace-mapping": "^0.3.9"
+      }
+    },
+    "node_modules/@jridgewell/sourcemap-codec": {
+      "version": "1.4.14",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
+      "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw=="
+    },
+    "node_modules/@jridgewell/trace-mapping": {
+      "version": "0.3.17",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz",
+      "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==",
+      "dependencies": {
+        "@jridgewell/resolve-uri": "3.1.0",
+        "@jridgewell/sourcemap-codec": "1.4.14"
+      }
+    },
+    "node_modules/@material/animation": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/animation/-/animation-13.0.0.tgz",
+      "integrity": "sha512-YR0/u4u56qXDjKYolQ7F+IvlPkaSBhMl/dZv8DK0FbD6PH4ckOPd3bEXNRndXtprsxwknQQP2pttjPImylkl0g==",
+      "dependencies": {
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/banner": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/banner/-/banner-13.0.0.tgz",
+      "integrity": "sha512-59M85ezhwRaa+BqguYCCaRS57fV5KQe3Ff2cU6LcQNw0UPMFW1ap0dZ+iZBv/sj+7/QcqBBShL9uu8dWKtI4Gg==",
+      "dependencies": {
+        "@material/base": "^13.0.0",
+        "@material/button": "^13.0.0",
+        "@material/dom": "^13.0.0",
+        "@material/elevation": "^13.0.0",
+        "@material/feature-targeting": "^13.0.0",
+        "@material/ripple": "^13.0.0",
+        "@material/rtl": "^13.0.0",
+        "@material/shape": "^13.0.0",
+        "@material/theme": "^13.0.0",
+        "@material/tokens": "^13.0.0",
+        "@material/typography": "^13.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/base": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/base/-/base-13.0.0.tgz",
+      "integrity": "sha512-vFx0JryRfcvUNX3cZ2u32wUMvxzd+c/YW0LFOXNgqCDWlubHcMm0Y6Wz371LhfQo80/NE69u+/4Joo99yKnVeg==",
+      "dependencies": {
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/button": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/button/-/button-13.0.0.tgz",
+      "integrity": "sha512-lYorht6fcEd4P+dsLVp2BGtaY5cGYNp71LMajuDe71GZX3dZPoKeVvb+Ie1S7vcB+o+WLTeaisMk9/vA4gfi8A==",
+      "dependencies": {
+        "@material/density": "^13.0.0",
+        "@material/dom": "^13.0.0",
+        "@material/elevation": "^13.0.0",
+        "@material/feature-targeting": "^13.0.0",
+        "@material/ripple": "^13.0.0",
+        "@material/rtl": "^13.0.0",
+        "@material/shape": "^13.0.0",
+        "@material/theme": "^13.0.0",
+        "@material/tokens": "^13.0.0",
+        "@material/touch-target": "^13.0.0",
+        "@material/typography": "^13.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/card": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/card/-/card-13.0.0.tgz",
+      "integrity": "sha512-ooJUOt1Viv99Dyz4rhz9ZZbfa996eHh3RUuXkPRkT66Btd5TzpdqsQWKwOVc5bgbgWqzhDWQ6A/aQdYqH97ccg==",
+      "dependencies": {
+        "@material/dom": "^13.0.0",
+        "@material/elevation": "^13.0.0",
+        "@material/feature-targeting": "^13.0.0",
+        "@material/ripple": "^13.0.0",
+        "@material/rtl": "^13.0.0",
+        "@material/shape": "^13.0.0",
+        "@material/theme": "^13.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/checkbox": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/checkbox/-/checkbox-13.0.0.tgz",
+      "integrity": "sha512-tRC6n9Jq7GgdU0d1F8NOvUy6WiRZR58tUgL1QqoiQK9PGKSt0dAF3Aa48uubO7/Lt9K4NqgwV6/OeHv8pHaM/w==",
+      "dependencies": {
+        "@material/animation": "^13.0.0",
+        "@material/base": "^13.0.0",
+        "@material/density": "^13.0.0",
+        "@material/dom": "^13.0.0",
+        "@material/feature-targeting": "^13.0.0",
+        "@material/ripple": "^13.0.0",
+        "@material/theme": "^13.0.0",
+        "@material/touch-target": "^13.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/chips": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/chips/-/chips-14.0.0.tgz",
+      "integrity": "sha512-SfZX/Ovdq4NgjdtIr/N1O3fEHisZC+t8G8629OV/NrniSS6rKOa+q1mImzna8R4pfuYO+7nT5nZewQpL/JSYaQ==",
+      "dependencies": {
+        "@material/animation": "^14.0.0",
+        "@material/base": "^14.0.0",
+        "@material/checkbox": "^14.0.0",
+        "@material/density": "^14.0.0",
+        "@material/dom": "^14.0.0",
+        "@material/elevation": "^14.0.0",
+        "@material/feature-targeting": "^14.0.0",
+        "@material/focus-ring": "^14.0.0",
+        "@material/ripple": "^14.0.0",
+        "@material/rtl": "^14.0.0",
+        "@material/shape": "^14.0.0",
+        "@material/theme": "^14.0.0",
+        "@material/tokens": "^14.0.0",
+        "@material/touch-target": "^14.0.0",
+        "@material/typography": "^14.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/chips/node_modules/@material/animation": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/animation/-/animation-14.0.0.tgz",
+      "integrity": "sha512-VlYSfUaIj/BBVtRZI8Gv0VvzikFf+XgK0Zdgsok5c1v5DDnNz5tpB8mnGrveWz0rHbp1X4+CWLKrTwNmjrw3Xw==",
+      "dependencies": {
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/chips/node_modules/@material/base": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/base/-/base-14.0.0.tgz",
+      "integrity": "sha512-Ou7vS7n1H4Y10MUZyYAbt6H0t67c6urxoCgeVT7M38aQlaNUwFMODp7KT/myjYz2YULfhu3PtfSV3Sltgac9mA==",
+      "dependencies": {
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/chips/node_modules/@material/checkbox": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/checkbox/-/checkbox-14.0.0.tgz",
+      "integrity": "sha512-OoqwysCqvj1d0cRmEwVWPvg5OqYAiCFpE6Wng6me/Cahfe4xgRxSPa37WWqsClw20W7PG/5RrYRCBtc6bUUUZA==",
+      "dependencies": {
+        "@material/animation": "^14.0.0",
+        "@material/base": "^14.0.0",
+        "@material/density": "^14.0.0",
+        "@material/dom": "^14.0.0",
+        "@material/feature-targeting": "^14.0.0",
+        "@material/focus-ring": "^14.0.0",
+        "@material/ripple": "^14.0.0",
+        "@material/theme": "^14.0.0",
+        "@material/touch-target": "^14.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/chips/node_modules/@material/density": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/density/-/density-14.0.0.tgz",
+      "integrity": "sha512-NlxXBV5XjNsKd8UXF4K/+fOXLxoFNecKbsaQO6O2u+iG8QBfFreKRmkhEBb2hPPwC3w8nrODwXX0lHV+toICQw==",
+      "dependencies": {
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/chips/node_modules/@material/dom": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/dom/-/dom-14.0.0.tgz",
+      "integrity": "sha512-8t88XyacclTj8qsIw9q0vEj4PI2KVncLoIsIMzwuMx49P2FZg6TsLjor262MI3Qs00UWAifuLMrhnOnfyrbe7Q==",
+      "dependencies": {
+        "@material/feature-targeting": "^14.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/chips/node_modules/@material/elevation": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/elevation/-/elevation-14.0.0.tgz",
+      "integrity": "sha512-Di3tkxTpXwvf1GJUmaC8rd+zVh5dB2SWMBGagL4+kT8UmjSISif/OPRGuGnXs3QhF6nmEjkdC0ijdZLcYQkepw==",
+      "dependencies": {
+        "@material/animation": "^14.0.0",
+        "@material/base": "^14.0.0",
+        "@material/feature-targeting": "^14.0.0",
+        "@material/rtl": "^14.0.0",
+        "@material/theme": "^14.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/chips/node_modules/@material/feature-targeting": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/feature-targeting/-/feature-targeting-14.0.0.tgz",
+      "integrity": "sha512-a5WGgHEq5lJeeNL5yevtgoZjBjXWy6+klfVWQEh8oyix/rMJygGgO7gEc52uv8fB8uAIoYEB3iBMOv8jRq8FeA==",
+      "dependencies": {
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/chips/node_modules/@material/ripple": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/ripple/-/ripple-14.0.0.tgz",
+      "integrity": "sha512-9XoGBFd5JhFgELgW7pqtiLy+CnCIcV2s9cQ2BWbOQeA8faX9UZIDUx/g76nHLZ7UzKFtsULJxZTwORmsEt2zvw==",
+      "dependencies": {
+        "@material/animation": "^14.0.0",
+        "@material/base": "^14.0.0",
+        "@material/dom": "^14.0.0",
+        "@material/feature-targeting": "^14.0.0",
+        "@material/rtl": "^14.0.0",
+        "@material/theme": "^14.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/chips/node_modules/@material/rtl": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/rtl/-/rtl-14.0.0.tgz",
+      "integrity": "sha512-xl6OZYyRjuiW2hmbjV2omMV8sQtfmKAjeWnD1RMiAPLCTyOW9Lh/PYYnXjxUrNa0cRwIIbOn5J7OYXokja8puA==",
+      "dependencies": {
+        "@material/theme": "^14.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/chips/node_modules/@material/shape": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/shape/-/shape-14.0.0.tgz",
+      "integrity": "sha512-o0mJB0+feOv473KckI8gFnUo8IQAaEA6ynXzw3VIYFjPi48pJwrxa0mZcJP/OoTXrCbDzDeFJfDPXEmRioBb9A==",
+      "dependencies": {
+        "@material/feature-targeting": "^14.0.0",
+        "@material/rtl": "^14.0.0",
+        "@material/theme": "^14.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/chips/node_modules/@material/theme": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/theme/-/theme-14.0.0.tgz",
+      "integrity": "sha512-6/SENWNIFuXzeHMPHrYwbsXKgkvCtWuzzQ3cUu4UEt3KcQ5YpViazIM6h8ByYKZP8A9d8QpkJ0WGX5btGDcVoA==",
+      "dependencies": {
+        "@material/feature-targeting": "^14.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/chips/node_modules/@material/tokens": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/tokens/-/tokens-14.0.0.tgz",
+      "integrity": "sha512-SXgB9VwsKW4DFkHmJfDIS0x0cGdMWC1D06m6z/WQQ5P5j6/m0pKrbHVlrLzXcRjau+mFhXGvj/KyPo9Pp/Rc8Q==",
+      "dependencies": {
+        "@material/elevation": "^14.0.0"
+      }
+    },
+    "node_modules/@material/chips/node_modules/@material/touch-target": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/touch-target/-/touch-target-14.0.0.tgz",
+      "integrity": "sha512-o3kvxmS4HkmZoQTvtzLJrqSG+ezYXkyINm3Uiwio1PTg67pDgK5FRwInkz0VNaWPcw9+5jqjUQGjuZMtjQMq8w==",
+      "dependencies": {
+        "@material/base": "^14.0.0",
+        "@material/feature-targeting": "^14.0.0",
+        "@material/rtl": "^14.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/chips/node_modules/@material/typography": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/typography/-/typography-14.0.0.tgz",
+      "integrity": "sha512-/QtHBYiTR+TPMryM/CT386B2WlAQf/Ae32V324Z7P40gHLKY/YBXx7FDutAWZFeOerq/two4Nd2aAHBcMM2wMw==",
+      "dependencies": {
+        "@material/feature-targeting": "^14.0.0",
+        "@material/theme": "^14.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/circular-progress": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/circular-progress/-/circular-progress-13.0.0.tgz",
+      "integrity": "sha512-jSbr0ywY2N6s05tyqTXl/cG339C+qU3ck3FwXUq5SJup8CWT0AoJ8EG/CD10CEhNH8nH9Iwstve95oNgIt8G4g==",
+      "dependencies": {
+        "@material/animation": "^13.0.0",
+        "@material/base": "^13.0.0",
+        "@material/feature-targeting": "^13.0.0",
+        "@material/progress-indicator": "^13.0.0",
+        "@material/rtl": "^13.0.0",
+        "@material/theme": "^13.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/data-table": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/data-table/-/data-table-13.0.0.tgz",
+      "integrity": "sha512-Z3yEq1T6Om/A3ntPw0bd40dqtOR4H3++pvchgW35kq+V9xDLL0hfzmuiy0QH4plA2ZsFYJxjt02k/SRvnkjKPQ==",
+      "dependencies": {
+        "@material/animation": "^13.0.0",
+        "@material/base": "^13.0.0",
+        "@material/checkbox": "^13.0.0",
+        "@material/density": "^13.0.0",
+        "@material/dom": "^13.0.0",
+        "@material/elevation": "^13.0.0",
+        "@material/feature-targeting": "^13.0.0",
+        "@material/icon-button": "^13.0.0",
+        "@material/linear-progress": "^13.0.0",
+        "@material/list": "^13.0.0",
+        "@material/menu": "^13.0.0",
+        "@material/rtl": "^13.0.0",
+        "@material/select": "^13.0.0",
+        "@material/shape": "^13.0.0",
+        "@material/theme": "^13.0.0",
+        "@material/touch-target": "^13.0.0",
+        "@material/typography": "^13.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/density": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/density/-/density-13.0.0.tgz",
+      "integrity": "sha512-ppJTzOsuhjQam5GvHaq/XZocZNUr+41XQ2sd5nONAmQ0wwzXgqG0FaxtF1EXqK3uZFadz+vAu6enagre9DXhTA==",
+      "dependencies": {
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/dialog": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/dialog/-/dialog-13.0.0.tgz",
+      "integrity": "sha512-1Ggo9Bid94F1ttZJKSjIcgMvkVQtKsqwbqLs5cWlleaiwtAcwUE12XA2B1MNj8xM9ajU3BJm4GigupBOK1jGHQ==",
+      "dependencies": {
+        "@material/animation": "^13.0.0",
+        "@material/base": "^13.0.0",
+        "@material/button": "^13.0.0",
+        "@material/dom": "^13.0.0",
+        "@material/elevation": "^13.0.0",
+        "@material/feature-targeting": "^13.0.0",
+        "@material/icon-button": "^13.0.0",
+        "@material/ripple": "^13.0.0",
+        "@material/rtl": "^13.0.0",
+        "@material/shape": "^13.0.0",
+        "@material/theme": "^13.0.0",
+        "@material/tokens": "^13.0.0",
+        "@material/touch-target": "^13.0.0",
+        "@material/typography": "^13.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/dom": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/dom/-/dom-13.0.0.tgz",
+      "integrity": "sha512-M9HLAYBZtkTUvf66FL+jAEvUOdhji1HkGA1mV6oyE+HY9gkCkmso+mngvzlLd5+uaAVE9I3WQFhSb9gp0cpXnw==",
+      "dependencies": {
+        "@material/feature-targeting": "^13.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/drawer": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/drawer/-/drawer-13.0.0.tgz",
+      "integrity": "sha512-TIV/K9MED3ymngmKrdLwOMhUF44BzoR6HuTVsZAM4bgy0sfSv+jzgaGUqJsvjEhTXk+Q9OTEge+TsU/ETzQCbg==",
+      "dependencies": {
+        "@material/animation": "^13.0.0",
+        "@material/base": "^13.0.0",
+        "@material/dom": "^13.0.0",
+        "@material/elevation": "^13.0.0",
+        "@material/feature-targeting": "^13.0.0",
+        "@material/list": "^13.0.0",
+        "@material/ripple": "^13.0.0",
+        "@material/rtl": "^13.0.0",
+        "@material/shape": "^13.0.0",
+        "@material/theme": "^13.0.0",
+        "@material/typography": "^13.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/elevation": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/elevation/-/elevation-13.0.0.tgz",
+      "integrity": "sha512-hzdblgamVRbC0UwKafcvUVDvKzMiOSveDiwGgFk+EAg/tZRdwMlQPyf/9I6Lr8Cw/pNGnEOPhmCDOYPOHimr0w==",
+      "dependencies": {
+        "@material/animation": "^13.0.0",
+        "@material/base": "^13.0.0",
+        "@material/feature-targeting": "^13.0.0",
+        "@material/rtl": "^13.0.0",
+        "@material/theme": "^13.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/fab": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/fab/-/fab-13.0.0.tgz",
+      "integrity": "sha512-qOi+XWEZWUR5T961UjSorgqm5VaanuZtRN3nsrKqHH1p0L8fYRc3qkGIChlaY9p7BcOYMCynXJzT+MfELVrcwA==",
+      "dependencies": {
+        "@material/animation": "^13.0.0",
+        "@material/dom": "^13.0.0",
+        "@material/elevation": "^13.0.0",
+        "@material/feature-targeting": "^13.0.0",
+        "@material/ripple": "^13.0.0",
+        "@material/rtl": "^13.0.0",
+        "@material/shape": "^13.0.0",
+        "@material/theme": "^13.0.0",
+        "@material/tokens": "^13.0.0",
+        "@material/touch-target": "^13.0.0",
+        "@material/typography": "^13.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/feature-targeting": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/feature-targeting/-/feature-targeting-13.0.0.tgz",
+      "integrity": "sha512-QJClfeaA4EMyAxKJy9WR0Nx+/VwSZCkhGLUVBG9NhxqYGfl/LtaeaidrNm32vYEoNZAofN92VD2RwQTRwp/dMQ==",
+      "dependencies": {
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/floating-label": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/floating-label/-/floating-label-13.0.0.tgz",
+      "integrity": "sha512-imAPamD97QrizVCOpxjr3UfQJyDBpEEhDBSbEbKLrCpqG3jQx4/My5rNKKVGWjxUiBYgBA1dhkn98RRX5tGBtQ==",
+      "dependencies": {
+        "@material/animation": "^13.0.0",
+        "@material/base": "^13.0.0",
+        "@material/dom": "^13.0.0",
+        "@material/feature-targeting": "^13.0.0",
+        "@material/rtl": "^13.0.0",
+        "@material/theme": "^13.0.0",
+        "@material/typography": "^13.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/focus-ring": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/focus-ring/-/focus-ring-14.0.0.tgz",
+      "integrity": "sha512-fqqka6iSfQGJG3Le48RxPCtnOiaLGPDPikhktGbxlyW9srBVMgeCiONfHM7IT/1eu80O0Y67Lh/4ohu5+C+VAQ==",
+      "dependencies": {
+        "@material/dom": "^14.0.0",
+        "@material/feature-targeting": "^14.0.0",
+        "@material/rtl": "^14.0.0"
+      }
+    },
+    "node_modules/@material/focus-ring/node_modules/@material/dom": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/dom/-/dom-14.0.0.tgz",
+      "integrity": "sha512-8t88XyacclTj8qsIw9q0vEj4PI2KVncLoIsIMzwuMx49P2FZg6TsLjor262MI3Qs00UWAifuLMrhnOnfyrbe7Q==",
+      "dependencies": {
+        "@material/feature-targeting": "^14.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/focus-ring/node_modules/@material/feature-targeting": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/feature-targeting/-/feature-targeting-14.0.0.tgz",
+      "integrity": "sha512-a5WGgHEq5lJeeNL5yevtgoZjBjXWy6+klfVWQEh8oyix/rMJygGgO7gEc52uv8fB8uAIoYEB3iBMOv8jRq8FeA==",
+      "dependencies": {
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/focus-ring/node_modules/@material/rtl": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/rtl/-/rtl-14.0.0.tgz",
+      "integrity": "sha512-xl6OZYyRjuiW2hmbjV2omMV8sQtfmKAjeWnD1RMiAPLCTyOW9Lh/PYYnXjxUrNa0cRwIIbOn5J7OYXokja8puA==",
+      "dependencies": {
+        "@material/theme": "^14.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/focus-ring/node_modules/@material/theme": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/theme/-/theme-14.0.0.tgz",
+      "integrity": "sha512-6/SENWNIFuXzeHMPHrYwbsXKgkvCtWuzzQ3cUu4UEt3KcQ5YpViazIM6h8ByYKZP8A9d8QpkJ0WGX5btGDcVoA==",
+      "dependencies": {
+        "@material/feature-targeting": "^14.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/form-field": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/form-field/-/form-field-14.0.0.tgz",
+      "integrity": "sha512-k1GNBj6Sp8A7Xsn5lTMp5DkUkg60HX7YkQIRyFz1qCDCKJRWh/ou7Z45GMMgKmG3aF6LfjIavc7SjyCl8e5yVg==",
+      "dependencies": {
+        "@material/base": "^14.0.0",
+        "@material/feature-targeting": "^14.0.0",
+        "@material/ripple": "^14.0.0",
+        "@material/rtl": "^14.0.0",
+        "@material/theme": "^14.0.0",
+        "@material/typography": "^14.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/form-field/node_modules/@material/animation": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/animation/-/animation-14.0.0.tgz",
+      "integrity": "sha512-VlYSfUaIj/BBVtRZI8Gv0VvzikFf+XgK0Zdgsok5c1v5DDnNz5tpB8mnGrveWz0rHbp1X4+CWLKrTwNmjrw3Xw==",
+      "dependencies": {
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/form-field/node_modules/@material/base": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/base/-/base-14.0.0.tgz",
+      "integrity": "sha512-Ou7vS7n1H4Y10MUZyYAbt6H0t67c6urxoCgeVT7M38aQlaNUwFMODp7KT/myjYz2YULfhu3PtfSV3Sltgac9mA==",
+      "dependencies": {
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/form-field/node_modules/@material/dom": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/dom/-/dom-14.0.0.tgz",
+      "integrity": "sha512-8t88XyacclTj8qsIw9q0vEj4PI2KVncLoIsIMzwuMx49P2FZg6TsLjor262MI3Qs00UWAifuLMrhnOnfyrbe7Q==",
+      "dependencies": {
+        "@material/feature-targeting": "^14.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/form-field/node_modules/@material/feature-targeting": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/feature-targeting/-/feature-targeting-14.0.0.tgz",
+      "integrity": "sha512-a5WGgHEq5lJeeNL5yevtgoZjBjXWy6+klfVWQEh8oyix/rMJygGgO7gEc52uv8fB8uAIoYEB3iBMOv8jRq8FeA==",
+      "dependencies": {
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/form-field/node_modules/@material/ripple": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/ripple/-/ripple-14.0.0.tgz",
+      "integrity": "sha512-9XoGBFd5JhFgELgW7pqtiLy+CnCIcV2s9cQ2BWbOQeA8faX9UZIDUx/g76nHLZ7UzKFtsULJxZTwORmsEt2zvw==",
+      "dependencies": {
+        "@material/animation": "^14.0.0",
+        "@material/base": "^14.0.0",
+        "@material/dom": "^14.0.0",
+        "@material/feature-targeting": "^14.0.0",
+        "@material/rtl": "^14.0.0",
+        "@material/theme": "^14.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/form-field/node_modules/@material/rtl": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/rtl/-/rtl-14.0.0.tgz",
+      "integrity": "sha512-xl6OZYyRjuiW2hmbjV2omMV8sQtfmKAjeWnD1RMiAPLCTyOW9Lh/PYYnXjxUrNa0cRwIIbOn5J7OYXokja8puA==",
+      "dependencies": {
+        "@material/theme": "^14.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/form-field/node_modules/@material/theme": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/theme/-/theme-14.0.0.tgz",
+      "integrity": "sha512-6/SENWNIFuXzeHMPHrYwbsXKgkvCtWuzzQ3cUu4UEt3KcQ5YpViazIM6h8ByYKZP8A9d8QpkJ0WGX5btGDcVoA==",
+      "dependencies": {
+        "@material/feature-targeting": "^14.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/form-field/node_modules/@material/typography": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/typography/-/typography-14.0.0.tgz",
+      "integrity": "sha512-/QtHBYiTR+TPMryM/CT386B2WlAQf/Ae32V324Z7P40gHLKY/YBXx7FDutAWZFeOerq/two4Nd2aAHBcMM2wMw==",
+      "dependencies": {
+        "@material/feature-targeting": "^14.0.0",
+        "@material/theme": "^14.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/icon-button": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/icon-button/-/icon-button-13.0.0.tgz",
+      "integrity": "sha512-SdxFytWvbfN0fj7jHFq3DqK5/Zoms+Ipuv6fI8AzwgDFe7mXJ2euPahN+3XcmJ3BaSMyfYsdbcYdCWs8bgHW1w==",
+      "dependencies": {
+        "@material/base": "^13.0.0",
+        "@material/density": "^13.0.0",
+        "@material/elevation": "^13.0.0",
+        "@material/feature-targeting": "^13.0.0",
+        "@material/ripple": "^13.0.0",
+        "@material/rtl": "^13.0.0",
+        "@material/theme": "^13.0.0",
+        "@material/touch-target": "^13.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/image-list": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/image-list/-/image-list-13.0.0.tgz",
+      "integrity": "sha512-D78QKpK5JmO6zrbsSYt1YfRlkqzzduDTe6BstS0efUFS1CA11hrqwQFoMaR1L1dw2U3CQ/CP22bBMSZVV9aU6A==",
+      "dependencies": {
+        "@material/feature-targeting": "^13.0.0",
+        "@material/shape": "^13.0.0",
+        "@material/theme": "^13.0.0",
+        "@material/typography": "^13.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/layout-grid": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/layout-grid/-/layout-grid-13.0.0.tgz",
+      "integrity": "sha512-9L1BVLRIyetm/AOC+59+yca6R0OO2AJKHiUMdZrxgUVjqVblqWXEMeONZqslFRGHBiSIaYdrDIhn4ZTYY6tKUA==",
+      "dependencies": {
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/line-ripple": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/line-ripple/-/line-ripple-13.0.0.tgz",
+      "integrity": "sha512-5djBRXrd1+SiMVUTWr4rD6xv+/qTaGGmgUS5GytBE5mczvnEwcPmM4PzF+HNj2TS+wvNvIfRjRmUzWO2Z6w2lA==",
+      "dependencies": {
+        "@material/animation": "^13.0.0",
+        "@material/base": "^13.0.0",
+        "@material/feature-targeting": "^13.0.0",
+        "@material/theme": "^13.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/linear-progress": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/linear-progress/-/linear-progress-13.0.0.tgz",
+      "integrity": "sha512-FJpP6flSME5QRPfkB616uA5bk9aMKJBqkklrHk6dSMZaTKbiHRmc6faxMIZ4w9W49JFMXaSwzC39y96tQTiRQg==",
+      "dependencies": {
+        "@material/animation": "^13.0.0",
+        "@material/base": "^13.0.0",
+        "@material/feature-targeting": "^13.0.0",
+        "@material/progress-indicator": "^13.0.0",
+        "@material/rtl": "^13.0.0",
+        "@material/theme": "^13.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/list": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/list/-/list-13.0.0.tgz",
+      "integrity": "sha512-poq4WNDEfW6Z3YPAn3wdBX4RSkj3A83Pht6984MmG8YJZMlq34ftHECw37VcdmFJIyRPdpZqywJo/i7CxsSAgQ==",
+      "dependencies": {
+        "@material/base": "^13.0.0",
+        "@material/density": "^13.0.0",
+        "@material/dom": "^13.0.0",
+        "@material/feature-targeting": "^13.0.0",
+        "@material/ripple": "^13.0.0",
+        "@material/rtl": "^13.0.0",
+        "@material/shape": "^13.0.0",
+        "@material/theme": "^13.0.0",
+        "@material/typography": "^13.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/menu": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/menu/-/menu-13.0.0.tgz",
+      "integrity": "sha512-RY9R2ubYU6a7WRJW3nWr/AoSzdrxwUGqkfJSx0U9M/wK1vbXYYcJ7eCXFzSpa5VrstE7of7PbyYtQ8V61tILEQ==",
+      "dependencies": {
+        "@material/base": "^13.0.0",
+        "@material/dom": "^13.0.0",
+        "@material/elevation": "^13.0.0",
+        "@material/feature-targeting": "^13.0.0",
+        "@material/list": "^13.0.0",
+        "@material/menu-surface": "^13.0.0",
+        "@material/ripple": "^13.0.0",
+        "@material/rtl": "^13.0.0",
+        "@material/theme": "^13.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/menu-surface": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/menu-surface/-/menu-surface-13.0.0.tgz",
+      "integrity": "sha512-Irfnk0l8AO7z8ucilbBzZI8izbFV/aK1GbiPpT1SmZuKkL1z+04rB2HpB+OqwaBixdLTDq70AyawcnQ0MACeXQ==",
+      "dependencies": {
+        "@material/animation": "^13.0.0",
+        "@material/base": "^13.0.0",
+        "@material/elevation": "^13.0.0",
+        "@material/feature-targeting": "^13.0.0",
+        "@material/rtl": "^13.0.0",
+        "@material/shape": "^13.0.0",
+        "@material/theme": "^13.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/notched-outline": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/notched-outline/-/notched-outline-13.0.0.tgz",
+      "integrity": "sha512-BHdxr1x2AN4oqycTNg0FGisG3rMHf50z3MuyUoQsJJ3WGjxBMWKd0yK/xl4m38nFKPg1vQnzyHIYTJdRpCaE7A==",
+      "dependencies": {
+        "@material/base": "^13.0.0",
+        "@material/feature-targeting": "^13.0.0",
+        "@material/floating-label": "^13.0.0",
+        "@material/rtl": "^13.0.0",
+        "@material/shape": "^13.0.0",
+        "@material/theme": "^13.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/progress-indicator": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/progress-indicator/-/progress-indicator-13.0.0.tgz",
+      "integrity": "sha512-IfhAMn03gWg/Rl0Bg26Q1g+DrMnaULllz+ZJeIY7BXZC5qFYq1fLq4+RiQmfPGlJfURUjrWNLcI1VDVyXUHHzg==",
+      "dependencies": {
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/radio": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/radio/-/radio-13.0.0.tgz",
+      "integrity": "sha512-6jeZ+dKSzBB/j2IZ7RjFl5mrB+EWnpv/x+U9w6ENLCdueM4+LKUqBAc2fC2WMycsqgoFnlB0xsO/sG+kN0J6fw==",
+      "dependencies": {
+        "@material/animation": "^13.0.0",
+        "@material/base": "^13.0.0",
+        "@material/density": "^13.0.0",
+        "@material/dom": "^13.0.0",
+        "@material/feature-targeting": "^13.0.0",
+        "@material/ripple": "^13.0.0",
+        "@material/theme": "^13.0.0",
+        "@material/touch-target": "^13.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/ripple": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/ripple/-/ripple-13.0.0.tgz",
+      "integrity": "sha512-hx4B40hB2rRfsGwf1jwo2GGlYDq0yUQjcMcMmXfQipPJNpQhy8ylmXKc1DBjmWf7EQ/MgbfCSYwPrYXrbGP31w==",
+      "dependencies": {
+        "@material/animation": "^13.0.0",
+        "@material/base": "^13.0.0",
+        "@material/dom": "^13.0.0",
+        "@material/feature-targeting": "^13.0.0",
+        "@material/rtl": "^13.0.0",
+        "@material/theme": "^13.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/rtl": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/rtl/-/rtl-13.0.0.tgz",
+      "integrity": "sha512-nFGy3iQg7k+xLs67eb86mRFVLwa0yi7MusqRK4OM8DXcLO5yoVfUTPKpdSykcbRryp9imVHsxutox2tZawR4og==",
+      "dependencies": {
+        "@material/theme": "^13.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/segmented-button": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/segmented-button/-/segmented-button-13.0.0.tgz",
+      "integrity": "sha512-cbjSzkGms+MB6e7ZF6Toc0kpIor4qFm3ueY8KGRIbpvPoJuHfDy6wqIUhwpfAibSpcaDSnCKg1m+hEtyplZPkQ==",
+      "dependencies": {
+        "@material/base": "^13.0.0",
+        "@material/elevation": "^13.0.0",
+        "@material/feature-targeting": "^13.0.0",
+        "@material/ripple": "^13.0.0",
+        "@material/theme": "^13.0.0",
+        "@material/touch-target": "^13.0.0",
+        "@material/typography": "^13.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/select": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/select/-/select-13.0.0.tgz",
+      "integrity": "sha512-wVprsSMicU/l+LAqXdOU+qdzzdHupLXpWWQo2Rsk8G6AxL1Zna+/+ETnRlDdr2wHHK/KNDXSBdmuCcoEIRshcA==",
+      "dependencies": {
+        "@material/animation": "^13.0.0",
+        "@material/base": "^13.0.0",
+        "@material/density": "^13.0.0",
+        "@material/dom": "^13.0.0",
+        "@material/feature-targeting": "^13.0.0",
+        "@material/floating-label": "^13.0.0",
+        "@material/line-ripple": "^13.0.0",
+        "@material/list": "^13.0.0",
+        "@material/menu": "^13.0.0",
+        "@material/menu-surface": "^13.0.0",
+        "@material/notched-outline": "^13.0.0",
+        "@material/ripple": "^13.0.0",
+        "@material/rtl": "^13.0.0",
+        "@material/shape": "^13.0.0",
+        "@material/theme": "^13.0.0",
+        "@material/typography": "^13.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/shape": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/shape/-/shape-13.0.0.tgz",
+      "integrity": "sha512-exk96+iCjzCujk3aSrvIMhmW773s1Tc0h+MbQKbt6Iv3nHJCyLSiRbxclCHXWHrVwG/9KZRkrt/g2qk7P3VRBg==",
+      "dependencies": {
+        "@material/feature-targeting": "^13.0.0",
+        "@material/rtl": "^13.0.0",
+        "@material/theme": "^13.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/slider": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/slider/-/slider-13.0.0.tgz",
+      "integrity": "sha512-PW+3X9MiOoWmXhirYo/Mk2UYW00Tnsihrx5YJQ4+IxwbrUI75/8yUsO8kVr7YC+Eqhldz8oXzhIXglQFtbpolQ==",
+      "dependencies": {
+        "@material/animation": "^13.0.0",
+        "@material/base": "^13.0.0",
+        "@material/dom": "^13.0.0",
+        "@material/elevation": "^13.0.0",
+        "@material/feature-targeting": "^13.0.0",
+        "@material/ripple": "^13.0.0",
+        "@material/rtl": "^13.0.0",
+        "@material/theme": "^13.0.0",
+        "@material/typography": "^13.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/snackbar": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/snackbar/-/snackbar-13.0.0.tgz",
+      "integrity": "sha512-z59aYCeMWWEbsUU04QDZN4CxzCCOp3OIc5tzrdqnY3qRq4wwApxncf7RKKKSU2K6WTEWfdHHOc7aNX8kqlDmUg==",
+      "dependencies": {
+        "@material/animation": "^13.0.0",
+        "@material/base": "^13.0.0",
+        "@material/button": "^13.0.0",
+        "@material/dom": "^13.0.0",
+        "@material/elevation": "^13.0.0",
+        "@material/feature-targeting": "^13.0.0",
+        "@material/icon-button": "^13.0.0",
+        "@material/ripple": "^13.0.0",
+        "@material/rtl": "^13.0.0",
+        "@material/shape": "^13.0.0",
+        "@material/theme": "^13.0.0",
+        "@material/typography": "^13.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/switch": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/switch/-/switch-13.0.0.tgz",
+      "integrity": "sha512-zbdo6nKEOAx24ILCBobZlQqU2WZ+KuPgdAc1VTI1q1BCKN3rDIfm9RnsCuYiZa9iaq4UUgdYuhH8KVEYGP7Lrw==",
+      "dependencies": {
+        "@material/animation": "^13.0.0",
+        "@material/base": "^13.0.0",
+        "@material/density": "^13.0.0",
+        "@material/dom": "^13.0.0",
+        "@material/elevation": "^13.0.0",
+        "@material/feature-targeting": "^13.0.0",
+        "@material/ripple": "^13.0.0",
+        "@material/rtl": "^13.0.0",
+        "@material/shape": "^13.0.0",
+        "@material/theme": "^13.0.0",
+        "@material/tokens": "^13.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/tab": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/tab/-/tab-13.0.0.tgz",
+      "integrity": "sha512-7tziMFiyiFZner39h6ue6A6rfJhz8LDyeVPYfdAMe8ZO8GT+PczDr5yuectamR8fNBE7Fk9Bj/KvIOx+LjKgDg==",
+      "dependencies": {
+        "@material/base": "^13.0.0",
+        "@material/elevation": "^13.0.0",
+        "@material/feature-targeting": "^13.0.0",
+        "@material/ripple": "^13.0.0",
+        "@material/rtl": "^13.0.0",
+        "@material/tab-indicator": "^13.0.0",
+        "@material/theme": "^13.0.0",
+        "@material/typography": "^13.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/tab-bar": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/tab-bar/-/tab-bar-13.0.0.tgz",
+      "integrity": "sha512-GLODDvwKiN867weT+WiSR/4Oum2hw0Ipl1vcJxtZeE6C3PmGWBE316j8a5DLYvf9bjIPLYLNLUzLU3QnJB6T5w==",
+      "dependencies": {
+        "@material/animation": "^13.0.0",
+        "@material/base": "^13.0.0",
+        "@material/density": "^13.0.0",
+        "@material/elevation": "^13.0.0",
+        "@material/feature-targeting": "^13.0.0",
+        "@material/tab": "^13.0.0",
+        "@material/tab-indicator": "^13.0.0",
+        "@material/tab-scroller": "^13.0.0",
+        "@material/theme": "^13.0.0",
+        "@material/typography": "^13.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/tab-indicator": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/tab-indicator/-/tab-indicator-13.0.0.tgz",
+      "integrity": "sha512-T6Q4zCdl374rQgNLrAIc8+sy8ax6fbNTZRb+oJgShzjVz4wH9OLk6LX1RREHEeWiZt69nTqeR4yU6/6xFX+Kjw==",
+      "dependencies": {
+        "@material/animation": "^13.0.0",
+        "@material/base": "^13.0.0",
+        "@material/feature-targeting": "^13.0.0",
+        "@material/theme": "^13.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/tab-scroller": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/tab-scroller/-/tab-scroller-13.0.0.tgz",
+      "integrity": "sha512-SHdNXTLrNA47RbTNOQa67DbQjw0qrf1h0OuoESXHMU/B7QQvhAOqnHpU32/LdCP+gvc7EdZjolVQgk3WphDcQA==",
+      "dependencies": {
+        "@material/animation": "^13.0.0",
+        "@material/base": "^13.0.0",
+        "@material/dom": "^13.0.0",
+        "@material/feature-targeting": "^13.0.0",
+        "@material/tab": "^13.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/textfield": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/textfield/-/textfield-13.0.0.tgz",
+      "integrity": "sha512-CzodrOqx8wzj2AQngMpISURJID4jVOHf4CtiPoj32LG8bWLn5ZfAAX2aA2rO6NPyDYsFm0aEnlfMhnDwQyPoYw==",
+      "dependencies": {
+        "@material/animation": "^13.0.0",
+        "@material/base": "^13.0.0",
+        "@material/density": "^13.0.0",
+        "@material/dom": "^13.0.0",
+        "@material/feature-targeting": "^13.0.0",
+        "@material/floating-label": "^13.0.0",
+        "@material/line-ripple": "^13.0.0",
+        "@material/notched-outline": "^13.0.0",
+        "@material/ripple": "^13.0.0",
+        "@material/rtl": "^13.0.0",
+        "@material/shape": "^13.0.0",
+        "@material/theme": "^13.0.0",
+        "@material/typography": "^13.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/theme": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/theme/-/theme-13.0.0.tgz",
+      "integrity": "sha512-KAe1s0MvvfCGAwJliDVTvgAKuD3ESwhl7F7br4Iam4IPdqME2rWl8NPhKHFfaWqTG7PyCgMMngYEYuA8cLNTsA==",
+      "dependencies": {
+        "@material/feature-targeting": "^13.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/tokens": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/tokens/-/tokens-13.0.0.tgz",
+      "integrity": "sha512-t55CKVeAjABdSQCKjsvYvqrA6Z4f5varLpLloai8ZQU0giSl7qbUczV1i8y2pSOzpRTswD5JKM7a19qfsl/TCA==",
+      "dependencies": {
+        "@material/elevation": "^13.0.0"
+      }
+    },
+    "node_modules/@material/tooltip": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/tooltip/-/tooltip-13.0.0.tgz",
+      "integrity": "sha512-/QinwEM0sYtRUthgOy7R+V4iwLMZ8SCd8A3PyGyTr27BUGWykwAUFdXyzT4rxLhDNcnDOYH14N+Z3Bom+UwO9Q==",
+      "dependencies": {
+        "@material/animation": "^13.0.0",
+        "@material/base": "^13.0.0",
+        "@material/dom": "^13.0.0",
+        "@material/elevation": "^13.0.0",
+        "@material/feature-targeting": "^13.0.0",
+        "@material/rtl": "^13.0.0",
+        "@material/shape": "^13.0.0",
+        "@material/theme": "^13.0.0",
+        "@material/typography": "^13.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/top-app-bar": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/top-app-bar/-/top-app-bar-13.0.0.tgz",
+      "integrity": "sha512-NTbIbBmoo4wfbBwW+9XMmjYQJ3e7NJ9P/ahTszYuzYDyWNcc3m8G/A0zM+1LBmoze3rP/QTxcaJUH/A5/3ufXA==",
+      "dependencies": {
+        "@material/animation": "^13.0.0",
+        "@material/base": "^13.0.0",
+        "@material/elevation": "^13.0.0",
+        "@material/ripple": "^13.0.0",
+        "@material/rtl": "^13.0.0",
+        "@material/shape": "^13.0.0",
+        "@material/theme": "^13.0.0",
+        "@material/typography": "^13.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/touch-target": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/touch-target/-/touch-target-13.0.0.tgz",
+      "integrity": "sha512-2BMjj+nwKIYG7cZZGcNuRSKo53knqDu9ksv9wLidxjLgzqXBd1v9gdXsqMRQXepoOqftWGmYMaRYI0xMnxt6lA==",
+      "dependencies": {
+        "@material/base": "^13.0.0",
+        "@material/feature-targeting": "^13.0.0",
+        "@material/rtl": "^13.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@material/typography": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/typography/-/typography-13.0.0.tgz",
+      "integrity": "sha512-UfaK4vT3LmGiiySf2RVIrf7fJZa6EJadFwo4YUMJx9bvUMRlBm1oI8Vo9fYpKdLfuSTeA+2BlgbwYVObj3laFw==",
+      "dependencies": {
+        "@material/feature-targeting": "^13.0.0",
+        "@material/theme": "^13.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@nodelib/fs.scandir": {
+      "version": "2.1.5",
+      "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+      "dev": true,
+      "dependencies": {
+        "@nodelib/fs.stat": "2.0.5",
+        "run-parallel": "^1.1.9"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@nodelib/fs.stat": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+      "dev": true,
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@nodelib/fs.walk": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+      "dev": true,
+      "dependencies": {
+        "@nodelib/fs.scandir": "2.1.5",
+        "fastq": "^1.6.0"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@rollup/plugin-dsv": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmmirror.com/@rollup/plugin-dsv/-/plugin-dsv-2.0.3.tgz",
+      "integrity": "sha512-x2lqNepgPZUwRgNzEK8oTpoN6Y7NEQQl1PHp4gltXuxeJGlu3oyxVuw5gY5+T/LMUyQ9Nvlw6xu/rOC7v9kxPg==",
+      "dev": true,
+      "dependencies": {
+        "@rollup/pluginutils": "^3.1.0",
+        "@types/d3-dsv": "~1.2.0",
+        "d3-dsv": "1.2.0",
+        "tosource": "^1.0.0"
+      }
+    },
+    "node_modules/@rollup/pluginutils": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz",
+      "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==",
+      "dev": true,
+      "dependencies": {
+        "@types/estree": "0.0.39",
+        "estree-walker": "^1.0.1",
+        "picomatch": "^2.2.2"
+      },
+      "engines": {
+        "node": ">= 8.0.0"
+      },
+      "peerDependencies": {
+        "rollup": "^1.20.0||^2.0.0"
+      }
+    },
+    "node_modules/@smui-extra/accordion": {
+      "version": "6.1.4",
+      "resolved": "https://registry.npmmirror.com/@smui-extra/accordion/-/accordion-6.1.4.tgz",
+      "integrity": "sha512-2yaGn8Jmqr+EGF+Xk5GkvNGu9jUH+RxuhUybfpZ0LHlGJhmXAAGUthgf44EJ0XLlR7upPaAmd3lI1+fYfmrRDQ==",
+      "dependencies": {
+        "@material/animation": "^13.0.0",
+        "@material/elevation": "^13.0.0",
+        "@material/feature-targeting": "^13.0.0",
+        "@material/ripple": "^13.0.0",
+        "@material/theme": "^13.0.0",
+        "@material/typography": "^13.0.0",
+        "@smui/common": "^6.1.4",
+        "@smui/paper": "^6.1.4",
+        "@smui/ripple": "^6.1.4",
+        "svelte2tsx": "^0.5.12"
+      }
+    },
+    "node_modules/@smui-extra/autocomplete": {
+      "version": "6.2.0",
+      "resolved": "https://registry.npmmirror.com/@smui-extra/autocomplete/-/autocomplete-6.2.0.tgz",
+      "integrity": "sha512-JCZOQO6rnDdCq8/q9gB4ElM04AIaQAcNLiNkPsgzUT6v8klYzerqPnfT3JBvm+p+ZUqocmRAIrdsF5QVvAgacg==",
+      "dependencies": {
+        "@smui/common": "^6.1.4",
+        "@smui/list": "^6.1.4",
+        "@smui/menu": "^6.2.0",
+        "@smui/menu-surface": "^6.1.4",
+        "@smui/textfield": "^6.1.4",
+        "svelte2tsx": "^0.5.12"
+      }
+    },
+    "node_modules/@smui-extra/badge": {
+      "version": "6.1.4",
+      "resolved": "https://registry.npmmirror.com/@smui-extra/badge/-/badge-6.1.4.tgz",
+      "integrity": "sha512-AudM5fswJlggtIy7JKywCBuWOPAT776OGwNXJlEUsCXCvqIqQC7HoCwn0Es15Y0rSZcPdRLJm9e2JjzC/SKTbw==",
+      "dependencies": {
+        "@material/feature-targeting": "^13.0.0",
+        "@material/rtl": "^13.0.0",
+        "@material/shape": "^13.0.0",
+        "@material/theme": "^13.0.0",
+        "@material/typography": "^13.0.0",
+        "@smui/common": "^6.1.4",
+        "svelte2tsx": "^0.5.12"
+      }
+    },
+    "node_modules/@smui/banner": {
+      "version": "6.1.4",
+      "resolved": "https://registry.npmmirror.com/@smui/banner/-/banner-6.1.4.tgz",
+      "integrity": "sha512-nv5/lHUFIIhEGmPBJfmj3Ube5LumCNJSlg+BnApk4obeBYET/ANz85zVU3kEEgn5FS8Z8V49/B59X5F0gY4eog==",
+      "dependencies": {
+        "@material/banner": "^13.0.0",
+        "@smui/common": "^6.1.4",
+        "svelte2tsx": "^0.5.12"
+      }
+    },
+    "node_modules/@smui/button": {
+      "version": "6.1.4",
+      "resolved": "https://registry.npmmirror.com/@smui/button/-/button-6.1.4.tgz",
+      "integrity": "sha512-4CD6uPNkvZzoQyr6b3+PC49wieMkZW6xzxf+r/vq5pcv2X/PM+caySjzfAZamWN2m4nZMrmJjyEw1iCITWoQyg==",
+      "dependencies": {
+        "@material/button": "^13.0.0",
+        "@material/elevation": "^13.0.0",
+        "@material/feature-targeting": "^13.0.0",
+        "@material/ripple": "^13.0.0",
+        "@material/theme": "^13.0.0",
+        "@smui/common": "^6.1.4",
+        "@smui/ripple": "^6.1.4",
+        "svelte2tsx": "^0.5.12"
+      }
+    },
+    "node_modules/@smui/card": {
+      "version": "6.1.4",
+      "resolved": "https://registry.npmmirror.com/@smui/card/-/card-6.1.4.tgz",
+      "integrity": "sha512-B8t2+w4Y9/3bz80yZeEFJH3Y2aFVZzHsUyBF2aC59rxa5qARihLE7PbCVEyqr6T5oQFr8A7QcHKLC+Ylsxj6HQ==",
+      "dependencies": {
+        "@material/card": "^13.0.0",
+        "@smui/button": "^6.1.4",
+        "@smui/common": "^6.1.4",
+        "@smui/icon-button": "^6.1.4",
+        "@smui/ripple": "^6.1.4",
+        "svelte2tsx": "^0.5.12"
+      }
+    },
+    "node_modules/@smui/checkbox": {
+      "version": "6.1.4",
+      "resolved": "https://registry.npmmirror.com/@smui/checkbox/-/checkbox-6.1.4.tgz",
+      "integrity": "sha512-yWARPjnOaQFVi4iQxUINDLAd0V78mtKhAEuc+F91cjpfDvSzaPWPD3dfynYN7g3yf7uW/bocHM1yUxqtmQ3+7Q==",
+      "dependencies": {
+        "@material/checkbox": "^13.0.0",
+        "@smui/common": "^6.1.4",
+        "@smui/ripple": "^6.1.4",
+        "svelte2tsx": "^0.5.12"
+      }
+    },
+    "node_modules/@smui/chips": {
+      "version": "7.0.0-beta.0",
+      "resolved": "https://registry.npmmirror.com/@smui/chips/-/chips-7.0.0-beta.0.tgz",
+      "integrity": "sha512-xL9bEJp0syGfHjGHtFAxBASCtDmbvlCLT/WV3k4PV1xzzCuEWFRQ+C15V8HxeKMPW/CPEi1rKelFkl1vzCchSQ==",
+      "dependencies": {
+        "@material/chips": "^14.0.0",
+        "@material/dom": "^14.0.0",
+        "@material/rtl": "^14.0.0",
+        "@smui/common": "^7.0.0-beta.0",
+        "@smui/ripple": "^7.0.0-beta.0",
+        "svelte2tsx": "^0.5.12"
+      }
+    },
+    "node_modules/@smui/chips/node_modules/@material/animation": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/animation/-/animation-14.0.0.tgz",
+      "integrity": "sha512-VlYSfUaIj/BBVtRZI8Gv0VvzikFf+XgK0Zdgsok5c1v5DDnNz5tpB8mnGrveWz0rHbp1X4+CWLKrTwNmjrw3Xw==",
+      "dependencies": {
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@smui/chips/node_modules/@material/base": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/base/-/base-14.0.0.tgz",
+      "integrity": "sha512-Ou7vS7n1H4Y10MUZyYAbt6H0t67c6urxoCgeVT7M38aQlaNUwFMODp7KT/myjYz2YULfhu3PtfSV3Sltgac9mA==",
+      "dependencies": {
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@smui/chips/node_modules/@material/dom": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/dom/-/dom-14.0.0.tgz",
+      "integrity": "sha512-8t88XyacclTj8qsIw9q0vEj4PI2KVncLoIsIMzwuMx49P2FZg6TsLjor262MI3Qs00UWAifuLMrhnOnfyrbe7Q==",
+      "dependencies": {
+        "@material/feature-targeting": "^14.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@smui/chips/node_modules/@material/feature-targeting": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/feature-targeting/-/feature-targeting-14.0.0.tgz",
+      "integrity": "sha512-a5WGgHEq5lJeeNL5yevtgoZjBjXWy6+klfVWQEh8oyix/rMJygGgO7gEc52uv8fB8uAIoYEB3iBMOv8jRq8FeA==",
+      "dependencies": {
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@smui/chips/node_modules/@material/ripple": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/ripple/-/ripple-14.0.0.tgz",
+      "integrity": "sha512-9XoGBFd5JhFgELgW7pqtiLy+CnCIcV2s9cQ2BWbOQeA8faX9UZIDUx/g76nHLZ7UzKFtsULJxZTwORmsEt2zvw==",
+      "dependencies": {
+        "@material/animation": "^14.0.0",
+        "@material/base": "^14.0.0",
+        "@material/dom": "^14.0.0",
+        "@material/feature-targeting": "^14.0.0",
+        "@material/rtl": "^14.0.0",
+        "@material/theme": "^14.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@smui/chips/node_modules/@material/rtl": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/rtl/-/rtl-14.0.0.tgz",
+      "integrity": "sha512-xl6OZYyRjuiW2hmbjV2omMV8sQtfmKAjeWnD1RMiAPLCTyOW9Lh/PYYnXjxUrNa0cRwIIbOn5J7OYXokja8puA==",
+      "dependencies": {
+        "@material/theme": "^14.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@smui/chips/node_modules/@material/theme": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/theme/-/theme-14.0.0.tgz",
+      "integrity": "sha512-6/SENWNIFuXzeHMPHrYwbsXKgkvCtWuzzQ3cUu4UEt3KcQ5YpViazIM6h8ByYKZP8A9d8QpkJ0WGX5btGDcVoA==",
+      "dependencies": {
+        "@material/feature-targeting": "^14.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@smui/chips/node_modules/@smui/common": {
+      "version": "7.0.0-beta.0",
+      "resolved": "https://registry.npmmirror.com/@smui/common/-/common-7.0.0-beta.0.tgz",
+      "integrity": "sha512-JFbmbXR/j3NdUPC1Nn28LDH62WVv6AaKQVr4VVmutgBYAkMy+QIQhG/kvFBP4Shr2gG8DLQyXGSK0wHHgiONlw==",
+      "dependencies": {
+        "@material/dom": "^14.0.0",
+        "@tsconfig/svelte": "^3.0.0",
+        "svelte2tsx": "^0.5.12"
+      }
+    },
+    "node_modules/@smui/chips/node_modules/@smui/ripple": {
+      "version": "7.0.0-beta.0",
+      "resolved": "https://registry.npmmirror.com/@smui/ripple/-/ripple-7.0.0-beta.0.tgz",
+      "integrity": "sha512-2G9ILzcNAWeL8NgqW4tuBJXuh0gfGj01CtlGeRUSUNG5AxM3zLECrTEEqKdX25wtJf+QxBqV1Zi3ZqFDm3lzDg==",
+      "dependencies": {
+        "@material/dom": "^14.0.0",
+        "@material/ripple": "^14.0.0",
+        "@smui/common": "^7.0.0-beta.0",
+        "svelte2tsx": "^0.5.12"
+      }
+    },
+    "node_modules/@smui/circular-progress": {
+      "version": "6.1.4",
+      "resolved": "https://registry.npmmirror.com/@smui/circular-progress/-/circular-progress-6.1.4.tgz",
+      "integrity": "sha512-79SOd1XpQsSA4P1JpuWgvMVRmGIXFnsTqDkbe8bqF5U8TuK8vPbTNeBO/ANlkOJr2Mqt4j/lJ8Vma02tqjamMA==",
+      "dependencies": {
+        "@material/circular-progress": "^13.0.0",
+        "@smui/common": "^6.1.4",
+        "svelte2tsx": "^0.5.12"
+      }
+    },
+    "node_modules/@smui/common": {
+      "version": "6.1.4",
+      "resolved": "https://registry.npmmirror.com/@smui/common/-/common-6.1.4.tgz",
+      "integrity": "sha512-l6c4gJH+qP9HdM9RhTP07Gl8eewVbYWT7QfVSAF+wwji32ndjgZLlP5P2Jl/GmsQOOlDoNB3VPy/o4Z/kab31g==",
+      "dependencies": {
+        "@material/dom": "^13.0.0",
+        "@tsconfig/svelte": "^3.0.0",
+        "svelte2tsx": "^0.5.12"
+      }
+    },
+    "node_modules/@smui/data-table": {
+      "version": "6.2.0",
+      "resolved": "https://registry.npmmirror.com/@smui/data-table/-/data-table-6.2.0.tgz",
+      "integrity": "sha512-fFfGRr6vwg343wdGhwHrHZbKI/eYQC8rcT7cDaQc8MOL6ULVW29h0Qt6KwyLMeArC/LV2SBsXQJqOIt+Z90qSQ==",
+      "dependencies": {
+        "@material/data-table": "^13.0.0",
+        "@material/dom": "^13.0.0",
+        "@smui/checkbox": "^6.1.4",
+        "@smui/common": "^6.1.4",
+        "@smui/icon-button": "^6.1.4",
+        "@smui/ripple": "^6.1.4",
+        "@smui/select": "^6.2.0",
+        "svelte2tsx": "^0.5.12"
+      }
+    },
+    "node_modules/@smui/dialog": {
+      "version": "6.1.4",
+      "resolved": "https://registry.npmmirror.com/@smui/dialog/-/dialog-6.1.4.tgz",
+      "integrity": "sha512-ouCROTmIHutDxmSI3DYX4vlGeFaq0VHRtdhD3vCdd/7u9qBukXunKaCfTOvqozdoaa0pG3Cc66bYsa25m9RP4w==",
+      "dependencies": {
+        "@material/button": "^13.0.0",
+        "@material/dialog": "^13.0.0",
+        "@material/dom": "^13.0.0",
+        "@smui/common": "^6.1.4",
+        "svelte2tsx": "^0.5.12"
+      }
+    },
+    "node_modules/@smui/drawer": {
+      "version": "6.1.4",
+      "resolved": "https://registry.npmmirror.com/@smui/drawer/-/drawer-6.1.4.tgz",
+      "integrity": "sha512-Y13Fvf9ue/yfeuV99I8doRYEN/viWMQpWPTmz3bvh+0ztyPvjK4kpP0AlCu1QxX7UCgb390DLmfT1lDrCl/QrA==",
+      "dependencies": {
+        "@material/dom": "^13.0.0",
+        "@material/drawer": "^13.0.0",
+        "@smui/common": "^6.1.4",
+        "svelte2tsx": "^0.5.12"
+      }
+    },
+    "node_modules/@smui/fab": {
+      "version": "6.1.4",
+      "resolved": "https://registry.npmmirror.com/@smui/fab/-/fab-6.1.4.tgz",
+      "integrity": "sha512-uwjh2moyu8bDoZBKLYbQXgDkX/FRlK/xseVYJ8jG/qTSxx/juVd9hG8sK7ERB/ru9odexTSobDXdQT6dPwaXDA==",
+      "dependencies": {
+        "@material/fab": "^13.0.0",
+        "@material/feature-targeting": "^13.0.0",
+        "@smui/common": "^6.1.4",
+        "@smui/ripple": "^6.1.4",
+        "svelte2tsx": "^0.5.12"
+      }
+    },
+    "node_modules/@smui/floating-label": {
+      "version": "6.1.4",
+      "resolved": "https://registry.npmmirror.com/@smui/floating-label/-/floating-label-6.1.4.tgz",
+      "integrity": "sha512-7crwK7WsU7ELS+uJj5J8XnbCGoJrCDijs7DN57ok3LemWTsmn0vhhnsmDC3FYZARcAQ1KsX936+ahJGfiP/oAg==",
+      "dependencies": {
+        "@material/floating-label": "^13.0.0",
+        "@smui/common": "^6.1.4",
+        "svelte2tsx": "^0.5.12"
+      }
+    },
+    "node_modules/@smui/form-field": {
+      "version": "7.0.0-beta.0",
+      "resolved": "https://registry.npmmirror.com/@smui/form-field/-/form-field-7.0.0-beta.0.tgz",
+      "integrity": "sha512-YWHg8bH1+sc8j5wmdbGdZJNtireCro7fBNp8RZCceChHXQPvaxhUwRU6zV/HepcVLT14SVSO3px5jRNnpCuM8Q==",
+      "dependencies": {
+        "@material/feature-targeting": "^14.0.0",
+        "@material/form-field": "^14.0.0",
+        "@material/rtl": "^14.0.0",
+        "@smui/common": "^7.0.0-beta.0",
+        "svelte2tsx": "^0.5.12"
+      }
+    },
+    "node_modules/@smui/form-field/node_modules/@material/dom": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/dom/-/dom-14.0.0.tgz",
+      "integrity": "sha512-8t88XyacclTj8qsIw9q0vEj4PI2KVncLoIsIMzwuMx49P2FZg6TsLjor262MI3Qs00UWAifuLMrhnOnfyrbe7Q==",
+      "dependencies": {
+        "@material/feature-targeting": "^14.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@smui/form-field/node_modules/@material/feature-targeting": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/feature-targeting/-/feature-targeting-14.0.0.tgz",
+      "integrity": "sha512-a5WGgHEq5lJeeNL5yevtgoZjBjXWy6+klfVWQEh8oyix/rMJygGgO7gEc52uv8fB8uAIoYEB3iBMOv8jRq8FeA==",
+      "dependencies": {
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@smui/form-field/node_modules/@material/rtl": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/rtl/-/rtl-14.0.0.tgz",
+      "integrity": "sha512-xl6OZYyRjuiW2hmbjV2omMV8sQtfmKAjeWnD1RMiAPLCTyOW9Lh/PYYnXjxUrNa0cRwIIbOn5J7OYXokja8puA==",
+      "dependencies": {
+        "@material/theme": "^14.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@smui/form-field/node_modules/@material/theme": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/theme/-/theme-14.0.0.tgz",
+      "integrity": "sha512-6/SENWNIFuXzeHMPHrYwbsXKgkvCtWuzzQ3cUu4UEt3KcQ5YpViazIM6h8ByYKZP8A9d8QpkJ0WGX5btGDcVoA==",
+      "dependencies": {
+        "@material/feature-targeting": "^14.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/@smui/form-field/node_modules/@smui/common": {
+      "version": "7.0.0-beta.0",
+      "resolved": "https://registry.npmmirror.com/@smui/common/-/common-7.0.0-beta.0.tgz",
+      "integrity": "sha512-JFbmbXR/j3NdUPC1Nn28LDH62WVv6AaKQVr4VVmutgBYAkMy+QIQhG/kvFBP4Shr2gG8DLQyXGSK0wHHgiONlw==",
+      "dependencies": {
+        "@material/dom": "^14.0.0",
+        "@tsconfig/svelte": "^3.0.0",
+        "svelte2tsx": "^0.5.12"
+      }
+    },
+    "node_modules/@smui/icon-button": {
+      "version": "6.1.4",
+      "resolved": "https://registry.npmmirror.com/@smui/icon-button/-/icon-button-6.1.4.tgz",
+      "integrity": "sha512-8eUow8d+vztGJBzHTuXGP0UszXq5RUN4syxW7Ur742D4zNSrF6dzccjteF5S51a7Pcf7AHeEDkAqHbA6ioIGLw==",
+      "dependencies": {
+        "@material/density": "^13.0.0",
+        "@material/icon-button": "^13.0.0",
+        "@smui/common": "^6.1.4",
+        "@smui/ripple": "^6.1.4",
+        "svelte2tsx": "^0.5.12"
+      }
+    },
+    "node_modules/@smui/image-list": {
+      "version": "6.1.4",
+      "resolved": "https://registry.npmmirror.com/@smui/image-list/-/image-list-6.1.4.tgz",
+      "integrity": "sha512-v52fqVzwqeOvwuJNnk16vHK3QTeS62EZoycSyUMpdf0AeG3DLzIOVo5+CkQ7xuvIFpWve59i5pmOsn29fteMsg==",
+      "dependencies": {
+        "@material/image-list": "^13.0.0",
+        "@smui/common": "^6.1.4",
+        "svelte2tsx": "^0.5.12"
+      }
+    },
+    "node_modules/@smui/layout-grid": {
+      "version": "6.1.4",
+      "resolved": "https://registry.npmmirror.com/@smui/layout-grid/-/layout-grid-6.1.4.tgz",
+      "integrity": "sha512-i8t/PxQsWXfXG1ESv3uiHHIsLTHU/T+FN33HncnXDYkG7IITMFeKXMN76VWpRjDfTl0f7p4EHazBjeXJ1dFziQ==",
+      "dependencies": {
+        "@material/layout-grid": "^13.0.0",
+        "@smui/common": "^6.1.4",
+        "svelte2tsx": "^0.5.12"
+      }
+    },
+    "node_modules/@smui/line-ripple": {
+      "version": "6.1.4",
+      "resolved": "https://registry.npmmirror.com/@smui/line-ripple/-/line-ripple-6.1.4.tgz",
+      "integrity": "sha512-IUbapkBPyrybkUEEZVLpBs6HXXHN3v1aHewFPI7KvHU4a+Ho7EIqWpAHn8wc8SSX2knC2/HeGtpNycAAW127Tw==",
+      "dependencies": {
+        "@material/line-ripple": "^13.0.0",
+        "@smui/common": "^6.1.4",
+        "svelte2tsx": "^0.5.12"
+      }
+    },
+    "node_modules/@smui/linear-progress": {
+      "version": "6.1.4",
+      "resolved": "https://registry.npmmirror.com/@smui/linear-progress/-/linear-progress-6.1.4.tgz",
+      "integrity": "sha512-ta1syavpt9yIAmqV98DKzf0JEy32us4oIxThgj9Ze+4Xi6l4NnuUAx3L9XiW37qE7xrNJcoFMAlErht2yYDUIw==",
+      "dependencies": {
+        "@material/linear-progress": "^13.0.0",
+        "@smui/common": "^6.1.4",
+        "svelte2tsx": "^0.5.12"
+      }
+    },
+    "node_modules/@smui/list": {
+      "version": "6.1.4",
+      "resolved": "https://registry.npmmirror.com/@smui/list/-/list-6.1.4.tgz",
+      "integrity": "sha512-YPecf8ib/EETUVlt+TZMclzm5S+usMVpFsIgidMR75+HFUpXVlHsaOqGdQuQYJ75YRf3HZcYwUNn4t2B3ayhTg==",
+      "dependencies": {
+        "@material/dom": "^13.0.0",
+        "@material/feature-targeting": "^13.0.0",
+        "@material/list": "^13.0.0",
+        "@smui/common": "^6.1.4",
+        "@smui/ripple": "^6.1.4",
+        "svelte2tsx": "^0.5.12"
+      }
+    },
+    "node_modules/@smui/menu": {
+      "version": "6.2.0",
+      "resolved": "https://registry.npmmirror.com/@smui/menu/-/menu-6.2.0.tgz",
+      "integrity": "sha512-zYb3U5DPyrHWKwH2Q6KLSotrQ+6r223PnLbYGRcOCF7sEVNL+P7N8n8EfJTxX+/NF9Dbs48Z1a0QBvkN51klbQ==",
+      "dependencies": {
+        "@material/dom": "^13.0.0",
+        "@material/menu": "^13.0.0",
+        "@smui/common": "^6.1.4",
+        "@smui/list": "^6.1.4",
+        "@smui/menu-surface": "^6.1.4",
+        "svelte2tsx": "^0.5.12"
+      }
+    },
+    "node_modules/@smui/menu-surface": {
+      "version": "6.1.4",
+      "resolved": "https://registry.npmmirror.com/@smui/menu-surface/-/menu-surface-6.1.4.tgz",
+      "integrity": "sha512-rZDHRLiAUCYrunhYAuZUSqtBO2r80rMu5/aeNuBNcemwBw/z/6opNTC8XEcAfN6kbbABewKDD/aW/MIZJgjHsA==",
+      "dependencies": {
+        "@material/animation": "^13.0.0",
+        "@material/menu-surface": "^13.0.0",
+        "@smui/common": "^6.1.4",
+        "svelte2tsx": "^0.5.12"
+      }
+    },
+    "node_modules/@smui/notched-outline": {
+      "version": "6.1.4",
+      "resolved": "https://registry.npmmirror.com/@smui/notched-outline/-/notched-outline-6.1.4.tgz",
+      "integrity": "sha512-wUWnF5qzCbM6UXioq1CHeYMHXfnd/2A2dXnl7ziQTEqPit9qCNc0XM9VcoxLJTy7IyEFmmTI7GcH0fOjggqg8A==",
+      "dependencies": {
+        "@material/notched-outline": "^13.0.0",
+        "@smui/common": "^6.1.4",
+        "@smui/floating-label": "^6.1.4",
+        "svelte2tsx": "^0.5.12"
+      }
+    },
+    "node_modules/@smui/paper": {
+      "version": "6.1.4",
+      "resolved": "https://registry.npmmirror.com/@smui/paper/-/paper-6.1.4.tgz",
+      "integrity": "sha512-mKfbF5Hr5yUsUL8tGmKHfkV6bxkE50EJwZmCw0t1+CSOfHTD/96klVNDVKh4Tgr7tfK8g0yJ14Ra8fJwV/V6jA==",
+      "dependencies": {
+        "@material/elevation": "^13.0.0",
+        "@material/feature-targeting": "^13.0.0",
+        "@material/shape": "^13.0.0",
+        "@material/theme": "^13.0.0",
+        "@material/typography": "^13.0.0",
+        "@smui/common": "^6.1.4",
+        "svelte2tsx": "^0.5.12"
+      }
+    },
+    "node_modules/@smui/radio": {
+      "version": "6.1.4",
+      "resolved": "https://registry.npmmirror.com/@smui/radio/-/radio-6.1.4.tgz",
+      "integrity": "sha512-G9/bhNX5X8GmWjzddRRmDxwcg4PqreCAoBXiQVcJdv4pinrkfgrtGVzGVzRzD0WEHlB4X9J2aYn6BkFn41xC+Q==",
+      "dependencies": {
+        "@material/radio": "^13.0.0",
+        "@smui/common": "^6.1.4",
+        "@smui/ripple": "^6.1.4",
+        "svelte2tsx": "^0.5.12"
+      }
+    },
+    "node_modules/@smui/ripple": {
+      "version": "6.1.4",
+      "resolved": "https://registry.npmmirror.com/@smui/ripple/-/ripple-6.1.4.tgz",
+      "integrity": "sha512-bMyjVE13Mpy8iygQTtxFTPfxJcefAD/4JBDTm3EORhyO16CcSHhHmMuUjP8YxWTPmn+mnWaeNORZ31aJt4tlYw==",
+      "dependencies": {
+        "@material/dom": "^13.0.0",
+        "@material/ripple": "^13.0.0",
+        "@smui/common": "^6.1.4",
+        "svelte2tsx": "^0.5.12"
+      }
+    },
+    "node_modules/@smui/segmented-button": {
+      "version": "6.1.4",
+      "resolved": "https://registry.npmmirror.com/@smui/segmented-button/-/segmented-button-6.1.4.tgz",
+      "integrity": "sha512-71k+vUfBYynvof1YNeElSoM2GFMZenU7yTKhL40yyACZJ33HAa/Xc+Tcy2uyrUyvCNd1dyrr49Cs4s/OX/nrdQ==",
+      "dependencies": {
+        "@material/segmented-button": "^13.0.0",
+        "@smui/common": "^6.1.4",
+        "@smui/ripple": "^6.1.4",
+        "svelte2tsx": "^0.5.12"
+      }
+    },
+    "node_modules/@smui/select": {
+      "version": "6.2.0",
+      "resolved": "https://registry.npmmirror.com/@smui/select/-/select-6.2.0.tgz",
+      "integrity": "sha512-Cr9lKbEiGF9E+AzQOaSbUc1WyHbbft7CoeLNHblEiRijffSMY/Pgsn0qjqOBh3jeDUu6Nb5BW/3icL1As3SS4Q==",
+      "dependencies": {
+        "@material/feature-targeting": "^13.0.0",
+        "@material/ripple": "^13.0.0",
+        "@material/rtl": "^13.0.0",
+        "@material/select": "^13.0.0",
+        "@material/theme": "^13.0.0",
+        "@smui/common": "^6.1.4",
+        "@smui/floating-label": "^6.1.4",
+        "@smui/line-ripple": "^6.1.4",
+        "@smui/list": "^6.1.4",
+        "@smui/menu": "^6.2.0",
+        "@smui/menu-surface": "^6.1.4",
+        "@smui/notched-outline": "^6.1.4",
+        "@smui/ripple": "^6.1.4",
+        "svelte2tsx": "^0.5.12"
+      }
+    },
+    "node_modules/@smui/slider": {
+      "version": "6.1.4",
+      "resolved": "https://registry.npmmirror.com/@smui/slider/-/slider-6.1.4.tgz",
+      "integrity": "sha512-Q+U8Q3XYOw6m8LOCfrXapFPsgIwnxqgn4Cy2MSnew1CtaPwEnul8gNP4OKxvZz24g2XPJa+ohAHVIVH149stQw==",
+      "dependencies": {
+        "@material/dom": "^13.0.0",
+        "@material/slider": "^13.0.0",
+        "@smui/common": "^6.1.4",
+        "@smui/ripple": "^6.1.4",
+        "svelte2tsx": "^0.5.12"
+      }
+    },
+    "node_modules/@smui/snackbar": {
+      "version": "6.1.4",
+      "resolved": "https://registry.npmmirror.com/@smui/snackbar/-/snackbar-6.1.4.tgz",
+      "integrity": "sha512-RkKqm9/uXRxcOTQfgkL3HvwRkRVzhmEjUWaRj6hr3MPUHvTI2nihv86BUNobRCt32ROKvnSATCjXsCfqTfceqg==",
+      "dependencies": {
+        "@material/dom": "^13.0.0",
+        "@material/feature-targeting": "^13.0.0",
+        "@material/snackbar": "^13.0.0",
+        "@smui/button": "^6.1.4",
+        "@smui/common": "^6.1.4",
+        "@smui/icon-button": "^6.1.4",
+        "@smui/ripple": "^6.1.4",
+        "svelte2tsx": "^0.5.12"
+      }
+    },
+    "node_modules/@smui/switch": {
+      "version": "6.1.4",
+      "resolved": "https://registry.npmmirror.com/@smui/switch/-/switch-6.1.4.tgz",
+      "integrity": "sha512-UluXjA4RD9f/EjrpmQwdhZB5Zk6d9FhGdzMIEEc7JEIoYnQ0TmOCSUDoV+IJpwdFSxYIlKgX37PInqPB62Eg3Q==",
+      "dependencies": {
+        "@material/feature-targeting": "^13.0.0",
+        "@material/switch": "^13.0.0",
+        "@material/theme": "^13.0.0",
+        "@smui/common": "^6.1.4",
+        "@smui/ripple": "^6.1.4",
+        "svelte2tsx": "^0.5.12"
+      }
+    },
+    "node_modules/@smui/tab": {
+      "version": "6.1.4",
+      "resolved": "https://registry.npmmirror.com/@smui/tab/-/tab-6.1.4.tgz",
+      "integrity": "sha512-vxxJ31XDArQPhGEq4M4CNeQH9i09xJxBEX3cTr34lP3IXih3RQ1TTw1a8xzC137FsJERGm3ii72CKHpPpnyFkA==",
+      "dependencies": {
+        "@material/tab": "^13.0.0",
+        "@smui/common": "^6.1.4",
+        "@smui/ripple": "^6.1.4",
+        "@smui/tab-indicator": "^6.1.4",
+        "svelte2tsx": "^0.5.12"
+      }
+    },
+    "node_modules/@smui/tab-bar": {
+      "version": "6.1.4",
+      "resolved": "https://registry.npmmirror.com/@smui/tab-bar/-/tab-bar-6.1.4.tgz",
+      "integrity": "sha512-bY2hzuYrdzvqWY34cYzez1YK5l4aF5gUFnaiu6l83wmhX5fzl5AqqKCbWgxoAVqNC4ErKAvthFzSaeiDdzOaNQ==",
+      "dependencies": {
+        "@material/tab-bar": "^13.0.0",
+        "@smui/common": "^6.1.4",
+        "@smui/tab": "^6.1.4",
+        "@smui/tab-scroller": "^6.1.4",
+        "svelte2tsx": "^0.5.12"
+      }
+    },
+    "node_modules/@smui/tab-indicator": {
+      "version": "6.1.4",
+      "resolved": "https://registry.npmmirror.com/@smui/tab-indicator/-/tab-indicator-6.1.4.tgz",
+      "integrity": "sha512-yb79eJe/5X7X9rzcO9vZG+QDUsyvXSGWaonpsD4n9PUtWYG56pmar1LAwsVTYJw3nAqZZuGyLDC8/O6qCrd2Tg==",
+      "dependencies": {
+        "@material/tab-indicator": "^13.0.0",
+        "@smui/common": "^6.1.4",
+        "svelte2tsx": "^0.5.12"
+      }
+    },
+    "node_modules/@smui/tab-scroller": {
+      "version": "6.1.4",
+      "resolved": "https://registry.npmmirror.com/@smui/tab-scroller/-/tab-scroller-6.1.4.tgz",
+      "integrity": "sha512-ViD6yuxYEkxfUeYq/EDpdRoeJCG+geYTWhXlQBKaLQ0IwN8qI5NRH+YcQozzJXNYlbW77lCn2X1piUWuMKEGSg==",
+      "dependencies": {
+        "@material/dom": "^13.0.0",
+        "@material/tab-scroller": "^13.0.0",
+        "@smui/common": "^6.1.4",
+        "svelte2tsx": "^0.5.12"
+      }
+    },
+    "node_modules/@smui/textfield": {
+      "version": "6.1.4",
+      "resolved": "https://registry.npmmirror.com/@smui/textfield/-/textfield-6.1.4.tgz",
+      "integrity": "sha512-Y873i6KCAeh3fa3Kp7EuVKR5BU5CtfVEJXP30uVM5PdNIVeAGV5xTCjOyq/rpiGALILxQFVMfE6NKKCyTCCenA==",
+      "dependencies": {
+        "@material/dom": "^13.0.0",
+        "@material/feature-targeting": "^13.0.0",
+        "@material/ripple": "^13.0.0",
+        "@material/rtl": "^13.0.0",
+        "@material/textfield": "^13.0.0",
+        "@smui/common": "^6.1.4",
+        "@smui/floating-label": "^6.1.4",
+        "@smui/line-ripple": "^6.1.4",
+        "@smui/notched-outline": "^6.1.4",
+        "@smui/ripple": "^6.1.4",
+        "svelte2tsx": "^0.5.12"
+      }
+    },
+    "node_modules/@smui/tooltip": {
+      "version": "6.1.4",
+      "resolved": "https://registry.npmmirror.com/@smui/tooltip/-/tooltip-6.1.4.tgz",
+      "integrity": "sha512-KBSoaRJ+9GX5HCxRt66zUOJ4++w9P9LPbBjOXIfyAvV3Qfm4VOBAm5mD2GWi1fJw96gci+lnTFq4pCMMN9L/2A==",
+      "dependencies": {
+        "@material/tooltip": "^13.0.0",
+        "@smui/common": "^6.1.4",
+        "svelte2tsx": "^0.5.12"
+      }
+    },
+    "node_modules/@smui/top-app-bar": {
+      "version": "6.1.4",
+      "resolved": "https://registry.npmmirror.com/@smui/top-app-bar/-/top-app-bar-6.1.4.tgz",
+      "integrity": "sha512-r7ychtYYtysTnVhTlNx+KZeReuUacbP9Cv3nmgQeiY8Qs3bSae/+AVNzEA3nB1QCXKKWwNPy81E0rjV4XKFLPg==",
+      "dependencies": {
+        "@material/feature-targeting": "^13.0.0",
+        "@material/top-app-bar": "^13.0.0",
+        "@smui/common": "^6.1.4",
+        "svelte2tsx": "^0.5.12"
+      }
+    },
+    "node_modules/@smui/touch-target": {
+      "version": "6.1.4",
+      "resolved": "https://registry.npmmirror.com/@smui/touch-target/-/touch-target-6.1.4.tgz",
+      "integrity": "sha512-ZQ1yYBOMIFaGiKylFWbmK9SEwCopZ/et2Pppvy3ssdQeSH8xDPcpa5/EdRYudxCYTPW/scZCUSww6ysTaFOuAw==",
+      "dependencies": {
+        "@material/touch-target": "^13.0.0",
+        "@smui/common": "^6.1.4",
+        "svelte2tsx": "^0.5.12"
+      }
+    },
+    "node_modules/@sveltejs/vite-plugin-svelte": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmmirror.com/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.4.0.tgz",
+      "integrity": "sha512-6QupI/jemMfK+yI2pMtJcu5iO2gtgTfcBdGwMZZt+lgbFELhszbDl6Qjh000HgAV8+XUA+8EY8DusOFk8WhOIg==",
+      "dev": true,
+      "dependencies": {
+        "debug": "^4.3.4",
+        "deepmerge": "^4.2.2",
+        "kleur": "^4.1.5",
+        "magic-string": "^0.26.7",
+        "svelte-hmr": "^0.15.1",
+        "vitefu": "^0.2.2"
+      },
+      "engines": {
+        "node": "^14.18.0 || >= 16"
+      },
+      "peerDependencies": {
+        "svelte": "^3.44.0",
+        "vite": "^3.0.0"
+      }
+    },
+    "node_modules/@tsconfig/svelte": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/@tsconfig/svelte/-/svelte-3.0.0.tgz",
+      "integrity": "sha512-pYrtLtOwku/7r1i9AMONsJMVYAtk3hzOfiGNekhtq5tYBGA7unMve8RvUclKLMT3PrihvJqUmzsRGh0RP84hKg=="
+    },
+    "node_modules/@types/d3-dsv": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmmirror.com/@types/d3-dsv/-/d3-dsv-1.2.2.tgz",
+      "integrity": "sha512-GRnz9z8ypqb7OsQ/xw/BmFAp0/k3pgM1s19FTZZSlCMY0EvyVTkU8xzZKKDXzytGXPpTNC4R5pGl9oxEvVSnHQ==",
+      "dev": true
+    },
+    "node_modules/@types/estree": {
+      "version": "0.0.39",
+      "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-0.0.39.tgz",
+      "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==",
+      "dev": true
+    },
+    "node_modules/@types/pug": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmmirror.com/@types/pug/-/pug-2.0.6.tgz",
+      "integrity": "sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==",
+      "dev": true
+    },
+    "node_modules/@types/sass": {
+      "version": "1.45.0",
+      "resolved": "https://registry.npmmirror.com/@types/sass/-/sass-1.45.0.tgz",
+      "integrity": "sha512-jn7qwGFmJHwUSphV8zZneO3GmtlgLsmhs/LQyVvQbIIa+fzGMUiHI4HXJZL3FT8MJmgXWbLGiVVY7ElvHq6vDA==",
+      "deprecated": "This is a stub types definition. sass provides its own type definitions, so you do not need this installed.",
+      "dev": true,
+      "dependencies": {
+        "sass": "*"
+      }
+    },
+    "node_modules/@vitejs/plugin-legacy": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmmirror.com/@vitejs/plugin-legacy/-/plugin-legacy-2.3.1.tgz",
+      "integrity": "sha512-J5KaGBlSt2tEYPVjM/C8dA6DkRzkFkbPe+Xb4IX5G+XOV5OGbVAfkMjKywdrkO3gGynO8S98i71Lmsff4cWkCQ==",
+      "dependencies": {
+        "@babel/standalone": "^7.20.0",
+        "core-js": "^3.26.0",
+        "magic-string": "^0.26.7",
+        "regenerator-runtime": "^0.13.10",
+        "systemjs": "^6.13.0"
+      },
+      "engines": {
+        "node": "^14.18.0 || >=16.0.0"
+      },
+      "peerDependencies": {
+        "terser": "^5.4.0",
+        "vite": "^3.0.0"
+      }
+    },
+    "node_modules/acorn": {
+      "version": "8.8.2",
+      "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.8.2.tgz",
+      "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
+      "bin": {
+        "acorn": "bin/acorn"
+      },
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/anymatch": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz",
+      "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+      "devOptional": true,
+      "dependencies": {
+        "normalize-path": "^3.0.0",
+        "picomatch": "^2.0.4"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/balanced-match": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz",
+      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+      "dev": true
+    },
+    "node_modules/bellajs": {
+      "version": "11.1.2",
+      "resolved": "https://registry.npmmirror.com/bellajs/-/bellajs-11.1.2.tgz",
+      "integrity": "sha512-2Fy3Km5JKyIy/KunW3oica2gZtkjD2qSqti2Q3xPhHvXXdMbc+32pEMOPG+xrSat0BXVhRjHIx++lzxIPK0GqQ==",
+      "engines": {
+        "node": ">= 14"
+      }
+    },
+    "node_modules/binary-extensions": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz",
+      "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+      "devOptional": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "dev": true,
+      "dependencies": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "node_modules/braces": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz",
+      "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+      "devOptional": true,
+      "dependencies": {
+        "fill-range": "^7.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/buffer-crc32": {
+      "version": "0.2.13",
+      "resolved": "https://registry.npmmirror.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
+      "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
+      "dev": true,
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/buffer-from": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz",
+      "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
+    },
+    "node_modules/callsites": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz",
+      "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/chokidar": {
+      "version": "3.5.3",
+      "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz",
+      "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+      "devOptional": true,
+      "dependencies": {
+        "anymatch": "~3.1.2",
+        "braces": "~3.0.2",
+        "glob-parent": "~5.1.2",
+        "is-binary-path": "~2.1.0",
+        "is-glob": "~4.0.1",
+        "normalize-path": "~3.0.0",
+        "readdirp": "~3.6.0"
+      },
+      "engines": {
+        "node": ">= 8.10.0"
+      },
+      "optionalDependencies": {
+        "fsevents": "~2.3.2"
+      }
+    },
+    "node_modules/commander": {
+      "version": "2.20.3",
+      "resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz",
+      "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
+    },
+    "node_modules/concat-map": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz",
+      "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+      "dev": true
+    },
+    "node_modules/core-js": {
+      "version": "3.29.0",
+      "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.29.0.tgz",
+      "integrity": "sha512-VG23vuEisJNkGl6XQmFJd3rEG/so/CNatqeE+7uZAwTSwFeB/qaO0be8xZYUNWprJ/GIwL8aMt9cj1kvbpTZhg==",
+      "hasInstallScript": true
+    },
+    "node_modules/country-code-emoji": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmmirror.com/country-code-emoji/-/country-code-emoji-2.3.0.tgz",
+      "integrity": "sha512-MqmIWr3aucoU/3XZU44e0sz6izAlErqaUYp9/NFzdnzb9TrwwornyW3ws2da5TSnpTUr2qP2840oJW9oNKXCoQ=="
+    },
+    "node_modules/country-flag-icons": {
+      "version": "1.5.5",
+      "resolved": "https://registry.npmmirror.com/country-flag-icons/-/country-flag-icons-1.5.5.tgz",
+      "integrity": "sha512-k4WXZ/WvWOSiYXRG1n8EYHNr1m/IX0GffKqAidaet5DrJsDOmJ8Q/8JvvONhZNnKYg24s4lvsm+9og1HcuIU/g=="
+    },
+    "node_modules/cross-fetch": {
+      "version": "3.1.5",
+      "resolved": "https://registry.npmmirror.com/cross-fetch/-/cross-fetch-3.1.5.tgz",
+      "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==",
+      "dependencies": {
+        "node-fetch": "2.6.7"
+      }
+    },
+    "node_modules/d3-dsv": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/d3-dsv/-/d3-dsv-1.2.0.tgz",
+      "integrity": "sha512-9yVlqvZcSOMhCYzniHE7EVUws7Fa1zgw+/EAV2BxJoG3ME19V6BQFBwI855XQDsxyOuG7NibqRMTtiF/Qup46g==",
+      "dev": true,
+      "dependencies": {
+        "commander": "2",
+        "iconv-lite": "0.4",
+        "rw": "1"
+      },
+      "bin": {
+        "csv2json": "bin/dsv2json",
+        "csv2tsv": "bin/dsv2dsv",
+        "dsv2dsv": "bin/dsv2dsv",
+        "dsv2json": "bin/dsv2json",
+        "json2csv": "bin/json2dsv",
+        "json2dsv": "bin/json2dsv",
+        "json2tsv": "bin/json2dsv",
+        "tsv2csv": "bin/dsv2dsv",
+        "tsv2json": "bin/dsv2json"
+      }
+    },
+    "node_modules/darkreader": {
+      "version": "4.9.58",
+      "resolved": "https://registry.npmmirror.com/darkreader/-/darkreader-4.9.58.tgz",
+      "integrity": "sha512-D/JGoJqW3m2AWBLhO+Pev+eThfs+CwRT4bcLb/1zKjql2yVwG0lx8C2XRDdSVGHw4y11n26W7syWoBpUfuhMqQ=="
+    },
+    "node_modules/debug": {
+      "version": "4.3.4",
+      "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz",
+      "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+      "dev": true,
+      "dependencies": {
+        "ms": "2.1.2"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "peerDependenciesMeta": {
+        "supports-color": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/dedent-js": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/dedent-js/-/dedent-js-1.0.1.tgz",
+      "integrity": "sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ=="
+    },
+    "node_modules/deepmerge": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmmirror.com/deepmerge/-/deepmerge-4.3.0.tgz",
+      "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/detect-indent": {
+      "version": "6.1.0",
+      "resolved": "https://registry.npmmirror.com/detect-indent/-/detect-indent-6.1.0.tgz",
+      "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/detect-nearest-browser-locale": {
+      "version": "19.0.0",
+      "resolved": "https://registry.npmmirror.com/detect-nearest-browser-locale/-/detect-nearest-browser-locale-19.0.0.tgz",
+      "integrity": "sha512-nprsk4sjhtvQThzsc4M1ZbMw0YZce+D8XTr1mxl4VZIeORKTgnHsdIzftRSGdkQ9SZpkZAZEd+ixYka0AKqi5g==",
+      "dependencies": {
+        "detect-nearest-locale": "^1.0.1"
+      }
+    },
+    "node_modules/detect-nearest-locale": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/detect-nearest-locale/-/detect-nearest-locale-1.0.1.tgz",
+      "integrity": "sha512-f4BbmpbH5AA4MsW55rnPxAC9b1Ev+6XY3JzlifZiaBAC95jfstbszEq70BM+79vXUw8HAq77TiAz1xcBO1Em2A=="
+    },
+    "node_modules/es6-promise": {
+      "version": "3.3.1",
+      "resolved": "https://registry.npmmirror.com/es6-promise/-/es6-promise-3.3.1.tgz",
+      "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==",
+      "dev": true
+    },
+    "node_modules/esbuild": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.15.18.tgz",
+      "integrity": "sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==",
+      "hasInstallScript": true,
+      "bin": {
+        "esbuild": "bin/esbuild"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "optionalDependencies": {
+        "@esbuild/android-arm": "0.15.18",
+        "@esbuild/linux-loong64": "0.15.18",
+        "esbuild-android-64": "0.15.18",
+        "esbuild-android-arm64": "0.15.18",
+        "esbuild-darwin-64": "0.15.18",
+        "esbuild-darwin-arm64": "0.15.18",
+        "esbuild-freebsd-64": "0.15.18",
+        "esbuild-freebsd-arm64": "0.15.18",
+        "esbuild-linux-32": "0.15.18",
+        "esbuild-linux-64": "0.15.18",
+        "esbuild-linux-arm": "0.15.18",
+        "esbuild-linux-arm64": "0.15.18",
+        "esbuild-linux-mips64le": "0.15.18",
+        "esbuild-linux-ppc64le": "0.15.18",
+        "esbuild-linux-riscv64": "0.15.18",
+        "esbuild-linux-s390x": "0.15.18",
+        "esbuild-netbsd-64": "0.15.18",
+        "esbuild-openbsd-64": "0.15.18",
+        "esbuild-sunos-64": "0.15.18",
+        "esbuild-windows-32": "0.15.18",
+        "esbuild-windows-64": "0.15.18",
+        "esbuild-windows-arm64": "0.15.18"
+      }
+    },
+    "node_modules/esbuild-android-64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz",
+      "integrity": "sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==",
+      "cpu": [
+        "x64"
+      ],
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-android-arm64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz",
+      "integrity": "sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-darwin-64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz",
+      "integrity": "sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==",
+      "cpu": [
+        "x64"
+      ],
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-darwin-arm64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz",
+      "integrity": "sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==",
+      "cpu": [
+        "arm64"
+      ],
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-freebsd-64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz",
+      "integrity": "sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==",
+      "cpu": [
+        "x64"
+      ],
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-freebsd-arm64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz",
+      "integrity": "sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==",
+      "cpu": [
+        "arm64"
+      ],
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-linux-32": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz",
+      "integrity": "sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==",
+      "cpu": [
+        "ia32"
+      ],
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-linux-64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz",
+      "integrity": "sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==",
+      "cpu": [
+        "x64"
+      ],
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-linux-arm": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz",
+      "integrity": "sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==",
+      "cpu": [
+        "arm"
+      ],
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-linux-arm64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz",
+      "integrity": "sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==",
+      "cpu": [
+        "arm64"
+      ],
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-linux-mips64le": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz",
+      "integrity": "sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==",
+      "cpu": [
+        "mips64el"
+      ],
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-linux-ppc64le": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz",
+      "integrity": "sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==",
+      "cpu": [
+        "ppc64"
+      ],
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-linux-riscv64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz",
+      "integrity": "sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==",
+      "cpu": [
+        "riscv64"
+      ],
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-linux-s390x": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz",
+      "integrity": "sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==",
+      "cpu": [
+        "s390x"
+      ],
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-netbsd-64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz",
+      "integrity": "sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==",
+      "cpu": [
+        "x64"
+      ],
+      "optional": true,
+      "os": [
+        "netbsd"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-openbsd-64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz",
+      "integrity": "sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==",
+      "cpu": [
+        "x64"
+      ],
+      "optional": true,
+      "os": [
+        "openbsd"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-sunos-64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz",
+      "integrity": "sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==",
+      "cpu": [
+        "x64"
+      ],
+      "optional": true,
+      "os": [
+        "sunos"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-windows-32": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz",
+      "integrity": "sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==",
+      "cpu": [
+        "ia32"
+      ],
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-windows-64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz",
+      "integrity": "sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==",
+      "cpu": [
+        "x64"
+      ],
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-windows-arm64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz",
+      "integrity": "sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/estree-walker": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-1.0.1.tgz",
+      "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==",
+      "dev": true
+    },
+    "node_modules/fast-glob": {
+      "version": "3.2.12",
+      "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.12.tgz",
+      "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
+      "dev": true,
+      "dependencies": {
+        "@nodelib/fs.stat": "^2.0.2",
+        "@nodelib/fs.walk": "^1.2.3",
+        "glob-parent": "^5.1.2",
+        "merge2": "^1.3.0",
+        "micromatch": "^4.0.4"
+      },
+      "engines": {
+        "node": ">=8.6.0"
+      }
+    },
+    "node_modules/fast-xml-parser": {
+      "version": "4.1.3",
+      "resolved": "https://registry.npmmirror.com/fast-xml-parser/-/fast-xml-parser-4.1.3.tgz",
+      "integrity": "sha512-LsNDahCiCcJPe8NO7HijcnukHB24tKbfDDA5IILx9dmW3Frb52lhbeX6MPNUSvyGNfav2VTYpJ/OqkRoVLrh2Q==",
+      "dependencies": {
+        "strnum": "^1.0.5"
+      },
+      "bin": {
+        "fxparser": "src/cli/cli.js"
+      }
+    },
+    "node_modules/fastq": {
+      "version": "1.15.0",
+      "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.15.0.tgz",
+      "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
+      "dev": true,
+      "dependencies": {
+        "reusify": "^1.0.4"
+      }
+    },
+    "node_modules/fill-range": {
+      "version": "7.0.1",
+      "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz",
+      "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+      "devOptional": true,
+      "dependencies": {
+        "to-regex-range": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/fs-extra": {
+      "version": "8.1.0",
+      "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-8.1.0.tgz",
+      "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
+      "dependencies": {
+        "graceful-fs": "^4.2.0",
+        "jsonfile": "^4.0.0",
+        "universalify": "^0.1.0"
+      },
+      "engines": {
+        "node": ">=6 <7 || >=8"
+      }
+    },
+    "node_modules/fs-extra/node_modules/jsonfile": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-4.0.0.tgz",
+      "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
+      "optionalDependencies": {
+        "graceful-fs": "^4.1.6"
+      }
+    },
+    "node_modules/fs.realpath": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz",
+      "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+      "dev": true
+    },
+    "node_modules/fsevents": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz",
+      "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+      "hasInstallScript": true,
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+      }
+    },
+    "node_modules/function-bind": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz",
+      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+    },
+    "node_modules/glob": {
+      "version": "7.2.3",
+      "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz",
+      "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+      "dev": true,
+      "dependencies": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.1.1",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/glob-parent": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz",
+      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+      "devOptional": true,
+      "dependencies": {
+        "is-glob": "^4.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/graceful-fs": {
+      "version": "4.2.10",
+      "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz",
+      "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="
+    },
+    "node_modules/has": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/has/-/has-1.0.3.tgz",
+      "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+      "dependencies": {
+        "function-bind": "^1.1.1"
+      },
+      "engines": {
+        "node": ">= 0.4.0"
+      }
+    },
+    "node_modules/html-entities": {
+      "version": "2.3.3",
+      "resolved": "https://registry.npmmirror.com/html-entities/-/html-entities-2.3.3.tgz",
+      "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA=="
+    },
+    "node_modules/iconv-lite": {
+      "version": "0.4.24",
+      "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz",
+      "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+      "dev": true,
+      "dependencies": {
+        "safer-buffer": ">= 2.1.2 < 3"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/immutable": {
+      "version": "4.2.4",
+      "resolved": "https://registry.npmmirror.com/immutable/-/immutable-4.2.4.tgz",
+      "integrity": "sha512-WDxL3Hheb1JkRN3sQkyujNlL/xRjAo3rJtaU5xeufUauG66JdMr32bLj4gF+vWl84DIA3Zxw7tiAjneYzRRw+w==",
+      "devOptional": true
+    },
+    "node_modules/import-fresh": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz",
+      "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+      "dev": true,
+      "dependencies": {
+        "parent-module": "^1.0.0",
+        "resolve-from": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/inflight": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz",
+      "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+      "dev": true,
+      "dependencies": {
+        "once": "^1.3.0",
+        "wrappy": "1"
+      }
+    },
+    "node_modules/inherits": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz",
+      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+    },
+    "node_modules/is-binary-path": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz",
+      "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+      "devOptional": true,
+      "dependencies": {
+        "binary-extensions": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/is-core-module": {
+      "version": "2.11.0",
+      "resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.11.0.tgz",
+      "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
+      "dependencies": {
+        "has": "^1.0.3"
+      }
+    },
+    "node_modules/is-extglob": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz",
+      "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+      "devOptional": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-glob": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz",
+      "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+      "devOptional": true,
+      "dependencies": {
+        "is-extglob": "^2.1.1"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-number": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz",
+      "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+      "devOptional": true,
+      "engines": {
+        "node": ">=0.12.0"
+      }
+    },
+    "node_modules/jsonfile": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-5.0.0.tgz",
+      "integrity": "sha512-NQRZ5CRo74MhMMC3/3r5g2k4fjodJ/wh8MxjFbCViWKFjxrnudWSY5vomh+23ZaXzAS7J3fBZIR2dV6WbmfM0w==",
+      "dependencies": {
+        "universalify": "^0.1.2"
+      },
+      "optionalDependencies": {
+        "graceful-fs": "^4.1.6"
+      }
+    },
+    "node_modules/kleur": {
+      "version": "4.1.5",
+      "resolved": "https://registry.npmmirror.com/kleur/-/kleur-4.1.5.tgz",
+      "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/knuth-shuffle": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmmirror.com/knuth-shuffle/-/knuth-shuffle-1.0.8.tgz",
+      "integrity": "sha512-IdC4Hpp+mx53zTt6VAGsAtbGM0g4BV9fP8tTcviCosSwocHcRDw9uG5Rnv6wLWckF4r72qeXFoK9NkvV1gUJCQ=="
+    },
+    "node_modules/knuth-shuffle-seeded": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmmirror.com/knuth-shuffle-seeded/-/knuth-shuffle-seeded-1.0.6.tgz",
+      "integrity": "sha512-9pFH0SplrfyKyojCLxZfMcvkhf5hH0d+UwR9nTVJ/DDQJGuzcXjTwB7TP7sDfehSudlGGaOLblmEWqv04ERVWg==",
+      "dependencies": {
+        "seed-random": "~2.2.0"
+      }
+    },
+    "node_modules/lower-case": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmmirror.com/lower-case/-/lower-case-2.0.2.tgz",
+      "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==",
+      "dependencies": {
+        "tslib": "^2.0.3"
+      }
+    },
+    "node_modules/magic-string": {
+      "version": "0.26.7",
+      "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.26.7.tgz",
+      "integrity": "sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==",
+      "dependencies": {
+        "sourcemap-codec": "^1.4.8"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/merge2": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz",
+      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+      "dev": true,
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/micromatch": {
+      "version": "4.0.5",
+      "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz",
+      "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+      "dev": true,
+      "dependencies": {
+        "braces": "^3.0.2",
+        "picomatch": "^2.3.1"
+      },
+      "engines": {
+        "node": ">=8.6"
+      }
+    },
+    "node_modules/min-indent": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/min-indent/-/min-indent-1.0.1.tgz",
+      "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==",
+      "dev": true,
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+      "dev": true,
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/minimist": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz",
+      "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+      "dev": true
+    },
+    "node_modules/mkdirp": {
+      "version": "0.5.6",
+      "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.6.tgz",
+      "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+      "dev": true,
+      "dependencies": {
+        "minimist": "^1.2.6"
+      },
+      "bin": {
+        "mkdirp": "bin/cmd.js"
+      }
+    },
+    "node_modules/mri": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/mri/-/mri-1.2.0.tgz",
+      "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==",
+      "dev": true,
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/ms": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz",
+      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+      "dev": true
+    },
+    "node_modules/nanoid": {
+      "version": "3.3.4",
+      "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.4.tgz",
+      "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
+      "bin": {
+        "nanoid": "bin/nanoid.cjs"
+      },
+      "engines": {
+        "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+      }
+    },
+    "node_modules/no-case": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmmirror.com/no-case/-/no-case-3.0.4.tgz",
+      "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==",
+      "dependencies": {
+        "lower-case": "^2.0.2",
+        "tslib": "^2.0.3"
+      }
+    },
+    "node_modules/node-fetch": {
+      "version": "2.6.7",
+      "resolved": "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.6.7.tgz",
+      "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
+      "dependencies": {
+        "whatwg-url": "^5.0.0"
+      },
+      "engines": {
+        "node": "4.x || >=6.0.0"
+      },
+      "peerDependencies": {
+        "encoding": "^0.1.0"
+      },
+      "peerDependenciesMeta": {
+        "encoding": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/normalize-path": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz",
+      "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+      "devOptional": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/once": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmmirror.com/once/-/once-1.4.0.tgz",
+      "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+      "dev": true,
+      "dependencies": {
+        "wrappy": "1"
+      }
+    },
+    "node_modules/openmoji": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmmirror.com/openmoji/-/openmoji-14.0.0.tgz",
+      "integrity": "sha512-MGF9GbXfpULuRtUM1srEv2OP3sg/e8hAw0UCTiP+N3+CX38RCo8/kjyFYm0eO+OENnbbri9Vx4m5pU0Vbc7LGw=="
+    },
+    "node_modules/parent-module": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz",
+      "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+      "dev": true,
+      "dependencies": {
+        "callsites": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/pascal-case": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmmirror.com/pascal-case/-/pascal-case-3.1.2.tgz",
+      "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==",
+      "dependencies": {
+        "no-case": "^3.0.4",
+        "tslib": "^2.0.3"
+      }
+    },
+    "node_modules/path-is-absolute": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+      "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/path-parse": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz",
+      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+    },
+    "node_modules/picocolors": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz",
+      "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+    },
+    "node_modules/picomatch": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz",
+      "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+      "devOptional": true,
+      "engines": {
+        "node": ">=8.6"
+      }
+    },
+    "node_modules/postcss": {
+      "version": "8.4.21",
+      "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.21.tgz",
+      "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==",
+      "dependencies": {
+        "nanoid": "^3.3.4",
+        "picocolors": "^1.0.0",
+        "source-map-js": "^1.0.2"
+      },
+      "engines": {
+        "node": "^10 || ^12 || >=14"
+      }
+    },
+    "node_modules/queue-microtask": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz",
+      "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+      "dev": true
+    },
+    "node_modules/readable-stream": {
+      "version": "3.6.1",
+      "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.1.tgz",
+      "integrity": "sha512-+rQmrWMYGA90yenhTYsLWAsLsqVC8osOw6PKE1HDYiO0gdPeKe/xDHNzIAIn4C91YQ6oenEhfYqqc1883qHbjQ==",
+      "dependencies": {
+        "inherits": "^2.0.3",
+        "string_decoder": "^1.1.1",
+        "util-deprecate": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/readdirp": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz",
+      "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+      "devOptional": true,
+      "dependencies": {
+        "picomatch": "^2.2.1"
+      },
+      "engines": {
+        "node": ">=8.10.0"
+      }
+    },
+    "node_modules/regenerator-runtime": {
+      "version": "0.13.11",
+      "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
+      "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg=="
+    },
+    "node_modules/resolve": {
+      "version": "1.22.1",
+      "resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.1.tgz",
+      "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
+      "dependencies": {
+        "is-core-module": "^2.9.0",
+        "path-parse": "^1.0.7",
+        "supports-preserve-symlinks-flag": "^1.0.0"
+      },
+      "bin": {
+        "resolve": "bin/resolve"
+      }
+    },
+    "node_modules/resolve-from": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz",
+      "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+      "dev": true,
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/reusify": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz",
+      "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+      "dev": true,
+      "engines": {
+        "iojs": ">=1.0.0",
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/rimraf": {
+      "version": "2.7.1",
+      "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-2.7.1.tgz",
+      "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+      "dev": true,
+      "dependencies": {
+        "glob": "^7.1.3"
+      },
+      "bin": {
+        "rimraf": "bin.js"
+      }
+    },
+    "node_modules/rollup": {
+      "version": "2.79.1",
+      "resolved": "https://registry.npmmirror.com/rollup/-/rollup-2.79.1.tgz",
+      "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==",
+      "bin": {
+        "rollup": "dist/bin/rollup"
+      },
+      "engines": {
+        "node": ">=10.0.0"
+      },
+      "optionalDependencies": {
+        "fsevents": "~2.3.2"
+      }
+    },
+    "node_modules/run-parallel": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz",
+      "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+      "dev": true,
+      "dependencies": {
+        "queue-microtask": "^1.2.2"
+      }
+    },
+    "node_modules/rw": {
+      "version": "1.3.3",
+      "resolved": "https://registry.npmmirror.com/rw/-/rw-1.3.3.tgz",
+      "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==",
+      "dev": true
+    },
+    "node_modules/sade": {
+      "version": "1.8.1",
+      "resolved": "https://registry.npmmirror.com/sade/-/sade-1.8.1.tgz",
+      "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==",
+      "dev": true,
+      "dependencies": {
+        "mri": "^1.1.0"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/safe-buffer": {
+      "version": "5.2.1",
+      "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz",
+      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
+    },
+    "node_modules/safer-buffer": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz",
+      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+      "dev": true
+    },
+    "node_modules/sander": {
+      "version": "0.5.1",
+      "resolved": "https://registry.npmmirror.com/sander/-/sander-0.5.1.tgz",
+      "integrity": "sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==",
+      "dev": true,
+      "dependencies": {
+        "es6-promise": "^3.1.2",
+        "graceful-fs": "^4.1.3",
+        "mkdirp": "^0.5.1",
+        "rimraf": "^2.5.2"
+      }
+    },
+    "node_modules/sass": {
+      "version": "1.58.3",
+      "resolved": "https://registry.npmmirror.com/sass/-/sass-1.58.3.tgz",
+      "integrity": "sha512-Q7RaEtYf6BflYrQ+buPudKR26/lH+10EmO9bBqbmPh/KeLqv8bjpTNqxe71ocONqXq+jYiCbpPUmQMS+JJPk4A==",
+      "devOptional": true,
+      "dependencies": {
+        "chokidar": ">=3.0.0 <4.0.0",
+        "immutable": "^4.0.0",
+        "source-map-js": ">=0.6.2 <2.0.0"
+      },
+      "bin": {
+        "sass": "sass.js"
+      },
+      "engines": {
+        "node": ">=12.0.0"
+      }
+    },
+    "node_modules/seed-random": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmmirror.com/seed-random/-/seed-random-2.2.0.tgz",
+      "integrity": "sha512-34EQV6AAHQGhoc0tn/96a9Fsi6v2xdqe/dMUwljGRaFOzR3EgRmECvD0O8vi8X+/uQ50LGHfkNu/Eue5TPKZkQ=="
+    },
+    "node_modules/sorcery": {
+      "version": "0.10.0",
+      "resolved": "https://registry.npmmirror.com/sorcery/-/sorcery-0.10.0.tgz",
+      "integrity": "sha512-R5ocFmKZQFfSTstfOtHjJuAwbpGyf9qjQa1egyhvXSbM7emjrtLXtGdZsDJDABC85YBfVvrOiGWKSYXPKdvP1g==",
+      "dev": true,
+      "dependencies": {
+        "buffer-crc32": "^0.2.5",
+        "minimist": "^1.2.0",
+        "sander": "^0.5.0",
+        "sourcemap-codec": "^1.3.0"
+      },
+      "bin": {
+        "sorcery": "bin/index.js"
+      }
+    },
+    "node_modules/source-map": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz",
+      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/source-map-js": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz",
+      "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/source-map-support": {
+      "version": "0.5.21",
+      "resolved": "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz",
+      "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+      "dependencies": {
+        "buffer-from": "^1.0.0",
+        "source-map": "^0.6.0"
+      }
+    },
+    "node_modules/sourcemap-codec": {
+      "version": "1.4.8",
+      "resolved": "https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
+      "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
+      "deprecated": "Please use @jridgewell/sourcemap-codec instead"
+    },
+    "node_modules/stream-browserify": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/stream-browserify/-/stream-browserify-3.0.0.tgz",
+      "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==",
+      "dependencies": {
+        "inherits": "~2.0.4",
+        "readable-stream": "^3.5.0"
+      }
+    },
+    "node_modules/string_decoder": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz",
+      "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+      "dependencies": {
+        "safe-buffer": "~5.2.0"
+      }
+    },
+    "node_modules/strip-indent": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/strip-indent/-/strip-indent-3.0.0.tgz",
+      "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
+      "dev": true,
+      "dependencies": {
+        "min-indent": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/strnum": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmmirror.com/strnum/-/strnum-1.0.5.tgz",
+      "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA=="
+    },
+    "node_modules/supports-preserve-symlinks-flag": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+      "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/svelte": {
+      "version": "3.55.1",
+      "resolved": "https://registry.npmmirror.com/svelte/-/svelte-3.55.1.tgz",
+      "integrity": "sha512-S+87/P0Ve67HxKkEV23iCdAh/SX1xiSfjF1HOglno/YTbSTW7RniICMCofWGdJJbdjw3S+0PfFb1JtGfTXE0oQ==",
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/svelte-check": {
+      "version": "2.10.3",
+      "resolved": "https://registry.npmmirror.com/svelte-check/-/svelte-check-2.10.3.tgz",
+      "integrity": "sha512-Nt1aWHTOKFReBpmJ1vPug0aGysqPwJh2seM1OvICfM2oeyaA62mOiy5EvkXhltGfhCcIQcq2LoE0l1CwcWPjlw==",
+      "dev": true,
+      "dependencies": {
+        "@jridgewell/trace-mapping": "^0.3.9",
+        "chokidar": "^3.4.1",
+        "fast-glob": "^3.2.7",
+        "import-fresh": "^3.2.1",
+        "picocolors": "^1.0.0",
+        "sade": "^1.7.4",
+        "svelte-preprocess": "^4.0.0",
+        "typescript": "*"
+      },
+      "bin": {
+        "svelte-check": "bin/svelte-check"
+      },
+      "peerDependencies": {
+        "svelte": "^3.24.0"
+      }
+    },
+    "node_modules/svelte-hmr": {
+      "version": "0.15.1",
+      "resolved": "https://registry.npmmirror.com/svelte-hmr/-/svelte-hmr-0.15.1.tgz",
+      "integrity": "sha512-BiKB4RZ8YSwRKCNVdNxK/GfY+r4Kjgp9jCLEy0DuqAKfmQtpL38cQK3afdpjw4sqSs4PLi3jIPJIFp259NkZtA==",
+      "dev": true,
+      "engines": {
+        "node": "^12.20 || ^14.13.1 || >= 16"
+      },
+      "peerDependencies": {
+        "svelte": ">=3.19.0"
+      }
+    },
+    "node_modules/svelte-material-icons": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/svelte-material-icons/-/svelte-material-icons-2.1.0.tgz",
+      "integrity": "sha512-UaZngbPcWtS6gEoZx/8bpv0ompsm5SOZs66NkuEQIX+p8UblrUoknjy7kKRlFEpRdFQ232IB8jswkGaFTreB6g==",
+      "peerDependencies": {
+        "svelte": "^3.0.0"
+      }
+    },
+    "node_modules/svelte-material-ui": {
+      "version": "6.2.0",
+      "resolved": "https://registry.npmmirror.com/svelte-material-ui/-/svelte-material-ui-6.2.0.tgz",
+      "integrity": "sha512-/iS1gJr2Y4N+jDyt8AQZYaOTp9hAisWd5BXo20CIVUQbp2PX583S6w1JP5SpztjQnyGONpIa+qAg3Ntbj51c7Q==",
+      "dependencies": {
+        "@smui-extra/accordion": "^6.1.4",
+        "@smui-extra/autocomplete": "^6.2.0",
+        "@smui-extra/badge": "^6.1.4",
+        "@smui/banner": "^6.1.4",
+        "@smui/button": "^6.1.4",
+        "@smui/card": "^6.1.4",
+        "@smui/checkbox": "^6.1.4",
+        "@smui/chips": "^6.1.4",
+        "@smui/circular-progress": "^6.1.4",
+        "@smui/common": "^6.1.4",
+        "@smui/data-table": "^6.2.0",
+        "@smui/dialog": "^6.1.4",
+        "@smui/drawer": "^6.1.4",
+        "@smui/fab": "^6.1.4",
+        "@smui/floating-label": "^6.1.4",
+        "@smui/form-field": "^6.1.4",
+        "@smui/icon-button": "^6.1.4",
+        "@smui/image-list": "^6.1.4",
+        "@smui/layout-grid": "^6.1.4",
+        "@smui/line-ripple": "^6.1.4",
+        "@smui/linear-progress": "^6.1.4",
+        "@smui/list": "^6.1.4",
+        "@smui/menu": "^6.2.0",
+        "@smui/menu-surface": "^6.1.4",
+        "@smui/notched-outline": "^6.1.4",
+        "@smui/paper": "^6.1.4",
+        "@smui/radio": "^6.1.4",
+        "@smui/ripple": "^6.1.4",
+        "@smui/segmented-button": "^6.1.4",
+        "@smui/select": "^6.2.0",
+        "@smui/slider": "^6.1.4",
+        "@smui/snackbar": "^6.1.4",
+        "@smui/switch": "^6.1.4",
+        "@smui/tab": "^6.1.4",
+        "@smui/tab-bar": "^6.1.4",
+        "@smui/tab-indicator": "^6.1.4",
+        "@smui/tab-scroller": "^6.1.4",
+        "@smui/textfield": "^6.1.4",
+        "@smui/tooltip": "^6.1.4",
+        "@smui/top-app-bar": "^6.1.4",
+        "@smui/touch-target": "^6.1.4"
+      }
+    },
+    "node_modules/svelte-material-ui/node_modules/@material/chips": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/chips/-/chips-13.0.0.tgz",
+      "integrity": "sha512-Ov4runDbrROUpMqKyCi3lpknfrLzGwtV+/rfYIgTYUkEVpCHXHddxXxcjP4zqh3QLXnE6ma92PLGcxCb/zzogQ==",
+      "dependencies": {
+        "@material/animation": "^13.0.0",
+        "@material/base": "^13.0.0",
+        "@material/checkbox": "^13.0.0",
+        "@material/density": "^13.0.0",
+        "@material/dom": "^13.0.0",
+        "@material/elevation": "^13.0.0",
+        "@material/feature-targeting": "^13.0.0",
+        "@material/ripple": "^13.0.0",
+        "@material/rtl": "^13.0.0",
+        "@material/shape": "^13.0.0",
+        "@material/theme": "^13.0.0",
+        "@material/tokens": "^13.0.0",
+        "@material/touch-target": "^13.0.0",
+        "@material/typography": "^13.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/svelte-material-ui/node_modules/@material/form-field": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmmirror.com/@material/form-field/-/form-field-13.0.0.tgz",
+      "integrity": "sha512-cXs5uYA89KgrXrU1UYkl52JizeIK3Mx9LjBw4ZYiyQJzFaBTPYsYWGSJMad1HZhWlRiigGTyN1M9ePIxtBpi0Q==",
+      "dependencies": {
+        "@material/base": "^13.0.0",
+        "@material/feature-targeting": "^13.0.0",
+        "@material/ripple": "^13.0.0",
+        "@material/rtl": "^13.0.0",
+        "@material/theme": "^13.0.0",
+        "@material/typography": "^13.0.0",
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/svelte-material-ui/node_modules/@smui/chips": {
+      "version": "6.1.4",
+      "resolved": "https://registry.npmmirror.com/@smui/chips/-/chips-6.1.4.tgz",
+      "integrity": "sha512-zNYQeYkaeqatT8K4DI0J1sWnNAUpUMyGIGijBEW0QZkQFf9+v4eGFemulE/feY3MrYRgGDCFydgziK6G4+ezNg==",
+      "dependencies": {
+        "@material/chips": "^13.0.0",
+        "@material/dom": "^13.0.0",
+        "@material/rtl": "^13.0.0",
+        "@smui/common": "^6.1.4",
+        "@smui/ripple": "^6.1.4",
+        "svelte2tsx": "^0.5.12"
+      }
+    },
+    "node_modules/svelte-material-ui/node_modules/@smui/form-field": {
+      "version": "6.1.4",
+      "resolved": "https://registry.npmmirror.com/@smui/form-field/-/form-field-6.1.4.tgz",
+      "integrity": "sha512-MytvYxHO/+zTzReWGNZ4UXZ2jeDShyopHFfQUCfwPszHX8ckiYTx/Ld+wFBs6GSq9bGJw49gHnYkkZUfVIbm3A==",
+      "dependencies": {
+        "@material/feature-targeting": "^13.0.0",
+        "@material/form-field": "^13.0.0",
+        "@material/rtl": "^13.0.0",
+        "@smui/common": "^6.1.4",
+        "svelte2tsx": "^0.5.12"
+      }
+    },
+    "node_modules/svelte-preprocess": {
+      "version": "4.10.7",
+      "resolved": "https://registry.npmmirror.com/svelte-preprocess/-/svelte-preprocess-4.10.7.tgz",
+      "integrity": "sha512-sNPBnqYD6FnmdBrUmBCaqS00RyCsCpj2BG58A1JBswNF7b0OKviwxqVrOL/CKyJrLSClrSeqQv5BXNg2RUbPOw==",
+      "dev": true,
+      "hasInstallScript": true,
+      "dependencies": {
+        "@types/pug": "^2.0.4",
+        "@types/sass": "^1.16.0",
+        "detect-indent": "^6.0.0",
+        "magic-string": "^0.25.7",
+        "sorcery": "^0.10.0",
+        "strip-indent": "^3.0.0"
+      },
+      "engines": {
+        "node": ">= 9.11.2"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.10.2",
+        "coffeescript": "^2.5.1",
+        "less": "^3.11.3 || ^4.0.0",
+        "postcss": "^7 || ^8",
+        "postcss-load-config": "^2.1.0 || ^3.0.0 || ^4.0.0",
+        "pug": "^3.0.0",
+        "sass": "^1.26.8",
+        "stylus": "^0.55.0",
+        "sugarss": "^2.0.0",
+        "svelte": "^3.23.0",
+        "typescript": "^3.9.5 || ^4.0.0"
+      },
+      "peerDependenciesMeta": {
+        "@babel/core": {
+          "optional": true
+        },
+        "coffeescript": {
+          "optional": true
+        },
+        "less": {
+          "optional": true
+        },
+        "node-sass": {
+          "optional": true
+        },
+        "postcss": {
+          "optional": true
+        },
+        "postcss-load-config": {
+          "optional": true
+        },
+        "pug": {
+          "optional": true
+        },
+        "sass": {
+          "optional": true
+        },
+        "stylus": {
+          "optional": true
+        },
+        "sugarss": {
+          "optional": true
+        },
+        "typescript": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/svelte-preprocess/node_modules/magic-string": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz",
+      "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==",
+      "dev": true,
+      "dependencies": {
+        "sourcemap-codec": "^1.4.8"
+      }
+    },
+    "node_modules/svelte2tsx": {
+      "version": "0.5.23",
+      "resolved": "https://registry.npmmirror.com/svelte2tsx/-/svelte2tsx-0.5.23.tgz",
+      "integrity": "sha512-jYFnugTQRFmUpvLXPQrKzVYcW5ErT+0QCxg027Zx9BuvYefMZFuoBSTDYe7viPEFGrPPiLgT2m7f5n9khE7f7Q==",
+      "dependencies": {
+        "dedent-js": "^1.0.1",
+        "pascal-case": "^3.1.1"
+      },
+      "peerDependencies": {
+        "svelte": "^3.24",
+        "typescript": "^4.1.2"
+      }
+    },
+    "node_modules/systemjs": {
+      "version": "6.14.0",
+      "resolved": "https://registry.npmmirror.com/systemjs/-/systemjs-6.14.0.tgz",
+      "integrity": "sha512-OMf+kFCYG9fLQerUyw/QVIPfZ+lo579R+usrDzSrZAkvMl6B0tHtc4rUP7DFaPCr7Sy6p5DYD4V9OCF1Sp6+vA=="
+    },
+    "node_modules/terser": {
+      "version": "5.16.5",
+      "resolved": "https://registry.npmmirror.com/terser/-/terser-5.16.5.tgz",
+      "integrity": "sha512-qcwfg4+RZa3YvlFh0qjifnzBHjKGNbtDo9yivMqMFDy9Q6FSaQWSB/j1xKhsoUFJIqDOM3TsN6D5xbrMrFcHbg==",
+      "dependencies": {
+        "@jridgewell/source-map": "^0.3.2",
+        "acorn": "^8.5.0",
+        "commander": "^2.20.0",
+        "source-map-support": "~0.5.20"
+      },
+      "bin": {
+        "terser": "bin/terser"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/tinyld": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmmirror.com/tinyld/-/tinyld-1.3.1.tgz",
+      "integrity": "sha512-INB2is03ygze5dUeAp5wCYBUf/+FsXcElCmfewe1ujirCUTe4nGUNDN229Ay/C2W+f15qD7uhclstNHY+a6fgg==",
+      "bin": {
+        "tinyld": "bin/tinyld.js"
+      },
+      "engines": {
+        "node": ">= 12.10.0",
+        "npm": ">= 6.12.0",
+        "yarn": ">= 1.20.0"
+      }
+    },
+    "node_modules/to-regex-range": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz",
+      "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+      "devOptional": true,
+      "dependencies": {
+        "is-number": "^7.0.0"
+      },
+      "engines": {
+        "node": ">=8.0"
+      }
+    },
+    "node_modules/tosource": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/tosource/-/tosource-1.0.0.tgz",
+      "integrity": "sha512-N6g8eQ1eerw6Y1pBhdgkubWIiPFwXa2POSUrlL8jth5CyyEWNWzoGKRkO3CaO7Jx27hlJP54muB3btIAbx4MPg==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/tr46": {
+      "version": "0.0.3",
+      "resolved": "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz",
+      "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
+    },
+    "node_modules/tslib": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.5.0.tgz",
+      "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg=="
+    },
+    "node_modules/twemoji": {
+      "version": "14.0.2",
+      "resolved": "https://registry.npmmirror.com/twemoji/-/twemoji-14.0.2.tgz",
+      "integrity": "sha512-BzOoXIe1QVdmsUmZ54xbEH+8AgtOKUiG53zO5vVP2iUu6h5u9lN15NcuS6te4OY96qx0H7JK9vjjl9WQbkTRuA==",
+      "dependencies": {
+        "fs-extra": "^8.0.1",
+        "jsonfile": "^5.0.0",
+        "twemoji-parser": "14.0.0",
+        "universalify": "^0.1.2"
+      }
+    },
+    "node_modules/twemoji-parser": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmmirror.com/twemoji-parser/-/twemoji-parser-14.0.0.tgz",
+      "integrity": "sha512-9DUOTGLOWs0pFWnh1p6NF+C3CkQ96PWmEFwhOVmT3WbecRC+68AIqpsnJXygfkFcp4aXbOp8Dwbhh/HQgvoRxA=="
+    },
+    "node_modules/typescript": {
+      "version": "4.9.5",
+      "resolved": "https://registry.npmmirror.com/typescript/-/typescript-4.9.5.tgz",
+      "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==",
+      "bin": {
+        "tsc": "bin/tsc",
+        "tsserver": "bin/tsserver"
+      },
+      "engines": {
+        "node": ">=4.2.0"
+      }
+    },
+    "node_modules/universalify": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmmirror.com/universalify/-/universalify-0.1.2.tgz",
+      "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+      "engines": {
+        "node": ">= 4.0.0"
+      }
+    },
+    "node_modules/uplot": {
+      "version": "1.6.24",
+      "resolved": "https://registry.npmmirror.com/uplot/-/uplot-1.6.24.tgz",
+      "integrity": "sha512-WpH2BsrFrqxkMu+4XBvc0eCDsRBhzoq9crttYeSI0bfxpzR5YoSVzZXOKFVWcVC7sp/aDXrdDPbDZGCtck2PVg=="
+    },
+    "node_modules/util-deprecate": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz",
+      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+    },
+    "node_modules/vite": {
+      "version": "3.2.5",
+      "resolved": "https://registry.npmmirror.com/vite/-/vite-3.2.5.tgz",
+      "integrity": "sha512-4mVEpXpSOgrssFZAOmGIr85wPHKvaDAcXqxVxVRZhljkJOMZi1ibLibzjLHzJvcok8BMguLc7g1W6W/GqZbLdQ==",
+      "dependencies": {
+        "esbuild": "^0.15.9",
+        "postcss": "^8.4.18",
+        "resolve": "^1.22.1",
+        "rollup": "^2.79.1"
+      },
+      "bin": {
+        "vite": "bin/vite.js"
+      },
+      "engines": {
+        "node": "^14.18.0 || >=16.0.0"
+      },
+      "optionalDependencies": {
+        "fsevents": "~2.3.2"
+      },
+      "peerDependencies": {
+        "@types/node": ">= 14",
+        "less": "*",
+        "sass": "*",
+        "stylus": "*",
+        "sugarss": "*",
+        "terser": "^5.4.0"
+      },
+      "peerDependenciesMeta": {
+        "@types/node": {
+          "optional": true
+        },
+        "less": {
+          "optional": true
+        },
+        "sass": {
+          "optional": true
+        },
+        "stylus": {
+          "optional": true
+        },
+        "sugarss": {
+          "optional": true
+        },
+        "terser": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/vitefu": {
+      "version": "0.2.4",
+      "resolved": "https://registry.npmmirror.com/vitefu/-/vitefu-0.2.4.tgz",
+      "integrity": "sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==",
+      "dev": true,
+      "peerDependencies": {
+        "vite": "^3.0.0 || ^4.0.0"
+      },
+      "peerDependenciesMeta": {
+        "vite": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/webidl-conversions": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+      "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
+    },
+    "node_modules/whatwg-url": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz",
+      "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+      "dependencies": {
+        "tr46": "~0.0.3",
+        "webidl-conversions": "^3.0.0"
+      }
+    },
+    "node_modules/wrappy": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz",
+      "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+      "dev": true
+    }
+  }
+}
diff --git a/nixpkgs/pkgs/applications/networking/giara/default.nix b/nixpkgs/pkgs/applications/networking/giara/default.nix
new file mode 100644
index 000000000000..7335a6092024
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/giara/default.nix
@@ -0,0 +1,77 @@
+{ lib
+, fetchFromGitLab
+, fetchpatch
+, meson
+, gobject-introspection
+, pkg-config
+, ninja
+, python3
+, wrapGAppsHook4
+, gtk4
+, gdk-pixbuf
+, webkitgtk
+, gtksourceview5
+, glib-networking
+, libadwaita
+, appstream
+, blueprint-compiler
+}:
+python3.pkgs.buildPythonApplication rec {
+  pname = "giara";
+  version = "1.1.0";
+
+  format = "other";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.gnome.org";
+    owner = "World";
+    repo = pname;
+    rev = version;
+    hash = "sha256-FTy0ElcoTGXG9eV85pUrF35qKDKOfYIovPtjLfTJVOg=";
+  };
+
+  nativeBuildInputs = [
+    appstream
+    meson
+    gobject-introspection
+    pkg-config
+    ninja
+    wrapGAppsHook4
+    blueprint-compiler
+  ];
+
+  buildInputs = [
+    gtk4
+    gdk-pixbuf
+    webkitgtk
+    gtksourceview5
+    glib-networking
+    libadwaita
+  ];
+
+  pythonPath = with python3.pkgs; [
+    pygobject3
+    pycairo
+    python-dateutil
+    praw
+    pillow
+    mistune
+    beautifulsoup4
+  ];
+
+  postPatch = ''
+    substituteInPlace meson_post_install.py \
+      --replace "gtk-update-icon-cache" "gtk4-update-icon-cache"
+    # blueprint-compiler expects "profile" to be a string.
+    substituteInPlace data/ui/headerbar.blp \
+      --replace "item { custom: profile; }" 'item { custom: "profile"; }'
+  '';
+
+  meta = with lib; {
+    description = "A Reddit app, built with Python, GTK and Handy; Created with mobile Linux in mind";
+    maintainers = with maintainers; [ dasj19 ];
+    homepage = "https://gitlab.gnome.org/World/giara";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/gmailctl/default.nix b/nixpkgs/pkgs/applications/networking/gmailctl/default.nix
new file mode 100644
index 000000000000..be8173da16d9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/gmailctl/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "gmailctl";
+  version = "0.10.6";
+
+  src = fetchFromGitHub {
+    owner = "mbrt";
+    repo = "gmailctl";
+    rev = "v${version}";
+    sha256 = "sha256-OpRkBHNWRrBhh6nGrV7dZT01xsSlbANCk+g7b8SidG0=";
+  };
+
+  vendorHash = "sha256-+r0WHrKARcxW1hUY1HwAXk0X6ZQrbgBj9+GjIJV5DS0=";
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  postInstall = ''
+    installShellCompletion --cmd gmailctl \
+      --bash <($out/bin/gmailctl completion bash) \
+      --fish <($out/bin/gmailctl completion fish) \
+      --zsh <($out/bin/gmailctl completion zsh)
+  '';
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Declarative configuration for Gmail filters";
+    homepage = "https://github.com/mbrt/gmailctl";
+    license = licenses.mit;
+    maintainers = with maintainers; [ doronbehar SuperSandro2000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/gnmic/default.nix b/nixpkgs/pkgs/applications/networking/gnmic/default.nix
new file mode 100644
index 000000000000..43884541cdd1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/gnmic/default.nix
@@ -0,0 +1,45 @@
+{ stdenv
+, lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, buildPackages
+}:
+
+buildGoModule rec {
+  pname = "gnmic";
+  version = "0.31.7";
+
+  src = fetchFromGitHub {
+    owner = "openconfig";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-bX8oZk0psPqoXFU8b2JQmfFaPz18yiuSVXDmhoOnpFg=";
+  };
+
+  vendorHash = "sha256-hIG3kG2e9Y2hnHJ+96cPLgnlp5ParsLgWQY0HZTDggY=";
+
+  ldflags = [
+    "-s" "-w"
+    "-X" "github.com/openconfig/gnmic/app.version=${version}"
+    "-X" "github.com/openconfig/gnmic/app.commit=${src.rev}"
+    "-X" "github.com/openconfig/gnmic/app.date=1970-01-01T00:00:00Z"
+  ];
+  subPackages = [ "." ];
+
+  nativeBuildInputs = [ installShellFiles ];
+  postInstall = let emulator = stdenv.hostPlatform.emulator buildPackages; in ''
+    installShellCompletion --cmd gnmic \
+      --bash <(${emulator} $out/bin/gnmic completion bash) \
+      --fish <(${emulator} $out/bin/gnmic completion fish) \
+      --zsh  <(${emulator} $out/bin/gnmic completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "gNMI CLI client and collector";
+    homepage = "https://gnmic.openconfig.net/";
+    changelog = "https://github.com/openconfig/gnmic/releases/tag/${src.rev}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ vincentbernat ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/gnome-network-displays/default.nix b/nixpkgs/pkgs/applications/networking/gnome-network-displays/default.nix
new file mode 100644
index 000000000000..f2f26a85f61f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/gnome-network-displays/default.nix
@@ -0,0 +1,80 @@
+{ lib, stdenv
+, fetchurl
+, fetchpatch
+# native
+, meson
+, ninja
+, pkg-config
+, gettext
+, desktop-file-utils
+, appstream-glib
+, wrapGAppsHook
+, python3
+# Not native
+, gst_all_1
+, gsettings-desktop-schemas
+, gtk3
+, glib
+, networkmanager
+, libpulseaudio
+, pipewire
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-network-displays";
+  version = "0.90.5";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "sha256-2SBVQK4fJeK8Y2UrrL0g5vQIerDdGE1nhFc6ke4oIpI=";
+  };
+
+  patches = [
+    # Undeclared dependency on gio-unix-2.0, see:
+    # https://github.com/NixOS/nixpkgs/issues/36468 and
+    # https://gitlab.gnome.org/GNOME/gnome-network-displays/-/merge_requests/147
+    (fetchpatch {
+      url = "https://gitlab.gnome.org/GNOME/gnome-network-displays/-/commit/ef3f3ff565acd8238da46de604a1e750d4f02f07.diff";
+      sha256 = "1ljiwgqia6am4lansg70qnwkch9mp1fr6bga98s5fwyiaw6b6f4p";
+    })
+  ];
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    gettext
+    desktop-file-utils
+    appstream-glib
+    wrapGAppsHook
+    python3
+  ];
+
+  buildInputs = [
+    gtk3
+    glib
+    gsettings-desktop-schemas
+    gst_all_1.gstreamer
+    gst_all_1.gst-plugins-base
+    gst_all_1.gst-plugins-good
+    gst_all_1.gst-plugins-bad
+    gst_all_1.gst-plugins-ugly
+    gst_all_1.gst-rtsp-server
+    gst_all_1.gst-vaapi
+    pipewire
+    networkmanager
+    libpulseaudio
+  ];
+
+  preConfigure = ''
+    patchShebangs ./build-aux/meson/postinstall.py
+  '';
+
+  meta = with lib; {
+    homepage = "https://gitlab.gnome.org/GNOME/gnome-network-displays";
+    description = "Miracast implementation for GNOME";
+    maintainers = with maintainers; [ doronbehar ];
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/gns3/default.nix b/nixpkgs/pkgs/applications/networking/gns3/default.nix
new file mode 100644
index 000000000000..43aa6e7343a7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/gns3/default.nix
@@ -0,0 +1,36 @@
+{ callPackage
+, libsForQt5
+}:
+
+let
+  mkGui = args: callPackage (import ./gui.nix (args)) {
+    inherit (libsForQt5) wrapQtAppsHook;
+  };
+
+  mkServer = args: callPackage (import ./server.nix (args)) { };
+in {
+
+  guiStable = mkGui {
+    channel = "stable";
+    version = "2.2.42";
+    hash = "sha256-FW8Nuha+NrYVhR/66AiBpcCLHRhiLTW8KdHFyWSao84=";
+  };
+
+  guiPreview = mkGui {
+    channel = "stable";
+    version = "2.2.42";
+    hash = "sha256-FW8Nuha+NrYVhR/66AiBpcCLHRhiLTW8KdHFyWSao84=";
+  };
+
+  serverStable = mkServer {
+    channel = "stable";
+    version = "2.2.42";
+    hash = "sha256-YM07krEay2W+/6mKLAg+B7VEnAyDlkD+0+cSO1FAJzA=";
+  };
+
+  serverPreview = mkServer {
+    channel = "stable";
+    version = "2.2.42";
+    hash = "sha256-YM07krEay2W+/6mKLAg+B7VEnAyDlkD+0+cSO1FAJzA=";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/gns3/gui.nix b/nixpkgs/pkgs/applications/networking/gns3/gui.nix
new file mode 100644
index 000000000000..13764d506697
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/gns3/gui.nix
@@ -0,0 +1,65 @@
+{ channel
+, version
+, hash
+}:
+
+{ lib
+, python3
+, fetchFromGitHub
+, wrapQtAppsHook
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "gns3-gui";
+  inherit version;
+
+  src = fetchFromGitHub {
+    inherit hash;
+    owner = "GNS3";
+    repo = pname;
+    rev = "v${version}";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    pythonRelaxDepsHook
+    wrapQtAppsHook
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    distro
+    jsonschema
+    psutil
+    sentry-sdk
+    setuptools
+    sip_4 (pyqt5.override { withWebSockets = true; })
+    truststore
+  ];
+
+  pythonRelaxDeps = [
+    "jsonschema"
+    "sentry-sdk"
+  ];
+
+  doCheck = false; # Failing
+
+  dontWrapQtApps = true;
+
+  preFixup = ''
+    wrapQtApp "$out/bin/gns3"
+  '';
+
+  meta = with lib; {
+    description = "Graphical Network Simulator 3 GUI (${channel} release)";
+    longDescription = ''
+      Graphical user interface for controlling the GNS3 network simulator. This
+      requires access to a local or remote GNS3 server (it's recommended to
+      download the official GNS3 VM).
+    '';
+    homepage = "https://www.gns3.com/";
+    changelog = "https://github.com/GNS3/gns3-gui/releases/tag/v${version}";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ anthonyroussel ];
+    mainProgram = "gns3";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/gns3/server.nix b/nixpkgs/pkgs/applications/networking/gns3/server.nix
new file mode 100644
index 000000000000..200153b15e03
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/gns3/server.nix
@@ -0,0 +1,76 @@
+{ channel
+, version
+, hash
+}:
+
+{ lib
+, python3
+, fetchFromGitHub
+, pkgsStatic
+}:
+
+python3.pkgs.buildPythonApplication {
+  pname = "gns3-server";
+  inherit version;
+
+  src = fetchFromGitHub {
+    inherit hash;
+    owner = "GNS3";
+    repo = "gns3-server";
+    rev = "refs/tags/v${version}";
+  };
+
+  # GNS3 2.3.26 requires a static BusyBox for the Docker integration
+  prePatch = ''
+    cp ${pkgsStatic.busybox}/bin/busybox gns3server/compute/docker/resources/bin/busybox
+  '';
+
+  nativeBuildInputs = with python3.pkgs; [
+    pythonRelaxDepsHook
+  ];
+
+  pythonRelaxDeps = [
+    "jsonschema"
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    aiofiles
+    aiohttp
+    aiohttp-cors
+    async-generator
+    distro
+    importlib-resources
+    jinja2
+    jsonschema
+    multidict
+    prompt-toolkit
+    psutil
+    py-cpuinfo
+    sentry-sdk
+    setuptools
+    truststore
+    yarl
+    zipstream
+  ];
+
+  # Requires network access
+  doCheck = false;
+
+  postInstall = ''
+    rm $out/bin/gns3loopback # For Windows only
+  '';
+
+  meta = with lib; {
+    description = "Graphical Network Simulator 3 server (${channel} release)";
+    longDescription = ''
+      The GNS3 server manages emulators such as Dynamips, VirtualBox or
+      Qemu/KVM. Clients like the GNS3 GUI control the server using a HTTP REST
+      API.
+    '';
+    homepage = "https://www.gns3.com/";
+    changelog = "https://github.com/GNS3/gns3-server/releases/tag/v${version}";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ anthonyroussel ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/go-graft/default.nix b/nixpkgs/pkgs/applications/networking/go-graft/default.nix
new file mode 100644
index 000000000000..ec9ca385e1ef
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/go-graft/default.nix
@@ -0,0 +1,28 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "go-graft";
+  version = "0.2.18";
+
+  src = fetchFromGitHub {
+    owner = "mzz2017";
+    repo = "gg";
+    rev = "v${version}";
+    sha256 = "sha256-07fP3dVFs4MZrFOH/8/4e3LHjFGZd7pNu6J3LBOWAd8=";
+  };
+
+  CGO_ENABLED = 0;
+
+  ldflags = [ "-X github.com/mzz2017/gg/cmd.Version=${version}" "-s" "-w" "-buildid=" ];
+  vendorHash = "sha256-fnM4ycqDyruCdCA1Cr4Ki48xeQiTG4l5dLVuAafEm14=";
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "A command-line tool for one-click proxy in your research and development without installing v2ray or anything else";
+    homepage = "https://github.com/mzz2017/gg";
+    license = licenses.agpl3Plus;
+    maintainers = with maintainers; [ xyenon ];
+    mainProgram = "gg";
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/google-drive-ocamlfuse/default.nix b/nixpkgs/pkgs/applications/networking/google-drive-ocamlfuse/default.nix
new file mode 100644
index 000000000000..2367f847d107
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/google-drive-ocamlfuse/default.nix
@@ -0,0 +1,31 @@
+{ lib, buildDunePackage, fetchFromGitHub
+, extlib, ocamlfuse, gapi-ocaml, ocaml_sqlite3
+, tiny_httpd
+, ounit2
+}:
+
+buildDunePackage rec {
+  pname = "google-drive-ocamlfuse";
+  version = "0.7.30";
+  duneVersion = "3";
+
+  src = fetchFromGitHub {
+    owner = "astrada";
+    repo = "google-drive-ocamlfuse";
+    rev = "v${version}";
+    sha256 = "sha256-DWG0nBiqeVHaYQfGzU43gGwL4m8X61x5/RT5jD4AwYA=";
+  };
+
+  doCheck = true;
+  checkInputs = [ ounit2 ];
+
+  buildInputs = [ extlib ocamlfuse gapi-ocaml ocaml_sqlite3 tiny_httpd ];
+
+  meta = {
+    inherit (src.meta) homepage;
+    description = "A FUSE-based file system backed by Google Drive, written in OCaml";
+    license = lib.licenses.mit;
+    platforms = lib.platforms.linux;
+    maintainers = with lib.maintainers; [ obadz ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/gopher/geomyidae/default.nix b/nixpkgs/pkgs/applications/networking/gopher/geomyidae/default.nix
new file mode 100644
index 000000000000..bd57b968140b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/gopher/geomyidae/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchurl, libressl,
+}:
+
+stdenv.mkDerivation rec {
+  pname = "geomyidae";
+  version = "0.69";
+
+  src = fetchurl {
+    url = "gopher://bitreich.org/9/scm/geomyidae/tag/geomyidae-v${version}.tar.gz";
+    hash = "sha256-C0mAjyS2wZVipXP/sKxa/d7gDyYQ/MvmwqQ/QMzmcRE=";
+  };
+
+  buildInputs = [ libressl ];
+
+  makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  meta = with lib; {
+    description = "A gopher daemon for Linux/BSD";
+    homepage = "gopher://bitreich.org/1/scm/geomyidae";
+    license = licenses.mit;
+    maintainers = [ maintainers.athas ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/gopher/gopher/default.nix b/nixpkgs/pkgs/applications/networking/gopher/gopher/default.nix
new file mode 100644
index 000000000000..09b8f8aafcb3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/gopher/gopher/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "gopher";
+  version = "3.0.17";
+
+  src = fetchFromGitHub {
+    owner = "jgoerzen";
+    repo = pname;
+    rev = "release/${version}";
+    sha256 = "1j6xh5l8v231d4mwl9gj1c34dc0jmazz6zg1qqfxmqr9y609jq3h";
+  };
+
+  buildInputs = [ ncurses ];
+
+  preConfigure = "export LIBS=-lncurses";
+
+  meta = with lib; {
+    homepage = "http://gopher.quux.org:70/devel/gopher";
+    description = "A ncurses gopher client";
+    platforms = platforms.linux; # clang doesn't like local regex.h
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ sternenseemann ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/gopher/phetch/default.nix b/nixpkgs/pkgs/applications/networking/gopher/phetch/default.nix
new file mode 100644
index 000000000000..8cdd3dc06325
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/gopher/phetch/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, installShellFiles
+, rustPlatform
+, pkg-config
+, openssl
+, scdoc
+, Security
+, which
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "phetch";
+  version = "1.2.0";
+
+  outputs = [ "out" "man" ];
+
+  src = fetchFromGitHub {
+    owner = "xvxx";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-J+ka7/B37WzVPPE2Krkd/TIiVwuKfI2QYWmT0JHgBGQ=";
+  };
+
+  cargoSha256 = "sha256-y3Y5PnZ51Zc3LmVTijUGnb0KaGm28sWOSYxjuM3A1Zk=";
+
+  nativeBuildInputs = [ installShellFiles pkg-config scdoc which ];
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [ Security ];
+
+  postInstall = ''
+    make manual
+    installManPage doc/phetch.1
+  '';
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "A quick lil gopher client for your terminal, written in rust";
+    longDescription = ''
+      phetch is a terminal client designed to help you quickly navigate the gophersphere.
+      - <1MB executable for Linux, Mac, and NetBSD
+      - Technicolor design (based on GILD)
+      - No-nonsense keyboard navigation
+      - Supports Gopher searches, text and menu pages, and downloads
+      - Save your favorite Gopher sites with bookmarks
+      - Opt-in history tracking
+      - Secure Gopher support (TLS)
+      - Tor support
+    '';
+    changelog = "https://github.com/xvxx/phetch/releases/tag/v${version}";
+    homepage = "https://github.com/xvxx/phetch";
+    license = licenses.mit;
+    maintainers = with maintainers; [ felixalbrigtsen ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/gopher/sacc/default.nix b/nixpkgs/pkgs/applications/networking/gopher/sacc/default.nix
new file mode 100644
index 000000000000..1afcbe4d2a86
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/gopher/sacc/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchurl, ncurses, libressl
+, patches ? [] # allow users to easily override config.def.h
+}:
+
+stdenv.mkDerivation rec {
+  pname = "sacc";
+  version = "1.06";
+
+  src = fetchurl {
+    url = "ftp://bitreich.org/releases/sacc/sacc-${version}.tar.gz";
+    sha512 = "7a895e432e1d28b7d9b2bb2a5326ca32350876a2c80d39dc6c19e75347d72a4847f1aa4ff11f07e8a9adea14ea71b84d70890dcc170ff6ce0b779e1d6586b4fa";
+  };
+
+  inherit patches;
+
+  buildInputs = [ ncurses libressl ];
+
+  CFLAGS = lib.optionals stdenv.isDarwin [
+    "-D_DARWIN_C_SOURCE"
+  ];
+
+  postPatch = ''
+    substituteInPlace config.mk \
+      --replace curses ncurses \
+      --replace "/usr/local" "$out"
+    '';
+
+  meta = with lib; {
+    description = "A terminal gopher client";
+    homepage = "gopher://bitreich.org/1/scm/sacc";
+    license = licenses.isc;
+    maintainers = [ maintainers.sternenseemann ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/gossa/default.nix b/nixpkgs/pkgs/applications/networking/gossa/default.nix
new file mode 100644
index 000000000000..17d9f828b642
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/gossa/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, buildGoModule
+}:
+
+buildGoModule rec {
+  pname = "gossa";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "pldubouilh";
+    repo = "gossa";
+    rev = "v${version}";
+    fetchSubmodules = true;
+    hash = "sha256-vonhVxXbYI/5Gl9ZwI8+a3YXSjoqLVic1twykiy+e34=";
+  };
+
+  vendorHash = null;
+
+  ldflags = [ "-s" "-w" ];
+
+  # Tests require a socket connection to be created.
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://github.com/pldubouilh/gossa";
+    description = "A fast and simple multimedia fileserver";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dsymbol ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/headlines/default.nix b/nixpkgs/pkgs/applications/networking/headlines/default.nix
new file mode 100644
index 000000000000..ed26c6f60de2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/headlines/default.nix
@@ -0,0 +1,72 @@
+{ lib
+, stdenv
+, cmake
+, pkg-config
+, libmicrohttpd
+, curl
+, openssl
+, jsoncpp
+, libxml2
+, gst_all_1
+, boost
+, websocketpp
+, libadwaita
+, gtkmm4
+, libsecret
+, fetchFromGitLab
+, makeWrapper
+, xdg-utils
+, youtube-dl
+, ffmpeg
+}:
+
+stdenv.mkDerivation rec {
+  pname = "headlines";
+  version = "0.7.2";
+
+  src = fetchFromGitLab {
+    owner = "caveman250";
+    repo = "Headlines";
+    rev = version;
+    sha256 = "sha256-wamow0UozX5ecKbXWOgsWCerInL4J0gK0+Muf+eoO9k=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    makeWrapper
+  ];
+
+  buildInputs = [
+    libmicrohttpd
+    curl
+    openssl
+    jsoncpp
+    libxml2
+    boost
+    websocketpp
+    libadwaita
+    gtkmm4
+    libsecret
+  ] ++ (with gst_all_1; [
+    gstreamer
+    gst-libav
+    gst-plugins-base
+    (gst-plugins-good.override { gtkSupport = true; })
+    gst-plugins-bad
+  ]);
+
+  postFixup = ''
+    wrapProgram "$out/bin/headlines" \
+      --prefix PATH : "${lib.makeBinPath [ xdg-utils youtube-dl ffmpeg ]}" \
+      --prefix GST_PLUGIN_SYSTEM_PATH_1_0 : "$GST_PLUGIN_SYSTEM_PATH_1_0"
+  '';
+
+  meta = with lib; {
+    description = "GTK4 / Libadwaita Reddit client written in C++";
+    homepage = "https://gitlab.com/caveman250/Headlines";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ chuangzhu ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/hpmyroom/default.nix b/nixpkgs/pkgs/applications/networking/hpmyroom/default.nix
new file mode 100644
index 000000000000..1897a283f70d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/hpmyroom/default.nix
@@ -0,0 +1,59 @@
+{ mkDerivation, stdenv, lib, fetchurl, rpmextract, autoPatchelfHook , libuuid
+, libXtst, libXfixes, glib, gst_all_1, alsa-lib, freetype, fontconfig , libXext
+, libGL, libpng, libXScrnSaver, libxcb, xorg, libpulseaudio, libdrm
+}:
+mkDerivation rec {
+  pname = "hpmyroom";
+  version = "12.9.0.0601";
+
+  src = fetchurl {
+    url = "https://www.myroom.hpe.com/downloadfiles/${pname}-${version}.x86_64.rpm";
+    sha256 = "sha256-1BC4EjCCLAuCIOV+jJn3pfKKW7UJI5tfC+wg0FUgB64=";
+  };
+
+  nativeBuildInputs = [
+    rpmextract autoPatchelfHook
+  ];
+
+  buildInputs = [
+    libuuid libXtst libXScrnSaver libXfixes alsa-lib freetype fontconfig libXext
+    libGL libpng libxcb libpulseaudio libdrm
+    glib  # For libgobject
+    stdenv.cc.cc  # For libstdc++
+    xorg.libX11
+  ] ++ (with gst_all_1; [ gstreamer gst-plugins-base ]);
+
+  unpackPhase = ''
+    rpmextract $src
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mv usr $out
+
+    runHook postInstall
+  '';
+
+  qtWrapperArgs = [
+    "--prefix QT_XKB_CONFIG_ROOT : '${xorg.xkeyboardconfig}/share/X11/xkb'"
+  ];
+
+  postFixup = ''
+    substituteInPlace $out/share/applications/HP-myroom.desktop \
+      --replace /usr/bin/hpmyroom hpmyroom \
+      --replace Icon=/usr/share/hpmyroom/Resources/MyRoom.png Icon=$out/share/hpmyroom/Resources/MyRoom.png
+
+    ln -s ${libpng}/lib/libpng.so $out/lib/hpmyroom/libpng15.so.15
+  '';
+
+  meta = {
+    description = "Client for HPE's MyRoom web conferencing solution";
+    maintainers = with lib.maintainers; [ johnazoidberg ];
+    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+    license = lib.licenses.unfree;
+    homepage = "https://myroom.hpe.com";
+    # TODO: A Darwin binary is available upstream
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/hydroxide/default.nix b/nixpkgs/pkgs/applications/networking/hydroxide/default.nix
new file mode 100644
index 000000000000..994e17c750c8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/hydroxide/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildGoModule, fetchFromGitHub, fetchpatch }:
+
+buildGoModule rec {
+  pname = "hydroxide";
+  version = "0.2.27";
+
+  src = fetchFromGitHub {
+    owner = "emersion";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-APRa+wZhls7O2q3zVPEB9Kegd1YspcfC8PSJy6KFlR8=";
+  };
+
+  vendorHash = "sha256-OLsJc/AMtD03KA8SN5rsnaq57/cB7bMB/f7FfEjErEU=";
+
+  doCheck = false;
+
+  subPackages = [ "cmd/hydroxide" ];
+
+  meta = with lib; {
+    description = "A third-party, open-source ProtonMail bridge";
+    homepage = "https://github.com/emersion/hydroxide";
+    license = licenses.mit;
+    maintainers = with maintainers; [ Br1ght0ne ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/hyprspace/default.nix b/nixpkgs/pkgs/applications/networking/hyprspace/default.nix
new file mode 100644
index 000000000000..8fc678683658
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/hyprspace/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, buildGoModule, fetchFromGitHub, iproute2mac }:
+
+buildGoModule rec {
+  pname = "hyprspace";
+  version = "0.2.2";
+
+  propagatedBuildInputs = lib.optional stdenv.isDarwin iproute2mac;
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-UlIQCy4moW58tQ1dqxrPsU5LN1Bs/Jy5X+2CEmXdYIk=";
+  };
+
+  vendorHash = "sha256-EV59sXmjunWs+MC++CwyuBlbWzWZI1YXDLEsOaESgRU=";
+
+  meta = with lib; {
+    description = "A Lightweight VPN Built on top of Libp2p for Truly Distributed Networks.";
+    homepage = "https://github.com/hyprspace/hyprspace";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ yusdacra ];
+    platforms = platforms.linux ++ platforms.darwin;
+    broken = true; # build fails with go > 1.17
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/icemon/default.nix b/nixpkgs/pkgs/applications/networking/icemon/default.nix
new file mode 100644
index 000000000000..b757445eb087
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/icemon/default.nix
@@ -0,0 +1,24 @@
+{ lib, fetchFromGitHub, mkDerivation, qtbase, cmake, extra-cmake-modules, icecream, libcap_ng, lzo, zstd, libarchive, wrapQtAppsHook }:
+
+mkDerivation rec {
+  pname = "icemon";
+  version = "3.3";
+
+  src = fetchFromGitHub {
+    owner = "icecc";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "09jnipr67dhawbxfn69yh7mmjrkylgiqmd0gmc2limd3z15d7pgc";
+  };
+
+  nativeBuildInputs = [ cmake extra-cmake-modules wrapQtAppsHook ];
+  buildInputs = [ icecream qtbase libcap_ng lzo zstd libarchive ];
+
+  meta = with lib; {
+    description = "Icecream GUI Monitor";
+    inherit (src.meta) homepage;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ emantor ];
+    platforms = with platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/ids/daq/default.nix b/nixpkgs/pkgs/applications/networking/ids/daq/default.nix
new file mode 100644
index 000000000000..dc40337bd723
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/ids/daq/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchurl, flex, bison, libpcap, libdnet, libnfnetlink, libnetfilter_queue}:
+
+stdenv.mkDerivation rec {
+  pname = "daq";
+  version = "2.2.2";
+
+  src = fetchurl {
+    name = "${pname}-${version}.tar.gz";
+    url = "https://snort.org/downloads/archive/snort/${pname}-${version}.tar.gz";
+    sha256 = "0yvzscy7vqj7s5rccza0f7p6awghfm3yaxihx1h57lqspg51in3w";
+  };
+
+  buildInputs = [ flex bison libpcap libdnet libnfnetlink libnetfilter_queue];
+
+  configureFlags = [
+    "--enable-nfq-module=yes"
+    "--with-dnet-includes=${libdnet}/includes"
+    "--with-dnet-libraries=${libdnet}/lib"
+  ];
+
+  meta = {
+    description = "Data AcQuisition library (DAQ), for packet I/O";
+    homepage = "https://www.snort.org";
+    maintainers = with lib.maintainers; [ aycanirican ];
+    license = lib.licenses.gpl2;
+    platforms = with lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/ids/snort/default.nix b/nixpkgs/pkgs/applications/networking/ids/snort/default.nix
new file mode 100644
index 000000000000..9a6dd217e5de
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/ids/snort/default.nix
@@ -0,0 +1,40 @@
+{lib, stdenv, pkg-config, luajit, openssl, fetchurl, libpcap, pcre, libdnet, daq, zlib, flex, bison, makeWrapper
+, libtirpc
+}:
+
+stdenv.mkDerivation rec {
+  version = "2.9.20";
+  pname = "snort";
+
+  src = fetchurl {
+    name = "${pname}-${version}.tar.gz";
+    url = "https://snort.org/downloads/archive/snort/${pname}-${version}.tar.gz";
+    sha256 = "sha256-KUAOE/U7GDHguLEOwSJKHLqm3BUzpTIqIN2Au4S0mBw=";
+  };
+
+  nativeBuildInputs = [ makeWrapper pkg-config ];
+  buildInputs = [ luajit openssl libpcap pcre libdnet daq zlib flex bison libtirpc ];
+
+  env.NIX_CFLAGS_COMPILE = toString [ "-I${libtirpc.dev}/include/tirpc" ];
+
+  enableParallelBuilding = true;
+
+  configureFlags = [
+    "--disable-static-daq"
+    "--enable-control-socket"
+    "--with-daq-includes=${daq}/includes"
+    "--with-daq-libraries=${daq}/lib"
+  ];
+
+  postInstall = ''
+    wrapProgram $out/bin/snort --add-flags "--daq-dir ${daq}/lib/daq --dynamic-preprocessor-lib-dir $out/lib/snort_dynamicpreprocessor/ --dynamic-engine-lib-dir $out/lib/snort_dynamicengine"
+  '';
+
+  meta = {
+    description = "Network intrusion prevention and detection system (IDS/IPS)";
+    homepage = "https://www.snort.org";
+    maintainers = with lib.maintainers; [ aycanirican ];
+    license = lib.licenses.gpl2;
+    platforms = with lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/ids/suricata/bpf_stubs_workaround.patch b/nixpkgs/pkgs/applications/networking/ids/suricata/bpf_stubs_workaround.patch
new file mode 100644
index 000000000000..d4e8c95fea22
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/ids/suricata/bpf_stubs_workaround.patch
@@ -0,0 +1,19 @@
+*** suricata-5.0.0/ebpf/Makefile.in	2019-10-16 22:39:13.174649416 +0200
+--- suricata-5.0.0/ebpf/Makefile.in.fixed	2019-10-16 22:38:41.822201802 +0200
+***************
+*** 527,533 ****
+  @BUILD_EBPF_TRUE@$(BPF_TARGETS): %.bpf: %.c
+  #      From C-code to LLVM-IR format suffix .ll (clang -S -emit-llvm)
+  @BUILD_EBPF_TRUE@	${CLANG} -Wall $(BPF_CFLAGS) -O2 \
+! @BUILD_EBPF_TRUE@		-I/usr/include/$(build_cpu)-$(build_os)/ \
+  @BUILD_EBPF_TRUE@		-D__KERNEL__ -D__ASM_SYSREG_H \
+  @BUILD_EBPF_TRUE@		-target bpf -S -emit-llvm $< -o ${@:.bpf=.ll}
+  #      From LLVM-IR to BPF-bytecode in ELF-obj file
+--- 527,533 ----
+  @BUILD_EBPF_TRUE@$(BPF_TARGETS): %.bpf: %.c
+  #      From C-code to LLVM-IR format suffix .ll (clang -S -emit-llvm)
+  @BUILD_EBPF_TRUE@	${CLANG} -Wall $(BPF_CFLAGS) -O2 \
+! @BUILD_EBPF_TRUE@		-idirafter ../bpf_stubs_workaround \
+  @BUILD_EBPF_TRUE@		-D__KERNEL__ -D__ASM_SYSREG_H \
+  @BUILD_EBPF_TRUE@		-target bpf -S -emit-llvm $< -o ${@:.bpf=.ll}
+  #      From LLVM-IR to BPF-bytecode in ELF-obj file
diff --git a/nixpkgs/pkgs/applications/networking/ids/suricata/default.nix b/nixpkgs/pkgs/applications/networking/ids/suricata/default.nix
new file mode 100644
index 000000000000..9c0a5ea086f8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/ids/suricata/default.nix
@@ -0,0 +1,156 @@
+{ stdenv
+, lib
+, fetchurl
+, clang
+, llvm
+, pkg-config
+, makeWrapper
+, file
+, hyperscan
+, jansson
+, libbpf
+, libcap_ng
+, libelf
+, libevent
+, libmaxminddb
+, libnet
+, libnetfilter_log
+, libnetfilter_queue
+, libnfnetlink
+, libpcap
+, libyaml
+, luajit
+, lz4
+, nspr
+, pcre2
+, python
+, zlib
+, redisSupport ? true, redis, hiredis
+, rustSupport ? true, rustc, cargo
+}: let
+  libmagic = file;
+  hyperscanSupport = stdenv.system == "x86_64-linux" || stdenv.system == "i686-linux";
+in
+stdenv.mkDerivation rec {
+  pname = "suricata";
+  version = "7.0.0";
+
+  src = fetchurl {
+    url = "https://www.openinfosecfoundation.org/download/${pname}-${version}.tar.gz";
+    hash = "sha256-e80TExGDZkUUZdw/g4Wj9qrdCE/+RN0lfdqBBYY7t2k=";
+  };
+
+  nativeBuildInputs = [
+    clang
+    llvm
+    makeWrapper
+    pkg-config
+  ]
+  ++ lib.optionals rustSupport [ rustc cargo ]
+  ;
+
+  buildInputs = [
+    jansson
+    libbpf
+    libcap_ng
+    libelf
+    libevent
+    libmagic
+    libmaxminddb
+    libnet
+    libnetfilter_log
+    libnetfilter_queue
+    libnfnetlink
+    libpcap
+    libyaml
+    luajit
+    lz4
+    nspr
+    pcre2
+    python
+    zlib
+  ]
+  ++ lib.optional hyperscanSupport hyperscan
+  ++ lib.optionals redisSupport [ redis hiredis ]
+  ;
+
+  enableParallelBuilding = true;
+
+  patches = lib.optional stdenv.is64bit ./bpf_stubs_workaround.patch;
+
+  postPatch = ''
+    substituteInPlace ./configure \
+      --replace "/usr/bin/file" "${file}/bin/file"
+    substituteInPlace ./libhtp/configure \
+      --replace "/usr/bin/file" "${file}/bin/file"
+
+    mkdir -p bpf_stubs_workaround/gnu
+    touch bpf_stubs_workaround/gnu/stubs-32.h
+  '';
+
+  configureFlags = [
+    "--disable-gccmarch-native"
+    "--enable-af-packet"
+    "--enable-ebpf"
+    "--enable-ebpf-build"
+    "--enable-gccprotect"
+    "--enable-geoip"
+    "--enable-luajit"
+    "--enable-nflog"
+    "--enable-nfqueue"
+    "--enable-pie"
+    "--enable-python"
+    "--enable-unix-socket"
+    "--localstatedir=/var"
+    "--sysconfdir=/etc"
+    "--with-libnet-includes=${libnet}/include"
+    "--with-libnet-libraries=${libnet}/lib"
+  ]
+  ++ lib.optionals hyperscanSupport [
+    "--with-libhs-includes=${hyperscan.dev}/include/hs"
+    "--with-libhs-libraries=${hyperscan}/lib"
+  ]
+  ++ lib.optional redisSupport "--enable-hiredis"
+  ++ lib.optionals rustSupport [
+    "--enable-rust"
+    "--enable-rust-experimental"
+  ];
+
+  postConfigure = ''
+    # Avoid unintended clousure growth.
+    sed -i 's|${builtins.storeDir}/\(.\{8\}\)[^-]*-|${builtins.storeDir}/\1...-|g' ./src/build-info.h
+  '';
+
+  hardeningDisable = [ "stackprotector" ];
+
+  installFlags = [
+    "e_datadir=\${TMPDIR}"
+    "e_localstatedir=\${TMPDIR}"
+    "e_logdir=\${TMPDIR}"
+    "e_logcertsdir=\${TMPDIR}"
+    "e_logfilesdir=\${TMPDIR}"
+    "e_rundir=\${TMPDIR}"
+    "e_sysconfdir=\${out}/etc/suricata"
+    "e_sysconfrulesdir=\${out}/etc/suricata/rules"
+    "localstatedir=\${TMPDIR}"
+    "runstatedir=\${TMPDIR}"
+    "sysconfdir=\${out}/etc"
+  ];
+
+  installTargets = [ "install" "install-conf" ];
+
+  postInstall = ''
+    wrapProgram "$out/bin/suricatasc" \
+      --prefix PYTHONPATH : $PYTHONPATH:$(toPythonPath "$out")
+    substituteInPlace "$out/etc/suricata/suricata.yaml" \
+      --replace "/etc/suricata" "$out/etc/suricata"
+  '';
+
+  meta = with lib; {
+    description = "A free and open source, mature, fast and robust network threat detection engine";
+    homepage = "https://suricata.io";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ magenbluten ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/ids/zeek/avoid-broken-tests.patch b/nixpkgs/pkgs/applications/networking/ids/zeek/avoid-broken-tests.patch
new file mode 100644
index 000000000000..4784e6790fc3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/ids/zeek/avoid-broken-tests.patch
@@ -0,0 +1,16 @@
+diff --git a/auxil/spicy/spicy/hilti/toolchain/CMakeLists.txt b/auxil/spicy/spicy/hilti/toolchain/CMakeLists.txt
+index bafbabf1..0579f20a 100644
+--- a/auxil/spicy/spicy/hilti/toolchain/CMakeLists.txt
++++ b/auxil/spicy/spicy/hilti/toolchain/CMakeLists.txt
+@@ -188,11 +188,3 @@ install_headers(include hilti)
+ install_headers(${PROJECT_BINARY_DIR}/include/hilti hilti)
+ install(CODE "file(REMOVE \"\$ENV\{DESTDIR\}${CMAKE_INSTALL_FULL_INCLUDEDIR}/hilti/hilti\")"
+ )# Get rid of symlink.
+-
+-##### Tests
+-
+-add_executable(hilti-toolchain-tests tests/main.cc tests/id-base.cc tests/visitor.cc tests/util.cc)
+-hilti_link_executable_in_tree(hilti-toolchain-tests PRIVATE)
+-target_link_libraries(hilti-toolchain-tests PRIVATE doctest)
+-target_compile_options(hilti-toolchain-tests PRIVATE "-Wall")
+-add_test(NAME hilti-toolchain-tests COMMAND ${PROJECT_BINARY_DIR}/bin/hilti-toolchain-tests)
diff --git a/nixpkgs/pkgs/applications/networking/ids/zeek/broker/0001-Fix-include-path-in-exported-CMake-targets.patch b/nixpkgs/pkgs/applications/networking/ids/zeek/broker/0001-Fix-include-path-in-exported-CMake-targets.patch
new file mode 100644
index 000000000000..07b95960ef85
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/ids/zeek/broker/0001-Fix-include-path-in-exported-CMake-targets.patch
@@ -0,0 +1,75 @@
+From 889ee4dd9e778511e2fb850e6467f55a331cded9 Mon Sep 17 00:00:00 2001
+From: Tobias Mayer <tobim@fastmail.fm>
+Date: Sun, 13 Nov 2022 19:06:00 +0100
+Subject: [PATCH] Fix include path in exported CMake targets
+
+---
+ CMakeLists.txt | 23 ++++++++++++++---------
+ 1 file changed, 14 insertions(+), 9 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index e22b77aa..77a15314 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -209,7 +209,6 @@ if (CAF_ROOT)
+   else()
+     find_package(CAF REQUIRED COMPONENTS openssl test io core net)
+   endif()
+-  list(APPEND LINK_LIBS CAF::core CAF::io CAF::net)
+   set(BROKER_USE_EXTERNAL_CAF ON)
+ else ()
+   message(STATUS "Using bundled CAF")
+@@ -243,22 +242,18 @@ endif ()
+ 
+ # Make sure there are no old header versions on disk.
+ install(
+-  CODE "MESSAGE(STATUS \"Removing: ${CMAKE_INSTALL_PREFIX}/include/broker\")"
+-  CODE "file(REMOVE_RECURSE \"${CMAKE_INSTALL_PREFIX}/include/broker\")")
++  CODE "MESSAGE(STATUS \"Removing: ${CMAKE_FULL_INSTALL_INCLUDEDIR}/broker\")"
++  CODE "file(REMOVE_RECURSE \"${CMAKE_FULL_INSTALL_INCLUDEDIR}/broker\")")
+ 
+ # Install all headers except the files from broker/internal.
+ install(DIRECTORY include/broker
+-        DESTINATION include
++        DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
+         FILES_MATCHING PATTERN "*.hh"
+                        PATTERN "include/broker/internal" EXCLUDE)
+ 
+-include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/include)
+-
+-include_directories(${CMAKE_CURRENT_BINARY_DIR}/include)
+-
+ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/config.hh.in
+                ${CMAKE_CURRENT_BINARY_DIR}/include/broker/config.hh)
+-install(FILES ${CMAKE_CURRENT_BINARY_DIR}/include/broker/config.hh DESTINATION include/broker)
++install(FILES ${CMAKE_CURRENT_BINARY_DIR}/include/broker/config.hh DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/broker")
+ 
+ if (NOT BROKER_EXTERNAL_SQLITE_TARGET)
+   include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty)
+@@ -360,6 +355,11 @@ if (ENABLE_SHARED)
+                         OUTPUT_NAME broker)
+   target_link_libraries(broker PUBLIC ${LINK_LIBS})
+   target_link_libraries(broker PRIVATE CAF::core CAF::io CAF::net)
++  target_include_directories(
++    broker PUBLIC
++      $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
++      $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
++      $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
+   install(TARGETS broker
+           EXPORT BrokerTargets
+           DESTINATION ${CMAKE_INSTALL_LIBDIR})
+@@ -373,6 +373,11 @@ if (ENABLE_STATIC)
+   endif()
+   target_link_libraries(broker_static PUBLIC ${LINK_LIBS})
+   target_link_libraries(broker_static PRIVATE CAF::core CAF::io CAF::net)
++  target_include_directories(
++    broker_static PUBLIC
++      $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
++      $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
++      $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
+   install(TARGETS broker_static
+           EXPORT BrokerTargets
+           DESTINATION ${CMAKE_INSTALL_LIBDIR})
+-- 
+2.38.1
+
diff --git a/nixpkgs/pkgs/applications/networking/ids/zeek/broker/default.nix b/nixpkgs/pkgs/applications/networking/ids/zeek/broker/default.nix
new file mode 100644
index 000000000000..082607e4d023
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/ids/zeek/broker/default.nix
@@ -0,0 +1,88 @@
+{ stdenv
+, lib
+, callPackage
+, fetchFromGitHub
+, cmake
+, pkg-config
+, python3
+, caf
+, openssl
+}:
+let
+  inherit (stdenv.hostPlatform) isStatic;
+
+  src-cmake = fetchFromGitHub {
+    owner = "zeek";
+    repo = "cmake";
+    rev = "9f05362a5c33ed11dab37d2dedf74206d59d8f6d";
+    hash = "sha256-UfPPbwLJcI6+8EYLKRcBhxashEkCTJ2Gj1JOtFayot8=";
+  };
+  src-3rdparty = fetchFromGitHub {
+    owner = "zeek";
+    repo = "zeek-3rdparty";
+    rev = "eb87829547270eab13c223e6de58b25bc9a0282e";
+    hash = "sha256-AVaKcRjF5ZiSR8aPSLBzSTeWVwGWW/aSyQJcN0Yhza0=";
+  };
+  caf' = caf.overrideAttrs (old: {
+    version = "unstable-2022-11-17-zeek";
+    src = fetchFromGitHub {
+      owner = "zeek";
+      repo = "actor-framework";
+      rev = "dbb68b4573736d7aeb69268cc73aa766c998b3dd";
+      hash = "sha256-RV2mKF3B47h/hDgK/D1UJN/ll2G5rcPkHaLVY1/C/Pg=";
+    };
+    checkPhase = ''
+      runHook preCheck
+      libcaf_core/caf-core-test
+      libcaf_io/caf-io-test
+      libcaf_openssl/caf-openssl-test
+      libcaf_net/caf-net-test --not-suites='net.*'
+      runHook postCheck
+    '';
+  });
+in
+stdenv.mkDerivation {
+  pname = "zeek-broker";
+  version = "unstable-2023-02-01";
+  outputs = [ "out" "py" ];
+
+  strictDeps = true;
+
+  src = fetchFromGitHub {
+    owner = "zeek";
+    repo = "broker";
+    rev = "bc0205ce1fc06ddb91abb6744cb79c7eb846c23e";
+    hash = "sha256-bmyitJg3kRyIXm09IupLwZXbiGZfikkHcRcIexkS4/g=";
+  };
+  postUnpack = ''
+    rmdir $sourceRoot/cmake $sourceRoot/3rdparty
+    ln -s ${src-cmake} ''${sourceRoot}/cmake
+    ln -s ${src-3rdparty} ''${sourceRoot}/3rdparty
+
+    # Refuses to build the bindings unless this file is present, but never
+    # actually uses it.
+    touch $sourceRoot/bindings/python/3rdparty/pybind11/CMakeLists.txt
+  '';
+
+  patches = [
+    ./0001-Fix-include-path-in-exported-CMake-targets.patch
+  ];
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ openssl python3.pkgs.pybind11 ];
+  propagatedBuildInputs = [ caf' ];
+
+  cmakeFlags = [
+    "-DCAF_ROOT=${caf'}"
+    "-DENABLE_STATIC_ONLY:BOOL=${if isStatic then "ON" else "OFF"}"
+    "-DPY_MOD_INSTALL_DIR=${placeholder "py"}/${python3.sitePackages}/"
+  ];
+
+  meta = with lib; {
+    description = "Zeek's Messaging Library";
+    homepage = "https://github.com/zeek/broker";
+    license = licenses.bsd3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ tobim ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/ids/zeek/debug-runtime-undef-fortify-source.patch b/nixpkgs/pkgs/applications/networking/ids/zeek/debug-runtime-undef-fortify-source.patch
new file mode 100644
index 000000000000..18aef601325d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/ids/zeek/debug-runtime-undef-fortify-source.patch
@@ -0,0 +1,26 @@
+diff --git a/auxil/spicy/spicy/hilti/runtime/CMakeLists.txt b/auxil/spicy/spicy/hilti/runtime/CMakeLists.txt
+index f154901c..76563717 100644
+--- a/auxil/spicy/spicy/hilti/runtime/CMakeLists.txt
++++ b/auxil/spicy/spicy/hilti/runtime/CMakeLists.txt
+@@ -69,7 +69,7 @@ target_compile_definitions(hilti-rt-objects PRIVATE "HILTI_RT_BUILD_TYPE_RELEASE
+ # Build hilti-rt-debug with debug flags.
+ string(REPLACE " " ";" cxx_flags_debug ${CMAKE_CXX_FLAGS_DEBUG})
+ target_compile_options(hilti-rt-debug-objects PRIVATE ${cxx_flags_debug})
+-target_compile_options(hilti-rt-debug-objects PRIVATE "-UNDEBUG;-O0;-Wall")
++target_compile_options(hilti-rt-debug-objects PRIVATE "-UNDEBUG;-O0;-Wall;-U_FORTIFY_SOURCE")
+ target_compile_definitions(hilti-rt-debug-objects PRIVATE "HILTI_RT_BUILD_TYPE_DEBUG")
+ 
+ add_library(hilti-rt-tests-library-dummy1 SHARED src/tests/library-dummy.cc)
+diff --git a/auxil/spicy/spicy/spicy/runtime/CMakeLists.txt b/auxil/spicy/spicy/spicy/runtime/CMakeLists.txt
+index 20e7d291..9712341f 100644
+--- a/auxil/spicy/spicy/spicy/runtime/CMakeLists.txt
++++ b/auxil/spicy/spicy/spicy/runtime/CMakeLists.txt
+@@ -48,7 +48,7 @@ target_link_libraries(spicy-rt-objects PUBLIC hilti-rt-objects)
+ # Build spicy-rt-debug with debug flags.
+ string(REPLACE " " ";" cxx_flags_debug ${CMAKE_CXX_FLAGS_DEBUG})
+ target_compile_options(spicy-rt-debug-objects PRIVATE ${cxx_flags_debug})
+-target_compile_options(spicy-rt-debug-objects PRIVATE "-UNDEBUG;-O0;-Wall")
++target_compile_options(spicy-rt-debug-objects PRIVATE "-UNDEBUG;-O0;-Wall;-U_FORTIFY_SOURCE")
+ target_compile_definitions(spicy-rt-debug-objects PRIVATE "HILTI_RT_BUILD_TYPE_DEBUG")
+ target_link_libraries(spicy-rt-debug-objects PUBLIC hilti-rt-debug-objects)
+ 
diff --git a/nixpkgs/pkgs/applications/networking/ids/zeek/default.nix b/nixpkgs/pkgs/applications/networking/ids/zeek/default.nix
new file mode 100644
index 000000000000..eb8799e76636
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/ids/zeek/default.nix
@@ -0,0 +1,113 @@
+{ lib
+, stdenv
+, callPackage
+, fetchurl
+, cmake
+, flex
+, bison
+, spicy-parser-generator
+, openssl
+, libkqueue
+, libpcap
+, zlib
+, file
+, curl
+, libmaxminddb
+, gperftools
+, python3
+, swig
+, gettext
+, coreutils
+, ncurses
+}:
+
+let
+  broker = callPackage ./broker { };
+in
+stdenv.mkDerivation rec {
+  pname = "zeek";
+  version = "5.2.2";
+
+  src = fetchurl {
+    url = "https://download.zeek.org/zeek-${version}.tar.gz";
+    sha256 = "sha256-4MJBV8yWpy5LvkyyipOZdDjU6FV7F8INc/zWddRGFcY=";
+  };
+
+  strictDeps = true;
+
+  patches = [
+    ./avoid-broken-tests.patch
+    ./debug-runtime-undef-fortify-source.patch
+    ./fix-installation.patch
+  ];
+
+  nativeBuildInputs = [
+    bison
+    cmake
+    file
+    flex
+    python3
+  ];
+
+  buildInputs = [
+    broker
+    spicy-parser-generator
+    curl
+    gperftools
+    libmaxminddb
+    libpcap
+    ncurses
+    openssl
+    swig
+    zlib
+  ] ++ lib.optionals stdenv.isLinux [
+    libkqueue
+  ] ++ lib.optionals stdenv.isDarwin [
+    gettext
+  ];
+
+  postPatch = ''
+    patchShebangs ./auxil/spicy/spicy/scripts
+
+    substituteInPlace auxil/spicy/CMakeLists.txt --replace "hilti-toolchain-tests" ""
+    substituteInPlace auxil/spicy/spicy/hilti/CMakeLists.txt --replace "hilti-toolchain-tests" ""
+  '';
+
+  cmakeFlags = [
+    "-DBroker_ROOT=${broker}"
+    "-DSPICY_ROOT_DIR=${spicy-parser-generator}"
+    "-DENABLE_PERFTOOLS=true"
+    "-DINSTALL_AUX_TOOLS=true"
+    "-DZEEK_ETC_INSTALL_DIR=/etc/zeek"
+    "-DZEEK_LOG_DIR=/var/log/zeek"
+    "-DZEEK_STATE_DIR=/var/lib/zeek"
+    "-DZEEK_SPOOL_DIR=/var/spool/zeek"
+  ] ++ lib.optionals stdenv.isLinux [
+    "-DLIBKQUEUE_ROOT_DIR=${libkqueue}"
+  ];
+
+  postInstall = ''
+    for file in $out/share/zeek/base/frameworks/notice/actions/pp-alarms.zeek $out/share/zeek/base/frameworks/notice/main.zeek; do
+      substituteInPlace $file \
+         --replace "/bin/rm" "${coreutils}/bin/rm" \
+         --replace "/bin/cat" "${coreutils}/bin/cat"
+    done
+
+    for file in $out/share/zeek/policy/misc/trim-trace-file.zeek $out/share/zeek/base/frameworks/logging/postprocessors/scp.zeek $out/share/zeek/base/frameworks/logging/postprocessors/sftp.zeek; do
+      substituteInPlace $file --replace "/bin/rm" "${coreutils}/bin/rm"
+    done
+  '';
+
+  passthru = {
+    inherit broker;
+  };
+
+  meta = with lib; {
+    description = "Network analysis framework much different from a typical IDS";
+    homepage = "https://www.zeek.org";
+    changelog = "https://github.com/zeek/zeek/blob/v${version}/CHANGES";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ pSub marsam tobim ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/ids/zeek/fix-installation.patch b/nixpkgs/pkgs/applications/networking/ids/zeek/fix-installation.patch
new file mode 100644
index 000000000000..6360a1173051
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/ids/zeek/fix-installation.patch
@@ -0,0 +1,28 @@
+From f8c42a712db42cfd00fca75be2ce63c3aad2aad1 Mon Sep 17 00:00:00 2001
+From: Tobias Mayer <tobim@fastmail.fm>
+Date: Sun, 13 Nov 2022 21:48:36 +0100
+Subject: [PATCH] Fix installation
+
+---
+ CMakeLists.txt | 5 -----
+ 1 file changed, 5 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 846b65efd..d8b0be169 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -81,11 +81,6 @@ if ( NOT ZEEK_LOG_DIR )
+     set(ZEEK_LOG_DIR ${ZEEK_ROOT_DIR}/logs)
+ endif ()
+ 
+-install(DIRECTORY DESTINATION ${ZEEK_ETC_INSTALL_DIR})
+-install(DIRECTORY DESTINATION ${ZEEK_STATE_DIR})
+-install(DIRECTORY DESTINATION ${ZEEK_SPOOL_DIR})
+-install(DIRECTORY DESTINATION ${ZEEK_LOG_DIR})
+-
+ configure_file(zeek-path-dev.in ${CMAKE_CURRENT_BINARY_DIR}/zeek-path-dev)
+ execute_process(COMMAND "${CMAKE_COMMAND}" -E create_symlink
+                 "${CMAKE_CURRENT_BINARY_DIR}/zeek-wrapper.in"
+-- 
+2.37.3
+
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/SkypeExport/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/SkypeExport/default.nix
new file mode 100644
index 000000000000..f402faf965be
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/SkypeExport/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, cmake, boost }:
+
+stdenv.mkDerivation rec {
+  pname = "SkypeExport";
+  version = "1.4.0";
+
+  src = fetchFromGitHub {
+    owner = "Temptin";
+    repo = "SkypeExport";
+    rev = "v${version}";
+    sha256 = "1ilkh0s3dz5cp83wwgmscnfmnyck5qcwqg1yxp9zv6s356dxnbak";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "boost167.patch";
+      url = "https://github.com/Temptin/SkypeExport/commit/ef60f2e4fc9e4a5764c8d083a73b585457bc10b1.patch";
+      sha256 = "sha256-t+/v7c66OULmQCD/sNt+iDJeQ/6UG0CJ8uQY2PVSFQo=";
+    })
+  ];
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ boost ];
+
+  preConfigure = "cd src/SkypeExport/_gccbuild/linux";
+  installPhase = "install -Dt $out/bin SkypeExport";
+
+  meta = with lib; {
+    description = "Export Skype history to HTML";
+    homepage = "https://github.com/Temptin/SkypeExport";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ yana ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/abaddon/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/abaddon/default.nix
new file mode 100644
index 000000000000..601720345eb4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/abaddon/default.nix
@@ -0,0 +1,77 @@
+{ lib
+, fetchFromGitHub
+, stdenv
+, cmake
+, copyDesktopItems
+, makeDesktopItem
+, makeWrapper
+, pkg-config
+, curl
+, gtkmm3
+, libhandy
+, libsecret
+, nlohmann_json
+, sqlite
+}:
+
+stdenv.mkDerivation rec {
+  pname = "abaddon";
+  version = "0.1.10";
+
+  src = fetchFromGitHub {
+    owner = "uowuo";
+    repo = "abaddon";
+    rev = "v${version}";
+    hash = "sha256-84DrPx0e3pZjg87dHZO4y/z7KfIYNyAibE7/J7oYwXA=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [
+    cmake
+    copyDesktopItems
+    makeWrapper
+    pkg-config
+  ];
+
+  buildInputs = [
+    curl
+    gtkmm3
+    libhandy
+    libsecret
+    nlohmann_json
+    sqlite
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/share/abaddon
+    cp -r ../res/{css,res} $out/share/abaddon
+    mkdir $out/bin
+    cp abaddon $out/bin
+    wrapProgram $out/bin/abaddon \
+      --chdir $out/share/abaddon
+
+    runHook postInstall
+  '';
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = pname;
+      exec = pname;
+      desktopName = "Abaddon";
+      genericName = meta.description;
+      startupWMClass = pname;
+      categories = [ "Network" "InstantMessaging" ];
+      mimeTypes = [ "x-scheme-handler/discord" ];
+    })
+  ];
+
+  meta = with lib; {
+    description = "A discord client reimplementation, written in C++";
+    homepage = "https://github.com/uowuo/abaddon";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ genericnerdyusername ];
+    platforms = lib.intersectLists lib.platforms.x86_64 lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/alfaview/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/alfaview/default.nix
new file mode 100644
index 000000000000..843728a098f9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/alfaview/default.nix
@@ -0,0 +1,81 @@
+{ stdenv, lib, fetchurl, dpkg, autoPatchelfHook, makeWrapper, wrapGAppsHook
+, alsa-lib, dbus, fontconfig, freetype, glib, gst_all_1, libGL
+, libinput, libpulseaudio, libsecret, libtiff, libxkbcommon
+, mesa, openssl, systemd, xorg }:
+
+stdenv.mkDerivation rec {
+  pname = "alfaview";
+  version = "9.0.3";
+
+  src = fetchurl {
+    url = "https://assets.alfaview.com/stable/linux/deb/${pname}_${version}.deb";
+    sha256 = "sha256-Mmw4wWjU1Fr2dqonD3Vin8m6VX2dfDXbMDl+lTT4YT4=";
+  };
+
+  nativeBuildInputs = [
+    dpkg
+    makeWrapper
+    autoPatchelfHook
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    alsa-lib
+    dbus
+    fontconfig
+    freetype
+    glib
+    gst_all_1.gst-plugins-bad
+    gst_all_1.gst-plugins-good
+    gst_all_1.gst-plugins-base
+    libGL
+    libinput
+    libpulseaudio
+    libsecret
+    libtiff
+    libxkbcommon
+    mesa
+    openssl
+    stdenv.cc.cc
+    systemd
+    xorg.libX11
+    xorg.xcbutilwm
+    xorg.xcbutilimage
+    xorg.xcbutilkeysyms
+    xorg.xcbutilrenderutil
+  ];
+
+  libPath = lib.makeLibraryPath buildInputs;
+
+  dontBuild = true;
+  dontConfigure = true;
+
+  unpackPhase = ''
+    dpkg-deb -x ${src} ./
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mv usr $out
+    mv opt $out
+
+    substituteInPlace $out/share/applications/alfaview.desktop \
+      --replace "/opt/alfaview" "$out/bin" \
+      --replace "/usr/share/pixmaps/alfaview_production.png" alfaview_production
+
+    makeWrapper $out/opt/alfaview/alfaview $out/bin/alfaview \
+      --prefix LD_LIBRARY_PATH : ${libPath}
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Video-conferencing application, specialized in virtual online meetings, seminars, training sessions and conferences";
+    homepage = "https://alfaview.com";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = with maintainers; [ wolfangaukang hexchen ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/armcord/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/armcord/default.nix
new file mode 100644
index 000000000000..1f0d01b6f905
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/armcord/default.nix
@@ -0,0 +1,142 @@
+{ lib
+, stdenv
+, fetchurl
+, autoPatchelfHook
+, dpkg
+, makeWrapper
+, wrapGAppsHook
+, alsa-lib
+, at-spi2-atk
+, at-spi2-core
+, atk
+, cairo
+, cups
+, dbus
+, expat
+, ffmpeg
+, fontconfig
+, freetype
+, gdk-pixbuf
+, glib
+, gtk3
+, libappindicator-gtk3
+, libdbusmenu
+, libdrm
+, libnotify
+, libpulseaudio
+, libsecret
+, libuuid
+, libxkbcommon
+, mesa
+, nss
+, pango
+, systemd
+, xdg-utils
+, xorg
+, wayland
+, pipewire
+}:
+
+stdenv.mkDerivation rec {
+  pname = "armcord";
+  version = "3.2.4";
+
+  src =
+    let
+      base = "https://github.com/ArmCord/ArmCord/releases/download";
+    in
+      {
+        x86_64-linux = fetchurl {
+          url = "${base}/v${version}/ArmCord_${version}_amd64.deb";
+          hash = "sha256-IUHcDHIJeGx7QKjxl3fUFHqUfs1JdIFxesvDXt3mVw0=";
+        };
+        aarch64-linux = fetchurl {
+          url = "${base}/v${version}/ArmCord_${version}_arm64.deb";
+          hash = "sha256-TWVlEjakdRyZmOuBq9HLO+R7y5jmgstFtyEHjf8nxxM=";
+        };
+      }.${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
+
+  nativeBuildInputs = [ autoPatchelfHook dpkg makeWrapper wrapGAppsHook ];
+
+  dontWrapGApps = true;
+
+  buildInputs = [
+    alsa-lib
+    at-spi2-atk
+    at-spi2-core
+    atk
+    cairo
+    cups
+    dbus
+    expat
+    ffmpeg
+    fontconfig
+    freetype
+    gdk-pixbuf
+    glib
+    gtk3
+    pango
+    systemd
+    mesa # for libgbm
+    nss
+    libuuid
+    libdrm
+    libnotify
+    libsecret
+    libpulseaudio
+    libxkbcommon
+    libappindicator-gtk3
+    xorg.libX11
+    xorg.libxcb
+    xorg.libXcomposite
+    xorg.libXcursor
+    xorg.libXdamage
+    xorg.libXext
+    xorg.libXfixes
+    xorg.libXi
+    xorg.libXrandr
+    xorg.libXrender
+    xorg.libXScrnSaver
+    xorg.libxshmfence
+    xorg.libXtst
+    wayland
+    pipewire
+  ];
+
+  sourceRoot = ".";
+  unpackCmd = "dpkg-deb -x $src .";
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p "$out/bin"
+    cp -R "opt" "$out"
+    cp -R "usr/share" "$out/share"
+    chmod -R g-w "$out"
+
+    # Wrap the startup command
+    makeWrapper $out/opt/ArmCord/armcord $out/bin/armcord \
+      "''${gappsWrapperArgs[@]}" \
+      --prefix XDG_DATA_DIRS : "${gtk3}/share/gsettings-schemas/${gtk3.name}/" \
+      --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform=wayland --enable-features=UseOzonePlatform --enable-features=WebRTCPipeWireCapturer }}" \
+      --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath buildInputs}" \
+      --suffix PATH : ${lib.makeBinPath [ xdg-utils ]}
+
+    # Fix desktop link
+    substituteInPlace $out/share/applications/armcord.desktop \
+      --replace /opt/ArmCord/ $out/bin/
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Lightweight, alternative desktop client for Discord";
+    homepage = "https://armcord.app";
+    downloadPage = "https://github.com/ArmCord/ArmCord";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.osl3;
+    maintainers = with maintainers; [ ludovicopiero wrmilling ];
+    platforms = [ "x86_64-linux" "aarch64-linux" ];
+    mainProgram = "armcord";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/baresip/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/baresip/default.nix
new file mode 100644
index 000000000000..5aa3629bd38e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/baresip/default.nix
@@ -0,0 +1,133 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, zlib
+, openssl
+, libre
+, librem
+, pkg-config
+, gst_all_1
+, cairo
+, gtk3
+, mpg123
+, alsa-lib
+, SDL2
+, libv4l
+, celt
+, libsndfile
+, srtp
+, ffmpeg
+, gsm
+, speex
+, portaudio
+, spandsp3
+, libuuid
+, libvpx
+, cmake
+, dbusSupport ? true
+}:
+stdenv.mkDerivation rec {
+  version = "2.9.0";
+  pname = "baresip";
+  src = fetchFromGitHub {
+    owner = "baresip";
+    repo = "baresip";
+    rev = "v${version}";
+    sha256 = "sha256-B4d8D4IfLYAIYVN80Lrh5bywD5iacSnUVwEzbc6Xq7g=";
+  };
+  prePatch = lib.optionalString (!dbusSupport) ''
+    substituteInPlace cmake/modules.cmake --replace 'list(APPEND MODULES ctrl_dbus)' ""
+  '';
+  nativeBuildInputs = [ pkg-config cmake ];
+  buildInputs = [
+    zlib
+    openssl
+    libre
+    librem
+    cairo
+    gtk3
+    mpg123
+    alsa-lib
+    SDL2
+    libv4l
+    celt
+    libsndfile
+    srtp
+    ffmpeg
+    gsm
+    speex
+    portaudio
+    spandsp3
+    libuuid
+    libvpx
+  ] ++ (with gst_all_1; [ gstreamer gst-libav gst-plugins-base gst-plugins-bad gst-plugins-good ]);
+
+  cmakeFlags = [
+    "-DCMAKE_SKIP_BUILD_RPATH=ON"
+    "-Dre_DIR=${libre}/include/re"
+  ];
+
+  makeFlags = [
+    "LIBRE_MK=${libre}/share/re/re.mk"
+    "LIBRE_SO=${libre}/lib"
+    "LIBREM_PATH=${librem}"
+    "PREFIX=$(out)"
+    "USE_VIDEO=1"
+    "CCACHE_DISABLE=1"
+
+    "USE_ALSA=1"
+    "USE_AMR=1"
+    "USE_CAIRO=1"
+    "USE_CELT=1"
+    "USE_CONS=1"
+    "USE_EVDEV=1"
+    "USE_FFMPEG=1"
+    "USE_GSM=1"
+    "USE_GST1=1"
+    "USE_GTK=1"
+    "USE_L16=1"
+    "USE_MPG123=1"
+    "USE_OSS=1"
+    "USE_PLC=1"
+    "USE_VPX=1"
+    "USE_PORTAUDIO=1"
+    "USE_SDL=1"
+    "USE_SNDFILE=1"
+    "USE_SPEEX=1"
+    "USE_SPEEX_AEC=1"
+    "USE_SPEEX_PP=1"
+    "USE_SPEEX_RESAMP=1"
+    "USE_SRTP=1"
+    "USE_STDIO=1"
+    "USE_SYSLOG=1"
+    "USE_UUID=1"
+    "USE_V4L2=1"
+    "USE_X11=1"
+
+    "USE_BV32="
+    "USE_COREAUDIO="
+    "USE_G711=1"
+    "USE_G722=1"
+    "USE_G722_1="
+    "USE_ILBC="
+    "USE_OPUS="
+    "USE_SILK="
+  ]
+  ++ lib.optional (stdenv.cc.cc != null) "SYSROOT_ALT=${stdenv.cc.cc}"
+  ++ lib.optional (stdenv.cc.libc != null) "SYSROOT=${stdenv.cc.libc}"
+  ;
+
+  enableParallelBuilding = true;
+
+  env.NIX_CFLAGS_COMPILE = '' -I${librem}/include/rem -I${gsm}/include/gsm
+    -DHAVE_INTTYPES_H -D__GLIBC__
+    -D__need_timeval -D__need_timespec -D__need_time_t '';
+
+  meta = {
+    description = "A modular SIP User-Agent with audio and video support";
+    homepage = "https://github.com/baresip/baresip";
+    maintainers = with lib.maintainers; [ elohmeier raskin ];
+    license = lib.licenses.bsd3;
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/beeper/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/beeper/default.nix
new file mode 100644
index 000000000000..c523b59fb199
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/beeper/default.nix
@@ -0,0 +1,59 @@
+{ lib, fetchurl, mkDerivation, appimageTools, libsecret, makeWrapper }:
+let
+  pname = "beeper";
+  version = "3.71.16";
+  name = "${pname}-${version}";
+  src = fetchurl {
+    url = "https://download.todesktop.com/2003241lzgn20jd/beeper-${version}.AppImage";
+    hash = "sha256-Ho5zFmhNzkOmzo/btV+qZfP2GGx5XvV/1JncEKlH4vc=";
+  };
+  appimage = appimageTools.wrapType2 {
+    inherit version pname src;
+    extraPkgs = pkgs: with pkgs; [ libsecret ];
+  };
+  appimageContents = appimageTools.extractType2 {
+    inherit version pname src;
+  };
+in
+mkDerivation rec {
+  inherit name pname;
+
+  src = appimage;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mv bin/${name} bin/${pname}
+
+    mkdir -p $out/
+    cp -r bin $out/bin
+
+    mkdir -p $out/share/${pname}
+    cp -a ${appimageContents}/locales $out/share/${pname}
+    cp -a ${appimageContents}/resources $out/share/${pname}
+    cp -a ${appimageContents}/usr/share/icons $out/share/
+    install -Dm 644 ${appimageContents}/${pname}.desktop -t $out/share/applications/
+
+    substituteInPlace $out/share/applications/${pname}.desktop --replace "AppRun" "${pname}"
+
+    wrapProgram $out/bin/${pname} \
+      --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}} --no-update"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Universal chat app.";
+    longDescription = ''
+      Beeper is a universal chat app. With Beeper, you can send
+      and receive messages to friends, family and colleagues on
+      many different chat networks.
+    '';
+    homepage = "https://beeper.com";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ jshcmpbll ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee-discord/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee-discord/default.nix
new file mode 100644
index 000000000000..6badb7cda760
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee-discord/default.nix
@@ -0,0 +1,31 @@
+{ lib, fetchFromGitHub, stdenv, bitlbee, autoreconfHook, pkg-config, glib }:
+
+stdenv.mkDerivation rec {
+  pname = "bitlbee-discord";
+  version = "0.4.3";
+
+  src = fetchFromGitHub {
+    rev = version;
+    owner = "sm00th";
+    repo = "bitlbee-discord";
+    sha256 = "00qgdvrp7hv02n0ns685igp810zxmv3adsama8601122al6x041n";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ bitlbee ];
+
+  preConfigure = ''
+    export BITLBEE_PLUGINDIR=$out/lib/bitlbee
+    export BITLBEE_DATADIR=$out/share/bitlbee
+    ./autogen.sh
+  '';
+
+  meta = with lib; {
+    description = "Bitlbee plugin for Discord";
+
+    homepage = "https://github.com/sm00th/bitlbee-discord";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ lassulus ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee-facebook/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee-facebook/default.nix
new file mode 100644
index 000000000000..e5a45a1e9f52
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee-facebook/default.nix
@@ -0,0 +1,30 @@
+{ lib, fetchFromGitHub, stdenv, bitlbee, autoconf, automake, libtool, pkg-config, json-glib }:
+
+stdenv.mkDerivation rec {
+  pname = "bitlbee-facebook";
+  version = "1.2.2";
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "bitlbee";
+    repo = "bitlbee-facebook";
+    sha256 = "1qiiiq17ybylbhwgbwsvmshb517589r8yy5rsh1rfaylmlcxyy7z";
+  };
+
+  nativeBuildInputs = [ autoconf automake libtool pkg-config ];
+
+  buildInputs = [ bitlbee json-glib ];
+
+  preConfigure = ''
+    export BITLBEE_PLUGINDIR=$out/lib/bitlbee
+    ./autogen.sh
+  '';
+
+  meta = with lib; {
+    description = "The Facebook protocol plugin for bitlbee";
+    homepage = "https://github.com/bitlbee/bitlbee-facebook";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ toonn ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee-mastodon/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee-mastodon/default.nix
new file mode 100644
index 000000000000..3e09a6aa25b8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee-mastodon/default.nix
@@ -0,0 +1,28 @@
+{ lib, fetchgit, stdenv, bitlbee, autoreconfHook, pkg-config, glib }:
+
+stdenv.mkDerivation rec {
+  pname = "bitlbee-mastodon";
+  version = "1.4.5";
+
+  src = fetchgit {
+    url = "https://alexschroeder.ch/cgit/bitlbee-mastodon";
+    rev = "v${version}";
+    sha256 = "sha256-8vmq/YstuBYUxe00P4NrxD/eMYI++R9uvn1sCcMTr7I=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ bitlbee ];
+
+  preConfigure = ''
+    export BITLBEE_PLUGINDIR=$out/lib/bitlbee
+    export BITLBEE_DATADIR=$out/share/bitlbee
+  '';
+
+  meta = with lib; {
+    description = "Bitlbee plugin for Mastodon";
+    homepage = "https://alexschroeder.ch/cgit/bitlbee-mastodon/about";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ jpotier ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee-steam/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee-steam/default.nix
new file mode 100644
index 000000000000..441963f57ddf
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee-steam/default.nix
@@ -0,0 +1,29 @@
+{ lib, fetchFromGitHub, stdenv, bitlbee, autoconf, automake, libtool, pkg-config, libgcrypt }:
+
+stdenv.mkDerivation rec {
+  version = "1.4.2";
+  pname = "bitlbee-steam";
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "bitlbee";
+    repo = "bitlbee-steam";
+    sha256 = "121r92mgwv445wwxzh35n19fs5k81ihr0j19k256ia5502b1xxaq";
+  };
+
+  nativeBuildInputs = [ pkg-config autoconf automake ];
+  buildInputs = [ bitlbee libtool libgcrypt ];
+
+  preConfigure = ''
+    export BITLBEE_PLUGINDIR=$out/lib/bitlbee
+    ./autogen.sh
+  '';
+
+  meta = with lib; {
+    description = "Steam protocol plugin for BitlBee";
+
+    homepage = "https://github.com/jgeboski/bitlbee-steam";
+    license = licenses.gpl2Plus;
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee/default.nix
new file mode 100644
index 000000000000..99ce3f8811ef
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee/default.nix
@@ -0,0 +1,68 @@
+{ lib, fetchurl, fetchpatch, stdenv, gnutls, glib, pkg-config, check, libotr, python3
+, enableLibPurple ? false, pidgin ? null
+, enablePam ? false, pam ? null
+}:
+
+stdenv.mkDerivation rec {
+  pname = "bitlbee";
+  version = "3.6";
+
+  src = fetchurl {
+    url = "mirror://bitlbee/src/bitlbee-${version}.tar.gz";
+    sha256 = "0zhhcbcr59sx9h4maf8zamzv2waya7sbsl7w74gbyilvy93dw5cz";
+  };
+
+  nativeBuildInputs = [ pkg-config ] ++ lib.optional doCheck check;
+
+  buildInputs = [ gnutls libotr python3 ]
+    ++ lib.optional enableLibPurple pidgin
+    ++ lib.optional enablePam pam;
+
+  propagatedBuildInputs = [ glib ];
+
+  configureFlags = [
+    "--otr=1"
+    "--ssl=gnutls"
+    "--pidfile=/var/lib/bitlbee/bitlbee.pid"
+  ] ++ lib.optional enableLibPurple "--purple=1"
+    ++ lib.optional enablePam "--pam=1";
+
+  patches = [
+    # This should be dropped once the issue is fixed upstream.
+    (fetchpatch {
+      url = "https://github.com/bitlbee/bitlbee/commit/6ff651b3ec93e5fd74f80766d5e9714d963137bc.diff";
+      sha256 = "144dpm4kq7c268fpww1q3n88ayg068n73fbabr5arh1zryw48qfv";
+    })
+  ];
+
+  installTargets = [ "install" "install-dev" ];
+
+  doCheck = !enableLibPurple; # Checks fail with libpurple for some reason
+  checkPhase = ''
+    # check flags set VERBOSE=y which breaks the build due overriding a command
+    make check
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "IRC instant messaging gateway";
+
+    longDescription = ''
+      BitlBee brings IM (instant messaging) to IRC clients.  It's a
+      great solution for people who have an IRC client running all the
+      time and don't want to run an additional MSN/AIM/whatever
+      client.
+
+      BitlBee currently supports the following IM networks/protocols:
+      XMPP/Jabber (including Google Talk), MSN Messenger, Yahoo!
+      Messenger, AIM and ICQ.
+    '';
+
+    homepage = "https://www.bitlbee.org/";
+    license = licenses.gpl2Plus;
+
+    maintainers = with maintainers; [ lassulus pSub ];
+    platforms = platforms.gnu ++ platforms.linux;  # arbitrary choice
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee/plugins.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee/plugins.nix
new file mode 100644
index 000000000000..f750f7f9d602
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee/plugins.nix
@@ -0,0 +1,13 @@
+{ lib, runCommandLocal, bitlbee }:
+
+plugins: runCommandLocal "bitlbee-plugins" {
+  inherit plugins;
+  buildInputs = [ bitlbee plugins ];
+} ''
+  mkdir -p $out/lib/bitlbee
+  for plugin in $plugins; do
+    for thing in $(ls $plugin/lib/bitlbee); do
+      ln -s $plugin/lib/bitlbee/$thing $out/lib/bitlbee/
+    done
+  done
+''
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/bluejeans/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/bluejeans/default.nix
new file mode 100644
index 000000000000..e1bc3b3b560f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/bluejeans/default.nix
@@ -0,0 +1,137 @@
+{ stdenv
+, lib
+, fetchurl
+, rpmextract
+, libnotify
+, libuuid
+, cairo
+, cups
+, pango
+, fontconfig
+, udev
+, dbus
+, gtk3
+, atk
+, at-spi2-atk
+, expat
+, gdk-pixbuf
+, freetype
+, nspr
+, glib
+, nss
+, libX11
+, libXrandr
+, libXrender
+, libXtst
+, libXdamage
+, libxcb
+, libXcursor
+, libXi
+, libXext
+, libXfixes
+, libXft
+, libXcomposite
+, libXScrnSaver
+, alsa-lib
+, pulseaudio
+, makeWrapper
+, xdg-utils
+}:
+
+let
+  getFirst = n: v: builtins.concatStringsSep "." (lib.take n (lib.splitString "." v));
+in
+
+stdenv.mkDerivation rec {
+  pname = "bluejeans";
+  version = "2.32.1.3";
+
+  src = fetchurl {
+    url = "https://swdl.bluejeans.com/desktop-app/linux/${getFirst 3 version}/BlueJeans_${version}.rpm";
+    sha256 = "sha256-lsUS7JymCMOa5wlWJOwLFm4KRnAYixi9Kk5CYHB17Ac=";
+  };
+
+  nativeBuildInputs = [ rpmextract makeWrapper ];
+
+  libPath =
+    lib.makeLibraryPath
+      [
+        libnotify
+        libuuid
+        cairo
+        cups
+        pango
+        fontconfig
+        gtk3
+        atk
+        at-spi2-atk
+        expat
+        gdk-pixbuf
+        dbus
+        (lib.getLib udev)
+        freetype
+        nspr
+        glib
+        stdenv.cc.cc.lib
+        nss
+        libX11
+        libXrandr
+        libXrender
+        libXtst
+        libXdamage
+        libxcb
+        libXcursor
+        libXi
+        libXext
+        libXfixes
+        libXft
+        libXcomposite
+        libXScrnSaver
+        alsa-lib
+        pulseaudio
+      ];
+
+  localtime64_stub = ./localtime64_stub.c;
+
+  buildCommand = ''
+    mkdir -p $out/bin/
+    cd $out
+    rpmextract $src
+    mv usr/share share
+    rmdir usr
+
+    patchelf \
+      --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \
+      --replace-needed libudev.so.0 libudev.so.1 \
+      opt/BlueJeans/bluejeans-v2
+
+    patchelf \
+      --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \
+      opt/BlueJeans/resources/BluejeansHelper
+
+    cc $localtime64_stub -shared -o "${placeholder "out"}"/opt/BlueJeans/liblocaltime64_stub.so
+
+    # make xdg-open overrideable at runtime
+    makeWrapper $out/opt/BlueJeans/bluejeans-v2 $out/bin/bluejeans \
+      --set LD_LIBRARY_PATH "${libPath}":"${placeholder "out"}"/opt/BlueJeans \
+      --set LD_PRELOAD "$out"/opt/BlueJeans/liblocaltime64_stub.so \
+      --suffix PATH : ${lib.makeBinPath [ xdg-utils ]}
+
+    substituteInPlace "$out"/share/applications/bluejeans-v2.desktop \
+      --replace "/opt/BlueJeans/bluejeans-v2" "$out/bin/bluejeans"
+
+    patchShebangs "$out"
+  '';
+
+  passthru.updateScript = ./update.sh;
+
+  meta = with lib; {
+    description = "Video, audio, and web conferencing that works together with the collaboration tools you use every day";
+    homepage = "https://www.bluejeans.com";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = with maintainers; [ ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/bluejeans/localtime64_stub.c b/nixpkgs/pkgs/applications/networking/instant-messengers/bluejeans/localtime64_stub.c
new file mode 100644
index 000000000000..87c2fa11714c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/bluejeans/localtime64_stub.c
@@ -0,0 +1,12 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+void *localtime64() {
+  fprintf(stderr, "nixpkgs: call into localtime64_r\n");
+  abort();
+}
+
+void *localtime64_r() {
+  fprintf(stderr, "nixpkgs: call into localtime64_r\n");
+  abort();
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/bluejeans/update.sh b/nixpkgs/pkgs/applications/networking/instant-messengers/bluejeans/update.sh
new file mode 100755
index 000000000000..3bb7d309e875
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/bluejeans/update.sh
@@ -0,0 +1,12 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl pup common-updater-scripts
+
+set -eu -o pipefail
+
+version="$(curl -Ls https://www.bluejeans.com/downloads | \
+    pup 'a[href$=".rpm"] attr{href}' | \
+    # output contains app and events
+    grep "desktop-app" | \
+    awk -F'[ ._ ]' '{printf $6"."$7"."$8"."$9"\n"}')"
+
+update-source-version bluejeans-gui "$version"
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/briar-desktop/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/briar-desktop/default.nix
new file mode 100644
index 000000000000..4bdc8f7f6deb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/briar-desktop/default.nix
@@ -0,0 +1,63 @@
+{ lib
+, stdenv
+, fetchurl
+, openjdk
+, libnotify
+, makeWrapper
+, tor
+, p7zip
+, bash
+, writeScript
+}:
+let
+
+  briar-tor = writeScript "briar-tor" ''
+    #! ${bash}/bin/bash
+    exec ${tor}/bin/tor "$@"
+  '';
+
+in
+stdenv.mkDerivation rec {
+  pname = "briar-desktop";
+  version = "0.5.0-beta";
+
+  src = fetchurl {
+    url = "https://desktop.briarproject.org/jars/linux/${version}/briar-desktop-linux-${version}.jar";
+    hash = "sha256-J93ODYAiRbQxG2BF7P3H792ymAcJ3f07l7zRSw8kM+E=";
+  };
+
+  dontUnpack = true;
+
+  nativeBuildInputs = [
+    makeWrapper
+    p7zip
+  ];
+
+  installPhase = ''
+    mkdir -p $out/{bin,lib}
+    cp ${src} $out/lib/briar-desktop.jar
+    makeWrapper ${openjdk}/bin/java $out/bin/briar-desktop \
+      --add-flags "-jar $out/lib/briar-desktop.jar" \
+      --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [
+        libnotify
+      ]}"
+  '';
+
+  fixupPhase = ''
+    # Replace the embedded Tor binary (which is in a Tar archive)
+    # with one from Nixpkgs.
+    cp ${briar-tor} ./tor
+    for arch in {aarch64,armhf,x86_64}; do
+      7z a tor_linux-$arch.zip tor
+      7z a $out/lib/briar-desktop.jar tor_linux-$arch.zip
+    done
+  '';
+
+  meta = with lib; {
+    description = "Decentalized and secure messnger";
+    homepage = "https://code.briarproject.org/briar/briar-desktop";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ onny ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/caprine-bin/build-from-appimage.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/caprine-bin/build-from-appimage.nix
new file mode 100644
index 000000000000..4194f4c22887
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/caprine-bin/build-from-appimage.nix
@@ -0,0 +1,48 @@
+{ lib
+, fetchurl
+, appimageTools
+, xorg
+, pname
+, version
+, sha256
+, metaCommon ? { }
+}:
+
+let
+  src = fetchurl {
+    url = "https://github.com/sindresorhus/caprine/releases/download/v${version}/Caprine-${version}.AppImage";
+    name = "Caprine-${version}.AppImage";
+    inherit sha256;
+  };
+  extracted = appimageTools.extractType2 { inherit pname version src; };
+in
+(appimageTools.wrapType2 {
+  inherit pname version src;
+
+  passthru = {
+    inherit pname version src;
+  };
+
+  profile = ''
+    export LC_ALL=C.UTF-8
+  '';
+
+  extraPkgs = pkgs: appimageTools.defaultFhsEnvArgs.multiPkgs pkgs;
+
+  extraInstallCommands = ''
+    mv $out/bin/{${pname}-${version},caprine}
+
+    mkdir -p $out/share
+    "${xorg.lndir}/bin/lndir" -silent "${extracted}/usr/share" "$out/share"
+    ln -s ${extracted}/caprine.png $out/share/icons/caprine.png
+    mkdir $out/share/applications
+    cp ${extracted}/caprine.desktop $out/share/applications/
+    substituteInPlace $out/share/applications/caprine.desktop \
+        --replace AppRun caprine
+  '';
+
+  meta = metaCommon // {
+    platforms = [ "x86_64-linux" ];
+    mainProgram = "caprine";
+  };
+})
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/caprine-bin/build-from-dmg.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/caprine-bin/build-from-dmg.nix
new file mode 100644
index 000000000000..3dc457c48826
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/caprine-bin/build-from-dmg.nix
@@ -0,0 +1,35 @@
+{ stdenvNoCC
+, lib
+, fetchurl
+, undmg
+, pname
+, version
+, sha256
+, metaCommon ? { }
+}:
+
+stdenvNoCC.mkDerivation {
+  inherit pname version;
+
+  src = fetchurl {
+    url = "https://github.com/sindresorhus/caprine/releases/download/v${version}/Caprine-${version}.dmg";
+    name = "Caprine-${version}.dmg";
+    inherit sha256;
+  };
+
+  sourceRoot = "Caprine.app";
+
+  nativeBuildInputs = [ undmg ];
+
+  installPhase = ''
+    mkdir -p "$out/Applications/Caprine.app"
+    cp -R . "$out/Applications/Caprine.app"
+    mkdir "$out/bin"
+    ln -s "$out/Applications/Caprine.app/Contents/MacOS/Caprine" "$out/bin/caprine"
+  '';
+
+  meta = metaCommon // {
+    platforms = with lib.platforms; darwin;
+    mainProgram = "caprine";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/caprine-bin/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/caprine-bin/default.nix
new file mode 100644
index 000000000000..501d8f7d163f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/caprine-bin/default.nix
@@ -0,0 +1,26 @@
+{ lib, callPackage, stdenvNoCC }:
+let
+  pname = "caprine";
+  version = "2.58.0";
+  metaCommon = with lib; {
+    description = "An elegant Facebook Messenger desktop app";
+    homepage = "https://sindresorhus.com/caprine";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ShamrockLee ];
+  };
+  x86_64-appimage = callPackage ./build-from-appimage.nix {
+    inherit pname version metaCommon;
+    sha256 = "7iK2RyA63okJLH2Xm97fFilJHzqFuP96xkUr2+ADbC4=";
+  };
+  x86_64-dmg = callPackage ./build-from-dmg.nix {
+    inherit pname version metaCommon;
+    sha256 = "RqK+fJJAt9W+m7zg6ZYI6PEAOa3V1UxsptEpG1qjibg=";
+  };
+in
+(if stdenvNoCC.isDarwin then x86_64-dmg else x86_64-appimage).overrideAttrs (oldAttrs: {
+  passthru = (oldAttrs.passthru or { }) // { inherit x86_64-appimage x86_64-dmg; };
+  meta = oldAttrs.meta // {
+    platforms = x86_64-appimage.meta.platforms ++ x86_64-dmg.meta.platforms;
+    mainProgram = "caprine";
+  };
+})
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/centerim/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/centerim/default.nix
new file mode 100644
index 000000000000..2e4dc6dbb55e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/centerim/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchurl, gnused, openssl, curl, ncurses, libjpeg
+, withGpg ? true, gpgme ? null}:
+
+stdenv.mkDerivation rec {
+  version = "5.0.1";
+  pname = "centerim5";
+
+  src = fetchurl {
+    url = "http://centerim.org/download/cim5/${pname}-${version}.tar.gz";
+    sha256 = "0viz86jflp684vfginhl6aaw4gh2qvalc25anlwljjl3kkmibklk";
+  };
+
+  CXXFLAGS = "-std=gnu++98";
+
+  buildInputs = [ openssl curl ncurses libjpeg ]
+    ++ lib.optional withGpg gpgme;
+
+  preConfigure = ''
+    ${gnused}/bin/sed -i '1,1i#include <stdio.h>' libicq2000/libicq2000/sigslot.h
+  '';
+
+  configureFlags = [
+    "--with-openssl=${openssl.dev}"
+  ];
+
+  meta = {
+    homepage = "https://www.centerim.org/";
+    description = "Fork of CenterICQ, a curses instant messaging program";
+    license = lib.licenses.gpl2Plus;
+    platforms = with lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/chatterino2/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/chatterino2/default.nix
new file mode 100644
index 000000000000..c95b84a3031e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/chatterino2/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, lib, cmake, pkg-config, fetchFromGitHub, qtbase, qtsvg, qtmultimedia, qtimageformats, qttools, boost, openssl, wrapQtAppsHook, libsecret }:
+
+stdenv.mkDerivation rec {
+  pname = "chatterino2";
+  version = "2.4.5";
+  src = fetchFromGitHub {
+    owner = "Chatterino";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-ughEavlvL1/mvevbYrDG+2/JYigMhVwyy3RFysQqUNs=";
+    fetchSubmodules = true;
+  };
+  nativeBuildInputs = [ cmake pkg-config wrapQtAppsHook ];
+  buildInputs = [ qtbase qtsvg qtmultimedia qtimageformats qttools boost openssl libsecret ];
+  postInstall = lib.optionalString stdenv.isDarwin ''
+    mkdir -p "$out/Applications"
+    mv bin/chatterino.app "$out/Applications/"
+  '' + ''
+    mkdir -p $out/share/icons/hicolor/256x256/apps
+    cp $src/resources/icon.png $out/share/icons/hicolor/256x256/apps/chatterino.png
+  '';
+  meta = with lib; {
+    description = "A chat client for Twitch chat";
+    longDescription = ''
+      Chatterino is a chat client for Twitch chat. It aims to be an
+      improved/extended version of the Twitch web chat. Chatterino 2 is
+      the second installment of the Twitch chat client series
+      "Chatterino".
+    '';
+    homepage = "https://github.com/Chatterino/chatterino2";
+    changelog = "https://github.com/Chatterino/chatterino2/blob/master/CHANGELOG.md";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ rexim ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/chatty/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/chatty/default.nix
new file mode 100644
index 000000000000..8d524bfba47e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/chatty/default.nix
@@ -0,0 +1,91 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, appstream-glib
+, desktop-file-utils
+, itstool
+, meson
+, ninja
+, pkg-config
+, python3
+, wrapGAppsHook
+, evolution-data-server
+, feedbackd
+, glibmm
+, gnome-desktop
+, gspell
+, gtk3
+, json-glib
+, libgcrypt
+, libhandy
+, libphonenumber
+, modemmanager
+, olm
+, pidgin
+, protobuf
+, sqlite
+, plugins ? [ ]
+}:
+
+stdenv.mkDerivation rec {
+  pname = "chatty";
+  version = "0.7.3";
+
+  src = fetchFromGitLab {
+    domain = "source.puri.sm";
+    owner = "Librem5";
+    repo = "chatty";
+    rev = "v${version}";
+    fetchSubmodules = true;
+    hash = "sha256-zsZDpncnoj+0klJ2/220gY93c7mD0wIvQaP3QF8F3zQ=";
+  };
+
+  postPatch = ''
+    patchShebangs build-aux/meson
+  '';
+
+  nativeBuildInputs = [
+    appstream-glib
+    desktop-file-utils
+    itstool
+    meson
+    ninja
+    pkg-config
+    python3
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    evolution-data-server
+    feedbackd
+    glibmm
+    gnome-desktop
+    gspell
+    gtk3
+    json-glib
+    libgcrypt
+    libhandy
+    libphonenumber
+    modemmanager
+    olm
+    pidgin
+    protobuf
+    sqlite
+  ];
+
+  preFixup = ''
+    gappsWrapperArgs+=(
+      --prefix PURPLE_PLUGIN_PATH : ${lib.escapeShellArg (pidgin.makePluginPath plugins)}
+      ${lib.concatMapStringsSep " " (p: p.wrapArgs or "") plugins}
+    )
+  '';
+
+  meta = with lib; {
+    description = "XMPP and SMS messaging via libpurple and ModemManager";
+    homepage = "https://source.puri.sm/Librem5/chatty";
+    changelog = "https://source.puri.sm/Librem5/chatty/-/blob/${src.rev}/NEWS";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ dotlambda tomfitzhenry ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/cinny-desktop/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/cinny-desktop/default.nix
new file mode 100644
index 000000000000..2dbe74d3b34e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/cinny-desktop/default.nix
@@ -0,0 +1,75 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, cinny
+, copyDesktopItems
+, wrapGAppsHook
+, pkg-config
+, openssl
+, dbus
+, glib
+, glib-networking
+, webkitgtk
+, makeDesktopItem
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cinny-desktop";
+  version = "2.2.6";
+
+  src = fetchFromGitHub {
+    owner = "cinnyapp";
+    repo = "cinny-desktop";
+    rev = "v${version}";
+    hash = "sha256-RW6LeItIAHJk1e7qMa1MLIGb3jHvJ/KM8E9l1qR48w8=";
+  };
+
+  sourceRoot = "${src.name}/src-tauri";
+
+  cargoHash = "sha256-Iab/icQ9hFVh/o6egZVPa2zeKgO5WxzkluhRckcayvw=";
+
+  postPatch = ''
+    substituteInPlace tauri.conf.json \
+      --replace '"distDir": "../cinny/dist",' '"distDir": "${cinny}",'
+  '';
+
+  postInstall = ''
+    install -DT icons/128x128@2x.png $out/share/icons/hicolor/256x256@2/apps/cinny.png
+    install -DT icons/128x128.png $out/share/icons/hicolor/128x128/apps/cinny.png
+    install -DT icons/32x32.png $out/share/icons/hicolor/32x32/apps/cinny.png
+  '';
+
+  nativeBuildInputs = [
+    copyDesktopItems
+    wrapGAppsHook
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+    dbus
+    glib
+    glib-networking
+    webkitgtk
+  ];
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "cinny";
+      exec = "cinny";
+      icon = "cinny";
+      desktopName = "Cinny";
+      comment = meta.description;
+      categories = [ "Network" "InstantMessaging" ];
+    })
+  ];
+
+  meta = with lib; {
+    description = "Yet another matrix client for desktop";
+    homepage = "https://github.com/cinnyapp/cinny-desktop";
+    maintainers = [ maintainers.aveltras ];
+    license = licenses.agpl3Only;
+    platforms = platforms.linux;
+    mainProgram = "cinny";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/cinny/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/cinny/default.nix
new file mode 100644
index 000000000000..336d045b6c16
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/cinny/default.nix
@@ -0,0 +1,39 @@
+{ lib, buildNpmPackage, fetchFromGitHub, writeText, jq, conf ? { } }:
+
+let
+  configOverrides = writeText "cinny-config-overrides.json" (builtins.toJSON conf);
+in
+buildNpmPackage rec {
+  pname = "cinny";
+  version = "2.2.6";
+
+  src = fetchFromGitHub {
+    owner = "cinnyapp";
+    repo = "cinny";
+    rev = "v${version}";
+    hash = "sha256-Da/gbq9piKvkIMiamoafcRrqxF7128GXoswk2C43An8=";
+  };
+
+  npmDepsHash = "sha256-3wgB/dQmLtwxbRsk+OUcyfx98vpCvhvseEOCrJIFohY=";
+
+  nativeBuildInputs = [
+    jq
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    cp -r dist $out
+    jq -s '.[0] * .[1]' "config.json" "${configOverrides}" > "$out/config.json"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Yet another Matrix client for the web";
+    homepage = "https://cinny.in/";
+    maintainers = with maintainers; [ abbe ];
+    license = licenses.agpl3Only;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/cordless/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/cordless/default.nix
new file mode 100644
index 000000000000..01bd4ff50e4c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/cordless/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "cordless";
+  version = "2020-11-22";
+
+  src = fetchFromGitHub {
+    owner = "Bios-Marcel";
+    repo = pname;
+    rev = version;
+    hash = "sha256-nOHLI0N4d8aC7KaWdLezSpVU1DS1fkfW5UO7cVYCbis=";
+  };
+
+  subPackages = [ "." ];
+
+  vendorHash = "sha256-XnwTqd19q+hOJZsfnFExiPDbg4pzV1Z9A6cq/jhcVgU=";
+
+  meta = with lib; {
+    homepage = "https://github.com/Bios-Marcel/cordless";
+    description = "Discord terminal client";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ colemickens ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/coyim/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/coyim/default.nix
new file mode 100644
index 000000000000..61fb4b43a033
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/coyim/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, stdenv
+, buildGoPackage
+, fetchFromGitHub
+, pkg-config
+, cairo
+, gdk-pixbuf
+, glib
+, gnome
+, wrapGAppsHook
+, gtk3
+}:
+
+buildGoPackage rec {
+  pname = "coyim";
+  version = "0.4.1";
+
+  goPackagePath = "github.com/coyim/coyim";
+
+  src = fetchFromGitHub {
+    owner = "coyim";
+    repo = "coyim";
+    rev = "v${version}";
+    sha256 = "sha256-PmB6POaHKEXzIAaz3lAbUOhtVOzrj5oXRk90giYo6SI=";
+  };
+
+  nativeBuildInputs = [ pkg-config wrapGAppsHook ];
+
+  buildInputs = [ glib cairo gdk-pixbuf gtk3 gnome.adwaita-icon-theme ];
+
+  meta = with lib; {
+    description = "a safe and secure chat client";
+    homepage = "https://coy.im/";
+    license = licenses.gpl3;
+    platforms = [ "x86_64-linux" "x86_64-darwin" ];
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/deltachat-cursed/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/deltachat-cursed/default.nix
new file mode 100644
index 000000000000..f1361fea1392
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/deltachat-cursed/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "deltachat-cursed";
+  version = "0.7.2";
+
+  src = fetchFromGitHub {
+    owner = "adbenitez";
+    repo = "deltachat-cursed";
+    rev = "v${version}";
+    hash = "sha256-Cv2QT8GsPAcA5TTZGfNvFNwnUITSR0PmQE0QCO1nFNk=";
+  };
+
+  nativeBuildInputs = [
+    python3.pkgs.setuptools-scm
+  ];
+
+  SETUPTOOLS_SCM_PRETEND_VERSION = version;
+
+  propagatedBuildInputs = with python3.pkgs; [
+    deltachat
+    emoji
+    notify-py
+    urwid-readline
+  ];
+
+  doCheck = false; # no tests implemented
+
+  meta = with lib; {
+    description = "Lightweight Delta Chat client";
+    homepage = "https://github.com/adbenitez/deltachat-cursed";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/deltachat-desktop/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/deltachat-desktop/default.nix
new file mode 100644
index 000000000000..5af78b5327eb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/deltachat-desktop/default.nix
@@ -0,0 +1,127 @@
+{ lib
+, buildNpmPackage
+, copyDesktopItems
+, electron_22
+, buildGoModule
+, esbuild
+, fetchFromGitHub
+, libdeltachat
+, makeDesktopItem
+, makeWrapper
+, noto-fonts-color-emoji
+, pkg-config
+, python3
+, roboto
+, sqlcipher
+, stdenv
+, CoreServices
+}:
+
+let
+  esbuild' = esbuild.override {
+    buildGoModule = args: buildGoModule (args // rec {
+      version = "0.14.54";
+      src = fetchFromGitHub {
+        owner = "evanw";
+        repo = "esbuild";
+        rev = "v${version}";
+        hash = "sha256-qCtpy69ROCspRgPKmCV0YY/EOSWiNU/xwDblU0bQp4w=";
+      };
+      vendorHash = "sha256-+BfxCyg0KkDQpHt/wycy/8CTG6YBA/VJvJFhhzUnSiQ=";
+    });
+  };
+in
+buildNpmPackage rec {
+  pname = "deltachat-desktop";
+  version = "1.40.3";
+
+  src = fetchFromGitHub {
+    owner = "deltachat";
+    repo = "deltachat-desktop";
+    rev = "v${version}";
+    hash = "sha256-UVsjka/ptUiSN9aqRESdFZA3uh+FJnJot/YXWUPCJtc=";
+  };
+
+  npmDepsHash = "sha256-r0IUQNZJEpY8VE0G/WLdygup32iQ6DxfGkvOgFi7R4k=";
+
+  nativeBuildInputs = [
+    makeWrapper
+    pkg-config
+    python3
+  ] ++ lib.optionals stdenv.isLinux [
+    copyDesktopItems
+  ];
+
+  buildInputs = [
+    libdeltachat
+  ] ++ lib.optionals stdenv.isDarwin [
+    CoreServices
+  ];
+
+  env = {
+    ELECTRON_SKIP_BINARY_DOWNLOAD = "1";
+    ESBUILD_BINARY_PATH = "${esbuild'}/bin/esbuild";
+    USE_SYSTEM_LIBDELTACHAT = "true";
+    VERSION_INFO_GIT_REF = src.rev;
+  };
+
+  preBuild = ''
+    rm -r node_modules/deltachat-node/node/prebuilds
+  '';
+
+  npmBuildScript = "build4production";
+
+  installPhase = ''
+    runHook preInstall
+
+    npm prune --production
+
+    mkdir -p $out/lib/node_modules/deltachat-desktop
+    cp -r . $out/lib/node_modules/deltachat-desktop
+
+    awk '!/^#/ && NF' build/packageignore_list \
+      | xargs -I {} sh -c "rm -rf $out/lib/node_modules/deltachat-desktop/{}" || true
+
+    install -D build/icon.png \
+      $out/share/icons/hicolor/scalable/apps/deltachat.png
+
+    ln -sf ${noto-fonts-color-emoji}/share/fonts/noto/NotoColorEmoji.ttf \
+      $out/lib/node_modules/deltachat-desktop/html-dist/fonts/noto/emoji
+    for font in $out/lib/node_modules/deltachat-desktop/html-dist/fonts/Roboto-*.ttf; do
+      ln -sf ${roboto}/share/fonts/truetype/$(basename $font) \
+        $out/lib/node_modules/deltachat-desktop/html-dist/fonts
+    done
+
+    makeWrapper ${electron_22}/bin/electron $out/bin/deltachat \
+      --set LD_PRELOAD ${sqlcipher}/lib/libsqlcipher${stdenv.hostPlatform.extensions.sharedLibrary} \
+      --add-flags $out/lib/node_modules/deltachat-desktop
+
+    runHook postInstall
+  '';
+
+  desktopItems = lib.singleton (makeDesktopItem {
+    name = "deltachat";
+    exec = "deltachat %u";
+    icon = "deltachat";
+    desktopName = "Delta Chat";
+    genericName = "Delta Chat";
+    comment = meta.description;
+    categories = [ "Network" "InstantMessaging" "Chat" ];
+    startupWMClass = "DeltaChat";
+    mimeTypes = [
+      "x-scheme-handler/openpgp4fpr"
+      "x-scheme-handler/dcaccount"
+      "x-scheme-handler/dclogin"
+      "x-scheme-handler/mailto"
+    ];
+  });
+
+  meta = with lib; {
+    description = "Email-based instant messaging for Desktop";
+    homepage = "https://github.com/deltachat/deltachat-desktop";
+    changelog = "https://github.com/deltachat/deltachat-desktop/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.gpl3Plus;
+    mainProgram = "deltachat";
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/dino/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/dino/default.nix
new file mode 100644
index 000000000000..83bf99b828d1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/dino/default.nix
@@ -0,0 +1,124 @@
+{ lib, stdenv, fetchFromGitHub
+, vala, cmake, ninja, wrapGAppsHook, pkg-config, gettext
+, gobject-introspection, glib, gdk-pixbuf, gtk4, glib-networking
+, libadwaita
+, libnotify, libsoup, libgee
+, libsignal-protocol-c
+, libgcrypt
+, sqlite
+, gpgme
+, pcre2
+, qrencode
+, icu
+, gspell
+, srtp
+, libnice
+, gnutls
+, gstreamer
+, gst-plugins-base
+, gst-plugins-good
+, gst-plugins-bad
+, gst-vaapi
+, webrtc-audio-processing
+}:
+
+stdenv.mkDerivation rec {
+  pname = "dino";
+  version = "0.4.3";
+
+  src = fetchFromGitHub {
+    owner = "dino";
+    repo = "dino";
+    rev = "v${version}";
+    sha256 = "sha256-smy/t6wTCnG0kuRFKwyeLENKqOQDhL0fZTtj3BHo6kw=";
+  };
+
+  postPatch = ''
+    # don't overwrite manually set version information
+    substituteInPlace CMakeLists.txt \
+      --replace "include(ComputeVersion)" ""
+  '';
+
+  nativeBuildInputs = [
+    vala
+    cmake
+    ninja # https://github.com/dino/dino/issues/230
+    pkg-config
+    wrapGAppsHook
+    gettext
+    gobject-introspection
+  ];
+
+  buildInputs = [
+    qrencode
+    glib
+    glib-networking # required for TLS support
+    libadwaita
+    libgee
+    sqlite
+    gdk-pixbuf
+    gtk4
+    libnotify
+    gpgme
+    libgcrypt
+    libsoup
+    pcre2
+    icu
+    libsignal-protocol-c
+    gspell
+    srtp
+    libnice
+    gnutls
+    gstreamer
+    gst-plugins-base
+    gst-plugins-good # contains rtpbin, required for VP9
+    gst-plugins-bad # required for H264, MSDK
+    gst-vaapi # required for VAAPI
+    webrtc-audio-processing
+  ];
+
+  cmakeFlags = [
+    "-DBUILD_TESTS=true"
+    "-DRTP_ENABLE_H264=true"
+    "-DRTP_ENABLE_MSDK=true"
+    "-DRTP_ENABLE_VAAPI=true"
+    "-DRTP_ENABLE_VP9=true"
+    "-DVERSION_FOUND=true"
+    "-DVERSION_IS_RELEASE=true"
+    "-DVERSION_FULL=${version}"
+  ];
+
+  # Undefined symbols for architecture arm64: "_gpg_strerror"
+  NIX_LDFLAGS = lib.optionalString stdenv.isDarwin "-lgpg-error";
+
+  doCheck = true;
+  checkPhase = ''
+    runHook preCheck
+    ./xmpp-vala-test
+    ./signal-protocol-vala-test
+    runHook postCheck
+  '';
+
+  # Dino looks for plugins with a .so filename extension, even on macOS where
+  # .dylib is appropriate, and despite the fact that it builds said plugins with
+  # that as their filename extension
+  #
+  # Therefore, on macOS rename all of the plugins to use correct names that Dino
+  # will load
+  #
+  # See https://github.com/dino/dino/wiki/macOS
+  postFixup = lib.optionalString (stdenv.isDarwin) ''
+    cd "$out/lib/dino/plugins/"
+    for f in *.dylib; do
+      mv "$f" "$(basename "$f" .dylib).so"
+    done
+  '';
+
+  meta = with lib; {
+    description = "Modern Jabber/XMPP Client using GTK/Vala";
+    homepage = "https://github.com/dino/dino";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ qyliss tomfitzhenry ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/discord/darwin.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/discord/darwin.nix
new file mode 100644
index 000000000000..ef3a9031bb9f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/discord/darwin.nix
@@ -0,0 +1,34 @@
+{ pname, version, src, meta, stdenv, binaryName, desktopName, lib, undmg, makeWrapper
+, branch
+, withOpenASAR ? false, openasar
+, withVencord ? false, vencord }:
+
+stdenv.mkDerivation {
+  inherit pname version src meta;
+
+  nativeBuildInputs = [ undmg makeWrapper ];
+
+  sourceRoot = ".";
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/Applications
+    cp -r "${desktopName}.app" $out/Applications
+
+    # wrap executable to $out/bin
+    mkdir -p $out/bin
+    makeWrapper "$out/Applications/${desktopName}.app/Contents/MacOS/${binaryName}" "$out/bin/${binaryName}"
+
+    runHook postInstall
+  '';
+
+  postInstall = lib.strings.optionalString withOpenASAR ''
+    cp -f ${openasar} $out/Applications/${desktopName}.app/Contents/Resources/app.asar
+  '' + lib.strings.optionalString withVencord ''
+    mv $out/Applications/${desktopName}.app/Contents/Resources/app.asar $out/Applications/${desktopName}.app/Contents/Resources/_app.asar
+    mkdir $out/Applications/${desktopName}.app/Contents/Resources/app.asar
+    echo '{"name":"discord","main":"index.js"}' > $out/Applications/${desktopName}.app/Contents/Resources/app.asar/package.json
+    echo 'require("${vencord}/patcher.js")' > $out/Applications/${desktopName}.app/Contents/Resources/app.asar/index.js
+  '';
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/discord/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/discord/default.nix
new file mode 100644
index 000000000000..8980eb8a13cc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/discord/default.nix
@@ -0,0 +1,105 @@
+{ branch ? "stable", callPackage, fetchurl, lib, stdenv }:
+let
+  versions = if stdenv.isLinux then {
+    stable = "0.0.29";
+    ptb = "0.0.45";
+    canary = "0.0.166";
+    development = "0.0.232";
+  } else {
+    stable = "0.0.273";
+    ptb = "0.0.59";
+    canary = "0.0.283";
+    development = "0.0.8778";
+  };
+  version = versions.${branch};
+  srcs = rec {
+    x86_64-linux = {
+      stable = fetchurl {
+        url = "https://dl.discordapp.net/apps/linux/${version}/discord-${version}.tar.gz";
+        sha256 = "sha256-3vjOvkqMD7qKX2zRUbKrw5gHtE/v8WfH557rtagWIWc=";
+      };
+      ptb = fetchurl {
+        url = "https://dl-ptb.discordapp.net/apps/linux/${version}/discord-ptb-${version}.tar.gz";
+        sha256 = "cN70ZYl9hxWU5FSCpDbpOuR2Wsz6XtPSDoXOTvcCe7g=";
+      };
+      canary = fetchurl {
+        url = "https://dl-canary.discordapp.net/apps/linux/${version}/discord-canary-${version}.tar.gz";
+        sha256 = "sha256-bUbJpaHUf0ALJ1+4ACcVz0kpZpoXi0S4QO5yLiUZSgs=";
+      };
+      development = fetchurl {
+        url = "https://dl-development.discordapp.net/apps/linux/${version}/discord-development-${version}.tar.gz";
+        sha256 = "sha256-AsHdQvDLzflhuYO8V4R+2zjQYpRo+aPa8HYXc3taayY=";
+      };
+    };
+    x86_64-darwin = {
+      stable = fetchurl {
+        url = "https://dl.discordapp.net/apps/osx/${version}/Discord.dmg";
+        sha256 = "1vz2g83gz9ks9mxwx7gl7kys2xaw8ksnywwadrpsbj999fzlyyal";
+      };
+      ptb = fetchurl {
+        url = "https://dl-ptb.discordapp.net/apps/osx/${version}/DiscordPTB.dmg";
+        sha256 = "sha256-LS7KExVXkOv8O/GrisPMbBxg/pwoDXIOo1dK9wk1yB8=";
+      };
+      canary = fetchurl {
+        url = "https://dl-canary.discordapp.net/apps/osx/${version}/DiscordCanary.dmg";
+        sha256 = "0mqpk1szp46mih95x42ld32rrspc6jx1j7qdaxf01whzb3d4pi9l";
+      };
+      development = fetchurl {
+        url = "https://dl-development.discordapp.net/apps/osx/${version}/DiscordDevelopment.dmg";
+        sha256 = "sha256-K4rlShYhmsjT2QHjb6+IbCXJFK+9REIx/gW68bcVSVc=";
+      };
+    };
+    aarch64-darwin = x86_64-darwin;
+  };
+  src = srcs.${stdenv.hostPlatform.system}.${branch};
+
+  meta = with lib; {
+    description = "All-in-one cross-platform voice and text chat for gamers";
+    homepage = "https://discordapp.com/";
+    downloadPage = "https://discordapp.com/download";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = with maintainers; [ MP2E Scrumplex artturin infinidoge jopejoe1 ];
+    platforms = [ "x86_64-linux" "x86_64-darwin" "aarch64-darwin" ];
+    mainProgram = "discord";
+  };
+  package =
+    if stdenv.isLinux
+    then ./linux.nix
+    else ./darwin.nix;
+
+  openasar = callPackage ./openasar.nix { };
+
+  packages = (
+    builtins.mapAttrs
+      (_: value:
+        callPackage package (value
+          // {
+          inherit src version openasar branch;
+          meta = meta // { mainProgram = value.binaryName; };
+        }))
+      {
+        stable = rec {
+          pname = "discord";
+          binaryName = "Discord";
+          desktopName = "Discord";
+        };
+        ptb = rec {
+          pname = "discord-ptb";
+          binaryName = if stdenv.isLinux then "DiscordPTB" else desktopName;
+          desktopName = "Discord PTB";
+        };
+        canary = rec {
+          pname = "discord-canary";
+          binaryName = if stdenv.isLinux then "DiscordCanary" else desktopName;
+          desktopName = "Discord Canary";
+        };
+        development = rec {
+          pname = "discord-development";
+          binaryName = if stdenv.isLinux then "DiscordDevelopment" else desktopName;
+          desktopName = "Discord Development";
+        };
+      }
+  );
+in
+packages.${branch}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/discord/disable-breaking-updates.py b/nixpkgs/pkgs/applications/networking/instant-messengers/discord/disable-breaking-updates.py
new file mode 100644
index 000000000000..fca1b7694173
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/discord/disable-breaking-updates.py
@@ -0,0 +1,49 @@
+#!@pythonInterpreter@
+# slightly tweaked from the script created by @lionirdeadman
+# https://github.com/flathub/com.discordapp.Discord/blob/master/disable-breaking-updates.py
+"""
+Disable breaking updates which will prompt users to download a deb or tar file
+and lock them out of Discord making the program unusable.
+
+This will dramatically improve the experience :
+
+ 1) The maintainer doesn't need to be worried at all times of an update which will break Discord.
+ 2) People will not be locked out of the program while the maintainer runs to update it.
+
+"""
+
+import json
+import os
+import sys
+from pathlib import Path
+
+XDG_CONFIG_HOME = os.environ.get("XDG_CONFIG_HOME") or os.path.join(
+    os.path.expanduser("~"), ".config"
+)
+
+settings_path = Path(f"{XDG_CONFIG_HOME}/@configDirName@/settings.json")
+settings_path_temp = Path(f"{XDG_CONFIG_HOME}/@configDirName@/settings.json.tmp")
+
+if os.path.exists(settings_path):
+    with settings_path.open(encoding="utf-8") as settings_file:
+        try:
+            settings = json.load(settings_file)
+        except json.JSONDecodeError:
+            print("[Nix] settings.json is malformed, letting Discord fix itself")
+            sys.exit(0)
+else:
+    settings = {}
+
+if settings.get("SKIP_HOST_UPDATE"):
+    print("[Nix] Disabling updates already done")
+else:
+    skip_host_update = {"SKIP_HOST_UPDATE": True}
+    settings.update(skip_host_update)
+
+    os.makedirs(os.path.dirname(settings_path), exist_ok=True)
+
+    with settings_path_temp.open("w", encoding="utf-8") as settings_file_temp:
+        json.dump(settings, settings_file_temp, indent=2)
+
+    settings_path_temp.rename(settings_path)
+    print("[Nix] Disabled updates")
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/discord/linux.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/discord/linux.nix
new file mode 100644
index 000000000000..ce94764ed9b1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/discord/linux.nix
@@ -0,0 +1,162 @@
+{ pname, version, src, meta, binaryName, desktopName, autoPatchelfHook
+, makeDesktopItem, lib, stdenv, wrapGAppsHook, makeShellWrapper, alsa-lib, at-spi2-atk
+, at-spi2-core, atk, cairo, cups, dbus, expat, fontconfig, freetype, gdk-pixbuf
+, glib, gtk3, libcxx, libdrm, libglvnd, libnotify, libpulseaudio, libuuid, libX11
+, libXScrnSaver, libXcomposite, libXcursor, libXdamage, libXext, libXfixes
+, libXi, libXrandr, libXrender, libXtst, libxcb, libxshmfence, mesa, nspr, nss
+, pango, systemd, libappindicator-gtk3, libdbusmenu, writeScript, python3, runCommand
+, libunity
+, speechd
+, wayland
+, branch
+, withOpenASAR ? false, openasar
+, withVencord ? false, vencord
+, withTTS ? false }:
+
+let
+  disableBreakingUpdates = runCommand "disable-breaking-updates.py"
+    {
+      pythonInterpreter = "${python3.interpreter}";
+      configDirName = lib.toLower binaryName;
+      meta.mainProgram = "disable-breaking-updates.py";
+    } ''
+    mkdir -p $out/bin
+    cp ${./disable-breaking-updates.py} $out/bin/disable-breaking-updates.py
+    substituteAllInPlace $out/bin/disable-breaking-updates.py
+    chmod +x $out/bin/disable-breaking-updates.py
+  '';
+in
+
+stdenv.mkDerivation rec {
+  inherit pname version src meta;
+
+  nativeBuildInputs = [
+    alsa-lib
+    autoPatchelfHook
+    cups
+    libdrm
+    libuuid
+    libXdamage
+    libX11
+    libXScrnSaver
+    libXtst
+    libxcb
+    libxshmfence
+    mesa
+    nss
+    wrapGAppsHook
+    makeShellWrapper
+  ];
+
+  dontWrapGApps = true;
+
+  libPath = lib.makeLibraryPath ([
+    libcxx
+    systemd
+    libpulseaudio
+    libdrm
+    mesa
+    stdenv.cc.cc
+    alsa-lib
+    atk
+    at-spi2-atk
+    at-spi2-core
+    cairo
+    cups
+    dbus
+    expat
+    fontconfig
+    freetype
+    gdk-pixbuf
+    glib
+    gtk3
+    libglvnd
+    libnotify
+    libX11
+    libXcomposite
+    libunity
+    libuuid
+    libXcursor
+    libXdamage
+    libXext
+    libXfixes
+    libXi
+    libXrandr
+    libXrender
+    libXtst
+    nspr
+    libxcb
+    pango
+    libXScrnSaver
+    libappindicator-gtk3
+    libdbusmenu
+    wayland
+  ] ++ lib.optional withTTS speechd);
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/{bin,opt/${binaryName},share/pixmaps,share/icons/hicolor/256x256/apps}
+    mv * $out/opt/${binaryName}
+
+    chmod +x $out/opt/${binaryName}/${binaryName}
+    patchelf --set-interpreter ${stdenv.cc.bintools.dynamicLinker} \
+        $out/opt/${binaryName}/${binaryName}
+
+    wrapProgramShell $out/opt/${binaryName}/${binaryName} \
+        "''${gappsWrapperArgs[@]}" \
+        --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform=wayland --enable-features=WaylandWindowDecorations}}" \
+        ${lib.strings.optionalString withTTS "--add-flags \"--enable-speech-dispatcher\""} \
+        --prefix XDG_DATA_DIRS : "${gtk3}/share/gsettings-schemas/${gtk3.name}/" \
+        --prefix LD_LIBRARY_PATH : ${libPath}:$out/opt/${binaryName} \
+        --run "${lib.getExe disableBreakingUpdates}"
+
+    ln -s $out/opt/${binaryName}/${binaryName} $out/bin/
+    # Without || true the install would fail on case-insensitive filesystems
+    ln -s $out/opt/${binaryName}/${binaryName} $out/bin/${
+      lib.strings.toLower binaryName
+    } || true
+
+    ln -s $out/opt/${binaryName}/discord.png $out/share/pixmaps/${pname}.png
+    ln -s $out/opt/${binaryName}/discord.png $out/share/icons/hicolor/256x256/apps/${pname}.png
+
+    ln -s "$desktopItem/share/applications" $out/share/
+
+    runHook postInstall
+  '';
+
+  postInstall = lib.strings.optionalString withOpenASAR ''
+    cp -f ${openasar} $out/opt/${binaryName}/resources/app.asar
+  '' + lib.strings.optionalString withVencord ''
+    mv $out/opt/${binaryName}/resources/app.asar $out/opt/${binaryName}/resources/_app.asar
+    mkdir $out/opt/${binaryName}/resources/app.asar
+    echo '{"name":"discord","main":"index.js"}' > $out/opt/${binaryName}/resources/app.asar/package.json
+    echo 'require("${vencord}/patcher.js")' > $out/opt/${binaryName}/resources/app.asar/index.js
+  '';
+
+  desktopItem = makeDesktopItem {
+    name = pname;
+    exec = binaryName;
+    icon = pname;
+    inherit desktopName;
+    genericName = meta.description;
+    categories = [ "Network" "InstantMessaging" ];
+    mimeTypes = [ "x-scheme-handler/discord" ];
+  };
+
+  passthru = {
+    # make it possible to run disableBreakingUpdates standalone
+    inherit disableBreakingUpdates;
+    updateScript = writeScript "discord-update-script" ''
+      #!/usr/bin/env nix-shell
+      #!nix-shell -i bash -p curl gnugrep common-updater-scripts
+      set -eou pipefail;
+      url=$(curl -sI "https://discordapp.com/api/download/${
+        builtins.replaceStrings [ "discord-" "discord" ] [ "" "stable" ] pname
+      }?platform=linux&format=tar.gz" | grep -oP 'location: \K\S+')
+      version=''${url##https://dl*.discordapp.net/apps/linux/}
+      version=''${version%%/*.tar.gz}
+      update-source-version ${pname} "$version" --file=./pkgs/applications/networking/instant-messengers/discord/default.nix --version-key=${branch}
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/discord/openasar.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/discord/openasar.nix
new file mode 100644
index 000000000000..0c4bebcab96a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/discord/openasar.nix
@@ -0,0 +1,50 @@
+{ lib, stdenv, fetchFromGitHub, nodejs, bash, asar, unzip }:
+
+stdenv.mkDerivation rec {
+  pname = "openasar";
+  version = "unstable-2023-07-07";
+
+  src = fetchFromGitHub {
+    owner = "GooseMod";
+    repo = "OpenAsar";
+    rev = "5ac246dc92e9a2a9b314d899df728f37096c482b";
+    hash = "sha256-ODeVru4LCSl3rIeJCdezAwqzKP6IRo5WDaaUymqEcBs=";
+  };
+
+  postPatch = ''
+    # Hardcode unzip path
+    substituteInPlace ./src/updater/moduleUpdater.js \
+      --replace \'unzip\' \'${unzip}/bin/unzip\'
+    # Remove auto-update feature
+    echo "module.exports = async () => log('AsarUpdate', 'Removed');" > ./src/asarUpdate.js
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+
+    bash scripts/injectPolyfills.sh
+    substituteInPlace src/index.js --replace 'nightly' '${version}'
+    ${nodejs}/bin/node scripts/strip.js
+    ${asar}/bin/asar pack src app.asar
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install app.asar $out
+
+    runHook postInstall
+  '';
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Open-source alternative of Discord desktop's \"app.asar\".";
+    homepage = "https://openasar.dev";
+    license = licenses.mit;
+    maintainers = with maintainers; [ pedrohlc ];
+    platforms = nodejs.meta.platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/element/element-desktop.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/element/element-desktop.nix
new file mode 100644
index 000000000000..f3ec46f3641c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/element/element-desktop.nix
@@ -0,0 +1,154 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, makeWrapper
+, makeDesktopItem
+, fixup_yarn_lock
+, yarn
+, nodejs
+, fetchYarnDeps
+, electron
+, element-web
+, sqlcipher
+, callPackage
+, Security
+, AppKit
+, CoreServices
+, desktopToDarwinBundle
+, useKeytar ? true
+}:
+
+let
+  pinData = import ./pin.nix;
+  inherit (pinData.hashes) desktopSrcHash desktopYarnHash;
+  executableName = "element-desktop";
+  keytar = callPackage ./keytar { inherit Security AppKit; };
+  seshat = callPackage ./seshat { inherit CoreServices; };
+in
+stdenv.mkDerivation (finalAttrs: builtins.removeAttrs pinData [ "hashes" ] // {
+  pname = "element-desktop";
+  name = "${finalAttrs.pname}-${finalAttrs.version}";
+  src = fetchFromGitHub {
+    owner = "vector-im";
+    repo = "element-desktop";
+    rev = "v${finalAttrs.version}";
+    hash = desktopSrcHash;
+  };
+
+  offlineCache = fetchYarnDeps {
+    yarnLock = finalAttrs.src + "/yarn.lock";
+    sha256 = desktopYarnHash;
+  };
+
+  nativeBuildInputs = [ yarn fixup_yarn_lock nodejs makeWrapper ]
+    ++ lib.optionals stdenv.isDarwin [ desktopToDarwinBundle ];
+
+  inherit seshat;
+
+  configurePhase = ''
+    runHook preConfigure
+
+    export HOME=$(mktemp -d)
+    yarn config --offline set yarn-offline-mirror $offlineCache
+    fixup_yarn_lock yarn.lock
+    yarn install --offline --frozen-lockfile --ignore-platform --ignore-scripts --no-progress --non-interactive
+    patchShebangs node_modules/
+
+    runHook postConfigure
+  '';
+
+  # Only affects unused scripts in $out/share/element/electron/scripts. Also
+  # breaks because there are some `node`-scripts with a `npx`-shebang and
+  # this shouldn't be in the closure just for unused scripts.
+  dontPatchShebangs = true;
+
+  buildPhase = ''
+    runHook preBuild
+
+    yarn --offline run build:ts
+    yarn --offline run i18n
+    yarn --offline run build:res
+
+    rm -rf node_modules/matrix-seshat node_modules/keytar
+    ${lib.optionalString useKeytar "ln -s ${keytar} node_modules/keytar"}
+    ln -s $seshat node_modules/matrix-seshat
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    # resources
+    mkdir -p "$out/share/element"
+    ln -s '${element-web}' "$out/share/element/webapp"
+    cp -r '.' "$out/share/element/electron"
+    cp -r './res/img' "$out/share/element"
+    rm -rf "$out/share/element/electron/node_modules"
+    cp -r './node_modules' "$out/share/element/electron"
+    cp $out/share/element/electron/lib/i18n/strings/en_EN.json $out/share/element/electron/lib/i18n/strings/en-us.json
+    ln -s $out/share/element/electron/lib/i18n/strings/en{-us,}.json
+
+    # icons
+    for icon in $out/share/element/electron/build/icons/*.png; do
+      mkdir -p "$out/share/icons/hicolor/$(basename $icon .png)/apps"
+      ln -s "$icon" "$out/share/icons/hicolor/$(basename $icon .png)/apps/element.png"
+    done
+
+    # desktop item
+    mkdir -p "$out/share"
+    ln -s "${finalAttrs.desktopItem}/share/applications" "$out/share/applications"
+
+    # executable wrapper
+    # LD_PRELOAD workaround for sqlcipher not found: https://github.com/matrix-org/seshat/issues/102
+    makeWrapper '${electron}/bin/electron' "$out/bin/${executableName}" \
+      --set LD_PRELOAD ${sqlcipher}/lib/libsqlcipher.so \
+      --add-flags "$out/share/element/electron" \
+      --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}"
+
+    runHook postInstall
+  '';
+
+  # The desktop item properties should be kept in sync with data from upstream:
+  # https://github.com/vector-im/element-desktop/blob/develop/package.json
+  desktopItem = makeDesktopItem {
+    name = "element-desktop";
+    exec = "${executableName} %u";
+    icon = "element";
+    desktopName = "Element";
+    genericName = "Matrix Client";
+    comment = finalAttrs.meta.description;
+    categories = [ "Network" "InstantMessaging" "Chat" ];
+    startupWMClass = "element";
+    mimeTypes = [ "x-scheme-handler/element" ];
+  };
+
+  postFixup = lib.optionalString stdenv.isDarwin ''
+    cp build/icon.icns $out/Applications/Element.app/Contents/Resources/element.icns
+  '';
+
+  passthru = {
+    updateScript = ./update.sh;
+
+    # TL;DR: keytar is optional while seshat isn't.
+    #
+    # This prevents building keytar when `useKeytar` is set to `false`, because
+    # if libsecret is unavailable (e.g. set to `null` or fails to build), then
+    # this package wouldn't even considered for building because
+    # "one of the dependencies failed to build",
+    # although the dependency wouldn't even be used.
+    #
+    # It needs to be `passthru` anyways because other packages do depend on it.
+    inherit keytar;
+  };
+
+  meta = with lib; {
+    description = "A feature-rich client for Matrix.org";
+    homepage = "https://element.io/";
+    changelog = "https://github.com/vector-im/element-desktop/blob/v${finalAttrs.version}/CHANGELOG.md";
+    license = licenses.asl20;
+    maintainers = teams.matrix.members;
+    inherit (electron.meta) platforms;
+    mainProgram = "element-desktop";
+  };
+})
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/element/element-web-wrapper.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/element/element-web-wrapper.nix
new file mode 100644
index 000000000000..c9a143ecb49e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/element/element-web-wrapper.nix
@@ -0,0 +1,26 @@
+{ stdenv
+, jq
+, element-web-unwrapped
+, conf ? { }
+}:
+
+if (conf == { }) then element-web-unwrapped else
+stdenv.mkDerivation rec {
+  pname = "${element-web-unwrapped.pname}-wrapped";
+  inherit (element-web-unwrapped) version meta;
+
+  dontUnpack = true;
+
+  nativeBuildInputs = [ jq ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out
+    ln -s ${element-web-unwrapped}/* $out
+    rm $out/config.json
+    jq -s '.[0] * $conf' "${element-web-unwrapped}/config.json" --argjson "conf" '${builtins.toJSON conf}' > "$out/config.json"
+
+    runHook postInstall
+  '';
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/element/element-web.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/element/element-web.nix
new file mode 100644
index 000000000000..4e80744a4c0f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/element/element-web.nix
@@ -0,0 +1,87 @@
+{ lib
+, stdenv
+, runCommand
+, fetchFromGitHub
+, fetchYarnDeps
+, writeText
+, jq
+, yarn
+, fixup_yarn_lock
+, nodejs
+, jitsi-meet
+}:
+
+let
+  pinData = import ./pin.nix;
+  inherit (pinData.hashes) webSrcHash webYarnHash;
+  noPhoningHome = {
+    disable_guests = true; # disable automatic guest account registration at matrix.org
+  };
+in
+stdenv.mkDerivation (finalAttrs: builtins.removeAttrs pinData [ "hashes" ] // {
+  pname = "element-web";
+
+  src = fetchFromGitHub {
+    owner = "vector-im";
+    repo = finalAttrs.pname;
+    rev = "v${finalAttrs.version}";
+    hash = webSrcHash;
+  };
+
+  offlineCache = fetchYarnDeps {
+    yarnLock = finalAttrs.src + "/yarn.lock";
+    sha256 = webYarnHash;
+  };
+
+  nativeBuildInputs = [ yarn fixup_yarn_lock jq nodejs ];
+
+  configurePhase = ''
+    runHook preConfigure
+
+    export HOME=$PWD/tmp
+    # with the update of openssl3, some key ciphers are not supported anymore
+    # this flag will allow those codecs again as a workaround
+    # see https://medium.com/the-node-js-collection/node-js-17-is-here-8dba1e14e382#5f07
+    # and https://github.com/vector-im/element-web/issues/21043
+    export NODE_OPTIONS=--openssl-legacy-provider
+    mkdir -p $HOME
+
+    fixup_yarn_lock yarn.lock
+    yarn config --offline set yarn-offline-mirror $offlineCache
+    yarn install --offline --frozen-lockfile --ignore-platform --ignore-scripts --no-progress --non-interactive
+    patchShebangs node_modules
+
+    runHook postConfigure
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+
+    export VERSION=${finalAttrs.version}
+    yarn build:res --offline
+    yarn build:module_system --offline
+    yarn build:bundle --offline
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    cp -R webapp $out
+    cp ${jitsi-meet}/libs/external_api.min.js $out/jitsi_external_api.min.js
+    echo "${finalAttrs.version}" > "$out/version"
+    jq -s '.[0] * $conf' "config.sample.json" --argjson "conf" '${builtins.toJSON noPhoningHome}' > "$out/config.json"
+
+    runHook postInstall
+  '';
+
+  meta = {
+    description = "A glossy Matrix collaboration client for the web";
+    homepage = "https://element.io/";
+    changelog = "https://github.com/vector-im/element-web/blob/v${finalAttrs.version}/CHANGELOG.md";
+    maintainers = lib.teams.matrix.members;
+    license = lib.licenses.asl20;
+    platforms = lib.platforms.all;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/element/keytar/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/element/keytar/default.nix
new file mode 100644
index 000000000000..84196371be3a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/element/keytar/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchFromGitHub, nodejs, python3, callPackage, removeReferencesTo
+, pkg-config, libsecret, xcbuild, Security, AppKit, fetchNpmDeps, npmHooks }:
+
+let
+  pinData = lib.importJSON ./pin.json;
+
+in stdenv.mkDerivation rec {
+  pname = "keytar";
+  inherit (pinData) version;
+
+  src = fetchFromGitHub {
+    owner = "atom";
+    repo = "node-keytar";
+    rev = "v${version}";
+    hash = pinData.srcHash;
+  };
+
+  nativeBuildInputs = [
+    nodejs python3 pkg-config
+    npmHooks.npmConfigHook
+  ]
+    ++ lib.optional  stdenv.isDarwin xcbuild;
+
+  buildInputs = lib.optionals (!stdenv.isDarwin) [ libsecret ]
+    ++ lib.optionals stdenv.isDarwin [ Security AppKit ];
+
+  npmDeps = fetchNpmDeps {
+    inherit src;
+    hash = pinData.npmHash;
+  };
+
+  doCheck = false;
+
+  installPhase = ''
+    runHook preInstall
+    shopt -s extglob
+    rm -rf node_modules
+    mkdir -p $out
+    cp -r ./!(build) $out
+    install -D -t $out/build/Release build/Release/keytar.node
+    ${removeReferencesTo}/bin/remove-references-to -t ${stdenv.cc.cc} $out/build/Release/keytar.node
+    runHook postInstall
+  '';
+
+  disallowedReferences = [ stdenv.cc.cc ];
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/element/keytar/pin.json b/nixpkgs/pkgs/applications/networking/instant-messengers/element/keytar/pin.json
new file mode 100644
index 000000000000..626f5a62ea1d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/element/keytar/pin.json
@@ -0,0 +1,5 @@
+{
+  "version": "7.9.0",
+  "srcHash": "sha256-Mnl0Im2hZJXJEtyXb5rgMntekkUAnOG2MN1bwfgh0eg=",
+  "npmHash": "sha256-ldfRWV+HXBdBYO2ZiGbVFSHV4/bMG43U7w+sJ4kpVUY="
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/element/keytar/update.sh b/nixpkgs/pkgs/applications/networking/instant-messengers/element/keytar/update.sh
new file mode 100755
index 000000000000..9b8d014f03c9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/element/keytar/update.sh
@@ -0,0 +1,36 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -I nixpkgs=../../../../../../ -i bash -p wget prefetch-npm-deps nix-prefetch-github
+
+if [ "$#" -gt 1 ] || [[ "$1" == -* ]]; then
+  echo "Regenerates packaging data for the keytar package."
+  echo "Usage: $0 [git release tag]"
+  exit 1
+fi
+
+version="$1"
+
+set -euo pipefail
+
+if [ -z "$version" ]; then
+  version="$(wget -O- "https://api.github.com/repos/atom/node-keytar/releases?per_page=1" | jq -r '.[0].tag_name')"
+fi
+
+# strip leading "v"
+version="${version#v}"
+
+SRC="https://raw.githubusercontent.com/atom/node-keytar/v$version"
+
+wget "$SRC/package-lock.json"
+wget "$SRC/package.json"
+npm_hash=$(prefetch-npm-deps package-lock.json)
+rm -rf node_modules package.json package-lock.json
+
+src_hash=$(nix-prefetch-github atom node-keytar --rev v${version} | jq -r .hash)
+
+cat > pin.json << EOF
+{
+  "version": "$version",
+  "srcHash": "$src_hash",
+  "npmHash": "$npm_hash"
+}
+EOF
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/element/pin.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/element/pin.nix
new file mode 100644
index 000000000000..ab6178bbf905
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/element/pin.nix
@@ -0,0 +1,9 @@
+{
+  "version" = "1.11.40";
+  "hashes" = {
+    "desktopSrcHash" = "sha256-GbmRhdTcbwhDnFv0ljaf3SfoRmuw+zqcetKfCrnxwZ8=";
+    "desktopYarnHash" = "0w8m318gqm5s2ws9l314l3pm6d6biqp1h58v35zisz2j777kcp76";
+    "webSrcHash" = "sha256-TCK3MqKodeIt6Nh1+QK2v6DgC1PHrcKljsN2hHMwHe4=";
+    "webYarnHash" = "0lx42rz9s6ssdp5d31y5pcaigbs290mn1mnpknbcfdygw0pra897";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/element/seshat/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/element/seshat/default.nix
new file mode 100644
index 000000000000..b24b0d7b71ba
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/element/seshat/default.nix
@@ -0,0 +1,56 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub, callPackage, sqlcipher, nodejs, python3, yarn, fixup_yarn_lock, CoreServices, fetchYarnDeps, removeReferencesTo }:
+
+let
+  pinData = lib.importJSON ./pin.json;
+
+in rustPlatform.buildRustPackage rec {
+  pname = "seshat-node";
+  inherit (pinData) version cargoHash;
+
+  src = fetchFromGitHub {
+    owner = "matrix-org";
+    repo = "seshat";
+    rev = version;
+    hash = pinData.srcHash;
+  };
+
+  sourceRoot = "${src.name}/seshat-node/native";
+
+  nativeBuildInputs = [ nodejs python3 yarn ];
+  buildInputs = [ sqlcipher ] ++ lib.optional stdenv.isDarwin CoreServices;
+
+  npm_config_nodedir = nodejs;
+
+  yarnOfflineCache = fetchYarnDeps {
+    yarnLock = src + "/seshat-node/yarn.lock";
+    sha256 = pinData.yarnHash;
+  };
+
+  buildPhase = ''
+    runHook preBuild
+    cd ..
+    chmod u+w . ./yarn.lock
+    export HOME=$PWD/tmp
+    mkdir -p $HOME
+    yarn config --offline set yarn-offline-mirror $yarnOfflineCache
+    ${fixup_yarn_lock}/bin/fixup_yarn_lock yarn.lock
+    yarn install --offline --frozen-lockfile --ignore-platform --ignore-scripts --no-progress --non-interactive
+    patchShebangs node_modules/
+    node_modules/.bin/neon build --release
+    runHook postBuild
+  '';
+
+  doCheck = false;
+
+  installPhase = ''
+    runHook preInstall
+    shopt -s extglob
+    rm -rf native/!(index.node)
+    rm -rf node_modules $HOME
+    cp -r . $out
+    ${removeReferencesTo}/bin/remove-references-to -t ${stdenv.cc.cc} $out/native/index.node
+    runHook postInstall
+  '';
+
+  disallowedReferences = [ stdenv.cc.cc ];
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/element/seshat/pin.json b/nixpkgs/pkgs/applications/networking/instant-messengers/element/seshat/pin.json
new file mode 100644
index 000000000000..f0648d11f2e0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/element/seshat/pin.json
@@ -0,0 +1,6 @@
+{
+  "version": "2.3.3",
+  "srcHash": "sha256-HmKHWFoO8TQ9S/RcJnJ3h85/2uSkqGrgLnX82hkux4Q=",
+  "yarnHash": "1cbkv8ap7f8vxl5brzqb86d2dyxg555sz67cldrp0vgnk8sq6ibp",
+  "cargoHash": "sha256-WsgTbQ91aZZV5sIuFVjsccdiXivjtAUC1Zs/4uNk1zU="
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/element/seshat/update.sh b/nixpkgs/pkgs/applications/networking/instant-messengers/element/seshat/update.sh
new file mode 100755
index 000000000000..6e7e75e66bce
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/element/seshat/update.sh
@@ -0,0 +1,49 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -I nixpkgs=../../../../../../ -i bash -p wget prefetch-yarn-deps yarn nix-prefetch nix-prefetch-github
+
+if [ "$#" -gt 1 ] || [[ "$1" == -* ]]; then
+  echo "Regenerates packaging data for the seshat package."
+  echo "Usage: $0 [git release tag]"
+  exit 1
+fi
+
+version="$1"
+
+set -euo pipefail
+
+if [ -z "$version" ]; then
+  version="$(wget -O- "https://api.github.com/repos/matrix-org/seshat/tags" | jq -r '.[] | .name' | sort --version-sort | tail -1)"
+fi
+
+SRC="https://raw.githubusercontent.com/matrix-org/seshat/$version"
+
+tmpdir=$(mktemp -d)
+trap 'rm -rf "$tmpdir"' EXIT
+
+pushd $tmpdir
+wget "$SRC/seshat-node/yarn.lock"
+yarn_hash=$(prefetch-yarn-deps yarn.lock)
+popd
+
+src_hash=$(nix-prefetch-github matrix-org seshat --rev ${version} | jq -r .hash)
+
+cat > pin.json << EOF
+{
+  "version": "$version",
+  "srcHash": "$src_hash",
+  "yarnHash": "$yarn_hash",
+  "cargoHash": "0000000000000000000000000000000000000000000000000000"
+}
+EOF
+
+cargo_hash=$(nix-prefetch "{ sha256 }: (import ../../../../../.. {}).element-desktop.seshat.cargoDeps")
+
+cat > pin.json << EOF
+{
+  "version": "$version",
+  "srcHash": "$src_hash",
+  "yarnHash": "$yarn_hash",
+  "cargoHash": "$cargo_hash"
+}
+EOF
+
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/element/update.sh b/nixpkgs/pkgs/applications/networking/instant-messengers/element/update.sh
new file mode 100755
index 000000000000..c68a347e68ae
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/element/update.sh
@@ -0,0 +1,55 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -I nixpkgs=../../../../../ -i bash -p nix wget prefetch-yarn-deps nix-prefetch-github
+
+if [ "$#" -gt 1 ] || [[ "$1" == -* ]]; then
+  echo "Regenerates packaging data for the element packages."
+  echo "Usage: $0 [git release tag]"
+  exit 1
+fi
+
+version="$1"
+
+set -euo pipefail
+
+if [ -z "$version" ]; then
+  version="$(wget -q -O- "https://api.github.com/repos/vector-im/element-desktop/releases?per_page=1" | jq -r '.[0].tag_name')"
+fi
+
+# strip leading "v"
+version="${version#v}"
+
+# Element Web
+web_src="https://raw.githubusercontent.com/vector-im/element-web/v$version"
+web_src_hash=$(nix-prefetch-github vector-im element-web --rev v${version} | jq -r .hash)
+
+web_tmpdir=$(mktemp -d)
+trap 'rm -rf "$web_tmpdir"' EXIT
+
+pushd $web_tmpdir
+wget -q "$web_src/yarn.lock"
+web_yarn_hash=$(prefetch-yarn-deps yarn.lock)
+popd
+
+# Element Desktop
+desktop_src="https://raw.githubusercontent.com/vector-im/element-desktop/v$version"
+desktop_src_hash=$(nix-prefetch-github vector-im element-desktop --rev v${version} | jq -r .hash)
+
+desktop_tmpdir=$(mktemp -d)
+trap 'rm -rf "$desktop_tmpdir"' EXIT
+
+pushd $desktop_tmpdir
+wget -q "$desktop_src/yarn.lock"
+desktop_yarn_hash=$(prefetch-yarn-deps yarn.lock)
+popd
+
+cat > pin.nix << EOF
+{
+  "version" = "$version";
+  "hashes" = {
+    "desktopSrcHash" = "$desktop_src_hash";
+    "desktopYarnHash" = "$desktop_yarn_hash";
+    "webSrcHash" = "$web_src_hash";
+    "webYarnHash" = "$web_yarn_hash";
+  };
+}
+EOF
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/feishu/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/feishu/default.nix
new file mode 100644
index 000000000000..7255ff4d971e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/feishu/default.nix
@@ -0,0 +1,200 @@
+{ addOpenGLRunpath
+, alsa-lib
+, at-spi2-atk
+, at-spi2-core
+, atk
+, autoPatchelfHook
+, cairo
+, cups
+, curl
+, dbus
+, dpkg
+, expat
+, fetchurl
+, fontconfig
+, freetype
+, gdk-pixbuf
+, glib
+, glibc
+, gnutls
+, gtk3
+, lib
+, libGL
+, libX11
+, libXScrnSaver
+, libXcomposite
+, libXcursor
+, libXdamage
+, libXext
+, libXfixes
+, libXi
+, libXrandr
+, libXrender
+, libXtst
+, libappindicator-gtk3
+, libcxx
+, libdbusmenu
+, libdrm
+, libgcrypt
+, libglvnd
+, libnotify
+, libpulseaudio
+, libuuid
+, libxcb
+, libxkbcommon
+, libxkbfile
+, libxshmfence
+, makeShellWrapper
+, mesa
+, nspr
+, nss
+, pango
+, pciutils
+, pipewire
+, pixman
+, stdenv
+, systemd
+, wayland
+, wrapGAppsHook
+, xdg-utils
+
+# for custom command line arguments, e.g. "--use-gl=desktop"
+, commandLineArgs ? ""
+}:
+
+stdenv.mkDerivation rec {
+  version = "6.1.11";
+  pname = "feishu";
+  packageHash = "e82bd3ef"; # A hash value used in the download url
+
+  src = fetchurl {
+    url = "https://sf3-cn.feishucdn.com/obj/ee-appcenter/${packageHash}/Feishu-linux_x64-${version}.deb";
+    hash = "sha256-IBNMNOcOYIdiTlr4+Ziju7Pbf9XJV0O+w2arHTa1zZ0=";
+  };
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+    makeShellWrapper
+    dpkg
+  ];
+
+  buildInputs = [
+    gtk3
+
+    # for autopatchelf
+    alsa-lib
+    cups
+    curl
+    libXdamage
+    libXtst
+    libdrm
+    libgcrypt
+    libpulseaudio
+    libxshmfence
+    mesa
+    nspr
+    nss
+  ];
+
+  rpath = lib.makeLibraryPath [
+    alsa-lib
+    at-spi2-atk
+    at-spi2-core
+    atk
+    cairo
+    cups
+    curl
+    dbus
+    expat
+    fontconfig
+    freetype
+    gdk-pixbuf
+    glib
+    glibc
+    gnutls
+    libGL
+    libX11
+    libXScrnSaver
+    libXcomposite
+    libXcursor
+    libXdamage
+    libXext
+    libXfixes
+    libXi
+    libXrandr
+    libXrender
+    libXtst
+    libappindicator-gtk3
+    libcxx
+    libdbusmenu
+    libdrm
+    libgcrypt
+    libglvnd
+    libnotify
+    libpulseaudio
+    libuuid
+    libxcb
+    libxkbcommon
+    libxkbfile
+    libxshmfence
+    mesa
+    nspr
+    nss
+    pango
+    pciutils
+    pipewire
+    pixman
+    stdenv.cc.cc
+    systemd
+    wayland
+    xdg-utils
+  ];
+
+  dontUnpack = true;
+  installPhase = ''
+    # This deb file contains a setuid binary,
+    # so 'dpkg -x' doesn't work here.
+    dpkg --fsys-tarfile $src | tar --extract
+    mkdir -p $out
+    mv usr/share $out/
+    mv opt/ $out/
+
+    substituteInPlace $out/share/applications/bytedance-feishu.desktop \
+      --replace /usr/bin/bytedance-feishu-stable $out/opt/bytedance/feishu/bytedance-feishu
+
+    # Wrap feishu and vulcan
+    # Feishu is the main executable, vulcan is the builtin browser
+    for executable in $out/opt/bytedance/feishu/{feishu,vulcan/vulcan}; do
+      wrapProgram $executable \
+        --prefix XDG_DATA_DIRS    :  "$XDG_ICON_DIRS:$GSETTINGS_SCHEMAS_PATH" \
+        --prefix LD_LIBRARY_PATH  :  ${rpath}:$out/opt/bytedance/feishu:${addOpenGLRunpath.driverLink}/share \
+        --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}" \
+        ${lib.optionalString (commandLineArgs!="") "--add-flags ${lib.escapeShellArg commandLineArgs}"}
+    done
+
+    mkdir -p $out/share/icons/hicolor
+    base="$out/opt/bytedance/feishu"
+    for size in 16 24 32 48 64 128 256; do
+      mkdir -p $out/share/icons/hicolor/''${size}x''${size}/apps
+      ln -s $base/product_logo_$size.png $out/share/icons/hicolor/''${size}x''${size}/apps/bytedance-feishu.png
+    done
+
+    mkdir -p $out/bin
+    ln -s $out/opt/bytedance/feishu/bytedance-feishu $out/bin/bytedance-feishu
+
+    # feishu comes with a bundled libcurl.so
+    # and has many dependencies that are hard to satisfy
+    # e.g. openldap version 2.4
+    # so replace it with our own libcurl.so
+    ln -sf ${curl}/lib/libcurl.so $out/opt/bytedance/feishu/libcurl.so
+  '';
+
+  meta = with lib; {
+    description = "An all-in-one collaboration suite";
+    homepage = "https://www.feishu.cn/en/";
+    downloadPage = "https://www.feishu.cn/en/#en_home_download_block";
+    license = licenses.unfree;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ billhuang ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/ferdi/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/ferdi/default.nix
new file mode 100644
index 000000000000..82f808be3b6e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/ferdi/default.nix
@@ -0,0 +1,38 @@
+{ lib, mkFranzDerivation, fetchurl, xorg, xdg-utils, buildEnv, writeShellScriptBin }:
+
+let
+  mkFranzDerivation' = mkFranzDerivation.override {
+    xdg-utils = buildEnv {
+      name = "xdg-utils-for-ferdi";
+      paths = [
+        xdg-utils
+        (lib.hiPrio (writeShellScriptBin "xdg-open" ''
+          unset GDK_BACKEND
+          exec ${xdg-utils}/bin/xdg-open "$@"
+        ''))
+      ];
+    };
+  };
+in
+mkFranzDerivation' rec {
+  pname = "ferdi";
+  name = "Ferdi";
+  version = "5.8.1";
+  src = fetchurl {
+    url = "https://master.dl.sourceforge.net/project/ferdi.mirror/v${version}/ferdi_${version}_amd64.deb";
+    sha256 = "sha256-Bl7bM5iDQlfPSZxksqlg7GbuwWlm53QkOf/TQEg3/n0=";
+  };
+  extraBuildInputs = [ xorg.libxshmfence ];
+  meta = with lib; {
+    description = "Combine your favorite messaging services into one application";
+    homepage = "https://getferdi.com/";
+    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+    license = licenses.asl20;
+    maintainers = with maintainers; [ davidtwco ma27 ];
+    platforms = [ "x86_64-linux" ];
+    hydraPlatforms = [ ];
+    knownVulnerabilities = [
+      "CVE-2022-32320"
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/ferdium/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/ferdium/default.nix
new file mode 100644
index 000000000000..c9c275817020
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/ferdium/default.nix
@@ -0,0 +1,28 @@
+{ lib, mkFranzDerivation, fetchurl, xorg, nix-update-script }:
+
+mkFranzDerivation rec {
+  pname = "ferdium";
+  name = "Ferdium";
+  version = "6.4.1";
+  src = fetchurl {
+    url = "https://github.com/ferdium/ferdium-app/releases/download/v${version}/Ferdium-linux-${version}-amd64.deb";
+    hash = "sha256-Oai5z6/CE/R2rH9LBVhY7eaKpF8eIIYI+3vjJPbq+rw=";
+  };
+
+  extraBuildInputs = [ xorg.libxshmfence ];
+
+  passthru = {
+    updateScript = nix-update-script {
+      extraArgs = [ "--override-filename" ./default.nix ];
+    };
+  };
+
+  meta = with lib; {
+    description = "All your services in one place built by the community";
+    homepage = "https://ferdium.org/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ magnouvean ];
+    platforms = [ "x86_64-linux" ];
+    hydraPlatforms = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/flare-signal/Cargo.lock b/nixpkgs/pkgs/applications/networking/instant-messengers/flare-signal/Cargo.lock
new file mode 100644
index 000000000000..085eec078c76
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/flare-signal/Cargo.lock
@@ -0,0 +1,4465 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "adler32"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234"
+
+[[package]]
+name = "aead"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877"
+dependencies = [
+ "generic-array",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "aes"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8"
+dependencies = [
+ "cfg-if",
+ "cipher 0.3.0",
+ "cpufeatures",
+ "ctr 0.8.0",
+ "opaque-debug",
+]
+
+[[package]]
+name = "aes"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2"
+dependencies = [
+ "cfg-if",
+ "cipher 0.4.4",
+ "cpufeatures",
+ "zeroize",
+]
+
+[[package]]
+name = "aes-gcm"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df5f85a83a7d8b0442b6aa7b504b8212c1733da07b98aae43d4bc21b2cb3cdf6"
+dependencies = [
+ "aead",
+ "aes 0.7.5",
+ "cipher 0.3.0",
+ "ctr 0.8.0",
+ "ghash",
+ "subtle",
+]
+
+[[package]]
+name = "aes-gcm-siv"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cfde8146762f3c5f3c5cd41aa17a71f3188df09d5857192b658510d850e16068"
+dependencies = [
+ "aead",
+ "aes 0.7.5",
+ "cipher 0.3.0",
+ "ctr 0.7.0",
+ "polyval",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6748e8def348ed4d14996fa801f4122cd763fff530258cdc03f64b25f89d3a5a"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "android-tzdata"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.75"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
+
+[[package]]
+name = "arrayref"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545"
+
+[[package]]
+name = "arrayvec"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711"
+
+[[package]]
+name = "ashpd"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7370b58af1d7e96df3ca0f454b57e69acf9aa42ed2d7337bd206923bae0d5754"
+dependencies = [
+ "async-std",
+ "enumflags2",
+ "futures-channel",
+ "futures-util",
+ "gdk4-wayland",
+ "gdk4-x11",
+ "gtk4",
+ "once_cell",
+ "rand 0.8.5",
+ "serde",
+ "serde_repr",
+ "url",
+ "zbus",
+]
+
+[[package]]
+name = "async-broadcast"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c48ccdbf6ca6b121e0f586cbc0e73ae440e56c67c30fa0873b4e110d9c26d2b"
+dependencies = [
+ "event-listener",
+ "futures-core",
+]
+
+[[package]]
+name = "async-channel"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35"
+dependencies = [
+ "concurrent-queue",
+ "event-listener",
+ "futures-core",
+]
+
+[[package]]
+name = "async-executor"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fa3dc5f2a8564f07759c008b9109dc0d39de92a88d5588b8a5036d286383afb"
+dependencies = [
+ "async-lock",
+ "async-task",
+ "concurrent-queue",
+ "fastrand 1.9.0",
+ "futures-lite",
+ "slab",
+]
+
+[[package]]
+name = "async-fs"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06"
+dependencies = [
+ "async-lock",
+ "autocfg",
+ "blocking",
+ "futures-lite",
+]
+
+[[package]]
+name = "async-global-executor"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1b6f5d7df27bd294849f8eec66ecfc63d11814df7a4f5d74168a2394467b776"
+dependencies = [
+ "async-channel",
+ "async-executor",
+ "async-io",
+ "async-lock",
+ "blocking",
+ "futures-lite",
+ "once_cell",
+]
+
+[[package]]
+name = "async-io"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af"
+dependencies = [
+ "async-lock",
+ "autocfg",
+ "cfg-if",
+ "concurrent-queue",
+ "futures-lite",
+ "log",
+ "parking",
+ "polling",
+ "rustix 0.37.23",
+ "slab",
+ "socket2 0.4.9",
+ "waker-fn",
+]
+
+[[package]]
+name = "async-lock"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b"
+dependencies = [
+ "event-listener",
+]
+
+[[package]]
+name = "async-process"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a9d28b1d97e08915212e2e45310d47854eafa69600756fc735fb788f75199c9"
+dependencies = [
+ "async-io",
+ "async-lock",
+ "autocfg",
+ "blocking",
+ "cfg-if",
+ "event-listener",
+ "futures-lite",
+ "rustix 0.37.23",
+ "signal-hook",
+ "windows-sys",
+]
+
+[[package]]
+name = "async-recursion"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e97ce7de6cf12de5d7226c73f5ba9811622f4db3a5b91b55c53e987e5f91cba"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.29",
+]
+
+[[package]]
+name = "async-std"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d"
+dependencies = [
+ "async-channel",
+ "async-global-executor",
+ "async-io",
+ "async-lock",
+ "crossbeam-utils",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-lite",
+ "gloo-timers",
+ "kv-log-macro",
+ "log",
+ "memchr",
+ "once_cell",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+ "wasm-bindgen-futures",
+]
+
+[[package]]
+name = "async-task"
+version = "4.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ecc7ab41815b3c653ccd2978ec3255c81349336702dfdf62ee6f7069b12a3aae"
+
+[[package]]
+name = "async-trait"
+version = "0.1.73"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.29",
+]
+
+[[package]]
+name = "async-tungstenite"
+version = "0.17.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1b71b31561643aa8e7df3effe284fa83ab1a840e52294c5f4bd7bfd8b2becbb"
+dependencies = [
+ "futures-io",
+ "futures-util",
+ "log",
+ "pin-project-lite",
+ "rustls-native-certs",
+ "tokio",
+ "tokio-rustls",
+ "tungstenite",
+]
+
+[[package]]
+name = "atomic-waker"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1181e1e0d1fce796a03db1ae795d67167da795f9cf4a39c37589e85ef57f26d3"
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "backtrace"
+version = "0.3.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide 0.7.1",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base64"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff"
+
+[[package]]
+name = "base64"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+[[package]]
+name = "base64"
+version = "0.21.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d"
+
+[[package]]
+name = "base64ct"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b"
+
+[[package]]
+name = "bincode"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635"
+
+[[package]]
+name = "blake3"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "199c42ab6972d92c9f8995f086273d25c42fc0f7b2a1fcefba465c1352d25ba5"
+dependencies = [
+ "arrayref",
+ "arrayvec",
+ "cc",
+ "cfg-if",
+ "constant_time_eq",
+ "digest 0.10.7",
+]
+
+[[package]]
+name = "block"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
+
+[[package]]
+name = "block-buffer"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "block-modes"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2cb03d1bed155d89dce0f845b7899b18a9a163e148fd004e1c28421a783e2d8e"
+dependencies = [
+ "block-padding 0.2.1",
+ "cipher 0.3.0",
+]
+
+[[package]]
+name = "block-padding"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae"
+
+[[package]]
+name = "block-padding"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "blocking"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77231a1c8f801696fc0123ec6150ce92cffb8e164a02afb9c8ddee0e9b65ad65"
+dependencies = [
+ "async-channel",
+ "async-lock",
+ "async-task",
+ "atomic-waker",
+ "fastrand 1.9.0",
+ "futures-lite",
+ "log",
+]
+
+[[package]]
+name = "blurhash"
+version = "0.1.1"
+source = "git+https://github.com/marc0x1/blurhash-rs?branch=pixbuf-patch#c07c0cbcd29b2277e8c1d0f6ae07b2e0fad1ed52"
+dependencies = [
+ "gdk-pixbuf",
+ "image 0.23.14",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1"
+
+[[package]]
+name = "bytemuck"
+version = "1.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "bytes"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
+
+[[package]]
+name = "cairo-rs"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d859b656775a6b1dd078d3e5924884e6ea88aa649a7fdde03d5b2ec56ffcc10b"
+dependencies = [
+ "bitflags 2.4.0",
+ "cairo-sys-rs",
+ "glib",
+ "libc",
+ "once_cell",
+ "thiserror",
+]
+
+[[package]]
+name = "cairo-sys-rs"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd4d115132e01c0165e3bf5f56aedee8980b0b96ede4eb000b693c05a8adb8ff"
+dependencies = [
+ "glib-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "cbc"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6"
+dependencies = [
+ "cipher 0.4.4",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+dependencies = [
+ "jobserver",
+ "libc",
+]
+
+[[package]]
+name = "cfg-expr"
+version = "0.15.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b40ccee03b5175c18cde8f37e7d2a33bcef6f8ec8f7cc0d81090d1bb380949c9"
+dependencies = [
+ "smallvec",
+ "target-lexicon",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chacha20"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c80e5460aa66fe3b91d40bcbdab953a597b60053e34d684ac6903f863b680a6"
+dependencies = [
+ "cfg-if",
+ "cipher 0.3.0",
+ "cpufeatures",
+ "zeroize",
+]
+
+[[package]]
+name = "chacha20poly1305"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a18446b09be63d457bbec447509e85f662f32952b035ce892290396bc0b0cff5"
+dependencies = [
+ "aead",
+ "chacha20",
+ "cipher 0.3.0",
+ "poly1305",
+ "zeroize",
+]
+
+[[package]]
+name = "chrono"
+version = "0.4.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5"
+dependencies = [
+ "android-tzdata",
+ "iana-time-zone",
+ "num-traits",
+ "serde",
+ "winapi",
+]
+
+[[package]]
+name = "cipher"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "cipher"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad"
+dependencies = [
+ "crypto-common",
+ "inout",
+ "zeroize",
+]
+
+[[package]]
+name = "cmake"
+version = "0.1.50"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a31c789563b815f77f4250caee12365734369f942439b7defd71e18a48197130"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "color_quant"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
+
+[[package]]
+name = "concurrent-queue"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62ec6771ecfa0762d24683ee5a32ad78487a3d3afdc0fb8cae19d2c5deb50b7c"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "constant_time_eq"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2"
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+dependencies = [
+ "cfg-if",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "crossbeam-utils",
+ "memoffset 0.9.0",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "rand_core 0.6.4",
+ "typenum",
+]
+
+[[package]]
+name = "crypto-mac"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714"
+dependencies = [
+ "generic-array",
+ "subtle",
+]
+
+[[package]]
+name = "ctr"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a232f92a03f37dd7d7dd2adc67166c77e9cd88de5b019b9a9eecfaeaf7bfd481"
+dependencies = [
+ "cipher 0.3.0",
+]
+
+[[package]]
+name = "ctr"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea"
+dependencies = [
+ "cipher 0.3.0",
+]
+
+[[package]]
+name = "curve25519-dalek"
+version = "3.2.1"
+source = "git+https://github.com/Schmiddiii/curve25519-dalek?rev=1b9f81352bb659999a46af961f069d635ca432d3#1b9f81352bb659999a46af961f069d635ca432d3"
+dependencies = [
+ "byteorder",
+ "digest 0.9.0",
+ "rand_core 0.5.1",
+ "serde",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "deflate"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73770f8e1fe7d64df17ca66ad28994a0a623ea497fa69486e14984e715c5d174"
+dependencies = [
+ "adler32",
+ "byteorder",
+]
+
+[[package]]
+name = "derivative"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "digest"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer 0.10.4",
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "displaydoc"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.29",
+]
+
+[[package]]
+name = "dunce"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b"
+
+[[package]]
+name = "either"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+
+[[package]]
+name = "enumflags2"
+version = "0.7.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c041f5090df68b32bcd905365fd51769c8b9d553fe87fde0b683534f10c01bd2"
+dependencies = [
+ "enumflags2_derive",
+ "serde",
+]
+
+[[package]]
+name = "enumflags2_derive"
+version = "0.7.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e9a1f9f7d83e59740248a6e14ecf93929ade55027844dfcea78beafccc15745"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.29",
+]
+
+[[package]]
+name = "env_logger"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0"
+dependencies = [
+ "humantime",
+ "is-terminal",
+ "log",
+ "regex",
+ "termcolor",
+]
+
+[[package]]
+name = "equivalent"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+
+[[package]]
+name = "err-derive"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c34a887c8df3ed90498c1c437ce21f211c8e27672921a8ffa293cb8d6d4caa9e"
+dependencies = [
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "rustversion",
+ "syn 1.0.109",
+ "synstructure",
+]
+
+[[package]]
+name = "errno"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b30f669a7961ef1631673d2766cc92f52d64f7ef354d4fe0ddfd30ed52f0f4f"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "event-listener"
+version = "2.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "fastrand"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764"
+
+[[package]]
+name = "fdeflate"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d329bdeac514ee06249dabc27877490f17f5d371ec693360768b838e19f3ae10"
+dependencies = [
+ "simd-adler32",
+]
+
+[[package]]
+name = "field-offset"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f"
+dependencies = [
+ "memoffset 0.9.0",
+ "rustc_version",
+]
+
+[[package]]
+name = "fixedbitset"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
+
+[[package]]
+name = "flare"
+version = "0.10.0"
+dependencies = [
+ "ashpd",
+ "async-trait",
+ "blurhash",
+ "env_logger",
+ "err-derive",
+ "futures",
+ "gdk4",
+ "gettext-rs",
+ "gtk4",
+ "hex",
+ "image 0.23.14",
+ "lazy_static",
+ "libadwaita",
+ "libsignal-service",
+ "libspelling",
+ "log",
+ "once_cell",
+ "oo7",
+ "presage",
+ "presage-store-sled",
+ "qrcode-generator",
+ "rand 0.8.5",
+ "regex",
+ "serde",
+ "serde_json",
+ "sled",
+ "sourceview5",
+ "tokio",
+ "tracing",
+ "url",
+ "zbus",
+ "zeroize",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c6c98ee8095e9d1dcbf2fcc6d95acccb90d1c81db1e44725c6a984b1dbdfb010"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide 0.7.1",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "fs2"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "fs_extra"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c"
+
+[[package]]
+name = "futures"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
+
+[[package]]
+name = "futures-lite"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce"
+dependencies = [
+ "fastrand 1.9.0",
+ "futures-core",
+ "futures-io",
+ "memchr",
+ "parking",
+ "pin-project-lite",
+ "waker-fn",
+]
+
+[[package]]
+name = "futures-macro"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.29",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
+
+[[package]]
+name = "futures-task"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
+
+[[package]]
+name = "futures-util"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "fxhash"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
+dependencies = [
+ "byteorder",
+]
+
+[[package]]
+name = "gdk-pixbuf"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbc9c2ed73a81d556b65d08879ba4ee58808a6b1927ce915262185d6d547c6f3"
+dependencies = [
+ "gdk-pixbuf-sys",
+ "gio",
+ "glib",
+ "libc",
+ "once_cell",
+]
+
+[[package]]
+name = "gdk-pixbuf-sys"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7"
+dependencies = [
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "gdk4"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6982d9815ed6ac95b0467b189e81f29dea26d08a732926ec113e65744ed3f96c"
+dependencies = [
+ "cairo-rs",
+ "gdk-pixbuf",
+ "gdk4-sys",
+ "gio",
+ "glib",
+ "libc",
+ "pango",
+]
+
+[[package]]
+name = "gdk4-sys"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbab43f332a3cf1df9974da690b5bb0e26720ed09a228178ce52175372dcfef0"
+dependencies = [
+ "cairo-sys-rs",
+ "gdk-pixbuf-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "pango-sys",
+ "pkg-config",
+ "system-deps",
+]
+
+[[package]]
+name = "gdk4-wayland"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0db9102ff11e55bd65e153c1192abc21ddfa45ede90622e423d4e4a0e5d5f313"
+dependencies = [
+ "gdk4",
+ "gdk4-wayland-sys",
+ "gio",
+ "glib",
+ "libc",
+]
+
+[[package]]
+name = "gdk4-wayland-sys"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d48159be256ae0212d5a2b9884627197d08082c7168b28775b53a0f9885d5624"
+dependencies = [
+ "glib-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "gdk4-x11"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28c9bbf8ea1ea8469e74c3fdfafc142c9e14810a27f89ddb01b5e9076a60a450"
+dependencies = [
+ "gdk4",
+ "gdk4-x11-sys",
+ "gio",
+ "glib",
+ "libc",
+]
+
+[[package]]
+name = "gdk4-x11-sys"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3de1709370758192369f5329aa593847797f1c693c95e8a261e9b2e06a5f125"
+dependencies = [
+ "gdk4-sys",
+ "glib-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.9.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "gettext-rs"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e49ea8a8fad198aaa1f9655a2524b64b70eb06b2f3ff37da407566c93054f364"
+dependencies = [
+ "gettext-sys",
+ "locale_config",
+]
+
+[[package]]
+name = "gettext-sys"
+version = "0.21.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c63ce2e00f56a206778276704bbe38564c8695249fdc8f354b4ef71c57c3839d"
+dependencies = [
+ "cc",
+ "temp-dir",
+]
+
+[[package]]
+name = "ghash"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1583cc1656d7839fd3732b80cf4f38850336cdb9b8ded1cd399ca62958de3c99"
+dependencies = [
+ "opaque-debug",
+ "polyval",
+]
+
+[[package]]
+name = "gif"
+version = "0.11.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3edd93c6756b4dfaf2709eafcc345ba2636565295c198a9cfbf75fa5e3e00b06"
+dependencies = [
+ "color_quant",
+ "weezl",
+]
+
+[[package]]
+name = "gimli"
+version = "0.28.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0"
+
+[[package]]
+name = "gio"
+version = "0.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7884cba6b1c5db1607d970cadf44b14a43913d42bc68766eea6a5e2fe0891524"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-util",
+ "gio-sys",
+ "glib",
+ "libc",
+ "once_cell",
+ "pin-project-lite",
+ "smallvec",
+ "thiserror",
+]
+
+[[package]]
+name = "gio-sys"
+version = "0.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+ "winapi",
+]
+
+[[package]]
+name = "glib"
+version = "0.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "331156127e8166dd815cf8d2db3a5beb492610c716c03ee6db4f2d07092af0a7"
+dependencies = [
+ "bitflags 2.4.0",
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-task",
+ "futures-util",
+ "gio-sys",
+ "glib-macros",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "memchr",
+ "once_cell",
+ "smallvec",
+ "thiserror",
+]
+
+[[package]]
+name = "glib-macros"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "179643c50bf28d20d2f6eacd2531a88f2f5d9747dd0b86b8af1e8bb5dd0de3c0"
+dependencies = [
+ "heck 0.4.1",
+ "proc-macro-crate",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.29",
+]
+
+[[package]]
+name = "glib-sys"
+version = "0.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898"
+dependencies = [
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "gloo-timers"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "gobject-sys"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44"
+dependencies = [
+ "glib-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "graphene-rs"
+version = "0.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b2228cda1505613a7a956cca69076892cfbda84fc2b7a62b94a41a272c0c401"
+dependencies = [
+ "glib",
+ "graphene-sys",
+ "libc",
+]
+
+[[package]]
+name = "graphene-sys"
+version = "0.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc4144cee8fc8788f2a9b73dc5f1d4e1189d1f95305c4cb7bd9c1af1cfa31f59"
+dependencies = [
+ "glib-sys",
+ "libc",
+ "pkg-config",
+ "system-deps",
+]
+
+[[package]]
+name = "gsk4"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc25855255120f294d874acd6eaf4fbed7ce1cdc550e2d8415ea57fafbe816d5"
+dependencies = [
+ "cairo-rs",
+ "gdk4",
+ "glib",
+ "graphene-rs",
+ "gsk4-sys",
+ "libc",
+ "pango",
+]
+
+[[package]]
+name = "gsk4-sys"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1ecf3a63bf1223d68f80f72cc896c4d8c80482fbce1c9a12c66d3de7290ee46"
+dependencies = [
+ "cairo-sys-rs",
+ "gdk4-sys",
+ "glib-sys",
+ "gobject-sys",
+ "graphene-sys",
+ "libc",
+ "pango-sys",
+ "system-deps",
+]
+
+[[package]]
+name = "gtk4"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3b095b26f2a2df70be1805d3590eeb9d7a05ecb5be9649b82defc72dc56228c"
+dependencies = [
+ "cairo-rs",
+ "field-offset",
+ "futures-channel",
+ "gdk-pixbuf",
+ "gdk4",
+ "gio",
+ "glib",
+ "graphene-rs",
+ "gsk4",
+ "gtk4-macros",
+ "gtk4-sys",
+ "libc",
+ "pango",
+]
+
+[[package]]
+name = "gtk4-macros"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d57ec49cf9b657f69a05bca8027cff0a8dfd0c49e812be026fc7311f2163832f"
+dependencies = [
+ "anyhow",
+ "proc-macro-crate",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "gtk4-sys"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b0bdde87c50317b4f355bcbb4a9c2c414ece1b7c824fb4ad4ba8f3bdb2c6603"
+dependencies = [
+ "cairo-sys-rs",
+ "gdk-pixbuf-sys",
+ "gdk4-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "graphene-sys",
+ "gsk4-sys",
+ "libc",
+ "pango-sys",
+ "system-deps",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a"
+
+[[package]]
+name = "headers"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3e372db8e5c0d213e0cd0b9be18be2aca3d44cf2fe30a9d46a65581cd454584"
+dependencies = [
+ "base64 0.13.1",
+ "bitflags 1.3.2",
+ "bytes",
+ "headers-core",
+ "http",
+ "httpdate",
+ "mime",
+ "sha1",
+]
+
+[[package]]
+name = "headers-core"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429"
+dependencies = [
+ "http",
+]
+
+[[package]]
+name = "heck"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b"
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
+name = "hkdf"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01706d578d5c281058480e673ae4086a9f4710d8df1ad80a5b03e39ece5f886b"
+dependencies = [
+ "digest 0.9.0",
+ "hmac 0.11.0",
+]
+
+[[package]]
+name = "hkdf"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437"
+dependencies = [
+ "hmac 0.12.1",
+]
+
+[[package]]
+name = "hmac"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b"
+dependencies = [
+ "crypto-mac",
+ "digest 0.9.0",
+]
+
+[[package]]
+name = "hmac"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
+dependencies = [
+ "digest 0.10.7",
+]
+
+[[package]]
+name = "html-escape"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d1ad449764d627e22bfd7cd5e8868264fc9236e07c752972b4080cd351cb476"
+dependencies = [
+ "utf8-width",
+]
+
+[[package]]
+name = "http"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
+
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[package]]
+name = "hyper"
+version = "0.14.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2 0.4.9",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-rustls"
+version = "0.23.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c"
+dependencies = [
+ "http",
+ "hyper",
+ "log",
+ "rustls",
+ "rustls-native-certs",
+ "tokio",
+ "tokio-rustls",
+]
+
+[[package]]
+name = "hyper-timeout"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1"
+dependencies = [
+ "hyper",
+ "pin-project-lite",
+ "tokio",
+ "tokio-io-timeout",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.57"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "windows",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "idna"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "image"
+version = "0.23.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24ffcb7e7244a9bf19d35bf2883b9c080c4ced3c07a9895572178cdb8f13f6a1"
+dependencies = [
+ "bytemuck",
+ "byteorder",
+ "color_quant",
+ "gif",
+ "jpeg-decoder",
+ "num-iter",
+ "num-rational 0.3.2",
+ "num-traits",
+ "png 0.16.8",
+ "scoped_threadpool",
+ "tiff",
+]
+
+[[package]]
+name = "image"
+version = "0.24.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f3dfdbdd72063086ff443e297b61695500514b1e41095b6fb9a5ab48a70a711"
+dependencies = [
+ "bytemuck",
+ "byteorder",
+ "color_quant",
+ "num-rational 0.4.1",
+ "num-traits",
+ "png 0.17.10",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d"
+dependencies = [
+ "equivalent",
+ "hashbrown",
+]
+
+[[package]]
+name = "inout"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5"
+dependencies = [
+ "block-padding 0.3.3",
+ "generic-array",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
+dependencies = [
+ "hermit-abi",
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "is-terminal"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
+dependencies = [
+ "hermit-abi",
+ "rustix 0.38.9",
+ "windows-sys",
+]
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
+
+[[package]]
+name = "jobserver"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "jpeg-decoder"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "229d53d58899083193af11e15917b5640cd40b29ff475a1fe4ef725deb02d0f2"
+dependencies = [
+ "rayon",
+]
+
+[[package]]
+name = "js-sys"
+version = "0.3.64"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "kv-log-macro"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f"
+dependencies = [
+ "log",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+dependencies = [
+ "spin",
+]
+
+[[package]]
+name = "libadwaita"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06444f4ca05a60693da6e9e2b591bd40a298e65a118a8d5e830771718b3e0253"
+dependencies = [
+ "gdk-pixbuf",
+ "gdk4",
+ "gio",
+ "glib",
+ "gtk4",
+ "libadwaita-sys",
+ "libc",
+ "pango",
+]
+
+[[package]]
+name = "libadwaita-sys"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "021cfe3d1fcfa82411765a791f7e9b32f35dd98ce88d2e3fa10e7320f5cc8ce7"
+dependencies = [
+ "gdk4-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "gtk4-sys",
+ "libc",
+ "pango-sys",
+ "system-deps",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.147"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
+
+[[package]]
+name = "libm"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4"
+
+[[package]]
+name = "libsignal-protocol"
+version = "0.1.0"
+source = "git+https://github.com/signalapp/libsignal?tag=v0.28.1#86b2fcc427bf32530866f4e30b18707c1f3682f7"
+dependencies = [
+ "aes 0.7.5",
+ "aes-gcm-siv",
+ "arrayref",
+ "async-trait",
+ "block-modes",
+ "curve25519-dalek",
+ "displaydoc",
+ "generic-array",
+ "hex",
+ "hkdf 0.11.0",
+ "hmac 0.11.0",
+ "itertools",
+ "log",
+ "num_enum",
+ "pqcrypto-kyber",
+ "pqcrypto-traits",
+ "prost 0.9.0",
+ "prost-build 0.9.0",
+ "rand 0.7.3",
+ "sha2 0.9.9",
+ "signal-crypto",
+ "subtle",
+ "thiserror",
+ "typenum",
+ "uuid",
+ "x25519-dalek",
+]
+
+[[package]]
+name = "libsignal-service"
+version = "0.1.0"
+source = "git+https://github.com/whisperfish/libsignal-service-rs?rev=8789920#87899201123b8095cd0f30317620a6d5b7fd652b"
+dependencies = [
+ "aes 0.7.5",
+ "aes-gcm",
+ "async-trait",
+ "base64 0.13.1",
+ "bincode",
+ "block-modes",
+ "bytes",
+ "chrono",
+ "derivative",
+ "futures",
+ "hex",
+ "hkdf 0.12.3",
+ "hmac 0.12.1",
+ "libsignal-protocol",
+ "log",
+ "phonenumber",
+ "prost 0.10.4",
+ "prost-build 0.10.4",
+ "rand 0.7.3",
+ "serde",
+ "serde_json",
+ "sha2 0.10.7",
+ "thiserror",
+ "url",
+ "uuid",
+ "zkgroup",
+]
+
+[[package]]
+name = "libsignal-service-hyper"
+version = "0.1.0"
+source = "git+https://github.com/whisperfish/libsignal-service-rs?rev=8789920#87899201123b8095cd0f30317620a6d5b7fd652b"
+dependencies = [
+ "async-trait",
+ "async-tungstenite",
+ "base64 0.13.1",
+ "bytes",
+ "futures",
+ "headers",
+ "hyper",
+ "hyper-rustls",
+ "hyper-timeout",
+ "libsignal-service",
+ "log",
+ "mpart-async",
+ "rustls-pemfile 0.3.0",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "tokio",
+ "tokio-rustls",
+ "url",
+]
+
+[[package]]
+name = "libspelling"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "850363056ea48497686407e7e583c50c793896c151bbe7139ad4ea02fbf15e76"
+dependencies = [
+ "gio",
+ "glib",
+ "gtk4",
+ "libc",
+ "libspelling-sys",
+ "sourceview5",
+]
+
+[[package]]
+name = "libspelling-sys"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "377675d9465da676ebc05742743d5e5bc53a49be1138f463583181aea97da3c6"
+dependencies = [
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "gtk4-sys",
+ "libc",
+ "sourceview5-sys",
+ "system-deps",
+]
+
+[[package]]
+name = "linked-hash-map"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503"
+
+[[package]]
+name = "locale_config"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d2c35b16f4483f6c26f0e4e9550717a2f6575bcd6f12a53ff0c490a94a6934"
+dependencies = [
+ "lazy_static",
+ "objc",
+ "objc-foundation",
+ "regex",
+ "winapi",
+]
+
+[[package]]
+name = "lock_api"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+dependencies = [
+ "value-bag",
+]
+
+[[package]]
+name = "lru-cache"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c"
+dependencies = [
+ "linked-hash-map",
+]
+
+[[package]]
+name = "malloc_buf"
+version = "0.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "matrix-sdk-store-encryption"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ddee75c3cca58f3a323283dc4e849d19d52988903f907ed0fb53dcad5d6fd25"
+dependencies = [
+ "blake3",
+ "chacha20poly1305",
+ "displaydoc",
+ "hmac 0.12.1",
+ "pbkdf2 0.11.0",
+ "rand 0.8.5",
+ "serde",
+ "serde_json",
+ "sha2 0.10.7",
+ "thiserror",
+ "zeroize",
+]
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memoffset"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
+[[package]]
+name = "mime_guess"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef"
+dependencies = [
+ "mime",
+ "unicase",
+]
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "791daaae1ed6889560f8c4359194f56648355540573244a5448a83ba1ecc7435"
+dependencies = [
+ "adler32",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b"
+dependencies = [
+ "adler",
+ "autocfg",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+ "simd-adler32",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2"
+dependencies = [
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "windows-sys",
+]
+
+[[package]]
+name = "mpart-async"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ea6ab2359d45d2401bd7ba5ce5a67582f2abb872ea9ec17f78efb6ac3591864"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-util",
+ "http",
+ "httparse",
+ "log",
+ "memchr",
+ "mime_guess",
+ "percent-encoding",
+ "pin-project-lite",
+ "rand 0.8.5",
+ "thiserror",
+ "tokio",
+ "tokio-util",
+]
+
+[[package]]
+name = "multimap"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a"
+
+[[package]]
+name = "nix"
+version = "0.26.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if",
+ "libc",
+ "memoffset 0.7.1",
+ "static_assertions",
+]
+
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "num"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b05180d69e3da0e530ba2a1dae5110317e49e3b7f3d41be227dc5f92e49ee7af"
+dependencies = [
+ "num-bigint",
+ "num-complex",
+ "num-integer",
+ "num-iter",
+ "num-rational 0.4.1",
+ "num-traits",
+]
+
+[[package]]
+name = "num-bigint"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-bigint-dig"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151"
+dependencies = [
+ "byteorder",
+ "lazy_static",
+ "libm",
+ "num-integer",
+ "num-iter",
+ "num-traits",
+ "rand 0.8.5",
+ "serde",
+ "smallvec",
+ "zeroize",
+]
+
+[[package]]
+name = "num-complex"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-iter"
+version = "0.1.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-rational"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-rational"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0"
+dependencies = [
+ "autocfg",
+ "num-bigint",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "num_enum"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9"
+dependencies = [
+ "num_enum_derive",
+]
+
+[[package]]
+name = "num_enum_derive"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "objc"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
+dependencies = [
+ "malloc_buf",
+]
+
+[[package]]
+name = "objc-foundation"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9"
+dependencies = [
+ "block",
+ "objc",
+ "objc_id",
+]
+
+[[package]]
+name = "objc_id"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b"
+dependencies = [
+ "objc",
+]
+
+[[package]]
+name = "object"
+version = "0.32.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77ac5bbd07aea88c60a577a1ce218075ffd59208b2d7ca97adf9bfc5aeb21ebe"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+
+[[package]]
+name = "oncemutex"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d11de466f4a3006fe8a5e7ec84e93b79c70cb992ae0aa0eb631ad2df8abfe2"
+
+[[package]]
+name = "oo7"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "220729ba847d98e1a9902c05e41dae79ce4a0b913dad68bc540dd3120a8c2b6b"
+dependencies = [
+ "aes 0.8.3",
+ "async-global-executor",
+ "async-std",
+ "byteorder",
+ "cbc",
+ "cipher 0.4.4",
+ "digest 0.10.7",
+ "futures-util",
+ "hkdf 0.12.3",
+ "hmac 0.12.1",
+ "num",
+ "num-bigint-dig",
+ "once_cell",
+ "pbkdf2 0.12.2",
+ "rand 0.8.5",
+ "serde",
+ "sha2 0.10.7",
+ "zbus",
+ "zeroize",
+]
+
+[[package]]
+name = "opaque-debug"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "ordered-stream"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "pango"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06a9e54b831d033206160096b825f2070cf5fda7e35167b1c01e9e774f9202d1"
+dependencies = [
+ "gio",
+ "glib",
+ "libc",
+ "once_cell",
+ "pango-sys",
+]
+
+[[package]]
+name = "pango-sys"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "parking"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14f2252c834a40ed9bb5422029649578e63aa341ac401f74e719dd1afda8394e"
+
+[[package]]
+name = "parking_lot"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99"
+dependencies = [
+ "instant",
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc"
+dependencies = [
+ "cfg-if",
+ "instant",
+ "libc",
+ "redox_syscall 0.2.16",
+ "smallvec",
+ "winapi",
+]
+
+[[package]]
+name = "password-hash"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700"
+dependencies = [
+ "base64ct",
+ "rand_core 0.6.4",
+ "subtle",
+]
+
+[[package]]
+name = "pbkdf2"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917"
+dependencies = [
+ "digest 0.10.7",
+ "hmac 0.12.1",
+ "password-hash",
+ "sha2 0.10.7",
+]
+
+[[package]]
+name = "pbkdf2"
+version = "0.12.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2"
+dependencies = [
+ "digest 0.10.7",
+ "hmac 0.12.1",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
+
+[[package]]
+name = "petgraph"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9"
+dependencies = [
+ "fixedbitset",
+ "indexmap",
+]
+
+[[package]]
+name = "phonenumber"
+version = "0.3.2+8.13.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34749f64ea9d76f10cdc8a859588b57775f59177c7dd91f744d620bd62982d6f"
+dependencies = [
+ "bincode",
+ "either",
+ "fnv",
+ "itertools",
+ "lazy_static",
+ "nom",
+ "quick-xml",
+ "regex",
+ "regex-cache",
+ "serde",
+ "serde_derive",
+ "thiserror",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+
+[[package]]
+name = "png"
+version = "0.16.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c3287920cb847dee3de33d301c463fba14dda99db24214ddf93f83d3021f4c6"
+dependencies = [
+ "bitflags 1.3.2",
+ "crc32fast",
+ "deflate",
+ "miniz_oxide 0.3.7",
+]
+
+[[package]]
+name = "png"
+version = "0.17.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd75bf2d8dd3702b9707cdbc56a5b9ef42cec752eb8b3bafc01234558442aa64"
+dependencies = [
+ "bitflags 1.3.2",
+ "crc32fast",
+ "fdeflate",
+ "flate2",
+ "miniz_oxide 0.7.1",
+]
+
+[[package]]
+name = "poksho"
+version = "0.7.0"
+source = "git+https://github.com/signalapp/libsignal?tag=v0.28.1#86b2fcc427bf32530866f4e30b18707c1f3682f7"
+dependencies = [
+ "curve25519-dalek",
+ "hmac 0.11.0",
+ "sha2 0.9.9",
+]
+
+[[package]]
+name = "polling"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce"
+dependencies = [
+ "autocfg",
+ "bitflags 1.3.2",
+ "cfg-if",
+ "concurrent-queue",
+ "libc",
+ "log",
+ "pin-project-lite",
+ "windows-sys",
+]
+
+[[package]]
+name = "poly1305"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "048aeb476be11a4b6ca432ca569e375810de9294ae78f4774e78ea98a9246ede"
+dependencies = [
+ "cpufeatures",
+ "opaque-debug",
+ "universal-hash",
+]
+
+[[package]]
+name = "polyval"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "opaque-debug",
+ "universal-hash",
+]
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "pqcrypto-internals"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9d34bec6abe2283e6de7748b68b292d1ffa2203397e3e71380ff8418a49fb46"
+dependencies = [
+ "cc",
+ "dunce",
+ "getrandom 0.2.10",
+ "libc",
+]
+
+[[package]]
+name = "pqcrypto-kyber"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe9d9695c19e525d5366c913562a331fbeef9a2ad801d9a9ded61a0e4c2fe0fb"
+dependencies = [
+ "cc",
+ "glob",
+ "libc",
+ "pqcrypto-internals",
+ "pqcrypto-traits",
+]
+
+[[package]]
+name = "pqcrypto-traits"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97e91cb6af081c6daad5fa705f8adb0634c027662052cb3174bdf2957bf07e25"
+
+[[package]]
+name = "presage"
+version = "0.6.0-dev"
+source = "git+https://github.com/MarcusGrass/presage?rev=d6d8fff#d6d8fff5f5e6429e6fe9d3c6d388323d094fdab6"
+dependencies = [
+ "base64 0.12.3",
+ "futures",
+ "libsignal-service",
+ "libsignal-service-hyper",
+ "log",
+ "parking_lot",
+ "rand 0.7.3",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "tokio",
+ "url",
+]
+
+[[package]]
+name = "presage-store-sled"
+version = "0.6.0-dev"
+source = "git+https://github.com/MarcusGrass/presage?rev=d6d8fff#d6d8fff5f5e6429e6fe9d3c6d388323d094fdab6"
+dependencies = [
+ "async-trait",
+ "base64 0.12.3",
+ "fs_extra",
+ "log",
+ "matrix-sdk-store-encryption",
+ "presage",
+ "prost 0.10.4",
+ "prost-build 0.10.4",
+ "serde",
+ "serde_json",
+ "sha2 0.10.7",
+ "sled",
+ "thiserror",
+]
+
+[[package]]
+name = "proc-macro-crate"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919"
+dependencies = [
+ "once_cell",
+ "toml_edit",
+]
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.66"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "prost"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "444879275cb4fd84958b1a1d5420d15e6fcf7c235fe47f053c9c2a80aceb6001"
+dependencies = [
+ "bytes",
+ "prost-derive 0.9.0",
+]
+
+[[package]]
+name = "prost"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "71adf41db68aa0daaefc69bb30bcd68ded9b9abaad5d1fbb6304c4fb390e083e"
+dependencies = [
+ "bytes",
+ "prost-derive 0.10.1",
+]
+
+[[package]]
+name = "prost-build"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62941722fb675d463659e49c4f3fe1fe792ff24fe5bbaa9c08cd3b98a1c354f5"
+dependencies = [
+ "bytes",
+ "heck 0.3.3",
+ "itertools",
+ "lazy_static",
+ "log",
+ "multimap",
+ "petgraph",
+ "prost 0.9.0",
+ "prost-types 0.9.0",
+ "regex",
+ "tempfile",
+ "which",
+]
+
+[[package]]
+name = "prost-build"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ae5a4388762d5815a9fc0dea33c56b021cdc8dde0c55e0c9ca57197254b0cab"
+dependencies = [
+ "bytes",
+ "cfg-if",
+ "cmake",
+ "heck 0.4.1",
+ "itertools",
+ "lazy_static",
+ "log",
+ "multimap",
+ "petgraph",
+ "prost 0.10.4",
+ "prost-types 0.10.1",
+ "regex",
+ "tempfile",
+ "which",
+]
+
+[[package]]
+name = "prost-derive"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9cc1a3263e07e0bf68e96268f37665207b49560d98739662cdfaae215c720fe"
+dependencies = [
+ "anyhow",
+ "itertools",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "prost-derive"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b670f45da57fb8542ebdbb6105a925fe571b67f9e7ed9f47a06a84e72b4e7cc"
+dependencies = [
+ "anyhow",
+ "itertools",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "prost-types"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "534b7a0e836e3c482d2693070f982e39e7611da9695d4d1f5a4b186b51faef0a"
+dependencies = [
+ "bytes",
+ "prost 0.9.0",
+]
+
+[[package]]
+name = "prost-types"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d0a014229361011dc8e69c8a1ec6c2e8d0f2af7c91e3ea3f5b2170298461e68"
+dependencies = [
+ "bytes",
+ "prost 0.10.4",
+]
+
+[[package]]
+name = "qrcode-generator"
+version = "4.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc713c23eb7e1a5f18b84e72be88b82a617ee25783a524a38f0caa4c986b2d76"
+dependencies = [
+ "html-escape",
+ "image 0.24.7",
+ "qrcodegen",
+]
+
+[[package]]
+name = "qrcodegen"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4339fc7a1021c9c1621d87f5e3505f2805c8c105420ba2f2a4df86814590c142"
+
+[[package]]
+name = "quick-xml"
+version = "0.28.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ce5e73202a820a31f8a0ee32ada5e21029c81fd9e3ebf668a40832e4219d9d1"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
+dependencies = [
+ "getrandom 0.1.16",
+ "libc",
+ "rand_chacha 0.2.2",
+ "rand_core 0.5.1",
+ "rand_hc",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha 0.3.1",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
+dependencies = [
+ "getrandom 0.1.16",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom 0.2.10",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
+dependencies = [
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rayon"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-utils",
+ "num_cpus",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "regex"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81bc1d4caf89fac26a70747fe603c130093b53c773888797a6329091246d651a"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata",
+ "regex-syntax 0.7.4",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fed1ceff11a1dddaee50c9dc8e4938bd106e9d89ae372f192311e7da498e3b69"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax 0.7.4",
+]
+
+[[package]]
+name = "regex-cache"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f7b62d69743b8b94f353b6b7c3deb4c5582828328bcb8d5fedf214373808793"
+dependencies = [
+ "lru-cache",
+ "oncemutex",
+ "regex",
+ "regex-syntax 0.6.29",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
+
+[[package]]
+name = "regex-syntax"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2"
+
+[[package]]
+name = "ring"
+version = "0.16.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
+dependencies = [
+ "cc",
+ "libc",
+ "once_cell",
+ "spin",
+ "untrusted",
+ "web-sys",
+ "winapi",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+
+[[package]]
+name = "rustc_version"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "rustix"
+version = "0.37.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d69718bf81c6127a49dc64e44a742e8bb9213c0ff8869a22c308f84c1d4ab06"
+dependencies = [
+ "bitflags 1.3.2",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys 0.3.8",
+ "windows-sys",
+]
+
+[[package]]
+name = "rustix"
+version = "0.38.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9bfe0f2582b4931a45d1fa608f8a8722e8b3c7ac54dd6d5f3b3212791fedef49"
+dependencies = [
+ "bitflags 2.4.0",
+ "errno",
+ "libc",
+ "linux-raw-sys 0.4.5",
+ "windows-sys",
+]
+
+[[package]]
+name = "rustls"
+version = "0.20.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f"
+dependencies = [
+ "log",
+ "ring",
+ "sct",
+ "webpki",
+]
+
+[[package]]
+name = "rustls-native-certs"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00"
+dependencies = [
+ "openssl-probe",
+ "rustls-pemfile 1.0.3",
+ "schannel",
+ "security-framework",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ee86d63972a7c661d1536fefe8c3c8407321c3df668891286de28abcd087360"
+dependencies = [
+ "base64 0.13.1",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2"
+dependencies = [
+ "base64 0.21.2",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"
+
+[[package]]
+name = "ryu"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
+
+[[package]]
+name = "schannel"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88"
+dependencies = [
+ "windows-sys",
+]
+
+[[package]]
+name = "scoped_threadpool"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8"
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "sct"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "security-framework"
+version = "2.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "semver"
+version = "1.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918"
+
+[[package]]
+name = "serde"
+version = "1.0.187"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30a7fe14252655bd1e578af19f5fa00fe02fd0013b100ca6b49fde31c41bae4c"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.187"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e46b2a6ca578b3f1d4501b12f78ed4692006d79d82a1a7c561c12dbc3d625eb8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.29",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.105"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "693151e1ac27563d6dbcec9dee9fbd5da8539b20fa14ad3752b2e6d363ace360"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_repr"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8725e1dfadb3a50f7e5ce0b1a540466f6ed3fe7a0fca2ac2b8b831d31316bd00"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.29",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "sha-1"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6"
+dependencies = [
+ "block-buffer 0.9.0",
+ "cfg-if",
+ "cpufeatures",
+ "digest 0.9.0",
+ "opaque-debug",
+]
+
+[[package]]
+name = "sha-1"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest 0.10.7",
+]
+
+[[package]]
+name = "sha1"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest 0.10.7",
+]
+
+[[package]]
+name = "sha2"
+version = "0.9.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800"
+dependencies = [
+ "block-buffer 0.9.0",
+ "cfg-if",
+ "cpufeatures",
+ "digest 0.9.0",
+ "opaque-debug",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest 0.10.7",
+]
+
+[[package]]
+name = "signal-crypto"
+version = "0.1.0"
+source = "git+https://github.com/signalapp/libsignal?tag=v0.28.1#86b2fcc427bf32530866f4e30b18707c1f3682f7"
+dependencies = [
+ "aes 0.7.5",
+ "block-modes",
+ "displaydoc",
+ "generic-array",
+ "ghash",
+ "hmac 0.11.0",
+ "sha-1 0.9.8",
+ "sha2 0.9.9",
+ "subtle",
+ "thiserror",
+]
+
+[[package]]
+name = "signal-hook"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801"
+dependencies = [
+ "libc",
+ "signal-hook-registry",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "simd-adler32"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe"
+
+[[package]]
+name = "slab"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "sled"
+version = "0.34.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f96b4737c2ce5987354855aed3797279def4ebf734436c6aa4552cf8e169935"
+dependencies = [
+ "crc32fast",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+ "fs2",
+ "fxhash",
+ "libc",
+ "log",
+ "parking_lot",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9"
+
+[[package]]
+name = "socket2"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "socket2"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2538b18701741680e0322a2302176d3253a35388e2e62f172f64f4f16605f877"
+dependencies = [
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "sourceview5"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88c5f976a113e947bc5ec67758b2960c0db4ca76f80fb410d7cd86cd456d9ee5"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "gdk-pixbuf",
+ "gdk4",
+ "gio",
+ "glib",
+ "gtk4",
+ "libc",
+ "pango",
+ "sourceview5-sys",
+]
+
+[[package]]
+name = "sourceview5-sys"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29637cccd56075a37ba72c0cc8b8d599dbc1d857e30dadea97eaacbc29b7fd46"
+dependencies = [
+ "gdk-pixbuf-sys",
+ "gdk4-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "gtk4-sys",
+ "libc",
+ "pango-sys",
+ "system-deps",
+]
+
+[[package]]
+name = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "subtle"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c324c494eba9d92503e6f1ef2e6df781e78f6a7705a0202d9801b198807d518a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "synstructure"
+version = "0.12.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "unicode-xid",
+]
+
+[[package]]
+name = "system-deps"
+version = "6.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30c2de8a4d8f4b823d634affc9cd2a74ec98c53a756f317e529a48046cbf71f3"
+dependencies = [
+ "cfg-expr",
+ "heck 0.4.1",
+ "pkg-config",
+ "toml",
+ "version-compare",
+]
+
+[[package]]
+name = "target-lexicon"
+version = "0.12.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d0e916b1148c8e263850e1ebcbd046f333e0683c724876bb0da63ea4373dc8a"
+
+[[package]]
+name = "temp-dir"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af547b166dd1ea4b472165569fc456cfb6818116f854690b0ff205e636523dab"
+
+[[package]]
+name = "tempfile"
+version = "3.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef"
+dependencies = [
+ "cfg-if",
+ "fastrand 2.0.0",
+ "redox_syscall 0.3.5",
+ "rustix 0.38.9",
+ "windows-sys",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.47"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97a802ec30afc17eee47b2855fc72e0c4cd62be9b4efe6591edde0ec5bd68d8f"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.47"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bb623b56e39ab7dcd4b1b98bb6c8f8d907ed255b18de254088016b27a8ee19b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.29",
+]
+
+[[package]]
+name = "tiff"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a53f4706d65497df0c4349241deddf35f84cee19c87ed86ea8ca590f4464437"
+dependencies = [
+ "jpeg-decoder",
+ "miniz_oxide 0.4.4",
+ "weezl",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "1.32.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17ed6077ed6cd6c74735e21f37eb16dc3935f96878b1fe961074089cc80893f9"
+dependencies = [
+ "backtrace",
+ "libc",
+ "mio",
+ "num_cpus",
+ "pin-project-lite",
+ "socket2 0.5.3",
+ "tokio-macros",
+ "windows-sys",
+]
+
+[[package]]
+name = "tokio-io-timeout"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf"
+dependencies = [
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.29",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.23.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59"
+dependencies = [
+ "rustls",
+ "tokio",
+ "webpki",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.6.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "log",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "toml"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c17e963a819c331dcacd7ab957d80bc2b9a9c1e71c804826d2f283dd65306542"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.19.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a"
+dependencies = [
+ "indexmap",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tracing"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+dependencies = [
+ "cfg-if",
+ "log",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.29",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+
+[[package]]
+name = "tungstenite"
+version = "0.17.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e27992fd6a8c29ee7eef28fc78349aa244134e10ad447ce3b9f0ac0ed0fa4ce0"
+dependencies = [
+ "base64 0.13.1",
+ "byteorder",
+ "bytes",
+ "http",
+ "httparse",
+ "log",
+ "rand 0.8.5",
+ "rustls",
+ "sha-1 0.10.1",
+ "thiserror",
+ "url",
+ "utf-8",
+ "webpki",
+]
+
+[[package]]
+name = "typenum"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
+
+[[package]]
+name = "uds_windows"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce65604324d3cce9b966701489fbd0cf318cb1f7bd9dd07ac9a4ee6fb791930d"
+dependencies = [
+ "tempfile",
+ "winapi",
+]
+
+[[package]]
+name = "unicase"
+version = "2.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
+
+[[package]]
+name = "universal-hash"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05"
+dependencies = [
+ "generic-array",
+ "subtle",
+]
+
+[[package]]
+name = "untrusted"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+
+[[package]]
+name = "url"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+ "serde",
+]
+
+[[package]]
+name = "utf-8"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
+
+[[package]]
+name = "utf8-width"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5190c9442dcdaf0ddd50f37420417d219ae5261bbf5db120d0f9bab996c9cba1"
+
+[[package]]
+name = "uuid"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "value-bag"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d92ccd67fb88503048c01b59152a04effd0782d035a83a6d256ce6085f08f4a3"
+
+[[package]]
+name = "version-compare"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "waker-fn"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca"
+
+[[package]]
+name = "want"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
+dependencies = [
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.9.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.29",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.29",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
+
+[[package]]
+name = "web-sys"
+version = "0.3.64"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webpki"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "weezl"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb"
+
+[[package]]
+name = "which"
+version = "4.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269"
+dependencies = [
+ "either",
+ "libc",
+ "once_cell",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+
+[[package]]
+name = "winnow"
+version = "0.5.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c2e3184b9c4e92ad5167ca73039d0c42476302ab603e2fec4487511f38ccefc"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "x25519-dalek"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a0c105152107e3b96f6a00a65e86ce82d9b125230e1c4302940eca58ff71f4f"
+dependencies = [
+ "curve25519-dalek",
+ "rand_core 0.5.1",
+ "zeroize",
+]
+
+[[package]]
+name = "xdg-home"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2769203cd13a0c6015d515be729c526d041e9cf2c0cc478d57faee85f40c6dcd"
+dependencies = [
+ "nix",
+ "winapi",
+]
+
+[[package]]
+name = "zbus"
+version = "3.14.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31de390a2d872e4cd04edd71b425e29853f786dc99317ed72d73d6fcf5ebb948"
+dependencies = [
+ "async-broadcast",
+ "async-executor",
+ "async-fs",
+ "async-io",
+ "async-lock",
+ "async-process",
+ "async-recursion",
+ "async-task",
+ "async-trait",
+ "blocking",
+ "byteorder",
+ "derivative",
+ "enumflags2",
+ "event-listener",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "hex",
+ "nix",
+ "once_cell",
+ "ordered-stream",
+ "rand 0.8.5",
+ "serde",
+ "serde_repr",
+ "sha1",
+ "static_assertions",
+ "tracing",
+ "uds_windows",
+ "winapi",
+ "xdg-home",
+ "zbus_macros",
+ "zbus_names",
+ "zvariant",
+]
+
+[[package]]
+name = "zbus_macros"
+version = "3.14.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41d1794a946878c0e807f55a397187c11fc7a038ba5d868e7db4f3bd7760bc9d"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "syn 1.0.109",
+ "zvariant_utils",
+]
+
+[[package]]
+name = "zbus_names"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb80bb776dbda6e23d705cf0123c3b95df99c4ebeaec6c2599d4a5419902b4a9"
+dependencies = [
+ "serde",
+ "static_assertions",
+ "zvariant",
+]
+
+[[package]]
+name = "zeroize"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9"
+dependencies = [
+ "zeroize_derive",
+]
+
+[[package]]
+name = "zeroize_derive"
+version = "1.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.29",
+]
+
+[[package]]
+name = "zkcredential"
+version = "0.1.0"
+source = "git+https://github.com/signalapp/libsignal?tag=v0.28.1#86b2fcc427bf32530866f4e30b18707c1f3682f7"
+dependencies = [
+ "curve25519-dalek",
+ "displaydoc",
+ "lazy_static",
+ "poksho",
+ "serde",
+]
+
+[[package]]
+name = "zkgroup"
+version = "0.9.0"
+source = "git+https://github.com/signalapp/libsignal?tag=v0.28.1#86b2fcc427bf32530866f4e30b18707c1f3682f7"
+dependencies = [
+ "aead",
+ "aes-gcm-siv",
+ "bincode",
+ "curve25519-dalek",
+ "displaydoc",
+ "hex",
+ "lazy_static",
+ "poksho",
+ "serde",
+ "sha2 0.9.9",
+ "signal-crypto",
+ "subtle",
+ "zkcredential",
+]
+
+[[package]]
+name = "zvariant"
+version = "3.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44b291bee0d960c53170780af148dca5fa260a63cdd24f1962fa82e03e53338c"
+dependencies = [
+ "byteorder",
+ "enumflags2",
+ "libc",
+ "serde",
+ "static_assertions",
+ "url",
+ "zvariant_derive",
+]
+
+[[package]]
+name = "zvariant_derive"
+version = "3.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "934d7a7dfc310d6ee06c87ffe88ef4eca7d3e37bb251dece2ef93da8f17d8ecd"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "zvariant_utils",
+]
+
+[[package]]
+name = "zvariant_utils"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7234f0d811589db492d16893e3f21e8e2fd282e6d01b0cddee310322062cc200"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/flare-signal/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/flare-signal/default.nix
new file mode 100644
index 000000000000..7770eb6af50c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/flare-signal/default.nix
@@ -0,0 +1,80 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, cargo
+, meson
+, ninja
+, pkg-config
+, gst_all_1
+, protobuf
+, libspelling
+, libsecret
+, libadwaita
+, gtksourceview5
+, rustPlatform
+, rustc
+, appstream-glib
+, blueprint-compiler
+, desktop-file-utils
+, wrapGAppsHook4
+}:
+
+stdenv.mkDerivation rec {
+  pname = "flare";
+  version = "0.10.0";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.com";
+    owner = "schmiddi-on-mobile";
+    repo = pname;
+    rev = version;
+    hash = "sha256-+9zpYW9xjLe78c2GRL6raFDR5g+R/JWxQzU/ZS+5JtY=";
+  };
+
+  cargoDeps = rustPlatform.importCargoLock {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "blurhash-0.1.1" = "sha256-SLpszTL2CupMAfUQK5KlnsHTIBDB8hbJs1d6DQXaUiA=";
+      "curve25519-dalek-3.2.1" = "sha256-0hFRhn920tLBpo6ZNCl6DYtTMHMXY/EiDvuhOPVjvC0=";
+      "libsignal-protocol-0.1.0" = "sha256-VQwrGTNZnlDK5p8ZleAZYtbzDiVTHxc93/CRlCUjWtE=";
+      "libsignal-service-0.1.0" = "sha256-1ub0IPSvGhZ2tsC6IolusJ1NSWy+5SXSx8qlIdPngTE=";
+      "presage-0.6.0-dev" = "sha256-4isKBn/4yHoAYsYbBTULK/veZmaecU7t+PvE4Y0oNgk=";
+    };
+  };
+
+  nativeBuildInputs = [
+    appstream-glib # for appstream-util
+    blueprint-compiler
+    desktop-file-utils # for update-desktop-database
+    meson
+    ninja
+    pkg-config
+    wrapGAppsHook4
+    rustPlatform.cargoSetupHook
+    cargo
+    rustc
+  ];
+
+  buildInputs = [
+    gtksourceview5
+    libadwaita
+    libsecret
+    libspelling
+    protobuf
+
+    # To reproduce audio messages
+    gst_all_1.gstreamer
+    gst_all_1.gst-plugins-base
+    gst_all_1.gst-plugins-good
+    gst_all_1.gst-plugins-bad
+  ];
+
+  meta = {
+    changelog = "https://gitlab.com/schmiddi-on-mobile/flare/-/blob/${src.rev}/CHANGELOG.md";
+    description = "An unofficial Signal GTK client";
+    homepage = "https://gitlab.com/schmiddi-on-mobile/flare";
+    license = lib.licenses.agpl3Plus;
+    maintainers = with lib.maintainers; [ dotlambda ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/fluffychat/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/fluffychat/default.nix
new file mode 100644
index 000000000000..66ba7d3ae41e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/fluffychat/default.nix
@@ -0,0 +1,69 @@
+{ lib
+, fetchFromGitHub
+, imagemagick
+, mesa
+, libdrm
+, flutter
+, pulseaudio
+, makeDesktopItem
+, gnome
+}:
+
+let
+  libwebrtcRpath = lib.makeLibraryPath [ mesa libdrm ];
+in
+flutter.buildFlutterApplication rec {
+  pname = "fluffychat";
+  version = "1.13.0";
+
+  src = fetchFromGitHub {
+    owner = "krille-chan";
+    repo = "fluffychat";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-w29Nxs/d0b18jMvWnrRUjEGqY4jGtuEGodg+ncCAaVc=";
+  };
+
+  depsListFile = ./deps.json;
+  vendorHash = "sha256-dkH+iI1KLsAJtSt6ndc3ZRBllZ9n21RNONqeeUzNQCE=";
+
+  desktopItem = makeDesktopItem {
+    name = "Fluffychat";
+    exec = "@out@/bin/fluffychat";
+    icon = "fluffychat";
+    desktopName = "Fluffychat";
+    genericName = "Chat with your friends (matrix client)";
+    categories = [ "Chat" "Network" "InstantMessaging" ];
+  };
+
+  nativeBuildInputs = [ imagemagick ];
+  runtimeDependencies = [ pulseaudio ];
+  extraWrapProgramArgs = "--prefix PATH : ${gnome.zenity}/bin";
+  postInstall = ''
+    FAV=$out/app/data/flutter_assets/assets/favicon.png
+    ICO=$out/share/icons
+
+    install -D $FAV $ICO/fluffychat.png
+    mkdir $out/share/applications
+    cp $desktopItem/share/applications/*.desktop $out/share/applications
+    for size in 24 32 42 64 128 256 512; do
+      D=$ICO/hicolor/''${s}x''${s}/apps
+      mkdir -p $D
+      convert $FAV -resize ''${size}x''${size} $D/fluffychat.png
+    done
+    substituteInPlace $out/share/applications/*.desktop \
+      --subst-var out
+
+    patchelf --add-rpath ${libwebrtcRpath} $out/app/lib/libwebrtc.so
+  '';
+
+  env.NIX_LDFLAGS = "-rpath-link ${libwebrtcRpath}";
+
+  meta = with lib; {
+    description = "Chat with your friends (matrix client)";
+    homepage = "https://fluffychat.im/";
+    license = licenses.agpl3Plus;
+    maintainers = with maintainers; [ mkg20001 gilice ];
+    platforms = [ "x86_64-linux" "aarch64-linux" ];
+    sourceProvenance = [ sourceTypes.fromSource ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/fluffychat/deps.json b/nixpkgs/pkgs/applications/networking/instant-messengers/fluffychat/deps.json
new file mode 100644
index 000000000000..80e26e4883ba
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/fluffychat/deps.json
@@ -0,0 +1,3215 @@
+[
+  {
+    "name": "fluffychat",
+    "version": "1.13.0+3514",
+    "kind": "root",
+    "source": "root",
+    "dependencies": [
+      "adaptive_dialog",
+      "animations",
+      "archive",
+      "badges",
+      "blurhash_dart",
+      "callkeep",
+      "chewie",
+      "collection",
+      "connectivity_plus",
+      "cupertino_icons",
+      "desktop_drop",
+      "desktop_lifecycle",
+      "desktop_notifications",
+      "device_info_plus",
+      "dynamic_color",
+      "emoji_picker_flutter",
+      "emoji_proposal",
+      "emojis",
+      "file_picker",
+      "flutter",
+      "flutter_app_badger",
+      "flutter_app_lock",
+      "flutter_blurhash",
+      "flutter_cache_manager",
+      "flutter_foreground_task",
+      "flutter_highlighter",
+      "flutter_html",
+      "flutter_html_table",
+      "flutter_linkify",
+      "flutter_local_notifications",
+      "flutter_localizations",
+      "flutter_map",
+      "flutter_math_fork",
+      "flutter_olm",
+      "flutter_openssl_crypto",
+      "flutter_ringtone_player",
+      "flutter_secure_storage",
+      "flutter_typeahead",
+      "flutter_web_auth_2",
+      "flutter_webrtc",
+      "future_loading_dialog",
+      "geolocator",
+      "handy_window",
+      "hive",
+      "hive_flutter",
+      "http",
+      "image_picker",
+      "intl",
+      "just_audio",
+      "just_audio_mpv",
+      "keyboard_shortcuts",
+      "latlong2",
+      "linkify",
+      "matrix",
+      "matrix_homeserver_recommendations",
+      "native_imaging",
+      "package_info_plus",
+      "pasteboard",
+      "path_provider",
+      "permission_handler",
+      "pin_code_text_field",
+      "provider",
+      "punycode",
+      "qr_code_scanner",
+      "qr_flutter",
+      "receive_sharing_intent",
+      "record",
+      "scroll_to_index",
+      "share_plus",
+      "shared_preferences",
+      "slugify",
+      "swipe_to_action",
+      "tor_detector_web",
+      "uni_links",
+      "unifiedpush",
+      "universal_html",
+      "url_launcher",
+      "vibration",
+      "video_compress",
+      "video_player",
+      "vrouter",
+      "wakelock",
+      "webrtc_interface",
+      "dart_code_metrics",
+      "flutter_lints",
+      "flutter_native_splash",
+      "flutter_test",
+      "import_sorter",
+      "integration_test",
+      "msix",
+      "translations_cleaner",
+      "geolocator_android",
+      "wakelock_windows"
+    ]
+  },
+  {
+    "name": "wakelock_windows",
+    "version": "0.2.2",
+    "kind": "transitive",
+    "source": "git",
+    "dependencies": [
+      "flutter",
+      "wakelock_platform_interface",
+      "win32"
+    ]
+  },
+  {
+    "name": "win32",
+    "version": "5.0.5",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "ffi"
+    ]
+  },
+  {
+    "name": "ffi",
+    "version": "2.0.2",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": []
+  },
+  {
+    "name": "wakelock_platform_interface",
+    "version": "0.3.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "meta"
+    ]
+  },
+  {
+    "name": "meta",
+    "version": "1.9.1",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": []
+  },
+  {
+    "name": "flutter",
+    "version": "0.0.0",
+    "kind": "direct",
+    "source": "sdk",
+    "dependencies": [
+      "characters",
+      "collection",
+      "material_color_utilities",
+      "meta",
+      "vector_math",
+      "web",
+      "sky_engine"
+    ]
+  },
+  {
+    "name": "sky_engine",
+    "version": "0.0.99",
+    "kind": "transitive",
+    "source": "sdk",
+    "dependencies": []
+  },
+  {
+    "name": "web",
+    "version": "0.1.4-beta",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": []
+  },
+  {
+    "name": "vector_math",
+    "version": "2.1.4",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": []
+  },
+  {
+    "name": "material_color_utilities",
+    "version": "0.5.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "collection"
+    ]
+  },
+  {
+    "name": "collection",
+    "version": "1.17.2",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": []
+  },
+  {
+    "name": "characters",
+    "version": "1.3.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": []
+  },
+  {
+    "name": "geolocator_android",
+    "version": "1.0.1",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "geolocator_platform_interface"
+    ]
+  },
+  {
+    "name": "geolocator_platform_interface",
+    "version": "2.3.6",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "plugin_platform_interface",
+      "vector_math",
+      "meta"
+    ]
+  },
+  {
+    "name": "plugin_platform_interface",
+    "version": "2.1.4",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "meta"
+    ]
+  },
+  {
+    "name": "translations_cleaner",
+    "version": "0.0.5",
+    "kind": "dev",
+    "source": "hosted",
+    "dependencies": [
+      "args",
+      "glob"
+    ]
+  },
+  {
+    "name": "glob",
+    "version": "2.1.2",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "async",
+      "collection",
+      "file",
+      "path",
+      "string_scanner"
+    ]
+  },
+  {
+    "name": "string_scanner",
+    "version": "1.2.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "source_span"
+    ]
+  },
+  {
+    "name": "source_span",
+    "version": "1.10.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "collection",
+      "path",
+      "term_glyph"
+    ]
+  },
+  {
+    "name": "term_glyph",
+    "version": "1.2.1",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": []
+  },
+  {
+    "name": "path",
+    "version": "1.8.3",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": []
+  },
+  {
+    "name": "file",
+    "version": "6.1.4",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "meta",
+      "path"
+    ]
+  },
+  {
+    "name": "async",
+    "version": "2.11.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "collection",
+      "meta"
+    ]
+  },
+  {
+    "name": "args",
+    "version": "2.4.2",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": []
+  },
+  {
+    "name": "msix",
+    "version": "3.15.0",
+    "kind": "dev",
+    "source": "hosted",
+    "dependencies": [
+      "args",
+      "yaml",
+      "path",
+      "package_config",
+      "get_it",
+      "image",
+      "pub_semver",
+      "console",
+      "cli_util"
+    ]
+  },
+  {
+    "name": "cli_util",
+    "version": "0.4.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "meta",
+      "path"
+    ]
+  },
+  {
+    "name": "console",
+    "version": "4.1.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "vector_math"
+    ]
+  },
+  {
+    "name": "pub_semver",
+    "version": "2.1.4",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "collection",
+      "meta"
+    ]
+  },
+  {
+    "name": "image",
+    "version": "4.0.17",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "archive",
+      "meta",
+      "xml"
+    ]
+  },
+  {
+    "name": "xml",
+    "version": "6.3.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "collection",
+      "meta",
+      "petitparser"
+    ]
+  },
+  {
+    "name": "petitparser",
+    "version": "5.4.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "meta"
+    ]
+  },
+  {
+    "name": "archive",
+    "version": "3.3.7",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "crypto",
+      "path",
+      "pointycastle"
+    ]
+  },
+  {
+    "name": "pointycastle",
+    "version": "3.7.3",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "collection",
+      "convert",
+      "js"
+    ]
+  },
+  {
+    "name": "js",
+    "version": "0.6.7",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "meta"
+    ]
+  },
+  {
+    "name": "convert",
+    "version": "3.1.1",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "typed_data"
+    ]
+  },
+  {
+    "name": "typed_data",
+    "version": "1.3.2",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "collection"
+    ]
+  },
+  {
+    "name": "crypto",
+    "version": "3.0.3",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "typed_data"
+    ]
+  },
+  {
+    "name": "get_it",
+    "version": "7.6.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "async",
+      "collection"
+    ]
+  },
+  {
+    "name": "package_config",
+    "version": "2.1.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "path"
+    ]
+  },
+  {
+    "name": "yaml",
+    "version": "3.1.2",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "collection",
+      "source_span",
+      "string_scanner"
+    ]
+  },
+  {
+    "name": "integration_test",
+    "version": "0.0.0",
+    "kind": "dev",
+    "source": "sdk",
+    "dependencies": [
+      "flutter",
+      "flutter_driver",
+      "flutter_test",
+      "path",
+      "vm_service",
+      "async",
+      "boolean_selector",
+      "characters",
+      "clock",
+      "collection",
+      "fake_async",
+      "file",
+      "matcher",
+      "material_color_utilities",
+      "meta",
+      "source_span",
+      "stack_trace",
+      "stream_channel",
+      "string_scanner",
+      "sync_http",
+      "term_glyph",
+      "test_api",
+      "vector_math",
+      "web",
+      "webdriver"
+    ]
+  },
+  {
+    "name": "webdriver",
+    "version": "3.0.2",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "matcher",
+      "path",
+      "stack_trace",
+      "sync_http"
+    ]
+  },
+  {
+    "name": "sync_http",
+    "version": "0.3.1",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": []
+  },
+  {
+    "name": "stack_trace",
+    "version": "1.11.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "path"
+    ]
+  },
+  {
+    "name": "matcher",
+    "version": "0.12.16",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "async",
+      "meta",
+      "stack_trace",
+      "term_glyph",
+      "test_api"
+    ]
+  },
+  {
+    "name": "test_api",
+    "version": "0.6.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "async",
+      "boolean_selector",
+      "collection",
+      "meta",
+      "source_span",
+      "stack_trace",
+      "stream_channel",
+      "string_scanner",
+      "term_glyph"
+    ]
+  },
+  {
+    "name": "stream_channel",
+    "version": "2.1.1",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "async"
+    ]
+  },
+  {
+    "name": "boolean_selector",
+    "version": "2.1.1",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "source_span",
+      "string_scanner"
+    ]
+  },
+  {
+    "name": "fake_async",
+    "version": "1.3.1",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "clock",
+      "collection"
+    ]
+  },
+  {
+    "name": "clock",
+    "version": "1.1.1",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": []
+  },
+  {
+    "name": "vm_service",
+    "version": "11.7.1",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": []
+  },
+  {
+    "name": "flutter_test",
+    "version": "0.0.0",
+    "kind": "dev",
+    "source": "sdk",
+    "dependencies": [
+      "flutter",
+      "test_api",
+      "matcher",
+      "path",
+      "fake_async",
+      "clock",
+      "stack_trace",
+      "vector_math",
+      "async",
+      "boolean_selector",
+      "characters",
+      "collection",
+      "material_color_utilities",
+      "meta",
+      "source_span",
+      "stream_channel",
+      "string_scanner",
+      "term_glyph",
+      "web"
+    ]
+  },
+  {
+    "name": "flutter_driver",
+    "version": "0.0.0",
+    "kind": "transitive",
+    "source": "sdk",
+    "dependencies": [
+      "file",
+      "flutter",
+      "flutter_test",
+      "fuchsia_remote_debug_protocol",
+      "path",
+      "meta",
+      "vm_service",
+      "webdriver",
+      "async",
+      "boolean_selector",
+      "characters",
+      "clock",
+      "collection",
+      "matcher",
+      "material_color_utilities",
+      "platform",
+      "process",
+      "source_span",
+      "stack_trace",
+      "stream_channel",
+      "string_scanner",
+      "sync_http",
+      "term_glyph",
+      "test_api",
+      "vector_math",
+      "web"
+    ]
+  },
+  {
+    "name": "process",
+    "version": "4.2.4",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "file",
+      "path",
+      "platform"
+    ]
+  },
+  {
+    "name": "platform",
+    "version": "3.1.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": []
+  },
+  {
+    "name": "fuchsia_remote_debug_protocol",
+    "version": "0.0.0",
+    "kind": "transitive",
+    "source": "sdk",
+    "dependencies": [
+      "process",
+      "vm_service",
+      "file",
+      "meta",
+      "path",
+      "platform"
+    ]
+  },
+  {
+    "name": "import_sorter",
+    "version": "4.6.0",
+    "kind": "dev",
+    "source": "hosted",
+    "dependencies": [
+      "args",
+      "tint",
+      "yaml"
+    ]
+  },
+  {
+    "name": "tint",
+    "version": "2.0.1",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": []
+  },
+  {
+    "name": "flutter_native_splash",
+    "version": "2.3.1",
+    "kind": "dev",
+    "source": "hosted",
+    "dependencies": [
+      "args",
+      "flutter",
+      "flutter_web_plugins",
+      "js",
+      "html",
+      "image",
+      "meta",
+      "path",
+      "universal_io",
+      "xml",
+      "yaml"
+    ]
+  },
+  {
+    "name": "universal_io",
+    "version": "2.2.2",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "collection",
+      "meta",
+      "typed_data"
+    ]
+  },
+  {
+    "name": "html",
+    "version": "0.15.4",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "csslib",
+      "source_span"
+    ]
+  },
+  {
+    "name": "csslib",
+    "version": "0.17.3",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "source_span"
+    ]
+  },
+  {
+    "name": "flutter_web_plugins",
+    "version": "0.0.0",
+    "kind": "transitive",
+    "source": "sdk",
+    "dependencies": [
+      "flutter",
+      "characters",
+      "collection",
+      "material_color_utilities",
+      "meta",
+      "vector_math",
+      "web"
+    ]
+  },
+  {
+    "name": "flutter_lints",
+    "version": "2.0.2",
+    "kind": "dev",
+    "source": "hosted",
+    "dependencies": [
+      "lints"
+    ]
+  },
+  {
+    "name": "lints",
+    "version": "2.1.1",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": []
+  },
+  {
+    "name": "dart_code_metrics",
+    "version": "5.7.5",
+    "kind": "dev",
+    "source": "hosted",
+    "dependencies": [
+      "analyzer",
+      "analyzer_plugin",
+      "ansicolor",
+      "args",
+      "collection",
+      "crypto",
+      "dart_code_metrics_presets",
+      "file",
+      "glob",
+      "html",
+      "http",
+      "meta",
+      "path",
+      "platform",
+      "pub_updater",
+      "source_span",
+      "uuid",
+      "xml",
+      "yaml"
+    ]
+  },
+  {
+    "name": "uuid",
+    "version": "3.0.7",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "crypto"
+    ]
+  },
+  {
+    "name": "pub_updater",
+    "version": "0.3.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "http",
+      "json_annotation",
+      "process",
+      "pub_semver"
+    ]
+  },
+  {
+    "name": "json_annotation",
+    "version": "4.8.1",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "meta"
+    ]
+  },
+  {
+    "name": "http",
+    "version": "0.13.6",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "async",
+      "http_parser",
+      "meta"
+    ]
+  },
+  {
+    "name": "http_parser",
+    "version": "4.0.2",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "collection",
+      "source_span",
+      "string_scanner",
+      "typed_data"
+    ]
+  },
+  {
+    "name": "dart_code_metrics_presets",
+    "version": "1.8.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": []
+  },
+  {
+    "name": "ansicolor",
+    "version": "2.0.1",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": []
+  },
+  {
+    "name": "analyzer_plugin",
+    "version": "0.11.2",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "analyzer",
+      "collection",
+      "dart_style",
+      "pub_semver",
+      "yaml"
+    ]
+  },
+  {
+    "name": "dart_style",
+    "version": "2.3.2",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "analyzer",
+      "args",
+      "path",
+      "pub_semver",
+      "source_span"
+    ]
+  },
+  {
+    "name": "analyzer",
+    "version": "5.13.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "_fe_analyzer_shared",
+      "collection",
+      "convert",
+      "crypto",
+      "glob",
+      "meta",
+      "package_config",
+      "path",
+      "pub_semver",
+      "source_span",
+      "watcher",
+      "yaml"
+    ]
+  },
+  {
+    "name": "watcher",
+    "version": "1.1.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "async",
+      "path"
+    ]
+  },
+  {
+    "name": "_fe_analyzer_shared",
+    "version": "61.0.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "meta"
+    ]
+  },
+  {
+    "name": "webrtc_interface",
+    "version": "1.1.0",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": []
+  },
+  {
+    "name": "wakelock",
+    "version": "0.6.2",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "meta",
+      "wakelock_macos",
+      "wakelock_platform_interface",
+      "wakelock_web",
+      "wakelock_windows"
+    ]
+  },
+  {
+    "name": "wakelock_web",
+    "version": "0.4.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "flutter_web_plugins",
+      "js",
+      "wakelock_platform_interface"
+    ]
+  },
+  {
+    "name": "wakelock_macos",
+    "version": "0.4.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "flutter_web_plugins",
+      "wakelock_platform_interface"
+    ]
+  },
+  {
+    "name": "vrouter",
+    "version": "1.2.1",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "url_strategy",
+      "url_launcher",
+      "move_to_background"
+    ]
+  },
+  {
+    "name": "move_to_background",
+    "version": "1.0.2",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter"
+    ]
+  },
+  {
+    "name": "url_launcher",
+    "version": "6.1.12",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "url_launcher_android",
+      "url_launcher_ios",
+      "url_launcher_linux",
+      "url_launcher_macos",
+      "url_launcher_platform_interface",
+      "url_launcher_web",
+      "url_launcher_windows"
+    ]
+  },
+  {
+    "name": "url_launcher_windows",
+    "version": "3.0.7",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "url_launcher_platform_interface"
+    ]
+  },
+  {
+    "name": "url_launcher_platform_interface",
+    "version": "2.1.3",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "plugin_platform_interface"
+    ]
+  },
+  {
+    "name": "url_launcher_web",
+    "version": "2.0.18",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "flutter_web_plugins",
+      "url_launcher_platform_interface"
+    ]
+  },
+  {
+    "name": "url_launcher_macos",
+    "version": "3.0.5",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "url_launcher_platform_interface"
+    ]
+  },
+  {
+    "name": "url_launcher_linux",
+    "version": "3.0.5",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "url_launcher_platform_interface"
+    ]
+  },
+  {
+    "name": "url_launcher_ios",
+    "version": "6.1.4",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "url_launcher_platform_interface"
+    ]
+  },
+  {
+    "name": "url_launcher_android",
+    "version": "6.0.36",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "url_launcher_platform_interface"
+    ]
+  },
+  {
+    "name": "url_strategy",
+    "version": "0.2.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter_web_plugins"
+    ]
+  },
+  {
+    "name": "video_player",
+    "version": "2.7.0",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "html",
+      "video_player_android",
+      "video_player_avfoundation",
+      "video_player_platform_interface",
+      "video_player_web"
+    ]
+  },
+  {
+    "name": "video_player_web",
+    "version": "2.0.16",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "flutter_web_plugins",
+      "video_player_platform_interface"
+    ]
+  },
+  {
+    "name": "video_player_platform_interface",
+    "version": "6.1.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "plugin_platform_interface"
+    ]
+  },
+  {
+    "name": "video_player_avfoundation",
+    "version": "2.4.6",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "video_player_platform_interface"
+    ]
+  },
+  {
+    "name": "video_player_android",
+    "version": "2.4.9",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "video_player_platform_interface"
+    ]
+  },
+  {
+    "name": "video_compress",
+    "version": "3.1.2",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter"
+    ]
+  },
+  {
+    "name": "vibration",
+    "version": "1.8.1",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "device_info_plus"
+    ]
+  },
+  {
+    "name": "device_info_plus",
+    "version": "9.0.2",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "device_info_plus_platform_interface",
+      "ffi",
+      "file",
+      "flutter",
+      "flutter_web_plugins",
+      "meta",
+      "win32",
+      "win32_registry"
+    ]
+  },
+  {
+    "name": "win32_registry",
+    "version": "1.1.1",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "ffi",
+      "win32"
+    ]
+  },
+  {
+    "name": "device_info_plus_platform_interface",
+    "version": "7.0.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "meta",
+      "plugin_platform_interface"
+    ]
+  },
+  {
+    "name": "universal_html",
+    "version": "2.2.3",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "async",
+      "csslib",
+      "charcode",
+      "collection",
+      "html",
+      "meta",
+      "source_span",
+      "typed_data",
+      "universal_io"
+    ]
+  },
+  {
+    "name": "charcode",
+    "version": "1.3.1",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": []
+  },
+  {
+    "name": "unifiedpush",
+    "version": "5.0.0",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "shared_preferences",
+      "unifiedpush_platform_interface",
+      "unifiedpush_android"
+    ]
+  },
+  {
+    "name": "unifiedpush_android",
+    "version": "2.1.1",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "shared_preferences",
+      "unifiedpush_platform_interface"
+    ]
+  },
+  {
+    "name": "unifiedpush_platform_interface",
+    "version": "2.0.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "plugin_platform_interface"
+    ]
+  },
+  {
+    "name": "shared_preferences",
+    "version": "2.2.0",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "shared_preferences_android",
+      "shared_preferences_foundation",
+      "shared_preferences_linux",
+      "shared_preferences_platform_interface",
+      "shared_preferences_web",
+      "shared_preferences_windows"
+    ]
+  },
+  {
+    "name": "shared_preferences_windows",
+    "version": "2.3.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "file",
+      "flutter",
+      "path",
+      "path_provider_platform_interface",
+      "path_provider_windows",
+      "shared_preferences_platform_interface"
+    ]
+  },
+  {
+    "name": "shared_preferences_platform_interface",
+    "version": "2.3.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "plugin_platform_interface"
+    ]
+  },
+  {
+    "name": "path_provider_windows",
+    "version": "2.1.7",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "ffi",
+      "flutter",
+      "path",
+      "path_provider_platform_interface",
+      "win32"
+    ]
+  },
+  {
+    "name": "path_provider_platform_interface",
+    "version": "2.0.6",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "platform",
+      "plugin_platform_interface"
+    ]
+  },
+  {
+    "name": "shared_preferences_web",
+    "version": "2.2.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "flutter_web_plugins",
+      "shared_preferences_platform_interface"
+    ]
+  },
+  {
+    "name": "shared_preferences_linux",
+    "version": "2.3.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "file",
+      "flutter",
+      "path",
+      "path_provider_linux",
+      "path_provider_platform_interface",
+      "shared_preferences_platform_interface"
+    ]
+  },
+  {
+    "name": "path_provider_linux",
+    "version": "2.1.11",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "ffi",
+      "flutter",
+      "path",
+      "path_provider_platform_interface",
+      "xdg_directories"
+    ]
+  },
+  {
+    "name": "xdg_directories",
+    "version": "1.0.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "meta",
+      "path",
+      "process"
+    ]
+  },
+  {
+    "name": "shared_preferences_foundation",
+    "version": "2.3.1",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "shared_preferences_platform_interface"
+    ]
+  },
+  {
+    "name": "shared_preferences_android",
+    "version": "2.2.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "shared_preferences_platform_interface"
+    ]
+  },
+  {
+    "name": "uni_links",
+    "version": "0.5.1",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "uni_links_platform_interface",
+      "uni_links_web"
+    ]
+  },
+  {
+    "name": "uni_links_web",
+    "version": "0.1.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "flutter_web_plugins",
+      "uni_links_platform_interface"
+    ]
+  },
+  {
+    "name": "uni_links_platform_interface",
+    "version": "1.0.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "plugin_platform_interface"
+    ]
+  },
+  {
+    "name": "tor_detector_web",
+    "version": "1.1.0",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "js"
+    ]
+  },
+  {
+    "name": "swipe_to_action",
+    "version": "0.2.0",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "flutter_web_plugins"
+    ]
+  },
+  {
+    "name": "slugify",
+    "version": "2.0.0",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": []
+  },
+  {
+    "name": "share_plus",
+    "version": "7.0.2",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "cross_file",
+      "meta",
+      "mime",
+      "flutter",
+      "flutter_web_plugins",
+      "share_plus_platform_interface",
+      "file",
+      "url_launcher_web",
+      "url_launcher_windows",
+      "url_launcher_linux",
+      "url_launcher_platform_interface",
+      "ffi",
+      "win32"
+    ]
+  },
+  {
+    "name": "share_plus_platform_interface",
+    "version": "3.2.1",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "cross_file",
+      "flutter",
+      "meta",
+      "mime",
+      "plugin_platform_interface",
+      "path_provider",
+      "uuid"
+    ]
+  },
+  {
+    "name": "path_provider",
+    "version": "2.0.15",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "path_provider_android",
+      "path_provider_foundation",
+      "path_provider_linux",
+      "path_provider_platform_interface",
+      "path_provider_windows"
+    ]
+  },
+  {
+    "name": "path_provider_foundation",
+    "version": "2.2.3",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "path_provider_platform_interface"
+    ]
+  },
+  {
+    "name": "path_provider_android",
+    "version": "2.0.27",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "path_provider_platform_interface"
+    ]
+  },
+  {
+    "name": "mime",
+    "version": "1.0.4",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": []
+  },
+  {
+    "name": "cross_file",
+    "version": "0.3.3+4",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "js",
+      "meta"
+    ]
+  },
+  {
+    "name": "scroll_to_index",
+    "version": "3.0.1",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter"
+    ]
+  },
+  {
+    "name": "record",
+    "version": "4.4.4",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "record_platform_interface",
+      "record_web",
+      "record_windows",
+      "record_macos",
+      "record_linux"
+    ]
+  },
+  {
+    "name": "record_linux",
+    "version": "0.4.1",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "record_platform_interface",
+      "path"
+    ]
+  },
+  {
+    "name": "record_platform_interface",
+    "version": "0.5.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "plugin_platform_interface"
+    ]
+  },
+  {
+    "name": "record_macos",
+    "version": "0.2.2",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "record_platform_interface"
+    ]
+  },
+  {
+    "name": "record_windows",
+    "version": "0.7.1",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "record_platform_interface",
+      "path"
+    ]
+  },
+  {
+    "name": "record_web",
+    "version": "0.5.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "flutter_web_plugins",
+      "record_platform_interface"
+    ]
+  },
+  {
+    "name": "receive_sharing_intent",
+    "version": "1.4.5",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter"
+    ]
+  },
+  {
+    "name": "qr_flutter",
+    "version": "4.1.0",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "qr"
+    ]
+  },
+  {
+    "name": "qr",
+    "version": "3.0.1",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "meta"
+    ]
+  },
+  {
+    "name": "qr_code_scanner",
+    "version": "1.0.1",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "js",
+      "flutter",
+      "flutter_web_plugins"
+    ]
+  },
+  {
+    "name": "punycode",
+    "version": "1.0.0",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": []
+  },
+  {
+    "name": "provider",
+    "version": "6.0.5",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "collection",
+      "flutter",
+      "nested"
+    ]
+  },
+  {
+    "name": "nested",
+    "version": "1.0.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter"
+    ]
+  },
+  {
+    "name": "pin_code_text_field",
+    "version": "1.8.0",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter"
+    ]
+  },
+  {
+    "name": "permission_handler",
+    "version": "10.4.2",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "meta",
+      "permission_handler_android",
+      "permission_handler_apple",
+      "permission_handler_windows",
+      "permission_handler_platform_interface"
+    ]
+  },
+  {
+    "name": "permission_handler_platform_interface",
+    "version": "3.11.1",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "meta",
+      "plugin_platform_interface"
+    ]
+  },
+  {
+    "name": "permission_handler_windows",
+    "version": "0.1.3",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "permission_handler_platform_interface"
+    ]
+  },
+  {
+    "name": "permission_handler_apple",
+    "version": "9.1.3",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "permission_handler_platform_interface"
+    ]
+  },
+  {
+    "name": "permission_handler_android",
+    "version": "10.3.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "permission_handler_platform_interface"
+    ]
+  },
+  {
+    "name": "pasteboard",
+    "version": "0.2.0",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "flutter_web_plugins",
+      "js"
+    ]
+  },
+  {
+    "name": "package_info_plus",
+    "version": "4.0.2",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "ffi",
+      "flutter",
+      "flutter_web_plugins",
+      "http",
+      "meta",
+      "path",
+      "package_info_plus_platform_interface",
+      "win32"
+    ]
+  },
+  {
+    "name": "package_info_plus_platform_interface",
+    "version": "2.0.1",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "meta",
+      "plugin_platform_interface"
+    ]
+  },
+  {
+    "name": "native_imaging",
+    "version": "0.1.0",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "js",
+      "ffi"
+    ]
+  },
+  {
+    "name": "matrix_homeserver_recommendations",
+    "version": "0.3.0",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "http",
+      "matrix_api_lite"
+    ]
+  },
+  {
+    "name": "matrix_api_lite",
+    "version": "1.7.1",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "enhanced_enum",
+      "http",
+      "mime"
+    ]
+  },
+  {
+    "name": "enhanced_enum",
+    "version": "0.2.4",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": []
+  },
+  {
+    "name": "matrix",
+    "version": "0.22.2",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "async",
+      "base58check",
+      "blurhash_dart",
+      "canonical_json",
+      "collection",
+      "crypto",
+      "ffi",
+      "hive",
+      "html",
+      "html_unescape",
+      "http",
+      "image",
+      "js",
+      "markdown",
+      "matrix_api_lite",
+      "mime",
+      "olm",
+      "random_string",
+      "sdp_transform",
+      "slugify",
+      "typed_data",
+      "webrtc_interface"
+    ]
+  },
+  {
+    "name": "sdp_transform",
+    "version": "0.3.2",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": []
+  },
+  {
+    "name": "random_string",
+    "version": "2.3.1",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": []
+  },
+  {
+    "name": "olm",
+    "version": "2.0.3",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "js",
+      "ffi"
+    ]
+  },
+  {
+    "name": "markdown",
+    "version": "4.0.1",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "args",
+      "charcode",
+      "meta"
+    ]
+  },
+  {
+    "name": "html_unescape",
+    "version": "2.0.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": []
+  },
+  {
+    "name": "hive",
+    "version": "2.2.3",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "meta",
+      "crypto"
+    ]
+  },
+  {
+    "name": "canonical_json",
+    "version": "1.1.2",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "typed_data",
+      "unorm_dart"
+    ]
+  },
+  {
+    "name": "unorm_dart",
+    "version": "0.2.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": []
+  },
+  {
+    "name": "blurhash_dart",
+    "version": "1.2.1",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "image"
+    ]
+  },
+  {
+    "name": "base58check",
+    "version": "2.0.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "crypto",
+      "collection"
+    ]
+  },
+  {
+    "name": "linkify",
+    "version": "5.0.0",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": []
+  },
+  {
+    "name": "latlong2",
+    "version": "0.8.2",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "intl"
+    ]
+  },
+  {
+    "name": "intl",
+    "version": "0.18.1",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "clock",
+      "meta",
+      "path"
+    ]
+  },
+  {
+    "name": "keyboard_shortcuts",
+    "version": "0.1.4",
+    "kind": "direct",
+    "source": "git",
+    "dependencies": [
+      "flutter",
+      "visibility_detector",
+      "tuple",
+      "collection"
+    ]
+  },
+  {
+    "name": "tuple",
+    "version": "2.0.2",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": []
+  },
+  {
+    "name": "visibility_detector",
+    "version": "0.3.3",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter"
+    ]
+  },
+  {
+    "name": "just_audio_mpv",
+    "version": "0.1.6",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "just_audio_platform_interface",
+      "mpv_dart"
+    ]
+  },
+  {
+    "name": "mpv_dart",
+    "version": "0.0.1",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "eventify",
+      "path"
+    ]
+  },
+  {
+    "name": "eventify",
+    "version": "1.0.1",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": []
+  },
+  {
+    "name": "just_audio_platform_interface",
+    "version": "4.2.1",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "plugin_platform_interface"
+    ]
+  },
+  {
+    "name": "just_audio",
+    "version": "0.9.34",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "just_audio_platform_interface",
+      "just_audio_web",
+      "audio_session",
+      "rxdart",
+      "path",
+      "path_provider",
+      "async",
+      "uuid",
+      "crypto",
+      "meta",
+      "flutter"
+    ]
+  },
+  {
+    "name": "rxdart",
+    "version": "0.27.7",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": []
+  },
+  {
+    "name": "audio_session",
+    "version": "0.1.16",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "flutter_web_plugins",
+      "rxdart",
+      "meta"
+    ]
+  },
+  {
+    "name": "just_audio_web",
+    "version": "0.4.8",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "just_audio_platform_interface",
+      "flutter",
+      "flutter_web_plugins"
+    ]
+  },
+  {
+    "name": "image_picker",
+    "version": "1.0.0",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "image_picker_android",
+      "image_picker_for_web",
+      "image_picker_ios",
+      "image_picker_linux",
+      "image_picker_macos",
+      "image_picker_platform_interface",
+      "image_picker_windows"
+    ]
+  },
+  {
+    "name": "image_picker_windows",
+    "version": "0.2.1",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "file_selector_platform_interface",
+      "file_selector_windows",
+      "flutter",
+      "image_picker_platform_interface"
+    ]
+  },
+  {
+    "name": "image_picker_platform_interface",
+    "version": "2.8.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "cross_file",
+      "flutter",
+      "http",
+      "plugin_platform_interface"
+    ]
+  },
+  {
+    "name": "file_selector_windows",
+    "version": "0.9.3",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "cross_file",
+      "file_selector_platform_interface",
+      "flutter"
+    ]
+  },
+  {
+    "name": "file_selector_platform_interface",
+    "version": "2.6.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "cross_file",
+      "flutter",
+      "http",
+      "plugin_platform_interface"
+    ]
+  },
+  {
+    "name": "image_picker_macos",
+    "version": "0.2.1",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "file_selector_macos",
+      "file_selector_platform_interface",
+      "flutter",
+      "image_picker_platform_interface"
+    ]
+  },
+  {
+    "name": "file_selector_macos",
+    "version": "0.9.3",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "cross_file",
+      "file_selector_platform_interface",
+      "flutter"
+    ]
+  },
+  {
+    "name": "image_picker_linux",
+    "version": "0.2.1",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "file_selector_linux",
+      "file_selector_platform_interface",
+      "flutter",
+      "image_picker_platform_interface"
+    ]
+  },
+  {
+    "name": "file_selector_linux",
+    "version": "0.9.2",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "cross_file",
+      "file_selector_platform_interface",
+      "flutter"
+    ]
+  },
+  {
+    "name": "image_picker_ios",
+    "version": "0.8.8",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "image_picker_platform_interface"
+    ]
+  },
+  {
+    "name": "image_picker_for_web",
+    "version": "2.2.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "flutter_web_plugins",
+      "image_picker_platform_interface",
+      "mime"
+    ]
+  },
+  {
+    "name": "image_picker_android",
+    "version": "0.8.7+3",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "flutter_plugin_android_lifecycle",
+      "image_picker_platform_interface"
+    ]
+  },
+  {
+    "name": "flutter_plugin_android_lifecycle",
+    "version": "2.0.15",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter"
+    ]
+  },
+  {
+    "name": "hive_flutter",
+    "version": "1.1.0",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "hive",
+      "path_provider",
+      "path"
+    ]
+  },
+  {
+    "name": "handy_window",
+    "version": "0.3.1",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter"
+    ]
+  },
+  {
+    "name": "geolocator",
+    "version": "7.7.1",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "geolocator_platform_interface",
+      "geolocator_android",
+      "geolocator_apple",
+      "geolocator_web"
+    ]
+  },
+  {
+    "name": "geolocator_web",
+    "version": "2.0.6",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "flutter_web_plugins",
+      "geolocator_platform_interface"
+    ]
+  },
+  {
+    "name": "geolocator_apple",
+    "version": "1.2.2",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "geolocator_platform_interface"
+    ]
+  },
+  {
+    "name": "future_loading_dialog",
+    "version": "0.2.4",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter"
+    ]
+  },
+  {
+    "name": "flutter_webrtc",
+    "version": "0.9.37",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "collection",
+      "dart_webrtc",
+      "flutter",
+      "path_provider",
+      "webrtc_interface"
+    ]
+  },
+  {
+    "name": "dart_webrtc",
+    "version": "1.1.1",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "collection",
+      "js",
+      "platform_detect",
+      "webrtc_interface"
+    ]
+  },
+  {
+    "name": "platform_detect",
+    "version": "2.0.7",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "meta",
+      "pub_semver"
+    ]
+  },
+  {
+    "name": "flutter_web_auth_2",
+    "version": "2.1.5",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "flutter_web_auth_2_platform_interface",
+      "flutter_web_plugins",
+      "url_launcher",
+      "window_to_front"
+    ]
+  },
+  {
+    "name": "window_to_front",
+    "version": "0.0.3",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter"
+    ]
+  },
+  {
+    "name": "flutter_web_auth_2_platform_interface",
+    "version": "2.1.4",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "plugin_platform_interface"
+    ]
+  },
+  {
+    "name": "flutter_typeahead",
+    "version": "4.6.2",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "flutter_keyboard_visibility",
+      "pointer_interceptor"
+    ]
+  },
+  {
+    "name": "pointer_interceptor",
+    "version": "0.9.3+4",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter"
+    ]
+  },
+  {
+    "name": "flutter_keyboard_visibility",
+    "version": "5.4.1",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "meta",
+      "flutter_keyboard_visibility_platform_interface",
+      "flutter_keyboard_visibility_linux",
+      "flutter_keyboard_visibility_macos",
+      "flutter_keyboard_visibility_web",
+      "flutter_keyboard_visibility_windows",
+      "flutter"
+    ]
+  },
+  {
+    "name": "flutter_keyboard_visibility_windows",
+    "version": "1.0.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter_keyboard_visibility_platform_interface",
+      "flutter"
+    ]
+  },
+  {
+    "name": "flutter_keyboard_visibility_platform_interface",
+    "version": "2.0.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "meta",
+      "plugin_platform_interface"
+    ]
+  },
+  {
+    "name": "flutter_keyboard_visibility_web",
+    "version": "2.0.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter_keyboard_visibility_platform_interface",
+      "flutter_web_plugins",
+      "flutter"
+    ]
+  },
+  {
+    "name": "flutter_keyboard_visibility_macos",
+    "version": "1.0.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter_keyboard_visibility_platform_interface",
+      "flutter"
+    ]
+  },
+  {
+    "name": "flutter_keyboard_visibility_linux",
+    "version": "1.0.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter_keyboard_visibility_platform_interface",
+      "flutter"
+    ]
+  },
+  {
+    "name": "flutter_secure_storage",
+    "version": "8.0.0",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "flutter_secure_storage_linux",
+      "flutter_secure_storage_macos",
+      "flutter_secure_storage_platform_interface",
+      "flutter_secure_storage_web",
+      "flutter_secure_storage_windows",
+      "meta"
+    ]
+  },
+  {
+    "name": "flutter_secure_storage_windows",
+    "version": "2.0.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "flutter_secure_storage_platform_interface"
+    ]
+  },
+  {
+    "name": "flutter_secure_storage_platform_interface",
+    "version": "1.0.1",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "plugin_platform_interface"
+    ]
+  },
+  {
+    "name": "flutter_secure_storage_web",
+    "version": "1.1.1",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "flutter_secure_storage_platform_interface",
+      "flutter_web_plugins",
+      "js"
+    ]
+  },
+  {
+    "name": "flutter_secure_storage_macos",
+    "version": "3.0.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "flutter_secure_storage_platform_interface"
+    ]
+  },
+  {
+    "name": "flutter_secure_storage_linux",
+    "version": "1.1.3",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "flutter_secure_storage_platform_interface"
+    ]
+  },
+  {
+    "name": "flutter_ringtone_player",
+    "version": "3.2.0",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "path_provider"
+    ]
+  },
+  {
+    "name": "flutter_openssl_crypto",
+    "version": "0.1.0",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter"
+    ]
+  },
+  {
+    "name": "flutter_olm",
+    "version": "1.2.0",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter"
+    ]
+  },
+  {
+    "name": "flutter_math_fork",
+    "version": "0.7.1",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "flutter_svg",
+      "provider",
+      "meta",
+      "collection",
+      "tuple"
+    ]
+  },
+  {
+    "name": "flutter_svg",
+    "version": "2.0.7",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "vector_graphics",
+      "vector_graphics_codec",
+      "vector_graphics_compiler"
+    ]
+  },
+  {
+    "name": "vector_graphics_compiler",
+    "version": "1.1.7",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "args",
+      "meta",
+      "path_parsing",
+      "xml",
+      "vector_graphics_codec"
+    ]
+  },
+  {
+    "name": "vector_graphics_codec",
+    "version": "1.1.7",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": []
+  },
+  {
+    "name": "path_parsing",
+    "version": "1.0.1",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "vector_math",
+      "meta"
+    ]
+  },
+  {
+    "name": "vector_graphics",
+    "version": "1.1.7",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "vector_graphics_codec"
+    ]
+  },
+  {
+    "name": "flutter_map",
+    "version": "4.0.0",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "async",
+      "collection",
+      "flutter",
+      "http",
+      "latlong2",
+      "meta",
+      "polylabel",
+      "proj4dart",
+      "tuple",
+      "vector_math"
+    ]
+  },
+  {
+    "name": "proj4dart",
+    "version": "2.1.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "mgrs_dart",
+      "wkt_parser",
+      "meta"
+    ]
+  },
+  {
+    "name": "wkt_parser",
+    "version": "2.0.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": []
+  },
+  {
+    "name": "mgrs_dart",
+    "version": "2.0.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "unicode"
+    ]
+  },
+  {
+    "name": "unicode",
+    "version": "0.3.1",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "lists"
+    ]
+  },
+  {
+    "name": "lists",
+    "version": "1.0.1",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "meta"
+    ]
+  },
+  {
+    "name": "polylabel",
+    "version": "1.0.1",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "collection"
+    ]
+  },
+  {
+    "name": "flutter_localizations",
+    "version": "0.0.0",
+    "kind": "direct",
+    "source": "sdk",
+    "dependencies": [
+      "flutter",
+      "intl",
+      "characters",
+      "clock",
+      "collection",
+      "material_color_utilities",
+      "meta",
+      "path",
+      "vector_math",
+      "web"
+    ]
+  },
+  {
+    "name": "flutter_local_notifications",
+    "version": "15.1.0+1",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "clock",
+      "flutter",
+      "flutter_local_notifications_linux",
+      "flutter_local_notifications_platform_interface",
+      "timezone"
+    ]
+  },
+  {
+    "name": "timezone",
+    "version": "0.9.2",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "path"
+    ]
+  },
+  {
+    "name": "flutter_local_notifications_platform_interface",
+    "version": "7.0.0+1",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "plugin_platform_interface"
+    ]
+  },
+  {
+    "name": "flutter_local_notifications_linux",
+    "version": "4.0.0+1",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "dbus",
+      "ffi",
+      "flutter",
+      "flutter_local_notifications_platform_interface",
+      "path",
+      "xdg_directories"
+    ]
+  },
+  {
+    "name": "dbus",
+    "version": "0.7.8",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "args",
+      "ffi",
+      "meta",
+      "xml"
+    ]
+  },
+  {
+    "name": "flutter_linkify",
+    "version": "6.0.0",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "linkify"
+    ]
+  },
+  {
+    "name": "flutter_html_table",
+    "version": "3.0.0-beta.2",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "html",
+      "flutter_html",
+      "flutter_layout_grid"
+    ]
+  },
+  {
+    "name": "flutter_layout_grid",
+    "version": "2.0.4",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "collection",
+      "meta",
+      "quiver"
+    ]
+  },
+  {
+    "name": "quiver",
+    "version": "3.2.1",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "matcher"
+    ]
+  },
+  {
+    "name": "flutter_html",
+    "version": "3.0.0-beta.2",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "html",
+      "csslib",
+      "collection",
+      "list_counter",
+      "flutter"
+    ]
+  },
+  {
+    "name": "list_counter",
+    "version": "1.0.2",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": []
+  },
+  {
+    "name": "flutter_highlighter",
+    "version": "0.1.1",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "highlighter"
+    ]
+  },
+  {
+    "name": "highlighter",
+    "version": "0.1.1",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "collection"
+    ]
+  },
+  {
+    "name": "flutter_foreground_task",
+    "version": "6.0.0+1",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "plugin_platform_interface",
+      "platform",
+      "shared_preferences"
+    ]
+  },
+  {
+    "name": "flutter_cache_manager",
+    "version": "3.3.1",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "clock",
+      "collection",
+      "file",
+      "flutter",
+      "http",
+      "path",
+      "path_provider",
+      "rxdart",
+      "sqflite",
+      "uuid"
+    ]
+  },
+  {
+    "name": "sqflite",
+    "version": "2.2.8+4",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "sqflite_common",
+      "path"
+    ]
+  },
+  {
+    "name": "sqflite_common",
+    "version": "2.4.5+1",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "synchronized",
+      "path",
+      "meta"
+    ]
+  },
+  {
+    "name": "synchronized",
+    "version": "3.1.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": []
+  },
+  {
+    "name": "flutter_blurhash",
+    "version": "0.7.0",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter"
+    ]
+  },
+  {
+    "name": "flutter_app_lock",
+    "version": "3.0.0",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter"
+    ]
+  },
+  {
+    "name": "flutter_app_badger",
+    "version": "1.5.0",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter"
+    ]
+  },
+  {
+    "name": "file_picker",
+    "version": "5.3.2",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "flutter_web_plugins",
+      "flutter_plugin_android_lifecycle",
+      "plugin_platform_interface",
+      "ffi",
+      "path",
+      "win32"
+    ]
+  },
+  {
+    "name": "emojis",
+    "version": "0.9.9",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "collection"
+    ]
+  },
+  {
+    "name": "emoji_proposal",
+    "version": "0.0.1",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "emojis",
+      "sentiment_dart"
+    ]
+  },
+  {
+    "name": "sentiment_dart",
+    "version": "0.0.5",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "remove_emoji"
+    ]
+  },
+  {
+    "name": "remove_emoji",
+    "version": "0.0.9",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": []
+  },
+  {
+    "name": "emoji_picker_flutter",
+    "version": "1.6.1",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "flutter_web_plugins",
+      "plugin_platform_interface",
+      "shared_preferences"
+    ]
+  },
+  {
+    "name": "dynamic_color",
+    "version": "1.6.6",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "flutter_test",
+      "material_color_utilities"
+    ]
+  },
+  {
+    "name": "desktop_notifications",
+    "version": "0.6.3",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "dbus"
+    ]
+  },
+  {
+    "name": "desktop_lifecycle",
+    "version": "0.1.1",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter"
+    ]
+  },
+  {
+    "name": "desktop_drop",
+    "version": "0.4.1",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "flutter_web_plugins",
+      "cross_file"
+    ]
+  },
+  {
+    "name": "cupertino_icons",
+    "version": "1.0.5",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": []
+  },
+  {
+    "name": "connectivity_plus",
+    "version": "4.0.1",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "flutter_web_plugins",
+      "connectivity_plus_platform_interface",
+      "js",
+      "meta",
+      "nm"
+    ]
+  },
+  {
+    "name": "nm",
+    "version": "0.5.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "dbus"
+    ]
+  },
+  {
+    "name": "connectivity_plus_platform_interface",
+    "version": "1.2.4",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "meta",
+      "plugin_platform_interface"
+    ]
+  },
+  {
+    "name": "chewie",
+    "version": "1.7.0",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "cupertino_icons",
+      "flutter",
+      "provider",
+      "video_player",
+      "wakelock_plus"
+    ]
+  },
+  {
+    "name": "wakelock_plus",
+    "version": "1.1.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "flutter_web_plugins",
+      "meta",
+      "wakelock_plus_platform_interface",
+      "win32",
+      "dbus",
+      "package_info_plus",
+      "js"
+    ]
+  },
+  {
+    "name": "wakelock_plus_platform_interface",
+    "version": "1.1.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "plugin_platform_interface",
+      "meta"
+    ]
+  },
+  {
+    "name": "callkeep",
+    "version": "0.3.3",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter"
+    ]
+  },
+  {
+    "name": "badges",
+    "version": "2.0.3",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter"
+    ]
+  },
+  {
+    "name": "animations",
+    "version": "2.0.7",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "flutter"
+    ]
+  },
+  {
+    "name": "adaptive_dialog",
+    "version": "1.9.0-x-macos-beta.1",
+    "kind": "direct",
+    "source": "hosted",
+    "dependencies": [
+      "animations",
+      "collection",
+      "dynamic_color",
+      "flutter",
+      "intersperse",
+      "macos_ui",
+      "meta"
+    ]
+  },
+  {
+    "name": "macos_ui",
+    "version": "2.0.0-beta.6",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter",
+      "macos_window_utils"
+    ]
+  },
+  {
+    "name": "macos_window_utils",
+    "version": "1.1.3",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": [
+      "flutter"
+    ]
+  },
+  {
+    "name": "intersperse",
+    "version": "2.0.0",
+    "kind": "transitive",
+    "source": "hosted",
+    "dependencies": []
+  }
+]
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/fractal-next/Cargo.lock b/nixpkgs/pkgs/applications/networking/instant-messengers/fractal-next/Cargo.lock
new file mode 100644
index 000000000000..9a7f7d01206e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/fractal-next/Cargo.lock
@@ -0,0 +1,5773 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4fa78e18c64fce05e902adecd7a5eed15a5e0a3439f7b0e169f0252214865e3"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "aead"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877"
+dependencies = [
+ "generic-array",
+ "rand_core",
+]
+
+[[package]]
+name = "aes"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2"
+dependencies = [
+ "cfg-if",
+ "cipher 0.4.4",
+ "cpufeatures",
+ "zeroize",
+]
+
+[[package]]
+name = "ahash"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+ "version_check",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86b8f9420f797f2d9e935edf629310eb938a0d839f984e25327f3c7eed22300c"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "allocator-api2"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5"
+
+[[package]]
+name = "ammonia"
+version = "3.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64e6d1c7838db705c9b756557ee27c384ce695a1c51a6fe528784cb1c6840170"
+dependencies = [
+ "html5ever",
+ "maplit",
+ "once_cell",
+ "tendril",
+ "url",
+]
+
+[[package]]
+name = "android-tzdata"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.72"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b13c32d80ecc7ab747b80c3784bce54ee8a7a0cc4fbda9bf4cda2cf6fe90854"
+
+[[package]]
+name = "anymap2"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d301b3b94cb4b2f23d7917810addbbaff90738e0ca2be692bd027e70d7e0330c"
+
+[[package]]
+name = "arrayref"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545"
+
+[[package]]
+name = "arrayvec"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "ashpd"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31688b40eb5d739049f721d8405c33d3796b3f51f2bea84421a542dafe397e41"
+dependencies = [
+ "enumflags2",
+ "futures-channel",
+ "futures-util",
+ "gdk4-wayland",
+ "gdk4-x11",
+ "gtk4",
+ "libc",
+ "once_cell",
+ "pipewire",
+ "rand",
+ "serde",
+ "serde_repr",
+ "tokio",
+ "tracing",
+ "url",
+ "zbus",
+]
+
+[[package]]
+name = "assign"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f093eed78becd229346bf859eec0aa4dd7ddde0757287b2b4107a1f09c80002"
+
+[[package]]
+name = "async-broadcast"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c48ccdbf6ca6b121e0f586cbc0e73ae440e56c67c30fa0873b4e110d9c26d2b"
+dependencies = [
+ "event-listener",
+ "futures-core",
+]
+
+[[package]]
+name = "async-channel"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35"
+dependencies = [
+ "concurrent-queue",
+ "event-listener",
+ "futures-core",
+]
+
+[[package]]
+name = "async-compression"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b74f44609f0f91493e3082d3734d98497e094777144380ea4db9f9905dd5b6"
+dependencies = [
+ "flate2",
+ "futures-core",
+ "memchr",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "async-executor"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fa3dc5f2a8564f07759c008b9109dc0d39de92a88d5588b8a5036d286383afb"
+dependencies = [
+ "async-lock",
+ "async-task",
+ "concurrent-queue",
+ "fastrand 1.9.0",
+ "futures-lite",
+ "slab",
+]
+
+[[package]]
+name = "async-global-executor"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1b6f5d7df27bd294849f8eec66ecfc63d11814df7a4f5d74168a2394467b776"
+dependencies = [
+ "async-channel",
+ "async-executor",
+ "async-io",
+ "async-lock",
+ "blocking",
+ "futures-lite",
+ "once_cell",
+]
+
+[[package]]
+name = "async-io"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af"
+dependencies = [
+ "async-lock",
+ "autocfg",
+ "cfg-if",
+ "concurrent-queue",
+ "futures-lite",
+ "log",
+ "parking",
+ "polling",
+ "rustix 0.37.23",
+ "slab",
+ "socket2 0.4.9",
+ "waker-fn",
+]
+
+[[package]]
+name = "async-lock"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b"
+dependencies = [
+ "event-listener",
+]
+
+[[package]]
+name = "async-once-cell"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9338790e78aa95a416786ec8389546c4b6a1dfc3dc36071ed9518a9413a542eb"
+
+[[package]]
+name = "async-process"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a9d28b1d97e08915212e2e45310d47854eafa69600756fc735fb788f75199c9"
+dependencies = [
+ "async-io",
+ "async-lock",
+ "autocfg",
+ "blocking",
+ "cfg-if",
+ "event-listener",
+ "futures-lite",
+ "rustix 0.37.23",
+ "signal-hook",
+ "windows-sys",
+]
+
+[[package]]
+name = "async-recursion"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e97ce7de6cf12de5d7226c73f5ba9811622f4db3a5b91b55c53e987e5f91cba"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "async-rx"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a30de4e5329a0947e389f738a6ca0d0b938fea5cb7baaeae7d72e243614468a2"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "async-std"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d"
+dependencies = [
+ "async-channel",
+ "async-global-executor",
+ "async-io",
+ "async-lock",
+ "async-process",
+ "crossbeam-utils",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-lite",
+ "gloo-timers",
+ "kv-log-macro",
+ "log",
+ "memchr",
+ "once_cell",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+ "wasm-bindgen-futures",
+]
+
+[[package]]
+name = "async-stream"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51"
+dependencies = [
+ "async-stream-impl",
+ "futures-core",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "async-stream-impl"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "async-task"
+version = "4.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ecc7ab41815b3c653ccd2978ec3255c81349336702dfdf62ee6f7069b12a3aae"
+
+[[package]]
+name = "async-trait"
+version = "0.1.73"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "async_cell"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "834eee9ce518130a3b4d5af09ecc43e9d6b57ee76613f227a1ddd6b77c7a62bc"
+
+[[package]]
+name = "atomic"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c59bdb34bc650a32731b31bd8f0829cc15d24a708ee31559e0bb34f2bc320cba"
+
+[[package]]
+name = "atomic-waker"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1181e1e0d1fce796a03db1ae795d67167da795f9cf4a39c37589e85ef57f26d3"
+
+[[package]]
+name = "atomic_refcell"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "79d6dc922a2792b006573f60b2648076355daeae5ce9cb59507e5908c9625d31"
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "backoff"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b62ddb9cb1ec0a098ad4bbf9344d0713fa193ae1a80af55febcff2627b6a00c1"
+dependencies = [
+ "futures-core",
+ "getrandom",
+ "instant",
+ "pin-project-lite",
+ "rand",
+ "tokio",
+]
+
+[[package]]
+name = "backtrace"
+version = "0.3.68"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4319208da049c43661739c5fade2ba182f09d1dc2299b32298d3a31692b17e12"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base64"
+version = "0.21.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d"
+
+[[package]]
+name = "base64ct"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b"
+
+[[package]]
+name = "bindgen"
+version = "0.64.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4243e6031260db77ede97ad86c27e501d646a27ab57b59a574f725d98ab1fb4"
+dependencies = [
+ "bitflags 1.3.2",
+ "cexpr",
+ "clang-sys",
+ "lazy_static",
+ "lazycell",
+ "peeking_take_while",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "rustc-hash",
+ "shlex",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "bit_field"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635"
+
+[[package]]
+name = "bitmaps"
+version = "3.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "703642b98a00b3b90513279a8ede3fcfa479c126c5fb46e78f3051522f021403"
+
+[[package]]
+name = "blake3"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "199c42ab6972d92c9f8995f086273d25c42fc0f7b2a1fcefba465c1352d25ba5"
+dependencies = [
+ "arrayref",
+ "arrayvec",
+ "cc",
+ "cfg-if",
+ "constant_time_eq",
+ "digest",
+]
+
+[[package]]
+name = "block"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "block-padding"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "blocking"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77231a1c8f801696fc0123ec6150ce92cffb8e164a02afb9c8ddee0e9b65ad65"
+dependencies = [
+ "async-channel",
+ "async-lock",
+ "async-task",
+ "atomic-waker",
+ "fastrand 1.9.0",
+ "futures-lite",
+ "log",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1"
+
+[[package]]
+name = "bytemuck"
+version = "1.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "bytes"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
+
+[[package]]
+name = "bytesize"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38fcc2979eff34a4b84e1cf9a1e3da42a7d44b3b690a40cdcb23e3d556cfb2e5"
+
+[[package]]
+name = "cairo-rs"
+version = "0.17.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab3603c4028a5e368d09b51c8b624b9a46edcd7c3778284077a6125af73c9f0a"
+dependencies = [
+ "bitflags 1.3.2",
+ "cairo-sys-rs",
+ "glib",
+ "libc",
+ "once_cell",
+ "thiserror",
+]
+
+[[package]]
+name = "cairo-sys-rs"
+version = "0.17.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "691d0c66b1fb4881be80a760cb8fe76ea97218312f9dfe2c9cc0f496ca279cb1"
+dependencies = [
+ "glib-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "cbc"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6"
+dependencies = [
+ "cipher 0.4.4",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.82"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "305fe645edc1442a0fa8b6726ba61d422798d37a52e12eaecf4b022ebbb88f01"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "cexpr"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
+dependencies = [
+ "nom",
+]
+
+[[package]]
+name = "cfg-expr"
+version = "0.15.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b40ccee03b5175c18cde8f37e7d2a33bcef6f8ec8f7cc0d81090d1bb380949c9"
+dependencies = [
+ "smallvec",
+ "target-lexicon",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "cfg-vis"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3a2c3bf5fc10fe2ca157564fbe08a4cb2b0a7d2ff3fe2f9683e65d5e7c7859c"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "chacha20"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c80e5460aa66fe3b91d40bcbdab953a597b60053e34d684ac6903f863b680a6"
+dependencies = [
+ "cfg-if",
+ "cipher 0.3.0",
+ "cpufeatures",
+ "zeroize",
+]
+
+[[package]]
+name = "chacha20poly1305"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a18446b09be63d457bbec447509e85f662f32952b035ce892290396bc0b0cff5"
+dependencies = [
+ "aead",
+ "chacha20",
+ "cipher 0.3.0",
+ "poly1305",
+ "zeroize",
+]
+
+[[package]]
+name = "checked_int_cast"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17cc5e6b5ab06331c33589842070416baa137e8b0eb912b008cfd4a78ada7919"
+
+[[package]]
+name = "chrono"
+version = "0.4.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5"
+dependencies = [
+ "android-tzdata",
+ "iana-time-zone",
+ "js-sys",
+ "num-traits",
+ "time",
+ "wasm-bindgen",
+ "winapi",
+]
+
+[[package]]
+name = "cipher"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "cipher"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad"
+dependencies = [
+ "crypto-common",
+ "inout",
+ "zeroize",
+]
+
+[[package]]
+name = "clang-sys"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f"
+dependencies = [
+ "glob",
+ "libc",
+]
+
+[[package]]
+name = "color_quant"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
+
+[[package]]
+name = "concurrent-queue"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62ec6771ecfa0762d24683ee5a32ad78487a3d3afdc0fb8cae19d2c5deb50b7c"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "const-oid"
+version = "0.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f"
+
+[[package]]
+name = "const_panic"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6051f239ecec86fde3410901ab7860d458d160371533842974fc61f96d15879b"
+
+[[package]]
+name = "constant_time_eq"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2"
+
+[[package]]
+name = "cookie-factory"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "396de984970346b0d9e93d1415082923c679e5ae5c3ee3dcbd104f5610af126b"
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+dependencies = [
+ "cfg-if",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "crossbeam-utils",
+ "memoffset 0.9.0",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crunchy"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "rand_core",
+ "typenum",
+]
+
+[[package]]
+name = "ctr"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835"
+dependencies = [
+ "cipher 0.4.4",
+]
+
+[[package]]
+name = "curve25519-dalek"
+version = "4.0.0"
+source = "git+https://github.com/dalek-cryptography/curve25519-dalek/?rev=e44d4b5903106dde0e5b28a2580061de7dfe8a9f#e44d4b5903106dde0e5b28a2580061de7dfe8a9f"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "curve25519-dalek-derive",
+ "digest",
+ "fiat-crypto",
+ "platforms",
+ "rustc_version",
+ "serde",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "curve25519-dalek-derive"
+version = "0.1.0"
+source = "git+https://github.com/dalek-cryptography/curve25519-dalek/?rev=e44d4b5903106dde0e5b28a2580061de7dfe8a9f#e44d4b5903106dde0e5b28a2580061de7dfe8a9f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "darling"
+version = "0.14.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850"
+dependencies = [
+ "darling_core",
+ "darling_macro",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.14.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "strsim",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.14.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e"
+dependencies = [
+ "darling_core",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "dashmap"
+version = "5.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6943ae99c34386c84a470c499d3414f66502a41340aa895406e0d2e4a207b91d"
+dependencies = [
+ "cfg-if",
+ "hashbrown 0.14.0",
+ "lock_api",
+ "once_cell",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "deadpool"
+version = "0.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "421fe0f90f2ab22016f32a9881be5134fdd71c65298917084b0c7477cbc3856e"
+dependencies = [
+ "async-trait",
+ "deadpool-runtime",
+ "num_cpus",
+ "retain_mut",
+ "tokio",
+]
+
+[[package]]
+name = "deadpool-runtime"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eaa37046cc0f6c3cc6090fbdbf73ef0b8ef4cfcc37f6befc0020f63e8cf121e1"
+dependencies = [
+ "tokio",
+]
+
+[[package]]
+name = "deadpool-sqlite"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e026821eaacbce25ff0d54405e4421d71656fcae3e4a9323461280fcda6dbc7d"
+dependencies = [
+ "deadpool",
+ "deadpool-sync",
+ "rusqlite",
+]
+
+[[package]]
+name = "deadpool-sync"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1bea344b64b32537fde6e0f0179b1ede34d435636719dd40fe6a0f28218a61c"
+dependencies = [
+ "deadpool",
+]
+
+[[package]]
+name = "der"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c"
+dependencies = [
+ "const-oid",
+ "der_derive",
+ "flagset",
+ "zeroize",
+]
+
+[[package]]
+name = "der_derive"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fe87ce4529967e0ba1dcf8450bab64d97dfd5010a6256187ffe2e43e6f0e049"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "derivative"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "derive_builder"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d67778784b508018359cbc8696edb3db78160bab2c2a28ba7f56ef6932997f8"
+dependencies = [
+ "derive_builder_macro",
+]
+
+[[package]]
+name = "derive_builder_core"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c11bdc11a0c47bc7d37d582b5285da6849c96681023680b906673c5707af7b0f"
+dependencies = [
+ "darling",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "derive_builder_macro"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebcda35c7a396850a55ffeac740804b40ffec779b98fffbb1738f4033f0ee79e"
+dependencies = [
+ "derive_builder_core",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "dirs"
+version = "5.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225"
+dependencies = [
+ "dirs-sys",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c"
+dependencies = [
+ "libc",
+ "option-ext",
+ "redox_users",
+ "windows-sys",
+]
+
+[[package]]
+name = "displaydoc"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "djb_hash"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8cf7d61e627a3b49af8f24f47e57f3788cdd7a0e4f17cd79fda5ada87f08578"
+
+[[package]]
+name = "ed25519"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fb04eee5d9d907f29e80ee6b0e78f7e2c82342c63e3580d8c4f69d9d5aad963"
+dependencies = [
+ "pkcs8",
+ "serde",
+ "signature",
+]
+
+[[package]]
+name = "ed25519-dalek"
+version = "2.0.0-rc.3"
+source = "git+https://github.com/dalek-cryptography/curve25519-dalek/?rev=e44d4b5903106dde0e5b28a2580061de7dfe8a9f#e44d4b5903106dde0e5b28a2580061de7dfe8a9f"
+dependencies = [
+ "curve25519-dalek",
+ "ed25519",
+ "rand_core",
+ "serde",
+ "sha2",
+ "zeroize",
+]
+
+[[package]]
+name = "either"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "enumflags2"
+version = "0.7.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c041f5090df68b32bcd905365fd51769c8b9d553fe87fde0b683534f10c01bd2"
+dependencies = [
+ "enumflags2_derive",
+ "serde",
+]
+
+[[package]]
+name = "enumflags2_derive"
+version = "0.7.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e9a1f9f7d83e59740248a6e14ecf93929ade55027844dfcea78beafccc15745"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "equivalent"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+
+[[package]]
+name = "errno"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b30f669a7961ef1631673d2766cc92f52d64f7ef354d4fe0ddfd30ed52f0f4f"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "event-listener"
+version = "2.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
+
+[[package]]
+name = "exr"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d1e481eb11a482815d3e9d618db8c42a93207134662873809335a92327440c18"
+dependencies = [
+ "bit_field",
+ "flume",
+ "half",
+ "lebe",
+ "miniz_oxide",
+ "rayon-core",
+ "smallvec",
+ "zune-inflate",
+]
+
+[[package]]
+name = "eyeball"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78a7b57c052e83f2bd8d756fc379132e43d3786f3767856026ee3757868f099f"
+dependencies = [
+ "futures-core",
+ "readlock",
+]
+
+[[package]]
+name = "eyeball-im"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d999ff633cd7243e8b9efc2a1e35846517f16ce4c3c87a70e0a829d8fb29af3"
+dependencies = [
+ "futures-core",
+ "imbl",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "eyeball-im-util"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a51602d13a284f2241af1d8dc020dd22f49a6bbbf420a5eccbea6c399069a45"
+dependencies = [
+ "eyeball-im",
+ "futures-core",
+ "imbl",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "fallible-iterator"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7"
+
+[[package]]
+name = "fallible-streaming-iterator"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a"
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "fastrand"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764"
+
+[[package]]
+name = "fdeflate"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d329bdeac514ee06249dabc27877490f17f5d371ec693360768b838e19f3ae10"
+dependencies = [
+ "simd-adler32",
+]
+
+[[package]]
+name = "fiat-crypto"
+version = "0.1.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e825f6987101665dea6ec934c09ec6d721de7bc1bf92248e1d5810c8cd636b77"
+
+[[package]]
+name = "field-offset"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f"
+dependencies = [
+ "memoffset 0.9.0",
+ "rustc_version",
+]
+
+[[package]]
+name = "flagset"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cda653ca797810c02f7ca4b804b40b8b95ae046eb989d356bce17919a8c25499"
+
+[[package]]
+name = "flate2"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "flume"
+version = "0.10.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+ "nanorand",
+ "pin-project",
+ "spin 0.9.8",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "fractal"
+version = "5.0.0-beta2"
+dependencies = [
+ "ashpd",
+ "djb_hash",
+ "eyeball-im",
+ "futures-channel",
+ "futures-util",
+ "geo-uri",
+ "gettext-rs",
+ "gst-plugin-gtk4",
+ "gstreamer",
+ "gstreamer-base",
+ "gstreamer-pbutils",
+ "gstreamer-play",
+ "gstreamer-video",
+ "gtk4",
+ "html-escape",
+ "html2pango",
+ "html5gum",
+ "image 0.24.7",
+ "indexmap 2.0.0",
+ "libadwaita",
+ "libshumate",
+ "matrix-sdk",
+ "matrix-sdk-ui",
+ "mime",
+ "mime_guess",
+ "once_cell",
+ "oo7",
+ "pulldown-cmark",
+ "qrcode",
+ "rand",
+ "regex",
+ "rmp-serde",
+ "rqrr",
+ "ruma",
+ "secular",
+ "serde",
+ "serde_json",
+ "sourceview5",
+ "strum",
+ "thiserror",
+ "tokio",
+ "tracing",
+ "tracing-subscriber",
+ "url",
+]
+
+[[package]]
+name = "futf"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843"
+dependencies = [
+ "mac",
+ "new_debug_unreachable",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
+dependencies = [
+ "futures-core",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
+
+[[package]]
+name = "futures-lite"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce"
+dependencies = [
+ "fastrand 1.9.0",
+ "futures-core",
+ "futures-io",
+ "memchr",
+ "parking",
+ "pin-project-lite",
+ "waker-fn",
+]
+
+[[package]]
+name = "futures-macro"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
+
+[[package]]
+name = "futures-task"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
+
+[[package]]
+name = "futures-util"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "fuzzy-matcher"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54614a3312934d066701a80f20f15fa3b56d67ac7722b39eea5b4c9dd1d66c94"
+dependencies = [
+ "thread_local",
+]
+
+[[package]]
+name = "g2gen"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc2c7625b2fc250dd90b63f7887a6bb0f7ec1d714c8278415bea2669ef20820e"
+dependencies = [
+ "g2poly",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "g2p"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc36d9bdc3d2da057775a9f4fa7d7b09edab3e0eda7a92cc353358fa63b8519e"
+dependencies = [
+ "g2gen",
+ "g2poly",
+]
+
+[[package]]
+name = "g2poly"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af6a86e750338603ea2c14b1c0bfe58cd61f87ca67a0021d9334996024608e12"
+
+[[package]]
+name = "gdk-pixbuf"
+version = "0.17.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "695d6bc846438c5708b07007537b9274d883373dd30858ca881d7d71b5540717"
+dependencies = [
+ "bitflags 1.3.2",
+ "gdk-pixbuf-sys",
+ "gio",
+ "glib",
+ "libc",
+ "once_cell",
+]
+
+[[package]]
+name = "gdk-pixbuf-sys"
+version = "0.17.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9285ec3c113c66d7d0ab5676599176f1f42f4944ca1b581852215bf5694870cb"
+dependencies = [
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "gdk4"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3abf96408a26e3eddf881a7f893a1e111767137136e347745e8ea6ed12731ff"
+dependencies = [
+ "bitflags 1.3.2",
+ "cairo-rs",
+ "gdk-pixbuf",
+ "gdk4-sys",
+ "gio",
+ "glib",
+ "libc",
+ "pango",
+]
+
+[[package]]
+name = "gdk4-sys"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bc92aa1608c089c49393d014c38ac0390d01e4841e1fedaa75dbcef77aaed64"
+dependencies = [
+ "cairo-sys-rs",
+ "gdk-pixbuf-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "pango-sys",
+ "pkg-config",
+ "system-deps",
+]
+
+[[package]]
+name = "gdk4-wayland"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fa73894ed86fe10157436123d8baae5f2924ebc4fa48a11d8f093e07b9ecbbd"
+dependencies = [
+ "gdk4",
+ "gdk4-wayland-sys",
+ "gio",
+ "glib",
+ "libc",
+]
+
+[[package]]
+name = "gdk4-wayland-sys"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af41c5a9cd7e06f612b91ec45ecb423ab57921bbd92f56e46a67b962be198e0c"
+dependencies = [
+ "glib-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "gdk4-win32"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a79a5672b4b26ece3fc144c5be6c8d0ef2d84d37fed65002e5b1576fbc3ec00"
+dependencies = [
+ "gdk4",
+ "gdk4-win32-sys",
+ "gio",
+ "glib",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "gdk4-win32-sys"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2c1b84458185383da1d8877f812cccffd83a3cb42959d646e3e9a4ad0bc09ac"
+dependencies = [
+ "gdk-pixbuf-sys",
+ "gdk4-sys",
+ "glib-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "gdk4-x11"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17de2c3554d5127b9dfacd4d1801e2e3c9163bce01c6e1c407c054e9b771f2ee"
+dependencies = [
+ "gdk4",
+ "gdk4-x11-sys",
+ "gio",
+ "glib",
+ "libc",
+]
+
+[[package]]
+name = "gdk4-x11-sys"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6ca6c03d5019467d21671936edeba09f908039900af8ce4b834c19646031c72"
+dependencies = [
+ "gdk4-sys",
+ "glib-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "geo-uri"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6b8812a079cb4a3b5b366c2d05db8e231e2f231c443acb3532daad996d89f71"
+dependencies = [
+ "derive_builder",
+ "thiserror",
+]
+
+[[package]]
+name = "getopts"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "gettext-rs"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e49ea8a8fad198aaa1f9655a2524b64b70eb06b2f3ff37da407566c93054f364"
+dependencies = [
+ "gettext-sys",
+ "locale_config",
+]
+
+[[package]]
+name = "gettext-sys"
+version = "0.21.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c63ce2e00f56a206778276704bbe38564c8695249fdc8f354b4ef71c57c3839d"
+dependencies = [
+ "cc",
+ "temp-dir",
+]
+
+[[package]]
+name = "gif"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80792593675e051cf94a4b111980da2ba60d4a83e43e0048c5693baab3977045"
+dependencies = [
+ "color_quant",
+ "weezl",
+]
+
+[[package]]
+name = "gimli"
+version = "0.27.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e"
+
+[[package]]
+name = "gio"
+version = "0.17.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6973e92937cf98689b6a054a9e56c657ed4ff76de925e36fc331a15f0c5d30a"
+dependencies = [
+ "bitflags 1.3.2",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-util",
+ "gio-sys",
+ "glib",
+ "libc",
+ "once_cell",
+ "pin-project-lite",
+ "smallvec",
+ "thiserror",
+]
+
+[[package]]
+name = "gio-sys"
+version = "0.17.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ccf87c30a12c469b6d958950f6a9c09f2be20b7773f7e70d20b867fdf2628c3"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+ "winapi",
+]
+
+[[package]]
+name = "glib"
+version = "0.17.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3fad45ba8d4d2cea612b432717e834f48031cd8853c8aaf43b2c79fec8d144b"
+dependencies = [
+ "bitflags 1.3.2",
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-task",
+ "futures-util",
+ "gio-sys",
+ "glib-macros",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "memchr",
+ "once_cell",
+ "smallvec",
+ "thiserror",
+]
+
+[[package]]
+name = "glib-macros"
+version = "0.17.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eca5c79337338391f1ab8058d6698125034ce8ef31b72a442437fa6c8580de26"
+dependencies = [
+ "anyhow",
+ "heck",
+ "proc-macro-crate",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "glib-sys"
+version = "0.17.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d80aa6ea7bba0baac79222204aa786a6293078c210abe69ef1336911d4bdc4f0"
+dependencies = [
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "gloo-timers"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "gloo-utils"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "037fcb07216cb3a30f7292bd0176b050b7b9a052ba830ef7d5d65f6dc64ba58e"
+dependencies = [
+ "js-sys",
+ "serde",
+ "serde_json",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "gobject-sys"
+version = "0.17.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd34c3317740a6358ec04572c1bcfd3ac0b5b6529275fae255b237b314bb8062"
+dependencies = [
+ "glib-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "graphene-rs"
+version = "0.17.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "def4bb01265b59ed548b05455040d272d989b3012c42d4c1bbd39083cb9b40d9"
+dependencies = [
+ "glib",
+ "graphene-sys",
+ "libc",
+]
+
+[[package]]
+name = "graphene-sys"
+version = "0.17.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1856fc817e6a6675e36cea0bd9a3afe296f5d9709d1e2d3182803ac77f0ab21d"
+dependencies = [
+ "glib-sys",
+ "libc",
+ "pkg-config",
+ "system-deps",
+]
+
+[[package]]
+name = "gsk4"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f01ef44fa7cac15e2da9978529383e6bee03e570ba5bf7036b4c10a15cc3a3c"
+dependencies = [
+ "bitflags 1.3.2",
+ "cairo-rs",
+ "gdk4",
+ "glib",
+ "graphene-rs",
+ "gsk4-sys",
+ "libc",
+ "pango",
+]
+
+[[package]]
+name = "gsk4-sys"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c07a84fb4dcf1323d29435aa85e2f5f58bef564342bef06775ec7bd0da1f01b0"
+dependencies = [
+ "cairo-sys-rs",
+ "gdk4-sys",
+ "glib-sys",
+ "gobject-sys",
+ "graphene-sys",
+ "libc",
+ "pango-sys",
+ "system-deps",
+]
+
+[[package]]
+name = "gst-plugin-gtk4"
+version = "0.10.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d1e0cc90b7251d84c6b256a41973c3255cd2b2267ab1b829d053f76bca7c6290"
+dependencies = [
+ "gdk4-win32",
+ "gst-plugin-version-helper",
+ "gstreamer",
+ "gstreamer-base",
+ "gstreamer-gl",
+ "gstreamer-video",
+ "gtk4",
+ "once_cell",
+ "windows-sys",
+]
+
+[[package]]
+name = "gst-plugin-version-helper"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87921209945e5dc809848a100115fad65bd127671896f0206f45e272080cc4c9"
+dependencies = [
+ "chrono",
+]
+
+[[package]]
+name = "gstreamer"
+version = "0.20.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0a4150420d4aa1caf6fa15f0dba7a5007d4116380633bd1253acce206098fc9"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "glib",
+ "gstreamer-sys",
+ "libc",
+ "muldiv",
+ "num-integer",
+ "num-rational 0.4.1",
+ "once_cell",
+ "option-operations",
+ "paste",
+ "pretty-hex",
+ "smallvec",
+ "thiserror",
+]
+
+[[package]]
+name = "gstreamer-audio"
+version = "0.20.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8448db43cee0270c6ca94e6771c92a4c3b14c51ac1e6605a5f2deef66f5516f1"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if",
+ "glib",
+ "gstreamer",
+ "gstreamer-audio-sys",
+ "gstreamer-base",
+ "libc",
+ "once_cell",
+]
+
+[[package]]
+name = "gstreamer-audio-sys"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d4001b779e4707b32acd6ec0960e327b926369c1a34f7c41d477ac42b2670e8"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "gstreamer-base-sys",
+ "gstreamer-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "gstreamer-base"
+version = "0.20.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0896c4acff303dd21d6a96a7ea4cc9339f7096230fe1433720c9f0bed203985"
+dependencies = [
+ "atomic_refcell",
+ "bitflags 1.3.2",
+ "cfg-if",
+ "glib",
+ "gstreamer",
+ "gstreamer-base-sys",
+ "libc",
+ "once_cell",
+]
+
+[[package]]
+name = "gstreamer-base-sys"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26114ed96f6668380f5a1554128159e98e06c3a7a8460f216d7cd6dce28f928c"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "gstreamer-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "gstreamer-gl"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b82b83d18ad1c4d890694b4bedde170c748462a11f51a68428671bc1bf93e71e"
+dependencies = [
+ "bitflags 1.3.2",
+ "glib",
+ "gstreamer",
+ "gstreamer-base",
+ "gstreamer-gl-sys",
+ "gstreamer-video",
+ "libc",
+ "once_cell",
+]
+
+[[package]]
+name = "gstreamer-gl-sys"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f08af9ae5ca5aa01c4875346bb7e61310b75a9afc3607b52a6b73470be93bbc7"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "gstreamer-base-sys",
+ "gstreamer-sys",
+ "gstreamer-video-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "gstreamer-pbutils"
+version = "0.20.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b63dd523f9dd60329ccfabdd76813b4dfe5a3bbf9fc108d3aa015f012e87778c"
+dependencies = [
+ "bitflags 1.3.2",
+ "glib",
+ "gstreamer",
+ "gstreamer-audio",
+ "gstreamer-pbutils-sys",
+ "gstreamer-video",
+ "libc",
+ "thiserror",
+]
+
+[[package]]
+name = "gstreamer-pbutils-sys"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7cb4493d59f28023656686c7a3581ddbd510b309a861776586afcf9a52ed222b"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "gstreamer-audio-sys",
+ "gstreamer-sys",
+ "gstreamer-video-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "gstreamer-play"
+version = "0.20.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f752a53171e330c7f56db24ca91d99b7958dc86395ebe91b117226d339b29306"
+dependencies = [
+ "bitflags 1.3.2",
+ "glib",
+ "gstreamer",
+ "gstreamer-play-sys",
+ "gstreamer-video",
+ "libc",
+ "once_cell",
+]
+
+[[package]]
+name = "gstreamer-play-sys"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b69030bd53c3e5988a1e13bdb55ae8d922f8e9c2b522bfa2442bc13906829fb"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "gstreamer-sys",
+ "gstreamer-video-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "gstreamer-sys"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e56fe047adef7d47dbafa8bc1340fddb53c325e16574763063702fc94b5786d2"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "gstreamer-video"
+version = "0.20.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b69a9554795d3791b8467a30b35ed40ef279aa41c857e6f414ffd6a182a20225"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if",
+ "futures-channel",
+ "glib",
+ "gstreamer",
+ "gstreamer-base",
+ "gstreamer-video-sys",
+ "libc",
+ "once_cell",
+]
+
+[[package]]
+name = "gstreamer-video-sys"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "66ddb6112d438aac0004d2db6053a572f92b1c5e0e9d6ff6c71d9245f7f73e46"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "gstreamer-base-sys",
+ "gstreamer-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "gtk4"
+version = "0.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b28a32a04cd75cef14a0983f8b0c669e0fe152a0a7725accdeb594e2c764c88b"
+dependencies = [
+ "bitflags 1.3.2",
+ "cairo-rs",
+ "field-offset",
+ "futures-channel",
+ "gdk-pixbuf",
+ "gdk4",
+ "gio",
+ "glib",
+ "graphene-rs",
+ "gsk4",
+ "gtk4-macros",
+ "gtk4-sys",
+ "libc",
+ "once_cell",
+ "pango",
+]
+
+[[package]]
+name = "gtk4-macros"
+version = "0.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a4d6b61570f76d3ee542d984da443b1cd69b6105264c61afec3abed08c2500f"
+dependencies = [
+ "anyhow",
+ "proc-macro-crate",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "gtk4-sys"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f8283f707b07e019e76c7f2934bdd4180c277e08aa93f4c0d8dd07b7a34e22f"
+dependencies = [
+ "cairo-sys-rs",
+ "gdk-pixbuf-sys",
+ "gdk4-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "graphene-sys",
+ "gsk4-sys",
+ "libc",
+ "pango-sys",
+ "system-deps",
+]
+
+[[package]]
+name = "h2"
+version = "0.3.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97ec8491ebaf99c8eaa73058b045fe58073cd6be7f596ac993ced0b0a0c01049"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap 1.9.3",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "half"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02b4af3693f1b705df946e9fe5631932443781d0aabb423b62fcd4d73f6d2fd0"
+dependencies = [
+ "crunchy",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "hashbrown"
+version = "0.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e"
+dependencies = [
+ "ahash",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a"
+dependencies = [
+ "ahash",
+ "allocator-api2",
+]
+
+[[package]]
+name = "hashlink"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "312f66718a2d7789ffef4f4b7b213138ed9f1eb3aa1d0d82fc99f88fb3ffd26f"
+dependencies = [
+ "hashbrown 0.14.0",
+]
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b"
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
+name = "hkdf"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437"
+dependencies = [
+ "hmac",
+]
+
+[[package]]
+name = "hmac"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
+dependencies = [
+ "digest",
+]
+
+[[package]]
+name = "html-escape"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d1ad449764d627e22bfd7cd5e8868264fc9236e07c752972b4080cd351cb476"
+dependencies = [
+ "utf8-width",
+]
+
+[[package]]
+name = "html2pango"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e22f189d26bf7cf4652dbe49da86f3a27628f745469365f1d2575ea8caf54eaf"
+dependencies = [
+ "ammonia",
+ "anyhow",
+ "html5ever",
+ "linkify",
+ "maplit",
+ "markup5ever_rcdom",
+ "once_cell",
+ "regex",
+]
+
+[[package]]
+name = "html5ever"
+version = "0.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bea68cab48b8459f17cf1c944c67ddc572d272d9f2b274140f223ecb1da4a3b7"
+dependencies = [
+ "log",
+ "mac",
+ "markup5ever",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "html5gum"
+version = "0.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c4e556171a058ba117bbe88b059fb37b6289023e007d2903ea6dca3a3cbff14"
+dependencies = [
+ "jetscii",
+]
+
+[[package]]
+name = "http"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
+
+[[package]]
+name = "hyper"
+version = "0.14.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2 0.4.9",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-tls"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
+dependencies = [
+ "bytes",
+ "hyper",
+ "native-tls",
+ "tokio",
+ "tokio-native-tls",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.57"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "windows",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "ident_case"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+
+[[package]]
+name = "idna"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "image"
+version = "0.23.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24ffcb7e7244a9bf19d35bf2883b9c080c4ced3c07a9895572178cdb8f13f6a1"
+dependencies = [
+ "bytemuck",
+ "byteorder",
+ "color_quant",
+ "num-iter",
+ "num-rational 0.3.2",
+ "num-traits",
+]
+
+[[package]]
+name = "image"
+version = "0.24.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f3dfdbdd72063086ff443e297b61695500514b1e41095b6fb9a5ab48a70a711"
+dependencies = [
+ "bytemuck",
+ "byteorder",
+ "color_quant",
+ "exr",
+ "gif",
+ "jpeg-decoder",
+ "num-rational 0.4.1",
+ "num-traits",
+ "png",
+ "qoi",
+ "tiff",
+]
+
+[[package]]
+name = "imbl"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2806b69cd9f4664844027b64465eacb444c67c1db9c778e341adff0c25cdb0d"
+dependencies = [
+ "bitmaps",
+ "imbl-sized-chunks",
+ "rand_core",
+ "rand_xoshiro",
+ "serde",
+ "version_check",
+]
+
+[[package]]
+name = "imbl-sized-chunks"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6957ea0b2541c5ca561d3ef4538044af79f8a05a1eb3a3b148936aaceaa1076"
+dependencies = [
+ "bitmaps",
+]
+
+[[package]]
+name = "indexed_db_futures"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfbcff6ae46750b15cc594bfd277b188cbddcfdc1817848f97f03f26f8625b9e"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "uuid",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+dependencies = [
+ "autocfg",
+ "hashbrown 0.12.3",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d"
+dependencies = [
+ "equivalent",
+ "hashbrown 0.14.0",
+ "serde",
+]
+
+[[package]]
+name = "inout"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5"
+dependencies = [
+ "block-padding",
+ "generic-array",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
+dependencies = [
+ "hermit-abi",
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6"
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itertools"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
+
+[[package]]
+name = "jetscii"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "47f142fe24a9c9944451e8349de0a56af5f3e7226dc46f3ed4d4ecc0b85af75e"
+
+[[package]]
+name = "jpeg-decoder"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e"
+dependencies = [
+ "rayon",
+]
+
+[[package]]
+name = "js-sys"
+version = "0.3.64"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "js_int"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d937f95470b270ce8b8950207715d71aa8e153c0d44c6684d59397ed4949160a"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "js_option"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68421373957a1593a767013698dbf206e2b221eefe97a44d98d18672ff38423c"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "konst"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "030400e39b2dff8beaa55986a17e0014ad657f569ca92426aafcb5e8e71faee7"
+dependencies = [
+ "const_panic",
+ "konst_kernel",
+ "typewit",
+]
+
+[[package]]
+name = "konst_kernel"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3376133edc39f027d551eb77b077c2865a0ef252b2e7d0dd6b6dc303db95d8b5"
+dependencies = [
+ "typewit",
+]
+
+[[package]]
+name = "kv-log-macro"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f"
+dependencies = [
+ "log",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+dependencies = [
+ "spin 0.5.2",
+]
+
+[[package]]
+name = "lazycell"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
+
+[[package]]
+name = "lebe"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8"
+
+[[package]]
+name = "libadwaita"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1c4efd2020a4fcedbad2c4a97de97bf6045e5dc49d61d5a5d0cfd753db60700"
+dependencies = [
+ "bitflags 1.3.2",
+ "futures-channel",
+ "gdk-pixbuf",
+ "gdk4",
+ "gio",
+ "glib",
+ "gtk4",
+ "libadwaita-sys",
+ "libc",
+ "once_cell",
+ "pango",
+]
+
+[[package]]
+name = "libadwaita-sys"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0727b85b4fe2b1bed5ac90df6343de15cbf8118bfb96d7c3cc1512681a4b34ac"
+dependencies = [
+ "gdk4-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "gtk4-sys",
+ "libc",
+ "pango-sys",
+ "system-deps",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.147"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
+
+[[package]]
+name = "libm"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4"
+
+[[package]]
+name = "libshumate"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f835052474118c10cfa5583e2d531a262ad7ea0909ae1a8a4e94b5d6d472078"
+dependencies = [
+ "gdk-pixbuf",
+ "gdk4",
+ "gio",
+ "glib",
+ "gtk4",
+ "libc",
+ "libshumate-sys",
+ "once_cell",
+]
+
+[[package]]
+name = "libshumate-sys"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61ab625df72e11d45d52793e388b5052ab2af7945d8a4d469f427a568f9a29bb"
+dependencies = [
+ "gdk-pixbuf-sys",
+ "gdk4-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "gtk4-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "libspa"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "667dfbb50c3d1f7ee1d33afdc04d1255923ece7642db3303046e7d63d997d77d"
+dependencies = [
+ "bitflags 1.3.2",
+ "cc",
+ "cookie-factory",
+ "errno",
+ "libc",
+ "libspa-sys",
+ "nom",
+ "system-deps",
+]
+
+[[package]]
+name = "libspa-sys"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "79cf5b88f52534df7ca88d451ae9628e22124e3cc5c60966465a7db479534c7a"
+dependencies = [
+ "bindgen",
+ "cc",
+ "system-deps",
+]
+
+[[package]]
+name = "libsqlite3-sys"
+version = "0.25.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29f835d03d717946d28b1d1ed632eb6f0e24a299388ee623d0c23118d3e8a7fa"
+dependencies = [
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "linkify"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96dd5884008358112bc66093362197c7248ece00d46624e2cf71e50029f8cff5"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503"
+
+[[package]]
+name = "locale_config"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d2c35b16f4483f6c26f0e4e9550717a2f6575bcd6f12a53ff0c490a94a6934"
+dependencies = [
+ "lazy_static",
+ "objc",
+ "objc-foundation",
+ "regex",
+ "winapi",
+]
+
+[[package]]
+name = "lock_api"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4"
+dependencies = [
+ "value-bag",
+]
+
+[[package]]
+name = "lru"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "71e7d46de488603ffdd5f30afbc64fbba2378214a2c3a2fb83abf3d33126df17"
+dependencies = [
+ "hashbrown 0.13.2",
+]
+
+[[package]]
+name = "mac"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4"
+
+[[package]]
+name = "malloc_buf"
+version = "0.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "maplit"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d"
+
+[[package]]
+name = "markup5ever"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a2629bb1404f3d34c2e921f21fd34ba00b206124c81f65c50b43b6aaefeb016"
+dependencies = [
+ "log",
+ "phf 0.10.1",
+ "phf_codegen",
+ "string_cache",
+ "string_cache_codegen",
+ "tendril",
+]
+
+[[package]]
+name = "markup5ever_rcdom"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9521dd6750f8e80ee6c53d65e2e4656d7de37064f3a7a5d2d11d05df93839c2"
+dependencies = [
+ "html5ever",
+ "markup5ever",
+ "tendril",
+ "xml5ever",
+]
+
+[[package]]
+name = "matchers"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
+dependencies = [
+ "regex-automata 0.1.10",
+]
+
+[[package]]
+name = "matrix-pickle"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b18185b3f64cc8d44840dbf92d92aeb05c1ef97094f51a32c1afd36a4415d225"
+dependencies = [
+ "matrix-pickle-derive",
+ "thiserror",
+]
+
+[[package]]
+name = "matrix-pickle-derive"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cef08fbb48d0d5125d3885e422c426b5be84067c63ceb5d8b32f9130143f5b81"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "matrix-sdk"
+version = "0.6.2"
+source = "git+https://github.com/matrix-org/matrix-rust-sdk.git?rev=4643bae28445e058080896a280083b32fd403146#4643bae28445e058080896a280083b32fd403146"
+dependencies = [
+ "anymap2",
+ "async-stream",
+ "async-trait",
+ "backoff",
+ "bytes",
+ "bytesize",
+ "cfg-vis",
+ "dashmap",
+ "event-listener",
+ "eyeball",
+ "eyeball-im",
+ "eyeball-im-util",
+ "futures-core",
+ "futures-util",
+ "gloo-timers",
+ "http",
+ "hyper",
+ "image 0.24.7",
+ "imbl",
+ "matrix-sdk-base",
+ "matrix-sdk-common",
+ "matrix-sdk-indexeddb",
+ "matrix-sdk-sqlite",
+ "mime",
+ "mime2ext",
+ "rand",
+ "reqwest",
+ "ruma",
+ "serde",
+ "serde_html_form",
+ "serde_json",
+ "tempfile",
+ "thiserror",
+ "tokio",
+ "tower",
+ "tracing",
+ "url",
+ "zeroize",
+]
+
+[[package]]
+name = "matrix-sdk-base"
+version = "0.6.1"
+source = "git+https://github.com/matrix-org/matrix-rust-sdk.git?rev=4643bae28445e058080896a280083b32fd403146#4643bae28445e058080896a280083b32fd403146"
+dependencies = [
+ "async-trait",
+ "bitflags 2.4.0",
+ "dashmap",
+ "eyeball",
+ "futures-util",
+ "matrix-sdk-common",
+ "matrix-sdk-crypto",
+ "matrix-sdk-store-encryption",
+ "once_cell",
+ "ruma",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "matrix-sdk-common"
+version = "0.6.0"
+source = "git+https://github.com/matrix-org/matrix-rust-sdk.git?rev=4643bae28445e058080896a280083b32fd403146#4643bae28445e058080896a280083b32fd403146"
+dependencies = [
+ "futures-core",
+ "futures-util",
+ "gloo-timers",
+ "instant",
+ "ruma",
+ "serde",
+ "serde_json",
+ "tokio",
+ "wasm-bindgen-futures",
+]
+
+[[package]]
+name = "matrix-sdk-crypto"
+version = "0.6.0"
+source = "git+https://github.com/matrix-org/matrix-rust-sdk.git?rev=4643bae28445e058080896a280083b32fd403146#4643bae28445e058080896a280083b32fd403146"
+dependencies = [
+ "aes",
+ "async-std",
+ "async-trait",
+ "atomic",
+ "base64",
+ "byteorder",
+ "cfg-if",
+ "ctr",
+ "dashmap",
+ "eyeball",
+ "futures-core",
+ "futures-util",
+ "hkdf",
+ "hmac",
+ "itertools 0.11.0",
+ "matrix-sdk-common",
+ "matrix-sdk-qrcode",
+ "pbkdf2 0.11.0",
+ "rand",
+ "rmp-serde",
+ "ruma",
+ "serde",
+ "serde_json",
+ "sha2",
+ "thiserror",
+ "tokio",
+ "tokio-stream",
+ "tracing",
+ "ulid",
+ "vodozemac",
+ "zeroize",
+]
+
+[[package]]
+name = "matrix-sdk-indexeddb"
+version = "0.2.0"
+source = "git+https://github.com/matrix-org/matrix-rust-sdk.git?rev=4643bae28445e058080896a280083b32fd403146#4643bae28445e058080896a280083b32fd403146"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "base64",
+ "getrandom",
+ "gloo-utils",
+ "indexed_db_futures",
+ "js-sys",
+ "matrix-sdk-base",
+ "matrix-sdk-crypto",
+ "matrix-sdk-store-encryption",
+ "ruma",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "tokio",
+ "tracing",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "matrix-sdk-qrcode"
+version = "0.4.0"
+source = "git+https://github.com/matrix-org/matrix-rust-sdk.git?rev=4643bae28445e058080896a280083b32fd403146#4643bae28445e058080896a280083b32fd403146"
+dependencies = [
+ "byteorder",
+ "qrcode",
+ "ruma-common",
+ "thiserror",
+ "vodozemac",
+]
+
+[[package]]
+name = "matrix-sdk-sqlite"
+version = "0.1.0"
+source = "git+https://github.com/matrix-org/matrix-rust-sdk.git?rev=4643bae28445e058080896a280083b32fd403146#4643bae28445e058080896a280083b32fd403146"
+dependencies = [
+ "async-trait",
+ "deadpool-sqlite",
+ "itertools 0.11.0",
+ "matrix-sdk-base",
+ "matrix-sdk-crypto",
+ "matrix-sdk-store-encryption",
+ "rmp-serde",
+ "ruma",
+ "rusqlite",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "tokio",
+ "tracing",
+ "vodozemac",
+]
+
+[[package]]
+name = "matrix-sdk-store-encryption"
+version = "0.2.0"
+source = "git+https://github.com/matrix-org/matrix-rust-sdk.git?rev=4643bae28445e058080896a280083b32fd403146#4643bae28445e058080896a280083b32fd403146"
+dependencies = [
+ "blake3",
+ "chacha20poly1305",
+ "displaydoc",
+ "getrandom",
+ "hmac",
+ "pbkdf2 0.11.0",
+ "rand",
+ "rmp-serde",
+ "serde",
+ "serde_json",
+ "sha2",
+ "thiserror",
+ "zeroize",
+]
+
+[[package]]
+name = "matrix-sdk-ui"
+version = "0.6.0"
+source = "git+https://github.com/matrix-org/matrix-rust-sdk.git?rev=4643bae28445e058080896a280083b32fd403146#4643bae28445e058080896a280083b32fd403146"
+dependencies = [
+ "async-once-cell",
+ "async-rx",
+ "async-std",
+ "async-stream",
+ "async-trait",
+ "async_cell",
+ "chrono",
+ "eyeball",
+ "eyeball-im",
+ "eyeball-im-util",
+ "futures-core",
+ "futures-util",
+ "fuzzy-matcher",
+ "imbl",
+ "indexmap 2.0.0",
+ "itertools 0.11.0",
+ "matrix-sdk",
+ "matrix-sdk-base",
+ "matrix-sdk-crypto",
+ "mime",
+ "once_cell",
+ "pin-project-lite",
+ "ruma",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "tokio",
+ "tracing",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memoffset"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
+[[package]]
+name = "mime2ext"
+version = "0.1.52"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1a85a5069ebd40e64b1985773cc81addbe9d90d7ecf60e7b5475a57ad584c70"
+
+[[package]]
+name = "mime_guess"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef"
+dependencies = [
+ "mime",
+ "unicase",
+]
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+ "simd-adler32",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2"
+dependencies = [
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "windows-sys",
+]
+
+[[package]]
+name = "muldiv"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "956787520e75e9bd233246045d19f42fb73242759cc57fba9611d940ae96d4b0"
+
+[[package]]
+name = "nanorand"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "native-tls"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "log",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
+]
+
+[[package]]
+name = "new_debug_unreachable"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54"
+
+[[package]]
+name = "nix"
+version = "0.26.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if",
+ "libc",
+ "memoffset 0.7.1",
+ "pin-utils",
+ "static_assertions",
+]
+
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "nu-ansi-term"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
+dependencies = [
+ "overload",
+ "winapi",
+]
+
+[[package]]
+name = "num"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b05180d69e3da0e530ba2a1dae5110317e49e3b7f3d41be227dc5f92e49ee7af"
+dependencies = [
+ "num-bigint",
+ "num-complex",
+ "num-integer",
+ "num-iter",
+ "num-rational 0.4.1",
+ "num-traits",
+]
+
+[[package]]
+name = "num-bigint"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-bigint-dig"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151"
+dependencies = [
+ "byteorder",
+ "lazy_static",
+ "libm",
+ "num-integer",
+ "num-iter",
+ "num-traits",
+ "rand",
+ "serde",
+ "smallvec",
+ "zeroize",
+]
+
+[[package]]
+name = "num-complex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02e0d21255c828d6f128a1e41534206671e8c3ea0c62f32291e808dc82cff17d"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-iter"
+version = "0.1.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-rational"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-rational"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0"
+dependencies = [
+ "autocfg",
+ "num-bigint",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "objc"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
+dependencies = [
+ "malloc_buf",
+]
+
+[[package]]
+name = "objc-foundation"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9"
+dependencies = [
+ "block",
+ "objc",
+ "objc_id",
+]
+
+[[package]]
+name = "objc_id"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b"
+dependencies = [
+ "objc",
+]
+
+[[package]]
+name = "object"
+version = "0.31.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+
+[[package]]
+name = "oo7"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ccef508ad85be8bf619ea56ba0f99ebcef59d87d759e22fd3bf2d96649c897c"
+dependencies = [
+ "aes",
+ "byteorder",
+ "cbc",
+ "cipher 0.4.4",
+ "digest",
+ "dirs",
+ "futures-util",
+ "hkdf",
+ "hmac",
+ "num",
+ "num-bigint-dig",
+ "once_cell",
+ "pbkdf2 0.12.2",
+ "rand",
+ "serde",
+ "sha2",
+ "tokio",
+ "tracing",
+ "zbus",
+ "zeroize",
+]
+
+[[package]]
+name = "opaque-debug"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
+
+[[package]]
+name = "openssl"
+version = "0.10.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "729b745ad4a5575dd06a3e1af1414bd330ee561c01b3899eb584baeaa8def17e"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.91"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "866b5f16f90776b9bb8dc1e1802ac6f0513de3a7a7465867bfbc563dc737faac"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "option-ext"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
+
+[[package]]
+name = "option-operations"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c26d27bb1aeab65138e4bf7666045169d1717febcc9ff870166be8348b223d0"
+dependencies = [
+ "paste",
+]
+
+[[package]]
+name = "ordered-stream"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "overload"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
+
+[[package]]
+name = "pango"
+version = "0.17.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35be456fc620e61f62dff7ff70fbd54dcbaf0a4b920c0f16de1107c47d921d48"
+dependencies = [
+ "bitflags 1.3.2",
+ "gio",
+ "glib",
+ "libc",
+ "once_cell",
+ "pango-sys",
+]
+
+[[package]]
+name = "pango-sys"
+version = "0.17.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3da69f9f3850b0d8990d462f8c709561975e95f689c1cdf0fecdebde78b35195"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "parking"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14f2252c834a40ed9bb5422029649578e63aa341ac401f74e719dd1afda8394e"
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall 0.3.5",
+ "smallvec",
+ "windows-targets",
+]
+
+[[package]]
+name = "password-hash"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700"
+dependencies = [
+ "base64ct",
+ "rand_core",
+ "subtle",
+]
+
+[[package]]
+name = "paste"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c"
+
+[[package]]
+name = "pbkdf2"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917"
+dependencies = [
+ "digest",
+ "hmac",
+ "password-hash",
+ "sha2",
+]
+
+[[package]]
+name = "pbkdf2"
+version = "0.12.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2"
+dependencies = [
+ "digest",
+ "hmac",
+]
+
+[[package]]
+name = "peeking_take_while"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
+
+[[package]]
+name = "phf"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259"
+dependencies = [
+ "phf_shared 0.10.0",
+]
+
+[[package]]
+name = "phf"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc"
+dependencies = [
+ "phf_macros",
+ "phf_shared 0.11.2",
+]
+
+[[package]]
+name = "phf_codegen"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd"
+dependencies = [
+ "phf_generator 0.10.0",
+ "phf_shared 0.10.0",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6"
+dependencies = [
+ "phf_shared 0.10.0",
+ "rand",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0"
+dependencies = [
+ "phf_shared 0.11.2",
+ "rand",
+]
+
+[[package]]
+name = "phf_macros"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b"
+dependencies = [
+ "phf_generator 0.11.2",
+ "phf_shared 0.11.2",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "pin-project"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12cc1b0bf1727a77a54b6654e7b5f1af8604923edc8b81885f8ec92f9e3f0a05"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pipewire"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc2180a4a84b855be86e6cd72fa6fd4318278871d2b1082e7cd05fe64b135ccb"
+dependencies = [
+ "anyhow",
+ "bitflags 1.3.2",
+ "errno",
+ "libc",
+ "libspa",
+ "libspa-sys",
+ "nix",
+ "once_cell",
+ "pipewire-sys",
+ "thiserror",
+]
+
+[[package]]
+name = "pipewire-sys"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a95290eedb7fb6aa3922fdc0261cd0ddeb940abcdbdef28778928106554d2123"
+dependencies = [
+ "bindgen",
+ "libspa-sys",
+ "system-deps",
+]
+
+[[package]]
+name = "pkcs7"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d79178be066405e0602bf3035946edef6b11b3f9dde46dfe5f8bfd7dea4b77e7"
+dependencies = [
+ "der",
+ "spki",
+ "x509-cert",
+]
+
+[[package]]
+name = "pkcs8"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7"
+dependencies = [
+ "der",
+ "spki",
+]
+
+[[package]]
+name = "pkg-config"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+
+[[package]]
+name = "platforms"
+version = "3.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3d7ddaed09e0eb771a79ab0fd64609ba0afb0a8366421957936ad14cbd13630"
+
+[[package]]
+name = "png"
+version = "0.17.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59871cc5b6cce7eaccca5a802b4173377a1c2ba90654246789a8fa2334426d11"
+dependencies = [
+ "bitflags 1.3.2",
+ "crc32fast",
+ "fdeflate",
+ "flate2",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "polling"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce"
+dependencies = [
+ "autocfg",
+ "bitflags 1.3.2",
+ "cfg-if",
+ "concurrent-queue",
+ "libc",
+ "log",
+ "pin-project-lite",
+ "windows-sys",
+]
+
+[[package]]
+name = "poly1305"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "048aeb476be11a4b6ca432ca569e375810de9294ae78f4774e78ea98a9246ede"
+dependencies = [
+ "cpufeatures",
+ "opaque-debug",
+ "universal-hash",
+]
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "precomputed-hash"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
+
+[[package]]
+name = "pretty-hex"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c6fa0831dd7cc608c38a5e323422a0077678fa5744aa2be4ad91c4ece8eec8d5"
+
+[[package]]
+name = "proc-macro-crate"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919"
+dependencies = [
+ "once_cell",
+ "toml_edit",
+]
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.66"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "prost"
+version = "0.11.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd"
+dependencies = [
+ "bytes",
+ "prost-derive",
+]
+
+[[package]]
+name = "prost-derive"
+version = "0.11.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4"
+dependencies = [
+ "anyhow",
+ "itertools 0.10.5",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "pulldown-cmark"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a1a2f1f0a7ecff9c31abbe177637be0e97a0aef46cf8738ece09327985d998"
+dependencies = [
+ "bitflags 1.3.2",
+ "getopts",
+ "memchr",
+ "unicase",
+]
+
+[[package]]
+name = "qoi"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001"
+dependencies = [
+ "bytemuck",
+]
+
+[[package]]
+name = "qrcode"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16d2f1455f3630c6e5107b4f2b94e74d76dea80736de0981fd27644216cff57f"
+dependencies = [
+ "checked_int_cast",
+ "image 0.23.14",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50f3b39ccfb720540debaa0164757101c08ecb8d326b15358ce76a62c7e85965"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rand_xoshiro"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f97cdb2a36ed4183de61b2f824cc45c9f1037f28afe0a322e9fff4c108b5aaa"
+dependencies = [
+ "rand_core",
+]
+
+[[package]]
+name = "rayon"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-utils",
+ "num_cpus",
+]
+
+[[package]]
+name = "readlock"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d7b323e7196daa571c8584de958be19e92941c41f845776fe06babfe8fa280a2"
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
+dependencies = [
+ "getrandom",
+ "redox_syscall 0.2.16",
+ "thiserror",
+]
+
+[[package]]
+name = "regex"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81bc1d4caf89fac26a70747fe603c130093b53c773888797a6329091246d651a"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata 0.3.6",
+ "regex-syntax 0.7.4",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+dependencies = [
+ "regex-syntax 0.6.29",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fed1ceff11a1dddaee50c9dc8e4938bd106e9d89ae372f192311e7da498e3b69"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax 0.7.4",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
+
+[[package]]
+name = "regex-syntax"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2"
+
+[[package]]
+name = "reqwest"
+version = "0.11.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cde824a14b7c14f85caff81225f411faacc04a2013f41670f41443742b1c1c55"
+dependencies = [
+ "async-compression",
+ "base64",
+ "bytes",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-tls",
+ "ipnet",
+ "js-sys",
+ "log",
+ "mime",
+ "native-tls",
+ "once_cell",
+ "percent-encoding",
+ "pin-project-lite",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "tokio",
+ "tokio-native-tls",
+ "tokio-socks",
+ "tokio-util",
+ "tower-service",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "wasm-streams",
+ "web-sys",
+ "winreg",
+]
+
+[[package]]
+name = "retain_mut"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4389f1d5789befaf6029ebd9f7dac4af7f7e3d61b69d4f30e2ac02b57e7712b0"
+
+[[package]]
+name = "rmp"
+version = "0.8.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f9860a6cc38ed1da53456442089b4dfa35e7cedaa326df63017af88385e6b20"
+dependencies = [
+ "byteorder",
+ "num-traits",
+ "paste",
+]
+
+[[package]]
+name = "rmp-serde"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bffea85eea980d8a74453e5d02a8d93028f3c34725de143085a844ebe953258a"
+dependencies = [
+ "byteorder",
+ "rmp",
+ "serde",
+]
+
+[[package]]
+name = "rqrr"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4a8b87d1f9f69bb1a6c77e20fd303f9617b2b68dcff87cd9bcbfff2ced4b8a0b"
+dependencies = [
+ "g2p",
+ "image 0.24.7",
+ "lru",
+]
+
+[[package]]
+name = "ruma"
+version = "0.8.2"
+source = "git+https://github.com/ruma/ruma.git?rev=f1772ae5bc1d849655498f51b0fec7b0ef10e339#f1772ae5bc1d849655498f51b0fec7b0ef10e339"
+dependencies = [
+ "assign",
+ "js_int",
+ "js_option",
+ "ruma-client-api",
+ "ruma-common",
+ "ruma-federation-api",
+ "ruma-push-gateway-api",
+]
+
+[[package]]
+name = "ruma-client-api"
+version = "0.16.2"
+source = "git+https://github.com/ruma/ruma.git?rev=f1772ae5bc1d849655498f51b0fec7b0ef10e339#f1772ae5bc1d849655498f51b0fec7b0ef10e339"
+dependencies = [
+ "assign",
+ "bytes",
+ "http",
+ "js_int",
+ "js_option",
+ "maplit",
+ "ruma-common",
+ "serde",
+ "serde_html_form",
+ "serde_json",
+]
+
+[[package]]
+name = "ruma-common"
+version = "0.11.3"
+source = "git+https://github.com/ruma/ruma.git?rev=f1772ae5bc1d849655498f51b0fec7b0ef10e339#f1772ae5bc1d849655498f51b0fec7b0ef10e339"
+dependencies = [
+ "base64",
+ "bytes",
+ "form_urlencoded",
+ "getrandom",
+ "html5ever",
+ "http",
+ "indexmap 2.0.0",
+ "js-sys",
+ "js_int",
+ "js_option",
+ "konst",
+ "percent-encoding",
+ "phf 0.11.2",
+ "pulldown-cmark",
+ "rand",
+ "regex",
+ "ruma-identifiers-validation",
+ "ruma-macros",
+ "serde",
+ "serde_html_form",
+ "serde_json",
+ "thiserror",
+ "tracing",
+ "url",
+ "uuid",
+ "wildmatch",
+]
+
+[[package]]
+name = "ruma-federation-api"
+version = "0.7.1"
+source = "git+https://github.com/ruma/ruma.git?rev=f1772ae5bc1d849655498f51b0fec7b0ef10e339#f1772ae5bc1d849655498f51b0fec7b0ef10e339"
+dependencies = [
+ "js_int",
+ "ruma-common",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "ruma-identifiers-validation"
+version = "0.9.1"
+source = "git+https://github.com/ruma/ruma.git?rev=f1772ae5bc1d849655498f51b0fec7b0ef10e339#f1772ae5bc1d849655498f51b0fec7b0ef10e339"
+dependencies = [
+ "js_int",
+ "thiserror",
+]
+
+[[package]]
+name = "ruma-macros"
+version = "0.11.3"
+source = "git+https://github.com/ruma/ruma.git?rev=f1772ae5bc1d849655498f51b0fec7b0ef10e339#f1772ae5bc1d849655498f51b0fec7b0ef10e339"
+dependencies = [
+ "once_cell",
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "ruma-identifiers-validation",
+ "serde",
+ "syn 2.0.28",
+ "toml",
+]
+
+[[package]]
+name = "ruma-push-gateway-api"
+version = "0.7.1"
+source = "git+https://github.com/ruma/ruma.git?rev=f1772ae5bc1d849655498f51b0fec7b0ef10e339#f1772ae5bc1d849655498f51b0fec7b0ef10e339"
+dependencies = [
+ "js_int",
+ "ruma-common",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "rusqlite"
+version = "0.28.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01e213bc3ecb39ac32e81e51ebe31fd888a940515173e3a18a35f8c6e896422a"
+dependencies = [
+ "bitflags 1.3.2",
+ "fallible-iterator",
+ "fallible-streaming-iterator",
+ "hashlink",
+ "libsqlite3-sys",
+ "smallvec",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "rustc_version"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "rustix"
+version = "0.37.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d69718bf81c6127a49dc64e44a742e8bb9213c0ff8869a22c308f84c1d4ab06"
+dependencies = [
+ "bitflags 1.3.2",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys 0.3.8",
+ "windows-sys",
+]
+
+[[package]]
+name = "rustix"
+version = "0.38.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19ed4fa021d81c8392ce04db050a3da9a60299050b7ae1cf482d862b54a7218f"
+dependencies = [
+ "bitflags 2.4.0",
+ "errno",
+ "libc",
+ "linux-raw-sys 0.4.5",
+ "windows-sys",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"
+
+[[package]]
+name = "ryu"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
+
+[[package]]
+name = "schannel"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88"
+dependencies = [
+ "windows-sys",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "secular"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3dc3eccdf599b53eba8a34a1190bd47394948258d1c43dca9cceb2426e25bb5"
+dependencies = [
+ "unicode-normalization",
+]
+
+[[package]]
+name = "security-framework"
+version = "2.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "semver"
+version = "1.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918"
+
+[[package]]
+name = "serde"
+version = "1.0.183"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32ac8da02677876d532745a130fc9d8e6edfa81a269b107c5b00829b91d8eb3c"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_bytes"
+version = "0.11.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab33ec92f677585af6d88c65593ae2375adde54efdbf16d597f2cbc7a6d368ff"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.183"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aafe972d60b0b9bee71a91b92fee2d4fb3c9d7e8f6b179aa99f27203d99a4816"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "serde_html_form"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cde65b75f2603066b78d6fa239b2c07b43e06ead09435f60554d3912962b4a3c"
+dependencies = [
+ "form_urlencoded",
+ "indexmap 2.0.0",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.104"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "076066c5f1078eac5b722a31827a8832fe108bed65dfa75e233c89f8206e976c"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_repr"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8725e1dfadb3a50f7e5ce0b1a540466f6ed3fe7a0fca2ac2b8b831d31316bd00"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "sha1"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "sharded-slab"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "shlex"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3"
+
+[[package]]
+name = "signal-hook"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801"
+dependencies = [
+ "libc",
+ "signal-hook-registry",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "signature"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e1788eed21689f9cf370582dfc467ef36ed9c707f073528ddafa8d83e3b8500"
+
+[[package]]
+name = "simd-adler32"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe"
+
+[[package]]
+name = "siphasher"
+version = "0.3.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
+
+[[package]]
+name = "slab"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9"
+
+[[package]]
+name = "socket2"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "socket2"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2538b18701741680e0322a2302176d3253a35388e2e62f172f64f4f16605f877"
+dependencies = [
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "sourceview5"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee960607b1f7fda934dce68e76e925989ebe186ac04d6ab5ea9ce93e13835c03"
+dependencies = [
+ "bitflags 1.3.2",
+ "futures-channel",
+ "futures-core",
+ "gdk-pixbuf",
+ "gdk4",
+ "gio",
+ "glib",
+ "gtk4",
+ "libc",
+ "pango",
+ "sourceview5-sys",
+]
+
+[[package]]
+name = "sourceview5-sys"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7a23462cd3d696199b56317d35e69b240d655b8c70c12bd8f443b672313776c"
+dependencies = [
+ "gdk-pixbuf-sys",
+ "gdk4-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "gtk4-sys",
+ "libc",
+ "pango-sys",
+ "system-deps",
+]
+
+[[package]]
+name = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[package]]
+name = "spin"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
+dependencies = [
+ "lock_api",
+]
+
+[[package]]
+name = "spki"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d1e996ef02c474957d681f1b05213dfb0abab947b446a62d37770b23500184a"
+dependencies = [
+ "base64ct",
+ "der",
+]
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "string_cache"
+version = "0.8.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b"
+dependencies = [
+ "new_debug_unreachable",
+ "once_cell",
+ "parking_lot",
+ "phf_shared 0.10.0",
+ "precomputed-hash",
+ "serde",
+]
+
+[[package]]
+name = "string_cache_codegen"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988"
+dependencies = [
+ "phf_generator 0.10.0",
+ "phf_shared 0.10.0",
+ "proc-macro2",
+ "quote",
+]
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "strum"
+version = "0.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f"
+dependencies = [
+ "strum_macros",
+]
+
+[[package]]
+name = "strum_macros"
+version = "0.24.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "rustversion",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "subtle"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04361975b3f5e348b2189d8dc55bc942f278b2d482a6a0365de5bdd62d351567"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "system-deps"
+version = "6.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30c2de8a4d8f4b823d634affc9cd2a74ec98c53a756f317e529a48046cbf71f3"
+dependencies = [
+ "cfg-expr",
+ "heck",
+ "pkg-config",
+ "toml",
+ "version-compare",
+]
+
+[[package]]
+name = "target-lexicon"
+version = "0.12.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d0e916b1148c8e263850e1ebcbd046f333e0683c724876bb0da63ea4373dc8a"
+
+[[package]]
+name = "temp-dir"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af547b166dd1ea4b472165569fc456cfb6818116f854690b0ff205e636523dab"
+
+[[package]]
+name = "tempfile"
+version = "3.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc02fddf48964c42031a0b3fe0428320ecf3a73c401040fc0096f97794310651"
+dependencies = [
+ "cfg-if",
+ "fastrand 2.0.0",
+ "redox_syscall 0.3.5",
+ "rustix 0.38.8",
+ "windows-sys",
+]
+
+[[package]]
+name = "tendril"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0"
+dependencies = [
+ "futf",
+ "mac",
+ "utf-8",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "611040a08a0439f8248d1990b111c95baa9c704c805fa1f62104b39655fd7f90"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "090198534930841fab3a5d1bb637cde49e339654e606195f8d9c76eeb081dc96"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+]
+
+[[package]]
+name = "tiff"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d172b0f4d3fba17ba89811858b9d3d97f928aece846475bbda076ca46736211"
+dependencies = [
+ "flate2",
+ "jpeg-decoder",
+ "weezl",
+]
+
+[[package]]
+name = "time"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"
+dependencies = [
+ "libc",
+ "wasi 0.10.0+wasi-snapshot-preview1",
+ "winapi",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "1.30.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d3ce25f50619af8b0aec2eb23deebe84249e19e2ddd393a6e16e3300a6dadfd"
+dependencies = [
+ "backtrace",
+ "bytes",
+ "libc",
+ "mio",
+ "num_cpus",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2 0.5.3",
+ "tokio-macros",
+ "tracing",
+ "windows-sys",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "tokio-native-tls"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
+dependencies = [
+ "native-tls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-socks"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51165dfa029d2a65969413a6cc96f354b86b464498702f174a4efa13608fd8c0"
+dependencies = [
+ "either",
+ "futures-util",
+ "thiserror",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-stream"
+version = "0.1.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+ "tokio",
+ "tokio-util",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "toml"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c17e963a819c331dcacd7ab957d80bc2b9a9c1e71c804826d2f283dd65306542"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.19.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a"
+dependencies = [
+ "indexmap 2.0.0",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "tower"
+version = "0.4.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c"
+dependencies = [
+ "futures-util",
+ "pin-project-lite",
+ "tokio",
+ "tower-layer",
+ "tower-service",
+ "tracing",
+]
+
+[[package]]
+name = "tower-layer"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0"
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tracing"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+dependencies = [
+ "cfg-if",
+ "log",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
+dependencies = [
+ "once_cell",
+ "valuable",
+]
+
+[[package]]
+name = "tracing-log"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922"
+dependencies = [
+ "lazy_static",
+ "log",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-subscriber"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77"
+dependencies = [
+ "matchers",
+ "nu-ansi-term",
+ "once_cell",
+ "regex",
+ "sharded-slab",
+ "smallvec",
+ "thread_local",
+ "tracing",
+ "tracing-core",
+ "tracing-log",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+
+[[package]]
+name = "typenum"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
+
+[[package]]
+name = "typewit"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e5cee357cc77d1e02f10a3e6c4e13b8462fafab05998b62d331b7d9485589ff"
+
+[[package]]
+name = "uds_windows"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce65604324d3cce9b966701489fbd0cf318cb1f7bd9dd07ac9a4ee6fb791930d"
+dependencies = [
+ "tempfile",
+ "winapi",
+]
+
+[[package]]
+name = "ulid"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13a3aaa69b04e5b66cc27309710a569ea23593612387d67daaf102e73aa974fd"
+dependencies = [
+ "rand",
+]
+
+[[package]]
+name = "unicase"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "universal-hash"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8326b2c654932e3e4f9196e69d08fdf7cfd718e1dc6f66b347e6024a0c961402"
+dependencies = [
+ "generic-array",
+ "subtle",
+]
+
+[[package]]
+name = "url"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+ "serde",
+]
+
+[[package]]
+name = "utf-8"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
+
+[[package]]
+name = "utf8-width"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5190c9442dcdaf0ddd50f37420417d219ae5261bbf5db120d0f9bab996c9cba1"
+
+[[package]]
+name = "uuid"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d"
+dependencies = [
+ "getrandom",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "valuable"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
+
+[[package]]
+name = "value-bag"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d92ccd67fb88503048c01b59152a04effd0782d035a83a6d256ce6085f08f4a3"
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "version-compare"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "vodozemac"
+version = "0.4.0"
+source = "git+https://github.com/matrix-org/vodozemac/?rev=e3b658526f6f1dd0a9065c1c96346b796712c425#e3b658526f6f1dd0a9065c1c96346b796712c425"
+dependencies = [
+ "aes",
+ "arrayvec",
+ "base64",
+ "cbc",
+ "curve25519-dalek",
+ "ed25519-dalek",
+ "getrandom",
+ "hkdf",
+ "hmac",
+ "matrix-pickle",
+ "pkcs7",
+ "prost",
+ "rand",
+ "serde",
+ "serde_bytes",
+ "serde_json",
+ "sha2",
+ "subtle",
+ "thiserror",
+ "x25519-dalek",
+ "zeroize",
+]
+
+[[package]]
+name = "waker-fn"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca"
+
+[[package]]
+name = "want"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
+dependencies = [
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.10.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
+
+[[package]]
+name = "wasm-streams"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bbae3363c08332cadccd13b67db371814cd214c2524020932f0804b8cf7c078"
+dependencies = [
+ "futures-util",
+ "js-sys",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+]
+
+[[package]]
+name = "web-sys"
+version = "0.3.64"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "weezl"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb"
+
+[[package]]
+name = "wildmatch"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee583bdc5ff1cf9db20e9db5bb3ff4c3089a8f6b8b31aff265c9aba85812db86"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
+
+[[package]]
+name = "winnow"
+version = "0.5.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5504cc7644f4b593cbc05c4a55bf9bd4e94b867c3c0bd440934174d50482427d"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "winreg"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "x25519-dalek"
+version = "2.0.0-rc.3"
+source = "git+https://github.com/dalek-cryptography/curve25519-dalek/?rev=e44d4b5903106dde0e5b28a2580061de7dfe8a9f#e44d4b5903106dde0e5b28a2580061de7dfe8a9f"
+dependencies = [
+ "curve25519-dalek",
+ "rand_core",
+ "serde",
+ "zeroize",
+]
+
+[[package]]
+name = "x509-cert"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25eefca1d99701da3a57feb07e5079fc62abba059fc139e98c13bbb250f3ef29"
+dependencies = [
+ "const-oid",
+ "der",
+ "spki",
+]
+
+[[package]]
+name = "xdg-home"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2769203cd13a0c6015d515be729c526d041e9cf2c0cc478d57faee85f40c6dcd"
+dependencies = [
+ "nix",
+ "winapi",
+]
+
+[[package]]
+name = "xml5ever"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4034e1d05af98b51ad7214527730626f019682d797ba38b51689212118d8e650"
+dependencies = [
+ "log",
+ "mac",
+ "markup5ever",
+]
+
+[[package]]
+name = "zbus"
+version = "3.14.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31de390a2d872e4cd04edd71b425e29853f786dc99317ed72d73d6fcf5ebb948"
+dependencies = [
+ "async-broadcast",
+ "async-process",
+ "async-recursion",
+ "async-trait",
+ "byteorder",
+ "derivative",
+ "enumflags2",
+ "event-listener",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "hex",
+ "nix",
+ "once_cell",
+ "ordered-stream",
+ "rand",
+ "serde",
+ "serde_repr",
+ "sha1",
+ "static_assertions",
+ "tokio",
+ "tracing",
+ "uds_windows",
+ "winapi",
+ "xdg-home",
+ "zbus_macros",
+ "zbus_names",
+ "zvariant",
+]
+
+[[package]]
+name = "zbus_macros"
+version = "3.14.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41d1794a946878c0e807f55a397187c11fc7a038ba5d868e7db4f3bd7760bc9d"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "syn 1.0.109",
+ "zvariant_utils",
+]
+
+[[package]]
+name = "zbus_names"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb80bb776dbda6e23d705cf0123c3b95df99c4ebeaec6c2599d4a5419902b4a9"
+dependencies = [
+ "serde",
+ "static_assertions",
+ "zvariant",
+]
+
+[[package]]
+name = "zeroize"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9"
+dependencies = [
+ "zeroize_derive",
+]
+
+[[package]]
+name = "zeroize_derive"
+version = "1.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "zune-inflate"
+version = "0.2.54"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02"
+dependencies = [
+ "simd-adler32",
+]
+
+[[package]]
+name = "zvariant"
+version = "3.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44b291bee0d960c53170780af148dca5fa260a63cdd24f1962fa82e03e53338c"
+dependencies = [
+ "byteorder",
+ "enumflags2",
+ "libc",
+ "serde",
+ "static_assertions",
+ "url",
+ "zvariant_derive",
+]
+
+[[package]]
+name = "zvariant_derive"
+version = "3.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "934d7a7dfc310d6ee06c87ffe88ef4eca7d3e37bb251dece2ef93da8f17d8ecd"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "zvariant_utils",
+]
+
+[[package]]
+name = "zvariant_utils"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7234f0d811589db492d16893e3f21e8e2fd282e6d01b0cddee310322062cc200"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/fractal-next/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/fractal-next/default.nix
new file mode 100644
index 000000000000..bcf715682c19
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/fractal-next/default.nix
@@ -0,0 +1,86 @@
+{ stdenv
+, lib
+, fetchFromGitLab
+, cargo
+, meson
+, ninja
+, rustPlatform
+, rustc
+, pkg-config
+, glib
+, gtk4
+, gtksourceview5
+, libadwaita
+, gstreamer
+, gst-plugins-base
+, gst-plugins-bad
+, desktop-file-utils
+, appstream-glib
+, openssl
+, pipewire
+, libshumate
+, wrapGAppsHook4
+, sqlite
+, xdg-desktop-portal
+}:
+
+stdenv.mkDerivation rec {
+  pname = "fractal-next";
+  version = "5.beta2";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.gnome.org";
+    owner = "GNOME";
+    repo = "fractal";
+    rev = version;
+    hash = "sha256-/BO+TlhLhi7BGsHq8aOpYw8AqNrJT0IJZOc1diq2Rys=";
+  };
+
+  cargoDeps = rustPlatform.importCargoLock {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "matrix-sdk-0.6.2" = "sha256-A1oKNbEx2A6WwvYcNSW53Fd6QWwr0QFJtrsJXO2KInE=";
+      "ruma-0.8.2" = "sha256-kCGS7ACFGgmtTUElLJQMYfjwJ3glF7bRPZYJIFcuPtc=";
+      "curve25519-dalek-4.0.0" = "sha256-sxEFR6lsX7t4u/fhWd6wFMYETI2egPUbjMeBWkB289E=";
+      "vodozemac-0.4.0" = "sha256-TCbWJ9bj/FV3ILWUTcksazel8ESTNTiDGL7kGlEGvow=";
+    };
+  };
+
+  nativeBuildInputs = [
+    glib
+    gtk4
+    meson
+    ninja
+    pkg-config
+    rustPlatform.bindgenHook
+    rustPlatform.cargoSetupHook
+    cargo
+    rustc
+    desktop-file-utils
+    appstream-glib
+    wrapGAppsHook4
+  ];
+
+  buildInputs = [
+    glib
+    gstreamer
+    gst-plugins-base
+    gst-plugins-bad
+    gtk4
+    gtksourceview5
+    libadwaita
+    openssl
+    pipewire
+    libshumate
+    sqlite
+    xdg-desktop-portal
+  ];
+
+  meta = with lib; {
+    description = "Matrix group messaging app (development version)";
+    homepage = "https://gitlab.gnome.org/GNOME/fractal";
+    license = licenses.gpl3Plus;
+    maintainers = teams.gnome.members ++ (with maintainers; [ anselmschueler ]);
+    mainProgram = "fractal";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/fractal/Cargo.lock b/nixpkgs/pkgs/applications/networking/instant-messengers/fractal/Cargo.lock
new file mode 100644
index 000000000000..4f099a9581c5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/fractal/Cargo.lock
@@ -0,0 +1,3306 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "aes"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "884391ef1066acaa41e766ba8f596341b96e93ce34f9a43e7d24bf0a0eaf0561"
+dependencies = [
+ "aes-soft",
+ "aesni",
+ "cipher",
+]
+
+[[package]]
+name = "aes-soft"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be14c7498ea50828a38d0e24a765ed2effe92a705885b57d029cd67d45744072"
+dependencies = [
+ "cipher",
+ "opaque-debug",
+]
+
+[[package]]
+name = "aesni"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea2e11f5e94c2f7d386164cc2aa1f97823fed6f259e486940a71c174dd01b0ce"
+dependencies = [
+ "cipher",
+ "opaque-debug",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "ammonia"
+version = "3.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64e6d1c7838db705c9b756557ee27c384ce695a1c51a6fe528784cb1c6840170"
+dependencies = [
+ "html5ever 0.26.0",
+ "maplit",
+ "once_cell",
+ "tendril",
+ "url",
+]
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "ansi_term"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800"
+
+[[package]]
+name = "async-compression"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "942c7cd7ae39e91bde4820d74132e9862e62c2f386c3aa90ccf55949f5bad63a"
+dependencies = [
+ "bytes 0.5.6",
+ "flate2",
+ "futures-core",
+ "memchr",
+ "pin-project-lite 0.2.9",
+]
+
+[[package]]
+name = "atk"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "444daefa55f229af145ea58d77efd23725024ee1f6f3102743709aa6b18c663e"
+dependencies = [
+ "atk-sys",
+ "bitflags",
+ "glib",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+]
+
+[[package]]
+name = "atk-sys"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e552c1776737a4c80110d06b36d099f47c727335f9aaa5d942a72b6863a8ec6f"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "base64"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+[[package]]
+name = "bincode"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "block-buffer"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "block-buffer"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "block-modes"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57a0e8073e8baa88212fb5823574c02ebccb395136ba9a164ab89379ec6072f0"
+dependencies = [
+ "block-padding",
+ "cipher",
+]
+
+[[package]]
+name = "block-padding"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae"
+
+[[package]]
+name = "bumpalo"
+version = "3.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "bytes"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c"
+dependencies = [
+ "byteorder",
+ "iovec",
+]
+
+[[package]]
+name = "bytes"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38"
+
+[[package]]
+name = "bytes"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
+
+[[package]]
+name = "cairo-rs"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "157049ba9618aa3a61c39d5d785102c04d3b1f40632a706c621a9aedc21e6084"
+dependencies = [
+ "bitflags",
+ "cairo-sys-rs",
+ "glib",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+]
+
+[[package]]
+name = "cairo-sys-rs"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff65ba02cac715be836f63429ab00a767d48336efc5497c5637afb53b4f14d63"
+dependencies = [
+ "glib-sys",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+
+[[package]]
+name = "cfg-if"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chrono"
+version = "0.4.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f"
+dependencies = [
+ "iana-time-zone",
+ "js-sys",
+ "num-integer",
+ "num-traits",
+ "serde",
+ "time",
+ "wasm-bindgen",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "cipher"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "clap"
+version = "2.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
+dependencies = [
+ "ansi_term",
+ "atty",
+ "bitflags",
+ "strsim",
+ "textwrap",
+ "unicode-width",
+ "vec_map",
+]
+
+[[package]]
+name = "codespan-reporting"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
+dependencies = [
+ "termcolor",
+ "unicode-width",
+]
+
+[[package]]
+name = "comrak"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e17058cc536cf290563e88787d7b9e6030ce4742943017cc2ffb71f88034021c"
+dependencies = [
+ "clap",
+ "entities",
+ "lazy_static",
+ "pest",
+ "pest_derive",
+ "regex",
+ "twoway",
+ "typed-arena",
+ "unicode_categories",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "crypto-mac"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bff07008ec701e8028e2ceb8f83f0e4274ee62bd2dbdc4fefff2e9a91824081a"
+dependencies = [
+ "generic-array",
+ "subtle",
+]
+
+[[package]]
+name = "cxx"
+version = "1.0.91"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86d3488e7665a7a483b57e25bdd90d0aeb2bc7608c8d0346acf2ad3f1caf1d62"
+dependencies = [
+ "cc",
+ "cxxbridge-flags",
+ "cxxbridge-macro",
+ "link-cplusplus",
+]
+
+[[package]]
+name = "cxx-build"
+version = "1.0.91"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48fcaf066a053a41a81dfb14d57d99738b767febb8b735c3016e469fac5da690"
+dependencies = [
+ "cc",
+ "codespan-reporting",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "scratch",
+ "syn",
+]
+
+[[package]]
+name = "cxxbridge-flags"
+version = "1.0.91"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2ef98b8b717a829ca5603af80e1f9e2e48013ab227b68ef37872ef84ee479bf"
+
+[[package]]
+name = "cxxbridge-macro"
+version = "1.0.91"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "086c685979a698443656e5cf7856c95c642295a38599f12fb1ff76fb28d19892"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "dbus"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4a0c10ea61042b7555729ab0608727bbbb06ce709c11e6047cfa4e10f6d052d"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "digest"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f"
+dependencies = [
+ "block-buffer 0.10.3",
+ "crypto-common",
+]
+
+[[package]]
+name = "directories"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "551a778172a450d7fc12e629ca3b0428d00f6afa9a43da1b630d54604e97371c"
+dependencies = [
+ "cfg-if 0.1.10",
+ "dirs-sys",
+]
+
+[[package]]
+name = "dirs"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13aea89a5c93364a98e9b37b2fa237effbb694d5cfe01c5b70941f7eb087d5e3"
+dependencies = [
+ "cfg-if 0.1.10",
+ "dirs-sys",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "either"
+version = "1.5.99"
+source = "git+https://github.com/danigm/either.git?rev=60c99bc0723491e2dfd42bbe9b485c5f9323e96b#60c99bc0723491e2dfd42bbe9b485c5f9323e96b"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "either"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "entities"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5320ae4c3782150d900b79807611a59a99fc9a1d61d686faafc24b93fc8d7ca"
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "fractal-gtk"
+version = "4.4.2"
+dependencies = [
+ "anyhow",
+ "cairo-rs",
+ "chrono",
+ "clap",
+ "comrak",
+ "directories",
+ "dirs",
+ "either 1.5.99",
+ "fractal-matrix-api",
+ "fragile 1.2.2",
+ "gdk",
+ "gdk-pixbuf",
+ "gettext-rs",
+ "gio",
+ "glib",
+ "gspell",
+ "gstreamer",
+ "gstreamer-pbutils",
+ "gstreamer-player",
+ "gtk",
+ "html2pango",
+ "itertools",
+ "lazy_static",
+ "letter-avatar",
+ "libhandy",
+ "log",
+ "loggerv",
+ "md5",
+ "mdl",
+ "pango",
+ "rand 0.7.3",
+ "regex",
+ "secret-service",
+ "serde",
+ "serde_json",
+ "sourceview4",
+]
+
+[[package]]
+name = "fractal-matrix-api"
+version = "4.4.2"
+dependencies = [
+ "gio",
+ "reqwest",
+ "ruma-identifiers",
+ "serde",
+ "serde_json",
+ "url",
+]
+
+[[package]]
+name = "fragile"
+version = "1.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7464c5c4a3f014d9b2ec4073650e5c06596f385060af740fc45ad5a19f959e8"
+dependencies = [
+ "fragile 2.0.0",
+]
+
+[[package]]
+name = "fragile"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa"
+
+[[package]]
+name = "fuchsia-zircon"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82"
+dependencies = [
+ "bitflags",
+ "fuchsia-zircon-sys",
+]
+
+[[package]]
+name = "fuchsia-zircon-sys"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
+
+[[package]]
+name = "futf"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843"
+dependencies = [
+ "mac",
+ "new_debug_unreachable",
+]
+
+[[package]]
+name = "futures"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13e2792b0ff0340399d58445b88fd9770e3489eff258a4cbc1523418f12abf84"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e5317663a9089767a1ec00a487df42e0ca174b61b4483213ac24448e4664df5"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec90ff4d0fe1f57d600049061dc6bb68ed03c7d2fbd697274c41805dcb3f8608"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8de0a35a6ab97ec8869e32a2473f4b1324459e14c29275d14b10cb1fd19b50e"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfb8371b6fb2aeb2d280374607aeabfc99d95c72edfe51692e42d3d7f0d08531"
+
+[[package]]
+name = "futures-macro"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95a73af87da33b5acf53acfebdc339fe592ecf5357ac7c0a7734ab9d8c876a70"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f310820bb3e8cfd46c80db4d7fb8353e15dfff853a127158425f31e0be6c8364"
+
+[[package]]
+name = "futures-task"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcf79a1bf610b10f42aea489289c5a2c478a786509693b80cd39c44ccd936366"
+
+[[package]]
+name = "futures-util"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c1d6de3acfef38d2be4b1f543f553131788603495be83da675e180c8d6b7bd1"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite 0.2.9",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "gdk"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fbe5e8772fc0865c52460cdd7a59d7d47700f44d9809d1dd00eecceb769a7589"
+dependencies = [
+ "bitflags",
+ "cairo-rs",
+ "cairo-sys-rs",
+ "gdk-pixbuf",
+ "gdk-sys",
+ "gio",
+ "gio-sys",
+ "glib",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "pango",
+]
+
+[[package]]
+name = "gdk-pixbuf"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e248220c46b329b097d4b158d2717f8c688f16dd76d0399ace82b3e98062bdd7"
+dependencies = [
+ "gdk-pixbuf-sys",
+ "gio",
+ "gio-sys",
+ "glib",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+]
+
+[[package]]
+name = "gdk-pixbuf-sys"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8991b060a9e9161bafd09bf4a202e6fd404f5b4dd1a08d53a1e84256fb34ab0"
+dependencies = [
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "gdk-sys"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6adf679e91d1bff0c06860287f80403e7db54c2d2424dce0a470023b56c88fbb"
+dependencies = [
+ "cairo-sys-rs",
+ "gdk-pixbuf-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "pango-sys",
+ "pkg-config",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "wasi 0.9.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "gettext-rs"
+version = "0.4.2"
+source = "git+https://github.com/danigm/gettext-rs?branch=no-gettext#61938b9f5f1d3bdc31f9839f53fabe5ccf136a78"
+dependencies = [
+ "gettext-sys",
+ "locale_config",
+]
+
+[[package]]
+name = "gettext-sys"
+version = "0.19.9"
+source = "git+https://github.com/danigm/gettext-rs?branch=no-gettext#61938b9f5f1d3bdc31f9839f53fabe5ccf136a78"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "gio"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0cd10f9415cce39b53f8024bf39a21f84f8157afa52da53837b102e585a296a5"
+dependencies = [
+ "bitflags",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-util",
+ "gio-sys",
+ "glib",
+ "glib-sys",
+ "gobject-sys",
+ "lazy_static",
+ "libc",
+]
+
+[[package]]
+name = "gio-sys"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fad225242b9eae7ec8a063bb86974aca56885014672375e5775dc0ea3533911"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "glib"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "40fb573a09841b6386ddf15fd4bc6655b4f5b106ca962f57ecaecde32a0061c0"
+dependencies = [
+ "bitflags",
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-task",
+ "futures-util",
+ "glib-sys",
+ "gobject-sys",
+ "lazy_static",
+ "libc",
+]
+
+[[package]]
+name = "glib-sys"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95856f3802f446c05feffa5e24859fe6a183a7cb849c8449afc35c86b1e316e2"
+dependencies = [
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "gobject-sys"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31d1a804f62034eccf370006ccaef3708a71c31d561fee88564abe71177553d9"
+dependencies = [
+ "glib-sys",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "gspell"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "136ad90e68e47a557d810de64a8c3fd1be7d68ae28c048b1bb1e37d8cc359183"
+dependencies = [
+ "gdk",
+ "gdk-sys",
+ "gio",
+ "gio-sys",
+ "glib",
+ "glib-sys",
+ "gobject-sys",
+ "gspell-sys",
+ "gtk",
+ "gtk-sys",
+ "libc",
+]
+
+[[package]]
+name = "gspell-sys"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c3039436856b04c39293eed099e3021c08327f500a12e74a5dc8cf6ad55561f"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "gtk-sys",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "gstreamer"
+version = "0.15.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce8664a114cd6ec16bece783d5eee59496919915b1f6884400ba4a953274a163"
+dependencies = [
+ "bitflags",
+ "cfg-if 0.1.10",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "glib",
+ "glib-sys",
+ "gobject-sys",
+ "gstreamer-sys",
+ "lazy_static",
+ "libc",
+ "muldiv",
+ "num-rational 0.2.4",
+ "paste",
+]
+
+[[package]]
+name = "gstreamer-audio-sys"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbc91f53eec49fc31d6e0aea7502c4c4b502a4164e351b97fe81677f8a0ebce7"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "gstreamer-base-sys",
+ "gstreamer-sys",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "gstreamer-base"
+version = "0.15.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42552f75cc6c260b0be180d5c955f4cd74bd170289c622404c25f1210b521c12"
+dependencies = [
+ "bitflags",
+ "glib",
+ "glib-sys",
+ "gobject-sys",
+ "gstreamer",
+ "gstreamer-base-sys",
+ "gstreamer-sys",
+ "libc",
+]
+
+[[package]]
+name = "gstreamer-base-sys"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba384f52174b3c586593fca32642680a9e67961fea9f4cd8419f678965023bed"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "gstreamer-sys",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "gstreamer-pbutils"
+version = "0.15.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed246c95b8fe250a2897968e7f4f2c3a1177353e9bf2e609ca90d74022da10e1"
+dependencies = [
+ "bitflags",
+ "glib",
+ "glib-sys",
+ "gobject-sys",
+ "gstreamer",
+ "gstreamer-pbutils-sys",
+ "gstreamer-sys",
+ "libc",
+]
+
+[[package]]
+name = "gstreamer-pbutils-sys"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4eb7a9e68b2e09fa2889119ea4243c1cce83008a92d25d78f9324495707d8de8"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "gstreamer-audio-sys",
+ "gstreamer-sys",
+ "gstreamer-video-sys",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "gstreamer-player"
+version = "0.15.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04b3497c644f0e4fa92195930801baabbae74ddb208a2a9f2127f36bf4d8f698"
+dependencies = [
+ "bitflags",
+ "glib",
+ "glib-sys",
+ "gobject-sys",
+ "gstreamer",
+ "gstreamer-player-sys",
+ "gstreamer-sys",
+ "gstreamer-video",
+ "libc",
+]
+
+[[package]]
+name = "gstreamer-player-sys"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9cc38a730aed3442cad1c8df589b4abe856d14671058df7099a5a030fd61413c"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "gstreamer-sys",
+ "gstreamer-video-sys",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "gstreamer-sys"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d18da01b97d0ab5896acd5151e4c155acefd0e6c03c3dd24dd133ba054053db"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "gstreamer-video"
+version = "0.15.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ad7e69a940246d41428c72072a376785716b3669da333cbee1156fd90574dc9"
+dependencies = [
+ "bitflags",
+ "futures-channel",
+ "futures-util",
+ "glib",
+ "glib-sys",
+ "gobject-sys",
+ "gstreamer",
+ "gstreamer-base",
+ "gstreamer-base-sys",
+ "gstreamer-sys",
+ "gstreamer-video-sys",
+ "lazy_static",
+ "libc",
+]
+
+[[package]]
+name = "gstreamer-video-sys"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "615f4298f842f4b4581606e13cf52e1710e2130d989bb99161a5665aa3ccb7cc"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "gstreamer-base-sys",
+ "gstreamer-sys",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "gtk"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87e1e8d70290239c668594002d1b174fcc7d7ef5d26670ee141490ede8facf8f"
+dependencies = [
+ "atk",
+ "bitflags",
+ "cairo-rs",
+ "cairo-sys-rs",
+ "cc",
+ "gdk",
+ "gdk-pixbuf",
+ "gdk-pixbuf-sys",
+ "gdk-sys",
+ "gio",
+ "gio-sys",
+ "glib",
+ "glib-sys",
+ "gobject-sys",
+ "gtk-sys",
+ "lazy_static",
+ "libc",
+ "pango",
+ "pango-sys",
+]
+
+[[package]]
+name = "gtk-sys"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53def660c7b48b00b510c81ef2d2fbd3c570f1527081d8d7947f471513e1a4c1"
+dependencies = [
+ "atk-sys",
+ "cairo-sys-rs",
+ "gdk-pixbuf-sys",
+ "gdk-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "pango-sys",
+ "pkg-config",
+]
+
+[[package]]
+name = "h2"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e4728fd124914ad25e99e3d15a9361a879f6620f63cb56bbb08f95abb97a535"
+dependencies = [
+ "bytes 0.5.6",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+ "tracing-futures",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "heck"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hkdf"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51ab2f639c231793c5f6114bdb9bbe50a7dbbfcd7c7c6bd8475dec2d991e964f"
+dependencies = [
+ "digest 0.9.0",
+ "hmac",
+]
+
+[[package]]
+name = "hmac"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1441c6b1e930e2817404b5046f1f989899143a12bf92de603b69f4e0aee1e15"
+dependencies = [
+ "crypto-mac",
+ "digest 0.9.0",
+]
+
+[[package]]
+name = "html2pango"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "469b284033c3c93e7df758d316cb2e0da4408e4138d5add903b8be356a841738"
+dependencies = [
+ "ammonia",
+ "anyhow",
+ "html5ever 0.25.2",
+ "lazy_static",
+ "linkify",
+ "maplit",
+ "markup5ever_rcdom",
+ "regex",
+]
+
+[[package]]
+name = "html5ever"
+version = "0.25.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5c13fb08e5d4dfc151ee5e88bae63f7773d61852f3bdc73c9f4b9e1bde03148"
+dependencies = [
+ "log",
+ "mac",
+ "markup5ever 0.10.1",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "html5ever"
+version = "0.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bea68cab48b8459f17cf1c944c67ddc572d272d9f2b274140f223ecb1da4a3b7"
+dependencies = [
+ "log",
+ "mac",
+ "markup5ever 0.11.0",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "http"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
+dependencies = [
+ "bytes 1.4.0",
+ "fnv",
+ "itoa 1.0.5",
+]
+
+[[package]]
+name = "http-body"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13d5ff830006f7646652e057693569bfe0d51760c0085a071769d142a205111b"
+dependencies = [
+ "bytes 0.5.6",
+ "http",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "494b4d60369511e7dea41cf646832512a94e542f68bb9c49e54518e0f468eb47"
+
+[[package]]
+name = "hyper"
+version = "0.13.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a6f157065790a3ed2f88679250419b5cdd96e714a0d65f7797fd337186e96bb"
+dependencies = [
+ "bytes 0.5.6",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa 0.4.8",
+ "pin-project",
+ "socket2",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-tls"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d979acc56dcb5b8dddba3917601745e877576475aa046df3226eabdecef78eed"
+dependencies = [
+ "bytes 0.5.6",
+ "hyper",
+ "native-tls",
+ "tokio",
+ "tokio-tls",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.53"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca"
+dependencies = [
+ "cxx",
+ "cxx-build",
+]
+
+[[package]]
+name = "idna"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399"
+dependencies = [
+ "autocfg",
+ "hashbrown",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "iovec"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146"
+
+[[package]]
+name = "itertools"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f56a2d0bc861f9165be4eb3442afd3c236d8a98afd426f65d92324ae1091a484"
+dependencies = [
+ "either 1.8.1",
+]
+
+[[package]]
+name = "itoa"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
+
+[[package]]
+name = "itoa"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440"
+
+[[package]]
+name = "js-sys"
+version = "0.3.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "kernel32-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
+dependencies = [
+ "winapi 0.2.8",
+ "winapi-build",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "letter-avatar"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8da3ec7b8a44be82e431a90a01b339cc78690db204d1d372cb0883c99a71602"
+dependencies = [
+ "cairo-rs",
+ "pango",
+ "pangocairo",
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.139"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79"
+
+[[package]]
+name = "libhandy"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2aa9f5620e4143358bcd645fe7d7d27b974ed9148cbdd490bc811813899afa07"
+dependencies = [
+ "bitflags",
+ "gdk",
+ "gdk-sys",
+ "gio",
+ "gio-sys",
+ "glib",
+ "glib-sys",
+ "gobject-sys",
+ "gtk",
+ "gtk-sys",
+ "lazy_static",
+ "libc",
+ "libhandy-sys",
+ "pango",
+]
+
+[[package]]
+name = "libhandy-sys"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d707af842e918719b71af0ac6cf31d1843f6e8a4d1e9c733b998d8d482e60446"
+dependencies = [
+ "gdk",
+ "gdk-sys",
+ "gio",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "gtk-sys",
+ "libc",
+ "pango-sys",
+ "pkg-config",
+]
+
+[[package]]
+name = "link-cplusplus"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "linkify"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03951527dd24d2c59f407502e7d88e0948ef06fac23335b556a4c2bc03c22096"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "lmdb"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b0908efb5d6496aa977d96f91413da2635a902e5e31dbef0bfb88986c248539"
+dependencies = [
+ "bitflags",
+ "libc",
+ "lmdb-sys",
+]
+
+[[package]]
+name = "lmdb-sys"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5b392838cfe8858e86fac37cf97a0e8c55cc60ba0a18365cadc33092f128ce9"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "locale_config"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73ac19ebe45489e5d53b4346d8b90bb3dd03275c5fdf2ce22a982516d86b535c"
+dependencies = [
+ "lazy_static",
+ "regex",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "lock_api"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "loggerv"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60d8de15ae71e760bce7f05447f85f73624fe0d3b1e4c5a63ba5d4cb0748d374"
+dependencies = [
+ "ansi_term",
+ "atty",
+ "log",
+]
+
+[[package]]
+name = "mac"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4"
+
+[[package]]
+name = "maplit"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d"
+
+[[package]]
+name = "markup5ever"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a24f40fb03852d1cdd84330cddcaf98e9ec08a7b7768e952fad3b4cf048ec8fd"
+dependencies = [
+ "log",
+ "phf 0.8.0",
+ "phf_codegen 0.8.0",
+ "string_cache",
+ "string_cache_codegen",
+ "tendril",
+]
+
+[[package]]
+name = "markup5ever"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a2629bb1404f3d34c2e921f21fd34ba00b206124c81f65c50b43b6aaefeb016"
+dependencies = [
+ "log",
+ "phf 0.10.1",
+ "phf_codegen 0.10.0",
+ "string_cache",
+ "string_cache_codegen",
+ "tendril",
+]
+
+[[package]]
+name = "markup5ever_rcdom"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f015da43bcd8d4f144559a3423f4591d69b8ce0652c905374da7205df336ae2b"
+dependencies = [
+ "html5ever 0.25.2",
+ "markup5ever 0.10.1",
+ "tendril",
+ "xml5ever",
+]
+
+[[package]]
+name = "md5"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771"
+
+[[package]]
+name = "mdl"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9408becfeee133226be6df86aee4018565e6e26f746510467d0f5a0f38bc5bd5"
+dependencies = [
+ "anyhow",
+ "bincode",
+ "lmdb",
+ "serde",
+]
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "mime"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
+
+[[package]]
+name = "mime_guess"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef"
+dependencies = [
+ "mime",
+ "unicase",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.6.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4"
+dependencies = [
+ "cfg-if 0.1.10",
+ "fuchsia-zircon",
+ "fuchsia-zircon-sys",
+ "iovec",
+ "kernel32-sys",
+ "libc",
+ "log",
+ "miow",
+ "net2",
+ "slab",
+ "winapi 0.2.8",
+]
+
+[[package]]
+name = "miow"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d"
+dependencies = [
+ "kernel32-sys",
+ "net2",
+ "winapi 0.2.8",
+ "ws2_32-sys",
+]
+
+[[package]]
+name = "muldiv"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0419348c027fa7be448d2ae7ea0e4e04c2334c31dc4e74ab29f00a2a7ca69204"
+
+[[package]]
+name = "native-tls"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "log",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
+]
+
+[[package]]
+name = "net2"
+version = "0.2.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74d0df99cfcd2530b2e694f6e17e7f37b8e26bb23983ac530c0c97408837c631"
+dependencies = [
+ "cfg-if 0.1.10",
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "new_debug_unreachable"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54"
+
+[[package]]
+name = "num"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b7a8e9be5e039e2ff869df49155f1c06bd01ade2117ec783e56ab0932b67a8f"
+dependencies = [
+ "num-bigint",
+ "num-complex",
+ "num-integer",
+ "num-iter",
+ "num-rational 0.3.2",
+ "num-traits",
+]
+
+[[package]]
+name = "num-bigint"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-complex"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "747d632c0c558b87dbabbe6a82f3b4ae03720d0646ac5b7b4dae89394be5f2c5"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-iter"
+version = "0.1.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-rational"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-rational"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07"
+dependencies = [
+ "autocfg",
+ "num-bigint",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
+dependencies = [
+ "hermit-abi 0.2.6",
+ "libc",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+
+[[package]]
+name = "opaque-debug"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
+
+[[package]]
+name = "openssl"
+version = "0.10.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b102428fd03bc5edf97f62620f7298614c45cedf287c271e7ed450bbaf83f2e1"
+dependencies = [
+ "bitflags",
+ "cfg-if 1.0.0",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23bbbf7854cd45b83958ebe919f0e8e516793727652e27fda10a8384cfc790b7"
+dependencies = [
+ "autocfg",
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "pango"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e9c6b728f1be8edb5f9f981420b651d5ea30bdb9de89f1f1262d0084a020577"
+dependencies = [
+ "bitflags",
+ "glib",
+ "glib-sys",
+ "gobject-sys",
+ "lazy_static",
+ "libc",
+ "pango-sys",
+]
+
+[[package]]
+name = "pango-sys"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86b93d84907b3cf0819bff8f13598ba72843bee579d5ebc2502e4b0367b4be7d"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "pangocairo"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bdd1077c0db2e5eb9225cc040514aa856cb6a4c4890c542cf50d37880e1c572d"
+dependencies = [
+ "bitflags",
+ "cairo-rs",
+ "cairo-sys-rs",
+ "glib",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "pango",
+ "pango-sys",
+ "pangocairo-sys",
+]
+
+[[package]]
+name = "pangocairo-sys"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3921b31ab776b23e28c8f6e474dda52fdc28bc2689101caeb362ba976719efe"
+dependencies = [
+ "cairo-sys-rs",
+ "glib-sys",
+ "libc",
+ "pango-sys",
+ "pkg-config",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "paste"
+version = "0.1.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45ca20c77d80be666aef2b45486da86238fabe33e38306bd3118fe4af33fa880"
+dependencies = [
+ "paste-impl",
+ "proc-macro-hack",
+]
+
+[[package]]
+name = "paste-impl"
+version = "0.1.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d95a7db200b97ef370c8e6de0088252f7e0dfff7d047a28528e47456c0fc98b6"
+dependencies = [
+ "proc-macro-hack",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
+
+[[package]]
+name = "pest"
+version = "2.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "028accff104c4e513bad663bbcd2ad7cfd5304144404c31ed0a77ac103d00660"
+dependencies = [
+ "thiserror",
+ "ucd-trie",
+]
+
+[[package]]
+name = "pest_derive"
+version = "2.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ac3922aac69a40733080f53c1ce7f91dcf57e1a5f6c52f421fadec7fbdc4b69"
+dependencies = [
+ "pest",
+ "pest_generator",
+]
+
+[[package]]
+name = "pest_generator"
+version = "2.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d06646e185566b5961b4058dd107e0a7f56e77c3f484549fb119867773c0f202"
+dependencies = [
+ "pest",
+ "pest_meta",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "pest_meta"
+version = "2.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6f60b2ba541577e2a0c307c8f39d1439108120eb7903adeb6497fa880c59616"
+dependencies = [
+ "once_cell",
+ "pest",
+ "sha2 0.10.6",
+]
+
+[[package]]
+name = "phf"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12"
+dependencies = [
+ "phf_shared 0.8.0",
+]
+
+[[package]]
+name = "phf"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259"
+dependencies = [
+ "phf_shared 0.10.0",
+]
+
+[[package]]
+name = "phf_codegen"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815"
+dependencies = [
+ "phf_generator 0.8.0",
+ "phf_shared 0.8.0",
+]
+
+[[package]]
+name = "phf_codegen"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd"
+dependencies = [
+ "phf_generator 0.10.0",
+ "phf_shared 0.10.0",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526"
+dependencies = [
+ "phf_shared 0.8.0",
+ "rand 0.7.3",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6"
+dependencies = [
+ "phf_shared 0.10.0",
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "pin-project"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777"
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "precomputed-hash"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
+
+[[package]]
+name = "proc-macro-hack"
+version = "0.5.20+deprecated"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.51"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d727cae5b39d21da60fa540906919ad737832fe0b1c165da3a34d6548c849d6"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
+dependencies = [
+ "getrandom 0.1.16",
+ "libc",
+ "rand_chacha 0.2.2",
+ "rand_core 0.5.1",
+ "rand_hc",
+ "rand_pcg",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha 0.3.1",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
+dependencies = [
+ "getrandom 0.1.16",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom 0.2.8",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
+dependencies = [
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rand_pcg"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429"
+dependencies = [
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
+dependencies = [
+ "getrandom 0.2.8",
+ "redox_syscall",
+ "thiserror",
+]
+
+[[package]]
+name = "regex"
+version = "1.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848"
+
+[[package]]
+name = "remove_dir_all"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "reqwest"
+version = "0.10.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0718f81a8e14c4dbb3b34cf23dc6aaf9ab8a0dfec160c534b3dbca1aaa21f47c"
+dependencies = [
+ "async-compression",
+ "base64",
+ "bytes 0.5.6",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-tls",
+ "ipnet",
+ "js-sys",
+ "lazy_static",
+ "log",
+ "mime",
+ "mime_guess",
+ "native-tls",
+ "percent-encoding",
+ "pin-project-lite 0.2.9",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "tokio",
+ "tokio-socks",
+ "tokio-tls",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "winreg",
+]
+
+[[package]]
+name = "ruma-identifiers"
+version = "0.17.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5917092ecf88dec0a9a1f39ed5755096f39dc23003dcc278a58805ee8be65dee"
+dependencies = [
+ "rand 0.7.3",
+ "ruma-identifiers-macros",
+ "ruma-identifiers-validation",
+ "serde",
+ "strum",
+]
+
+[[package]]
+name = "ruma-identifiers-macros"
+version = "0.17.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "986f7ea65aac70e22fdbdadf582d51ceb4c896c0844ccf7a944a1128c2c5e30e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "ruma-identifiers-validation",
+ "syn",
+]
+
+[[package]]
+name = "ruma-identifiers-validation"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c112fd1d537d0c9eec9ec93e098576f8c68b2eabbc64b7275b1ed28235fe605b"
+dependencies = [
+ "serde",
+ "strum",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde"
+
+[[package]]
+name = "schannel"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3"
+dependencies = [
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "scratch"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ddccb15bcce173023b3fedd9436f882a0739b8dfb45e4f6b6002bee5929f61b2"
+
+[[package]]
+name = "secret-service"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d752040301c251d653aa740dec847e95767ce312cfc469bee85eb13cbf81d8a"
+dependencies = [
+ "aes",
+ "block-modes",
+ "dbus",
+ "hkdf",
+ "lazy_static",
+ "num",
+ "rand 0.7.3",
+ "sha2 0.9.9",
+]
+
+[[package]]
+name = "security-framework"
+version = "2.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.152"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.152"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.93"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cad406b69c91885b5107daf2c29572f6c8cdb3c66826821e286c533490c0bc76"
+dependencies = [
+ "itoa 1.0.5",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa 1.0.5",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "sha2"
+version = "0.9.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800"
+dependencies = [
+ "block-buffer 0.9.0",
+ "cfg-if 1.0.0",
+ "cpufeatures",
+ "digest 0.9.0",
+ "opaque-debug",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0"
+dependencies = [
+ "cfg-if 1.0.0",
+ "cpufeatures",
+ "digest 0.10.6",
+]
+
+[[package]]
+name = "siphasher"
+version = "0.3.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
+
+[[package]]
+name = "slab"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
+
+[[package]]
+name = "socket2"
+version = "0.3.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "sourceview4"
+version = "0.2.0"
+source = "git+https://gitlab.gnome.org/World/Rust/sourceview4-rs.git?rev=fa8819fa7ecbe56f44d951656d3825f468915754#fa8819fa7ecbe56f44d951656d3825f468915754"
+dependencies = [
+ "bitflags",
+ "cairo-rs",
+ "gdk",
+ "gdk-pixbuf",
+ "gdk-sys",
+ "gio",
+ "gio-sys",
+ "glib",
+ "glib-sys",
+ "gobject-sys",
+ "gtk",
+ "gtk-sys",
+ "libc",
+ "pango",
+ "sourceview4-sys",
+]
+
+[[package]]
+name = "sourceview4-sys"
+version = "0.2.0"
+source = "git+https://gitlab.gnome.org/World/Rust/sourceview4-rs.git?rev=fa8819fa7ecbe56f44d951656d3825f468915754#fa8819fa7ecbe56f44d951656d3825f468915754"
+dependencies = [
+ "cairo-sys-rs",
+ "gdk-pixbuf-sys",
+ "gdk-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "gtk-sys",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "string_cache"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "213494b7a2b503146286049378ce02b482200519accc31872ee8be91fa820a08"
+dependencies = [
+ "new_debug_unreachable",
+ "once_cell",
+ "parking_lot",
+ "phf_shared 0.10.0",
+ "precomputed-hash",
+ "serde",
+]
+
+[[package]]
+name = "string_cache_codegen"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988"
+dependencies = [
+ "phf_generator 0.10.0",
+ "phf_shared 0.10.0",
+ "proc-macro2",
+ "quote",
+]
+
+[[package]]
+name = "strsim"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+
+[[package]]
+name = "strum"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57bd81eb48f4c437cadc685403cad539345bf703d78e63707418431cecd4522b"
+dependencies = [
+ "strum_macros",
+]
+
+[[package]]
+name = "strum_macros"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87c85aa3f8ea653bfd3ddf25f7ee357ee4d204731f6aa9ad04002306f6e2774c"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "subtle"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
+
+[[package]]
+name = "syn"
+version = "1.0.107"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4"
+dependencies = [
+ "cfg-if 1.0.0",
+ "fastrand",
+ "libc",
+ "redox_syscall",
+ "remove_dir_all",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "tendril"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0"
+dependencies = [
+ "futf",
+ "mac",
+ "utf-8",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "time"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"
+dependencies = [
+ "libc",
+ "wasi 0.10.0+wasi-snapshot-preview1",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "0.2.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6703a273949a90131b290be1fe7b039d0fc884aa1935860dfcbe056f28cd8092"
+dependencies = [
+ "bytes 0.5.6",
+ "fnv",
+ "futures-core",
+ "iovec",
+ "lazy_static",
+ "memchr",
+ "mio",
+ "num_cpus",
+ "pin-project-lite 0.1.12",
+ "slab",
+]
+
+[[package]]
+name = "tokio-socks"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d611fd5d241872372d52a0a3d309c52d0b95a6a67671a6c8f7ab2c4a37fb2539"
+dependencies = [
+ "bytes 0.4.12",
+ "either 1.8.1",
+ "futures",
+ "thiserror",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-tls"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a70f4fcd7b3b24fb194f837560168208f669ca8cb70d0c4b862944452396343"
+dependencies = [
+ "native-tls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be8242891f2b6cbef26a2d7e8605133c2c554cd35b3e4948ea892d6d68436499"
+dependencies = [
+ "bytes 0.5.6",
+ "futures-core",
+ "futures-sink",
+ "log",
+ "pin-project-lite 0.1.12",
+ "tokio",
+]
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tracing"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+dependencies = [
+ "cfg-if 1.0.0",
+ "log",
+ "pin-project-lite 0.2.9",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "tracing-futures"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2"
+dependencies = [
+ "pin-project",
+ "tracing",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+
+[[package]]
+name = "twoway"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c57ffb460d7c24cd6eda43694110189030a3d1dfe418416d9468fd1c1d290b47"
+dependencies = [
+ "memchr",
+ "unchecked-index",
+]
+
+[[package]]
+name = "typed-arena"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9b2228007eba4120145f785df0f6c92ea538f5a3635a612ecf4e334c8c1446d"
+
+[[package]]
+name = "typenum"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
+
+[[package]]
+name = "ucd-trie"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81"
+
+[[package]]
+name = "unchecked-index"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eeba86d422ce181a719445e51872fa30f1f7413b62becb52e95ec91aa262d85c"
+
+[[package]]
+name = "unicase"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d54675592c1dbefd78cbd98db9bacd89886e1ca50692a0692baefffdeb92dd58"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "unicode_categories"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e"
+
+[[package]]
+name = "url"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+ "serde",
+]
+
+[[package]]
+name = "utf-8"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "vec_map"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "want"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
+dependencies = [
+ "log",
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.9.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
+
+[[package]]
+name = "wasi"
+version = "0.10.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b"
+dependencies = [
+ "cfg-if 1.0.0",
+ "serde",
+ "serde_json",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454"
+dependencies = [
+ "cfg-if 1.0.0",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d"
+
+[[package]]
+name = "web-sys"
+version = "0.3.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "winapi"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-build"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd"
+
+[[package]]
+name = "winreg"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "ws2_32-sys"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e"
+dependencies = [
+ "winapi 0.2.8",
+ "winapi-build",
+]
+
+[[package]]
+name = "xml5ever"
+version = "0.16.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9234163818fd8e2418fcde330655e757900d4236acd8cc70fef345ef91f6d865"
+dependencies = [
+ "log",
+ "mac",
+ "markup5ever 0.10.1",
+ "time",
+]
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/fractal/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/fractal/default.nix
new file mode 100644
index 000000000000..4f92ce733e54
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/fractal/default.nix
@@ -0,0 +1,102 @@
+{ stdenv
+, lib
+, fetchFromGitLab
+, nix-update-script
+, cargo
+, meson
+, ninja
+, gettext
+, python3
+, rustPlatform
+, rustc
+, pkg-config
+, gtksourceview4
+, glib
+, libhandy_0
+, gtk3
+, dbus
+, openssl
+, sqlite
+, gst_all_1
+, cairo
+, gdk-pixbuf
+, gspell
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "fractal";
+  version = "4.4.2";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.gnome.org";
+    owner = "GNOME";
+    repo = "fractal";
+    rev = version;
+    hash = "sha256-/vPadtyiYDX0PdneMxc0oSWb5OYnikevqajl3WgZiGA=";
+  };
+
+  cargoDeps = rustPlatform.importCargoLock {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "either-1.5.99" = "sha256-Lmv9OPZKEb7tmkN+7Mua2nx0xmZwm3d1W623UKUlPeg=";
+      "gettext-rs-0.4.2" = "sha256-wyZ1bf0oFcQo8gEi2GEalRUoKMoJYHysu79qcfjd4Ng=";
+      "sourceview4-0.2.0" = "sha256-RuCg05/qjkPri1QUd5acsGVqJtGvM5OO8/R+Nibxoa4=";
+    };
+  };
+
+  nativeBuildInputs = [
+    gettext
+    meson
+    ninja
+    pkg-config
+    python3
+    cargo
+    rustPlatform.cargoSetupHook
+    rustc
+    wrapGAppsHook
+    glib
+  ];
+
+  buildInputs = [
+    cairo
+    dbus
+    gdk-pixbuf
+    glib
+    gspell
+    gst_all_1.gst-editing-services
+    gst_all_1.gst-plugins-bad
+    gst_all_1.gst-plugins-base
+    (gst_all_1.gst-plugins-good.override {
+      gtkSupport = true;
+    })
+    gst_all_1.gstreamer
+    gst_all_1.gst-devtools
+    gtk3
+    gtksourceview4
+    libhandy_0
+    openssl
+    sqlite
+  ];
+
+  postPatch = ''
+    chmod +x scripts/test.sh
+    patchShebangs scripts/meson_post_install.py scripts/test.sh
+  '';
+
+  preConfigure = ''
+    export GETTEXT_DIR="${gettext}"
+  '';
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    description = "Matrix group messaging app";
+    homepage = "https://gitlab.gnome.org/GNOME/fractal";
+    license = licenses.gpl3;
+    maintainers = teams.gnome.members ++ (with maintainers; [ dtzWill ]);
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/franz/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/franz/default.nix
new file mode 100644
index 000000000000..a910105fde80
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/franz/default.nix
@@ -0,0 +1,20 @@
+{ lib, mkFranzDerivation, fetchurl }:
+
+mkFranzDerivation rec {
+  pname = "franz";
+  name = "Franz";
+  version = "5.9.2";
+  src = fetchurl {
+    url = "https://github.com/meetfranz/franz/releases/download/v${version}/franz_${version}_amd64.deb";
+    sha256 = "sha256-W/60g5CbSUZcNASjdbiS7DNv9375GiesEG60QLLAh1g=";
+  };
+  meta = with lib; {
+    description = "A free messaging app that combines chat & messaging services into one application";
+    homepage = "https://meetfranz.com";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.free;
+    maintainers = [ maintainers.davidtwco ];
+    platforms = [ "x86_64-linux" ];
+    hydraPlatforms = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/franz/generic.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/franz/generic.nix
new file mode 100644
index 000000000000..b48acec1d32b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/franz/generic.nix
@@ -0,0 +1,95 @@
+{ stdenv
+, lib
+, makeWrapper
+, wrapGAppsHook
+, autoPatchelfHook
+, dpkg
+, xorg
+, atk
+, glib
+, pango
+, gdk-pixbuf
+, cairo
+, freetype
+, fontconfig
+, gtk3
+, dbus
+, nss
+, nspr
+, alsa-lib
+, cups
+, expat
+, udev
+, libnotify
+, xdg-utils
+, mesa
+, libappindicator-gtk3
+}:
+
+# Helper function for building a derivation for Franz and forks.
+
+{ pname, name, version, src, meta, extraBuildInputs ? [], ... } @ args:
+let
+  cleanedArgs = builtins.removeAttrs args [ "pname" "name" "version" "src" "meta" "extraBuildInputs" ];
+in stdenv.mkDerivation (rec {
+  inherit pname version src meta;
+
+  # Don't remove runtime deps.
+  dontPatchELF = true;
+
+  nativeBuildInputs = [ autoPatchelfHook makeWrapper wrapGAppsHook dpkg ];
+  buildInputs = extraBuildInputs ++ (with xorg; [
+    libXi
+    libXcursor
+    libXdamage
+    libXrandr
+    libXcomposite
+    libXext
+    libXfixes
+    libXrender
+    libX11
+    libXtst
+    libXScrnSaver
+  ]) ++ [
+    mesa #libgbm
+    gtk3
+    atk
+    glib
+    pango
+    gdk-pixbuf
+    cairo
+    freetype
+    fontconfig
+    dbus
+    nss
+    nspr
+    alsa-lib
+    cups
+    expat
+    stdenv.cc.cc
+  ];
+  runtimeDependencies = [ stdenv.cc.cc.lib (lib.getLib udev) libnotify libappindicator-gtk3 ];
+
+  unpackPhase = "dpkg-deb -x $src .";
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -r opt $out
+    ln -s $out/opt/${name}/${pname} $out/bin
+
+    # Provide desktop item and icon.
+    cp -r usr/share $out
+    substituteInPlace $out/share/applications/${pname}.desktop \
+      --replace /opt/${name}/${pname} ${pname}
+  '';
+
+  dontWrapGApps = true;
+
+  postFixup = ''
+    # make xdg-open overrideable at runtime
+    wrapProgram $out/opt/${name}/${pname} \
+      --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath runtimeDependencies}" \
+      --suffix PATH : ${xdg-utils}/bin \
+      "''${gappsWrapperArgs[@]}"
+  '';
+} // cleanedArgs)
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/freetalk/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/freetalk/default.nix
new file mode 100644
index 000000000000..fdfbbc5b275b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/freetalk/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchurl
+, guile, pkg-config, glib, loudmouth, gmp, libidn, readline, libtool
+, libunwind, ncurses, curl, jansson, texinfo
+, argp-standalone }:
+stdenv.mkDerivation rec {
+  pname = "freetalk";
+  version = "4.2";
+
+  src = fetchurl {
+    url = "mirror://gnu/freetalk/freetalk-${version}.tar.gz";
+    hash = "sha256-u1tPKacGry+JGYeAIgDia3N7zs5EM4FyQZdV8e7htYA=";
+  };
+
+  nativeBuildInputs = [ pkg-config texinfo ];
+  buildInputs = [
+    guile glib loudmouth gmp libidn readline libtool
+    libunwind ncurses curl jansson
+  ] ++ lib.optionals stdenv.isDarwin [
+    argp-standalone
+  ];
+
+  env.NIX_LDFLAGS = lib.optionalString stdenv.isDarwin "-largp";
+
+  meta = with lib; {
+    description =  "Console XMPP client";
+    license = licenses.gpl3Plus ;
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.unix;
+    downloadPage = "https://www.gnu.org/software/freetalk/";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/gajim/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/gajim/default.nix
new file mode 100644
index 000000000000..7938708ca6ac
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/gajim/default.nix
@@ -0,0 +1,91 @@
+{ lib, fetchurl, fetchFromGitLab, gettext, wrapGAppsHook
+
+# Native dependencies
+, python3, gtk3, gobject-introspection, gnome
+, gtksourceview4
+, glib-networking
+
+# Test dependencies
+, xvfb-run, dbus
+
+# Optional dependencies
+, enableJingle ? true, farstream, gstreamer, gst-plugins-base, gst-libav, gst-plugins-good, libnice
+, enableE2E ? true
+, enableSecrets ? true, libsecret
+, enableRST ? true, docutils
+, enableSpelling ? true, gspell
+, enableUPnP ? true, gupnp-igd
+, enableAppIndicator ? true, libappindicator-gtk3
+, extraPythonPackages ? ps: []
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "gajim";
+  version = "1.8.1";
+
+  src = fetchurl {
+    url = "https://gajim.org/downloads/${lib.versions.majorMinor version}/gajim-${version}.tar.gz";
+    hash = "sha256-Erh7tR6WX8pt89PRicgbVZd8CLlv18Vyq44O+ZnJVzU=";
+  };
+
+  format = "pyproject";
+
+  buildInputs = [
+    gtk3 gnome.adwaita-icon-theme
+    gtksourceview4
+    glib-networking
+  ] ++ lib.optionals enableJingle [ farstream gstreamer gst-plugins-base gst-libav gst-plugins-good libnice ]
+    ++ lib.optional enableSecrets libsecret
+    ++ lib.optional enableSpelling gspell
+    ++ lib.optional enableUPnP gupnp-igd
+    ++ lib.optional enableAppIndicator libappindicator-gtk3;
+
+  nativeBuildInputs = [
+    gettext wrapGAppsHook gobject-introspection
+  ];
+
+  dontWrapGApps = true;
+
+  preFixup = ''
+    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  propagatedBuildInputs = with python3.pkgs; [
+    nbxmpp pygobject3 dbus-python pillow css-parser precis-i18n keyring setuptools packaging gssapi
+    omemo-dr qrcode
+  ] ++ lib.optionals enableE2E [ pycrypto python-gnupg ]
+    ++ lib.optional enableRST docutils
+    ++ extraPythonPackages python3.pkgs;
+
+  nativeCheckInputs = [ xvfb-run dbus ];
+
+  preBuild = ''
+    python pep517build/build_metadata.py -o dist/metadata
+  '';
+
+  postInstall = ''
+    python pep517build/install_metadata.py dist/metadata --prefix=$out
+  '';
+
+  checkPhase = ''
+    xvfb-run dbus-run-session \
+      --config-file=${dbus}/share/dbus-1/session.conf \
+      ${python3.interpreter} -m unittest discover -s test/gui -v
+    ${python3.interpreter} -m unittest discover -s test/common -v
+  '';
+
+  # test are broken in 1.7.3, 1.8.0
+  doCheck = false;
+
+  # necessary for wrapGAppsHook
+  strictDeps = false;
+
+  meta = {
+    homepage = "http://gajim.org/";
+    description = "Jabber client written in PyGTK";
+    license = lib.licenses.gpl3Plus;
+    maintainers = with lib.maintainers; [ raskin abbradar ];
+    downloadPage = "http://gajim.org/download/";
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/gitter/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/gitter/default.nix
new file mode 100644
index 000000000000..04d8909f3d89
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/gitter/default.nix
@@ -0,0 +1,102 @@
+{ lib, stdenv, alsa-lib, atk, at-spi2-core, cairo, cups, dbus, dpkg, expat, fetchurl
+, fontconfig, freetype, gdk-pixbuf, glib, gtk3,  libdrm, libX11
+, libXScrnSaver, libXcomposite, libXcursor, libXdamage, libXext, libXfixes
+, libXi, libXrandr, libXrender, libXtst, libappindicator-gtk3, libcxx
+, libnotify, libpulseaudio, libxcb, makeDesktopItem, makeWrapper, mesa, nspr, nss
+, pango, systemd }:
+
+let gitterDirectorySuffix = "opt/gitter";
+   libPath = lib.makeLibraryPath [
+     alsa-lib
+     atk
+     at-spi2-core
+     cairo
+     cups
+     dbus
+     expat
+     fontconfig
+     freetype
+     gdk-pixbuf
+     glib
+     gtk3
+     libX11
+     libXScrnSaver
+     libXcomposite
+     libXcursor
+     libXdamage
+     libXext
+     libXfixes
+     libXi
+     libXrandr
+     libXrender
+     libXtst
+     libappindicator-gtk3
+     libcxx
+     libdrm
+     libnotify
+     libpulseaudio
+     libxcb
+     mesa
+     nspr
+     nss
+     pango
+     stdenv.cc.cc
+     systemd
+  ];
+    doELFPatch = target: ''
+      patchelf --set-interpreter ${stdenv.cc.bintools.dynamicLinker} \
+         --set-rpath "$out/${gitterDirectorySuffix}/lib:${libPath}" \
+         $out/${gitterDirectorySuffix}/${target}
+       '';
+in stdenv.mkDerivation rec {
+  pname = "gitter";
+  version = "5.0.1";
+
+  src = fetchurl {
+    url = "https://update.gitter.im/linux64/${pname}_${version}_amd64.deb";
+    sha256 = "1ps9akylqrril4902r8mi0mprm0hb5wra51ry6c1rb5xz5nrzgh1";
+  };
+
+  nativeBuildInputs = [ makeWrapper dpkg ];
+
+  unpackPhase = "dpkg -x $src .";
+
+  installPhase = ''
+    mkdir -p $out/{bin,opt/gitter,share/pixmaps}
+    mv ./opt/Gitter/linux64/* $out/opt/gitter
+
+    ${doELFPatch "Gitter"}
+    ${doELFPatch "nacl_helper"}
+    ${doELFPatch "minidump_stackwalk"}
+    ${doELFPatch "nwjc"}
+    ${doELFPatch "chromedriver"}
+    ${doELFPatch "payload"}
+
+    patchelf --set-rpath "$out/${gitterDirectorySuffix}/lib:${libPath}" \
+         $out/${gitterDirectorySuffix}/lib/libnw.so
+
+    wrapProgram $out/${gitterDirectorySuffix}/Gitter --prefix LD_LIBRARY_PATH : ${libPath}
+
+    ln -s $out/${gitterDirectorySuffix}/Gitter $out/bin/
+    ln -s $out/${gitterDirectorySuffix}/logo.png $out/share/pixmaps/gitter.png
+    ln -s "${desktopItem}/share/applications" $out/share/
+  '';
+
+  desktopItem = makeDesktopItem {
+    name = pname;
+    exec = "Gitter";
+    icon = pname;
+    desktopName = "Gitter";
+    genericName = meta.description;
+    categories = [ "Network" "InstantMessaging" ];
+  };
+
+  meta = with lib; {
+    description = "Where developers come to talk";
+    downloadPage = "https://gitter.im/apps";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.mit;
+    maintainers = [ maintainers.imalison ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/go-neb/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/go-neb/default.nix
new file mode 100644
index 000000000000..d1947825c42b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/go-neb/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, buildGoModule, fetchFromGitHub, nixosTests, olm }:
+
+buildGoModule {
+  pname = "go-neb";
+  version = "unstable-2021-07-21";
+  src = fetchFromGitHub {
+    owner = "matrix-org";
+    repo = "go-neb";
+    rev = "8916c80f8ce1732f64b50f9251242ca189082e76";
+    sha256 = "sha256-kuH4vbvS4G1bczxUdY4bd4oL4pIZzuueUxdEp4xuzJM=";
+  };
+
+  subPackages = [ "." ];
+
+  buildInputs = [ olm ];
+
+  vendorHash = "sha256-5Vg7aUkqiFIQuxmsDOJjvXoeA5NjMoBoD0XBhC+o4GA=";
+
+  doCheck = false;
+
+  passthru.tests.go-neb = nixosTests.go-neb;
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    description = "Extensible matrix bot written in Go";
+    homepage = "https://github.com/matrix-org/go-neb";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ hexa maralorn ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/gomuks/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/gomuks/default.nix
new file mode 100644
index 000000000000..d7fd40029843
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/gomuks/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, stdenv
+, substituteAll
+, buildGoModule
+, fetchFromGitHub
+, makeDesktopItem
+, makeWrapper
+, libnotify
+, olm
+, pulseaudio
+, sound-theme-freedesktop
+}:
+
+buildGoModule rec {
+  pname = "gomuks";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "tulir";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-gLyjqmGZudj8PmsYUGXHOjetZzi6u5CFI7Y50y2XAzk=";
+  };
+
+  vendorHash = "sha256-FmQJG6hv0YPyHVjZ/DvkQExrGLc1hjoiPS59MnqG2gU=";
+
+  doCheck = false;
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ olm ];
+
+  postInstall = ''
+    cp -r ${
+      makeDesktopItem {
+        name = "net.maunium.gomuks.desktop";
+        exec = "@out@/bin/gomuks";
+        terminal = true;
+        desktopName = "Gomuks";
+        genericName = "Matrix client";
+        categories = [ "Network" "Chat" ];
+        comment = meta.description;
+      }
+    }/* $out/
+    substituteAllInPlace $out/share/applications/*
+    wrapProgram $out/bin/gomuks \
+      --prefix PATH : "${lib.makeBinPath (lib.optionals stdenv.isLinux [ libnotify pulseaudio ])}" \
+      --set-default GOMUKS_SOUND_NORMAL "${sound-theme-freedesktop}/share/sounds/freedesktop/stereo/message-new-instant.oga" \
+      --set-default GOMUKS_SOUND_CRITICAL "${sound-theme-freedesktop}/share/sounds/freedesktop/stereo/complete.oga"
+  '';
+
+  meta = with lib; {
+    homepage = "https://maunium.net/go/gomuks/";
+    description = "A terminal based Matrix client written in Go";
+    license = licenses.agpl3Plus;
+    maintainers = with maintainers; [ chvp emily ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/gotktrix/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/gotktrix/default.nix
new file mode 100644
index 000000000000..df75f7192bf7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/gotktrix/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, gtk4
+, glib
+, gobject-introspection
+, pkg-config
+}:
+
+buildGoModule rec {
+  pname = "gotktrix";
+  version = "unstable-2023-04-05";
+
+  src = fetchFromGitHub {
+    owner = "diamondburned";
+    repo = pname;
+    rev = "a8f876a383cc34dac18edddbe22be2dd494b8d0c"; # compound
+    hash = "sha256-BuiA9UajdMhSrEfaXdu5DZlVhC4GVUdUpQDLMvKGrEk=";
+  };
+
+  vendorHash = "sha256-oo/j6i7slXILqyvj/EHojsyCZzJMGd10PTZaLvI1xoc=";
+
+  buildInputs = [
+    gtk4
+    glib
+  ];
+
+  nativeBuildInputs = [ pkg-config gobject-introspection ];
+
+  # Checking requires a working display
+  doCheck = false;
+
+  postPatch = ''
+    sed -i '/DBusActivatable/d' .nix/com.github.diamondburned.gotktrix.desktop
+    echo 'X-Purism-FormFactor=Workstation;Mobile;' >> .nix/com.github.diamondburned.gotktrix.desktop
+  '';
+
+  postInstall = ''
+    install -Dm444 .nix/com.github.diamondburned.gotktrix.desktop -t $out/share/applications/
+    install -Dm444 .github/logo-256.png -T $out/share/icons/hicolor/256x256/apps/gotktrix.png
+  '';
+
+  meta = with lib; {
+    description = "Matrix client written in Go using GTK4";
+    homepage = "https://github.com/diamondburned/gotktrix";
+    license = licenses.agpl3Plus;
+    maintainers = with maintainers; [ chuangzhu ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/gurk-rs/Cargo.lock b/nixpkgs/pkgs/applications/networking/instant-messengers/gurk-rs/Cargo.lock
new file mode 100644
index 000000000000..877b85d2b548
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/gurk-rs/Cargo.lock
@@ -0,0 +1,4559 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "aead"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877"
+dependencies = [
+ "generic-array",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "aes"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8"
+dependencies = [
+ "cfg-if",
+ "cipher",
+ "cpufeatures",
+ "ctr",
+ "opaque-debug",
+]
+
+[[package]]
+name = "aes-gcm"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df5f85a83a7d8b0442b6aa7b504b8212c1733da07b98aae43d4bc21b2cb3cdf6"
+dependencies = [
+ "aead",
+ "aes",
+ "cipher",
+ "ctr",
+ "ghash",
+ "subtle",
+]
+
+[[package]]
+name = "aes-gcm-siv"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "589c637f0e68c877bbd59a4599bbe849cac8e5f3e4b5a3ebae8f528cd218dcdc"
+dependencies = [
+ "aead",
+ "aes",
+ "cipher",
+ "ctr",
+ "polyval",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "ahash"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
+dependencies = [
+ "getrandom 0.2.8",
+ "once_cell",
+ "version_check",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4f55bd91a0978cbfd91c457a164bab8b4001c833b7f323132c0a4e1922dd44e"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "anes"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299"
+
+[[package]]
+name = "anyhow"
+version = "1.0.66"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "216261ddc8289130e551ddcd5ce8a064710c0d064a4d2895c67151c92b5443f6"
+
+[[package]]
+name = "arboard"
+version = "3.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6041616acea41d67c4a984709ddab1587fd0b10efe5cc563fee954d2f011854"
+dependencies = [
+ "clipboard-win",
+ "core-graphics",
+ "image",
+ "log",
+ "objc",
+ "objc-foundation",
+ "objc_id",
+ "once_cell",
+ "parking_lot 0.12.1",
+ "thiserror",
+ "winapi",
+ "wl-clipboard-rs",
+ "x11rb",
+]
+
+[[package]]
+name = "arrayref"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544"
+
+[[package]]
+name = "arrayvec"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b"
+
+[[package]]
+name = "arrayvec"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6"
+
+[[package]]
+name = "async-broadcast"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d26004fe83b2d1cd3a97609b21e39f9a31535822210fe83205d2ce48866ea61"
+dependencies = [
+ "event-listener",
+ "futures-core",
+ "parking_lot 0.12.1",
+]
+
+[[package]]
+name = "async-channel"
+version = "1.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e14485364214912d3b19cc3435dde4df66065127f05fa0d75c712f36f12c2f28"
+dependencies = [
+ "concurrent-queue",
+ "event-listener",
+ "futures-core",
+]
+
+[[package]]
+name = "async-executor"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "871f9bb5e0a22eeb7e8cf16641feb87c9dc67032ccf8ff49e772eb9941d3a965"
+dependencies = [
+ "async-task",
+ "concurrent-queue",
+ "fastrand",
+ "futures-lite",
+ "once_cell",
+ "slab",
+]
+
+[[package]]
+name = "async-io"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83e21f3a490c72b3b0cf44962180e60045de2925d8dff97918f7ee43c8f637c7"
+dependencies = [
+ "autocfg",
+ "concurrent-queue",
+ "futures-lite",
+ "libc",
+ "log",
+ "once_cell",
+ "parking",
+ "polling",
+ "slab",
+ "socket2",
+ "waker-fn",
+ "winapi",
+]
+
+[[package]]
+name = "async-lock"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c8101efe8695a6c17e02911402145357e718ac92d3ff88ae8419e84b1707b685"
+dependencies = [
+ "event-listener",
+ "futures-lite",
+]
+
+[[package]]
+name = "async-recursion"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d7d78656ba01f1b93024b7c3a0467f1608e4be67d725749fdcd7d2c7678fd7a2"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "async-task"
+version = "4.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a40729d2133846d9ed0ea60a8b9541bccddab49cd30f0715a1da672fe9a2524"
+
+[[package]]
+name = "async-trait"
+version = "0.1.58"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e805d94e6b5001b651426cf4cd446b1ab5f319d27bab5c644f61de0a804360c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "async-tungstenite"
+version = "0.17.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1b71b31561643aa8e7df3effe284fa83ab1a840e52294c5f4bd7bfd8b2becbb"
+dependencies = [
+ "futures-io",
+ "futures-util",
+ "log",
+ "pin-project-lite",
+ "rustls-native-certs",
+ "tokio",
+ "tokio-rustls",
+ "tungstenite",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "base64"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff"
+
+[[package]]
+name = "base64"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+[[package]]
+name = "base64ct"
+version = "1.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b645a089122eccb6111b4f81cbc1a49f5900ac4666bb93ac027feaecf15607bf"
+
+[[package]]
+name = "bincode"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "blake3"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a08e53fc5a564bb15bfe6fae56bd71522205f1f91893f9c0116edad6496c183f"
+dependencies = [
+ "arrayref",
+ "arrayvec 0.7.2",
+ "cc",
+ "cfg-if",
+ "constant_time_eq",
+ "digest 0.10.5",
+]
+
+[[package]]
+name = "block"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
+
+[[package]]
+name = "block-buffer"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "block-buffer"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "block-modes"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2cb03d1bed155d89dce0f845b7899b18a9a163e148fd004e1c28421a783e2d8e"
+dependencies = [
+ "block-padding",
+ "cipher",
+]
+
+[[package]]
+name = "block-padding"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae"
+
+[[package]]
+name = "bstr"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223"
+dependencies = [
+ "lazy_static",
+ "memchr",
+ "regex-automata",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba"
+
+[[package]]
+name = "bytecount"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c676a478f63e9fa2dd5368a42f28bba0d6c560b775f38583c8bbaa7fcd67c9c"
+
+[[package]]
+name = "bytemuck"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c041d3eab048880cb0b86b256447da3f18859a163c3b8d8893f4e6368abe6393"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "bytes"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db"
+
+[[package]]
+name = "cache-padded"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1db59621ec70f09c5e9b597b220c7a2b43611f4710dc03ceb8748637775692c"
+
+[[package]]
+name = "cassowary"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53"
+
+[[package]]
+name = "cast"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5"
+
+[[package]]
+name = "cc"
+version = "1.0.74"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "581f5dba903aac52ea3feb5ec4810848460ee833876f1f9b0fdeab1f19091574"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chacha20"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c80e5460aa66fe3b91d40bcbdab953a597b60053e34d684ac6903f863b680a6"
+dependencies = [
+ "cfg-if",
+ "cipher",
+ "cpufeatures",
+ "zeroize",
+]
+
+[[package]]
+name = "chacha20poly1305"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a18446b09be63d457bbec447509e85f662f32952b035ce892290396bc0b0cff5"
+dependencies = [
+ "aead",
+ "chacha20",
+ "cipher",
+ "poly1305",
+ "zeroize",
+]
+
+[[package]]
+name = "checked_int_cast"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17cc5e6b5ab06331c33589842070416baa137e8b0eb912b008cfd4a78ada7919"
+
+[[package]]
+name = "chrono"
+version = "0.4.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfd4d1b31faaa3a89d7934dbded3111da0d2ef28e3ebccdb4f0179f5929d1ef1"
+dependencies = [
+ "iana-time-zone",
+ "num-integer",
+ "num-traits",
+ "serde",
+ "winapi",
+]
+
+[[package]]
+name = "ciborium"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0c137568cc60b904a7724001b35ce2630fd00d5d84805fbb608ab89509d788f"
+dependencies = [
+ "ciborium-io",
+ "ciborium-ll",
+ "serde",
+]
+
+[[package]]
+name = "ciborium-io"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "346de753af073cc87b52b2083a506b38ac176a44cfb05497b622e27be899b369"
+
+[[package]]
+name = "ciborium-ll"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "213030a2b5a4e0c0892b6652260cf6ccac84827b83a85a534e178e3906c4cf1b"
+dependencies = [
+ "ciborium-io",
+ "half",
+]
+
+[[package]]
+name = "cipher"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "clap"
+version = "3.2.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5"
+dependencies = [
+ "bitflags",
+ "clap_lex 0.2.4",
+ "indexmap",
+ "textwrap",
+]
+
+[[package]]
+name = "clap"
+version = "4.0.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e67816e006b17427c9b4386915109b494fec2d929c63e3bd3561234cbf1bf1e"
+dependencies = [
+ "atty",
+ "bitflags",
+ "clap_derive",
+ "clap_lex 0.3.0",
+ "once_cell",
+ "strsim",
+ "termcolor",
+]
+
+[[package]]
+name = "clap_derive"
+version = "4.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16a1b0f6422af32d5da0c58e2703320f379216ee70198241c84173a8c5ac28f3"
+dependencies = [
+ "heck 0.4.0",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5"
+dependencies = [
+ "os_str_bytes",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d4198f73e42b4936b35b5bb248d81d2b595ecb170da0bac7655c54eedfa8da8"
+dependencies = [
+ "os_str_bytes",
+]
+
+[[package]]
+name = "clipboard-win"
+version = "4.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7191c27c2357d9b7ef96baac1773290d4ca63b24205b82a3fd8a0637afcf0362"
+dependencies = [
+ "error-code",
+ "str-buf",
+ "winapi",
+]
+
+[[package]]
+name = "cmake"
+version = "0.1.49"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db34956e100b30725f2eb215f90d4871051239535632f84fea3bc92722c66b7c"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "codespan-reporting"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
+dependencies = [
+ "termcolor",
+ "unicode-width",
+]
+
+[[package]]
+name = "color_quant"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
+
+[[package]]
+name = "concurrent-queue"
+version = "1.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af4780a44ab5696ea9e28294517f1fffb421a83a25af521333c838635509db9c"
+dependencies = [
+ "cache-padded",
+]
+
+[[package]]
+name = "console"
+version = "0.15.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c050367d967ced717c04b65d8c619d863ef9292ce0c5760028655a2fb298718c"
+dependencies = [
+ "encode_unicode",
+ "lazy_static",
+ "libc",
+ "terminal_size",
+ "winapi",
+]
+
+[[package]]
+name = "constant_time_eq"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
+
+[[package]]
+name = "core-graphics"
+version = "0.22.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "core-graphics-types",
+ "foreign-types",
+ "libc",
+]
+
+[[package]]
+name = "core-graphics-types"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "foreign-types",
+ "libc",
+]
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "criterion"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7c76e09c1aae2bc52b3d2f29e13c6572553b30c4aa1b8a49fd70de6412654cb"
+dependencies = [
+ "anes",
+ "atty",
+ "cast",
+ "ciborium",
+ "clap 3.2.23",
+ "criterion-plot",
+ "futures",
+ "itertools 0.10.5",
+ "lazy_static",
+ "num-traits",
+ "oorandom",
+ "plotters",
+ "rayon",
+ "regex",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "tinytemplate",
+ "tokio",
+ "walkdir",
+]
+
+[[package]]
+name = "criterion-plot"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1"
+dependencies = [
+ "cast",
+ "itertools 0.10.5",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc"
+dependencies = [
+ "cfg-if",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f916dfc5d356b0ed9dae65f1db9fc9770aa2851d2662b988ccf4fe3516e86348"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "crossbeam-utils",
+ "memoffset",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "edbafec5fa1f196ca66527c1b12c2ec4745ca14b50f1ad8f9f6f720b55d11fac"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crossterm"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e64e6c0fbe2c17357405f7c758c1ef960fce08bdfb2c03d88d2a18d7e09c4b67"
+dependencies = [
+ "bitflags",
+ "crossterm_winapi",
+ "futures-core",
+ "libc",
+ "mio",
+ "parking_lot 0.12.1",
+ "signal-hook",
+ "signal-hook-mio",
+ "winapi",
+]
+
+[[package]]
+name = "crossterm_winapi"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ae1b35a484aa10e07fe0638d02301c5ad24de82d310ccbd2f3693da5f09bf1c"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "crypto-mac"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714"
+dependencies = [
+ "generic-array",
+ "subtle",
+]
+
+[[package]]
+name = "ctr"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea"
+dependencies = [
+ "cipher",
+]
+
+[[package]]
+name = "curve25519-dalek"
+version = "3.2.1"
+source = "git+https://github.com/signalapp/curve25519-dalek?branch=lizard2#4f0aa6653c51598daa0a2f53b8ba54ce0eedfbdd"
+dependencies = [
+ "byteorder",
+ "digest 0.9.0",
+ "rand_core 0.5.1",
+ "serde",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "cxx"
+version = "1.0.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b7d4e43b25d3c994662706a1d4fcfc32aaa6afd287502c111b237093bb23f3a"
+dependencies = [
+ "cc",
+ "cxxbridge-flags",
+ "cxxbridge-macro",
+ "link-cplusplus",
+]
+
+[[package]]
+name = "cxx-build"
+version = "1.0.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "84f8829ddc213e2c1368e51a2564c552b65a8cb6a28f31e576270ac81d5e5827"
+dependencies = [
+ "cc",
+ "codespan-reporting",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "scratch",
+ "syn",
+]
+
+[[package]]
+name = "cxxbridge-flags"
+version = "1.0.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e72537424b474af1460806647c41d4b6d35d09ef7fe031c5c2fa5766047cc56a"
+
+[[package]]
+name = "cxxbridge-macro"
+version = "1.0.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "309e4fb93eed90e1e14bea0da16b209f81813ba9fc7830c20ed151dd7bc0a4d7"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "derivative"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "derive-new"
+version = "0.5.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3418329ca0ad70234b9735dc4ceed10af4df60eff9c8e7b06cb5e520d92c3535"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "digest"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "adfbc57365a37acbd2ebf2b64d7e69bb766e2fea813521ed536f5d0520dcf86c"
+dependencies = [
+ "block-buffer 0.10.3",
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "dirs"
+version = "4.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059"
+dependencies = [
+ "dirs-sys",
+]
+
+[[package]]
+name = "dirs-next"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
+dependencies = [
+ "cfg-if",
+ "dirs-sys-next",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "dirs-sys-next"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "displaydoc"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3bf95dc3f046b9da4f2d51833c0d3547d8564ef6910f5c1ed130306a75b92886"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "downcast-rs"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650"
+
+[[package]]
+name = "either"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797"
+
+[[package]]
+name = "emoji"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32e9309870371f7fa7767752e5048fc0c0675b017a27d9c601dffe9a1efe0301"
+dependencies = [
+ "fuzzy-matcher",
+ "itertools 0.9.0",
+ "lazy_static",
+ "phf 0.8.0",
+]
+
+[[package]]
+name = "encode_unicode"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
+
+[[package]]
+name = "enumflags2"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e75d4cd21b95383444831539909fbb14b9dc3fdceb2a6f5d36577329a1f55ccb"
+dependencies = [
+ "enumflags2_derive",
+ "serde",
+]
+
+[[package]]
+name = "enumflags2_derive"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f58dc3c5e468259f19f2d46304a6b28f1c3d034442e14b322d2b850e36f6d5ae"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "env_logger"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3"
+dependencies = [
+ "log",
+ "regex",
+]
+
+[[package]]
+name = "errno"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "error-code"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64f18991e7bf11e7ffee451b5318b5c1a73c52d0d0ada6e5a3017c8c1ced6a21"
+dependencies = [
+ "libc",
+ "str-buf",
+]
+
+[[package]]
+name = "event-listener"
+version = "2.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
+
+[[package]]
+name = "fastrand"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "filetime"
+version = "0.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b9663d381d07ae25dc88dbdf27df458faa83a9b25336bcac83d5e452b5fc9d3"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "fixedbitset"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
+
+[[package]]
+name = "flate2"
+version = "1.0.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f82b0f4c27ad9f8bfd1f3208d882da2b09c301bc1c828fd3a00d0216d2fbbff6"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide 0.5.4",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "fs2"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "fs_extra"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2022715d62ab30faffd124d40b76f4134a550a87792276512b18d63272333394"
+
+[[package]]
+name = "futures"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38390104763dc37a5145a53c29c63c1290b5d316d6086ec32c293f6736051bb0"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52ba265a92256105f45b719605a571ffe2d1f0fea3807304b522c1d778f79eed"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7acc85df6714c176ab5edf386123fafe217be88c0840ec11f199441134a074e2"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00f5fb52a06bdcadeb54e8d3671f8888a39697dcb0b81b23b55174030427f4eb"
+
+[[package]]
+name = "futures-lite"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48"
+dependencies = [
+ "fastrand",
+ "futures-core",
+ "futures-io",
+ "memchr",
+ "parking",
+ "pin-project-lite",
+ "waker-fn",
+]
+
+[[package]]
+name = "futures-macro"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bdfb8ce053d86b91919aad980c220b1fb8401a9394410e1c289ed7e66b61835d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39c15cf1a4aa79df40f1bb462fb39676d0ad9e366c2a33b590d7c66f4f81fcf9"
+
+[[package]]
+name = "futures-task"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ffb393ac5d9a6eaa9d3fdf37ae2776656b706e200c8e16b1bdb227f5198e6ea"
+
+[[package]]
+name = "futures-util"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "197676987abd2f9cadff84926f410af1c183608d36641465df73ae8211dc65d6"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "fuzzy-matcher"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54614a3312934d066701a80f20f15fa3b56d67ac7722b39eea5b4c9dd1d66c94"
+dependencies = [
+ "thread_local",
+]
+
+[[package]]
+name = "fxhash"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
+dependencies = [
+ "byteorder",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "gethostname"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "getopts"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.9.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "gh-emoji"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30ad64b43d48c1745c0059e5ba223816eb599eec8956c668fc0a31f6b9cd799e"
+dependencies = [
+ "phf 0.11.1",
+ "regex",
+]
+
+[[package]]
+name = "ghash"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1583cc1656d7839fd3732b80cf4f38850336cdb9b8ded1cd399ca62958de3c99"
+dependencies = [
+ "opaque-debug",
+ "polyval",
+]
+
+[[package]]
+name = "gurk"
+version = "0.4.0"
+dependencies = [
+ "aho-corasick",
+ "anyhow",
+ "arboard",
+ "async-trait",
+ "base64 0.13.1",
+ "chrono",
+ "clap 4.0.19",
+ "criterion",
+ "crossterm",
+ "derivative",
+ "dirs",
+ "emoji",
+ "futures-channel",
+ "gh-emoji",
+ "hostname",
+ "insta",
+ "itertools 0.10.5",
+ "log-panics",
+ "mime_guess",
+ "notify-rust",
+ "opener",
+ "phonenumber",
+ "presage",
+ "prost 0.10.4",
+ "qr2term",
+ "quickcheck",
+ "quickcheck_macros",
+ "regex-automata",
+ "scopeguard",
+ "serde",
+ "serde_json",
+ "tempfile",
+ "textwrap",
+ "tokio",
+ "tokio-stream",
+ "toml",
+ "tracing",
+ "tracing-appender",
+ "tracing-subscriber",
+ "tui",
+ "unicode-width",
+ "uuid",
+ "whoami",
+]
+
+[[package]]
+name = "half"
+version = "1.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7"
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+dependencies = [
+ "ahash",
+]
+
+[[package]]
+name = "headers"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3e372db8e5c0d213e0cd0b9be18be2aca3d44cf2fe30a9d46a65581cd454584"
+dependencies = [
+ "base64 0.13.1",
+ "bitflags",
+ "bytes",
+ "headers-core",
+ "http",
+ "httpdate",
+ "mime",
+ "sha1 0.10.5",
+]
+
+[[package]]
+name = "headers-core"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429"
+dependencies = [
+ "http",
+]
+
+[[package]]
+name = "heck"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "heck"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
+name = "hkdf"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01706d578d5c281058480e673ae4086a9f4710d8df1ad80a5b03e39ece5f886b"
+dependencies = [
+ "digest 0.9.0",
+ "hmac 0.11.0",
+]
+
+[[package]]
+name = "hkdf"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437"
+dependencies = [
+ "hmac 0.12.1",
+]
+
+[[package]]
+name = "hmac"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b"
+dependencies = [
+ "crypto-mac",
+ "digest 0.9.0",
+]
+
+[[package]]
+name = "hmac"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
+dependencies = [
+ "digest 0.10.5",
+]
+
+[[package]]
+name = "hostname"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867"
+dependencies = [
+ "libc",
+ "match_cfg",
+ "winapi",
+]
+
+[[package]]
+name = "http"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
+
+[[package]]
+name = "hyper"
+version = "0.14.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abfba89e19b959ca163c7752ba59d737c1ceea53a5d31a149c805446fc958064"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-rustls"
+version = "0.23.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d87c48c02e0dc5e3b849a2041db3029fd066650f8f717c07bf8ed78ccb895cac"
+dependencies = [
+ "http",
+ "hyper",
+ "log",
+ "rustls",
+ "rustls-native-certs",
+ "tokio",
+ "tokio-rustls",
+]
+
+[[package]]
+name = "hyper-timeout"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1"
+dependencies = [
+ "hyper",
+ "pin-project-lite",
+ "tokio",
+ "tokio-io-timeout",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.53"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "winapi",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca"
+dependencies = [
+ "cxx",
+ "cxx-build",
+]
+
+[[package]]
+name = "idna"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "image"
+version = "0.24.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69b7ea949b537b0fd0af141fff8c77690f2ce96f4f41f042ccb6c69c6c965945"
+dependencies = [
+ "bytemuck",
+ "byteorder",
+ "color_quant",
+ "num-rational",
+ "num-traits",
+ "png",
+ "tiff",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e"
+dependencies = [
+ "autocfg",
+ "hashbrown",
+]
+
+[[package]]
+name = "insta"
+version = "1.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "581d4e3314cae4536e5d22ffd23189d4a374696c5ef733eadafae0ed273fd303"
+dependencies = [
+ "console",
+ "lazy_static",
+ "linked-hash-map",
+ "serde",
+ "similar",
+ "yaml-rust",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7d6c6f8c91b4b9ed43484ad1a938e393caf35960fce7f82a040497207bd8e9e"
+dependencies = [
+ "libc",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "itertools"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc"
+
+[[package]]
+name = "jpeg-decoder"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e"
+
+[[package]]
+name = "js-sys"
+version = "0.3.60"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "lexical-core"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6607c62aa161d23d17a9072cc5da0be67cdfc89d3afb1e8d9c842bebc2525ffe"
+dependencies = [
+ "arrayvec 0.5.2",
+ "bitflags",
+ "cfg-if",
+ "ryu",
+ "static_assertions",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.137"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc7fcc620a3bff7cdd7a365be3376c97191aeaccc2a603e600951e452615bf89"
+
+[[package]]
+name = "libsignal-protocol"
+version = "0.1.0"
+source = "git+https://github.com/signalapp/libsignal?tag=v0.20.0#ab29fed4db04a5335f8a0d1ea03b7a83b93776d2"
+dependencies = [
+ "aes",
+ "aes-gcm-siv",
+ "arrayref",
+ "async-trait",
+ "block-modes",
+ "curve25519-dalek",
+ "displaydoc",
+ "hex",
+ "hkdf 0.11.0",
+ "hmac 0.11.0",
+ "itertools 0.10.5",
+ "log",
+ "num_enum",
+ "prost 0.9.0",
+ "prost-build 0.9.0",
+ "rand 0.7.3",
+ "sha2 0.9.9",
+ "subtle",
+ "thiserror",
+ "uuid",
+ "x25519-dalek",
+]
+
+[[package]]
+name = "libsignal-service"
+version = "0.1.0"
+source = "git+https://github.com/whisperfish/libsignal-service-rs?rev=791c521#791c5217b399589d769954826659e7d735a7c54e"
+dependencies = [
+ "aes",
+ "aes-gcm",
+ "async-trait",
+ "base64 0.13.1",
+ "bincode",
+ "block-modes",
+ "bytes",
+ "chrono",
+ "futures",
+ "hex",
+ "hkdf 0.12.3",
+ "hmac 0.12.1",
+ "http",
+ "libsignal-protocol",
+ "log",
+ "phonenumber",
+ "prost 0.10.4",
+ "prost-build 0.10.4",
+ "rand 0.7.3",
+ "serde",
+ "serde_json",
+ "sha2 0.10.6",
+ "thiserror",
+ "url",
+ "uuid",
+ "zkgroup",
+]
+
+[[package]]
+name = "libsignal-service-hyper"
+version = "0.1.0"
+source = "git+https://github.com/whisperfish/libsignal-service-rs?rev=791c521#791c5217b399589d769954826659e7d735a7c54e"
+dependencies = [
+ "async-trait",
+ "async-tungstenite",
+ "base64 0.13.1",
+ "bytes",
+ "futures",
+ "headers",
+ "hyper",
+ "hyper-rustls",
+ "hyper-timeout",
+ "libsignal-service",
+ "log",
+ "mpart-async",
+ "rustls-pemfile 0.3.0",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "tokio",
+ "tokio-rustls",
+ "url",
+]
+
+[[package]]
+name = "link-cplusplus"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9272ab7b96c9046fbc5bc56c06c117cb639fe2d509df0c421cad82d2915cf369"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "linked-hash-map"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4"
+
+[[package]]
+name = "lock_api"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "log-panics"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68f9dd8546191c1850ecf67d22f5ff00a935b890d0e84713159a55495cc2ac5f"
+dependencies = [
+ "log",
+]
+
+[[package]]
+name = "lru-cache"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c"
+dependencies = [
+ "linked-hash-map",
+]
+
+[[package]]
+name = "mac-notification-sys"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e72d50edb17756489e79d52eb146927bec8eba9dd48faadf9ef08bca3791ad5"
+dependencies = [
+ "cc",
+ "dirs-next",
+ "objc-foundation",
+ "objc_id",
+ "time",
+]
+
+[[package]]
+name = "malloc_buf"
+version = "0.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "match_cfg"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4"
+
+[[package]]
+name = "matrix-sdk-store-encryption"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ddee75c3cca58f3a323283dc4e849d19d52988903f907ed0fb53dcad5d6fd25"
+dependencies = [
+ "blake3",
+ "chacha20poly1305",
+ "displaydoc",
+ "hmac 0.12.1",
+ "pbkdf2",
+ "rand 0.8.5",
+ "serde",
+ "serde_json",
+ "sha2 0.10.6",
+ "thiserror",
+ "zeroize",
+]
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memoffset"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "mime"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
+
+[[package]]
+name = "mime_guess"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef"
+dependencies = [
+ "mime",
+ "unicase",
+]
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96590ba8f175222643a85693f33d26e9c8a015f599c216509b1a6894af675d34"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de"
+dependencies = [
+ "libc",
+ "log",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "mpart-async"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ea6ab2359d45d2401bd7ba5ce5a67582f2abb872ea9ec17f78efb6ac3591864"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-util",
+ "http",
+ "httparse",
+ "log",
+ "memchr",
+ "mime_guess",
+ "percent-encoding",
+ "pin-project-lite",
+ "rand 0.8.5",
+ "thiserror",
+ "tokio",
+ "tokio-util",
+]
+
+[[package]]
+name = "multimap"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a"
+
+[[package]]
+name = "nix"
+version = "0.23.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f866317acbd3a240710c63f065ffb1e4fd466259045ccb504130b7f668f35c6"
+dependencies = [
+ "bitflags",
+ "cc",
+ "cfg-if",
+ "libc",
+ "memoffset",
+]
+
+[[package]]
+name = "nix"
+version = "0.24.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069"
+dependencies = [
+ "bitflags",
+ "cfg-if",
+ "libc",
+ "memoffset",
+]
+
+[[package]]
+name = "nom"
+version = "5.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffb4262d26ed83a1c0a33a38fe2bb15797329c85770da05e6b828ddb782627af"
+dependencies = [
+ "lexical-core",
+ "memchr",
+ "version_check",
+]
+
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "notify-rust"
+version = "4.5.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "368e89ea58df747ce88be669ae44e79783c1d30bfd540ad0fc520b3f41f0b3b0"
+dependencies = [
+ "mac-notification-sys",
+ "serde",
+ "tauri-winrt-notification",
+ "zbus",
+ "zvariant",
+ "zvariant_derive",
+]
+
+[[package]]
+name = "nu-ansi-term"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
+dependencies = [
+ "overload",
+ "winapi",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-rational"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6058e64324c71e02bc2b150e4f3bc8286db6c83092132ffa3f6b1eab0f9def5"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "num_enum"
+version = "0.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf5395665662ef45796a4ff5486c5d41d29e0c09640af4c5f17fd94ee2c119c9"
+dependencies = [
+ "num_enum_derive",
+]
+
+[[package]]
+name = "num_enum_derive"
+version = "0.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b0498641e53dd6ac1a4f22547548caa6864cc4933784319cd1775271c5a46ce"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "num_threads"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "objc"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
+dependencies = [
+ "malloc_buf",
+]
+
+[[package]]
+name = "objc-foundation"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9"
+dependencies = [
+ "block",
+ "objc",
+ "objc_id",
+]
+
+[[package]]
+name = "objc_id"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b"
+dependencies = [
+ "objc",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860"
+
+[[package]]
+name = "oncemutex"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d11de466f4a3006fe8a5e7ec84e93b79c70cb992ae0aa0eb631ad2df8abfe2"
+
+[[package]]
+name = "oorandom"
+version = "11.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575"
+
+[[package]]
+name = "opaque-debug"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
+
+[[package]]
+name = "opener"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ea3ebcd72a54701f56345f16785a6d3ac2df7e986d273eb4395c0b01db17952"
+dependencies = [
+ "bstr",
+ "winapi",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "ordered-stream"
+version = "0.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44630c059eacfd6e08bdaa51b1db2ce33119caa4ddc1235e923109aa5f25ccb1"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "os_pipe"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c6a252f1f8c11e84b3ab59d7a488e48e4478a93937e027076638c49536204639"
+dependencies = [
+ "libc",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "os_str_bytes"
+version = "6.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3baf96e39c5359d2eb0dd6ccb42c62b91d9678aa68160d261b9e0ccbf9e9dea9"
+
+[[package]]
+name = "overload"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
+
+[[package]]
+name = "parking"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72"
+
+[[package]]
+name = "parking_lot"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99"
+dependencies = [
+ "instant",
+ "lock_api",
+ "parking_lot_core 0.8.5",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core 0.9.4",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216"
+dependencies = [
+ "cfg-if",
+ "instant",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "winapi",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dc9e0dc2adc1c69d09143aff38d3d30c5c3f0df0dad82e6d25547af174ebec0"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "password-hash"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700"
+dependencies = [
+ "base64ct",
+ "rand_core 0.6.4",
+ "subtle",
+]
+
+[[package]]
+name = "pbkdf2"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917"
+dependencies = [
+ "digest 0.10.5",
+ "hmac 0.12.1",
+ "password-hash",
+ "sha2 0.10.6",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
+
+[[package]]
+name = "petgraph"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6d5014253a1331579ce62aa67443b4a658c5e7dd03d4bc6d302b94474888143"
+dependencies = [
+ "fixedbitset",
+ "indexmap",
+]
+
+[[package]]
+name = "phf"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12"
+dependencies = [
+ "phf_macros",
+ "phf_shared 0.8.0",
+ "proc-macro-hack",
+]
+
+[[package]]
+name = "phf"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "928c6535de93548188ef63bb7c4036bd415cd8f36ad25af44b9789b2ee72a48c"
+dependencies = [
+ "phf_shared 0.11.1",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526"
+dependencies = [
+ "phf_shared 0.8.0",
+ "rand 0.7.3",
+]
+
+[[package]]
+name = "phf_macros"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c"
+dependencies = [
+ "phf_generator",
+ "phf_shared 0.8.0",
+ "proc-macro-hack",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1fb5f6f826b772a8d4c0394209441e7d37cbbb967ae9c7e0e8134365c9ee676"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "phonenumber"
+version = "0.3.1+8.12.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1261a014e5f5e048bf2c6f1a72fa5e4c223009dc5f296a385b95fe19b464608f"
+dependencies = [
+ "bincode",
+ "either",
+ "fnv",
+ "itertools 0.9.0",
+ "lazy_static",
+ "nom 5.1.2",
+ "quick-xml 0.18.1",
+ "regex",
+ "regex-cache",
+ "serde",
+ "serde_derive",
+ "thiserror",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160"
+
+[[package]]
+name = "plotters"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2538b639e642295546c50fcd545198c9d64ee2a38620a628724a3b266d5fbf97"
+dependencies = [
+ "num-traits",
+ "plotters-backend",
+ "plotters-svg",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "plotters-backend"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "193228616381fecdc1224c62e96946dfbc73ff4384fba576e052ff8c1bea8142"
+
+[[package]]
+name = "plotters-svg"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9a81d2759aae1dae668f783c308bc5c8ebd191ff4184aaa1b37f65a6ae5a56f"
+dependencies = [
+ "plotters-backend",
+]
+
+[[package]]
+name = "png"
+version = "0.17.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d708eaf860a19b19ce538740d2b4bdeeb8337fa53f7738455e706623ad5c638"
+dependencies = [
+ "bitflags",
+ "crc32fast",
+ "flate2",
+ "miniz_oxide 0.6.2",
+]
+
+[[package]]
+name = "poksho"
+version = "0.7.0"
+source = "git+https://github.com/signalapp/libsignal?tag=v0.20.0#ab29fed4db04a5335f8a0d1ea03b7a83b93776d2"
+dependencies = [
+ "curve25519-dalek",
+ "hmac 0.11.0",
+ "sha2 0.9.9",
+]
+
+[[package]]
+name = "polling"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab4609a838d88b73d8238967b60dd115cc08d38e2bbaf51ee1e4b695f89122e2"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "libc",
+ "log",
+ "wepoll-ffi",
+ "winapi",
+]
+
+[[package]]
+name = "poly1305"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "048aeb476be11a4b6ca432ca569e375810de9294ae78f4774e78ea98a9246ede"
+dependencies = [
+ "cpufeatures",
+ "opaque-debug",
+ "universal-hash",
+]
+
+[[package]]
+name = "polyval"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "opaque-debug",
+ "universal-hash",
+]
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872"
+
+[[package]]
+name = "presage"
+version = "0.5.0-dev"
+source = "git+https://github.com/whisperfish/presage?rev=743d793#743d7931b3e6c158a72e96ecc7e83bc5a0ad48b5"
+dependencies = [
+ "async-trait",
+ "base64 0.12.3",
+ "bytes",
+ "fs_extra",
+ "futures",
+ "hex",
+ "libsignal-service",
+ "libsignal-service-hyper",
+ "log",
+ "matrix-sdk-store-encryption",
+ "parking_lot 0.11.2",
+ "prost 0.10.4",
+ "prost-build 0.10.4",
+ "rand 0.7.3",
+ "serde",
+ "serde_json",
+ "sha2 0.10.6",
+ "sled",
+ "thiserror",
+ "tokio",
+ "url",
+]
+
+[[package]]
+name = "proc-macro-crate"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eda0fc3b0fb7c975631757e14d9049da17374063edb6ebbcbc54d880d4fe94e9"
+dependencies = [
+ "once_cell",
+ "thiserror",
+ "toml",
+]
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-hack"
+version = "0.5.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.47"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "prost"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "444879275cb4fd84958b1a1d5420d15e6fcf7c235fe47f053c9c2a80aceb6001"
+dependencies = [
+ "bytes",
+ "prost-derive 0.9.0",
+]
+
+[[package]]
+name = "prost"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "71adf41db68aa0daaefc69bb30bcd68ded9b9abaad5d1fbb6304c4fb390e083e"
+dependencies = [
+ "bytes",
+ "prost-derive 0.10.1",
+]
+
+[[package]]
+name = "prost-build"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62941722fb675d463659e49c4f3fe1fe792ff24fe5bbaa9c08cd3b98a1c354f5"
+dependencies = [
+ "bytes",
+ "heck 0.3.3",
+ "itertools 0.10.5",
+ "lazy_static",
+ "log",
+ "multimap",
+ "petgraph",
+ "prost 0.9.0",
+ "prost-types 0.9.0",
+ "regex",
+ "tempfile",
+ "which",
+]
+
+[[package]]
+name = "prost-build"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ae5a4388762d5815a9fc0dea33c56b021cdc8dde0c55e0c9ca57197254b0cab"
+dependencies = [
+ "bytes",
+ "cfg-if",
+ "cmake",
+ "heck 0.4.0",
+ "itertools 0.10.5",
+ "lazy_static",
+ "log",
+ "multimap",
+ "petgraph",
+ "prost 0.10.4",
+ "prost-types 0.10.1",
+ "regex",
+ "tempfile",
+ "which",
+]
+
+[[package]]
+name = "prost-derive"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9cc1a3263e07e0bf68e96268f37665207b49560d98739662cdfaae215c720fe"
+dependencies = [
+ "anyhow",
+ "itertools 0.10.5",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "prost-derive"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b670f45da57fb8542ebdbb6105a925fe571b67f9e7ed9f47a06a84e72b4e7cc"
+dependencies = [
+ "anyhow",
+ "itertools 0.10.5",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "prost-types"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "534b7a0e836e3c482d2693070f982e39e7611da9695d4d1f5a4b186b51faef0a"
+dependencies = [
+ "bytes",
+ "prost 0.9.0",
+]
+
+[[package]]
+name = "prost-types"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d0a014229361011dc8e69c8a1ec6c2e8d0f2af7c91e3ea3f5b2170298461e68"
+dependencies = [
+ "bytes",
+ "prost 0.10.4",
+]
+
+[[package]]
+name = "pulldown-cmark"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d9cc634bc78768157b5cbfe988ffcd1dcba95cd2b2f03a88316c08c6d00ed63"
+dependencies = [
+ "bitflags",
+ "getopts",
+ "memchr",
+ "unicase",
+]
+
+[[package]]
+name = "qr2term"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c2a1e77b5cd714b04247ad912b7c8fe9a1fe1d58425048249def91bcf690e4c"
+dependencies = [
+ "crossterm",
+ "qrcode",
+]
+
+[[package]]
+name = "qrcode"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16d2f1455f3630c6e5107b4f2b94e74d76dea80736de0981fd27644216cff57f"
+dependencies = [
+ "checked_int_cast",
+]
+
+[[package]]
+name = "quick-xml"
+version = "0.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3cc440ee4802a86e357165021e3e255a9143724da31db1e2ea540214c96a0f82"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "quick-xml"
+version = "0.23.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "11bafc859c6815fbaffbbbf4229ecb767ac913fecb27f9ad4343662e9ef099ea"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "quickcheck"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "588f6378e4dd99458b60ec275b4477add41ce4fa9f64dcba6f15adccb19b50d6"
+dependencies = [
+ "env_logger",
+ "log",
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "quickcheck_macros"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b22a693222d716a9587786f37ac3f6b4faedb5b80c23914e7303ff5a1d8016e9"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
+dependencies = [
+ "getrandom 0.1.16",
+ "libc",
+ "rand_chacha 0.2.2",
+ "rand_core 0.5.1",
+ "rand_hc",
+ "rand_pcg",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha 0.3.1",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
+dependencies = [
+ "getrandom 0.1.16",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom 0.2.8",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
+dependencies = [
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rand_pcg"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429"
+dependencies = [
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rayon"
+version = "1.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd99e5772ead8baa5215278c9b15bf92087709e9c1b2d1f97cdb5a183c933a7d"
+dependencies = [
+ "autocfg",
+ "crossbeam-deque",
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "258bcdb5ac6dad48491bb2992db6b7cf74878b0384908af124823d118c99683f"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-utils",
+ "num_cpus",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
+dependencies = [
+ "getrandom 0.2.8",
+ "redox_syscall",
+ "thiserror",
+]
+
+[[package]]
+name = "regex"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+dependencies = [
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-cache"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f7b62d69743b8b94f353b6b7c3deb4c5582828328bcb8d5fedf214373808793"
+dependencies = [
+ "lru-cache",
+ "oncemutex",
+ "regex",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244"
+
+[[package]]
+name = "ring"
+version = "0.16.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
+dependencies = [
+ "cc",
+ "libc",
+ "once_cell",
+ "spin",
+ "untrusted",
+ "web-sys",
+ "winapi",
+]
+
+[[package]]
+name = "rustix"
+version = "0.36.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4fdebc4b395b7fbb9ab11e462e20ed9051e7b16e42d24042c776eca0ac81b03"
+dependencies = [
+ "bitflags",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "rustls"
+version = "0.20.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "539a2bfe908f471bfa933876bd1eb6a19cf2176d375f82ef7f99530a40e48c2c"
+dependencies = [
+ "log",
+ "ring",
+ "sct",
+ "webpki",
+]
+
+[[package]]
+name = "rustls-native-certs"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50"
+dependencies = [
+ "openssl-probe",
+ "rustls-pemfile 1.0.1",
+ "schannel",
+ "security-framework",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ee86d63972a7c661d1536fefe8c3c8407321c3df668891286de28abcd087360"
+dependencies = [
+ "base64 0.13.1",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0864aeff53f8c05aa08d86e5ef839d3dfcf07aeba2db32f12db0ef716e87bd55"
+dependencies = [
+ "base64 0.13.1",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09"
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "schannel"
+version = "0.1.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2"
+dependencies = [
+ "lazy_static",
+ "windows-sys 0.36.1",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "scratch"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8132065adcfd6e02db789d9285a0deb2f3fcb04002865ab67d5fb103533898"
+
+[[package]]
+name = "sct"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "security-framework"
+version = "2.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bc1bb97804af6631813c55739f771071e0f2ed33ee20b68c86ec505d906356c"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "semver"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e25dfac463d778e353db5be2449d1cce89bd6fd23c9f1ea21310ce6e5a1b29c4"
+
+[[package]]
+name = "serde"
+version = "1.0.147"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d193d69bae983fc11a79df82342761dfbf28a99fc8d203dca4c3c1b590948965"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.147"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f1d362ca8fc9c3e3a7484440752472d68a6caa98f1ab81d99b5dfe517cec852"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ce777b7b150d76b9cf60d28b55f5847135a003f7d7350c6be7a773508ce7d45"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_repr"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fe39d9fbb0ebf5eb2c7cb7e2a47e4f462fad1379f1166b8ae49ad9eae89a7ca"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "sha-1"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "028f48d513f9678cda28f6e4064755b3fbb2af6acd672f2c209b62323f7aea0f"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest 0.10.5",
+]
+
+[[package]]
+name = "sha1"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1da05c97445caa12d05e848c4a4fcbbea29e748ac28f7e80e9b010392063770"
+dependencies = [
+ "sha1_smol",
+]
+
+[[package]]
+name = "sha1"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest 0.10.5",
+]
+
+[[package]]
+name = "sha1_smol"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012"
+
+[[package]]
+name = "sha2"
+version = "0.9.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800"
+dependencies = [
+ "block-buffer 0.9.0",
+ "cfg-if",
+ "cpufeatures",
+ "digest 0.9.0",
+ "opaque-debug",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest 0.10.5",
+]
+
+[[package]]
+name = "sharded-slab"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "signal-hook"
+version = "0.3.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a253b5e89e2698464fc26b545c9edceb338e18a89effeeecfea192c3025be29d"
+dependencies = [
+ "libc",
+ "signal-hook-registry",
+]
+
+[[package]]
+name = "signal-hook-mio"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af"
+dependencies = [
+ "libc",
+ "mio",
+ "signal-hook",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "similar"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62ac7f900db32bf3fd12e0117dd3dc4da74bc52ebaac97f39668446d89694803"
+
+[[package]]
+name = "siphasher"
+version = "0.3.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
+
+[[package]]
+name = "slab"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "sled"
+version = "0.34.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f96b4737c2ce5987354855aed3797279def4ebf734436c6aa4552cf8e169935"
+dependencies = [
+ "crc32fast",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+ "fs2",
+ "fxhash",
+ "libc",
+ "log",
+ "parking_lot 0.11.2",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
+
+[[package]]
+name = "smawk"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f67ad224767faa3c7d8b6d91985b78e70a1324408abcb1cfcc2be4c06bc06043"
+
+[[package]]
+name = "socket2"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "str-buf"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e08d8363704e6c71fc928674353e6b7c23dcea9d82d7012c8faf2a3a025f8d0"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "strum"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7ac893c7d471c8a21f31cfe213ec4f6d9afeed25537c772e08ef3f005f8729e"
+dependencies = [
+ "strum_macros",
+]
+
+[[package]]
+name = "strum_macros"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "339f799d8b549e3744c7ac7feb216383e4005d94bdb22561b3ab8f3b808ae9fb"
+dependencies = [
+ "heck 0.3.3",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "subtle"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
+
+[[package]]
+name = "syn"
+version = "1.0.103"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a864042229133ada95abf3b54fdc62ef5ccabe9515b64717bcb9a1919e59445d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "synstructure"
+version = "0.12.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "unicode-xid",
+]
+
+[[package]]
+name = "tar"
+version = "0.4.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6"
+dependencies = [
+ "filetime",
+ "libc",
+ "xattr",
+]
+
+[[package]]
+name = "tauri-winrt-notification"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c58de036c4d2e20717024de2a3c4bf56c301f07b21bc8ef9b57189fce06f1f3b"
+dependencies = [
+ "quick-xml 0.23.1",
+ "strum",
+ "windows",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af18f7ae1acd354b992402e9ec5864359d693cd8a79dcbef59f76891701c1e95"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "redox_syscall",
+ "rustix",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "terminal_size"
+version = "0.1.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
+dependencies = [
+ "smawk",
+ "unicode-linebreak",
+ "unicode-width",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "tiff"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7449334f9ff2baf290d55d73983a7d6fa15e01198faef72af07e2a8db851e471"
+dependencies = [
+ "flate2",
+ "jpeg-decoder",
+ "weezl",
+]
+
+[[package]]
+name = "time"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fab5c8b9980850e06d92ddbe3ab839c062c801f3927c0fb8abd6fc8e918fbca"
+dependencies = [
+ "itoa",
+ "libc",
+ "num_threads",
+ "serde",
+ "time-core",
+ "time-macros",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd"
+
+[[package]]
+name = "time-macros"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "65bb801831d812c562ae7d2bfb531f26e66e4e1f6b17307ba4149c5064710e5b"
+dependencies = [
+ "time-core",
+]
+
+[[package]]
+name = "tinytemplate"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc"
+dependencies = [
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
+
+[[package]]
+name = "tokio"
+version = "1.24.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a12a59981d9e3c38d216785b0c37399f6e415e8d0712047620f189371b0bb"
+dependencies = [
+ "autocfg",
+ "libc",
+ "mio",
+ "num_cpus",
+ "pin-project-lite",
+ "socket2",
+ "tokio-macros",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "tokio-io-timeout"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf"
+dependencies = [
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9724f9a975fb987ef7a3cd9be0350edcbe130698af5b8f7a631e23d42d052484"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.23.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59"
+dependencies = [
+ "rustls",
+ "tokio",
+ "webpki",
+]
+
+[[package]]
+name = "tokio-stream"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d660770404473ccd7bc9f8b28494a811bc18542b915c0855c51e8f419d5223ce"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.6.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "log",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tracing"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+dependencies = [
+ "cfg-if",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-appender"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09d48f71a791638519505cefafe162606f706c25592e4bde4d97600c0195312e"
+dependencies = [
+ "crossbeam-channel",
+ "time",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a"
+dependencies = [
+ "once_cell",
+ "valuable",
+]
+
+[[package]]
+name = "tracing-log"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922"
+dependencies = [
+ "lazy_static",
+ "log",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-subscriber"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6176eae26dd70d0c919749377897b54a9276bd7061339665dd68777926b5a70"
+dependencies = [
+ "nu-ansi-term",
+ "sharded-slab",
+ "smallvec",
+ "thread_local",
+ "tracing-core",
+ "tracing-log",
+]
+
+[[package]]
+name = "tree_magic_mini"
+version = "3.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91adfd0607cacf6e4babdb870e9bec4037c1c4b151cfd279ccefc5e0c7feaa6d"
+dependencies = [
+ "bytecount",
+ "fnv",
+ "lazy_static",
+ "nom 7.1.3",
+ "once_cell",
+ "petgraph",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642"
+
+[[package]]
+name = "tui"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccdd26cbd674007e649a272da4475fb666d3aa0ad0531da7136db6fab0e5bad1"
+dependencies = [
+ "bitflags",
+ "cassowary",
+ "crossterm",
+ "unicode-segmentation",
+ "unicode-width",
+]
+
+[[package]]
+name = "tungstenite"
+version = "0.17.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e27992fd6a8c29ee7eef28fc78349aa244134e10ad447ce3b9f0ac0ed0fa4ce0"
+dependencies = [
+ "base64 0.13.1",
+ "byteorder",
+ "bytes",
+ "http",
+ "httparse",
+ "log",
+ "rand 0.8.5",
+ "rustls",
+ "sha-1",
+ "thiserror",
+ "url",
+ "utf-8",
+ "webpki",
+]
+
+[[package]]
+name = "typenum"
+version = "1.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987"
+
+[[package]]
+name = "uds_windows"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce65604324d3cce9b966701489fbd0cf318cb1f7bd9dd07ac9a4ee6fb791930d"
+dependencies = [
+ "tempfile",
+ "winapi",
+]
+
+[[package]]
+name = "unicase"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3"
+
+[[package]]
+name = "unicode-linebreak"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c5faade31a542b8b35855fff6e8def199853b2da8da256da52f52f1316ee3137"
+dependencies = [
+ "hashbrown",
+ "regex",
+]
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fdbf052a0783de01e944a6ce7a8cb939e295b1e7be835a1112c3b9a7f047a5a"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
+
+[[package]]
+name = "universal-hash"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05"
+dependencies = [
+ "generic-array",
+ "subtle",
+]
+
+[[package]]
+name = "untrusted"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+
+[[package]]
+name = "url"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+ "serde",
+]
+
+[[package]]
+name = "utf-8"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
+
+[[package]]
+name = "uuid"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "feb41e78f93363bb2df8b0e86a2ca30eed7806ea16ea0c790d757cf93f79be83"
+dependencies = [
+ "getrandom 0.2.8",
+ "serde",
+]
+
+[[package]]
+name = "valuable"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "waker-fn"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca"
+
+[[package]]
+name = "walkdir"
+version = "2.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
+dependencies = [
+ "same-file",
+ "winapi",
+ "winapi-util",
+]
+
+[[package]]
+name = "want"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
+dependencies = [
+ "log",
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.9.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f"
+
+[[package]]
+name = "wayland-client"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f3b068c05a039c9f755f881dc50f01732214f5685e379829759088967c46715"
+dependencies = [
+ "bitflags",
+ "downcast-rs",
+ "libc",
+ "nix 0.24.3",
+ "wayland-commons",
+ "wayland-scanner",
+ "wayland-sys",
+]
+
+[[package]]
+name = "wayland-commons"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8691f134d584a33a6606d9d717b95c4fa20065605f798a3f350d78dced02a902"
+dependencies = [
+ "nix 0.24.3",
+ "once_cell",
+ "smallvec",
+ "wayland-sys",
+]
+
+[[package]]
+name = "wayland-protocols"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b950621f9354b322ee817a23474e479b34be96c2e909c14f7bc0100e9a970bc6"
+dependencies = [
+ "bitflags",
+ "wayland-client",
+ "wayland-commons",
+ "wayland-scanner",
+]
+
+[[package]]
+name = "wayland-scanner"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f4303d8fa22ab852f789e75a967f0a2cdc430a607751c0499bada3e451cbd53"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "xml-rs",
+]
+
+[[package]]
+name = "wayland-sys"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be12ce1a3c39ec7dba25594b97b42cb3195d54953ddb9d3d95a7c3902bc6e9d4"
+dependencies = [
+ "pkg-config",
+]
+
+[[package]]
+name = "web-sys"
+version = "0.3.60"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webpki"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "weezl"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb"
+
+[[package]]
+name = "wepoll-ffi"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "which"
+version = "4.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c831fbbee9e129a8cf93e7747a82da9d95ba8e16621cae60ec2cdc849bacb7b"
+dependencies = [
+ "either",
+ "libc",
+ "once_cell",
+]
+
+[[package]]
+name = "whoami"
+version = "1.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6631b6a2fd59b1841b622e8f1a7ad241ef0a46f2d580464ce8140ac94cbd571"
+dependencies = [
+ "bumpalo",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-wsapoll"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44c17110f57155602a80dca10be03852116403c9ff3cd25b079d666f2aa3df6e"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1c4bd0a50ac6020f65184721f758dba47bb9fbc2133df715ec74a237b26794a"
+dependencies = [
+ "windows_aarch64_msvc 0.39.0",
+ "windows_i686_gnu 0.39.0",
+ "windows_i686_msvc 0.39.0",
+ "windows_x86_64_gnu 0.39.0",
+ "windows_x86_64_msvc 0.39.0",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2"
+dependencies = [
+ "windows_aarch64_msvc 0.36.1",
+ "windows_i686_gnu 0.36.1",
+ "windows_i686_msvc 0.36.1",
+ "windows_x86_64_gnu 0.36.1",
+ "windows_x86_64_msvc 0.36.1",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc 0.42.0",
+ "windows_i686_gnu 0.42.0",
+ "windows_i686_msvc 0.42.0",
+ "windows_x86_64_gnu 0.42.0",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc 0.42.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec7711666096bd4096ffa835238905bb33fb87267910e154b18b44eaabb340f2"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "763fc57100a5f7042e3057e7e8d9bdd7860d330070251a73d003563a3bb49e1b"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7bc7cbfe58828921e10a9f446fcaaf649204dcfe6c1ddd712c5eebae6bda1106"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6868c165637d653ae1e8dc4d82c25d4f97dd6605eaa8d784b5c6e0ab2a252b65"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e4d40883ae9cae962787ca76ba76390ffa29214667a111db9e0a1ad8377e809"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5"
+
+[[package]]
+name = "wl-clipboard-rs"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "981a303dfbb75d659f6612d05a14b2e363c103d24f676a2d44a00d18507a1ad9"
+dependencies = [
+ "derive-new",
+ "libc",
+ "log",
+ "nix 0.24.3",
+ "os_pipe",
+ "tempfile",
+ "thiserror",
+ "tree_magic_mini",
+ "wayland-client",
+ "wayland-protocols",
+]
+
+[[package]]
+name = "x11rb"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "592b4883219f345e712b3209c62654ebda0bb50887f330cbd018d0f654bfd507"
+dependencies = [
+ "gethostname",
+ "nix 0.24.3",
+ "winapi",
+ "winapi-wsapoll",
+ "x11rb-protocol",
+]
+
+[[package]]
+name = "x11rb-protocol"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56b245751c0ac9db0e006dc812031482784e434630205a93c73cfefcaabeac67"
+dependencies = [
+ "nix 0.24.3",
+]
+
+[[package]]
+name = "x25519-dalek"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2392b6b94a576b4e2bf3c5b2757d63f10ada8020a2e4d08ac849ebcf6ea8e077"
+dependencies = [
+ "curve25519-dalek",
+ "rand_core 0.5.1",
+ "zeroize",
+]
+
+[[package]]
+name = "xattr"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "xflags"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4554b580522d0ca238369c16b8f6ce34524d61dafe7244993754bbd05f2c2ea"
+dependencies = [
+ "xflags-macros",
+]
+
+[[package]]
+name = "xflags-macros"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f58e7b3ca8977093aae6b87b6a7730216fc4c53a6530bab5c43a783cd810c1a8"
+
+[[package]]
+name = "xml-rs"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3"
+
+[[package]]
+name = "xshell"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d47097dc5c85234b1e41851b3422dd6d19b3befdd35b4ae5ce386724aeca981"
+dependencies = [
+ "xshell-macros",
+]
+
+[[package]]
+name = "xshell-macros"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88301b56c26dd9bf5c43d858538f82d6f3f7764767defbc5d34e59459901c41a"
+
+[[package]]
+name = "xtask"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "flate2",
+ "pulldown-cmark",
+ "semver",
+ "tar",
+ "xflags",
+ "xshell",
+]
+
+[[package]]
+name = "yaml-rust"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
+dependencies = [
+ "linked-hash-map",
+]
+
+[[package]]
+name = "zbus"
+version = "2.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d8f1a037b2c4a67d9654dc7bdfa8ff2e80555bbefdd3c1833c1d1b27c963a6b"
+dependencies = [
+ "async-broadcast",
+ "async-channel",
+ "async-executor",
+ "async-io",
+ "async-lock",
+ "async-recursion",
+ "async-task",
+ "async-trait",
+ "byteorder",
+ "derivative",
+ "dirs",
+ "enumflags2",
+ "event-listener",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "hex",
+ "lazy_static",
+ "nix 0.23.1",
+ "once_cell",
+ "ordered-stream",
+ "rand 0.8.5",
+ "serde",
+ "serde_repr",
+ "sha1 0.6.1",
+ "static_assertions",
+ "tracing",
+ "uds_windows",
+ "winapi",
+ "zbus_macros",
+ "zbus_names",
+ "zvariant",
+]
+
+[[package]]
+name = "zbus_macros"
+version = "2.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f8fb5186d1c87ae88cf234974c240671238b4a679158ad3b94ec465237349a6"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "syn",
+]
+
+[[package]]
+name = "zbus_names"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41a408fd8a352695690f53906dc7fd036be924ec51ea5e05666ff42685ed0af5"
+dependencies = [
+ "serde",
+ "static_assertions",
+ "zvariant",
+]
+
+[[package]]
+name = "zeroize"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4756f7db3f7b5574938c3eb1c117038b8e07f95ee6718c0efad4ac21508f1efd"
+dependencies = [
+ "zeroize_derive",
+]
+
+[[package]]
+name = "zeroize_derive"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f8f187641dad4f680d25c4bfc4225b418165984179f26ca76ec4fb6441d3a17"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "synstructure",
+]
+
+[[package]]
+name = "zkgroup"
+version = "0.9.0"
+source = "git+https://github.com/signalapp/libsignal?tag=v0.20.0#ab29fed4db04a5335f8a0d1ea03b7a83b93776d2"
+dependencies = [
+ "aead",
+ "aes-gcm-siv",
+ "bincode",
+ "curve25519-dalek",
+ "displaydoc",
+ "hex",
+ "lazy_static",
+ "poksho",
+ "serde",
+ "sha2 0.9.9",
+]
+
+[[package]]
+name = "zvariant"
+version = "3.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bd68e4e6432ef19df47d7e90e2e72b5e7e3d778e0ae3baddf12b951265cc758"
+dependencies = [
+ "byteorder",
+ "enumflags2",
+ "libc",
+ "serde",
+ "static_assertions",
+ "zvariant_derive",
+]
+
+[[package]]
+name = "zvariant_derive"
+version = "3.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08e977eaa3af652f63d479ce50d924254ad76722a6289ec1a1eac3231ca30430"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/gurk-rs/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/gurk-rs/default.nix
new file mode 100644
index 000000000000..1ef62074be44
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/gurk-rs/default.nix
@@ -0,0 +1,48 @@
+{ stdenv
+, lib
+, protobuf
+, rustPlatform
+, fetchFromGitHub
+, Cocoa
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "gurk-rs";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "boxdot";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-LN54XUu+54yGVCbi7ZwY22KOnfS67liioI4JeR3l92I=";
+  };
+
+  postPatch = ''
+    rm .cargo/config.toml
+  '';
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "curve25519-dalek-3.2.1" = "sha256-T/NGZddFQWq32eRu6FYfgdPqU8Y4Shi1NpMaX4GeQ54=";
+      "libsignal-protocol-0.1.0" = "sha256-gapAurbs/BdsfPlVvWWF7Ai1nXZcxCW8qc5gQdbnthM=";
+      "libsignal-service-0.1.0" = "sha256-C1Lhi/NRWyPT7omlAdjK7gVTLxmZjZVuZgmZ8dn/D3Y=";
+      "presage-0.5.0-dev" = "sha256-OtRrPcH4/o6Sq/day1WU6R8QgQ2xWkespkfFPqFeKWk=";
+    };
+  };
+
+  nativeBuildInputs = [ protobuf ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Cocoa ];
+
+  NIX_LDFLAGS = lib.optionals (stdenv.isDarwin && stdenv.isx86_64) [ "-framework" "AppKit" ];
+
+  PROTOC = "${protobuf}/bin/protoc";
+
+  meta = with lib; {
+    description = "Signal Messenger client for terminal";
+    homepage = "https://github.com/boxdot/gurk-rs";
+    license = licenses.agpl3Only;
+    maintainers = with maintainers; [ devhell ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/hamsket/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/hamsket/default.nix
new file mode 100644
index 000000000000..225a5669469c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/hamsket/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, appimageTools
+, fetchurl
+, makeDesktopItem
+}:
+
+let
+  pname = "hamsket";
+  version = "0.6.5";
+
+  src = fetchurl {
+    url = "https://github.com/TheGoddessInari/hamsket/releases/download/nightly/Hamsket-${version}.AppImage";
+    sha256 = "sha256-r85ZwcalBd/nCIBxOaQk7XClxj7VZtxwky4eWWm2tZ8=";
+  };
+
+  desktopItem = (makeDesktopItem {
+    desktopName = "Hamsket";
+    name = pname;
+    exec = pname;
+    icon = pname;
+    categories = [ "Network" ];
+  });
+
+  appimageContents = appimageTools.extractType2 {
+    inherit pname version src;
+  };
+
+in
+appimageTools.wrapType2 {
+  inherit pname version src;
+
+  extraInstallCommands = ''
+    mkdir -p $out/share/applications $out/share/icons/hicolor/256x256/apps
+    ln -sf hamsket-${version} $out/bin/${pname}
+    install -Dm644 ${appimageContents}/usr/share/icons/hicolor/256x256/apps/hamsket*.png $out/share/icons/hicolor/256x256/apps/${pname}.png
+    install -Dm644 ${desktopItem}/share/applications/* $out/share/applications
+  '';
+
+  meta = {
+    description = "A free and open source messaging and emailing app that combines common web applications into one";
+    homepage = "https://github.com/TheGoddessInari/hamsket";
+    license = lib.licenses.gpl3Only;
+    maintainers = with lib.maintainers; [ nova-madeline ];
+    platforms = [ "x86_64-linux" ];
+    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/hipchat/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/hipchat/default.nix
new file mode 100644
index 000000000000..8debefa0c11c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/hipchat/default.nix
@@ -0,0 +1,89 @@
+{ lib, stdenv, fetchurl, xorg, freetype, fontconfig, openssl, glib, nss, nspr, expat
+, alsa-lib, dbus, zlib, libxml2, libxslt, makeWrapper, xkeyboard_config, systemd
+, libGL, xcbutilkeysyms, xdg-utils, libtool }:
+
+let
+  version = "4.30.5.1682";
+
+  rpath = lib.makeLibraryPath [
+    xdg-utils
+    xorg.libXext
+    xorg.libSM
+    xorg.libICE
+    xorg.libX11
+    xorg.libXrandr
+    xorg.libXdamage
+    xorg.libXrender
+    xorg.libXfixes
+    xorg.libXcomposite
+    xorg.libXcursor
+    xorg.libxcb
+    xorg.libXi
+    xorg.libXScrnSaver
+    xorg.libXtst
+    freetype
+    fontconfig
+    openssl
+    glib
+    nss
+    nspr
+    dbus
+    alsa-lib
+    zlib
+    libtool
+    libxml2
+    libxslt
+    expat
+    xcbutilkeysyms
+    systemd
+    libGL
+  ] + ":${stdenv.cc.cc.lib}/lib64";
+in stdenv.mkDerivation {
+  pname = "hipchat";
+  inherit version;
+
+  src = fetchurl {
+    url = "https://atlassian.artifactoryonline.com/artifactory/hipchat-apt-client/pool/HipChat4-${version}-Linux.deb";
+    sha256 = "03pz8wskafn848yvciq29kwdvqcgjrk6sjnm8nk9acl89xf0sn96";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildCommand = ''
+    ar x $src
+    tar xfvz data.tar.gz
+
+    mkdir -p $out/libexec/hipchat
+    d=$out/libexec/hipchat/lib
+    mv opt/HipChat4/* $out/libexec/hipchat/
+    mv usr/share $out
+
+    for file in $(find $d -type f); do
+        patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $file || true
+        patchelf --set-rpath ${rpath}:$out/libexec/hipchat/lib:\$ORIGIN $file || true
+    done
+
+    patchShebangs $d/linuxbrowserlaunch.sh
+
+    substituteInPlace $out/share/applications/hipchat4.desktop \
+      --replace /opt/HipChat4/bin/HipChat4 $out/bin/hipchat
+
+    makeWrapper $d/HipChat.bin $out/bin/hipchat \
+      --run 'export HIPCHAT_LD_LIBRARY_PATH=$LD_LIBRARY_PATH' \
+      --run 'export HIPCHAT_QT_PLUGIN_PATH=$QT_PLUGIN_PATH' \
+      --set QT_XKB_CONFIG_ROOT ${xkeyboard_config}/share/X11/xkb \
+      --set QTWEBENGINEPROCESS_PATH $d/QtWebEngineProcess
+
+    makeWrapper $d/QtWebEngineProcess.bin $d/QtWebEngineProcess \
+      --set QT_PLUGIN_PATH "$d/plugins"
+  '';
+
+  meta = with lib; {
+    description = "Desktop client for HipChat services";
+    homepage = "http://www.hipchat.com";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ puffnfresh ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/hydrogen-web/unwrapped.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/hydrogen-web/unwrapped.nix
new file mode 100644
index 000000000000..2308a4b61647
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/hydrogen-web/unwrapped.nix
@@ -0,0 +1,65 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchYarnDeps
+, yarn
+, fixup_yarn_lock
+, nodejs
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "hydrogen-web";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "vector-im";
+    repo = finalAttrs.pname;
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-u8Yex3r7EZH+JztQHJbfncYeyyl6hgb1ZNFIg//wcb0=";
+  };
+
+  offlineCache = fetchYarnDeps {
+    yarnLock = finalAttrs.src + "/yarn.lock";
+    hash = "sha256-N9lUAhfYLlEAIaWSNS3Ecq+aBTz+f7Z22Sclwj9rp6w=";
+  };
+
+  nativeBuildInputs = [ yarn fixup_yarn_lock nodejs ];
+
+  configurePhase = ''
+    runHook preConfigure
+
+    export HOME=$PWD/tmp
+    mkdir -p $HOME
+
+    fixup_yarn_lock yarn.lock
+    yarn config --offline set yarn-offline-mirror $offlineCache
+    yarn install --offline --frozen-lockfile --ignore-platform --ignore-scripts --no-progress --non-interactive
+    patchShebangs node_modules
+
+    runHook postConfigure
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+
+    yarn build --offline
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    cp -R target $out
+
+    runHook postInstall
+  '';
+
+  meta = {
+    description = "Lightweight matrix client with legacy and mobile browser support";
+    homepage = "https://github.com/vector-im/hydrogen-web";
+    maintainers = lib.teams.matrix.members;
+    license = lib.licenses.asl20;
+    platforms = lib.platforms.all;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/hydrogen-web/wrapper.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/hydrogen-web/wrapper.nix
new file mode 100644
index 000000000000..9ea22e864f43
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/hydrogen-web/wrapper.nix
@@ -0,0 +1,26 @@
+{ stdenv
+, jq
+, hydrogen-web-unwrapped
+, conf ? { }
+}:
+
+if (conf == { }) then hydrogen-web-unwrapped else
+stdenv.mkDerivation {
+  pname = "${hydrogen-web-unwrapped.pname}-wrapped";
+  inherit (hydrogen-web-unwrapped) version meta;
+
+  dontUnpack = true;
+
+  nativeBuildInputs = [ jq ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out
+    ln -s ${hydrogen-web-unwrapped}/* $out
+    rm $out/config.json
+    jq -s '.[0] * $conf' "${hydrogen-web-unwrapped}/config.json" --argjson "conf" '${builtins.toJSON conf}' > "$out/config.json"
+
+    runHook postInstall
+  '';
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/iamb/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/iamb/default.nix
new file mode 100644
index 000000000000..50d438448fa5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/iamb/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, darwin
+, stdenv
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "iamb";
+  version = "0.0.8";
+
+  src = fetchFromGitHub {
+    owner = "ulyssa";
+    repo = "iamb";
+    rev = "v${version}";
+    hash = "sha256-Mt4/UWySC6keoNvb1VDCVPoK24F0rmd0R47ZRPADkaw=";
+  };
+
+  cargoHash = "sha256-UbmeEcmUr3zx05Hk36tjsl0Y9ay7DNM1u/3lPqlXN2o=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.AppKit
+  ];
+
+  meta = with lib; {
+    description = "A Matrix client for Vim addicts";
+    homepage = "https://github.com/ulyssa/iamb";
+    changelog = "https://github.com/ulyssa/iamb/releases/tag/${src.rev}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ meain ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/jackline/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/jackline/default.nix
new file mode 100644
index 000000000000..2c86b3e86fa8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/jackline/default.nix
@@ -0,0 +1,53 @@
+{ lib, fetchFromGitHub, ocamlPackages }:
+
+with ocamlPackages;
+
+buildDunePackage rec {
+  pname = "jackline";
+  version = "unstable-2023-03-09";
+
+  minimalOCamlVersion = "4.08";
+
+  src = fetchFromGitHub {
+    owner  = "hannesm";
+    repo   = "jackline";
+    rev    = "a7acd19bd8141b842ac69b05146d9a63e729230d";
+    hash = "sha256-AhiFfZkDit9tnGenETc3A1hHqWN+csiS2bVjsGNaHf8=";
+  };
+
+  nativeBuildInpts = [
+    ppx_sexp_conv
+    ppx_deriving
+  ];
+
+  buildInputs = [
+    erm_xmpp
+    tls
+    mirage-crypto-pk
+    x509
+    domain-name
+    lwt
+    otr
+    astring
+    ptime
+    notty
+    sexplib
+    hex
+    uchar
+    uucp
+    uuseg
+    uutf
+    dns-client
+    cstruct
+    base64
+    happy-eyeballs-lwt
+    ppx_sexp_conv
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/hannesm/jackline";
+    description = "minimalistic secure XMPP client in OCaml";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ sternenseemann ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/jami/config/pjsip_args_common b/nixpkgs/pkgs/applications/networking/instant-messengers/jami/config/pjsip_args_common
new file mode 100644
index 000000000000..5c3f607e5c0e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/jami/config/pjsip_args_common
@@ -0,0 +1,19 @@
+--disable-sound
+--enable-video
+--enable-ext-sound
+--disable-speex-aec
+--disable-g711-codec
+--disable-l16-codec
+--disable-gsm-codec
+--disable-g722-codec
+--disable-g7221-codec
+--disable-speex-codec
+--disable-ilbc-codec
+--disable-opencore-amr
+--disable-silk
+--disable-sdl
+--disable-ffmpeg
+--disable-v4l2
+--disable-openh264
+--disable-resample
+--disable-libwebrtc
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/jami/config/pjsip_args_linux b/nixpkgs/pkgs/applications/networking/instant-messengers/jami/config/pjsip_args_linux
new file mode 100644
index 000000000000..d1292afe3a29
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/jami/config/pjsip_args_linux
@@ -0,0 +1 @@
+--enable-epoll
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/jami/config/pjsip_patches b/nixpkgs/pkgs/applications/networking/instant-messengers/jami/config/pjsip_patches
new file mode 100644
index 000000000000..5b9579f8f94e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/jami/config/pjsip_patches
@@ -0,0 +1 @@
+0009-add-config-site.patch
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/jami/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/jami/default.nix
new file mode 100644
index 000000000000..87f65e6d05aa
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/jami/default.nix
@@ -0,0 +1,220 @@
+{ stdenv
+, lib
+, pkg-config
+, fetchFromGitLab
+, fetchpatch
+, gitUpdater
+, ffmpeg_6
+
+  # for daemon
+, autoreconfHook
+, perl # for pod2man
+, alsa-lib
+, asio
+, dbus
+, sdbus-cpp
+, fmt
+, gmp
+, gnutls
+, http-parser
+, jack
+, jsoncpp
+, libarchive
+, libgit2
+, libnatpmp
+, libpulseaudio
+, libupnp
+, yaml-cpp
+, msgpack
+, openssl
+, restinio
+, secp256k1
+, speex
+, udev
+, webrtc-audio-processing
+, zlib
+
+  # for client
+, cmake
+, networkmanager # for libnm
+, python3
+, qttools # for translations
+, wrapQtAppsHook
+, libnotify
+, qt5compat
+, qtbase
+, qtdeclarative
+, qrencode
+, qtmultimedia
+, qtnetworkauth
+, qtpositioning
+, qtsvg
+, qtwebengine
+, qtwebchannel
+, withWebengine ? true
+
+  # for pjsip
+, fetchFromGitHub
+, pjsip
+
+  # for opendht
+, opendht
+}:
+
+let
+  readLinesToList = with builtins; file: filter (s: isString s && stringLength s > 0) (split "\n" (readFile file));
+in
+stdenv.mkDerivation rec {
+  pname = "jami";
+  version = "20230619.1";
+
+  src = fetchFromGitLab {
+    domain = "git.jami.net";
+    owner = "savoirfairelinux";
+    repo = "jami-client-qt";
+    rev = "stable/${version}";
+    hash = "sha256-gOl4GtGmEvhM8xtlyFvTwXrUsbocUKULnVy9cnCNAM0=";
+    fetchSubmodules = true;
+  };
+
+  pjsip-jami = pjsip.overrideAttrs (old:
+    let
+      patch-src = src + "/daemon/contrib/src/pjproject/";
+    in
+    rec {
+      version = "e4b83585a0bdf1523e808a4fc1946ec82ac733d0";
+
+      src = fetchFromGitHub {
+        owner = "savoirfairelinux";
+        repo = "pjproject";
+        rev = version;
+        hash = "sha256-QeD2o6uz9r5vc3Scs1oRKYZ+aNH+01TSxLBj71ssfj4=";
+      };
+
+      patches = (map (x: patch-src + x) (readLinesToList ./config/pjsip_patches)) ++ [
+        (fetchpatch {
+          name = "CVE-2023-27585.patch";
+          url = "https://github.com/pjsip/pjproject/commit/d1c5e4da5bae7f220bc30719888bb389c905c0c5.patch";
+          hash = "sha256-+yyKKTKG2FnfyLWnc4S80vYtDzmiu9yRmuqb5eIulPg=";
+        })
+      ];
+
+      patchFlags = [ "-p1" "-l" ];
+
+      configureFlags = (readLinesToList ./config/pjsip_args_common)
+        ++ lib.optionals stdenv.isLinux (readLinesToList ./config/pjsip_args_linux);
+    });
+
+  opendht-jami = opendht.override {
+    enableProxyServerAndClient = true;
+    enablePushNotifications = true;
+  };
+
+  daemon = stdenv.mkDerivation {
+    pname = "jami-daemon";
+    inherit src version meta;
+    sourceRoot = "${src.name}/daemon";
+
+    nativeBuildInputs = [
+      autoreconfHook
+      pkg-config
+      perl
+    ];
+
+    buildInputs = [
+      alsa-lib
+      asio
+      dbus
+      sdbus-cpp
+      fmt
+      ffmpeg_6
+      gmp
+      gnutls
+      http-parser
+      jack
+      jsoncpp
+      libarchive
+      libgit2
+      libnatpmp
+      libpulseaudio
+      libupnp
+      yaml-cpp
+      msgpack
+      opendht-jami
+      openssl
+      pjsip-jami
+      restinio
+      secp256k1
+      speex
+      udev
+      webrtc-audio-processing
+      zlib
+    ];
+
+    enableParallelBuilding = true;
+  };
+
+  postPatch = ''
+    substituteInPlace src/app/commoncomponents/ModalTextEdit.qml \
+      --replace 'required property string placeholderText' 'property string placeholderText: ""'
+  '';
+
+  preConfigure = ''
+    echo 'const char VERSION_STRING[] = "${version}";' > src/app/version.h
+  '';
+
+  nativeBuildInputs = [
+    wrapQtAppsHook
+    pkg-config
+    cmake
+    python3
+    qttools
+  ];
+
+  buildInputs = [
+    daemon
+    ffmpeg_6
+    libnotify
+    networkmanager
+    qtbase
+    qt5compat
+    qrencode
+    qtnetworkauth
+    qtdeclarative
+    qtmultimedia
+    qtpositioning
+    qtsvg
+    qtwebchannel
+  ] ++ lib.optionals withWebengine [
+    qtwebengine
+  ];
+
+  cmakeFlags = [
+    "-DLIBJAMI_INCLUDE_DIR=${daemon}/include/jami"
+    "-DLIBJAMI_XML_INTERFACES_DIR=${daemon}/share/dbus-1/interfaces"
+  ] ++ lib.optionals (!withWebengine) [
+    "-DWITH_WEBENGINE=false"
+  ];
+
+  qtWrapperArgs = [
+    # With wayland the titlebar is not themed and the wmclass is wrong.
+    "--set-default QT_QPA_PLATFORM xcb"
+  ];
+
+  postInstall = ''
+    # Make the jamid d-bus services available
+    ln -s ${daemon}/share/dbus-1 $out/share
+  '';
+
+  passthru.updateScript = gitUpdater {
+    rev-prefix = "stable/";
+  };
+
+  meta = with lib; {
+    homepage = "https://jami.net/";
+    description = "The free and universal communication platform that respects the privacy and freedoms of its users";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.linsui ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/jitsi-meet-electron/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/jitsi-meet-electron/default.nix
new file mode 100644
index 000000000000..81562e69a66a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/jitsi-meet-electron/default.nix
@@ -0,0 +1,60 @@
+{ lib, stdenv
+, fetchurl
+, appimageTools
+, makeWrapper
+, electron
+, xorg
+, pipewire
+}:
+
+stdenv.mkDerivation rec {
+  pname = "jitsi-meet-electron";
+  version = "2022.10.1";
+
+  src = fetchurl {
+    url = "https://github.com/jitsi/jitsi-meet-electron/releases/download/v${version}/jitsi-meet-x86_64.AppImage";
+    sha256 = "sha256-98zuAsGT30paxszSO1XcMY8tsrMBeBLDFjK/JWhLC8s=";
+    name = "${pname}-${version}.AppImage";
+  };
+
+  appimageContents = appimageTools.extractType2 {
+    name = "${pname}-${version}";
+    inherit src;
+  };
+
+  dontUnpack = true;
+  dontConfigure = true;
+  dontBuild = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $out/share/${pname} $out/share/applications
+
+    cp -a ${appimageContents}/{locales,resources} $out/share/${pname}
+    cp -a ${appimageContents}/jitsi-meet.desktop $out/share/applications/${pname}.desktop
+    cp -a ${appimageContents}/usr/share/icons $out/share
+
+    substituteInPlace $out/share/applications/${pname}.desktop \
+      --replace 'Exec=AppRun' 'Exec=${pname}'
+
+    runHook postInstall
+  '';
+
+  postFixup = ''
+    makeWrapper ${electron}/bin/electron $out/bin/${pname} \
+      --add-flags $out/share/${pname}/resources/app.asar \
+      --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ stdenv.cc.cc xorg.libXtst pipewire ]}" \
+      --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}"
+  '';
+
+  meta = with lib; {
+    description = "Jitsi Meet desktop application powered by Electron";
+    homepage = "https://github.com/jitsi/jitsi-meet-electron";
+    license = licenses.asl20;
+    maintainers = teams.jitsi.members;
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/jitsi/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/jitsi/default.nix
new file mode 100644
index 000000000000..cb634f434d24
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/jitsi/default.nix
@@ -0,0 +1,78 @@
+{ stdenv, lib, fetchFromGitHub, makeDesktopItem, unzip, ant, jdk8
+# Optional, Jitsi still runs without, but you may pass null:
+, alsa-lib, dbus, gtk2, libpulseaudio, openssl, xorg
+}:
+
+let jdk = jdk8; in
+stdenv.mkDerivation rec {
+  pname = "jitsi";
+  version = "2.11.5633";
+
+  src = fetchFromGitHub {
+    owner = "jitsi";
+    repo = "jitsi";
+    rev = "refs/tags/${lib.versions.patch version}";
+    hash = "sha256-CN4o0VfHdoUteI2wyJ2hFJ9UsQ2wWUzcvrLMbR/l36M=";
+  };
+
+  patches = [ ./jitsi.patch ];
+
+  jitsiItem = makeDesktopItem {
+    name = "Jitsi";
+    exec = "jitsi";
+    comment = "VoIP and Instant Messaging client";
+    desktopName = "Jitsi";
+    genericName = "Instant Messaging";
+    categories = [ "Chat" ];
+  };
+
+  libPath = lib.makeLibraryPath ([
+    stdenv.cc.cc  # For libstdc++.
+    alsa-lib
+    dbus
+    gtk2
+    libpulseaudio
+    openssl
+    xorg.libX11
+    xorg.libXext
+    xorg.libXScrnSaver
+    xorg.libXv
+  ]);
+
+  nativeBuildInputs = [ unzip ];
+  buildInputs = [ ant jdk ];
+
+  buildPhase = "ant make";
+
+  installPhase = ''
+    mkdir -p $out
+    cp -a lib $out/
+    rm -rf $out/lib/native/solaris
+    cp -a sc-bundles $out/
+    mkdir $out/bin
+    cp resources/install/generic/run.sh $out/bin/jitsi
+    chmod +x $out/bin/jitsi
+    substituteInPlace $out/bin/jitsi \
+      --subst-var-by JAVA ${jdk}/bin/java \
+      --subst-var-by EXTRALIBS ${gtk2.out}/lib
+    sed -e 's,^java\ ,${jdk}/bin/java ,' -i $out/bin/jitsi
+    patchShebangs $out
+    libPath="$libPath:${jdk.home}/lib/${jdk.architecture}"
+    find $out/ -type f -name '*.so' | while read file; do
+      patchelf --set-rpath "$libPath" "$file" && \
+          patchelf --shrink-rpath "$file"
+    done
+  '';
+
+  meta = with lib; {
+    homepage = "https://desktop.jitsi.org/";
+    description = "Open Source Video Calls and Chat";
+    sourceProvenance = with sourceTypes; [
+      binaryBytecode
+      binaryNativeCode
+    ];
+    license = licenses.lgpl21Plus;
+    platforms = platforms.linux;
+    maintainers = teams.jitsi.members;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/jitsi/jitsi.patch b/nixpkgs/pkgs/applications/networking/instant-messengers/jitsi/jitsi.patch
new file mode 100644
index 000000000000..07b16b919962
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/jitsi/jitsi.patch
@@ -0,0 +1,27 @@
+--- /home/dario/Downloads/jitsi/resources/install/generic/run.sh	2013-11-01 15:37:21.000000000 +0000
++++ jitsi/resources/install/generic/run.sh	2014-03-04 11:52:30.796397567 +0000
+@@ -1,4 +1,9 @@
+-mkdir -p $HOME/.sip-communicator/log
++#! /bin/bash
++# A modified version of the generic run.sh
++
++#mkdir -p $HOME/.sip-communicator/log
++
++cd "$(dirname "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")")"
+
+ # Get architecture
+ ARCH=`uname -m | sed -e s/x86_64/64/ -e s/i.86/32/`
+@@ -6,10 +11,12 @@
+ # Additionnal JVM arguments
+ CLIENTARGS=""
+
++NATIVELIBS="lib/native/linux-64"
+ if [ $ARCH = 32 ]
+ then
+     CLIENTARGS="-client -Xmx256m"
++    NATIVELIBS="lib/native/linux"
+ fi
+
+ export PATH=$PATH:native
+-java $CLIENTARGS -classpath "lib/felix.jar:sc-bundles/sc-launcher.jar:sc-bundles/util.jar:lib/" -Djava.library.path=native -Dfelix.config.properties=file:./lib/felix.client.run.properties -Djava.util.logging.config.file=lib/logging.properties net.java.sip.communicator.launcher.SIPCommunicator
++LD_LIBRARY_PATH=@EXTRALIBS@ exec @JAVA@ $CLIENTARGS -classpath "lib/felix.jar:sc-bundles/sc-launcher.jar:sc-bundles/util.jar:lib/" -Djava.library.path=$NATIVELIBS -Dfelix.config.properties=file:lib/felix.client.run.properties -Djava.util.logging.config.file=lib/logging.properties net.java.sip.communicator.launcher.SIPCommunicator
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/kaidan/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/kaidan/default.nix
new file mode 100644
index 000000000000..c296118eff9e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/kaidan/default.nix
@@ -0,0 +1,73 @@
+{ mkDerivation
+, lib
+, fetchFromGitLab
+, cmake
+, extra-cmake-modules
+, pkg-config
+, qtquickcontrols2
+, qtmultimedia
+, qtlocation
+, qqc2-desktop-style
+, kirigami2
+, knotifications
+, zxing-cpp
+, qxmpp
+, sonnet
+, gst_all_1
+}:
+
+mkDerivation rec {
+  pname = "kaidan";
+  version = "0.8.0";
+
+  src = fetchFromGitLab {
+    domain = "invent.kde.org";
+    owner = "network";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "070njci5zyzahmz3nqyp660chxnqx1mxp31w17syfllvrw403qmg";
+  };
+
+  nativeBuildInputs = [ cmake extra-cmake-modules pkg-config ];
+
+  buildInputs = with gst_all_1; [
+    qtquickcontrols2
+    qtmultimedia
+    qtlocation
+    qqc2-desktop-style
+    kirigami2
+    knotifications
+    zxing-cpp
+    qxmpp
+    sonnet
+    gstreamer
+    gst-plugins-bad
+    gst-plugins-base
+    gst-plugins-good
+  ];
+  postInstall = ''
+    qtWrapperArgs+=(--prefix GST_PLUGIN_SYSTEM_PATH_1_0 : "$GST_PLUGIN_SYSTEM_PATH_1_0")
+  '';
+
+  meta = with lib; {
+    description = "User-friendly and modern chat app, using XMPP";
+    longDescription = ''
+       Kaidan is a user-friendly and modern chat app for every device. It uses
+       the open communication protocol XMPP (Jabber). Unlike other chat apps,
+       you are not dependent on one specific service provider.
+
+       Kaidan does not have all basic features yet and has still some
+       stability issues. Current features include audio messages, video
+       messages, and file sharing.
+    '';
+    homepage = "https://www.kaidan.im";
+    license = with licenses; [
+      gpl3Plus
+      mit
+      asl20
+      cc-by-sa-40
+    ];
+    maintainers = with maintainers; [ astro ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/kdeltachat/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/kdeltachat/default.nix
new file mode 100644
index 000000000000..06a1d98762f8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/kdeltachat/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, mkDerivation
+, fetchFromSourcehut
+, cmake
+, extra-cmake-modules
+, pkg-config
+, kirigami2
+, libdeltachat
+, qtbase
+, qtimageformats
+, qtmultimedia
+, qtwebengine
+}:
+
+mkDerivation rec {
+  pname = "kdeltachat";
+  version = "unstable-2023-01-31";
+
+  src = fetchFromSourcehut {
+    owner = "~link2xt";
+    repo = "kdeltachat";
+    rev = "0c9370cfe41ae7f99b4fceced896f66fb4e9195c";
+    hash = "sha256-6KSzsPs8tSzVOxGUWj/AvSJihrSwamZgUNGvjnmNnag=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    extra-cmake-modules
+    pkg-config
+  ];
+
+  buildInputs = [
+    kirigami2
+    libdeltachat
+    qtimageformats
+    qtmultimedia
+    qtwebengine
+  ];
+
+  # needed for qmlplugindump to work
+  QT_PLUGIN_PATH = "${qtbase.bin}/${qtbase.qtPluginPrefix}";
+  QML2_IMPORT_PATH = lib.concatMapStringsSep ":"
+    (lib: "${lib}/${qtbase.qtQmlPrefix}")
+    [ kirigami2 qtmultimedia ];
+
+  meta = with lib; {
+    description = "Delta Chat client using Kirigami framework";
+    homepage = "https://git.sr.ht/~link2xt/kdeltachat";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ dotlambda ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/keet/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/keet/default.nix
new file mode 100644
index 000000000000..557078cd8b50
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/keet/default.nix
@@ -0,0 +1,32 @@
+{ lib, appimageTools, fetchurl }:
+
+let
+  pname = "keet";
+  version = "1.2.1";
+
+  src = fetchurl {
+    url = "https://keet.io/downloads/${version}/Keet.AppImage";
+    sha256 = "1f76ccfa16719a24f6d84b88e5ca49fab1c372de309ce74393461903c5c49d98";
+  };
+
+  appimageContents = appimageTools.extract { inherit pname version src; };
+in appimageTools.wrapType2 {
+  inherit src pname version;
+
+  extraInstallCommands = ''
+    mv $out/bin/${pname}-${version} $out/bin/${pname}
+
+    install -m 444 -D ${appimageContents}/${pname}.desktop -t $out/share/applications
+    substituteInPlace $out/share/applications/${pname}.desktop \
+      --replace 'Exec=AppRun' 'Exec=${pname}'
+    cp -r ${appimageContents}/usr/share/icons $out/share
+  '';
+
+  meta = with lib; {
+    description = "Peer-to-Peer Chat";
+    homepage = "https://keet.io";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ extends ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/linphone/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/linphone/default.nix
new file mode 100644
index 000000000000..ebf3341e309a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/linphone/default.nix
@@ -0,0 +1,148 @@
+{ bctoolbox
+, belcard
+, belle-sip
+, belr
+, cmake
+, fetchFromGitLab
+, lib
+, liblinphone
+, mediastreamer
+, mediastreamer-openh264
+, minizip-ng
+, mkDerivation
+, qtgraphicaleffects
+, qtquickcontrols2
+, qttools
+}:
+
+# How to update Linphone? (The Qt desktop app)
+#
+# Belledonne Communications (BC), the company making Linphone, has split the
+# project into several sub-projects that they maintain, plus some third-party
+# dependencies that they also extend with commits of their own, specific to
+# Linphone and not (yet?) upstreamed.
+#
+# All of this is organised in a Software Development Kit (SDK) meta-repository
+# with git submodules to pin all those repositories into a coherent whole.
+#
+# The Linphone Qt desktop app uses this SDK as submodule as well.
+#
+# So, in order to update the desktop app to a new release, one has to follow
+# the submodule chain and update the corresponding derivations here, in nixpkgs,
+# with the corresponding version number (or commit hash)
+
+mkDerivation rec {
+  pname = "linphone-desktop";
+  version = "5.0.16";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.linphone.org";
+    owner = "public";
+    group = "BC";
+    repo = pname;
+    rev = version;
+    hash = "sha256-zS0JyK+HGiHY7tPdl3RK6fJJOUS+fKM1u3npNxDAAYE=";
+  };
+
+  patches = [
+    ./do-not-build-linphone-sdk.patch
+    ./remove-bc_compute_full_version-usage.patch
+    ./no-store-path-in-autostart.patch
+  ];
+
+  # See: https://gitlab.linphone.org/BC/public/linphone-desktop/issues/21
+  postPatch = ''
+    echo "project(linphoneqt VERSION ${version})" >linphone-app/linphoneqt_version.cmake
+    substituteInPlace linphone-app/src/app/AppController.cpp \
+      --replace "APPLICATION_SEMVER" "\"${version}\""
+  '';
+
+  # TODO: After linphone-desktop and liblinphone split into separate packages,
+  # there might be some build inputs here that aren't needed for
+  # linphone-desktop.
+  buildInputs = [
+    # Made by BC
+    bctoolbox
+    belcard
+    belle-sip
+    belr
+    liblinphone
+    mediastreamer
+    mediastreamer-openh264
+
+    minizip-ng
+    qtgraphicaleffects
+    qtquickcontrols2
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    qttools
+  ];
+
+  cmakeFlags = [
+    "-DMINIZIP_INCLUDE_DIRS=${minizip-ng}/include"
+    "-DMINIZIP_LIBRARIES=minizip"
+
+    # RPATH of binary /nix/store/.../bin/... contains a forbidden reference to /build/
+    "-DCMAKE_SKIP_BUILD_RPATH=ON"
+  ];
+
+  # The default install phase fails because the paths are somehow messed up in
+  # the makefiles. The errors were like:
+  #
+  #   CMake Error at cmake_builder/linphone_package/cmake_install.cmake:49 (file):
+  #     file INSTALL cannot find
+  #     "/build/linphone-desktop-.../build/linphone-sdk/desktop//nix/store/.../bin":
+  #     No such file or directory.
+  #
+  # If someone is able to figure out how to fix that, great. For now, just
+  # trying to pick all the relevant files to the output.
+  #
+  # Also, the exec path in linphone.desktop file remains invalid, pointing to
+  # the build directory, after the whole nix build process. So, let's use sed to
+  # manually fix that path.
+  #
+  # In order to find mediastreamer plugins, mediastreamer package was patched to
+  # support an environment variable pointing to the plugin directory. Set that
+  # environment variable by wrapping the Linphone executable.
+  #
+  # Also, some grammar files needed to be copied too from some dependencies. I
+  # suppose if one define a dependency in such a way that its share directory is
+  # found, then this copying would be unnecessary. These missing grammar files
+  # were discovered when linphone crashed at startup and it was run with
+  # --verbose flag. Instead of actually copying these files, create symlinks.
+  #
+  # It is quite likely that there are some other files still missing and
+  # Linphone will randomly crash when it tries to access those files. Then,
+  # those just need to be copied manually below.
+  installPhase = ''
+    mkdir -p $out/bin $out/lib
+    cp linphone-app/linphone $out/bin/
+    cp linphone-app/libapp-plugin.so $out/lib/
+    mkdir -p $out/lib/mediastreamer/plugins
+    ln -s ${mediastreamer-openh264}/lib/mediastreamer/plugins/* $out/lib/mediastreamer/plugins/
+    ln -s ${mediastreamer}/lib/mediastreamer/plugins/* $out/lib/mediastreamer/plugins/
+    wrapProgram $out/bin/linphone \
+      --set MEDIASTREAMER_PLUGINS_DIR \
+            $out/lib/mediastreamer/plugins
+    mkdir -p $out/share/applications
+    cp linphone-app/linphone.desktop $out/share/applications/
+    mkdir -p $out/share/icons/hicolor/scalable/apps
+    cp ../linphone-app/assets/images/linphone_logo.svg $out/share/icons/hicolor/scalable/apps/linphone.svg
+    mkdir -p $out/share/belr/grammars
+    ln -s ${liblinphone}/share/belr/grammars/* $out/share/belr/grammars/
+    ln -s ${belle-sip}/share/belr/grammars/* $out/share/belr/grammars/
+    mkdir -p $out/share/linphone
+    ln -s ${liblinphone}/share/linphone/* $out/share/linphone/
+    ln -s ${liblinphone}/share/sounds $out/share/sounds
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.linphone.org/";
+    description = "Open source SIP phone for voice/video calls and instant messaging";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ jluttine ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/linphone/do-not-build-linphone-sdk.patch b/nixpkgs/pkgs/applications/networking/instant-messengers/linphone/do-not-build-linphone-sdk.patch
new file mode 100644
index 000000000000..dc635b32a031
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/linphone/do-not-build-linphone-sdk.patch
@@ -0,0 +1,143 @@
+From e6a9992461f368d08d1ad63ffe454714ec0c59ce Mon Sep 17 00:00:00 2001
+From: Lorenz Brun <lorenz@brun.one>
+Date: Fri, 28 Jan 2022 02:36:01 +0100
+Subject: [PATCH] Remove Linphone SDK build
+
+---
+ CMakeLists.txt                                | 86 ++-----------------
+ .../cmake_builder/additional_steps.cmake      |  9 --
+ 2 files changed, 5 insertions(+), 90 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2002b925..6d92a8e5 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -152,7 +152,6 @@ list(APPEND APP_OPTIONS "-DENABLE_RELATIVE_PREFIX=${ENABLE_RELATIVE_PREFIX}")
+ list(APPEND APP_OPTIONS "-DLINPHONE_OUTPUT_DIR=${LINPHONE_OUTPUT_DIR}")
+ list(APPEND APP_OPTIONS "-DENABLE_QT_GL=${ENABLE_VIDEO}")#Activate on video
+ 
+-include(ExternalProject)
+ set(PROJECT_BUILD_COMMAND "")
+ if(CMAKE_BUILD_PARALLEL_LEVEL)
+ 	list(APPEND APP_OPTIONS "-DCMAKE_BUILD_PARALLEL_LEVEL=${CMAKE_BUILD_PARALLEL_LEVEL}")
+@@ -190,30 +189,8 @@ if(ENABLE_BUILD_APP_PLUGINS)
+ 	endif()
+ endif()
+ 
+-
+-if(NOT LINPHONE_QT_ONLY)
+-ExternalProject_Add(sdk PREFIX "${CMAKE_BINARY_DIR}/sdk"
+-    SOURCE_DIR "${CMAKE_SOURCE_DIR}/linphone-sdk"
+-    INSTALL_DIR "${LINPHONE_OUTPUT_DIR}"
+-    STAMP_DIR "${SDK_BUILD_DIR}/stamp"
+-    BINARY_DIR "${SDK_BUILD_DIR}"
+-    STEP_TARGETS build
+-    BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --config $<CONFIG> ${PROJECT_BUILD_COMMAND}
+-    INSTALL_COMMAND ${CMAKE_COMMAND} -E echo "Install step is already done at build time."
+-    LIST_SEPARATOR | # Use the alternate list separator
+-    CMAKE_ARGS ${APP_OPTIONS} ${USER_ARGS} -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -DCMAKE_PREFIX_PATH=${PREFIX_PATH}
+-    BUILD_ALWAYS NO #${DO_BUILD}
+-)
+-ExternalProject_Add_Step(sdk force_build
+-	COMMENT "Forcing build for 'desktop'"
+-	DEPENDEES configure
+-	DEPENDERS build
+-	ALWAYS 1
+-)
+-endif()
+ include(FindPkgConfig)
+ 
+-set(APP_DEPENDS sdk)
+ find_package(Qt5 5.10 COMPONENTS Core REQUIRED)
+ 
+ if ( NOT Qt5_FOUND )
+@@ -227,62 +204,9 @@ find_package(belcard CONFIG QUIET)
+ find_package(Mediastreamer2 CONFIG QUIET)
+ find_package(ortp CONFIG QUIET)
+ 
+-if(NOT (LinphoneCxx_FOUND) OR NOT (Linphone_FOUND) OR NOT (bctoolbox_FOUND) OR NOT (belcard_FOUND) OR NOT (Mediastreamer2_FOUND) OR NOT (ortp_FOUND) OR FORCE_APP_EXTERNAL_PROJECTS)
+-	message("Projects are set as External projects. You can start building them by using for example : cmake --build . --target install")
+-	ExternalProject_Add(linphone-qt PREFIX "${CMAKE_BINARY_DIR}/linphone-app"
+-		SOURCE_DIR "${CMAKE_SOURCE_DIR}/linphone-app"
+-		INSTALL_DIR "${APPLICATION_OUTPUT_DIR}"
+-		BINARY_DIR "${CMAKE_BINARY_DIR}/linphone-app"
+-		DEPENDS ${APP_DEPENDS}
+-		BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --config $<CONFIG> ${PROJECT_BUILD_COMMAND}
+-		INSTALL_COMMAND ${CMAKE_COMMAND} -E echo "Install step is already done at build time."
+-		LIST_SEPARATOR | # Use the alternate list separator
+-		CMAKE_ARGS ${APP_OPTIONS} ${USER_ARGS} -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -DCMAKE_PREFIX_PATH=${PREFIX_PATH}
+-	# ${APP_OPTIONS}
+-		BUILD_ALWAYS ON
+-	)
+-	if( ENABLE_BUILD_APP_PLUGINS)
+-		ExternalProject_Add(app-plugins PREFIX "${CMAKE_BINARY_DIR}/plugins-app"
+-			SOURCE_DIR "${CMAKE_SOURCE_DIR}/plugins"
+-			INSTALL_DIR "${APPLICATION_OUTPUT_DIR}"
+-			BINARY_DIR "${CMAKE_BINARY_DIR}/plugins-app"
+-			DEPENDS linphone-qt
+-			BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --config $<CONFIG> ${PROJECT_BUILD_COMMAND}
+-			INSTALL_COMMAND ${CMAKE_COMMAND} -E echo "Install step is already done at build time."
+-			LIST_SEPARATOR | # Use the alternate list separator
+-			CMAKE_ARGS ${APP_OPTIONS} ${USER_ARGS} -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -DCMAKE_PREFIX_PATH=${PREFIX_PATH}
+-		)
+-	endif()
+-	install(CODE "message(STATUS Running install)")
+-	set(AUTO_REGENERATION auto_regeneration)
+-	if(	ENABLE_BUILD_APP_PLUGINS)
+-		add_custom_target(${AUTO_REGENERATION} ALL
+-			COMMAND ${CMAKE_COMMAND} ${CMAKE_CURRENT_SOURCE_DIR}
+-			DEPENDS app-plugins)
+-	else()
+-		add_custom_target(${AUTO_REGENERATION} ALL
+-			COMMAND ${CMAKE_COMMAND} ${CMAKE_CURRENT_SOURCE_DIR}
+-			DEPENDS linphone-qt)
+-	endif()
+-else()
+-	message("Adding Linphone Desktop in an IDE-friendly state")
+-	set(CMAKE_INSTALL_PREFIX "${APPLICATION_OUTPUT_DIR}")
+-	add_subdirectory(${CMAKE_SOURCE_DIR}/linphone-app)
+-	if(NOT LINPHONE_QT_ONLY)
+-		add_dependencies(app-library ${APP_DEPENDS})
+-	endif()
+-	if( ENABLE_BUILD_APP_PLUGINS)
+-		add_subdirectory(${CMAKE_SOURCE_DIR}/plugins "plugins-app")
+-	endif()
++message("Adding Linphone Desktop in an IDE-friendly state")
++set(CMAKE_INSTALL_PREFIX "${APPLICATION_OUTPUT_DIR}")
++add_subdirectory(${CMAKE_SOURCE_DIR}/linphone-app)
++if( ENABLE_BUILD_APP_PLUGINS)
++	add_subdirectory(${CMAKE_SOURCE_DIR}/plugins "plugins-app")
+ endif()
+-ExternalProject_Add(linphone-qt-only PREFIX "${CMAKE_BINARY_DIR}/linphone-app"
+-    SOURCE_DIR "${CMAKE_SOURCE_DIR}/linphone-app"
+-    INSTALL_DIR "${APPLICATION_OUTPUT_DIR}"
+-    BINARY_DIR "${CMAKE_BINARY_DIR}/linphone-app"
+-    BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --config $<CONFIG> ${PROJECT_BUILD_COMMAND}
+-#    INSTALL_COMMAND ${CMAKE_COMMAND} -E echo "Install step is already done at build time."
+-    LIST_SEPARATOR | # Use the alternate list separator
+-    CMAKE_ARGS ${APP_OPTIONS} ${USER_ARGS} -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -DCMAKE_PREFIX_PATH=${PREFIX_PATH}
+-    EXCLUDE_FROM_ALL ON
+-    #BUILD_ALWAYS ON
+-)
+diff --git a/linphone-app/cmake_builder/additional_steps.cmake b/linphone-app/cmake_builder/additional_steps.cmake
+index 7f7fd573..a69a04e8 100644
+--- a/linphone-app/cmake_builder/additional_steps.cmake
++++ b/linphone-app/cmake_builder/additional_steps.cmake
+@@ -54,14 +54,5 @@ if (ENABLE_PACKAGING)
+     linphone_builder_apply_flags()
+     linphone_builder_set_ep_directories(linphone_package)
+     linphone_builder_expand_external_project_vars()
+-    ExternalProject_Add(TARGET_linphone_package
+-      DEPENDS TARGET_linphone_builder
+-      TMP_DIR ${ep_tmp}
+-      BINARY_DIR ${ep_build}
+-      SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/linphone_package"
+-      DOWNLOAD_COMMAND ""
+-      CMAKE_GENERATOR ${CMAKE_GENERATOR}
+-      CMAKE_ARGS ${LINPHONE_BUILDER_EP_ARGS} -DCMAKE_INSTALL_PREFIX=${LINPHONE_BUILDER_WORK_DIR}/PACKAGE -DTOOLS_DIR=${CMAKE_BINARY_DIR}/programs -DLINPHONE_OUTPUT_DIR=${CMAKE_INSTALL_PREFIX} -DLINPHONE_DESKTOP_DIR=${CMAKE_CURRENT_LIST_DIR}/.. -DLINPHONE_SOURCE_DIR=${EP_linphone_SOURCE_DIR} ${ENABLE_VARIABLES} -DLINPHONE_BUILDER_SIGNING_IDENTITY=${LINPHONE_BUILDER_SIGNING_IDENTITY}
+-    )
+   endif ()
+ endif ()
+-- 
+2.25.1
+
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/linphone/no-store-path-in-autostart.patch b/nixpkgs/pkgs/applications/networking/instant-messengers/linphone/no-store-path-in-autostart.patch
new file mode 100644
index 000000000000..dc1b0be916cd
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/linphone/no-store-path-in-autostart.patch
@@ -0,0 +1,27 @@
+From 6a26922e5e4363de36057d635a1bf889160b2533 Mon Sep 17 00:00:00 2001
+From: Lorenz Brun <lorenz@brun.one>
+Date: Fri, 28 Jan 2022 18:44:43 +0100
+Subject: [PATCH] Do not use store path for autostart on Nix
+
+---
+ linphone-app/src/app/App.cpp | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/linphone-app/src/app/App.cpp b/linphone-app/src/app/App.cpp
+index 868f8f44..2c61c648 100644
+--- a/linphone-app/src/app/App.cpp
++++ b/linphone-app/src/app/App.cpp
+@@ -858,6 +858,10 @@ void App::setAutoStart (bool enabled) {
+ 		exec = QProcessEnvironment::systemEnvironment().value(QStringLiteral("APPIMAGE"));
+ 		qDebug() << "exec path autostart set appimage=" << exec;
+ 	}
++	else if (binPath.startsWith("/nix/store")) { // Nix/NixOS
++		exec = QStringLiteral("linphone");
++		qDebug() << "exec path autostart set nix=" << exec;
++	}
+ 	else { //classic package
+ 		exec = binPath;
+ 		qDebug() << "exec path autostart set classic package=" << exec;
+-- 
+2.25.1
+
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/linphone/remove-bc_compute_full_version-usage.patch b/nixpkgs/pkgs/applications/networking/instant-messengers/linphone/remove-bc_compute_full_version-usage.patch
new file mode 100644
index 000000000000..225f0e78db23
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/linphone/remove-bc_compute_full_version-usage.patch
@@ -0,0 +1,74 @@
+From 4849d5633b98e6d3514355436eab5ba537cbfd99 Mon Sep 17 00:00:00 2001
+From: David P <megver83@parabola.nu>
+Date: Fri, 23 Oct 2020 16:44:17 -0300
+Subject: [PATCH] remove bc_compute_full_version usage
+
+---
+ linphone-app/CMakeLists.txt                           | 11 +----------
+ linphone-app/build/CMakeLists.txt                     |  5 -----
+ .../cmake_builder/linphone_package/CMakeLists.txt     | 10 +---------
+ 3 files changed, 2 insertions(+), 24 deletions(-)
+
+diff --git a/linphone-app/CMakeLists.txt b/linphone-app/CMakeLists.txt
+index de7f917f..ee14ff78 100644
+--- a/linphone-app/CMakeLists.txt
++++ b/linphone-app/CMakeLists.txt
+@@ -21,17 +21,8 @@
+ ################################################################################
+ cmake_minimum_required(VERSION 3.1)
+ 
++include(linphoneqt_version.cmake)
+ find_package(bctoolbox CONFIG)
+-set(FULL_VERSION )
+-bc_compute_full_version(FULL_VERSION)
+-set(version_major )
+-set(version_minor )
+-set(version_patch )
+-set(identifiers )
+-set(metadata )
+-bc_parse_full_version("${FULL_VERSION}" version_major version_minor version_patch identifiers metadata)
+-
+-project(linphoneqt VERSION "${version_major}.${version_minor}.${version_patch}")
+ 
+ 
+ if(ENABLE_BUILD_VERBOSE)
+diff --git a/linphone-app/build/CMakeLists.txt b/linphone-app/build/CMakeLists.txt
+index 8ef03faa..97d94bd6 100644
+--- a/linphone-app/build/CMakeLists.txt
++++ b/linphone-app/build/CMakeLists.txt
+@@ -46,11 +46,6 @@ set(CPACK_SOURCE_IGNORE_FILES
+   "libmng.spec"
+ )
+ 
+-bc_compute_full_version(PROJECT_VERSION_BUILD)
+-if(PROJECT_VERSION_BUILD)
+-  set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${PROJECT_VERSION_BUILD}")
+-endif()
+-
+ message("-- Package file name is ${CPACK_PACKAGE_FILE_NAME}")
+ 
+ set(CPACK_SOURCE_PACKAGE_FILE_NAME ${CPACK_PACKAGE_FILE_NAME})
+diff --git a/linphone-app/cmake_builder/linphone_package/CMakeLists.txt b/linphone-app/cmake_builder/linphone_package/CMakeLists.txt
+index ac85c68a..e6af5a66 100644
+--- a/linphone-app/cmake_builder/linphone_package/CMakeLists.txt
++++ b/linphone-app/cmake_builder/linphone_package/CMakeLists.txt
+@@ -38,15 +38,7 @@ set(LINPHONE_QML_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../ui")
+ # ==============================================================================
+ # Build package version.
+ # ==============================================================================
+-bc_compute_full_version(APP_PROJECT_VERSION)
+-if (GIT_EXECUTABLE AND NOT(APP_PROJECT_VERSION))
+-  execute_process(
+-    COMMAND ${GIT_EXECUTABLE} describe --always
+-    OUTPUT_VARIABLE APP_PROJECT_VERSION
+-    OUTPUT_STRIP_TRAILING_WHITESPACE
+-    WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../.."
+-  )
+-elseif (NOT(APP_PROJECT_VERSION))
++if (NOT(APP_PROJECT_VERSION))
+   set(APP_PROJECT_VERSION "0.0.0")
+ endif ()
+ string(REGEX REPLACE "([0-9.]+)-?.*" "\\1" LINPHONE_VERSION "${APP_PROJECT_VERSION}")
+-- 
+2.25.1
+
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/matrix-commander/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/matrix-commander/default.nix
new file mode 100644
index 000000000000..154803697873
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/matrix-commander/default.nix
@@ -0,0 +1,63 @@
+{ lib
+, fetchFromGitHub
+, buildPythonApplication
+, cacert
+, setuptools
+, matrix-nio
+, python-magic
+, markdown
+, pillow
+, aiofiles
+, notify2
+, dbus-python
+, pyxdg
+, python-olm
+, emoji
+}:
+
+buildPythonApplication rec {
+  pname = "matrix-commander";
+  version = "7.2.0";
+
+  src = fetchFromGitHub {
+    owner = "8go";
+    repo = "matrix-commander";
+    rev = "v${version}";
+    hash = "sha256-qL6ARkAWu0FEuYK2e9Z9hMSfK4TW0kGgoIFUfJ8Dgwk=";
+  };
+
+  format = "pyproject";
+
+  postPatch = ''
+    # Dependencies already bundled with Python
+    sed -i \
+      -e '/uuid/d' \
+      -e '/argparse/d' \
+      -e '/asyncio/d' \
+      -e '/datetime/d' \
+      setup.cfg requirements.txt
+  '';
+
+  propagatedBuildInputs = [
+    cacert
+    setuptools
+    matrix-nio
+    python-magic
+    markdown
+    pillow
+    aiofiles
+    notify2
+    dbus-python
+    pyxdg
+    python-olm
+    emoji
+  ] ++ matrix-nio.optional-dependencies.e2e;
+
+  meta = with lib; {
+    description = "Simple but convenient CLI-based Matrix client app for sending and receiving";
+    homepage = "https://github.com/8go/matrix-commander";
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.seb314 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/matrix-dl/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/matrix-dl/default.nix
new file mode 100644
index 000000000000..caf6669e120b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/matrix-dl/default.nix
@@ -0,0 +1,25 @@
+{ lib, python3Packages, fetchFromGitHub }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "matrix-dl";
+  version = "unstable-2020-07-14";
+
+  src = fetchFromGitHub {
+    owner = "rubo77";
+    repo = pname;
+    rev = "b1a86d1421f39ee327284e1023f09dc165e3c8a5";
+    sha256 = "1l8nh8z7kz24v0wcy3ll3w6in2yxwa1yz8lyc3x0blz37d8ss4ql";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    matrix-client
+  ];
+
+  meta = with lib; {
+    description = "Download backlogs from Matrix as raw text";
+    homepage = src.meta.homepage;
+    license = licenses.gpl1Plus;
+    maintainers = with maintainers; [ aw ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/matrixcli/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/matrixcli/default.nix
new file mode 100644
index 000000000000..9b501facb7f6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/matrixcli/default.nix
@@ -0,0 +1,53 @@
+{ lib, fetchFromGitHub
+  , buildPythonApplication, buildPythonPackage
+  , pygobject3, pytest-runner, requests, responses, pytest, python-olm
+  , canonicaljson, olm
+}:
+let
+  mainsrc = fetchFromGitHub {
+    owner = "saadnpq";
+    repo = "matrixcli";
+    rev = "61ebde173ca2f77185c261c2b7f6db297ca89863";
+    sha256 = "sha256-eH/8b8IyfXqUo7odSECYF+84pXTsP+5S7pFR3oWXknU=";
+    fetchSubmodules = true;
+  };
+
+  sdk = buildPythonPackage rec {
+    name = "${pname}-${version}";
+    pname = "matrix-python-sdk-matrixcli";
+    version = "0.0.2019-08-15";
+
+    src = "${mainsrc}/matrix-python-sdk/";
+
+    propagatedBuildInputs = [
+      requests responses olm python-olm canonicaljson
+      pytest-runner pytest
+    ];
+
+    doCheck = false;
+    doInstallCheck = false;
+
+    meta = {
+      license = lib.licenses.asl20;
+      description = "Fork of Matrix Python SDK";
+      platforms = lib.platforms.linux;
+    };
+  };
+
+in
+buildPythonApplication rec {
+  pname = "matrixcli";
+  version = "0.0.2019-08-15";
+
+  src = mainsrc;
+
+  propagatedBuildInputs = [pygobject3 sdk];
+
+  meta = {
+    description = "CLI client for Matrix";
+    license = lib.licenses.gpl3;
+    maintainers = [lib.maintainers.raskin];
+    platforms = lib.platforms.linux;
+    homepage = "https://github.com/saadnpq/matrixcli";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/mattermost-desktop/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/mattermost-desktop/default.nix
new file mode 100644
index 000000000000..263610b65cb2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/mattermost-desktop/default.nix
@@ -0,0 +1,92 @@
+{ lib
+, stdenv
+, fetchurl
+, atomEnv
+, systemd
+, pulseaudio
+, libxshmfence
+, libnotify
+, libappindicator-gtk3
+, wrapGAppsHook
+, autoPatchelfHook
+}:
+
+let
+
+  pname = "mattermost-desktop";
+  version = "5.3.1";
+
+  srcs = {
+    "x86_64-linux" = {
+      url = "https://releases.mattermost.com/desktop/${version}/${pname}-${version}-linux-x64.tar.gz";
+      hash = "sha256-rw+SYCFmN2W4t5iIWEpV9VHxcvwTLOckMV58WRa5dZE=";
+    };
+
+    "aarch64-linux" = {
+      url = "https://releases.mattermost.com/desktop/${version}/${pname}-${version}-linux-arm64.tar.gz";
+      hash = "sha256-FEIldkb3FbUfVAYRkjs7oPRJDHdsIGDW5iaC2Qz1dpc=";
+    };
+  };
+
+  inherit (stdenv.hostPlatform) system;
+
+in
+
+stdenv.mkDerivation {
+  inherit pname version;
+
+  src = fetchurl (srcs."${system}" or (throw "Unsupported system ${system}"));
+
+  dontBuild = true;
+  dontConfigure = true;
+  dontStrip = true;
+
+  nativeBuildInputs = [ wrapGAppsHook autoPatchelfHook ];
+
+  buildInputs = atomEnv.packages ++ [
+    libxshmfence
+  ];
+
+  runtimeDependencies = [
+    (lib.getLib systemd)
+    pulseaudio
+    libnotify
+    libappindicator-gtk3
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    # Mattermost tarball comes with executable bit set for everything.
+    # We’ll apply it only to files that need it.
+    find . -type f -print0 | xargs -0 chmod -x
+    find . -type f \( -name '*.so.*' -o -name '*.s[oh]' \) -print0 | xargs -0 chmod +x
+    chmod +x mattermost-desktop chrome-sandbox
+
+    mkdir -p $out/share/mattermost-desktop
+    cp -R . $out/share/mattermost-desktop
+
+    mkdir -p "$out/bin"
+    ln -s $out/share/mattermost-desktop/mattermost-desktop $out/bin/mattermost-desktop
+
+    patchShebangs $out/share/mattermost-desktop/create_desktop_file.sh
+    $out/share/mattermost-desktop/create_desktop_file.sh
+    rm $out/share/mattermost-desktop/create_desktop_file.sh
+    mkdir -p $out/share/applications
+    chmod -x Mattermost.desktop
+    mv Mattermost.desktop $out/share/applications/Mattermost.desktop
+    substituteInPlace $out/share/applications/Mattermost.desktop \
+      --replace /share/mattermost-desktop/mattermost-desktop /bin/mattermost-desktop
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Mattermost Desktop client";
+    homepage = "https://about.mattermost.com/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.asl20;
+    platforms = [ "x86_64-linux" "aarch64-linux" ];
+    maintainers = [ maintainers.joko ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/mcabber/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/mcabber/default.nix
new file mode 100644
index 000000000000..3acd11a9a0d3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/mcabber/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchurl, fetchpatch, openssl, ncurses, pkg-config, glib, loudmouth, libotr
+, gpgme
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mcabber";
+  version = "1.1.2";
+
+  src = fetchurl {
+    url = "https://mcabber.com/files/mcabber-${version}.tar.bz2";
+    sha256 = "0q1i5acyghsmzas88qswvki8kkk2nfpr8zapgnxbcd3lwcxl38f4";
+  };
+
+  patches = [
+    # Pull upstream patch for ncurses-6.3.
+    (fetchpatch {
+      name = "ncurses-6.3.patch";
+      url = "https://github.com/McKael/mcabber/commit/5a0893d69023b77b7671731defbdca5d47731130.patch";
+      sha256 = "01bc23z0mva9l9jv587sq2r9w3diachgkmb9ad99hlzgj02fmq4v";
+      stripLen = 1;
+    })
+  ];
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ openssl ncurses glib loudmouth libotr gpgme ];
+
+  configureFlags = [
+    "--with-openssl=${openssl.dev}"
+    "--enable-modules"
+    "--enable-otr"
+  ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    homepage = "http://mcabber.com/";
+    description = "Small Jabber console client";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ pSub ];
+    platforms = with platforms; linux;
+    downloadPage = "http://mcabber.com/files/";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/default.nix
new file mode 100644
index 000000000000..b34ed84d044d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/default.nix
@@ -0,0 +1,159 @@
+{ lib
+, stdenv
+, fetchurl
+, bundlerEnv
+, alsa-utils
+, atk
+, copyDesktopItems
+, gobject-introspection
+, gtk2
+, ruby
+, libicns
+, libnotify
+, makeDesktopItem
+, which
+, wrapGAppsHook
+, writeText
+}:
+
+let
+  # NOTE: $out may have different values depending on context
+  mikutterPaths = rec {
+    optPrefixDir = "$out/opt/mikutter";
+    appPrefixDir = "$out/Applications/mikutter.app/Contents";
+    appBinDir = "${appPrefixDir}/MacOS";
+    appResourceDir = "${appPrefixDir}/Resources";
+    iconPath = "${optPrefixDir}/core/skin/data/icon.png";
+  };
+
+  gems = bundlerEnv {
+    name = "mikutter-gems"; # leave the version out to enable package reuse
+    gemdir = ./deps;
+    groups = [ "default" "plugin" ];
+    inherit ruby;
+
+    # Avoid the following error:
+    # > `<module:Moneta>': uninitialized constant Moneta::Builder (NameError)
+    #
+    # Related:
+    # https://github.com/NixOS/nixpkgs/pull/76510
+    # https://github.com/NixOS/nixpkgs/pull/76765
+    # https://github.com/NixOS/nixpkgs/issues/83442
+    # https://github.com/NixOS/nixpkgs/issues/106545
+    copyGemFiles = true;
+  };
+
+  mkDesktopItem = { description }:
+    makeDesktopItem {
+      name = "mikutter";
+      desktopName = "mikutter";
+      exec = "mikutter";
+      icon = "mikutter";
+      categories = [ "Network" ];
+      comment = description;
+      keywords = [ "Mastodon" ];
+    };
+
+  mkInfoPlist = { version }:
+    writeText "Info.plist" (lib.generators.toPlist { } {
+      CFBundleName = "mikutter";
+      CFBundleDisplayName = "mikutter";
+      CFBundleExecutable = "mikutter";
+      CFBundleIconFile = "mikutter";
+      CFBundleIdentifier = "net.hachune.mikutter";
+      CFBundleInfoDictionaryVersion = "6.0";
+      CFBundlePackageType = "APPL";
+      CFBundleVersion = version;
+      CFBundleShortVersionString = version;
+    });
+
+  inherit (gems) wrappedRuby;
+in
+with mikutterPaths; stdenv.mkDerivation rec {
+  pname = "mikutter";
+  version = "4.1.4";
+
+  src = fetchurl {
+    url = "https://mikutter.hachune.net/bin/mikutter-${version}.tar.gz";
+    sha256 = "05253nz4i1lmnq6czj48qdab2ny4vx2mznj6nsn2l1m2z6zqkwk3";
+  };
+
+  nativeBuildInputs = [ copyDesktopItems wrapGAppsHook gobject-introspection ]
+    ++ lib.optionals stdenv.isDarwin [ libicns ];
+  buildInputs = [
+    atk
+    gtk2
+    libnotify
+    which # some plugins use it at runtime
+    wrappedRuby
+  ] ++ lib.optionals stdenv.isLinux [ alsa-utils ];
+
+  scriptPath = lib.makeBinPath (
+    [ wrappedRuby libnotify which ]
+    ++ lib.optionals stdenv.isLinux [ alsa-utils ]
+  );
+
+  postUnpack = ''
+    rm -rf vendor
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin ${optPrefixDir}
+
+    install -Dm644 README $out/share/doc/mikutter/README
+    install -Dm644 LICENSE $out/share/doc/mikutter/LICENSE
+    rm -r README LICENSE deployment
+
+    cp -r . ${optPrefixDir}
+
+    gappsWrapperArgsHook # FIXME: currently runs at preFixup
+    wrapGApp ${optPrefixDir}/mikutter.rb \
+      --prefix PATH : "${scriptPath}" \
+      --set DISABLE_BUNDLER_SETUP 1
+    mv ${optPrefixDir}/mikutter.rb $out/bin/mikutter
+
+    install -Dm644 ${iconPath} $out/share/icons/hicolor/256x256/apps/mikutter.png
+
+    runHook postInstall
+  '';
+
+  postInstall =
+    let
+      infoPlist = mkInfoPlist { inherit version; };
+    in
+    lib.optionalString stdenv.isDarwin ''
+      mkdir -p ${appBinDir} ${appResourceDir}
+      install -Dm644 ${infoPlist} ${appPrefixDir}/Info.plist
+      ln -s $out/bin/mikutter ${appBinDir}/mikutter
+      png2icns ${appResourceDir}/mikutter.icns ${iconPath}
+    '';
+
+  installCheckPhase = ''
+    runHook preInstallCheck
+
+    testDir="$(mktemp -d)"
+    install -Dm644 ${./test_plugin.rb} "$testDir/plugin/test_plugin/test_plugin.rb"
+
+    $out/bin/mikutter --confroot="$testDir" --plugin=test_plugin --debug
+
+    runHook postInstallCheck
+  '';
+
+  desktopItems = [
+    (mkDesktopItem { inherit (meta) description; })
+  ];
+
+  doInstallCheck = true;
+  dontWrapGApps = true; # the target is placed outside of bin/
+
+  passthru.updateScript = [ ./update.sh version (toString ./.) ];
+
+  meta = with lib; {
+    description = "An extensible Mastodon client";
+    homepage = "https://mikutter.hachune.net";
+    platforms = ruby.meta.platforms;
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/deps/Gemfile b/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/deps/Gemfile
new file mode 100644
index 000000000000..fbe6a2f29c5d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/deps/Gemfile
@@ -0,0 +1,39 @@
+alias __source_distinct__ source
+def source(url)
+  @loaded ||= {}
+  unless @loaded[url]
+    @loaded[url] = true
+    __source_distinct__(url) end end
+
+source 'https://rubygems.org'
+
+ruby '>= 2.5.0'
+
+group :default do
+  gem 'addressable','>= 2.7.0', '< 2.8'
+  gem 'delayer','>= 1.1.2', '< 2.0'
+  gem 'delayer-deferred','>= 2.2.0', '< 3.0'
+  gem 'diva','>= 1.0.2', '< 2.0'
+  gem 'memoist','>= 0.16.2', '< 0.17'
+  gem 'oauth','>= 0.5.4'
+  gem 'pluggaloid','>= 1.5.0', '< 2.0'
+  gem 'typed-array','>= 0.1.2', '< 0.2'
+end
+
+group :test do
+  gem 'test-unit','>= 3.3.4', '< 4.0'
+  gem 'rake','>= 13.0.1'
+  gem 'mocha','>= 1.11.1'
+  gem 'webmock','>= 3.7.6'
+  gem 'ruby-prof','>= 1.1.0'
+end
+
+
+group :plugin do
+  Dir.glob(File.expand_path(File.join(__dir__, 'plugin/*/Gemfile'))){ |path|
+    eval File.open(path).read
+  }
+  Dir.glob(File.join(File.expand_path(ENV['MIKUTTER_CONFROOT'] || '~/.mikutter'), 'plugin/*/Gemfile')){ |path|
+    eval File.open(path).read
+  }
+end
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/deps/Gemfile.lock b/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/deps/Gemfile.lock
new file mode 100644
index 000000000000..92568056d52a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/deps/Gemfile.lock
@@ -0,0 +1,101 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    addressable (2.7.0)
+      public_suffix (>= 2.0.2, < 5.0)
+    atk (3.4.1)
+      glib2 (= 3.4.1)
+    cairo (1.17.5)
+      native-package-installer (>= 1.0.3)
+      pkg-config (>= 1.2.2)
+      red-colors
+    cairo-gobject (3.4.1)
+      cairo (>= 1.16.2)
+      glib2 (= 3.4.1)
+    crack (0.4.5)
+      rexml
+    delayer (1.2.0)
+    delayer-deferred (2.2.0)
+      delayer (>= 1.1.2, < 2.0)
+    diva (1.0.2)
+      addressable (>= 2.5.2, < 2.8)
+    gdk_pixbuf2 (3.4.1)
+      gio2 (= 3.4.1)
+    gettext (3.3.7)
+      locale (>= 2.0.5)
+      text (>= 1.3.0)
+    gio2 (3.4.1)
+      gobject-introspection (= 3.4.1)
+    glib2 (3.4.1)
+      native-package-installer (>= 1.0.3)
+      pkg-config (>= 1.3.5)
+    gobject-introspection (3.4.1)
+      glib2 (= 3.4.1)
+    gtk2 (3.4.1)
+      atk (= 3.4.1)
+      gdk_pixbuf2 (= 3.4.1)
+      pango (= 3.4.1)
+    hashdiff (1.0.1)
+    httpclient (2.8.3)
+    instance_storage (1.0.0)
+    locale (2.1.3)
+    memoist (0.16.2)
+    mini_portile2 (2.5.0)
+    mocha (1.12.0)
+    moneta (1.4.1)
+    native-package-installer (1.1.1)
+    nokogiri (1.11.3)
+      mini_portile2 (~> 2.5.0)
+      racc (~> 1.4)
+    oauth (0.5.6)
+    pango (3.4.1)
+      cairo-gobject (= 3.4.1)
+      gobject-introspection (= 3.4.1)
+    pkg-config (1.4.6)
+    pluggaloid (1.5.0)
+      delayer (>= 1.1.0, < 2.0)
+      instance_storage (>= 1.0.0, < 2.0.0)
+    power_assert (2.0.0)
+    public_suffix (4.0.6)
+    racc (1.5.2)
+    rake (13.0.3)
+    red-colors (0.1.1)
+    rexml (3.2.5)
+    ruby-prof (1.4.3)
+    test-unit (3.4.0)
+      power_assert
+    text (1.3.1)
+    typed-array (0.1.2)
+    webmock (3.12.2)
+      addressable (>= 2.3.6)
+      crack (>= 0.3.2)
+      hashdiff (>= 0.4.0, < 2.0.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  addressable (>= 2.7.0, < 2.8)
+  delayer (>= 1.1.2, < 2.0)
+  delayer-deferred (>= 2.2.0, < 3.0)
+  diva (>= 1.0.2, < 2.0)
+  gettext (>= 3.3.5, < 3.4)
+  gtk2 (= 3.4.1)
+  httpclient
+  memoist (>= 0.16.2, < 0.17)
+  mocha (>= 1.11.1)
+  moneta
+  nokogiri
+  oauth (>= 0.5.4)
+  pluggaloid (>= 1.5.0, < 2.0)
+  rake (>= 13.0.1)
+  ruby-prof (>= 1.1.0)
+  test-unit (>= 3.3.4, < 4.0)
+  typed-array (>= 0.1.2, < 0.2)
+  webmock (>= 3.7.6)
+
+RUBY VERSION
+   ruby 2.6.6p146
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/deps/gemset.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/deps/gemset.nix
new file mode 100644
index 000000000000..b45a36c6fec0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/deps/gemset.nix
@@ -0,0 +1,410 @@
+{
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fvchp2rhp2rmigx7qglf69xvjqvzq7x0g49naliw29r2bz656sy";
+      type = "gem";
+    };
+    version = "2.7.0";
+  };
+  atk = {
+    dependencies = ["glib2"];
+    groups = ["default" "plugin"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0a8q9a1f6x4gy55p8cf52a22bnpjgn18ad9n959x0f4gybbhs948";
+      type = "gem";
+    };
+    version = "3.4.1";
+  };
+  cairo = {
+    dependencies = ["native-package-installer" "pkg-config" "red-colors"];
+    groups = ["default" "plugin"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0vbj9szp2xbnxqan8hppip8vm9fxpcmpx745y5fvg2scdh9f0p7s";
+      type = "gem";
+    };
+    version = "1.17.5";
+  };
+  cairo-gobject = {
+    dependencies = ["cairo" "glib2"];
+    groups = ["default" "plugin"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gkxdfslcvrwrs48giilji3bgxd5bwijwq33p9h00r10jzfg2028";
+      type = "gem";
+    };
+    version = "3.4.1";
+  };
+  crack = {
+    dependencies = ["rexml"];
+    groups = ["default" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1cr1kfpw3vkhysvkk3wg7c54m75kd68mbm9rs5azdjdq57xid13r";
+      type = "gem";
+    };
+    version = "0.4.5";
+  };
+  delayer = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0iqf4i18i8rk3x7qgvkhbiqskf0xzdf733fjimrq6xkag2mq60bl";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  delayer-deferred = {
+    dependencies = ["delayer"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0i2das3ncssacpqdgaf4as77vrxm7jfiizaja884fqv4rzv6s2sv";
+      type = "gem";
+    };
+    version = "2.2.0";
+  };
+  diva = {
+    dependencies = ["addressable"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05wl4wg57vvng4nrp4lzjq148v908xzq092kq93phwvyxs7jnw2g";
+      type = "gem";
+    };
+    version = "1.0.2";
+  };
+  gdk_pixbuf2 = {
+    dependencies = ["gio2"];
+    groups = ["default" "plugin"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0194gzn0kialfh0j7crllvp808r64sg6dh297x69b0av21ar5pam";
+      type = "gem";
+    };
+    version = "3.4.1";
+  };
+  gettext = {
+    dependencies = ["locale" "text"];
+    groups = ["default" "plugin"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fqlwq7i8ck1fjyhn19q3skvgrbz44q7gq51mlr0qym5rkj5f6rn";
+      type = "gem";
+    };
+    version = "3.3.7";
+  };
+  gio2 = {
+    dependencies = ["gobject-introspection"];
+    groups = ["default" "plugin"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1l3jpgbdvb55xhcmpkcqgwx5068dfyi8kijfvzhbqh96ng0p1m7g";
+      type = "gem";
+    };
+    version = "3.4.1";
+  };
+  glib2 = {
+    dependencies = ["native-package-installer" "pkg-config"];
+    groups = ["default" "plugin"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18clyn0fp0h5alnkf9i2bqd6wvl78h468pdbzs1csqnba8vw4q1c";
+      type = "gem";
+    };
+    version = "3.4.1";
+  };
+  gobject-introspection = {
+    dependencies = ["glib2"];
+    groups = ["default" "plugin"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1a3x8qiisbax3x0izj8l5w66r53ba5ma53ax2jhdbhbvaxx3d02n";
+      type = "gem";
+    };
+    version = "3.4.1";
+  };
+  gtk2 = {
+    dependencies = ["atk" "gdk_pixbuf2" "pango"];
+    groups = ["plugin"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17az8g0n1yzz90kdbjg2hpabi04qccda7v6lin76bs637ivfg2md";
+      type = "gem";
+    };
+    version = "3.4.1";
+  };
+  hashdiff = {
+    groups = ["default" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nynpl0xbj0nphqx1qlmyggq58ms1phf5i03hk64wcc0a17x1m1c";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  httpclient = {
+    groups = ["plugin"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19mxmvghp7ki3klsxwrlwr431li7hm1lczhhj8z4qihl2acy8l99";
+      type = "gem";
+    };
+    version = "2.8.3";
+  };
+  instance_storage = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08nf5fhq9dckq9lmaklxydq0hrlfi7phk66gr3bggxg45zd687pl";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  locale = {
+    groups = ["default" "plugin"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0997465kxvpxm92fiwc2b16l49mngk7b68g5k35ify0m3q0yxpdn";
+      type = "gem";
+    };
+    version = "2.1.3";
+  };
+  memoist = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0i9wpzix3sjhf6d9zw60dm4371iq8kyz7ckh2qapan2vyaim6b55";
+      type = "gem";
+    };
+    version = "0.16.2";
+  };
+  mini_portile2 = {
+    groups = ["default" "plugin"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hdbpmamx8js53yk3h8cqy12kgv6ca06k0c9n3pxh6b6cjfs19x7";
+      type = "gem";
+    };
+    version = "2.5.0";
+  };
+  mocha = {
+    groups = ["test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05yw6rwgjppq116jgqfg4pv4bql3ci4r2fmmg0m2c3sqib1bq41a";
+      type = "gem";
+    };
+    version = "1.12.0";
+  };
+  moneta = {
+    groups = ["plugin"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0z25b4yysvnf2hi9jxnsiv3fvnicnzr2m70ci231av5093jfknc6";
+      type = "gem";
+    };
+    version = "1.4.1";
+  };
+  native-package-installer = {
+    groups = ["default" "plugin"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ww1mq41q7rda975byjmq5dk8k13v8dawvm33370pbkrymd8syp8";
+      type = "gem";
+    };
+    version = "1.1.1";
+  };
+  nokogiri = {
+    dependencies = ["mini_portile2" "racc"];
+    groups = ["plugin"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19d78mdg2lbz9jb4ph6nk783c9jbsdm8rnllwhga6pd53xffp6x0";
+      type = "gem";
+    };
+    version = "1.11.3";
+  };
+  oauth = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zwd6v39yqfdrpg1p3d9jvzs9ljg55ana2p06m0l7qn5w0lgx1a0";
+      type = "gem";
+    };
+    version = "0.5.6";
+  };
+  pango = {
+    dependencies = ["cairo-gobject" "gobject-introspection"];
+    groups = ["default" "plugin"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1d0cn50qgpifrcv8qx72wi6l9xalw3ryngbfmm9xpg9vx5rl1qbp";
+      type = "gem";
+    };
+    version = "3.4.1";
+  };
+  pkg-config = {
+    groups = ["default" "plugin"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mjjy1grxr64znkffxsvprcckbrrnm40b6gbllnbm7jxslbr3gjl";
+      type = "gem";
+    };
+    version = "1.4.6";
+  };
+  pluggaloid = {
+    dependencies = ["delayer" "instance_storage"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0m3f940lf1bg01jin22by7hg9hs43y995isgcyqb6vbvlv51zj11";
+      type = "gem";
+    };
+    version = "1.5.0";
+  };
+  power_assert = {
+    groups = ["default" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "172qfmzwxdf82bmwgcb13hnz9i3p6i2s2nijxnx6r63kn3drjppr";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  public_suffix = {
+    groups = ["default" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1xqcgkl7bwws1qrlnmxgh8g4g9m10vg60bhlw40fplninb3ng6d9";
+      type = "gem";
+    };
+    version = "4.0.6";
+  };
+  racc = {
+    groups = ["default" "plugin"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "178k7r0xn689spviqzhvazzvxfq6fyjldxb3ywjbgipbfi4s8j1g";
+      type = "gem";
+    };
+    version = "1.5.2";
+  };
+  rake = {
+    groups = ["test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1iik52mf9ky4cgs38fp2m8r6skdkq1yz23vh18lk95fhbcxb6a67";
+      type = "gem";
+    };
+    version = "13.0.3";
+  };
+  red-colors = {
+    groups = ["default" "plugin"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ar2k7zvhr1215jx5di29hkg5h1798f1gypmq6v0sy9v35w6ijca";
+      type = "gem";
+    };
+    version = "0.1.1";
+  };
+  rexml = {
+    groups = ["default" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08ximcyfjy94pm1rhcx04ny1vx2sk0x4y185gzn86yfsbzwkng53";
+      type = "gem";
+    };
+    version = "3.2.5";
+  };
+  ruby-prof = {
+    groups = ["test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1r3xalp91l07m0cwllcxjzg6nkviiqnxkcbgg5qnzsdji6rgy65m";
+      type = "gem";
+    };
+    version = "1.4.3";
+  };
+  test-unit = {
+    dependencies = ["power_assert"];
+    groups = ["test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1h0c323zfn4hdida4g58h8wnlh4kax438gyxlw20dd78kcp01i8m";
+      type = "gem";
+    };
+    version = "3.4.0";
+  };
+  text = {
+    groups = ["default" "plugin"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1x6kkmsr49y3rnrin91rv8mpc3dhrf3ql08kbccw8yffq61brfrg";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  typed-array = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qlv2rnkin9rwkgjx3k5qvc17m0m7jf5cdirw3wxbjnw5kga27w9";
+      type = "gem";
+    };
+    version = "0.1.2";
+  };
+  webmock = {
+    dependencies = ["addressable" "crack" "hashdiff"];
+    groups = ["test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "038igpmkpmn0nw0k7s4db8x88af1nwcy7wzh9m9c9q4p74h7rii0";
+      type = "gem";
+    };
+    version = "3.12.2";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/deps/plugin/gtk/Gemfile b/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/deps/plugin/gtk/Gemfile
new file mode 100644
index 000000000000..3306c29e3cbf
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/deps/plugin/gtk/Gemfile
@@ -0,0 +1,4 @@
+source 'https://rubygems.org'
+
+gem 'gtk2', '3.4.1'
+
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/deps/plugin/image_file_cache/Gemfile b/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/deps/plugin/image_file_cache/Gemfile
new file mode 100644
index 000000000000..f86005fef078
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/deps/plugin/image_file_cache/Gemfile
@@ -0,0 +1 @@
+gem 'moneta'
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/deps/plugin/photo_support/Gemfile b/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/deps/plugin/photo_support/Gemfile
new file mode 100644
index 000000000000..66016eee9c46
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/deps/plugin/photo_support/Gemfile
@@ -0,0 +1,4 @@
+source 'https://rubygems.org'
+
+gem 'nokogiri'
+gem 'httpclient'
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/deps/plugin/uitranslator/Gemfile b/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/deps/plugin/uitranslator/Gemfile
new file mode 100644
index 000000000000..08b4831dfc66
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/deps/plugin/uitranslator/Gemfile
@@ -0,0 +1,5 @@
+source 'https://rubygems.org'
+
+group :default do
+  gem 'gettext', '>= 3.3.5', '< 3.4'
+end
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/test_plugin.rb b/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/test_plugin.rb
new file mode 100644
index 000000000000..b19c15cd304f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/test_plugin.rb
@@ -0,0 +1,10 @@
+# Tests mikutter's event system.
+
+Plugin.create(:test_plugin) do
+  require 'logger'
+  Delayer.new do
+    log = Logger.new(STDOUT)
+    log.info("loaded test_plugin")
+    exit
+  end
+end
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/update.sh b/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/update.sh
new file mode 100755
index 000000000000..142fd8ca9424
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/update.sh
@@ -0,0 +1,51 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p bundler bundix curl jq common-updater-scripts
+# shellcheck shell=bash
+
+set -euo pipefail
+
+main() {
+    local currentVer="$1"
+    local scriptDir="$2"
+    local latestVer
+    local srcDir
+
+    if [[ -z "$UPDATE_NIX_ATTR_PATH" ]]; then
+        echo "[ERROR] Please run the following instead:" >&2
+        echo >&2
+        echo "    % nix-shell maintainers/scripts/update.nix --argstr path mikutter" >&2
+        exit 1
+    fi
+
+    latestVer="$(queryLatestVersion)"
+    if [[ "$currentVer" == "$latestVer" ]]; then
+        echo "[INFO] mikutter is already up to date" >&2
+        exit
+    fi
+
+    update-source-version "$UPDATE_NIX_ATTR_PATH" "$latestVer"
+
+    cd "$scriptDir"
+
+    rm -rf deps
+    mkdir deps
+    cd deps
+
+    srcDir="$(nix-build ../../../../../.. --no-out-link -A mikutter.src)"
+    tar xvf "$srcDir" --strip-components=1
+    find . -not -name Gemfile -exec rm {} \;
+    find . -type d -exec rmdir -p --ignore-fail-on-non-empty {} \; || true
+
+    bundle lock
+    bundix
+}
+
+queryLatestVersion() {
+    curl -sS 'https://mikutter.hachune.net/download.json?count=1' \
+        | jq -r '.[].version_string' \
+        | head -n1
+}
+
+main "$@"
+
+# vim:set ft=bash:
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/mirage/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/mirage/default.nix
new file mode 100644
index 000000000000..b6c9f61f821e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/mirage/default.nix
@@ -0,0 +1,92 @@
+{ lib
+, stdenv
+, mkDerivation
+, fetchFromGitHub
+, libXScrnSaver
+, olm
+, pkg-config
+, pyotherside
+, python3Packages
+, qmake
+, qtbase
+, qtgraphicaleffects
+, qtkeychain
+, qtmultimedia
+, qtquickcontrols2
+, wrapQtAppsHook
+}:
+
+mkDerivation rec {
+  pname = "mirage";
+  version = "0.7.2";
+
+  src = fetchFromGitHub {
+    owner = "mirukana";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-dJS4lAXHHNUEAG75gQaS9+aQTTTj8KHqHjISioynFdY=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    python3Packages.wrapPython
+    qmake
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    libXScrnSaver
+    olm
+    pyotherside
+    qtbase
+    qtgraphicaleffects
+    qtkeychain
+    qtmultimedia
+    qtquickcontrols2
+  ] ++ pythonPath;
+
+  pythonPath = with python3Packages; [
+    pillow
+    aiofiles
+    appdirs
+    cairosvg
+    filetype
+    html-sanitizer
+    lxml
+    mistune
+    pymediainfo
+    plyer
+    sortedcontainers
+    watchgod
+    redbaron
+    hsluv
+    simpleaudio
+    setuptools
+    watchgod
+    dbus-python
+    matrix-nio
+  ] ++ matrix-nio.optional-dependencies.e2e;
+
+  qmakeFlags = [
+    "PREFIX=${placeholder "out"}"
+    "CONFIG+=qtquickcompiler"
+  ];
+
+  dontWrapQtApps = true;
+  postInstall = ''
+    buildPythonPath "$out $pythonPath"
+    wrapProgram $out/bin/mirage \
+      --prefix PYTHONPATH : "$PYTHONPATH" \
+      "''${qtWrapperArgs[@]}"
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/mirukana/mirage";
+    description = "A fancy, customizable, keyboard-operable Qt/QML+Python Matrix chat client for encrypted and decentralized communication";
+    license = licenses.lgpl3Plus;
+    maintainers = with maintainers; [ colemickens AndersonTorres ];
+    inherit (qtbase.meta) platforms;
+    broken = stdenv.isDarwin || python3Packages.isPy37 || python3Packages.isPy38;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/mm/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/mm/default.nix
new file mode 100644
index 000000000000..b6c48a0e948c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/mm/default.nix
@@ -0,0 +1,21 @@
+{ lib, buildGoModule, fetchgit }:
+
+buildGoModule {
+  pname = "mm";
+  version = "2020.11.17";
+
+  src = fetchgit {
+    url = "https://git.lost.host/meutraa/mm.git";
+    rev = "e5fa8eeb845aac8f28fc36013ee8a1dbe1e5710c";
+    sha256 = "sha256-SdD4EE/rc85H7xqKB/kU8XFsC63i1sVObPha/zrxFGk=";
+  };
+
+  vendorHash = "sha256-zJJ9PzQShv2iRNyCg1XVscbwjV9ZtMIojJDtXXm3rVM=";
+
+  meta = with lib; {
+    description = "A file system based matrix client";
+    homepage = "https://git.lost.host/meutraa/mm";
+    license = licenses.isc;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/nchat/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/nchat/default.nix
new file mode 100644
index 000000000000..1c4f8ca811b0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/nchat/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv,  fetchFromGitHub, cmake, gperf
+, file, ncurses, openssl, readline, sqlite, zlib
+, AppKit, Cocoa, Foundation
+}:
+
+stdenv.mkDerivation rec {
+  pname = "nchat";
+  version = "3.60";
+
+  src = fetchFromGitHub {
+    owner = "d99kris";
+    repo = "nchat";
+    rev = "v${version}";
+    hash = "sha256-Fe+Cdh8NlrCkzSO/Juw96eXtGfXajhFIsKeTC3qXIlU=";
+  };
+
+  postPatch = ''
+    substituteInPlace lib/tgchat/ext/td/CMakeLists.txt \
+      --replace "get_git_head_revision" "#get_git_head_revision"
+  '';
+
+  nativeBuildInputs = [ cmake gperf ];
+
+  buildInputs = [
+    file # for libmagic
+    ncurses
+    openssl
+    readline
+    sqlite
+    zlib
+  ] ++ lib.optionals stdenv.isDarwin [ AppKit Cocoa Foundation ];
+
+  cmakeFlags = [
+    "-DHAS_WHATSAPP=OFF" # go module build required
+  ];
+
+  meta = with lib; {
+    description = "Terminal-based chat client with support for Telegram and WhatsApp";
+    homepage = "https://github.com/d99kris/nchat";
+    license = licenses.mit;
+    maintainers = with maintainers; [ sikmir ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/neosay/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/neosay/default.nix
new file mode 100644
index 000000000000..4d9b70dd1e2e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/neosay/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "neosay";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "donuts-are-good";
+    repo = "neosay";
+    rev = "v${version}";
+    hash = "sha256-Uwz6Y26AtzWXLFgJY0WVD0HBb+vbMeeMKt8gCk6viec=";
+  };
+
+  vendorHash = "sha256-w0aZnel5Obq73UXcG9wmO9t/7qQTE8ru656u349cvzQ=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Pipe stdin to matrix";
+    homepage = "https://github.com/donuts-are-good/neosay";
+    license = licenses.mit;
+    maintainers = with maintainers; [ janik ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/nheko/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/nheko/default.nix
new file mode 100644
index 000000000000..acc6f8948fc0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/nheko/default.nix
@@ -0,0 +1,118 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, cmake
+, asciidoc
+, pkg-config
+, boost179
+, cmark
+, coeurl
+, curl
+, libevent
+, libsecret
+, lmdb
+, lmdbxx
+, mtxclient
+, nlohmann_json
+, olm
+, qtbase
+, qtgraphicaleffects
+, qtimageformats
+, qtkeychain
+, qtmacextras
+, qtmultimedia
+, qtquickcontrols2
+, qttools
+, re2
+, spdlog
+, wrapQtAppsHook
+, voipSupport ? true
+, gst_all_1
+, libnice
+}:
+
+stdenv.mkDerivation rec {
+  pname = "nheko";
+  version = "0.11.3";
+
+  src = fetchFromGitHub {
+    owner = "Nheko-Reborn";
+    repo = "nheko";
+    rev = "v${version}";
+    hash = "sha256-2daXxTbpSUlig47y901JOkWRxbZGH4qrvNMepJbvS3o=";
+  };
+
+  patches = [
+    # The 2 following patches can be removed with the next version bump.
+    # Backport of https://github.com/Nheko-Reborn/nheko/commit/e89e65dc17020772eb057414b4f0c5d6f4ad98d0.
+    (fetchpatch {
+      name = "nheko-fmt10.patch";
+      url = "https://gitlab.archlinux.org/archlinux/packaging/packages/nheko/-/raw/1b0d5c9eff6409dfd82953f346546d36c288a4a9/nheko-0.11.3-fix-for-fmt-10.patch";
+      hash = "sha256-UYqAu2iXT3Bn/MxCtybiJrJLfVMOOVRchWqrGuPfapI=";
+    })
+    # https://github.com/Nheko-Reborn/nheko/pull/1552
+    (fetchpatch {
+      name = "nheko-fmt10.1.patch";
+      url = "https://github.com/Nheko-Reborn/nheko/commit/614facf93c2b5d6118beb822cc542ac53a883c37.patch";
+      hash = "sha256-rjsQNDfj3Lzbv8ow3qiNozGXQFrtYLhArS6a9JCdgBQ=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    asciidoc
+    cmake
+    lmdbxx
+    pkg-config
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    boost179
+    cmark
+    coeurl
+    curl
+    libevent
+    libsecret
+    lmdb
+    mtxclient
+    nlohmann_json
+    olm
+    qtbase
+    qtgraphicaleffects
+    qtimageformats
+    qtkeychain
+    qtmultimedia
+    qtquickcontrols2
+    qttools
+    re2
+    spdlog
+  ] ++ lib.optional stdenv.isDarwin qtmacextras
+  ++ lib.optionals voipSupport (with gst_all_1; [
+    gstreamer
+    gst-plugins-base
+    (gst-plugins-good.override { qt5Support = true; })
+    gst-plugins-bad
+    libnice
+  ]);
+
+  cmakeFlags = [
+    "-DCOMPILE_QML=ON" # see https://github.com/Nheko-Reborn/nheko/issues/389
+  ];
+
+  preFixup = lib.optionalString voipSupport ''
+    # add gstreamer plugins path to the wrapper
+    qtWrapperArgs+=(--prefix GST_PLUGIN_SYSTEM_PATH_1_0 : "$GST_PLUGIN_SYSTEM_PATH_1_0")
+  '';
+
+  meta = with lib; {
+    description = "Desktop client for the Matrix protocol";
+    homepage = "https://github.com/Nheko-Reborn/nheko";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ ekleog fpletz ];
+    platforms = platforms.all;
+    # Should be fixable if a higher clang version is used, see:
+    # https://github.com/NixOS/nixpkgs/pull/85922#issuecomment-619287177
+    broken = stdenv.hostPlatform.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/oysttyer/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/oysttyer/default.nix
new file mode 100644
index 000000000000..5dc09ae1f3ee
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/oysttyer/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, lib, perl, perlPackages, coreutils,
+fetchFromGitHub, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "oysttyer";
+  version = "2.10.0";
+
+  src = fetchFromGitHub {
+    owner  = "oysttyer";
+    repo   = "oysttyer";
+    rev    = version;
+    sha256 = "0cm1hvi68iqgjsg15xdii271pklgzjn9j9afb1c460z71kgy3wz2";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [
+    perl
+  ];
+
+  propagatedBuildInputs = with perlPackages; [
+    DateTimeFormatDateParse
+    TermReadLineTTYtter
+    TermReadKey
+  ];
+
+  installPhase = ''
+    ${coreutils}/bin/install -Dm755 \
+      oysttyer.pl \
+      $out/bin/oysttyer
+
+    wrapProgram $out/bin/oysttyer \
+      --prefix PERL5LIB : $PERL5LIB
+  '';
+
+  meta = with lib; {
+    description = "Perl Console Twitter Client";
+    homepage    = "http://oysttyer.github.io/";
+    maintainers = with maintainers; [ woffs ];
+    license = with licenses; [ ffsl ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pantalaimon/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pantalaimon/default.nix
new file mode 100644
index 000000000000..dbe944d189b6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pantalaimon/default.nix
@@ -0,0 +1,78 @@
+{ lib, stdenv, buildPythonApplication, fetchFromGitHub, pythonOlder,
+  attrs, aiohttp, appdirs, click, keyring, logbook, peewee, janus,
+  prompt-toolkit, matrix-nio, dbus-python, pydbus, notify2, pygobject3,
+  setuptools, installShellFiles, nixosTests,
+
+  pytest, faker, pytest-aiohttp, aioresponses,
+
+  enableDbusUi ? true
+}:
+
+buildPythonApplication rec {
+  pname = "pantalaimon";
+  version = "0.10.5";
+
+  disabled = pythonOlder "3.6";
+
+  # pypi tarball miss tests
+  src = fetchFromGitHub {
+    owner = "matrix-org";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-yMhE3wKRbFHoL0vdFR8gMkNU7Su4FHbAwKQYADaaWpk=";
+  };
+
+  propagatedBuildInputs = [
+    aiohttp
+    appdirs
+    attrs
+    click
+    janus
+    keyring
+    logbook
+    matrix-nio
+    peewee
+    prompt-toolkit
+    setuptools
+  ]
+  ++ matrix-nio.optional-dependencies.e2e
+  ++ lib.optionals enableDbusUi [
+      dbus-python
+      notify2
+      pygobject3
+      pydbus
+  ];
+
+  nativeCheckInputs = [
+    pytest
+    faker
+    pytest-aiohttp
+    aioresponses
+  ];
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  # darwin has difficulty communicating with server, fails some integration tests
+  doCheck = !stdenv.isDarwin;
+
+  checkPhase = ''
+    pytest
+  '';
+
+  postInstall = ''
+    installManPage docs/man/*.[1-9]
+  '';
+
+  passthru.tests = {
+    inherit (nixosTests) pantalaimon;
+  };
+
+  meta = with lib; {
+    description = "An end-to-end encryption aware Matrix reverse proxy daemon";
+    homepage = "https://github.com/matrix-org/pantalaimon";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ valodim ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/add-search-path.patch b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/add-search-path.patch
new file mode 100644
index 000000000000..b0758777186a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/add-search-path.patch
@@ -0,0 +1,20 @@
+diff --git a/libpurple/plugin.c b/libpurple/plugin.c
+index 4f2b402..fda9add 100644
+--- a/libpurple/plugin.c
++++ b/libpurple/plugin.c
+@@ -1181,8 +1181,15 @@ purple_plugins_get_handle(void) {
+ void
+ purple_plugins_init(void) {
+ 	void *handle = purple_plugins_get_handle();
++	gchar **paths, **p;
+ 
+ 	purple_plugins_add_search_path(LIBDIR);
++	paths = g_strsplit(g_getenv("PURPLE_PLUGIN_PATH"), ":", -1);
++	if (paths) {
++		for (p = paths; *p; ++p)
++			if (**p) purple_plugins_add_search_path(*p);
++	}
++	g_strfreev(paths);
+ 
+ 	purple_signal_register(handle, "plugin-load",
+ 						 purple_marshal_VOID__POINTER,
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/default.nix
new file mode 100644
index 000000000000..1314853ad668
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/default.nix
@@ -0,0 +1,149 @@
+{ stdenv
+, callPackage
+, fetchurl
+, makeWrapper
+, aspell
+, avahi
+, cacert
+, dbus
+, dbus-glib
+, farstream
+, gettext
+, gst_all_1
+, gtk2
+, gtk2-x11
+, gtkspell2
+, intltool
+, lib
+, libICE
+, libSM
+, libXScrnSaver
+, libXext
+, libgcrypt
+, libgnt
+, libidn
+, libstartup_notification
+, libxml2
+, ncurses
+, nspr
+, nss
+, perlPackages
+, pkg-config
+, python3
+, pidgin
+, plugins        ? []
+, withOpenssl    ? false, openssl
+, withGnutls     ? false , gnutls
+, withCyrus_sasl ? true, cyrus_sasl
+, pidginPackages
+}:
+
+# FIXME: clean the mess around choosing the SSL library (nss by default)
+
+let
+  unwrapped = stdenv.mkDerivation rec {
+    pname = "pidgin";
+    version = "2.14.12";
+
+    src = fetchurl {
+      url = "mirror://sourceforge/pidgin/pidgin-${version}.tar.bz2";
+      sha256 = "sha256-KwUka+IIYF7buTrp7cB5WD1EniqXENttNI0X9ZAgpLc=";
+    };
+
+    nativeBuildInputs = [ makeWrapper intltool ];
+
+    env.NIX_CFLAGS_COMPILE = "-I${gst_all_1.gst-plugins-base.dev}/include/gstreamer-1.0";
+
+    buildInputs = let
+      python-with-dbus = python3.withPackages (pp: with pp; [ dbus-python ]);
+    in [
+      aspell
+      avahi
+      cyrus_sasl
+      dbus
+      dbus-glib
+      gst_all_1.gst-plugins-base gst_all_1.gst-plugins-good
+      gst_all_1.gstreamer
+      libICE
+      libSM
+      libXScrnSaver
+      libXext
+      libgnt
+      libidn
+      libstartup_notification
+      libxml2
+      ncurses # optional: build finch - the console UI
+      nspr
+      nss
+      python-with-dbus
+    ]
+    ++ lib.optional withOpenssl openssl
+    ++ lib.optionals withGnutls [ gnutls libgcrypt ]
+    ++ lib.optionals stdenv.isLinux [ gtk2 gtkspell2 farstream ]
+    ++ lib.optional stdenv.isDarwin gtk2-x11;
+
+
+    propagatedBuildInputs = [ pkg-config gettext ]
+      ++ (with perlPackages; [ perl XMLParser ])
+      ++ lib.optional stdenv.isLinux gtk2
+      ++ lib.optional stdenv.isDarwin gtk2-x11;
+
+    patches = [
+      ./add-search-path.patch
+      ./pidgin-makefile.patch
+    ];
+
+    configureFlags = [
+      "--with-nspr-includes=${nspr.dev}/include/nspr"
+      "--with-nspr-libs=${nspr.out}/lib"
+      "--with-nss-includes=${nss.dev}/include/nss"
+      "--with-nss-libs=${nss.out}/lib"
+      "--with-ncurses-headers=${ncurses.dev}/include"
+      "--with-system-ssl-certs=${cacert}/etc/ssl/certs"
+      "--disable-meanwhile"
+      "--disable-nm"
+      "--disable-tcl"
+      "--disable-gevolution"
+    ]
+    ++ lib.optionals withCyrus_sasl [ "--enable-cyrus-sasl=yes" ]
+    ++ lib.optionals withGnutls [ "--enable-gnutls=yes" "--enable-nss=no" ]
+    ++ lib.optionals stdenv.isDarwin [ "--disable-gtkspell" "--disable-vv" ];
+
+    enableParallelBuilding = true;
+
+    postInstall = ''
+      wrapProgram $out/bin/pidgin \
+        --prefix GST_PLUGIN_SYSTEM_PATH_1_0 : "$GST_PLUGIN_SYSTEM_PATH_1_0"
+    '';
+
+    doInstallCheck = stdenv.hostPlatform == stdenv.buildPlatform;
+    # In particular, this detects missing python imports in some of the tools.
+    postFixup = let
+      # TODO: python is a script, so it doesn't work as interpreter on darwin
+      binsToTest = lib.optionalString stdenv.isLinux "purple-remote," + "pidgin,finch";
+    in lib.optionalString doInstallCheck ''
+      for f in "''${!outputBin}"/bin/{${binsToTest}}; do
+        echo "Testing: $f --help"
+        "$f" --help
+      done
+    '';
+
+    passthru = {
+      makePluginPath = lib.makeSearchPathOutput "lib" "lib/purple-${lib.versions.major version}";
+      withPlugins = pluginfn: callPackage ./wrapper.nix {
+        plugins = pluginfn pidginPackages;
+        pidgin = unwrapped;
+      };
+    };
+
+    meta = {
+      description = "Multi-protocol instant messaging client";
+      homepage = "https://pidgin.im/";
+      license = lib.licenses.gpl2Plus;
+      platforms = lib.platforms.unix;
+      maintainers = [ lib.maintainers.lucasew ];
+    };
+  };
+
+in if plugins == [] then unwrapped
+  else unwrapped.withPlugins (_: plugins)
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-makefile.patch b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-makefile.patch
new file mode 100644
index 000000000000..049d404a8d5f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-makefile.patch
@@ -0,0 +1,64 @@
+diff --git a/pidgin/Makefile.am b/pidgin/Makefile.am
+index 84d927b..1467c19 100644
+--- a/pidgin/Makefile.am
++++ b/pidgin/Makefile.am
+@@ -151,6 +151,7 @@ pidgin_LDADD = \
+ 	$(GLIB_LIBS) \
+ 	$(DBUS_LIBS) \
+ 	$(GSTREAMER_LIBS) \
++	$(GSTINTERFACES_LIBS) \
+ 	$(GSTVIDEO_LIBS) \
+ 	$(XSS_LIBS) \
+ 	$(SM_LIBS) \
+@@ -171,6 +172,7 @@ AM_CPPFLAGS = \
+ 	-I$(top_srcdir) \
+ 	$(GLIB_CFLAGS) \
+ 	$(GSTREAMER_CFLAGS) \
++	$(GSTINTERFACES_CFLAGS) \
+ 	$(DEBUG_CFLAGS) \
+ 	$(GTK_CFLAGS) \
+ 	$(DBUS_CFLAGS) \
+diff --git a/pidgin/Makefile.in b/pidgin/Makefile.in
+index 0d51e25..dd5d879 100644
+--- a/pidgin/Makefile.in
++++ b/pidgin/Makefile.in
+@@ -703,6 +703,7 @@ EXTRA_DIST = \
+ @ENABLE_GTK_TRUE@	$(GLIB_LIBS) \
+ @ENABLE_GTK_TRUE@	$(DBUS_LIBS) \
+ @ENABLE_GTK_TRUE@	$(GSTREAMER_LIBS) \
++@ENABLE_GTK_TRUE@	$(GSTINTERFACES_LIBS) \
+ @ENABLE_GTK_TRUE@	$(GSTVIDEO_LIBS) \
+ @ENABLE_GTK_TRUE@	$(XSS_LIBS) \
+ @ENABLE_GTK_TRUE@	$(SM_LIBS) \
+@@ -723,6 +724,7 @@ EXTRA_DIST = \
+ @ENABLE_GTK_TRUE@	-I$(top_srcdir) \
+ @ENABLE_GTK_TRUE@	$(GLIB_CFLAGS) \
+ @ENABLE_GTK_TRUE@	$(GSTREAMER_CFLAGS) \
++@ENABLE_GTK_TRUE@	$(GSTINTERFACES_CFLAGS) \
+ @ENABLE_GTK_TRUE@	$(DEBUG_CFLAGS) \
+ @ENABLE_GTK_TRUE@	$(GTK_CFLAGS) \
+ @ENABLE_GTK_TRUE@	$(DBUS_CFLAGS) \
+diff --git a/pidgin/plugins/Makefile.am b/pidgin/plugins/Makefile.am
+index 3bb8c22..6d1e869 100644
+--- a/pidgin/plugins/Makefile.am
++++ b/pidgin/plugins/Makefile.am
+@@ -145,6 +145,7 @@ AM_CPPFLAGS = \
+ 	$(GTK_CFLAGS) \
+ 	$(UNITY_CFLAGS) \
+ 	$(GSTREAMER_CFLAGS) \
++	$(GSTINTERFACES_CFLAGS) \
+ 	$(PLUGIN_CFLAGS)
+ 
+ #
+diff --git a/pidgin/plugins/Makefile.in b/pidgin/plugins/Makefile.in
+index 82a34aa..1f7db00 100644
+--- a/pidgin/plugins/Makefile.in
++++ b/pidgin/plugins/Makefile.in
+@@ -781,6 +781,7 @@ AM_CPPFLAGS = \
+ 	$(GTK_CFLAGS) \
+ 	$(UNITY_CFLAGS) \
+ 	$(GSTREAMER_CFLAGS) \
++	$(GSTINTERFACES_CFLAGS) \
+ 	$(PLUGIN_CFLAGS)
+ 
+ 
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/carbons/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/carbons/default.nix
new file mode 100644
index 000000000000..f702a667ae16
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/carbons/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, libxml2, pidgin, pkg-config, fetchFromGitHub } :
+
+stdenv.mkDerivation rec {
+  pname = "pidgin-carbons";
+  version = "0.2.3";
+
+  src = fetchFromGitHub {
+    owner = "gkdr";
+    repo  = "carbons";
+    rev   = "v${version}";
+    sha256 = "sha256-qiyIvmJbRmCrAi/93UxDVtO76nSdtzUVfT/sZGxxAh8=";
+  };
+
+  makeFlags = [ "PURPLE_PLUGIN_DIR=$(out)/lib/pidgin" ];
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libxml2 pidgin ];
+
+  meta = with lib; {
+    homepage = "https://github.com/gkdr/carbons";
+    description = "XEP-0280: Message Carbons plugin for libpurple";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/default.nix
new file mode 100644
index 000000000000..b666df309642
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/default.nix
@@ -0,0 +1,70 @@
+{ lib
+, newScope
+, pidgin
+, texlive
+, config
+}:
+
+lib.makeScope newScope (self:
+  let callPackage = self.callPackage;
+  in {
+    pidgin = callPackage ../. {
+      withOpenssl = config.pidgin.openssl or true;
+      withGnutls = config.pidgin.gnutls or false;
+      plugins = [];
+    };
+
+    pidginPackages = self;
+
+    pidgin-indicator = callPackage ./pidgin-indicator { };
+
+    pidgin-latex = callPackage ./pidgin-latex {
+      texLive = texlive.combined.scheme-basic;
+    };
+
+    pidgin-msn-pecan = callPackage ./msn-pecan { };
+
+    pidgin-mra = callPackage ./pidgin-mra { };
+
+    pidgin-skypeweb = callPackage ./pidgin-skypeweb { };
+
+    pidgin-carbons = callPackage ./carbons { };
+
+    pidgin-xmpp-receipts = callPackage ./pidgin-xmpp-receipts { };
+
+    pidgin-otr = callPackage ./otr { };
+
+    pidgin-osd = callPackage ./pidgin-osd { };
+
+    pidgin-sipe = callPackage ./sipe { };
+
+    pidgin-window-merge = callPackage ./window-merge { };
+
+    purple-discord = callPackage ./purple-discord { };
+
+    purple-googlechat = callPackage ./purple-googlechat { };
+
+    purple-hangouts = callPackage ./purple-hangouts { };
+
+    purple-lurch = callPackage ./purple-lurch { };
+
+    purple-matrix = callPackage ./purple-matrix { };
+
+    purple-mm-sms = callPackage ./purple-mm-sms { };
+
+    purple-plugin-pack = callPackage ./purple-plugin-pack { };
+
+    purple-signald = callPackage ./purple-signald { };
+
+    purple-slack = callPackage ./purple-slack { };
+
+    purple-vk-plugin = callPackage ./purple-vk-plugin { };
+
+    purple-xmpp-http-upload = callPackage ./purple-xmpp-http-upload { };
+
+    tdlib-purple = callPackage ./tdlib-purple { };
+
+    pidgin-opensteamworks = callPackage ./pidgin-opensteamworks { };
+
+    purple-facebook = callPackage ./purple-facebook { };
+})
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/msn-pecan/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/msn-pecan/default.nix
new file mode 100644
index 000000000000..7a761c1e91c8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/msn-pecan/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, pidgin} :
+
+stdenv.mkDerivation rec {
+  pname = "pidgin-msn-pecan";
+  version = "0.1.4";
+  src = fetchFromGitHub {
+    owner = "felipec";
+    repo = "msn-pecan";
+    rev = "v${version}";
+    sha256 = "0133rpiy4ik6rx9qn8m38vp7w505hnycggr53g3a2hfpk5xj03zh";
+  };
+
+  meta = {
+    description = "Alternative MSN protocol plug-in for Pidgin IM";
+    homepage = "https://github.com/felipec/msn-pecan";
+    platforms = lib.platforms.linux;
+  };
+
+  makeFlags = [
+    "PURPLE_LIBDIR=${placeholder "out"}/lib"
+    "PURPLE_DATADIR=${placeholder "out"}/share/data"
+  ];
+
+  buildInputs = [pidgin];
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/otr/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/otr/default.nix
new file mode 100644
index 000000000000..aa871df5e8af
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/otr/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchurl, libotr, pidgin, intltool } :
+
+stdenv.mkDerivation rec {
+  pname = "pidgin-otr";
+  version = "4.0.2";
+  src = fetchurl {
+    url = "https://otr.cypherpunks.ca/pidgin-otr-${version}.tar.gz";
+    sha256 = "1i5s9rrgbyss9rszq6c6y53hwqyw1k86s40cpsfx5ccl9bprxdgl";
+  };
+
+  postInstall = "ln -s \$out/lib/pidgin \$out/share/pidgin-otr";
+
+  nativeBuildInputs = [ intltool ];
+  buildInputs = [ libotr pidgin ];
+
+  meta = with lib; {
+    homepage = "https://otr.cypherpunks.ca/";
+    description = "Plugin for Pidgin 2.x which implements OTR Messaging";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/pidgin-indicator/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/pidgin-indicator/default.nix
new file mode 100644
index 000000000000..70cb3a9028df
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/pidgin-indicator/default.nix
@@ -0,0 +1,33 @@
+{ autoreconfHook
+, fetchFromGitHub
+, glib
+, intltool
+, lib
+, libappindicator-gtk2
+, libtool
+, pidgin
+, stdenv
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pidgin-indicator";
+  version = "1.0.1";
+
+  src = fetchFromGitHub {
+    owner = "philipl";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-CdA/aUu+CmCRbVBKpJGydicqFQa/rEsLWS3MBKlH2/M=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook intltool ];
+  buildInputs = [ glib libappindicator-gtk2 libtool pidgin ];
+
+  meta = with lib; {
+    description = "An AppIndicator and KStatusNotifierItem Plugin for Pidgin";
+    homepage = "https://github.com/philipl/pidgin-indicator";
+    maintainers = with maintainers; [ imalison ];
+    license = licenses.gpl2;
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/pidgin-latex/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/pidgin-latex/default.nix
new file mode 100644
index 000000000000..1250e3877b96
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/pidgin-latex/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchurl, pkg-config, pidgin, texLive, imagemagick, glib, gtk2 }:
+
+let version = "1.5.0";
+in
+stdenv.mkDerivation {
+  pname = "pidgin-latex";
+  inherit version;
+
+  src = fetchurl {
+    url = "mirror://sourceforge/pidgin-latex/pidgin-latex_${version}.tar.bz2";
+    sha256 = "9c850aee90d7e59de834f83e09fa6e3e51b123f06e265ead70957608ada95441";
+  };
+
+  nativeBuildInputs = [pkg-config];
+  buildInputs = [gtk2 glib pidgin];
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  postPatch = ''
+    sed -e 's/-Wl,-soname//' -i Makefile
+  '';
+
+  passthru = {
+    wrapArgs = "--prefix PATH ':' ${lib.makeBinPath [ texLive imagemagick ]}";
+  };
+
+  meta = with lib; {
+    homepage = "https://sourceforge.net/projects/pidgin-latex/";
+    description = "LaTeX rendering plugin for Pidgin IM";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/pidgin-mra/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/pidgin-mra/default.nix
new file mode 100644
index 000000000000..2c6a0c5e7e64
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/pidgin-mra/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, pidgin } :
+
+stdenv.mkDerivation rec {
+  pname = "pidgin-mra";
+  version = "unstable-2014-07-08";
+
+  src = fetchFromGitHub {
+    owner = "dreadatour";
+    repo = "pidgin-mra";
+    rev = "54b299266265cde800289b2d51f13b81f6bf379c";
+    sha256 = "sha256-fKdEOaijW2LfsH8RHlVGbMpL7Zhu+x2vW4fPEN4puKk=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ pidgin ];
+
+  postPatch = ''
+    sed -i 's|-I/usr/include/libpurple|$(shell pkg-config --cflags purple)|' Makefile
+  '';
+
+  makeFlags = [
+    "DESTDIR=/"
+    "LIBDIR=${placeholder "out"}/lib"
+    "DATADIR=${placeholder "out"}/share"
+  ];
+
+  meta = {
+    homepage = "https://github.com/dreadatour/pidgin-mra";
+    description = "Mail.ru Agent plugin for Pidgin / libpurple";
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/pidgin-opensteamworks/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/pidgin-opensteamworks/default.nix
new file mode 100644
index 000000000000..ceeac0acd0c3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/pidgin-opensteamworks/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, pidgin, glib, json-glib, nss, nspr
+, libsecret
+} :
+
+stdenv.mkDerivation rec {
+  pname = "pidgin-opensteamworks";
+  version = "1.7.2";
+
+  src = fetchFromGitHub {
+    owner = "EionRobb";
+    repo = "pidgin-opensteamworks";
+    rev = version;
+    sha256 = "sha256-VWsoyFG+Ro+Y6ngSTMQ7yBYf6awCMNOc6U0WqNeg/jU=";
+  };
+
+  sourceRoot = "${src.name}/steam-mobile";
+
+  installFlags = [
+    "PLUGIN_DIR_PURPLE=${placeholder "out"}/lib/purple-2"
+    "DATA_ROOT_DIR_PURPLE=${placeholder "out"}/share"
+  ];
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+  buildInputs = [
+    pidgin glib json-glib nss nspr libsecret
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/EionRobb/pidgin-opensteamworks";
+    description = "Plugin for Pidgin 2.x which implements Steam Friends/Steam IM compatibility";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ arobyn ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/pidgin-osd/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/pidgin-osd/default.nix
new file mode 100644
index 000000000000..d50a3ed5c30f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/pidgin-osd/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, pidgin, xosd
+, autoreconfHook } :
+
+stdenv.mkDerivation rec {
+  pname = "pidgin-osd";
+  version = "0.2.0";
+  src = fetchFromGitHub {
+    owner = "edanaher";
+    repo = "pidgin-osd";
+    rev = "${pname}-${version}";
+    sha256 = "07wa9anz99hnv6kffpcph3fbq8mjbyq17ij977ggwgw37zb9fzb5";
+  };
+
+  # autoreconf is run such that it *really* wants all the files, and there's no
+  # default ChangeLog.  So make it happy.
+  preAutoreconf = "touch ChangeLog";
+
+  postInstall = ''
+    mkdir -p $out/lib/pidgin
+    mv $out/lib/pidgin-osd.{la,so} $out/lib/pidgin
+  '';
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ xosd pidgin ];
+
+  meta = with lib; {
+    homepage = "https://github.com/mbroemme/pidgin-osd";
+    description = "Plugin for Pidgin which implements on-screen display via libxosd";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/pidgin-skypeweb/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/pidgin-skypeweb/default.nix
new file mode 100644
index 000000000000..d7c3c6cacabd
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/pidgin-skypeweb/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, pidgin, json-glib }:
+
+stdenv.mkDerivation rec {
+  pname = "pidgin-skypeweb";
+  version = "1.7";
+
+  src = fetchFromGitHub {
+    owner = "EionRobb";
+    repo = "skype4pidgin";
+    rev = version;
+    sha256 = "11snyrjhm58gjvdmr5h5ajii3ah4a7c8zw3cavjv9xnnwrpfm5rb";
+  };
+
+  setSourceRoot = ''
+    sourceRoot=$(echo */skypeweb)
+  '';
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ pidgin json-glib ];
+
+  PKG_CONFIG_PURPLE_PLUGINDIR = "${placeholder "out"}/lib/purple-2";
+  PKG_CONFIG_PURPLE_DATADIR = "${placeholder "out"}/share";
+
+  meta = with lib; {
+    homepage = "https://github.com/EionRobb/skype4pidgin";
+    description = "SkypeWeb plugin for Pidgin";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/pidgin-xmpp-receipts/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/pidgin-xmpp-receipts/default.nix
new file mode 100644
index 000000000000..f545b65cd8ea
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/pidgin-xmpp-receipts/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, pidgin } :
+
+let
+  version = "0.8";
+in
+stdenv.mkDerivation {
+  pname = "pidgin-xmpp-receipts";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "noonien-d";
+    repo = "pidgin-xmpp-receipts";
+    rev = "release_${version}";
+    sha256 = "13kwaymzkymjsdv8q95byd173i4vanj211vgx9cm0y8ag2r3cjsb";
+  };
+
+  buildInputs = [ pidgin ];
+
+  installPhase = ''
+    mkdir -p $out/lib/pidgin/
+    cp xmpp-receipts.so $out/lib/pidgin/
+  '';
+
+  meta = with lib; {
+    homepage = "http://devel.kondorgulasch.de/pidgin-xmpp-receipts/";
+    description = "Message delivery receipts (XEP-0184) Pidgin plugin";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ orivej ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-discord/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-discord/default.nix
new file mode 100644
index 000000000000..8af6811d6a58
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-discord/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, imagemagick, gettext, pidgin, json-glib }:
+
+stdenv.mkDerivation {
+  pname = "purple-discord";
+  version = "unstable-2021-10-17";
+
+  src = fetchFromGitHub {
+    owner = "EionRobb";
+    repo = "purple-discord";
+    rev = "b7ac72399218d2ce011ac84bb171b572560aa2d2";
+    sha256 = "0xvj9rdvgsvcr55sk9m40y07rchg699l1yr98xqwx7sc2sba3814";
+  };
+
+  nativeBuildInputs = [ imagemagick gettext ];
+  buildInputs = [ pidgin json-glib ];
+
+  PKG_CONFIG_PURPLE_PLUGINDIR = "${placeholder "out"}/lib/purple-2";
+  PKG_CONFIG_PURPLE_DATADIR = "${placeholder "out"}/share";
+
+  meta = with lib; {
+    homepage = "https://github.com/EionRobb/purple-discord";
+    description = "Discord plugin for Pidgin";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ sna ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-facebook/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-facebook/default.nix
new file mode 100644
index 000000000000..b1078c864de6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-facebook/default.nix
@@ -0,0 +1,66 @@
+{ lib, stdenv, fetchFromGitHub, fetchhg, pidgin, glib, json-glib, autoreconfHook }:
+
+
+let
+  pidginHg = fetchhg {
+    url = "https://bitbucket.org/pidgin/main";
+    # take from VERSION file
+    rev = "9ff9acf9fa14";
+    sha256 = "06imlhsps4wrjgjb92zpaxprxfxl2pjb2x9pl859c8cryssrz2jv";
+  };
+
+in stdenv.mkDerivation rec {
+  pname = "purple-facebook";
+  version = "0.9.5";
+
+  src = fetchFromGitHub {
+    owner = "dequis";
+    repo = "purple-facebook";
+    rev = "v${version}-9ff9acf9fa14";
+    sha256 = "0a1860bkzrmyxahm9rlxi80z335w491wzdaqaw6j9ccavbymhwhs";
+  };
+
+  postPatch = ''
+    # we do all patching from update.sh in preAutoreconf
+    echo "#!${stdenv.shell}" > update.sh
+  '';
+
+  preAutoreconf = ''
+    for FILE in $(cat MANIFEST_PIDGIN); do
+        install -Dm644 "${pidginHg}/$FILE" "pidgin/$FILE" || true
+    done
+
+    touch $(cat MANIFEST_VOIDS)
+
+    patchdir="$(pwd)/patches"
+    pushd pidgin
+
+    for patch in $(ls -1 "$patchdir"); do
+      patch -p1 -i "$patchdir/$patch"
+    done
+    popd
+
+    ./autogen.sh
+  '';
+
+  makeFlags = [
+    "PLUGIN_DIR_PURPLE=/lib/pidgin/"
+    "DATA_ROOT_DIR_PURPLE=/share"
+  ];
+
+  installPhase = ''
+    mkdir -p $out/lib/purple-2
+    cp pidgin/libpurple/protocols/facebook/.libs/*.so $out/lib/purple-2/
+  '';
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ pidgin glib json-glib ];
+
+  meta = with lib; {
+    inherit (src.meta) homepage;
+    description = "Facebook protocol plugin for libpurple";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ davorb ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-googlechat/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-googlechat/default.nix
new file mode 100644
index 000000000000..b274b55ac228
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-googlechat/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, pidgin, glib, json-glib, protobuf, protobufc }:
+
+stdenv.mkDerivation {
+  pname = "purple-googlechat";
+  version = "unstable-2021-10-18";
+
+  src = fetchFromGitHub {
+    owner = "EionRobb";
+    repo = "purple-googlechat";
+    rev = "56ba7f79883eca67d37629d365776f6c0b40abdc";
+    sha256 = "sha256-iTYVgYI9+6rqqBl5goeEAXpK8FgHDv0MmPsV/82reWA=";
+  };
+
+  nativeBuildInputs = [ protobufc ];
+  buildInputs = [ pidgin glib json-glib protobuf ];
+
+  PKG_CONFIG_PURPLE_PLUGINDIR = "${placeholder "out"}/lib/purple-2";
+  PKG_CONFIG_PURPLE_DATADIR = "${placeholder "out"}/share";
+
+  meta = with lib; {
+    homepage = "https://github.com/EionRobb/purple-googlechat";
+    description = "Native Google Chat support for pidgin";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ dtzWill ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-hangouts/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-hangouts/default.nix
new file mode 100644
index 000000000000..653708abe3b6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-hangouts/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchhg, pidgin, glib, json-glib, protobuf, protobufc }:
+
+stdenv.mkDerivation {
+  pname = "purple-hangouts-hg";
+  version = "2018-12-02";
+
+  src = fetchhg {
+    url = "https://bitbucket.org/EionRobb/purple-hangouts/";
+    rev = "cccf2f6";
+    sha256 = "1zd1rlzqvw1zkb0ydyz039n3xa1kv1f20a4l6rkm9a8sp6rpf3pi";
+  };
+
+  buildInputs = [ pidgin glib json-glib protobuf protobufc ];
+
+  PKG_CONFIG_PURPLE_PLUGINDIR = "${placeholder "out"}/lib/purple-2";
+  PKG_CONFIG_PURPLE_DATADIR = "${placeholder "out"}/share";
+
+  meta = with lib; {
+    homepage = "https://bitbucket.org/EionRobb/purple-hangouts";
+    description = "Native Hangouts support for pidgin";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ralith ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-lurch/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-lurch/default.nix
new file mode 100644
index 000000000000..c0497ed86ce1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-lurch/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, cmake, pidgin, minixml, libxml2, sqlite, libgcrypt }:
+
+stdenv.mkDerivation rec {
+  pname = "purple-lurch";
+  version = "0.7.0";
+
+  src = fetchFromGitHub {
+    owner = "gkdr";
+    repo = "lurch";
+    rev = "v${version}";
+    sha256 = "sha256-yyzotKL1Z4B2BxloJndJKemONMPLG9pVDVe2K5AL05g=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ pidgin minixml libxml2 sqlite libgcrypt ];
+
+  dontUseCmakeConfigure = true;
+
+  installPhase = ''
+    install -Dm755 -t $out/lib/purple-2 build/lurch.so
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/gkdr/lurch";
+    description = "XEP-0384: OMEMO Encryption for libpurple";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ emmanuelrosa ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-matrix/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-matrix/default.nix
new file mode 100644
index 000000000000..0b51d172b746
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-matrix/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, pidgin, json-glib, glib, http-parser, sqlite, olm, libgcrypt } :
+
+stdenv.mkDerivation rec {
+  pname = "purple-matrix-unstable";
+  version = "2019-06-06";
+
+  src = fetchFromGitHub {
+    owner = "matrix-org";
+    repo = "purple-matrix";
+    rev = "4494ba22b479917f0b1f96a3019792d3d75bcff1";
+    sha256 = "1gjm0z4wa5vi9x1xk43rany5pffrwg958n180ahdj9a7sa8a4hpm";
+  };
+
+  env.NIX_CFLAGS_COMPILE = builtins.toString [
+    # glib-2.62 deprecations
+    "-DGLIB_DISABLE_DEPRECATION_WARNINGS"
+    # override "-O0 -Werror" set by build system
+    "-O3" "-Wno-error"
+  ];
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ pidgin json-glib glib http-parser sqlite olm libgcrypt ];
+
+  makeFlags = [
+    "PLUGIN_DIR_PURPLE=${placeholder "out"}/lib/purple-2"
+    "DATA_ROOT_DIR_PURPLE=${placeholder "out"}/share"
+  ];
+
+  buildFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ]; # fix build on darwin
+
+  meta = with lib; {
+    homepage = "https://github.com/matrix-org/purple-matrix";
+    description = "Matrix support for Pidgin / libpurple";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ symphorien ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-mm-sms/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-mm-sms/default.nix
new file mode 100644
index 000000000000..121ef0231a74
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-mm-sms/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, glibmm, pidgin, pkg-config, modemmanager, fetchFromGitLab } :
+
+stdenv.mkDerivation rec {
+  pname = "purple-mm-sms";
+  version = "0.1.7";
+
+  src = fetchFromGitLab {
+    domain = "source.puri.sm";
+    owner = "Librem5";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0917gjig35hmi6isqb62vhxd3lkc2nwdn13ym2gvzgcjfgjzjajr";
+  };
+
+  makeFlags = [
+    "DATA_ROOT_DIR_PURPLE=$(out)/share"
+    "PLUGIN_DIR_PURPLE=$(out)/lib/purple-2"
+  ];
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ glibmm pidgin modemmanager ];
+
+  meta = with lib; {
+    homepage = "https://source.puri.sm/Librem5/purple-mm-sms";
+    description = "A libpurple plugin for sending and receiving SMS via Modemmanager";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-plugin-pack/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-plugin-pack/default.nix
new file mode 100644
index 000000000000..388f633f3dab
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-plugin-pack/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, stdenv
+, fetchurl
+, meson
+, ninja
+, pidgin
+}:
+
+stdenv.mkDerivation rec {
+  pname = "purple-plugin-pack";
+  version = "2.8.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/pidgin/purple-plugin-pack-2.8.0.tar.xz";
+    hash = "sha256-gszemnJRp1t+A6P5qSkBTY4AjBtvRuWGOPX0dto+JC0=";
+  };
+
+  postPatch = ''
+    substituteInPlace meson.build \
+      --replace "PURPLE.get_pkgconfig_variable('plugindir')" "'$out/lib/purple-2'" \
+      --replace "PURPLE.get_pkgconfig_variable('datadir')" "'$out/share'" \
+      --replace "PIDGIN.get_pkgconfig_variable('plugindir')" "'$out/lib/pidgin'" \
+      --replace "PIDGIN.get_pkgconfig_variable('datadir')" "'$out/share'"
+  '';
+
+  nativeBuildInputs = [
+    meson
+    ninja
+  ];
+
+  buildInputs = [
+    pidgin
+  ];
+
+  meta = with lib; {
+    homepage = "https://keep.imfreedom.org/pidgin/purple-plugin-pack";
+    description = "Collection of plugins for purple-based clients such as Pidgin";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ bdimcheff ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-signald/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-signald/default.nix
new file mode 100644
index 000000000000..50ae99ceaecf
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-signald/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, pidgin, json-glib, signald }:
+
+stdenv.mkDerivation rec {
+  pname = "purple-signald";
+  version = "0.11.0";
+
+  src = fetchFromGitHub {
+    owner = "hoehermann";
+    repo = "libpurple-signald";
+    rev = "v${version}";
+    sha256 = "sha256-2LiHjVRBwdPbfravIVM+gvsh3Gq4bhjtRD6eWAbkWmc=";
+    fetchSubmodules = true;
+  };
+
+  buildInputs = [
+    pidgin
+    json-glib
+    signald
+  ];
+
+  PKG_CONFIG_PURPLE_PLUGINDIR = "${placeholder "out"}/lib/purple-2";
+  PKG_CONFIG_PURPLE_DATADIR = "${placeholder "out"}/share";
+  PKG_CONFIG_PIDGIN_DATADIR = "${placeholder "out"}/share";
+
+  meta = with lib; {
+    homepage = "https://github.com/hoehermann/libpurple-signald";
+    description = "Signal support for Pidgin / libpurple";
+    license = licenses.gpl3Only;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ hufman ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-slack/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-slack/default.nix
new file mode 100644
index 000000000000..9f5f9a2bda1e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-slack/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, pidgin, pkg-config }:
+
+stdenv.mkDerivation {
+  pname = "purple-slack-unstable";
+  version = "2020-09-22";
+
+  src = fetchFromGitHub {
+    owner = "dylex";
+    repo = "slack-libpurple";
+    rev = "2e9fa028224b02e29473b1b998fc1e5f487e79ec";
+    sha256 = "1sksqshiwldd32k8jmiflp2pcax31ym6rypr4qa4v5vdn907g80m";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ pidgin ];
+
+  PKG_CONFIG_PURPLE_PLUGINDIR = "${placeholder "out"}/lib/purple-2";
+  PKG_CONFIG_PURPLE_DATAROOTDIR = "${placeholder "out"}/share";
+
+  meta = with lib; {
+    homepage = "https://github.com/dylex/slack-libpurple";
+    description = "Slack plugin for Pidgin";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ eyjhb ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-vk-plugin/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-vk-plugin/default.nix
new file mode 100644
index 000000000000..07b38ff3c5a2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-vk-plugin/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchhg, pidgin, cmake, libxml2 } :
+
+let
+  version = "40ddb6d";
+in
+stdenv.mkDerivation {
+  pname = "purple-vk-plugin";
+  inherit version;
+
+  src = fetchhg {
+    url = "https://bitbucket.org/olegoandreev/purple-vk-plugin";
+    rev = version;
+    sha256 = "02p57fgx8ml00cbrb4f280ak2802svz80836dzk9f1zwm1bcr2qc";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ pidgin libxml2 ];
+
+  preConfigure = ''
+    sed -i -e 's|DESTINATION.*PURPLE_PLUGIN_DIR}|DESTINATION lib/purple-2|' CMakeLists.txt
+  '';
+
+  cmakeFlags = [ "-DCMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT=1" ];
+
+  meta = {
+    homepage = "https://bitbucket.org/olegoandreev/purple-vk-plugin";
+    description = "Vk (russian social network) plugin for Pidgin / libpurple";
+    license = lib.licenses.gpl3;
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-xmpp-http-upload/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-xmpp-http-upload/default.nix
new file mode 100644
index 000000000000..c52082e06c90
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/purple-xmpp-http-upload/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, pidgin, glib, libxml2 }:
+
+stdenv.mkDerivation {
+  pname = "purple-xmpp-upload";
+  version = "unstable-2021-11-04";
+
+  src = fetchFromGitHub {
+    owner = "Junker";
+    repo = "purple-xmpp-http-upload";
+    rev = "f370b4a2c474c6fe4098d929d8b7c18aeba87b6b";
+    sha256 = "0n05jybmibn44xb660p08vrrbanfsyjn17w1xm9gwl75fxxq8cdc";
+  };
+
+  buildInputs = [ pidgin glib libxml2 ];
+
+  installPhase = ''
+    install -Dm644 -t $out/lib/purple-2 jabber_http_file_upload.so
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/Junker/purple-xmpp-http-upload";
+    description = "HTTP File Upload plugin for libpurple (XMPP Protocol XEP-0363)";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ emmanuelrosa ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/sipe/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/sipe/default.nix
new file mode 100644
index 000000000000..a01477997047
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/sipe/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchurl, fetchpatch, pidgin, intltool, libxml2, gmime, nss }:
+
+stdenv.mkDerivation rec {
+  pname = "pidgin-sipe";
+  version = "1.25.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/sipe/${pname}-${version}.tar.gz";
+    sha256 = "0262sz00iqxylx0xfyr48xikhiqzr8pg7b4b7vwj5iv4qxpxv939";
+  };
+
+  patches = [
+    # add sipe_utils_memdup() function
+    (fetchpatch {
+      url = "https://repo.or.cz/siplcs.git/patch/567d0ddc0692adfef5f15d0d383825a9b2ea4b49";
+      sha256 = "24L8ZfoOGc3JoTCGxuTNjuHzt5QgFDu1+vSoJpGvde4=";
+    })
+    # replace g_memdup() with sipe_utils_memdup()
+    # g_memdup is deprecatein newer Glib
+    (fetchpatch {
+      url = "https://repo.or.cz/siplcs.git/patch/583a734e63833f03d11798b7b0d59a17d08ae60f";
+      sha256 = "Ai6Czpy/FYvBi4GZR7yzch6OcouJgfreI9HcojhGVV4=";
+    })
+  ];
+
+  nativeBuildInputs = [ intltool ];
+  buildInputs = [ pidgin gmime libxml2 nss ];
+  configureFlags = [ "--without-dbus" ];
+  enableParallelBuilding = true;
+
+  postInstall = "ln -s \$out/lib/purple-2 \$out/share/pidgin-sipe";
+
+  meta = with lib; {
+    description = "SIPE plugin for Pidgin IM";
+    homepage = "http://sipe.sourceforge.net/";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/tdlib-purple/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/tdlib-purple/default.nix
new file mode 100644
index 000000000000..1a1fd3b409a6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/tdlib-purple/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, cmake, libwebp, pidgin, tdlib } :
+
+stdenv.mkDerivation rec {
+  pname = "tdlib-purple";
+  version = "0.8.1";
+
+  src = fetchFromGitHub {
+    owner = "ars3niy";
+    repo = "tdlib-purple";
+    rev = "v${version}";
+    sha256 = "sha256-mrowzTtNLyMc2WwLVIop8Mg2DbyiQs0OPXmJuM9QUnM=";
+  };
+
+  patches = [
+    # Update to tdlib 1.8.0
+    (fetchpatch {
+      url = "https://github.com/ars3niy/tdlib-purple/commit/8c87b899ddbec32ec6ab4a34ddf0dc770f97d396.patch";
+      sha256 = "sha256-sysPYPno+wS8mZwQAXtX5eVnhwKAZrtr5gXuddN3mko=";
+    })
+  ];
+
+  preConfigure = ''
+    sed -i -e 's|DESTINATION.*PURPLE_PLUGIN_DIR}|DESTINATION "lib/purple-2|' CMakeLists.txt
+    sed -i -e 's|DESTINATION.*PURPLE_DATA_DIR}|DESTINATION "share|' CMakeLists.txt
+  '';
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ libwebp pidgin tdlib ];
+
+  cmakeFlags = [ "-DNoVoip=True" ]; # libtgvoip required
+
+  env.NIX_CFLAGS_COMPILE = toString (lib.optionals (stdenv.isDarwin && stdenv.isAarch64) [ "-U__ARM_NEON__" ]);
+
+  meta = with lib; {
+    homepage = "https://github.com/ars3niy/tdlib-purple";
+    description = "libpurple Telegram plugin using tdlib";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ sikmir ];
+    platforms = platforms.unix;
+
+    # tdlib-purple is not actively maintained and currently not
+    # compatible with recent versions of tdlib
+    broken = true;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/tox-prpl/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/tox-prpl/default.nix
new file mode 100644
index 000000000000..eb606f796cfb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/tox-prpl/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, libtoxcore, pidgin, autoreconfHook, libsodium }:
+
+stdenv.mkDerivation rec {
+  pname = "tox-prpl";
+  version = "0.5.1";
+
+  src = fetchFromGitHub {
+    owner  = "jin-eld";
+    repo   = "tox-prpl";
+    rev    = "v${version}";
+    sha256 = "0ms367l2f7x83k407c93bmhpyc820f1css61fh2gx4jq13cxqq3p";
+  };
+
+  NIX_LDFLAGS = "-lssp -lsodium";
+
+  postInstall = "mv $out/lib/purple-2 $out/lib/pidgin";
+
+  buildInputs = [ libtoxcore pidgin libsodium ];
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = with lib; {
+    broken = true; # unmaintained and not compatible with current Tox API.
+    homepage = "https://github.com/jin-eld/tox-prpl";
+    description = "Tox plugin for Pidgin / libpurple";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/window-merge/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/window-merge/default.nix
new file mode 100644
index 000000000000..c5437e965ed8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-plugins/window-merge/default.nix
@@ -0,0 +1,21 @@
+{ lib, stdenv, fetchurl, pidgin } :
+
+stdenv.mkDerivation rec {
+  pname = "pidgin-window-merge";
+  version = "0.3";
+
+  src = fetchurl {
+    url = "https://github.com/downloads/dm0-/window_merge/window_merge-${version}.tar.gz";
+    sha256 = "0cb5rvi7jqvm345g9mlm4wpq0240kcybv81jpw5wlx7hz0lwi478";
+  };
+
+  buildInputs = [ pidgin ];
+
+  meta = with lib; {
+    homepage = "https://github.com/dm0-/window_merge";
+    description = "Pidgin plugin that merges the Buddy List window with a conversation window";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/wrapper.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/wrapper.nix
new file mode 100644
index 000000000000..a2885d7194f4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/wrapper.nix
@@ -0,0 +1,20 @@
+{ lib, symlinkJoin, pidgin, makeWrapper, plugins }:
+
+let
+extraArgs = map (x: x.wrapArgs or "") plugins;
+in symlinkJoin {
+  name = "pidgin-with-plugins-${pidgin.version}";
+
+  paths = [ pidgin ] ++ plugins;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postBuild = ''
+    wrapProgram $out/bin/pidgin \
+      --suffix-each PURPLE_PLUGIN_PATH ':' "$out/lib/purple-${lib.versions.major pidgin.version} $out/lib/pidgin" \
+      ${toString extraArgs}
+    wrapProgram $out/bin/finch \
+      --suffix-each PURPLE_PLUGIN_PATH ':' "$out/lib/purple-${lib.versions.major pidgin.version}" \
+      ${toString extraArgs}
+  '';
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/poezio/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/poezio/default.nix
new file mode 100644
index 000000000000..a0163322064e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/poezio/default.nix
@@ -0,0 +1,52 @@
+{ lib
+, fetchFromGitLab
+, pkg-config
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "poezio";
+  version = "0.13.1";
+  format = "setuptools";
+
+  src = fetchFromGitLab {
+    domain = "lab.louiz.org";
+    owner = pname;
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-3pUegEfhQxEv/7Htw6b2BN1lXtDockyANmi1xW4wPhA=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    aiodns
+    cffi
+    mpd2
+    potr
+    pyasn1
+    pyasn1-modules
+    pycares
+    pyinotify
+    slixmpp
+    typing-extensions
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [
+    "poezio"
+  ];
+
+  meta = with lib; {
+    description = "Free console XMPP client";
+    homepage = "https://poez.io";
+    changelog = "https://lab.louiz.org/poezio/poezio/-/blob/v${version}/CHANGELOG";
+    license = licenses.zlib;
+    maintainers = with maintainers; [ lsix ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/profanity/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/profanity/default.nix
new file mode 100644
index 000000000000..cb8b09c336db
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/profanity/default.nix
@@ -0,0 +1,103 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoconf-archive
+, autoreconfHook
+, cmocka
+, curl
+, expat
+, expect
+, glib
+, glibcLocales
+, libstrophe
+, libmicrohttpd
+, libotr
+, libuuid
+, ncurses
+, openssl
+, pkg-config
+, readline
+, sqlite
+, autoAwaySupport ? true,       libXScrnSaver, libX11
+, notifySupport ? true,         libnotify, gdk-pixbuf
+, omemoSupport ? true,          libsignal-protocol-c, libgcrypt
+, pgpSupport ? true,            gpgme
+, pythonPluginSupport ? true,   python3
+, traySupport ? true,           gtk3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "profanity";
+  version = "0.14.0";
+
+  src = fetchFromGitHub {
+    owner = "profanity-im";
+    repo = "profanity";
+    rev = version;
+    hash = "sha256-u/mp+vtMj602LfrulA+nhLNH8K6sqKIOuPJzhZusVmE=";
+  };
+
+  patches = [
+    ./patches/packages-osx.patch
+  ];
+
+  enableParallelBuilding = true;
+
+  nativeBuildInputs = [
+    autoconf-archive
+    autoreconfHook
+    glibcLocales
+    pkg-config
+  ];
+
+  buildInputs = [
+    cmocka
+    curl
+    expat
+    expect
+    glib
+    libstrophe
+    libmicrohttpd
+    libotr
+    libuuid
+    ncurses
+    openssl
+    readline
+    sqlite
+  ] ++ lib.optionals autoAwaySupport     [ libXScrnSaver libX11 ]
+    ++ lib.optionals notifySupport       [ libnotify gdk-pixbuf ]
+    ++ lib.optionals omemoSupport        [ libsignal-protocol-c libgcrypt ]
+    ++ lib.optionals pgpSupport          [ gpgme ]
+    ++ lib.optionals pythonPluginSupport [ python3 ]
+    ++ lib.optionals traySupport         [ gtk3 ];
+
+  # Enable feature flags, so that build fail if libs are missing
+  configureFlags = [
+    "--enable-c-plugins"
+    "--enable-otr"
+  ] ++ lib.optionals notifySupport       [ "--enable-notifications" ]
+    ++ lib.optionals traySupport         [ "--enable-icons-and-clipboard" ]
+    ++ lib.optionals pgpSupport          [ "--enable-pgp" ]
+    ++ lib.optionals pythonPluginSupport [ "--enable-python-plugins" ]
+    ++ lib.optionals omemoSupport        [ "--enable-omemo" ];
+
+  preAutoreconf = ''
+    mkdir m4
+  '';
+
+  doCheck = true;
+
+  LC_ALL = "en_US.utf8";
+
+  meta =  with lib; {
+    homepage = "http://www.profanity.im/";
+    description = "A console based XMPP client";
+    longDescription = ''
+      Profanity is a console based XMPP client written in C using ncurses and
+      libstrophe, inspired by Irssi.
+    '';
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.devhell ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/profanity/patches/packages-osx.patch b/nixpkgs/pkgs/applications/networking/instant-messengers/profanity/patches/packages-osx.patch
new file mode 100644
index 000000000000..796ec6b0a615
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/profanity/patches/packages-osx.patch
@@ -0,0 +1,13 @@
+diff --git a/configure.ac b/configure.ac
+index 5c00aca..eb78060 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -23,7 +23,6 @@ PLATFORM="unknown"
+ AS_CASE([$host_os],
+     [freebsd*], [PLATFORM="freebsd"],
+     [openbsd*], [PLATFORM="openbsd"],
+-    [darwin*], [PLATFORM="osx"],
+     [cygwin], [PLATFORM="cygwin"],
+     [PLATFORM="nix"])
+ 
+
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/psi-plus/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/psi-plus/default.nix
new file mode 100644
index 000000000000..2bed5babd048
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/psi-plus/default.nix
@@ -0,0 +1,106 @@
+{ lib
+, mkDerivation
+, fetchFromGitHub
+, cmake
+, qtbase
+, qtmultimedia
+, qtimageformats
+, qtx11extras
+, qttools
+, libidn
+, qca-qt5
+, libXScrnSaver
+, hunspell
+, libsecret
+, libgcrypt
+, libotr
+, html-tidy
+, libgpg-error
+, libsignal-protocol-c
+, usrsctp
+
+, chatType ? "basic" # See the assertion below for available options
+, qtwebkit
+, qtwebengine
+
+, enablePlugins ? true
+
+  # Voice messages
+, voiceMessagesSupport ? true
+, gst_all_1
+
+, enablePsiMedia ? false
+, pkg-config
+}:
+
+assert builtins.elem (lib.toLower chatType) [
+  "basic" # Basic implementation, no web stuff involved
+  "webkit" # Legacy one, based on WebKit (see https://wiki.qt.io/Qt_WebKit)
+  "webengine" # QtWebEngine (see https://wiki.qt.io/QtWebEngine)
+];
+
+assert enablePsiMedia -> enablePlugins;
+
+mkDerivation rec {
+  pname = "psi-plus";
+  version = "1.5.1650";
+
+  src = fetchFromGitHub {
+    owner = "psi-plus";
+    repo = "psi-plus-snapshots";
+    rev = version;
+    sha256 = "sha256-qoqusg2CbivoPFbYnBSzE5P5+p1vCKmMbSBrPdC6SqI=";
+  };
+
+  cmakeFlags = [
+    "-DCHAT_TYPE=${chatType}"
+    "-DENABLE_PLUGINS=${if enablePlugins then "ON" else "OFF"}"
+    "-DBUILD_PSIMEDIA=${if enablePsiMedia then "ON" else "OFF"}"
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    qttools
+  ] ++ lib.optionals enablePsiMedia [
+    pkg-config
+  ];
+
+  buildInputs = [
+    qtbase
+    qtmultimedia
+    qtimageformats
+    qtx11extras
+    libidn
+    qca-qt5
+    libXScrnSaver
+    hunspell
+    libsecret
+    libgcrypt
+    libotr
+    html-tidy
+    libgpg-error
+    libsignal-protocol-c
+    usrsctp
+  ] ++ lib.optionals voiceMessagesSupport [
+    gst_all_1.gst-plugins-base
+    gst_all_1.gst-plugins-good
+  ] ++ lib.optionals (chatType == "webkit") [
+    qtwebkit
+  ] ++ lib.optionals (chatType == "webengine") [
+    qtwebengine
+  ];
+
+  preFixup = lib.optionalString voiceMessagesSupport ''
+    qtWrapperArgs+=(
+      --prefix GST_PLUGIN_SYSTEM_PATH_1_0 : "$GST_PLUGIN_SYSTEM_PATH_1_0"
+    )
+  '';
+
+  meta = with lib; {
+    homepage = "https://psi-plus.com";
+    description = "XMPP (Jabber) client based on Qt5";
+    maintainers = with maintainers; [ orivej misuzu unclechu ];
+    license = licenses.gpl2Only;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/psi/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/psi/default.nix
new file mode 100644
index 000000000000..62b6c8f8e59c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/psi/default.nix
@@ -0,0 +1,32 @@
+{ lib, mkDerivation, fetchFromGitHub, cmake
+, qtbase, qtmultimedia, qtx11extras, qttools, qtwebengine
+, libidn, qca-qt5, libXScrnSaver, hunspell
+}:
+
+mkDerivation rec {
+  pname = "psi";
+  version = "1.5";
+  src = fetchFromGitHub {
+    owner = "psi-im";
+    repo = pname;
+    rev = version;
+    sha256 = "hXDZODHl14kimRlMQ1XjISQ2kk9NS78axVN3U21wkuM=";
+    fetchSubmodules = true;
+  };
+  patches = [
+    ./fix-cmake-hunspell-1.7.patch
+  ];
+  nativeBuildInputs = [ cmake qttools ];
+  buildInputs = [
+    qtbase qtmultimedia qtx11extras qtwebengine
+    libidn qca-qt5 libXScrnSaver hunspell
+  ];
+
+  meta = with lib; {
+    homepage = "https://psi-im.org";
+    description = "An XMPP (Jabber) client";
+    maintainers = [ maintainers.raskin ];
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/psi/fix-cmake-hunspell-1.7.patch b/nixpkgs/pkgs/applications/networking/instant-messengers/psi/fix-cmake-hunspell-1.7.patch
new file mode 100644
index 000000000000..7d5711a6f2bc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/psi/fix-cmake-hunspell-1.7.patch
@@ -0,0 +1,12 @@
+diff --git a/cmake/modules/FindHunspell.cmake b/cmake/modules/FindHunspell.cmake
+index a2d180b3..3a5aef3a 100644
+--- a/cmake/modules/FindHunspell.cmake
++++ b/cmake/modules/FindHunspell.cmake
+@@ -64,6 +64,7 @@ set(HUNSPELL_NAMES
+ 	hunspell-1.4
+ 	hunspell-1.5
+ 	hunspell-1.6
++	hunspell-1.7
+ 	libhunspell${d}
+ )
+ find_library(
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/qq/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/qq/default.nix
new file mode 100644
index 000000000000..a9ce755be58a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/qq/default.nix
@@ -0,0 +1,109 @@
+{ alsa-lib
+, cups
+, dpkg
+, fetchurl
+, gjs
+, glib
+, gtk3
+, lib
+, libayatana-appindicator
+, libdrm
+, libgcrypt
+, libkrb5
+, mesa # for libgbm
+, nss
+, xorg
+, systemd
+, stdenv
+, vips
+, at-spi2-core
+, autoPatchelfHook
+, wrapGAppsHook
+, makeWrapper
+}:
+
+let
+  version = "3.1.2-13107";
+  _hash = "ad5b5393";
+  srcs = {
+    x86_64-linux = fetchurl {
+      url = "https://dldir1.qq.com/qqfile/qq/QQNT/${_hash}/linuxqq_${version}_amd64.deb";
+      hash = "sha256-mBfeexWEYpGybFFianUFvlzMv0HoFR4EeFcwlGVXIRA=";
+    };
+    aarch64-linux = fetchurl {
+      url = "https://dldir1.qq.com/qqfile/qq/QQNT/${_hash}/linuxqq_${version}_arm64.deb";
+      hash = "sha256-V6kR2lb63nnNIEhn64Yg0BYYlz7W0Cw60TwnKaJuLgs=";
+    };
+  };
+  src = srcs.${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
+in
+stdenv.mkDerivation {
+  pname = "qq";
+  inherit version src;
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+    # makeBinaryWrapper not support shell wrapper specifically for `NIXOS_OZONE_WL`.
+    (wrapGAppsHook.override { inherit makeWrapper; })
+    dpkg
+  ];
+
+  buildInputs = [
+    alsa-lib
+    at-spi2-core
+    cups
+    glib
+    gtk3
+    libdrm
+    libgcrypt
+    libkrb5
+    mesa
+    nss
+    vips
+    xorg.libXdamage
+  ];
+
+  runtimeDependencies = map lib.getLib [
+    systemd
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp -r opt $out/opt
+    cp -r usr/share $out/share
+    substituteInPlace $out/share/applications/qq.desktop \
+      --replace "/opt/QQ/qq" "$out/bin/qq" \
+      --replace "/usr/share" "$out/share"
+    ln -s $out/opt/QQ/qq $out/bin/qq
+
+    # Remove bundled libraries
+    rm -r $out/opt/QQ/resources/app/sharp-lib
+
+    # https://aur.archlinux.org/cgit/aur.git/commit/?h=linuxqq&id=f7644776ee62fa20e5eb30d0b1ba832513c77793
+    rm -r $out/opt/QQ/resources/app/libssh2.so.1
+
+    # https://github.com/microcai/gentoo-zh/commit/06ad5e702327adfe5604c276635ae8a373f7d29e
+    ln -s ${libayatana-appindicator}/lib/libayatana-appindicator3.so \
+      $out/opt/QQ/libappindicator3.so
+
+    runHook postInstall
+  '';
+
+  preFixup = ''
+    gappsWrapperArgs+=(
+      --prefix PATH : "${lib.makeBinPath [ gjs ]}"
+      --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}"
+    )
+  '';
+
+  meta = with lib; {
+    homepage = "https://im.qq.com/linuxqq/";
+    description = "Messaging app";
+    platforms = [ "x86_64-linux" "aarch64-linux" ];
+    license = licenses.unfree;
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    maintainers = with lib.maintainers; [ fee1-dead ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/qtox/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/qtox/default.nix
new file mode 100644
index 000000000000..8273a6fdbc6d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/qtox/default.nix
@@ -0,0 +1,77 @@
+{ lib
+, stdenv
+, mkDerivation
+, fetchFromGitHub
+, cmake
+, pkg-config
+, perl
+, libtoxcore
+, libpthreadstubs
+, libXdmcp
+, libXScrnSaver
+, qtbase
+, qtsvg
+, qttools
+, ffmpeg
+, filter-audio
+, libexif
+, libsodium
+, libopus
+, libvpx
+, openal
+, pcre
+, qrencode
+, sqlcipher
+, AVFoundation
+}:
+
+mkDerivation rec {
+  pname = "qtox";
+  version = "1.17.6";
+
+  src = fetchFromGitHub {
+    owner = "qTox";
+    repo = "qTox";
+    rev = "v${version}";
+    sha256 = "sha256-naKWoodSMw0AEtACvkASFmw9t0H0d2pcqOW79NNTYF0=";
+  };
+
+  buildInputs = [
+    libtoxcore
+    libpthreadstubs
+    libXdmcp
+    libXScrnSaver
+    qtbase
+    qtsvg
+    ffmpeg
+    filter-audio
+    libexif
+    libopus
+    libsodium
+    libvpx
+    openal
+    pcre
+    qrencode
+    sqlcipher
+  ] ++ lib.optionals stdenv.isDarwin [ AVFoundation ];
+
+  nativeBuildInputs = [ cmake pkg-config qttools ]
+    ++ lib.optionals stdenv.isDarwin [ perl ];
+
+  cmakeFlags = [
+    "-DGIT_DESCRIBE=v${version}"
+    "-DENABLE_STATUSNOTIFIER=False"
+    "-DENABLE_GTK_SYSTRAY=False"
+    "-DENABLE_APPINDICATOR=False"
+    "-DTIMESTAMP=1"
+  ];
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    description = "Qt Tox client";
+    homepage = "https://tox.chat";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ akaWolf peterhoeg ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/quaternion/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/quaternion/default.nix
new file mode 100644
index 000000000000..2bb54b8b5bd7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/quaternion/default.nix
@@ -0,0 +1,60 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, cmake
+, wrapQtAppsHook
+, qtbase
+, qtquickcontrols2
+, qtkeychain
+, qtmultimedia
+, qttools
+, libquotient
+, libsecret
+, olm
+}:
+
+stdenv.mkDerivation rec {
+  pname = "quaternion";
+  version = "0.0.96-beta4";
+
+  src = fetchFromGitHub {
+    owner = "quotient-im";
+    repo = "Quaternion";
+    rev = "refs/tags/${version}";
+    hash = "sha256-yItl31Ze48lRIIey+FlRLMVAkg4mHu8G1sFOceHvTJw=";
+  };
+
+  buildInputs = [
+    libquotient
+    libsecret
+    olm
+    qtbase
+    qtkeychain
+    qtmultimedia
+    qtquickcontrols2
+  ];
+
+  nativeBuildInputs = [ cmake qttools wrapQtAppsHook ];
+
+  cmakeFlags = [
+    "-DBUILD_WITH_QT6=OFF"
+  ];
+
+  postInstall =
+    if stdenv.isDarwin then ''
+      mkdir -p $out/Applications
+      mv $out/bin/quaternion.app $out/Applications
+      rmdir $out/bin || :
+    '' else ''
+      substituteInPlace $out/share/applications/com.github.quaternion.desktop \
+        --replace 'Exec=quaternion' "Exec=$out/bin/quaternion"
+    '';
+
+  meta = with lib; {
+    description = "Cross-platform desktop IM client for the Matrix protocol";
+    homepage = "https://matrix.org/docs/projects/client/quaternion.html";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ peterhoeg ];
+    inherit (qtquickcontrols2.meta) platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/rambox/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/rambox/default.nix
new file mode 100644
index 000000000000..4062911bd775
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/rambox/default.nix
@@ -0,0 +1,41 @@
+{ appimageTools, lib, fetchurl, makeDesktopItem }:
+
+let
+  pname = "rambox";
+  version = "2.1.5";
+
+  src = fetchurl {
+    url = "https://github.com/ramboxapp/download/releases/download/v${version}/Rambox-${version}-linux-x64.AppImage";
+    sha256 = "sha256-+9caiyh5o537cwjF0/bGdaJGQNd2Navn/nLYaYjnRN8=";
+  };
+
+  desktopItem = (makeDesktopItem {
+    desktopName = "Rambox";
+    name = pname;
+    exec = "rambox";
+    icon = pname;
+    categories = [ "Network" ];
+  });
+
+  appimageContents = appimageTools.extractType2 {
+    inherit pname version src;
+  };
+in
+appimageTools.wrapType2 {
+  inherit pname version src;
+
+  extraInstallCommands = ''
+    mkdir -p $out/share/applications $out/share/icons/hicolor/256x256/apps
+    ln -sf rambox-${version} $out/bin/${pname}
+    install -Dm644 ${appimageContents}/usr/share/icons/hicolor/256x256/apps/rambox*.png $out/share/icons/hicolor/256x256/apps/${pname}.png
+    install -Dm644 ${desktopItem}/share/applications/* $out/share/applications
+  '';
+
+  meta = with lib; {
+    description = "Workspace Simplifier - a cross-platform application organizing web services into Workspaces similar to browser profiles";
+    homepage = "https://rambox.app";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ nazarewk ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/ratox/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/ratox/default.nix
new file mode 100644
index 000000000000..5dcb22050763
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/ratox/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchgit, libtoxcore
+, conf ? null }:
+
+let
+  configFile = lib.optionalString (conf!=null) (builtins.toFile "config.h" conf);
+
+in stdenv.mkDerivation {
+  pname = "ratox";
+  version = "0.4.20180303";
+
+  src = fetchgit {
+    url = "git://git.2f30.org/ratox.git";
+    rev = "269f7f97fb374a8f9c0b82195c21de15b81ddbbb";
+    sha256 = "0bpn37h8jvsqd66fkba8ky42nydc8acawa5x31yxqlxc8mc66k74";
+  };
+
+  buildInputs = [ libtoxcore ];
+
+  preConfigure = ''
+    substituteInPlace config.mk \
+      --replace '-lsodium -lopus -lvpx ' ""
+
+    ${lib.optionalString (conf!=null) "cp ${configFile} config.def.h"}
+  '';
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "FIFO based tox client";
+    homepage = "http://ratox.2f30.org/";
+    license = licenses.isc;
+    maintainers = with maintainers; [ ehmry ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/revolt-desktop/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/revolt-desktop/default.nix
new file mode 100644
index 000000000000..857614962d3e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/revolt-desktop/default.nix
@@ -0,0 +1,62 @@
+{ stdenv
+, lib
+, fetchurl
+, appimageTools
+, makeWrapper
+, electron
+}:
+
+stdenv.mkDerivation rec {
+  pname = "revolt-desktop";
+  version = "1.0.6";
+
+  src = fetchurl {
+    url = "https://github.com/revoltchat/desktop/releases/download/v${version}/Revolt-linux.AppImage";
+    sha256 = "sha256-Wsm6ef2Reenq3/aKGaP2yzlOuLKaxKtRHCLLMxvWUUY=";
+  };
+
+  appimageContents = appimageTools.extractType2 {
+    name = "${pname}-${version}";
+    inherit src;
+  };
+
+  dontUnpack = true;
+  dontConfigure = true;
+  dontBuild = true;
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $out/share/{applications,revolt-desktop}
+
+    cp -a ${appimageContents}/{locales,resources} $out/share/${pname}
+    cp -a ${appimageContents}/revolt-desktop.desktop $out/share/applications/${pname}.desktop
+    cp -a ${appimageContents}/usr/share/icons $out/share/icons
+
+    substituteInPlace $out/share/applications/${pname}.desktop \
+      --replace 'Exec=AppRun' 'Exec=${pname}'
+
+    runHook postInstall
+  '';
+
+  postFixup = ''
+    makeWrapper ${electron}/bin/electron $out/bin/${pname} \
+      --add-flags $out/share/${pname}/resources/app.asar \
+      --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform=wayland --enable-features=WaylandWindowDecorations}}"
+  '';
+
+  meta = with lib; {
+    description = "An open source user-first chat platform";
+    homepage = "https://revolt.chat/";
+    changelog = "https://github.com/revoltchat/desktop/releases/tag/v${version}";
+    license = licenses.agpl3Only;
+    maintainers = with maintainers; [ heyimnova ];
+    platforms = platforms.linux;
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    mainProgram = "revolt-desktop";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/ricochet/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/ricochet/default.nix
new file mode 100644
index 000000000000..f612ec524a7b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/ricochet/default.nix
@@ -0,0 +1,76 @@
+{ mkDerivation
+, lib
+, fetchFromGitHub
+, pkg-config
+, makeDesktopItem
+, qtbase
+, qttools
+, qtmultimedia
+, qtquick1
+, qtquickcontrols
+, openssl
+, protobuf
+, qmake
+}:
+
+mkDerivation rec {
+  pname = "ricochet";
+  version = "1.1.4";
+
+  src = fetchFromGitHub {
+    owner = "ricochet-im";
+    repo = "ricochet";
+    rev = "v${version}";
+    sha256 = "sha256-CGVTHa0Hqj90WvB6ZbA156DVgzv/R7blsU550y2Ai9c=";
+  };
+
+  desktopItem = makeDesktopItem {
+    name = "ricochet";
+    exec = "ricochet";
+    icon = "ricochet";
+    desktopName = "Ricochet";
+    genericName = "Ricochet";
+    comment = meta.description;
+    categories = [ "Office" "Email" ];
+  };
+
+  buildInputs = [
+    qtbase
+    qttools
+    qtmultimedia
+    qtquick1
+    qtquickcontrols
+    openssl
+    protobuf
+  ];
+
+  nativeBuildInputs = [ pkg-config qmake ];
+
+  preConfigure = ''
+    export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE $(pkg-config --cflags openssl)"
+  '';
+
+  qmakeFlags = [ "DEFINES+=RICOCHET_NO_PORTABLE" ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ricochet $out/bin
+
+    mkdir -p $out/share/applications
+    cp $desktopItem/share/applications"/"* $out/share/applications
+
+    mkdir -p $out/share/pixmaps
+    cp icons/ricochet.png $out/share/pixmaps/ricochet.png
+  '';
+
+  # RCC: Error in 'translation/embedded.qrc': Cannot find file 'ricochet_en.qm'
+  enableParallelBuilding = false;
+
+  meta = with lib; {
+    description = "Anonymous peer-to-peer instant messaging";
+    homepage = "https://ricochet.im";
+    license = licenses.bsd3;
+    maintainers = [ maintainers.codsl maintainers.jgillich maintainers.np ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/ripcord/darwin.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/ripcord/darwin.nix
new file mode 100644
index 000000000000..39403ba774fa
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/ripcord/darwin.nix
@@ -0,0 +1,34 @@
+{ stdenvNoCC, lib, fetchzip }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "ripcord";
+  version = "0.4.29";
+
+  src = fetchzip {
+    url = "https://cancel.fm/dl/Ripcord_Mac_${version}.zip";
+    sha256 = "sha256-v8iydjLBjFN5LuctpcBpEkhSICxPhLKzLjSASWtsQok=";
+    stripRoot = false;
+  };
+
+  dontBuild = true;
+  dontFixup = true; # modification is not allowed by the license https://cancel.fm/ripcord/shareware-redistribution/
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/Applications
+    cp -r $src/Ripcord.app $out/Applications/
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Desktop chat client for Slack and Discord";
+    homepage = "https://cancel.fm/ripcord/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    # See: https://cancel.fm/ripcord/shareware-redistribution/
+    license = licenses.unfreeRedistributable;
+    maintainers = with maintainers; [ mikroskeem ];
+    platforms = [ "x86_64-darwin" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/ripcord/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/ripcord/default.nix
new file mode 100644
index 000000000000..7fd0bd9bb1d3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/ripcord/default.nix
@@ -0,0 +1,69 @@
+{ lib, mkDerivation, fetchurl, makeFontsConf, appimageTools
+, qtbase, qtsvg, qtmultimedia, qtwebsockets, qtimageformats
+, autoPatchelfHook, desktop-file-utils, imagemagick
+, twemoji-color-font, xorg, libsodium, libopus, libGL, alsa-lib }:
+
+mkDerivation rec {
+  pname = "ripcord";
+  version = "0.4.29";
+
+  src = let
+    appimage = fetchurl {
+      url = "https://cancel.fm/dl/Ripcord-${version}-x86_64.AppImage";
+      sha256 = "sha256-4yDLPEBDsPKWtLwdpmSyl3b5XCwLAr2/EVtNRrFmmJk=";
+      name = "${pname}-${version}.AppImage";
+    };
+  in appimageTools.extract {
+    name = "${pname}-${version}";
+    src = appimage;
+  };
+
+  nativeBuildInputs = [ autoPatchelfHook desktop-file-utils imagemagick ];
+  buildInputs = [ libsodium libopus libGL alsa-lib ]
+    ++ [ qtbase qtsvg qtmultimedia qtwebsockets qtimageformats ]
+    ++ (with xorg; [ libX11 libXScrnSaver libXcursor xkeyboardconfig ]);
+
+  fontsConf = makeFontsConf {
+    fontDirectories = [ twemoji-color-font ];
+  };
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out
+    cp -r ${src}/{qt.conf,translations,twemoji.ripdb} $out
+
+    for size in 16 32 48 64 72 96 128 192 256 512 1024; do
+      mkdir -p $out/share/icons/hicolor/"$size"x"$size"/apps
+      convert -resize "$size"x"$size" ${src}/Ripcord_Icon.png $out/share/icons/hicolor/"$size"x"$size"/apps/ripcord.png
+    done
+
+    desktop-file-install --dir $out/share/applications \
+      --set-key Exec --set-value ripcord \
+      --set-key Icon --set-value ripcord \
+      --set-key Comment --set-value "${meta.description}" \
+      ${src}/Ripcord.desktop
+    mv $out/share/applications/Ripcord.desktop $out/share/applications/ripcord.desktop
+
+    install -Dm755 ${src}/Ripcord $out/Ripcord
+    patchelf --replace-needed libsodium.so.18 libsodium.so $out/Ripcord
+    makeQtWrapper $out/Ripcord $out/bin/ripcord \
+      --chdir "$out" \
+      --set FONTCONFIG_FILE "${fontsConf}" \
+      --prefix LD_LIBRARY_PATH ":" "${xorg.libXcursor}/lib" \
+      --prefix QT_XKB_CONFIG_ROOT ":" "${xorg.xkeyboardconfig}/share/X11/xkb" \
+      --set RIPCORD_ALLOW_UPDATES 0
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Desktop chat client for Slack and Discord";
+    homepage = "https://cancel.fm/ripcord/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    # See: https://cancel.fm/ripcord/shareware-redistribution/
+    license = licenses.unfreeRedistributable;
+    maintainers = with maintainers; [ infinisil ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/rocketchat-desktop/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/rocketchat-desktop/default.nix
new file mode 100644
index 000000000000..95bd9de69ee3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/rocketchat-desktop/default.nix
@@ -0,0 +1,97 @@
+{ lib, stdenv, pkgs, fetchurl, wrapGAppsHook }:
+let
+  libPathNative = { packages }: lib.makeLibraryPath packages;
+in
+stdenv.mkDerivation rec {
+  pname = "rocketchat-desktop";
+  version = "3.8.11";
+
+  src = fetchurl {
+    url = "https://github.com/RocketChat/Rocket.Chat.Electron/releases/download/${version}/rocketchat-${version}-linux-amd64.deb";
+    sha256 = "sha256-gRMoLzCAXByLVtzYAZnhmbgbfsav6CkbP3ZE0NDdlMw=";
+  };
+
+  nativeBuildInputs = [
+    wrapGAppsHook #to fully work with gnome also needs programs.dconf.enable = true in your configuration.nix
+  ];
+
+  buildInputs = with pkgs; [
+    gtk3
+    stdenv.cc.cc
+    zlib
+    glib
+    dbus
+    atk
+    pango
+    freetype
+    libgnome-keyring3
+    fontconfig
+    gdk-pixbuf
+    cairo
+    cups
+    expat
+    libgpg-error
+    alsa-lib
+    nspr
+    nss
+    xorg.libXrender
+    xorg.libX11
+    xorg.libXext
+    xorg.libXdamage
+    xorg.libXtst
+    xorg.libXcomposite
+    xorg.libXi
+    xorg.libXfixes
+    xorg.libXrandr
+    xorg.libXcursor
+    xorg.libxkbfile
+    xorg.libXScrnSaver
+    systemd
+    libnotify
+    xorg.libxcb
+    at-spi2-atk
+    at-spi2-core
+    libdbusmenu
+    libdrm
+    mesa
+    xorg.libxshmfence
+    libxkbcommon
+  ];
+
+  dontBuild = true;
+  dontConfigure = true;
+
+  unpackPhase = ''
+    ar p $src data.tar.xz | tar xJ ./opt/ ./usr/
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/bin
+    mv opt $out
+    mv usr/share $out
+    ln -s $out/opt/Rocket.Chat/rocketchat-desktop $out/bin/rocketchat-desktop
+    runHook postInstall
+  '';
+
+  postFixup =
+    let
+      libpath = libPathNative { packages = buildInputs; };
+    in
+    ''
+      app=$out/opt/Rocket.Chat
+      patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+        --set-rpath "${libpath}:$app" \
+        $app/rocketchat-desktop
+      sed -i -e "s|Exec=.*$|Exec=$out/bin/rocketchat-desktop|" $out/share/applications/rocketchat-desktop.desktop
+    '';
+
+  meta = with lib; {
+    description = "Official Desktop client for Rocket.Chat";
+    homepage = "https://github.com/RocketChat/Rocket.Chat.Electron";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.mit;
+    maintainers = with maintainers; [ gbtb ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/schildichat/pin.json b/nixpkgs/pkgs/applications/networking/instant-messengers/schildichat/pin.json
new file mode 100644
index 000000000000..fbae80954e8b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/schildichat/pin.json
@@ -0,0 +1,9 @@
+{
+  "version": "1.11.30-sc.2",
+  "rev": "v1.11.30-sc.2",
+  "srcHash": "1qb1fcr52gyzxndz3j77vn3ddwjpxwvicnh16c72zpzpfbbky7a5",
+  "webYarnHash": "0bg5vc7q8afqfpsaqqkczf9whbzici5d2bxj5cadhrlmlb27f8nx",
+  "jsSdkYarnHash": "0p1whh3pmqz170l542fiq3zgljl5daa9b96i59p3wvggnx7kny7j",
+  "reactSdkYarnHash": "02ysshiyjj3w00b628is9bd7i8qc3vc8kr1zam2dpj26lb9k5pdd",
+  "desktopYarnHash": "16pzmlwzf3z8mky3wb4azaiggigyfnpxmbq3irjp30ic6yhl50yw"
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/schildichat/schildichat-desktop.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/schildichat/schildichat-desktop.nix
new file mode 100644
index 000000000000..cf2c44f5f2f2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/schildichat/schildichat-desktop.nix
@@ -0,0 +1,131 @@
+{ lib
+, element-desktop # for seshat and keytar
+, schildichat-web
+, stdenv
+, fetchFromGitHub
+, makeWrapper
+, makeDesktopItem
+, copyDesktopItems
+, fetchYarnDeps
+, yarn
+, nodejs
+, fixup_yarn_lock
+, electron
+, Security
+, AppKit
+, CoreServices
+, sqlcipher
+}:
+
+let
+  pinData = lib.importJSON ./pin.json;
+  executableName = "schildichat-desktop";
+in
+stdenv.mkDerivation rec {
+  pname = "schildichat-desktop";
+  inherit (pinData) version;
+
+  src = fetchFromGitHub {
+    owner = "SchildiChat";
+    repo = "schildichat-desktop";
+    inherit (pinData) rev;
+    sha256 = pinData.srcHash;
+    fetchSubmodules = true;
+  };
+
+  offlineCache = fetchYarnDeps {
+    yarnLock = src + "/element-desktop/yarn.lock";
+    sha256 = pinData.desktopYarnHash;
+  };
+
+  nativeBuildInputs = [ yarn fixup_yarn_lock nodejs makeWrapper copyDesktopItems ];
+  inherit (element-desktop) seshat keytar;
+
+  configurePhase = ''
+    runHook preConfigure
+
+    export HOME=$(mktemp -d)
+    pushd element-desktop
+    yarn config --offline set yarn-offline-mirror $offlineCache
+    fixup_yarn_lock yarn.lock
+    yarn install --offline --frozen-lockfile --ignore-platform --ignore-scripts --no-progress --non-interactive
+    rm -rf node_modules/matrix-seshat node_modules/keytar
+    ln -s $keytar node_modules/keytar
+    ln -s $seshat node_modules/matrix-seshat
+    patchShebangs node_modules/
+    popd
+
+    runHook postConfigure
+  '';
+
+  # Only affects unused scripts in $out/share/element/electron/scripts. Also
+  # breaks because there are some `node`-scripts with a `npx`-shebang and
+  # this shouldn't be in the closure just for unused scripts.
+  dontPatchShebangs = true;
+
+  buildPhase = ''
+    runHook preBuild
+
+    pushd element-desktop
+    yarn --offline run build:ts
+    yarn --offline run i18n
+    yarn --offline run build:res
+    popd
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    # resources
+    mkdir -p "$out/share/element"
+    ln -s '${schildichat-web}' "$out/share/element/webapp"
+    mv element-desktop "$out/share/element/electron"
+    cp -r "$out/share/element/electron/res/img" "$out/share/element"
+    cp $out/share/element/electron/lib/i18n/strings/en_EN.json $out/share/element/electron/lib/i18n/strings/en-us.json
+    ln -s $out/share/element/electron/lib/i18n/strings/en{-us,}.json
+
+    # icons
+    for icon in $out/share/element/electron/build/icons/*.png; do
+      mkdir -p "$out/share/icons/hicolor/$(basename $icon .png)/apps"
+      ln -s "$icon" "$out/share/icons/hicolor/$(basename $icon .png)/apps/schildichat.png"
+    done
+
+    # executable wrapper
+    # LD_PRELOAD workaround for sqlcipher not found: https://github.com/matrix-org/seshat/issues/102
+    makeWrapper '${electron}/bin/electron' "$out/bin/${executableName}" \
+      --set LD_PRELOAD ${sqlcipher}/lib/libsqlcipher.so \
+      --add-flags "$out/share/element/electron" \
+      --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}"
+
+    runHook postInstall
+  '';
+
+  # The desktop item properties should be kept in sync with data from upstream:
+  # https://github.com/schildichat/element-desktop/blob/sc/package.json
+  desktopItems = [
+    (makeDesktopItem {
+      name = "schildichat-desktop";
+      exec = "${executableName} %u";
+      icon = "schildichat";
+      desktopName = "SchildiChat";
+      genericName = "Matrix Client";
+      comment = meta.description;
+      categories = [ "Network" "InstantMessaging" "Chat" ];
+      startupWMClass = "schildichat";
+      mimeTypes = [ "x-scheme-handler/element" ];
+    })
+  ];
+
+  passthru.updateScript = ./update.sh;
+
+  meta = with lib; {
+    description = "Matrix client / Element Desktop fork";
+    homepage = "https://schildi.chat/";
+    changelog = "https://github.com/SchildiChat/schildichat-desktop/releases";
+    maintainers = teams.matrix.members ++ (with maintainers; [ kloenk yuka ]);
+    license = licenses.asl20;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/schildichat/schildichat-web.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/schildichat/schildichat-web.nix
new file mode 100644
index 000000000000..1cba6c62a765
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/schildichat/schildichat-web.nix
@@ -0,0 +1,113 @@
+{ stdenv, lib
+, fetchFromGitHub
+, fetchYarnDeps
+, nodejs
+, yarn
+, fixup_yarn_lock
+, writeText, jq, conf ? {}
+}:
+
+let
+  pinData = lib.importJSON ./pin.json;
+  noPhoningHome = {
+    disable_guests = true; # disable automatic guest account registration at matrix.org
+  };
+  configOverrides = writeText "element-config-overrides.json" (builtins.toJSON (noPhoningHome // conf));
+
+in stdenv.mkDerivation rec {
+  pname = "schildichat-web";
+  inherit (pinData) version;
+
+  src = fetchFromGitHub {
+    owner = "SchildiChat";
+    repo = "schildichat-desktop";
+    inherit (pinData) rev;
+    sha256 = pinData.srcHash;
+    fetchSubmodules = true;
+  };
+
+  webOfflineCache = fetchYarnDeps {
+    yarnLock = src + "/element-web/yarn.lock";
+    sha256 = pinData.webYarnHash;
+  };
+  jsSdkOfflineCache = fetchYarnDeps {
+    yarnLock = src + "/matrix-js-sdk/yarn.lock";
+    sha256 = pinData.jsSdkYarnHash;
+  };
+  reactSdkOfflineCache = fetchYarnDeps {
+    yarnLock = src + "/matrix-react-sdk/yarn.lock";
+    sha256 = pinData.reactSdkYarnHash;
+  };
+
+  nativeBuildInputs = [ yarn fixup_yarn_lock jq nodejs ];
+
+  configurePhase = ''
+    runHook preConfigure
+
+    export HOME=$PWD/tmp
+    # with the update of openssl3, some key ciphers are not supported anymore
+    # this flag will allow those codecs again as a workaround
+    # see https://medium.com/the-node-js-collection/node-js-17-is-here-8dba1e14e382#5f07
+    # and https://github.com/vector-im/element-web/issues/21043
+    export NODE_OPTIONS=--openssl-legacy-provider
+    mkdir -p $HOME
+
+    pushd element-web
+    fixup_yarn_lock yarn.lock
+    yarn config --offline set yarn-offline-mirror $webOfflineCache
+    yarn install --offline --frozen-lockfile --ignore-platform --ignore-scripts --no-progress --non-interactive
+    patchShebangs node_modules
+    rm -rf node_modules/matrix-react-sdk
+    ln -s $PWD/../matrix-react-sdk node_modules/
+    rm -rf node_modules/matrix-js-sdk
+    ln -s $PWD/../matrix-js-sdk node_modules/
+    popd
+
+    pushd matrix-js-sdk
+    fixup_yarn_lock yarn.lock
+    yarn config --offline set yarn-offline-mirror $jsSdkOfflineCache
+    yarn install --offline --frozen-lockfile --ignore-platform --ignore-scripts --no-progress --non-interactive
+    patchShebangs node_modules
+    popd
+
+    pushd matrix-react-sdk
+    fixup_yarn_lock yarn.lock
+    yarn config --offline set yarn-offline-mirror $reactSdkOfflineCache
+    yarn install --offline --frozen-lockfile --ignore-platform --ignore-scripts --no-progress --non-interactive
+    patchShebangs node_modules scripts
+    popd
+
+    runHook postConfigure
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+
+    pushd element-web
+    export VERSION=${version}
+    yarn build:res --offline
+    yarn build:module_system --offline
+    yarn build:bundle --offline
+    popd
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mv element-web/webapp $out
+    jq -s '.[0] * .[1]' "configs/sc/config.json" "${configOverrides}" > "$out/config.json"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Matrix client / Element Web fork";
+    homepage = "https://schildi.chat/";
+    changelog = "https://github.com/SchildiChat/schildichat-desktop/releases";
+    maintainers = teams.matrix.members ++ (with maintainers; [ kloenk yuka ]);
+    license = licenses.asl20;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/schildichat/update.sh b/nixpkgs/pkgs/applications/networking/instant-messengers/schildichat/update.sh
new file mode 100755
index 000000000000..6ddc99902c3b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/schildichat/update.sh
@@ -0,0 +1,43 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -I nixpkgs=../../../../../ -i bash -p nix wget prefetch-yarn-deps nix-prefetch-git jq
+
+if [[ "$#" -gt 2 || "$1" == -* ]]; then
+  echo "Regenerates packaging data for the SchildiChat packages."
+  echo "Usage: $0 [git revision or tag] [version string override]"
+  exit 1
+fi
+
+rev="$1"
+version="$2"
+
+set -euo pipefail
+
+if [ -z "$rev" ]; then
+  rev="$(wget -O- "https://api.github.com/repos/SchildiChat/schildichat-desktop/releases?per_page=1" | jq -r '.[0].tag_name')"
+fi
+
+if [ -z "$version" ]; then
+  # strip leading "v"
+  version="${rev#v}"
+fi
+
+src_data=$(nix-prefetch-git https://github.com/SchildiChat/schildichat-desktop --fetch-submodules --rev $rev)
+src=$(echo $src_data | jq -r .path)
+src_hash=$(echo $src_data | jq -r .sha256)
+
+web_yarn_hash=$(prefetch-yarn-deps $src/element-web/yarn.lock)
+desktop_yarn_hash=$(prefetch-yarn-deps $src/element-desktop/yarn.lock)
+js_sdk_yarn_hash=$(prefetch-yarn-deps $src/matrix-js-sdk/yarn.lock)
+react_sdk_yarn_hash=$(prefetch-yarn-deps $src/matrix-react-sdk/yarn.lock)
+
+cat > pin.json << EOF
+{
+  "version": "$version",
+  "rev": "$rev",
+  "srcHash": "$src_hash",
+  "webYarnHash": "$web_yarn_hash",
+  "jsSdkYarnHash": "$js_sdk_yarn_hash",
+  "reactSdkYarnHash": "$react_sdk_yarn_hash",
+  "desktopYarnHash": "$desktop_yarn_hash"
+}
+EOF
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/scudcloud/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/scudcloud/default.nix
new file mode 100644
index 000000000000..06eb5384abd2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/scudcloud/default.nix
@@ -0,0 +1,23 @@
+{ lib, fetchFromGitHub, python3Packages }:
+
+python3Packages.buildPythonPackage rec {
+  pname = "scudcloud";
+  version = "1.65";
+
+  src = fetchFromGitHub {
+    owner = "raelgc";
+    repo = "scudcloud";
+    rev = "v${version}";
+    sha256 = "1ffdy74igll74fwpmnn3brvcxbk4iianqscdzz18sx1pfqpw16cl";
+  };
+
+  propagatedBuildInputs = with python3Packages; [ pyqt5_with_qtwebkit dbus-python jsmin ];
+
+  meta = with lib; {
+    description = "Non-official desktop client for Slack";
+    homepage = "https://github.com/raelgc/scudcloud";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ volhovm ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/seren/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/seren/default.nix
new file mode 100644
index 000000000000..ed02def3eb88
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/seren/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, stdenv
+, fetchurl
+, alsa-lib
+, libopus
+, libogg
+, gmp
+, ncurses
+}:
+
+stdenv.mkDerivation rec {
+  pname = "seren";
+  version = "0.0.21";
+
+  buildInputs = [ alsa-lib libopus libogg gmp ncurses ];
+
+  src = fetchurl {
+    url = "http://holdenc.altervista.org/seren/downloads/${pname}-${version}.tar.gz";
+    sha256 = "sha256-adI365McrJkvTexvnWjMzpHcJkLY3S/uWfE8u4yuqho=";
+  };
+
+  meta = with lib; {
+    description = "A simple ncurses VoIP program based on the Opus codec";
+    longDescription = ''
+      Seren is a simple VoIP program based on the Opus codec
+      that allows you to create a voice conference from the terminal, with up to 10
+      participants, without having to register accounts, exchange emails, or add
+      people to contact lists. All you need to join an existing conference is the
+      host name or IP address of one of the participants.
+    '';
+    homepage = "http://holdenc.altervista.org/seren/";
+    changelog = "http://holdenc.altervista.org/seren/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ matthewcroughan nixinator ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/session-desktop/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/session-desktop/default.nix
new file mode 100644
index 000000000000..647b2e662a4e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/session-desktop/default.nix
@@ -0,0 +1,66 @@
+{ lib
+, makeDesktopItem
+, copyDesktopItems
+, stdenvNoCC
+, fetchurl
+, appimageTools
+, makeWrapper
+}:
+
+let
+  version = "1.11.0";
+  pname = "session-desktop";
+
+  src = fetchurl {
+    url = "https://github.com/oxen-io/session-desktop/releases/download/v${version}/session-desktop-linux-x86_64-${version}.AppImage";
+    sha256 = "sha256-QartWtp5/OtJqQq5GXRoIQ/ytK9/YCW1ixXTUrnGwqw=";
+  };
+  appimage = appimageTools.wrapType2 {
+    inherit version pname src;
+  };
+  appimage-contents = appimageTools.extractType2 {
+    inherit version pname src;
+  };
+in
+stdenvNoCC.mkDerivation {
+  inherit version pname;
+  src = appimage;
+
+  nativeBuildInputs = [ copyDesktopItems makeWrapper ];
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "Session";
+      desktopName = "Session";
+      comment = "Onion routing based messenger";
+      exec = "${appimage}/bin/session-desktop-${version}";
+      icon = "${appimage-contents}/session-desktop.png";
+      terminal = false;
+      type = "Application";
+      categories = [ "Network" ];
+    })
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mv bin/session-desktop-${version} bin/session-desktop
+
+    mkdir -p $out/
+    cp -r bin $out/bin
+
+    wrapProgram $out/bin/session-desktop \
+      --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Onion routing based messenger";
+    homepage = "https://getsession.org/";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ alexnortung ];
+    platforms = [ "x86_64-linux" ];
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/signal-cli/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/signal-cli/default.nix
new file mode 100644
index 000000000000..32e47a3616c6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/signal-cli/default.nix
@@ -0,0 +1,55 @@
+{ stdenv, lib, fetchurl, makeWrapper, openjdk17_headless, libmatthew_java, dbus, dbus_java }:
+
+stdenv.mkDerivation rec {
+  pname = "signal-cli";
+  version = "0.12.1";
+
+  # Building from source would be preferred, but is much more involved.
+  src = fetchurl {
+    url = "https://github.com/AsamK/signal-cli/releases/download/v${version}/signal-cli-${version}-Linux.tar.gz";
+    hash = "sha256-pxDSAVh/zg3hCuTlSuilgD4VKe1CPSG/ZLl0TF1nc1I=";
+  };
+
+  buildInputs = lib.optionals stdenv.isLinux [ libmatthew_java dbus dbus_java ];
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -r lib $out/lib
+    cp bin/signal-cli $out/bin/signal-cli
+  '' + (if stdenv.isLinux then ''
+    makeWrapper ${openjdk17_headless}/bin/java $out/bin/signal-cli \
+      --set JAVA_HOME "${openjdk17_headless}" \
+      --add-flags "-classpath '$out/lib/*:${libmatthew_java}/lib/jni'" \
+      --add-flags "-Djava.library.path=${libmatthew_java}/lib/jni:${dbus_java}/share/java/dbus:$out/lib" \
+      --add-flags "org.asamk.signal.Main"
+  '' else ''
+    wrapProgram $out/bin/signal-cli \
+      --prefix PATH : ${lib.makeBinPath [ openjdk17_headless ]} \
+      --set JAVA_HOME ${openjdk17_headless}
+  '');
+
+  # Execution in the macOS (10.13) sandbox fails with
+  # dyld: Library not loaded: /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa
+  #   Referenced from: /nix/store/5ghc2l65p8jcjh0bsmhahd5m9k5p8kx0-zulu1.8.0_121-8.20.0.5/bin/java
+  #   Reason: no suitable image found.  Did find:
+  #         /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa: file system sandbox blocked stat()
+  #         /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa: file system sandbox blocked stat()
+  # /nix/store/in41dz8byyyz4c0w132l7mqi43liv4yr-stdenv-darwin/setup: line 1310:  2231 Abort trap: 6           signal-cli --version
+  doInstallCheck = stdenv.isLinux;
+
+  installCheckPhase = ''
+    export PATH=$PATH:$out/bin
+    # --help returns non-0 exit code even when working
+    signal-cli --version
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/AsamK/signal-cli";
+    description = "Command-line and dbus interface for communicating with the Signal messaging service";
+    changelog = "https://github.com/AsamK/signal-cli/blob/v${version}/CHANGELOG.md";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ ivan ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/signal-desktop/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/signal-desktop/default.nix
new file mode 100644
index 000000000000..7f2df73abe25
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/signal-desktop/default.nix
@@ -0,0 +1,12 @@
+{ callPackage }: builtins.mapAttrs (pname: attrs: callPackage ./generic.nix (attrs // { inherit pname; })) {
+  signal-desktop = {
+    dir = "Signal";
+    version = "6.30.1";
+    hash = "sha256-tG5R4A+Uz/ynw0cD7tW5/Fp8KlnNk+zmnRp01m/6vZU=";
+  };
+  signal-desktop-beta = {
+    dir = "Signal Beta";
+    version = "6.31.0-beta.1";
+    hash = "sha256-j3DY+FY7kVVGvVuVZw/JxIpwxtgBttSyWcRaa9MCSjE=";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/signal-desktop/generic.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/signal-desktop/generic.nix
new file mode 100644
index 000000000000..71b3660ca65d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/signal-desktop/generic.nix
@@ -0,0 +1,183 @@
+{ pname
+, dir
+, version
+, hash
+, stdenv
+, lib
+, fetchurl
+, autoPatchelfHook
+, dpkg
+, wrapGAppsHook
+, makeWrapper
+, nixosTests
+, gtk3
+, atk
+, at-spi2-atk
+, cairo
+, pango
+, gdk-pixbuf
+, glib
+, freetype
+, fontconfig
+, dbus
+, libX11
+, xorg
+, libXi
+, libXcursor
+, libXdamage
+, libXrandr
+, libXcomposite
+, libXext
+, libXfixes
+, libXrender
+, libXtst
+, libXScrnSaver
+, nss
+, nspr
+, alsa-lib
+, cups
+, expat
+, libuuid
+, at-spi2-core
+, libappindicator-gtk3
+, mesa
+  # Runtime dependencies:
+, systemd
+, libnotify
+, libdbusmenu
+, libpulseaudio
+, xdg-utils
+, wayland
+}:
+
+stdenv.mkDerivation rec {
+  inherit pname version; # Please backport all updates to the stable channel.
+  # All releases have a limited lifetime and "expire" 90 days after the release.
+  # When releases "expire" the application becomes unusable until an update is
+  # applied. The expiration date for the current release can be extracted with:
+  # $ grep -a "^{\"buildExpiration" "${signal-desktop}/lib/${dir}/resources/app.asar"
+  # (Alternatively we could try to patch the asar archive, but that requires a
+  # few additional steps and might not be the best idea.)
+
+  src = fetchurl {
+    url = "https://updates.signal.org/desktop/apt/pool/s/${pname}/${pname}_${version}_amd64.deb";
+    inherit hash;
+  };
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+    dpkg
+    (wrapGAppsHook.override { inherit makeWrapper; })
+  ];
+
+  buildInputs = [
+    alsa-lib
+    at-spi2-atk
+    at-spi2-core
+    atk
+    cairo
+    cups
+    dbus
+    expat
+    fontconfig
+    freetype
+    gdk-pixbuf
+    glib
+    gtk3
+    libX11
+    libXScrnSaver
+    libXcomposite
+    libXcursor
+    libXdamage
+    libXext
+    libXfixes
+    libXi
+    libXrandr
+    libXrender
+    libXtst
+    libappindicator-gtk3
+    libnotify
+    libuuid
+    mesa # for libgbm
+    nspr
+    nss
+    pango
+    systemd
+    xorg.libxcb
+    xorg.libxshmfence
+  ];
+
+  runtimeDependencies = [
+    (lib.getLib systemd)
+    libappindicator-gtk3
+    libnotify
+    libdbusmenu
+    xdg-utils
+    wayland
+  ];
+
+  unpackPhase = "dpkg-deb -x $src .";
+
+  dontBuild = true;
+  dontConfigure = true;
+  dontPatchELF = true;
+  # We need to run autoPatchelf manually with the "no-recurse" option, see
+  # https://github.com/NixOS/nixpkgs/pull/78413 for the reasons.
+  dontAutoPatchelf = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/lib
+
+    mv usr/share $out/share
+    mv "opt/${dir}" "$out/lib/${dir}"
+
+    # Note: The following path contains bundled libraries:
+    # $out/lib/${dir}/resources/app.asar.unpacked/node_modules/sharp/vendor/lib/
+    # We run autoPatchelf with the "no-recurse" option to avoid picking those
+    # up, but resources/app.asar still requires them.
+
+    # Symlink to bin
+    mkdir -p $out/bin
+    ln -s "$out/lib/${dir}/${pname}" $out/bin/${pname}
+
+    # Create required symlinks:
+    ln -s libGLESv2.so "$out/lib/${dir}/libGLESv2.so.2"
+
+    runHook postInstall
+  '';
+
+  preFixup = ''
+    gappsWrapperArgs+=(
+      --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ stdenv.cc.cc ] }"
+      # Currently crashes see https://github.com/NixOS/nixpkgs/issues/222043
+      #--add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}"
+      --suffix PATH : ${lib.makeBinPath [ xdg-utils ]}
+    )
+
+    # Fix the desktop link
+    substituteInPlace $out/share/applications/${pname}.desktop \
+      --replace "/opt/${dir}/${pname}" $out/bin/${pname}
+
+    autoPatchelf --no-recurse -- "$out/lib/${dir}/"
+    patchelf --add-needed ${libpulseaudio}/lib/libpulse.so "$out/lib/${dir}/resources/app.asar.unpacked/node_modules/@signalapp/ringrtc/build/linux/libringrtc-x64.node"
+  '';
+
+  # Tests if the application launches and waits for "Link your phone to Signal Desktop":
+  passthru.tests.application-launch = nixosTests.signal-desktop;
+
+  meta = {
+    description = "Private, simple, and secure messenger";
+    longDescription = ''
+      Signal Desktop is an Electron application that links with your
+      "Signal Android" or "Signal iOS" app.
+    '';
+    homepage = "https://signal.org/";
+    changelog = "https://github.com/signalapp/Signal-Desktop/releases/tag/v${version}";
+    license = lib.licenses.agpl3Only;
+    maintainers = with lib.maintainers; [ mic92 equirosa urandom ];
+    platforms = [ "x86_64-linux" ];
+    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/signalbackup-tools/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/signalbackup-tools/default.nix
new file mode 100644
index 000000000000..58591562201a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/signalbackup-tools/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, darwin, fetchFromGitHub, openssl, sqlite }:
+
+(if stdenv.isDarwin then darwin.apple_sdk_11_0.llvmPackages_14.stdenv else stdenv).mkDerivation rec {
+  pname = "signalbackup-tools";
+  version = "20230907";
+
+  src = fetchFromGitHub {
+    owner = "bepaald";
+    repo = pname;
+    rev = version;
+    hash = "sha256-Y0fCWy2hrUcsH1ru96Y5TezglUaDrw4pcoWmLjBojxs=";
+  };
+
+  postPatch = ''
+    patchShebangs BUILDSCRIPT_MULTIPROC.bash44
+  '';
+
+  buildInputs = [ openssl sqlite ];
+
+  buildPhase = ''
+    runHook preBuild
+    ./BUILDSCRIPT_MULTIPROC.bash44${lib.optionalString stdenv.isDarwin " --config nixpkgs-darwin"}
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/bin
+    cp signalbackup-tools $out/bin/
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Tool to work with Signal Backup files";
+    homepage = "https://github.com/bepaald/signalbackup-tools";
+    license = licenses.gpl3Only;
+    maintainers = [ maintainers.malo ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/signald/0001-Fetch-buildconfig-during-gradle-build-inside-Nix-FOD.patch b/nixpkgs/pkgs/applications/networking/instant-messengers/signald/0001-Fetch-buildconfig-during-gradle-build-inside-Nix-FOD.patch
new file mode 100644
index 000000000000..4a49ff991e6b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/signald/0001-Fetch-buildconfig-during-gradle-build-inside-Nix-FOD.patch
@@ -0,0 +1,42 @@
+From 33d8de9ccce7eecb12542e0fc11131b5101e1aa8 Mon Sep 17 00:00:00 2001
+From: Maximilian Bosch <maximilian@mbosch.me>
+Date: Sat, 26 Feb 2022 12:33:13 +0100
+Subject: [PATCH] Fetch buildconfig during gradle build inside Nix FOD
+
+---
+ build.gradle | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/build.gradle b/build.gradle
+index ea3fea1..01e444d 100644
+--- a/build.gradle
++++ b/build.gradle
+@@ -82,6 +82,9 @@ static String getVersion() {
+ 
+ repositories {
+     maven {url "https://gitlab.com/api/v4/groups/6853927/-/packages/maven"} // https://gitlab.com/groups/signald/-/packages
++    maven {
++      url "https://plugins.gradle.org/m2/"
++    }
+     mavenCentral()
+ }
+ 
+@@ -101,6 +104,8 @@ dependencies {
+     implementation 'io.prometheus:simpleclient:0.16.0'
+     implementation 'io.prometheus:simpleclient_hotspot:0.16.0'
+     implementation 'io.prometheus:simpleclient_httpserver:0.16.0'
++    implementation 'com.github.gmazzo.buildconfig:com.github.gmazzo.buildconfig.gradle.plugin:3.0.3'
++    implementation 'org.jetbrains.kotlin:kotlin-scripting-jvm:1.7.10'
+     implementation 'com.squareup.okhttp3:logging-interceptor:4.10.0'
+     implementation 'io.sentry:sentry:6.11.0'
+     testImplementation 'org.junit.jupiter:junit-jupiter:5.9.0'
+@@ -170,4 +175,4 @@ allprojects {
+ runtime {
+     options = ['--strip-java-debug-attributes', '--compress', '2', '--no-header-files', '--no-man-pages']
+     modules = ['java.base', 'java.management', 'java.naming', 'java.sql', 'java.xml', 'jdk.crypto.ec', 'jdk.httpserver', 'java.desktop', 'jdk.unsupported']
+-}
+\ No newline at end of file
++}
+-- 
+2.38.3
+
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/signald/0002-buildconfig-local-deps-fixes.patch b/nixpkgs/pkgs/applications/networking/instant-messengers/signald/0002-buildconfig-local-deps-fixes.patch
new file mode 100644
index 000000000000..bf583de53ba2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/signald/0002-buildconfig-local-deps-fixes.patch
@@ -0,0 +1,71 @@
+From 4bf0aef4003f7494103a93ae1c2957b2cd32bb59 Mon Sep 17 00:00:00 2001
+From: Maximilian Bosch <maximilian@mbosch.me>
+Date: Sat, 26 Feb 2022 12:36:15 +0100
+Subject: [PATCH 2/2] buildconfig/local deps fixes
+
+---
+ build.gradle | 26 ++++++++++++++++++--------
+ 1 file changed, 18 insertions(+), 8 deletions(-)
+
+diff --git a/build.gradle b/build.gradle
+index ea3fea1..24415d8 100644
+--- a/build.gradle
++++ b/build.gradle
+@@ -10,11 +10,21 @@ import org.gradle.nativeplatform.platform.internal.ArchitectureInternal
+ import org.gradle.nativeplatform.platform.internal.DefaultNativePlatform
+ import org.gradle.nativeplatform.platform.internal.OperatingSystemInternal
+ 
++buildscript {
++  repositories {
++    maven {
++      url(uri("@deps@"))
++    }
++  }
++  dependencies {
++    classpath "com.github.gmazzo:gradle-buildconfig-plugin:3.0.3"
++  }
++}
++
+ plugins {
+-   id 'com.github.gmazzo.buildconfig' version '3.0.3'
+-   id 'org.beryx.runtime' version '1.12.7'
+    id 'application'
+ }
++apply plugin: "com.github.gmazzo.buildconfig"
+ 
+ compileJava.options.encoding = 'UTF-8'
+ 
+@@ -82,7 +92,10 @@ static String getVersion() {
+ 
+ repositories {
+     maven {url "https://gitlab.com/api/v4/groups/6853927/-/packages/maven"} // https://gitlab.com/groups/signald/-/packages
+-    mavenCentral()
++    mavenLocal()
++    maven {
++      url uri("@deps@")
++    }
+ }
+ 
+ dependencies {
+@@ -101,6 +114,8 @@ dependencies {
+     implementation 'io.prometheus:simpleclient:0.16.0'
+     implementation 'io.prometheus:simpleclient_hotspot:0.16.0'
+     implementation 'io.prometheus:simpleclient_httpserver:0.16.0'
++    implementation 'com.github.gmazzo.buildconfig:com.github.gmazzo.buildconfig.gradle.plugin:3.0.3'
++    implementation 'org.jetbrains.kotlin:kotlin-scripting-jvm:1.7.10'
+     implementation 'com.squareup.okhttp3:logging-interceptor:4.10.0'
+     implementation 'io.sentry:sentry:6.11.0'
+     testImplementation 'org.junit.jupiter:junit-jupiter:5.9.0'
+@@ -166,8 +181,3 @@ allprojects {
+         }
+     }
+ }
+-
+-runtime {
+-    options = ['--strip-java-debug-attributes', '--compress', '2', '--no-header-files', '--no-man-pages']
+-    modules = ['java.base', 'java.management', 'java.naming', 'java.sql', 'java.xml', 'jdk.crypto.ec', 'jdk.httpserver', 'java.desktop', 'jdk.unsupported']
+-}
+\ No newline at end of file
+-- 
+2.38.3
+
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/signald/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/signald/default.nix
new file mode 100644
index 000000000000..b15dbbb92bdb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/signald/default.nix
@@ -0,0 +1,141 @@
+{ lib, stdenv, fetchurl, fetchFromGitLab, jdk17_headless, coreutils, gradle, git, perl
+, makeWrapper, fetchpatch, substituteAll, jre_minimal
+}:
+
+# NOTE: when updating the package, please check if some of the hacks in `deps.installPhase`
+# can be removed again!
+
+let
+  pname = "signald";
+  version = "0.23.2";
+
+  src = fetchFromGitLab {
+    owner = pname;
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-EofgwZSDp2ZFhlKL2tHfzMr3EsidzuY4pkRZrV2+1bA=";
+  };
+
+  jre' = jre_minimal.override {
+    jdk = jdk17_headless;
+    # from https://gitlab.com/signald/signald/-/blob/0.23.0/build.gradle#L173
+    modules = [
+      "java.base"
+      "java.management"
+      "java.naming"
+      "java.sql"
+      "java.xml"
+      "jdk.crypto.ec"
+      "jdk.httpserver"
+
+      # for java/beans/PropertyChangeEvent
+      "java.desktop"
+      # for sun/misc/Unsafe
+      "jdk.unsupported"
+    ];
+  };
+
+  # fake build to pre-download deps into fixed-output derivation
+  deps = stdenv.mkDerivation {
+    pname = "${pname}-deps";
+    inherit src version;
+    nativeBuildInputs = [ gradle perl ];
+    patches = [ ./0001-Fetch-buildconfig-during-gradle-build-inside-Nix-FOD.patch ];
+    buildPhase = ''
+      export GRADLE_USER_HOME=$(mktemp -d)
+      gradle --no-daemon build
+    '';
+    installPhase = ''
+      find $GRADLE_USER_HOME/caches/modules-2 -type f -regex '.*\.\(jar\|pom\)' \
+        | perl -pe 's#(.*/([^/]+)/([^/]+)/([^/]+)/[0-9a-f]{30,40}/([^/\s]+))$# ($x = $2) =~ tr|\.|/|; "install -Dm444 $1 \$out/$x/$3/$4/$5" #e' \
+        | sh -x
+
+      # WARNING: don't try this at home and wear safety-goggles while working with this!
+      # We patch around in the dependency tree to resolve some spurious dependency resolution errors.
+      # Whenever this package gets updated, please check if some of these hacks are obsolete!
+
+      # Mimic existence of okio-3.2.0.jar. Originally known as okio-jvm-3.2.0 (and renamed),
+      # but gradle doesn't detect such renames, only fetches the latter and then fails
+      # in `signald.buildPhase` because it cannot find `okio-3.2.0.jar`.
+      pushd $out/com/squareup/okio/okio/3.2.0 &>/dev/null
+        cp -v ../../okio-jvm/3.2.0/okio-jvm-3.2.0.jar okio-3.2.0.jar
+      popd &>/dev/null
+
+      # For some reason gradle fetches 2.14.1 instead of 2.14.0 here even though 2.14.0 is required
+      # according to `./gradlew -q dependencies`, so we pretend to have 2.14.0 available here.
+      # According to the diff in https://github.com/FasterXML/jackson-dataformats-text/compare/jackson-dataformats-text-2.14.0...jackson-dataformats-text-2.14.1
+      # the only relevant change is in the code itself (and in the tests/docs), so this seems
+      # binary-compatible.
+      cp -v \
+        $out/com/fasterxml/jackson/dataformat/jackson-dataformat-toml/2.14.1/jackson-dataformat-toml-2.14.1.jar \
+        $out/com/fasterxml/jackson/dataformat/jackson-dataformat-toml/2.14.0/jackson-dataformat-toml-2.14.0.jar
+    '';
+    # Don't move info to share/
+    forceShare = [ "dummy" ];
+    outputHashAlgo = "sha256";
+    outputHashMode = "recursive";
+    # Downloaded jars differ by platform
+    outputHash = {
+      x86_64-linux = "sha256-9DHykkvazVBN2kfw1Pbejizk/R18v5w8lRBHZ4aXL5Q=";
+      aarch64-linux = "sha256-RgAiRbUojBc+9RN/HpAzzpTjkjZ6q+jebDsqvah5XBw=";
+    }.${stdenv.system} or (throw "Unsupported platform");
+  };
+
+in stdenv.mkDerivation {
+  inherit pname src version;
+
+  patches = [
+    (substituteAll {
+      src = ./0002-buildconfig-local-deps-fixes.patch;
+      inherit deps;
+    })
+  ];
+
+  passthru = {
+    # Mostly for debugging purposes.
+    inherit deps;
+  };
+
+  buildPhase = ''
+    runHook preBuild
+
+    export GRADLE_USER_HOME=$(mktemp -d)
+
+    gradle --offline --no-daemon distTar
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out
+    tar xvf ./build/distributions/signald.tar --strip-components=1 --directory $out/
+    wrapProgram $out/bin/signald \
+      --prefix PATH : ${lib.makeBinPath [ coreutils ]} \
+      --set JAVA_HOME "${jre'}"
+
+    runHook postInstall
+  '';
+
+  nativeBuildInputs = [ git gradle makeWrapper ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Unofficial daemon for interacting with Signal";
+    longDescription = ''
+      Signald is a daemon that facilitates communication over Signal.  It is
+      unofficial, unapproved, and not nearly as secure as the real Signal
+      clients.
+    '';
+    homepage = "https://signald.org";
+    sourceProvenance = with sourceTypes; [
+      fromSource
+      binaryBytecode  # deps
+    ];
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ expipiplus1 ma27 ];
+    platforms = [ "x86_64-linux" "aarch64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/signaldctl/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/signaldctl/default.nix
new file mode 100644
index 000000000000..82637dbbb0c9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/signaldctl/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, buildGoModule
+, fetchFromGitLab
+, gitUpdater
+}:
+
+buildGoModule rec {
+  pname = "signaldctl";
+  version = "0.6.1";
+  src = fetchFromGitLab {
+    owner = "signald";
+    repo = "signald-go";
+    rev = "v${version}";
+    hash = "sha256-lMJyr4BPZ8V2f//CUkr7CVQ6o8nRyeLBHMDEyLcHSgQ=";
+  };
+
+  vendorHash = "sha256-LGIWAVhDJCg6Ox7U4ZK15K8trjsvSZm4/0jNpIDmG7I=";
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    # install only the binary and not any intermediate artifacts like
+    # `generators` which is only used during build
+    cp "$GOPATH/bin/signaldctl" $out/bin
+
+    runHook postInstall
+  '';
+
+  passthru.updateScript = gitUpdater {
+    rev-prefix = "v";
+  };
+
+  meta = with lib; {
+    description = "A golang library for communicating with signald";
+    homepage = "https://signald.org/signaldctl/";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ colinsane ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/silc-client/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/silc-client/default.nix
new file mode 100644
index 000000000000..417cb4dbb844
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/silc-client/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchurl, perl, pkg-config, glib, ncurses
+, enablePlugin ? false }:
+
+# Enabling the plugin and using it with a recent irssi, segafults on join:
+# http://marc.info/?l=silc-devel&m=125610477802211
+
+stdenv.mkDerivation rec {
+  pname = "silc-client" + lib.optionalString enablePlugin "-irssi-plugin";
+  version = "1.1.11";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/silc/silc/client/sources/silc-client-${version}.tar.bz2";
+    sha256 = "13cp3fmdnj8scjak0d2xal3bfvs2k7ssrwdhp0zl6jar5rwc7prn";
+  };
+
+  enableParallelBuilding = true;
+
+  dontDisableStatic = true;
+
+  hardeningDisable = [ "format" ];
+
+  configureFlags = [ "--with-ncurses=${ncurses.dev}" ];
+
+  preConfigure = lib.optionalString enablePlugin ''
+    configureFlags="$configureFlags --with-silc-plugin=$out/lib/irssi"
+  '';
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ perl glib ncurses ];
+
+  meta = {
+    homepage = "http://silcnet.org/";
+    description = "Secure Internet Live Conferencing server";
+    license = lib.licenses.gpl2;
+    maintainers = with lib.maintainers; [viric];
+    platforms = with lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/sky/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/sky/default.nix
new file mode 100644
index 000000000000..e949625875e5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/sky/default.nix
@@ -0,0 +1,67 @@
+{ lib
+, mkDerivation
+, fetchurl
+, autoPatchelfHook
+, zstd
+, curl
+, ffmpeg
+, libjpeg_turbo
+, libpam-wrapper
+, libv4l
+, pulseaudio
+, zlib
+, xorg
+}:
+
+mkDerivation rec {
+  pname = "sky";
+  version = "2.1.7801";
+
+  src = fetchurl {
+    url = "https://tel.red/repos/archlinux/sky-archlinux-${version}-1-x86_64.pkg.tar.zst";
+    sha256 = "sha256-3xiq2b3CwNjRd09q0z8olrmLGhgkJGAVkZoJSIHom+k=";
+  };
+
+  nativeBuildInputs = [ autoPatchelfHook zstd ];
+
+  buildInputs = [
+    curl
+    ffmpeg
+    libjpeg_turbo
+    libpam-wrapper
+    libv4l
+    pulseaudio
+    xorg.libX11
+    xorg.libXScrnSaver
+    xorg.libXcursor
+    xorg.libXdamage
+    xorg.libXinerama
+    xorg.libXmu
+    xorg.libXrandr
+    xorg.libXtst
+    xorg.libXv
+    xorg.libxkbfile
+    zlib
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir $out
+    mv * $out/
+    ln --force --symbolic $out/lib/sky/sky{,_sender} $out/bin
+    substituteInPlace $out/share/applications/sky.desktop \
+      --replace /usr/ $out/
+
+    runHook postInstall
+  '';
+
+  meta = {
+    description = "Lync & Skype for Business on Linux";
+    homepage = "https://tel.red/";
+    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+    license = lib.licenses.unfree;
+    maintainers = [ lib.maintainers.wucke13 ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/skypeforlinux/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/skypeforlinux/default.nix
new file mode 100644
index 000000000000..c29df0221b6d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/skypeforlinux/default.nix
@@ -0,0 +1,128 @@
+{ lib, stdenv, fetchurl, dpkg
+, alsa-lib, atk, cairo, cups, curl, dbus, expat, fontconfig, freetype, gdk-pixbuf, glib, glibc, gnome
+, gtk3, libappindicator-gtk3, libnotify, libpulseaudio, libsecret, libv4l, nspr, nss, pango, systemd, wrapGAppsHook, xorg
+, at-spi2-atk, libuuid, at-spi2-core, libdrm, mesa, libxkbcommon, libxshmfence }:
+
+let
+
+  # Please keep the version x.y.0.z and do not update to x.y.76.z because the
+  # source of the latter disappears much faster.
+  version = "8.96.0.207";
+
+  rpath = lib.makeLibraryPath [
+    alsa-lib
+    atk
+    at-spi2-atk
+    at-spi2-core
+    cairo
+    cups
+    curl
+    dbus
+    expat
+    fontconfig
+    freetype
+    glib
+    glibc
+    libsecret
+    libuuid
+
+    gdk-pixbuf
+    gtk3
+    libappindicator-gtk3
+
+    gnome.gnome-keyring
+
+    libnotify
+    libpulseaudio
+    nspr
+    nss
+    pango
+    stdenv.cc.cc
+    systemd
+
+    libv4l
+    libdrm
+    mesa
+    libxkbcommon
+    libxshmfence
+    xorg.libxkbfile
+    xorg.libX11
+    xorg.libXcomposite
+    xorg.libXcursor
+    xorg.libXdamage
+    xorg.libXext
+    xorg.libXfixes
+    xorg.libXi
+    xorg.libXrandr
+    xorg.libXrender
+    xorg.libXtst
+    xorg.libXScrnSaver
+    xorg.libxcb
+  ] + ":${stdenv.cc.cc.lib}/lib64";
+
+  src =
+    if stdenv.hostPlatform.system == "x86_64-linux" then
+      fetchurl {
+        urls = [
+          "https://repo.skype.com/deb/pool/main/s/skypeforlinux/skypeforlinux_${version}_amd64.deb"
+          "https://mirror.cs.uchicago.edu/skype/pool/main/s/skypeforlinux/skypeforlinux_${version}_amd64.deb"
+          "https://web.archive.org/web/https://repo.skype.com/deb/pool/main/s/skypeforlinux/skypeforlinux_${version}_amd64.deb"
+        ];
+        sha256 = "sha256-tkOPYFkmc4nzO8Rgat9/VNuzzIW10qSEzbXhjkZV83k=";
+      }
+    else
+      throw "Skype for linux is not supported on ${stdenv.hostPlatform.system}";
+
+in stdenv.mkDerivation {
+  pname = "skypeforlinux";
+  inherit version;
+
+  system = "x86_64-linux";
+
+  inherit src;
+
+  nativeBuildInputs = [
+    wrapGAppsHook
+    glib # For setup hook populating GSETTINGS_SCHEMA_PATH
+  ];
+
+  buildInputs = [ dpkg ];
+
+  dontUnpack = true;
+  installPhase = ''
+    mkdir -p $out
+    dpkg -x $src $out
+    cp -av $out/usr/* $out
+    rm -rf $out/opt $out/usr
+    rm $out/bin/skypeforlinux
+
+    ln -s "$out/share/skypeforlinux/skypeforlinux" "$out/bin/skypeforlinux"
+
+    # Otherwise it looks "suspicious"
+    chmod -R g-w $out
+  '';
+
+  postFixup = ''
+    for file in $(find $out -type f \( -perm /0111 -o -name \*.so\* -or -name \*.node\* \) ); do
+      patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" "$file" || true
+      patchelf --set-rpath ${rpath}:$out/share/skypeforlinux $file || true
+    done
+
+    # Fix the desktop link
+    substituteInPlace $out/share/applications/skypeforlinux.desktop \
+      --replace /usr/bin/ ""
+    substituteInPlace $out/share/applications/skypeforlinux-share.desktop \
+      --replace /usr/bin/ ""
+    substituteInPlace $out/share/kservices5/ServiceMenus/skypeforlinux.desktop \
+      --replace /usr/bin/ ""
+  '';
+
+  meta = with lib; {
+    description = "Linux client for skype";
+    homepage = "https://www.skype.com";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = with maintainers; [ panaeon jraygauthier ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/slack-term/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/slack-term/default.nix
new file mode 100644
index 000000000000..99b8b4563d23
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/slack-term/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "slack-term";
+  version = "0.5.0";
+
+  src = fetchFromGitHub {
+    owner = "erroneousboat";
+    repo = "slack-term";
+    rev = "v${version}";
+    sha256 = "1fbq7bdhy70hlkklppimgdjamnk0v059pg73xm9ax1f4616ki1m6";
+  };
+  vendorSha256 = null;
+
+  meta = with lib; {
+    description = "Slack client for your terminal";
+    homepage = "https://github.com/erroneousboat/slack-term";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dtzWill ];
+    mainProgram = "slack-term";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/slack/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/slack/default.nix
new file mode 100644
index 000000000000..b52b9f479bd3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/slack/default.nix
@@ -0,0 +1,208 @@
+{ lib
+, stdenv
+, fetchurl
+, dpkg
+, undmg
+, makeWrapper
+, asar
+, alsa-lib
+, at-spi2-atk
+, at-spi2-core
+, atk
+, cairo
+, cups
+, curl
+, dbus
+, expat
+, fontconfig
+, freetype
+, gdk-pixbuf
+, glib
+, gtk3
+, libGL
+, libappindicator-gtk3
+, libdrm
+, libnotify
+, libpulseaudio
+, libuuid
+, libxcb
+, libxkbcommon
+, libxshmfence
+, mesa
+, nspr
+, nss
+, pango
+, pipewire
+, systemd
+, wayland
+, xdg-utils
+, xorg
+}:
+
+let
+  inherit (stdenv.hostPlatform) system;
+  throwSystem = throw "slack does not support system: ${system}";
+
+  pname = "slack";
+
+  x86_64-darwin-version = "4.34.115";
+  x86_64-darwin-sha256 = "1l2swrjxm47xyb8skwzy7clmr3qdckx9xs1x204jbrz1xk7yd7l5";
+
+  x86_64-linux-version = "4.34.115";
+  x86_64-linux-sha256 = "0gyyjyvrvn13i5308fg34z6b3yzr7vmmh1148a9xh79ngq2pqv47";
+
+  aarch64-darwin-version = "4.34.115";
+  aarch64-darwin-sha256 = "09qcz57yxjfw8sdqbvmkd25hs4c7frmpf6v94hr4d1szy1rfv11k";
+
+  version = {
+    x86_64-darwin = x86_64-darwin-version;
+    x86_64-linux = x86_64-linux-version;
+    aarch64-darwin =  aarch64-darwin-version;
+  }.${system} or throwSystem;
+
+
+  src = let
+    base = "https://downloads.slack-edge.com";
+  in {
+    x86_64-darwin = fetchurl {
+      url = "${base}/releases/macos/${version}/prod/x64/Slack-${version}-macOS.dmg";
+      sha256 = x86_64-darwin-sha256;
+    };
+    x86_64-linux = fetchurl {
+      url = "${base}/releases/linux/${version}/prod/x64/slack-desktop-${version}-amd64.deb";
+      sha256 = x86_64-linux-sha256;
+    };
+    aarch64-darwin = fetchurl {
+      url = "${base}/releases/macos/${version}/prod/arm64/Slack-${version}-macOS.dmg";
+      sha256 = aarch64-darwin-sha256;
+    };
+  }.${system} or throwSystem;
+
+  meta = with lib; {
+    description = "Desktop client for Slack";
+    homepage = "https://slack.com";
+    changelog = "https://slack.com/release-notes";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = with maintainers; [ mmahut amaxine ];
+    platforms = [ "x86_64-darwin" "x86_64-linux" "aarch64-darwin" ];
+    mainProgram = "slack";
+  };
+
+  linux = stdenv.mkDerivation rec {
+    inherit pname version src meta;
+
+    passthru.updateScript = ./update.sh;
+
+    rpath = lib.makeLibraryPath [
+      alsa-lib
+      at-spi2-atk
+      at-spi2-core
+      atk
+      cairo
+      cups
+      curl
+      dbus
+      expat
+      fontconfig
+      freetype
+      gdk-pixbuf
+      glib
+      gtk3
+      libGL
+      libappindicator-gtk3
+      libdrm
+      libnotify
+      libpulseaudio
+      libuuid
+      libxcb
+      libxkbcommon
+      mesa
+      nspr
+      nss
+      pango
+      pipewire
+      stdenv.cc.cc
+      systemd
+      wayland
+      xorg.libX11
+      xorg.libXScrnSaver
+      xorg.libXcomposite
+      xorg.libXcursor
+      xorg.libXdamage
+      xorg.libXext
+      xorg.libXfixes
+      xorg.libXi
+      xorg.libXrandr
+      xorg.libXrender
+      xorg.libXtst
+      xorg.libxkbfile
+      xorg.libxshmfence
+    ] + ":${stdenv.cc.cc.lib}/lib64";
+
+    buildInputs = [
+      gtk3 # needed for GSETTINGS_SCHEMAS_PATH
+    ];
+
+    nativeBuildInputs = [ dpkg makeWrapper asar ];
+
+    dontUnpack = true;
+    dontBuild = true;
+    dontPatchELF = true;
+
+    installPhase = ''
+      runHook preInstall
+
+      # The deb file contains a setuid binary, so 'dpkg -x' doesn't work here
+      dpkg --fsys-tarfile $src | tar --extract
+      rm -rf usr/share/lintian
+
+      mkdir -p $out
+      mv usr/* $out
+
+      # Otherwise it looks "suspicious"
+      chmod -R g-w $out
+
+      for file in $(find $out -type f \( -perm /0111 -o -name \*.so\* \) ); do
+        patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" "$file" || true
+        patchelf --set-rpath ${rpath}:$out/lib/slack $file || true
+      done
+
+      # Replace the broken bin/slack symlink with a startup wrapper.
+      # Make xdg-open overrideable at runtime.
+      rm $out/bin/slack
+      makeWrapper $out/lib/slack/slack $out/bin/slack \
+        --prefix XDG_DATA_DIRS : $GSETTINGS_SCHEMAS_PATH \
+        --suffix PATH : ${lib.makeBinPath [xdg-utils]} \
+        --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations,WebRTCPipeWireCapturer}}"
+
+      # Fix the desktop link
+      substituteInPlace $out/share/applications/slack.desktop \
+        --replace /usr/bin/ $out/bin/ \
+        --replace /usr/share/pixmaps/slack.png slack \
+        --replace bin/slack "bin/slack -s"
+
+      runHook postInstall
+    '';
+  };
+
+  darwin = stdenv.mkDerivation {
+    inherit pname version src meta;
+
+    passthru.updateScript = ./update.sh;
+
+    nativeBuildInputs = [ undmg ];
+
+    sourceRoot = "Slack.app";
+
+    installPhase = ''
+      runHook preInstall
+      mkdir -p $out/Applications/Slack.app
+      cp -R . $out/Applications/Slack.app
+      runHook postInstall
+    '';
+  };
+in
+if stdenv.isDarwin
+then darwin
+else linux
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/slack/update.sh b/nixpkgs/pkgs/applications/networking/instant-messengers/slack/update.sh
new file mode 100755
index 000000000000..688fe579f877
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/slack/update.sh
@@ -0,0 +1,48 @@
+#!/usr/bin/env nix-shell
+#! nix-shell -i bash -p curl gnused
+
+set -eou pipefail
+
+latest_linux_version=$(curl -L --silent https://slack.com/downloads/linux | sed -n 's/.*Version \([0-9\.]\+\).*/\1/p')
+latest_mac_version=$(curl -L --silent https://slack.com/downloads/mac | sed -n 's/.*Version \([0-9\.]\+\).*/\1/p')
+
+# Double check that the latest mac and linux versions are in sync.
+if [[ "$latest_linux_version" != "$latest_mac_version" ]]; then
+  echo "the latest linux ($latest_linux_version) and mac ($latest_mac_version) versions are not the same"
+  exit 1
+fi
+
+nixpkgs="$(git rev-parse --show-toplevel)"
+slack_nix="$nixpkgs/pkgs/applications/networking/instant-messengers/slack/default.nix"
+nixpkgs_linux_version=$(cat "$slack_nix" | sed -n 's/.*x86_64-linux-version = \"\([0-9\.]\+\)\";.*/\1/p')
+nixpkgs_mac_version=$(cat "$slack_nix" | sed -n 's/.*x86_64-darwin-version = \"\([0-9\.]\+\)\";.*/\1/p')
+nixpkgs_mac_arm_version=$(cat "$slack_nix" | sed -n 's/.*aarch64-darwin-version = \"\([0-9\.]\+\)\";.*/\1/p')
+
+if [[ "$nixpkgs_linux_version" == "$latest_linux_version" && \
+      "$nixpkgs_mac_version" == "$latest_mac_version" && \
+      "$nixpkgs_mac_arm_version" == "$latest_mac_version" ]]; then
+  echo "nixpkgs versions are all up to date!"
+  exit 0
+fi
+
+linux_url="https://downloads.slack-edge.com/releases/linux/${latest_linux_version}/prod/x64/slack-desktop-${latest_linux_version}-amd64.deb"
+mac_url="https://downloads.slack-edge.com/releases/macos/${latest_mac_version}/prod/x64/Slack-${latest_mac_version}-macOS.dmg"
+mac_arm_url="https://downloads.slack-edge.com/releases/macos/${latest_mac_version}/prod/arm64/Slack-${latest_mac_version}-macOS.dmg"
+linux_sha256=$(nix-prefetch-url ${linux_url})
+mac_sha256=$(nix-prefetch-url ${mac_url})
+mac_arm_sha256=$(nix-prefetch-url ${mac_arm_url})
+
+sed -i "s/x86_64-linux-version = \".*\"/x86_64-linux-version = \"${latest_linux_version}\"/" "$slack_nix"
+sed -i "s/x86_64-darwin-version = \".*\"/x86_64-darwin-version = \"${latest_mac_version}\"/" "$slack_nix"
+sed -i "s/aarch64-darwin-version = \".*\"/aarch64-darwin-version = \"${latest_mac_version}\"/" "$slack_nix"
+sed -i "s/x86_64-linux-sha256 = \".*\"/x86_64-linux-sha256 = \"${linux_sha256}\"/" "$slack_nix"
+sed -i "s/x86_64-darwin-sha256 = \".*\"/x86_64-darwin-sha256 = \"${mac_sha256}\"/" "$slack_nix"
+sed -i "s/aarch64-darwin-sha256 = \".*\"/aarch64-darwin-sha256 = \"${mac_arm_sha256}\"/" "$slack_nix"
+
+if ! nix-build -A slack "$nixpkgs"; then
+  echo "The updated slack failed to build."
+  exit 1
+fi
+
+echo "Successfully updated"
+echo "slack: $nixpkgs_linux_version -> $latest_linux_version"
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/ssh-chat/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/ssh-chat/default.nix
new file mode 100644
index 000000000000..15ff9a9e2b50
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/ssh-chat/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "ssh-chat";
+  version = "1.10.1";
+
+  src = fetchFromGitHub {
+    owner = "shazow";
+    repo = "ssh-chat";
+    rev = "v${version}";
+    hash = "sha256-LgrqIuM/tLC0JqDai2TLu6G/edZ5Q7WFXjX5bzc0Bcc=";
+  };
+
+  vendorHash = "sha256-QTUBorUAsWDOpNP3E/Y6ht7ZXZViWBbrMPtLl7lHtgE=";
+
+  meta = with lib; {
+    description = "Chat over SSH";
+    homepage = "https://github.com/shazow/ssh-chat";
+    license = licenses.mit;
+    maintainers = with maintainers; [ luc65r ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/tangram/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/tangram/default.nix
new file mode 100644
index 000000000000..df460db31664
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/tangram/default.nix
@@ -0,0 +1,90 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, appstream-glib
+, desktop-file-utils
+, gdk-pixbuf
+, gettext
+, gjs
+, glib
+, glib-networking
+, gobject-introspection
+, gsettings-desktop-schemas
+, gtk4
+, libadwaita
+, gst_all_1
+, hicolor-icon-theme
+, meson
+, ninja
+, pkg-config
+, python3
+, webkitgtk_6_0
+, blueprint-compiler
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "tangram";
+  version = "3.0";
+
+  src = fetchFromGitHub {
+    owner = "sonnyp";
+    repo = "Tangram";
+    rev = "v${version}";
+    hash = "sha256-6QOkvsYFgFFyxnDlA5Xpl3FnsSZOj9ooehCPOmpKe8M=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [
+    appstream-glib
+    desktop-file-utils
+    gettext
+    gobject-introspection
+    hicolor-icon-theme
+    meson
+    ninja
+    pkg-config
+    python3
+    blueprint-compiler
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gdk-pixbuf
+    gjs
+    glib
+    glib-networking
+    gsettings-desktop-schemas
+    gtk4
+    libadwaita
+    webkitgtk_6_0
+  ] ++ (with gst_all_1; [
+    gstreamer
+    gst-libav
+    gst-plugins-base
+    (gst-plugins-good.override { gtkSupport = true; })
+    gst-plugins-bad
+  ]);
+
+  dontPatchShebangs = true;
+
+  postPatch = ''
+    substituteInPlace src/meson.build --replace "/app/bin/blueprint-compiler" "blueprint-compiler"
+    substituteInPlace src/bin.js troll/gjspack/bin/gjspack \
+      --replace "#!/usr/bin/env -S gjs -m" "#!${gjs}/bin/gjs -m"
+  '';
+
+  # https://github.com/NixOS/nixpkgs/issues/31168#issuecomment-341793501
+  preFixup = ''
+    sed -e '2iimports.package._findEffectiveEntryPointName = () => "re.sonny.Tangram"' \
+      -i $out/bin/re.sonny.Tangram
+  '';
+
+  meta = with lib; {
+    description = "Run web apps on your desktop";
+    homepage = "https://github.com/sonnyp/Tangram";
+    license = licenses.gpl3Only;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ austinbutler chuangzhu ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/teams-for-linux/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/teams-for-linux/default.nix
new file mode 100644
index 000000000000..5fa07ea7a923
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/teams-for-linux/default.nix
@@ -0,0 +1,109 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, makeWrapper
+, makeDesktopItem
+, copyDesktopItems
+, yarn
+, nodejs
+, fetchYarnDeps
+, fixup_yarn_lock
+, electron_24
+, libpulseaudio
+, pipewire
+, alsa-utils
+, which
+, testers
+, teams-for-linux
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "teams-for-linux";
+  version = "1.3.8";
+
+  src = fetchFromGitHub {
+    owner = "IsmaelMartinez";
+    repo = "teams-for-linux";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-G0UBzSXoZPLHBsM0nslPLNBZs0sUAQYJ403nPV+3Qu4=";
+  };
+
+  offlineCache = fetchYarnDeps {
+    yarnLock = "${finalAttrs.src}/yarn.lock";
+    hash = "sha256-j5N6d270myUylDVDFQTScbsGp1wlpt5sISDJBRCV/GU=";
+  };
+
+  nativeBuildInputs = [ yarn fixup_yarn_lock nodejs copyDesktopItems makeWrapper ];
+
+  configurePhase = ''
+    runHook preConfigure
+
+    export HOME=$(mktemp -d)
+    yarn config --offline set yarn-offline-mirror $offlineCache
+    fixup_yarn_lock yarn.lock
+    yarn install --offline --frozen-lockfile --ignore-platform --ignore-scripts --no-progress --non-interactive
+    patchShebangs node_modules/
+
+    runHook postConfigure
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+
+    yarn --offline electron-builder \
+      --dir ${if stdenv.isDarwin then "--macos" else "--linux"} ${if stdenv.hostPlatform.isAarch64 then "--arm64" else "--x64"} \
+      -c.electronDist=${electron_24}/libexec/electron \
+      -c.electronVersion=${electron_24.version}
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/share/{applications,teams-for-linux}
+    cp dist/${if stdenv.isDarwin then "darwin-" else "linux-"}${lib.optionalString stdenv.hostPlatform.isAarch64 "arm64-"}unpacked/resources/app.asar $out/share/teams-for-linux/
+
+    pushd build/icons
+    for image in *png; do
+      mkdir -p $out/share/icons/hicolor/''${image%.png}/apps
+      cp -r $image $out/share/icons/hicolor/''${image%.png}/apps/teams-for-linux.png
+    done
+    popd
+
+    # Linux needs 'aplay' for notification sounds, 'libpulse' for meeting sound, and 'libpipewire' for screen sharing
+    makeWrapper '${electron_24}/bin/electron' "$out/bin/teams-for-linux" \
+      ${lib.optionalString stdenv.isLinux ''
+        --prefix PATH : ${lib.makeBinPath [ alsa-utils which ]} \
+        --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ libpulseaudio pipewire ]} \
+      ''} \
+      --add-flags "$out/share/teams-for-linux/app.asar" \
+      --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}"
+
+    runHook postInstall
+  '';
+
+  desktopItems = [(makeDesktopItem {
+    name = finalAttrs.pname;
+    exec = finalAttrs.pname;
+    icon = finalAttrs.pname;
+    desktopName = "Microsoft Teams for Linux";
+    comment = finalAttrs.meta.description;
+    categories = [ "Network" "InstantMessaging" "Chat" ];
+  })];
+
+  passthru.updateScript = ./update.sh;
+  passthru.tests.version = testers.testVersion rec {
+    package = teams-for-linux;
+    command = "HOME=$TMPDIR ${package.meta.mainProgram or package.pname} --version";
+  };
+
+  meta = {
+    description = "Unofficial Microsoft Teams client for Linux";
+    homepage = "https://github.com/IsmaelMartinez/teams-for-linux";
+    license = lib.licenses.gpl3Only;
+    maintainers = with lib.maintainers; [ muscaln lilyinstarlight qjoly ];
+    platforms = lib.platforms.unix;
+    broken = stdenv.isDarwin;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/teams-for-linux/update.sh b/nixpkgs/pkgs/applications/networking/instant-messengers/teams-for-linux/update.sh
new file mode 100755
index 000000000000..650edf188611
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/teams-for-linux/update.sh
@@ -0,0 +1,50 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p nix jq common-updater-scripts
+
+set -euo pipefail
+
+nixpkgs="$(git rev-parse --show-toplevel || (printf 'Could not find root of nixpkgs repo\nAre we running from within the nixpkgs git repo?\n' >&2; exit 1))"
+
+stripwhitespace() {
+    sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//'
+}
+
+nixeval() {
+    nix --extra-experimental-features nix-command eval --json --impure -f "$nixpkgs" "$1" | jq -r .
+}
+
+vendorhash() {
+    (nix --extra-experimental-features nix-command build --impure --argstr nixpkgs "$nixpkgs" --argstr attr "$1" --expr '{ nixpkgs, attr }: let pkgs = import nixpkgs {}; in with pkgs.lib; (getAttrFromPath (splitString "." attr) pkgs).overrideAttrs (attrs: { outputHash = fakeHash; })' --no-link 2>&1 >/dev/null | tail -n3 | grep -F got: | cut -d: -f2- | stripwhitespace) 2>/dev/null || true
+}
+
+findpath() {
+    path="$(nix --extra-experimental-features nix-command eval --json --impure -f "$nixpkgs" "$1.meta.position" | jq -r . | cut -d: -f1)"
+    outpath="$(nix --extra-experimental-features nix-command eval --json --impure --expr "builtins.fetchGit \"$nixpkgs\"")"
+
+    if [ -n "$outpath" ]; then
+        path="${path/$(echo "$outpath" | jq -r .)/$nixpkgs}"
+    fi
+
+    echo "$path"
+}
+
+attr="${UPDATE_NIX_ATTR_PATH:-teams-for-linux}"
+version="$(cd "$nixpkgs" && list-git-tags --pname="$(nixeval "$attr".pname)" --attr-path="$attr" | grep '^v' | sed -e 's|^v||' | sort -V | tail -n1)"
+
+pkgpath="$(findpath "$attr")"
+
+updated="$(cd "$nixpkgs" && update-source-version "$attr" "$version" --file="$pkgpath" --print-changes | jq -r length)"
+
+if [ "$updated" -eq 0 ]; then
+    echo 'update.sh: Package version not updated, nothing to do.'
+    exit 0
+fi
+
+curhash="$(nixeval "$attr.offlineCache.outputHash")"
+newhash="$(vendorhash "$attr.offlineCache")"
+
+if [ -n "$newhash" ] && [ "$curhash" != "$newhash" ]; then
+    sed -i -e "s|\"$curhash\"|\"$newhash\"|" "$pkgpath"
+else
+    echo 'update.sh: New vendorHash same as old vendorHash, nothing to do.'
+fi
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/teams/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/teams/default.nix
new file mode 100644
index 000000000000..601643edcfd6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/teams/default.nix
@@ -0,0 +1,181 @@
+{ lib
+, stdenv
+, runtimeShell
+, fetchurl
+, autoPatchelfHook
+, wrapGAppsHook
+, dpkg
+, atomEnv
+, libuuid
+, libappindicator-gtk3
+, pulseaudio
+, at-spi2-atk
+, coreutils
+, gawk
+, xdg-utils
+, systemd
+, asar
+, xar
+, cpio
+, makeWrapper
+, enableRectOverlay ? false
+}:
+
+let
+  pname = "teams";
+  versions = {
+    linux = "1.5.00.23861";
+    darwin = "1.6.00.4464";
+  };
+  hashes = {
+    linux = "sha256-h0YnCeJX//l4TegJVZtavV3HrxjYUF2Fa5KmaYmZW8E=";
+    darwin = "sha256-DvXMrXotKWUqFCb7rZj8wU7mmZJKuTLGyx8qOB/aQtg=";
+  };
+  meta = with lib; {
+    description = "Microsoft Teams";
+    homepage = "https://teams.microsoft.com";
+    downloadPage = "https://teams.microsoft.com/downloads";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = with maintainers; [ liff tricktron ];
+    platforms = [ "x86_64-linux" "x86_64-darwin" "aarch64-darwin" ];
+    mainProgram = "teams";
+  };
+
+  linux = stdenv.mkDerivation rec {
+    inherit pname meta;
+    version = versions.linux;
+
+    src = fetchurl {
+      urls = [
+        "https://packages.microsoft.com/repos/ms-teams/pool/main/t/teams/teams_${versions.linux}_amd64.deb"
+        # NOTE: the archive.org timestamp must also be updated if the version changes.
+        "https://web.archive.org/web/20221130115842if_/https://packages.microsoft.com/repos/ms-teams/pool/main/t/teams/teams_${versions.linux}_amd64.deb"
+      ];
+      hash = hashes.linux;
+    };
+
+    nativeBuildInputs = [ dpkg autoPatchelfHook wrapGAppsHook asar ];
+
+    unpackCmd = "dpkg -x $curSrc .";
+
+    buildInputs = atomEnv.packages ++ [
+      libuuid
+      at-spi2-atk
+    ];
+
+    runtimeDependencies = [
+      (lib.getLib systemd)
+      pulseaudio
+      libappindicator-gtk3
+    ];
+
+    preFixup = ''
+      gappsWrapperArgs+=(
+        --prefix PATH : "${coreutils}/bin:${gawk}/bin"
+
+        # fix for https://docs.microsoft.com/en-us/answers/questions/298724/open-teams-meeting-link-on-linux-doens39t-work.html?childToView=309406#comment-309406
+        --append-flags '--disable-namespace-sandbox --disable-setuid-sandbox'
+      )
+    '';
+
+
+    buildPhase = ''
+      runHook preBuild
+
+      asar extract share/teams/resources/app.asar "$TMP/work"
+      substituteInPlace $TMP/work/main.bundle.js \
+          --replace "/usr/share/pixmaps/" "$out/share/pixmaps" \
+          --replace "/usr/bin/xdg-mime" "${xdg-utils}/bin/xdg-mime" \
+          --replace "Exec=/usr/bin/" "Exec=" # Remove usage of absolute path in autostart.
+      asar pack --unpack='{*.node,*.ftz,rect-overlay}' "$TMP/work" share/teams/resources/app.asar
+
+      runHook postBuild
+    '';
+
+    preferLocalBuild = true;
+
+    installPhase = ''
+      runHook preInstall
+
+      mkdir -p $out/{opt,bin}
+
+      mv share/teams $out/opt/
+      mv share $out/share
+
+      mkdir -p $out/share/icons/hicolor/512x512/apps
+      mv $out/share/pixmaps/teams.png $out/share/icons/hicolor/512x512/apps
+      rmdir $out/share/pixmaps
+
+      substituteInPlace $out/share/applications/teams.desktop \
+        --replace /usr/bin/ ""
+
+      ln -s $out/opt/teams/teams $out/bin/
+
+      ${lib.optionalString (!enableRectOverlay) ''
+      # Work-around screen sharing bug
+      # https://docs.microsoft.com/en-us/answers/questions/42095/sharing-screen-not-working-anymore-bug.html
+      rm $out/opt/teams/resources/app.asar.unpacked/node_modules/slimcore/bin/rect-overlay
+      ''}
+
+      runHook postInstall
+    '';
+
+    dontAutoPatchelf = true;
+
+    # Includes runtimeDependencies in the RPATH of the included Node modules
+    # so that dynamic loading works. We cannot use directly runtimeDependencies
+    # here, since the libraries from runtimeDependencies are not propagated
+    # to the dynamically loadable node modules because of a condition in
+    # autoPatchElfHook since *.node modules have Type: DYN (Shared object file)
+    # instead of EXEC or INTERP it expects.
+    # Fixes: https://github.com/NixOS/nixpkgs/issues/85449
+    postFixup = ''
+      autoPatchelf "$out"
+
+      runtime_rpath="${lib.makeLibraryPath runtimeDependencies}"
+
+      for mod in $(find "$out/opt/teams" -name '*.node'); do
+        mod_rpath="$(patchelf --print-rpath "$mod")"
+
+        echo "Adding runtime dependencies to RPATH of Node module $mod"
+        patchelf --set-rpath "$runtime_rpath:$mod_rpath" "$mod"
+      done;
+    '';
+  };
+
+  appName = "Teams.app";
+
+  darwin = stdenv.mkDerivation {
+    inherit pname meta;
+    version = versions.darwin;
+
+    src = fetchurl {
+      url = "https://statics.teams.cdn.office.net/production-osx/${versions.darwin}/Teams_osx.pkg";
+      hash = hashes.darwin;
+    };
+
+    nativeBuildInputs = [ xar cpio makeWrapper ];
+
+    unpackPhase = ''
+      xar -xf $src
+      zcat < Teams_osx_app.pkg/Payload | cpio -i
+    '';
+
+    sourceRoot = "Microsoft\ Teams.app";
+    dontPatch = true;
+    dontConfigure = true;
+    dontBuild = true;
+
+    installPhase = ''
+      runHook preInstall
+      mkdir -p $out/{Applications/${appName},bin}
+      cp -R . $out/Applications/${appName}
+      makeWrapper $out/Applications/${appName}/Contents/MacOS/Teams $out/bin/teams
+      runHook postInstall
+    '';
+  };
+in
+if stdenv.isDarwin
+then darwin
+else linux
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/teamspeak/client.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/teamspeak/client.nix
new file mode 100644
index 000000000000..540555b412ab
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/teamspeak/client.nix
@@ -0,0 +1,156 @@
+{ lib, stdenv, fetchurl, makeWrapper, makeDesktopItem, zlib, glib, libpng, freetype, openssl
+, xorg, fontconfig, qtbase, qtwebengine, qtwebchannel, qtsvg, qtwebsockets, xkeyboard_config
+, alsa-lib, libpulseaudio ? null, libredirect, quazip, which, unzip, perl, llvmPackages
+}:
+
+let
+
+  arch = "amd64";
+
+  libDir = "lib64";
+
+  deps =
+    [ zlib glib libpng freetype xorg.libSM xorg.libICE xorg.libXrender openssl
+      xorg.libXrandr xorg.libXfixes xorg.libXcursor xorg.libXinerama
+      xorg.libxcb fontconfig xorg.libXext xorg.libX11 alsa-lib qtbase qtwebengine qtwebchannel qtsvg
+      qtwebsockets libpulseaudio quazip llvmPackages.libcxx llvmPackages.libcxxabi
+    ];
+
+  desktopItem = makeDesktopItem {
+    name = "teamspeak";
+    exec = "ts3client";
+    icon = "teamspeak";
+    comment = "The TeamSpeak voice communication tool";
+    desktopName = "TeamSpeak";
+    genericName = "TeamSpeak";
+    categories = [ "Network" ];
+  };
+in
+
+stdenv.mkDerivation rec {
+  pname = "teamspeak-client";
+
+  version = "3.6.1";
+
+  src = fetchurl {
+    url = "https://files.teamspeak-services.com/releases/client/${version}/TeamSpeak3-Client-linux_${arch}-${version}.run";
+    hash = "sha256-j4sgZ+tJpV6ST0yLmbLTLgBxQTcK1LZoEEfMe3TUAC4=";
+  };
+
+  # grab the plugin sdk for the desktop icon
+  pluginsdk = fetchurl {
+    url = "http://dl.4players.de/ts/client/pluginsdk/pluginsdk_3.1.1.1.zip";
+    sha256 = "1bywmdj54glzd0kffvr27r84n4dsd0pskkbmh59mllbxvj0qwy7f";
+  };
+
+  nativeBuildInputs = [
+    makeWrapper
+    which
+    unzip
+    perl # Installer script needs `shasum`
+  ];
+
+  # This just runs the installer script. If it gets stuck at something like
+  # ++ exec
+  # + PAGER_PATH=
+  # it's looking for a dependency and didn't find it. Check the script and make sure the dep is in nativeBuildInputs.
+  unpackPhase =
+    ''
+      echo -e '\ny' | PAGER=cat sh -xe $src
+      cd TeamSpeak*
+    '';
+
+  buildPhase =
+    ''
+      mv ts3client_linux_${arch} ts3client
+      echo "patching ts3client..."
+      patchelf --replace-needed libquazip.so ${quazip}/lib/libquazip1-qt5.so ts3client
+      patchelf \
+        --interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+        --set-rpath ${lib.makeLibraryPath deps}:$(cat $NIX_CC/nix-support/orig-cc)/${libDir} \
+        --force-rpath \
+        ts3client
+    '';
+
+  installPhase =
+    ''
+      # Delete unecessary libraries - these are provided by nixos.
+      rm *.so.* *.so
+      rm QtWebEngineProcess
+      rm qt.conf
+      rm -r platforms # contains libqxcb.so
+
+      # Install files.
+      mkdir -p $out/lib/teamspeak
+      mv * $out/lib/teamspeak/
+
+      # Make a desktop item
+      mkdir -p $out/share/applications/ $out/share/icons/hicolor/64x64/apps/
+      unzip ${pluginsdk}
+      cp pluginsdk/docs/client_html/images/logo.png $out/share/icons/hicolor/64x64/apps/teamspeak.png
+      cp ${desktopItem}/share/applications/* $out/share/applications/
+
+      # Make a symlink to the binary from bin.
+      mkdir -p $out/bin/
+      ln -s $out/lib/teamspeak/ts3client $out/bin/ts3client
+
+      wrapProgram $out/bin/ts3client \
+        --set LD_PRELOAD "${libredirect}/lib/libredirect.so" \
+        --set QT_PLUGIN_PATH "${qtbase}/${qtbase.qtPluginPrefix}" \
+    '' /* wayland is currently broken, remove when TS3 fixes that */ + ''
+        --set QT_QPA_PLATFORM xcb \
+        --set NIX_REDIRECTS /usr/share/X11/xkb=${xkeyboard_config}/share/X11/xkb
+    '';
+
+  dontStrip = true;
+  dontPatchELF = true;
+
+  meta = with lib; {
+    description = "The TeamSpeak voice communication tool";
+    homepage = "https://teamspeak.com/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = {
+      fullName = "Teamspeak client license";
+      url = "https://www.teamspeak.com/en/privacy-and-terms/";
+      free = false;
+    };
+    maintainers = with maintainers; [ lhvwb lukegb atemu ];
+    mainProgram = "ts3client";
+    platforms = [ "x86_64-linux" ];
+  };
+}
+
+/*
+License issues:
+Date: Mon, 10 Dec 2007 19:55:16 -0500
+From: TeamSpeak Sales <sales@tritoncia.com>
+To: 'Marc Weber' <marco-oweber@gmx.de>
+Subject: RE: teamspeak on nix?
+
+Yes, that would be fine.  As long as you are not renting servers or selling
+TeamSpeak then you are more than welcome to distribute it.
+
+Thank you,
+
+TeamSpeak Sales Team
+________________________________
+e-Mail: sales@tritoncia.com
+TeamSpeak: http://www.TeamSpeak.com
+Account Login: https://sales.TritonCIA.com/users
+
+
+
+-----Original Message-----
+From: Marc Weber [mailto:marco-oweber@gmx.de]
+Sent: Monday, December 10, 2007 5:03 PM
+To: sales@tritoncia.com
+Subject: teamspeak on nix?
+
+Hello,
+
+nix is very young software distribution system (http://nix.cs.uu.nl/)
+I'd like to ask wether you permit us to add teamspeak (server/ client?)
+
+Sincerly
+Marc Weber (small nix contributor)
+*/
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/teamspeak/client5.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/teamspeak/client5.nix
new file mode 100644
index 000000000000..aac37f441dac
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/teamspeak/client5.nix
@@ -0,0 +1,109 @@
+{ lib
+, stdenv
+, fetchurl
+, autoPatchelfHook
+, copyDesktopItems
+, makeDesktopItem
+, makeWrapper
+, alsa-lib
+, at-spi2-atk
+, atk
+, cairo
+, cups
+, dbus
+, gcc-unwrapped
+, gdk-pixbuf
+, glib
+, gtk3
+, libdrm
+, libnotify
+, libpulseaudio
+, libxkbcommon
+, mesa
+, nss
+, udev
+, xorg
+}:
+
+stdenv.mkDerivation rec {
+  pname = "teamspeak5-client";
+  version = "5.0.0-beta70";
+
+  src = fetchurl {
+    # check https://teamspeak.com/en/downloads/#ts5 for version and checksum
+    url = "https://files.teamspeak-services.com/pre_releases/client/${version}/teamspeak-client.tar.gz";
+    sha256 = "44f1a29b915c3930e7385ce32b13e363a7be04c1e341226d0693600818411c6e";
+  };
+
+  sourceRoot = ".";
+
+  propagatedBuildInputs = [
+    alsa-lib
+    at-spi2-atk
+    atk
+    cairo
+    cups.lib
+    dbus
+    gcc-unwrapped.lib
+    gdk-pixbuf
+    glib
+    gtk3
+    libdrm
+    libnotify
+    libpulseaudio
+    libxkbcommon
+    mesa.drivers
+    nss
+    xorg.libX11
+    xorg.libXScrnSaver
+    xorg.libXdamage
+    xorg.libXfixes
+    xorg.libxshmfence
+  ];
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+    copyDesktopItems
+    makeWrapper
+  ];
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "TeamSpeak";
+      exec = "TeamSpeak";
+      icon = pname;
+      desktopName = pname;
+      comment = "TeamSpeak Voice Communication Client";
+      categories = ["Audio" "AudioVideo" "Chat" "Network"];
+    })
+  ];
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $out/share/${pname} $out/share/icons/hicolor/64x64/apps/
+
+    cp -a * $out/share/${pname}
+    cp logo-256.png $out/share/icons/hicolor/64x64/apps/${pname}.png
+
+    makeWrapper $out/share/${pname}/TeamSpeak $out/bin/TeamSpeak \
+      --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ udev ]}"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "The TeamSpeak voice communication tool (beta version)";
+    homepage = "https://teamspeak.com/";
+    license = {
+      fullName = "Teamspeak client license";
+      url = "https://www.teamspeak.com/en/privacy-and-terms/";
+      free = false;
+    };
+    maintainers = with maintainers; [ jojosch ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/teamspeak/server.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/teamspeak/server.nix
new file mode 100644
index 000000000000..577589f6a40b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/teamspeak/server.nix
@@ -0,0 +1,101 @@
+{ lib, stdenv, fetchurl, postgresql, autoPatchelfHook, writeScript }:
+
+let
+  arch = if stdenv.is64bit then "amd64" else "x86";
+in stdenv.mkDerivation rec {
+  pname = "teamspeak-server";
+  version = "3.13.7";
+
+  src = fetchurl {
+    url = "https://files.teamspeak-services.com/releases/server/${version}/teamspeak3-server_linux_${arch}-${version}.tar.bz2";
+    sha256 = if stdenv.is64bit
+      then "sha256-d1pXMamAmAHkyPkGbNm8ViobNoVTE5wSSfKgdA1QBB4="
+      else "sha256-aMEDOnvBeKfzG8lDFhU8I5DYgG53IsCDBMV2MUyJi2g=";
+  };
+
+  buildInputs = [ stdenv.cc.cc postgresql.lib ];
+
+  nativeBuildInputs = [ autoPatchelfHook ];
+
+  installPhase = ''
+    runHook preInstall
+
+    # Install files.
+    mkdir -p $out/lib/teamspeak
+    mv * $out/lib/teamspeak/
+
+    # Make symlinks to the binaries from bin.
+    mkdir -p $out/bin/
+    ln -s $out/lib/teamspeak/ts3server $out/bin/ts3server
+    ln -s $out/lib/teamspeak/tsdns/tsdnsserver $out/bin/tsdnsserver
+
+    runHook postInstall
+  '';
+
+  passthru.updateScript = writeScript "update-teampeak-server" ''
+    #!/usr/bin/env nix-shell
+    #!nix-shell -i bash -p common-updater-scripts curl gnugrep gnused jq pup
+
+    set -eu -o pipefail
+
+    version=$( \
+      curl https://www.teamspeak.com/en/downloads/ \
+        | pup "#server .linux .version json{}" \
+        | jq -r ".[0].text"
+    )
+
+    versionOld=$(nix-instantiate --eval --strict -A "teamspeak_server.version")
+
+    nixFile=pkgs/applications/networking/instant-messengers/teamspeak/server.nix
+
+    update-source-version teamspeak_server "$version" --system=i686-linux
+
+    sed -i -e "s/version = \"$version\";/version = $versionOld;/" "$nixFile"
+
+    update-source-version teamspeak_server "$version" --system=x86_64-linux
+  '';
+
+  meta = with lib; {
+    description = "TeamSpeak voice communication server";
+    homepage = "https://teamspeak.com/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfreeRedistributable;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ arobyn gerschtli ];
+  };
+}
+
+/*
+License issues:
+Date: Mon, 10 Dec 2007 19:55:16 -0500
+From: TeamSpeak Sales <sales@tritoncia.com>
+To: 'Marc Weber' <marco-oweber@gmx.de>
+Subject: RE: teamspeak on nix?
+
+Yes, that would be fine.  As long as you are not renting servers or selling
+TeamSpeak then you are more than welcome to distribute it.
+
+Thank you,
+
+TeamSpeak Sales Team
+________________________________
+e-Mail: sales@tritoncia.com
+TeamSpeak: http://www.TeamSpeak.com
+Account Login: https://sales.TritonCIA.com/users
+
+
+
+-----Original Message-----
+From: Marc Weber [mailto:marco-oweber@gmx.de]
+Sent: Monday, December 10, 2007 5:03 PM
+To: sales@tritoncia.com
+Subject: teamspeak on nix?
+
+Hello,
+
+nix is very young software distribution system (http://nix.cs.uu.nl/)
+I'd like to ask wether you permit us to add teamspeak (server/ client?)
+
+Sincerly
+Marc Weber (small nix contributor)
+*/
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/default.nix
new file mode 100644
index 000000000000..dbd81911501e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/default.nix
@@ -0,0 +1,225 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, callPackage
+, pkg-config
+, cmake
+, ninja
+, clang
+, python3
+, wrapQtAppsHook
+, removeReferencesTo
+, extra-cmake-modules
+, qtbase
+, qtimageformats
+, qtsvg
+, kwayland
+, lz4
+, xxHash
+, ffmpeg_4
+, openalSoft
+, minizip
+, libopus
+, alsa-lib
+, libpulseaudio
+, range-v3
+, tl-expected
+, hunspell
+, glibmm
+, jemalloc
+, rnnoise
+, abseil-cpp
+, microsoft-gsl
+, wayland
+, libicns
+, Cocoa
+, CoreFoundation
+, CoreServices
+, CoreText
+, CoreGraphics
+, CoreMedia
+, OpenGL
+, AudioUnit
+, ApplicationServices
+, Foundation
+, AGL
+, Security
+, SystemConfiguration
+, Carbon
+, AudioToolbox
+, VideoToolbox
+, VideoDecodeAcceleration
+, AVFoundation
+, CoreAudio
+, CoreVideo
+, CoreMediaIO
+, QuartzCore
+, AppKit
+, CoreWLAN
+, WebKit
+, IOKit
+, GSS
+, MediaPlayer
+, IOSurface
+, Metal
+, MetalKit
+}:
+
+let
+  tg_owt = callPackage ./tg_owt.nix {
+    abseil-cpp = abseil-cpp.override {
+      # abseil-cpp should use the same compiler
+      inherit stdenv;
+      cxxStandard = "20";
+    };
+
+    # tg_owt should use the same compiler
+    inherit stdenv;
+
+    inherit Cocoa AppKit IOKit IOSurface Foundation AVFoundation CoreMedia VideoToolbox
+      CoreGraphics CoreVideo OpenGL Metal MetalKit CoreFoundation ApplicationServices;
+  };
+in
+stdenv.mkDerivation rec {
+  pname = "kotatogram-desktop";
+  version = "1.4.9";
+
+  src = fetchFromGitHub {
+    owner = "kotatogram";
+    repo = "kotatogram-desktop";
+    rev = "k${version}";
+    sha256 = "sha256-6bF/6fr8mJyyVg53qUykysL7chuewtJB8E22kVyxjHw=";
+    fetchSubmodules = true;
+  };
+
+  patches = [
+    ./kf594.patch
+    ./shortcuts-binary-path.patch
+  ];
+
+  postPatch = lib.optionalString stdenv.isLinux ''
+    substituteInPlace Telegram/ThirdParty/libtgvoip/os/linux/AudioInputALSA.cpp \
+      --replace '"libasound.so.2"' '"${alsa-lib}/lib/libasound.so.2"'
+    substituteInPlace Telegram/ThirdParty/libtgvoip/os/linux/AudioOutputALSA.cpp \
+      --replace '"libasound.so.2"' '"${alsa-lib}/lib/libasound.so.2"'
+    substituteInPlace Telegram/ThirdParty/libtgvoip/os/linux/AudioPulse.cpp \
+      --replace '"libpulse.so.0"' '"${libpulseaudio}/lib/libpulse.so.0"'
+  '' + lib.optionalString stdenv.isDarwin ''
+    sed -i "13i#import <CoreAudio/CoreAudio.h>" Telegram/lib_webrtc/webrtc/mac/webrtc_media_devices_mac.mm
+    substituteInPlace Telegram/CMakeLists.txt \
+      --replace 'COMMAND iconutil' 'COMMAND png2icns' \
+      --replace '--convert icns' "" \
+      --replace '--output AppIcon.icns' 'AppIcon.icns' \
+      --replace "\''${appicon_path}" "\''${appicon_path}/icon_16x16.png \''${appicon_path}/icon_32x32.png \''${appicon_path}/icon_128x128.png \''${appicon_path}/icon_256x256.png \''${appicon_path}/icon_512x512.png"
+  '';
+
+  nativeBuildInputs = [
+    pkg-config
+    cmake
+    ninja
+    python3
+    wrapQtAppsHook
+    removeReferencesTo
+  ] ++ lib.optionals stdenv.isLinux [
+    # to build bundled libdispatch
+    clang
+    extra-cmake-modules
+  ];
+
+  buildInputs = [
+    qtbase
+    qtimageformats
+    qtsvg
+    lz4
+    xxHash
+    ffmpeg_4
+    openalSoft
+    minizip
+    libopus
+    range-v3
+    tl-expected
+    rnnoise
+    tg_owt
+    microsoft-gsl
+  ] ++ lib.optionals stdenv.isLinux [
+    kwayland
+    alsa-lib
+    libpulseaudio
+    hunspell
+    glibmm
+    jemalloc
+    wayland
+  ] ++ lib.optionals stdenv.isDarwin [
+    Cocoa
+    CoreFoundation
+    CoreServices
+    CoreText
+    CoreGraphics
+    CoreMedia
+    OpenGL
+    AudioUnit
+    ApplicationServices
+    Foundation
+    AGL
+    Security
+    SystemConfiguration
+    Carbon
+    AudioToolbox
+    VideoToolbox
+    VideoDecodeAcceleration
+    AVFoundation
+    CoreAudio
+    CoreVideo
+    CoreMediaIO
+    QuartzCore
+    AppKit
+    CoreWLAN
+    WebKit
+    IOKit
+    GSS
+    MediaPlayer
+    IOSurface
+    Metal
+    libicns
+  ];
+
+  enableParallelBuilding = true;
+
+  cmakeFlags = [
+    "-DTDESKTOP_API_TEST=ON"
+    "-DDESKTOP_APP_QT6=OFF"
+  ];
+
+  installPhase = lib.optionalString stdenv.isDarwin ''
+    mkdir -p $out/Applications
+    cp -r Kotatogram.app $out/Applications
+    ln -s $out/Applications/Kotatogram.app/Contents/MacOS $out/bin
+  '';
+
+  preFixup = ''
+    binName=${if stdenv.isLinux then "kotatogram-desktop" else "Kotatogram"}
+    remove-references-to -t ${stdenv.cc.cc} $out/bin/$binName
+    remove-references-to -t ${microsoft-gsl} $out/bin/$binName
+    remove-references-to -t ${tg_owt.dev} $out/bin/$binName
+  '';
+
+  passthru = {
+    inherit tg_owt;
+  };
+
+  meta = with lib; {
+    description = "Kotatogram – experimental Telegram Desktop fork";
+    longDescription = ''
+      Unofficial desktop client for the Telegram messenger, based on Telegram Desktop.
+
+      It contains some useful (or purely cosmetic) features, but they could be unstable. A detailed list is available here: https://kotatogram.github.io/changes
+    '';
+    license = licenses.gpl3;
+    platforms = platforms.all;
+    homepage = "https://kotatogram.github.io";
+    changelog = "https://github.com/kotatogram/kotatogram-desktop/releases/tag/k{version}";
+    maintainers = with maintainers; [ ilya-fedin ];
+    # never built on aarch64-darwin since first introduction in nixpkgs
+    broken = stdenv.isDarwin && stdenv.isAarch64;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/kf594.patch b/nixpkgs/pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/kf594.patch
new file mode 100644
index 000000000000..0fa2d8bc8f6e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/kf594.patch
@@ -0,0 +1,57 @@
+diff --git a/Telegram/SourceFiles/platform/linux/linux_wayland_integration.cpp b/Telegram/SourceFiles/platform/linux/linux_wayland_integration.cpp
+index 7641579aa..3c195e397 100644
+--- a/Telegram/SourceFiles/platform/linux/linux_wayland_integration.cpp
++++ b/Telegram/SourceFiles/platform/linux/linux_wayland_integration.cpp
+@@ -9,10 +9,10 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
+ 
+ #include "base/platform/base_platform_info.h"
+ 
+-#include <connection_thread.h>
+-#include <registry.h>
+-#include <surface.h>
+-#include <plasmashell.h>
++#include <KWayland/Client/connection_thread.h>
++#include <KWayland/Client/registry.h>
++#include <KWayland/Client/surface.h>
++#include <KWayland/Client/plasmashell.h>
+ 
+ using namespace KWayland::Client;
+ 
+Submodule Telegram/lib_base contains modified content
+diff --git a/Telegram/lib_base/base/platform/linux/base_linux_wayland_integration.cpp b/Telegram/lib_base/base/platform/linux/base_linux_wayland_integration.cpp
+index 32f0de6..30a087f 100644
+--- a/Telegram/lib_base/base/platform/linux/base_linux_wayland_integration.cpp
++++ b/Telegram/lib_base/base/platform/linux/base_linux_wayland_integration.cpp
+@@ -13,11 +13,11 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
+ #include <QtCore/QPointer>
+ #include <QtGui/QWindow>
+ 
+-#include <connection_thread.h>
+-#include <registry.h>
+-#include <surface.h>
+-#include <xdgforeign.h>
+-#include <idleinhibit.h>
++#include <KWayland/Client/connection_thread.h>
++#include <KWayland/Client/registry.h>
++#include <KWayland/Client/surface.h>
++#include <KWayland/Client/xdgforeign.h>
++#include <KWayland/Client/idleinhibit.h>
+ 
+ using namespace KWayland::Client;
+ 
+Submodule Telegram/lib_ui contains modified content
+diff --git a/Telegram/lib_ui/ui/platform/linux/ui_linux_wayland_integration.cpp b/Telegram/lib_ui/ui/platform/linux/ui_linux_wayland_integration.cpp
+index 01f1e80..163cb6a 100644
+--- a/Telegram/lib_ui/ui/platform/linux/ui_linux_wayland_integration.cpp
++++ b/Telegram/lib_ui/ui/platform/linux/ui_linux_wayland_integration.cpp
+@@ -24,8 +24,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
+ #include <private/qwaylandwindow_p.h>
+ #include <private/qwaylandshellsurface_p.h>
+ 
+-#include <connection_thread.h>
+-#include <registry.h>
++#include <KWayland/Client/connection_thread.h>
++#include <KWayland/Client/registry.h>
+ 
+ Q_DECLARE_METATYPE(QMargins);
+ 
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/shortcuts-binary-path.patch b/nixpkgs/pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/shortcuts-binary-path.patch
new file mode 100644
index 000000000000..f173a64f141a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/shortcuts-binary-path.patch
@@ -0,0 +1,38 @@
+diff --git a/Telegram/SourceFiles/core/application.cpp b/Telegram/SourceFiles/core/application.cpp
+index 2a092c6ea..de46dd269 100644
+--- a/Telegram/SourceFiles/core/application.cpp
++++ b/Telegram/SourceFiles/core/application.cpp
+@@ -1173,7 +1173,7 @@ void Application::startShortcuts() {
+ 
+ void Application::RegisterUrlScheme() {
+ 	base::Platform::RegisterUrlScheme(base::Platform::UrlSchemeDescriptor{
+-		.executable = cExeDir() + cExeName(),
++		.executable = qsl("kotatogram-desktop"),
+ 		.arguments = qsl("-workdir \"%1\"").arg(cWorkingDir()),
+ 		.protocol = qsl("tg"),
+ 		.protocolName = qsl("Telegram Link"),
+diff --git a/Telegram/SourceFiles/platform/linux/specific_linux.cpp b/Telegram/SourceFiles/platform/linux/specific_linux.cpp
+index 26168baa7..00d2525a0 100644
+--- a/Telegram/SourceFiles/platform/linux/specific_linux.cpp
++++ b/Telegram/SourceFiles/platform/linux/specific_linux.cpp
+@@ -303,19 +303,11 @@ bool GenerateDesktopFile(
+ 
+ 	QFile target(targetFile);
+ 	if (target.open(QIODevice::WriteOnly)) {
+-		fileText = fileText.replace(
+-			QRegularExpression(
+-				qsl("^TryExec=.*$"),
+-				QRegularExpression::MultilineOption),
+-			qsl("TryExec=%1").arg(
+-				QString(cExeDir() + cExeName()).replace('\\', "\\\\")));
+-
+ 		fileText = fileText.replace(
+ 			QRegularExpression(
+ 				qsl("^Exec=kotatogram-desktop(.*)$"),
+ 				QRegularExpression::MultilineOption),
+-			qsl("Exec=%1 -workdir %2\\1").arg(
+-				EscapeShellInLauncher(cExeDir() + cExeName()),
++			qsl("Exec=kotatogram-desktop -workdir %1\\1").arg(
+ 				EscapeShellInLauncher(cWorkingDir())));
+ 
+ 		fileText = fileText.replace(
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/tg_owt.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/tg_owt.nix
new file mode 100644
index 000000000000..b5879ffe5b46
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/tg_owt.nix
@@ -0,0 +1,145 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, pkg-config
+, cmake
+, ninja
+, yasm
+, libjpeg
+, openssl
+, libopus
+, ffmpeg_4
+, protobuf
+, openh264
+, usrsctp
+, libvpx
+, libX11
+, libXtst
+, libXcomposite
+, libXdamage
+, libXext
+, libXrender
+, libXrandr
+, libXi
+, glib
+, abseil-cpp
+, pipewire
+, mesa
+, libdrm
+, libGL
+, Cocoa
+, AppKit
+, IOKit
+, IOSurface
+, Foundation
+, AVFoundation
+, CoreMedia
+, VideoToolbox
+, CoreGraphics
+, CoreVideo
+, OpenGL
+, Metal
+, MetalKit
+, CoreFoundation
+, ApplicationServices
+}:
+
+let
+  libsrtp = fetchFromGitHub {
+    owner = "cisco";
+    repo = "libsrtp";
+
+    # https://github.com/desktop-app/tg_owt/commit/6894e86eef8809d42b66eb85e376006f2a816a56
+    rev = "a566a9cfcd619e8327784aa7cff4a1276dc1e895";
+    sha256 = "sha256-OvCw7oF1OuamP3qO2BsimeBSHq1rcXFLfK8KnbbgkMU=";
+  };
+in
+
+stdenv.mkDerivation {
+  pname = "tg_owt";
+  version = "unstable-2022-04-13";
+
+  src = fetchFromGitHub {
+    owner = "desktop-app";
+    repo = "tg_owt";
+    rev = "63a934db1ed212ebf8aaaa20f0010dd7b0d7b396";
+    sha256 = "sha256-WddSsQ9KW1zYyYckzdUOvfFZArYAbyvXmABQNMtK6cM=";
+    fetchSubmodules = true;
+  };
+
+  patches = [
+    ./tg_owt.patch
+
+    (fetchpatch {
+      url = "https://github.com/desktop-app/tg_owt/commit/0614aac699b1a53242ffe2664e3724533bf64f97.patch";
+      hash = "sha256-iCdX518CB/RboDFhl3opnwcAgtqpNWZzYtV75Q+WB6Y=";
+    })
+
+    (fetchpatch {
+      url = "https://github.com/desktop-app/tg_owt/commit/9d120195334db4f232c925529aa7601656dc59d7.patch";
+      hash = "sha256-k99OBCdE2eQVyXEyvreEqVtzC8Xfdolbgd1Z7lV2ceE=";
+    })
+  ];
+
+  postPatch = lib.optionalString stdenv.isLinux ''
+    substituteInPlace src/modules/desktop_capture/linux/egl_dmabuf.cc \
+      --replace '"libEGL.so.1"' '"${libGL}/lib/libEGL.so.1"' \
+      --replace '"libGL.so.1"' '"${libGL}/lib/libGL.so.1"' \
+      --replace '"libgbm.so.1"' '"${mesa}/lib/libgbm.so.1"' \
+      --replace '"libdrm.so.2"' '"${libdrm}/lib/libdrm.so.2"'
+
+    rm -r src/third_party/libsrtp
+    cp -r --no-preserve=mode ${libsrtp} src/third_party/libsrtp
+  '';
+
+  outputs = [ "out" "dev" ];
+
+  nativeBuildInputs = [ pkg-config cmake ninja yasm ];
+
+  propagatedBuildInputs = [
+    libjpeg
+    openssl
+    libopus
+    ffmpeg_4
+    protobuf
+    openh264
+    usrsctp
+    libvpx
+    abseil-cpp
+  ] ++ lib.optionals stdenv.isLinux [
+    libX11
+    libXtst
+    libXcomposite
+    libXdamage
+    libXext
+    libXrender
+    libXrandr
+    libXi
+    glib
+    pipewire
+    mesa
+    libdrm
+    libGL
+  ] ++ lib.optionals stdenv.isDarwin [
+    Cocoa
+    AppKit
+    IOKit
+    IOSurface
+    Foundation
+    AVFoundation
+    CoreMedia
+    VideoToolbox
+    CoreGraphics
+    CoreVideo
+    OpenGL
+    Metal
+    MetalKit
+    CoreFoundation
+    ApplicationServices
+  ];
+
+  enableParallelBuilding = true;
+
+  meta.license = lib.licenses.bsd3;
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/tg_owt.patch b/nixpkgs/pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/tg_owt.patch
new file mode 100644
index 000000000000..05332d51c047
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/tg_owt.patch
@@ -0,0 +1,23 @@
+--- a/src/modules/include/module_common_types_public.h
++++ b/src/modules/include/module_common_types_public.h
+@@ -11,6 +11,7 @@
+ #ifndef MODULES_INCLUDE_MODULE_COMMON_TYPES_PUBLIC_H_
+ #define MODULES_INCLUDE_MODULE_COMMON_TYPES_PUBLIC_H_
+ 
++#include <cstdint>
+ #include <limits>
+ 
+ #include "absl/types/optional.h"
+diff --git a/src/common_video/h265/h265_pps_parser.h b/src/common_video/h265/h265_pps_parser.h
+index 28c95ea9..790b0b73 100644
+--- a/src/common_video/h265/h265_pps_parser.h
++++ b/src/common_video/h265/h265_pps_parser.h
+@@ -13,6 +13,8 @@
+ 
+ #include "absl/types/optional.h"
+ 
++#include <stdint.h>
++
+ namespace rtc {
+ class BitBuffer;
+ }
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/with-webkit.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/with-webkit.nix
new file mode 100644
index 000000000000..73c71d294c84
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/with-webkit.nix
@@ -0,0 +1,21 @@
+{ stdenv, lib, kotatogram-desktop, glib-networking, webkitgtk, makeWrapper }:
+
+stdenv.mkDerivation {
+  pname = "${kotatogram-desktop.pname}-with-webkit";
+  version = kotatogram-desktop.version;
+  nativeBuildInputs = [ makeWrapper ];
+  dontUnpack = true;
+  installPhase = ''
+    mkdir -p $out
+    cp -r ${kotatogram-desktop}/share $out
+  '';
+  postFixup = ''
+    mkdir -p $out/bin
+    makeWrapper ${kotatogram-desktop}/bin/kotatogram-desktop $out/bin/kotatogram-desktop \
+      --prefix GIO_EXTRA_MODULES : ${glib-networking}/lib/gio/modules \
+      --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ webkitgtk ]}
+  '';
+  meta = kotatogram-desktop.meta // {
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/telegram/telegram-desktop/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/telegram/telegram-desktop/default.nix
new file mode 100644
index 000000000000..7a7835ede42c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/telegram/telegram-desktop/default.nix
@@ -0,0 +1,214 @@
+{ lib
+, fetchFromGitHub
+, fetchpatch
+, callPackage
+, pkg-config
+, cmake
+, ninja
+, python3
+, gobject-introspection
+, wrapGAppsHook
+, wrapQtAppsHook
+, extra-cmake-modules
+, qtbase
+, qtwayland
+, qtsvg
+, qtimageformats
+, gtk3
+, boost
+, fmt
+, libdbusmenu
+, lz4
+, xxHash
+, ffmpeg
+, openalSoft
+, minizip
+, libopus
+, alsa-lib
+, libpulseaudio
+, pipewire
+, range-v3
+, tl-expected
+, hunspell
+, glibmm_2_68
+, webkitgtk_6_0
+, jemalloc
+, rnnoise
+, protobuf
+, abseil-cpp
+  # Transitive dependencies:
+, util-linuxMinimal
+, pcre
+, libpthreadstubs
+, libXdamage
+, libXdmcp
+, libselinux
+, libsepol
+, libepoxy
+, at-spi2-core
+, libXtst
+, libthai
+, libdatrie
+, xdg-utils
+, xorg
+, libsysprof-capture
+, libpsl
+, brotli
+, microsoft-gsl
+, rlottie
+, stdenv
+, nix-update-script
+}:
+
+# Main reference:
+# - This package was originally based on the Arch package but all patches are now upstreamed:
+#   https://git.archlinux.org/svntogit/community.git/tree/trunk/PKGBUILD?h=packages/telegram-desktop
+# Other references that could be useful:
+# - https://git.alpinelinux.org/aports/tree/testing/telegram-desktop/APKBUILD
+# - https://github.com/void-linux/void-packages/blob/master/srcpkgs/telegram-desktop/template
+
+let
+  tg_owt = callPackage ./tg_owt.nix {
+    abseil-cpp = abseil-cpp.override {
+      cxxStandard = "20";
+    };
+  };
+in
+stdenv.mkDerivation rec {
+  pname = "telegram-desktop";
+  version = "4.8.4";
+
+  src = fetchFromGitHub {
+    owner = "telegramdesktop";
+    repo = "tdesktop";
+    rev = "v${version}";
+    fetchSubmodules = true;
+    hash = "sha256-DRVFngQ4geJx2/7pT1VJzkcBZnVGgDvcGGUr9r38gSU=";
+  };
+
+  patches = [
+    # the generated .desktop files contains references to unwrapped tdesktop, breaking scheme handling
+    # and the scheme handler is already registered in the packaged .desktop file, rendering this unnecessary
+    # see https://github.com/NixOS/nixpkgs/issues/218370
+    (fetchpatch {
+      url = "https://salsa.debian.org/debian/telegram-desktop/-/raw/09b363ed5a4fcd8ecc3282b9bfede5fbb83f97ef/debian/patches/Disable-register-custom-scheme.patch";
+      hash = "sha256-B8X5lnSpwwdp1HlvyXJWQPybEN+plOwimdV5gW6aY2Y=";
+    })
+  ];
+
+  postPatch = ''
+    substituteInPlace Telegram/ThirdParty/libtgvoip/os/linux/AudioInputALSA.cpp \
+      --replace '"libasound.so.2"' '"${alsa-lib}/lib/libasound.so.2"'
+    substituteInPlace Telegram/ThirdParty/libtgvoip/os/linux/AudioOutputALSA.cpp \
+      --replace '"libasound.so.2"' '"${alsa-lib}/lib/libasound.so.2"'
+    substituteInPlace Telegram/ThirdParty/libtgvoip/os/linux/AudioPulse.cpp \
+      --replace '"libpulse.so.0"' '"${libpulseaudio}/lib/libpulse.so.0"'
+    substituteInPlace Telegram/lib_webview/webview/platform/linux/webview_linux_webkitgtk_library.cpp \
+      --replace '"libwebkitgtk-6.0.so.4"' '"${webkitgtk_6_0}/lib/libwebkitgtk-6.0.so.4"'
+  '';
+
+  # We want to run wrapProgram manually (with additional parameters)
+  dontWrapGApps = true;
+  dontWrapQtApps = true;
+
+  nativeBuildInputs = [
+    pkg-config
+    cmake
+    ninja
+    python3
+    gobject-introspection
+    wrapGAppsHook
+    wrapQtAppsHook
+    extra-cmake-modules
+  ];
+
+  buildInputs = [
+    qtbase
+    qtwayland
+    qtsvg
+    qtimageformats
+    gtk3
+    boost
+    fmt
+    libdbusmenu
+    lz4
+    xxHash
+    ffmpeg
+    openalSoft
+    minizip
+    libopus
+    alsa-lib
+    libpulseaudio
+    pipewire
+    range-v3
+    tl-expected
+    hunspell
+    glibmm_2_68
+    webkitgtk_6_0
+    jemalloc
+    rnnoise
+    protobuf
+    tg_owt
+    # Transitive dependencies:
+    util-linuxMinimal # Required for libmount thus not nativeBuildInputs.
+    pcre
+    libpthreadstubs
+    libXdamage
+    libXdmcp
+    libselinux
+    libsepol
+    libepoxy
+    at-spi2-core
+    libXtst
+    libthai
+    libdatrie
+    libsysprof-capture
+    libpsl
+    brotli
+    microsoft-gsl
+    rlottie
+  ];
+
+  cmakeFlags = [
+    "-Ddisable_autoupdate=ON"
+    # We're allowed to used the API ID of the Snap package:
+    "-DTDESKTOP_API_ID=611335"
+    "-DTDESKTOP_API_HASH=d524b414d21f4d37f08684c1df41ac9c"
+    # See: https://github.com/NixOS/nixpkgs/pull/130827#issuecomment-885212649
+    "-DDESKTOP_APP_USE_PACKAGED_FONTS=OFF"
+  ];
+
+  preBuild = ''
+    # for cppgir to locate gir files
+    export GI_GIR_PATH="$XDG_DATA_DIRS"
+  '';
+
+  postFixup = ''
+    # This is necessary to run Telegram in a pure environment.
+    # We also use gappsWrapperArgs from wrapGAppsHook.
+    wrapProgram $out/bin/telegram-desktop \
+      "''${gappsWrapperArgs[@]}" \
+      "''${qtWrapperArgs[@]}" \
+      --prefix LD_LIBRARY_PATH : "${xorg.libXcursor}/lib" \
+      --suffix PATH : ${lib.makeBinPath [ xdg-utils ]}
+  '';
+
+  passthru = {
+    inherit tg_owt;
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    description = "Telegram Desktop messaging app";
+    longDescription = ''
+      Desktop client for the Telegram messenger, based on the Telegram API and
+      the MTProto secure protocol.
+    '';
+    license = licenses.gpl3Only;
+    platforms = platforms.linux;
+    homepage = "https://desktop.telegram.org/";
+    changelog = "https://github.com/telegramdesktop/tdesktop/releases/tag/v${version}";
+    maintainers = with maintainers; [ nickcao ];
+    mainProgram = "telegram-desktop";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/telegram/telegram-desktop/tg_owt.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/telegram/telegram-desktop/tg_owt.nix
new file mode 100644
index 000000000000..73437d73015f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/telegram/telegram-desktop/tg_owt.nix
@@ -0,0 +1,63 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch
+, pkg-config, cmake, ninja, yasm
+, libjpeg, openssl, libopus, ffmpeg, alsa-lib, libpulseaudio, protobuf
+, openh264, usrsctp, libevent, libvpx
+, libX11, libXtst, libXcomposite, libXdamage, libXext, libXrender, libXrandr, libXi
+, glib, abseil-cpp, pcre, util-linuxMinimal, libselinux, libsepol, pipewire
+, mesa, libepoxy, libglvnd, unstableGitUpdater
+}:
+
+stdenv.mkDerivation {
+  pname = "tg_owt";
+  version = "unstable-2023-08-15";
+
+  src = fetchFromGitHub {
+    owner = "desktop-app";
+    repo = "tg_owt";
+    rev = "0532942ac6176a66ef184fb728a4cbb02958fc0b";
+    sha256 = "sha256-FcRXxu0Nc8qHQl8PoA92MeuhpV+vgl658uILEpmDy3A=";
+    fetchSubmodules = true;
+  };
+
+  outputs = [ "out" "dev" ];
+
+  nativeBuildInputs = [ pkg-config cmake ninja yasm ];
+
+  buildInputs = [
+    libjpeg libopus ffmpeg alsa-lib libpulseaudio protobuf
+    openh264 usrsctp libevent libvpx
+    libX11 libXtst libXcomposite libXdamage libXext libXrender libXrandr libXi
+    glib abseil-cpp pcre util-linuxMinimal libselinux libsepol pipewire
+    mesa libepoxy libglvnd
+  ];
+
+  patches = [
+    # GCC 12 Fix
+    (fetchpatch {
+      url = "https://github.com/desktop-app/tg_owt/pull/101/commits/86d2bcd7afb8706663d29e30f65863de5a626142.patch";
+      hash = "sha256-iWS0mB8R0vqPU/0qf6Ax54UCAKYDVCPac2mi/VHbFm0=";
+    })
+    # additional fix for GCC 12 + musl
+    (fetchpatch {
+      url = "https://git.alpinelinux.org/aports/plain/community/tg_owt/gcc12.patch?id=8120df03fa3b6db5b8ff92c7a52b680290ad6e20";
+      hash = "sha256-ikgxUH1e7pz0n0pKUemrPXXa4UkECX+w467M9gU68zs=";
+    })
+  ];
+
+  cmakeFlags = [
+    # Building as a shared library isn't officially supported and may break at any time.
+    "-DBUILD_SHARED_LIBS=OFF"
+  ];
+
+  propagatedBuildInputs = [
+    # Required for linking downstream binaries.
+    abseil-cpp openh264 usrsctp libevent libvpx openssl
+  ];
+
+  passthru.updateScript = unstableGitUpdater { };
+
+  meta = with lib; {
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ oxalica ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/telegram/tg/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/telegram/tg/default.nix
new file mode 100644
index 000000000000..0918bfee91e2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/telegram/tg/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildPythonApplication, fetchFromGitHub, pythonOlder, python-telegram }:
+
+buildPythonApplication rec {
+  pname = "tg";
+  version = "0.19.0";
+  disabled = pythonOlder "3.8";
+
+  src = fetchFromGitHub {
+    owner = "paul-nameless";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-apHd26XnOz5nak+Kz8PJPsonQfTWDyPz7Mi/tWf7zwM=";
+  };
+
+  propagatedBuildInputs = [ python-telegram ];
+
+  doCheck = false; # No tests
+
+  meta = with lib; {
+    description = "Terminal client for telegram";
+    homepage = "https://github.com/paul-nameless/tg";
+    license = licenses.unlicense;
+    maintainers = with maintainers; [ sikmir ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/telepathy/gabble/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/telepathy/gabble/default.nix
new file mode 100644
index 000000000000..a8b762ab7eab
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/telepathy/gabble/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchurl, pkg-config, libxslt, telepathy-glib, python3, libxml2, dbus-glib, dbus
+, sqlite, libsoup, libnice, gnutls
+, fetchpatch
+}:
+
+stdenv.mkDerivation rec {
+  pname = "telepathy-gabble";
+  version = "0.18.4";
+
+  src = fetchurl {
+    url = "https://telepathy.freedesktop.org/releases/telepathy-gabble/telepathy-gabble-${version}.tar.gz";
+    sha256 = "174nlkqm055vrhv11gy73m20jbsggcb0ddi51c7s9m3j5ibr2p0i";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/archlinux/svntogit-packages/raw/edcf78c831894000f2fbfd3e5818e363911c746a/trunk/telepathy-gabble-0.18.4-python3.patch";
+      hash = "sha256-bvcZW6gbCNogqwPDaXHTbohe7c2GAYjXeHGyBEDVsB4=";
+    })
+  ];
+
+  nativeBuildInputs = [ pkg-config libxslt python3 ];
+  buildInputs = [ libxml2 dbus-glib sqlite libsoup libnice telepathy-glib gnutls ];
+
+  nativeCheckInputs = [ dbus ];
+
+  configureFlags = [ "--with-ca-certificates=/etc/ssl/certs/ca-certificates.crt" ];
+
+  enableParallelBuilding = true;
+  doCheck = true;
+
+  meta = with lib; {
+    homepage = "https://telepathy.freedesktop.org/components/telepathy-gabble/";
+    description = "Jabber/XMPP connection manager for the Telepathy framework";
+    license = licenses.lgpl21Plus;
+    platforms = lib.platforms.gnu ++ lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/telepathy/haze/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/telepathy/haze/default.nix
new file mode 100644
index 000000000000..4b8d2f6104ab
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/telepathy/haze/default.nix
@@ -0,0 +1,20 @@
+{ lib, stdenv, fetchurl, fetchpatch, pidgin, telepathy-glib, python3, glib, dbus-glib, pkg-config, libxslt }:
+
+stdenv.mkDerivation rec {
+  pname = "telepathy-haze";
+  version = "0.8.1";
+
+  src = fetchurl {
+    url = "https://telepathy.freedesktop.org/releases/telepathy-haze/telepathy-haze-${version}.tar.gz";
+    hash = "sha256-cEvvpC7sIXPspLrAH/0AQBRmXyutRtyJSOVCM2TN4wo=";
+  };
+
+  buildInputs = [ glib telepathy-glib dbus-glib pidgin ];
+
+  nativeBuildInputs = [ pkg-config libxslt python3 ];
+
+  meta = {
+    description = "A Telepathy connection manager based on libpurple";
+    platforms = lib.platforms.gnu ++ lib.platforms.linux; # Random choice
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/telepathy/idle/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/telepathy/idle/default.nix
new file mode 100644
index 000000000000..1a546ed1aef5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/telepathy/idle/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchurl, glib, dconf, pkg-config, dbus-glib, telepathy-glib, python3, libxslt, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "telepathy-idle";
+  version = "0.2.2";
+
+  src = fetchurl {
+    url = "http://telepathy.freedesktop.org/releases/${pname}/${pname}-${version}.tar.gz";
+    hash = "sha256-g4fiXl+wtMvnAeXcCS1mbWUQuDP9Pn5GLpFw027DwV8=";
+  };
+
+  nativeBuildInputs = [ pkg-config python3 makeWrapper ];
+  buildInputs = [ glib telepathy-glib dbus-glib libxslt (lib.getLib dconf) ];
+
+  preFixup = ''
+    wrapProgram "$out/libexec/telepathy-idle" \
+      --prefix GIO_EXTRA_MODULES : "${lib.getLib dconf}/lib/gio/modules"
+  '';
+
+  meta = {
+    description = "IRC connection manager for the Telepathy framework";
+    license = lib.licenses.lgpl21;
+    platforms = lib.platforms.gnu ++ lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/telepathy/logger/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/telepathy/logger/default.nix
new file mode 100644
index 000000000000..ac03ee20ff95
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/telepathy/logger/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchurl, dbus-glib, libxml2, sqlite, telepathy-glib, python3, pkg-config
+, dconf, makeWrapper, intltool, libxslt, gobject-introspection, dbus
+, fetchpatch
+}:
+
+stdenv.mkDerivation rec {
+  pname = "telepathy-logger";
+  version = "0.8.2";
+
+  src = fetchurl {
+    url = "https://telepathy.freedesktop.org/releases/telepathy-logger/telepathy-logger-${version}.tar.bz2";
+    sha256 = "1bjx85k7jyfi5pvl765fzc7q2iz9va51anrc2djv7caksqsdbjlg";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/archlinux/svntogit-packages/raw/2b5bdbb4739d3517f5e7300edc8dab775743b96d/trunk/0001-tools-Fix-the-build-with-Python-3.patch";
+      hash = "sha256-o1lfdZIIqaxn7ntQZnoOMqquc6efTHgSIxB5dpFWRgg=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    makeWrapper pkg-config intltool libxslt gobject-introspection
+    python3
+  ];
+  buildInputs = [
+    dbus-glib libxml2 sqlite telepathy-glib
+    dbus
+  ];
+
+  configureFlags = [ "--enable-call" ];
+
+  preFixup = ''
+    wrapProgram "$out/libexec/telepathy-logger" \
+      --prefix GIO_EXTRA_MODULES : "${lib.getLib dconf}/lib/gio/modules" \
+      --prefix XDG_DATA_DIRS : "$GSETTINGS_SCHEMAS_PATH"
+  '';
+
+  meta = with lib; {
+    description = "Logger service for Telepathy framework";
+    homepage = "https://telepathy.freedesktop.org/components/telepathy-logger/";
+    license = licenses.lgpl21;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.gnu ++ platforms.linux; # Arbitrary choice
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/telepathy/mission-control/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/telepathy/mission-control/default.nix
new file mode 100644
index 000000000000..3bc59091afab
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/telepathy/mission-control/default.nix
@@ -0,0 +1,55 @@
+{ lib, stdenv
+, fetchurl
+, pkg-config
+, dconf
+, telepathy-glib
+, python3
+, libxslt
+, makeWrapper
+}:
+
+stdenv.mkDerivation rec {
+  pname = "telepathy-mission-control";
+  version = "5.16.6";
+
+  outputs = [ "out" "lib" "dev" ];
+
+  src = fetchurl {
+    url = "https://telepathy.freedesktop.org/releases/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "0ibs575pfr0wmhfcw6ln6iz7gw2y45l3bah11rksf6g9jlwsxy1d";
+  };
+
+  buildInputs = [
+    python3
+  ]; # ToDo: optional stuff missing
+
+  nativeBuildInputs = [
+    pkg-config
+    libxslt
+    makeWrapper
+  ];
+
+  propagatedBuildInputs = [
+    telepathy-glib
+  ];
+
+  doCheck = true;
+
+  enableParallelBuilding = true;
+
+  preFixup = ''
+    wrapProgram "$lib/libexec/mission-control-5" \
+      --prefix GIO_EXTRA_MODULES : "${lib.getLib dconf}/lib/gio/modules" \
+      --prefix XDG_DATA_DIRS : "$GSETTINGS_SCHEMAS_PATH"
+  '';
+
+  meta = with lib; {
+    description = "An account manager and channel dispatcher for the Telepathy framework";
+    homepage = "https://telepathy.freedesktop.org/components/telepathy-mission-control/";
+    license = licenses.lgpl21Only;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.unix;
+    # never built on aarch64-darwin since first introduction in nixpkgs
+    broken = stdenv.isDarwin && stdenv.isAarch64;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/tensor/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/tensor/default.nix
new file mode 100644
index 000000000000..cbc93857c819
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/tensor/default.nix
@@ -0,0 +1,69 @@
+{ mkDerivation
+, lib
+, stdenv
+, fetchFromGitHub
+, qtbase
+, qtquickcontrols
+, qmake
+, makeDesktopItem
+}:
+
+# we now have libqmatrixclient so a future version of tensor that supports it
+# should use that
+
+mkDerivation rec {
+  pname = "tensor";
+  version = "unstable-2017-02-21";
+
+  src = fetchFromGitHub {
+    owner = "davidar";
+    repo = "tensor";
+    rev = "f3f3056d770d7fb4a21c610cee7936ee900569f5";
+    sha256 = "sha256-aR6TsfUxsxoSDaIWYgRCwd7BCgekSEqY6LpDoQ5DNqY=";
+    fetchSubmodules = true;
+  };
+
+  buildInputs = [ qtbase qtquickcontrols ];
+  nativeBuildInputs = [ qmake ];
+
+  desktopItem = makeDesktopItem {
+    name = "tensor";
+    exec = "@bin@";
+    icon = "tensor.png";
+    comment = meta.description;
+    desktopName = "Tensor Matrix Client";
+    genericName = meta.description;
+    categories = [ "Chat" "Utility" ];
+    mimeTypes = [ "application/x-chat" ];
+  };
+
+  installPhase = if stdenv.isDarwin then ''
+    runHook preInstall
+
+    mkdir -p $out/Applications
+    cp -r tensor.app $out/Applications/tensor.app
+
+    runHook postInstall
+  '' else ''
+    runHook preInstall
+
+    install -Dm755 tensor $out/bin/tensor
+    install -Dm644 client/logo.png \
+                   $out/share/icons/hicolor/512x512/apps/tensor.png
+    install -Dm644 ${desktopItem}/share/applications/tensor.desktop \
+                   $out/share/applications/tensor.desktop
+
+    substituteInPlace $out/share/applications/tensor.desktop \
+      --subst-var-by bin $out/bin/tensor
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://matrix.org/docs/projects/client/tensor.html";
+    description = "Cross-platform Qt5/QML-based Matrix client";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ peterhoeg ];
+    inherit (qtbase.meta) platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/threema-desktop/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/threema-desktop/default.nix
new file mode 100644
index 000000000000..0cb8cc4ff2e5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/threema-desktop/default.nix
@@ -0,0 +1,55 @@
+{ lib, stdenv, fetchurl, dpkg, autoPatchelfHook, makeWrapper, electron
+, alsa-lib, glibc, gtk3, libxshmfence, mesa, nss }:
+
+stdenv.mkDerivation rec {
+  pname = "threema-desktop";
+  version = "1.2.31";
+
+  src = fetchurl {
+    # As Threema only offers a Latest Release url, the plan is to upload each
+    # new release url to web.archive.org until their Github releases page gets populated.
+    url = "https://web.archive.org/web/20230731230034if_/https://releases.threema.ch/web-electron/v1/release/Threema-Latest.deb";
+    hash = "sha256-eZ/bjcSnrnzub1G4sbwPn3GCTwhDfFuYv9Plf5SJL90=";
+  };
+
+  nativeBuildInputs = [
+    dpkg
+    autoPatchelfHook
+    makeWrapper
+  ];
+
+  buildInputs = [ alsa-lib glibc gtk3 libxshmfence mesa nss ];
+
+  dontBuild = true;
+  dontConfigure = true;
+
+  unpackPhase = ''
+    # Can't unpack with the common dpkg-deb -x method
+    dpkg --fsys-tarfile $src | tar --extract
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    # This will cause confusion, not needed
+    rm -r usr/bin
+    mv usr $out
+
+    runHook postInstall
+  '';
+
+  postFixup = ''
+    mv $out/share/applications/threema.desktop $out/share/applications/threema-desktop.desktop
+    makeWrapper ${electron}/bin/electron $out/bin/threema \
+      --add-flags $out/lib/threema/resources/app.asar
+  '';
+
+  meta = with lib; {
+    description = "Desktop client for Threema, a privacy-focused end-to-end encrypted mobile messenger";
+    homepage = "https://threema.ch";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.agpl3Only;
+    maintainers = with maintainers; [ wolfangaukang ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/toxic/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/toxic/default.nix
new file mode 100644
index 000000000000..2f16cb78454f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/toxic/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, libsodium, ncurses, curl
+, libtoxcore, openal, libvpx, freealut, libconfig, pkg-config, libopus
+, qrencode, gdk-pixbuf, libnotify }:
+
+stdenv.mkDerivation rec {
+  pname = "toxic";
+  version = "0.11.3";
+
+  src = fetchFromGitHub {
+    owner  = "Tox";
+    repo   = "toxic";
+    rev    = "v${version}";
+    sha256 = "sha256-BabRY9iu5ccEXo5POrWkWaIWAeQU4MVlMK8I+Iju6aQ=";
+  };
+
+  makeFlags = [ "PREFIX=$(out)"];
+  installFlags = [ "PREFIX=$(out)"];
+
+  buildInputs = [
+    libtoxcore libsodium ncurses curl gdk-pixbuf libnotify
+  ] ++ lib.optionals (!stdenv.isAarch32) [
+    openal libopus libvpx freealut qrencode
+  ];
+  nativeBuildInputs = [ pkg-config libconfig ];
+
+  meta = with lib; src.meta // {
+    description = "Reference CLI for Tox";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ ehmry ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/trillian-im/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/trillian-im/default.nix
new file mode 100644
index 000000000000..0d4a6299adfc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/trillian-im/default.nix
@@ -0,0 +1,78 @@
+{ lib
+, stdenv
+, fetchurl
+, autoPatchelfHook
+, dpkg
+, atkmm
+, cairo
+, cairomm
+, gtk3
+, gtkmm3
+, libnotify
+, libsecret
+, pangomm
+, xorg
+, libpulseaudio
+, librsvg
+, libzip
+, openssl
+, webkitgtk
+, libappindicator-gtk3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "trillian-im";
+  version = "6.3.0.1";
+
+  src = fetchurl {
+    url = "https://www.trillian.im/get/linux/6.3/trillian_${version}_amd64.deb";
+    sha256 = "42e3466ee236ac2644907059f0961eba3a6ed6b6156afb2c57f54ebe6065ac6f";
+  };
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+    dpkg
+  ];
+
+  buildInputs = [
+    atkmm
+    cairo
+    cairomm
+    gtk3
+    gtkmm3
+    libnotify
+    libsecret
+    pangomm
+    xorg.libXScrnSaver
+    libpulseaudio
+    librsvg
+    libzip
+    openssl
+    webkitgtk
+    libappindicator-gtk3
+  ];
+
+  dontUnpack = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out
+    dpkg -x $src $out
+    cp -av $out/usr/* $out
+    rm -rf $out/usr
+
+    rm $out/bin/trillian
+    ln -s "$out/share/trillian/trillian" "$out/bin/trillian"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Modern instant messaging for home and work that prioritizes chat interoperability and security";
+    homepage = "https://www.trillian.im/";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ majiir ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/turses/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/turses/default.nix
new file mode 100644
index 000000000000..240931065e6c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/turses/default.nix
@@ -0,0 +1,95 @@
+{ lib
+, fetchpatch
+, fetchFromGitHub
+, fetchPypi
+, python3
+}:
+
+let
+  py = python3.override {
+    packageOverrides = self: super: {
+
+      # Support for later tweepy releases is missing
+      # https://github.com/louipc/turses/issues/12
+      tweepy = super.tweepy.overridePythonAttrs (oldAttrs: rec {
+        version = "3.10.0";
+
+        src = fetchFromGitHub {
+          owner = "tweepy";
+          repo = "tweepy";
+          rev = "v${version}";
+          sha256 = "0k4bdlwjna6f1k19jki4xqgckrinkkw8b9wihzymr1l04rwd05nw";
+        };
+        propagatedBuildInputs = oldAttrs.propagatedBuildInputs ++ [
+          super.six
+          super.requests.optional-dependencies.socks
+        ];
+        doCheck = false;
+      });
+    };
+  };
+in
+with py.pkgs;
+
+buildPythonPackage rec {
+  pname = "turses";
+  version = "0.3.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "15mkhm3b5ka42h8qph0mhh8izfc1200v7651c62k7ldcs50ib9j6";
+  };
+
+  propagatedBuildInputs = with py.pkgs; [
+    urwid
+    tweepy
+    future
+  ];
+
+  nativeCheckInputs = with py.pkgs; [
+    mock
+    pytest
+    coverage
+    tox
+  ];
+
+  LC_ALL = "en_US.UTF-8";
+
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/louipc/turses/commit/be0961b51f502d49fd9e2e5253ac130e543a31c7.patch";
+      sha256 = "17s1n0275mcj03vkf3n39dmc09niwv4y7ssrfk7k3vqx22kppzg3";
+    })
+    # python 3.7+ support
+    (fetchpatch {
+      url = "https://github.com/booxter/turses/commit/e6e285eae50fc3d2042a476185fe60daef1e758e.patch";
+      sha256 = "0g2zsrny955viwgs2l6gpiiz8m67b5sgdcxkjmfimfvvih5sg79f";
+    })
+  ];
+
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace "urwid==1.3.0" "urwid" \
+      --replace "future==0.14.3" "future" \
+      --replace "tweepy==3.3.0" "tweepy"
+    substituteInPlace tests/test_config.py \
+      --replace "config.generate_config_file.assert_called_once()" "assert config.generate_config_file.call_count == 1"
+    substituteInPlace tests/test_meta.py \
+      --replace "self.observer.update.assert_called_once()" "assert self.observer.update.call_count == 1"
+  '';
+
+  checkPhase = ''
+    TMP_TURSES=`echo turses-$RANDOM`
+    mkdir $TMP_TURSES
+    PYTHONPATH=tests:$PYTHONPATH HOME=$TMP_TURSES py.test tests/
+    rm -rf $TMP_TURSES
+  '';
+
+  meta = with lib; {
+    description = "A Twitter client for the console";
+    homepage = "https://github.com/louipc/turses";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/twinkle/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/twinkle/default.nix
new file mode 100644
index 000000000000..3dd912da90d7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/twinkle/default.nix
@@ -0,0 +1,70 @@
+{ lib
+, fetchFromGitHub
+, cmake
+, libxml2
+, libsndfile
+, file
+, readline
+, bison
+, flex
+, ucommon
+, ccrtp
+, qtbase
+, qttools
+, qtquickcontrols2
+, alsa-lib
+, speex
+, ilbc
+, mkDerivation
+, bcg729
+}:
+
+mkDerivation rec {
+  pname = "twinkle";
+  version = "unstable-2021-02-06";
+
+  src = fetchFromGitHub {
+    owner = "LubosD";
+    repo = "twinkle";
+    rev = "2301b66a3f54b266675415d261985488d86e9e4c";
+    sha256 = "xSwcaj1Hm62iL7C/AxqjVR07VEae8gDgYdr2EWmCoOM=";
+  };
+
+  buildInputs = [
+    libxml2
+    file # libmagic
+    libsndfile
+    readline
+    ucommon
+    ccrtp
+    qtbase
+    qttools
+    qtquickcontrols2
+    alsa-lib
+    speex
+    ilbc
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    bison
+    flex
+    bcg729
+  ];
+
+  cmakeFlags = [
+    "-DWITH_G729=On"
+    "-DWITH_SPEEX=On"
+    "-DWITH_ILBC=On"
+    /* "-DWITH_DIAMONDCARD=On" seems ancient and broken */
+  ];
+
+  meta = with lib; {
+    changelog = "https://github.com/LubosD/twinkle/blob/${version}/NEWS";
+    description = "A SIP-based VoIP client";
+    homepage = "http://twinkle.dolezel.info/";
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.mkg20001 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/twitch-tui/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/twitch-tui/default.nix
new file mode 100644
index 000000000000..8d15b8e466b8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/twitch-tui/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, pkg-config
+, openssl
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "twitch-tui";
+  version = "2.5.1";
+
+  src = fetchFromGitHub {
+    owner = "Xithrius";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-oqsLqmyLrvb8u9cj68OemUfunbP98/BZjmoGl1Mctrk=";
+  };
+
+  cargoHash = "sha256-DEHMF6sTH3BF8lqOV5G4F3+Tsafrhzr0YLqSgV3gq9I=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    Security
+  ];
+
+  meta = with lib; {
+    description = "Twitch chat in the terminal";
+    homepage = "https://github.com/Xithrius/twitch-tui";
+    changelog = "https://github.com/Xithrius/twitch-tui/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = [ maintainers.taha ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/utox/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/utox/default.nix
new file mode 100644
index 000000000000..7fee1f5c3a83
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/utox/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchFromGitHub, check, cmake, pkg-config
+, libtoxcore, filter-audio, dbus, libvpx, libX11, openal, freetype, libv4l
+, libXrender, fontconfig, libXext, libXft, libsodium, libopus }:
+
+stdenv.mkDerivation rec {
+  pname = "utox";
+
+  version = "0.18.1";
+
+  src = fetchFromGitHub {
+    owner  = "uTox";
+    repo   = "uTox";
+    rev    = "v${version}";
+    sha256 = "sha256-DxnolxUTn+CL6TbZHKLHOUMTHhtTSWufzzOTRpKjOwc=";
+    fetchSubmodules = true;
+  };
+
+  buildInputs = [
+    libtoxcore dbus libvpx libX11 openal freetype
+    libv4l libXrender fontconfig libXext libXft filter-audio
+    libsodium libopus
+  ];
+
+  nativeBuildInputs = [
+    cmake pkg-config
+  ];
+
+  cmakeFlags = [
+    "-DENABLE_AUTOUPDATE=OFF"
+    "-DENABLE_TESTS=${if doCheck then "ON" else "OFF"}"
+  ];
+
+  doCheck = stdenv.hostPlatform == stdenv.buildPlatform;
+  nativeCheckInputs = [ check ];
+
+  meta = with lib; {
+    description = "Lightweight Tox client";
+    homepage = "https://github.com/uTox/uTox";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/vacuum/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/vacuum/default.nix
new file mode 100644
index 000000000000..f735907e46b8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/vacuum/default.nix
@@ -0,0 +1,49 @@
+{ stdenv, lib, fetchFromGitHub
+, qtbase
+, qttools
+, qtx11extras
+, qtmultimedia
+, qtwebkit
+, wrapQtAppsHook
+, cmake
+, openssl
+, xorgproto, libX11, libXScrnSaver
+, xz, zlib
+}:
+stdenv.mkDerivation {
+  pname = "vacuum-im";
+  version = "unstable-2021-12-09";
+
+  src = fetchFromGitHub {
+    owner = "Vacuum-IM";
+    repo = "vacuum-im";
+    rev = "0abd5e11dd3e2538b8c47f5a06febedf73ae99ee";
+    sha256 = "0l9pln07zz874m1r6wnpc9vcdbpgvjdsy49cjjilc6s4p4b2c812";
+  };
+
+  nativeBuildInputs = [
+    wrapQtAppsHook
+    cmake
+  ];
+  buildInputs = [
+    qtbase
+    qttools
+    qtx11extras
+    qtmultimedia
+    qtwebkit
+    openssl
+    xorgproto
+    libX11
+    libXScrnSaver
+    xz
+    zlib
+  ];
+
+  meta = with lib; {
+    description = "An XMPP client fully composed of plugins";
+    maintainers = [ maintainers.raskin ];
+    platforms = platforms.linux;
+    license = licenses.gpl3;
+    homepage = "http://www.vacuum-im.org";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/viber/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/viber/default.nix
new file mode 100644
index 000000000000..884bd0942db1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/viber/default.nix
@@ -0,0 +1,111 @@
+{fetchurl, lib, stdenv, dpkg, makeWrapper,
+ alsa-lib, cups, curl, dbus, expat, fontconfig, freetype, glib, gst_all_1,
+ harfbuzz, libcap, libGL, libGLU, libpulseaudio, libxkbcommon, libxml2, libxslt,
+ nspr, nss, openssl_1_1, systemd, wayland, xorg, zlib, ...
+}:
+
+stdenv.mkDerivation {
+  pname = "viber";
+  version = "16.1.0.37";
+
+  src = fetchurl {
+    # Official link: https://download.cdn.viber.com/cdn/desktop/Linux/viber.deb
+    url = "https://web.archive.org/web/20211119123858/https://download.cdn.viber.com/cdn/desktop/Linux/viber.deb";
+    sha256 = "sha256-hOz+EQc2OOlLTPa2kOefPJMUyWvSvrgqgPgBKjWE3p8=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ dpkg ];
+
+  dontUnpack = true;
+
+  libPath = lib.makeLibraryPath [
+      alsa-lib
+      cups
+      curl
+      dbus
+      expat
+      fontconfig
+      freetype
+      glib
+      gst_all_1.gst-plugins-base
+      gst_all_1.gstreamer
+      harfbuzz
+      libcap
+      libGLU libGL
+      libpulseaudio
+      libxkbcommon
+      libxml2
+      libxslt
+      nspr
+      nss
+      openssl_1_1
+      stdenv.cc.cc
+      systemd
+      wayland
+      zlib
+
+      xorg.libICE
+      xorg.libSM
+      xorg.libX11
+      xorg.libxcb
+      xorg.libXcomposite
+      xorg.libXcursor
+      xorg.libXdamage
+      xorg.libXext
+      xorg.libXfixes
+      xorg.libXi
+      xorg.libXrandr
+      xorg.libXrender
+      xorg.libXScrnSaver
+      xorg.libXtst
+      xorg.xcbutilimage
+      xorg.xcbutilkeysyms
+      xorg.xcbutilrenderutil
+      xorg.xcbutilwm
+  ]
+  ;
+
+  installPhase = ''
+    dpkg-deb -x $src $out
+    mkdir -p $out/bin
+
+    # Soothe nix-build "suspicions"
+    chmod -R g-w $out
+
+    for file in $(find $out -type f \( -perm /0111 -o -name \*.so\* \) ); do
+      patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" "$file" || true
+      patchelf --set-rpath $libPath:$out/opt/viber/lib $file || true
+    done
+
+    # qt.conf is not working, so override everything using environment variables
+    wrapProgram $out/opt/viber/Viber \
+      --set QT_QPA_PLATFORM "xcb" \
+      --set QT_PLUGIN_PATH "$out/opt/viber/plugins" \
+      --set QT_XKB_CONFIG_ROOT "${xorg.xkeyboardconfig}/share/X11/xkb" \
+      --set QTCOMPOSE "${xorg.libX11.out}/share/X11/locale" \
+      --set QML2_IMPORT_PATH "$out/opt/viber/qml"
+    ln -s $out/opt/viber/Viber $out/bin/viber
+
+    mv $out/usr/share $out/share
+    rm -rf $out/usr
+
+    # Fix the desktop link
+    substituteInPlace $out/share/applications/viber.desktop \
+      --replace /opt/viber/Viber $out/opt/viber/Viber \
+      --replace /usr/share/ $out/share/
+  '';
+
+  dontStrip = true;
+  dontPatchELF = true;
+
+  meta = {
+    homepage = "https://www.viber.com";
+    description = "An instant messaging and Voice over IP (VoIP) app";
+    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+    license = lib.licenses.unfree;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with lib.maintainers; [ jagajaga ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/vk-cli/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/vk-cli/default.nix
new file mode 100644
index 000000000000..a22437bf8da0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/vk-cli/default.nix
@@ -0,0 +1,55 @@
+{ stdenv
+, lib
+, fetchurl
+, curl
+, p7zip
+, glibc
+, ncurses
+, openssl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "vk-cli";
+  version = "0.7.6";
+
+  src = fetchurl {
+    url = "https://github.com/vk-cli/vk/releases/download/${version}/vk-${version}-64-bin.7z";
+    sha256 = "sha256-Y40oLjddunrd7ZF1JbCcgjSCn8jFTubq69jhAVxInXw=";
+  };
+
+  nativeBuildInputs = [
+    p7zip
+  ];
+
+  buildInputs = [
+    curl
+    ncurses
+    openssl
+  ];
+
+  unpackPhase = ''
+    mkdir -p $TMP/
+    7z x $src -o$TMP/
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin/
+    mv $TMP/vk-${version}-64-bin vk-cli
+    install -D vk-cli --target-directory=$out/bin/
+  '';
+
+  postFixup = ''
+    patchelf $out/bin/vk-cli \
+      --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+      --set-rpath "${lib.makeLibraryPath [ curl glibc ]}"
+  '';
+
+  meta = with lib; {
+    description = "A console (ncurses) client for vk.com written in D";
+    homepage = "https://github.com/vk-cli/vk";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.asl20;
+    maintainers = with maintainers; [ dan4ik605743 ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/vk-messenger/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/vk-messenger/default.nix
new file mode 100644
index 000000000000..0d320485fe74
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/vk-messenger/default.nix
@@ -0,0 +1,74 @@
+{ stdenv, lib, fetchurl, rpmextract, undmg, autoPatchelfHook
+, xorg, gtk3, nss, alsa-lib, udev, libnotify
+, wrapGAppsHook }:
+
+let
+  pname = "vk-messenger";
+  version = "5.3.2";
+
+  src = {
+    i686-linux = fetchurl {
+      url = "https://desktop.userapi.com/rpm/master/vk-${version}.i686.rpm";
+      sha256 = "L0nE0zW4LP8udcE8uPy+cH9lLuQsUSq7cF13Gv7w2rI=";
+    };
+    x86_64-linux = fetchurl {
+      url = "https://desktop.userapi.com/rpm/master/vk-${version}.x86_64.rpm";
+      sha256 = "spDw9cfDSlIuCwOqREsqXC19tx62TiAz9fjIS9lYjSQ=";
+    };
+    x86_64-darwin = fetchurl {
+      url = "https://web.archive.org/web/20220302083827/https://desktop.userapi.com/mac/master/vk.dmg";
+      sha256 = "hxK8I9sF6njfCxSs1KBCHfnG81JGKUgHKAeFLtuCNe0=";
+    };
+  }.${stdenv.system} or (throw "Unsupported system: ${stdenv.system}");
+
+  meta = with lib; {
+    description = "Simple and Convenient Messaging App for VK";
+    homepage = "https://vk.com/messenger";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = [ ];
+    platforms = ["i686-linux" "x86_64-linux" "x86_64-darwin"];
+  };
+
+  linux = stdenv.mkDerivation {
+    inherit pname version src meta;
+
+    nativeBuildInputs = [ rpmextract autoPatchelfHook wrapGAppsHook ];
+    buildInputs = (with xorg; [
+      libXdamage libXtst libXScrnSaver libxkbfile
+    ]) ++ [ gtk3 nss alsa-lib ];
+
+    runtimeDependencies = [ (lib.getLib udev) libnotify ];
+
+    unpackPhase = ''
+      rpmextract $src
+    '';
+
+    buildPhase = ''
+      substituteInPlace usr/share/applications/vk.desktop \
+        --replace /usr/share/pixmaps/vk.png vk
+    '';
+
+    installPhase = ''
+      mkdir $out
+      cd usr
+      cp -r --parents bin $out
+      cp -r --parents share/vk $out
+      cp -r --parents share/applications $out
+      cp -r --parents share/pixmaps $out
+    '';
+  };
+
+  darwin = stdenv.mkDerivation {
+    inherit pname version src meta;
+
+    nativeBuildInputs = [ undmg ];
+
+    sourceRoot = ".";
+
+    installPhase = ''
+      mkdir -p $out/Applications
+      cp -r *.app $out/Applications
+    '';
+  };
+in if stdenv.isDarwin then darwin else linux
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/wavebox/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/wavebox/default.nix
new file mode 100644
index 000000000000..3d0ea6353d48
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/wavebox/default.nix
@@ -0,0 +1,88 @@
+{ alsa-lib
+, autoPatchelfHook
+, fetchurl
+, gtk3
+, gtk4
+, libnotify
+, makeDesktopItem
+, makeWrapper
+, mesa
+, nss
+, lib
+, libdrm
+, qt5
+, stdenv
+, udev
+, xdg-utils
+, xorg
+}:
+
+let
+  version = "10.114.26-2";
+  desktopItem = makeDesktopItem rec {
+    name = "Wavebox";
+    exec = "wavebox";
+    icon = "wavebox";
+    desktopName = name;
+    genericName = name;
+    categories = [ "Network" "WebBrowser" ];
+  };
+
+  tarball = "Wavebox_${version}.tar.gz";
+
+in
+stdenv.mkDerivation {
+  pname = "wavebox";
+  inherit version;
+  src = fetchurl {
+    url = "https://download.wavebox.app/stable/linux/tar/${tarball}";
+    sha256 = "1yk664zgahjg6n98n3kc9avcay0nqwcyq8wq231p7kvd79zazk0r";
+  };
+
+  # don't remove runtime deps
+  dontPatchELF = true;
+
+  nativeBuildInputs = [ autoPatchelfHook makeWrapper qt5.wrapQtAppsHook ];
+
+  buildInputs = with xorg; [
+    libXdmcp
+    libXScrnSaver
+    libXtst
+    libxshmfence
+    libXdamage
+  ] ++ [
+    alsa-lib
+    gtk3
+    nss
+    libdrm
+    mesa
+    gtk4
+    qt5.qtbase
+  ];
+
+  runtimeDependencies = [ (lib.getLib udev) libnotify gtk4 ];
+
+  installPhase = ''
+    mkdir -p $out/bin $out/opt/wavebox
+    cp -r * $out/opt/wavebox
+
+    # provide desktop item and icon
+    mkdir -p $out/share/applications $out/share/icons/hicolor/128x128/apps
+    ln -s ${desktopItem}/share/applications/* $out/share/applications
+    ln -s $out/opt/wavebox/product_logo_128.png $out/share/icons/hicolor/128x128/apps/wavebox.png
+  '';
+
+  postFixup = ''
+    makeWrapper $out/opt/wavebox/wavebox-launcher $out/bin/wavebox \
+    --prefix PATH : ${xdg-utils}/bin
+  '';
+
+  meta = with lib; {
+    description = "Wavebox messaging application";
+    homepage = "https://wavebox.io";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ rawkode ];
+    platforms = [ "x86_64-linux" ];
+    hydraPlatforms = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/webcord/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/webcord/default.nix
new file mode 100644
index 000000000000..f4ae642c79e5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/webcord/default.nix
@@ -0,0 +1,91 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+, copyDesktopItems
+, python3
+, pipewire
+, libpulseaudio
+, xdg-utils
+, electron_25
+, makeDesktopItem
+, nix-update-script
+}:
+
+buildNpmPackage rec {
+  pname = "webcord";
+  version = "4.4.0";
+
+  src = fetchFromGitHub {
+    owner = "SpacingBat3";
+    repo = "WebCord";
+    rev = "v${version}";
+    hash = "sha256-Kiw3pebjH9Pz5oi6Gbjxrjd/kvozapLNqfWLVuTXF/I=";
+  };
+
+  npmDepsHash = "sha256-CPGfhV8VXbpX9UB5oQhI+IwFWPgYq2dGnSuyByMNGg4=";
+
+  nativeBuildInputs = [
+    copyDesktopItems
+    python3
+  ];
+
+  libPath = lib.makeLibraryPath [
+    pipewire
+    libpulseaudio
+  ];
+
+  # npm install will error when electron tries to download its binary
+  # we don't need it anyways since we wrap the program with our nixpkgs electron
+  ELECTRON_SKIP_BINARY_DOWNLOAD = "1";
+
+  # remove husky commit hooks, errors and aren't needed for packaging
+  postPatch = ''
+    rm -rf .husky
+  '';
+
+  # override installPhase so we can copy the only folders that matter
+  installPhase = ''
+    runHook preInstall
+
+    # Remove dev deps that aren't necessary for running the app
+    npm prune --omit=dev
+
+    mkdir -p $out/lib/node_modules/webcord
+    cp -r app node_modules sources package.json $out/lib/node_modules/webcord/
+
+    install -Dm644 sources/assets/icons/app.png $out/share/icons/hicolor/256x256/apps/webcord.png
+
+    # Add xdg-utils to path via suffix, per PR #181171
+    makeWrapper '${electron_25}/bin/electron' $out/bin/webcord \
+      --prefix LD_LIBRARY_PATH : ${libPath}:$out/opt/webcord \
+      --suffix PATH : "${lib.makeBinPath [ xdg-utils ]}" \
+      --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform=wayland}}" \
+      --add-flags $out/lib/node_modules/webcord/
+
+    runHook postInstall
+  '';
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "webcord";
+      exec = "webcord";
+      icon = "webcord";
+      desktopName = "WebCord";
+      comment = meta.description;
+      categories = [ "Network" "InstantMessaging" ];
+    })
+  ];
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    description = "A Discord and Fosscord electron-based client implemented without Discord API";
+    homepage = "https://github.com/SpacingBat3/WebCord";
+    downloadPage = "https://github.com/SpacingBat3/WebCord/releases";
+    changelog = "https://github.com/SpacingBat3/WebCord/releases/tag/v${version}";
+    license = licenses.mit;
+    mainProgram = "webcord";
+    maintainers = with maintainers; [ huantian ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/webcord/webcord-vencord/add-extension.patch b/nixpkgs/pkgs/applications/networking/instant-messengers/webcord/webcord-vencord/add-extension.patch
new file mode 100644
index 000000000000..888dad1eee11
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/webcord/webcord-vencord/add-extension.patch
@@ -0,0 +1,12 @@
+diff --git a/sources/code/common/main.ts b/sources/code/common/main.ts
+index 3936ee0..bd745ef 100644
+--- a/sources/code/common/main.ts
++++ b/sources/code/common/main.ts
+@@ -358,6 +358,7 @@ app.userAgentFallback = getUserAgent(process.versions.chrome, userAgent.mobile,
+ const singleInstance = app.requestSingleInstanceLock();
+ 
+ function main(): void {
++  session.defaultSession.loadExtension("@vencord@");
+   if (overwriteMain) {
+     // Execute flag-specific functions for ready application.
+     overwriteMain();
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/webcord/webcord-vencord/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/webcord/webcord-vencord/default.nix
new file mode 100644
index 000000000000..47e067345547
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/webcord/webcord-vencord/default.nix
@@ -0,0 +1,21 @@
+{ webcord
+, substituteAll
+, lib
+, vencord-web-extension
+}:
+
+webcord.overrideAttrs (old: {
+  pname = "webcord-vencord";
+
+  patches = (old.patches or [ ]) ++ [
+    (substituteAll {
+      src = ./add-extension.patch;
+      vencord = vencord-web-extension;
+    })
+  ];
+
+  meta = with lib; old.meta // {
+    description = "Webcord with Vencord web extension";
+    maintainers = with maintainers; [ FlafyDev NotAShelf ];
+  };
+})
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/webex/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/webex/default.nix
new file mode 100644
index 000000000000..fcb59900ff00
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/webex/default.nix
@@ -0,0 +1,182 @@
+{ lib
+, writeScript
+, stdenv
+, fetchurl
+, alsa-lib
+, at-spi2-atk
+, at-spi2-core
+, atk
+, cairo
+, cups
+, dbus
+, expat
+, fontconfig
+, freetype
+, gdk-pixbuf
+, glib
+, gtk3
+, harfbuzz
+, libdrm
+, libgcrypt
+, libglvnd
+, libkrb5
+, libpulseaudio
+, libsecret
+, udev
+, libxcb
+, libxkbcommon
+, libxcrypt-legacy
+, lshw
+, mesa
+, nspr
+, nss
+, pango
+, zlib
+, libX11
+, libXcomposite
+, libXcursor
+, libXdamage
+, libXext
+, libXfixes
+, libXi
+, libXrandr
+, libXrender
+, libXtst
+, libxshmfence
+, xcbutil
+, xcbutilimage
+, xcbutilkeysyms
+, xcbutilrenderutil
+, xcbutilwm
+, p7zip
+, tbb
+, wayland
+, libXScrnSaver
+}:
+
+stdenv.mkDerivation rec {
+  pname = "webex";
+  version = "43.8.0.26955";
+
+  src = fetchurl {
+    url = "https://binaries.webex.com/WebexDesktop-Ubuntu-Gold/20230814223338/Webex_ubuntu.7z";
+    sha256 = "6c754d65fffbcbbb2ca303e1f8c1e5688da190eea3d3b67c77361abc6e2bb85b";
+  };
+
+  nativeBuildInputs = [
+    p7zip
+  ];
+
+  buildInputs = [
+    alsa-lib
+    at-spi2-atk
+    at-spi2-core
+    atk
+    cairo
+    cups
+    dbus
+    expat
+    fontconfig
+    freetype
+    glib
+    gdk-pixbuf
+    gtk3
+    harfbuzz
+    lshw
+    mesa
+    nspr
+    nss
+    pango
+    zlib
+    libdrm
+    libgcrypt
+    libglvnd
+    libkrb5
+    libpulseaudio
+    libsecret
+    udev
+    libxcb
+    libxkbcommon
+    libxcrypt-legacy
+    libX11
+    libXcomposite
+    libXcursor
+    libXdamage
+    libXext
+    libXfixes
+    libXi
+    libXrandr
+    libXrender
+    libXtst
+    libxshmfence
+    xcbutil
+    xcbutilimage
+    libXScrnSaver
+    xcbutilkeysyms
+    xcbutilrenderutil
+    xcbutilwm
+    tbb
+    wayland
+  ];
+
+  libPath = "$out/opt/Webex/lib:$out/opt/Webex/bin:${lib.makeLibraryPath buildInputs}";
+
+  unpackPhase = ''
+    7z x $src
+    mv Webex_ubuntu/opt .
+  '';
+
+  postPatch = ''
+    substituteInPlace opt/Webex/bin/webex.desktop --replace /opt $out/opt
+  '';
+
+  dontPatchELF = true;
+
+  buildPhase = ''
+    patchelf \
+      --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+      --set-rpath "${libPath}" \
+      opt/Webex/bin/CiscoCollabHost \
+      opt/Webex/bin/CiscoCollabHostCef \
+      opt/Webex/bin/CiscoCollabHostCefWM \
+      opt/Webex/bin/WebexFileSelector \
+      opt/Webex/bin/pxgsettings
+    for each in $(find opt/Webex -type f | grep \\.so); do
+      patchelf --set-rpath "${libPath}" "$each"
+    done
+  '';
+
+  installPhase = ''
+    mkdir -p "$out/bin" "$out/share/applications"
+    cp -r opt "$out"
+
+    ln -s "$out/opt/Webex/bin/CiscoCollabHost" "$out/bin/webex"
+    chmod +x $out/bin/webex
+
+    mv "$out/opt/Webex/bin/webex.desktop" "$out/share/applications/webex.desktop"
+  '';
+
+  passthru.updateScript = writeScript "webex-update-script" ''
+    #!/usr/bin/env nix-shell
+    #!nix-shell -i bash -p curl jq common-updater-scripts
+    set -eou pipefail;
+
+    channel=gold # blue, green, gold
+    manifest=$(curl -s "https://client-upgrade-a.wbx2.com/client-upgrade/api/v1/webexteamsdesktop/upgrade/@me?channel=$channel&model=ubuntu" | jq '.manifest')
+
+    url=$(jq -r '.packageLocation' <<< "$manifest")
+    version=$(jq -r '.version' <<< "$manifest")
+    hash=$(jq -r '.checksum' <<< "$manifest")
+
+    update-source-version ${pname} "$version" "$hash" "$url" --file=./pkgs/applications/networking/instant-messengers/webex/default.nix
+  '';
+
+  meta = with lib; {
+    description = "The all-in-one app to call, meet, message, and get work done";
+    homepage = "https://webex.com/";
+    downloadPage = "https://www.webex.com/downloads.html";
+    license = licenses.unfree;
+    maintainers = with lib.maintainers; [ uvnikita ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/whatsapp-for-linux/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/whatsapp-for-linux/default.nix
new file mode 100644
index 000000000000..efca89de7cbb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/whatsapp-for-linux/default.nix
@@ -0,0 +1,78 @@
+{ fetchFromGitHub
+, lib
+, stdenv
+, cmake
+, glib-networking
+, gst_all_1
+, gtkmm3
+, libayatana-appindicator
+, libcanberra
+, libepoxy
+, libpsl
+, libdatrie
+, libdeflate
+, libselinux
+, libsepol
+, libsysprof-capture
+, libthai
+, libxkbcommon
+, sqlite
+, pcre
+, pcre2
+, pkg-config
+, webkitgtk
+, wrapGAppsHook
+, xorg
+}:
+
+stdenv.mkDerivation rec {
+  pname = "whatsapp-for-linux";
+  version = "1.6.4";
+
+  src = fetchFromGitHub {
+    owner = "eneshecan";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-DU9tvIvDfOtBydR68yeRMFYdMjiBrOobCDXIZMmm7pQ=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    glib-networking
+    gst_all_1.gst-libav
+    gst_all_1.gst-plugins-bad
+    gst_all_1.gst-plugins-base
+    gst_all_1.gst-plugins-good
+    gtkmm3
+    libayatana-appindicator
+    libcanberra
+    libdatrie
+    libdeflate
+    libepoxy
+    libpsl
+    libselinux
+    libsepol
+    libsysprof-capture
+    libthai
+    libxkbcommon
+    pcre
+    pcre2
+    sqlite
+    webkitgtk
+    xorg.libXdmcp
+    xorg.libXtst
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/eneshecan/whatsapp-for-linux";
+    description = "Whatsapp desktop messaging app";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ bartuka ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/wire-desktop/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/wire-desktop/default.nix
new file mode 100644
index 000000000000..27a4a65605ed
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/wire-desktop/default.nix
@@ -0,0 +1,175 @@
+{ atomEnv
+, autoPatchelfHook
+, dpkg
+, fetchurl
+, makeDesktopItem
+, makeWrapper
+, stdenv
+, lib
+, udev
+, wrapGAppsHook
+, cpio
+, xar
+, libdbusmenu
+, libxshmfence
+}:
+
+let
+
+  inherit (stdenv.hostPlatform) system;
+
+  throwSystem = throw "Unsupported system: ${system}";
+
+  pname = "wire-desktop";
+
+  version = {
+    x86_64-darwin = "3.31.4556";
+    x86_64-linux = "3.31.3060";
+  }.${system} or throwSystem;
+
+  hash = {
+    x86_64-darwin = "sha256-qRRdt/TvSvQ3RiO/I36HT+C88+ev3gFcj+JaEG38BfU=";
+    x86_64-linux = "sha256-9LdTsBOE1IJH0OM+Ag7GJADsFRgYMjbPXBH6roY7Msg=";
+  }.${system} or throwSystem;
+
+  meta = with lib; {
+    description = "A modern, secure messenger for everyone";
+    longDescription = ''
+      Wire Personal is a secure, privacy-friendly messenger. It combines useful
+      and fun features, audited security, and a beautiful, distinct user
+      interface.  It does not require a phone number to register and chat.
+
+        * End-to-end encrypted chats, calls, and files
+        * Crystal clear voice and video calling
+        * File and screen sharing
+        * Timed messages and chats
+        * Synced across your phone, desktop and tablet
+    '';
+    homepage = "https://wire.com/";
+    downloadPage = "https://wire.com/download/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [
+      arianvp
+      kiwi
+      toonn
+    ];
+    platforms = [
+      "x86_64-darwin"
+      "x86_64-linux"
+    ];
+  };
+
+  linux = stdenv.mkDerivation rec {
+    inherit pname version meta;
+
+    src = fetchurl {
+      url = "https://wire-app.wire.com/linux/debian/pool/main/"
+        + "Wire-${version}_amd64.deb";
+      inherit hash;
+    };
+
+    desktopItem = makeDesktopItem {
+      categories = [ "Network" "InstantMessaging" "Chat" "VideoConference" ];
+      comment = "Secure messenger for everyone";
+      desktopName = "Wire";
+      exec = "wire-desktop %U";
+      genericName = "Secure messenger";
+      icon = "wire-desktop";
+      name = "wire-desktop";
+      startupWMClass = "Wire";
+    };
+
+    dontBuild = true;
+    dontConfigure = true;
+    dontPatchELF = true;
+    dontWrapGApps = true;
+
+    nativeBuildInputs = [
+      autoPatchelfHook
+      dpkg
+      makeWrapper
+      wrapGAppsHook
+    ];
+
+    buildInputs = [ libxshmfence ] ++ atomEnv.packages;
+
+    unpackPhase = ''
+      runHook preUnpack
+
+      dpkg-deb -x $src .
+
+      runHook postUnpack
+    '';
+
+    installPhase = ''
+      runHook preInstall
+
+      mkdir -p "$out/bin"
+      cp -R "opt" "$out"
+      cp -R "usr/share" "$out/share"
+      chmod -R g-w "$out"
+
+      # Desktop file
+      mkdir -p "$out/share/applications"
+      cp "${desktopItem}/share/applications/"* "$out/share/applications"
+
+      runHook postInstall
+    '';
+
+    runtimeDependencies = [
+      (lib.getLib udev)
+      libdbusmenu
+    ];
+
+    postFixup = ''
+      makeWrapper $out/opt/Wire/wire-desktop $out/bin/wire-desktop \
+        "''${gappsWrapperArgs[@]}"
+    '';
+  };
+
+  darwin = stdenv.mkDerivation {
+    inherit pname version meta;
+
+    src = fetchurl {
+      url = "https://github.com/wireapp/wire-desktop/releases/download/"
+        + "macos%2F${version}/Wire.pkg";
+      inherit hash;
+    };
+
+    buildInputs = [
+      cpio
+      xar
+    ];
+
+    unpackPhase = ''
+      runHook preUnpack
+
+      xar -xf $src
+      cd com.wearezeta.zclient.mac.pkg
+
+      runHook postUnpack
+    '';
+
+    buildPhase = ''
+      runHook preBuild
+
+      cat Payload | gunzip -dc | cpio -i
+
+      runHook postBuild
+    '';
+
+    installPhase = ''
+      runHook preInstall
+
+      mkdir -p $out/Applications
+      cp -r Wire.app $out/Applications
+
+      runHook postInstall
+    '';
+  };
+
+in
+if stdenv.isDarwin
+then darwin
+else linux
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/xmppc/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/xmppc/default.nix
new file mode 100644
index 000000000000..c1a8891a073e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/xmppc/default.nix
@@ -0,0 +1,38 @@
+{lib, stdenv, fetchFromGitea, autoconf-archive, autoreconfHook, pkg-config, libstrophe, glib, gpgme }:
+
+stdenv.mkDerivation rec {
+  pname = "xmppc";
+  version = "0.1.2";
+
+  src = fetchFromGitea {
+    domain = "codeberg.org";
+    owner = "Anoxinon_e.V.";
+    repo = "xmppc";
+    rev = version;
+    sha256 = "07cy3j4g7vycagdiva3dqb59361lw7s5f2yydpczmyih29v7hkm8";
+  };
+
+  nativeBuildInputs = [
+    autoconf-archive
+    autoreconfHook
+    pkg-config
+  ];
+
+  buildInputs = [
+    libstrophe
+    glib
+    gpgme
+  ];
+
+  preAutoreconf = ''
+    mkdir m4
+  '';
+
+  meta = with lib; {
+    description = "Command Line Interface Tool for XMPP";
+    homepage = "https://codeberg.org/Anoxinon_e.V./xmppc";
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.jugendhacker ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/ytalk/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/ytalk/default.nix
new file mode 100644
index 000000000000..1ccc9fbe6f57
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/ytalk/default.nix
@@ -0,0 +1,21 @@
+{ lib, stdenv, fetchurl, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "ytalk";
+  version = "3.3.0";
+
+  src = fetchurl {
+    url = "ftp://ftp.ourproject.org/pub/ytalk/${pname}-${version}.tar.gz";
+    sha256 = "1d3jhnj8rgzxyxjwfa22vh45qwzjvxw1qh8fz6b7nfkj3zvk9jvf";
+  };
+
+  buildInputs = [ ncurses ];
+
+  meta = {
+    homepage    = "http://ytalk.ourproject.org";
+    description = "A terminal based talk client";
+    platforms   = lib.platforms.unix;
+    maintainers = with lib.maintainers; [ taeer ];
+    license     = lib.licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/zoom-us/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/zoom-us/default.nix
new file mode 100644
index 000000000000..089521233b77
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/zoom-us/default.nix
@@ -0,0 +1,200 @@
+{ stdenv
+, lib
+, fetchurl
+, pipewire
+, makeWrapper
+, xar
+, cpio
+  # Dynamic libraries
+, alsa-lib
+, atk
+, at-spi2-atk
+, at-spi2-core
+, cairo
+, cups
+, dbus
+, expat
+, libdrm
+, libGL
+, fontconfig
+, freetype
+, gtk3
+, gdk-pixbuf
+, glib
+, mesa
+, nspr
+, nss
+, pango
+, wayland
+, xorg
+, libxkbcommon
+, udev
+, zlib
+, libkrb5
+  # Runtime
+, coreutils
+, pciutils
+, procps
+, util-linux
+, pulseaudioSupport ? true
+, libpulseaudio
+}:
+
+let
+  inherit (stdenv.hostPlatform) system;
+  throwSystem = throw "Unsupported system: ${system}";
+
+  # Zoom versions are released at different times for each platform
+  # and often with different versions.  We write them on three lines
+  # like this (rather than using {}) so that the updater script can
+  # find where to edit them.
+  versions.aarch64-darwin = "5.15.12.22445";
+  versions.x86_64-darwin = "5.15.12.22445";
+  versions.x86_64-linux = "5.15.12.7665";
+
+  srcs = {
+    aarch64-darwin = fetchurl {
+      url = "https://zoom.us/client/${versions.aarch64-darwin}/zoomusInstallerFull.pkg?archType=arm64";
+      name = "zoomusInstallerFull.pkg";
+      hash = "sha256-pTpNbKmJGTxRIrfD/zWIrkouhCbErxu9Gjy9mDdTtHc=";
+    };
+    x86_64-darwin = fetchurl {
+      url = "https://zoom.us/client/${versions.x86_64-darwin}/zoomusInstallerFull.pkg";
+      hash = "sha256-EItKg22id/e7OfJaWxxJdl9B+3nDHNl6ENvfGR4QJ6Y=";
+    };
+    x86_64-linux = fetchurl {
+      url = "https://zoom.us/client/${versions.x86_64-linux}/zoom_x86_64.pkg.tar.xz";
+      hash = "sha256-DMFMLwxPt1LV4Qhhrw6gdToe0z9743hGcxVWeR4O1YU=";
+    };
+  };
+
+  libs = lib.makeLibraryPath ([
+    # $ LD_LIBRARY_PATH=$NIX_LD_LIBRARY_PATH:$PWD ldd zoom | grep 'not found'
+    alsa-lib
+    atk
+    at-spi2-atk
+    at-spi2-core
+    cairo
+    cups
+    dbus
+    expat
+    libdrm
+    libGL
+    pipewire
+    fontconfig
+    freetype
+    gtk3
+    gdk-pixbuf
+    glib
+    mesa
+    nspr
+    nss
+    pango
+    stdenv.cc.cc
+    wayland
+    xorg.libX11
+    xorg.libxcb
+    xorg.libXcomposite
+    xorg.libXdamage
+    xorg.libXext
+    libxkbcommon
+    xorg.libXrandr
+    xorg.libXrender
+    xorg.libxshmfence
+    xorg.xcbutilimage
+    xorg.xcbutilkeysyms
+    xorg.xcbutilrenderutil
+    xorg.xcbutilwm
+    xorg.libXfixes
+    xorg.libXtst
+    udev
+    zlib
+    libkrb5
+  ] ++ lib.optional (pulseaudioSupport) libpulseaudio);
+
+in
+stdenv.mkDerivation rec {
+  pname = "zoom";
+  version = versions.${system} or throwSystem;
+
+  src = srcs.${system} or throwSystem;
+
+  dontUnpack = stdenv.isLinux;
+  unpackPhase = lib.optionalString stdenv.isDarwin ''
+    xar -xf $src
+    zcat < zoomus.pkg/Payload | cpio -i
+  '';
+
+  nativeBuildInputs = [
+    makeWrapper
+  ]
+  ++ lib.optionals stdenv.isDarwin [
+    xar
+    cpio
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    ${rec {
+      aarch64-darwin = ''
+        mkdir -p $out/Applications
+        cp -R zoom.us.app $out/Applications/
+      '';
+      # darwin steps same on both architectures
+      x86_64-darwin = aarch64-darwin;
+      x86_64-linux = ''
+        mkdir $out
+        tar -C $out -xf $src
+        mv $out/usr/* $out/
+      '';
+    }.${system} or throwSystem}
+    runHook postInstall
+  '';
+
+  postFixup = lib.optionalString stdenv.isLinux ''
+    # Desktop File
+    substituteInPlace $out/share/applications/Zoom.desktop \
+        --replace "Exec=/usr/bin/zoom" "Exec=$out/bin/zoom"
+
+    for i in aomhost zopen zoom ZoomLauncher; do
+      patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $out/opt/zoom/$i
+    done
+
+    # ZoomLauncher sets LD_LIBRARY_PATH before execing zoom
+    # IPC breaks if the executable name does not end in 'zoom'
+    mv $out/opt/zoom/zoom $out/opt/zoom/.zoom
+    makeWrapper $out/opt/zoom/.zoom $out/opt/zoom/zoom \
+      --prefix LD_LIBRARY_PATH ":" ${libs}
+
+    rm $out/bin/zoom
+    # Zoom expects "zopen" executable (needed for web login) to be present in CWD. Or does it expect
+    # everybody runs Zoom only after cd to Zoom package directory? Anyway, :facepalm:
+    # Clear Qt paths to prevent tripping over "foreign" Qt resources.
+    # Clear Qt screen scaling settings to prevent over-scaling.
+    makeWrapper $out/opt/zoom/ZoomLauncher $out/bin/zoom \
+      --chdir "$out/opt/zoom" \
+      --unset QML2_IMPORT_PATH \
+      --unset QT_PLUGIN_PATH \
+      --unset QT_SCREEN_SCALE_FACTORS \
+      --prefix PATH : ${lib.makeBinPath [ coreutils glib.dev pciutils procps util-linux ]} \
+      --prefix LD_LIBRARY_PATH ":" ${libs}
+
+    # Backwards compatiblity: we used to call it zoom-us
+    ln -s $out/bin/{zoom,zoom-us}
+  '';
+
+  # already done
+  dontPatchELF = true;
+
+  passthru.updateScript = ./update.sh;
+
+  meta = with lib; {
+    homepage = "https://zoom.us/";
+    description = "zoom.us video conferencing application";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    platforms = builtins.attrNames srcs;
+    maintainers = with maintainers; [ danbst tadfisher ];
+    mainProgram = "zoom";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/zoom-us/update.sh b/nixpkgs/pkgs/applications/networking/instant-messengers/zoom-us/update.sh
new file mode 100755
index 000000000000..3684f057a08c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/zoom-us/update.sh
@@ -0,0 +1,34 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p common-updater-scripts curl jq
+
+set -eu -o pipefail
+
+scriptDir=$(cd "${BASH_SOURCE[0]%/*}" && pwd)
+nixpkgs=$(realpath "$scriptDir"/../../../../..)
+
+echo >&2 "=== Obtaining version data from https://zoom.us/rest/download ..."
+linux_data=$(curl -Ls 'https://zoom.us/rest/download?os=linux' | jq .result.downloadVO)
+mac_data=$(curl -Ls 'https://zoom.us/rest/download?os=mac' | jq .result.downloadVO)
+
+version_aarch64_darwin=$(jq -r .zoomArm64.version <<<"$mac_data")
+version_x86_64_darwin=$(jq -r .zoom.version <<<"$mac_data")
+version_x86_64_linux=$(jq -r .zoom.version <<<"$linux_data")
+
+echo >&2 "=== Downloading packages and computing hashes..."
+# We precalculate the hashes before calling update-source-version
+# because it attempts to calculate each architecture's package's hash
+# by running `nix-build --system <architecture> -A zoom-us.src` which
+# causes cross compiling headaches; using nix-prefetch-url with
+# hard-coded URLs is simpler.  Keep these URLs in sync with the ones
+# in default.nix where `srcs` is defined.
+hash_aarch64_darwin=$(nix hash to-sri --type sha256 $(nix-prefetch-url --type sha256 "https://zoom.us/client/${version_aarch64_darwin}/zoomusInstallerFull.pkg?archType=arm64"))
+hash_x86_64_darwin=$(nix hash to-sri --type sha256 $(nix-prefetch-url --type sha256 "https://zoom.us/client/${version_x86_64_darwin}/zoomusInstallerFull.pkg"))
+hash_x86_64_linux=$(nix hash to-sri --type sha256 $(nix-prefetch-url --type sha256 "https://zoom.us/client/${version_x86_64_linux}/zoom_x86_64.pkg.tar.xz"))
+
+echo >&2 "=== Updating default.nix ..."
+# update-source-version expects to be at the root of nixpkgs
+(cd "$nixpkgs" && update-source-version zoom-us "$version_aarch64_darwin" $hash_aarch64_darwin --system=aarch64-darwin --version-key=versions.aarch64-darwin)
+(cd "$nixpkgs" && update-source-version zoom-us "$version_x86_64_darwin" $hash_x86_64_darwin --system=x86_64-darwin --version-key=versions.x86_64-darwin)
+(cd "$nixpkgs" && update-source-version zoom-us "$version_x86_64_linux" $hash_x86_64_linux --system=x86_64-linux --version-key=versions.x86_64-linux)
+
+echo >&2 "=== Done!"
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/zulip-term/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/zulip-term/default.nix
new file mode 100644
index 000000000000..931f95158354
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/zulip-term/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, python3
+, fetchFromGitHub
+, glibcLocales
+, libnotify
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "zulip-term";
+  version = "0.7.0";
+
+  # no tests on PyPI
+  src = fetchFromGitHub {
+    owner = "zulip";
+    repo = "zulip-terminal";
+    rev = version;
+    sha256 = "sha256-ZouUU4p1FSGMxPuzDo5P971R+rDXpBdJn2MqvkJO+Fw=";
+  };
+
+  patches = [
+    ./pytest-executable-name.patch
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    beautifulsoup4
+    lxml
+    pygments
+    pyperclip
+    python-dateutil
+    pytz
+    typing-extensions
+    tzlocal
+    urwid
+    urwid-readline
+    zulip
+  ];
+
+  nativeCheckInputs = [
+    glibcLocales
+  ] ++ (with python3.pkgs; [
+    pytestCheckHook
+    pytest-cov
+    pytest-mock
+  ]);
+
+  makeWrapperArgs = [
+    "--prefix" "PATH" ":" (lib.makeBinPath [ libnotify ])
+  ];
+
+  meta = with lib; {
+    description = "Zulip's official terminal client";
+    homepage = "https://github.com/zulip/zulip-terminal";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/zulip-term/pytest-executable-name.patch b/nixpkgs/pkgs/applications/networking/instant-messengers/zulip-term/pytest-executable-name.patch
new file mode 100644
index 000000000000..a816993b8c4b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/zulip-term/pytest-executable-name.patch
@@ -0,0 +1,22 @@
+diff --git a/tests/cli/test_run.py b/tests/cli/test_run.py
+index 1452cfd..0a21c09 100644
+--- a/tests/cli/test_run.py
++++ b/tests/cli/test_run.py
+@@ -240,7 +240,7 @@ def test_main_multiple_autohide_options(
+ 
+     captured = capsys.readouterr()
+     lines = captured.err.strip("\n")
+-    lines = lines.split("pytest: ", 1)[1]
++    lines = lines.split("__main__.py: ", 1)[1]
+     expected = f"error: argument {options[1]}: not allowed with argument {options[0]}"
+     assert lines == expected
+ 
+@@ -277,7 +277,7 @@ def test_main_multiple_notify_options(
+ 
+     captured = capsys.readouterr()
+     lines = captured.err.strip("\n")
+-    lines = lines.split("pytest: ", 1)[1]
++    lines = lines.split("__main__.py: ", 1)[1]
+     expected = f"error: argument {options[1]}: not allowed with argument {options[0]}"
+     assert lines == expected
+ 
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/zulip/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/zulip/default.nix
new file mode 100644
index 000000000000..f00caad30267
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/zulip/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, fetchurl
+, appimageTools
+}:
+
+let
+  pname = "zulip";
+  version = "5.10.0";
+
+  src = fetchurl {
+    url = "https://github.com/zulip/zulip-desktop/releases/download/v${version}/Zulip-${version}-x86_64.AppImage";
+    hash = "sha256-rfFEhoykCStFCyBasQV6Cpb5ey+wvQLMXloIR0A1z7g=";
+    name="${pname}-${version}.AppImage";
+  };
+
+  appimageContents = appimageTools.extractType2 {
+    inherit pname version src;
+  };
+
+in appimageTools.wrapType2 {
+  inherit pname version src;
+
+  extraInstallCommands = ''
+    mv "$out/bin/${pname}-${version}" "$out/bin/${pname}"
+    install -m 444 -D ${appimageContents}/zulip.desktop $out/share/applications/zulip.desktop
+    install -m 444 -D ${appimageContents}/usr/share/icons/hicolor/512x512/apps/zulip.png \
+      $out/share/icons/hicolor/512x512/apps/zulip.png
+    substituteInPlace $out/share/applications/zulip.desktop \
+      --replace 'Exec=AppRun' 'Exec=${pname}'
+  '';
+
+  meta = with lib; {
+    description = "Desktop client for Zulip Chat";
+    homepage = "https://zulip.com";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ andersk jonafato ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/insync/default.nix b/nixpkgs/pkgs/applications/networking/insync/default.nix
new file mode 100644
index 000000000000..4e11d9fe3863
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/insync/default.nix
@@ -0,0 +1,125 @@
+{ lib
+, writeShellScript
+, buildFHSEnvBubblewrap
+, stdenvNoCC
+, fetchurl
+, autoPatchelfHook
+, dpkg
+, nss
+, libvorbis
+, libdrm
+, libGL
+, wayland
+, xkeyboard_config
+, libthai
+}:
+
+let
+  pname = "insync";
+  version = "3.8.6.50504";
+  meta = with lib; {
+    platforms = ["x86_64-linux"];
+    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = with maintainers; [ hellwolf ];
+    homepage = "https://www.insynchq.com";
+    description = "Google Drive sync and backup with multiple account support";
+    longDescription = ''
+     Insync is a commercial application that syncs your Drive files to your
+     computer.  It has more advanced features than Google's official client
+     such as multiple account support, Google Doc conversion, symlink support,
+     and built in sharing.
+
+     There is a 15-day free trial, and it is a paid application after that.
+
+     Known bug(s):
+
+     1) Currently the system try icon does not render correctly.
+     2) libqtvirtualkeyboardplugin does not have necessary Qt library shipped from vendor.
+    '';
+  };
+
+  insync-pkg = stdenvNoCC.mkDerivation {
+    name = "${pname}-pkg-${version}";
+    inherit version meta;
+
+    src = fetchurl {
+      # Find a binary from https://www.insynchq.com/downloads/linux#ubuntu.
+      url = "https://cdn.insynchq.com/builds/linux/insync_${version}-lunar_amd64.deb";
+      sha256 = "sha256-BxTFtQ1rAsOuhKnH5vsl3zkM7WOd+vjA4LKZGxl4jk0=";
+    };
+
+    buildInputs = [
+      nss
+      libvorbis
+      libdrm
+      libGL
+      wayland
+      libthai
+    ];
+
+    nativeBuildInputs = [ autoPatchelfHook dpkg ];
+
+    unpackPhase = ''
+      dpkg-deb --fsys-tarfile $src | tar -x --no-same-permissions --no-same-owner
+    '';
+
+    installPhase = ''
+      runHook preInstall
+
+      mkdir -p $out
+      cp -R usr/* $out/
+
+      # use system glibc
+      rm $out/lib/insync/{libgcc_s.so.1,libstdc++.so.6}
+
+      # remove badly packaged plugins
+      rm $out/lib/insync/PySide2/plugins/platforminputcontexts/libqtvirtualkeyboardplugin.so
+
+      # remove the unused vendor wrapper
+      rm $out/bin/insync
+
+      runHook postInstall
+    '';
+
+    # NB! This did the trick, otherwise it segfaults! However I don't understand why!
+    dontStrip = true;
+  };
+
+in buildFHSEnvBubblewrap {
+  name = pname;
+  inherit meta;
+
+  targetPkgs = pkgs: with pkgs; [
+    insync-pkg
+    libudev0-shim
+  ];
+
+  runScript = writeShellScript "insync-wrapper.sh" ''
+    # QT_STYLE_OVERRIDE was used to suppress a QT warning, it should have no actual effect for this binary.
+    echo Unsetting QT_STYLE_OVERRIDE=$QT_STYLE_OVERRIDE
+    echo Unsetting QT_QPA_PLATFORMTHEME=$QT_QPA_PLATFORMTHEME
+    unset QT_STYLE_OVERRIDE
+    unset QPA_PLATFORMTHEME
+
+    # xkb configuration needed: https://github.com/NixOS/nixpkgs/issues/236365
+    export XKB_CONFIG_ROOT=${xkeyboard_config}/share/X11/xkb/
+    echo XKB_CONFIG_ROOT=$XKB_CONFIG_ROOT
+
+    # For debuging:
+    # export QT_DEBUG_PLUGINS=1
+    # find -L /usr/share -name "*insync*"
+
+    exec /usr/lib/insync/insync "$@"
+    '';
+
+  # As intended by this bubble wrap, share as much namespaces as possible with user.
+  unshareUser   = false;
+  unshareIpc    = false;
+  unsharePid    = false;
+  unshareNet    = false;
+  unshareUts    = false;
+  unshareCgroup = false;
+  # Since "insync start" command starts a daemon, this daemon should die with it.
+  dieWithParent = false;
+}
diff --git a/nixpkgs/pkgs/applications/networking/ipfs-cluster/default.nix b/nixpkgs/pkgs/applications/networking/ipfs-cluster/default.nix
new file mode 100644
index 000000000000..e23fa2f6c6fb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/ipfs-cluster/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub, fetchpatch }:
+
+buildGoModule rec {
+  pname = "ipfs-cluster";
+  version = "1.0.6";
+
+  vendorHash = "sha256-IRR10wC05dv4d170Iweuxdy/JEnYjvdW0h5nS1ht9cg=";
+
+  src = fetchFromGitHub {
+    owner = "ipfs-cluster";
+    repo = "ipfs-cluster";
+    rev = "v${version}";
+    hash = "sha256-2En7morOodWvtNZGAZhl1EZJCCHdrYSUA1WBYGkjnYI=";
+  };
+
+  meta = with lib; {
+    description = "Allocate, replicate, and track Pins across a cluster of IPFS daemons";
+    homepage = "https://ipfscluster.io";
+    license = licenses.mit;
+    maintainers = with maintainers; [ Luflosi jglukasik ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/ipfs-upload-client/default.nix b/nixpkgs/pkgs/applications/networking/ipfs-upload-client/default.nix
new file mode 100644
index 000000000000..8a06565e1fce
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/ipfs-upload-client/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "ipfs-upload-client";
+  version = "0.1.2";
+
+  src = fetchFromGitHub {
+    owner = "infura";
+    repo = "ipfs-upload-client";
+    rev = "v${version}";
+    hash = "sha256-BT/LC+PKzAjxM7P2Iis28OlJmrZRbCwfd6kPEL3oaaI=";
+  };
+
+  vendorHash = "sha256-YzIUoN/B4TBlAfmvORrR9Gy+lMzwlaePm8yBoMsPaYU=";
+
+  meta = with lib; {
+    description = "A minimal CLI tool to upload files and directories to IPFS via Infura's IPFS or another API endpoint";
+    homepage = "https://github.com/INFURA/ipfs-upload-client";
+    license = licenses.mit;
+    maintainers = with maintainers; [ matthewcroughan ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/ipget/default.nix b/nixpkgs/pkgs/applications/networking/ipget/default.nix
new file mode 100644
index 000000000000..8ff8811381b4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/ipget/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "ipget";
+  version = "0.9.2";
+
+  src = fetchFromGitHub {
+    owner = "ipfs";
+    repo = "ipget";
+    rev = "v${version}";
+    hash = "sha256-gcxfsP5awCCau1RqCuXKEdXC2jvpwsGsPkBsiaRlfBU=";
+  };
+
+  vendorHash = "sha256-qCUa/XbfDrbwPSZywNVK/yn88C7Dsmz0cDTG2Z4ho0Y=";
+
+  postPatch = ''
+    # main module (github.com/ipfs/ipget) does not contain package github.com/ipfs/ipget/sharness/dependencies
+    rm -r sharness/dependencies/
+  '';
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Retrieve files over IPFS and save them locally";
+    homepage = "https://ipfs.io/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ Luflosi ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/iptraf-ng/default.nix b/nixpkgs/pkgs/applications/networking/iptraf-ng/default.nix
new file mode 100644
index 000000000000..c90fd239267e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/iptraf-ng/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv, fetchFromGitHub, ncurses }:
+
+stdenv.mkDerivation rec {
+  version = "1.2.1";
+  pname = "iptraf-ng";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1f91w1bjaayr6ld95z2q55ny983bb0m05k1jrw2bcddvcihaiqb1";
+  };
+
+  buildInputs = [ ncurses ];
+
+  makeFlags = [
+    "DESTDIR=$(out)"
+    "prefix=/usr"
+    "sbindir=/bin"
+  ];
+
+  hardeningDisable = [ "format" ];
+
+  meta = with lib; {
+    description = "A console-based network monitoring utility (fork of iptraf)";
+    longDescription = ''
+      IPTraf-ng is a console-based network monitoring utility. IPTraf-ng
+      gathers data like TCP connection packet and byte counts, interface
+      statistics and activity indicators, TCP/UDP traffic breakdowns, and LAN
+      station packet and byte counts. IPTraf-ng features include an IP traffic
+      monitor which shows TCP flag information, packet and byte counts, ICMP
+      details, OSPF packet types, and oversized IP packet warnings; interface
+      statistics showing IP, TCP, UDP, ICMP, non-IP and other IP packet counts,
+      IP checksum errors, interface activity and packet size counts; a TCP and
+      UDP service monitor showing counts of incoming and outgoing packets for
+      common TCP and UDP application ports, a LAN statistics module that
+      discovers active hosts and displays statistics about their activity; TCP,
+      UDP and other protocol display filters so you can view just the traffic
+      you want; logging; support for Ethernet, FDDI, ISDN, SLIP, PPP, and
+      loopback interfaces; and utilization of the built-in raw socket interface
+      of the Linux kernel, so it can be used on a wide variety of supported
+      network cards.
+    '';
+    homepage = "https://github.com/iptraf-ng/iptraf-ng";
+    license = licenses.gpl2Only;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ devhell ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/irc/bip/default.nix b/nixpkgs/pkgs/applications/networking/irc/bip/default.nix
new file mode 100644
index 000000000000..f6341a4d7447
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/bip/default.nix
@@ -0,0 +1,50 @@
+{ lib, stdenv, fetchurl, fetchpatch, bison, flex, autoconf, automake, openssl }:
+
+stdenv.mkDerivation rec {
+  pname = "bip";
+  version = "0.8.9";
+
+  # fetch sources from debian, because the creator's website provides
+  # the files only via https but with an untrusted certificate.
+  src = fetchurl {
+    url = "mirror://debian/pool/main/b/bip/bip_${version}.orig.tar.gz";
+    sha256 = "0q942g9lyd8pjvqimv547n6vik5759r9npw3ws3bdj4ixxqhz59w";
+  };
+
+  nativeBuildInputs = [ autoconf automake ];
+  buildInputs = [ bison flex openssl ];
+
+  # includes an important security patch
+  patches = [
+    (fetchpatch {
+      url = "mirror://gentoo/../gentoo-portage/net-irc/bip/files/bip-freenode.patch";
+      sha256 = "05qy7a62p16f5knrsdv2lkhc07al18qq32ciq3k4r0lq1wbahj2y";
+    })
+    (fetchpatch {
+      url = "https://projects.duckcorp.org/projects/bip/repository/revisions/39414f8ff9df63c8bc2e4eee34f09f829a5bf8f5/diff/src/connection.c?format=diff";
+      sha256 = "1hvg58vci6invh0z19wf04jjvnm8w6f6v4c4nk1j5hc3ymxdp1rb";
+    })
+    (fetchpatch {
+      url = "https://projects.duckcorp.org/projects/bip/repository/bip/revisions/87192685f55856d2c28021963ab2c308e21faddc/diff?format=diff";
+      sha256 = "0rspzp7q1lq8v0cl0c35xxpgisfk264i648vslgsjax2s0g9svx0";
+    })
+    (fetchpatch {
+      url = "https://projects.duckcorp.org/projects/bip/repository/bip/revisions/814d54c676d5827f6ea37c1cd2d6e846d080c13c/diff?format=diff";
+      sha256 = "137l77kmm6p9p4c4kvw2zc4xkr10ayyc9z5rlpwn67574h47v55i";
+    })
+    (fetchpatch {
+      url = "https://projects.duckcorp.org/projects/bip/repository/bip/revisions/d2dcb0adb1aa8c2c4526aa6ad650483b0e02ab7d/diff?format=diff";
+      sha256 = "1pvywaljdkmy4870xs6gvsk4qwg69h47qr0yjywbcdsfycrgp8aq";
+    })
+  ];
+
+  env.NIX_CFLAGS_COMPILE = "-Wno-error=unused-result -Wno-error=duplicate-decl-specifier";
+
+  meta = {
+    description = "An IRC proxy (bouncer)";
+    homepage = "http://bip.milkypond.org/";
+    license = lib.licenses.gpl2;
+    downloadPage = "https://projects.duckcorp.org/projects/bip/files";
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/irc/catgirl/default.nix b/nixpkgs/pkgs/applications/networking/irc/catgirl/default.nix
new file mode 100644
index 000000000000..d56573d9d728
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/catgirl/default.nix
@@ -0,0 +1,35 @@
+{ ctags, fetchurl, lib, libressl, ncurses, pkg-config, stdenv }:
+
+stdenv.mkDerivation rec {
+  pname = "catgirl";
+  version = "2.2";
+
+  src = fetchurl {
+    url = "https://git.causal.agency/catgirl/snapshot/${pname}-${version}.tar.gz";
+    sha256 = "sha256-+20EoJkwOvBdJ4xwXBVC5+5hZDwDDWoLaN7FNxCAo8c=";
+  };
+
+  # catgirl's configure script uses pkg-config --variable exec_prefix openssl
+  # to discover the install location of the openssl(1) utility. exec_prefix
+  # is the "out" output of libressl in our case (where the libraries are
+  # installed), so we need to fix this up.
+  postConfigure = ''
+    substituteInPlace config.mk --replace \
+      "$($PKG_CONFIG --variable exec_prefix openssl)" \
+      "${lib.getBin libressl}"
+  '';
+
+  nativeBuildInputs = [ ctags pkg-config ];
+  buildInputs = [ libressl ncurses ];
+  strictDeps = true;
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    homepage = "https://git.causal.agency/catgirl/about/";
+    license = licenses.gpl3Plus;
+    description = "A TLS-only terminal IRC client";
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ xfnw ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/irc/communi/default.nix b/nixpkgs/pkgs/applications/networking/irc/communi/default.nix
new file mode 100644
index 000000000000..cbd099c33bc7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/communi/default.nix
@@ -0,0 +1,78 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, libcommuni
+, qmake
+, qtbase
+, wrapQtAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "communi";
+  version = "3.6.0";
+
+  src = fetchFromGitHub {
+    owner = "communi";
+    repo = "communi-desktop";
+    # Without https://github.com/communi/communi-desktop/pull/146 fetching fails with
+    #     fatal: unable to connect to github.com:
+    #     github.com[0: 140.82.112.3]: errno=Connection timed out
+    rev = "5d813dc6e64a623cd5d78f024c8a0720a5155a28";
+    hash = "sha256-ci91Bf0EkhlPDO+NcpnMmT/vE41i5RD2mXbRAnMB++M=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [
+    qmake
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    libcommuni
+    qtbase
+  ];
+
+  # libCommuni.dylib is installed in $out/Applications/Communi.app/Contents/Frameworks/ on Darwin
+  # Wrapper hook thinks it's a binary because it's in $out/Applications, wraps it with a shell script
+  # So we manually call the wrapper script on just the binary
+  dontWrapQtApps = stdenv.isDarwin;
+
+  preConfigure = ''
+    export QMAKEFEATURES=${libcommuni}/features
+  '';
+
+  qmakeFlags = [
+    "COMMUNI_INSTALL_PREFIX=${placeholder "out"}"
+    "COMMUNI_INSTALL_PLUGINS=${placeholder "out"}/lib/communi/plugins"
+    "COMMUNI_INSTALL_ICONS=${placeholder "out"}/share/icons/hicolor"
+    "COMMUNI_INSTALL_DESKTOP=${placeholder "out"}/share/applications"
+    "COMMUNI_INSTALL_THEMES=${placeholder "out"}/share/communi/themes"
+    "COMMUNI_INSTALL_BINS=${placeholder "out"}/${if stdenv.isDarwin then "Applications" else "bin"}"
+  ];
+
+  postInstall =
+    if stdenv.isDarwin then ''
+      # Nix qmake does not add the bundle rpath by default.
+      install_name_tool \
+        -add_rpath @executable_path/../Frameworks \
+        $out/Applications/Communi.app/Contents/MacOS/Communi
+
+      # Do not remove until wrapQtAppsHook doesn't wrap dylibs in app bundles anymore
+      wrapQtApp $out/Applications/Communi.app/Contents/MacOS/Communi
+    '' else ''
+      substituteInPlace "$out/share/applications/communi.desktop" \
+        --replace "/usr/bin" "$out/bin"
+    '';
+
+  preFixup = ''
+    rm -rf lib
+  '';
+
+  meta = with lib; {
+    description = "A simple and elegant cross-platform IRC client";
+    homepage = "https://github.com/communi/communi-desktop";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ hrdinka ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/irc/convos/default.nix b/nixpkgs/pkgs/applications/networking/irc/convos/default.nix
new file mode 100644
index 000000000000..186f1a74020b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/convos/default.nix
@@ -0,0 +1,94 @@
+{ lib, stdenv, fetchFromGitHub, perl, perlPackages, makeWrapper, shortenPerlShebang, openssl
+, nixosTests
+}:
+
+perlPackages.buildPerlPackage rec {
+  pname = "convos";
+  version = "7.02";
+
+  src = fetchFromGitHub {
+    owner = "convos-chat";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-i8lDK5/Whi5uo2/Qqh5jgJGLuuHn7kdrfvr+9Ktzp/8=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ]
+    ++ lib.optionals stdenv.isDarwin [ shortenPerlShebang ];
+
+  buildInputs = with perlPackages; [
+    CryptPassphrase CryptPassphraseArgon2 CryptPassphraseBcrypt
+    FileHomeDir FileReadBackwards HTTPAcceptLanguage SyntaxKeywordTry FutureAsyncAwait
+    IOSocketSSL IRCUtils JSONValidator LinkEmbedder ModuleInstall
+    Mojolicious MojoliciousPluginOpenAPI MojoliciousPluginSyslog MojoliciousPluginWebpack
+    ParseIRC TextMarkdownHoedown TimePiece UnicodeUTF8
+    CpanelJSONXS EV
+  ];
+
+  propagatedBuildInputs = [ openssl ];
+
+  nativeCheckInputs = with perlPackages; [ TestDeep ];
+
+  postPatch = ''
+    patchShebangs script/convos
+  '';
+
+  preCheck = ''
+    # Remove unstable test (PR #176640)
+    #
+    rm t/plugin-auth-header.t
+
+    # Remove online test
+    #
+    rm t/web-pwa.t
+
+    # A test fails since gethostbyaddr(127.0.0.1) fails to resolve to localhost in
+    # the sandbox, we replace the this out from a substitution expression
+    #
+    substituteInPlace t/web-register-open-to-public.t \
+      --replace '!127.0.0.1!' '!localhost!'
+
+    # A webirc test fails to resolve "localhost" likely due to sandboxing, we
+    # remove this test.
+    #
+    rm t/irc-webirc.t
+
+    # A web-user test fails on Darwin, we remove it.
+    #
+    rm t/web-user.t
+
+    # Another web test fails, so we also remove this.
+    rm t/web-login.t
+
+    # Module::Install is a runtime dependency not covered by the tests, so we add
+    # a test for it.
+    #
+    echo "use Test::More tests => 1;require_ok('Module::Install')" \
+      > t/00_nixpkgs_module_install.t
+  '';
+
+  # Convos expects to find assets in both auto/share/dist/Convos, and $MOJO_HOME
+  # which is set to $out
+  #
+  postInstall = ''
+    AUTO_SHARE_PATH=$out/${perl.libPrefix}/auto/share/dist/Convos
+    mkdir -p $AUTO_SHARE_PATH
+    cp -vR public assets $AUTO_SHARE_PATH/
+    ln -s $AUTO_SHARE_PATH/public/asset $out/asset
+    cp -vR templates $out/templates
+    cp cpanfile $out/cpanfile
+  '' + lib.optionalString stdenv.isDarwin ''
+    shortenPerlShebang $out/bin/convos
+  '' + ''
+    wrapProgram $out/bin/convos --set MOJO_HOME $out
+  '';
+
+  passthru.tests = nixosTests.convos;
+
+  meta = {
+    homepage = "https://convos.chat";
+    description = "Convos is the simplest way to use IRC in your browser";
+    license = lib.licenses.artistic2;
+    maintainers = with lib.maintainers; [ sgo ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/irc/epic5/default.nix b/nixpkgs/pkgs/applications/networking/irc/epic5/default.nix
new file mode 100644
index 000000000000..969a9da46b15
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/epic5/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchurl, openssl, ncurses, libiconv, tcl, coreutils, fetchpatch, libxcrypt }:
+
+stdenv.mkDerivation rec {
+  pname = "epic5";
+  version = "2.0.1";
+
+  src = fetchurl {
+    url = "http://ftp.epicsol.org/pub/epic/EPIC5-PRODUCTION/${pname}-${version}.tar.xz";
+    sha256 = "1ap73d5f4vccxjaaq249zh981z85106vvqmxfm4plvy76b40y9jm";
+  };
+
+  # Darwin needs libiconv, tcl; while Linux build don't
+  buildInputs = [ openssl ncurses libxcrypt ]
+    ++ lib.optionals stdenv.isDarwin [ libiconv tcl ];
+
+  patches = [
+    (fetchpatch {
+      url = "https://sources.debian.net/data/main/e/epic5/2.0.1-1/debian/patches/openssl-1.1.patch";
+      sha256 = "03bpsyv1sr5icajs2qkdvv8nnn6rz6yvvj7pgiq8gz9sbp6siyfv";
+    })
+  ];
+
+  configureFlags = [ "--disable-debug" "--with-ipv6" ];
+
+  postConfigure = ''
+    substituteInPlace bsdinstall \
+      --replace /bin/cp ${coreutils}/bin/cp \
+      --replace /bin/rm ${coreutils}/bin/rm \
+      --replace /bin/chmod ${coreutils}/bin/chmod \
+  '';
+
+  meta = with lib; {
+    homepage = "http://epicsol.org";
+    description = "A IRC client that offers a great ircII interface";
+    license = licenses.bsd3;
+    maintainers = [];
+  };
+}
+
+
+
diff --git a/nixpkgs/pkgs/applications/networking/irc/glowing-bear/default.nix b/nixpkgs/pkgs/applications/networking/irc/glowing-bear/default.nix
new file mode 100644
index 000000000000..9e1e14dcfbe3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/glowing-bear/default.nix
@@ -0,0 +1,27 @@
+{ fetchFromGitHub, lib, stdenv }:
+
+stdenv.mkDerivation rec {
+  pname = "glowing-bear";
+  version = "0.9.0";
+
+  src = fetchFromGitHub {
+    rev = version;
+    owner = "glowing-bear";
+    repo = "glowing-bear";
+    sha256 = "0lf0j72m6rwlgqssdxf0m9si99lah08lww7q7i08p5i5lpv6zh2s";
+  };
+
+  installPhase = ''
+    mkdir $out
+    cp index.html serviceworker.js webapp.manifest.json $out
+    cp -R 3rdparty assets css directives js $out
+  '';
+
+  meta = with lib; {
+    description = "A web client for Weechat";
+    homepage = "https://github.com/glowing-bear/glowing-bear";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ delroth ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/irc/halloy/Cargo.lock b/nixpkgs/pkgs/applications/networking/irc/halloy/Cargo.lock
new file mode 100644
index 000000000000..5d545ee3d1f0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/halloy/Cargo.lock
@@ -0,0 +1,3852 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "ab_glyph"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5110f1c78cf582855d895ecd0746b653db010cec6d9f5575293f27934d980a39"
+dependencies = [
+ "ab_glyph_rasterizer",
+ "owned_ttf_parser",
+]
+
+[[package]]
+name = "ab_glyph_rasterizer"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046"
+
+[[package]]
+name = "addr2line"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "ahash"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
+dependencies = [
+ "getrandom",
+ "once_cell",
+ "version_check",
+]
+
+[[package]]
+name = "ahash"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+ "version_check",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67fc08ce920c31afb70f013dcce1bfc3a3195de6a228474e45e1f145b36f8d04"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "aliasable"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd"
+
+[[package]]
+name = "allocator-api2"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5"
+
+[[package]]
+name = "android-activity"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c77a0045eda8b888c76ea473c2b0515ba6f471d318f8927c5c72240937035a6"
+dependencies = [
+ "android-properties",
+ "bitflags 1.3.2",
+ "cc",
+ "jni-sys",
+ "libc",
+ "log",
+ "ndk",
+ "ndk-context",
+ "ndk-sys",
+ "num_enum",
+]
+
+[[package]]
+name = "android-properties"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04"
+
+[[package]]
+name = "android-tzdata"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "approx"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "arrayref"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545"
+
+[[package]]
+name = "arrayvec"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6"
+
+[[package]]
+name = "ash"
+version = "0.37.3+1.3.251"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39e9c3835d686b0a6084ab4234fcd1b07dbf6e4767dce60874b12356a25ecd4a"
+dependencies = [
+ "libloading 0.7.4",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "backtrace"
+version = "0.3.67"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide 0.6.2",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base64"
+version = "0.21.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d"
+
+[[package]]
+name = "bit-set"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1"
+dependencies = [
+ "bit-vec",
+]
+
+[[package]]
+name = "bit-vec"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
+
+[[package]]
+name = "bit_field"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6776fc96284a0bb647b615056fc496d1fe1644a7ab01829818a6d91cae888b84"
+
+[[package]]
+name = "block"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
+
+[[package]]
+name = "block-sys"
+version = "0.1.0-beta.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fa55741ee90902547802152aaf3f8e5248aab7e21468089560d4c8840561146"
+dependencies = [
+ "objc-sys",
+]
+
+[[package]]
+name = "block2"
+version = "0.2.0-alpha.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8dd9e63c1744f755c2f60332b88de39d341e5e86239014ad839bd71c106dec42"
+dependencies = [
+ "block-sys",
+ "objc2-encode",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1"
+
+[[package]]
+name = "bytemuck"
+version = "1.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea"
+dependencies = [
+ "bytemuck_derive",
+]
+
+[[package]]
+name = "bytemuck_derive"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fdde5c9cd29ebd706ce1b35600920a33550e402fc998a2e53ad3b42c3c47a192"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.18",
+]
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "bytes"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
+
+[[package]]
+name = "calloop"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a59225be45a478d772ce015d9743e49e92798ece9e34eda9a6aa2a6a7f40192"
+dependencies = [
+ "log",
+ "nix 0.25.1",
+ "slotmap",
+ "thiserror",
+ "vec_map",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+dependencies = [
+ "jobserver",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "cfg_aliases"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e"
+
+[[package]]
+name = "chrono"
+version = "0.4.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5"
+dependencies = [
+ "android-tzdata",
+ "iana-time-zone",
+ "js-sys",
+ "num-traits",
+ "serde",
+ "time",
+ "wasm-bindgen",
+ "winapi",
+]
+
+[[package]]
+name = "clipboard-win"
+version = "4.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7191c27c2357d9b7ef96baac1773290d4ca63b24205b82a3fd8a0637afcf0362"
+dependencies = [
+ "error-code",
+ "str-buf",
+ "winapi",
+]
+
+[[package]]
+name = "clipboard_macos"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "145a7f9e9b89453bc0a5e32d166456405d389cea5b578f57f1274b1397588a95"
+dependencies = [
+ "objc",
+ "objc-foundation",
+ "objc_id",
+]
+
+[[package]]
+name = "clipboard_wayland"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f6364a9f7a66f2ac1a1a098aa1c7f6b686f2496c6ac5e5c0d773445df912747"
+dependencies = [
+ "smithay-clipboard",
+]
+
+[[package]]
+name = "clipboard_x11"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "983a7010836ecd04dde2c6d27a0cb56ec5d21572177e782bdcb24a600124e921"
+dependencies = [
+ "thiserror",
+ "x11rb 0.9.0",
+]
+
+[[package]]
+name = "cocoa"
+version = "0.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a"
+dependencies = [
+ "bitflags 1.3.2",
+ "block",
+ "cocoa-foundation",
+ "core-foundation",
+ "core-graphics",
+ "foreign-types",
+ "libc",
+ "objc",
+]
+
+[[package]]
+name = "cocoa-foundation"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "931d3837c286f56e3c58423ce4eba12d08db2374461a785c86f672b08b5650d6"
+dependencies = [
+ "bitflags 1.3.2",
+ "block",
+ "core-foundation",
+ "core-graphics-types",
+ "foreign-types",
+ "libc",
+ "objc",
+]
+
+[[package]]
+name = "codespan-reporting"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
+dependencies = [
+ "termcolor",
+ "unicode-width",
+]
+
+[[package]]
+name = "color_quant"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
+
+[[package]]
+name = "com-rs"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf43edc576402991846b093a7ca18a3477e0ef9c588cde84964b5d3e43016642"
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+
+[[package]]
+name = "core-graphics"
+version = "0.22.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "core-graphics-types",
+ "foreign-types",
+ "libc",
+]
+
+[[package]]
+name = "core-graphics-types"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "foreign-types",
+ "libc",
+]
+
+[[package]]
+name = "cosmic-text"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0b68966c2543609f8d92f9d33ac3b719b2a67529b0c6c0b3e025637b477eef9"
+dependencies = [
+ "aliasable",
+ "fontdb",
+ "libm",
+ "log",
+ "rangemap",
+ "rustybuzz",
+ "swash",
+ "sys-locale",
+ "unicode-bidi",
+ "unicode-linebreak",
+ "unicode-script",
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+dependencies = [
+ "cfg-if",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "crossbeam-utils",
+ "memoffset 0.9.0",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crunchy"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
+
+[[package]]
+name = "d3d12"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8f0de2f5a8e7bd4a9eec0e3c781992a4ce1724f68aec7d7a3715344de8b39da"
+dependencies = [
+ "bitflags 1.3.2",
+ "libloading 0.7.4",
+ "winapi",
+]
+
+[[package]]
+name = "data"
+version = "0.1.0"
+dependencies = [
+ "base64",
+ "chrono",
+ "dirs-next",
+ "flate2",
+ "futures",
+ "iced_core",
+ "irc",
+ "itertools",
+ "log",
+ "palette",
+ "rand",
+ "rand_chacha",
+ "seahash",
+ "serde",
+ "serde_json",
+ "serde_yaml",
+ "thiserror",
+ "tokio",
+ "tokio-stream",
+]
+
+[[package]]
+name = "dirs-next"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
+dependencies = [
+ "cfg-if",
+ "dirs-sys-next",
+]
+
+[[package]]
+name = "dirs-sys-next"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "dispatch"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b"
+
+[[package]]
+name = "dlib"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac1b7517328c04c2aa68422fc60a41b92208182142ed04a25879c26c8f878794"
+dependencies = [
+ "libloading 0.7.4",
+]
+
+[[package]]
+name = "downcast-rs"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650"
+
+[[package]]
+name = "either"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
+
+[[package]]
+name = "embed-resource"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80663502655af01a2902dff3f06869330782267924bf1788410b74edcd93770a"
+dependencies = [
+ "cc",
+ "rustc_version",
+ "toml",
+ "vswhom",
+ "winreg",
+]
+
+[[package]]
+name = "errno"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "error-code"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64f18991e7bf11e7ffee451b5318b5c1a73c52d0d0ada6e5a3017c8c1ced6a21"
+dependencies = [
+ "libc",
+ "str-buf",
+]
+
+[[package]]
+name = "etagere"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcf22f748754352918e082e0039335ee92454a5d62bcaf69b5e8daf5907d9644"
+dependencies = [
+ "euclid",
+ "svg_fmt",
+]
+
+[[package]]
+name = "euclid"
+version = "0.22.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87f253bc5c813ca05792837a0ff4b3a580336b224512d48f7eda1d7dd9210787"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "exr"
+version = "1.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "279d3efcc55e19917fff7ab3ddd6c14afb6a90881a0078465196fe2f99d08c56"
+dependencies = [
+ "bit_field",
+ "flume",
+ "half",
+ "lebe",
+ "miniz_oxide 0.7.1",
+ "rayon-core",
+ "smallvec",
+ "zune-inflate",
+]
+
+[[package]]
+name = "fast-srgb8"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd2e7510819d6fbf51a5545c8f922716ecfb14df168a3242f7d33e0239efe6a1"
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "fdeflate"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d329bdeac514ee06249dabc27877490f17f5d371ec693360768b838e19f3ae10"
+dependencies = [
+ "simd-adler32",
+]
+
+[[package]]
+name = "fern"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9f0c14694cbd524c8720dd69b0e3179344f04ebb5f90f2e4a440c6ea3b2f1ee"
+dependencies = [
+ "log",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide 0.7.1",
+]
+
+[[package]]
+name = "flume"
+version = "0.10.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+ "nanorand",
+ "pin-project",
+ "spin",
+]
+
+[[package]]
+name = "fontdb"
+version = "0.14.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af8d8cbea8f21307d7e84bca254772981296f058a1d36b461bf4d83a7499fc9e"
+dependencies = [
+ "log",
+ "memmap2 0.6.2",
+ "slotmap",
+ "tinyvec",
+ "ttf-parser",
+]
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "futures"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+ "num_cpus",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
+
+[[package]]
+name = "futures-macro"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.18",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
+
+[[package]]
+name = "futures-task"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
+
+[[package]]
+name = "futures-util"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "gethostname"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "gif"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80792593675e051cf94a4b111980da2ba60d4a83e43e0048c5693baab3977045"
+dependencies = [
+ "color_quant",
+ "weezl",
+]
+
+[[package]]
+name = "gimli"
+version = "0.27.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4"
+
+[[package]]
+name = "glam"
+version = "0.24.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad83ab008a4fa3b31dfa713dd41b5a9bdea1e94e4cf1e2fc274ffbd49b0271d3"
+
+[[package]]
+name = "glow"
+version = "0.12.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "807edf58b70c0b5b2181dd39fe1839dbdb3ba02645630dc5f753e23da307f762"
+dependencies = [
+ "js-sys",
+ "slotmap",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "glyphon"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e87caa7459145f5e5f167bf34db4532901404c679e62339fb712a0e3ccf722a"
+dependencies = [
+ "cosmic-text",
+ "etagere",
+ "lru",
+ "wgpu",
+]
+
+[[package]]
+name = "gpu-alloc"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22beaafc29b38204457ea030f6fb7a84c9e4dd1b86e311ba0542533453d87f62"
+dependencies = [
+ "bitflags 1.3.2",
+ "gpu-alloc-types",
+]
+
+[[package]]
+name = "gpu-alloc-types"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54804d0d6bc9d7f26db4eaec1ad10def69b599315f487d32c334a80d1efe67a5"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "gpu-allocator"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce95f9e2e11c2c6fadfce42b5af60005db06576f231f5c92550fdded43c423e8"
+dependencies = [
+ "backtrace",
+ "log",
+ "thiserror",
+ "winapi",
+ "windows 0.44.0",
+]
+
+[[package]]
+name = "gpu-descriptor"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b0c02e1ba0bdb14e965058ca34e09c020f8e507a760df1121728e0aef68d57a"
+dependencies = [
+ "bitflags 1.3.2",
+ "gpu-descriptor-types",
+ "hashbrown 0.12.3",
+]
+
+[[package]]
+name = "gpu-descriptor-types"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "363e3677e55ad168fef68cf9de3a4a310b53124c5e784c53a1d70e92d23f2126"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "guillotiere"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b62d5865c036cb1393e23c50693df631d3f5d7bcca4c04fe4cc0fd592e74a782"
+dependencies = [
+ "euclid",
+ "svg_fmt",
+]
+
+[[package]]
+name = "half"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc52e53916c08643f1b56ec082790d1e86a32e58dc5268f897f313fbae7b4872"
+dependencies = [
+ "cfg-if",
+ "crunchy",
+]
+
+[[package]]
+name = "halloy"
+version = "0.1.0"
+dependencies = [
+ "chrono",
+ "data",
+ "embed-resource",
+ "fern",
+ "iced",
+ "image",
+ "log",
+ "once_cell",
+ "open",
+ "palette",
+ "thiserror",
+ "tokio",
+ "unicode-segmentation",
+ "uuid",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+dependencies = [
+ "ahash 0.7.6",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a"
+dependencies = [
+ "ahash 0.8.3",
+ "allocator-api2",
+]
+
+[[package]]
+name = "hassle-rs"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1397650ee315e8891a0df210707f0fc61771b0cc518c3023896064c5407cb3b0"
+dependencies = [
+ "bitflags 1.3.2",
+ "com-rs",
+ "libc",
+ "libloading 0.7.4",
+ "thiserror",
+ "widestring",
+ "winapi",
+]
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b"
+
+[[package]]
+name = "hexf-parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df"
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0722cd7114b7de04316e7ea5456a0bbb20e4adb46fd27a3697adb812cff0f37c"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "windows 0.48.0",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "iced"
+version = "0.9.0"
+source = "git+https://github.com/iced-rs/iced?rev=78dc341ea82449f1e075e37e67c1ccf66b88e8d6#78dc341ea82449f1e075e37e67c1ccf66b88e8d6"
+dependencies = [
+ "iced_core",
+ "iced_futures",
+ "iced_renderer",
+ "iced_widget",
+ "iced_winit",
+ "image",
+ "thiserror",
+]
+
+[[package]]
+name = "iced_core"
+version = "0.9.0"
+source = "git+https://github.com/iced-rs/iced?rev=78dc341ea82449f1e075e37e67c1ccf66b88e8d6#78dc341ea82449f1e075e37e67c1ccf66b88e8d6"
+dependencies = [
+ "bitflags 1.3.2",
+ "instant",
+ "log",
+ "palette",
+ "thiserror",
+ "twox-hash",
+]
+
+[[package]]
+name = "iced_futures"
+version = "0.6.0"
+source = "git+https://github.com/iced-rs/iced?rev=78dc341ea82449f1e075e37e67c1ccf66b88e8d6#78dc341ea82449f1e075e37e67c1ccf66b88e8d6"
+dependencies = [
+ "futures",
+ "iced_core",
+ "log",
+ "tokio",
+ "wasm-bindgen-futures",
+ "wasm-timer",
+]
+
+[[package]]
+name = "iced_graphics"
+version = "0.8.0"
+source = "git+https://github.com/iced-rs/iced?rev=78dc341ea82449f1e075e37e67c1ccf66b88e8d6#78dc341ea82449f1e075e37e67c1ccf66b88e8d6"
+dependencies = [
+ "bitflags 1.3.2",
+ "bytemuck",
+ "glam",
+ "half",
+ "iced_core",
+ "image",
+ "kamadak-exif",
+ "log",
+ "raw-window-handle",
+ "thiserror",
+]
+
+[[package]]
+name = "iced_renderer"
+version = "0.1.0"
+source = "git+https://github.com/iced-rs/iced?rev=78dc341ea82449f1e075e37e67c1ccf66b88e8d6#78dc341ea82449f1e075e37e67c1ccf66b88e8d6"
+dependencies = [
+ "iced_graphics",
+ "iced_tiny_skia",
+ "iced_wgpu",
+ "log",
+ "raw-window-handle",
+ "thiserror",
+]
+
+[[package]]
+name = "iced_runtime"
+version = "0.1.0"
+source = "git+https://github.com/iced-rs/iced?rev=78dc341ea82449f1e075e37e67c1ccf66b88e8d6#78dc341ea82449f1e075e37e67c1ccf66b88e8d6"
+dependencies = [
+ "iced_core",
+ "iced_futures",
+ "thiserror",
+]
+
+[[package]]
+name = "iced_style"
+version = "0.8.0"
+source = "git+https://github.com/iced-rs/iced?rev=78dc341ea82449f1e075e37e67c1ccf66b88e8d6#78dc341ea82449f1e075e37e67c1ccf66b88e8d6"
+dependencies = [
+ "iced_core",
+ "once_cell",
+ "palette",
+]
+
+[[package]]
+name = "iced_tiny_skia"
+version = "0.1.0"
+source = "git+https://github.com/iced-rs/iced?rev=78dc341ea82449f1e075e37e67c1ccf66b88e8d6#78dc341ea82449f1e075e37e67c1ccf66b88e8d6"
+dependencies = [
+ "bytemuck",
+ "cosmic-text",
+ "iced_graphics",
+ "kurbo",
+ "log",
+ "raw-window-handle",
+ "rustc-hash",
+ "softbuffer",
+ "tiny-skia 0.10.0",
+ "twox-hash",
+]
+
+[[package]]
+name = "iced_wgpu"
+version = "0.10.0"
+source = "git+https://github.com/iced-rs/iced?rev=78dc341ea82449f1e075e37e67c1ccf66b88e8d6#78dc341ea82449f1e075e37e67c1ccf66b88e8d6"
+dependencies = [
+ "bitflags 1.3.2",
+ "bytemuck",
+ "futures",
+ "glam",
+ "glyphon",
+ "guillotiere",
+ "iced_graphics",
+ "log",
+ "once_cell",
+ "raw-window-handle",
+ "rustc-hash",
+ "twox-hash",
+ "wgpu",
+]
+
+[[package]]
+name = "iced_widget"
+version = "0.1.0"
+source = "git+https://github.com/iced-rs/iced?rev=78dc341ea82449f1e075e37e67c1ccf66b88e8d6#78dc341ea82449f1e075e37e67c1ccf66b88e8d6"
+dependencies = [
+ "iced_renderer",
+ "iced_runtime",
+ "iced_style",
+ "num-traits",
+ "ouroboros",
+ "thiserror",
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "iced_winit"
+version = "0.9.1"
+source = "git+https://github.com/iced-rs/iced?rev=78dc341ea82449f1e075e37e67c1ccf66b88e8d6#78dc341ea82449f1e075e37e67c1ccf66b88e8d6"
+dependencies = [
+ "iced_graphics",
+ "iced_runtime",
+ "iced_style",
+ "log",
+ "raw-window-handle",
+ "thiserror",
+ "web-sys",
+ "winapi",
+ "window_clipboard",
+ "winit",
+]
+
+[[package]]
+name = "image"
+version = "0.24.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "527909aa81e20ac3a44803521443a765550f09b5130c2c2fa1ea59c2f8f50a3a"
+dependencies = [
+ "bytemuck",
+ "byteorder",
+ "color_quant",
+ "exr",
+ "gif",
+ "jpeg-decoder",
+ "num-rational",
+ "num-traits",
+ "png",
+ "qoi",
+ "tiff",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+dependencies = [
+ "autocfg",
+ "hashbrown 0.12.3",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
+dependencies = [
+ "hermit-abi 0.3.2",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "irc"
+version = "0.1.0"
+dependencies = [
+ "bytes",
+ "futures",
+ "irc_proto",
+ "thiserror",
+ "tokio",
+ "tokio-native-tls",
+ "tokio-util",
+]
+
+[[package]]
+name = "irc_proto"
+version = "0.1.0"
+dependencies = [
+ "itertools",
+ "nom",
+ "thiserror",
+]
+
+[[package]]
+name = "is-docker"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "928bae27f42bc99b60d9ac7334e3a21d10ad8f1835a4e12ec3ec0464765ed1b3"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "is-wsl"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "173609498df190136aa7dea1a91db051746d339e18476eed5ca40521f02d7aa5"
+dependencies = [
+ "is-docker",
+ "once_cell",
+]
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
+
+[[package]]
+name = "jni-sys"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
+
+[[package]]
+name = "jobserver"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "jpeg-decoder"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e"
+dependencies = [
+ "rayon",
+]
+
+[[package]]
+name = "js-sys"
+version = "0.3.63"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f37a4a5928311ac501dee68b3c7613a1037d0edb30c8e5427bd832d55d1b790"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "kamadak-exif"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef4fc70d0ab7e5b6bafa30216a6b48705ea964cdfc29c050f2412295eba58077"
+dependencies = [
+ "mutate_once",
+]
+
+[[package]]
+name = "khronos-egl"
+version = "4.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c2352bd1d0bceb871cb9d40f24360c8133c11d7486b68b5381c1dd1a32015e3"
+dependencies = [
+ "libc",
+ "libloading 0.7.4",
+ "pkg-config",
+]
+
+[[package]]
+name = "kurbo"
+version = "0.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd85a5776cd9500c2e2059c8c76c3b01528566b7fcbaf8098b55a33fc298849b"
+dependencies = [
+ "arrayvec",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "lebe"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8"
+
+[[package]]
+name = "libc"
+version = "0.2.147"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
+
+[[package]]
+name = "libloading"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f"
+dependencies = [
+ "cfg-if",
+ "winapi",
+]
+
+[[package]]
+name = "libloading"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d580318f95776505201b28cf98eb1fa5e4be3b689633ba6a3e6cd880ff22d8cb"
+dependencies = [
+ "cfg-if",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "libm"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4"
+
+[[package]]
+name = "linked-hash-map"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
+
+[[package]]
+name = "lock_api"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "518ef76f2f87365916b142844c16d8fefd85039bc5699050210a7778ee1cd1de"
+
+[[package]]
+name = "lru"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eedb2bdbad7e0634f83989bf596f497b070130daaa398ab22d84c39e266deec5"
+dependencies = [
+ "hashbrown 0.14.0",
+]
+
+[[package]]
+name = "malloc_buf"
+version = "0.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memmap2"
+version = "0.5.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "memmap2"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d28bba84adfe6646737845bc5ebbfa2c08424eb1c37e94a1fd2a82adb56a872"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "metal"
+version = "0.24.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de11355d1f6781482d027a3b4d4de7825dcedb197bf573e0596d00008402d060"
+dependencies = [
+ "bitflags 1.3.2",
+ "block",
+ "core-graphics-types",
+ "foreign-types",
+ "log",
+ "objc",
+]
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+ "simd-adler32",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2"
+dependencies = [
+ "libc",
+ "log",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "mutate_once"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16cf681a23b4d0a43fc35024c176437f9dcd818db34e0f42ab456a0ee5ad497b"
+
+[[package]]
+name = "naga"
+version = "0.12.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80cd00bd6180a8790f1c020ed258a46b8d73dd5bd6af104a238c9d71f806938e"
+dependencies = [
+ "bit-set",
+ "bitflags 1.3.2",
+ "codespan-reporting",
+ "hexf-parse",
+ "indexmap",
+ "log",
+ "num-traits",
+ "rustc-hash",
+ "spirv",
+ "termcolor",
+ "thiserror",
+ "unicode-xid",
+]
+
+[[package]]
+name = "nanorand"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "native-tls"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "log",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
+]
+
+[[package]]
+name = "ndk"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "451422b7e4718271c8b5b3aadf5adedba43dc76312454b387e98fae0fc951aa0"
+dependencies = [
+ "bitflags 1.3.2",
+ "jni-sys",
+ "ndk-sys",
+ "num_enum",
+ "raw-window-handle",
+ "thiserror",
+]
+
+[[package]]
+name = "ndk-context"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b"
+
+[[package]]
+name = "ndk-sys"
+version = "0.4.1+23.1.7779620"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3cf2aae958bd232cac5069850591667ad422d263686d75b52a065f9badeee5a3"
+dependencies = [
+ "jni-sys",
+]
+
+[[package]]
+name = "nix"
+version = "0.22.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4916f159ed8e5de0082076562152a76b7a1f64a01fd9d1e0fea002c37624faf"
+dependencies = [
+ "bitflags 1.3.2",
+ "cc",
+ "cfg-if",
+ "libc",
+ "memoffset 0.6.5",
+]
+
+[[package]]
+name = "nix"
+version = "0.24.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if",
+ "libc",
+ "memoffset 0.6.5",
+]
+
+[[package]]
+name = "nix"
+version = "0.25.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f346ff70e7dbfd675fe90590b92d59ef2de15a8779ae305ebcbfd3f0caf59be4"
+dependencies = [
+ "autocfg",
+ "bitflags 1.3.2",
+ "cfg-if",
+ "libc",
+ "memoffset 0.6.5",
+]
+
+[[package]]
+name = "nix"
+version = "0.26.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if",
+ "libc",
+ "memoffset 0.7.1",
+ "pin-utils",
+ "static_assertions",
+]
+
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-rational"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
+dependencies = [
+ "hermit-abi 0.2.6",
+ "libc",
+]
+
+[[package]]
+name = "num_enum"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9"
+dependencies = [
+ "num_enum_derive",
+]
+
+[[package]]
+name = "num_enum_derive"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "objc"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
+dependencies = [
+ "malloc_buf",
+ "objc_exception",
+]
+
+[[package]]
+name = "objc-foundation"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9"
+dependencies = [
+ "block",
+ "objc",
+ "objc_id",
+]
+
+[[package]]
+name = "objc-sys"
+version = "0.2.0-beta.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df3b9834c1e95694a05a828b59f55fa2afec6288359cda67146126b3f90a55d7"
+
+[[package]]
+name = "objc2"
+version = "0.3.0-beta.3.patch-leaks.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e01640f9f2cb1220bbe80325e179e532cb3379ebcd1bf2279d703c19fe3a468"
+dependencies = [
+ "block2",
+ "objc-sys",
+ "objc2-encode",
+]
+
+[[package]]
+name = "objc2-encode"
+version = "2.0.0-pre.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abfcac41015b00a120608fdaa6938c44cb983fee294351cc4bac7638b4e50512"
+dependencies = [
+ "objc-sys",
+]
+
+[[package]]
+name = "objc_exception"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "objc_id"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b"
+dependencies = [
+ "objc",
+]
+
+[[package]]
+name = "object"
+version = "0.30.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+
+[[package]]
+name = "open"
+version = "4.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d16814a067484415fda653868c9be0ac5f2abd2ef5d951082a5f2fe1b3662944"
+dependencies = [
+ "is-wsl",
+ "pathdiff",
+]
+
+[[package]]
+name = "openssl"
+version = "0.10.55"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "345df152bc43501c5eb9e4654ff05f794effb78d4efe3d53abc158baddc0703d"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.18",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.90"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "374533b0e45f3a7ced10fcaeccca020e66656bc03dac384f852e4e5a7a8104a6"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "orbclient"
+version = "0.3.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "221d488cd70617f1bd599ed8ceb659df2147d9393717954d82a0f5e8032a6ab1"
+dependencies = [
+ "redox_syscall 0.3.5",
+]
+
+[[package]]
+name = "ouroboros"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d813b7b31a82efae94bd30ffaac09aec85efc18db2d5ec3aead1a220ee954351"
+dependencies = [
+ "aliasable",
+ "ouroboros_macro",
+ "static_assertions",
+]
+
+[[package]]
+name = "ouroboros_macro"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a56f651b4dd45ae3ac3d260ced32eaf0620cddaae5f26c69b554a9016594726"
+dependencies = [
+ "heck",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.18",
+]
+
+[[package]]
+name = "owned_ttf_parser"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "706de7e2214113d63a8238d1910463cfce781129a6f263d13fdb09ff64355ba4"
+dependencies = [
+ "ttf-parser",
+]
+
+[[package]]
+name = "palette"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1641aee47803391405d0a1250e837d2336fdddd18b27f3ddb8c1d80ce8d7f43"
+dependencies = [
+ "approx",
+ "fast-srgb8",
+ "palette_derive",
+ "phf",
+]
+
+[[package]]
+name = "palette_derive"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c02bfa6b3ba8af5434fa0531bf5701f750d983d4260acd6867faca51cdc4484"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.18",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99"
+dependencies = [
+ "instant",
+ "lock_api",
+ "parking_lot_core 0.8.6",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core 0.9.7",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc"
+dependencies = [
+ "cfg-if",
+ "instant",
+ "libc",
+ "redox_syscall 0.2.16",
+ "smallvec",
+ "winapi",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall 0.2.16",
+ "smallvec",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "pathdiff"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd"
+
+[[package]]
+name = "percent-encoding"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
+
+[[package]]
+name = "phf"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "928c6535de93548188ef63bb7c4036bd415cd8f36ad25af44b9789b2ee72a48c"
+dependencies = [
+ "phf_macros",
+ "phf_shared",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1181c94580fa345f50f19d738aaa39c0ed30a600d95cb2d3e23f94266f14fbf"
+dependencies = [
+ "phf_shared",
+ "rand",
+]
+
+[[package]]
+name = "phf_macros"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92aacdc5f16768709a569e913f7451034034178b05bdc8acda226659a3dccc66"
+dependencies = [
+ "phf_generator",
+ "phf_shared",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1fb5f6f826b772a8d4c0394209441e7d37cbbb967ae9c7e0e8134365c9ee676"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "pin-project"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c95a7476719eab1e366eaf73d0260af3021184f18177925b07f54b30089ceead"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39407670928234ebc5e6e580247dd567ad73a3578460c5990f9503df207e8f07"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.18",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+
+[[package]]
+name = "png"
+version = "0.17.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aaeebc51f9e7d2c150d3f3bfeb667f2aa985db5ef1e3d212847bdedb488beeaa"
+dependencies = [
+ "bitflags 1.3.2",
+ "crc32fast",
+ "fdeflate",
+ "flate2",
+ "miniz_oxide 0.7.1",
+]
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "proc-macro-crate"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919"
+dependencies = [
+ "once_cell",
+ "toml_edit",
+]
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.59"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6aeca18b86b413c660b781aa319e4e2648a3e6f9eadc9b47e9038e6fe9f3451b"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "profiling"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "332cd62e95873ea4f41f3dfd6bbbfc5b52aec892d7e8d534197c4720a0bbbab2"
+
+[[package]]
+name = "qoi"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001"
+dependencies = [
+ "bytemuck",
+]
+
+[[package]]
+name = "quick-xml"
+version = "0.23.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "11bafc859c6815fbaffbbbf4229ecb767ac913fecb27f9ad4343662e9ef099ea"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "range-alloc"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8a99fddc9f0ba0a85884b8d14e3592853e787d581ca1816c91349b10e4eeab"
+
+[[package]]
+name = "rangemap"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b9283c6b06096b47afc7109834fdedab891175bb5241ee5d4f7d2546549f263"
+
+[[package]]
+name = "raw-window-handle"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9"
+
+[[package]]
+name = "rayon"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-utils",
+ "num_cpus",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
+dependencies = [
+ "getrandom",
+ "redox_syscall 0.2.16",
+ "thiserror",
+]
+
+[[package]]
+name = "regex"
+version = "1.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81ca098a9821bd52d6b24fd8b10bd081f47d39c22778cafaa75a2857a62c6390"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78"
+
+[[package]]
+name = "renderdoc-sys"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "216080ab382b992234dda86873c18d4c48358f5cfcb70fd693d7f6f2131b628b"
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "rustc_version"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "rustix"
+version = "0.37.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d"
+dependencies = [
+ "bitflags 1.3.2",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rustybuzz"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82eea22c8f56965eeaf3a209b3d24508256c7b920fb3b6211b8ba0f7c0583250"
+dependencies = [
+ "bitflags 1.3.2",
+ "bytemuck",
+ "libm",
+ "smallvec",
+ "ttf-parser",
+ "unicode-bidi-mirroring",
+ "unicode-ccc",
+ "unicode-general-category",
+ "unicode-script",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
+
+[[package]]
+name = "schannel"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3"
+dependencies = [
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "scoped-tls"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "sctk-adwaita"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cda4e97be1fd174ccc2aae81c8b694e803fa99b34e8fd0f057a9d70698e3ed09"
+dependencies = [
+ "ab_glyph",
+ "log",
+ "memmap2 0.5.10",
+ "smithay-client-toolkit",
+ "tiny-skia 0.8.4",
+]
+
+[[package]]
+name = "seahash"
+version = "4.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b"
+
+[[package]]
+name = "security-framework"
+version = "2.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fc758eb7bffce5b308734e9b0c1468893cae9ff70ebf13e7090be8dcbcc83a8"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f51d0c0d83bec45f16480d0ce0058397a69e48fcdc52d1dc8855fb68acbd31a7"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "semver"
+version = "1.0.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed"
+
+[[package]]
+name = "serde"
+version = "1.0.163"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2113ab51b87a539ae008b5c6c02dc020ffa39afd2d83cffcb3f4eb2722cebec2"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.163"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c805777e3930c8883389c602315a24224bcc738b63905ef87cd1420353ea93e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.18",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.99"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46266871c240a00b8f503b877622fe33430b3c7d963bdc0f2adc511e54a1eae3"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93107647184f6027e3b7dcb2e11034cf95ffa1e3a682c67951963ac69c1c007d"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_yaml"
+version = "0.8.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b"
+dependencies = [
+ "indexmap",
+ "ryu",
+ "serde",
+ "yaml-rust",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "simd-adler32"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "238abfbb77c1915110ad968465608b68e869e0772622c9656714e73e5a1a522f"
+
+[[package]]
+name = "siphasher"
+version = "0.3.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
+
+[[package]]
+name = "slab"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "slotmap"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1e08e261d0e8f5c43123b7adf3e4ca1690d655377ac93a03b2c9d3e98de1342"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
+
+[[package]]
+name = "smithay-client-toolkit"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f307c47d32d2715eb2e0ece5589057820e0e5e70d07c247d1063e844e107f454"
+dependencies = [
+ "bitflags 1.3.2",
+ "calloop",
+ "dlib",
+ "lazy_static",
+ "log",
+ "memmap2 0.5.10",
+ "nix 0.24.3",
+ "pkg-config",
+ "wayland-client 0.29.5",
+ "wayland-cursor",
+ "wayland-protocols",
+]
+
+[[package]]
+name = "smithay-clipboard"
+version = "0.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a345c870a1fae0b1b779085e81b51e614767c239e93503588e54c5b17f4b0e8"
+dependencies = [
+ "smithay-client-toolkit",
+ "wayland-client 0.29.5",
+]
+
+[[package]]
+name = "socket2"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "softbuffer"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2b953f6ba7285f0af131eb748aabd8ddaf53e0b81dda3ba5d803b0847d6559f"
+dependencies = [
+ "bytemuck",
+ "cfg_aliases",
+ "cocoa",
+ "core-graphics",
+ "fastrand",
+ "foreign-types",
+ "log",
+ "nix 0.26.2",
+ "objc",
+ "raw-window-handle",
+ "redox_syscall 0.3.5",
+ "thiserror",
+ "wasm-bindgen",
+ "wayland-backend",
+ "wayland-client 0.30.2",
+ "wayland-sys 0.30.1",
+ "web-sys",
+ "windows-sys 0.48.0",
+ "x11-dl",
+ "x11rb 0.11.1",
+]
+
+[[package]]
+name = "spin"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
+dependencies = [
+ "lock_api",
+]
+
+[[package]]
+name = "spirv"
+version = "0.2.0+1.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "246bfa38fe3db3f1dfc8ca5a2cdeb7348c78be2112740cc0ec8ef18b6d94f830"
+dependencies = [
+ "bitflags 1.3.2",
+ "num-traits",
+]
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "str-buf"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e08d8363704e6c71fc928674353e6b7c23dcea9d82d7012c8faf2a3a025f8d0"
+
+[[package]]
+name = "strict-num"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731"
+
+[[package]]
+name = "svg_fmt"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fb1df15f412ee2e9dfc1c504260fa695c1c3f10fe9f4a6ee2d2184d7d6450e2"
+
+[[package]]
+name = "swash"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b7c73c813353c347272919aa1af2885068b05e625e5532b43049e4f641ae77f"
+dependencies = [
+ "yazi",
+ "zeno",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32d41677bcbe24c20c52e7c70b0d8db04134c5d1066bf98662e2871ad200ea3e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "sys-locale"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea0b9eefabb91675082b41eb94c3ecd91af7656caee3fb4961a07c0ec8c7ca6f"
+dependencies = [
+ "libc",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "redox_syscall 0.3.5",
+ "rustix",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.18",
+]
+
+[[package]]
+name = "tiff"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7449334f9ff2baf290d55d73983a7d6fa15e01198faef72af07e2a8db851e471"
+dependencies = [
+ "flate2",
+ "jpeg-decoder",
+ "weezl",
+]
+
+[[package]]
+name = "time"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"
+dependencies = [
+ "libc",
+ "wasi 0.10.0+wasi-snapshot-preview1",
+ "winapi",
+]
+
+[[package]]
+name = "tiny-skia"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df8493a203431061e901613751931f047d1971337153f96d0e5e363d6dbf6a67"
+dependencies = [
+ "arrayref",
+ "arrayvec",
+ "bytemuck",
+ "cfg-if",
+ "png",
+ "tiny-skia-path 0.8.4",
+]
+
+[[package]]
+name = "tiny-skia"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7db11798945fa5c3e5490c794ccca7c6de86d3afdd54b4eb324109939c6f37bc"
+dependencies = [
+ "arrayref",
+ "arrayvec",
+ "bytemuck",
+ "cfg-if",
+ "log",
+ "png",
+ "tiny-skia-path 0.10.0",
+]
+
+[[package]]
+name = "tiny-skia-path"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "adbfb5d3f3dd57a0e11d12f4f13d4ebbbc1b5c15b7ab0a156d030b21da5f677c"
+dependencies = [
+ "arrayref",
+ "bytemuck",
+ "strict-num",
+]
+
+[[package]]
+name = "tiny-skia-path"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f60aa35c89ac2687ace1a2556eaaea68e8c0d47408a2e3e7f5c98a489e7281c"
+dependencies = [
+ "arrayref",
+ "bytemuck",
+ "strict-num",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "1.29.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "532826ff75199d5833b9d2c5fe410f29235e25704ee5f0ef599fb51c21f4a4da"
+dependencies = [
+ "autocfg",
+ "backtrace",
+ "bytes",
+ "libc",
+ "mio",
+ "num_cpus",
+ "parking_lot 0.12.1",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2",
+ "tokio-macros",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.18",
+]
+
+[[package]]
+name = "tokio-native-tls"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
+dependencies = [
+ "native-tls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-stream"
+version = "0.1.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "toml"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6135d499e69981f9ff0ef2167955a5333c35e36f6937d382974566b3d5b94ec"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a76a9312f5ba4c2dec6b9161fdf25d87ad8a09256ccea5a556fef03c706a10f"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.19.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2380d56e8670370eee6566b0bfd4265f65b3f432e8c6d85623f728d4fa31f739"
+dependencies = [
+ "indexmap",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "tracing"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+dependencies = [
+ "cfg-if",
+ "pin-project-lite",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "ttf-parser"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44dcf002ae3b32cd25400d6df128c5babec3927cd1eb7ce813cfff20eb6c3746"
+
+[[package]]
+name = "twox-hash"
+version = "1.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675"
+dependencies = [
+ "cfg-if",
+ "rand",
+ "static_assertions",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+
+[[package]]
+name = "unicode-bidi-mirroring"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56d12260fb92d52f9008be7e4bca09f584780eb2266dc8fecc6a192bec561694"
+
+[[package]]
+name = "unicode-ccc"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc2520efa644f8268dce4dcd3050eaa7fc044fca03961e9998ac7e2e92b77cf1"
+
+[[package]]
+name = "unicode-general-category"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2281c8c1d221438e373249e065ca4989c4c36952c211ff21a0ee91c44a3869e7"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0"
+
+[[package]]
+name = "unicode-linebreak"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c5faade31a542b8b35855fff6e8def199853b2da8da256da52f52f1316ee3137"
+dependencies = [
+ "hashbrown 0.12.3",
+ "regex",
+]
+
+[[package]]
+name = "unicode-script"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d817255e1bed6dfd4ca47258685d14d2bdcfbc64fdc9e3819bd5848057b8ecc"
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
+
+[[package]]
+name = "uuid"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "345444e32442451b267fc254ae85a209c64be56d2890e601a0c37ff0c3c5ecd2"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "vec_map"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "vswhom"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b"
+dependencies = [
+ "libc",
+ "vswhom-sys",
+]
+
+[[package]]
+name = "vswhom-sys"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3b17ae1f6c8a2b28506cd96d412eebf83b4a0ff2cbefeeb952f2f9dfa44ba18"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "wasi"
+version = "0.10.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5bba0e8cb82ba49ff4e229459ff22a191bbe9a1cb3a341610c9c33efc27ddf73"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19b04bc93f9d6bdee709f6bd2118f57dd6679cf1176a1af464fca3ab0d66d8fb"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.18",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d1985d03709c53167ce907ff394f5316aa22cb4e12761295c5dc57dacb6297e"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14d6b024f1a526bb0234f52840389927257beb670610081360e5a03c5df9c258"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e128beba882dd1eb6200e1dc92ae6c5dbaa4311aa7bb211ca035779e5efc39f8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.18",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed9d5b4305409d1fc9482fee2d7f9bcbf24b3972bf59817ef757e23982242a93"
+
+[[package]]
+name = "wasm-timer"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f"
+dependencies = [
+ "futures",
+ "js-sys",
+ "parking_lot 0.11.2",
+ "pin-utils",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+]
+
+[[package]]
+name = "wayland-backend"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41b48e27457e8da3b2260ac60d0a94512f5cba36448679f3747c0865b7893ed8"
+dependencies = [
+ "cc",
+ "downcast-rs",
+ "io-lifetimes",
+ "nix 0.26.2",
+ "scoped-tls",
+ "smallvec",
+ "wayland-sys 0.30.1",
+]
+
+[[package]]
+name = "wayland-client"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f3b068c05a039c9f755f881dc50f01732214f5685e379829759088967c46715"
+dependencies = [
+ "bitflags 1.3.2",
+ "downcast-rs",
+ "libc",
+ "nix 0.24.3",
+ "scoped-tls",
+ "wayland-commons",
+ "wayland-scanner 0.29.5",
+ "wayland-sys 0.29.5",
+]
+
+[[package]]
+name = "wayland-client"
+version = "0.30.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "489c9654770f674fc7e266b3c579f4053d7551df0ceb392f153adb1f9ed06ac8"
+dependencies = [
+ "bitflags 1.3.2",
+ "nix 0.26.2",
+ "wayland-backend",
+ "wayland-scanner 0.30.0",
+]
+
+[[package]]
+name = "wayland-commons"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8691f134d584a33a6606d9d717b95c4fa20065605f798a3f350d78dced02a902"
+dependencies = [
+ "nix 0.24.3",
+ "once_cell",
+ "smallvec",
+ "wayland-sys 0.29.5",
+]
+
+[[package]]
+name = "wayland-cursor"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6865c6b66f13d6257bef1cd40cbfe8ef2f150fb8ebbdb1e8e873455931377661"
+dependencies = [
+ "nix 0.24.3",
+ "wayland-client 0.29.5",
+ "xcursor",
+]
+
+[[package]]
+name = "wayland-protocols"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b950621f9354b322ee817a23474e479b34be96c2e909c14f7bc0100e9a970bc6"
+dependencies = [
+ "bitflags 1.3.2",
+ "wayland-client 0.29.5",
+ "wayland-commons",
+ "wayland-scanner 0.29.5",
+]
+
+[[package]]
+name = "wayland-scanner"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f4303d8fa22ab852f789e75a967f0a2cdc430a607751c0499bada3e451cbd53"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "xml-rs",
+]
+
+[[package]]
+name = "wayland-scanner"
+version = "0.30.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4834c14b3edf1d9986c83ca79b1e7e3afbe9874c7c144702f6467063259ce45d"
+dependencies = [
+ "proc-macro2",
+ "quick-xml",
+ "quote",
+]
+
+[[package]]
+name = "wayland-sys"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be12ce1a3c39ec7dba25594b97b42cb3195d54953ddb9d3d95a7c3902bc6e9d4"
+dependencies = [
+ "dlib",
+ "lazy_static",
+ "pkg-config",
+]
+
+[[package]]
+name = "wayland-sys"
+version = "0.30.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96b2a02ac608e07132978689a6f9bf4214949c85998c247abadd4f4129b1aa06"
+dependencies = [
+ "dlib",
+ "lazy_static",
+ "log",
+ "pkg-config",
+]
+
+[[package]]
+name = "web-sys"
+version = "0.3.63"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3bdd9ef4e984da1187bf8110c5cf5b845fbc87a23602cdf912386a76fcd3a7c2"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "weezl"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb"
+
+[[package]]
+name = "wgpu"
+version = "0.16.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3059ea4ddec41ca14f356833e2af65e7e38c0a8f91273867ed526fb9bafcca95"
+dependencies = [
+ "arrayvec",
+ "cfg-if",
+ "js-sys",
+ "log",
+ "naga",
+ "parking_lot 0.12.1",
+ "profiling",
+ "raw-window-handle",
+ "smallvec",
+ "static_assertions",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "wgpu-core",
+ "wgpu-hal",
+ "wgpu-types",
+]
+
+[[package]]
+name = "wgpu-core"
+version = "0.16.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f478237b4bf0d5b70a39898a66fa67ca3a007d79f2520485b8b0c3dfc46f8c2"
+dependencies = [
+ "arrayvec",
+ "bit-vec",
+ "bitflags 2.3.1",
+ "codespan-reporting",
+ "log",
+ "naga",
+ "parking_lot 0.12.1",
+ "profiling",
+ "raw-window-handle",
+ "rustc-hash",
+ "smallvec",
+ "thiserror",
+ "web-sys",
+ "wgpu-hal",
+ "wgpu-types",
+]
+
+[[package]]
+name = "wgpu-hal"
+version = "0.16.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74851c2c8e5d97652e74c241d41b0656b31c924a45dcdecde83975717362cfa4"
+dependencies = [
+ "android_system_properties",
+ "arrayvec",
+ "ash",
+ "bit-set",
+ "bitflags 2.3.1",
+ "block",
+ "core-graphics-types",
+ "d3d12",
+ "foreign-types",
+ "glow",
+ "gpu-alloc",
+ "gpu-allocator",
+ "gpu-descriptor",
+ "hassle-rs",
+ "js-sys",
+ "khronos-egl",
+ "libc",
+ "libloading 0.8.0",
+ "log",
+ "metal",
+ "naga",
+ "objc",
+ "parking_lot 0.12.1",
+ "profiling",
+ "range-alloc",
+ "raw-window-handle",
+ "renderdoc-sys",
+ "rustc-hash",
+ "smallvec",
+ "thiserror",
+ "wasm-bindgen",
+ "web-sys",
+ "wgpu-types",
+ "winapi",
+]
+
+[[package]]
+name = "wgpu-types"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5bd33a976130f03dcdcd39b3810c0c3fc05daf86f0aaf867db14bfb7c4a9a32b"
+dependencies = [
+ "bitflags 2.3.1",
+ "js-sys",
+ "web-sys",
+]
+
+[[package]]
+name = "widestring"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "653f141f39ec16bba3c5abe400a0c60da7468261cc2cbf36805022876bc721a8"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-wsapoll"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44c17110f57155602a80dca10be03852116403c9ff3cd25b079d666f2aa3df6e"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "window_clipboard"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "63287c9c4396ccf5346d035a9b0fcaead9e18377637f5eaa78b7ac65c873ff7d"
+dependencies = [
+ "clipboard-win",
+ "clipboard_macos",
+ "clipboard_wayland",
+ "clipboard_x11",
+ "raw-window-handle",
+ "thiserror",
+]
+
+[[package]]
+name = "windows"
+version = "0.44.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e745dab35a0c4c77aa3ce42d595e13d2003d6902d6b08c9ef5fc326d08da12b"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
+dependencies = [
+ "windows-targets 0.48.0",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.0",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.0",
+ "windows_aarch64_msvc 0.48.0",
+ "windows_i686_gnu 0.48.0",
+ "windows_i686_msvc 0.48.0",
+ "windows_x86_64_gnu 0.48.0",
+ "windows_x86_64_gnullvm 0.48.0",
+ "windows_x86_64_msvc 0.48.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
+
+[[package]]
+name = "winit"
+version = "0.28.6"
+source = "git+https://github.com/iced-rs/winit.git?rev=c52db2045d0a2f1b8d9923870de1d4ab1994146e#c52db2045d0a2f1b8d9923870de1d4ab1994146e"
+dependencies = [
+ "android-activity",
+ "bitflags 1.3.2",
+ "cfg_aliases",
+ "core-foundation",
+ "core-graphics",
+ "dispatch",
+ "instant",
+ "libc",
+ "log",
+ "mio",
+ "ndk",
+ "objc2",
+ "once_cell",
+ "orbclient",
+ "percent-encoding",
+ "raw-window-handle",
+ "redox_syscall 0.3.5",
+ "sctk-adwaita",
+ "smithay-client-toolkit",
+ "wasm-bindgen",
+ "wayland-client 0.29.5",
+ "wayland-commons",
+ "wayland-protocols",
+ "wayland-scanner 0.29.5",
+ "web-sys",
+ "windows-sys 0.45.0",
+ "x11-dl",
+]
+
+[[package]]
+name = "winnow"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61de7bac303dc551fe038e2b3cef0f571087a47571ea6e79a87692ac99b99699"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "winreg"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76a1a57ff50e9b408431e8f97d5456f2807f8eb2a2cd79b06068fc87f8ecf189"
+dependencies = [
+ "cfg-if",
+ "winapi",
+]
+
+[[package]]
+name = "x11-dl"
+version = "2.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f"
+dependencies = [
+ "libc",
+ "once_cell",
+ "pkg-config",
+]
+
+[[package]]
+name = "x11rb"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e99be55648b3ae2a52342f9a870c0e138709a3493261ce9b469afe6e4df6d8a"
+dependencies = [
+ "gethostname",
+ "nix 0.22.3",
+ "winapi",
+ "winapi-wsapoll",
+]
+
+[[package]]
+name = "x11rb"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cdf3c79412dd91bae7a7366b8ad1565a85e35dd049affc3a6a2c549e97419617"
+dependencies = [
+ "gethostname",
+ "libc",
+ "libloading 0.7.4",
+ "nix 0.25.1",
+ "once_cell",
+ "winapi",
+ "winapi-wsapoll",
+ "x11rb-protocol",
+]
+
+[[package]]
+name = "x11rb-protocol"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0b1513b141123073ce54d5bb1d33f801f17508fbd61e02060b1214e96d39c56"
+dependencies = [
+ "nix 0.25.1",
+]
+
+[[package]]
+name = "xcursor"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "463705a63313cd4301184381c5e8042f0a7e9b4bb63653f216311d4ae74690b7"
+dependencies = [
+ "nom",
+]
+
+[[package]]
+name = "xml-rs"
+version = "0.8.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d8f380ae16a37b30e6a2cf67040608071384b1450c189e61bea3ff57cde922d"
+
+[[package]]
+name = "yaml-rust"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
+dependencies = [
+ "linked-hash-map",
+]
+
+[[package]]
+name = "yazi"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c94451ac9513335b5e23d7a8a2b61a7102398b8cca5160829d313e84c9d98be1"
+
+[[package]]
+name = "zeno"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c110ba09c9b3a43edd4803d570df0da2414fed6e822e22b976a4e3ef50860701"
+
+[[package]]
+name = "zune-inflate"
+version = "0.2.54"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02"
+dependencies = [
+ "simd-adler32",
+]
diff --git a/nixpkgs/pkgs/applications/networking/irc/halloy/default.nix b/nixpkgs/pkgs/applications/networking/irc/halloy/default.nix
new file mode 100644
index 000000000000..eb54490c60b6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/halloy/default.nix
@@ -0,0 +1,86 @@
+{ lib
+, stdenv
+, darwin
+, fetchFromGitHub
+, copyDesktopItems
+, makeDesktopItem
+, libxkbcommon
+, openssl
+, pkg-config
+, rustPlatform
+, vulkan-loader
+, wayland
+, xorg
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "halloy";
+  version = "2023.4";
+
+  src = fetchFromGitHub {
+    owner = "squidowl";
+    repo = "halloy";
+    rev = "refs/tags/${version}";
+    hash = "sha256-j5Yw7rXdNd32RnbV2jQ+ZUjbm14AKZ7khQNX6A+qPAM=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "iced-0.9.0" = "sha256-z/tkUdFXNjxR5Si8dnNrkrvFos0VAqGjnFNSs88D/5w=";
+      "winit-0.28.6" = "sha256-szB1LCOPmPqhZNIWbeO8JMfRMcMRr0+Ze0f4uqyR8AE=";
+    };
+  };
+
+  nativeBuildInputs = [
+    copyDesktopItems
+    pkg-config
+  ];
+
+  buildInputs = [
+    libxkbcommon
+    openssl
+    vulkan-loader
+    xorg.libX11
+    xorg.libXcursor
+    xorg.libXi
+    xorg.libXrandr
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.AppKit
+    darwin.apple_sdk.frameworks.CoreFoundation
+    darwin.apple_sdk.frameworks.CoreGraphics
+    darwin.apple_sdk.frameworks.Foundation
+    darwin.apple_sdk.frameworks.Metal
+    darwin.apple_sdk.frameworks.QuartzCore
+    darwin.apple_sdk.frameworks.Security
+  ] ++ lib.optionals stdenv.isLinux [
+    wayland
+  ];
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "org.squidowl.halloy";
+      desktopName = "Halloy";
+      comment = "IRC client written in Rust";
+      icon = "org.squidowl.halloy";
+      exec = pname;
+      terminal = false;
+      mimeTypes = [ "x-scheme-handler/irc" "x-scheme-handler/ircs" ];
+      categories = [ "Network" "IRCClient" ];
+      keywords = [ "IM" "Chat" ];
+      startupWMClass = "org.squidowl.halloy";
+    })
+  ];
+
+  postInstall = ''
+    install -Dm644 assets/linux/org.squidowl.halloy.png $out/share/icons/hicolor/128x128/apps/org.squidowl.halloy.png
+  '';
+
+  meta = with lib; {
+    description = "IRC application";
+    homepage = "https://github.com/squidowl/halloy";
+    changelog = "https://github.com/squidowl/halloy/blob/${version}/CHANGELOG.md";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ fab ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/irc/hexchat/default.nix b/nixpkgs/pkgs/applications/networking/irc/hexchat/default.nix
new file mode 100644
index 000000000000..3ab70167f7ac
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/hexchat/default.nix
@@ -0,0 +1,55 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, gtk2, lua, perl, python3Packages
+, pciutils, dbus-glib, libcanberra-gtk2, libproxy
+, enchant2, libnotify, openssl, isocodes
+, desktop-file-utils
+, meson, ninja, makeWrapper
+}:
+
+stdenv.mkDerivation rec {
+  pname = "hexchat";
+  version = "2.16.1";
+
+  src = fetchFromGitHub {
+    owner = "hexchat";
+    repo = "hexchat";
+    rev = "v${version}";
+    sha256 = "sha256-2IUlNUTL3TOJnDNMds2EWwkfn5NUOQ1ids96Ddo196E=";
+  };
+
+  nativeBuildInputs = [ meson ninja pkg-config makeWrapper ];
+
+  buildInputs = [
+    gtk2 lua perl python3Packages.python python3Packages.cffi pciutils dbus-glib libcanberra-gtk2 libproxy
+    libnotify openssl desktop-file-utils
+    isocodes
+  ];
+
+  #hexchat and hexchat-text loads enchant spell checking library at run time and so it needs to have route to the path
+  postPatch = ''
+    sed -i "s,libenchant-2.so.2,${enchant2}/lib/libenchant-2.so.2,g" src/fe-gtk/sexy-spell-entry.c
+    sed -i "/flag.startswith('-I')/i if flag.contains('no-such-path')\ncontinue\nendif" plugins/perl/meson.build
+    chmod +x meson_post_install.py
+    for f in meson_post_install.py \
+             plugins/perl/generate_header.py \
+             plugins/python/generate_plugin.py \
+             po/validate-textevent-translations \
+             src/common/make-te.py
+    do
+      patchShebangs $f
+    done
+  '';
+
+  mesonFlags = [ "-Dwith-lua=lua" "-Dtext-frontend=true" ];
+
+  postInstall = ''
+    wrapProgram $out/bin/hexchat --prefix PYTHONPATH : "$PYTHONPATH"
+  '';
+
+  meta = with lib; {
+    description = "A popular and easy to use graphical IRC (chat) client";
+    homepage = "https://hexchat.github.io/";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ romildo ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/irc/ii/default.nix b/nixpkgs/pkgs/applications/networking/irc/ii/default.nix
new file mode 100644
index 000000000000..8fcbdce97291
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/ii/default.nix
@@ -0,0 +1,22 @@
+{lib, stdenv, fetchurl}:
+
+stdenv.mkDerivation rec {
+  pname = "ii";
+  version = "2.0";
+
+  src = fetchurl {
+    url = "https://dl.suckless.org/tools/${pname}-${version}.tar.gz";
+    sha256 = "sha256-T2evzSCMB5ObiKrb8hSXpwKtCgf5tabOhh+fOf/lQls=";
+  };
+
+  makeFlags = [ "CC:=$(CC)" ];
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = {
+    homepage = "https://tools.suckless.org/ii/";
+    license = lib.licenses.mit;
+    description = "Irc it, simple FIFO based irc client";
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/irc/irccloud/default.nix b/nixpkgs/pkgs/applications/networking/irc/irccloud/default.nix
new file mode 100644
index 000000000000..d6b7af7c0a86
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/irccloud/default.nix
@@ -0,0 +1,38 @@
+{ appimageTools, fetchurl, lib }:
+
+let
+  pname = "irccloud";
+  version = "0.16.0";
+  name = "${pname}-${version}";
+
+  src = fetchurl {
+    url = "https://github.com/irccloud/irccloud-desktop/releases/download/v${version}/IRCCloud-${version}-linux-x86_64.AppImage";
+    sha256 = "sha256-/hMPvYdnVB1XjKgU2v47HnVvW4+uC3rhRjbucqin4iI=";
+  };
+
+  appimageContents = appimageTools.extractType2 {
+    inherit name src;
+  };
+
+in appimageTools.wrapType2 {
+  inherit name src;
+
+  extraPkgs = pkgs: with pkgs; [ at-spi2-core ];
+
+  extraInstallCommands = ''
+    mv $out/bin/${name} $out/bin/${pname}
+    install -m 444 -D ${appimageContents}/irccloud.desktop $out/share/applications/irccloud.desktop
+    install -m 444 -D ${appimageContents}/usr/share/icons/hicolor/512x512/apps/irccloud.png \
+      $out/share/icons/hicolor/512x512/apps/irccloud.png
+    substituteInPlace $out/share/applications/irccloud.desktop \
+      --replace 'Exec=AppRun' 'Exec=${pname}'
+  '';
+
+  meta = with lib; {
+    description = "A desktop client for IRCCloud";
+    homepage = "https://www.irccloud.com";
+    license = licenses.asl20;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ lightbulbjim ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/irc/ircdog/default.nix b/nixpkgs/pkgs/applications/networking/irc/ircdog/default.nix
new file mode 100644
index 000000000000..02323314db4a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/ircdog/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "ircdog";
+  version = "0.5.1";
+
+  src = fetchFromGitHub {
+    owner = "goshuirc";
+    repo = "ircdog";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-nXXSHNQp+yFfgY/VPqaMLM6lv4oYE97rdgHYW+0+L9g=";
+  };
+
+  vendorHash = null;
+
+  meta = with lib; {
+    description = "ircdog is a simple wrapper over the raw IRC protocol that can respond to pings, and interprets formatting codes";
+    homepage = "https://github.com/ergochat/ircdog";
+    changelog = "https://github.com/ergochat/ircdog/releases/tag/v${version}";
+    license = licenses.isc;
+    maintainers = with maintainers; [ hexa ];
+  };
+}
+
+
diff --git a/nixpkgs/pkgs/applications/networking/irc/irssi/default.nix b/nixpkgs/pkgs/applications/networking/irc/irssi/default.nix
new file mode 100644
index 000000000000..523573e3116c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/irssi/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, glib
+, libgcrypt
+, libintl
+, libotr
+, libtool
+, meson
+, ncurses
+, ninja
+, openssl
+, perl
+, pkg-config
+}:
+
+stdenv.mkDerivation rec {
+  pname = "irssi";
+  version = "1.4.4";
+
+  src = fetchFromGitHub {
+    owner = "irssi";
+    repo = "irssi";
+    rev = version;
+    hash = "sha256-a/+9M2zoywZBdOfXHrA4O6Q9W7HJZNTthB/aseUNefA=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+  ];
+
+  buildInputs = [
+    glib
+    libgcrypt
+    libintl
+    libotr
+    ncurses
+    openssl
+    perl
+  ];
+
+  configureFlags = [
+    "-Dwith-proxy=yes"
+    "-Dwith-bot=yes"
+    "-Dwith-perl=yes"
+  ];
+
+  meta = with lib; {
+    description = "Terminal based IRC client";
+    homepage = "https://irssi.org";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ fab lovek323 ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/irc/irssi/fish/default.nix b/nixpkgs/pkgs/applications/networking/irc/irssi/fish/default.nix
new file mode 100644
index 000000000000..b26b2cb1daf4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/irssi/fish/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, glib, openssl, irssi }:
+
+stdenv.mkDerivation rec {
+  pname = "fish-irssi";
+  version = "unstable-2021-04-16";
+
+  src = fetchFromGitHub {
+    owner = "falsovsky";
+    repo = "FiSH-irssi";
+    rev = "fcc484f09ce6941ba2e499605270593ddd13b81a";
+    hash = "sha256-KIPnz17a0CFfoPO2dZz90j+wG/dR4pv5d0iZMRf7Vkc=";
+  };
+
+  patches = [ ./irssi-include-dir.patch ];
+
+  nativeBuildInputs = [ cmake pkg-config ];
+
+  buildInputs = [ glib openssl ];
+
+  cmakeFlags = [ "-DIRSSI_INCLUDE_PATH:PATH=${irssi}/include" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/falsovsky/FiSH-irssi";
+    license = licenses.mit;
+    maintainers = with maintainers; [ viric ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/irc/irssi/fish/irssi-include-dir.patch b/nixpkgs/pkgs/applications/networking/irc/irssi/fish/irssi-include-dir.patch
new file mode 100644
index 000000000000..0a51ec327bdc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/irssi/fish/irssi-include-dir.patch
@@ -0,0 +1,33 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 601b92b..b440f83 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -36,27 +36,10 @@ if(OPENSSL_FOUND)
+     MESSAGE(STATUS "Using OpenSSL ${OPENSSL_VERSION}")
+ ENDIF()
+ 
+-# Sets a variable that the user can set with 
+-# cmake -DIRSSI_INCLUDE_DIR:PATH=/path/to/irssi/includes .
+-SET(IRSSI_INCLUDE_DIR "" CACHE PATH "Path to irssi include files")
+-
+-# Tries to find the irssi include files in the most common places,
+-# and in the user defined directory
+-FIND_PATH(IRSSI_INCLUDE_PATH
+-    NAMES irssi-config.h src/common.h
+-    PATHS /usr/include/irssi /usr/local/include/irssi ${IRSSI_INCLUDE_DIR}
+-)
+-
+-# Bail out if the required irssi files werent found
+-IF(NOT IRSSI_INCLUDE_PATH)
+-    MESSAGE(SEND_ERROR "Could not detect the irssi include files. Please run:\n# cmake -DIRSSI_INCLUDE_DIR:PATH=/path/to/irssi/includes .")
+-    RETURN()
+-ENDIF()
+-
+ MESSAGE(STATUS "irssi includes were found on ${IRSSI_INCLUDE_PATH}")
+ 
+ # Add the weirdo irssi includes directories
+-INCLUDE_DIRECTORIES(${IRSSI_INCLUDE_PATH} ${IRSSI_INCLUDE_PATH}/src ${IRSSI_INCLUDE_PATH}/src/fe-common/core ${IRSSI_INCLUDE_PATH}/src/core)
++INCLUDE_DIRECTORIES(${IRSSI_INCLUDE_PATH} ${IRSSI_INCLUDE_PATH}/irssi ${IRSSI_INCLUDE_PATH}/irssi/src ${IRSSI_INCLUDE_PATH}/irssi/src/fe-common/core ${IRSSI_INCLUDE_PATH}/irssi/src/core)
+ 
+ MESSAGE(STATUS "The module will be installed by default to ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/irssi/modules")
+ MESSAGE(STATUS "You can change it with 'cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr .'")
diff --git a/nixpkgs/pkgs/applications/networking/irc/kirc/default.nix b/nixpkgs/pkgs/applications/networking/irc/kirc/default.nix
new file mode 100644
index 000000000000..b0e771a80f4e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/kirc/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "kirc";
+  version = "0.3.2";
+
+  src = fetchFromGitHub {
+    owner = "mcpcpc";
+    repo = pname;
+    rev = version;
+    hash = "sha256-SXPtSFjGPLgORG9OCSCEStzNzdGZFzCx72YOrW288MU=";
+  };
+
+  dontConfigure = true;
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    homepage = "http://kirc.io/";
+    description = "Tiny IRC client written in C99";
+    longDescription = ''
+      kirc is a tiny open-source Internet Relay Chat (IRC) client designed with
+      usability and cross-platform compatibility in mind.
+
+      It features:
+      - No dependencies other than a C99 compiler.
+      - Simple Authentication and Security Layer (SASL) procotol support.
+      - Client-to-client (CTCP) protocol support.
+      - Transport Layer Security (TLS) protocol support (via external
+        utilities).
+      - Simple chat history logging.
+      - Asynchronous message handling.
+      - Multi-channel joining at server connection.
+      - Full support for all RFC 2812 commands.
+      - Easy customized color scheme definition.
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/irc/kvirc/default.nix b/nixpkgs/pkgs/applications/networking/irc/kvirc/default.nix
new file mode 100644
index 000000000000..8c1a96d5234f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/kvirc/default.nix
@@ -0,0 +1,32 @@
+{ lib, mkDerivation, fetchFromGitHub
+, qtbase, qtmultimedia, qtsvg, qtx11extras
+, pkg-config, cmake, gettext
+}:
+
+mkDerivation rec {
+  pname = "kvirc";
+  version = "2022-06-29";
+
+  src = fetchFromGitHub {
+    owner = "kvirc";
+    repo = "KVIrc";
+    rev = "eb3fdd6b1d824f148fd6e582852dcba77fc9a271";
+    sha256 = "sha256-RT5UobpMt/vBLgWur1TkodS3dMyIWQkDPiBYCYx/FI4=";
+  };
+
+  buildInputs = [
+    qtbase qtmultimedia qtsvg qtx11extras
+  ];
+
+  nativeBuildInputs = [
+    pkg-config cmake gettext
+  ];
+
+  meta = with lib; {
+    description = "Advanced IRC Client";
+    homepage = "http://www.kvirc.net/";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.suhr ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/irc/quassel/default.nix b/nixpkgs/pkgs/applications/networking/irc/quassel/default.nix
new file mode 100644
index 000000000000..9cbebf074162
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/quassel/default.nix
@@ -0,0 +1,93 @@
+{ monolithic ? true # build monolithic Quassel
+, enableDaemon ? false # build Quassel daemon
+, client ? false # build Quassel client
+, tag ? "-kf5" # tag added to the package name
+, static ? false # link statically
+
+, lib, stdenv, fetchFromGitHub, cmake, makeWrapper, dconf
+, mkDerivation, qtbase, boost, zlib, qtscript
+, phonon, libdbusmenu, qca-qt5
+
+, withKDE ? true # enable KDE integration
+, extra-cmake-modules
+, kconfigwidgets
+, kcoreaddons
+, knotifications
+, knotifyconfig
+, ktextwidgets
+, kwidgetsaddons
+, kxmlgui
+}:
+
+let
+    buildClient = monolithic || client;
+    buildCore = monolithic || enableDaemon;
+in
+
+assert monolithic -> !client && !enableDaemon;
+assert client || enableDaemon -> !monolithic;
+assert !buildClient -> !withKDE; # KDE is used by the client only
+
+let
+  edf = flag: feature: [("-D" + feature + (if flag then "=ON" else "=OFF"))];
+
+in (if !buildClient then stdenv.mkDerivation else mkDerivation) rec {
+  pname = "quassel${tag}";
+  version = "0.14.0";
+
+  src = fetchFromGitHub {
+    owner = "quassel";
+    repo = "quassel";
+    rev = version;
+    sha256 = "sha256-eulhNcyCmy9ryietOhT2yVJeJH+MMZRbTUo2XuTy9qU=";
+  };
+
+  # Prevent ``undefined reference to `qt_version_tag''' in SSL check
+  env.NIX_CFLAGS_COMPILE = "-DQT_NO_VERSION_TAGGING=1";
+
+  nativeBuildInputs = [ cmake makeWrapper ];
+  buildInputs = [ qtbase boost zlib ]
+    ++ lib.optionals buildCore [qtscript qca-qt5 ]
+    ++ lib.optionals buildClient [libdbusmenu phonon]
+    ++ lib.optionals (buildClient && withKDE) [
+      extra-cmake-modules kconfigwidgets kcoreaddons
+      knotifications knotifyconfig ktextwidgets kwidgetsaddons
+      kxmlgui
+    ];
+
+  cmakeFlags = [
+    "-DEMBED_DATA=OFF"
+    "-DUSE_QT5=ON"
+  ]
+    ++ edf static "STATIC"
+    ++ edf monolithic "WANT_MONO"
+    ++ edf enableDaemon "WANT_CORE"
+    ++ edf client "WANT_QTCLIENT"
+    ++ edf withKDE "WITH_KDE";
+
+  dontWrapQtApps = true;
+
+  postFixup =
+    lib.optionalString enableDaemon ''
+      wrapProgram "$out/bin/quasselcore" --suffix PATH : "${qtbase.bin}/bin"
+    '' +
+    lib.optionalString buildClient ''
+      wrapQtApp "$out/bin/quassel${lib.optionalString client "client"}" \
+        --prefix GIO_EXTRA_MODULES : "${dconf}/lib/gio/modules"
+    '';
+
+  meta = with lib; {
+    homepage = "https://quassel-irc.org/";
+    description = "Qt/KDE distributed IRC client supporting a remote daemon";
+    longDescription = ''
+      Quassel IRC is a cross-platform, distributed IRC client,
+      meaning that one (or multiple) client(s) can attach to
+      and detach from a central core -- much like the popular
+      combination of screen and a text-based IRC client such
+      as WeeChat, but graphical (based on Qt4/KDE4 or Qt5/KF5).
+    '';
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ ttuegel ];
+    inherit (qtbase.meta) platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/irc/senpai/default.nix b/nixpkgs/pkgs/applications/networking/irc/senpai/default.nix
new file mode 100644
index 000000000000..eaefa41a6650
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/senpai/default.nix
@@ -0,0 +1,37 @@
+{ lib, buildGoModule, fetchFromSourcehut, installShellFiles, scdoc }:
+
+buildGoModule rec {
+  pname = "senpai";
+  version = "0.2.0";
+
+  src = fetchFromSourcehut {
+    owner = "~taiite";
+    repo = "senpai";
+    rev = "v${version}";
+    sha256 = "sha256-q167og8S8YbLcREZ7DVbJhjMzx4iO0WgIFkOV2IpieM=";
+  };
+
+  vendorHash = "sha256-PkoEHQEGKCiNbJsm7ieL65MtEult/wubLreJKA1gGpg=";
+
+  subPackages = [
+    "cmd/senpai"
+  ];
+
+  nativeBuildInputs = [
+    scdoc
+    installShellFiles
+  ];
+
+  postInstall = ''
+    scdoc < doc/senpai.1.scd > doc/senpai.1
+    scdoc < doc/senpai.5.scd > doc/senpai.5
+    installManPage doc/senpai.*
+  '';
+
+  meta = with lib; {
+    description = "Your everyday IRC student";
+    homepage = "https://sr.ht/~taiite/senpai/";
+    license = licenses.isc;
+    maintainers = with maintainers; [ malte-v ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/irc/sic/default.nix b/nixpkgs/pkgs/applications/networking/irc/sic/default.nix
new file mode 100644
index 000000000000..d5a0737403a8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/sic/default.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "sic";
+  version = "1.3";
+
+  src = fetchurl {
+    url = "https://dl.suckless.org/tools/sic-${version}.tar.gz";
+    hash = "sha256-MEePqz68dfLrXQjLtbL+3K9IkRbnWi3XGX4+nHM9ZdI=";
+  };
+
+  makeFlags = [ "CC:=$(CC)" ];
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = {
+    description = "Simple IRC client";
+    homepage = "https://tools.suckless.org/sic/";
+    license = lib.licenses.mit;
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/irc/srain/default.nix b/nixpkgs/pkgs/applications/networking/irc/srain/default.nix
new file mode 100644
index 000000000000..2a9ac4b0cdab
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/srain/default.nix
@@ -0,0 +1,60 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, gtk3
+, libconfig
+, libsoup
+, libsecret
+, openssl
+, gettext
+, glib
+, glib-networking
+, appstream-glib
+, dbus-glib
+, python3Packages
+, meson
+, ninja
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "srain";
+  version = "1.5.1";
+
+  src = fetchFromGitHub {
+    owner = "SrainApp";
+    repo = "srain";
+    rev = version;
+    sha256 = "sha256-PiLjlsYmgxXpvcqDkwS/6WmTEimMH8+OndUG2Hehdm0=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    gettext
+    appstream-glib
+    wrapGAppsHook
+    python3Packages.sphinx
+  ];
+
+  buildInputs = [
+    gtk3
+    glib
+    glib-networking
+    dbus-glib
+    libconfig
+    libsoup
+    libsecret
+    openssl
+  ];
+
+  meta = with lib; {
+    description = "Modern IRC client written in GTK";
+    homepage = "https://srain.silverrainz.me";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ rewine ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/irc/thelounge/default.nix b/nixpkgs/pkgs/applications/networking/irc/thelounge/default.nix
new file mode 100644
index 000000000000..eff1458e07e3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/thelounge/default.nix
@@ -0,0 +1,93 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchYarnDeps
+, nodejs
+, yarn
+, fixup_yarn_lock
+, python3
+, npmHooks
+, darwin
+, sqlite
+, srcOnly
+, buildPackages
+, nixosTests
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "thelounge";
+  version = "4.4.1";
+
+  src = fetchFromGitHub {
+    owner = "thelounge";
+    repo = "thelounge";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-4FdNYP9VLgv/rfvT7KHCF+ABFsZvPbJjfz6IvvDkRNA=";
+  };
+
+  # Allow setting package path for the NixOS module.
+  patches = [ ./packages-path.patch ];
+
+  # Use the NixOS module's state directory by default.
+  postPatch = ''
+    echo /var/lib/thelounge > .thelounge_home
+  '';
+
+  offlineCache = fetchYarnDeps {
+    yarnLock = "${finalAttrs.src}/yarn.lock";
+    hash = "sha256-MM6SgVT7Pjdu96A4eWRucEzT7uNPxBqUDgHKl8mH2C0=";
+  };
+
+  nativeBuildInputs = [ nodejs yarn fixup_yarn_lock python3 npmHooks.npmInstallHook ] ++ lib.optional stdenv.isDarwin darwin.cctools;
+  buildInputs = [ sqlite ];
+
+  configurePhase = ''
+    runHook preConfigure
+
+    export HOME="$PWD"
+
+    fixup_yarn_lock yarn.lock
+    yarn config --offline set yarn-offline-mirror ${finalAttrs.offlineCache}
+    yarn install --offline --frozen-lockfile --ignore-platform --ignore-scripts --no-progress --non-interactive
+    patchShebangs node_modules
+
+    runHook postConfigure
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+
+    NODE_ENV=production yarn build
+
+    runHook postBuild
+  '';
+
+  # `npm prune` doesn't work and/or hangs for whatever reason.
+  preInstall = ''
+    yarn install --offline --frozen-lockfile --ignore-platform --ignore-scripts --no-progress --non-interactive --production
+    patchShebangs node_modules
+
+    # Build the sqlite3 package.
+    npm_config_nodedir="${srcOnly nodejs}" npm_config_node_gyp="${buildPackages.nodejs}/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" npm rebuild --verbose --sqlite=${sqlite.dev}
+
+    # These files seemingly aren't needed, and also might not exist when the Darwin sandbox is disabled?
+    rm -rf node_modules/sqlite3/build-tmp-napi-v6/{Release/obj.target,node_sqlite3.target.mk}
+  '';
+
+  dontNpmPrune = true;
+
+  # Takes way, way, way too long.
+  dontStrip = true;
+
+  passthru.tests = nixosTests.thelounge;
+
+  meta = with lib; {
+    description = "Modern, responsive, cross-platform, self-hosted web IRC client";
+    homepage = "https://thelounge.chat";
+    changelog = "https://github.com/thelounge/thelounge/releases/tag/v${finalAttrs.version}";
+    maintainers = with maintainers; [ winter raitobezarius ];
+    license = licenses.mit;
+    inherit (nodejs.meta) platforms;
+    mainProgram = "thelounge";
+  };
+})
diff --git a/nixpkgs/pkgs/applications/networking/irc/thelounge/packages-path.patch b/nixpkgs/pkgs/applications/networking/irc/thelounge/packages-path.patch
new file mode 100644
index 000000000000..eb1ded070536
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/thelounge/packages-path.patch
@@ -0,0 +1,13 @@
+diff --git a/server/config.ts b/server/config.ts
+index 543a8135..9744f00d 100644
+--- a/server/config.ts
++++ b/server/config.ts
+@@ -145,7 +145,7 @@ class Config {
+ 	}
+ 
+ 	getPackagesPath() {
+-		return path.join(this.#homePath, "packages");
++		return process.env.THELOUNGE_PACKAGES || path.join(this.#homePath, "packages");
+ 	}
+ 
+ 	getPackageModulePath(packageName: string) {
diff --git a/nixpkgs/pkgs/applications/networking/irc/tiny/Cargo.lock.patch b/nixpkgs/pkgs/applications/networking/irc/tiny/Cargo.lock.patch
new file mode 100644
index 000000000000..775a7b717869
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/tiny/Cargo.lock.patch
@@ -0,0 +1,11 @@
+--- a/Cargo.lock
++++ b/Cargo.lock
+@@ -1535,7 +1535,7 @@ checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb"
+ 
+ [[package]]
+ name = "tiny"
+-version = "0.10.0"
++version = "0.11.0"
+ dependencies = [
+  "clap",
+  "dirs",
diff --git a/nixpkgs/pkgs/applications/networking/irc/tiny/default.nix b/nixpkgs/pkgs/applications/networking/irc/tiny/default.nix
new file mode 100644
index 000000000000..519d1dad76f0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/tiny/default.nix
@@ -0,0 +1,47 @@
+{ stdenv
+, lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, Foundation
+, dbusSupport ? stdenv.isLinux, dbus
+# rustls will be used for TLS if useOpenSSL=false
+, useOpenSSL ? stdenv.isLinux, openssl
+, notificationSupport ? stdenv.isLinux
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "tiny";
+  version = "0.11.0";
+
+  src = fetchFromGitHub {
+    owner = "osa1";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-oOaLQh9gJlurHi9awoRh4wQnXwkuOGJLnGQA6di6k1Q=";
+  };
+
+  cargoPatches = [ ./Cargo.lock.patch ];
+
+  cargoHash = "sha256-wUBScLNRNAdDZ+HpQjYiExgPJnE9cxviooHePbJI13Q=";
+
+  nativeBuildInputs = lib.optional stdenv.isLinux pkg-config;
+  buildInputs = lib.optionals dbusSupport [ dbus ]
+                ++ lib.optionals useOpenSSL [ openssl ]
+                ++ lib.optional stdenv.isDarwin Foundation;
+
+  buildFeatures = lib.optional notificationSupport "desktop-notifications";
+
+  checkFlags = [
+    # flaky test
+    "--skip=tests::config::parsing_tab_configs"
+  ];
+
+  meta = with lib; {
+    description = "A console IRC client";
+    homepage = "https://github.com/osa1/tiny";
+    changelog = "https://github.com/osa1/tiny/raw/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ Br1ght0ne vyp ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/irc/weechat/default.nix b/nixpkgs/pkgs/applications/networking/irc/weechat/default.nix
new file mode 100644
index 000000000000..6d0cfdccde46
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/weechat/default.nix
@@ -0,0 +1,101 @@
+{ stdenv, fetchurl, lib
+, ncurses, openssl, aspell, gnutls, gettext
+, zlib, curl, pkg-config, libgcrypt
+, cmake, libobjc, libresolv, libiconv
+, asciidoctor # manpages
+, enableTests ? !stdenv.isDarwin, cpputest
+, guileSupport ? true, guile
+, luaSupport ? true, lua5
+, perlSupport ? true, perl
+, pythonSupport ? true, python3Packages
+, rubySupport ? true, ruby
+, tclSupport ? true, tcl
+, phpSupport ? !stdenv.isDarwin, php, systemd, libxml2, pcre2, libargon2
+, extraBuildInputs ? []
+}:
+
+let
+  inherit (python3Packages) python;
+  php-embed = php.override {
+    embedSupport = true;
+    apxs2Support = false;
+  };
+  plugins = [
+    { name = "perl"; enabled = perlSupport; cmakeFlag = "ENABLE_PERL"; buildInputs = [ perl ]; }
+    { name = "tcl"; enabled = tclSupport; cmakeFlag = "ENABLE_TCL"; buildInputs = [ tcl ]; }
+    { name = "ruby"; enabled = rubySupport; cmakeFlag = "ENABLE_RUBY"; buildInputs = [ ruby ]; }
+    { name = "guile"; enabled = guileSupport; cmakeFlag = "ENABLE_GUILE"; buildInputs = [ guile ]; }
+    { name = "lua"; enabled = luaSupport; cmakeFlag = "ENABLE_LUA"; buildInputs = [ lua5 ]; }
+    { name = "python"; enabled = pythonSupport; cmakeFlag = "ENABLE_PYTHON3"; buildInputs = [ python ]; }
+    { name = "php"; enabled = phpSupport; cmakeFlag = "ENABLE_PHP"; buildInputs = [
+      php-embed.unwrapped.dev libxml2 pcre2 libargon2
+    ] ++ lib.optional stdenv.isLinux systemd; }
+  ];
+  enabledPlugins = builtins.filter (p: p.enabled) plugins;
+
+  in
+    assert lib.all (p: p.enabled -> ! (builtins.elem null p.buildInputs)) plugins;
+    stdenv.mkDerivation rec {
+      version = "4.0.4";
+      pname = "weechat";
+
+      hardeningEnable = [ "pie" ];
+
+      src = fetchurl {
+        url = "https://weechat.org/files/src/weechat-${version}.tar.xz";
+        hash = "sha256-rl9JebWtoDObhOdB1ffkge6R4/7NQKCZB7ZHUYKetvY=";
+      };
+
+      outputs = [ "out" "man" ] ++ map (p: p.name) enabledPlugins;
+
+      cmakeFlags = with lib; [
+        "-DENABLE_MAN=ON"
+        "-DENABLE_DOC=ON"
+        "-DENABLE_DOC_INCOMPLETE=ON"
+        "-DENABLE_TESTS=${if enableTests then "ON" else "OFF"}"
+      ]
+        ++ optionals stdenv.isDarwin ["-DICONV_LIBRARY=${libiconv}/lib/libiconv.dylib"]
+        ++ map (p: "-D${p.cmakeFlag}=" + (if p.enabled then "ON" else "OFF")) plugins
+        ;
+
+      nativeBuildInputs = [ cmake pkg-config asciidoctor ] ++ lib.optional enableTests cpputest;
+      buildInputs = with lib; [
+          ncurses openssl aspell gnutls gettext zlib curl
+          libgcrypt ]
+        ++ optionals stdenv.isDarwin [ libobjc libresolv ]
+        ++ concatMap (p: p.buildInputs) enabledPlugins
+        ++ extraBuildInputs;
+
+      env.NIX_CFLAGS_COMPILE = "-I${python}/include/${python.libPrefix}"
+        # Fix '_res_9_init: undefined symbol' error
+        + (lib.optionalString stdenv.isDarwin "-DBIND_8_COMPAT=1 -lresolv");
+
+      postInstall = with lib; ''
+        for p in ${concatMapStringsSep " " (p: p.name) enabledPlugins}; do
+          from=$out/lib/weechat/plugins/$p.so
+          to=''${!p}/lib/weechat/plugins/$p.so
+          mkdir -p $(dirname $to)
+          mv $from $to
+        done
+      '';
+
+      doInstallCheck = true;
+      installCheckPhase = ''
+        $out/bin/weechat --version
+      '';
+
+      meta = {
+        homepage = "https://weechat.org/";
+        changelog = "https://weechat.org/files/doc/weechat/ChangeLog-${version}.html";
+        description = "A fast, light and extensible chat client";
+        longDescription = ''
+          You can find more documentation as to how to customize this package
+          (eg. adding python modules for scripts that would require them, etc.)
+          on https://nixos.org/nixpkgs/manual/#sec-weechat .
+        '';
+        license = lib.licenses.gpl3;
+        maintainers = with lib.maintainers; [ ncfavier ];
+        mainProgram = "weechat";
+        platforms = lib.platforms.unix;
+      };
+    }
diff --git a/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/buffer_autoset/default.nix b/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/buffer_autoset/default.nix
new file mode 100644
index 000000000000..a2e9fc3265a3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/buffer_autoset/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchurl, weechat }:
+
+stdenv.mkDerivation {
+  pname = "buffer_autoset";
+  version = "1.2";
+
+  src = fetchurl {
+    url = "https://raw.githubusercontent.com/weechat/scripts/2b308b44df39ba6563d02b2bcd40c384ec2777dc/python/buffer_autoset.py";
+    sha256 = "0csl3sfpijdbq1j6wabx347lvn91a24a2jfx5b5pspfxz7gixli1";
+  };
+
+  dontUnpack = true;
+
+  passthru.scripts = [ "buffer_autoset.py" ];
+
+  installPhase = ''
+    install -D $src $out/share/buffer_autoset.py
+  '';
+
+  meta = with lib; {
+    inherit (weechat.meta) platforms;
+    description = "buffer_autoset.py is a weechat script which auto-set buffer properties when a buffer is opened.";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ govanify ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/colorize_nicks/default.nix b/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/colorize_nicks/default.nix
new file mode 100644
index 000000000000..0b6d355797f3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/colorize_nicks/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, lib, fetchurl, weechat }:
+
+stdenv.mkDerivation {
+  pname = "weechat-colorize_nicks";
+  version = "27";
+
+  src = fetchurl {
+    url = "https://github.com/weechat/scripts/raw/bc8a9051800779a036ba11689a277cd5f03657b2/python/colorize_nicks.py";
+    sha256 = "0hiay88vvy171jiq6ahflm0ipb7sslfxwhmmm8psv6qk19rv2sxs";
+  };
+
+  dontUnpack = true;
+
+  installPhase = ''
+    mkdir -p $out/share
+    cp $src $out/share/colorize_nicks.py
+  '';
+
+  passthru = {
+    scripts = [ "colorize_nicks.py" ];
+  };
+
+  meta = with lib; {
+    inherit (weechat.meta) platforms;
+    description = "Use the weechat nick colors in the chat area";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ qyliss ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/default.nix b/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/default.nix
new file mode 100644
index 000000000000..f84e2307acb1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/default.nix
@@ -0,0 +1,37 @@
+{ callPackage, luaPackages, perlPackages, python3Packages }:
+
+{
+  colorize_nicks = callPackage ./colorize_nicks { };
+
+  edit = callPackage ./edit { };
+
+  multiline = callPackage ./multiline {
+    inherit (perlPackages) PodParser;
+  };
+
+  url_hint = callPackage ./url_hint { };
+
+  weechat-grep = callPackage ./weechat-grep { };
+
+  weechat-matrix-bridge = callPackage ./weechat-matrix-bridge {
+    inherit (luaPackages) cjson luaffi;
+  };
+
+  weechat-matrix = python3Packages.callPackage ./weechat-matrix { };
+
+  weechat-notify-send = python3Packages.callPackage ./weechat-notify-send { };
+
+  wee-slack = callPackage ./wee-slack { };
+
+  weechat-autosort = callPackage ./weechat-autosort { };
+
+  weechat-otr = callPackage ./weechat-otr { };
+
+  weechat-go = callPackage ./weechat-go { };
+
+  buffer_autoset = callPackage ./buffer_autoset { };
+
+  highmon = callPackage ./highmon { };
+
+  zncplayback = callPackage ./zncplayback { };
+}
diff --git a/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/edit/default.nix b/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/edit/default.nix
new file mode 100644
index 000000000000..5f91417b76fa
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/edit/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, weechat }:
+
+stdenv.mkDerivation rec {
+  pname = "edit-weechat";
+  version = "1.0.2";
+
+  src = fetchFromGitHub {
+    owner = "keith";
+    repo = "edit-weechat";
+    rev = version;
+    sha256 = "1s42r0l0xkhlp6rbc23cm4vlda91il6cg53w33hqfhd2wz91s66w";
+  };
+
+  dontBuild = true;
+
+  passthru.scripts = [ "edit.py" ];
+
+  installPhase = ''
+    runHook preInstall
+    install -D edit.py $out/share/edit.py
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    inherit (weechat.meta) platforms;
+    description = "This simple weechat plugin allows you to compose messages in your $EDITOR.";
+    license = licenses.mit;
+    maintainers = with maintainers; [ eraserhd ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/highmon/default.nix b/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/highmon/default.nix
new file mode 100644
index 000000000000..f65322465707
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/highmon/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchurl, weechat }:
+
+stdenv.mkDerivation {
+  pname = "highmon";
+  version = "2.7";
+
+  src = fetchurl {
+    url = "https://raw.githubusercontent.com/KenjiE20/highmon/182e67d070c75efc81999e68c2ac7fdfe44d2872/highmon.pl";
+    sha256 = "1vvgzscb12l3cp2nq954fx6j3awvpjsb0nqylal51ps9cq9a3wir";
+  };
+
+  dontUnpack = true;
+
+  passthru.scripts = [ "highmon.pl" ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D $src $out/share/highmon.pl
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    inherit (weechat.meta) platforms;
+    homepage = "https://github.com/KenjiE20/highmon/";
+    description = "highmon.pl is a weechat script that adds 'Highlight Monitor'.";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ govanify ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/multiline/default.nix b/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/multiline/default.nix
new file mode 100644
index 000000000000..f61b4391e18d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/multiline/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, lib, fetchurl, substituteAll, PodParser }:
+
+stdenv.mkDerivation {
+  pname = "multiline";
+  version = "0.6.4";
+
+  src = fetchurl {
+    url = "https://raw.githubusercontent.com/weechat/scripts/5f073d966e98d54344a91be4f5afc0ec9e2697dc/perl/multiline.pl";
+    sha256 = "sha256-TXbU2Q7Tm8iTwOQqrWpqHXuKrjoBFLyUWRsH+TsR9Lo=";
+  };
+
+  dontUnpack = true;
+  prePatch = ''
+    cp $src multiline.pl
+  '';
+
+  patches = [
+    # The script requires a special Perl environment.
+    (substituteAll {
+      src = ./libpath.patch;
+      env = PodParser;
+    })
+  ];
+
+  passthru.scripts = [ "multiline.pl" ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D multiline.pl $out/share/multiline.pl
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Multi-line edit box";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ oxzi ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/multiline/libpath.patch b/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/multiline/libpath.patch
new file mode 100644
index 000000000000..34299f20d8c2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/multiline/libpath.patch
@@ -0,0 +1,9 @@
+diff --git a/multiline.pl b/multiline.pl
+index 54474d4..42fbef8 100644
+--- a/multiline.pl
++++ b/multiline.pl
+@@ -1,3 +1,4 @@
++use lib '@env@/lib/perl5/site_perl';
+ use strict; use warnings;
+ $INC{'Encode/ConfigLocal.pm'}=1;
+ require Encode;
diff --git a/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/url_hint/default.nix b/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/url_hint/default.nix
new file mode 100644
index 000000000000..90c98b8fe769
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/url_hint/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchurl, weechat }:
+
+stdenv.mkDerivation {
+  pname = "url_hint";
+  version = "0.8";
+
+  src = fetchurl {
+    url = "https://raw.githubusercontent.com/weechat/scripts/10671d785ea3f9619d0afd0d7a1158bfa4ee3938/python/url_hint.py";
+    sha256 = "0aw59kq74yqh0qbdkldfl6l83d0bz833232xr2w4741szck43kss";
+  };
+
+  dontUnpack = true;
+
+  passthru.scripts = [ "url_hint.py" ];
+
+  installPhase = ''
+    runHook preInstall
+    install -D $src $out/share/url_hint.py
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    inherit (weechat.meta) platforms;
+    description = "url_hint.py is a URL opening script.";
+    license = licenses.mit;
+    maintainers = with maintainers; [ eraserhd ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/wee-slack/default.nix b/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/wee-slack/default.nix
new file mode 100644
index 000000000000..c1bb57b3b1bb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/wee-slack/default.nix
@@ -0,0 +1,48 @@
+{ lib, stdenv, substituteAll, buildEnv, fetchFromGitHub, python3Packages }:
+
+stdenv.mkDerivation rec {
+  pname = "wee-slack";
+  version = "2.10.0";
+
+  src = fetchFromGitHub {
+    repo = "wee-slack";
+    owner = "wee-slack";
+    rev = "v${version}";
+    sha256 = "sha256-SxmMCD7FdkmZ0ccDbuY2XUGcLxHlv62x4Pj55Wzf0AA=";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./libpath.patch;
+      env = "${buildEnv {
+        name = "wee-slack-env";
+        paths = with python3Packages; [
+          websocket-client
+          six
+        ];
+      }}/${python3Packages.python.sitePackages}";
+    })
+    ./load_weemoji_path.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace wee_slack.py --subst-var out
+  '';
+
+  passthru.scripts = [ "wee_slack.py" ];
+
+  installPhase = ''
+    mkdir -p $out/share
+    cp wee_slack.py $out/share/wee_slack.py
+    install -D -m 0444 weemoji.json $out/share/wee-slack/weemoji.json
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/wee-slack/wee-slack";
+    license = licenses.mit;
+    maintainers = with maintainers; [ willibutz ];
+    description = ''
+      A WeeChat plugin for Slack.com. Synchronizes read markers, provides typing notification, search, etc..
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/wee-slack/libpath.patch b/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/wee-slack/libpath.patch
new file mode 100644
index 000000000000..a6e38c16fb14
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/wee-slack/libpath.patch
@@ -0,0 +1,13 @@
+diff --git a/wee_slack.py b/wee_slack.py
+index e4716b4..f673b7c 100644
+--- a/wee_slack.py
++++ b/wee_slack.py
+@@ -31,6 +31,8 @@ import string
+ # See https://github.com/numpy/numpy/issues/11925
+ sys.modules["numpy"] = None
+ 
++sys.path.append('@env@')
++
+ from websocket import (  # noqa: E402
+     ABNF,
+     create_connection,
diff --git a/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/wee-slack/load_weemoji_path.patch b/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/wee-slack/load_weemoji_path.patch
new file mode 100644
index 000000000000..1e97dc32fa65
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/wee-slack/load_weemoji_path.patch
@@ -0,0 +1,25 @@
+diff --git a/wee_slack.py b/wee_slack.py
+index e4716b4..ffd122d 100644
+--- a/wee_slack.py
++++ b/wee_slack.py
+@@ -6092,19 +6092,7 @@ def create_slack_debug_buffer():
+ 
+ def load_emoji():
+     try:
+-        weechat_dir = w.info_get("weechat_data_dir", "") or w.info_get(
+-            "weechat_dir", ""
+-        )
+-        weechat_sharedir = w.info_get("weechat_sharedir", "")
+-        local_weemoji, global_weemoji = (
+-            "{}/weemoji.json".format(path) for path in (weechat_dir, weechat_sharedir)
+-        )
+-        path = (
+-            global_weemoji
+-            if os.path.exists(global_weemoji) and not os.path.exists(local_weemoji)
+-            else local_weemoji
+-        )
+-        with open(path, "r") as ef:
++        with open("@out@/share/wee-slack/weemoji.json", "r") as ef:
+             emojis = json.loads(ef.read())
+             if "emoji" in emojis:
+                 print_error(
diff --git a/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/weechat-autosort/default.nix b/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/weechat-autosort/default.nix
new file mode 100644
index 000000000000..c20d8f0a8079
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/weechat-autosort/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "weechat-autosort";
+  version = "3.9";
+
+  src = fetchFromGitHub {
+    owner = "de-vri-es";
+    repo = pname;
+    rev = "d62fa8633015ebc2676060fcdae88c402977be46";
+    sha256 = "sha256-doYDRIWiuHam2i3r3J3BZuWEhopoN4jms/xPXGyypok=";
+  };
+
+  passthru.scripts = [ "autosort.py" ];
+  installPhase = ''
+    install -D autosort.py $out/share/autosort.py
+  '';
+
+  meta = with lib; {
+    description = "Autosort is a weechat script to automatically or manually keep your buffers sorted";
+    homepage = "https://github.com/de-vri-es/weechat-autosort";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ emily flokli ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/weechat-go/default.nix b/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/weechat-go/default.nix
new file mode 100644
index 000000000000..623b2570b475
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/weechat-go/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchurl, weechat }:
+
+stdenv.mkDerivation {
+  pname = "weechat-go";
+  version = "2.7";
+
+  src = fetchurl {
+    url = "https://github.com/weechat/scripts/raw/414cff3ee605ba204b607742430a21443c035b08/python/go.py";
+    sha256 = "0bnbfpj1qg4yzwbikh1aw5ajc8l44lkb0y0m6mz8grpf5bxk5cwm";
+  };
+
+  dontUnpack = true;
+
+  passthru.scripts = [ "go.py" ];
+
+  installPhase = ''
+    install -D $src $out/share/go.py
+  '';
+
+  meta = with lib; {
+    inherit (weechat.meta) platforms;
+    description = "go.py is a weechat script to quickly jump to different buffers";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ govanify ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/weechat-grep/default.nix b/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/weechat-grep/default.nix
new file mode 100644
index 000000000000..efc575bd3e29
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/weechat-grep/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "weechat-grep";
+  version = "0.8.5";
+
+  src = fetchurl {
+    url = "https://github.com/weechat/scripts/raw/5ee93d56f371c829d2798a5446a14292c180f70b/python/grep.py";
+    sha256 = "sha256-EVcoxjTTjXOYD8DppD+IULxpKerEdolmlgphrulFGC0=";
+  };
+
+  dontUnpack = true;
+
+  installPhase = ''
+    mkdir -p $out/share
+    cp $src $out/share/grep.py
+  '';
+
+  passthru = {
+    scripts = [ "grep.py" ];
+  };
+
+  meta = with lib; {
+    description = "Search in Weechat buffers and logs (for Weechat 0.3.*)";
+    homepage = "https://github.com/weechat/scripts/blob/master/python/grep.py";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ flokli ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/weechat-matrix-bridge/default.nix b/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/weechat-matrix-bridge/default.nix
new file mode 100644
index 000000000000..282603f99248
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/weechat-matrix-bridge/default.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv, curl, fetchFromGitHub, cjson, olm, luaffi }:
+
+stdenv.mkDerivation {
+  pname = "weechat-matrix-bridge";
+  version = "unstable-2018-11-19";
+  src = fetchFromGitHub {
+    owner = "torhve";
+    repo = "weechat-matrix-protocol-script";
+    rev = "8d32e90d864a8f3f09ecc2857cd5dd6e39a8c3f7";
+    sha256 = "0qqd6qmkrdc0r3rnl53c3yp93fbcz7d3mdw3vq5gmdqxyym4s9lj";
+  };
+
+  patches = [
+    ./library-path.patch
+  ];
+
+  buildInputs = [ curl cjson olm luaffi ];
+
+  postPatch = ''
+    substituteInPlace matrix.lua \
+      --replace "/usr/bin/curl" "${curl}/bin/curl" \
+      --replace "__NIX_LIB_PATH__" "$out/lib/?.so" \
+      --replace "__NIX_OLM_PATH__" "$out/share/?.lua"
+
+    substituteInPlace olm.lua \
+      --replace "__NIX_LIB_PATH__" "$out/lib/?.so"
+  '';
+
+  passthru.scripts = [ "matrix.lua" ];
+
+  installPhase = ''
+    mkdir -p $out/{share,lib}
+
+    cp {matrix.lua,olm.lua} $out/share
+    cp ${cjson}/lib/lua/${cjson.lua.luaversion}/cjson.so $out/lib/cjson.so
+    cp ${olm}/lib/libolm.so $out/lib/libolm.so
+    cp ${luaffi}/lib/lua/${luaffi.lua.luaversion}/ffi.so $out/lib/ffi.so
+  '';
+
+  meta = with lib; {
+    description = "A WeeChat script in Lua that implements the matrix.org chat protocol";
+    homepage = "https://github.com/torhve/weechat-matrix-protocol-script";
+    maintainers = with maintainers; [ ];
+    license = licenses.mit; # see https://github.com/torhve/weechat-matrix-protocol-script/blob/0052e7275ae149dc5241226391c9b1889ecc3c6b/matrix.lua#L53
+    platforms = platforms.unix;
+
+    # As of 2019-06-30, all of the dependencies are available on macOS but the
+    # package itself does not build.
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/weechat-matrix-bridge/library-path.patch b/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/weechat-matrix-bridge/library-path.patch
new file mode 100644
index 000000000000..d9945c2993b7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/weechat-matrix-bridge/library-path.patch
@@ -0,0 +1,28 @@
+diff --git a/matrix.lua b/matrix.lua
+index b79f500..32b37a2 100644
+--- a/matrix.lua
++++ b/matrix.lua
+@@ -43,6 +43,9 @@ This script maps this as follows:
+ 
+ ]]
+ 
++package.cpath = package.cpath .. ";__NIX_LIB_PATH__"
++package.path = package.path .. ";__NIX_OLM_PATH__"
++
+ local json = require 'cjson' -- apt-get install lua-cjson
+ local olmstatus, olm = pcall(require, 'olm') -- LuaJIT olm FFI binding ln -s ~/olm/olm.lua /usr/local/share/lua/5.1
+ local w = weechat
+diff --git a/olm.lua b/olm.lua
+index 114649c..4828371 100644
+--- a/olm.lua
++++ b/olm.lua
+@@ -17,6 +17,9 @@
+  * limitations under the License.
+  */
+ --]]
++
++package.cpath = package.cpath .. ";__NIX_LIB_PATH__"
++
+ local ffi = require'ffi'
+ 
+ ffi.cdef[[
diff --git a/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/weechat-matrix/default.nix b/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/weechat-matrix/default.nix
new file mode 100644
index 000000000000..da599367af3a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/weechat-matrix/default.nix
@@ -0,0 +1,94 @@
+{ buildPythonPackage
+, lib
+, python
+, fetchFromGitHub
+, fetchpatch
+, pyopenssl
+, webcolors
+, future
+, atomicwrites
+, attrs
+, logbook
+, pygments
+, matrix-nio
+, aiohttp
+, requests
+}:
+
+let
+  scriptPython = python.withPackages (ps: with ps; [
+    aiohttp
+    requests
+    python-magic
+  ]);
+
+  version = "0.3.0";
+in buildPythonPackage {
+  pname = "weechat-matrix";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "poljar";
+    repo = "weechat-matrix";
+    rev = version;
+    hash = "sha256-o4kgneszVLENG167nWnk2FxM+PsMzi+PSyMUMIktZcc=";
+  };
+
+  patches = fetchpatch {
+    url = "https://patch-diff.githubusercontent.com/raw/poljar/weechat-matrix/pull/309.patch";
+    sha256 = "sha256-Grdht+TOFvCYRpL7uhPivqL7YzLoNVF3iQNHgbv1Te0=";
+  };
+
+  propagatedBuildInputs = [
+    pyopenssl
+    webcolors
+    future
+    atomicwrites
+    attrs
+    logbook
+    pygments
+    matrix-nio
+    aiohttp
+    requests
+  ] ++ matrix-nio.optional-dependencies.e2e;
+
+  passthru.scripts = [ "matrix.py" ];
+
+  dontBuild = true;
+  doCheck = false;
+
+  format = "other";
+
+  installPhase = ''
+    mkdir -p $out/share $out/bin
+    cp main.py $out/share/matrix.py
+
+    cp contrib/matrix_upload.py $out/bin/matrix_upload
+    cp contrib/matrix_decrypt.py $out/bin/matrix_decrypt
+    cp contrib/matrix_sso_helper.py $out/bin/matrix_sso_helper
+    substituteInPlace $out/bin/matrix_upload \
+      --replace '/usr/bin/env -S python3' '${scriptPython}/bin/python'
+    substituteInPlace $out/bin/matrix_sso_helper \
+      --replace '/usr/bin/env -S python3' '${scriptPython}/bin/python'
+    substituteInPlace $out/bin/matrix_decrypt \
+      --replace '/usr/bin/env python3' '${scriptPython}/bin/python'
+
+    mkdir -p $out/${python.sitePackages}
+    cp -r matrix $out/${python.sitePackages}/matrix
+  '';
+
+  dontPatchShebangs = true;
+  postFixup = ''
+    addToSearchPath program_PYTHONPATH $out/${python.sitePackages}
+    patchPythonScript $out/share/matrix.py
+    substituteInPlace $out/${python.sitePackages}/matrix/server.py --replace \"matrix_sso_helper\" \"$out/bin/matrix_sso_helper\"
+  '';
+
+  meta = with lib; {
+    description = "A Python plugin for Weechat that lets Weechat communicate over the Matrix protocol";
+    homepage = "https://github.com/poljar/weechat-matrix";
+    license = licenses.isc;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ tilpner emily ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/weechat-notify-send/default.nix b/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/weechat-notify-send/default.nix
new file mode 100644
index 000000000000..78f9fc082e31
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/weechat-notify-send/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, libnotify }:
+
+stdenv.mkDerivation rec {
+  pname = "weechat-notify-send";
+  version = "0.9";
+
+  src = fetchFromGitHub {
+    owner = "s3rvac";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1693b7axm9ls5p7hm6kq6avddsisi491khr5irvswr5lpizvys6a";
+  };
+
+  passthru.scripts = [ "notify_send.py" ];
+
+  dontBuild = true;
+  doCheck = false;
+
+  installPhase = ''
+    install -D notify_send.py $out/share/notify_send.py
+    substituteInPlace $out/share/notify_send.py \
+      --replace "'notify-send'" "'${libnotify}/bin/notify-send'"
+  '';
+
+  meta = with lib; {
+    description = "A WeeChat script that sends highlight and message notifications through notify-send";
+    homepage = "https://github.com/s3rvac/weechat-notify-send";
+    license = licenses.mit;
+    maintainers = with maintainers; [ tobim ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/weechat-otr/default.nix b/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/weechat-otr/default.nix
new file mode 100644
index 000000000000..fd5f376ad263
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/weechat-otr/default.nix
@@ -0,0 +1,77 @@
+{ lib, stdenv, substituteAll, buildEnv, fetchgit, fetchFromGitHub, python3Packages, gmp }:
+
+let
+  # pure-python-otr (potr) requires an older version of pycrypto, which is
+  # not compatible with pycryptodome. Therefore, the latest patched version
+  # of pycrypto will be fetched from the Debian project.
+  # https://security-tracker.debian.org/tracker/source-package/python-crypto
+
+  pycrypto = python3Packages.buildPythonPackage rec {
+    pname = "pycrypto";
+    version = "2.6.1-13.1";
+
+    src = fetchgit {
+      url = "https://salsa.debian.org/sramacher/python-crypto.git";
+      rev = "debian/${version}";
+      sha256 = "1mahqmlgilgk0rn5hfkhza7kscfm7agdakkb6rqnif9g0qp3s52f";
+    };
+
+    postPatch = ''
+      for p in debian/patches/*.patch; do
+        patch -p1 < "$p"
+      done
+    '';
+
+    buildInputs = [ gmp ];
+
+    # Tests are relying on old Python 2 modules.
+    doCheck = false;
+
+    preConfigure = ''
+      sed -i 's,/usr/include,/no-such-dir,' configure
+      sed -i "s!,'/usr/include/'!!" setup.py
+    '';
+  };
+
+  potr = python3Packages.potr.overridePythonAttrs (oldAttrs: {
+    propagatedBuildInputs = [ pycrypto ];
+  });
+in stdenv.mkDerivation rec {
+  pname = "weechat-otr";
+  version = "1.9.2";
+
+  src = fetchFromGitHub {
+    repo = pname;
+    owner = "mmb";
+    rev = "v${version}";
+    sha256 = "1lngv98y6883vk8z2628cl4d5y8jxy39w8245gjdvshl8g18k5s2";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./libpath.patch;
+      env = "${buildEnv {
+        name = "weechat-otr-env";
+        paths = [ potr pycrypto ];
+      }}/${python3Packages.python.sitePackages}";
+    })
+  ];
+
+  passthru.scripts = [ "weechat_otr.py" ];
+
+  installPhase = ''
+    mkdir -p $out/share
+    cp weechat_otr.py $out/share/weechat_otr.py
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/mmb/weechat-otr";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ oxzi ];
+    description = "WeeChat script for Off-the-Record messaging";
+    knownVulnerabilities = [
+      "There is no upstream release since 2018-03."
+      "Utilizes deprecated and vulnerable pycrypto library with Debian patches from 2020-04."
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/weechat-otr/libpath.patch b/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/weechat-otr/libpath.patch
new file mode 100644
index 000000000000..a7b77ed9b602
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/weechat-otr/libpath.patch
@@ -0,0 +1,13 @@
+diff --git a/weechat_otr.py b/weechat_otr.py
+index 0ccfb35..c42bebf 100644
+--- a/weechat_otr.py
++++ b/weechat_otr.py
+@@ -41,6 +41,8 @@ import shlex
+ import shutil
+ import sys
+ 
++sys.path.append('@env@')
++
+ import potr
+ import weechat
+ 
diff --git a/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/zncplayback/default.nix b/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/zncplayback/default.nix
new file mode 100644
index 000000000000..704e909282d4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/weechat/scripts/zncplayback/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation {
+  pname = "weechat-zncplayback";
+  version = "0.2.1";
+
+  src = fetchurl {
+    url = "https://github.com/weechat/scripts/raw/bcc9643136addd2cd68ac957dd64e336e4f88aa1/python/zncplayback.py";
+    sha256 = "1k32p6naxg40g664ip48zvm61xza7l9az3v3rawmjw97i0mwz7y3";
+  };
+
+  dontUnpack = true;
+
+  installPhase = ''
+    mkdir -p $out/share
+    cp $src $out/share/zncplayback.py
+  '';
+
+  passthru = {
+    scripts = [ "zncplayback.py" ];
+  };
+
+  meta = with lib; {
+    description = "Add support for the ZNC Playback module";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ qyliss ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/networking/irc/weechat/wrapper.nix b/nixpkgs/pkgs/applications/networking/irc/weechat/wrapper.nix
new file mode 100644
index 000000000000..353b7ffd6fda
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/weechat/wrapper.nix
@@ -0,0 +1,97 @@
+{ lib, runCommand, writeScriptBin, buildEnv
+, python3Packages, perlPackages, runtimeShell
+}:
+
+weechat:
+
+let
+  wrapper = {
+    installManPages ? true
+  , configure ? { availablePlugins, ... }: {
+      # Do not include PHP by default, because it bloats the closure, doesn't
+      # build on Darwin, and there are no official PHP scripts.
+      plugins = builtins.attrValues (builtins.removeAttrs availablePlugins [ "php" ]);
+    }
+  }:
+
+  let
+    perlInterpreter = perlPackages.perl;
+    availablePlugins = let
+        simplePlugin = name: {pluginFile = "${weechat.${name}}/lib/weechat/plugins/${name}.so";};
+      in rec {
+        python = (simplePlugin "python") // {
+          extraEnv = ''
+            export PATH="${python3Packages.python}/bin:$PATH"
+          '';
+          withPackages = pkgsFun: (python // {
+            extraEnv = ''
+              ${python.extraEnv}
+              export PYTHONHOME="${python3Packages.python.withPackages pkgsFun}"
+            '';
+          });
+        };
+        perl = (simplePlugin "perl") // {
+          extraEnv = ''
+            export PATH="${perlInterpreter}/bin:$PATH"
+          '';
+          withPackages = pkgsFun: (perl // {
+            extraEnv = ''
+              ${perl.extraEnv}
+              export PERL5LIB=${perlPackages.makeFullPerlPath (pkgsFun perlPackages)}
+            '';
+          });
+        };
+        tcl = simplePlugin "tcl";
+        ruby = simplePlugin "ruby";
+        guile = simplePlugin "guile";
+        lua = simplePlugin "lua";
+        php = simplePlugin "php";
+      };
+
+    config = configure { inherit availablePlugins; };
+
+    plugins = config.plugins or (builtins.attrValues availablePlugins);
+
+    pluginsDir = runCommand "weechat-plugins" {} ''
+      mkdir -p $out/plugins
+      for plugin in ${lib.concatMapStringsSep " " (p: p.pluginFile) plugins} ; do
+        ln -s $plugin $out/plugins
+      done
+    '';
+
+    init = let
+      init = builtins.replaceStrings [ "\n" ] [ ";" ] (config.init or "");
+
+      mkScript = drv: lib.forEach drv.scripts (script: "/script load ${drv}/share/${script}");
+
+      scripts = builtins.concatStringsSep ";" (lib.foldl (scripts: drv: scripts ++ mkScript drv)
+        [ ] (config.scripts or []));
+    in "${scripts};${init}";
+
+    mkWeechat = bin: (writeScriptBin bin ''
+      #!${runtimeShell}
+      export WEECHAT_EXTRA_LIBDIR=${pluginsDir}
+      ${lib.concatMapStringsSep "\n" (p: lib.optionalString (p ? extraEnv) p.extraEnv) plugins}
+      exec ${weechat}/bin/${bin} "$@" --run-command ${lib.escapeShellArg init}
+    '') // {
+      inherit (weechat) name man;
+      unwrapped = weechat;
+      outputs = [ "out" "man" ];
+    };
+  in buildEnv {
+    name = "weechat-bin-env-${weechat.version}";
+    extraOutputsToInstall = lib.optionals installManPages [ "man" ];
+    paths = [
+      (mkWeechat "weechat")
+      (mkWeechat "weechat-headless")
+      (runCommand "weechat-out-except-bin" { } ''
+        mkdir $out
+        ln -sf ${weechat}/include $out/include
+        ln -sf ${weechat}/lib $out/lib
+        ln -sf ${weechat}/share $out/share
+      '')
+    ];
+    meta = builtins.removeAttrs weechat.meta [ "outputsToInstall" ];
+  };
+
+in lib.makeOverridable wrapper
diff --git a/nixpkgs/pkgs/applications/networking/irc/wraith/configure.patch b/nixpkgs/pkgs/applications/networking/irc/wraith/configure.patch
new file mode 100644
index 000000000000..2ecba77920eb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/wraith/configure.patch
@@ -0,0 +1,58 @@
+--- a/configure
++++ b/configure
+@@ -6143,53 +6143,8 @@ rm -f confcache
+ #AC_CHECK_HEADERS(openssl/ssl.h openssl/crypto.h)
+ #AC_CHECK_HEADERS(zlib.h)
+ 
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for path to OpenSSL" >&5
+-$as_echo_n "checking for path to OpenSSL... " >&6; }
+-
+-
+-# Check whether --with-openssl was given.
+-if test "${with_openssl+set}" = set; then :
+-  withval=$with_openssl; with_openssl_path=$withval
+-else
+-  with_openssl_path=auto
+-fi
+-
+-
+-
+-cf_openssl_basedir=""
+-if test "$with_openssl_path" != "auto"; then
+-    cf_openssl_basedir="`echo ${with_openssl_path} | sed 's/\/$//'`"
+-else
+-    for dirs in /usr/local/ssl /usr/pkg /usr/local /usr/local/openssl; do
+-    if test -f "${dirs}/include/openssl/opensslv.h" && test -f "${dirs}/lib/libssl.so"; then
+-      cf_openssl_basedir="${dirs}"
+-      break
+-    fi
+-  done
+-  unset dirs
+-fi
+-if test ! -z "$cf_openssl_basedir"; then
+-  if test -f "${cf_openssl_basedir}/include/openssl/opensslv.h" && test -f "${cf_openssl_basedir}/lib/libssl.so"; then
+-    SSL_INCLUDES="-I${cf_openssl_basedir}/include"
+-    SSL_LIBS="-L${cf_openssl_basedir}/lib"
+-  else
+-        cf_openssl_basedir=""
+-  fi
+-else
+-    if test -f "/usr/include/openssl/opensslv.h" ; then
+-    cf_openssl_basedir="/usr"
+-  fi
+-fi
+-
+-if test ! -z "$cf_openssl_basedir"; then
+-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cf_openssl_basedir" >&5
+-$as_echo "$cf_openssl_basedir" >&6; }
+-else
+-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
+-$as_echo "not found" >&6; }
+-  as_fn_error 1 "OpenSSL is required." "$LINENO" 5
+-fi
+-unset cf_openssl_basedir
++SSL_INCLUDES="-I@openssl.dev@/include"
++SSL_LIBS="-L@openssl-lib@/lib"
+ 
+ save_CXX="$CXX"
+ CXX="$CXX $SSL_INCLUDES"
diff --git a/nixpkgs/pkgs/applications/networking/irc/wraith/default.nix b/nixpkgs/pkgs/applications/networking/irc/wraith/default.nix
new file mode 100644
index 000000000000..b16efb03655f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/wraith/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchurl, openssl }:
+
+stdenv.mkDerivation rec {
+  pname = "wraith";
+  version = "1.4.10";
+  src = fetchurl {
+    url = "mirror://sourceforge/wraithbotpack/wraith-v${version}.tar.gz";
+    sha256 = "1h8159g6wh1hi69cnhqkgwwwa95fa6z1zrzjl219mynbf6vjjzkw";
+  };
+  hardeningDisable = [ "format" ];
+  buildInputs = [ openssl ];
+  patches = [ ./configure.patch ./dlopen.patch ];
+  postPatch = ''
+    substituteInPlace configure        --subst-var-by openssl.dev ${openssl.dev} \
+                                       --subst-var-by openssl-lib ${lib.getLib openssl}
+    substituteInPlace src/libssl.cc    --subst-var-by openssl ${lib.getLib openssl}
+    substituteInPlace src/libcrypto.cc --subst-var-by openssl ${lib.getLib openssl}
+  '';
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -a wraith $out/bin/wraith
+    ln -s wraith $out/bin/hub
+  '';
+
+  meta = with lib; {
+    broken = (stdenv.isLinux && stdenv.isAarch64);
+    description = "An IRC channel management bot written purely in C/C++";
+    longDescription = ''
+      Wraith is an IRC channel management bot written purely in C/C++. It has
+      been in development since late 2003. It is based on Eggdrop 1.6.12 but has
+      since evolved into something much different at its core. TCL and loadable
+      modules are currently not supported.
+
+      Maintainer's Notes:
+      Copy the binary out of the store before running it with the -C option to
+      configure it. See https://github.com/wraith/wraith/wiki/GettingStarted .
+
+      The binary will not run when moved onto non-NixOS systems; use patchelf
+      to fix its runtime dependenices.
+    '';
+    homepage = "https://wraith.botpack.net/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ elitak ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/irc/wraith/dlopen.patch b/nixpkgs/pkgs/applications/networking/irc/wraith/dlopen.patch
new file mode 100644
index 000000000000..5bf11eb72692
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/irc/wraith/dlopen.patch
@@ -0,0 +1,48 @@
+diff --git a/src/libcrypto.cc b/src/libcrypto.cc
+index 5139f66..517103f 100644
+--- a/src/libcrypto.cc
++++ b/src/libcrypto.cc
+@@ -100,17 +100,9 @@ int load_libcrypto() {
+   }
+ 
+   sdprintf("Loading libcrypto");
++  dlerror(); // Clear Errors
++  libcrypto_handle = dlopen("@openssl@/lib/libcrypto.so", RTLD_LAZY|RTLD_GLOBAL);
+ 
+-  bd::Array<bd::String> libs_list(bd::String("libcrypto.so." SHLIB_VERSION_NUMBER " libcrypto.so libcrypto.so.1.1 libcrypto.so.1.0.0 libcrypto.so.0.9.8 libcrypto.so.10 libcrypto.so.9 libcrypto.so.8 libcrypto.so.7 libcrypto.so.6").split(' '));
+-
+-  for (size_t i = 0; i < libs_list.length(); ++i) {
+-    dlerror(); // Clear Errors
+-    libcrypto_handle = dlopen(bd::String(libs_list[i]).c_str(), RTLD_LAZY|RTLD_GLOBAL);
+-    if (libcrypto_handle) {
+-      sdprintf("Found libcrypto: %s", bd::String(libs_list[i]).c_str());
+-      break;
+-    }
+-  }
+   if (!libcrypto_handle) {
+     fprintf(stderr, STR("Unable to find libcrypto\n"));
+     return(1);
+diff --git a/src/libssl.cc b/src/libssl.cc
+index 6010abc..86e29fc 100644
+--- a/src/libssl.cc
++++ b/src/libssl.cc
+@@ -78,17 +78,9 @@ int load_libssl() {
+   }
+ 
+   sdprintf("Loading libssl");
++  dlerror(); // Clear Errors
++  libssl_handle = dlopen("@openssl@/lib/libssl.so", RTLD_LAZY);
+ 
+-  bd::Array<bd::String> libs_list(bd::String("libssl.so." SHLIB_VERSION_NUMBER " libssl.so libssl.so.1.1 libssl.so.1.0.0 libssl.so.0.9.8 libssl.so.10 libssl.so.9 libssl.so.8 libssl.so.7 libssl.so.6").split(' '));
+-
+-  for (size_t i = 0; i < libs_list.length(); ++i) {
+-    dlerror(); // Clear Errors
+-    libssl_handle = dlopen(bd::String(libs_list[i]).c_str(), RTLD_LAZY);
+-    if (libssl_handle) {
+-      sdprintf("Found libssl: %s", bd::String(libs_list[i]).c_str());
+-      break;
+-    }
+-  }
+   if (!libssl_handle) {
+     fprintf(stderr, STR("Unable to find libssl\n"));
+     return(1);
diff --git a/nixpkgs/pkgs/applications/networking/iroh/default.nix b/nixpkgs/pkgs/applications/networking/iroh/default.nix
new file mode 100644
index 000000000000..a260bca6a55d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/iroh/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "iroh";
+  version = "0.5.1";
+
+  src = fetchFromGitHub {
+    owner = "n0-computer";
+    repo = pname;
+    rev = "${pname}-v${version}";
+    hash = "sha256-p1OvXso5szo8ZCnCTKgDzCEMJgiePXQMhVYOkWVZrbE=";
+  };
+
+  cargoHash = "sha256-QqMBEYaIQ6PqO7w7Yd1jVr0zHARsVaJtZzWytmDksZQ=";
+
+  buildInputs = lib.optionals stdenv.isDarwin (
+    with darwin.apple_sdk.frameworks; [
+      Security
+      SystemConfiguration
+    ]
+  );
+
+  # Some tests require network access which is not available in nix build sandbox.
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Efficient IPFS for the whole world right now";
+    homepage = "https://iroh.computer";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ cameronfyfe ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/jmeter/default.nix b/nixpkgs/pkgs/applications/networking/jmeter/default.nix
new file mode 100644
index 000000000000..474a775e7c2f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/jmeter/default.nix
@@ -0,0 +1,60 @@
+{ fetchurl, lib, stdenv, jre, makeWrapper, coreutils }:
+
+stdenv.mkDerivation rec {
+  pname = "jmeter";
+  version = "5.6.2";
+  src = fetchurl {
+    url = "https://archive.apache.org/dist/jmeter/binaries/apache-${pname}-${version}.tgz";
+    sha256 = "sha256-CGltO2J40nI0LRhgniFn7yjS0dX3G1koCcALvVfMjvA=";
+  };
+
+  nativeBuildInputs = [ makeWrapper jre ];
+
+  installPhase = ''
+    mkdir $out
+
+    rm bin/*.bat bin/*.cmd
+
+    cp -R * $out/
+
+    substituteInPlace $out/bin/create-rmi-keystore.sh --replace \
+      "keytool -genkey" \
+      "${jre}/lib/openjdk/jre/bin/keytool -genkey"
+
+    # Prefix some scripts with jmeter to avoid clobbering the namespace
+    for i in heapdump.sh mirror-server mirror-server.sh shutdown.sh stoptest.sh create-rmi-keystore.sh; do
+      mv $out/bin/$i $out/bin/jmeter-$i
+      wrapProgram $out/bin/jmeter-$i \
+        --prefix PATH : "${jre}/bin"
+    done
+
+    wrapProgram $out/bin/jmeter --set JAVA_HOME "${jre}"
+    wrapProgram $out/bin/jmeter.sh --set JAVA_HOME "${jre}"
+  '';
+
+  doInstallCheck = false; #NoClassDefFoundError: org/apache/logging/log4j/Level for tests
+
+  nativeCheckInputs = [ coreutils ];
+
+  installCheckPhase = ''
+    $out/bin/jmeter --version 2>&1 | grep -q "${version}"
+    $out/bin/jmeter-heapdump.sh > /dev/null
+    $out/bin/jmeter-shutdown.sh > /dev/null
+    $out/bin/jmeter-stoptest.sh > /dev/null
+    timeout --kill=1s 1s $out/bin/jmeter-mirror-server.sh || test "$?" = "124"
+  '';
+
+  meta = with lib; {
+    description = "A 100% pure Java desktop application designed to load test functional behavior and measure performance";
+    longDescription = ''
+      The Apache JMeter desktop application is open source software, a 100%
+      pure Java application designed to load test functional behavior and
+      measure performance. It was originally designed for testing Web
+      Applications but has since expanded to other test functions.
+    '';
+    license = licenses.asl20;
+    maintainers = [ maintainers.bryanasdev000 ];
+    priority = 1;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/jnetmap/default.nix b/nixpkgs/pkgs/applications/networking/jnetmap/default.nix
new file mode 100644
index 000000000000..8aea49decb7e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/jnetmap/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchurl, jre, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "jnetmap";
+  version = "0.5.5";
+  versionSuffix = "-703";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/jnetmap/jNetMap%20${version}/jNetMap-${version}${versionSuffix}.jar";
+    sha256 = "sha256-e4Ssm2Sq/v1YZ7ZudAqgQ7Cz2ffwWbSmLFoKhaZvTPg=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ jre ];
+
+  dontUnpack = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p "$out/bin"
+    mkdir -p "$out/lib"
+
+    cp "${src}" "$out/lib/jnetmap.jar"
+    makeWrapper "${jre}/bin/java" "$out/bin/jnetmap" \
+        --add-flags "-jar \"$out/lib/jnetmap.jar\""
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Graphical network monitoring and documentation tool";
+    homepage = "http://www.rakudave.ch/jnetmap/";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.gpl3Plus;
+    # Upstream supports macOS and Windows too.
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/juju/default.nix b/nixpkgs/pkgs/applications/networking/juju/default.nix
new file mode 100644
index 000000000000..32f5aa935950
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/juju/default.nix
@@ -0,0 +1,29 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "juju";
+  version = "3.2.2";
+
+  src = fetchFromGitHub {
+    owner = "juju";
+    repo = "juju";
+    rev = "juju-${version}";
+    sha256 = "sha256-ZmMOQCKQWtzB2O6CNZTRhhj7gkpRRXY9ILN2KdSQoWk=";
+  };
+
+  vendorHash = "sha256-rqf5nAXwcW6lm7sidEcxMqatT4KPju4Seo1/Awse5Zs=";
+
+  # Disable tests because it attempts to use a mongodb instance
+  doCheck = false;
+
+  subPackages = [
+    "cmd/juju"
+  ];
+
+  meta = with lib; {
+    description = "Open source modelling tool for operating software in the cloud";
+    homepage = "https://juju.is";
+    license = licenses.mit;
+    maintainers = with maintainers; [ citadelcore ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/jxplorer/default.nix b/nixpkgs/pkgs/applications/networking/jxplorer/default.nix
new file mode 100644
index 000000000000..7f1a46b37dab
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/jxplorer/default.nix
@@ -0,0 +1,50 @@
+{ lib, stdenv, fetchurl, makeDesktopItem, ant, jdk8, copyDesktopItems, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "jxplorer";
+  version = "3.3.1.2";
+
+  src = fetchurl {
+    url = "https://github.com/pegacat/jxplorer/releases/download/v${version}/jxplorer-${version}-project.tar.bz2";
+    hash = "sha256-/lWkavH51OqNFSLpgT+4WcQcfW3WvnnOkB03jB7bE/s=";
+  };
+
+  nativeBuildInputs = [
+    copyDesktopItems
+    makeWrapper
+  ];
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "JXplorer";
+      exec = "jxplorer";
+      comment = "A Java Ldap Browser";
+      desktopName = "JXplorer";
+      genericName = "Java Ldap Browser";
+      icon = "jxplorer";
+    })
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    install -d "$out/opt/jxplorer" "$out/bin" "$out/share/pixmaps"
+    cp -r ./. "$out/opt/jxplorer"
+    install -Dm644 images/JX128.png "$out/share/pixmaps/jxplorer.png"
+    runHook postInstall
+  '';
+
+  postFixup = ''
+    chmod +x $out/opt/jxplorer/jxplorer.sh
+    makeWrapper $out/opt/jxplorer/jxplorer.sh $out/bin/jxplorer \
+      --chdir $out/opt/jxplorer \
+      --set JAVA_HOME ${jdk8}
+  '';
+
+  meta = with lib; {
+    description = "A Java Ldap Browser";
+    homepage    = "https://sourceforge.net/projects/jxplorer/";
+    license     = lib.licenses.caossl;
+    maintainers = with maintainers; [ benwbooth ];
+    platforms   = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/kubo-migrator/all-migrations.nix b/nixpkgs/pkgs/applications/networking/kubo-migrator/all-migrations.nix
new file mode 100644
index 000000000000..39a9f141c7a4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/kubo-migrator/all-migrations.nix
@@ -0,0 +1,80 @@
+{ lib
+, stdenv
+, symlinkJoin
+, buildGoModule
+, kubo-migrator-unwrapped
+}:
+
+# This package contains all the individual migrations in the bin directory.
+# This is used by fs-repo-migrations and could also be used by Kubo itself
+# when starting it like this: ipfs daemon --migrate
+
+let
+  fs-repo-common = pname: version: buildGoModule {
+    inherit pname version;
+    inherit (kubo-migrator-unwrapped) src;
+    sourceRoot = "${kubo-migrator-unwrapped.src.name}/${pname}";
+    vendorSha256 = null;
+    # Fix build on Go 1.17 and later: panic: qtls.ClientHelloInfo doesn't match
+    # See https://github.com/ipfs/fs-repo-migrations/pull/163
+    postPatch = lib.optionalString (lib.elem pname [ "fs-repo-10-to-11" "fs-repo-11-to-12" ]) ''
+      substituteInPlace 'vendor/github.com/marten-seemann/qtls-go1-15/common.go' \
+        --replace \
+          '"container/list"' \
+          '"container/list"
+          "context"' \
+        --replace \
+          'config *Config' \
+          'config *Config
+          ctx context.Context'
+    '';
+    doCheck = false;
+    meta = kubo-migrator-unwrapped.meta // {
+      mainProgram = pname;
+      description = "Individual migration for the filesystem repository of Kubo clients";
+    };
+  };
+
+  # Concatenation of the latest repo version and the version of that migration
+  version = "14.1.0.0";
+
+  fs-repo-13-to-14 = fs-repo-common "fs-repo-13-to-14" "1.0.0";
+  fs-repo-12-to-13 = fs-repo-common "fs-repo-12-to-13" "1.0.0";
+  fs-repo-11-to-12 = fs-repo-common "fs-repo-11-to-12" "1.0.2";
+  fs-repo-10-to-11 = fs-repo-common "fs-repo-10-to-11" "1.0.1";
+  fs-repo-9-to-10  = fs-repo-common "fs-repo-9-to-10"  "1.0.1";
+  fs-repo-8-to-9   = fs-repo-common "fs-repo-8-to-9"   "1.0.1";
+  fs-repo-7-to-8   = fs-repo-common "fs-repo-7-to-8"   "1.0.1";
+  fs-repo-6-to-7   = fs-repo-common "fs-repo-6-to-7"   "1.0.1";
+  fs-repo-5-to-6   = fs-repo-common "fs-repo-5-to-6"   "1.0.1";
+  fs-repo-4-to-5   = fs-repo-common "fs-repo-4-to-5"   "1.0.1";
+  fs-repo-3-to-4   = fs-repo-common "fs-repo-3-to-4"   "1.0.1";
+  fs-repo-2-to-3   = fs-repo-common "fs-repo-2-to-3"   "1.0.1";
+  fs-repo-1-to-2   = fs-repo-common "fs-repo-1-to-2"   "1.0.1";
+  fs-repo-0-to-1   = fs-repo-common "fs-repo-0-to-1"   "1.0.1";
+
+  all-migrations = [
+    fs-repo-13-to-14
+    fs-repo-12-to-13
+    fs-repo-11-to-12
+    fs-repo-10-to-11
+    fs-repo-9-to-10
+    fs-repo-8-to-9
+    fs-repo-7-to-8
+  ] ++ lib.optional (!stdenv.isDarwin) # I didn't manage to fix this on macOS:
+    fs-repo-6-to-7                     # gx/ipfs/QmSGRM5Udmy1jsFBr1Cawez7Lt7LZ3ZKA23GGVEsiEW6F3/eventfd/eventfd.go:27:32: undefined: syscall.SYS_EVENTFD2
+  ++ [
+    fs-repo-5-to-6
+    fs-repo-4-to-5
+    fs-repo-3-to-4
+    fs-repo-2-to-3
+    fs-repo-1-to-2
+    fs-repo-0-to-1
+  ];
+
+in
+
+symlinkJoin {
+  name = "kubo-migrator-all-fs-repo-migrations-${version}";
+  paths = all-migrations;
+}
diff --git a/nixpkgs/pkgs/applications/networking/kubo-migrator/default.nix b/nixpkgs/pkgs/applications/networking/kubo-migrator/default.nix
new file mode 100644
index 000000000000..e45cbf84d524
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/kubo-migrator/default.nix
@@ -0,0 +1,23 @@
+{ lib
+, buildEnv
+, makeWrapper
+, kubo-migrator-unwrapped
+, kubo-migrator-all-fs-repo-migrations
+}:
+
+buildEnv {
+  name = "kubo-migrator-${kubo-migrator-unwrapped.version}";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  paths = [ kubo-migrator-unwrapped ];
+
+  pathsToLink = [ "/bin" ];
+
+  postBuild = ''
+    wrapProgram "$out/bin/fs-repo-migrations" \
+      --prefix PATH ':' '${lib.makeBinPath [ kubo-migrator-all-fs-repo-migrations ]}'
+  '';
+
+  inherit (kubo-migrator-unwrapped) meta;
+}
diff --git a/nixpkgs/pkgs/applications/networking/kubo-migrator/unwrapped.nix b/nixpkgs/pkgs/applications/networking/kubo-migrator/unwrapped.nix
new file mode 100644
index 000000000000..d5dc1421a58a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/kubo-migrator/unwrapped.nix
@@ -0,0 +1,35 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "kubo-migrator";
+  version = "2.0.2";
+
+  src = fetchFromGitHub {
+    owner = "ipfs";
+    repo = "fs-repo-migrations";
+    # Use the latest git tag here, since v2.0.2 does not
+    # contain the latest migration fs-repo-13-to-14/v1.0.0
+    # The fs-repo-migrations code itself is the same between
+    # the two versions but the migration code, which is built
+    # into separate binaries, is not.
+    rev = "fs-repo-13-to-14/v1.0.0";
+    hash = "sha256-y0IYSKKZlFbPrTUC6XqYKhS3a79rieNGBL58teWMlC4=";
+  };
+
+  sourceRoot = "${src.name}/fs-repo-migrations";
+
+  vendorHash = "sha256-/DqkBBtR/nU8gk3TFqNKY5zQU6BFMc3N8Ti+38mi/jk=";
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Migrations for the filesystem repository of Kubo clients";
+    homepage = "https://github.com/ipfs/fs-repo-migrations";
+    license = licenses.mit;
+    maintainers = with maintainers; [ Luflosi elitak ];
+    mainProgram = "fs-repo-migrations";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/kubo/default.nix b/nixpkgs/pkgs/applications/networking/kubo/default.nix
new file mode 100644
index 000000000000..dccd827b1295
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/kubo/default.nix
@@ -0,0 +1,59 @@
+{ lib, buildGoModule, fetchurl, nixosTests, openssl, pkg-config }:
+
+buildGoModule rec {
+  pname = "kubo";
+  version = "0.22.0"; # When updating, also check if the repo version changed and adjust repoVersion below
+  rev = "v${version}";
+
+  passthru.repoVersion = "14"; # Also update kubo-migrator when changing the repo version
+
+  # Kubo makes changes to it's source tarball that don't match the git source.
+  src = fetchurl {
+    url = "https://github.com/ipfs/kubo/releases/download/${rev}/kubo-source.tar.gz";
+    hash = "sha256-TX5ZM8Kyj3LZ12Ro7MsHRd+P5XLk/mU7DUxZaopSEV0=";
+  };
+
+  # tarball contains multiple files/directories
+  postUnpack = ''
+    mkdir kubo-src
+    shopt -s extglob
+    mv !(kubo-src) kubo-src || true
+    cd kubo-src
+  '';
+
+  sourceRoot = ".";
+
+  subPackages = [ "cmd/ipfs" ];
+
+  passthru.tests.kubo = nixosTests.kubo;
+
+  vendorSha256 = null;
+
+  outputs = [ "out" "systemd_unit" "systemd_unit_hardened" ];
+
+  postPatch = ''
+    substituteInPlace 'misc/systemd/ipfs.service' \
+      --replace '/usr/bin/ipfs' "$out/bin/ipfs"
+    substituteInPlace 'misc/systemd/ipfs-hardened.service' \
+      --replace '/usr/bin/ipfs' "$out/bin/ipfs"
+  '';
+
+  postInstall = ''
+    install --mode=444 -D 'misc/systemd/ipfs-api.socket' "$systemd_unit/etc/systemd/system/ipfs-api.socket"
+    install --mode=444 -D 'misc/systemd/ipfs-gateway.socket' "$systemd_unit/etc/systemd/system/ipfs-gateway.socket"
+    install --mode=444 -D 'misc/systemd/ipfs.service' "$systemd_unit/etc/systemd/system/ipfs.service"
+
+    install --mode=444 -D 'misc/systemd/ipfs-api.socket' "$systemd_unit_hardened/etc/systemd/system/ipfs-api.socket"
+    install --mode=444 -D 'misc/systemd/ipfs-gateway.socket' "$systemd_unit_hardened/etc/systemd/system/ipfs-gateway.socket"
+    install --mode=444 -D 'misc/systemd/ipfs-hardened.service' "$systemd_unit_hardened/etc/systemd/system/ipfs.service"
+  '';
+
+  meta = with lib; {
+    description = "An IPFS implementation in Go";
+    homepage = "https://ipfs.io/";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    mainProgram = "ipfs";
+    maintainers = with maintainers; [ Luflosi fpletz ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/libcoap/default.nix b/nixpkgs/pkgs/applications/networking/libcoap/default.nix
new file mode 100644
index 000000000000..673b864630d4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/libcoap/default.nix
@@ -0,0 +1,33 @@
+{ fetchFromGitHub, automake, autoconf, which, pkg-config, libtool, lib, stdenv, gnutls, asciidoc, doxygen
+, withTLS ? true
+, withDocs ? true
+}:
+stdenv.mkDerivation rec {
+  pname = "libcoap";
+  version = "4.3.1";
+  src = fetchFromGitHub {
+    repo = "libcoap";
+    owner = "obgm";
+    rev = "v${version}";
+    fetchSubmodules = true;
+    sha256 = "sha256-4XcAo5StyYIfe9wD0cPHKFZalMcBAuiVV2qFZ126KT8=";
+  };
+  nativeBuildInputs = [
+    automake
+    autoconf
+    which
+    libtool
+    pkg-config
+  ] ++ lib.optional withTLS gnutls ++ lib.optionals withDocs [ doxygen asciidoc ] ;
+  preConfigure = "./autogen.sh";
+  configureFlags = [ "--disable-shared" ]
+    ++ lib.optional (!withDocs) "--disable-documentation"
+    ++ lib.optional withTLS "--enable-dtls";
+  meta = with lib; {
+    homepage = "https://github.com/obgm/libcoap";
+    description = "A CoAP (RFC 7252) implementation in C";
+    platforms = platforms.unix;
+    license = licenses.bsd2;
+    maintainers = [ maintainers.kmein ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/lieer/default.nix b/nixpkgs/pkgs/applications/networking/lieer/default.nix
new file mode 100644
index 000000000000..26ecf043a4d5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/lieer/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, fetchFromGitHub
+, python3Packages
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "lieer";
+  version = "1.4";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "gauteh";
+    repo = "lieer";
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-2LujfvsxMHHmYjYOnLJaLdSlzDeej+ehUr4YfVe903U=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    notmuch2
+    oauth2client
+    google-api-python-client
+    tqdm
+    setuptools
+  ];
+
+  # no tests
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "lieer"
+  ];
+
+  meta = with lib; {
+    description = "Fast email-fetching and two-way tag synchronization between notmuch and GMail";
+    longDescription = ''
+      This program can pull email and labels (and changes to labels)
+      from your GMail account and store them locally in a maildir with
+      the labels synchronized with a notmuch database. The changes to
+      tags in the notmuch database may be pushed back remotely to your
+      GMail account.
+    '';
+    homepage = "https://lieer.gaute.vetsj.com/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ flokli ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/linssid/0001-unbundled-qwt.patch b/nixpkgs/pkgs/applications/networking/linssid/0001-unbundled-qwt.patch
new file mode 100644
index 000000000000..46224ede33d4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/linssid/0001-unbundled-qwt.patch
@@ -0,0 +1,43 @@
+From e57f22a5089f194013534c9a9bbc42ee639297f1 Mon Sep 17 00:00:00 2001
+From: Thomas Tuegel <ttuegel@gmail.com>
+Date: Sat, 19 Sep 2015 11:10:32 -0500
+Subject: [PATCH] unbundled qwt
+
+---
+ linssid-app/linssid-app.pro | 4 +---
+ linssid.pro                 | 4 +---
+ 2 files changed, 2 insertions(+), 6 deletions(-)
+
+diff --git a/linssid-app/linssid-app.pro b/linssid-app/linssid-app.pro
+index 26f61e7..7b80b60 100644
+--- a/linssid-app/linssid-app.pro
++++ b/linssid-app/linssid-app.pro
+@@ -19,13 +19,11 @@ QMAKE_CC = gcc
+ QMAKE_CXX = g++
+ DEFINES += 
+ INCLUDEPATH += /usr/include/qt5
+-# /usr/local/qwt-6.1.0/include
+-INCLUDEPATH += ../qwt-lib/src
+ # LIBS += /usr/lib/x86_64-linux-gnu/libboost_regex.a 
+ # LIBS += -lboost_regex
+ LIBS += -l:libboost_regex.a
+ # /usr/local/qwt-6.1.0/lib/libqwt.a
+-LIBS += ../qwt-lib/lib/libqwt.a
++LIBS += -lqwt
+ QMAKE_CXXFLAGS += -std=c++11
+ #
+ TARGET = linssid
+diff --git a/linssid.pro b/linssid.pro
+index 42dc277..26d1a2c 100644
+--- a/linssid.pro
++++ b/linssid.pro
+@@ -1,5 +1,3 @@
+ TEMPLATE = subdirs
+ CONFIG += ordered
+-SUBDIRS = qwt-lib \
+-          linssid-app
+-linssid-app.depends = qwt-lib
++SUBDIRS = linssid-app
+-- 
+2.5.2
+
diff --git a/nixpkgs/pkgs/applications/networking/linssid/default.nix b/nixpkgs/pkgs/applications/networking/linssid/default.nix
new file mode 100644
index 000000000000..72128a5ef95c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/linssid/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchurl, qtbase, qtsvg, qmake, pkg-config, boost, wirelesstools, iw, qwt6_1, wrapQtAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "linssid";
+  version = "2.7";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/linssid/LinSSID_${version}/linssid_${version}.orig.tar.gz";
+    sha256 = "13d35rlcjncd8lx3khkgn9x8is2xjd5fp6ns5xsn3w6l4xj9b4gl";
+  };
+
+  nativeBuildInputs = [ pkg-config qmake wrapQtAppsHook ];
+  buildInputs = [ qtbase qtsvg boost qwt6_1 ];
+
+  patches = [ ./0001-unbundled-qwt.patch ];
+
+  postPatch = ''
+    sed -e "s|/usr/include/qt5.*$|& ${qwt6_1}/include|" -i linssid-app/linssid-app.pro
+    sed -e "s|/usr/include/|/nonexistent/|g" -i linssid-app/*.pro
+    sed -e 's|^LIBS .*= .*libboost_regex.a|LIBS += -lboost_regex|' \
+        -e "s|/usr|$out|g" \
+        -i linssid-app/linssid-app.pro linssid-app/linssid.desktop
+    sed -e "s|\.\./\.\./\.\./\.\./usr|$out|g" -i linssid-app/*.ui
+
+    # Remove bundled qwt
+    rm -fr qwt-lib
+  '';
+
+  qtWrapperArgs =
+    [ ''--prefix PATH : ${lib.makeBinPath [ wirelesstools iw ]}'' ];
+
+  meta = with lib; {
+    description = "Graphical wireless scanning for Linux";
+    homepage = "https://sourceforge.net/projects/linssid/";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/listadmin/default.nix b/nixpkgs/pkgs/applications/networking/listadmin/default.nix
new file mode 100644
index 000000000000..a59f65995e2e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/listadmin/default.nix
@@ -0,0 +1,48 @@
+{ lib, stdenvNoCC, fetchurl, makeWrapper, perl, installShellFiles }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "listadmin";
+  version = "2.73";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/listadmin/${version}/listadmin-${version}.tar.gz";
+    sha256 = "00333d65ygdbm1hqr4yp2j8vh1cgh3hyfm7iy9y1alf0p0f6aqac";
+  };
+
+  buildInputs = [ perl ];
+  nativeBuildInputs = [ makeWrapper installShellFiles ];
+
+  # There is a Makefile, but we don’t need it, and it prints errors
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/man/man1
+    install -m 755 listadmin.pl $out/bin/listadmin
+    installManPage listadmin.1
+
+    wrapProgram $out/bin/listadmin \
+      --prefix PERL5LIB : "${with perl.pkgs; makeFullPerlPath [
+        TextReform NetINET6Glue LWPProtocolHttps
+        ]}"
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/listadmin --help 2> /dev/null
+  '';
+
+  meta = with lib; {
+    description = "Command line mailman moderator queue manipulation";
+    longDescription = ''
+       listadmin is a command line tool to manipulate the queues of messages
+       held for moderator approval by mailman. It is designed to keep user
+       interaction to a minimum, in theory you could run it from cron to prune
+       the queue. It can use the score from a header added by SpamAssassin to
+       filter, or it can match specific senders, subjects, or reasons.
+    '';
+    homepage = "https://sourceforge.net/projects/listadmin/";
+    license = licenses.publicDomain;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ nomeata ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/lls/default.nix b/nixpkgs/pkgs/applications/networking/lls/default.nix
new file mode 100644
index 000000000000..5c882c1da80e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/lls/default.nix
@@ -0,0 +1,26 @@
+{
+  rustPlatform,
+  fetchFromGitHub,
+  lib,
+}:
+rustPlatform.buildRustPackage rec {
+  pname = "lls";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "jcaesar";
+    repo = "lls";
+    rev = "v${version}";
+    hash = "sha256-FtRPRR+/R3JTEI90mAEHFyhqloAbNEdR3jkquKa9Ahw=";
+  };
+
+  cargoSha256 = "sha256-yjRbg/GzCs5d3zXL22j5U9c4BlOcRHyggHCovj4fMIs=";
+
+  meta = with lib; {
+    description = "Tool to list listening sockets";
+    license = licenses.mit;
+    maintainers = [ maintainers.k900 ];
+    platforms = platforms.linux;
+    homepage = "https://github.com/jcaesar/lls";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/localproxy/default.nix b/nixpkgs/pkgs/applications/networking/localproxy/default.nix
new file mode 100644
index 000000000000..ed2817ed10a4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/localproxy/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, openssl
+, protobuf3_19
+, catch2
+, boost181
+, icu
+}:
+let
+  boost = boost181.override { enableStatic = true; };
+in
+stdenv.mkDerivation (finalAttrs: {
+  pname = "localproxy";
+  version = "3.1.0";
+
+    src = fetchFromGitHub {
+      owner = "aws-samples";
+      repo = "aws-iot-securetunneling-localproxy";
+      rev = "v${finalAttrs.version}";
+      hash = "sha256-ec72bvBkRBj4qlTNfzNPeQt02OfOPA8y2PoejHpP9cY=";
+    };
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [ openssl protobuf3_19 catch2 boost icu ];
+
+  # causes redefinition of _FORTIFY_SOURCE
+  hardeningDisable = [ "fortify3" ];
+
+    meta = with lib; {
+      description = "AWS IoT Secure Tunneling Local Proxy Reference Implementation C++";
+      homepage = "https://github.com/aws-samples/aws-iot-securetunneling-localproxy";
+      license = licenses.asl20;
+      maintainers = with maintainers; [spalf];
+      platforms = platforms.unix;
+    };
+  })
diff --git a/nixpkgs/pkgs/applications/networking/localsend/default.nix b/nixpkgs/pkgs/applications/networking/localsend/default.nix
new file mode 100644
index 000000000000..1df4baa5cbc2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/localsend/default.nix
@@ -0,0 +1,64 @@
+{ lib, stdenv, appimageTools, fetchurl, undmg }:
+
+let
+  pname = "localsend";
+  version = "1.11.0";
+
+  srcs = rec {
+    x86_64-linux = fetchurl {
+      url = "https://github.com/localsend/localsend/releases/download/v${version}/LocalSend-${version}-linux-x86-64.AppImage";
+      hash = "sha256-IIxknLzlAjH27o54R0Zm7T8bhDRAIgh58Evs7zPMrPk=";
+    };
+    x86_64-darwin = fetchurl {
+      url = "https://github.com/localsend/localsend/releases/download/v${version}/LocalSend-${version}.dmg";
+      hash = "sha256-NSwyyfFPQpcVZLKGqZbaBCYSQdlNxxpI8EJo49eYB/A=";
+    };
+    aarch64-darwin = x86_64-darwin;
+  };
+  src = srcs.${stdenv.hostPlatform.system} or (throw "Unsupported system for package localsend: ${stdenv.hostPlatform.system}");
+
+  appimageContents = appimageTools.extract { inherit pname version src; };
+
+  linux = appimageTools.wrapType2 rec {
+    inherit pname version src meta;
+
+    extraPkgs = p: [ p.ayatana-ido p.libayatana-appindicator p.libayatana-indicator p.libdbusmenu p.libepoxy ];
+
+    extraInstallCommands = ''
+      mv $out/bin/${pname}-${version} $out/bin/${pname}
+
+      install -m 444 -D ${appimageContents}/org.localsend.localsend_app.desktop \
+        $out/share/applications/${pname}.desktop
+      substituteInPlace $out/share/applications/${pname}.desktop \
+        --replace 'Exec=localsend_app' "Exec=$out/bin/localsend"
+
+      install -m 444 -D ${appimageContents}/localsend.png \
+        $out/share/icons/hicolor/256x256/apps/localsend.png
+    '';
+  };
+
+  darwin = stdenv.mkDerivation {
+    inherit pname version src meta;
+
+    nativeBuildInputs = [ undmg ];
+
+    sourceRoot = ".";
+
+    installPhase = ''
+      mkdir -p $out/Applications
+      cp -r *.app $out/Applications
+    '';
+  };
+
+  meta = with lib; {
+    description = "An open source cross-platform alternative to AirDrop";
+    homepage = "https://localsend.org/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.mit;
+    maintainers = with maintainers; [ sikmir ];
+    platforms = builtins.attrNames srcs;
+  };
+in
+if stdenv.isDarwin
+then darwin
+else linux
diff --git a/nixpkgs/pkgs/applications/networking/maestral-qt/default.nix b/nixpkgs/pkgs/applications/networking/maestral-qt/default.nix
new file mode 100644
index 000000000000..6ce0abb6c0e6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/maestral-qt/default.nix
@@ -0,0 +1,66 @@
+{ lib
+, fetchFromGitHub
+, python3
+, qt6
+, nixosTests
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "maestral-qt";
+  version = "1.8.0";
+  disabled = python3.pythonOlder "3.7";
+
+  src = fetchFromGitHub {
+    owner = "SamSchott";
+    repo = "maestral-qt";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-Ys7XrvV4qzq4Q9llua2WgU013Ui0+x+uMwLNIv6xxCw=";
+  };
+
+  format = "pyproject";
+
+  propagatedBuildInputs = with python3.pkgs; [
+    click
+    markdown2
+    maestral
+    packaging
+    pyqt6
+  ];
+
+  buildInputs = [
+    qt6.qtbase
+    qt6.qtsvg  # Needed for the systray icon
+  ];
+
+  nativeBuildInputs = [
+    qt6.wrapQtAppsHook
+  ];
+
+  dontWrapQtApps = true;
+
+  makeWrapperArgs = with python3.pkgs; [
+    # Firstly, add all necessary QT variables
+    "\${qtWrapperArgs[@]}"
+
+    # Add the installed directories to the python path so the daemon can find them
+    "--prefix PYTHONPATH : ${makePythonPath (requiredPythonModules maestral.propagatedBuildInputs)}"
+    "--prefix PYTHONPATH : ${makePythonPath [ maestral ]}"
+  ];
+
+  # no tests
+  doCheck = false;
+
+  pythonImportsCheck = [ "maestral_qt" ];
+
+  passthru.tests.maestral = nixosTests.maestral;
+
+  meta = with lib; {
+    description = "GUI front-end for maestral (an open-source Dropbox client) for Linux";
+    homepage = "https://maestral.app";
+    changelog = "https://github.com/samschott/maestral/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ peterhoeg sfrijters ];
+    platforms = platforms.linux;
+    mainProgram = "maestral_qt";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/aerc/default.nix b/nixpkgs/pkgs/applications/networking/mailreaders/aerc/default.nix
new file mode 100644
index 000000000000..0ee5228d1219
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/aerc/default.nix
@@ -0,0 +1,80 @@
+{ lib
+, buildGoModule
+, fetchFromSourcehut
+, ncurses
+, notmuch
+, scdoc
+, python3
+, w3m
+, dante
+, gawk
+}:
+
+buildGoModule rec {
+  pname = "aerc";
+  version = "0.15.2";
+
+  src = fetchFromSourcehut {
+    owner = "~rjarry";
+    repo = "aerc";
+    rev = version;
+    hash = "sha256-OQDA4AHDcAdDzpwNSi8rW1FKjfYaFktOwiM0FEHPd70=";
+  };
+
+  proxyVendor = true;
+  vendorHash = "sha256-NWOySC0czNgNOakpxFguZLtmEI7AvjJQKXDE2vFWeZg=";
+
+  doCheck = false;
+
+  nativeBuildInputs = [
+    scdoc
+    python3.pkgs.wrapPython
+  ];
+
+  patches = [
+    ./runtime-libexec.patch
+  ];
+
+  postPatch = ''
+    substituteAllInPlace config/aerc.conf
+    substituteAllInPlace config/config.go
+    substituteAllInPlace doc/aerc-config.5.scd
+
+    # Prevent buildGoModule from trying to build this
+    rm contrib/linters.go
+  '';
+
+  makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  pythonPath = [
+    python3.pkgs.vobject
+  ];
+
+  buildInputs = [ python3 notmuch gawk ];
+
+  installPhase = ''
+    runHook preInstall
+
+    make $makeFlags GOFLAGS="$GOFLAGS -tags=notmuch" install
+
+    runHook postInstall
+  '';
+
+  postFixup = ''
+    wrapProgram $out/bin/aerc \
+      --prefix PATH ":" "${lib.makeBinPath [ ncurses ]}"
+    wrapProgram $out/libexec/aerc/filters/html \
+      --prefix PATH ":"  ${lib.makeBinPath [ w3m dante ]}
+    wrapProgram $out/libexec/aerc/filters/html-unsafe \
+      --prefix PATH ":" ${lib.makeBinPath [ w3m dante ]}
+    patchShebangs $out/libexec/aerc/filters
+  '';
+
+  meta = with lib; {
+    description = "An email client for your terminal";
+    homepage = "https://aerc-mail.org/";
+    maintainers = with maintainers; [ tadeokondrak ];
+    license = licenses.mit;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/aerc/runtime-libexec.patch b/nixpkgs/pkgs/applications/networking/mailreaders/aerc/runtime-libexec.patch
new file mode 100644
index 000000000000..f8e8d0747048
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/aerc/runtime-libexec.patch
@@ -0,0 +1,87 @@
+diff --git a/config/aerc.conf b/config/aerc.conf
+index 7d33b43..4315f0e 100644
+--- a/config/aerc.conf
++++ b/config/aerc.conf
+@@ -202,8 +202,7 @@
+ #
+ #   ${XDG_CONFIG_HOME:-~/.config}/aerc/stylesets
+ #   ${XDG_DATA_HOME:-~/.local/share}/aerc/stylesets
+-#   /usr/local/share/aerc/stylesets
+-#   /usr/share/aerc/stylesets
++#   @out@/share/aerc/stylesets
+ #
+ #stylesets-dirs=
+ 
+@@ -547,8 +546,7 @@ message/rfc822=colorize
+ #
+ #   ${XDG_CONFIG_HOME:-~/.config}/aerc/templates
+ #   ${XDG_DATA_HOME:-~/.local/share}/aerc/templates
+-#   /usr/local/share/aerc/templates
+-#   /usr/share/aerc/templates
++#   @out@/share/aerc/templates
+ #
+ #template-dirs=
+ 
+diff --git a/config/config.go b/config/config.go
+index d70bcfe..c19e59a 100644
+--- a/config/config.go
++++ b/config/config.go
+@@ -54,10 +54,8 @@ func buildDefaultDirs() []string {
+ 	}
+ 
+ 	// Add fixed fallback locations
+-	defaultDirs = append(defaultDirs, "/usr/local/libexec/aerc")
+-	defaultDirs = append(defaultDirs, "/usr/local/share/aerc")
+-	defaultDirs = append(defaultDirs, "/usr/libexec/aerc")
+-	defaultDirs = append(defaultDirs, "/usr/share/aerc")
++	defaultDirs = append(defaultDirs, "@out@/libexec/aerc")
++	defaultDirs = append(defaultDirs, "@out@/share/aerc")
+ 
+ 	return defaultDirs
+ }
+diff --git a/doc/aerc-config.5.scd b/doc/aerc-config.5.scd
+index 9e1f8a3..694abbc 100644
+--- a/doc/aerc-config.5.scd
++++ b/doc/aerc-config.5.scd
+@@ -300,8 +300,7 @@ These options are configured in the *[ui]* section of _aerc.conf_.
+ 	```
+ 	${XDG_CONFIG_HOME:-~/.config}/aerc/stylesets
+ 	${XDG_DATA_HOME:-~/.local/share}/aerc/stylesets
+-	/usr/local/share/aerc/stylesets
+-	/usr/share/aerc/stylesets
++	@out@/share/aerc/stylesets
+ 	```
+ 
+ *styleset-name* = _<string>_
+@@ -900,8 +899,7 @@ These options are configured in the *[templates]* section of _aerc.conf_.
+ 	```
+ 	${XDG_CONFIG_HOME:-~/.config}/aerc/templates
+ 	${XDG_DATA_HOME:-~/.local/share}/aerc/templates
+-	/usr/local/share/aerc/templates
+-	/usr/share/aerc/templates
++	@out@/share/aerc/templates
+ 	```
+ 
+ *new-message* = _<template_name>_
+diff --git a/doc/aerc-templates.7.scd b/doc/aerc-templates.7.scd
+index ae9bc6d..5f42b14 100644
+--- a/doc/aerc-templates.7.scd
++++ b/doc/aerc-templates.7.scd
+@@ -319,7 +319,7 @@ aerc provides the following additional functions:
+ 	Execute external command, provide the second argument to its stdin.
+ 
+ 	```
+-	{{exec `/usr/libexec/aerc/filters/html` .OriginalText}}
++	{{exec `@out@/libexec/aerc/filters/html` .OriginalText}}
+ 	```
+ 
+ *.Local*
+@@ -425,7 +425,7 @@ aerc provides the following additional functions:
+ 
+ 	```
+ 	{{if eq .OriginalMIMEType "text/html"}}
+-	{{exec `/usr/libexec/aerc/filters/html` .OriginalText | wrap 72 | quote}}
++	{{exec `@out@/libexec/aerc/filters/html` .OriginalText | wrap 72 | quote}}
+ 	{{else}}
+ 	{{wrap 72 .OriginalText | trimSignature | quote}}
+ 	{{end}}
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/afew/default.nix b/nixpkgs/pkgs/applications/networking/mailreaders/afew/default.nix
new file mode 100644
index 000000000000..341f4628dc3b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/afew/default.nix
@@ -0,0 +1,45 @@
+{ lib, python3Packages, fetchPypi, notmuch }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "afew";
+  version = "3.0.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0wpfqbqjlfb9z0hafvdhkm7qw56cr9kfy6n8vb0q42dwlghpz1ff";
+  };
+
+  nativeBuildInputs = with python3Packages; [ sphinx setuptools-scm ];
+
+  propagatedBuildInputs = with python3Packages; [
+    python3Packages.setuptools python3Packages.notmuch chardet dkimpy
+  ];
+
+  nativeCheckInputs = with python3Packages; [
+    freezegun notmuch
+  ];
+
+  makeWrapperArgs = [
+    ''--prefix PATH ':' "${notmuch}/bin"''
+  ];
+
+  outputs = [ "out" "doc" ];
+
+  postBuild =  ''
+    ${python3Packages.python.pythonForBuild.interpreter} setup.py build_sphinx -b html,man
+  '';
+
+  postInstall = ''
+    install -D -v -t $out/share/man/man1 build/sphinx/man/*
+    mkdir -p $out/share/doc/afew
+    cp -R build/sphinx/html/* $out/share/doc/afew
+  '';
+
+
+  meta = with lib; {
+    homepage = "https://github.com/afewmail/afew";
+    description = "An initial tagging script for notmuch mail";
+    license = licenses.isc;
+    maintainers = with maintainers; [ flokli ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/alot/default.nix b/nixpkgs/pkgs/applications/networking/mailreaders/alot/default.nix
new file mode 100644
index 000000000000..471b603f26a1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/alot/default.nix
@@ -0,0 +1,97 @@
+{ lib
+, python3
+, fetchFromGitHub
+, file
+, gnupg
+, gawk
+, notmuch
+, procps
+, withManpage ? false
+}:
+
+with python3.pkgs; buildPythonApplication rec {
+  pname = "alot";
+  version = "0.10";
+
+  outputs = [
+    "out"
+  ] ++ lib.optionals withManpage [
+    "man"
+  ];
+
+  disabled = !isPy3k;
+
+  src = fetchFromGitHub {
+    owner = "pazz";
+    repo = "alot";
+    rev = version;
+    sha256 = "sha256-1reAq8X9VwaaZDY5UfvcFzHDKd71J88CqJgH3+ANjis=";
+  };
+
+  postPatch = ''
+    substituteInPlace alot/settings/manager.py \
+      --replace /usr/share "$out/share"
+  '';
+
+  nativeBuildInputs = lib.optional withManpage sphinx;
+
+  propagatedBuildInputs = [
+    configobj
+    file
+    gpgme
+    notmuch2
+    python-magic
+    service-identity
+    twisted
+    urwid
+    urwidtrees
+  ];
+
+  nativeCheckInputs = [
+    future
+    gawk
+    gnupg
+    mock
+    procps
+    pytestCheckHook
+  ];
+
+  postBuild = lib.optionalString withManpage [
+    "make -C docs man"
+  ];
+
+  disabledTests = [
+    # Some twisted tests need internet access
+    "test_env_set"
+    "test_no_spawn_no_stdin_attached"
+    # DatabaseLockedError
+    "test_save_named_query"
+  ];
+
+  postInstall =
+    let
+      completionPython = python.withPackages (ps: [ ps.configobj ]);
+    in
+    lib.optionalString withManpage ''
+      mkdir -p $out/man
+      cp -r docs/build/man $out/man
+    ''
+    + ''
+      mkdir -p $out/share/{applications,alot}
+      cp -r extra/themes $out/share/alot
+
+      substituteInPlace extra/completion/alot-completion.zsh \
+        --replace "python3" "${completionPython.interpreter}"
+      install -D extra/completion/alot-completion.zsh $out/share/zsh/site-functions/_alot
+
+      sed "s,/usr/bin,$out/bin,g" extra/alot.desktop > $out/share/applications/alot.desktop
+    '';
+
+  meta = with lib; {
+    homepage = "https://github.com/pazz/alot";
+    description = "Terminal MUA using notmuch mail";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ milibopp ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/alpine/default.nix b/nixpkgs/pkgs/applications/networking/mailreaders/alpine/default.nix
new file mode 100644
index 000000000000..82239761190e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/alpine/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, stdenv
+, fetchgit
+, buildPackages
+, ncurses
+, tcl
+, openssl
+, pam
+, libkrb5
+, openldap
+, libxcrypt
+, gitUpdater
+}:
+
+stdenv.mkDerivation rec {
+  pname = "alpine";
+  version = "2.26";
+
+  src = fetchgit {
+    url = "https://repo.or.cz/alpine.git";
+    rev = "v${version}";
+    hash = "sha256-cJyUBatQBjD6RG+jesJ0JRhWghPRBACc/HQl+2aCTd0=";
+  };
+
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+
+  buildInputs = [
+    ncurses tcl openssl pam libkrb5 openldap libxcrypt
+  ];
+
+  hardeningDisable = [ "format" ];
+
+  configureFlags = [
+    "--with-ssl-include-dir=${openssl.dev}/include/openssl"
+    "--with-passfile=.pine-passfile"
+    "--with-c-client-target=slx"
+  ];
+
+  passthru.updateScript = gitUpdater { rev-prefix = "v"; };
+
+  meta = with lib; {
+    description = "Console mail reader";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ raskin rhendric ];
+    platforms = platforms.linux;
+    homepage = "https://alpineapp.email/";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/astroid/default.nix b/nixpkgs/pkgs/applications/networking/mailreaders/astroid/default.nix
new file mode 100644
index 000000000000..739f45fd4ee9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/astroid/default.nix
@@ -0,0 +1,65 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, cmake, pkg-config, gnome, gmime3, webkitgtk, ronn
+, libsass, notmuch, boost, wrapGAppsHook, glib-networking, protobuf
+, gtkmm3, libpeas, gsettings-desktop-schemas, gobject-introspection, python3
+
+# vim to be used, should support the GUI mode.
+, vim
+
+# additional python3 packages to be available within plugins
+, extraPythonPackages ? []
+}:
+
+stdenv.mkDerivation rec {
+  pname = "astroid";
+  version = "0.16";
+
+  src = fetchFromGitHub {
+    owner = "astroidmail";
+    repo = "astroid";
+    rev = "v${version}";
+    sha256 = "sha256-6xQniOLNUk8tDkooDN3Tp6sb43GqoynO6+fN9yhNqZ4=";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "symbolic-icons.patch";
+      url =
+        "https://github.com/astroidmail/astroid/commit/7c2022f06a4146ad62e858bcaacdb4ee817851b9.patch";
+      hash = "sha256-hZHOg1wUR8Kpd6017fWzhMmG+/WQxSOCnsiyIvUcpbU=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    cmake ronn pkg-config wrapGAppsHook gobject-introspection
+    python3 python3.pkgs.wrapPython
+  ];
+
+  buildInputs = [
+    gtkmm3 gmime3 webkitgtk libsass libpeas
+    python3
+    notmuch boost gsettings-desktop-schemas gnome.adwaita-icon-theme
+    glib-networking protobuf
+    vim
+  ];
+
+  postPatch = ''
+    sed -i "s~gvim ~${vim}/bin/vim -g ~g" src/config.cc
+    sed -i "s~ -geom 10x10~~g" src/config.cc
+  '';
+
+  pythonPath = with python3.pkgs; requiredPythonModules [ pygobject3 ] ++ extraPythonPackages;
+  preFixup = ''
+    buildPythonPath "$out $pythonPath"
+    gappsWrapperArgs+=(
+      --prefix PYTHONPATH : "$program_PYTHONPATH"
+    )
+  '';
+
+  meta = with lib; {
+    homepage = "https://astroidmail.github.io/";
+    description = "GTK frontend to the notmuch mail system";
+    maintainers = with maintainers; [ bdimcheff SuprDewd ];
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/ayatana-webmail/default.nix b/nixpkgs/pkgs/applications/networking/mailreaders/ayatana-webmail/default.nix
new file mode 100644
index 000000000000..14be9ab4f3d6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/ayatana-webmail/default.nix
@@ -0,0 +1,90 @@
+{ lib
+, fetchFromGitHub
+, gettext
+, gtk3
+, python3Packages
+, gdk-pixbuf
+, libnotify
+, glib
+, gobject-introspection
+, wrapGAppsHook
+# BTW libappindicator is also supported, but upstream recommends their
+# implementation, see:
+# https://github.com/AyatanaIndicators/ayatana-webmail/issues/24#issuecomment-1050352862
+, libayatana-appindicator
+, gsettings-desktop-schemas
+, libcanberra-gtk3
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "ayatana-webmail";
+  version = "22.12.15";
+
+  src = fetchFromGitHub {
+    owner = "AyatanaIndicators";
+    repo = "ayatana-webmail";
+    rev = version;
+    hash = "sha256-K2jqCWrY1i1wYdZVpjN/3TcVyWariOQQ4slZf6sEPRU=";
+  };
+  postConfigure = ''
+    # Fix fhs paths
+    substituteInPlace \
+      ayatanawebmail/accounts.py \
+      ayatanawebmail/actions.py \
+      ayatanawebmail/dialog.py \
+      --replace /usr/share $out/share
+  '';
+
+  buildInputs = [
+    gtk3
+    gdk-pixbuf
+    glib
+    libnotify
+    gettext
+    libayatana-appindicator
+    gsettings-desktop-schemas
+  ];
+
+  nativeBuildInputs = [
+    gobject-introspection
+    wrapGAppsHook
+    glib # For compiling gsettings-schemas
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    urllib3
+    babel
+    psutil
+    secretstorage
+    polib
+    pygobject3
+    dbus-python
+  ];
+
+  # No tests, and they cause a failure
+  doCheck = false;
+
+  postInstall = ''
+    # Fix fhs paths
+    mv $out/${python3Packages.python.sitePackages}/etc $out
+    mv $out/${python3Packages.python.sitePackages}/usr/{bin,share} $out/
+    rmdir $out/${python3Packages.python.sitePackages}/usr
+    # Compile gsettings desktop schemas
+    glib-compile-schemas $out/share/glib-2.0/schemas
+  '';
+
+  # See https://nixos.org/nixpkgs/manual/#ssec-gnome-common-issues-double-wrapped
+  dontWrapGApps = true;
+  preFixup = ''
+    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+    makeWrapperArgs+=(--prefix PATH : ${lib.makeBinPath [ libcanberra-gtk3 ]})
+  '';
+
+  meta = with lib; {
+    description = "Webmail notifications and actions for any desktop";
+    homepage = "https://github.com/AyatanaIndicators/ayatana-webmail";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ doronbehar ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/balsa/default.nix b/nixpkgs/pkgs/applications/networking/mailreaders/balsa/default.nix
new file mode 100644
index 000000000000..876a690de5a5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/balsa/default.nix
@@ -0,0 +1,79 @@
+{ lib
+, stdenv
+, fetchurl
+, glib
+, gmime3
+, gnutls
+, gobject-introspection
+, gpgme
+, gtk3
+, gtksourceview4
+, gtkspell3
+, intltool
+, libcanberra-gtk3
+, libesmtp
+, libical
+, libnotify
+, libsecret
+, openssl
+, pkg-config
+, sqlite
+, webkitgtk
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "balsa";
+  version = "2.6.4";
+
+  src = fetchurl {
+    url = "https://pawsa.fedorapeople.org/balsa/${pname}-${version}.tar.xz";
+    sha256 = "1hcgmjka2x2igdrmvzlfs12mv892kv4vzv5iy90kvcqxa625kymy";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    intltool
+    gobject-introspection
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    glib
+    gmime3
+    gnutls
+    gpgme
+    gtk3
+    gtksourceview4
+    gtkspell3
+    libcanberra-gtk3
+    libesmtp
+    libical
+    libnotify
+    libsecret
+    openssl
+    sqlite
+    webkitgtk
+  ];
+
+  configureFlags = [
+    "--with-canberra"
+    "--with-gtksourceview"
+    "--with-libsecret"
+    "--with-spell-checker=gtkspell"
+    "--with-sqlite"
+    "--with-ssl"
+    "--with-unique"
+    "--without-gnome"
+  ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    homepage = "http://pawsa.fedorapeople.org/balsa/";
+    description = "An e-mail client for GNOME";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.romildo ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/betterbird/default.nix b/nixpkgs/pkgs/applications/networking/mailreaders/betterbird/default.nix
new file mode 100644
index 000000000000..2bf6cfbf6136
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/betterbird/default.nix
@@ -0,0 +1,128 @@
+{ lib
+, buildMozillaMach
+, cacert
+, fetchFromGitHub
+, fetchurl
+, git
+, libdbusmenu-gtk3
+, runtimeShell
+, thunderbirdPackages
+}:
+
+let
+  thunderbird-unwrapped = thunderbirdPackages.thunderbird-102;
+
+  version = "102.15.0";
+  majVer = lib.versions.major version;
+
+  betterbird-patches = fetchFromGitHub {
+    owner = "Betterbird";
+    repo = "thunderbird-patches";
+    rev = "${version}-bb40";
+    postFetch = ''
+      echo "Retrieving external patches"
+
+      echo "#!${runtimeShell}" > external.sh
+      # if no external patches need to be downloaded, don't fail
+      { grep " # " $out/${majVer}/series-M-C || true ; } >> external.sh
+      { grep " # " $out/${majVer}/series || true ; } >> external.sh
+      sed -i -e '/^#/d' external.sh
+      sed -i -e 's/\/rev\//\/raw-rev\//' external.sh
+      sed -i -e 's|\(.*\) # \(.*\)|curl \2 -o $out/${majVer}/external/\1|' external.sh
+      chmod 700 external.sh
+
+      mkdir $out/${majVer}/external
+      SSL_CERT_FILE=${cacert}/etc/ssl/certs/ca-bundle.crt
+      . ./external.sh
+      rm external.sh
+    '';
+    hash = "sha256-7/JEcP76rp0hSSxzlIlHqkcxTSEJQswFhCoOLYntQ5I=";
+  };
+in ((buildMozillaMach {
+  pname = "betterbird";
+  inherit version;
+
+  applicationName = "Betterbird";
+  binaryName = "betterbird";
+  inherit (thunderbird-unwrapped) application extraPatches;
+
+  src = fetchurl {
+    # https://download.cdn.mozilla.net/pub/thunderbird/releases/
+    url = "mirror://mozilla/thunderbird/releases/${version}/source/thunderbird-${version}.source.tar.xz";
+    sha512 = "11d4c77049c532753c9b693d69ab9a0bcd0eb13d49f87a511ad8ba680b70041ac6f64c5f9cd5dd44246d46e7695d9bd51146b1fe62b0b7c9fbc862eb53d5cfda";
+  };
+
+  extraPostPatch = thunderbird-unwrapped.extraPostPatch or "" + /* bash */ ''
+    PATH=$PATH:${lib.makeBinPath [ git ]}
+    patches=$(mktemp -d)
+    for dir in branding bugs external features misc; do
+      cp -r ${betterbird-patches}/${majVer}/$dir/*.patch $patches/
+      # files is not in series file and duplicated with external patch
+      [[ $dir == bugs ]] && rm $patches/1820504-optimise-grapheme-m-c.patch
+    done
+    cp ${betterbird-patches}/${majVer}/series* $patches/
+    chmod -R +w $patches
+
+    cd $patches
+    # fix FHS paths to libdbusmenu
+    substituteInPlace 12-feature-linux-systray.patch \
+      --replace "/usr/include/libdbusmenu-glib-0.4/" "${lib.getDev libdbusmenu-gtk3}/include/libdbusmenu-glib-0.4/" \
+      --replace "/usr/include/libdbusmenu-gtk3-0.4/" "${lib.getDev libdbusmenu-gtk3}/include/libdbusmenu-gtk3-0.4/"
+    cd -
+
+    chmod -R +w dom/base/test/gtest/
+
+    while read patch; do
+      patch="''${patch%%#*}"
+      patch="''${patch% }"
+      if [[ $patch == "" ]]; then
+        continue
+      fi
+
+      echo Applying patch $patch.
+      if [[ $patch == *-m-c.patch ]]; then
+        git apply -p1 -v < $patches/$patch
+      else
+        cd comm
+        git apply -p1 -v < $patches/$patch
+        cd ..
+      fi
+    done < <(cat $patches/series $patches/series-M-C)
+  '';
+
+  extraBuildInputs = [
+    libdbusmenu-gtk3
+  ];
+
+  extraConfigureFlags = [
+    "--enable-application=comm/mail"
+    "--with-branding=comm/mail/branding/betterbird"
+  ];
+
+  meta = with lib; {
+    description = "Betterbird is a fine-tuned version of Mozilla Thunderbird, Thunderbird on steroids, if you will";
+    homepage = "https://www.betterbird.eu/";
+    mainProgram = "betterbird";
+    maintainers = with maintainers; [ SuperSandro2000 ];
+    inherit (thunderbird-unwrapped.meta) platforms badPlatforms broken license;
+  };
+}).override {
+  crashreporterSupport = false; # not supported
+  geolocationSupport = false;
+  webrtcSupport = false;
+
+  pgoSupport = false; # console.warn: feeds: "downloadFeed: network connection unavailable"
+}).overrideAttrs (oldAttrs: {
+  postInstall = oldAttrs.postInstall or "" + ''
+    mv $out/lib/thunderbird/* $out/lib/betterbird
+    rmdir $out/lib/thunderbird/
+    rm $out/bin/thunderbird
+    ln -srf $out/lib/betterbird/betterbird $out/bin/betterbird
+  '';
+
+  doInstallCheck = false;
+
+  passthru = oldAttrs.passthru // {
+    inherit betterbird-patches;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/bluemail/default.nix b/nixpkgs/pkgs/applications/networking/mailreaders/bluemail/default.nix
new file mode 100644
index 000000000000..50dec500870a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/bluemail/default.nix
@@ -0,0 +1,82 @@
+{ stdenv
+, lib
+, fetchurl
+, dpkg
+, autoPatchelfHook
+, pango
+, gtk3
+, alsa-lib
+, nss
+, libXdamage
+, libdrm
+, mesa
+, libxshmfence
+, makeWrapper
+, wrapGAppsHook
+, gcc-unwrapped
+, udev
+}:
+
+stdenv.mkDerivation rec {
+  pname = "bluemail";
+  version = "1.131.4-1795";
+
+  # Taking a snapshot of the DEB release because there are no tagged version releases.
+  # For new versions, download the upstream release, extract it and check for the version string.
+  # In case there's a new version, create a snapshot of it on https://archive.org before updating it here.
+  src = fetchurl {
+    url = "https://web.archive.org/web/20220921124548/https://download.bluemail.me/BlueMail/deb/BlueMail.deb";
+    sha256 = "sha256-deO+D9HSfj1YEDSO5Io0MA7H8ZK9iFSRwB/e+8GkgOU=";
+  };
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+    makeWrapper
+    dpkg
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    pango
+    gtk3
+    alsa-lib
+    nss
+    libXdamage
+    libdrm
+    mesa
+    libxshmfence
+    udev
+  ];
+
+  unpackCmd = "${dpkg}/bin/dpkg-deb -x $src debcontents";
+
+  dontBuild = true;
+  dontStrip = true;
+  dontWrapGApps = true;
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mv opt/BlueMail/* $out
+    ln -s $out/bluemail $out/bin/bluemail
+  '';
+
+  makeWrapperArgs = [
+    "--prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ gcc-unwrapped.lib gtk3 udev ]}"
+    "--prefix PATH : ${lib.makeBinPath [ stdenv.cc ]}"
+  ];
+
+  preFixup = ''
+    wrapProgram $out/bin/bluemail \
+      ''${makeWrapperArgs[@]} \
+      ''${gappsWrapperArgs[@]}
+  '';
+
+  meta = with lib; {
+    description = "Free, secure, universal email app, capable of managing an unlimited number of mail accounts";
+    homepage = "https://bluemail.me";
+    license = licenses.unfree;
+    platforms = platforms.linux;
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    maintainers = with maintainers; [ onny ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/bubblemail/default.nix b/nixpkgs/pkgs/applications/networking/mailreaders/bubblemail/default.nix
new file mode 100644
index 000000000000..bd5783a5c656
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/bubblemail/default.nix
@@ -0,0 +1,75 @@
+{ lib
+, fetchFromGitLab
+, gettext
+, gtk3
+, python3Packages
+, gdk-pixbuf
+, libnotify
+, gst_all_1
+, libsecret
+, wrapGAppsHook
+, gsettings-desktop-schemas
+, gnome-online-accounts
+, glib
+, gobject-introspection
+, folks
+, bash
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "bubblemail";
+  version = "1.4";
+
+  src = fetchFromGitLab {
+    domain = "framagit.org";
+    owner = "razer";
+    repo = "bubblemail";
+    rev = "v${version}";
+    sha256 = "sha256-MPl4pXvdhwCFWTepn/Mxp8ZMs+HCzXC59qdKZp3mHdw=";
+  };
+
+  buildInputs = [
+    gtk3
+    gdk-pixbuf
+    glib
+    libnotify
+    gst_all_1.gstreamer
+    gst_all_1.gst-plugins-base
+    gst_all_1.gst-plugins-good
+    gst_all_1.gst-plugins-bad
+    libsecret
+    gnome-online-accounts
+    folks
+    bash
+  ];
+
+  nativeBuildInputs = [
+    gettext
+    wrapGAppsHook
+    python3Packages.pillow
+    # For setup-hook
+    gobject-introspection
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    gsettings-desktop-schemas
+    pygobject3
+    dbus-python
+    pyxdg
+  ];
+
+  # See https://nixos.org/nixpkgs/manual/#ssec-gnome-common-issues-double-wrapped
+  dontWrapGApps = true;
+
+  preFixup = ''
+    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  meta = with lib; {
+    description = "An extensible mail notification service.";
+    homepage = "http://bubblemail.free.fr/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ doronbehar ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/caeml/default.nix b/nixpkgs/pkgs/applications/networking/mailreaders/caeml/default.nix
new file mode 100644
index 000000000000..54b4c7f60cdb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/caeml/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+buildGoModule rec {
+  pname = "caeml";
+  version = "unstable-2023-05-24";
+
+  src = fetchFromGitHub {
+    owner = "ferdinandyb";
+    repo = pname;
+    rev = "25dbe10e99aac9b0ce3b80787c162628104f5cd2";
+    sha256 = "UIQCNkUyrtMF0IiAfkDvE8siqxNvfFc9TZdlZiTxCVc=";
+  };
+
+  vendorHash = "sha256-SDJsRLIGlLv/6NUctCrn6z1IDEmum1Wn5I8RFuwcOe8=";
+
+  meta = with lib; {
+    description = "cat eml files";
+    longDescription = ''
+      Reads an email file from either STDIN or from a file passed as the first
+      argument, digests it and outputs it to STDOUT in a more human readable
+      format. This means only From, To, Cc, Bcc, Date and Subject headers are
+      kept and these are decoded and of all the parts only text/plain is returned.
+    '';
+    homepage = "https://github.com/ferdinandyb/caeml";
+    license = licenses.mit;
+    maintainers = with maintainers; [ emilytrau ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/claws-mail/default.nix b/nixpkgs/pkgs/applications/networking/mailreaders/claws-mail/default.nix
new file mode 100644
index 000000000000..bc5b692501ac
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/claws-mail/default.nix
@@ -0,0 +1,163 @@
+{ stdenv, lib, fetchurl, wrapGAppsHook, autoreconfHook, bison, flex
+, curl, gtk3, pkg-config, python3, shared-mime-info
+, glib-networking, gsettings-desktop-schemas
+
+# Package compatibility: old parameters whose name were not directly derived
+, enablePgp ? true
+, enablePluginNotificationDialogs ? true
+, enablePluginNotificationSounds ? true
+, enablePluginPdf ? true
+, enablePluginRavatar ? true
+, enableSpellcheck ? true
+
+# Arguments to include external libraries
+, enableLibSM ? true, xorg
+, enableGnuTLS ? true, gnutls
+, enableEnchant ? enableSpellcheck, enchant
+, enableDbus ? true, dbus, dbus-glib
+, enableLdap ? true, openldap
+, enableNetworkManager ? true, networkmanager
+, enableLibetpan ? true, libetpan
+, enableValgrind ? !stdenv.isDarwin && lib.meta.availableOn stdenv.hostPlatform valgrind, valgrind
+, enableSvg ? true, librsvg
+
+# Configure claws-mail's plugins
+, enablePluginAcpiNotifier ? true
+, enablePluginAddressKeeper ? true
+, enablePluginArchive ? true, libarchive
+, enablePluginAttRemover ? true
+, enablePluginAttachWarner ? true
+, enablePluginBogofilter ? true
+, enablePluginBsfilter ? true
+, enablePluginClamd ? true
+, enablePluginDillo ? true
+, enablePluginFancy ? true, libsoup, webkitgtk
+, enablePluginFetchInfo ? true
+, enablePluginKeywordWarner ? true
+, enablePluginLibravatar ? enablePluginRavatar
+, enablePluginLitehtmlViewer ? true, gumbo
+, enablePluginMailmbox ? true
+, enablePluginManageSieve ? true
+, enablePluginNewMail ? true
+, enablePluginNotification ? (enablePluginNotificationDialogs || enablePluginNotificationSounds), libcanberra-gtk3, libnotify
+, enablePluginPdfViewer ? enablePluginPdf, poppler
+, enablePluginPerl ? true, perl
+, enablePluginPython ? true
+, enablePluginPgp ? enablePgp, gnupg, gpgme
+, enablePluginRssyl ? true, libxml2
+, enablePluginSmime ? true
+, enablePluginSpamassassin ? true
+, enablePluginSpamReport ? true
+, enablePluginTnefParse ? true, libytnef
+, enablePluginVcalendar ? true, libical
+}:
+
+let
+  pythonPkgs = with python3.pkgs; [ python3 wrapPython pygobject3 ];
+
+  features = [
+    { flags = [ "acpi_notifier-plugin" ]; enabled = enablePluginAcpiNotifier; }
+    { flags = [ "address_keeper-plugin" ]; enabled = enablePluginAddressKeeper; }
+    { flags = [ "archive-plugin" ]; enabled = enablePluginArchive; deps = [ libarchive ]; }
+    { flags = [ "att_remover-plugin" ]; enabled = enablePluginAttRemover; }
+    { flags = [ "attachwarner-plugin" ]; enabled = enablePluginAttachWarner; }
+    { flags = [ "bogofilter-plugin" ]; enabled = enablePluginBogofilter; }
+    { flags = [ "bsfilter-plugin" ]; enabled = enablePluginBsfilter; }
+    { flags = [ "clamd-plugin" ]; enabled = enablePluginClamd; }
+    { flags = [ "dbus" ]; enabled = enableDbus; deps = [ dbus dbus-glib ]; }
+    { flags = [ "dillo-plugin" ]; enabled = enablePluginDillo; }
+    { flags = [ "enchant" ]; enabled = enableEnchant; deps = [ enchant ]; }
+    { flags = [ "fancy-plugin" ]; enabled = enablePluginFancy; deps = [ libsoup webkitgtk ]; }
+    { flags = [ "fetchinfo-plugin" ]; enabled = enablePluginFetchInfo; }
+    { flags = [ "keyword_warner-plugin" ]; enabled = enablePluginKeywordWarner; }
+    { flags = [ "gnutls" ]; enabled = enableGnuTLS; deps = [ gnutls ]; }
+    { flags = [ "ldap" ]; enabled = enableLdap; deps = [ openldap ]; }
+    { flags = [ "libetpan" ]; enabled = enableLibetpan; deps = [ libetpan ]; }
+    { flags = [ "libravatar-plugin" ]; enabled = enablePluginLibravatar; }
+    { flags = [ "libsm" ]; enabled = enableLibSM; deps = [ xorg.libSM ]; }
+    { flags = [ "litehtml_viewer-plugin" ]; enabled = enablePluginLitehtmlViewer; deps = [ gumbo ]; }
+    { flags = [ "mailmbox-plugin" ]; enabled = enablePluginMailmbox; }
+    { flags = [ "managesieve-plugin" ]; enabled = enablePluginManageSieve; }
+    { flags = [ "networkmanager" ]; enabled = enableNetworkManager; deps = [ networkmanager ]; }
+    { flags = [ "newmail-plugin" ]; enabled = enablePluginNewMail; }
+    { flags = [ "notification-plugin" ]; enabled = enablePluginNotification; deps = [ libnotify ] ++ [libcanberra-gtk3]; }
+    { flags = [ "pdf_viewer-plugin" ]; enabled = enablePluginPdfViewer; deps = [ poppler ]; }
+    { flags = [ "perl-plugin" ]; enabled = enablePluginPerl; deps = [ perl ]; }
+    { flags = [ "pgpcore-plugin" "pgpinline-plugin" "pgpmime-plugin" ]; enabled = enablePluginPgp; deps = [ gnupg gpgme ]; }
+    { flags = [ "python-plugin" ]; enabled = enablePluginPython; }
+    { flags = [ "rssyl-plugin" ]; enabled = enablePluginRssyl; deps = [ libxml2 ]; }
+    { flags = [ "smime-plugin" ]; enabled = enablePluginSmime; }
+    { flags = [ "spam_report-plugin" ]; enabled = enablePluginSpamReport; }
+    { flags = [ "spamassassin-plugin" ]; enabled = enablePluginSpamassassin; }
+    { flags = [ "svg" ]; enabled = enableSvg; deps = [ librsvg ]; }
+    { flags = [ "tnef_parse-plugin" ]; enabled = enablePluginTnefParse; deps = [ libytnef ]; }
+    { flags = [ "valgrind" ]; enabled = enableValgrind; deps = [ valgrind ]; }
+    { flags = [ "vcalendar-plugin" ]; enabled = enablePluginVcalendar; deps = [ libical ]; }
+  ];
+in stdenv.mkDerivation rec {
+  pname = "claws-mail";
+  version = "4.1.1";
+
+  src = fetchurl {
+    url = "https://claws-mail.org/download.php?file=releases/claws-mail-${version}.tar.xz";
+    hash = "sha256-sYnnAMGJb14N6wt21L+oIOt6wZNe4Qqpr7raPPU6A0Q=";
+  };
+
+  outputs = [ "out" "dev" ];
+
+  patches = [
+    ./mime.patch
+  ];
+
+  preConfigure = ''
+    # autotools check tries to dlopen libpython as a requirement for the python plugin
+    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH''${LD_LIBRARY_PATH:+:}${python3}/lib
+    # generate version without .git
+    [ -e version ] || echo "echo ${version}" > version
+  '';
+
+  postPatch = ''
+    substituteInPlace configure.ac \
+      --replace 'm4_esyscmd([./get-git-version])' '${version}'
+    substituteInPlace src/procmime.c \
+        --subst-var-by MIMEROOTDIR ${shared-mime-info}/share
+  '';
+
+  nativeBuildInputs = [ autoreconfHook pkg-config bison flex wrapGAppsHook ];
+  propagatedBuildInputs = pythonPkgs;
+
+  buildInputs =
+    [ curl gsettings-desktop-schemas glib-networking gtk3 ]
+    ++ lib.concatMap (f: lib.optionals f.enabled f.deps) (lib.filter (f: f ? deps) features)
+  ;
+
+  configureFlags =
+    [
+      "--disable-manual"   # Missing docbook-tools, e.g., docbook2html
+      "--disable-compface" # Missing compface library
+      "--disable-jpilot"   # Missing jpilot library
+
+      "--disable-gdata-plugin" # Complains about missing libgdata, even when provided
+    ] ++
+    (map (feature: map (flag: lib.strings.enableFeature feature.enabled flag) feature.flags) features);
+
+  enableParallelBuilding = true;
+
+  preFixup = ''
+    buildPythonPath "$out $pythonPkgs"
+    gappsWrapperArgs+=(--prefix XDG_DATA_DIRS : "${shared-mime-info}/share" --prefix PYTHONPATH : "$program_PYTHONPATH")
+  '';
+
+  postInstall = ''
+    mkdir -p $out/share/applications
+    cp claws-mail.desktop $out/share/applications
+  '';
+
+  meta = with lib; {
+    description = "The user-friendly, lightweight, and fast email client";
+    homepage = "https://www.claws-mail.org/";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ fpletz globin orivej oxzi ajs124 srapenne ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/claws-mail/mime.patch b/nixpkgs/pkgs/applications/networking/mailreaders/claws-mail/mime.patch
new file mode 100644
index 000000000000..2ff4269c3329
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/claws-mail/mime.patch
@@ -0,0 +1,28 @@
+diff --git a/src/procmime.c b/src/procmime.c
+index bd3239e..06a3b26 100644
+--- a/src/procmime.c
++++ b/src/procmime.c
+@@ -1144,20 +1144,16 @@ GList *procmime_get_mime_type_list(void)
+ 	MimeType *mime_type;
+ 	gboolean fp_is_glob_file = TRUE;
+ 
+ 	if (mime_type_list) 
+ 		return mime_type_list;
+-	
+-#if defined(__NetBSD__) || defined(__OpenBSD__) || defined(__FreeBSD__)
+-	if ((fp = claws_fopen(DATAROOTDIR "/mime/globs", "rb")) == NULL) 
+-#else
+-	if ((fp = claws_fopen("/usr/share/mime/globs", "rb")) == NULL) 
+-#endif
++
++	if ((fp = claws_fopen("@MIMEROOTDIR@/mime/globs", "rb")) == NULL)
+ 	{
+ 		fp_is_glob_file = FALSE;
+ 		if ((fp = claws_fopen("/etc/mime.types", "rb")) == NULL) {
+ 			if ((fp = claws_fopen(SYSCONFDIR "/mime.types", "rb")) 
+ 				== NULL) {
+ 				FILE_OP_ERROR(SYSCONFDIR "/mime.types", 
+ 					"claws_fopen");
+ 				return NULL;
+ 			}
+
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/electron-mail/default.nix b/nixpkgs/pkgs/applications/networking/mailreaders/electron-mail/default.nix
new file mode 100644
index 000000000000..a7b51585e3a0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/electron-mail/default.nix
@@ -0,0 +1,37 @@
+{ appimageTools, lib, fetchurl, libsecret }:
+
+let
+  pname = "electron-mail";
+  version = "5.1.8";
+  name = "ElectronMail-${version}";
+
+  src = fetchurl {
+    url = "https://github.com/vladimiry/ElectronMail/releases/download/v${version}/electron-mail-${version}-linux-x86_64.AppImage";
+    sha256 = "sha256-btqlxFrQUyb728i99IE65A9jwEFNvJ5b6zji0kwwATU=";
+  };
+
+  appimageContents = appimageTools.extract { inherit name src; };
+in appimageTools.wrapType2 {
+  inherit name src;
+
+  extraInstallCommands = ''
+    mv $out/bin/${name} $out/bin/${pname}
+    install -m 444 -D ${appimageContents}/${pname}.desktop -t $out/share/applications
+    substituteInPlace $out/share/applications/${pname}.desktop \
+      --replace 'Exec=AppRun' 'Exec=${pname}'
+    cp -r ${appimageContents}/usr/share/icons $out/share
+  '';
+
+  extraPkgs = pkgs: with pkgs; [
+    libsecret
+    libappindicator-gtk3
+  ];
+
+  meta = with lib; {
+    description = "ElectronMail is an Electron-based unofficial desktop client for ProtonMail";
+    homepage = "https://github.com/vladimiry/ElectronMail";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.princemachiavelli ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/evolution/evolution-ews/default.nix b/nixpkgs/pkgs/applications/networking/mailreaders/evolution/evolution-ews/default.nix
new file mode 100644
index 000000000000..ca565423530a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/evolution/evolution-ews/default.nix
@@ -0,0 +1,97 @@
+{ stdenv
+, lib
+, fetchurl
+, gnome
+, cmake
+, gettext
+, intltool
+, pkg-config
+, evolution-data-server
+, evolution
+, gtk3
+, libsoup_3
+, libical
+, json-glib
+, libmspack
+, webkitgtk_4_1
+, substituteAll
+, _experimental-update-script-combinators
+, glib
+, makeHardcodeGsettingsPatch
+}:
+
+stdenv.mkDerivation rec {
+  pname = "evolution-ews";
+  version = "3.48.2";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "UE2YAPW6vMXBcO9QxUZOTrwSAOQZAs2mn+j6v/L7cMA=";
+  };
+
+  patches = [
+    # evolution-ews contains .so files loaded by evolution-data-server refering
+    # schemas from evolution. evolution-data-server is not wrapped with
+    # evolution's schemas because it would be a circular dependency with
+    # evolution.
+    (substituteAll {
+      src = ./hardcode-gsettings.patch;
+      evo = glib.makeSchemaPath evolution evolution.name;
+    })
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    gettext
+    intltool
+    pkg-config
+  ];
+
+  buildInputs = [
+    evolution-data-server
+    evolution
+    gtk3
+    libsoup_3
+    libical
+    json-glib
+    libmspack
+    # For evolution-shell-3.0
+    webkitgtk_4_1
+  ];
+
+  cmakeFlags = [
+    # don't try to install into ${evolution}
+    "-DFORCE_INSTALL_PREFIX=ON"
+  ];
+
+  passthru = {
+    hardcodeGsettingsPatch = makeHardcodeGsettingsPatch {
+      inherit src;
+      schemaIdToVariableMapping = {
+        "org.gnome.evolution.mail" = "evo";
+        "org.gnome.evolution.calendar" = "evo";
+      };
+    };
+
+    updateScript =
+      let
+        updateSource = gnome.updateScript {
+          packageName = "evolution-ews";
+          versionPolicy = "odd-unstable";
+        };
+        updatePatch = _experimental-update-script-combinators.copyAttrOutputToFile "evolution-ews.hardcodeGsettingsPatch" ./hardcode-gsettings.patch;
+      in
+      _experimental-update-script-combinators.sequence [
+        updateSource
+        updatePatch
+      ];
+  };
+
+  meta = with lib; {
+    description = "Evolution connector for Microsoft Exchange Server protocols";
+    homepage = "https://gitlab.gnome.org/GNOME/evolution-ews";
+    license = licenses.lgpl21Plus; # https://gitlab.gnome.org/GNOME/evolution-ews/issues/111
+    maintainers = [ maintainers.dasj19 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/evolution/evolution-ews/hardcode-gsettings.patch b/nixpkgs/pkgs/applications/networking/mailreaders/evolution/evolution-ews/hardcode-gsettings.patch
new file mode 100644
index 000000000000..dae88b9e2bae
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/evolution/evolution-ews/hardcode-gsettings.patch
@@ -0,0 +1,96 @@
+diff --git a/src/EWS/camel/camel-ews-utils.c b/src/EWS/camel/camel-ews-utils.c
+index 0707f72..1e71954 100644
+--- a/src/EWS/camel/camel-ews-utils.c
++++ b/src/EWS/camel/camel-ews-utils.c
+@@ -1552,7 +1552,18 @@ ews_utils_save_category_changes (GHashTable *old_categories, /* gchar *guid ~> C
+ 
+ 	evo_labels = g_ptr_array_new_full (5, g_free);
+ 
+-	settings = g_settings_new ("org.gnome.evolution.mail");
++	{
++		g_autoptr(GSettingsSchemaSource) schema_source;
++		g_autoptr(GSettingsSchema) schema;
++		schema_source = g_settings_schema_source_new_from_directory("@evo@",
++									    g_settings_schema_source_get_default(),
++									    TRUE,
++									    NULL);
++		schema = g_settings_schema_source_lookup(schema_source,
++							 "org.gnome.evolution.mail",
++							 FALSE);
++		settings = g_settings_new_full(schema, NULL, NULL);
++	}
+ 	strv = g_settings_get_strv (settings, "labels");
+ 
+ 	for (ii = 0; strv && strv[ii]; ii++) {
+diff --git a/src/EWS/common/e-ews-calendar-utils.c b/src/EWS/common/e-ews-calendar-utils.c
+index 6deda60..9b44cc7 100644
+--- a/src/EWS/common/e-ews-calendar-utils.c
++++ b/src/EWS/common/e-ews-calendar-utils.c
+@@ -413,7 +413,18 @@ ews_get_configured_icaltimezone (void)
+ 	gchar *location;
+ 	ICalTimezone *zone = NULL;
+ 
+-	settings = g_settings_new ("org.gnome.evolution.calendar");
++	{
++		g_autoptr(GSettingsSchemaSource) schema_source;
++		g_autoptr(GSettingsSchema) schema;
++		schema_source = g_settings_schema_source_new_from_directory("@evo@",
++									    g_settings_schema_source_get_default(),
++									    TRUE,
++									    NULL);
++		schema = g_settings_schema_source_lookup(schema_source,
++							 "org.gnome.evolution.calendar",
++							 FALSE);
++		settings = g_settings_new_full(schema, NULL, NULL);
++	}
+ 	location = g_settings_get_string (settings, "timezone");
+ 	if (location) {
+ 		zone = i_cal_timezone_get_builtin_timezone (location);
+diff --git a/src/Microsoft365/camel/camel-m365-store.c b/src/Microsoft365/camel/camel-m365-store.c
+index ff1b8e3..4f876c0 100644
+--- a/src/Microsoft365/camel/camel-m365-store.c
++++ b/src/Microsoft365/camel/camel-m365-store.c
+@@ -309,7 +309,18 @@ m365_store_save_category_changes (GHashTable *old_categories, /* gchar *id ~> Ca
+ 
+ 	evo_labels = g_ptr_array_new_full (5, g_free);
+ 
+-	settings = g_settings_new ("org.gnome.evolution.mail");
++	{
++		g_autoptr(GSettingsSchemaSource) schema_source;
++		g_autoptr(GSettingsSchema) schema;
++		schema_source = g_settings_schema_source_new_from_directory("@evo@",
++									    g_settings_schema_source_get_default(),
++									    TRUE,
++									    NULL);
++		schema = g_settings_schema_source_lookup(schema_source,
++							 "org.gnome.evolution.mail",
++							 FALSE);
++		settings = g_settings_new_full(schema, NULL, NULL);
++	}
+ 	strv = g_settings_get_strv (settings, "labels");
+ 
+ 	for (ii = 0; strv && strv[ii]; ii++) {
+diff --git a/src/Microsoft365/common/e-m365-tz-utils.c b/src/Microsoft365/common/e-m365-tz-utils.c
+index 7a1d7f4..3c0d5e1 100644
+--- a/src/Microsoft365/common/e-m365-tz-utils.c
++++ b/src/Microsoft365/common/e-m365-tz-utils.c
+@@ -192,7 +192,18 @@ e_m365_tz_utils_get_user_timezone (void)
+ 	gchar *location;
+ 	ICalTimezone *zone = NULL;
+ 
+-	settings = g_settings_new ("org.gnome.evolution.calendar");
++	{
++		g_autoptr(GSettingsSchemaSource) schema_source;
++		g_autoptr(GSettingsSchema) schema;
++		schema_source = g_settings_schema_source_new_from_directory("@evo@",
++									    g_settings_schema_source_get_default(),
++									    TRUE,
++									    NULL);
++		schema = g_settings_schema_source_lookup(schema_source,
++							 "org.gnome.evolution.calendar",
++							 FALSE);
++		settings = g_settings_new_full(schema, NULL, NULL);
++	}
+ 
+ 	if (g_settings_get_boolean (settings, "use-system-timezone"))
+ 		location = e_cal_util_get_system_timezone_location ();
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/evolution/evolution/default.nix b/nixpkgs/pkgs/applications/networking/mailreaders/evolution/evolution/default.nix
new file mode 100644
index 000000000000..fd0e436ec45c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/evolution/evolution/default.nix
@@ -0,0 +1,135 @@
+{ lib
+, stdenv
+, cmake
+, ninja
+, intltool
+, fetchurl
+, libxml2
+, webkitgtk_4_1
+, highlight
+, pkg-config
+, gtk3
+, glib
+, libnotify
+, libpst
+, gspell
+, evolution-data-server
+, libgweather
+, glib-networking
+, gsettings-desktop-schemas
+, wrapGAppsHook
+, itstool
+, shared-mime-info
+, libical
+, db
+, sqlite
+, gnome
+, gnome-desktop
+, librsvg
+, gdk-pixbuf
+, libsecret
+, nss
+, nspr
+, icu
+, libcanberra-gtk3
+, geocode-glib_2
+, cmark
+, bogofilter
+, gst_all_1
+, procps
+, p11-kit
+, openldap
+, spamassassin
+}:
+
+stdenv.mkDerivation rec {
+  pname = "evolution";
+  version = "3.48.4";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/evolution/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "oC+Z66BQp3HyxH1D/FLgCyJg/IbQYyD79S68fozni7c=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    intltool
+    itstool
+    libxml2
+    ninja
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gnome.adwaita-icon-theme
+    bogofilter
+    db
+    evolution-data-server
+    gdk-pixbuf
+    glib
+    glib-networking
+    gnome-desktop
+    gsettings-desktop-schemas
+    gst_all_1.gst-plugins-base
+    gst_all_1.gstreamer
+    gtk3
+    gspell
+    highlight
+    icu
+    libcanberra-gtk3
+    geocode-glib_2
+    cmark
+    libgweather
+    libical
+    libnotify
+    libpst
+    librsvg
+    libsecret
+    nspr
+    nss
+    openldap
+    p11-kit
+    procps
+    shared-mime-info
+    sqlite
+    webkitgtk_4_1
+  ];
+
+  propagatedUserEnvPkgs = [
+    evolution-data-server
+  ];
+
+  cmakeFlags = [
+    "-DENABLE_AUTOAR=OFF"
+    "-DENABLE_YTNEF=OFF"
+    "-DWITH_SPAMASSASSIN=${spamassassin}/bin/spamassassin"
+    "-DWITH_SA_LEARN=${spamassassin}/bin/sa-learn"
+    "-DWITH_BOGOFILTER=${bogofilter}/bin/bogofilter"
+    "-DWITH_OPENLDAP=${openldap}"
+  ];
+
+  requiredSystemFeatures = [
+    "big-parallel"
+  ];
+
+  doCheck = true;
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = "evolution";
+      versionPolicy = "odd-unstable";
+    };
+  };
+
+  PKG_CONFIG_CAMEL_1_2_CAMEL_PROVIDERDIR = "${placeholder "out"}/lib/evolution-data-server/camel-providers";
+  PKG_CONFIG_LIBEDATASERVERUI_1_2_UIMODULEDIR = "${placeholder "out"}/lib/evolution-data-server/ui-modules";
+
+  meta = with lib; {
+    homepage = "https://wiki.gnome.org/Apps/Evolution";
+    description = "Personal information management application that provides integrated mail, calendaring and address book functionality";
+    maintainers = teams.gnome.members;
+    license = licenses.lgpl2Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/evolution/evolution/wrapper.nix b/nixpkgs/pkgs/applications/networking/mailreaders/evolution/evolution/wrapper.nix
new file mode 100644
index 000000000000..6b65211d0b4b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/evolution/evolution/wrapper.nix
@@ -0,0 +1,41 @@
+{ lib, makeWrapper, symlinkJoin, gnome, plugins }:
+
+symlinkJoin {
+  name = "evolution-with-plugins";
+  paths = [ gnome.evolution-data-server ] ++ plugins;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postBuild = ''
+    declare -a schemas;
+    for plugin in ${toString plugins}; do
+      for schema in $plugin/share/gsettings-schemas/*; do
+        schemas+=($schema);
+      done
+    done
+    for i in $out/bin/* $out/libexec/**; do
+    if [ ! -d $i ]; then
+      echo wrapping $i
+      wrapProgram $i --set EDS_EXTRA_PREFIXES "${lib.concatStringsSep ":" plugins}" --prefix XDG_DATA_DIRS : "''${schemas[@]}"
+    fi
+    done
+
+    fixSymlink () {
+     local link=$1
+     local target=$(readlink $link);
+     local newtarget=$(sed "s@${builtins.storeDir}/[^/]*/@$out/@" <<< "$target")
+     if [[ $target != $newtarget ]] && [[ -d $newtarget ]]; then
+       echo fixing link to point to $newtarget instead of $target
+       rm $link
+       ln -s $newtarget $link
+     fi
+    }
+
+    fixSymlink $out/share/dbus-1/service
+    fixSymlink $out/lib/systemd/user
+    for i in $out/share/dbus-1/services/*.service $out/lib/systemd/user/*.service; do
+      echo fixing service file $i to point to $out
+      sed -i "s@${builtins.storeDir}/[^/]*/@$out/@" $i
+    done
+  '';
+}
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/hasmail/default.nix b/nixpkgs/pkgs/applications/networking/mailreaders/hasmail/default.nix
new file mode 100644
index 000000000000..d750937c3ee1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/hasmail/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, pkg-config
+, pango
+, cairo
+, gtk2
+}:
+
+buildGoModule rec {
+  pname = "hasmail-unstable";
+  version = "2019-08-24";
+
+  src = fetchFromGitHub {
+    owner = "jonhoo";
+    repo = "hasmail";
+    rev = "eb52536d26815383bfe5990cd5ace8bb9d036c8d";
+    sha256 = "1p6kwa5xk1mb1fkkxz1b5rcyp5kb4zc8nfif1gk6fab6wbdj9ia1";
+  };
+
+  vendorSha256 = "129hvr8qh5mxj6mzg7793p5jsi4jmsm96f63j7r8wn544yq8sqci";
+
+  doCheck = false;
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    pango
+    cairo
+    gtk2
+  ];
+
+  meta = with lib; {
+    description = "Simple tray icon for detecting new email on IMAP servers";
+    homepage = "https://github.com/jonhoo/hasmail";
+    license = licenses.unlicense;
+    maintainers = with maintainers; [ doronbehar ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/himalaya/default.nix b/nixpkgs/pkgs/applications/networking/mailreaders/himalaya/default.nix
new file mode 100644
index 000000000000..197fe158618d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/himalaya/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, stdenv
+, installShellFiles
+, installShellCompletions ? stdenv.hostPlatform == stdenv.buildPlatform
+, installManPages ? stdenv.hostPlatform == stdenv.buildPlatform
+, notmuch
+, withImapBackend ? true
+, withNotmuchBackend ? false
+, withSmtpSender ? true
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "himalaya";
+  version = "0.8.4";
+
+  src = fetchFromGitHub {
+    owner = "soywod";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-AImLYRRCL6IvoSeMFH2mbkNOvUmLwIvhWB3cOoqDljk=";
+  };
+
+  cargoSha256 = "deJZPaZW6rb7A6wOL3vcphBXu0F7EXc1xRwSDY/v8l4=";
+
+  nativeBuildInputs = lib.optional (installManPages || installShellCompletions) installShellFiles;
+
+  buildInputs = lib.optional withNotmuchBackend notmuch;
+
+  buildNoDefaultFeatures = true;
+  buildFeatures = [ ]
+    ++ lib.optional withImapBackend "imap-backend"
+    ++ lib.optional withNotmuchBackend "notmuch-backend"
+    ++ lib.optional withSmtpSender "smtp-sender";
+
+  postInstall = lib.optionalString installManPages ''
+    mkdir -p $out/man
+    $out/bin/himalaya man $out/man
+    installManPage $out/man/*
+  '' + lib.optionalString installShellCompletions ''
+    installShellCompletion --cmd himalaya \
+      --bash <($out/bin/himalaya completion bash) \
+      --fish <($out/bin/himalaya completion fish) \
+      --zsh <($out/bin/himalaya completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "CLI to manage your emails.";
+    homepage = "https://pimalaya.org/himalaya/";
+    changelog = "https://github.com/soywod/himalaya/blob/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ soywod toastal yanganto ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/imapfilter.nix b/nixpkgs/pkgs/applications/networking/mailreaders/imapfilter.nix
new file mode 100644
index 000000000000..d0072a00c5a6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/imapfilter.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, openssl, lua, pcre2 }:
+
+stdenv.mkDerivation rec {
+  pname = "imapfilter";
+  version = "2.8.1";
+
+  src = fetchFromGitHub {
+    owner = "lefcha";
+    repo = "imapfilter";
+    rev = "v${version}";
+    sha256 = "sha256-nHKZ3skRbDhKWocaw5mbaRnZC37FxFIVd08iFgrEA0s=";
+  };
+  makeFlags = [
+    "SSLCAFILE=/etc/ssl/certs/ca-bundle.crt"
+    "PREFIX=$(out)"
+  ];
+
+  buildInputs = [ openssl pcre2 lua ];
+
+  meta = {
+    homepage = "https://github.com/lefcha/imapfilter";
+    description = "Mail filtering utility";
+    license = lib.licenses.mit;
+    platforms = lib.platforms.unix;
+    maintainers = with lib.maintainers; [ doronbehar ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/lumail/default.nix b/nixpkgs/pkgs/applications/networking/mailreaders/lumail/default.nix
new file mode 100644
index 000000000000..878b778c5a50
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/lumail/default.nix
@@ -0,0 +1,82 @@
+{ lib, stdenv, fetchurl, pkg-config, lua, file, ncurses, gmime, pcre-cpp
+, perl, perlPackages, makeWrapper
+, debugBuild ? false
+, alternativeGlobalConfigFilePath ? null
+}:
+
+let
+  version    = "3.1";
+  binaryName = if debugBuild then "lumail2-debug" else "lumail2";
+  alternativeConfig = builtins.toFile "lumail2.lua"
+    (builtins.readFile alternativeGlobalConfigFilePath);
+
+  globalConfig = if alternativeGlobalConfigFilePath == null then ''
+    mkdir -p $out/etc/lumail2
+    cp global.config.lua $out/etc/lumail2.lua
+    for n in ./lib/*.lua; do
+      cp "$n" $out/etc/lumail2/
+    done
+  '' else ''
+    ln -s ${alternativeConfig} $out/etc/lumail2.lua
+  '';
+
+  getPath  = type : "${lua}/lib/?.${type};";
+  luaPath  = getPath "lua";
+  luaCPath = getPath "so";
+in
+stdenv.mkDerivation {
+  pname = "lumail";
+  inherit version;
+
+  src = fetchurl {
+    url = "https://lumail.org/download/lumail-${version}.tar.gz";
+    sha256 = "0vj7p7f02m3w8wb74ilajcwznc4ai4h2ikkz9ildy0c00aqsi5w4";
+  };
+
+  enableParallelBuilding = true;
+
+  nativeBuildInputs = [ pkg-config makeWrapper ];
+  buildInputs = [
+    lua file ncurses gmime pcre-cpp
+    perl perlPackages.JSON perlPackages.NetIMAPClient
+  ];
+
+  preConfigure = ''
+    sed -e 's|"/etc/lumail2|LUMAIL_LUAPATH"/..|' -i src/lumail2.cc src/imap_proxy.cc
+
+    perlFlags=
+    for i in $(IFS=:; echo $PERL5LIB); do
+        perlFlags="$perlFlags -I$i"
+    done
+
+    sed -e "s|^#\!\(.*/perl.*\)$|#\!\1$perlFlags|" -i perl.d/imap-proxy
+  '';
+
+  buildFlags = lib.optional debugBuild "lumail2-debug";
+
+  installPhase = ''
+    mkdir -p $out/bin || true
+    install -m755 ${binaryName} $out/bin/
+  ''
+  + globalConfig
+  + ''
+    wrapProgram $out/bin/${binaryName} \
+        --prefix LUA_PATH : "${luaPath}" \
+        --prefix LUA_CPATH : "${luaCPath}"
+  '';
+
+  makeFlags = [
+    "LVER=lua"
+    "PREFIX=$(out)"
+    "SYSCONFDIR=$(out)/etc"
+    "LUMAIL_LIBS=$(out)/etc/lumail2"
+  ];
+
+  meta = with lib; {
+    description = "Console-based email client";
+    homepage = "https://lumail.org/";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [orivej];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/mailcheck/default.nix b/nixpkgs/pkgs/applications/networking/mailreaders/mailcheck/default.nix
new file mode 100644
index 000000000000..43590c9d3361
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/mailcheck/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "mailcheck";
+  version = "1.91.2";
+
+  patches = [ ./mailcheck-Makefile.patch ];
+
+  src = fetchurl {
+    url = "mirror://sourceforge/mailcheck/mailcheck_${version}.tar.gz";
+    sha256 = "0p0azaxsnjvjbg41ycicc1i0kzw6jiynq8k49cfkdhlckxfdm9kc";
+  };
+
+  meta = {
+    description = "Simple command line tool to check for new messages";
+    homepage    = "https://mailcheck.sourceforge.net/";
+    license     = lib.licenses.gpl2;
+    maintainers = with lib.maintainers; [ kovirobi ];
+    platforms   = lib.platforms.linux;
+    longDescription = ''
+      A simple command line tool to check for new mail in local mbox and
+      maildir and remote POP3 and IMAP mailboxes.
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/mailcheck/mailcheck-Makefile.patch b/nixpkgs/pkgs/applications/networking/mailreaders/mailcheck/mailcheck-Makefile.patch
new file mode 100644
index 000000000000..46b3bff4f7a9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/mailcheck/mailcheck-Makefile.patch
@@ -0,0 +1,22 @@
+diff -u a/Makefile b/Makefile
+--- a/Makefile	2015-04-05 19:31:41.871227295 +0100
++++ b/Makefile	2015-04-05 19:42:49.743517508 +0100
+@@ -1,3 +1,5 @@
++prefix=$(out)
++
+ all: mailcheck
+ 
+ debug: mailcheck.c netrc.c netrc.h socket.c
+@@ -7,8 +9,10 @@
+ 	$(CC) -Wall -O2 mailcheck.c netrc.c socket.c -s -o mailcheck
+ 
+ install: mailcheck
+-	install mailcheck $(prefix)/usr/bin
+-	install -m 644 mailcheckrc $(prefix)/etc
++	[ -d $(prefix)/bin ] || mkdir $(prefix)/bin
++	[ -d $(prefix)/etc ] || mkdir $(prefix)/etc
++	install mailcheck $(prefix)/bin/
++	install -m 644 mailcheckrc $(prefix)/etc/
+ 
+ distclean: clean
+ 
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/mailnag/default.nix b/nixpkgs/pkgs/applications/networking/mailreaders/mailnag/default.nix
new file mode 100644
index 000000000000..4f6b3015cf34
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/mailnag/default.nix
@@ -0,0 +1,108 @@
+{ lib
+, fetchFromGitHub
+, gettext
+, xorg # for lndir
+, gtk3
+, python3Packages
+, gdk-pixbuf
+, libnotify
+, gst_all_1
+, libsecret
+, wrapGAppsHook
+, gsettings-desktop-schemas
+, glib
+, gobject-introspection
+# Available plugins (can be overridden)
+, availablePlugins
+# Used in the withPlugins interface at passthru, can be overrided directly, or
+# prefarably via e.g: `mailnag.withPlugins([mailnag.availablePlugins.goa])`
+, mailnag
+, userPlugins ? [ ]
+, pluginsDeps ? [ ]
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "mailnag";
+  version = "2.2.0";
+
+  src = fetchFromGitHub {
+    owner = "pulb";
+    repo = "mailnag";
+    rev = "v${version}";
+    sha256 = "0m1cyzwzm7z4p2v31dx098a1iar7dbilwyjcxiqnjx05nlmiqvgf";
+  };
+
+  buildInputs = [
+    gtk3
+    gdk-pixbuf
+    glib
+    libnotify
+    gst_all_1.gstreamer
+    gst_all_1.gst-plugins-base
+    gst_all_1.gst-plugins-good
+    gst_all_1.gst-plugins-bad
+    libsecret
+  ] ++ pluginsDeps;
+
+  nativeBuildInputs = [
+    gettext
+    wrapGAppsHook
+    gobject-introspection
+    # To later add plugins to
+    xorg.lndir
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    gsettings-desktop-schemas
+    pygobject3
+    dbus-python
+    pyxdg
+  ];
+
+  passthru = {
+    inherit availablePlugins;
+    withPlugins =
+      plugs:
+      let
+        # goa plugin requires gio's gnome-online-accounts which requires making sure
+        # mailnag runs with GI_TYPELIB_PATH containing the path to Goa-1.0.typelib.
+        # This is handled best by adding the plugins' deps to buildInputs and let
+        # wrapGAppsHook handle that.
+        pluginsDeps = lib.flatten (lib.catAttrs "buildInputs" plugs);
+        self = mailnag;
+      in
+        self.override {
+          userPlugins = plugs;
+          inherit pluginsDeps;
+        };
+  };
+
+  # See https://nixos.org/nixpkgs/manual/#ssec-gnome-common-issues-double-wrapped
+  dontWrapGApps = true;
+
+  preFixup = ''
+    substituteInPlace $out/${python3Packages.python.sitePackages}/Mailnag/common/dist_cfg.py \
+      --replace "/usr/" $out/
+    for desktop_file in $out/share/applications/*.desktop; do
+      substituteInPlace "$desktop_file" \
+      --replace "/usr/bin" $out/bin
+    done
+    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  # Actually install plugins
+  postInstall = ''
+    for plug in ${builtins.toString userPlugins}; do
+      lndir $plug/${python3Packages.python.sitePackages} $out/${python3Packages.python.sitePackages}
+    done
+  '';
+
+  meta = with lib; {
+    description = "An extensible mail notification daemon";
+    homepage = "https://github.com/pulb/mailnag";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ doronbehar ];
+    broken = true; # at 2022-09-23
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/mailnag/goa-plugin.nix b/nixpkgs/pkgs/applications/networking/mailreaders/mailnag/goa-plugin.nix
new file mode 100644
index 000000000000..bb758565eb8a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/mailnag/goa-plugin.nix
@@ -0,0 +1,34 @@
+{ lib
+, fetchFromGitHub
+, python3Packages
+, gobject-introspection
+, gnome-online-accounts
+}:
+
+python3Packages.buildPythonPackage rec {
+  pname = "mailnag-goa-plugin";
+  version = "2.0.0";
+
+  src = fetchFromGitHub {
+    owner = "pulb";
+    repo = "mailnag-goa-plugin";
+    rev = "v${version}";
+    sha256 = "0bij6cy96nhq7xzslx0fnhmiac629h0x4wgy67k4i4npwqw10680";
+  };
+
+  nativeBuildInputs = [
+    gobject-introspection
+  ];
+
+  buildInputs = [
+    gnome-online-accounts
+  ];
+
+  meta = with lib; {
+    description = "Mailnag GNOME Online Accounts plugin.";
+    homepage = "https://github.com/pulb/mailnag-goa-plugin";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ doronbehar ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/mailspring/default.nix b/nixpkgs/pkgs/applications/networking/mailreaders/mailspring/default.nix
new file mode 100644
index 000000000000..9b5adb3a9772
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/mailspring/default.nix
@@ -0,0 +1,103 @@
+{ stdenv
+, lib
+, fetchurl
+, autoPatchelfHook
+, alsa-lib
+, coreutils
+, db
+, dpkg
+, glib
+, gtk3
+, wrapGAppsHook
+, libkrb5
+, libsecret
+, nss
+, openssl
+, udev
+, xorg
+, mesa
+, libdrm
+, libappindicator
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mailspring";
+  version = "1.11.0";
+
+  src = fetchurl {
+    url = "https://github.com/Foundry376/Mailspring/releases/download/${version}/mailspring-${version}-amd64.deb";
+    hash = "sha256-aAqkltVxIlGwRVGM+1QkrVgfnitl+D3Xb0qi0o8ow+Q=";
+  };
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+    dpkg
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    alsa-lib
+    db
+    glib
+    gtk3
+    libkrb5
+    libsecret
+    nss
+    xorg.libxkbfile
+    xorg.libXdamage
+    xorg.libXScrnSaver
+    xorg.libXtst
+    xorg.libxshmfence
+    mesa
+    libdrm
+  ];
+
+  runtimeDependencies = [
+    coreutils
+    openssl
+    (lib.getLib udev)
+    libappindicator
+  ];
+
+  unpackPhase = ''
+    runHook preUnpack
+
+    dpkg -x $src .
+
+    runHook postUnpack
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/{bin,lib}
+    cp -ar ./usr/share $out
+
+    substituteInPlace $out/share/mailspring/resources/app.asar.unpacked/mailsync \
+      --replace dirname ${coreutils}/bin/dirname
+
+    ln -s $out/share/mailspring/mailspring $out/bin/mailspring
+    ln -s ${lib.getLib openssl}/lib/libcrypto.so $out/lib/libcrypto.so.1.0.0
+
+    runHook postInstall
+  '';
+
+  postFixup = /* sh */ ''
+    substituteInPlace $out/share/applications/Mailspring.desktop \
+      --replace Exec=mailspring Exec=$out/bin/mailspring
+  '';
+
+  meta = with lib; {
+    description = "A beautiful, fast and maintained fork of Nylas Mail by one of the original authors";
+    longDescription = ''
+      Mailspring is an open-source mail client forked from Nylas Mail and built with Electron.
+      Mailspring's sync engine runs locally, but its source is not open.
+    '';
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ toschmidt ];
+    homepage = "https://getmailspring.com";
+    downloadPage = "https://github.com/Foundry376/Mailspring";
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/mblaze/default.nix b/nixpkgs/pkgs/applications/networking/mailreaders/mblaze/default.nix
new file mode 100644
index 000000000000..fb852f76045d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/mblaze/default.nix
@@ -0,0 +1,54 @@
+{ coreutils, fetchFromGitHub, file, gawk, gnugrep, gnused
+, installShellFiles, lib, libiconv, makeWrapper, stdenv, ruby
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mblaze";
+  version = "1.2";
+
+  nativeBuildInputs = [ installShellFiles makeWrapper ];
+  buildInputs = [ libiconv ruby ];
+
+  src = fetchFromGitHub {
+    owner = "leahneukirchen";
+    repo = "mblaze";
+    rev = "v${version}";
+    sha256 = "sha256-LCyw3xGsYjsbExueRHVRqoJYluji9MmZq5zGclvSSDk=";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  enableParallelBuilding = true;
+
+  postInstall = ''
+    installShellCompletion contrib/_mblaze
+  '' + lib.optionalString (ruby != null) ''
+    install -Dt $out/bin contrib/msuck contrib/mblow
+
+    # The following wrappings are used to preserve the executable
+    # names (the value of $0 in a script). The script mcom is
+    # designed to be run directly or via symlinks such as mrep. Using
+    # symlinks changes the value of $0 in the script, and makes it
+    # behave differently. When using the wrapProgram tool, the resulting
+    # wrapper breaks this behaviour. The following wrappers preserve it.
+
+    mkdir -p $out/wrapped
+    for x in mcom mbnc mfwd mrep; do
+      mv $out/bin/$x $out/wrapped
+      makeWrapper $out/wrapped/$x $out/bin/$x \
+        --argv0 $out/bin/$x \
+        --prefix PATH : $out/bin \
+        --prefix PATH : ${lib.makeBinPath [
+          coreutils file gawk gnugrep gnused
+        ]}
+    done
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/leahneukirchen/mblaze";
+    description = "Unix utilities for processing and interacting with mail messages which are stored in maildir folders";
+    license = licenses.cc0;
+    platforms = platforms.all;
+    maintainers = [ maintainers.ajgrf ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/mlarchive2maildir/default.nix b/nixpkgs/pkgs/applications/networking/mailreaders/mlarchive2maildir/default.nix
new file mode 100644
index 000000000000..7d3be7c62baf
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/mlarchive2maildir/default.nix
@@ -0,0 +1,28 @@
+{ lib, python3, fetchPypi }:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "mlarchive2maildir";
+  version = "0.0.9";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "02zjwa7zbcbqj76l0qmg7bbf3fqli60pl2apby3j4zwzcrrryczs";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [ setuptools-scm ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    beautifulsoup4
+    click
+    click-log
+    requests
+    six
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/flokli/mlarchive2maildir";
+    description = "Imports mail from (pipermail) archives into a maildir";
+    license = licenses.mit;
+    maintainers = with maintainers; [ flokli ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/mmh/default.nix b/nixpkgs/pkgs/applications/networking/mailreaders/mmh/default.nix
new file mode 100644
index 000000000000..50bbb0b0f664
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/mmh/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl, fetchpatch, ncurses, autoreconfHook, flex }:
+let rev = "b17ea39dc17e5514f33b3f5c34ede92bd16e208c";
+in stdenv.mkDerivation rec {
+  pname = "mmh";
+  version = "unstable-2020-08-21";
+
+  src = fetchurl {
+    url = "http://git.marmaro.de/?p=mmh;a=snapshot;h=${rev};sf=tgz";
+    name = "mmh-${rev}.tgz";
+    sha256 = "1bqfxafw4l2y46pnsxgy4ji1xlyifzw01k1ykbsjj9p61q3nv6l6";
+  };
+
+  postPatch = ''
+    substituteInPlace sbr/Makefile.in \
+      --replace "ar " "${stdenv.cc.targetPrefix}ar "
+ '';
+
+  buildInputs = [ ncurses ];
+  nativeBuildInputs = [ autoreconfHook flex ];
+
+  meta = with lib; {
+    description = "Set of electronic mail handling programs";
+    homepage = "http://marmaro.de/prog/mmh";
+    license = licenses.bsd3;
+    platforms = platforms.unix;
+    broken = stdenv.isDarwin;
+    maintainers = with maintainers; [ kaction ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/msgviewer/default.nix b/nixpkgs/pkgs/applications/networking/mailreaders/msgviewer/default.nix
new file mode 100644
index 000000000000..fd980893124f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/msgviewer/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchurl, makeWrapper, unzip, jre, runtimeShell }:
+
+stdenv.mkDerivation rec {
+  version = "1.9";
+  pname = "msgviewer";
+  uname = "MSGViewer";
+
+  src = fetchurl {
+    url    = "mirror://sourceforge/msgviewer/${uname}-${version}/${uname}-${version}.zip";
+    sha256 = "0igmr8c0757xsc94xlv2470zv2mz57zaj52dwr9wj8agmj23jbjz";
+  };
+
+  buildCommand = ''
+    dir=$out/lib/msgviewer
+    mkdir -p $out/bin $dir
+    unzip $src -d $dir
+    mv $dir/${uname}-${version}/* $dir
+    rmdir $dir/${uname}-${version}
+    cat <<_EOF > $out/bin/msgviewer
+    #!${runtimeShell} -eu
+    exec ${lib.getBin jre}/bin/java -jar $dir/MSGViewer.jar "\$@"
+    _EOF
+    chmod 755 $out/bin/msgviewer
+  '';
+
+  nativeBuildInputs = [ makeWrapper unzip ];
+
+  meta = with lib; {
+    description = "Viewer for .msg files (MS Outlook)";
+    homepage    = "https://www.washington.edu/alpine/";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license     = licenses.asl20;
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms   = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/mswatch/default.nix b/nixpkgs/pkgs/applications/networking/mailreaders/mswatch/default.nix
new file mode 100644
index 000000000000..2706b9c4597f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/mswatch/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, stdenv
+, fetchsvn
+, pkg-config
+, autoreconfHook
+, bison
+, flex
+, glib
+}:
+
+stdenv.mkDerivation {
+  pname = "mswatch";
+  # Stable release won't compile successfully
+  version = "unstable-2018-11-21";
+
+  src = fetchsvn {
+    url = "svn://svn.code.sf.net/p/mswatch/code/trunk";
+    rev = "369";
+    sha256 = "sha256-czwwhchTizfgVmeknQGLijYgaFSP/45pD2yhDKj5BKw=";
+  };
+  nativeBuildInputs = [
+    pkg-config
+    autoreconfHook
+    bison # For yacc
+    flex
+  ];
+  buildInputs = [
+    glib
+  ];
+
+  meta = with lib; {
+    description = "A command-line Linux utility that efficiently directs mail synchronization between a pair of mailboxes";
+    homepage = "https://mswatch.sourceforge.net/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ doronbehar ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/mutt/default.nix b/nixpkgs/pkgs/applications/networking/mailreaders/mutt/default.nix
new file mode 100644
index 000000000000..6674e957cb5b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/mutt/default.nix
@@ -0,0 +1,111 @@
+{ lib, stdenv, fetchurl, fetchpatch, ncurses, which, perl
+, gdbm ? null
+, openssl ? null
+, cyrus_sasl ? null
+, gnupg ? null
+, gpgme ? null
+, libkrb5 ? null
+, headerCache  ? true
+, sslSupport   ? true
+, saslSupport  ? true
+, smimeSupport ? false
+, gpgSupport   ? false
+, gpgmeSupport ? true
+, imapSupport  ? true
+, pop3Support  ? true
+, smtpSupport  ? true
+, withSidebar  ? true
+, gssSupport   ? true
+, writeScript
+}:
+assert smimeSupport -> sslSupport;
+assert gpgmeSupport -> sslSupport;
+
+stdenv.mkDerivation rec {
+  pname = "mutt";
+  version = "2.2.12";
+  outputs = [ "out" "doc" "info" ];
+
+  src = fetchurl {
+    url = "http://ftp.mutt.org/pub/mutt/${pname}-${version}.tar.gz";
+    hash = "sha256-BDrzEvZLjlb3/Qv3f4SiBdTEmAML2VhkV2ZcR7sYzjg=";
+  };
+
+  patches = [
+    # Avoid build-only references embedding into 'mutt -v' output.
+    ./no-build-only-refs.patch
+  ] ++ lib.optional smimeSupport (fetchpatch {
+    url = "https://salsa.debian.org/mutt-team/mutt/raw/debian/1.10.1-2/debian/patches/misc/smime.rc.patch";
+    sha256 = "0b4i00chvx6zj9pcb06x2jysmrcb2znn831lcy32cgfds6gr3nsi";
+  });
+
+  buildInputs =
+    [ ncurses which perl ]
+    ++ lib.optional headerCache  gdbm
+    ++ lib.optional sslSupport   openssl
+    ++ lib.optional gssSupport   libkrb5
+    ++ lib.optional saslSupport  cyrus_sasl
+    ++ lib.optional gpgmeSupport gpgme;
+
+  configureFlags = [
+    (lib.enableFeature headerCache  "hcache")
+    (lib.enableFeature gpgmeSupport "gpgme")
+    (lib.enableFeature imapSupport  "imap")
+    (lib.enableFeature smtpSupport  "smtp")
+    (lib.enableFeature pop3Support  "pop")
+    (lib.enableFeature withSidebar  "sidebar")
+    "--with-mailpath="
+
+    # Look in $PATH at runtime, instead of hardcoding /usr/bin/sendmail
+    "ac_cv_path_SENDMAIL=sendmail"
+
+    # This allows calls with "-d N", that output debug info into ~/.muttdebug*
+    "--enable-debug"
+
+    # The next allows building mutt without having anything setgid
+    # set by the installer, and removing the need for the group 'mail'
+    # I set the value 'mailbox' because it is a default in the configure script
+    "--with-homespool=mailbox"
+  ] ++ lib.optional sslSupport  "--with-ssl"
+    ++ lib.optional gssSupport  "--with-gss"
+    ++ lib.optional saslSupport "--with-sasl";
+
+  postPatch = lib.optionalString (smimeSupport || gpgmeSupport) ''
+    sed -i 's#/usr/bin/openssl#${openssl}/bin/openssl#' smime_keys.pl
+  '';
+
+  postInstall = lib.optionalString smimeSupport ''
+    # S/MIME setup
+    cp contrib/smime.rc $out/etc/smime.rc
+    sed -i 's#openssl#${openssl}/bin/openssl#' $out/etc/smime.rc
+    echo "source $out/etc/smime.rc" >> $out/etc/Muttrc
+  '' + lib.optionalString gpgSupport ''
+    # GnuPG setup
+    cp contrib/gpg.rc $out/etc/gpg.rc
+    sed -i 's#\(command="\)gpg #\1${gnupg}/bin/gpg #' $out/etc/gpg.rc
+    echo "source $out/etc/gpg.rc" >> $out/etc/Muttrc
+  '';
+
+  passthru = {
+    updateScript = writeScript "update-mutt" ''
+      #!/usr/bin/env nix-shell
+      #!nix-shell -i bash -p curl pcre common-updater-scripts
+
+      set -euo pipefail
+
+      # Expect the text in format of "The current stable public release version is 2.2.6."
+      new_version="$(curl -s http://www.mutt.org/download.html |
+          pcregrep -o1 'The current stable public release version is ([0-9.]+).')"
+      update-source-version ${pname} "$new_version"
+    '';
+  };
+
+  meta = with lib; {
+    description = "A small but very powerful text-based mail client";
+    homepage = "http://www.mutt.org";
+    mainProgram = "mutt";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ rnhmjoj ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/mutt/no-build-only-refs.patch b/nixpkgs/pkgs/applications/networking/mailreaders/mutt/no-build-only-refs.patch
new file mode 100644
index 000000000000..ed1ebbc380a6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/mutt/no-build-only-refs.patch
@@ -0,0 +1,24 @@
+Avoid build-only store references embedding into 'mutt -v'.
+--- a/txt2c.sh
++++ b/txt2c.sh
+@@ -21,8 +21,18 @@ txt2c_fallback () {
+ 	echo ";"
+ }
+ 
++nix_store_mangle() {
++	# consume stdin
++
++	# Avoid build-only references to nix store. These are usually
++	# 'gcc -v' output embedded into 'mutt -v'. But also might be
++	# ./configure-passed arguments.
++	sed \
++	    -e "s|$NIX_STORE/[a-z0-9]\{32\}-|$NIX_STORE/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-|g"
++}
++
+ if ./txt2c test </dev/null >/dev/null 2>&1; then
+-    ./txt2c "$1"
++    nix_store_mangle | ./txt2c "$1"
+ else
+-    txt2c_fallback "$1"
++    nix_store_mangle | txt2c_fallback "$1"
+ fi
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/neomutt/default.nix b/nixpkgs/pkgs/applications/networking/mailreaders/neomutt/default.nix
new file mode 100644
index 000000000000..d57f0a0b1fac
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/neomutt/default.nix
@@ -0,0 +1,124 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, gettext, makeWrapper, tcl, which
+, ncurses, perl , cyrus_sasl, gss, gpgme, libkrb5, libidn2, libxml2, notmuch, openssl
+, lua, lmdb, libxslt, docbook_xsl, docbook_xml_dtd_42, w3m, mailcap, sqlite, zlib, lndir
+, pkg-config, zstd, enableZstd ? true, enableMixmaster ? false, enableLua ? false
+, withContrib ? true
+}:
+
+stdenv.mkDerivation rec {
+  version = "20230517";
+  pname = "neomutt";
+
+  src = fetchFromGitHub {
+    owner  = "neomutt";
+    repo   = "neomutt";
+    rev    = version;
+    sha256 = "sha256-1i0STaJulJP0LWdNfLLIEKVapfkcguYRnbc+psWlVE4=";
+  };
+
+  patches = [
+    # https://github.com/neomutt/neomutt/issues/3773#issuecomment-1493295144
+    ./fix-open-very-large-mailbox.patch
+    (fetchpatch {
+      name = "disable-incorrect-tests.patch";
+      url = "https://github.com/neomutt/neomutt/pull/3933.patch";
+      hash = "sha256-Plei063T8XyXF4/7/nAb6/4OyXz72vBAXHwls9WL1vM=";
+      excludes = [".github/workflows/macos.yml"];
+    })
+  ];
+
+  buildInputs = [
+    cyrus_sasl gss gpgme libkrb5 libidn2 ncurses
+    notmuch openssl perl lmdb
+    mailcap sqlite
+  ]
+  ++ lib.optional enableZstd zstd
+  ++ lib.optional enableLua lua;
+
+  nativeBuildInputs = [
+    docbook_xsl docbook_xml_dtd_42 gettext libxml2 libxslt.bin makeWrapper tcl which zlib w3m
+    pkg-config
+  ];
+
+  enableParallelBuilding = true;
+
+  postPatch = ''
+    substituteInPlace auto.def --replace /usr/sbin/sendmail sendmail
+    substituteInPlace contrib/smime_keys \
+      --replace /usr/bin/openssl ${openssl}/bin/openssl
+
+    for f in doc/*.{xml,xsl}*  ; do
+      substituteInPlace $f \
+        --replace http://docbook.sourceforge.net/release/xsl/current     ${docbook_xsl}/share/xml/docbook-xsl \
+        --replace http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd ${docbook_xml_dtd_42}/xml/dtd/docbook/docbookx.dtd
+    done
+
+
+    # allow neomutt to map attachments to their proper mime.types if specified wrongly
+    # and use a far more comprehensive list than the one shipped with neomutt
+    substituteInPlace send/sendlib.c \
+      --replace /etc/mime.types ${mailcap}/etc/mime.types
+  '';
+
+  configureFlags = [
+    "--enable-autocrypt"
+    "--gpgme"
+    "--gss"
+    "--lmdb"
+    "--notmuch"
+    "--ssl"
+    "--sasl"
+    "--with-homespool=mailbox"
+    "--with-mailpath="
+    # To make it not reference .dev outputs. See:
+    # https://github.com/neomutt/neomutt/pull/2367
+    "--disable-include-path-in-cflags"
+    "--zlib"
+  ]
+  ++ lib.optional enableZstd "--zstd"
+  ++ lib.optional enableLua "--lua"
+  ++ lib.optional enableMixmaster "--mixmaster";
+
+  postInstall = ''
+    wrapProgram "$out/bin/neomutt" --prefix PATH : "$out/libexec/neomutt"
+  ''
+  # https://github.com/neomutt/neomutt-contrib
+  # Contains vim-keys, keybindings presets and more.
+  + lib.optionalString withContrib "${lib.getExe lndir} ${passthru.contrib} $out/share/doc/neomutt";
+
+  doCheck = true;
+
+  preCheck = ''
+    cp -r ${passthru.test-files} $(pwd)/test-files
+    chmod -R +w test-files
+    (cd test-files && ./setup.sh)
+
+    export NEOMUTT_TEST_DIR=$(pwd)/test-files
+  '';
+
+  passthru = {
+    test-files = fetchFromGitHub {
+      owner = "neomutt";
+      repo = "neomutt-test-files";
+      rev = "1569b826a56c39fd09f7c6dd5fc1163ff5a356a2";
+      sha256 = "sha256-MaH2zEH1Wq3C0lFxpEJ+b/A+k2aKY/sr1EtSPAuRPp8=";
+    };
+    contrib = fetchFromGitHub {
+      owner = "neomutt";
+      repo = "neomutt-contrib";
+      rev = "8e97688693ca47ea1055f3d15055a4f4ecc5c832";
+      sha256 = "sha256-tx5Y819rNDxOpjg3B/Y2lPcqJDArAxVwjbYarVmJ79k=";
+    };
+  };
+
+  checkTarget = "test";
+  postCheck = "unset NEOMUTT_TEST_DIR";
+
+  meta = with lib; {
+    description = "A small but very powerful text-based mail client";
+    homepage    = "http://www.neomutt.org";
+    license     = licenses.gpl2Plus;
+    maintainers = with maintainers; [ cstrahan erikryb jfrankenau vrthra ma27 raitobezarius ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/neomutt/fix-open-very-large-mailbox.patch b/nixpkgs/pkgs/applications/networking/mailreaders/neomutt/fix-open-very-large-mailbox.patch
new file mode 100644
index 000000000000..11a4464a57ca
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/neomutt/fix-open-very-large-mailbox.patch
@@ -0,0 +1,51 @@
+diff --git a/mutt_mailbox.c b/mutt_mailbox.c
+index 5581a8187..22f0ca21a 100644
+--- a/mutt_mailbox.c
++++ b/mutt_mailbox.c
+@@ -160,6 +160,9 @@ int mutt_mailbox_check(struct Mailbox *m_cur, CheckStatsFlags flags)
+   st_ctx.st_dev = 0;
+   st_ctx.st_ino = 0;
+
++  if (kInMboxOpen)
++    return 0;
++
+ #ifdef USE_IMAP
+   if (flags & MUTT_MAILBOX_CHECK_FORCE)
+     mutt_update_num_postponed();
+diff --git a/mx.c b/mx.c
+index 4bf5af141..a4e9f83f5 100644
+--- a/mx.c
++++ b/mx.c
+@@ -295,6 +295,8 @@ bool mx_mbox_ac_link(struct Mailbox *m)
+   return true;
+ }
+
++int kInMboxOpen = 0;
++
+ /**
+  * mx_mbox_open - Open a mailbox and parse it
+  * @param m     Mailbox to open
+@@ -386,8 +388,10 @@ bool mx_mbox_open(struct Mailbox *m, OpenMailboxFlags flags)
+   m->msg_tagged = 0;
+   m->vcount = 0;
+
++  kInMboxOpen = 1;
+   enum MxOpenReturns rc = m->mx_ops->mbox_open(m);
+   m->opened++;
++  kInMboxOpen = 0;
+
+   if ((rc == MX_OPEN_OK) || (rc == MX_OPEN_ABORT))
+   {
+diff --git a/mx.h b/mx.h
+index 741431570..43e40bf32 100644
+--- a/mx.h
++++ b/mx.h
+@@ -38,6 +38,8 @@ extern const struct MxOps *mx_ops[];
+
+ extern struct EnumDef MboxTypeDef;
+
++extern int kInMboxOpen;
++
+ typedef uint8_t MsgOpenFlags;      ///< Flags for mx_msg_open_new(), e.g. #MUTT_ADD_FROM
+ #define MUTT_MSG_NO_FLAGS       0  ///< No flags are set
+ #define MUTT_ADD_FROM     (1 << 0) ///< add a From_ line
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/notmuch-addrlookup/default.nix b/nixpkgs/pkgs/applications/networking/mailreaders/notmuch-addrlookup/default.nix
new file mode 100644
index 000000000000..3ba78c743928
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/notmuch-addrlookup/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, glib, notmuch }:
+
+let
+  version = "10";
+in
+stdenv.mkDerivation {
+  pname = "notmuch-addrlookup";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "aperezdc";
+    repo = "notmuch-addrlookup-c";
+    rev ="v${version}";
+    sha256 = "sha256-Z59MAptJw95azdK0auOuUyxBrX4PtXwnRNPkhjgI6Ro=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ glib notmuch ];
+
+  installPhase = "install -D notmuch-addrlookup $out/bin/notmuch-addrlookup";
+
+  meta = with lib; {
+    description = "Address lookup tool for Notmuch in C";
+    homepage = "https://github.com/aperezdc/notmuch-addrlookup-c";
+    maintainers = with maintainers; [ mog ];
+    platforms = platforms.unix;
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/notmuch-bower/default.nix b/nixpkgs/pkgs/applications/networking/mailreaders/notmuch-bower/default.nix
new file mode 100644
index 000000000000..235991396f57
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/notmuch-bower/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchFromGitHub, mercury, pandoc, ncurses, gpgme }:
+
+stdenv.mkDerivation rec {
+  pname = "notmuch-bower";
+  version = "1.0";
+
+  src = fetchFromGitHub {
+    owner = "wangp";
+    repo = "bower";
+    rev = version;
+    sha256 = "sha256-BNuJEVuzreI2AK/fqVMRHq8ZhPQjO33Y2FzkrWlfmm0=";
+  };
+
+  nativeBuildInputs = [ mercury pandoc ];
+
+  buildInputs = [ ncurses gpgme ];
+
+  makeFlags = [ "PARALLEL=-j$(NIX_BUILD_CORES)" "bower" "man" ];
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/bin
+    mv bower $out/bin/
+    mkdir -p $out/share/man/man1
+    mv bower.1 $out/share/man/man1/
+    runHook postInstall
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    homepage = "https://github.com/wangp/bower";
+    description = "A curses terminal client for the Notmuch email system";
+    maintainers = with maintainers; [ jgart ];
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/notmuch/default.nix b/nixpkgs/pkgs/applications/networking/mailreaders/notmuch/default.nix
new file mode 100644
index 000000000000..87ad4a015fd8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/notmuch/default.nix
@@ -0,0 +1,150 @@
+{ fetchurl, lib, stdenv, makeWrapper
+, pkg-config, gnupg
+, xapian, gmime3, sfsexp, talloc, zlib
+, doxygen, perl, texinfo
+, notmuch
+, pythonPackages
+, emacs
+, ruby
+, testers
+, gitUpdater
+, which, dtach, openssl, bash, gdb, man, git
+, withEmacs ? true
+, withRuby ? true
+, withSfsexp ? true # also installs notmuch-git, which requires sexp-support
+}:
+
+stdenv.mkDerivation rec {
+  pname = "notmuch";
+  version = "0.38";
+
+  src = fetchurl {
+    url = "https://notmuchmail.org/releases/notmuch-${version}.tar.xz";
+    sha256 = "sha256-oXkBrb5D9IGmv1PBWiogJovI3HrVzPaFoNF8FFbbr24=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    doxygen                   # (optional) api docs
+    pythonPackages.sphinx     # (optional) documentation -> doc/INSTALL
+    texinfo                   # (optional) documentation -> doc/INSTALL
+    pythonPackages.cffi
+  ] ++ lib.optional withEmacs emacs
+    ++ lib.optional withRuby ruby
+    ++ lib.optional withSfsexp makeWrapper;
+
+  buildInputs = [
+    gnupg                     # undefined dependencies
+    xapian gmime3 talloc zlib  # dependencies described in INSTALL
+    perl
+    pythonPackages.python
+  ] ++ lib.optional withRuby ruby
+    ++ lib.optional withSfsexp sfsexp;
+
+  postPatch = ''
+    patchShebangs configure test/
+
+    substituteInPlace lib/Makefile.local \
+      --replace '-install_name $(libdir)' "-install_name $out/lib"
+
+    # do not override CFLAGS of the Makefile created by mkmf
+    substituteInPlace bindings/Makefile.local \
+      --replace 'CFLAGS="$(CFLAGS) -pipe -fno-plt -fPIC"' ""
+  '' + lib.optionalString withEmacs ''
+    substituteInPlace emacs/notmuch-emacs-mua \
+      --replace 'EMACS:-emacs' 'EMACS:-${emacs}/bin/emacs' \
+      --replace 'EMACSCLIENT:-emacsclient' 'EMACSCLIENT:-${emacs}/bin/emacsclient'
+  '';
+
+  configureFlags = [
+    "--zshcompletiondir=${placeholder "out"}/share/zsh/site-functions"
+    "--bashcompletiondir=${placeholder "out"}/share/bash-completion/completions"
+    "--infodir=${placeholder "info"}/share/info"
+  ] ++ lib.optional (!withEmacs) "--without-emacs"
+    ++ lib.optional withEmacs "--emacslispdir=${placeholder "emacs"}/share/emacs/site-lisp"
+    ++ lib.optional (!withRuby) "--without-ruby";
+
+  # Notmuch doesn't use autoconf and consequently doesn't tag --bindir and
+  # friends
+  setOutputFlags = false;
+  enableParallelBuilding = true;
+  makeFlags = [ "V=1" ];
+
+  postConfigure = ''
+    mkdir ${placeholder "bindingconfig"}
+    cp bindings/python-cffi/_notmuch_config.py ${placeholder "bindingconfig"}/
+  '';
+
+  outputs = [ "out" "man" "info" "bindingconfig" ]
+    ++ lib.optional withEmacs "emacs"
+    ++ lib.optional withRuby "ruby";
+
+  # if notmuch is built with s-expression support, the testsuite (T-850.sh) only
+  # passes if notmuch-git can be executed, so we need to patch its shebang.
+  postBuild = lib.optionalString withSfsexp ''
+    patchShebangs notmuch-git
+  '';
+
+  preCheck = let
+    test-database = fetchurl {
+      url = "https://notmuchmail.org/releases/test-databases/database-v1.tar.xz";
+      sha256 = "1lk91s00y4qy4pjh8638b5lfkgwyl282g1m27srsf7qfn58y16a2";
+    };
+  in ''
+    mkdir -p test/test-databases
+    ln -s ${test-database} test/test-databases/database-v1.tar.xz
+  ''
+  # Issues since gnupg: 2.4.0 -> 2.4.1
+  + ''
+    rm test/{T350-crypto,T357-index-decryption}.sh
+  '';
+
+  doCheck = !stdenv.hostPlatform.isDarwin && (lib.versionAtLeast gmime3.version "3.0.3");
+  checkTarget = "test";
+  nativeCheckInputs = [
+    which dtach openssl bash
+    gdb man
+  ]
+  # for the test T-850.sh for notmuch-git, which is skipped when notmuch is
+  # built without sexp-support
+  ++ lib.optional withEmacs emacs
+  ++ lib.optional withSfsexp git;
+
+  installTargets = [ "install" "install-man" "install-info" ];
+
+  postInstall = lib.optionalString withEmacs ''
+    moveToOutput bin/notmuch-emacs-mua $emacs
+  '' + lib.optionalString withRuby ''
+    make -C bindings/ruby install \
+      vendordir=$ruby/lib/ruby \
+      SHELL=$SHELL \
+      $makeFlags "''${makeFlagsArray[@]}" \
+      $installFlags "''${installFlagsArray[@]}"
+  ''
+  # notmuch-git (https://notmuchmail.org/doc/latest/man1/notmuch-git.html) does not work without
+  # sexp-support, so there is no point in installing if we're building without it.
+  + lib.optionalString withSfsexp ''
+    cp notmuch-git $out/bin/notmuch-git
+    wrapProgram $out/bin/notmuch-git --prefix PATH : $out/bin:${lib.getBin git}/bin
+  '';
+
+  passthru = {
+    pythonSourceRoot = "notmuch-${version}/bindings/python";
+    tests.version = testers.testVersion { package = notmuch; };
+    inherit version;
+
+    updateScript = gitUpdater {
+      url = "https://git.notmuchmail.org/git/notmuch";
+      ignoredVersions = "_rc.*";
+    };
+  };
+
+  meta = with lib; {
+    description = "Mail indexer";
+    homepage    = "https://notmuchmail.org/";
+    changelog   = "https://git.notmuchmail.org/git?p=notmuch;a=blob_plain;f=NEWS;hb=${version}";
+    license     = licenses.gpl3Plus;
+    maintainers = with maintainers; [ flokli puckipedia ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/notmuch/muchsync.nix b/nixpkgs/pkgs/applications/networking/mailreaders/notmuch/muchsync.nix
new file mode 100644
index 000000000000..c1db11908012
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/notmuch/muchsync.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchurl
+, notmuch, openssl, pkg-config, sqlite, xapian, zlib
+}:
+stdenv.mkDerivation rec {
+  version = "7";
+  pname = "muchsync";
+  passthru = {
+    inherit version;
+  };
+  src = fetchurl {
+    url = "http://www.muchsync.org/src/${pname}-${version}.tar.gz";
+    hash = "sha256-+D4vb80O9IE0df3cjTkoVoZlTaX0FWWh6ams14Gjvqw=";
+  };
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ notmuch openssl sqlite xapian zlib ];
+  XAPIAN_CONFIG = "${xapian}/bin/xapian-config";
+  meta = {
+    description = "Synchronize maildirs and notmuch databases";
+    homepage = "http://www.muchsync.org/";
+    platforms = lib.platforms.unix;
+    maintainers = with lib.maintainers; [];
+    license = lib.licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/notmuch/mutt.nix b/nixpkgs/pkgs/applications/networking/mailreaders/notmuch/mutt.nix
new file mode 100644
index 000000000000..4cd9706bdb97
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/notmuch/mutt.nix
@@ -0,0 +1,46 @@
+{ stdenv, lib, perl, perlPackages, makeWrapper, coreutils, notmuch }:
+
+stdenv.mkDerivation rec {
+  pname = "notmuch-mutt";
+  version = notmuch.version;
+
+  outputs = [ "out" ];
+
+  dontStrip = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [
+    perl
+  ] ++ (with perlPackages; [
+    FileRemove
+    DigestSHA1
+    Later
+    MailBox
+    MailMaildir
+    MailTools
+    StringShellQuote
+    TermReadLineGnu
+  ]);
+
+  src = notmuch.src;
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    ${coreutils}/bin/install -Dm755 \
+      ./contrib/notmuch-mutt/notmuch-mutt \
+      $out/bin/notmuch-mutt
+
+    wrapProgram $out/bin/notmuch-mutt \
+      --prefix PERL5LIB : $PERL5LIB
+  '';
+
+  meta = with lib; {
+    description = "Mutt support for notmuch";
+    homepage    = "https://notmuchmail.org/";
+    license     = with licenses; gpl3;
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/notmuch/notmuch-mailmover.nix b/nixpkgs/pkgs/applications/networking/mailreaders/notmuch/notmuch-mailmover.nix
new file mode 100644
index 000000000000..12a2437121a5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/notmuch/notmuch-mailmover.nix
@@ -0,0 +1,29 @@
+{ notmuch
+, lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+}:
+rustPlatform.buildRustPackage rec {
+  pname = "notmuch-mailmover";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "michaeladler";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-b2Q1JcXIp56Niv5kdPgQSM91e8hPPdyhWIG4f7kQn78=";
+  };
+
+  buildInputs = [ notmuch ];
+
+  cargoSha256 = "sha256-AW0mCdQN3WJhSErJ/MqnNIsRX+C6Pb/zHCQh7v/70MU=";
+
+  meta = with lib; {
+    description = "Application to assign notmuch tagged mails to IMAP folders";
+    homepage = "https://github.com/michaeladler/notmuch-mailmover/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ michaeladler archer-65 ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/sylpheed/default.nix b/nixpkgs/pkgs/applications/networking/mailreaders/sylpheed/default.nix
new file mode 100644
index 000000000000..90b7dbd28d4c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/sylpheed/default.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv, fetchurl, pkg-config, gtk2, openssl ? null, gpgme ? null
+, gpgSupport ? true, sslSupport ? true, fetchpatch, Foundation }:
+
+assert gpgSupport -> gpgme != null;
+assert sslSupport -> openssl != null;
+
+stdenv.mkDerivation rec {
+  pname = "sylpheed";
+  version = "3.7.0";
+
+  src = fetchurl {
+    url = "https://sylpheed.sraoss.jp/sylpheed/v3.7/${pname}-${version}.tar.xz";
+    sha256 = "0j9y5vdzch251s264diw9clrn88dn20bqqkwfmis9l7m8vmwasqd";
+  };
+
+  patches = [
+    (fetchpatch {
+      # patch upstream bug https://sylpheed.sraoss.jp/redmine/issues/306
+      name = "patch-libsylph_ssl_c.patch";
+      extraPrefix = "";
+      url = "https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/ports/mail/sylpheed/patches/patch-libsylph_ssl_c?rev=1.4&content-type=text/plain";
+      sha256 = "sha256-+FetU5vrfvE78nYAjKK/QFZnFw+Zr2PvoUGRWCuZczs=";
+    })
+    (fetchpatch {
+      name = "CVE-2021-37746.patch";
+      url = "https://git.claws-mail.org/?p=claws.git;a=patch;h=ac286a71ed78429e16c612161251b9ea90ccd431";
+      sha256 = "sha256-oLmUShtvO6io3jibKT67eO0O58vEDZEeaB51QTd3UkU=";
+    })
+  ];
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ gtk2 ]
+    ++ lib.optionals gpgSupport [ gpgme ]
+    ++ lib.optionals sslSupport [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ Foundation ];
+
+  configureFlags = lib.optional gpgSupport "--enable-gpgme"
+    ++ lib.optional sslSupport "--enable-ssl";
+
+  # Undefined symbols for architecture arm64: "_OBJC_CLASS_$_NSAutoreleasePool"
+  NIX_LDFLAGS = lib.optionalString stdenv.isDarwin "-framework Foundation";
+
+  meta = with lib; {
+    homepage = "https://sylpheed.sraoss.jp/en/";
+    description = "Lightweight and user-friendly e-mail client";
+    maintainers = with maintainers; [ eelco ];
+    platforms = platforms.linux ++ platforms.darwin;
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/thunderbird-bin/default.nix b/nixpkgs/pkgs/applications/networking/mailreaders/thunderbird-bin/default.nix
new file mode 100644
index 000000000000..984881508929
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/thunderbird-bin/default.nix
@@ -0,0 +1,223 @@
+# Update instructions:
+#
+# To update `thunderbird-bin`'s `release_sources.nix`, run from the nixpkgs root:
+#
+#     nix-shell maintainers/scripts/update.nix --argstr package pkgs.thunderbird-bin-unwrapped
+{ lib, stdenv, fetchurl, config, wrapGAppsHook
+, alsa-lib
+, atk
+, cairo
+, curl
+, cups
+, dbus-glib
+, dbus
+, fontconfig
+, freetype
+, gdk-pixbuf
+, glib
+, glibc
+, gtk2
+, gtk3
+, libkrb5
+, libX11
+, libXScrnSaver
+, libxcb
+, libXcomposite
+, libXcursor
+, libXdamage
+, libXext
+, libXfixes
+, libXi
+, libXinerama
+, libXrender
+, libXrandr
+, libXt
+, libXtst
+, libcanberra
+, libnotify
+, adwaita-icon-theme
+, libGLU, libGL
+, nspr
+, nss_latest
+, pango
+, pipewire
+, pciutils
+, heimdal
+, libpulseaudio
+, systemd
+, writeScript
+, writeText
+, xidel
+, coreutils
+, gnused
+, gnugrep
+, gnupg
+, ffmpeg
+, runtimeShell
+, mesa # thunderbird wants gbm for drm+dmabuf
+, systemLocale ? config.i18n.defaultLocale or "en_US"
+, generated
+}:
+
+let
+  inherit (generated) version sources;
+
+  mozillaPlatforms = {
+    i686-linux = "linux-i686";
+    x86_64-linux = "linux-x86_64";
+  };
+
+  arch = mozillaPlatforms.${stdenv.hostPlatform.system};
+
+  isPrefixOf = prefix: string:
+    builtins.substring 0 (builtins.stringLength prefix) string == prefix;
+
+  sourceMatches = locale: source:
+      (isPrefixOf source.locale locale) && source.arch == arch;
+
+  policies = { DisableAppUpdate = true; } // config.thunderbird.policies or { };
+  policiesJson = writeText "thunderbird-policies.json" (builtins.toJSON { inherit policies; });
+
+  defaultSource = lib.findFirst (sourceMatches "en-US") {} sources;
+
+  mozLocale =
+    if systemLocale == "ca_ES@valencia"
+    then "ca-valencia"
+    else lib.replaceStrings ["_"] ["-"] systemLocale;
+
+  source = lib.findFirst (sourceMatches mozLocale) defaultSource sources;
+in
+
+stdenv.mkDerivation {
+  pname = "thunderbird-bin";
+  inherit version;
+
+  src = fetchurl {
+    url = "https://download-installer.cdn.mozilla.net/pub/thunderbird/releases/${version}/${source.arch}/${source.locale}/thunderbird-${version}.tar.bz2";
+    inherit (source) sha256;
+  };
+
+  libPath = lib.makeLibraryPath
+    [ stdenv.cc.cc
+      alsa-lib
+      atk
+      cairo
+      curl
+      cups
+      dbus-glib
+      dbus
+      fontconfig
+      freetype
+      gdk-pixbuf
+      glib
+      glibc
+      gtk2
+      gtk3
+      libkrb5
+      mesa
+      libX11
+      libXScrnSaver
+      libXcomposite
+      libXcursor
+      libxcb
+      libXdamage
+      libXext
+      libXfixes
+      libXi
+      libXinerama
+      libXrender
+      libXrandr
+      libXt
+      libXtst
+      libcanberra
+      libnotify
+      libGLU libGL
+      nspr
+      nss_latest
+      pango
+      pipewire
+      pciutils
+      heimdal
+      libpulseaudio
+      systemd
+      ffmpeg
+    ] + ":" + lib.makeSearchPathOutput "lib" "lib64" [
+      stdenv.cc.cc
+    ];
+
+  inherit gtk3;
+
+  nativeBuildInputs = [ wrapGAppsHook ];
+
+  buildInputs = [ gtk3 adwaita-icon-theme ];
+
+  # "strip" after "patchelf" may break binaries.
+  # See: https://github.com/NixOS/patchelf/issues/10
+  dontStrip = true;
+  dontPatchELF = true;
+
+  patchPhase = ''
+    # Don't download updates from Mozilla directly
+    echo 'pref("app.update.auto", "false");' >> defaults/pref/channel-prefs.js
+  '';
+
+  # See "Note on GPG support" in `../thunderbird/default.nix` for explanations
+  # on adding `gnupg` and `gpgme` into PATH/LD_LIBRARY_PATH.
+  installPhase =
+    ''
+      mkdir -p "$prefix/usr/lib/thunderbird-bin-${version}"
+      cp -r * "$prefix/usr/lib/thunderbird-bin-${version}"
+
+      mkdir -p "$out/bin"
+      ln -s "$prefix/usr/lib/thunderbird-bin-${version}/thunderbird" "$out/bin/"
+
+      for executable in \
+        thunderbird thunderbird-bin plugin-container \
+        updater crashreporter webapprt-stub \
+        glxtest vaapitest
+      do
+        if [ -e "$out/usr/lib/thunderbird-bin-${version}/$executable" ]; then
+          patchelf --interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+            "$out/usr/lib/thunderbird-bin-${version}/$executable"
+        fi
+      done
+
+      find . -executable -type f -exec \
+        patchelf --set-rpath "$libPath" \
+          "$out/usr/lib/thunderbird-bin-${version}/{}" \;
+
+      # wrapThunderbird expects "$out/lib" instead of "$out/usr/lib"
+      ln -s "$out/usr/lib" "$out/lib"
+
+      gappsWrapperArgs+=(--argv0 "$out/bin/.thunderbird-wrapped")
+
+      # See: https://github.com/mozilla/policy-templates/blob/master/README.md
+      mkdir -p "$out/lib/thunderbird-bin-${version}/distribution";
+      ln -s ${policiesJson} "$out/lib/thunderbird-bin-${version}/distribution/policies.json";
+    '';
+
+  passthru.updateScript = import ./../../browsers/firefox-bin/update.nix {
+    inherit lib writeScript xidel coreutils gnused gnugrep curl gnupg runtimeShell;
+    pname = "thunderbird-bin";
+    baseName = "thunderbird";
+    channel = "release";
+    basePath = "pkgs/applications/networking/mailreaders/thunderbird-bin";
+    baseUrl = "http://archive.mozilla.org/pub/thunderbird/releases/";
+  };
+
+  passthru = {
+    binaryName = "thunderbird";
+  };
+
+  meta = with lib; {
+    changelog = "https://www.thunderbird.net/en-US/thunderbird/${version}/releasenotes/";
+    description = "Mozilla Thunderbird, a full-featured email client (binary package)";
+    homepage = "http://www.mozilla.org/thunderbird/";
+    mainProgram = "thunderbird";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.mpl20;
+    maintainers = with lib.maintainers; [ lovesegfault ];
+    platforms = builtins.attrNames mozillaPlatforms;
+    hydraPlatforms = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/thunderbird-bin/release_sources.nix b/nixpkgs/pkgs/applications/networking/mailreaders/thunderbird-bin/release_sources.nix
new file mode 100644
index 000000000000..3d1783e2df87
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/thunderbird-bin/release_sources.nix
@@ -0,0 +1,665 @@
+{
+  version = "115.2.1";
+  sources = [
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/af/thunderbird-115.2.1.tar.bz2";
+      locale = "af";
+      arch = "linux-x86_64";
+      sha256 = "6ec790ea389d3aacb87ce92f4eea013c3c09906678f7e7be2d89197ea1c94644";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/ar/thunderbird-115.2.1.tar.bz2";
+      locale = "ar";
+      arch = "linux-x86_64";
+      sha256 = "bdb690846921d78fbc18e76834be7f75eb2530c95fb6bf3475b1b2014c7ed53b";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/ast/thunderbird-115.2.1.tar.bz2";
+      locale = "ast";
+      arch = "linux-x86_64";
+      sha256 = "0b358b5fd62e8a01af76be648d49cbcfe2688e811fbb074d0a5c9c2836707dbb";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/be/thunderbird-115.2.1.tar.bz2";
+      locale = "be";
+      arch = "linux-x86_64";
+      sha256 = "c497f4b6793b6284b4a543757a972cb32bd0b719f4616aed114d775c0d87e82b";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/bg/thunderbird-115.2.1.tar.bz2";
+      locale = "bg";
+      arch = "linux-x86_64";
+      sha256 = "e5742af97828bd26a12d95bb776530a15bedac21ac3ca3539420ea86cdae7bec";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/br/thunderbird-115.2.1.tar.bz2";
+      locale = "br";
+      arch = "linux-x86_64";
+      sha256 = "4a67429467160111eb2ad764369ca47840fcd5edde69cd005468d490c514734e";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/ca/thunderbird-115.2.1.tar.bz2";
+      locale = "ca";
+      arch = "linux-x86_64";
+      sha256 = "91c1e37ab9093230f09ff3cec1409bf1eaf4eacd679120307d360a8dbdfe82b0";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/cak/thunderbird-115.2.1.tar.bz2";
+      locale = "cak";
+      arch = "linux-x86_64";
+      sha256 = "de2547de53b17451589ed4403ae494b4aac566d5e1066446c1c713c71484dabd";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/cs/thunderbird-115.2.1.tar.bz2";
+      locale = "cs";
+      arch = "linux-x86_64";
+      sha256 = "220d9281f262bc77abcfd1c24b14e872c9673c8e8ad708895a1556a41db70c0a";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/cy/thunderbird-115.2.1.tar.bz2";
+      locale = "cy";
+      arch = "linux-x86_64";
+      sha256 = "80896fe06303e1001ceb9aefb8144205ea023dc7ce32e90b2c7b1f0e03331a7b";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/da/thunderbird-115.2.1.tar.bz2";
+      locale = "da";
+      arch = "linux-x86_64";
+      sha256 = "cea678e0ca28e77f58c86d2a117f5a5655b4287fbd482106c2a57aa165e79936";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/de/thunderbird-115.2.1.tar.bz2";
+      locale = "de";
+      arch = "linux-x86_64";
+      sha256 = "eae1b45086b49401b06c14f583b1cd6202f020b947c704853abfbe26465841b8";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/dsb/thunderbird-115.2.1.tar.bz2";
+      locale = "dsb";
+      arch = "linux-x86_64";
+      sha256 = "1bfccacdc02b717aa13a533349061f785c6b4549e670b17ed62cb6061e5d49a4";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/el/thunderbird-115.2.1.tar.bz2";
+      locale = "el";
+      arch = "linux-x86_64";
+      sha256 = "d49552c27e69a837b80ab1f43f933bb0110f94a247868b646396b2f608cd29ea";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/en-CA/thunderbird-115.2.1.tar.bz2";
+      locale = "en-CA";
+      arch = "linux-x86_64";
+      sha256 = "e57f4f4845e9835120c45d5e4bfed35b3cece1b1c9a00eaf0b242a6fca3f6c00";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/en-GB/thunderbird-115.2.1.tar.bz2";
+      locale = "en-GB";
+      arch = "linux-x86_64";
+      sha256 = "86deb32983d72697bb8c5fa565845f77a428eb9c629fc06820c2100409193ec8";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/en-US/thunderbird-115.2.1.tar.bz2";
+      locale = "en-US";
+      arch = "linux-x86_64";
+      sha256 = "48548474044abe48f1b6820ca50a2b675749c488079cdd1503bd7b9f47f6051c";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/es-AR/thunderbird-115.2.1.tar.bz2";
+      locale = "es-AR";
+      arch = "linux-x86_64";
+      sha256 = "974af79f910fb3699e7af2d48358eae6aac08353884e212a6a7245491b0269fd";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/es-ES/thunderbird-115.2.1.tar.bz2";
+      locale = "es-ES";
+      arch = "linux-x86_64";
+      sha256 = "4b60facead7af5009a4954b8521c7a158594ee15c89b0e814ea4c7d33e7742ec";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/es-MX/thunderbird-115.2.1.tar.bz2";
+      locale = "es-MX";
+      arch = "linux-x86_64";
+      sha256 = "747153c08c152417758d462fd42728ad4d9de0c854feda1d804fd34b31774e28";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/et/thunderbird-115.2.1.tar.bz2";
+      locale = "et";
+      arch = "linux-x86_64";
+      sha256 = "53fe77007f0a854adf954776647eb0fb735c77b06206eb445ae4cf67e509ca08";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/eu/thunderbird-115.2.1.tar.bz2";
+      locale = "eu";
+      arch = "linux-x86_64";
+      sha256 = "cad749208fe180b60f8547cb954f3a3a2f6d51b512c83f46b40746eedc63a8a6";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/fi/thunderbird-115.2.1.tar.bz2";
+      locale = "fi";
+      arch = "linux-x86_64";
+      sha256 = "b99125795824bd70039f5980d96ca92f51e056f37de47ded35acfc92efe6211e";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/fr/thunderbird-115.2.1.tar.bz2";
+      locale = "fr";
+      arch = "linux-x86_64";
+      sha256 = "aa4693b642cd707a04b67665cb07f628428ce25005f695d6014d0017ff7399a1";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/fy-NL/thunderbird-115.2.1.tar.bz2";
+      locale = "fy-NL";
+      arch = "linux-x86_64";
+      sha256 = "8503e7f85f973b81c3626a0681224b884d4f162f1acdc244d86032b9ab7ef60b";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/ga-IE/thunderbird-115.2.1.tar.bz2";
+      locale = "ga-IE";
+      arch = "linux-x86_64";
+      sha256 = "fe9ad8c381eb589bfe7a1e1e566c0753c4c40e58057b74896d93251c52774846";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/gd/thunderbird-115.2.1.tar.bz2";
+      locale = "gd";
+      arch = "linux-x86_64";
+      sha256 = "7da47060bcff9482022734422473f5cfc7ab6cb6d06394001b643e02ae847cf3";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/gl/thunderbird-115.2.1.tar.bz2";
+      locale = "gl";
+      arch = "linux-x86_64";
+      sha256 = "ff2aab5cac9e412b51eec3824dbfa91304f0ef11a799a523b2d004de9eb5c56d";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/he/thunderbird-115.2.1.tar.bz2";
+      locale = "he";
+      arch = "linux-x86_64";
+      sha256 = "0315c9082a2fc8142d80fd5d9214df15b09439ce032c9b14b67e294937e85883";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/hr/thunderbird-115.2.1.tar.bz2";
+      locale = "hr";
+      arch = "linux-x86_64";
+      sha256 = "fc3a825581d3076686529053e82fd42c8e5ef424828d608d62d0c31ac45e0115";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/hsb/thunderbird-115.2.1.tar.bz2";
+      locale = "hsb";
+      arch = "linux-x86_64";
+      sha256 = "0163507ddbba36493633ba57ff84cffd5bee36e1c1ed716b083a3e042a7d5999";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/hu/thunderbird-115.2.1.tar.bz2";
+      locale = "hu";
+      arch = "linux-x86_64";
+      sha256 = "c44f49d00e3e03027f3fdf407613bc052346b47a899a905709bd415cd6b5616d";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/hy-AM/thunderbird-115.2.1.tar.bz2";
+      locale = "hy-AM";
+      arch = "linux-x86_64";
+      sha256 = "0a95d0f1fb25e2d53cf6f622cff4950b9b2c08b755775ffeb9b9e0e02c8fd84b";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/id/thunderbird-115.2.1.tar.bz2";
+      locale = "id";
+      arch = "linux-x86_64";
+      sha256 = "f687ad0c797c23213e9d3f99ba598f82dd4412e85eb0056be68d35bca519ebef";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/is/thunderbird-115.2.1.tar.bz2";
+      locale = "is";
+      arch = "linux-x86_64";
+      sha256 = "d3dfe00ead9922d045b7b16da29dfdbd33241df64cf229acaf9b336baf33d966";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/it/thunderbird-115.2.1.tar.bz2";
+      locale = "it";
+      arch = "linux-x86_64";
+      sha256 = "ad6f0d910ec164069f3df453f7d505d79281955d2770511b7b2f5e537264e935";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/ja/thunderbird-115.2.1.tar.bz2";
+      locale = "ja";
+      arch = "linux-x86_64";
+      sha256 = "0c73f8e985c1f5cad17dc743cb7896886e75daf6bfa06bd6dc45115f5972fc65";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/ka/thunderbird-115.2.1.tar.bz2";
+      locale = "ka";
+      arch = "linux-x86_64";
+      sha256 = "a03164ab8a35f690d06f2874e6f9d8a09aa1c08c2bd237760f7491f851f9c118";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/kab/thunderbird-115.2.1.tar.bz2";
+      locale = "kab";
+      arch = "linux-x86_64";
+      sha256 = "221400b62e8114d50168cd90919dc86c7134f2817486bb79eb4306148a7f5d0a";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/kk/thunderbird-115.2.1.tar.bz2";
+      locale = "kk";
+      arch = "linux-x86_64";
+      sha256 = "2a71a2b04d17867ca11f14c4abe26080ea53fe292f9ef48652b3faade0d7dd10";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/ko/thunderbird-115.2.1.tar.bz2";
+      locale = "ko";
+      arch = "linux-x86_64";
+      sha256 = "bcff9316fd5e0bffed71ef0e6700e0ed3ea889ed8378015225edbaa1d7a2d241";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/lt/thunderbird-115.2.1.tar.bz2";
+      locale = "lt";
+      arch = "linux-x86_64";
+      sha256 = "15314e896b9b01771a85da9dbf00c8005ffc29cd998ad2173c4702817faf7257";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/lv/thunderbird-115.2.1.tar.bz2";
+      locale = "lv";
+      arch = "linux-x86_64";
+      sha256 = "6443c684e6d9b94609585e24d69393923ac9022d6465b6075c02f0d13c575860";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/ms/thunderbird-115.2.1.tar.bz2";
+      locale = "ms";
+      arch = "linux-x86_64";
+      sha256 = "6ca9aa994e4783c9f4fea81e32e154e427698dd334ac46e0bf7a96c8fe4f2cab";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/nb-NO/thunderbird-115.2.1.tar.bz2";
+      locale = "nb-NO";
+      arch = "linux-x86_64";
+      sha256 = "ce379df01e38b254eb03fdb1b652abd4b0b3f4e233273b1d67e5d6e251fa57cf";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/nl/thunderbird-115.2.1.tar.bz2";
+      locale = "nl";
+      arch = "linux-x86_64";
+      sha256 = "17f72bc671926c1c1a30df4cfc221046c3b3678e7c6653dd704d4f1db72bcda4";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/nn-NO/thunderbird-115.2.1.tar.bz2";
+      locale = "nn-NO";
+      arch = "linux-x86_64";
+      sha256 = "2c2de12ce1a45f83ae2fafdf908364b8a7f69c63030b126d893df516f593cf3e";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/pa-IN/thunderbird-115.2.1.tar.bz2";
+      locale = "pa-IN";
+      arch = "linux-x86_64";
+      sha256 = "a5495c9469b0d2436b467133d2368754377aec509ce8d21749e58028a67a9815";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/pl/thunderbird-115.2.1.tar.bz2";
+      locale = "pl";
+      arch = "linux-x86_64";
+      sha256 = "20f91a27f13c2e806308382bf19e8748e4c7a419b89a6e9738d277c077c8c34d";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/pt-BR/thunderbird-115.2.1.tar.bz2";
+      locale = "pt-BR";
+      arch = "linux-x86_64";
+      sha256 = "4303cedc8d80bfcfd6127271feccae6a2da8c18a53f839fbb1e0c4cb72d2fb79";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/pt-PT/thunderbird-115.2.1.tar.bz2";
+      locale = "pt-PT";
+      arch = "linux-x86_64";
+      sha256 = "c68eb14f000af4fe8cf6f18536f30713c69589ca0cb82c8fa439790181acf74f";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/rm/thunderbird-115.2.1.tar.bz2";
+      locale = "rm";
+      arch = "linux-x86_64";
+      sha256 = "529a5c074528740afa763143889449324abc72195a2838440da4e392c2dc1c73";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/ro/thunderbird-115.2.1.tar.bz2";
+      locale = "ro";
+      arch = "linux-x86_64";
+      sha256 = "166d54a779379219be0ffef97a7332acd25e9575ebfc66b0178d9c77d37679a9";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/ru/thunderbird-115.2.1.tar.bz2";
+      locale = "ru";
+      arch = "linux-x86_64";
+      sha256 = "4e8f8bb50fa3d6f4c307398fa99839bd788751f7cc26353295440936c81824a4";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/sk/thunderbird-115.2.1.tar.bz2";
+      locale = "sk";
+      arch = "linux-x86_64";
+      sha256 = "874e16d287596fc666d949c438dcbcc8582bccc8003add0c9482636843ffed50";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/sl/thunderbird-115.2.1.tar.bz2";
+      locale = "sl";
+      arch = "linux-x86_64";
+      sha256 = "93c789e5f3568ed79c22bf8371a2f9e7727411458c0ccb310d31904010d07936";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/sq/thunderbird-115.2.1.tar.bz2";
+      locale = "sq";
+      arch = "linux-x86_64";
+      sha256 = "89ada58e070ae1d1bdd4047f4747c6773a3c8252a48bbf388afd9d129b63b7eb";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/sr/thunderbird-115.2.1.tar.bz2";
+      locale = "sr";
+      arch = "linux-x86_64";
+      sha256 = "54d54e961b0c809851d37a0b2b6ab2d7825ea8a88cccf62634db428d90cb9d9e";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/sv-SE/thunderbird-115.2.1.tar.bz2";
+      locale = "sv-SE";
+      arch = "linux-x86_64";
+      sha256 = "701106273782a6ff8ebba63cbc9dc1df05ae0c4b364cc82d616b3e048fabf8e7";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/th/thunderbird-115.2.1.tar.bz2";
+      locale = "th";
+      arch = "linux-x86_64";
+      sha256 = "a34d9c972c80a69b8cc192c935159da5a1e88c8c2e01b5cac01abe733f712225";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/tr/thunderbird-115.2.1.tar.bz2";
+      locale = "tr";
+      arch = "linux-x86_64";
+      sha256 = "93fd8e3850cb40ed2ac0c993f55a452e3194dc6215d8c6ab43c7f3068f57cbc6";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/uk/thunderbird-115.2.1.tar.bz2";
+      locale = "uk";
+      arch = "linux-x86_64";
+      sha256 = "d9cfecd9aaf80b581e668b336a610f9ffda776f2cfd8e1978ffba537132791d6";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/uz/thunderbird-115.2.1.tar.bz2";
+      locale = "uz";
+      arch = "linux-x86_64";
+      sha256 = "359f77b6ed2568c8d9a10dbd456951e2a2b096236b427fd620066446be53d66a";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/vi/thunderbird-115.2.1.tar.bz2";
+      locale = "vi";
+      arch = "linux-x86_64";
+      sha256 = "2e37b18097f59fce9534be9821bdc79a239974d467feabc48bde776805bab188";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/zh-CN/thunderbird-115.2.1.tar.bz2";
+      locale = "zh-CN";
+      arch = "linux-x86_64";
+      sha256 = "49180a51d7026b31b1c14af7b8e815dc2b6623bd99b6c3411d18c1dca66add87";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-x86_64/zh-TW/thunderbird-115.2.1.tar.bz2";
+      locale = "zh-TW";
+      arch = "linux-x86_64";
+      sha256 = "b226e792329bae5ed8edc5466e90e72d11b43c7cfc54f2a8e53db9c63fd27fee";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/af/thunderbird-115.2.1.tar.bz2";
+      locale = "af";
+      arch = "linux-i686";
+      sha256 = "fb3587f7848c53ee10d728c9c3040adef397e067369b31e501bea11b09d95fc4";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/ar/thunderbird-115.2.1.tar.bz2";
+      locale = "ar";
+      arch = "linux-i686";
+      sha256 = "13319f60bda98502f1fb406e1c56c4b2cae88641ce1c3d53898eb7badd4af68d";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/ast/thunderbird-115.2.1.tar.bz2";
+      locale = "ast";
+      arch = "linux-i686";
+      sha256 = "f10a1a374e1c80de4543eaed5fd98d3e8d39e1b98857fdd87f1529b3a83dedaf";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/be/thunderbird-115.2.1.tar.bz2";
+      locale = "be";
+      arch = "linux-i686";
+      sha256 = "1511a9cf5d53dc8b6a838d4c953952a4509ea2263270a18b29c0c4df28c6600d";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/bg/thunderbird-115.2.1.tar.bz2";
+      locale = "bg";
+      arch = "linux-i686";
+      sha256 = "a4b33808d5341f0540d66937c079e353bc4a5c0c7c8b35e7bf66c1bdb8c20107";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/br/thunderbird-115.2.1.tar.bz2";
+      locale = "br";
+      arch = "linux-i686";
+      sha256 = "0b1190344a4f4dcfb01fd64964ba8a2232dfd9227fb398e13b7baab4554a8b82";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/ca/thunderbird-115.2.1.tar.bz2";
+      locale = "ca";
+      arch = "linux-i686";
+      sha256 = "4112b6ec01b39725499c30893a997442e52dbe7b1fad6cd64594d35317bcad18";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/cak/thunderbird-115.2.1.tar.bz2";
+      locale = "cak";
+      arch = "linux-i686";
+      sha256 = "c3eae6316d335e32a17f71b0add30025cce22bdf0abe8edcb73b0eb0af2a17b6";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/cs/thunderbird-115.2.1.tar.bz2";
+      locale = "cs";
+      arch = "linux-i686";
+      sha256 = "f899c88f7cb5a110ed1ed5046c36310f2e17729cc05b4d95171bf62664df2ca0";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/cy/thunderbird-115.2.1.tar.bz2";
+      locale = "cy";
+      arch = "linux-i686";
+      sha256 = "844fbca12ab0f78de1b9429cfccaaa0271d947da07a8b0c6aed70aa6633b5524";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/da/thunderbird-115.2.1.tar.bz2";
+      locale = "da";
+      arch = "linux-i686";
+      sha256 = "a59d61fc65a39f10091ff3cbe257a3b622d215d95209330d32e3ef97dd963be0";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/de/thunderbird-115.2.1.tar.bz2";
+      locale = "de";
+      arch = "linux-i686";
+      sha256 = "ac42777c5bb9e1f7c7590717619740445850b63622f9d1af88c3d9843319d5ff";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/dsb/thunderbird-115.2.1.tar.bz2";
+      locale = "dsb";
+      arch = "linux-i686";
+      sha256 = "9febe2ce5ab23b3d8497d7cf2c5421a982d21869ac7fe0eab7335438cf3fb94b";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/el/thunderbird-115.2.1.tar.bz2";
+      locale = "el";
+      arch = "linux-i686";
+      sha256 = "7d45f83c8c7e0ced8fa58df73eb14415363164330a654002c515c84319379532";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/en-CA/thunderbird-115.2.1.tar.bz2";
+      locale = "en-CA";
+      arch = "linux-i686";
+      sha256 = "9f8e56de6d247a252f8223b7c9429172962842fb0cd3eaa52f49d6e696dfddfe";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/en-GB/thunderbird-115.2.1.tar.bz2";
+      locale = "en-GB";
+      arch = "linux-i686";
+      sha256 = "d59b7ebb6909e93aca5fe399ac5b2ac233029226815c043f560866e10ea3545e";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/en-US/thunderbird-115.2.1.tar.bz2";
+      locale = "en-US";
+      arch = "linux-i686";
+      sha256 = "c89893ba01b8c640334f37db0e9e820b6ba325f53acdae02000065b59d101bfc";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/es-AR/thunderbird-115.2.1.tar.bz2";
+      locale = "es-AR";
+      arch = "linux-i686";
+      sha256 = "67d197d6ada39affc46f7c521919b5da03900440372d7abcc831bf15edb4d262";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/es-ES/thunderbird-115.2.1.tar.bz2";
+      locale = "es-ES";
+      arch = "linux-i686";
+      sha256 = "cbc292554f79d7305986b3c4f16d24dbe419124f3a8856e6d2867c58caf80eea";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/es-MX/thunderbird-115.2.1.tar.bz2";
+      locale = "es-MX";
+      arch = "linux-i686";
+      sha256 = "3824a6943995fa80ea4595c01c435564ef5376ed5fe907f0404c504debbfc440";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/et/thunderbird-115.2.1.tar.bz2";
+      locale = "et";
+      arch = "linux-i686";
+      sha256 = "c72f92ee061195146aa35385ffe4b3b681171ba063b370486c7b135251451906";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/eu/thunderbird-115.2.1.tar.bz2";
+      locale = "eu";
+      arch = "linux-i686";
+      sha256 = "3455543dcde9a967ebe0dc87cd0596d117e908c0381b6199b9d9fb64d75e380e";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/fi/thunderbird-115.2.1.tar.bz2";
+      locale = "fi";
+      arch = "linux-i686";
+      sha256 = "b5f18535ee98887b1e6b93024b91d77ff2d8ff59928c4c5b2904876c5dab7ad8";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/fr/thunderbird-115.2.1.tar.bz2";
+      locale = "fr";
+      arch = "linux-i686";
+      sha256 = "050c5358b73082fa114f99bdb9d54836b5975ded395765f106c927773745be08";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/fy-NL/thunderbird-115.2.1.tar.bz2";
+      locale = "fy-NL";
+      arch = "linux-i686";
+      sha256 = "f4ccecff5d4d010ac40af03dd76ec7871d2c0c283c6dc1681e1d5031689932ae";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/ga-IE/thunderbird-115.2.1.tar.bz2";
+      locale = "ga-IE";
+      arch = "linux-i686";
+      sha256 = "e6fb715a504f7aba1de93242426865865f798407003cb2c079d1094da485d019";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/gd/thunderbird-115.2.1.tar.bz2";
+      locale = "gd";
+      arch = "linux-i686";
+      sha256 = "a20d5c75be76a003a468fe7ead078365e9677fbb43417ba477a436c21a449089";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/gl/thunderbird-115.2.1.tar.bz2";
+      locale = "gl";
+      arch = "linux-i686";
+      sha256 = "0f75721665a6845a400bfc72ade60e0402c616f8b9ee7dbdbf3897685f783f64";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/he/thunderbird-115.2.1.tar.bz2";
+      locale = "he";
+      arch = "linux-i686";
+      sha256 = "1afd6199288e0d7607cbac0b8d3e40a07654b3ea0b9e57ee97d8bbbf1eac2677";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/hr/thunderbird-115.2.1.tar.bz2";
+      locale = "hr";
+      arch = "linux-i686";
+      sha256 = "b13dc3ecaff878dd98f4f92f82174865c3c0d7fd2f15fd076acda4c0d70f4f14";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/hsb/thunderbird-115.2.1.tar.bz2";
+      locale = "hsb";
+      arch = "linux-i686";
+      sha256 = "32268a1d36f4415ce049a0b5b2e991f2c37b54d8d81cc182d5b02729ceb2f726";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/hu/thunderbird-115.2.1.tar.bz2";
+      locale = "hu";
+      arch = "linux-i686";
+      sha256 = "967d072185910d87469ff7281a8fa3ad1892beeb27a86a318c72b1134a2ce924";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/hy-AM/thunderbird-115.2.1.tar.bz2";
+      locale = "hy-AM";
+      arch = "linux-i686";
+      sha256 = "54eade63c8ba6e63e29e2aeafd198e16e0a9bcd8367ecaad955e73cf22002d4e";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/id/thunderbird-115.2.1.tar.bz2";
+      locale = "id";
+      arch = "linux-i686";
+      sha256 = "b7d17f5cc4948b8050ab4f85b2dd88b02062018b0509a8e27ba6fe5acbaf341a";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/is/thunderbird-115.2.1.tar.bz2";
+      locale = "is";
+      arch = "linux-i686";
+      sha256 = "08f74ad24fe7dd1d00ed601f515a6c82d1dfea7ffd5563f779f2e6ebd3f9190f";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/it/thunderbird-115.2.1.tar.bz2";
+      locale = "it";
+      arch = "linux-i686";
+      sha256 = "12cdb822aadfb11d79d601e31d5720f7774548235657fefdf18fa2207d369ad3";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/ja/thunderbird-115.2.1.tar.bz2";
+      locale = "ja";
+      arch = "linux-i686";
+      sha256 = "3b00e0c2d3b9ab061c4de168d23695bfb6e49f1b8046f6754dc1077f86266a7e";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/ka/thunderbird-115.2.1.tar.bz2";
+      locale = "ka";
+      arch = "linux-i686";
+      sha256 = "70393907a7eda66aab103a9f2706a294c59ee52e033fa87792329924be704867";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/kab/thunderbird-115.2.1.tar.bz2";
+      locale = "kab";
+      arch = "linux-i686";
+      sha256 = "f04d2b5a1741b6b65b811a449dfc0339230f8f2637d08bf63f199cb7e99a906c";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/kk/thunderbird-115.2.1.tar.bz2";
+      locale = "kk";
+      arch = "linux-i686";
+      sha256 = "1f2d3a7294e0c8eedb91426a9ba8e2090d11831dec33370434bcfa14651f88e0";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/ko/thunderbird-115.2.1.tar.bz2";
+      locale = "ko";
+      arch = "linux-i686";
+      sha256 = "47489d0a9e881d72c743c1473f9eed91ecafe19cdb04a4540216d57a37bc2682";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/lt/thunderbird-115.2.1.tar.bz2";
+      locale = "lt";
+      arch = "linux-i686";
+      sha256 = "9eccde306860618c5aadf17653d52a69977769a72e673079353a7ad84565cce4";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/lv/thunderbird-115.2.1.tar.bz2";
+      locale = "lv";
+      arch = "linux-i686";
+      sha256 = "efac6139ebe47ff35c78ae395a0ff80537439634ba9aa335b570aaa5ba54004e";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/ms/thunderbird-115.2.1.tar.bz2";
+      locale = "ms";
+      arch = "linux-i686";
+      sha256 = "d762e502c2781b99a4bdcddfd30b1e999399750f62bc2763b21116162adb32c1";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/nb-NO/thunderbird-115.2.1.tar.bz2";
+      locale = "nb-NO";
+      arch = "linux-i686";
+      sha256 = "f0712444626fc5a6401726060abf0e30178db0c534734eab9b60058f9244af67";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/nl/thunderbird-115.2.1.tar.bz2";
+      locale = "nl";
+      arch = "linux-i686";
+      sha256 = "4e810fef142b55b598db29a22d9ef92dacb0fa123cc6ce88a160dd1109ad7209";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/nn-NO/thunderbird-115.2.1.tar.bz2";
+      locale = "nn-NO";
+      arch = "linux-i686";
+      sha256 = "8c9b298d607e2fef12f66461199f40bb6a4ee6757992b120adc510fe45d8361c";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/pa-IN/thunderbird-115.2.1.tar.bz2";
+      locale = "pa-IN";
+      arch = "linux-i686";
+      sha256 = "fe8855b2f96dd55077d3e53fba76201fd2368cc0b9444f1a7f85c16654ea21a1";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/pl/thunderbird-115.2.1.tar.bz2";
+      locale = "pl";
+      arch = "linux-i686";
+      sha256 = "e9920c0f562a8cef6f56b51aa4cd030b376d6deb62fe4bf11e66cf9ce236b111";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/pt-BR/thunderbird-115.2.1.tar.bz2";
+      locale = "pt-BR";
+      arch = "linux-i686";
+      sha256 = "f66aae8b75b0dd15ce5abac37e3de2fe83ce7924e55fc1c90283f8de07977d43";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/pt-PT/thunderbird-115.2.1.tar.bz2";
+      locale = "pt-PT";
+      arch = "linux-i686";
+      sha256 = "8e9da0def94d0fc3b7687bbcd3748aa885b639f3e83e91fe6ea650227867da1f";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/rm/thunderbird-115.2.1.tar.bz2";
+      locale = "rm";
+      arch = "linux-i686";
+      sha256 = "859662bca36ee2c4de55e2e0af726d7128aa44893d530ebdab5e333f4553e46d";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/ro/thunderbird-115.2.1.tar.bz2";
+      locale = "ro";
+      arch = "linux-i686";
+      sha256 = "bb16aacc8b52072704a34e804e4d2e4994675eec30240f9b983f238f737a7a67";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/ru/thunderbird-115.2.1.tar.bz2";
+      locale = "ru";
+      arch = "linux-i686";
+      sha256 = "78c2091a6a1f2273b65981b15c3ae0378f21d5765e1551c12512d3087c26ec7f";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/sk/thunderbird-115.2.1.tar.bz2";
+      locale = "sk";
+      arch = "linux-i686";
+      sha256 = "594f9964622f0522b4f5b1243267d61bc5de5653bb142b6d3a764fcb1bac2be2";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/sl/thunderbird-115.2.1.tar.bz2";
+      locale = "sl";
+      arch = "linux-i686";
+      sha256 = "c3e24b9ba8ef644861d273800cb7aed8919e3c2f1b2a0efd5f1890e33e56c758";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/sq/thunderbird-115.2.1.tar.bz2";
+      locale = "sq";
+      arch = "linux-i686";
+      sha256 = "622d9491a1110aa2f11a3dc6d077e86457cf60a19453a0079b1ca3a286e868e1";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/sr/thunderbird-115.2.1.tar.bz2";
+      locale = "sr";
+      arch = "linux-i686";
+      sha256 = "0596e88774c17abce15c323c0362f6389896df72918f49622df28608ea3b56f7";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/sv-SE/thunderbird-115.2.1.tar.bz2";
+      locale = "sv-SE";
+      arch = "linux-i686";
+      sha256 = "23cf02ad134bef3cc39768c7d6ce2ed6f87b747994088bdd3ca379a141582c22";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/th/thunderbird-115.2.1.tar.bz2";
+      locale = "th";
+      arch = "linux-i686";
+      sha256 = "60d8f78e48e10a36ea20fd5be8e5764d08ac9e36e5a987a219c84b87ab23493b";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/tr/thunderbird-115.2.1.tar.bz2";
+      locale = "tr";
+      arch = "linux-i686";
+      sha256 = "09aaaaed57d6103e24404fff59e6778e3f3ef69c023ecb662c1e6a4352a05ca7";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/uk/thunderbird-115.2.1.tar.bz2";
+      locale = "uk";
+      arch = "linux-i686";
+      sha256 = "a521e012e982119f868034bc7ce46932c3bc76141fc8ca1b0c2b2655b8bbaaa7";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/uz/thunderbird-115.2.1.tar.bz2";
+      locale = "uz";
+      arch = "linux-i686";
+      sha256 = "6a8c808ee0ab90432d1e999a4f165819e37a0b9d842af35f59acd714be2d2992";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/vi/thunderbird-115.2.1.tar.bz2";
+      locale = "vi";
+      arch = "linux-i686";
+      sha256 = "8c1ba2d937f48aca65d33d3dd9d0f3eda8f648b8c999d2d48328786a3c3e3b83";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/zh-CN/thunderbird-115.2.1.tar.bz2";
+      locale = "zh-CN";
+      arch = "linux-i686";
+      sha256 = "36bcd384a63637e94f85705815d2e814e8302df093b384837a066451f90b5001";
+    }
+    { url = "http://archive.mozilla.org/pub/thunderbird/releases/115.2.1/linux-i686/zh-TW/thunderbird-115.2.1.tar.bz2";
+      locale = "zh-TW";
+      arch = "linux-i686";
+      sha256 = "082b2eb7a452172102a762ce90d03e3d5a1171ff652a9d4e5a0ea84c6ded624e";
+    }
+    ];
+}
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/thunderbird/no-buildconfig-115.patch b/nixpkgs/pkgs/applications/networking/mailreaders/thunderbird/no-buildconfig-115.patch
new file mode 100644
index 000000000000..f386ee5a5d7f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/thunderbird/no-buildconfig-115.patch
@@ -0,0 +1,13 @@
+Remove about:buildconfig.  If used as-is, it would add unnecessary runtime dependencies.
+--- a/comm/mail/base/jar.mn
++++ b/comm/mail/base/jar.mn
+@@ -120,9 +120,6 @@
+ % override chrome://mozapps/content/profile/profileDowngrade.js chrome://messenger/content/profileDowngrade.js
+ % override chrome://mozapps/content/profile/profileDowngrade.xhtml chrome://messenger/content/profileDowngrade.xhtml
+
+-*   content/messenger/buildconfig.html              (content/buildconfig.html)
+-% override chrome://global/content/buildconfig.html chrome://messenger/content/buildconfig.html
+-
+ comm.jar:
+ % content communicator %content/communicator/
+    content/communicator/contentAreaClick.js         (content/contentAreaClick.js)
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/thunderbird/no-buildconfig.patch b/nixpkgs/pkgs/applications/networking/mailreaders/thunderbird/no-buildconfig.patch
new file mode 100644
index 000000000000..c4e29f6355cf
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/thunderbird/no-buildconfig.patch
@@ -0,0 +1,13 @@
+Remove about:buildconfig.  If used as-is, it would add unnecessary runtime dependencies.
+--- a/comm/mail/base/jar.mn
++++ b/comm/mail/base/jar.mn
+@@ -119,9 +119,6 @@ messenger.jar:
+ % override chrome://mozapps/content/profile/profileDowngrade.js chrome://messenger/content/profileDowngrade.js
+ % override chrome://mozapps/content/profile/profileDowngrade.xhtml chrome://messenger/content/profileDowngrade.xhtml
+ 
+-*   content/messenger/buildconfig.html              (content/buildconfig.html)
+-% override chrome://global/content/buildconfig.html chrome://messenger/content/buildconfig.html
+-
+ # L10n resources and overrides.
+ % override chrome://mozapps/locale/profile/profileDowngrade.dtd chrome://messenger/locale/profileDowngrade.dtd
+ % override chrome://global/locale/netError.dtd chrome://messenger/locale/netError.dtd
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/thunderbird/packages.nix b/nixpkgs/pkgs/applications/networking/mailreaders/thunderbird/packages.nix
new file mode 100644
index 000000000000..38396ce27c45
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/thunderbird/packages.nix
@@ -0,0 +1,92 @@
+{ stdenv, lib, buildMozillaMach, callPackage, fetchurl, fetchpatch, nixosTests, icu, fetchpatch2 }:
+
+rec {
+  thunderbird = thunderbird-115;
+
+  thunderbird-102 = (buildMozillaMach rec {
+    pname = "thunderbird";
+    version = "102.14.0";
+    application = "comm/mail";
+    applicationName = "Mozilla Thunderbird";
+    binaryName = pname;
+    src = fetchurl {
+      url = "mirror://mozilla/thunderbird/releases/${version}/source/thunderbird-${version}.source.tar.xz";
+      sha512 = "4ae3f216833aec55421f827d55bc1b5fc2f0ad4fefecb27724a5be3318c351df24d30a4897b924e733ed2e3995be284b6d135049d46001143fb1c961fefc1830";
+    };
+    extraPatches = [
+      # The file to be patched is different from firefox's `no-buildconfig-ffx90.patch`.
+      ./no-buildconfig.patch
+    ];
+
+    meta = with lib; {
+      changelog = "https://www.thunderbird.net/en-US/thunderbird/${version}/releasenotes/";
+      description = "A full-featured e-mail client";
+      homepage = "https://thunderbird.net/";
+      mainProgram = "thunderbird";
+      maintainers = with maintainers; [ eelco lovesegfault pierron vcunat ];
+      platforms = platforms.unix;
+      badPlatforms = platforms.darwin;
+      broken = stdenv.buildPlatform.is32bit; # since Firefox 60, build on 32-bit platforms fails with "out of memory".
+                                             # not in `badPlatforms` because cross-compilation on 64-bit machine might work.
+      license = licenses.mpl20;
+    };
+    updateScript = callPackage ./update.nix {
+      attrPath = "thunderbird-unwrapped";
+      versionPrefix = "102";
+    };
+  }).override {
+    geolocationSupport = false;
+    webrtcSupport = false;
+
+    pgoSupport = false; # console.warn: feeds: "downloadFeed: network connection unavailable"
+  };
+
+  thunderbird-115 = (buildMozillaMach rec {
+    pname = "thunderbird";
+    version = "115.2.1";
+    application = "comm/mail";
+    applicationName = "Mozilla Thunderbird";
+    binaryName = pname;
+    src = fetchurl {
+      url = "mirror://mozilla/thunderbird/releases/${version}/source/thunderbird-${version}.source.tar.xz";
+      sha512 = "375c66efe9637c41e4758fdc7477b64fa700032fecc0e5e93fb6a4659c1ceee99b2c366e19beb96252e60dbbec78ec37433c3f70f7fcc0f305a927f95d753c05";
+    };
+    extraPatches = [
+      # The file to be patched is different from firefox's `no-buildconfig-ffx90.patch`.
+      ./no-buildconfig-115.patch
+    ];
+
+    meta = with lib; {
+      changelog = "https://www.thunderbird.net/en-US/thunderbird/${version}/releasenotes/";
+      description = "A full-featured e-mail client";
+      homepage = "https://thunderbird.net/";
+      mainProgram = "thunderbird";
+      maintainers = with maintainers; [ eelco lovesegfault pierron vcunat ];
+      platforms = platforms.unix;
+      badPlatforms = platforms.darwin;
+      broken = stdenv.buildPlatform.is32bit; # since Firefox 60, build on 32-bit platforms fails with "out of memory".
+                                             # not in `badPlatforms` because cross-compilation on 64-bit machine might work.
+      license = licenses.mpl20;
+    };
+    updateScript = callPackage ./update.nix {
+      attrPath = "thunderbird-unwrapped";
+      versionPrefix = "115";
+    };
+  }).override {
+    geolocationSupport = false;
+    webrtcSupport = false;
+
+    pgoSupport = false; # console.warn: feeds: "downloadFeed: network connection unavailable"
+
+    icu = icu.overrideAttrs (attrs: {
+      # standardize vtzone output
+      # Work around ICU-22132 https://unicode-org.atlassian.net/browse/ICU-22132
+      # https://bugzilla.mozilla.org/show_bug.cgi?id=1790071
+      patches = attrs.patches ++ [(fetchpatch2 {
+        url = "https://hg.mozilla.org/mozilla-central/raw-file/fb8582f80c558000436922fb37572adcd4efeafc/intl/icu-patches/bug-1790071-ICU-22132-standardize-vtzone-output.diff";
+        stripLen = 3;
+        hash = "sha256-MGNnWix+kDNtLuACrrONDNcFxzjlUcLhesxwVZFzPAM=";
+      })];
+    });
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/thunderbird/update.nix b/nixpkgs/pkgs/applications/networking/mailreaders/thunderbird/update.nix
new file mode 100644
index 000000000000..d6f1a007faa4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/thunderbird/update.nix
@@ -0,0 +1,7 @@
+{ callPackage
+, ...
+}@args:
+
+callPackage ../../browsers/firefox/update.nix ({
+  baseUrl = "http://archive.mozilla.org/pub/thunderbird/releases/";
+} // (builtins.removeAttrs args ["callPackage"]))
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/thunderbird/wrapper.nix b/nixpkgs/pkgs/applications/networking/mailreaders/thunderbird/wrapper.nix
new file mode 100644
index 000000000000..bb135568fdb5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/thunderbird/wrapper.nix
@@ -0,0 +1,23 @@
+{ lib, wrapFirefox, gpgme, gnupg }:
+
+browser:
+args:
+
+(wrapFirefox browser ({
+  libName = "thunderbird";
+} // args))
+
+.overrideAttrs (old: {
+  # Thunderbird's native GPG support does not yet support smartcards.
+  # The official upstream recommendation is to configure fall back to gnupg
+  # using the Thunderbird config `mail.openpgp.allow_external_gnupg`
+  # and GPG keys set up; instructions with pictures at:
+  # https://anweshadas.in/how-to-use-yubikey-or-any-gpg-smartcard-in-thunderbird-78/
+  # For that to work out of the box, it requires `gnupg` on PATH and
+  # `gpgme` in `LD_LIBRARY_PATH`; we do this below.
+  buildCommand = old.buildCommand + ''
+    wrapProgram $out/bin/${browser.binaryName} \
+      --prefix LD_LIBRARY_PATH ':' "${lib.makeLibraryPath [ gpgme ]}" \
+      --prefix PATH ':' "${lib.makeBinPath [ gnupg ]}"
+  '';
+})
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/trojita/default.nix b/nixpkgs/pkgs/applications/networking/mailreaders/trojita/default.nix
new file mode 100644
index 000000000000..395e9b0f4e3f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/trojita/default.nix
@@ -0,0 +1,77 @@
+{ akonadi-contacts
+, cmake
+, fetchFromGitLab
+, fetchsvn
+, gnupg
+, gpgme
+, kcontacts
+, kf5gpgmepp
+, lib
+, libsecret
+, mimetic
+, mkDerivation
+, pkg-config
+, qgpgme
+, qtbase
+, qtkeychain
+, qttools
+, qtwebkit
+, withI18n ? false
+}:
+
+let
+  l10n = fetchsvn {
+    url = "svn://anonsvn.kde.org/home/kde/trunk/l10n-kf5";
+    rev = "1566642";
+    sha256 = "0y45fjib153za085la3hqpryycx33dkj3cz8kwzn2w31kvldfl1q";
+  };
+in mkDerivation rec {
+  pname = "trojita";
+  version = "unstable-2022-08-22";
+
+  src = fetchFromGitLab {
+    domain = "invent.kde.org";
+    owner = "pim";
+    repo = "trojita";
+    rev = "91087933c5e7a03a8097c0ffe5f7289abcfc123b";
+    sha256 = "sha256-15G9YjT3qBKbeOKfb/IgXOO+DaJaTULP9NJn/MFYZS8=";
+  };
+
+  buildInputs = [
+    akonadi-contacts
+    gpgme
+    kcontacts
+    libsecret
+    mimetic
+    qgpgme
+    qtbase
+    qtkeychain
+    qtwebkit
+    mimetic
+    kf5gpgmepp
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    qttools
+    gnupg
+  ];
+
+  postPatch = "echo ${version} > src/trojita-version"
+    + lib.optionalString withI18n ''
+    mkdir -p po
+    for f in `find ${l10n} -name "trojita_common.po"`; do
+      cp $f po/trojita_common_$(echo $f | cut -d/ -f5).po
+    done
+  '';
+
+  meta = with lib; {
+    description = "A Qt IMAP e-mail client";
+    homepage = "http://trojita.flaska.net/";
+    license = with licenses; [ gpl2 gpl3 ];
+    maintainers = with maintainers; [ ehmry ];
+    platforms = platforms.linux;
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/networking/mailreaders/tutanota-desktop/default.nix b/nixpkgs/pkgs/applications/networking/mailreaders/tutanota-desktop/default.nix
new file mode 100644
index 000000000000..f5a2139b5325
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mailreaders/tutanota-desktop/default.nix
@@ -0,0 +1,61 @@
+{ stdenv, lib, fetchurl, makeDesktopItem, copyDesktopItems, makeWrapper,
+electron, libsecret }:
+
+stdenv.mkDerivation rec {
+  pname = "tutanota-desktop";
+  version = "3.115.2";
+
+  src = fetchurl {
+    url = "https://github.com/tutao/tutanota/releases/download/tutanota-desktop-release-${version}/${pname}-${version}-unpacked-linux.tar.gz";
+    name = "tutanota-desktop-${version}.tar.gz";
+    sha256 = "sha256-PdVvrb+sC8LF4tZXAHt2CevyoXhxTXJB01Fe64YI6BI=";
+  };
+
+  nativeBuildInputs = [
+    copyDesktopItems
+    makeWrapper
+  ];
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  desktopItems = makeDesktopItem {
+    name = pname;
+    exec = "tutanota-desktop";
+    icon = "tutanota-desktop";
+    comment = meta.description;
+    desktopName = "Tutanota Desktop";
+    genericName = "Email Reader";
+  };
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $out/opt/tutanota-desktop $out/share/tutanota-desktop
+
+    cp -r ./ $out/opt/tutanota-desktop
+    mv $out/opt/tutanota-desktop/{locales,resources} $out/share/tutanota-desktop
+
+    for icon_size in 64 512; do
+      icon=resources/icons/icon/$icon_size.png
+      path=$out/share/icons/hicolor/$icon_size'x'$icon_size/apps/tutanota-desktop.png
+      install -Dm644 $icon $path
+    done
+
+    makeWrapper ${electron}/bin/electron \
+      $out/bin/tutanota-desktop \
+      --add-flags $out/share/tutanota-desktop/resources/app.asar \
+      --run "mkdir -p /tmp/tutanota" \
+      --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ libsecret stdenv.cc.cc.lib ]}
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Tutanota official desktop client";
+    homepage = "https://tutanota.com/";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ wolfangaukang ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/mhost/default.nix b/nixpkgs/pkgs/applications/networking/mhost/default.nix
new file mode 100644
index 000000000000..beed066e65e9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mhost/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "mhost";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "lukaspustina";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1j0378f8gj8hdcdhpj6lqlnriasmjxzri42wjj9pygzkmpd3ym86";
+  };
+
+  cargoSha256 = "0gqrya0bpdd67k2sxib7f4npnrx84d9r4hjq2sg2xz4j8pmgs018";
+
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  CARGO_CRATE_NAME = "mhost";
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A modern take on the classic host DNS lookup utility including an easy to use and very fast Rust lookup library";
+    homepage = "https://github.com/lukaspustina/mhost";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = [ maintainers.mgttlinger ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/misc/zammad/0001-nulldb.patch b/nixpkgs/pkgs/applications/networking/misc/zammad/0001-nulldb.patch
new file mode 100644
index 000000000000..61971525b99d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/misc/zammad/0001-nulldb.patch
@@ -0,0 +1,15 @@
+diff --git a/config/application.rb b/config/application.rb
+index d85a17491..90ea5e387 100644
+--- a/config/application.rb
++++ b/config/application.rb
+@@ -3,6 +3,7 @@
+ require_relative 'boot'
+ 
+ require 'rails/all'
++require 'nulldb'
+ require_relative 'issue_2656_workaround_for_rails_issue_33600'
+ 
+ # DO NOT REMOVE THIS LINE - see issue #2037
+diff --git a/db/schema.rb b/db/schema.rb
+new file mode 100644
+index 000000000..e69de29bb
diff --git a/nixpkgs/pkgs/applications/networking/misc/zammad/default.nix b/nixpkgs/pkgs/applications/networking/misc/zammad/default.nix
new file mode 100644
index 000000000000..b69f90d321a4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/misc/zammad/default.nix
@@ -0,0 +1,156 @@
+{ stdenv
+, lib
+, nixosTests
+, fetchFromGitHub
+, fetchYarnDeps
+, applyPatches
+, bundlerEnv
+, defaultGemConfig
+, callPackage
+, writeText
+, procps
+, ruby
+, postgresql
+, imlib2
+, jq
+, moreutils
+, nodejs
+, yarn
+, yarn2nix-moretea
+, v8
+, cacert
+}:
+
+let
+  pname = "zammad";
+  version = "5.4.1";
+
+  src = applyPatches {
+
+    src = fetchFromGitHub (lib.importJSON ./source.json);
+
+    patches = [
+      ./0001-nulldb.patch
+      ./fix-sendmail-location.diff
+    ];
+
+    postPatch = ''
+      sed -i -e "s|ruby '3.1.[0-9]\+'|ruby '${ruby.version}'|" Gemfile
+      sed -i -e "s|ruby 3.1.[0-9]\+p[0-9]\+|ruby ${ruby.version}|" Gemfile.lock
+      sed -i -e "s|3.1.[0-9]\+|${ruby.version}|" .ruby-version
+      ${jq}/bin/jq '. += {name: "Zammad", version: "${version}"}' package.json | ${moreutils}/bin/sponge package.json
+    '';
+  };
+
+  databaseConfig = writeText "database.yml" ''
+    production:
+      url: <%= ENV['DATABASE_URL'] %>
+  '';
+
+  secretsConfig = writeText "secrets.yml" ''
+    production:
+      secret_key_base: <%= ENV['SECRET_KEY_BASE'] %>
+  '';
+
+  rubyEnv = bundlerEnv {
+    name = "${pname}-gems-${version}";
+    inherit version;
+
+    # Which ruby version to select:
+    #   https://docs.zammad.org/en/latest/prerequisites/software.html#ruby-programming-language
+    inherit ruby;
+
+    gemdir = src;
+    gemset = ./gemset.nix;
+    groups = [
+      "assets"
+      "unicorn" # server
+      "nulldb"
+      "test"
+      "mysql"
+      "puma"
+      "development"
+      "postgres" # database
+    ];
+    gemConfig = defaultGemConfig // {
+      pg = attrs: {
+        buildFlags = [ "--with-pg-config=${postgresql}/bin/pg_config" ];
+      };
+      rszr = attrs: {
+        buildInputs = [ imlib2 imlib2.dev ];
+        buildFlags = [ "--without-imlib2-config" ];
+      };
+      mini_racer = attrs: {
+        buildFlags = [
+          "--with-v8-dir=\"${v8}\""
+        ];
+        dontBuild = false;
+        postPatch = ''
+          substituteInPlace ext/mini_racer_extension/extconf.rb \
+            --replace Libv8.configure_makefile '$CPPFLAGS += " -x c++"; Libv8.configure_makefile'
+        '';
+      };
+    };
+  };
+
+  yarnEnv = yarn2nix-moretea.mkYarnPackage {
+    pname = "${pname}-node-modules";
+    inherit version src;
+    packageJSON = ./package.json;
+
+    offlineCache = fetchYarnDeps {
+      yarnLock = "${src}/yarn.lock";
+      hash = "sha256-HI4RR4/ll/zNBNtDCb8OvEsG/BMVYacM0CcYqbkNHEY=";
+    };
+
+    yarnPreBuild = ''
+      mkdir -p deps/Zammad
+      cp -r ${src}/.eslint-plugin-zammad deps/Zammad/.eslint-plugin-zammad
+      chmod -R +w deps/Zammad/.eslint-plugin-zammad
+    '';
+  };
+
+in
+stdenv.mkDerivation {
+  inherit pname version src;
+
+  buildInputs = [
+    rubyEnv
+    rubyEnv.wrappedRuby
+    rubyEnv.bundler
+    yarn
+    nodejs
+    procps
+    cacert
+  ];
+
+  RAILS_ENV = "production";
+
+  buildPhase = ''
+    node_modules=${yarnEnv}/libexec/Zammad/node_modules
+    ${yarn2nix-moretea.linkNodeModulesHook}
+
+    rake DATABASE_URL="nulldb://user:pass@127.0.0.1/dbname" assets:precompile
+  '';
+
+  installPhase = ''
+    cp -R . $out
+    cp ${databaseConfig} $out/config/database.yml
+    cp ${secretsConfig} $out/config/secrets.yml
+    sed -i -e "s|info|debug|" $out/config/environments/production.rb
+  '';
+
+  passthru = {
+    inherit rubyEnv yarnEnv;
+    updateScript = [ "${callPackage ./update.nix {}}/bin/update.sh" pname (toString ./.) ];
+    tests = { inherit (nixosTests) zammad; };
+  };
+
+  meta = with lib; {
+    description = "Zammad, a web-based, open source user support/ticketing solution.";
+    homepage = "https://zammad.org";
+    license = licenses.agpl3Plus;
+    platforms = [ "x86_64-linux" "aarch64-linux" ];
+    maintainers = with maintainers; [ n0emis garbas taeer ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/misc/zammad/fix-sendmail-location.diff b/nixpkgs/pkgs/applications/networking/misc/zammad/fix-sendmail-location.diff
new file mode 100644
index 000000000000..c8f948284e73
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/misc/zammad/fix-sendmail-location.diff
@@ -0,0 +1,12 @@
+diff --git a/app/models/channel/driver/sendmail.rb b/app/models/channel/driver/sendmail.rb
+index b15ef48a6..64c120a87 100644
+--- a/app/models/channel/driver/sendmail.rb
++++ b/app/models/channel/driver/sendmail.rb
+@@ -32,6 +32,6 @@ def delivery_method(mail)
+ 
+     return mail.delivery_method :test if Rails.env.test?
+ 
+-    mail.delivery_method :sendmail
++    mail.delivery_method :sendmail, :location => '/run/wrappers/bin/sendmail'
+   end
+ end
diff --git a/nixpkgs/pkgs/applications/networking/misc/zammad/gemset.nix b/nixpkgs/pkgs/applications/networking/misc/zammad/gemset.nix
new file mode 100644
index 000000000000..bf33453ca6f8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/misc/zammad/gemset.nix
@@ -0,0 +1,2723 @@
+{
+  aasm = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1xnhpdpi11f7kkyngfspvd9jkkncqfpirz4sylzq32rh47kcd8p3";
+      type = "gem";
+    };
+    version = "5.5.0";
+  };
+  actioncable = {
+    dependencies = ["actionpack" "activesupport" "nio4r" "websocket-driver"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bndmmby5qxq8rs42fbb2ax3hhbjj2ds8wja08s0iadkbrn7shvf";
+      type = "gem";
+    };
+    version = "6.1.7.3";
+  };
+  actionmailbox = {
+    dependencies = ["actionpack" "activejob" "activerecord" "activestorage" "activesupport" "mail"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0cx00kf0syq5gdhlrmw0q9v92ki55drbsk4gzy86ls2q8xkd792s";
+      type = "gem";
+    };
+    version = "6.1.7.3";
+  };
+  actionmailer = {
+    dependencies = ["actionpack" "actionview" "activejob" "activesupport" "mail" "rails-dom-testing"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0vbif021cyndq3v3m61dkmgdbbirqk9zcsszb9nisq24m3gx1aai";
+      type = "gem";
+    };
+    version = "6.1.7.3";
+  };
+  actionpack = {
+    dependencies = ["actionview" "activesupport" "rack" "rack-test" "rails-dom-testing" "rails-html-sanitizer"];
+    groups = ["assets" "default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0k6hc7klvn8m88b88vykl83jrpqhn4zz67l2zx9v266xga6fhala";
+      type = "gem";
+    };
+    version = "6.1.7.3";
+  };
+  actiontext = {
+    dependencies = ["actionpack" "activerecord" "activestorage" "activesupport" "nokogiri"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16ldxyxlxl9scggpmkww2fxzim7sl2b4js610pvddcsr74z9fjs7";
+      type = "gem";
+    };
+    version = "6.1.7.3";
+  };
+  actionview = {
+    dependencies = ["activesupport" "builder" "erubi" "rails-dom-testing" "rails-html-sanitizer"];
+    groups = ["assets" "default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ck02cfc17s6g05qn0k7khwvvazwbf2rxbjcma8px2nw2j1ngvcn";
+      type = "gem";
+    };
+    version = "6.1.7.3";
+  };
+  activejob = {
+    dependencies = ["activesupport" "globalid"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05bkw9qgjgj2nxzjj2fh6jp1fcvgff0aa4r77k0gcfmnzc1g8wdl";
+      type = "gem";
+    };
+    version = "6.1.7.3";
+  };
+  activemodel = {
+    dependencies = ["activesupport"];
+    groups = ["default" "nulldb"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03hy5bwghdklcxbdylmsq70y0qzslck5slb2zkvp7g6mmvk86kwd";
+      type = "gem";
+    };
+    version = "6.1.7.3";
+  };
+  activerecord = {
+    dependencies = ["activemodel" "activesupport"];
+    groups = ["default" "nulldb"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1alshkgbcxp9s4vqb2b0yrrnyg15kxhlp1slsb03a61w7h42pspw";
+      type = "gem";
+    };
+    version = "6.1.7.3";
+  };
+  activerecord-import = {
+    dependencies = ["activerecord"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1cwm95795c6j5hk76csdkfg7ad228cmp086shkcmhnad4mycbh4m";
+      type = "gem";
+    };
+    version = "1.4.1";
+  };
+  activerecord-nulldb-adapter = {
+    dependencies = ["activerecord"];
+    groups = ["nulldb"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1c0f7fn06fzc7pn0dydchnq6xgcaga9rbzhmin5z5xvg5nkv783c";
+      type = "gem";
+    };
+    version = "0.8.0";
+  };
+  activerecord-session_store = {
+    dependencies = ["actionpack" "activerecord" "multi_json" "rack" "railties"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06ddhz1b2yg72iv09n48gcd3ix5da7hxlzi7vvj13nrps2qwlffg";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  activestorage = {
+    dependencies = ["actionpack" "activejob" "activerecord" "activesupport" "marcel" "mini_mime"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06w4wlabqqr9bwdig44r5vdwkcbbivwgwn2fl775w7h05vrccgp8";
+      type = "gem";
+    };
+    version = "6.1.7.3";
+  };
+  activesupport = {
+    dependencies = ["concurrent-ruby" "i18n" "minitest" "tzinfo" "zeitwerk"];
+    groups = ["assets" "default" "development" "nulldb" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06mihpy83a5xmavvn7l8vbix472dsi0vh30xj6g594k0679m0ir6";
+      type = "gem";
+    };
+    version = "6.1.7.3";
+  };
+  acts_as_list = {
+    dependencies = ["activerecord"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qdb3g1ha8ir198rw6a7wmmdz4vm3gsk5j5j1s5sa50hdbgc9m06";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ypdmpdn20hxp5vwxz3zc04r5xcwqc25qszdlg41h8ghdqbllwmw";
+      type = "gem";
+    };
+    version = "2.8.1";
+  };
+  argon2 = {
+    dependencies = ["ffi" "ffi-compiler"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wdllcqlr81nzyf485ldv1p660xsi476p79ghbj7zsf3n9n86gwd";
+      type = "gem";
+    };
+    version = "2.2.0";
+  };
+  ast = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04nc8x27hlzlrr5c2gn7mar4vdr0apw5xg22wp6m8dx3wqr04a0y";
+      type = "gem";
+    };
+    version = "2.4.2";
+  };
+  autodiscover = {
+    dependencies = ["httpclient" "logging" "nokogiri" "nori"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      fetchSubmodules = false;
+      rev = "ee9b53dfa797ce6d4f970b82beea7fbdd2df56bb";
+      sha256 = "1qffylir5i06vd3khwd182pslnqsa0kfc3dihvvjfdyl7p1lxv16";
+      type = "git";
+      url = "https://github.com/zammad-deps/autodiscover";
+    };
+    version = "1.0.2";
+  };
+  autoprefixer-rails = {
+    dependencies = ["execjs"];
+    groups = ["assets"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "020v30xd1v2yvyfshbii497c83n4kafc6967pwmgl54sxkx04xwq";
+      type = "gem";
+    };
+    version = "10.4.7.0";
+  };
+  binding_of_caller = {
+    dependencies = ["debug_inspector"];
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "078n2dkpgsivcf0pr50981w95nfc2bsrp3wpf9wnxz1qsp8jbb9s";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  biz = {
+    dependencies = ["clavius" "tzinfo"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1n2d7cs9jlnpi75nbssv77qlw0jsqnixaikpxsrbxz154q43gvlc";
+      type = "gem";
+    };
+    version = "1.8.2";
+  };
+  bootsnap = {
+    dependencies = ["msgpack"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vcg52gwl64xhhal6kwk1pc01y1klzdlnv1awyk89kb91z010x7q";
+      type = "gem";
+    };
+    version = "1.16.0";
+  };
+  brakeman = {
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lcxxlrzgpi9z2mr2v19xda6fdysmn5psa9bsp2rksa915v91fds";
+      type = "gem";
+    };
+    version = "5.4.0";
+  };
+  browser = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0g4bcpax07kqqr9cp7cjc7i0pcij4nqpn1rdsg2wdwhzf00m6x32";
+      type = "gem";
+    };
+    version = "5.3.1";
+  };
+  buftok = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1rzsy1vy50v55x9z0nivf23y0r9jkmq6i130xa75pq9i8qrn1mxs";
+      type = "gem";
+    };
+    version = "0.2.0";
+  };
+  builder = {
+    groups = ["assets" "default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "045wzckxpwcqzrjr353cxnyaxgf0qg22jh00dcx7z38cys5g1jlr";
+      type = "gem";
+    };
+    version = "3.2.4";
+  };
+  byebug = {
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nx3yjf4xzdgb8jkmk2344081gqr22pgjqnmjg2q64mj5d6r9194";
+      type = "gem";
+    };
+    version = "11.1.3";
+  };
+  byk = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0cw26m1977kk6awns8h3d10f9bq9j467s0a4srdvkhgy6ar2jagn";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  capybara = {
+    dependencies = ["addressable" "matrix" "mini_mime" "nokogiri" "rack" "rack-test" "regexp_parser" "xpath"];
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "123198zk2ak8mziwa5jc3ckgpmsg08zn064n3aywnqm9s1bwjv3v";
+      type = "gem";
+    };
+    version = "3.38.0";
+  };
+  childprocess = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1lvcp8bsd35g57f7wz4jigcw2sryzzwrpcgjwwf3chmjrjcww5in";
+      type = "gem";
+    };
+    version = "4.1.0";
+  };
+  chunky_png = {
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1znw5x86hmm9vfhidwdsijz8m38pqgmv98l9ryilvky0aldv7mc9";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  clavius = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0y58v8k860vafm1psm69f2ndcqmcifyvswsjdy8bxbxy30zrgad1";
+      type = "gem";
+    };
+    version = "1.0.4";
+  };
+  clearbit = {
+    dependencies = ["nestful"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ccgvxzgpll1wr5i9wjm1h0m2z600j6c4yf6pww423qhg8a25lbl";
+      type = "gem";
+    };
+    version = "0.3.3";
+  };
+  coderay = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jvxqxzply1lwp7ysn94zjhh57vc14mcshw1ygw14ib8lhc00lyw";
+      type = "gem";
+    };
+    version = "1.1.3";
+  };
+  coffee-rails = {
+    dependencies = ["coffee-script" "railties"];
+    groups = ["assets"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "170sp4y82bf6nsczkkkzypzv368sgjg6lfrkib4hfjgxa6xa3ajx";
+      type = "gem";
+    };
+    version = "5.0.0";
+  };
+  coffee-script = {
+    dependencies = ["coffee-script-source" "execjs"];
+    groups = ["assets" "default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rc7scyk7mnpfxqv5yy4y5q1hx3i7q3ahplcp4bq2g5r24g2izl2";
+      type = "gem";
+    };
+    version = "2.4.1";
+  };
+  coffee-script-source = {
+    groups = ["assets" "default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1907v9q1zcqmmyqzhzych5l7qifgls2rlbnbhy5vzyr7i7yicaz1";
+      type = "gem";
+    };
+    version = "1.12.2";
+  };
+  composite_primary_keys = {
+    dependencies = ["activerecord"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1izh9vf2rjjxphidgf00wdmvmvlrbsy4n2a99fds59qkbd5cy0i9";
+      type = "gem";
+    };
+    version = "13.0.7";
+  };
+  concurrent-ruby = {
+    groups = ["assets" "default" "development" "nulldb" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qnsflsbjj38im8xq35g0vihlz96h09wjn2dad5g543l3vvrkrx5";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  crack = {
+    dependencies = ["rexml"];
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1cr1kfpw3vkhysvkk3wg7c54m75kd68mbm9rs5azdjdq57xid13r";
+      type = "gem";
+    };
+    version = "0.4.5";
+  };
+  crass = {
+    groups = ["assets" "default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pfl5c0pyqaparxaqxi6s4gfl21bdldwiawrc0aknyvflli60lfw";
+      type = "gem";
+    };
+    version = "1.0.6";
+  };
+  csv = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0l5f5cq8ki3h4djh7pb8yqdkywqd08vjy3vd64yqh7qd6pdwky6w";
+      type = "gem";
+    };
+    version = "3.2.6";
+  };
+  daemons = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07cszb0zl8mqmwhc8a2yfg36vi6lbgrp4pa5bvmryrpcz9v6viwg";
+      type = "gem";
+    };
+    version = "1.4.1";
+  };
+  dalli = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xyza6gjci6qp83srcvsg3i225x17n27bwci4wqzpmn9bykjac2n";
+      type = "gem";
+    };
+    version = "3.2.3";
+  };
+  date = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03skfikihpx37rc27vr3hwrb057gxnmdzxhmzd4bf4jpkl0r55w1";
+      type = "gem";
+    };
+    version = "3.3.3";
+  };
+  debug_inspector = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01l678ng12rby6660pmwagmyg8nccvjfgs3487xna7ay378a59ga";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  delayed_job = {
+    dependencies = ["activesupport"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0s2xg72ljg4cwmr05zi67vcyz8zib46gvvf7rmrdhsyq387m2qcq";
+      type = "gem";
+    };
+    version = "4.1.11";
+  };
+  delayed_job_active_record = {
+    dependencies = ["activerecord" "delayed_job"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wh1146hg0b85zv336dn00jx9mzw5ma0maj67is7bvz5l35hd6yk";
+      type = "gem";
+    };
+    version = "4.1.7";
+  };
+  deprecation_toolkit = {
+    dependencies = ["activesupport"];
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0q7av58hr1armdn4nr9kw7hhgry2v576dwn4d80ngax9g0hdw9cv";
+      type = "gem";
+    };
+    version = "2.0.3";
+  };
+  diff-lcs = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rwvjahnp7cpmracd8x732rjgnilqv2sx7d1gfrysslc3h039fa9";
+      type = "gem";
+    };
+    version = "1.5.0";
+  };
+  diffy = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qcsv29ljfhy76gq4xi8zpn6dc6nv15c41r131bdr38kwpxjzd1n";
+      type = "gem";
+    };
+    version = "3.4.2";
+  };
+  domain_name = {
+    dependencies = ["unf"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lcqjsmixjp52bnlgzh4lg9ppsk52x9hpwdjd53k8jnbah2602h0";
+      type = "gem";
+    };
+    version = "0.5.20190701";
+  };
+  doorkeeper = {
+    dependencies = ["railties"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fxrvqv3l5w9p20s129rg41zc6agf1n4yrmganancnvykbkygki2";
+      type = "gem";
+    };
+    version = "5.6.4";
+  };
+  dotenv = {
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1n0pi8x8ql5h1mijvm8lgn6bhq4xjb5a500p5r1krq4s6j9lg565";
+      type = "gem";
+    };
+    version = "2.8.1";
+  };
+  dry-cli = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ffdpd18n1h1fxsl4yz7wpjlxb0nw8s0wxzwypi9vcyzij0d993s";
+      type = "gem";
+    };
+    version = "0.7.0";
+  };
+  dry-core = {
+    dependencies = ["concurrent-ruby" "zeitwerk"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01gks2hrp7nl3pzb487azvd25dlbrc40d5cpk4n0szwnf2c0k4ks";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  dry-inflector = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09hnvna3lg2x36li63988kv664d0zvy7y0z33803yvrdr9hj7lka";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  dry-logic = {
+    dependencies = ["concurrent-ruby" "dry-core" "zeitwerk"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05nldkc154r0qzlhss7n5klfiyyz05x2fkq08y13s34py6023vcr";
+      type = "gem";
+    };
+    version = "1.5.0";
+  };
+  dry-struct = {
+    dependencies = ["dry-core" "dry-types" "ice_nine" "zeitwerk"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1rnlgn4wif0dvkvi10xwh1vd1q6mp35q6a7lwva0zmbc79dh4drp";
+      type = "gem";
+    };
+    version = "1.6.0";
+  };
+  dry-types = {
+    dependencies = ["concurrent-ruby" "dry-core" "dry-inflector" "dry-logic" "zeitwerk"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1s5cqx3i7bigfhy8pniswdhinc9k2xxvkk05ikqy0kmwiy4bc991";
+      type = "gem";
+    };
+    version = "1.7.0";
+  };
+  eco = {
+    dependencies = ["coffee-script" "eco-source" "execjs"];
+    groups = ["assets"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09jiwb7pkg0sxk730maxahra4whqw5l47zd7yg7fvd71pikdwdr0";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  eco-source = {
+    groups = ["assets" "default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ccxrvaac6mw5kdj1i490b5xb1wdka3a5q4jhvn8dvg41594yba1";
+      type = "gem";
+    };
+    version = "1.1.0.rc.1";
+  };
+  em-websocket = {
+    dependencies = ["eventmachine" "http_parser.rb"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1a66b0kjk6jx7pai9gc7i27zd0a128gy73nmas98gjz6wjyr4spm";
+      type = "gem";
+    };
+    version = "0.5.3";
+  };
+  email_address = {
+    dependencies = ["simpleidn"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09clyyp65ry2dqg4kwr4lbyi40c9nci282qxpfgmvq75z8clia8y";
+      type = "gem";
+    };
+    version = "0.2.4";
+  };
+  equalizer = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1kjmx3fygx8njxfrwcmn7clfhjhb6bvv3scy2lyyi0wqyi3brra4";
+      type = "gem";
+    };
+    version = "0.0.11";
+  };
+  erubi = {
+    groups = ["assets" "default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "11bz1v1cxabm8672gabrw542zyg51dizlcvdck6vvwzagxbjv9zx";
+      type = "gem";
+    };
+    version = "1.11.0";
+  };
+  eventmachine = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wh9aqb0skz80fhfn66lbpr4f86ya2z5rx6gm5xlfhd05bj1ch4r";
+      type = "gem";
+    };
+    version = "1.2.7";
+  };
+  execjs = {
+    groups = ["assets"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "121h6af4i6wr3wxvv84y53jcyw2sk71j5wsncm6wq6yqrwcrk4vd";
+      type = "gem";
+    };
+    version = "2.8.1";
+  };
+  factory_bot = {
+    dependencies = ["activesupport"];
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pfk942d6qwhw151hxaz7n4knk6whyxqvvywdx2cdw9yhykyaqzq";
+      type = "gem";
+    };
+    version = "6.2.1";
+  };
+  factory_bot_rails = {
+    dependencies = ["factory_bot" "railties"];
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18fhcihkc074gk62iwqgbdgc3ymim4fm0b4p3ipffy5hcsb9d2r7";
+      type = "gem";
+    };
+    version = "6.2.0";
+  };
+  faker = {
+    dependencies = ["i18n"];
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1b8772jybi0vxzbcs5zw17k40z661c8adn2rd6vqqr7ay71bzl09";
+      type = "gem";
+    };
+    version = "3.1.1";
+  };
+  faraday = {
+    dependencies = ["faraday-net_http" "ruby2_keywords"];
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1f20vjx0ywx0zdb4dfx4cpa7kd51z6vg7dw5hs35laa45dy9g9pj";
+      type = "gem";
+    };
+    version = "2.7.4";
+  };
+  faraday-mashify = {
+    dependencies = ["faraday" "hashie"];
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fiy1bqwx7sj3dmydlyqzj4lapkb2p84pmp4f6i2g0ypj1wbrcml";
+      type = "gem";
+    };
+    version = "0.1.1";
+  };
+  faraday-multipart = {
+    dependencies = ["multipart-post"];
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09871c4hd7s5ws1wl4gs7js1k2wlby6v947m2bbzg43pnld044lh";
+      type = "gem";
+    };
+    version = "1.0.4";
+  };
+  faraday-net_http = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13byv3mp1gsjyv8k0ih4612y6vw5kqva6i03wcg4w2fqpsd950k8";
+      type = "gem";
+    };
+    version = "3.0.2";
+  };
+  ffi = {
+    groups = ["assets" "default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1862ydmclzy1a0cjbvm8dz7847d9rch495ib0zb64y84d3xd4bkg";
+      type = "gem";
+    };
+    version = "1.15.5";
+  };
+  ffi-compiler = {
+    dependencies = ["ffi" "rake"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0c2caqm9wqnbidcb8dj4wd3s902z15qmgxplwyfyqbwa0ydki7q1";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  gli = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rv8dlq9nqpias29jh40qb6xzznlk6ra41nan6s5hy56402f0k29";
+      type = "gem";
+    };
+    version = "2.21.0";
+  };
+  globalid = {
+    dependencies = ["activesupport"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "040bxzfd7mz1p6z4bc9vk5yrf762hdllvf98hmk848fq28xc5dsk";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  gmail_xoauth = {
+    dependencies = ["oauth"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dslnb1kffcygcbs8sqw58w6ba0maq4w7k1i7kjrqpq0kxx6wklq";
+      type = "gem";
+    };
+    version = "0.4.2";
+  };
+  graphql = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14knjmj2csrl9s890ikvipsbxn01xn6vdb64iwlbv6xnc20scwxf";
+      type = "gem";
+    };
+    version = "2.0.17";
+  };
+  graphql-batch = {
+    dependencies = ["graphql" "promise.rb"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nsjfi47h9ma8gkqi7v6ky3jqp1zb05l4y2xdsa13f0s8vmq04jv";
+      type = "gem";
+    };
+    version = "0.5.2";
+  };
+  hashdiff = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nynpl0xbj0nphqx1qlmyggq58ms1phf5i03hk64wcc0a17x1m1c";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  hashie = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nh3arcrbz1rc1cr59qm53sdhqm137b258y8rcb4cvd3y98lwv4x";
+      type = "gem";
+    };
+    version = "5.0.0";
+  };
+  hiredis = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04jj8k7lxqxw24sp0jiravigdkgsyrpprxpxm71ba93x1wr2w1bz";
+      type = "gem";
+    };
+    version = "0.6.3";
+  };
+  htmlentities = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nkklqsn8ir8wizzlakncfv42i32wc0w9hxp00hvdlgjr7376nhj";
+      type = "gem";
+    };
+    version = "4.3.4";
+  };
+  http = {
+    dependencies = ["addressable" "http-cookie" "http-form_data" "http-parser"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0z8vmvnkrllkpzsxi94284di9r63g9v561a16an35izwak8g245y";
+      type = "gem";
+    };
+    version = "4.4.1";
+  };
+  http-cookie = {
+    dependencies = ["domain_name"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13rilvlv8kwbzqfb644qp6hrbsj82cbqmnzcvqip1p6vqx36sxbk";
+      type = "gem";
+    };
+    version = "1.0.5";
+  };
+  http-form_data = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wx591jdhy84901pklh1n9sgh74gnvq1qyqxwchni1yrc49ynknc";
+      type = "gem";
+    };
+    version = "2.3.0";
+  };
+  http-parser = {
+    dependencies = ["ffi-compiler"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18qqvckvqjffh88hfib6c8pl9qwk9gp89w89hl3f2s1x8hgyqka1";
+      type = "gem";
+    };
+    version = "1.2.3";
+  };
+  "http_parser.rb" = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15nidriy0v5yqfjsgsra51wmknxci2n2grliz78sf9pga3n0l7gi";
+      type = "gem";
+    };
+    version = "0.6.0";
+  };
+  httpclient = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19mxmvghp7ki3klsxwrlwr431li7hm1lczhhj8z4qihl2acy8l99";
+      type = "gem";
+    };
+    version = "2.8.3";
+  };
+  i18n = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["assets" "default" "development" "nulldb" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vdcchz7jli1p0gnc669a7bj3q1fv09y9ppf0y3k0vb1jwdwrqwi";
+      type = "gem";
+    };
+    version = "1.12.0";
+  };
+  icalendar = {
+    dependencies = ["ice_cube"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "11zfs0l8y2a6gpf0krm91d0ap2mnf04qky89dyzxwaspqxqgj174";
+      type = "gem";
+    };
+    version = "2.8.0";
+  };
+  icalendar-recurrence = {
+    dependencies = ["icalendar" "ice_cube"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06li3cdbwkd9y2sadjlbwj54blqdaa056yx338s4ddfxywrngigh";
+      type = "gem";
+    };
+    version = "1.1.3";
+  };
+  ice_cube = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1dri4mcya1fwzrr9nzic8hj1jr28a2szjag63f9k7p2bw9fpw4fs";
+      type = "gem";
+    };
+    version = "0.16.4";
+  };
+  ice_nine = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nv35qg1rps9fsis28hz2cq2fx1i96795f91q4nmkm934xynll2x";
+      type = "gem";
+    };
+    version = "0.11.2";
+  };
+  inflection = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0mfkk0j0dway3p4gwzk8fnpi4hwaywl2v0iywf1azf98zhk9pfnf";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  iniparse = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wb1qy4i2xrrd92dc34pi7q7ibrjpapzk9y465v0n9caiplnb89n";
+      type = "gem";
+    };
+    version = "1.5.0";
+  };
+  interception = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01vrkn28psdx1ysh5js3hn17nfp1nvvv46wc1pwqsakm6vb1hf55";
+      type = "gem";
+    };
+    version = "0.5";
+  };
+  json = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nalhin1gda4v8ybk6lq8f407cgfrj6qzn234yra4ipkmlbfmal6";
+      type = "gem";
+    };
+    version = "2.6.3";
+  };
+  jwt = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bg8pjx0mpvl10k6d8a6gc8dzlv2z5jkqcjbjcirnk032iriq838";
+      type = "gem";
+    };
+    version = "2.3.0";
+  };
+  kgio = {
+    groups = ["default" "unicorn"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ipzvw7n0kz1w8rkqybyxvf3hb601a770khm0xdqm68mc4aa59xx";
+      type = "gem";
+    };
+    version = "2.11.4";
+  };
+  koala = {
+    dependencies = ["addressable" "faraday" "faraday-multipart" "json" "rexml"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14jq1q8314x5qncmfgs53iv1ycz1fm887gnp7w04h963gbwr3yhc";
+      type = "gem";
+    };
+    version = "3.4.0";
+  };
+  listen = {
+    dependencies = ["rb-fsevent" "rb-inotify"];
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13rgkfar8pp31z1aamxf5y7cfq88wv6rxxcwy7cmm177qq508ycn";
+      type = "gem";
+    };
+    version = "3.8.0";
+  };
+  little-plugger = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1frilv82dyxnlg8k1jhrvyd73l6k17mxc5vwxx080r4x1p04gwym";
+      type = "gem";
+    };
+    version = "1.1.4";
+  };
+  logging = {
+    dependencies = ["little-plugger" "multi_json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zflchpx4g8c110gjdcs540bk5a336nq6nmx379rdg56xw0pjd02";
+      type = "gem";
+    };
+    version = "2.3.1";
+  };
+  loofah = {
+    dependencies = ["crass" "nokogiri"];
+    groups = ["assets" "default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08qhzck271anrx9y6qa6mh8hwwdzsgwld8q0000rcd7yvvpnjr3c";
+      type = "gem";
+    };
+    version = "2.19.1";
+  };
+  mail = {
+    dependencies = ["mini_mime" "net-imap" "net-pop" "net-smtp"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1bf9pysw1jfgynv692hhaycfxa8ckay1gjw5hz3madrbrynryfzc";
+      type = "gem";
+    };
+    version = "2.8.1";
+  };
+  marcel = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0kky3yiwagsk8gfbzn3mvl2fxlh3b39v6nawzm4wpjs6xxvvc4x0";
+      type = "gem";
+    };
+    version = "1.0.2";
+  };
+  matrix = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1h2cgkpzkh3dd0flnnwfq6f3nl2b1zff9lvqz8xs853ssv5kq23i";
+      type = "gem";
+    };
+    version = "0.4.2";
+  };
+  memoizable = {
+    dependencies = ["thread_safe"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0v42bvghsvfpzybfazl14qhkrjvx0xlmxz0wwqc960ga1wld5x5c";
+      type = "gem";
+    };
+    version = "0.4.2";
+  };
+  messagebird-rest = {
+    dependencies = ["jwt"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0zghnl12l22adm6lgswj4im3qm70lfnsyl9gg6gd9c89hj467hsk";
+      type = "gem";
+    };
+    version = "4.0.0";
+  };
+  method_source = {
+    groups = ["assets" "default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pnyh44qycnf9mzi1j6fywd5fkskv3x7nmsqrrws0rjn5dd4ayfp";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  mime-types = {
+    dependencies = ["mime-types-data"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ipw892jbksbxxcrlx9g5ljq60qx47pm24ywgfbyjskbcl78pkvb";
+      type = "gem";
+    };
+    version = "3.4.1";
+  };
+  mime-types-data = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pky3vzaxlgm9gw5wlqwwi7wsw3jrglrfflrppvvnsrlaiz043z9";
+      type = "gem";
+    };
+    version = "3.2023.0218.1";
+  };
+  mini_mime = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lbim375gw2dk6383qirz13hgdmxlan0vc5da2l072j3qw6fqjm5";
+      type = "gem";
+    };
+    version = "1.1.2";
+  };
+  mini_portile2 = {
+    groups = ["assets" "default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1af4yarhbbx62f7qsmgg5fynrik0s36wjy3difkawy536xg343mp";
+      type = "gem";
+    };
+    version = "2.8.1";
+  };
+  minitest = {
+    groups = ["assets" "default" "development" "nulldb" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1kjy67qajw4rnkbjs5jyk7kc3lyhz5613fwj1i8f6ppdk4zampy0";
+      type = "gem";
+    };
+    version = "5.17.0";
+  };
+  minitest-profile = {
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13h4nwbq6yv7hsaa7dpj90lry4rc5qqnpzvm9n2s57mm2xi31xfa";
+      type = "gem";
+    };
+    version = "0.0.2";
+  };
+  msgpack = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1q03pb0vq8388s431nbxabsfxnch6p304c8vnjlk0zzpcv713yr3";
+      type = "gem";
+    };
+    version = "1.6.0";
+  };
+  multi_json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pb1g1y3dsiahavspyzkdy39j4q377009f6ix0bh1ag4nqw43l0z";
+      type = "gem";
+    };
+    version = "1.15.0";
+  };
+  multi_xml = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lmd4f401mvravi1i1yq7b2qjjli0yq7dfc4p1nj5nwajp7r6hyj";
+      type = "gem";
+    };
+    version = "0.6.0";
+  };
+  multipart-post = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lgyysrpl50wgcb9ahg29i4p01z0irb3p9lirygma0kkfr5dgk9x";
+      type = "gem";
+    };
+    version = "2.3.0";
+  };
+  mysql2 = {
+    groups = ["mysql"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xsy70mg4p854jska7ff7cy8fyn9nhlkrmfdvkkfmk8qxairbfq1";
+      type = "gem";
+    };
+    version = "0.5.4";
+  };
+  naught = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wwjx35zgbc0nplp8a866iafk4zsrbhwwz4pav5gydr2wm26nksg";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  nestful = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0sn7lrdhp1dwn9xkqwkarby5bxx1g30givy3fi1dwp1xvqbrqikw";
+      type = "gem";
+    };
+    version = "1.1.4";
+  };
+  net-ftp = {
+    dependencies = ["net-protocol" "time"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bqy9xg5225x102873j1qqq1bvnwfbi8lnf4357mpq6wimnw9pf9";
+      type = "gem";
+    };
+    version = "0.2.0";
+  };
+  net-http = {
+    dependencies = ["uri"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0y55ib1v2b8prqfi9ij7hca60b1j94s2bzr6vskwi3i5735472wq";
+      type = "gem";
+    };
+    version = "0.3.2";
+  };
+  net-imap = {
+    dependencies = ["date" "net-protocol"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1d996zf3g8xz244791b0qsl9vr7zg4lqnnmf9k2kshr9lki5jam8";
+      type = "gem";
+    };
+    version = "0.3.4";
+  };
+  net-ldap = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ycw0qsw3hap8svakl0i30jkj0ffd4lpyrn17a1j0w8mz5ainmsj";
+      type = "gem";
+    };
+    version = "0.17.1";
+  };
+  net-pop = {
+    dependencies = ["net-protocol"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wyz41jd4zpjn0v1xsf9j778qx1vfrl24yc20cpmph8k42c4x2w4";
+      type = "gem";
+    };
+    version = "0.1.2";
+  };
+  net-protocol = {
+    dependencies = ["timeout"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dxckrlw4q1lcn3qg4mimmjazmg9bma5gllv72f8js3p36fb3b91";
+      type = "gem";
+    };
+    version = "0.2.1";
+  };
+  net-smtp = {
+    dependencies = ["net-protocol"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1c6md06hm5bf6rv53sk54dl2vg038pg8kglwv3rayx0vk2mdql9x";
+      type = "gem";
+    };
+    version = "0.3.3";
+  };
+  nio4r = {
+    groups = ["default" "puma"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xk64wghkscs6bv2n22853k2nh39d131c6rfpnlw12mbjnnv9v1v";
+      type = "gem";
+    };
+    version = "2.5.8";
+  };
+  nokogiri = {
+    dependencies = ["mini_portile2" "racc"];
+    groups = ["assets" "default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0n79k78c5vdcyl0m3y3l5x9kxl6xf5lgriwi2vd665qmdkr01vnk";
+      type = "gem";
+    };
+    version = "1.13.10";
+  };
+  nori = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "066wc774a2zp4vrq3k7k8p0fhv30ymqmxma1jj7yg5735zls8agn";
+      type = "gem";
+    };
+    version = "2.6.0";
+  };
+  oauth = {
+    dependencies = ["oauth-tty" "snaky_hash" "version_gem"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1syx3hfimaqycy21kn8gmal1cb3bw3hzalv3in2ixnay1xzjp41q";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  oauth-tty = {
+    dependencies = ["version_gem"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05wb5n36i4h23hh9dx2m2cwjxx5vj0vgyrn2xr6rsl54glq5rqil";
+      type = "gem";
+    };
+    version = "1.0.5";
+  };
+  oauth2 = {
+    dependencies = ["faraday" "jwt" "multi_xml" "rack" "snaky_hash" "version_gem"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yzpaghh8kwzgmvmrlbzf36ks5s2hf34rayzw081dp2jrzprs7xj";
+      type = "gem";
+    };
+    version = "2.0.9";
+  };
+  omniauth = {
+    dependencies = ["hashie" "rack"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jn9j54l5h7xcba2vjq74l1dk0xrwvsjxam4qhylpi52nw0h5502";
+      type = "gem";
+    };
+    version = "1.9.2";
+  };
+  omniauth-facebook = {
+    dependencies = ["omniauth-oauth2"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0m7q38kjm94wgq6h7hk9546yg33wcs3vf1v6zp0vx7nwkvfxh2j4";
+      type = "gem";
+    };
+    version = "9.0.0";
+  };
+  omniauth-github = {
+    dependencies = ["omniauth" "omniauth-oauth2"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xbk0dbxqfpyfb33ghz6vrlz3m6442rp18ryf13gwzlnifcawhlb";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  omniauth-gitlab = {
+    dependencies = ["omniauth" "omniauth-oauth2"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nbrg93p0nqxs1i2ddyij2rr7jn4vr3la4la39q4fknpin535k3z";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  omniauth-google-oauth2 = {
+    dependencies = ["jwt" "omniauth" "omniauth-oauth2"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17pgqasl048irs2c6w6g57zvk0ygb5ml1krwir4qi4b6y53zyr55";
+      type = "gem";
+    };
+    version = "0.8.0";
+  };
+  omniauth-linkedin-oauth2 = {
+    dependencies = ["omniauth-oauth2"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ydkj9f2hd3fskpc2gazz9dim70z2k6z6pb8j3glnlhkd67iyzci";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  omniauth-microsoft-office365 = {
+    dependencies = ["omniauth" "omniauth-oauth2"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vw6418gykxqd9z32ddq0mr6wa737la1zwppb1ilw9sgii24rg1v";
+      type = "gem";
+    };
+    version = "0.0.8";
+  };
+  omniauth-oauth = {
+    dependencies = ["oauth" "omniauth"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0yw2vzx633p9wpdkd4jxsih6mw604mj7f6myyfikmj4d95c8d9z7";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  omniauth-oauth2 = {
+    dependencies = ["oauth2" "omniauth"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ia73zcbmhf02krlkq2rxmksx93jp777ax5x58fzkq3jzacqyniz";
+      type = "gem";
+    };
+    version = "1.7.3";
+  };
+  omniauth-rails_csrf_protection = {
+    dependencies = ["actionpack" "omniauth"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xgkxwg17w39q3yjqcj0fm6hdkw37qm1l82dvm9zxn6q2pbzm2zv";
+      type = "gem";
+    };
+    version = "0.1.2";
+  };
+  omniauth-saml = {
+    dependencies = ["omniauth" "ruby-saml"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gxl14lbksnjkl8dfn23lsjkk63md77icm5racrh6fsp5n4ni9d4";
+      type = "gem";
+    };
+    version = "1.10.3";
+  };
+  omniauth-twitter = {
+    dependencies = ["omniauth-oauth" "rack"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0r5j65hkpgzhvvbs90id3nfsjgsad6ymzggbm7zlaxvnrmvnrk65";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  omniauth-weibo-oauth2 = {
+    dependencies = ["omniauth" "omniauth-oauth2"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02cz73lj38cjqkbrdnfr7iymzqdcxgqcjy992r5hmawgpqqgxvwb";
+      type = "gem";
+    };
+    version = "0.5.2";
+  };
+  openssl = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0c649921vg2l939z5cc3jwd8p1v49099pdhxfk7sb9qqx5wi5873";
+      type = "gem";
+    };
+    version = "3.1.0";
+  };
+  overcommit = {
+    dependencies = ["childprocess" "iniparse" "rexml"];
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0slqmsycbqx746liwq0qw0c81xrp4051iff8s574a4fmj941gkia";
+      type = "gem";
+    };
+    version = "0.60.0";
+  };
+  parallel = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07vnk6bb54k4yc06xnwck7php50l09vvlw1ga8wdz0pia461zpzb";
+      type = "gem";
+    };
+    version = "1.22.1";
+  };
+  parser = {
+    dependencies = ["ast"];
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0zk8mdyr0322r11d63rcp5jhz4lakxilhvyvdv0ql5dw4lb83623";
+      type = "gem";
+    };
+    version = "3.2.0.0";
+  };
+  pg = {
+    groups = ["postgres"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13mfrysrdrh8cka1d96zm0lnfs59i5x2g6ps49r2kz5p3q81xrzj";
+      type = "gem";
+    };
+    version = "1.2.3";
+  };
+  PoParser = {
+    dependencies = ["simple_po_parser"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01ldw5ba6xfn2k97n75n52qs4f0fy8xmn58c4247xf476nfvg035";
+      type = "gem";
+    };
+    version = "3.2.6";
+  };
+  power_assert = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17yx4bc0k182lhydwa8aqn0kx776kqymziydpb2szmxzx5q2sghx";
+      type = "gem";
+    };
+    version = "2.0.2";
+  };
+  "promise.rb" = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0a819sikcqvhi8hck1y10d1nv2qkjvmmm553626fmrh51h2i089d";
+      type = "gem";
+    };
+    version = "0.7.4";
+  };
+  pry = {
+    dependencies = ["coderay" "method_source"];
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0m445x8fwcjdyv2bc0glzss2nbm1ll51bq45knixapc7cl3dzdlr";
+      type = "gem";
+    };
+    version = "0.14.1";
+  };
+  pry-rails = {
+    dependencies = ["pry"];
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1cf4ii53w2hdh7fn8vhqpzkymmchjbwij4l3m7s6fsxvb9bn51j6";
+      type = "gem";
+    };
+    version = "0.3.9";
+  };
+  pry-remote = {
+    dependencies = ["pry" "slop"];
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "10g1wrkcy5v5qyg9fpw1cag6g5rlcl1i66kn00r7kwqkzrdhd7nm";
+      type = "gem";
+    };
+    version = "0.1.8";
+  };
+  pry-rescue = {
+    dependencies = ["interception" "pry"];
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wn72y8y3d3g0ng350ld92nyjln012432q2z2iy9lhwzjc4dwi65";
+      type = "gem";
+    };
+    version = "1.5.2";
+  };
+  pry-stack_explorer = {
+    dependencies = ["binding_of_caller" "pry"];
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0h7kp99r8vpvpbvia079i58932qjz2ci9qhwbk7h1bf48ydymnx2";
+      type = "gem";
+    };
+    version = "0.6.1";
+  };
+  public_suffix = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hz0bx2qs2pwb0bwazzsah03ilpf3aai8b7lk7s35jsfzwbkjq35";
+      type = "gem";
+    };
+    version = "5.0.1";
+  };
+  puma = {
+    dependencies = ["nio4r"];
+    groups = ["puma"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0df9bknc2dllk8v9fhgidzbvbryaxa8fgifrk40cdz9csjsphbky";
+      type = "gem";
+    };
+    version = "4.3.12";
+  };
+  pundit = {
+    dependencies = ["activesupport"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wb03yzy1j41822rbfh9nn77im3zh1f5v8di05cd8rsrdpws542b";
+      type = "gem";
+    };
+    version = "2.3.0";
+  };
+  pundit-matchers = {
+    dependencies = ["rspec-rails"];
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hs0z7flj8yibk8jm5x7pnnfnl0rh0rhrvmq27b6pxvqxxvywsq3";
+      type = "gem";
+    };
+    version = "1.8.4";
+  };
+  racc = {
+    groups = ["assets" "default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09jgz6r0f7v84a7jz9an85q8vvmp743dqcsdm3z9c8rqcqv6pljq";
+      type = "gem";
+    };
+    version = "1.6.2";
+  };
+  rack = {
+    groups = ["assets" "default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qgwkcb8kxns8d5187cxjaxf18b7dmg9gh6cr9c1125m0bj2pnfk";
+      type = "gem";
+    };
+    version = "2.2.6.4";
+  };
+  rack-attack = {
+    dependencies = ["rack"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "049s3y3dpl6dn478g912y6f9nzclnnkl30psrbc2w5kaihj5szhq";
+      type = "gem";
+    };
+    version = "6.6.1";
+  };
+  rack-proxy = {
+    dependencies = ["rack"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1a62439xwn5v6hsl9s11hdk4wj58czhcbg7lminv23mnkc0ca147";
+      type = "gem";
+    };
+    version = "0.7.6";
+  };
+  rack-test = {
+    dependencies = ["rack"];
+    groups = ["assets" "default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rjl709krgf499dhjdapg580l2qaj9d91pwzk8ck8fpnazlx1bdd";
+      type = "gem";
+    };
+    version = "2.0.2";
+  };
+  rails = {
+    dependencies = ["actioncable" "actionmailbox" "actionmailer" "actionpack" "actiontext" "actionview" "activejob" "activemodel" "activerecord" "activestorage" "activesupport" "railties" "sprockets-rails"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07cs7qdkx6vwp66diwdy9g6mx52rsd8rxhbnsqf9bqam58g2aynj";
+      type = "gem";
+    };
+    version = "6.1.7.3";
+  };
+  rails-controller-testing = {
+    dependencies = ["actionpack" "actionview" "activesupport"];
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "151f303jcvs8s149mhx2g5mn67487x0blrf9dzl76q1nb7dlh53l";
+      type = "gem";
+    };
+    version = "1.0.5";
+  };
+  rails-dom-testing = {
+    dependencies = ["activesupport" "nokogiri"];
+    groups = ["assets" "default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1lfq2a7kp2x64dzzi5p4cjcbiv62vxh9lyqk2f0rqq3fkzrw8h5i";
+      type = "gem";
+    };
+    version = "2.0.3";
+  };
+  rails-html-sanitizer = {
+    dependencies = ["loofah"];
+    groups = ["assets" "default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mcb75qvldfz6zsr4inrfx7dmb0ngxy507awx28khqmnla3hqpc9";
+      type = "gem";
+    };
+    version = "1.4.4";
+  };
+  railties = {
+    dependencies = ["actionpack" "activesupport" "method_source" "rake" "thor"];
+    groups = ["assets" "default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1d2snjnx1j848axppj2napy3zjgbka3fnw2528rcamhm6dp694nd";
+      type = "gem";
+    };
+    version = "6.1.7.3";
+  };
+  rainbow = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0smwg4mii0fm38pyb5fddbmrdpifwv22zv3d3px2xx497am93503";
+      type = "gem";
+    };
+    version = "3.1.1";
+  };
+  raindrops = {
+    groups = ["default" "unicorn"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wb2x51parf6v78w0cic90m33bdc92y5h8rj4wqs75dhw1b69hc7";
+      type = "gem";
+    };
+    version = "0.20.0";
+  };
+  rake = {
+    groups = ["assets" "default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15whn7p9nrkxangbs9hh75q585yfn66lv0v2mhj6q6dl6x8bzr2w";
+      type = "gem";
+    };
+    version = "13.0.6";
+  };
+  rb-fsevent = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zmf31rnpm8553lqwibvv3kkx0v7majm1f341xbxc0bk5sbhp423";
+      type = "gem";
+    };
+    version = "0.11.2";
+  };
+  rb-inotify = {
+    dependencies = ["ffi"];
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jm76h8f8hji38z3ggf4bzi8vps6p7sagxn3ab57qc0xyga64005";
+      type = "gem";
+    };
+    version = "0.10.1";
+  };
+  rchardet = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1isj1b3ywgg2m1vdlnr41lpvpm3dbyarf1lla4dfibfmad9csfk9";
+      type = "gem";
+    };
+    version = "1.8.0";
+  };
+  redis = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fikjg6j12ka6hh36dxzhfkpqqmilzjfzcdf59iwkzsgd63f0ziq";
+      type = "gem";
+    };
+    version = "4.8.1";
+  };
+  regexp_parser = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0d6241adx6drsfzz74nx1ld3394nm6fjpv3ammzr0g659krvgf7q";
+      type = "gem";
+    };
+    version = "2.7.0";
+  };
+  rexml = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08ximcyfjy94pm1rhcx04ny1vx2sk0x4y185gzn86yfsbzwkng53";
+      type = "gem";
+    };
+    version = "3.2.5";
+  };
+  rspec-core = {
+    dependencies = ["rspec-support"];
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ibb81slc35q5yp276sixp3yrvj9q92wlmi1glbnwlk6g49z8rn4";
+      type = "gem";
+    };
+    version = "3.12.0";
+  };
+  rspec-expectations = {
+    dependencies = ["diff-lcs" "rspec-support"];
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qldsmjhqr4344zdlamzggr3y98wdk2c4hihkhwx8imk800gkl8v";
+      type = "gem";
+    };
+    version = "3.12.0";
+  };
+  rspec-mocks = {
+    dependencies = ["diff-lcs" "rspec-support"];
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yvwnb0x5d6d4ff3wlgahk0wcw72ic51gd2snr1xxc5ify41kabv";
+      type = "gem";
+    };
+    version = "3.12.0";
+  };
+  rspec-rails = {
+    dependencies = ["actionpack" "activesupport" "railties" "rspec-core" "rspec-expectations" "rspec-mocks" "rspec-support"];
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0d3fnabkaw8n0na2dpnlg2xygggj51djzpj9x6y5rkiqbfyqwv01";
+      type = "gem";
+    };
+    version = "6.0.1";
+  };
+  rspec-retry = {
+    dependencies = ["rspec-core"];
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0n6qc0d16h6bgh1xarmc8vc58728mgjcsjj8wcd822c8lcivl0b1";
+      type = "gem";
+    };
+    version = "0.6.2";
+  };
+  rspec-support = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12y52zwwb3xr7h91dy9k3ndmyyhr3mjcayk0nnarnrzz8yr48kfx";
+      type = "gem";
+    };
+    version = "3.12.0";
+  };
+  rszr = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "080ykjdkviqi1l27pd7dzjvbrkf2ybfd89dlpkp7pp81kywbvzjw";
+      type = "gem";
+    };
+    version = "1.3.0";
+  };
+  rubocop = {
+    dependencies = ["json" "parallel" "parser" "rainbow" "regexp_parser" "rexml" "rubocop-ast" "ruby-progressbar" "unicode-display_width"];
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jsiy93y5c2sx2sr5jmdah208idw038m2fpihgan4klmldm3r1pm";
+      type = "gem";
+    };
+    version = "1.45.1";
+  };
+  rubocop-ast = {
+    dependencies = ["parser"];
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pdzabz95hv3z5sfbkfqa8bdybsfl13gv7rjb32v3ss8klq99lbd";
+      type = "gem";
+    };
+    version = "1.24.1";
+  };
+  rubocop-capybara = {
+    dependencies = ["rubocop"];
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1h4qcjkz0365qlhi7y1ni94qj14k397cad566zygm20p15ypbp5v";
+      type = "gem";
+    };
+    version = "2.17.0";
+  };
+  rubocop-faker = {
+    dependencies = ["faker" "rubocop"];
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05d2mpi8xq50xh1s53h75hgvdhcz76lv9cnfn4jg35nbg67j1pdz";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  rubocop-graphql = {
+    dependencies = ["rubocop"];
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hryrjmcl04br06ibjzzrbb2am8ybbhnl2l7w13xl3wz3k4jyjxs";
+      type = "gem";
+    };
+    version = "0.19.0";
+  };
+  rubocop-inflector = {
+    dependencies = ["activesupport" "rubocop" "rubocop-rspec"];
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qdhwixqiix90a4n52g2b26mi66mrkx8b91pf7yda60m331jfbfr";
+      type = "gem";
+    };
+    version = "0.2.1";
+  };
+  rubocop-performance = {
+    dependencies = ["rubocop" "rubocop-ast"];
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1n7g0vg06ldjaq4f8c11c7yqy99zng1qdrkkk4kfziippy24yxnc";
+      type = "gem";
+    };
+    version = "1.16.0";
+  };
+  rubocop-rails = {
+    dependencies = ["activesupport" "rack" "rubocop"];
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nxyifly45y7dfiaf0ql8aq7xykrg0sh1l7dxmn3sb9p2jd18140";
+      type = "gem";
+    };
+    version = "2.17.4";
+  };
+  rubocop-rspec = {
+    dependencies = ["rubocop" "rubocop-capybara"];
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vmmin3ymgq7bhv2hl4pd0zpwawy709p816axc4vi67w61b4bij1";
+      type = "gem";
+    };
+    version = "2.18.1";
+  };
+  ruby-progressbar = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02nmaw7yx9kl7rbaan5pl8x5nn0y4j5954mzrkzi9i3dhsrps4nc";
+      type = "gem";
+    };
+    version = "1.11.0";
+  };
+  ruby-saml = {
+    dependencies = ["nokogiri" "rexml"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1irn32sy9gx6xj9jxc28h7dax7vp9z8j6hjjfsb2f5hd4qz0z20x";
+      type = "gem";
+    };
+    version = "1.14.0";
+  };
+  ruby2_keywords = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vz322p8n39hz3b4a9gkmz9y7a5jaz41zrm2ywf31dvkqm03glgz";
+      type = "gem";
+    };
+    version = "0.0.5";
+  };
+  rubyntlm = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0b8hczk8hysv53ncsqzx4q6kma5gy5lqc7s5yx8h64x3vdb18cjv";
+      type = "gem";
+    };
+    version = "0.6.3";
+  };
+  rubyzip = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0grps9197qyxakbpw02pda59v45lfgbgiyw48i0mq9f2bn9y6mrz";
+      type = "gem";
+    };
+    version = "2.3.2";
+  };
+  sassc = {
+    dependencies = ["ffi"];
+    groups = ["assets" "default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gpqv48xhl8mb8qqhcifcp0pixn206a7imc07g48armklfqa4q2c";
+      type = "gem";
+    };
+    version = "2.4.0";
+  };
+  sassc-rails = {
+    dependencies = ["railties" "sassc" "sprockets" "sprockets-rails" "tilt"];
+    groups = ["assets"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1d9djmwn36a5m8a83bpycs48g8kh1n2xkyvghn7dr6zwh4wdyksz";
+      type = "gem";
+    };
+    version = "2.1.2";
+  };
+  selenium-webdriver = {
+    dependencies = ["rexml" "rubyzip" "websocket"];
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1dkcyq2hfvf4wdj7q5cqqlka1dw6gz28dckxf4r17jmd53ymwg28";
+      type = "gem";
+    };
+    version = "4.8.0";
+  };
+  shoulda-matchers = {
+    dependencies = ["activesupport"];
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "11igjgh16dl5pwqizdmclzlzpv7mbmnh8fx7m9b5kfsjhwxqdfpn";
+      type = "gem";
+    };
+    version = "5.3.0";
+  };
+  simple_oauth = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dw9ii6m7wckml100xhjc6vxpjcry174lbi9jz5v7ibjr3i94y8l";
+      type = "gem";
+    };
+    version = "0.3.1";
+  };
+  simple_po_parser = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wybcipkfawg4pragmayiig03xc084x3hbwywsh1dr9x9pa8f9hj";
+      type = "gem";
+    };
+    version = "1.1.6";
+  };
+  simpleidn = {
+    dependencies = ["unf"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06f7w6ph3bzzqk212yylfp4jfx275shgp9zg3xszbpv1ny2skp9m";
+      type = "gem";
+    };
+    version = "0.2.1";
+  };
+  slack-notifier = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "001bipchr45sny33nlavqgxca9y1qqxa7xpi7pvjfqiybwzvm6nd";
+      type = "gem";
+    };
+    version = "2.4.0";
+  };
+  slack-ruby-client = {
+    dependencies = ["faraday" "faraday-mashify" "faraday-multipart" "gli" "hashie" "websocket-driver"];
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "110rhsxxf0g4qdrhy1ahyfjg1hqqwwwf4rjn8vrrbvpfd04b8xa5";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  slop = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00w8g3j7k7kl8ri2cf1m58ckxk8rn350gp4chfscmgv6pq1spk3n";
+      type = "gem";
+    };
+    version = "3.6.0";
+  };
+  snaky_hash = {
+    dependencies = ["hashie" "version_gem"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0cfwvdcr46pk0c7m5aw2w3izbrp1iba0q7l21r37mzpwaz0pxj0s";
+      type = "gem";
+    };
+    version = "2.0.1";
+  };
+  sprockets = {
+    dependencies = ["concurrent-ruby" "rack"];
+    groups = ["assets"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "182jw5a0fbqah5w9jancvfmjbk88h8bxdbwnl4d3q809rpxdg8ay";
+      type = "gem";
+    };
+    version = "3.7.2";
+  };
+  sprockets-rails = {
+    dependencies = ["actionpack" "activesupport" "sprockets"];
+    groups = ["assets" "default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1b9i14qb27zs56hlcc2hf139l0ghbqnjpmfi0054dxycaxvk5min";
+      type = "gem";
+    };
+    version = "3.4.2";
+  };
+  tcr = {
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14678jlva69bxx24sz5i882x25h357xmbmqsichvq8vdiw2xf6aa";
+      type = "gem";
+    };
+    version = "0.2.2";
+  };
+  telegram-bot-ruby = {
+    dependencies = ["dry-struct" "faraday" "faraday-multipart" "zeitwerk"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hbyr2c2i0bmyynchwg8nhxna64jr9xw6q5p8bxzj762hfj27gcj";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  telephone_number = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1c5cnx7w3wp6ddsw84s131asfs6pr650fhwqhzwx2v3987d38kz1";
+      type = "gem";
+    };
+    version = "1.4.19";
+  };
+  terser = {
+    dependencies = ["execjs"];
+    groups = ["assets"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "01c8wp7z6v71jqgn6fgi8wfw62488i4arxdjqjg8zkn0jsflyd8b";
+      type = "gem";
+    };
+    version = "1.1.13";
+  };
+  test-unit = {
+    dependencies = ["power_assert"];
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1rdhpdi8mlk7jwv9pxz3mhchpd5q93jxzijqhw334w5yv1ajl5hf";
+      type = "gem";
+    };
+    version = "3.5.7";
+  };
+  thor = {
+    groups = ["assets" "default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0inl77jh4ia03jw3iqm5ipr76ghal3hyjrd6r8zqsswwvi9j2xdi";
+      type = "gem";
+    };
+    version = "1.2.1";
+  };
+  thread_safe = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nmhcgq6cgz44srylra07bmaw99f5271l0dpsvl5f75m44l0gmwy";
+      type = "gem";
+    };
+    version = "0.3.6";
+  };
+  tilt = {
+    groups = ["assets" "default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "186nfbcsk0l4l86gvng1fw6jq6p6s7rc0caxr23b3pnbfb20y63v";
+      type = "gem";
+    };
+    version = "2.0.11";
+  };
+  time = {
+    dependencies = ["date"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13pzdsgf3v06mymzipcpa7p80shyw328ybn775nzpnhc6n8y9g30";
+      type = "gem";
+    };
+    version = "0.2.2";
+  };
+  timeout = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pfddf51n5fnj4f9ggwj3wbf23ynj0nbxlxqpz12y1gvl9g7d6r6";
+      type = "gem";
+    };
+    version = "0.3.2";
+  };
+  twilio-ruby = {
+    dependencies = ["faraday" "jwt" "nokogiri"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wn7ybr54i8p6rrg79k0z4pga4n91d9rvrlvwgms8mx3aq9dpbib";
+      type = "gem";
+    };
+    version = "5.74.3";
+  };
+  twitter = {
+    dependencies = ["addressable" "buftok" "equalizer" "http" "http-form_data" "http_parser.rb" "memoizable" "multipart-post" "naught" "simple_oauth"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13dmkjgsnym1avym9f7y2i2h3mlk8crqvc87drrzr4f0sf9l8g2y";
+      type = "gem";
+    };
+    version = "7.0.0";
+  };
+  tzinfo = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["assets" "default" "development" "nulldb" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16w2g84dzaf3z13gxyzlzbf748kylk5bdgg3n1ipvkvvqy685bwd";
+      type = "gem";
+    };
+    version = "2.0.6";
+  };
+  tzinfo-data = {
+    dependencies = ["tzinfo"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0drm9pygji01pyimxq65ngdvgpn228g7fhffmrqw0xn7l2rdhclp";
+      type = "gem";
+    };
+    version = "1.2022.7";
+  };
+  unf = {
+    dependencies = ["unf_ext"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bh2cf73i2ffh4fcpdn9ir4mhq8zi50ik0zqa1braahzadx536a9";
+      type = "gem";
+    };
+    version = "0.1.4";
+  };
+  unf_ext = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yj2nz2l101vr1x9w2k83a0fag1xgnmjwp8w8rw4ik2rwcz65fch";
+      type = "gem";
+    };
+    version = "0.0.8.2";
+  };
+  unicode-display_width = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gi82k102q7bkmfi7ggn9ciypn897ylln1jk9q67kjhr39fj043a";
+      type = "gem";
+    };
+    version = "2.4.2";
+  };
+  unicorn = {
+    dependencies = ["kgio" "raindrops"];
+    groups = ["unicorn"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1h0gma14jjxiz6piyi6p99q7lya2mxrq79l03160hascvmx9ipa5";
+      type = "gem";
+    };
+    version = "6.1.0";
+  };
+  uri = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vigw7nfszfqgikr6n574k9bfh0rvs74z8xq46rz2zsm8249l8cc";
+      type = "gem";
+    };
+    version = "0.12.1";
+  };
+  vcr = {
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1xzd8f17mmcq9f6lxg4w0x4nd9pyp41lr77gjzxwynijzp8rcgjl";
+      type = "gem";
+    };
+    version = "6.1.0";
+  };
+  version_gem = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0v2vj7q1rk3wd7hdqa3i1d4hq7sfcgf55qc70g6dsichsbgacb9w";
+      type = "gem";
+    };
+    version = "1.1.1";
+  };
+  viewpoint = {
+    dependencies = ["httpclient" "logging" "nokogiri" "rubyntlm"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14bvihfs0gzmam680xqqs07isxjk677yi3ph2pdvyyhhkbfys0l0";
+      type = "gem";
+    };
+    version = "1.1.1";
+  };
+  vite_rails = {
+    dependencies = ["railties" "vite_ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "035bjh0db28bgjx6hf01ykrrl4088gygnsva1x7asznzd9aq4669";
+      type = "gem";
+    };
+    version = "3.0.14";
+  };
+  vite_ruby = {
+    dependencies = ["dry-cli" "rack-proxy" "zeitwerk"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "119adbqdx4qb0hl5f34346j2w8a6z5xxy19wc6ad7bnc98v7l0hw";
+      type = "gem";
+    };
+    version = "3.2.14";
+  };
+  webmock = {
+    dependencies = ["addressable" "crack" "hashdiff"];
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1myj44wvbbqvv18ragv3ihl0h61acgnfwrnj3lccdgp49bgmbjal";
+      type = "gem";
+    };
+    version = "3.18.1";
+  };
+  websocket = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dib6p55sl606qb4vpwrvj5wh881kk4aqn2zpfapf8ckx7g14jw8";
+      type = "gem";
+    };
+    version = "1.2.9";
+  };
+  websocket-driver = {
+    dependencies = ["websocket-extensions"];
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0a3bwxd9v3ghrxzjc4vxmf4xa18c6m4xqy5wb0yk5c6b9psc7052";
+      type = "gem";
+    };
+    version = "0.7.5";
+  };
+  websocket-extensions = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hc2g9qps8lmhibl5baa91b4qx8wqw872rgwagml78ydj8qacsqw";
+      type = "gem";
+    };
+    version = "0.1.5";
+  };
+  writeexcel = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0waaf1drp17m5qdchxqlqzj51sfa9hxqccw7d71qdg73gzay1x34";
+      type = "gem";
+    };
+    version = "1.0.5";
+  };
+  xpath = {
+    dependencies = ["nokogiri"];
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bh8lk9hvlpn7vmi6h4hkcwjzvs2y0cmkk3yjjdr8fxvj6fsgzbd";
+      type = "gem";
+    };
+    version = "3.2.0";
+  };
+  zeitwerk = {
+    groups = ["assets" "default" "development" "nulldb" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "028ld9qmgdllxrl7d0qkl65s58wb1n3gv8yjs28g43a8b1hplxk1";
+      type = "gem";
+    };
+    version = "2.6.7";
+  };
+  zendesk_api = {
+    dependencies = ["faraday" "faraday-multipart" "hashie" "inflection" "mini_mime" "multipart-post"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0yizpglgfwml6a2w696m97d1q50hq3v0vldja431rv93s9sjbgly";
+      type = "gem";
+    };
+    version = "1.38.0.rc1";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/misc/zammad/package.json b/nixpkgs/pkgs/applications/networking/misc/zammad/package.json
new file mode 100644
index 000000000000..09c7bc0ca139
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/misc/zammad/package.json
@@ -0,0 +1,152 @@
+{
+  "private": true,
+  "scripts": {
+    "generate-graphql-api": "RAILS_ENV=development bundle exec rails generate zammad:graphql_introspection > tmp/graphql_introspection.json && npx graphql-codegen -c .graphql_code_generator.yml && rm tmp/graphql_introspection.json",
+    "dev": "RAILS_ENV=development forego start -f Procfile.dev",
+    "dev:https": "VITE_RUBY_HTTPS=true RAILS_ENV=development forego start -f Procfile.dev-https",
+    "https:generate": "sh contrib/ssl/generate-ssl.sh",
+    "i18n": "rails generate zammad:translation_catalog",
+    "lint": "vue-tsc --noEmit && eslint --cache --cache-location ./tmp/eslintcache.js -c .eslintrc.js --ext .js,.ts,.vue app/frontend/ .eslint-plugin-zammad/",
+    "lint:fix": "yarn lint -- --fix",
+    "lint:css": "stylelint **/*.{css,vue,scss}",
+    "lint:css:fix": "stylelint **/*.{css,vue,scss} --fix",
+    "test": "VTL_SKIP_AUTO_CLEANUP=true TZ=utc vitest",
+    "test:ct": "CY_OPEN=true yarn --cwd ./.cypress cypress open --component --project ../ --config-file .cypress/cypress.config.mjs",
+    "test:ci:ct": "CI=true yarn --cwd ./.cypress cypress run --component --project ../ --config-file .cypress/cypress.config.mjs --browser electron",
+    "cypress:snapshots": "sh .cypress/visual-regression/snapshots.sh",
+    "cypress:install": "yarn --cwd ./.cypress install",
+    "postinstall": "node script/fix-node-modules.mjs",
+    "story": "histoire dev",
+    "story:build": "HISTOIRE_BUILD=1 histoire build"
+  },
+  "engines": {
+    "node": ">=16"
+  },
+  "packageManager": "yarn@1.22.19",
+  "devDependencies": {
+    "@graphql-codegen/cli": "^3.0.0",
+    "@graphql-codegen/introspection": "^3.0.0",
+    "@graphql-codegen/near-operation-file-preset": "^2.5.0",
+    "@graphql-codegen/typescript": "^3.0.0",
+    "@graphql-codegen/typescript-operations": "^3.0.0",
+    "@graphql-codegen/typescript-vue-apollo": "^3.3.7",
+    "@histoire/plugin-vue": "^0.14.2",
+    "@pinia/testing": "^0.0.14",
+    "@tailwindcss/line-clamp": "^0.4.2",
+    "@testing-library/jest-dom": "^5.16.5",
+    "@testing-library/user-event": "^14.4.3",
+    "@testing-library/vue": "^6.6.1",
+    "@types/lodash-es": "^4.17.6",
+    "@types/rails__actioncable": "^6.1.6",
+    "@types/ua-parser-js": "^0.7.36",
+    "@types/uuid": "^9.0.0",
+    "@typescript-eslint/eslint-plugin": "^5.51.0",
+    "@typescript-eslint/parser": "^5.51.0",
+    "@vitejs/plugin-vue": "^4.0.0",
+    "@vue/eslint-config-prettier": "^7.0.0",
+    "@vue/eslint-config-typescript": "^11.0.2",
+    "@vue/test-utils": "^2.2.10",
+    "autoprefixer": "^10.4.13",
+    "eslint": "^8.33.0",
+    "eslint-config-airbnb-base": "^15.0.0",
+    "eslint-config-prettier": "^8.6.0",
+    "eslint-import-resolver-alias": "^1.1.2",
+    "eslint-plugin-import": "^2.27.5",
+    "eslint-plugin-prettier": "^4.2.1",
+    "eslint-plugin-prettier-vue": "^4.2.0",
+    "eslint-plugin-security": "^1.7.1",
+    "eslint-plugin-sonarjs": "^0.18.0",
+    "eslint-plugin-vue": "^9.9.0",
+    "eslint-plugin-zammad": "file:.eslint-plugin-zammad",
+    "histoire": "^0.14.2",
+    "jsdom": "^21.1.0",
+    "mock-apollo-client": "^1.2.1",
+    "postcss": "^8.4.21",
+    "postcss-html": "^1.5.0",
+    "prettier": "2.8.4",
+    "prettier-plugin-tailwindcss": "^0.2.2",
+    "regenerator-runtime": "^0.13.11",
+    "sass": "^1.58.0",
+    "stylelint": "^14.16.1",
+    "stylelint-config-prettier": "^9.0.5",
+    "stylelint-config-recommended-vue": "^1.4.0",
+    "stylelint-config-standard": "^29.0.0",
+    "stylelint-config-standard-scss": "^6.1.0",
+    "stylelint-prettier": "^2.0.0",
+    "stylelint-scss": "^4.4.0",
+    "tailwindcss": "^3.2.6",
+    "timezone-mock": "^1.3.6",
+    "ts-node": "^10.9.1",
+    "type-fest": "^3.5.7",
+    "typescript": "^4.9.5",
+    "vite": "^4.0.4",
+    "vite-plugin-pwa": "^0.14.1",
+    "vite-plugin-ruby": "^3.1.3",
+    "vite-plugin-svg-icons": "^2.0.1",
+    "vitest": "^0.28.4",
+    "vitest-axe": "^0.1.0",
+    "vue-tsc": "^1.0.24"
+  },
+  "dependencies": {
+    "@apollo/client": "^3.7.7",
+    "@formkit/core": "^1.0.0-beta.13-c578106",
+    "@formkit/dev": "^1.0.0-beta.13-c578106",
+    "@formkit/i18n": "^1.0.0-beta.13-c578106",
+    "@formkit/inputs": "^1.0.0-beta.13-c578106",
+    "@formkit/rules": "^1.0.0-beta.13-c578106",
+    "@formkit/tailwindcss": "^1.0.0-beta.13-c578106",
+    "@formkit/themes": "^1.0.0-beta.13-c578106",
+    "@formkit/utils": "^1.0.0-beta.13-c578106",
+    "@formkit/validation": "^1.0.0-beta.13-c578106",
+    "@formkit/vue": "^1.0.0-beta.13-c578106",
+    "@rails/actioncable": "6.1.7",
+    "@tiptap/core": "^2.0.0-beta.217",
+    "@tiptap/extension-blockquote": "^2.0.0-beta.217",
+    "@tiptap/extension-character-count": "^2.0.0-beta.217",
+    "@tiptap/extension-image": "^2.0.0-beta.217",
+    "@tiptap/extension-link": "^2.0.0-beta.217",
+    "@tiptap/extension-list-item": "^2.0.0-beta.217",
+    "@tiptap/extension-mention": "^2.0.0-beta.217",
+    "@tiptap/extension-ordered-list": "^2.0.0-beta.217",
+    "@tiptap/extension-paragraph": "^2.0.0-beta.217",
+    "@tiptap/extension-strike": "^2.0.0-beta.217",
+    "@tiptap/extension-underline": "^2.0.0-beta.217",
+    "@tiptap/pm": "^2.0.0-beta.217",
+    "@tiptap/starter-kit": "^2.0.0-beta.217",
+    "@tiptap/suggestion": "^2.0.0-beta.217",
+    "@tiptap/vue-3": "^2.0.0-beta.217",
+    "@vue/apollo-composable": "^4.0.0-beta.2",
+    "@vueuse/core": "^9.12.0",
+    "@vueuse/router": "^9.12.0",
+    "@vueuse/shared": "^9.12.0",
+    "async-mutex": "^0.4.0",
+    "flatpickr": "^4.6.13",
+    "graphql": "^16.6.0",
+    "graphql-ruby-client": "^1.11.5",
+    "graphql-tag": "^2.12.6",
+    "linkify-string": "^4.1.0",
+    "linkifyjs": "^4.1.0",
+    "lodash-es": "^4.17.21",
+    "loglevel": "^1.8.1",
+    "mitt": "^3.0.0",
+    "pinia": "^2.0.30",
+    "tippy.js": "^6.3.7",
+    "ua-parser-js": "^1.0.33",
+    "uuid": "^9.0.0",
+    "vue": "^3.2.47",
+    "vue-advanced-cropper": "^2.8.8",
+    "vue-easy-lightbox": "1.12.0",
+    "vue-router": "^4.1.6",
+    "vue3-draggable-resizable": "^1.6.5",
+    "vuedraggable": "^4.1.0",
+    "workbox-core": "^6.5.4",
+    "workbox-precaching": "^6.5.4",
+    "workbox-window": "^6.5.4"
+  },
+  "resolutions": {
+    "loader-utils": "^3.2.1",
+    "postcss": "^8.4.21"
+  },
+  "name": "Zammad",
+  "version": "5.4.1"
+}
diff --git a/nixpkgs/pkgs/applications/networking/misc/zammad/source.json b/nixpkgs/pkgs/applications/networking/misc/zammad/source.json
new file mode 100644
index 000000000000..f7b7280b468d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/misc/zammad/source.json
@@ -0,0 +1,8 @@
+{
+  "owner": "zammad",
+  "repo": "zammad",
+  "rev": "643aba6ba4ba66c6127038c8cc2cc7a20b912678",
+  "hash": "sha256-vLLn989M5ZN+jTh60BopEKbuaxOBfDsk6PiM+gHFClo=",
+  "fetchSubmodules": true
+}
+
diff --git a/nixpkgs/pkgs/applications/networking/misc/zammad/update.nix b/nixpkgs/pkgs/applications/networking/misc/zammad/update.nix
new file mode 100644
index 000000000000..090fe338941b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/misc/zammad/update.nix
@@ -0,0 +1,39 @@
+{ stdenv
+, lib
+, makeWrapper
+, bundix
+, common-updater-scripts
+, xidel
+, jq
+, nix-prefetch-github
+, yarn
+, yarn2nix
+}:
+
+stdenv.mkDerivation rec {
+  name = "zammad-update-script";
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ${./update.sh} $out/bin/update.sh
+    patchShebangs $out/bin/update.sh
+    wrapProgram $out/bin/update.sh --prefix PATH : ${lib.makeBinPath buildInputs}
+  '';
+  dontUnpack = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [
+    bundix
+    common-updater-scripts
+    xidel
+    jq
+    nix-prefetch-github
+    yarn
+    yarn2nix
+  ];
+
+  meta = {
+    maintainers = with lib.maintainers; [ n0emis ];
+    description = "Utility to generate Nix expressions for Zammad's dependencies";
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/misc/zammad/update.sh b/nixpkgs/pkgs/applications/networking/misc/zammad/update.sh
new file mode 100755
index 000000000000..dd030f10f0e6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/misc/zammad/update.sh
@@ -0,0 +1,68 @@
+#!/usr/bin/env bash
+
+set -euo pipefail
+
+if [ "$#" -gt 2 ] || [[ "$1" == -* ]]; then
+  echo "Regenerates packaging data for the zammad packages."
+  echo "Usage: $0 [package name] [zammad directory in nixpkgs]"
+  exit 1
+fi
+
+VERSION=$(xidel -s https://ftp.zammad.com/ --extract "//a" | grep -E "zammad-[0-9.]*.tar.gz" | sort --version-sort | tail -n 1 | sed -e 's/zammad-//' -e 's/.tar.gz//')
+TARGET_DIR="$2"
+WORK_DIR=$(mktemp -d)
+SOURCE_DIR=$WORK_DIR/zammad-$VERSION
+
+pushd $TARGET_DIR
+
+rm -rf \
+    ./source.json \
+    ./gemset.nix \
+    ./yarn.lock \
+    ./yarn.nix
+
+
+# Check that working directory was created.
+if [[ ! "$WORK_DIR" || ! -d "$WORK_DIR" ]]; then
+    echo "Could not create temporary directory."
+    exit 1
+fi
+
+# Delete the working directory on exit.
+function cleanup {
+  rm -rf "$WORK_DIR"
+}
+trap cleanup EXIT
+
+
+pushd $WORK_DIR
+
+echo ":: Creating source.json"
+nix-prefetch-github zammad zammad --rev $VERSION --json --fetch-submodules | jq 'del(.leaveDotGit) | del(.deepClone)' > $TARGET_DIR/source.json
+echo >> $TARGET_DIR/source.json
+
+echo ":: Fetching source"
+curl -L https://github.com/zammad/zammad/archive/$VERSION.tar.gz --output source.tar.gz
+tar zxf source.tar.gz
+
+if [[ ! "$SOURCE_DIR" || ! -d "$SOURCE_DIR" ]]; then
+    echo "Source directory does not exists."
+    exit 1
+fi
+
+pushd $SOURCE_DIR
+
+echo ":: Creating gemset.nix"
+bundix --lockfile=./Gemfile.lock  --gemfile=./Gemfile --gemset=$TARGET_DIR/gemset.nix
+
+echo ":: Creating yarn.nix"
+yarn install
+cp yarn.lock $TARGET_DIR
+yarn2nix > $TARGET_DIR/yarn.nix
+
+# needed to avoid import from derivation
+jq --arg VERSION "$VERSION" '. += {name: "Zammad", version: $VERSION}' package.json > $TARGET_DIR/package.json
+
+popd
+popd
+popd
diff --git a/nixpkgs/pkgs/applications/networking/mkchromecast/default.nix b/nixpkgs/pkgs/applications/networking/mkchromecast/default.nix
new file mode 100644
index 000000000000..fa734e7dea53
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mkchromecast/default.nix
@@ -0,0 +1,88 @@
+{ lib, stdenv
+, fetchFromGitHub
+, python3Packages
+, sox
+, flac
+, lame
+, wrapQtAppsHook
+, ffmpeg
+, vorbis-tools
+, pulseaudio
+, nodejs
+, youtube-dl
+, opusTools
+, gst_all_1
+, enableSonos ? true
+, qtwayland
+}:
+let packages = [
+  vorbis-tools
+  sox
+  flac
+  lame
+  opusTools
+  gst_all_1.gstreamer
+  nodejs
+  ffmpeg
+  youtube-dl
+] ++ lib.optionals stdenv.isLinux [ pulseaudio ];
+
+in
+python3Packages.buildPythonApplication {
+  pname = "mkchromecast-unstable";
+  version = "2022-10-31";
+
+  src = fetchFromGitHub {
+    owner = "muammar";
+    repo = "mkchromecast";
+    rev = "0de9fd78c4122dec4f184aeae2564790b45fe6dc";
+    sha256 = "sha256-dxsIcBPrZaXlsfzOEXhYj2qoK5LRducJG2ggMrMMl9Y=";
+  };
+
+  buildInputs = lib.optional stdenv.isLinux qtwayland;
+  propagatedBuildInputs = with python3Packages; ([
+    pychromecast
+    psutil
+    mutagen
+    flask
+    netifaces
+    requests
+    pyqt5
+  ] ++ lib.optionals enableSonos [ soco ]);
+
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace 'platform.system() == "Darwin"' 'False' \
+      --replace 'platform.system() == "Linux"' 'True'
+  '';
+
+  nativeBuildInputs = [ wrapQtAppsHook ];
+
+  # Relies on an old version (0.7.7) of PyChromecast unavailable in Nixpkgs.
+  # Is also I/O bound and impure, testing an actual device, so we disable.
+  doCheck = false;
+
+  dontWrapQtApps = true;
+
+  makeWrapperArgs = [
+    "\${qtWrapperArgs[@]}"
+    "--prefix PATH : ${lib.makeBinPath packages}"
+  ];
+
+  postInstall = ''
+    substituteInPlace $out/lib/${python3Packages.python.libPrefix}/site-packages/mkchromecast/video.py \
+      --replace '/usr/share/mkchromecast/nodejs/' '${placeholder "out"}/share/mkchromecast/nodejs/'
+  '' + lib.optionalString stdenv.isDarwin ''
+    install -Dm 755 -t $out/bin bin/audiodevice
+    substituteInPlace $out/lib/${python3Packages.python.libPrefix}/site-packages/mkchromecast/audio_devices.py \
+      --replace './bin/audiodevice' '${placeholder "out"}/bin/audiodevice'
+  '';
+
+  meta = with lib; {
+    homepage = "https://mkchromecast.com/";
+    description = "Cast macOS and Linux Audio/Video to your Google Cast and Sonos Devices";
+    license = licenses.mit;
+    maintainers = with maintainers; [ shou ];
+    mainProgram = "mkchromecast";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/modem-manager-gui/default.nix b/nixpkgs/pkgs/applications/networking/modem-manager-gui/default.nix
new file mode 100644
index 000000000000..5702ff414f33
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/modem-manager-gui/default.nix
@@ -0,0 +1,85 @@
+{ lib, stdenv
+, pkg-config
+, python3
+, fetchFromGitLab
+, fetchpatch
+, gtk3
+, glib
+, gdbm
+, gtkspell3
+, ofono
+, itstool
+, libayatana-appindicator
+, perlPackages
+, meson
+, ninja
+}:
+
+stdenv.mkDerivation rec {
+  pname = "modem-manager-gui";
+  version = "0.0.20";
+
+  src = fetchFromGitLab {
+    domain = "salsa.debian.org";
+    owner = "debian";
+    repo = "modem-manager-gui";
+    rev = "upstream%2F${version}";
+    sha256 = "1pjx4rbsxa7gcs628yjkwb0zqrm5xq8pkmp0cfk4flfk1ryflmgr";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    python3
+    perlPackages.Po4a
+    itstool
+    meson
+    ninja
+  ];
+
+  buildInputs = [
+    gtk3
+    glib
+    gdbm
+    gtkspell3
+    ofono
+    libayatana-appindicator
+  ];
+
+  patches = [
+    # Fix missing tray icon
+    (fetchpatch {
+      url = "https://salsa.debian.org/debian/modem-manager-gui/-/raw/7c3e67a1cf7788d7a4b86be12803870d79aa27f2/debian/patches/fix-tray-icon.patch";
+      sha256 = "sha256-9LjCEQl8YfraVlO1W7+Yy7egLAPu5YfnvGvCI3uGFh8=";
+    })
+    # Fix build with meson 0.61
+    # appdata/meson.build:3:5: ERROR: Function does not take positional arguments.
+    (fetchpatch {
+      url = "https://salsa.debian.org/debian/modem-manager-gui/-/raw/7c3e67a1cf7788d7a4b86be12803870d79aa27f2/debian/patches/meson0.61.patch";
+      sha256 = "sha256-B+tBPIz5RxOwZWYEWttqSKGw2Wbfk0mnBY0Zy0evvAQ=";
+    })
+    # Fix segfault on launch: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1004258
+    # Segmentation fault at address: 0x20
+    (fetchpatch {
+      url = "https://salsa.debian.org/debian/modem-manager-gui/-/commit/8ccffd6dd6b42625d09d5408f37f155d91411116.patch";
+      sha256 = "sha256-q+B+Bcm3uitJ2IfkCiMo3reFV1C06ekmy1vXWC0oHnw=";
+    })
+  ];
+
+  postPatch = ''
+    patchShebangs man/manhelper.py
+  '';
+
+  meta = with lib; {
+    description = "An app to send/receive SMS, make USSD requests, control mobile data usage and more";
+    longDescription = ''
+      A simple GTK based GUI compatible with Modem manager, Wader and oFono
+      system services able to control EDGE/3G/4G broadband modem specific
+      functions. You can check balance of your SIM card, send or receive SMS
+      messages, control mobile traffic consumption and more.
+    '';
+    homepage = "https://linuxonly.ru/page/modem-manager-gui";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ ahuzik galagora ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/mpop/default.nix b/nixpkgs/pkgs/applications/networking/mpop/default.nix
new file mode 100644
index 000000000000..efc782e83283
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mpop/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, stdenv
+, fetchurl
+, gnutls
+, openssl
+, gsasl
+, libidn
+, pkg-config
+, Security
+, nlsSupport ? true
+, idnSupport ? true
+, gsaslSupport ? true
+, sslLibrary ? "gnutls"
+}:
+assert lib.assertOneOf "sslLibrary" sslLibrary ["gnutls" "openssl" "no"];
+
+stdenv.mkDerivation rec {
+  pname = "mpop";
+  version = "1.4.18";
+
+  src = fetchurl {
+    url = "https://marlam.de/${pname}/releases/${pname}-${version}.tar.xz";
+    sha256 = "sha256-YJmVAYT30JSngtHnq5gzc28SMI00pUSlm0aoRx2fhbc=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs =
+    lib.optional stdenv.isDarwin Security
+    ++ lib.optional gsaslSupport gsasl
+    ++ lib.optional idnSupport libidn
+    ++ lib.optional (sslLibrary == "gnutls") gnutls
+    ++ lib.optional (sslLibrary == "openssl") openssl;
+
+  configureFlags = [
+    (lib.enableFeature nlsSupport "nls")
+    (lib.withFeature idnSupport "idn")
+    (lib.withFeature gsaslSupport "gsasl")
+    "--with-tls=${sslLibrary}"
+  ] ++ lib.optional stdenv.isDarwin "--with-macosx-keyring";
+
+  meta = with lib;{
+    description = "POP3 mail retrieval agent";
+    homepage = "https://marlam.de/mpop";
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/msmtp/default.nix b/nixpkgs/pkgs/applications/networking/msmtp/default.nix
new file mode 100644
index 000000000000..479d0980919c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/msmtp/default.nix
@@ -0,0 +1,132 @@
+{ resholve
+, stdenv
+, symlinkJoin
+, lib
+, fetchFromGitHub
+, autoreconfHook
+, pkg-config
+, bash
+, coreutils
+, gnugrep
+, gnutls
+, gsasl
+, libidn2
+, netcat-gnu
+, texinfo
+, which
+, Security
+, withKeyring ? true
+, libsecret
+, withSystemd ? lib.meta.availableOn stdenv.hostPlatform systemd
+, systemd
+}:
+
+let
+  inherit (lib) getBin getExe optionals;
+
+  version = "1.8.22";
+
+  src = fetchFromGitHub {
+    owner = "marlam";
+    repo = "msmtp-mirror";
+    rev = "msmtp-${version}";
+    hash = "sha256-Jt/uvGBrYYr6ua6LVPiP0nuRiIkxBJASdgHBNHivzxQ=";
+  };
+
+  meta = with lib; {
+    description = "Simple and easy to use SMTP client with excellent sendmail compatibility";
+    homepage = "https://marlam.de/msmtp/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms = platforms.unix;
+  };
+
+  binaries = stdenv.mkDerivation {
+    pname = "msmtp-binaries";
+    inherit version src meta;
+
+    configureFlags = [ "--sysconfdir=/etc" "--with-libgsasl" ]
+      ++ optionals stdenv.isDarwin [ "--with-macosx-keyring" ];
+
+    buildInputs = [ gnutls gsasl libidn2 ]
+      ++ optionals stdenv.isDarwin [ Security ]
+      ++ optionals withKeyring [ libsecret ];
+
+    nativeBuildInputs = [ autoreconfHook pkg-config texinfo ];
+
+    enableParallelBuilding = true;
+
+    postInstall = ''
+      install -Dm444 -t $out/share/doc/msmtp doc/*.example
+      ln -s msmtp $out/bin/sendmail
+    '';
+  };
+
+  scripts = resholve.mkDerivation {
+    pname = "msmtp-scripts";
+    inherit version src meta;
+
+    patches = [ ./paths.patch ];
+
+    postPatch = ''
+      substituteInPlace scripts/msmtpq/msmtpq \
+        --replace @journal@ ${if withSystemd then "Y" else "N"}
+    '';
+
+    dontConfigure = true;
+    dontBuild = true;
+
+    installPhase = ''
+      runHook preInstall
+
+      install -Dm555 -t $out/bin                     scripts/msmtpq/msmtp*
+      install -Dm444 -t $out/share/doc/msmtp/scripts scripts/msmtpq/README*
+      install -Dm444 -t $out/share/doc/msmtp/scripts scripts/{find_alias,msmtpqueue,set_sendmail}/*
+
+      if grep --quiet -E '@.+@' $out/bin/*; then
+        echo "Unsubstituted variables found. Aborting!"
+        grep -E '@.+@' $out/bin/*
+        exit 1
+      fi
+
+      runHook postInstall
+    '';
+
+    solutions = {
+      msmtpq = {
+        scripts = [ "bin/msmtpq" ];
+        interpreter = getExe bash;
+        inputs = [
+          binaries
+          coreutils
+          gnugrep
+          netcat-gnu
+          which
+        ] ++ optionals withSystemd [ systemd ];
+        execer = [
+          "cannot:${getBin binaries}/bin/msmtp"
+          "cannot:${getBin netcat-gnu}/bin/nc"
+        ] ++ optionals withSystemd [
+          "cannot:${getBin systemd}/bin/systemd-cat"
+        ];
+        fix."$MSMTP" = [ "msmtp" ];
+        fake.external = [ "ping" ]
+          ++ optionals (!withSystemd) [ "systemd-cat" ];
+      };
+
+      msmtp-queue = {
+        scripts = [ "bin/msmtp-queue" ];
+        interpreter = getExe bash;
+        inputs = [ "${placeholder "out"}/bin" ];
+        execer = [ "cannot:${placeholder "out"}/bin/msmtpq" ];
+      };
+    };
+  };
+
+in
+symlinkJoin {
+  name = "msmtp-${version}";
+  inherit version meta;
+  paths = [ binaries scripts ];
+  passthru = { inherit binaries scripts; };
+}
diff --git a/nixpkgs/pkgs/applications/networking/msmtp/paths.patch b/nixpkgs/pkgs/applications/networking/msmtp/paths.patch
new file mode 100644
index 000000000000..9298519e4da3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/msmtp/paths.patch
@@ -0,0 +1,64 @@
+diff --git a/scripts/msmtpq/msmtpq b/scripts/msmtpq/msmtpq
+index d8b4039..1f2a7b5 100755
+--- a/scripts/msmtpq/msmtpq
++++ b/scripts/msmtpq/msmtpq
+@@ -60,8 +60,8 @@ err() { dsp '' "$@" '' ; exit 1 ; }
+ ##   e.g. ( export MSMTP=/path/to/msmtp )
+ if [ "$MSMTP" = "" ] ; then  # If MSMTP is unset or empty...
+   MSMTP=msmtp
+-elif [ ! -x "$MSMTP" ] ; then
+-  log -e 1 "msmtpq : can't find the msmtp executable [ $MSMTP ]"   # if not found - complain ; quit
++# elif [ ! -x "$MSMTP" ] ; then
++#   log -e 1 "msmtpq : can't find the msmtp executable [ $MSMTP ]"   # if not found - complain ; quit
+ fi
+ ##
+ ## set the queue var to the location of the msmtp queue directory
+@@ -71,7 +71,7 @@ fi
+ ##            ( chmod 0700 msmtp.queue )
+ ##
+ ## the queue dir - export this variable to reflect where you'd like it to be  (no quotes !!)
+-Q=${Q:-~/.msmtp.queue}
++Q=${MSMTP_QUEUE:-~/.msmtp.queue}
+ [ -d "$Q" ] || mkdir -m 0700 -p "$Q" || \
+   err '' "msmtpq : can't find or create msmtp queue directory [ $Q ]" ''     # if not present - complain ; quit
+ ##
+@@ -85,8 +85,10 @@ Q=${Q:-~/.msmtp.queue}
+ ##
+ ## the queue log file - export this variable to change where logs are stored  (but no quotes !!)
+ ##                      Set it to "" (empty string) to disable logging.
+-[ -v LOG ] || LOG=~/log/msmtp.queue.log
++LOG=${MSMTP_LOG:-~/log/msmtp.queue.log}
+ [ -d "$(dirname "$LOG")" ] || mkdir -p "$(dirname "$LOG")"
++
++JOURNAL=@journal@
+ ## ======================================================================================
+ 
+ ## msmtpq can use the following environment variables :
+@@ -139,6 +141,7 @@ on_exit() {                          # unlock the queue on exit if the lock was
+ ## display msg to user, as well
+ ##
+ log() {
++  local NAME=msmtpq
+   local ARG RC PFX
+   PFX="$('date' +'%Y %d %b %H:%M:%S')"
+                                      # time stamp prefix - "2008 13 Mar 03:59:45 "
+@@ -156,10 +159,19 @@ log() {
+     done
+   fi
+ 
++  if [ "$JOURNAL" = "Y" ]; then
++    for ARG; do
++      [ -n "$ARG" ] &&
++        echo "$ARG" | systemd-cat -t "$NAME" -p info
++    done
++  fi
++
+   if [ -n "$RC" ] ; then             # an error ; leave w/error return
+     [ -n "$LKD" ] && lock_queue -u   # unlock here (if locked)
+     [ -n "$LOG" ] && \
+       echo "    exit code = $RC" >> "$LOG" # logging ok ; send exit code to log
++    [ "$JOURNAL" = "Y" ] && \
++      echo "exit code= $RC" | systemd-cat -t "$NAME" -p emerg
+     exit "$RC"                       # exit w/return code
+   fi
+ }
diff --git a/nixpkgs/pkgs/applications/networking/mujmap/default.nix b/nixpkgs/pkgs/applications/networking/mujmap/default.nix
new file mode 100644
index 000000000000..60f49163be73
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mujmap/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, notmuch
+, stdenv
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "mujmap";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "elizagamedev";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-Qb9fEPQrdn+Ek9bdOMfaPIxlGGpQ9RfQZOeeqoOf17E=";
+  };
+
+  cargoSha256 = "sha256-nnAYjutjxtEpDNoWTnlESDO4Haz14wZxY4gdyzdLgBU=";
+
+  buildInputs = [
+    notmuch
+  ] ++ lib.optional stdenv.isDarwin Security;
+
+  meta = with lib; {
+    description = "JMAP integration for notmuch mail";
+    homepage = "https://github.com/elizagamedev/mujmap/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ elizagamedev ];
+    mainProgram = "mujmap";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/mullvad-vpn/default.nix b/nixpkgs/pkgs/applications/networking/mullvad-vpn/default.nix
new file mode 100644
index 000000000000..cd4642f906d9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mullvad-vpn/default.nix
@@ -0,0 +1,142 @@
+{ stdenv
+, lib
+, fetchurl
+, dpkg
+, alsa-lib
+, atk
+, cairo
+, cups
+, dbus
+, expat
+, fontconfig
+, freetype
+, gdk-pixbuf
+, glib
+, pango
+, nspr
+, nss
+, gtk3
+, mesa
+, libGL
+, wayland
+, xorg
+, autoPatchelfHook
+, systemd
+, libnotify
+, libappindicator
+, makeWrapper
+, coreutils
+, gnugrep
+}:
+
+let
+  deps = [
+    alsa-lib
+    atk
+    cairo
+    cups
+    dbus
+    expat
+    fontconfig
+    freetype
+    gdk-pixbuf
+    glib
+    pango
+    gtk3
+    libappindicator
+    libnotify
+    mesa
+    xorg.libX11
+    xorg.libXScrnSaver
+    xorg.libXcomposite
+    xorg.libXcursor
+    xorg.libXdamage
+    xorg.libXext
+    xorg.libXfixes
+    xorg.libXi
+    xorg.libXrandr
+    xorg.libXrender
+    xorg.libXtst
+    xorg.libxcb
+    xorg.libxshmfence
+    nspr
+    nss
+    systemd
+  ];
+
+  version = "2023.4";
+
+  selectSystem = attrs: attrs.${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
+
+  platform = selectSystem {
+    x86_64-linux = "amd64";
+    aarch64-linux = "arm64";
+  };
+
+  hash = selectSystem {
+    x86_64-linux = "sha256-7NoifrX1/3pUJHTYK+2dVos/oFsKiYwyhCGi07SsEhM=";
+    aarch64-linux = "sha256-e0lp+SpBUmtYBcJPvql8ALeCkVtneZ1Cd3IFMVX6R2Q=";
+  };
+in
+
+stdenv.mkDerivation {
+  pname = "mullvad-vpn";
+  inherit version;
+
+  src = fetchurl {
+    url = "https://github.com/mullvad/mullvadvpn-app/releases/download/${version}/MullvadVPN-${version}_${platform}.deb";
+    inherit hash;
+  };
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+    dpkg
+    makeWrapper
+  ];
+
+  buildInputs = deps;
+
+  dontBuild = true;
+  dontConfigure = true;
+
+  unpackPhase = "dpkg-deb -x $src .";
+
+  runtimeDependencies = [ (lib.getLib systemd) libGL libnotify libappindicator wayland ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/share/mullvad $out/bin
+
+    mv usr/share/* $out/share
+    mv usr/bin/* $out/bin
+    mv opt/Mullvad\ VPN/* $out/share/mullvad
+
+    ln -s $out/share/mullvad/mullvad-{gui,vpn} $out/bin/
+    ln -sf $out/share/mullvad/resources/mullvad-problem-report $out/bin/mullvad-problem-report
+
+    wrapProgram $out/bin/mullvad-vpn \
+      --set MULLVAD_DISABLE_UPDATE_NOTIFICATION 1 \
+      --prefix PATH : ${lib.makeBinPath [ coreutils gnugrep ]}
+
+    wrapProgram $out/bin/mullvad-daemon \
+        --set-default MULLVAD_RESOURCE_DIR "$out/share/mullvad/resources"
+
+    sed -i "s|Exec.*$|Exec=$out/bin/mullvad-vpn $U|" $out/share/applications/mullvad-vpn.desktop
+
+    runHook postInstall
+  '';
+
+  passthru.updateScript = ./update.sh;
+
+  meta = with lib; {
+    homepage = "https://github.com/mullvad/mullvadvpn-app";
+    description = "Client for Mullvad VPN";
+    changelog = "https://github.com/mullvad/mullvadvpn-app/blob/${version}/CHANGELOG.md";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.gpl3Only;
+    platforms = [ "x86_64-linux" "aarch64-linux" ];
+    maintainers = with maintainers; [ Br1ght0ne ymarkus ataraxiasjel ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/networking/mullvad-vpn/update.sh b/nixpkgs/pkgs/applications/networking/mullvad-vpn/update.sh
new file mode 100755
index 000000000000..97a6e2a44845
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mullvad-vpn/update.sh
@@ -0,0 +1,36 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl gnused gawk jq nix-prefetch
+
+set -euo pipefail
+
+ROOT="$(dirname "$(readlink -f "$0")")"
+NIX_DRV="$ROOT/default.nix"
+if [ ! -f "$NIX_DRV" ]; then
+  echo "ERROR: cannot find default.nix in $ROOT"
+  exit 1
+fi
+
+fetch_arch() {
+  VER="$1"; ARCH="$2"
+  URL="https://github.com/mullvad/mullvadvpn-app/releases/download/${VER}/MullvadVPN-${VER}_${ARCH}.deb"
+  nix-prefetch "{ stdenv, fetchzip }:
+stdenv.mkDerivation rec {
+  pname = \"mullvad-vpn\"; version = \"${VER}\";
+  src = fetchurl { url = \"$URL\"; };
+}
+"
+}
+
+replace_sha() {
+  sed -i "s#$1 = \"sha256-.\{44\}\"#$1 = \"$2\"#" "$NIX_DRV"
+}
+
+MULLVAD_VER=$(curl -s https://api.mullvad.net/app/v1/releases/linux/2022.5 | jq -r '.latest_stable')
+
+MULLVAD_LINUX_X64_SHA256=$(fetch_arch "$MULLVAD_VER" "amd64")
+MULLVAD_LINUX_AARCH64_SHA256=$(fetch_arch "$MULLVAD_VER" "arm64")
+
+sed -i "s/version = \".*\"/version = \"$MULLVAD_VER\"/" "$NIX_DRV"
+
+replace_sha "x86_64-linux" "$MULLVAD_LINUX_X64_SHA256"
+replace_sha "aarch64-linux" "$MULLVAD_LINUX_AARCH64_SHA256"
diff --git a/nixpkgs/pkgs/applications/networking/mullvad/Cargo.lock b/nixpkgs/pkgs/applications/networking/mullvad/Cargo.lock
new file mode 100644
index 000000000000..87bef3c513fe
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mullvad/Cargo.lock
@@ -0,0 +1,4291 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e61f2b7f93d2c7d2b08263acaa4a363b3e276806c68af6134c44f523bf1aacd"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "aead"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877"
+dependencies = [
+ "generic-array 0.14.4",
+]
+
+[[package]]
+name = "aes"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8"
+dependencies = [
+ "cfg-if",
+ "cipher",
+ "cpufeatures",
+ "ctr",
+ "opaque-debug 0.3.0",
+]
+
+[[package]]
+name = "aes-gcm"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df5f85a83a7d8b0442b6aa7b504b8212c1733da07b98aae43d4bc21b2cb3cdf6"
+dependencies = [
+ "aead",
+ "aes",
+ "cipher",
+ "ctr",
+ "ghash",
+ "subtle",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "android_log-sys"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8052e2d8aabbb8d556d6abbcce2a22b9590996c5f849b9c7ce4544a2e3b984e"
+
+[[package]]
+name = "android_logger"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8cbd542dd180566fad88fd2729a53a62a734843c626638006a9d63ec0688484e"
+dependencies = [
+ "android_log-sys",
+ "env_logger 0.7.1",
+ "lazy_static",
+ "log",
+]
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d7ed72e1635e121ca3e79420540282af22da58be50de153d36f81ddc6b83aa9e"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61604a8f862e1d5c3229fdd78f8b02c68dcf73a4c4b05fd636d12240aaa242c1"
+
+[[package]]
+name = "arc-swap"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c5d78ce20460b82d3fa150275ed9d55e21064fc7951177baacf86a145c4a4b1f"
+
+[[package]]
+name = "async-stream"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "171374e7e3b2504e0e5236e3b59260560f9fe94bfe9ac39ba5e4e929c5590625"
+dependencies = [
+ "async-stream-impl",
+ "futures-core",
+]
+
+[[package]]
+name = "async-stream-impl"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "648ed8c8d2ce5409ccd57453d9d1b214b342a0d69376a6feda1fd6cae3299308"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "async-trait"
+version = "0.1.51"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44318e776df68115a881de9a8fd1b9e53368d7a4a5ce4cc48517da3393233a5e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "axum"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4af7447fc1214c1f3a1ace861d0216a6c8bb13965b64bbad9650f375b67689a"
+dependencies = [
+ "async-trait",
+ "axum-core",
+ "bitflags",
+ "bytes",
+ "futures-util",
+ "http",
+ "http-body",
+ "hyper",
+ "itoa 1.0.1",
+ "matchit",
+ "memchr",
+ "mime",
+ "percent-encoding",
+ "pin-project-lite",
+ "serde",
+ "sync_wrapper",
+ "tokio",
+ "tower",
+ "tower-http",
+ "tower-layer",
+ "tower-service",
+]
+
+[[package]]
+name = "axum-core"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9f0c0a60006f2a293d82d571f635042a72edf927539b7685bd62d361963839b"
+dependencies = [
+ "async-trait",
+ "bytes",
+ "futures-util",
+ "http",
+ "http-body",
+ "mime",
+ "tower-layer",
+ "tower-service",
+]
+
+[[package]]
+name = "backtrace"
+version = "0.3.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7a905d892734eea339e896738c14b9afce22b5318f64b951e70bf3844419b01"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base16ct"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce"
+
+[[package]]
+name = "base64"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "block-buffer"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b"
+dependencies = [
+ "block-padding",
+ "byte-tools",
+ "byteorder",
+ "generic-array 0.12.4",
+]
+
+[[package]]
+name = "block-buffer"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324"
+dependencies = [
+ "generic-array 0.14.4",
+]
+
+[[package]]
+name = "block-padding"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5"
+dependencies = [
+ "byte-tools",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535"
+
+[[package]]
+name = "byte-tools"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7"
+
+[[package]]
+name = "byte_string"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "11aade7a05aa8c3a351cedc44c3fc45806430543382fcc4743a9b757a2a0b4ed"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "bytes"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8"
+
+[[package]]
+name = "cbindgen"
+version = "0.24.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6358dedf60f4d9b8db43ad187391afe959746101346fe51bb978126bec61dfb"
+dependencies = [
+ "clap",
+ "heck",
+ "indexmap",
+ "log",
+ "proc-macro2",
+ "quote",
+ "serde",
+ "serde_json",
+ "syn",
+ "tempfile",
+ "toml",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.78"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a20104e2335ce8a659d6dd92a51a767a0c062599c73b343fd152cb401e828c3d"
+
+[[package]]
+name = "cesu8"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chacha20"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c80e5460aa66fe3b91d40bcbdab953a597b60053e34d684ac6903f863b680a6"
+dependencies = [
+ "cfg-if",
+ "cipher",
+ "cpufeatures",
+ "zeroize",
+]
+
+[[package]]
+name = "chacha20poly1305"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a18446b09be63d457bbec447509e85f662f32952b035ce892290396bc0b0cff5"
+dependencies = [
+ "aead",
+ "chacha20",
+ "cipher",
+ "poly1305",
+ "zeroize",
+]
+
+[[package]]
+name = "chrono"
+version = "0.4.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f725f340c3854e3cb3ab736dc21f0cca183303acea3b3ffec30f141503ac8eb"
+dependencies = [
+ "iana-time-zone",
+ "js-sys",
+ "num-integer",
+ "num-traits",
+ "serde",
+ "time 0.1.43",
+ "wasm-bindgen",
+ "winapi",
+]
+
+[[package]]
+name = "cipher"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7"
+dependencies = [
+ "generic-array 0.14.4",
+]
+
+[[package]]
+name = "clap"
+version = "3.2.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5"
+dependencies = [
+ "atty",
+ "bitflags",
+ "clap_lex",
+ "indexmap",
+ "once_cell",
+ "strsim 0.10.0",
+ "termcolor",
+ "textwrap",
+]
+
+[[package]]
+name = "clap_complete"
+version = "3.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "678db4c39c013cc68b54d372bce2efc58e30a0337c497c9032fd196802df3bc3"
+dependencies = [
+ "clap",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5"
+dependencies = [
+ "os_str_bytes",
+]
+
+[[package]]
+name = "classic-mceliece-rust"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45ce62f72a15a9071f83c5084bdf0af4e8cbf31431e79eb4a5509a2f7fe7fe5d"
+dependencies = [
+ "rand 0.8.5",
+ "sha3",
+ "zeroize",
+]
+
+[[package]]
+name = "colored"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4ffc801dacf156c5854b9df4f425a626539c3a6ef7893cc0c5084a23f0b6c59"
+dependencies = [
+ "atty",
+ "lazy_static",
+ "winapi",
+]
+
+[[package]]
+name = "combine"
+version = "4.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4"
+dependencies = [
+ "bytes",
+ "memchr",
+]
+
+[[package]]
+name = "const-oid"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4c78c047431fee22c1a7bb92e00ad095a02a983affe4d8a72e2a2c62c1b94f3"
+
+[[package]]
+name = "convert_case"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
+
+[[package]]
+name = "core-foundation"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a89e2ae426ea83155dccf10c0fa6b1463ef6d5fcb44cee0b224a408fa640a62"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea221b5284a47e40033bf9b66f35f984ec0ea2931eb03505246cd27a963f981b"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crypto-bigint"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03c6a1d5fa1de37e071642dfa44ec552ca5b299adb128fab16138e24b548fd21"
+dependencies = [
+ "generic-array 0.14.4",
+ "rand_core 0.6.4",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57952ca27b5e3606ff4dd79b0020231aaf9d6aa76dc05fd30137538c50bd3ce8"
+dependencies = [
+ "generic-array 0.14.4",
+ "typenum",
+]
+
+[[package]]
+name = "ctr"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea"
+dependencies = [
+ "cipher",
+]
+
+[[package]]
+name = "ctrlc"
+version = "3.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a19c6cedffdc8c03a3346d723eb20bd85a13362bb96dc2ac000842c6381ec7bf"
+dependencies = [
+ "nix 0.23.1",
+ "winapi",
+]
+
+[[package]]
+name = "curve25519-dalek"
+version = "3.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61"
+dependencies = [
+ "byteorder",
+ "digest 0.9.0",
+ "rand_core 0.5.1",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "darling"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d706e75d87e35569db781a9b5e2416cff1236a47ed380831f959382ccd5f858"
+dependencies = [
+ "darling_core",
+ "darling_macro",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0c960ae2da4de88a91b2d920c2a7233b400bc33cb28453a2987822d8392519b"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "strsim 0.9.3",
+ "syn",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72"
+dependencies = [
+ "darling_core",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "data-encoding"
+version = "2.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ee2393c4a91429dffb4bedf19f4d6abf27d8a732c8ce4980305d782e5426d57"
+
+[[package]]
+name = "dbus"
+version = "0.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de0a745c25b32caa56b82a3950f5fec7893a960f4c10ca3b02060b0c38d8c2ce"
+dependencies = [
+ "libc",
+ "libdbus-sys",
+ "winapi",
+]
+
+[[package]]
+name = "der"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6919815d73839e7ad218de758883aae3a257ba6759ce7a9992501efbb53d705c"
+dependencies = [
+ "const-oid",
+]
+
+[[package]]
+name = "derive-try-from-primitive"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "302ccf094df1151173bb6f5a2282fcd2f45accd5eae1bdf82dcbfefbc501ad5c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "derive_builder"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2658621297f2cf68762a6f7dc0bb7e1ff2cfd6583daef8ee0fed6f7ec468ec0"
+dependencies = [
+ "darling",
+ "derive_builder_core",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "derive_builder_core"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2791ea3e372c8495c0bc2033991d76b512cd799d07491fbd6890124db9458bef"
+dependencies = [
+ "darling",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "derive_more"
+version = "0.99.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "40eebddd2156ce1bb37b20bbe5151340a31828b1f2d22ba4141f3531710e38df"
+dependencies = [
+ "convert_case",
+ "proc-macro2",
+ "quote",
+ "rustc_version",
+ "syn",
+]
+
+[[package]]
+name = "digest"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5"
+dependencies = [
+ "generic-array 0.12.4",
+]
+
+[[package]]
+name = "digest"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
+dependencies = [
+ "generic-array 0.14.4",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506"
+dependencies = [
+ "block-buffer 0.10.2",
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "dirs-next"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
+dependencies = [
+ "cfg-if",
+ "dirs-sys-next",
+]
+
+[[package]]
+name = "dirs-sys-next"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "duct"
+version = "0.13.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fc6a0a59ed0888e0041cf708e66357b7ae1a82f1c67247e1f93b5e0818f7d8d"
+dependencies = [
+ "libc",
+ "once_cell",
+ "os_pipe",
+ "shared_child",
+]
+
+[[package]]
+name = "ecdsa"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0d69ae62e0ce582d56380743515fefaf1a8c70cec685d9677636d7e30ae9dc9"
+dependencies = [
+ "der",
+ "elliptic-curve",
+ "signature",
+]
+
+[[package]]
+name = "ed25519"
+version = "1.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7"
+dependencies = [
+ "signature",
+]
+
+[[package]]
+name = "either"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
+
+[[package]]
+name = "elliptic-curve"
+version = "0.11.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25b477563c2bfed38a3b7a60964c49e058b2510ad3f12ba3483fd8f62c2306d6"
+dependencies = [
+ "base16ct",
+ "crypto-bigint",
+ "der",
+ "generic-array 0.14.4",
+ "rand_core 0.6.4",
+ "sec1",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "endian-type"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d"
+
+[[package]]
+name = "enum-as-inner"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c9720bba047d567ffc8a3cba48bf19126600e249ab7f128e9233e6376976a116"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "env_logger"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36"
+dependencies = [
+ "log",
+ "regex",
+]
+
+[[package]]
+name = "env_logger"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0"
+dependencies = [
+ "humantime",
+ "is-terminal",
+ "log",
+ "regex",
+ "termcolor",
+]
+
+[[package]]
+name = "err-context"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "449aad22b1364e927ff3bf50f55404efd705c40065fb47f73f28704de707c89e"
+
+[[package]]
+name = "err-derive"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c34a887c8df3ed90498c1c437ce21f211c8e27672921a8ffa293cb8d6d4caa9e"
+dependencies = [
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "rustversion",
+ "syn",
+ "synstructure",
+]
+
+[[package]]
+name = "errno"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "error-chain"
+version = "0.12.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc"
+dependencies = [
+ "backtrace",
+ "version_check",
+]
+
+[[package]]
+name = "fake-simd"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed"
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "fern"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c9a4820f0ccc8a7afd67c39a0f1a0f4b07ca1725164271a64939d7aeb9af065"
+dependencies = [
+ "colored",
+ "log",
+]
+
+[[package]]
+name = "fixedbitset"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191"
+dependencies = [
+ "matches",
+ "percent-encoding",
+]
+
+[[package]]
+name = "futures"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38390104763dc37a5145a53c29c63c1290b5d316d6086ec32c293f6736051bb0"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52ba265a92256105f45b719605a571ffe2d1f0fea3807304b522c1d778f79eed"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7acc85df6714c176ab5edf386123fafe217be88c0840ec11f199441134a074e2"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00f5fb52a06bdcadeb54e8d3671f8888a39697dcb0b81b23b55174030427f4eb"
+
+[[package]]
+name = "futures-macro"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bdfb8ce053d86b91919aad980c220b1fb8401a9394410e1c289ed7e66b61835d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39c15cf1a4aa79df40f1bb462fb39676d0ad9e366c2a33b590d7c66f4f81fcf9"
+
+[[package]]
+name = "futures-task"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ffb393ac5d9a6eaa9d3fdf37ae2776656b706e200c8e16b1bdb227f5198e6ea"
+
+[[package]]
+name = "futures-util"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "197676987abd2f9cadff84926f410af1c183608d36641465df73ae8211dc65d6"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.12.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd"
+dependencies = [
+ "typenum",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.9.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.10.2+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "ghash"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1583cc1656d7839fd3732b80cf4f38850336cdb9b8ded1cd399ca62958de3c99"
+dependencies = [
+ "opaque-debug 0.3.0",
+ "polyval",
+]
+
+[[package]]
+name = "gimli"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0a01e0497841a3b2db4f8afa483cce65f7e96a3498bd6c541734792aeac8fe7"
+
+[[package]]
+name = "h2"
+version = "0.3.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ca32592cf21ac7ccab1825cd87f6c9b3d9022c44d086172ed0966bec8af30be"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
+
+[[package]]
+name = "heck"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
+name = "hkdf"
+version = "0.12.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "158bc31e00a68e380286904cc598715f861f2b0ccf7aa6fe20c6d0c49ca5d0f6"
+dependencies = [
+ "hmac",
+]
+
+[[package]]
+name = "hmac"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ddca131f3e7f2ce2df364b57949a9d47915cfbd35e46cfee355ccebbf794d6a2"
+dependencies = [
+ "digest 0.10.3",
+]
+
+[[package]]
+name = "hostname"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867"
+dependencies = [
+ "libc",
+ "match_cfg",
+ "winapi",
+]
+
+[[package]]
+name = "htmlize"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ebaa6fa16c015015edec1041cf720bd43e3fef17ca07d15ae22dca96f7da2ec"
+dependencies = [
+ "memchr",
+ "paste",
+ "phf",
+ "phf_codegen",
+ "serde_json",
+]
+
+[[package]]
+name = "http"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa 1.0.1",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "http-range-header"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29"
+
+[[package]]
+name = "httparse"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acd94fdbe1d4ff688b67b04eee2e17bd50995534a61539e45adfefb45e5e5503"
+
+[[package]]
+name = "httpdate"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6456b8a6c8f33fee7d958fcd1b60d55b11940a79e63ae87013e6d22e26034440"
+
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[package]]
+name = "hyper"
+version = "0.14.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7ec3e62bdc98a2f0393a5048e4c30ef659440ea6e0e572965103e72bd836f55"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa 0.4.8",
+ "pin-project-lite",
+ "socket2",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-timeout"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1"
+dependencies = [
+ "hyper",
+ "pin-project-lite",
+ "tokio",
+ "tokio-io-timeout",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.42"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9512e544c25736b82aebbd2bf739a47c8a1c935dfcc3a6adcde10e35cd3cd468"
+dependencies = [
+ "android_system_properties",
+ "core-foundation",
+ "js-sys",
+ "wasm-bindgen",
+ "winapi",
+]
+
+[[package]]
+name = "ident_case"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+
+[[package]]
+name = "idna"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8"
+dependencies = [
+ "matches",
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc633605454125dec4b66843673f01c7df2b89479b32e0ed634e43a91cff62a5"
+dependencies = [
+ "autocfg",
+ "hashbrown",
+]
+
+[[package]]
+name = "inotify"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abf888f9575c290197b2c948dc9e9ff10bd1a39ad1ea8585f734585fa6b9d3f9"
+dependencies = [
+ "bitflags",
+ "futures-core",
+ "inotify-sys",
+ "libc",
+ "tokio",
+]
+
+[[package]]
+name = "inotify-sys"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "716d3d89f35ac6a34fd0eed635395f4c3b76fa889338a4632e5231a8684216bd"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "internet-checksum"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc6d6206008e25125b1f97fbe5d309eb7b85141cf9199d52dbd3729a1584dd16"
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7d6c6f8c91b4b9ed43484ad1a938e393caf35960fce7f82a040497207bd8e9e"
+dependencies = [
+ "libc",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "ioctl-sys"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c429fffa658f288669529fc26565f728489a2e39bc7b24a428aaaf51355182e"
+
+[[package]]
+name = "ipconfig"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "723519edce41262b05d4143ceb95050e4c614f483e78e9fd9e39a8275a84ad98"
+dependencies = [
+ "socket2",
+ "widestring 0.5.1",
+ "winapi",
+ "winreg",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68f2d64f2edebec4ce84ad108148e67e1064789bee435edc5b60ad398714a3a9"
+
+[[package]]
+name = "ipnetwork"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8eca9f51da27bc908ef3dd85c21e1bbba794edaf94d7841e37356275b82d31e"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "iprange"
+version = "0.6.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37209be0ad225457e63814401415e748e2453a5297f9b637338f5fb8afa4ec00"
+dependencies = [
+ "ipnet",
+]
+
+[[package]]
+name = "is-terminal"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28dfb6c8100ccc63462345b67d1bbc3679177c75ee4bf59bf29c8b1d110b8189"
+dependencies = [
+ "hermit-abi 0.2.6",
+ "io-lifetimes",
+ "rustix",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "itertools"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69ddb889f9d0d08a67338271fa9b62996bc788c7796a5c18cf057420aaed5eaf"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
+
+[[package]]
+name = "itoa"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35"
+
+[[package]]
+name = "jni"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c6df18c2e3db7e453d3c6ac5b3e9d5182664d28788126d39b91f2d1e22b017ec"
+dependencies = [
+ "cesu8",
+ "combine",
+ "jni-sys",
+ "log",
+ "thiserror",
+ "walkdir",
+]
+
+[[package]]
+name = "jni-sys"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
+
+[[package]]
+name = "jnix"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aecfa741840d59de75e6e9e2985ee44b6794cbc0b2074899089be6bf7ffa0afc"
+dependencies = [
+ "jni",
+ "jnix-macros",
+ "once_cell",
+ "parking_lot",
+]
+
+[[package]]
+name = "jnix-macros"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "002f4dfe6d97ae88c33f3489c0d31ffc6f81d9a492de98ff113b127d73bafff8"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "js-sys"
+version = "0.3.59"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "258451ab10b34f8af53416d1fdab72c22e805f0c92a1136d59470ec0b11138b2"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "json5"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96b0db21af676c1ce64250b5f40f3ce2cf27e4e47cb91ed91eb6fe9350b430c1"
+dependencies = [
+ "pest",
+ "pest_derive",
+ "serde",
+]
+
+[[package]]
+name = "keccak"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9b7d56ba4a8344d6be9729995e6b06f928af29998cdf79fe390cbf6b1fee838"
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libc"
+version = "0.2.139"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79"
+
+[[package]]
+name = "libdbus-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c185b5b7ad900923ef3a8ff594083d4d9b5aea80bb4f32b8342363138c0d456b"
+dependencies = [
+ "pkg-config",
+]
+
+[[package]]
+name = "linked-hash-map"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4"
+
+[[package]]
+name = "lock_api"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88943dd7ef4a2e5a4bfa2753aaab3013e34ce2533d1996fb18ef591e315e2b3b"
+dependencies = [
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "log-panics"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae0136257df209261daa18d6c16394757c63e032e27aafd8b07788b051082bef"
+dependencies = [
+ "log",
+]
+
+[[package]]
+name = "lru-cache"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c"
+dependencies = [
+ "linked-hash-map",
+]
+
+[[package]]
+name = "lru_time_cache"
+version = "0.11.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9106e1d747ffd48e6be5bb2d97fa706ed25b144fbee4d5c02eae110cd8d6badd"
+
+[[package]]
+name = "malloc_buf"
+version = "0.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "maplit"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d"
+
+[[package]]
+name = "match_cfg"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4"
+
+[[package]]
+name = "matches"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f"
+
+[[package]]
+name = "matchit"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73cbba799671b762df5a175adf59ce145165747bb891505c43d09aefbbf38beb"
+
+[[package]]
+name = "md-5"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6a38fc55c8bbc10058782919516f88826e70320db6d206aebc49611d24216ae"
+dependencies = [
+ "digest 0.10.3",
+ "md5-asm",
+]
+
+[[package]]
+name = "md5-asm"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73b9a6f25ec11ea27e22d7fc8beafda909da44ece95f63e94f1eeb23d19bb5c7"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memoffset"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59accc507f1338036a0477ef61afdae33cde60840f4dfe481319ce3ad116ddf9"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "mime"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b"
+dependencies = [
+ "adler",
+ "autocfg",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9"
+dependencies = [
+ "libc",
+ "log",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "mnl"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d1a5469630da93e1813bb257964c0ccee3b26b6879dd858039ddec35cc8681ed"
+dependencies = [
+ "libc",
+ "log",
+ "mnl-sys",
+]
+
+[[package]]
+name = "mnl-sys"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9750685b201e1ecfaaf7aa5d0387829170fa565989cc481b49080aa155f70457"
+dependencies = [
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "mullvad-api"
+version = "0.0.0"
+dependencies = [
+ "chrono",
+ "err-derive",
+ "futures",
+ "http",
+ "hyper",
+ "ipnetwork",
+ "log",
+ "mullvad-types",
+ "once_cell",
+ "regex",
+ "rustls-pemfile",
+ "serde",
+ "serde_json",
+ "shadowsocks",
+ "talpid-time",
+ "talpid-types",
+ "tokio",
+ "tokio-rustls",
+ "uuid",
+]
+
+[[package]]
+name = "mullvad-cli"
+version = "0.0.0"
+dependencies = [
+ "base64",
+ "chrono",
+ "clap",
+ "clap_complete",
+ "env_logger 0.10.0",
+ "err-derive",
+ "futures",
+ "itertools",
+ "mullvad-management-interface",
+ "mullvad-paths",
+ "mullvad-types",
+ "mullvad-version",
+ "natord",
+ "serde",
+ "talpid-types",
+ "tokio",
+ "windows-sys 0.45.0",
+ "winres",
+]
+
+[[package]]
+name = "mullvad-daemon"
+version = "0.0.0"
+dependencies = [
+ "android_logger",
+ "cfg-if",
+ "chrono",
+ "clap",
+ "ctrlc",
+ "dirs-next",
+ "duct",
+ "err-derive",
+ "fern",
+ "futures",
+ "ipnetwork",
+ "lazy_static",
+ "libc",
+ "log",
+ "log-panics",
+ "mullvad-api",
+ "mullvad-management-interface",
+ "mullvad-paths",
+ "mullvad-relay-selector",
+ "mullvad-types",
+ "mullvad-version",
+ "nix 0.23.1",
+ "objc",
+ "parking_lot",
+ "rand 0.8.5",
+ "regex",
+ "serde",
+ "serde_json",
+ "simple-signal",
+ "talpid-core",
+ "talpid-dbus",
+ "talpid-platform-metadata",
+ "talpid-time",
+ "talpid-types",
+ "tokio",
+ "tokio-stream",
+ "uuid",
+ "winapi",
+ "windows-service",
+ "windows-sys 0.45.0",
+ "winres",
+]
+
+[[package]]
+name = "mullvad-exclude"
+version = "0.0.0"
+dependencies = [
+ "err-derive",
+ "nix 0.23.1",
+ "talpid-types",
+]
+
+[[package]]
+name = "mullvad-jni"
+version = "0.0.0"
+dependencies = [
+ "err-derive",
+ "futures",
+ "ipnetwork",
+ "jnix",
+ "lazy_static",
+ "log",
+ "log-panics",
+ "mullvad-api",
+ "mullvad-daemon",
+ "mullvad-paths",
+ "mullvad-problem-report",
+ "mullvad-types",
+ "nix 0.23.1",
+ "rand 0.8.5",
+ "talpid-core",
+ "talpid-tunnel",
+ "talpid-types",
+ "tokio",
+]
+
+[[package]]
+name = "mullvad-management-interface"
+version = "0.0.0"
+dependencies = [
+ "chrono",
+ "err-derive",
+ "futures",
+ "lazy_static",
+ "log",
+ "mullvad-paths",
+ "mullvad-types",
+ "nix 0.23.1",
+ "parity-tokio-ipc",
+ "prost",
+ "prost-types",
+ "talpid-types",
+ "tokio",
+ "tonic",
+ "tonic-build",
+ "tower",
+]
+
+[[package]]
+name = "mullvad-nsis"
+version = "0.0.0"
+dependencies = [
+ "cbindgen",
+ "mullvad-paths",
+]
+
+[[package]]
+name = "mullvad-paths"
+version = "0.0.0"
+dependencies = [
+ "err-derive",
+ "log",
+ "once_cell",
+ "widestring 1.0.2",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "mullvad-problem-report"
+version = "0.0.0"
+dependencies = [
+ "clap",
+ "dirs-next",
+ "duct",
+ "env_logger 0.10.0",
+ "err-derive",
+ "lazy_static",
+ "log",
+ "mullvad-api",
+ "mullvad-paths",
+ "mullvad-version",
+ "regex",
+ "talpid-platform-metadata",
+ "talpid-types",
+ "tokio",
+ "uuid",
+ "windows-sys 0.45.0",
+ "winres",
+]
+
+[[package]]
+name = "mullvad-relay-selector"
+version = "0.0.0"
+dependencies = [
+ "chrono",
+ "err-derive",
+ "futures",
+ "ipnetwork",
+ "lazy_static",
+ "log",
+ "mullvad-api",
+ "mullvad-types",
+ "parking_lot",
+ "rand 0.8.5",
+ "serde",
+ "serde_json",
+ "talpid-core",
+ "talpid-types",
+ "tokio",
+ "tokio-stream",
+]
+
+[[package]]
+name = "mullvad-setup"
+version = "0.0.0"
+dependencies = [
+ "clap",
+ "env_logger 0.10.0",
+ "err-derive",
+ "lazy_static",
+ "mullvad-api",
+ "mullvad-daemon",
+ "mullvad-management-interface",
+ "mullvad-paths",
+ "mullvad-types",
+ "mullvad-version",
+ "talpid-core",
+ "talpid-types",
+ "tokio",
+]
+
+[[package]]
+name = "mullvad-types"
+version = "0.0.0"
+dependencies = [
+ "chrono",
+ "err-derive",
+ "ipnetwork",
+ "jnix",
+ "lazy_static",
+ "log",
+ "rand 0.8.5",
+ "regex",
+ "serde",
+ "talpid-types",
+]
+
+[[package]]
+name = "mullvad-version"
+version = "0.0.0"
+dependencies = [
+ "regex",
+]
+
+[[package]]
+name = "multimap"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a"
+
+[[package]]
+name = "natord"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "308d96db8debc727c3fd9744aac51751243420e46edf401010908da7f8d5e57c"
+
+[[package]]
+name = "netlink-packet-core"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "345b8ab5bd4e71a2986663e88c56856699d060e78e152e6e9d7966fcd5491297"
+dependencies = [
+ "anyhow",
+ "byteorder",
+ "libc",
+ "netlink-packet-utils",
+]
+
+[[package]]
+name = "netlink-packet-route"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f5dee5ed749373c298237fe694eb0a51887f4cc1a27370c8464bac4382348f1a"
+dependencies = [
+ "anyhow",
+ "bitflags",
+ "byteorder",
+ "libc",
+ "netlink-packet-core",
+ "netlink-packet-utils",
+]
+
+[[package]]
+name = "netlink-packet-utils"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25af9cf0dc55498b7bd94a1508af7a78706aa0ab715a73c5169273e03c84845e"
+dependencies = [
+ "anyhow",
+ "byteorder",
+ "paste",
+ "thiserror",
+]
+
+[[package]]
+name = "netlink-proto"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "65b4b14489ab424703c092062176d52ba55485a89c076b4f9db05092b7223aa6"
+dependencies = [
+ "bytes",
+ "futures",
+ "log",
+ "netlink-packet-core",
+ "netlink-sys",
+ "thiserror",
+ "tokio",
+]
+
+[[package]]
+name = "netlink-sys"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92b654097027250401127914afb37cb1f311df6610a9891ff07a757e94199027"
+dependencies = [
+ "bytes",
+ "futures",
+ "libc",
+ "log",
+ "tokio",
+]
+
+[[package]]
+name = "nftnl"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e9201688bd0bc571dfa4c21ce0a525480c8b782776cf88e12571fa89108dd920"
+dependencies = [
+ "bitflags",
+ "err-derive",
+ "log",
+ "nftnl-sys",
+]
+
+[[package]]
+name = "nftnl-sys"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26b5c587b6a5e76a3a5d51e0a757ae66dbff38c277563485807ae979ce361b56"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "nibble_vec"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a5d83df9f36fe23f0c3648c6bbb8b0298bb5f1939c8f2704431371f4b84d43"
+dependencies = [
+ "smallvec",
+]
+
+[[package]]
+name = "nix"
+version = "0.23.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f866317acbd3a240710c63f065ffb1e4fd466259045ccb504130b7f668f35c6"
+dependencies = [
+ "bitflags",
+ "cc",
+ "cfg-if",
+ "libc",
+ "memoffset",
+]
+
+[[package]]
+name = "nix"
+version = "0.24.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "195cdbc1741b8134346d515b3a56a1c94b0912758009cfd53f99ea0f57b065fc"
+dependencies = [
+ "bitflags",
+ "cfg-if",
+ "libc",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+]
+
+[[package]]
+name = "objc"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
+dependencies = [
+ "malloc_buf",
+]
+
+[[package]]
+name = "object"
+version = "0.26.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39f37e50073ccad23b6d09bcb5b263f4e76d3bb6038e4a3c08e52162ffa8abc2"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1"
+
+[[package]]
+name = "opaque-debug"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c"
+
+[[package]]
+name = "opaque-debug"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
+
+[[package]]
+name = "openvpn-plugin"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "693396ea7e46ef8dfd60a644b87c976f99b59dedf27dc218d604ee2d6a2fdf90"
+dependencies = [
+ "derive-try-from-primitive",
+ "log",
+ "serde",
+]
+
+[[package]]
+name = "os_pipe"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb233f06c2307e1f5ce2ecad9f8121cffbbee2c95428f44ea85222e460d0d213"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "os_str_bytes"
+version = "6.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e22443d1643a904602595ba1cd8f7d896afe56d26712531c5ff73a15b2fbf64"
+
+[[package]]
+name = "p256"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19736d80675fbe9fe33426268150b951a3fb8f5cfca2a23a17c85ef3adb24e3b"
+dependencies = [
+ "ecdsa",
+ "elliptic-curve",
+ "sec1",
+]
+
+[[package]]
+name = "p384"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "755d8266e41f57bd8562ed9b6e93cdcf73ead050e1e8c3a27ea3871b6643a20c"
+dependencies = [
+ "ecdsa",
+ "elliptic-curve",
+ "sec1",
+]
+
+[[package]]
+name = "parity-tokio-ipc"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9981e32fb75e004cc148f5fb70342f393830e0a4aa62e3cc93b50976218d42b6"
+dependencies = [
+ "futures",
+ "libc",
+ "log",
+ "rand 0.7.3",
+ "tokio",
+ "winapi",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "paste"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79"
+
+[[package]]
+name = "percent-encoding"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
+
+[[package]]
+name = "pest"
+version = "2.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53"
+dependencies = [
+ "ucd-trie",
+]
+
+[[package]]
+name = "pest_derive"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "833d1ae558dc601e9a60366421196a8d94bc0ac980476d0b67e1d0988d72b2d0"
+dependencies = [
+ "pest",
+ "pest_generator",
+]
+
+[[package]]
+name = "pest_generator"
+version = "2.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "99b8db626e31e5b81787b9783425769681b347011cc59471e33ea46d2ea0cf55"
+dependencies = [
+ "pest",
+ "pest_meta",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "pest_meta"
+version = "2.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54be6e404f5317079812fc8f9f5279de376d8856929e21c184ecf6bbd692a11d"
+dependencies = [
+ "maplit",
+ "pest",
+ "sha-1",
+]
+
+[[package]]
+name = "petgraph"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6d5014253a1331579ce62aa67443b4a658c5e7dd03d4bc6d302b94474888143"
+dependencies = [
+ "fixedbitset",
+ "indexmap",
+]
+
+[[package]]
+name = "pfctl"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52063325d6b0de17051e72275d44f96c5b73a75029fcdd7e05e54a62ff216437"
+dependencies = [
+ "derive_builder",
+ "errno",
+ "error-chain",
+ "ioctl-sys",
+ "ipnetwork",
+ "libc",
+]
+
+[[package]]
+name = "phf"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "928c6535de93548188ef63bb7c4036bd415cd8f36ad25af44b9789b2ee72a48c"
+dependencies = [
+ "phf_shared",
+]
+
+[[package]]
+name = "phf_codegen"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a56ac890c5e3ca598bbdeaa99964edb5b0258a583a9eb6ef4e89fc85d9224770"
+dependencies = [
+ "phf_generator",
+ "phf_shared",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1181c94580fa345f50f19d738aaa39c0ed30a600d95cb2d3e23f94266f14fbf"
+dependencies = [
+ "phf_shared",
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1fb5f6f826b772a8d4c0394209441e7d37cbbb967ae9c7e0e8134365c9ee676"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "pin-project"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78203e83c48cffbe01e4a2d35d566ca4de445d79a85372fc64e378bfc812a260"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "710faf75e1b33345361201d36d04e98ac1ed8909151a017ed384700836104c74"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c9b1041b4387893b91ee6746cddfc28516aff326a3519fb2adf820932c5e6cb"
+
+[[package]]
+name = "poly1305"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "048aeb476be11a4b6ca432ca569e375810de9294ae78f4774e78ea98a9246ede"
+dependencies = [
+ "cpufeatures",
+ "opaque-debug 0.3.0",
+ "universal-hash",
+]
+
+[[package]]
+name = "polyval"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "opaque-debug 0.3.0",
+ "universal-hash",
+]
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857"
+
+[[package]]
+name = "pqc_kyber"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32b79004a05337e54e8ffc0ec7470e40fa26eca6fe182968ec2b803247f2283c"
+dependencies = [
+ "rand_core 0.6.4",
+ "zeroize",
+]
+
+[[package]]
+name = "prettyplease"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a49e86d2c26a24059894a3afa13fd17d063419b05dfb83f06d9c3566060c3f5a"
+dependencies = [
+ "proc-macro2",
+ "syn",
+]
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "prost"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "399c3c31cdec40583bb68f0b18403400d01ec4289c383aa047560439952c4dd7"
+dependencies = [
+ "bytes",
+ "prost-derive",
+]
+
+[[package]]
+name = "prost-build"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f835c582e6bd972ba8347313300219fed5bfa52caf175298d860b61ff6069bb"
+dependencies = [
+ "bytes",
+ "heck",
+ "itertools",
+ "lazy_static",
+ "log",
+ "multimap",
+ "petgraph",
+ "prost",
+ "prost-types",
+ "regex",
+ "tempfile",
+ "which",
+]
+
+[[package]]
+name = "prost-derive"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7345d5f0e08c0536d7ac7229952590239e77abf0a0100a1b1d890add6ea96364"
+dependencies = [
+ "anyhow",
+ "itertools",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "prost-types"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dfaa718ad76a44b3415e6c4d53b17c8f99160dcb3a99b10470fce8ad43f6e3e"
+dependencies = [
+ "bytes",
+ "prost",
+]
+
+[[package]]
+name = "quick-error"
+version = "1.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
+
+[[package]]
+name = "quick-xml"
+version = "0.27.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffc053f057dd768a56f62cd7e434c42c831d296968997e9ac1f76ea7c2d14c41"
+dependencies = [
+ "memchr",
+ "serde",
+]
+
+[[package]]
+name = "quickcheck"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "588f6378e4dd99458b60ec275b4477add41ce4fa9f64dcba6f15adccb19b50d6"
+dependencies = [
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "quickcheck_macros"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b22a693222d716a9587786f37ac3f6b4faedb5b80c23914e7303ff5a1d8016e9"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38bc8cc6a5f2e3655e0899c1b848643b2562f853f114bfec7be120678e3ace05"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "radix_trie"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c069c179fcdc6a2fe24d8d18305cf085fdbd4f922c041943e203685d6a1c58fd"
+dependencies = [
+ "endian-type",
+ "nibble_vec",
+]
+
+[[package]]
+name = "rand"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
+dependencies = [
+ "getrandom 0.1.16",
+ "libc",
+ "rand_chacha 0.2.2",
+ "rand_core 0.5.1",
+ "rand_hc",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha 0.3.1",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
+dependencies = [
+ "getrandom 0.1.16",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom 0.2.3",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
+dependencies = [
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64"
+dependencies = [
+ "getrandom 0.2.3",
+ "redox_syscall",
+]
+
+[[package]]
+name = "regex"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244"
+
+[[package]]
+name = "resolv-conf"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00"
+dependencies = [
+ "hostname",
+ "quick-error",
+]
+
+[[package]]
+name = "ring"
+version = "0.16.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
+dependencies = [
+ "cc",
+ "libc",
+ "once_cell",
+ "spin 0.5.2",
+ "untrusted",
+ "web-sys",
+ "winapi",
+]
+
+[[package]]
+name = "ring-compat"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6242f589b69a0555addb0bb759f81e5cba40485d38b36f780ab3a588b2bdf064"
+dependencies = [
+ "aead",
+ "digest 0.9.0",
+ "ecdsa",
+ "ed25519",
+ "generic-array 0.14.4",
+ "opaque-debug 0.3.0",
+ "p256",
+ "p384",
+ "ring",
+]
+
+[[package]]
+name = "rs-release"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4a874cf4a0b9bc283edaa65d81d62368b84b1a8e56196e4885ca4701fd49972"
+
+[[package]]
+name = "rtnetlink"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46f1cfa18f8cebe685373a2697915d7e0db3b4554918bba118385e0f71f258a7"
+dependencies = [
+ "futures",
+ "log",
+ "netlink-packet-route",
+ "netlink-proto",
+ "nix 0.24.2",
+ "thiserror",
+ "tokio",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342"
+
+[[package]]
+name = "rustc_version"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "rustix"
+version = "0.36.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4fdebc4b395b7fbb9ab11e462e20ed9051e7b16e42d24042c776eca0ac81b03"
+dependencies = [
+ "bitflags",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "rustls"
+version = "0.20.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f"
+dependencies = [
+ "log",
+ "ring",
+ "sct",
+ "webpki",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5eebeaeb360c87bfb72e84abdb3447159c0eaececf1bef2aecd65a8be949d1c9"
+dependencies = [
+ "base64",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61b3909d758bb75c79f23d4736fac9433868679d3ad2ea7a61e3c25cfda9a088"
+
+[[package]]
+name = "ryu"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e"
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "sct"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "sec1"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08da66b8b0965a5555b6bd6639e68ccba85e1e2506f5fbb089e93f8a04e1a2d1"
+dependencies = [
+ "der",
+ "generic-array 0.14.4",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "semver"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6"
+dependencies = [
+ "semver-parser",
+]
+
+[[package]]
+name = "semver-parser"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7"
+dependencies = [
+ "pest",
+]
+
+[[package]]
+name = "sendfd"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9fa25200c6de90f8da82d63f8806bd2ea1261018620dd4881626d6b146e13bd7"
+dependencies = [
+ "libc",
+ "tokio",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.130"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f12d06de37cf59146fbdecab66aa99f9fe4f78722e3607577a5375d66bd0c913"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.130"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d7bc1a1ab1961464eae040d96713baa5a724a8152c1222492465b54322ec508b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.68"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f690853975602e1bfe1ccbf50504d67174e3bcf340f23b5ea9992e0587a52d8"
+dependencies = [
+ "itoa 0.4.8",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa 1.0.1",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "sha-1"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df"
+dependencies = [
+ "block-buffer 0.7.3",
+ "digest 0.8.1",
+ "fake-simd",
+ "opaque-debug 0.2.3",
+]
+
+[[package]]
+name = "sha1"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04cc229fb94bcb689ffc39bd4ded842f6ff76885efede7c6d1ffb62582878bea"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest 0.10.3",
+ "sha1-asm",
+]
+
+[[package]]
+name = "sha1-asm"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "563d4f7100bc3fce234e5f37bbf63dc2752558964505ba6ac3f7204bdc59eaac"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "sha3"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31f935e31cf406e8c0e96c2815a5516181b7004ae8c5f296293221e9b1e356bd"
+dependencies = [
+ "digest 0.10.3",
+ "keccak",
+]
+
+[[package]]
+name = "shadowsocks"
+version = "1.14.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f16fc99441d1a1b91b5f7b5093773d631ad506761a973e0a632f1836d1b05939"
+dependencies = [
+ "async-trait",
+ "base64",
+ "byte_string",
+ "bytes",
+ "cfg-if",
+ "futures",
+ "libc",
+ "log",
+ "nix 0.23.1",
+ "once_cell",
+ "pin-project",
+ "sendfd",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "shadowsocks-crypto",
+ "socket2",
+ "thiserror",
+ "tokio",
+ "tokio-tfo",
+ "url",
+ "winapi",
+]
+
+[[package]]
+name = "shadowsocks-crypto"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd381517e3eb8fec5090696debfdea972d8afe6fc926c26c7bfd5fee9053efbd"
+dependencies = [
+ "aes",
+ "aes-gcm",
+ "cfg-if",
+ "chacha20",
+ "chacha20poly1305",
+ "hkdf",
+ "md-5",
+ "rand 0.8.5",
+ "ring-compat",
+ "sha1",
+]
+
+[[package]]
+name = "shadowsocks-service"
+version = "1.14.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08c3eb3ce85fb4c1f7451d2a5704503d3146ed7d626a17a63194092f07be45a4"
+dependencies = [
+ "arc-swap",
+ "async-trait",
+ "byte_string",
+ "byteorder",
+ "bytes",
+ "cfg-if",
+ "futures",
+ "idna",
+ "ipnet",
+ "iprange",
+ "json5",
+ "libc",
+ "log",
+ "lru_time_cache",
+ "nix 0.23.1",
+ "once_cell",
+ "pin-project",
+ "regex",
+ "serde",
+ "shadowsocks",
+ "socket2",
+ "spin 0.9.2",
+ "thiserror",
+ "tokio",
+ "winapi",
+]
+
+[[package]]
+name = "shared_child"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6be9f7d5565b1483af3e72975e2dee33879b3b86bd48c0929fccf6585d79e65a"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "shell-escape"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45bb67a18fa91266cc7807181f62f9178a6873bfad7dc788c42e6430db40184f"
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "signature"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02658e48d89f2bec991f9a78e69cfa4c316f8d6a6c4ec12fae1aeb263d486788"
+dependencies = [
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "simple-signal"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53f7da44adcc42667d57483bd93f81295f27d66897804b757573b61b6f13288b"
+dependencies = [
+ "lazy_static",
+ "libc",
+]
+
+[[package]]
+name = "siphasher"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "533494a8f9b724d33625ab53c6c4800f7cc445895924a8ef649222dcb76e938b"
+
+[[package]]
+name = "slab"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c307a32c1c5c437f38c7fd45d753050587732ba8628319fbdf12a7e289ccc590"
+
+[[package]]
+name = "smallvec"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ecab6c735a6bb4139c0caafd0cc3635748bbb3acf4550e8138122099251f309"
+
+[[package]]
+name = "socket2"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[package]]
+name = "spin"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "511254be0c5bcf062b019a6c89c01a664aa359ded62f78aa72c6fc137c0590e5"
+dependencies = [
+ "lock_api",
+]
+
+[[package]]
+name = "strsim"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "subslice"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0a8e4809a3bb02de01f1f7faf1ba01a83af9e8eabcd4d31dd6e413d14d56aae"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "subtle"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
+
+[[package]]
+name = "syn"
+version = "1.0.100"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52205623b1b0f064a4e71182c3b18ae902267282930c6d5462c91b859668426e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "sync_wrapper"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "20518fe4a4c9acf048008599e464deb21beeae3d3578418951a189c235a7a9a8"
+
+[[package]]
+name = "synstructure"
+version = "0.12.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "unicode-xid",
+]
+
+[[package]]
+name = "system-configuration"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d75182f12f490e953596550b65ee31bda7c8e043d9386174b353bda50838c3fd"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "system-configuration-sys",
+]
+
+[[package]]
+name = "system-configuration-sys"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "talpid-core"
+version = "0.0.0"
+dependencies = [
+ "async-trait",
+ "bitflags",
+ "byteorder",
+ "cfg-if",
+ "chrono",
+ "duct",
+ "err-derive",
+ "futures",
+ "hex",
+ "inotify",
+ "internet-checksum",
+ "ipnetwork",
+ "jnix",
+ "lazy_static",
+ "libc",
+ "log",
+ "memoffset",
+ "mnl",
+ "netlink-packet-route",
+ "netlink-sys",
+ "nftnl",
+ "nix 0.23.1",
+ "once_cell",
+ "os_pipe",
+ "parity-tokio-ipc",
+ "parking_lot",
+ "pfctl",
+ "prost",
+ "quickcheck",
+ "quickcheck_macros",
+ "rand 0.8.5",
+ "regex",
+ "resolv-conf",
+ "rtnetlink",
+ "shadowsocks-service",
+ "shell-escape",
+ "socket2",
+ "subslice",
+ "system-configuration",
+ "talpid-dbus",
+ "talpid-openvpn",
+ "talpid-routing",
+ "talpid-time",
+ "talpid-tunnel",
+ "talpid-tunnel-config-client",
+ "talpid-types",
+ "talpid-windows-net",
+ "talpid-wireguard",
+ "tempfile",
+ "tokio",
+ "tonic",
+ "tonic-build",
+ "triggered",
+ "trust-dns-server",
+ "tun",
+ "uuid",
+ "which",
+ "widestring 1.0.2",
+ "windows-service",
+ "windows-sys 0.45.0",
+ "winreg",
+ "zeroize",
+]
+
+[[package]]
+name = "talpid-dbus"
+version = "0.0.0"
+dependencies = [
+ "dbus",
+ "err-derive",
+ "lazy_static",
+ "libc",
+ "log",
+ "tokio",
+]
+
+[[package]]
+name = "talpid-openvpn"
+version = "0.0.0"
+dependencies = [
+ "async-trait",
+ "bitflags",
+ "byteorder",
+ "cfg-if",
+ "duct",
+ "err-derive",
+ "futures",
+ "is-terminal",
+ "lazy_static",
+ "log",
+ "os_pipe",
+ "parity-tokio-ipc",
+ "parking_lot",
+ "prost",
+ "shadowsocks-service",
+ "shell-escape",
+ "socket2",
+ "talpid-routing",
+ "talpid-tunnel",
+ "talpid-types",
+ "talpid-windows-net",
+ "tokio",
+ "tonic",
+ "tonic-build",
+ "triggered",
+ "uuid",
+ "which",
+ "widestring 1.0.2",
+ "windows-sys 0.45.0",
+ "winreg",
+]
+
+[[package]]
+name = "talpid-openvpn-plugin"
+version = "0.0.0"
+dependencies = [
+ "env_logger 0.10.0",
+ "err-derive",
+ "log",
+ "mullvad-version",
+ "openvpn-plugin",
+ "parity-tokio-ipc",
+ "prost",
+ "talpid-types",
+ "tokio",
+ "tonic",
+ "tonic-build",
+ "tower",
+ "windows-sys 0.45.0",
+ "winres",
+]
+
+[[package]]
+name = "talpid-platform-metadata"
+version = "0.0.0"
+dependencies = [
+ "rs-release",
+ "talpid-dbus",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "talpid-routing"
+version = "0.0.0"
+dependencies = [
+ "err-derive",
+ "futures",
+ "ipnetwork",
+ "lazy_static",
+ "libc",
+ "log",
+ "netlink-packet-route",
+ "netlink-sys",
+ "rtnetlink",
+ "socket2",
+ "talpid-types",
+ "talpid-windows-net",
+ "tokio",
+ "tokio-stream",
+ "widestring 1.0.2",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "talpid-time"
+version = "0.0.0"
+dependencies = [
+ "libc",
+ "tokio",
+]
+
+[[package]]
+name = "talpid-tunnel"
+version = "0.0.0"
+dependencies = [
+ "cfg-if",
+ "duct",
+ "err-derive",
+ "futures",
+ "ipnetwork",
+ "jnix",
+ "log",
+ "nix 0.23.1",
+ "talpid-routing",
+ "talpid-types",
+ "talpid-windows-net",
+ "tokio",
+ "tun",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "talpid-tunnel-config-client"
+version = "0.0.0"
+dependencies = [
+ "classic-mceliece-rust",
+ "log",
+ "pqc_kyber",
+ "prost",
+ "rand 0.8.5",
+ "talpid-types",
+ "tokio",
+ "tonic",
+ "tonic-build",
+ "tower",
+ "zeroize",
+]
+
+[[package]]
+name = "talpid-types"
+version = "0.0.0"
+dependencies = [
+ "base64",
+ "err-derive",
+ "ipnetwork",
+ "jnix",
+ "rand 0.8.5",
+ "serde",
+ "x25519-dalek",
+ "zeroize",
+]
+
+[[package]]
+name = "talpid-windows-net"
+version = "0.0.0"
+dependencies = [
+ "err-derive",
+ "futures",
+ "libc",
+ "socket2",
+ "winapi",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "talpid-wireguard"
+version = "0.0.0"
+dependencies = [
+ "bitflags",
+ "byteorder",
+ "chrono",
+ "duct",
+ "err-derive",
+ "futures",
+ "hex",
+ "internet-checksum",
+ "ipnetwork",
+ "lazy_static",
+ "libc",
+ "log",
+ "netlink-packet-core",
+ "netlink-packet-route",
+ "netlink-packet-utils",
+ "netlink-proto",
+ "nix 0.23.1",
+ "parking_lot",
+ "rand 0.8.5",
+ "rtnetlink",
+ "socket2",
+ "talpid-dbus",
+ "talpid-routing",
+ "talpid-tunnel",
+ "talpid-tunnel-config-client",
+ "talpid-types",
+ "talpid-windows-net",
+ "tokio",
+ "tokio-stream",
+ "tunnel-obfuscation",
+ "widestring 1.0.2",
+ "windows-sys 0.45.0",
+ "zeroize",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af18f7ae1acd354b992402e9ec5864359d693cd8a79dcbef59f76891701c1e95"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "redox_syscall",
+ "rustix",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
+
+[[package]]
+name = "thiserror"
+version = "1.0.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "time"
+version = "0.1.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "time"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41effe7cfa8af36f439fac33861b66b049edc6f9a32331e2312660529c1c24ad"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c1c1d5a42b6245520c249549ec267180beaffcc0615401ac8e31853d4b6d8d2"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
+
+[[package]]
+name = "tokio"
+version = "1.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03201d01c3c27a29c8a5cee5b55a93ddae1ccf6f08f65365c2c918f8c1b76f64"
+dependencies = [
+ "autocfg",
+ "bytes",
+ "libc",
+ "memchr",
+ "mio",
+ "num_cpus",
+ "parking_lot",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2",
+ "tokio-macros",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "tokio-io-timeout"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf"
+dependencies = [
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9724f9a975fb987ef7a3cd9be0350edcbe130698af5b8f7a631e23d42d052484"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.23.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59"
+dependencies = [
+ "rustls",
+ "tokio",
+ "webpki",
+]
+
+[[package]]
+name = "tokio-stream"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df54d54117d6fdc4e4fea40fe1e4e566b3505700e148a6827e59b34b0d2600d9"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-tfo"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4279aec5ded232170bf39130dd0e0deaed2c9f31cd3b5db1f2021056bcf5f94a"
+dependencies = [
+ "cfg-if",
+ "futures",
+ "libc",
+ "log",
+ "once_cell",
+ "pin-project",
+ "socket2",
+ "tokio",
+ "winapi",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc463cd8deddc3770d20f9852143d50bf6094e640b485cb2e189a2099085ff45"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "tonic"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "11cd56bdb54ef93935a6a79dbd1d91f1ebd4c64150fd61654031fd6b8b775c91"
+dependencies = [
+ "async-stream",
+ "async-trait",
+ "axum",
+ "base64",
+ "bytes",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-timeout",
+ "percent-encoding",
+ "pin-project",
+ "prost",
+ "prost-derive",
+ "tokio",
+ "tokio-stream",
+ "tokio-util",
+ "tower",
+ "tower-layer",
+ "tower-service",
+ "tracing",
+ "tracing-futures",
+]
+
+[[package]]
+name = "tonic-build"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fbcd2800e34e743b9ae795867d5f77b535d3a3be69fd731e39145719752df8c"
+dependencies = [
+ "prettyplease",
+ "proc-macro2",
+ "prost-build",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tower"
+version = "0.4.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c"
+dependencies = [
+ "futures-core",
+ "futures-util",
+ "indexmap",
+ "pin-project",
+ "pin-project-lite",
+ "rand 0.8.5",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tower-layer",
+ "tower-service",
+ "tracing",
+]
+
+[[package]]
+name = "tower-http"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c530c8675c1dbf98facee631536fa116b5fb6382d7dd6dc1b118d970eafe3ba"
+dependencies = [
+ "bitflags",
+ "bytes",
+ "futures-core",
+ "futures-util",
+ "http",
+ "http-body",
+ "http-range-header",
+ "pin-project-lite",
+ "tower",
+ "tower-layer",
+ "tower-service",
+]
+
+[[package]]
+name = "tower-layer"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "343bc9466d3fe6b0f960ef45960509f84480bf4fd96f92901afe7ff3df9d3a62"
+
+[[package]]
+name = "tower-service"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6"
+
+[[package]]
+name = "tracing"
+version = "0.1.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a400e31aa60b9d44a52a8ee0343b5b18566b03a8321e0d321f695cf56e940160"
+dependencies = [
+ "cfg-if",
+ "log",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "tracing-futures"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2"
+dependencies = [
+ "pin-project",
+ "tracing",
+]
+
+[[package]]
+name = "translations-converter"
+version = "0.1.0"
+dependencies = [
+ "derive_more",
+ "htmlize",
+ "lazy_static",
+ "quick-xml",
+ "regex",
+ "serde",
+]
+
+[[package]]
+name = "triggered"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce148eae0d1a376c1b94ae651fc3261d9cb8294788b962b7382066376503a2d1"
+
+[[package]]
+name = "trust-dns-client"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c408c32e6a9dbb38037cece35740f2cf23c875d8ca134d33631cec83f74d3fe"
+dependencies = [
+ "cfg-if",
+ "data-encoding",
+ "futures-channel",
+ "futures-util",
+ "lazy_static",
+ "radix_trie",
+ "rand 0.8.5",
+ "thiserror",
+ "time 0.3.5",
+ "tokio",
+ "tracing",
+ "trust-dns-proto",
+]
+
+[[package]]
+name = "trust-dns-proto"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f7f83d1e4a0e4358ac54c5c3681e5d7da5efc5a7a632c90bb6d6669ddd9bc26"
+dependencies = [
+ "async-trait",
+ "cfg-if",
+ "data-encoding",
+ "enum-as-inner",
+ "futures-channel",
+ "futures-io",
+ "futures-util",
+ "idna",
+ "ipnet",
+ "lazy_static",
+ "rand 0.8.5",
+ "serde",
+ "smallvec",
+ "thiserror",
+ "tinyvec",
+ "tokio",
+ "tracing",
+ "url",
+]
+
+[[package]]
+name = "trust-dns-resolver"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aff21aa4dcefb0a1afbfac26deb0adc93888c7d295fb63ab273ef276ba2b7cfe"
+dependencies = [
+ "cfg-if",
+ "futures-util",
+ "ipconfig",
+ "lazy_static",
+ "lru-cache",
+ "parking_lot",
+ "resolv-conf",
+ "serde",
+ "smallvec",
+ "thiserror",
+ "tokio",
+ "tracing",
+ "trust-dns-proto",
+]
+
+[[package]]
+name = "trust-dns-server"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1583cf9f8a359c9f16fdf760b79cb2be3f261b98db8027f81959c7a4f6645e2c"
+dependencies = [
+ "async-trait",
+ "bytes",
+ "cfg-if",
+ "enum-as-inner",
+ "futures-executor",
+ "futures-util",
+ "serde",
+ "thiserror",
+ "time 0.3.5",
+ "tokio",
+ "toml",
+ "tracing",
+ "trust-dns-client",
+ "trust-dns-proto",
+ "trust-dns-resolver",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642"
+
+[[package]]
+name = "tun"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1cb3f24867499300ae21771a95bbaede2761497ae51094bbefcfd40646815b2a"
+dependencies = [
+ "ioctl-sys",
+ "libc",
+ "thiserror",
+]
+
+[[package]]
+name = "tunnel-obfuscation"
+version = "0.0.0"
+dependencies = [
+ "async-trait",
+ "err-derive",
+ "futures",
+ "tokio",
+ "udp-over-tcp",
+]
+
+[[package]]
+name = "typenum"
+version = "1.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b63708a265f51345575b27fe43f9500ad611579e764c79edbc2037b1121959ec"
+
+[[package]]
+name = "ucd-trie"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c"
+
+[[package]]
+name = "udp-over-tcp"
+version = "0.3.0"
+source = "git+https://github.com/mullvad/udp-over-tcp?rev=87936ac29b68b902565955f138ab02294bcc8593#87936ac29b68b902565955f138ab02294bcc8593"
+dependencies = [
+ "err-context",
+ "futures",
+ "lazy_static",
+ "log",
+ "nix 0.23.1",
+ "tokio",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a01404663e3db436ed2746d9fefef640d868edae3cceb81c3b8d5732fda678f"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcc811dc4066ac62f84f11307873c4850cb653bfa9b1719cee2bd2204a4bc5dd"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
+
+[[package]]
+name = "universal-hash"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05"
+dependencies = [
+ "generic-array 0.14.4",
+ "subtle",
+]
+
+[[package]]
+name = "untrusted"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+
+[[package]]
+name = "url"
+version = "2.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "matches",
+ "percent-encoding",
+ "serde",
+]
+
+[[package]]
+name = "uuid"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7"
+dependencies = [
+ "getrandom 0.2.3",
+]
+
+[[package]]
+name = "version_check"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe"
+
+[[package]]
+name = "walkdir"
+version = "2.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
+dependencies = [
+ "same-file",
+ "winapi",
+ "winapi-util",
+]
+
+[[package]]
+name = "want"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
+dependencies = [
+ "log",
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.9.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
+
+[[package]]
+name = "wasi"
+version = "0.10.2+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.82"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc7652e3f6c4706c8d9cd54832c4a4ccb9b5336e2c3bd154d5cccfbf1c1f5f7d"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.82"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "662cd44805586bd52971b9586b1df85cdbbd9112e4ef4d8f41559c334dc6ac3f"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.82"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b260f13d3012071dfb1512849c033b1925038373aea48ced3012c09df952c602"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.82"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5be8e654bdd9b79216c2929ab90721aa82faf65c48cdf08bdc4e7f51357b80da"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.82"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6598dd0bd3c7d51095ff6531a5b23e02acdc81804e30d8f07afb77b7215a140a"
+
+[[package]]
+name = "web-sys"
+version = "0.3.55"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38eb105f1c59d9eaa6b5cdc92b859d85b926e82cb2e0945cd0c9259faa6fe9fb"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webpki"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "which"
+version = "4.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea187a8ef279bc014ec368c27a920da2024d2a711109bfbe3440585d5cf27ad9"
+dependencies = [
+ "either",
+ "lazy_static",
+ "libc",
+]
+
+[[package]]
+name = "widestring"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17882f045410753661207383517a6f62ec3dbeb6a4ed2acce01f0728238d1983"
+
+[[package]]
+name = "widestring"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "653f141f39ec16bba3c5abe400a0c60da7468261cc2cbf36805022876bc721a8"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-service"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd9db37ecb5b13762d95468a2fc6009d4b2c62801243223aabd44fca13ad13c8"
+dependencies = [
+ "bitflags",
+ "widestring 1.0.2",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "winreg"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winres"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b68db261ef59e9e52806f688020631e987592bd83619edccda9c47d42cde4f6c"
+dependencies = [
+ "toml",
+]
+
+[[package]]
+name = "x25519-dalek"
+version = "2.0.0-pre.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5da623d8af10a62342bcbbb230e33e58a63255a58012f8653c578e54bab48df"
+dependencies = [
+ "curve25519-dalek",
+ "rand_core 0.6.4",
+ "zeroize",
+]
+
+[[package]]
+name = "zeroize"
+version = "1.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f"
+dependencies = [
+ "zeroize_derive",
+]
+
+[[package]]
+name = "zeroize_derive"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f8f187641dad4f680d25c4bfc4225b418165984179f26ca76ec4fb6441d3a17"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "synstructure",
+]
diff --git a/nixpkgs/pkgs/applications/networking/mullvad/default.nix b/nixpkgs/pkgs/applications/networking/mullvad/default.nix
new file mode 100644
index 000000000000..7b4bcf9d61b2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mullvad/default.nix
@@ -0,0 +1,8 @@
+{ lib
+, newScope
+}:
+lib.makeScope newScope (self: {
+  libwg = self.callPackage ./libwg.nix { };
+  mullvad = self.callPackage ./mullvad.nix { };
+  openvpn-mullvad = self.callPackage ./openvpn.nix { };
+})
diff --git a/nixpkgs/pkgs/applications/networking/mullvad/libwg.nix b/nixpkgs/pkgs/applications/networking/mullvad/libwg.nix
new file mode 100644
index 000000000000..0ed9599963ef
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mullvad/libwg.nix
@@ -0,0 +1,35 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, mullvad
+}:
+buildGoModule {
+  pname = "libwg";
+
+  inherit (mullvad)
+    version
+    src
+    ;
+
+  sourceRoot = "${mullvad.src.name}/wireguard/libwg";
+
+  vendorSha256 = "QNde5BqkSuqp3VJQOhn7aG6XknRDZQ62PE3WGhEJ5LU=";
+
+  # XXX: hack to make the ar archive go to the correct place
+  # This is necessary because passing `-o ...` to `ldflags` does not work
+  # (this doesn't get communicated everywhere in the chain, apparently, so
+  # `go` complains that it can't find an `a.out` file).
+  GOBIN = "${placeholder "out"}/lib";
+  ldflags = [ "-s" "-w" "-buildmode=c-archive" ];
+
+  postInstall = ''
+    mv $out/lib/libwg{,.a}
+  '';
+
+  meta = with lib; {
+    description = "A tiny wrapper around wireguard-go";
+    homepage = "https://github.com/mullvad/mullvadvpn-app/tree/master/wireguard/libwg";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ cole-h ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/mullvad/mullvad.nix b/nixpkgs/pkgs/applications/networking/mullvad/mullvad.nix
new file mode 100644
index 000000000000..754109c5ccf7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mullvad/mullvad.nix
@@ -0,0 +1,106 @@
+{ lib
+, stdenv
+, writeText
+, rustPlatform
+, fetchFromGitHub
+, fetchpatch
+, pkg-config
+, protobuf
+, makeWrapper
+, git
+, dbus
+, libnftnl
+, libmnl
+, libwg
+, enableOpenvpn ? true
+, openvpn-mullvad
+, shadowsocks-rust
+, installShellFiles
+}:
+rustPlatform.buildRustPackage rec {
+  pname = "mullvad";
+  version = "2023.3";
+
+  src = fetchFromGitHub {
+    owner = "mullvad";
+    repo = "mullvadvpn-app";
+    rev = version;
+    hash = "sha256-as/d14xVTqJvb+QxzEyZWh1EMRVpE8cDQRbdc4R4pcU=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "udp-over-tcp-0.3.0" = "sha256-5PeaM7/zhux1UdlaKpnQ2yIdmFy1n2weV/ux9lSRha4=";
+    };
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    protobuf
+    makeWrapper
+    git
+    installShellFiles
+  ];
+
+  buildInputs = [
+    dbus.dev
+    libnftnl
+    libmnl
+  ];
+
+  # talpid-core wants libwg.a in build/lib/{triple}
+  preBuild = ''
+    dest=build/lib/${stdenv.targetPlatform.config}
+    mkdir -p $dest
+    ln -s ${libwg}/lib/libwg.a $dest
+  '';
+
+  postInstall = ''
+    compdir=$(mktemp -d)
+    for shell in bash zsh fish; do
+      $out/bin/mullvad shell-completions $shell $compdir
+    done
+    installShellCompletion --cmd mullvad \
+      --bash $compdir/mullvad.bash \
+      --zsh $compdir/_mullvad \
+      --fish $compdir/mullvad.fish
+  '';
+
+  postFixup =
+    # Place all binaries in the 'mullvad-' namespace, even though these
+    # specific binaries aren't used in the lifetime of the program.
+    ''
+      for bin in relay_list translations-converter tunnel-obfuscation; do
+        mv "$out/bin/$bin" "$out/bin/mullvad-$bin"
+      done
+    '' +
+    # Files necessary for OpenVPN tunnels to work.
+    lib.optionalString enableOpenvpn ''
+      mkdir -p $out/share/mullvad
+      cp dist-assets/ca.crt $out/share/mullvad
+      ln -s ${openvpn-mullvad}/bin/openvpn $out/share/mullvad
+      ln -s ${shadowsocks-rust}/bin/sslocal $out/share/mullvad
+      ln -s $out/lib/libtalpid_openvpn_plugin.so $out/share/mullvad
+    '' +
+    # Set the directory where Mullvad will look for its resources by default to
+    # `$out/share`, so that we can avoid putting the files in `$out/bin` --
+    # Mullvad defaults to looking inside the directory its binary is located in
+    # for its resources.
+    ''
+      wrapProgram $out/bin/mullvad-daemon \
+        --set-default MULLVAD_RESOURCE_DIR "$out/share/mullvad"
+    '';
+
+  passthru = {
+    inherit libwg;
+    inherit openvpn-mullvad;
+  };
+
+  meta = with lib; {
+    description = "Mullvad VPN command-line client tools";
+    homepage = "https://github.com/mullvad/mullvadvpn-app";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ cole-h ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/mullvad/openvpn.nix b/nixpkgs/pkgs/applications/networking/mullvad/openvpn.nix
new file mode 100644
index 000000000000..ad3317280169
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mullvad/openvpn.nix
@@ -0,0 +1,112 @@
+{ lib
+, stdenv
+, openvpn
+, fetchpatch
+, fetchurl
+, iproute2
+, libnl
+, autoreconfHook
+, pkg-config
+}:
+
+openvpn.overrideAttrs (oldAttrs:
+  let
+    inherit (lib) optional;
+    fetchMullvadPatch = { commit, sha256 }: fetchpatch {
+      url = "https://github.com/mullvad/openvpn/commit/${commit}.patch";
+      inherit sha256;
+    };
+  in
+  rec {
+    pname = "openvpn-mullvad";
+    version = "2.6.0";
+
+    src = fetchurl {
+      url = "https://swupdate.openvpn.net/community/releases/openvpn-${version}.tar.gz";
+      sha256 = "sha256-6+yTMmPJhQ72984SXi8iIUvmCxy7jM/xiJJkP+CDro8=";
+    };
+
+    nativeBuildInputs = oldAttrs.nativeBuildInputs or [ ] ++ [
+      autoreconfHook
+      pkg-config
+    ];
+
+    buildInputs = oldAttrs.buildInputs or [ ]
+       ++ optional stdenv.isLinux [ libnl.dev ];
+
+    configureFlags = [
+      # Assignement instead of appending to make sure to use exactly the flags required by mullvad
+
+      # Flags are based on https://github.com/mullvad/mullvadvpn-app-binaries/blob/main/Makefile#L17
+      "--enable-static"
+      "--disable-shared"
+      "--disable-debug"
+      "--disable-plugin-down-root"
+      "--disable-management"
+      "--disable-port-share"
+      "--disable-systemd"
+      "--disable-dependency-tracking"
+      "--disable-pkcs11"
+      "--disable-plugin-auth-pam"
+      "--enable-plugins"
+      "--disable-lzo"
+      "--disable-lz4"
+      "--enable-comp-stub"
+    ]
+    ++ optional stdenv.isLinux [
+      # Flags are based on https://github.com/mullvad/mullvadvpn-app-binaries/blob/main/Makefile#L35
+      "--enable-dco" # requires libnl
+      "--disable-iproute2"
+    ];
+
+    patches = oldAttrs.patches or [ ] ++ [
+      # look at compare to find the relevant commits
+      # https://github.com/OpenVPN/openvpn/compare/release/2.6...mullvad:mullvad-patches
+      # used openvpn version is the latest tag ending with -mullvad
+      # https://github.com/mullvad/openvpn/tags
+      (fetchMullvadPatch {
+        # "Reduce PUSH_REQUEST_INTERVAL to one second"
+        commit = "4084b49de84e64c56584a378e85faf37973b6d6d";
+        sha256 = "sha256-MmYeFSw6c/QJh0LqLgkx+UxrbtTVv6zEFcnYEqznR1c=";
+      })
+      (fetchMullvadPatch {
+        # "Send an event to any plugins when authentication fails"
+        commit = "f24de7922d70c6e1ae06acf18bce1f62d9fa6b07";
+        sha256 = "sha256-RvlQbR6/s4NorYeA6FL7tE6geg6MIoZJtHeYxkVbdwA=";
+      })
+      (fetchMullvadPatch {
+        # "Shutdown when STDIN is closed"
+        commit = "81ae84271c044359b67991b15ebfb0cf9a32b3ad";
+        sha256 = "sha256-ilKMyU97ha2m0p1FD64aNQncnKo4Tyi/nATuD5yPmVw=";
+      })
+      (fetchMullvadPatch {
+        # "Undo dependency on Python docutils"
+        commit = "a5064b4b6c598b68d8cabc3f4006e5addef1ec1e";
+        sha256 = "sha256-+B6jxL0M+W5LzeukXkir26hn1OaYnycVNBwMYFq6gsE=";
+      })
+      (fetchMullvadPatch {
+        # "Prevent signal when stdin is closed from being cleared (#10)"
+        commit = "abe529e6d7f71228a036007c6c02624ec98ad6c1";
+        sha256 = "sha256-qJQeEtZO/+8kenXTKv4Bx6NltUYe8AwzXQtJcyhrjfc=";
+      })
+      (fetchMullvadPatch {
+        # "Disable libcap-ng"
+        commit = "598014de7c063fa4e8ba1fffa01434229faafd04";
+        sha256 = "sha256-+cFX5gmMuG6XFkTs6IV7utiKRF9E47F5Pgo93c+zBXo=";
+      })
+      (fetchMullvadPatch {
+        # "Remove libnsl dep"
+        commit = "845727e01ab3ec9bd58fcedb31b3cf2ebe2d5226";
+        sha256 = "sha256-Via62wKVfMWHTmO7xIXXO7b5k0KYHs1D0JVg3qnXkeM=";
+      })
+    ];
+    postPatch = oldAttrs.postPatch or "" + ''
+      rm ./configure
+    '';
+
+    meta = oldAttrs.meta or { } // {
+      description = "OpenVPN with Mullvad-specific patches applied";
+      homepage = "https://github.com/mullvad/openvpn";
+      maintainers = with lib; [ maintainers.cole-h ];
+    };
+  })
diff --git a/nixpkgs/pkgs/applications/networking/mumble/0001-BUILD-crypto-Migrate-to-OpenSSL-3.0-compatible-API.patch b/nixpkgs/pkgs/applications/networking/mumble/0001-BUILD-crypto-Migrate-to-OpenSSL-3.0-compatible-API.patch
new file mode 100644
index 000000000000..3f2adc8d2a63
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mumble/0001-BUILD-crypto-Migrate-to-OpenSSL-3.0-compatible-API.patch
@@ -0,0 +1,553 @@
+From f4cea62ed95e4967d8591f25e903f5e8fc2e2a30 Mon Sep 17 00:00:00 2001
+From: Terry Geng <terry@terriex.com>
+Date: Mon, 6 Dec 2021 10:45:11 -0500
+Subject: [PATCH] BUILD(crypto): Migrate to OpenSSL 3.0-compatible API
+
+OpenSSL 3.0 deprecated several low-level APIs and the usage of them
+caused errors/warnings that prevent the binary from being built against
+OpenSSL 3.0.
+Some primitive efforts have been made in #5317 but were incomplete.
+This commit follows https://www.openssl.org/docs/man3.0/man7/migration_guide.html,
+https://code.woboq.org/qt6/qtopcua/src/opcua/x509/qopcuakeypair_openssl.cpp.html,
+and clears all errors/warnings related to the usage of deprecated APIs.
+
+Fixes #5277
+Fixes #4266
+---
+ src/SelfSignedCertificate.cpp | 235 +++++++++++-----------------------
+ src/SelfSignedCertificate.h   |   5 +
+ src/crypto/CryptStateOCB2.cpp |  53 +++++---
+ src/crypto/CryptStateOCB2.h   |   9 +-
+ 4 files changed, 121 insertions(+), 181 deletions(-)
+
+diff --git a/src/SelfSignedCertificate.cpp b/src/SelfSignedCertificate.cpp
+index a77e5fad9..ea0dec4cc 100644
+--- a/src/SelfSignedCertificate.cpp
++++ b/src/SelfSignedCertificate.cpp
+@@ -5,8 +5,6 @@
+ 
+ #include "SelfSignedCertificate.h"
+ 
+-#include <openssl/x509v3.h>
+-
+ #define SSL_STRING(x) QString::fromLatin1(x).toUtf8().data()
+ 
+ static int add_ext(X509 *crt, int nid, char *value) {
+@@ -28,108 +26,86 @@ static int add_ext(X509 *crt, int nid, char *value) {
+ 	return 1;
+ }
+ 
+-bool SelfSignedCertificate::generate(CertificateType certificateType, QString clientCertName, QString clientCertEmail,
+-									 QSslCertificate &qscCert, QSslKey &qskKey) {
+-	bool ok                    = true;
+-	X509 *x509                 = nullptr;
+-	EVP_PKEY *pkey             = nullptr;
+-	RSA *rsa                   = nullptr;
+-	BIGNUM *e                  = nullptr;
+-	X509_NAME *name            = nullptr;
+-	ASN1_INTEGER *serialNumber = nullptr;
+-	ASN1_TIME *notBefore       = nullptr;
+-	ASN1_TIME *notAfter        = nullptr;
+-	QString commonName;
+-	bool isServerCert = certificateType == CertificateTypeServerCertificate;
+-
+-	if (CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON) == -1) {
+-		ok = false;
+-		goto out;
++EVP_PKEY *SelfSignedCertificate::generate_rsa_keypair() {
++	EVP_PKEY *pkey = EVP_PKEY_new();
++	if (!pkey) {
++		return nullptr;
+ 	}
+ 
+-	x509 = X509_new();
+-	if (!x509) {
+-		ok = false;
+-		goto out;
++#if OPENSSL_VERSION_NUMBER >= 0x10100000L
++	EVP_PKEY_CTX *ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_RSA, nullptr);
++	if (!ctx) {
++		return nullptr;
+ 	}
+-
+-	pkey = EVP_PKEY_new();
+-	if (!pkey) {
+-		ok = false;
+-		goto out;
++	if (EVP_PKEY_keygen_init(ctx) <= 0) {
++		return nullptr;
+ 	}
+-
+-	rsa = RSA_new();
++	if (EVP_PKEY_CTX_set_rsa_keygen_bits(ctx, 2048) <= 0) {
++		return nullptr;
++	}
++	if (EVP_PKEY_keygen(ctx, &pkey) <= 0) {
++		return nullptr;
++	}
++	EVP_PKEY_CTX_free(ctx);
++#else
++	RSA *rsa  = RSA_new();
++	BIGNUM *e = BN_new();
+ 	if (!rsa) {
+-		ok = false;
+-		goto out;
++		return nullptr;
+ 	}
+-
+-	e = BN_new();
+ 	if (!e) {
+-		ok = false;
+-		goto out;
++		return nullptr;
+ 	}
+ 	if (BN_set_word(e, 65537) == 0) {
+-		ok = false;
+-		goto out;
++		return nullptr;
+ 	}
+-
+ 	if (RSA_generate_key_ex(rsa, 2048, e, nullptr) == 0) {
+-		ok = false;
+-		goto out;
++		return nullptr;
+ 	}
+-
+ 	if (EVP_PKEY_assign_RSA(pkey, rsa) == 0) {
+-		ok = false;
+-		goto out;
++		return nullptr;
+ 	}
++	BN_free(e);
++	RSA_free(rsa);
++#endif
++	return pkey;
++}
+ 
+-	if (X509_set_version(x509, 2) == 0) {
+-		ok = false;
+-		goto out;
++#define CHECK(statement) \
++	if (!(statement)) {  \
++		ok = false;      \
++		goto out;        \
+ 	}
+ 
+-	serialNumber = X509_get_serialNumber(x509);
+-	if (!serialNumber) {
+-		ok = false;
+-		goto out;
+-	}
+-	if (ASN1_INTEGER_set(serialNumber, 1) == 0) {
+-		ok = false;
+-		goto out;
+-	}
+ 
+-	notBefore = X509_get_notBefore(x509);
+-	if (!notBefore) {
+-		ok = false;
+-		goto out;
+-	}
+-	if (!X509_gmtime_adj(notBefore, 0)) {
+-		ok = false;
+-		goto out;
+-	}
++bool SelfSignedCertificate::generate(CertificateType certificateType, QString clientCertName, QString clientCertEmail,
++									 QSslCertificate &qscCert, QSslKey &qskKey) {
++	bool ok                    = true;
++	EVP_PKEY *pkey             = nullptr;
++	X509 *x509                 = nullptr;
++	X509_NAME *name            = nullptr;
++	ASN1_INTEGER *serialNumber = nullptr;
++	ASN1_TIME *notBefore       = nullptr;
++	ASN1_TIME *notAfter        = nullptr;
++	QString commonName;
++	bool isServerCert = certificateType == CertificateTypeServerCertificate;
+ 
+-	notAfter = X509_get_notAfter(x509);
+-	if (!notAfter) {
+-		ok = false;
+-		goto out;
+-	}
+-	if (!X509_gmtime_adj(notAfter, 60 * 60 * 24 * 365 * 20)) {
+-		ok = false;
+-		goto out;
+-	}
++	// In Qt 5.15, a class was added to wrap up the procedures of generating a self-signed certificate.
++	// See https://doc.qt.io/qt-5/qopcuax509certificatesigningrequest.html.
++	// We should consider migrating to this class after switching to Qt 5.15.
+ 
+-	if (X509_set_pubkey(x509, pkey) == 0) {
+-		ok = false;
+-		goto out;
+-	}
++	CHECK(pkey = generate_rsa_keypair());
+ 
+-	name = X509_get_subject_name(x509);
+-	if (!name) {
+-		ok = false;
+-		goto out;
+-	}
++	CHECK(x509 = X509_new());
++	CHECK(X509_set_version(x509, 2));
++	CHECK(serialNumber = X509_get_serialNumber(x509));
++	CHECK(ASN1_INTEGER_set(serialNumber, 1));
++	CHECK(notBefore = X509_get_notBefore(x509));
++	CHECK(X509_gmtime_adj(notBefore, 0));
++	CHECK(notAfter = X509_get_notAfter(x509));
++	CHECK(X509_gmtime_adj(notAfter, 60 * 60 * 24 * 365 * 20))
++	CHECK(X509_set_pubkey(x509, pkey));
++	CHECK(name = X509_get_subject_name(x509));
+ 
+ 	if (isServerCert) {
+ 		commonName = QLatin1String("Murmur Autogenerated Certificate v2");
+@@ -141,120 +117,63 @@ bool SelfSignedCertificate::generate(CertificateType certificateType, QString cl
+ 		}
+ 	}
+ 
+-	if (X509_NAME_add_entry_by_txt(name, "CN", MBSTRING_UTF8,
+-								   reinterpret_cast< unsigned char * >(commonName.toUtf8().data()), -1, -1, 0)
+-		== 0) {
+-		ok = false;
+-		goto out;
+-	}
++	CHECK(X509_NAME_add_entry_by_txt(name, "CN", MBSTRING_UTF8,
++									 reinterpret_cast< unsigned char * >(commonName.toUtf8().data()), -1, -1, 0));
+ 
+-	if (X509_set_issuer_name(x509, name) == 0) {
+-		ok = false;
+-		goto out;
+-	}
++	CHECK(X509_set_issuer_name(x509, name));
+ 
+-	if (add_ext(x509, NID_basic_constraints, SSL_STRING("critical,CA:FALSE")) == 0) {
+-		ok = false;
+-		goto out;
+-	}
++	CHECK(add_ext(x509, NID_basic_constraints, SSL_STRING("critical,CA:FALSE")));
+ 
+ 	if (isServerCert) {
+-		if (add_ext(x509, NID_ext_key_usage, SSL_STRING("serverAuth,clientAuth")) == 0) {
+-			ok = false;
+-			goto out;
+-		}
++		CHECK(add_ext(x509, NID_ext_key_usage, SSL_STRING("serverAuth,clientAuth")))
+ 	} else {
+-		if (add_ext(x509, NID_ext_key_usage, SSL_STRING("clientAuth")) == 0) {
+-			ok = false;
+-			goto out;
+-		}
++		CHECK(add_ext(x509, NID_ext_key_usage, SSL_STRING("clientAuth")));
+ 	}
+ 
+-	if (add_ext(x509, NID_subject_key_identifier, SSL_STRING("hash")) == 0) {
+-		ok = false;
+-		goto out;
+-	}
++	CHECK(add_ext(x509, NID_subject_key_identifier, SSL_STRING("hash")));
+ 
+ 	if (isServerCert) {
+-		if (add_ext(x509, NID_netscape_comment, SSL_STRING("Generated from murmur")) == 0) {
+-			ok = false;
+-			goto out;
+-		}
++		CHECK(add_ext(x509, NID_netscape_comment, SSL_STRING("Generated from murmur")));
+ 	} else {
+-		if (add_ext(x509, NID_netscape_comment, SSL_STRING("Generated by Mumble")) == 0) {
+-			ok = false;
+-			goto out;
+-		}
++		CHECK(add_ext(x509, NID_netscape_comment, SSL_STRING("Generated by Mumble")));
+ 	}
+ 
+ 	if (!isServerCert) {
+ 		if (!clientCertEmail.trimmed().isEmpty()) {
+-			if (add_ext(x509, NID_subject_alt_name,
+-						QString::fromLatin1("email:%1").arg(clientCertEmail).toUtf8().data())
+-				== 0) {
+-				ok = false;
+-				goto out;
+-			}
++			CHECK(add_ext(x509, NID_subject_alt_name,
++						  QString::fromLatin1("email:%1").arg(clientCertEmail).toUtf8().data()));
+ 		}
+ 	}
+ 
+-	if (X509_sign(x509, pkey, EVP_sha1()) == 0) {
+-		ok = false;
+-		goto out;
+-	}
++	CHECK(X509_sign(x509, pkey, EVP_sha1()));
+ 
+ 	{
+ 		QByteArray crt;
+ 		int len = i2d_X509(x509, nullptr);
+-		if (len <= 0) {
+-			ok = false;
+-			goto out;
+-		}
++		CHECK(len > 0);
+ 		crt.resize(len);
+ 
+ 		unsigned char *dptr = reinterpret_cast< unsigned char * >(crt.data());
+-		if (i2d_X509(x509, &dptr) != len) {
+-			ok = false;
+-			goto out;
+-		}
++		CHECK(i2d_X509(x509, &dptr) == len);
+ 
+ 		qscCert = QSslCertificate(crt, QSsl::Der);
+-		if (qscCert.isNull()) {
+-			ok = false;
+-			goto out;
+-		}
++		CHECK(!qscCert.isNull());
+ 	}
+ 
+ 	{
+ 		QByteArray key;
+ 		int len = i2d_PrivateKey(pkey, nullptr);
+-		if (len <= 0) {
+-			ok = false;
+-			goto out;
+-		}
++		CHECK(len > 0);
+ 		key.resize(len);
+ 
+ 		unsigned char *dptr = reinterpret_cast< unsigned char * >(key.data());
+-		if (i2d_PrivateKey(pkey, &dptr) != len) {
+-			ok = false;
+-			goto out;
+-		}
++		CHECK(i2d_PrivateKey(pkey, &dptr) == len);
+ 
+ 		qskKey = QSslKey(key, QSsl::Rsa, QSsl::Der);
+-		if (qskKey.isNull()) {
+-			ok = false;
+-			goto out;
+-		}
++		CHECK(!qskKey.isNull());
+ 	}
+ 
+ out:
+-	if (e) {
+-		BN_free(e);
+-	}
+-	// We only need to free the pkey pointer,
+-	// not the RSA pointer. We have assigned
+-	// our RSA key to pkey, and it will be freed
+-	// once we free pkey.
+ 	if (pkey) {
+ 		EVP_PKEY_free(pkey);
+ 	}
+diff --git a/src/SelfSignedCertificate.h b/src/SelfSignedCertificate.h
+index b85a8752b..7c5f59e9c 100644
+--- a/src/SelfSignedCertificate.h
++++ b/src/SelfSignedCertificate.h
+@@ -6,6 +6,10 @@
+ #ifndef MUMBLE_SELFSIGNEDCERTIFICATE_H_
+ #define MUMBLE_SELFSIGNEDCERTIFICATE_H_
+ 
++#include <openssl/evp.h>
++#include <openssl/rsa.h>
++#include <openssl/x509v3.h>
++
+ #include <QtCore/QString>
+ #include <QtNetwork/QSslCertificate>
+ #include <QtNetwork/QSslKey>
+@@ -16,6 +20,7 @@ class SelfSignedCertificate {
+ private:
+ 	static bool generate(CertificateType certificateType, QString clientCertName, QString clientCertEmail,
+ 						 QSslCertificate &qscCert, QSslKey &qskKey);
++	static EVP_PKEY *generate_rsa_keypair();
+ 
+ public:
+ 	static bool generateMumbleCertificate(QString name, QString email, QSslCertificate &qscCert, QSslKey &qskKey);
+diff --git a/src/crypto/CryptStateOCB2.cpp b/src/crypto/CryptStateOCB2.cpp
+index 2176d6488..640fdedac 100644
+--- a/src/crypto/CryptStateOCB2.cpp
++++ b/src/crypto/CryptStateOCB2.cpp
+@@ -30,7 +30,7 @@
+ #include <cstring>
+ #include <openssl/rand.h>
+ 
+-CryptStateOCB2::CryptStateOCB2() : CryptState() {
++CryptStateOCB2::CryptStateOCB2() : CryptState(), enc_ctx(EVP_CIPHER_CTX_new()), dec_ctx(EVP_CIPHER_CTX_new()) {
+ 	for (int i = 0; i < 0x100; i++)
+ 		decrypt_history[i] = 0;
+ 	memset(raw_key, 0, AES_KEY_SIZE_BYTES);
+@@ -38,6 +38,11 @@ CryptStateOCB2::CryptStateOCB2() : CryptState() {
+ 	memset(decrypt_iv, 0, AES_BLOCK_SIZE);
+ }
+ 
++CryptStateOCB2::~CryptStateOCB2() noexcept {
++	EVP_CIPHER_CTX_free(enc_ctx);
++	EVP_CIPHER_CTX_free(dec_ctx);
++}
++
+ bool CryptStateOCB2::isValid() const {
+ 	return bInit;
+ }
+@@ -46,8 +51,6 @@ void CryptStateOCB2::genKey() {
+ 	CryptographicRandom::fillBuffer(raw_key, AES_KEY_SIZE_BYTES);
+ 	CryptographicRandom::fillBuffer(encrypt_iv, AES_BLOCK_SIZE);
+ 	CryptographicRandom::fillBuffer(decrypt_iv, AES_BLOCK_SIZE);
+-	AES_set_encrypt_key(raw_key, AES_KEY_SIZE_BITS, &encrypt_key);
+-	AES_set_decrypt_key(raw_key, AES_KEY_SIZE_BITS, &decrypt_key);
+ 	bInit = true;
+ }
+ 
+@@ -56,8 +59,6 @@ bool CryptStateOCB2::setKey(const std::string &rkey, const std::string &eiv, con
+ 		memcpy(raw_key, rkey.data(), AES_KEY_SIZE_BYTES);
+ 		memcpy(encrypt_iv, eiv.data(), AES_BLOCK_SIZE);
+ 		memcpy(decrypt_iv, div.data(), AES_BLOCK_SIZE);
+-		AES_set_encrypt_key(raw_key, AES_KEY_SIZE_BITS, &encrypt_key);
+-		AES_set_decrypt_key(raw_key, AES_KEY_SIZE_BITS, &decrypt_key);
+ 		bInit = true;
+ 		return true;
+ 	}
+@@ -256,10 +257,24 @@ static void inline ZERO(keyblock &block) {
+ 		block[i] = 0;
+ }
+ 
+-#define AESencrypt(src, dst, key) \
+-	AES_encrypt(reinterpret_cast< const unsigned char * >(src), reinterpret_cast< unsigned char * >(dst), key);
+-#define AESdecrypt(src, dst, key) \
+-	AES_decrypt(reinterpret_cast< const unsigned char * >(src), reinterpret_cast< unsigned char * >(dst), key);
++#define AESencrypt(src, dst, key)                                                                 \
++	{                                                                                             \
++		int outlen = 0;                                                                           \
++		EVP_EncryptInit_ex(enc_ctx, EVP_aes_128_ecb(), NULL, key, NULL);                          \
++		EVP_CIPHER_CTX_set_padding(enc_ctx, 0);                                                   \
++		EVP_EncryptUpdate(enc_ctx, reinterpret_cast< unsigned char * >(dst), &outlen,             \
++						  reinterpret_cast< const unsigned char * >(src), AES_BLOCK_SIZE);        \
++		EVP_EncryptFinal_ex(enc_ctx, reinterpret_cast< unsigned char * >(dst + outlen), &outlen); \
++	}
++#define AESdecrypt(src, dst, key)                                                                 \
++	{                                                                                             \
++		int outlen = 0;                                                                           \
++		EVP_DecryptInit_ex(dec_ctx, EVP_aes_128_ecb(), NULL, key, NULL);                          \
++		EVP_CIPHER_CTX_set_padding(dec_ctx, 0);                                                   \
++		EVP_DecryptUpdate(dec_ctx, reinterpret_cast< unsigned char * >(dst), &outlen,             \
++						  reinterpret_cast< const unsigned char * >(src), AES_BLOCK_SIZE);        \
++		EVP_DecryptFinal_ex(dec_ctx, reinterpret_cast< unsigned char * >(dst + outlen), &outlen); \
++	}
+ 
+ bool CryptStateOCB2::ocb_encrypt(const unsigned char *plain, unsigned char *encrypted, unsigned int len,
+ 								 const unsigned char *nonce, unsigned char *tag, bool modifyPlainOnXEXStarAttack) {
+@@ -267,7 +282,7 @@ bool CryptStateOCB2::ocb_encrypt(const unsigned char *plain, unsigned char *encr
+ 	bool success = true;
+ 
+ 	// Initialize
+-	AESencrypt(nonce, delta, &encrypt_key);
++	AESencrypt(nonce, delta, raw_key);
+ 	ZERO(checksum);
+ 
+ 	while (len > AES_BLOCK_SIZE) {
+@@ -299,7 +314,7 @@ bool CryptStateOCB2::ocb_encrypt(const unsigned char *plain, unsigned char *encr
+ 		if (flipABit) {
+ 			*reinterpret_cast< unsigned char * >(tmp) ^= 1;
+ 		}
+-		AESencrypt(tmp, tmp, &encrypt_key);
++		AESencrypt(tmp, tmp, raw_key);
+ 		XOR(reinterpret_cast< subblock * >(encrypted), delta, tmp);
+ 		XOR(checksum, checksum, reinterpret_cast< const subblock * >(plain));
+ 		if (flipABit) {
+@@ -315,7 +330,7 @@ bool CryptStateOCB2::ocb_encrypt(const unsigned char *plain, unsigned char *encr
+ 	ZERO(tmp);
+ 	tmp[BLOCKSIZE - 1] = SWAPPED(len * 8);
+ 	XOR(tmp, tmp, delta);
+-	AESencrypt(tmp, pad, &encrypt_key);
++	AESencrypt(tmp, pad, raw_key);
+ 	memcpy(tmp, plain, len);
+ 	memcpy(reinterpret_cast< unsigned char * >(tmp) + len, reinterpret_cast< const unsigned char * >(pad) + len,
+ 		   AES_BLOCK_SIZE - len);
+@@ -325,7 +340,7 @@ bool CryptStateOCB2::ocb_encrypt(const unsigned char *plain, unsigned char *encr
+ 
+ 	S3(delta);
+ 	XOR(tmp, delta, checksum);
+-	AESencrypt(tmp, tag, &encrypt_key);
++	AESencrypt(tmp, tag, raw_key);
+ 
+ 	return success;
+ }
+@@ -336,13 +351,13 @@ bool CryptStateOCB2::ocb_decrypt(const unsigned char *encrypted, unsigned char *
+ 	bool success = true;
+ 
+ 	// Initialize
+-	AESencrypt(nonce, delta, &encrypt_key);
++	AESencrypt(nonce, delta, raw_key);
+ 	ZERO(checksum);
+ 
+ 	while (len > AES_BLOCK_SIZE) {
+ 		S2(delta);
+ 		XOR(tmp, delta, reinterpret_cast< const subblock * >(encrypted));
+-		AESdecrypt(tmp, tmp, &decrypt_key);
++		AESdecrypt(tmp, tmp, raw_key);
+ 		XOR(reinterpret_cast< subblock * >(plain), delta, tmp);
+ 		XOR(checksum, checksum, reinterpret_cast< const subblock * >(plain));
+ 		len -= AES_BLOCK_SIZE;
+@@ -354,7 +369,7 @@ bool CryptStateOCB2::ocb_decrypt(const unsigned char *encrypted, unsigned char *
+ 	ZERO(tmp);
+ 	tmp[BLOCKSIZE - 1] = SWAPPED(len * 8);
+ 	XOR(tmp, tmp, delta);
+-	AESencrypt(tmp, pad, &encrypt_key);
++	AESencrypt(tmp, pad, raw_key);
+ 	memset(tmp, 0, AES_BLOCK_SIZE);
+ 	memcpy(tmp, encrypted, len);
+ 	XOR(tmp, tmp, pad);
+@@ -372,7 +387,7 @@ bool CryptStateOCB2::ocb_decrypt(const unsigned char *encrypted, unsigned char *
+ 
+ 	S3(delta);
+ 	XOR(tmp, delta, checksum);
+-	AESencrypt(tmp, tag, &encrypt_key);
++	AESencrypt(tmp, tag, raw_key);
+ 
+ 	return success;
+ }
+@@ -381,5 +396,5 @@ bool CryptStateOCB2::ocb_decrypt(const unsigned char *encrypted, unsigned char *
+ #undef SHIFTBITS
+ #undef SWAPPED
+ #undef HIGHBIT
+-#undef AES_encrypt
+-#undef AES_decrypt
++#undef AESencrypt
++#undef AESdecrypt
+diff --git a/src/crypto/CryptStateOCB2.h b/src/crypto/CryptStateOCB2.h
+index 53d4b4b6a..cc3f1c0bc 100644
+--- a/src/crypto/CryptStateOCB2.h
++++ b/src/crypto/CryptStateOCB2.h
+@@ -8,8 +8,9 @@
+ 
+ #include "CryptState.h"
+ 
+-#include <openssl/aes.h>
++#include <openssl/evp.h>
+ 
++#define AES_BLOCK_SIZE 16
+ #define AES_KEY_SIZE_BITS 128
+ #define AES_KEY_SIZE_BYTES (AES_KEY_SIZE_BITS / 8)
+ 
+@@ -17,7 +18,7 @@
+ class CryptStateOCB2 : public CryptState {
+ public:
+ 	CryptStateOCB2();
+-	~CryptStateOCB2(){};
++	~CryptStateOCB2() noexcept override;
+ 
+ 	virtual bool isValid() const Q_DECL_OVERRIDE;
+ 	virtual void genKey() Q_DECL_OVERRIDE;
+@@ -43,8 +44,8 @@ private:
+ 	unsigned char decrypt_iv[AES_BLOCK_SIZE];
+ 	unsigned char decrypt_history[0x100];
+ 
+-	AES_KEY encrypt_key;
+-	AES_KEY decrypt_key;
++	EVP_CIPHER_CTX *enc_ctx;
++	EVP_CIPHER_CTX *dec_ctx;
+ };
+ 
+ 
+-- 
+2.38.4
+
diff --git a/nixpkgs/pkgs/applications/networking/mumble/0002-FIX-positional-audio-Force-8-bytes-alignment-for-CCa.patch b/nixpkgs/pkgs/applications/networking/mumble/0002-FIX-positional-audio-Force-8-bytes-alignment-for-CCa.patch
new file mode 100644
index 000000000000..eb8be6512968
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mumble/0002-FIX-positional-audio-Force-8-bytes-alignment-for-CCa.patch
@@ -0,0 +1,31 @@
+From 13c051b36b387356815cff5d685bc628b74ba136 Mon Sep 17 00:00:00 2001
+From: Davide Beatrici <git@davidebeatrici.dev>
+Date: Thu, 1 Sep 2022 23:32:57 +0200
+Subject: [PATCH] FIX(positional-audio): Force 8 bytes alignment for
+ CCameraAngles in GTAV plugin
+
+https://en.cppreference.com/w/cpp/language/alignas
+
+This fixes compilation when the implicit alignment is not 8 bytes.
+
+It can be the case with 32 bit targets.
+---
+ plugins/gtav/structs.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/gtav/structs.h b/plugins/gtav/structs.h
+index 2829dc11e..0e4f76eda 100644
+--- a/plugins/gtav/structs.h
++++ b/plugins/gtav/structs.h
+@@ -118,7 +118,7 @@ struct CCameraManagerAngles {
+ 	ptr_t cameraAngles; // CCameraAngles *
+ };
+ 
+-struct CCameraAngles {
++struct alignas(8) CCameraAngles {
+ 	uint8_t pad1[960];
+ 	ptr_t playerAngles; // CPlayerAngles *
+ 	uint8_t pad2[60];
+-- 
+2.38.5
+
diff --git a/nixpkgs/pkgs/applications/networking/mumble/default.nix b/nixpkgs/pkgs/applications/networking/mumble/default.nix
new file mode 100644
index 000000000000..27fdde3c2a66
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mumble/default.nix
@@ -0,0 +1,134 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, pkg-config, qt5, cmake
+, avahi, boost, libopus, libsndfile, protobuf, speex, libcap
+, alsa-lib, python3
+, rnnoise
+, nixosTests
+, poco
+, flac
+, libogg
+, libvorbis
+, iceSupport ? true, zeroc-ice
+, jackSupport ? false, libjack2
+, pipewireSupport ? true, pipewire
+, pulseSupport ? true, libpulseaudio
+, speechdSupport ? false, speechd
+}:
+
+let
+  generic = overrides: source: stdenv.mkDerivation (source // overrides // {
+    pname = overrides.type;
+    version = source.version;
+
+    patches = [
+      ./0001-BUILD-crypto-Migrate-to-OpenSSL-3.0-compatible-API.patch
+      # fix crash caused by openssl3 thread unsafe evp implementation
+      # see https://github.com/mumble-voip/mumble/issues/5361#issuecomment-1173001440
+      (fetchpatch {
+        url = "https://github.com/mumble-voip/mumble/commit/f8d47db318f302f5a7d343f15c9936c7030c49c4.patch";
+        hash = "sha256-xk8vBrPwvQxHCY8I6WQJAyaBGHmlH9NCixweP6FyakU=";
+      })
+      ./0002-FIX-positional-audio-Force-8-bytes-alignment-for-CCa.patch
+    ];
+
+    nativeBuildInputs = [ cmake pkg-config python3 qt5.wrapQtAppsHook qt5.qttools ]
+      ++ (overrides.nativeBuildInputs or [ ]);
+
+    buildInputs = [ avahi boost poco protobuf ]
+      ++ (overrides.buildInputs or [ ]);
+
+    cmakeFlags = [
+      "-D g15=OFF"
+    ] ++ (overrides.configureFlags or [ ]);
+
+    preConfigure = ''
+       patchShebangs scripts
+    '';
+
+    passthru.tests.connectivity = nixosTests.mumble;
+
+    meta = with lib; {
+      description = "Low-latency, high quality voice chat software";
+      homepage = "https://mumble.info";
+      license = licenses.bsd3;
+      maintainers = with maintainers; [ infinisil felixsinger ];
+      platforms = platforms.linux;
+    };
+  });
+
+  client = source: generic {
+    type = "mumble";
+
+    nativeBuildInputs = [ qt5.qttools ];
+    buildInputs = [ flac libogg libopus libsndfile libvorbis qt5.qtsvg rnnoise speex ]
+      ++ lib.optional (!jackSupport) alsa-lib
+      ++ lib.optional jackSupport libjack2
+      ++ lib.optional speechdSupport speechd
+      ++ lib.optional pulseSupport libpulseaudio
+      ++ lib.optional pipewireSupport pipewire;
+
+    configureFlags = [
+      "-D server=OFF"
+      "-D bundled-celt=ON"
+      "-D bundled-opus=OFF"
+      "-D bundled-speex=OFF"
+      "-D bundled-rnnoise=OFF"
+      "-D bundle-qt-translations=OFF"
+      "-D update=OFF"
+      "-D overlay-xcompile=OFF"
+      "-D oss=OFF"
+    ] ++ lib.optional (!speechdSupport) "-D speechd=OFF"
+      ++ lib.optional (!pulseSupport) "-D pulseaudio=OFF"
+      ++ lib.optional (!pipewireSupport) "-D pipewire=OFF"
+      ++ lib.optional jackSupport "-D alsa=OFF -D jackaudio=ON";
+
+    env.NIX_CFLAGS_COMPILE = lib.optionalString speechdSupport "-I${speechd}/include/speech-dispatcher";
+
+    postFixup = ''
+      wrapProgram $out/bin/mumble \
+        --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath (lib.optional pulseSupport libpulseaudio ++ lib.optional pipewireSupport pipewire)}"
+    '';
+  } source;
+
+  server = source: generic {
+    type = "murmur";
+
+    configureFlags = [
+      "-D client=OFF"
+    ] ++ lib.optional (!iceSupport) "-D ice=OFF"
+      ++ lib.optionals iceSupport [
+        "-D Ice_HOME=${lib.getDev zeroc-ice};${lib.getLib zeroc-ice}"
+        "-D CMAKE_PREFIX_PATH=${lib.getDev zeroc-ice};${lib.getLib zeroc-ice}"
+        "-D Ice_SLICE_DIR=${lib.getDev zeroc-ice}/share/ice/slice"
+      ];
+
+    buildInputs = [ libcap ]
+      ++ lib.optional iceSupport zeroc-ice;
+  } source;
+
+  source = rec {
+    version = "1.4.287";
+
+    # Needs submodules
+    src = fetchFromGitHub {
+      owner = "mumble-voip";
+      repo = "mumble";
+      rev = "5d808e287e99b402b724e411a7a0848e00956a24";
+      sha256 = "sha256-SYsGCuj3HeyAQRUecGLaRdJR9Rm7lbaM54spY/zx0jU=";
+      fetchSubmodules = true;
+    };
+
+    patches = [
+      # fixes 'static assertion failed: static_assert(sizeof(CCameraAngles) == 0x408, "");'
+      # when compiling pkgsi686Linux.mumble, which is a dependency of x64 mumble_overlay
+      # https://github.com/mumble-voip/mumble/pull/5850
+      # Remove with next version update
+      (fetchpatch {
+        url = "https://github.com/mumble-voip/mumble/commit/13c051b36b387356815cff5d685bc628b74ba136.patch";
+        hash = "sha256-Rq8fb6NFd4DCNWm6OOMYIP7tBllufmQcB5CSxPU4qqg=";
+      })
+    ];
+  };
+in {
+  mumble  = client source;
+  murmur  = server source;
+}
diff --git a/nixpkgs/pkgs/applications/networking/mumble/overlay.nix b/nixpkgs/pkgs/applications/networking/mumble/overlay.nix
new file mode 100644
index 000000000000..72474d391477
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/mumble/overlay.nix
@@ -0,0 +1,30 @@
+{ stdenv, lib, which, file, mumble, mumble_i686
+}:
+
+let
+  binPath = lib.makeBinPath [ which file ];
+in stdenv.mkDerivation {
+  pname = "mumble-overlay";
+  version = mumble.version;
+
+  inherit (mumble) src;
+  patches = mumble.patches or [];
+
+  installPhase = ''
+    mkdir -p $out/lib
+    ln -s ${mumble}/lib/libmumble.so.1 $out/lib/
+
+    ${lib.optionalString (mumble_i686 != null) ''
+      mkdir -p $out/lib32
+      ln -s ${mumble_i686}/lib/libmumble.so.1 $out/lib32/
+    ''}
+
+    install -Dm755 scripts/mumble-overlay $out/bin/mumble-overlay
+    sed -i "s,/usr/lib,$out/lib,g" $out/bin/mumble-overlay
+    sed -i '2iPATH="${binPath}:$PATH"' $out/bin/mumble-overlay
+  '';
+
+  meta = {
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/n8n/default.nix b/nixpkgs/pkgs/applications/networking/n8n/default.nix
new file mode 100644
index 000000000000..1b2caaf5bb06
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/n8n/default.nix
@@ -0,0 +1,45 @@
+{ pkgs, stdenv, lib, nixosTests }:
+
+let
+  nodePackages = import ./node-composition.nix {
+    inherit pkgs;
+    inherit (stdenv.hostPlatform) system;
+  };
+in
+nodePackages.n8n.override {
+  nativeBuildInputs = [
+    pkgs.nodePackages.node-pre-gyp
+    pkgs.which
+  ];
+
+  buildInputs = [
+    pkgs.libkrb5
+    pkgs.libmongocrypt
+    pkgs.postgresql
+  ];
+
+  # Oracle's official package on npm is binary only (WHY?!) and doesn't provide binaries for aarch64.
+  # This can supposedly be fixed by building a custom copy of the module from source, but that's way
+  # too much complexity for a setup no one would ever actually run.
+  #
+  # NB: If you _are_ actually running n8n on Oracle on aarch64, feel free to submit a patch.
+  preRebuild = lib.optionalString stdenv.isAarch64 ''
+    rm -rf node_modules/oracledb
+  '';
+
+  # makes libmongocrypt bindings not look for static libraries in completely wrong places
+  BUILD_TYPE = "dynamic";
+
+  dontNpmInstall = true;
+
+  passthru = {
+    updateScript = ./generate-dependencies.sh;
+    tests = nixosTests.n8n;
+  };
+
+  meta = with lib; {
+    description = "Free and source-available fair-code licensed workflow automation tool. Easily automate tasks across different services.";
+    maintainers = with maintainers; [ freezeboy k900 ];
+    license = licenses.sustainableUse;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/n8n/generate-dependencies.sh b/nixpkgs/pkgs/applications/networking/n8n/generate-dependencies.sh
new file mode 100755
index 000000000000..9bc19abe3ead
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/n8n/generate-dependencies.sh
@@ -0,0 +1,21 @@
+#!/usr/bin/env nix-shell
+#! nix-shell -i bash -p nodePackages.node2nix
+
+# --strip-optional-dependencies to get rid of deprecated build deps:
+#
+# n8n
+# -> n8n-nodes-base
+#    -> ssh2-sftp-client
+#       -> ssh2
+#          -> cpu-features
+#             -> node-gyp@3.8.0 -> python2
+#             -> cmake
+cd "$(dirname $(readlink -f $0))"
+
+node2nix \
+  --nodejs-18 \
+  --strip-optional-dependencies \
+  --node-env node-env.nix \
+  --input package.json \
+  --output node-packages.nix \
+  --composition node-composition.nix
diff --git a/nixpkgs/pkgs/applications/networking/n8n/node-composition.nix b/nixpkgs/pkgs/applications/networking/n8n/node-composition.nix
new file mode 100644
index 000000000000..d9c0daef7834
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/n8n/node-composition.nix
@@ -0,0 +1,17 @@
+# This file has been generated by node2nix 1.11.1. Do not edit!
+
+{pkgs ? import <nixpkgs> {
+    inherit system;
+  }, system ? builtins.currentSystem, nodejs ? pkgs."nodejs_18"}:
+
+let
+  nodeEnv = import ./node-env.nix {
+    inherit (pkgs) stdenv lib python2 runCommand writeTextFile writeShellScript;
+    inherit pkgs nodejs;
+    libtool = if pkgs.stdenv.isDarwin then pkgs.darwin.cctools else null;
+  };
+in
+import ./node-packages.nix {
+  inherit (pkgs) fetchurl nix-gitignore stdenv lib fetchgit;
+  inherit nodeEnv;
+}
diff --git a/nixpkgs/pkgs/applications/networking/n8n/node-env.nix b/nixpkgs/pkgs/applications/networking/n8n/node-env.nix
new file mode 100644
index 000000000000..bc1e36628ac8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/n8n/node-env.nix
@@ -0,0 +1,689 @@
+# This file originates from node2nix
+
+{lib, stdenv, nodejs, python2, pkgs, libtool, runCommand, writeTextFile, writeShellScript}:
+
+let
+  # Workaround to cope with utillinux in Nixpkgs 20.09 and util-linux in Nixpkgs master
+  utillinux = if pkgs ? utillinux then pkgs.utillinux else pkgs.util-linux;
+
+  python = if nodejs ? python then nodejs.python else python2;
+
+  # Create a tar wrapper that filters all the 'Ignoring unknown extended header keyword' noise
+  tarWrapper = runCommand "tarWrapper" {} ''
+    mkdir -p $out/bin
+
+    cat > $out/bin/tar <<EOF
+    #! ${stdenv.shell} -e
+    $(type -p tar) "\$@" --warning=no-unknown-keyword --delay-directory-restore
+    EOF
+
+    chmod +x $out/bin/tar
+  '';
+
+  # Function that generates a TGZ file from a NPM project
+  buildNodeSourceDist =
+    { name, version, src, ... }:
+
+    stdenv.mkDerivation {
+      name = "node-tarball-${name}-${version}";
+      inherit src;
+      buildInputs = [ nodejs ];
+      buildPhase = ''
+        export HOME=$TMPDIR
+        tgzFile=$(npm pack | tail -n 1) # Hooks to the pack command will add output (https://docs.npmjs.com/misc/scripts)
+      '';
+      installPhase = ''
+        mkdir -p $out/tarballs
+        mv $tgzFile $out/tarballs
+        mkdir -p $out/nix-support
+        echo "file source-dist $out/tarballs/$tgzFile" >> $out/nix-support/hydra-build-products
+      '';
+    };
+
+  # Common shell logic
+  installPackage = writeShellScript "install-package" ''
+    installPackage() {
+      local packageName=$1 src=$2
+
+      local strippedName
+
+      local DIR=$PWD
+      cd $TMPDIR
+
+      unpackFile $src
+
+      # Make the base dir in which the target dependency resides first
+      mkdir -p "$(dirname "$DIR/$packageName")"
+
+      if [ -f "$src" ]
+      then
+          # Figure out what directory has been unpacked
+          packageDir="$(find . -maxdepth 1 -type d | tail -1)"
+
+          # Restore write permissions to make building work
+          find "$packageDir" -type d -exec chmod u+x {} \;
+          chmod -R u+w "$packageDir"
+
+          # Move the extracted tarball into the output folder
+          mv "$packageDir" "$DIR/$packageName"
+      elif [ -d "$src" ]
+      then
+          # Get a stripped name (without hash) of the source directory.
+          # On old nixpkgs it's already set internally.
+          if [ -z "$strippedName" ]
+          then
+              strippedName="$(stripHash $src)"
+          fi
+
+          # Restore write permissions to make building work
+          chmod -R u+w "$strippedName"
+
+          # Move the extracted directory into the output folder
+          mv "$strippedName" "$DIR/$packageName"
+      fi
+
+      # Change to the package directory to install dependencies
+      cd "$DIR/$packageName"
+    }
+  '';
+
+  # Bundle the dependencies of the package
+  #
+  # Only include dependencies if they don't exist. They may also be bundled in the package.
+  includeDependencies = {dependencies}:
+    lib.optionalString (dependencies != []) (
+      ''
+        mkdir -p node_modules
+        cd node_modules
+      ''
+      + (lib.concatMapStrings (dependency:
+        ''
+          if [ ! -e "${dependency.packageName}" ]; then
+              ${composePackage dependency}
+          fi
+        ''
+      ) dependencies)
+      + ''
+        cd ..
+      ''
+    );
+
+  # Recursively composes the dependencies of a package
+  composePackage = { name, packageName, src, dependencies ? [], ... }@args:
+    builtins.addErrorContext "while evaluating node package '${packageName}'" ''
+      installPackage "${packageName}" "${src}"
+      ${includeDependencies { inherit dependencies; }}
+      cd ..
+      ${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
+    '';
+
+  pinpointDependencies = {dependencies, production}:
+    let
+      pinpointDependenciesFromPackageJSON = writeTextFile {
+        name = "pinpointDependencies.js";
+        text = ''
+          var fs = require('fs');
+          var path = require('path');
+
+          function resolveDependencyVersion(location, name) {
+              if(location == process.env['NIX_STORE']) {
+                  return null;
+              } else {
+                  var dependencyPackageJSON = path.join(location, "node_modules", name, "package.json");
+
+                  if(fs.existsSync(dependencyPackageJSON)) {
+                      var dependencyPackageObj = JSON.parse(fs.readFileSync(dependencyPackageJSON));
+
+                      if(dependencyPackageObj.name == name) {
+                          return dependencyPackageObj.version;
+                      }
+                  } else {
+                      return resolveDependencyVersion(path.resolve(location, ".."), name);
+                  }
+              }
+          }
+
+          function replaceDependencies(dependencies) {
+              if(typeof dependencies == "object" && dependencies !== null) {
+                  for(var dependency in dependencies) {
+                      var resolvedVersion = resolveDependencyVersion(process.cwd(), dependency);
+
+                      if(resolvedVersion === null) {
+                          process.stderr.write("WARNING: cannot pinpoint dependency: "+dependency+", context: "+process.cwd()+"\n");
+                      } else {
+                          dependencies[dependency] = resolvedVersion;
+                      }
+                  }
+              }
+          }
+
+          /* Read the package.json configuration */
+          var packageObj = JSON.parse(fs.readFileSync('./package.json'));
+
+          /* Pinpoint all dependencies */
+          replaceDependencies(packageObj.dependencies);
+          if(process.argv[2] == "development") {
+              replaceDependencies(packageObj.devDependencies);
+          }
+          else {
+              packageObj.devDependencies = {};
+          }
+          replaceDependencies(packageObj.optionalDependencies);
+          replaceDependencies(packageObj.peerDependencies);
+
+          /* Write the fixed package.json file */
+          fs.writeFileSync("package.json", JSON.stringify(packageObj, null, 2));
+        '';
+      };
+    in
+    ''
+      node ${pinpointDependenciesFromPackageJSON} ${if production then "production" else "development"}
+
+      ${lib.optionalString (dependencies != [])
+        ''
+          if [ -d node_modules ]
+          then
+              cd node_modules
+              ${lib.concatMapStrings (dependency: pinpointDependenciesOfPackage dependency) dependencies}
+              cd ..
+          fi
+        ''}
+    '';
+
+  # Recursively traverses all dependencies of a package and pinpoints all
+  # dependencies in the package.json file to the versions that are actually
+  # being used.
+
+  pinpointDependenciesOfPackage = { packageName, dependencies ? [], production ? true, ... }@args:
+    ''
+      if [ -d "${packageName}" ]
+      then
+          cd "${packageName}"
+          ${pinpointDependencies { inherit dependencies production; }}
+          cd ..
+          ${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
+      fi
+    '';
+
+  # Extract the Node.js source code which is used to compile packages with
+  # native bindings
+  nodeSources = runCommand "node-sources" {} ''
+    tar --no-same-owner --no-same-permissions -xf ${nodejs.src}
+    mv node-* $out
+  '';
+
+  # Script that adds _integrity fields to all package.json files to prevent NPM from consulting the cache (that is empty)
+  addIntegrityFieldsScript = writeTextFile {
+    name = "addintegrityfields.js";
+    text = ''
+      var fs = require('fs');
+      var path = require('path');
+
+      function augmentDependencies(baseDir, dependencies) {
+          for(var dependencyName in dependencies) {
+              var dependency = dependencies[dependencyName];
+
+              // Open package.json and augment metadata fields
+              var packageJSONDir = path.join(baseDir, "node_modules", dependencyName);
+              var packageJSONPath = path.join(packageJSONDir, "package.json");
+
+              if(fs.existsSync(packageJSONPath)) { // Only augment packages that exist. Sometimes we may have production installs in which development dependencies can be ignored
+                  console.log("Adding metadata fields to: "+packageJSONPath);
+                  var packageObj = JSON.parse(fs.readFileSync(packageJSONPath));
+
+                  if(dependency.integrity) {
+                      packageObj["_integrity"] = dependency.integrity;
+                  } else {
+                      packageObj["_integrity"] = "sha1-000000000000000000000000000="; // When no _integrity string has been provided (e.g. by Git dependencies), add a dummy one. It does not seem to harm and it bypasses downloads.
+                  }
+
+                  if(dependency.resolved) {
+                      packageObj["_resolved"] = dependency.resolved; // Adopt the resolved property if one has been provided
+                  } else {
+                      packageObj["_resolved"] = dependency.version; // Set the resolved version to the version identifier. This prevents NPM from cloning Git repositories.
+                  }
+
+                  if(dependency.from !== undefined) { // Adopt from property if one has been provided
+                      packageObj["_from"] = dependency.from;
+                  }
+
+                  fs.writeFileSync(packageJSONPath, JSON.stringify(packageObj, null, 2));
+              }
+
+              // Augment transitive dependencies
+              if(dependency.dependencies !== undefined) {
+                  augmentDependencies(packageJSONDir, dependency.dependencies);
+              }
+          }
+      }
+
+      if(fs.existsSync("./package-lock.json")) {
+          var packageLock = JSON.parse(fs.readFileSync("./package-lock.json"));
+
+          if(![1, 2].includes(packageLock.lockfileVersion)) {
+            process.stderr.write("Sorry, I only understand lock file versions 1 and 2!\n");
+            process.exit(1);
+          }
+
+          if(packageLock.dependencies !== undefined) {
+              augmentDependencies(".", packageLock.dependencies);
+          }
+      }
+    '';
+  };
+
+  # Reconstructs a package-lock file from the node_modules/ folder structure and package.json files with dummy sha1 hashes
+  reconstructPackageLock = writeTextFile {
+    name = "reconstructpackagelock.js";
+    text = ''
+      var fs = require('fs');
+      var path = require('path');
+
+      var packageObj = JSON.parse(fs.readFileSync("package.json"));
+
+      var lockObj = {
+          name: packageObj.name,
+          version: packageObj.version,
+          lockfileVersion: 2,
+          requires: true,
+          packages: {
+              "": {
+                  name: packageObj.name,
+                  version: packageObj.version,
+                  license: packageObj.license,
+                  bin: packageObj.bin,
+                  dependencies: packageObj.dependencies,
+                  engines: packageObj.engines,
+                  optionalDependencies: packageObj.optionalDependencies
+              }
+          },
+          dependencies: {}
+      };
+
+      function augmentPackageJSON(filePath, packages, dependencies) {
+          var packageJSON = path.join(filePath, "package.json");
+          if(fs.existsSync(packageJSON)) {
+              var packageObj = JSON.parse(fs.readFileSync(packageJSON));
+              packages[filePath] = {
+                  version: packageObj.version,
+                  integrity: "sha1-000000000000000000000000000=",
+                  dependencies: packageObj.dependencies,
+                  engines: packageObj.engines,
+                  optionalDependencies: packageObj.optionalDependencies
+              };
+              dependencies[packageObj.name] = {
+                  version: packageObj.version,
+                  integrity: "sha1-000000000000000000000000000=",
+                  dependencies: {}
+              };
+              processDependencies(path.join(filePath, "node_modules"), packages, dependencies[packageObj.name].dependencies);
+          }
+      }
+
+      function processDependencies(dir, packages, dependencies) {
+          if(fs.existsSync(dir)) {
+              var files = fs.readdirSync(dir);
+
+              files.forEach(function(entry) {
+                  var filePath = path.join(dir, entry);
+                  var stats = fs.statSync(filePath);
+
+                  if(stats.isDirectory()) {
+                      if(entry.substr(0, 1) == "@") {
+                          // When we encounter a namespace folder, augment all packages belonging to the scope
+                          var pkgFiles = fs.readdirSync(filePath);
+
+                          pkgFiles.forEach(function(entry) {
+                              if(stats.isDirectory()) {
+                                  var pkgFilePath = path.join(filePath, entry);
+                                  augmentPackageJSON(pkgFilePath, packages, dependencies);
+                              }
+                          });
+                      } else {
+                          augmentPackageJSON(filePath, packages, dependencies);
+                      }
+                  }
+              });
+          }
+      }
+
+      processDependencies("node_modules", lockObj.packages, lockObj.dependencies);
+
+      fs.writeFileSync("package-lock.json", JSON.stringify(lockObj, null, 2));
+    '';
+  };
+
+  # Script that links bins defined in package.json to the node_modules bin directory
+  # NPM does not do this for top-level packages itself anymore as of v7
+  linkBinsScript = writeTextFile {
+    name = "linkbins.js";
+    text = ''
+      var fs = require('fs');
+      var path = require('path');
+
+      var packageObj = JSON.parse(fs.readFileSync("package.json"));
+
+      var nodeModules = Array(packageObj.name.split("/").length).fill("..").join(path.sep);
+
+      if(packageObj.bin !== undefined) {
+          fs.mkdirSync(path.join(nodeModules, ".bin"))
+
+          if(typeof packageObj.bin == "object") {
+              Object.keys(packageObj.bin).forEach(function(exe) {
+                  if(fs.existsSync(packageObj.bin[exe])) {
+                      console.log("linking bin '" + exe + "'");
+                      fs.symlinkSync(
+                          path.join("..", packageObj.name, packageObj.bin[exe]),
+                          path.join(nodeModules, ".bin", exe)
+                      );
+                  }
+                  else {
+                      console.log("skipping non-existent bin '" + exe + "'");
+                  }
+              })
+          }
+          else {
+              if(fs.existsSync(packageObj.bin)) {
+                  console.log("linking bin '" + packageObj.bin + "'");
+                  fs.symlinkSync(
+                      path.join("..", packageObj.name, packageObj.bin),
+                      path.join(nodeModules, ".bin", packageObj.name.split("/").pop())
+                  );
+              }
+              else {
+                  console.log("skipping non-existent bin '" + packageObj.bin + "'");
+              }
+          }
+      }
+      else if(packageObj.directories !== undefined && packageObj.directories.bin !== undefined) {
+          fs.mkdirSync(path.join(nodeModules, ".bin"))
+
+          fs.readdirSync(packageObj.directories.bin).forEach(function(exe) {
+              if(fs.existsSync(path.join(packageObj.directories.bin, exe))) {
+                  console.log("linking bin '" + exe + "'");
+                  fs.symlinkSync(
+                      path.join("..", packageObj.name, packageObj.directories.bin, exe),
+                      path.join(nodeModules, ".bin", exe)
+                  );
+              }
+              else {
+                  console.log("skipping non-existent bin '" + exe + "'");
+              }
+          })
+      }
+    '';
+  };
+
+  prepareAndInvokeNPM = {packageName, bypassCache, reconstructLock, npmFlags, production}:
+    let
+      forceOfflineFlag = if bypassCache then "--offline" else "--registry http://www.example.com";
+    in
+    ''
+        # Pinpoint the versions of all dependencies to the ones that are actually being used
+        echo "pinpointing versions of dependencies..."
+        source $pinpointDependenciesScriptPath
+
+        # Patch the shebangs of the bundled modules to prevent them from
+        # calling executables outside the Nix store as much as possible
+        patchShebangs .
+
+        # Deploy the Node.js package by running npm install. Since the
+        # dependencies have been provided already by ourselves, it should not
+        # attempt to install them again, which is good, because we want to make
+        # it Nix's responsibility. If it needs to install any dependencies
+        # anyway (e.g. because the dependency parameters are
+        # incomplete/incorrect), it fails.
+        #
+        # The other responsibilities of NPM are kept -- version checks, build
+        # steps, postprocessing etc.
+
+        export HOME=$TMPDIR
+        cd "${packageName}"
+        runHook preRebuild
+
+        ${lib.optionalString bypassCache ''
+          ${lib.optionalString reconstructLock ''
+            if [ -f package-lock.json ]
+            then
+                echo "WARNING: Reconstruct lock option enabled, but a lock file already exists!"
+                echo "This will most likely result in version mismatches! We will remove the lock file and regenerate it!"
+                rm package-lock.json
+            else
+                echo "No package-lock.json file found, reconstructing..."
+            fi
+
+            node ${reconstructPackageLock}
+          ''}
+
+          node ${addIntegrityFieldsScript}
+        ''}
+
+        npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${lib.optionalString production "--production"} rebuild
+
+        runHook postRebuild
+
+        if [ "''${dontNpmInstall-}" != "1" ]
+        then
+            # NPM tries to download packages even when they already exist if npm-shrinkwrap is used.
+            rm -f npm-shrinkwrap.json
+
+            npm ${forceOfflineFlag} --nodedir=${nodeSources} --no-bin-links --ignore-scripts ${npmFlags} ${lib.optionalString production "--production"} install
+        fi
+
+        # Link executables defined in package.json
+        node ${linkBinsScript}
+    '';
+
+  # Builds and composes an NPM package including all its dependencies
+  buildNodePackage =
+    { name
+    , packageName
+    , version ? null
+    , dependencies ? []
+    , buildInputs ? []
+    , production ? true
+    , npmFlags ? ""
+    , dontNpmInstall ? false
+    , bypassCache ? false
+    , reconstructLock ? false
+    , preRebuild ? ""
+    , dontStrip ? true
+    , unpackPhase ? "true"
+    , buildPhase ? "true"
+    , meta ? {}
+    , ... }@args:
+
+    let
+      extraArgs = removeAttrs args [ "name" "dependencies" "buildInputs" "dontStrip" "dontNpmInstall" "preRebuild" "unpackPhase" "buildPhase" "meta" ];
+    in
+    stdenv.mkDerivation ({
+      name = "${name}${if version == null then "" else "-${version}"}";
+      buildInputs = [ tarWrapper python nodejs ]
+        ++ lib.optional (stdenv.isLinux) utillinux
+        ++ lib.optional (stdenv.isDarwin) libtool
+        ++ buildInputs;
+
+      inherit nodejs;
+
+      inherit dontStrip; # Stripping may fail a build for some package deployments
+      inherit dontNpmInstall preRebuild unpackPhase buildPhase;
+
+      compositionScript = composePackage args;
+      pinpointDependenciesScript = pinpointDependenciesOfPackage args;
+
+      passAsFile = [ "compositionScript" "pinpointDependenciesScript" ];
+
+      installPhase = ''
+        source ${installPackage}
+
+        # Create and enter a root node_modules/ folder
+        mkdir -p $out/lib/node_modules
+        cd $out/lib/node_modules
+
+        # Compose the package and all its dependencies
+        source $compositionScriptPath
+
+        ${prepareAndInvokeNPM { inherit packageName bypassCache reconstructLock npmFlags production; }}
+
+        # Create symlink to the deployed executable folder, if applicable
+        if [ -d "$out/lib/node_modules/.bin" ]
+        then
+            ln -s $out/lib/node_modules/.bin $out/bin
+
+            # Fixup all executables
+            ls $out/bin/* | while read i
+            do
+                file="$(readlink -f "$i")"
+                chmod u+rwx "$file"
+                if isScript "$file"
+                then
+                    sed -i 's/\r$//' "$file"  # convert crlf to lf
+                fi
+            done
+        fi
+
+        # Create symlinks to the deployed manual page folders, if applicable
+        if [ -d "$out/lib/node_modules/${packageName}/man" ]
+        then
+            mkdir -p $out/share
+            for dir in "$out/lib/node_modules/${packageName}/man/"*
+            do
+                mkdir -p $out/share/man/$(basename "$dir")
+                for page in "$dir"/*
+                do
+                    ln -s $page $out/share/man/$(basename "$dir")
+                done
+            done
+        fi
+
+        # Run post install hook, if provided
+        runHook postInstall
+      '';
+
+      meta = {
+        # default to Node.js' platforms
+        platforms = nodejs.meta.platforms;
+      } // meta;
+    } // extraArgs);
+
+  # Builds a node environment (a node_modules folder and a set of binaries)
+  buildNodeDependencies =
+    { name
+    , packageName
+    , version ? null
+    , src
+    , dependencies ? []
+    , buildInputs ? []
+    , production ? true
+    , npmFlags ? ""
+    , dontNpmInstall ? false
+    , bypassCache ? false
+    , reconstructLock ? false
+    , dontStrip ? true
+    , unpackPhase ? "true"
+    , buildPhase ? "true"
+    , ... }@args:
+
+    let
+      extraArgs = removeAttrs args [ "name" "dependencies" "buildInputs" ];
+    in
+      stdenv.mkDerivation ({
+        name = "node-dependencies-${name}${if version == null then "" else "-${version}"}";
+
+        buildInputs = [ tarWrapper python nodejs ]
+          ++ lib.optional (stdenv.isLinux) utillinux
+          ++ lib.optional (stdenv.isDarwin) libtool
+          ++ buildInputs;
+
+        inherit dontStrip; # Stripping may fail a build for some package deployments
+        inherit dontNpmInstall unpackPhase buildPhase;
+
+        includeScript = includeDependencies { inherit dependencies; };
+        pinpointDependenciesScript = pinpointDependenciesOfPackage args;
+
+        passAsFile = [ "includeScript" "pinpointDependenciesScript" ];
+
+        installPhase = ''
+          source ${installPackage}
+
+          mkdir -p $out/${packageName}
+          cd $out/${packageName}
+
+          source $includeScriptPath
+
+          # Create fake package.json to make the npm commands work properly
+          cp ${src}/package.json .
+          chmod 644 package.json
+          ${lib.optionalString bypassCache ''
+            if [ -f ${src}/package-lock.json ]
+            then
+                cp ${src}/package-lock.json .
+                chmod 644 package-lock.json
+            fi
+          ''}
+
+          # Go to the parent folder to make sure that all packages are pinpointed
+          cd ..
+          ${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
+
+          ${prepareAndInvokeNPM { inherit packageName bypassCache reconstructLock npmFlags production; }}
+
+          # Expose the executables that were installed
+          cd ..
+          ${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
+
+          mv ${packageName} lib
+          ln -s $out/lib/node_modules/.bin $out/bin
+        '';
+      } // extraArgs);
+
+  # Builds a development shell
+  buildNodeShell =
+    { name
+    , packageName
+    , version ? null
+    , src
+    , dependencies ? []
+    , buildInputs ? []
+    , production ? true
+    , npmFlags ? ""
+    , dontNpmInstall ? false
+    , bypassCache ? false
+    , reconstructLock ? false
+    , dontStrip ? true
+    , unpackPhase ? "true"
+    , buildPhase ? "true"
+    , ... }@args:
+
+    let
+      nodeDependencies = buildNodeDependencies args;
+      extraArgs = removeAttrs args [ "name" "dependencies" "buildInputs" "dontStrip" "dontNpmInstall" "unpackPhase" "buildPhase" ];
+    in
+    stdenv.mkDerivation ({
+      name = "node-shell-${name}${if version == null then "" else "-${version}"}";
+
+      buildInputs = [ python nodejs ] ++ lib.optional (stdenv.isLinux) utillinux ++ buildInputs;
+      buildCommand = ''
+        mkdir -p $out/bin
+        cat > $out/bin/shell <<EOF
+        #! ${stdenv.shell} -e
+        $shellHook
+        exec ${stdenv.shell}
+        EOF
+        chmod +x $out/bin/shell
+      '';
+
+      # Provide the dependencies in a development shell through the NODE_PATH environment variable
+      inherit nodeDependencies;
+      shellHook = lib.optionalString (dependencies != []) ''
+        export NODE_PATH=${nodeDependencies}/lib/node_modules
+        export PATH="${nodeDependencies}/bin:$PATH"
+      '';
+    } // extraArgs);
+in
+{
+  buildNodeSourceDist = lib.makeOverridable buildNodeSourceDist;
+  buildNodePackage = lib.makeOverridable buildNodePackage;
+  buildNodeDependencies = lib.makeOverridable buildNodeDependencies;
+  buildNodeShell = lib.makeOverridable buildNodeShell;
+}
diff --git a/nixpkgs/pkgs/applications/networking/n8n/node-packages.nix b/nixpkgs/pkgs/applications/networking/n8n/node-packages.nix
new file mode 100644
index 000000000000..326acae85e87
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/n8n/node-packages.nix
@@ -0,0 +1,14919 @@
+# This file has been generated by node2nix 1.11.1. Do not edit!
+
+{nodeEnv, fetchurl, fetchgit, nix-gitignore, stdenv, lib, globalBuildInputs ? []}:
+
+let
+  sources = {
+    "@acuminous/bitsyntax-0.1.2" = {
+      name = "_at_acuminous_slash_bitsyntax";
+      packageName = "@acuminous/bitsyntax";
+      version = "0.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@acuminous/bitsyntax/-/bitsyntax-0.1.2.tgz";
+        sha512 = "29lUK80d1muEQqiUsSo+3A0yP6CdspgC95EnKBMi22Xlwt79i/En4Vr67+cXhU+cZjbti3TgGGC5wy1stIywVQ==";
+      };
+    };
+    "@apidevtools/json-schema-ref-parser-9.0.9" = {
+      name = "_at_apidevtools_slash_json-schema-ref-parser";
+      packageName = "@apidevtools/json-schema-ref-parser";
+      version = "9.0.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz";
+        sha512 = "GBD2Le9w2+lVFoc4vswGI/TjkNIZSVp7+9xPf+X3uidBfWnAeUWmquteSyt0+VCrhNMWj/FTABISQrD3Z/YA+w==";
+      };
+    };
+    "@authenio/xml-encryption-2.0.2" = {
+      name = "_at_authenio_slash_xml-encryption";
+      packageName = "@authenio/xml-encryption";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@authenio/xml-encryption/-/xml-encryption-2.0.2.tgz";
+        sha512 = "cTlrKttbrRHEw3W+0/I609A2Matj5JQaRvfLtEIGZvlN0RaPi+3ANsMeqAyCAVlH/lUIW2tmtBlSMni74lcXeg==";
+      };
+    };
+    "@aws-crypto/crc32-3.0.0" = {
+      name = "_at_aws-crypto_slash_crc32";
+      packageName = "@aws-crypto/crc32";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz";
+        sha512 = "IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==";
+      };
+    };
+    "@aws-crypto/ie11-detection-3.0.0" = {
+      name = "_at_aws-crypto_slash_ie11-detection";
+      packageName = "@aws-crypto/ie11-detection";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz";
+        sha512 = "341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==";
+      };
+    };
+    "@aws-crypto/sha256-browser-3.0.0" = {
+      name = "_at_aws-crypto_slash_sha256-browser";
+      packageName = "@aws-crypto/sha256-browser";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz";
+        sha512 = "8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==";
+      };
+    };
+    "@aws-crypto/sha256-js-3.0.0" = {
+      name = "_at_aws-crypto_slash_sha256-js";
+      packageName = "@aws-crypto/sha256-js";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz";
+        sha512 = "PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==";
+      };
+    };
+    "@aws-crypto/supports-web-crypto-3.0.0" = {
+      name = "_at_aws-crypto_slash_supports-web-crypto";
+      packageName = "@aws-crypto/supports-web-crypto";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz";
+        sha512 = "06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==";
+      };
+    };
+    "@aws-crypto/util-3.0.0" = {
+      name = "_at_aws-crypto_slash_util";
+      packageName = "@aws-crypto/util";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz";
+        sha512 = "2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==";
+      };
+    };
+    "@aws-sdk/client-cognito-identity-3.409.0" = {
+      name = "_at_aws-sdk_slash_client-cognito-identity";
+      packageName = "@aws-sdk/client-cognito-identity";
+      version = "3.409.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.409.0.tgz";
+        sha512 = "vUThhqsTL39s4Gbtldher8EuaahWkVh9M5BrfIlIoDnO2dTA/NXbAA3tP7Zj+mw1PAjLZdEqtNmIeZFVGs+0nw==";
+      };
+    };
+    "@aws-sdk/client-sso-3.409.0" = {
+      name = "_at_aws-sdk_slash_client-sso";
+      packageName = "@aws-sdk/client-sso";
+      version = "3.409.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.409.0.tgz";
+        sha512 = "vlXcIzcmUhObuEJ6q3lsp1ZHeDeD9bUrG3dmdSTeII4U6A9imgvaXONWI9GFEUsgzCrrCxtCqBX2RqMfZDhylw==";
+      };
+    };
+    "@aws-sdk/client-sts-3.409.0" = {
+      name = "_at_aws-sdk_slash_client-sts";
+      packageName = "@aws-sdk/client-sts";
+      version = "3.409.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.409.0.tgz";
+        sha512 = "yNL9zYWDVIOWZhIlsy2tiHetSYvio5ZVJ3nvR4xWPTwqOQveZx/K0PTK+nh6T6w5R3w5IOSKvd+vPCpY4bGx8Q==";
+      };
+    };
+    "@aws-sdk/credential-provider-cognito-identity-3.409.0" = {
+      name = "_at_aws-sdk_slash_credential-provider-cognito-identity";
+      packageName = "@aws-sdk/credential-provider-cognito-identity";
+      version = "3.409.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.409.0.tgz";
+        sha512 = "8MLPJ8YjX+iAhsyeUah6388EHm0aeLPyn+bz5M/PwyDkX8UuuaM3VzH0dHoMdqX+iOCIynh/WRm+qYizrAscCA==";
+      };
+    };
+    "@aws-sdk/credential-provider-env-3.408.0" = {
+      name = "_at_aws-sdk_slash_credential-provider-env";
+      packageName = "@aws-sdk/credential-provider-env";
+      version = "3.408.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.408.0.tgz";
+        sha512 = "GCpgHEHxRTzKaMkwDC2gLb3xlD+ZxhKPUJ1DVcO7I9E3eCGJsYVedIi0/2XE+NP+HVoy8LyW2qH8QQWh64JKow==";
+      };
+    };
+    "@aws-sdk/credential-provider-ini-3.409.0" = {
+      name = "_at_aws-sdk_slash_credential-provider-ini";
+      packageName = "@aws-sdk/credential-provider-ini";
+      version = "3.409.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.409.0.tgz";
+        sha512 = "Z7hb0Kj0FuqD5HimDrtt0LRjKBHA5pvLcTYYdVorJovaBxEvfDpISSDVRIUmvhMGAlv7XezbvqESOU5cn0Gpzw==";
+      };
+    };
+    "@aws-sdk/credential-provider-node-3.409.0" = {
+      name = "_at_aws-sdk_slash_credential-provider-node";
+      packageName = "@aws-sdk/credential-provider-node";
+      version = "3.409.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.409.0.tgz";
+        sha512 = "kXmfBVYnHoEAACo6zskEryDSgMSo1QYiv6P8n6Go/RsJHe4Ec+YtrOMLg3hTOptiIGHOTWZ1ANaU/IfIxmqumA==";
+      };
+    };
+    "@aws-sdk/credential-provider-process-3.408.0" = {
+      name = "_at_aws-sdk_slash_credential-provider-process";
+      packageName = "@aws-sdk/credential-provider-process";
+      version = "3.408.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.408.0.tgz";
+        sha512 = "qCTf9tr6+I2s3+v5zP4YRQQrGlYw/jyZ7u/k6bGshhlvgwGPfjNuHrM8uK/W1kv4ng1myxaL1/tAY6RVVdXz4Q==";
+      };
+    };
+    "@aws-sdk/credential-provider-sso-3.409.0" = {
+      name = "_at_aws-sdk_slash_credential-provider-sso";
+      packageName = "@aws-sdk/credential-provider-sso";
+      version = "3.409.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.409.0.tgz";
+        sha512 = "Bh0ykbDpnUK4W8sQMEpRA/TlZxwpPLl4aU8eBLlbEcTL2M8or2nr0dQzOOvabZo8hbaPM6yfOl+vLTvWGs75zg==";
+      };
+    };
+    "@aws-sdk/credential-provider-web-identity-3.408.0" = {
+      name = "_at_aws-sdk_slash_credential-provider-web-identity";
+      packageName = "@aws-sdk/credential-provider-web-identity";
+      version = "3.408.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.408.0.tgz";
+        sha512 = "5FbDPF/zY/1t6k1zRI/HnrxcH2v7SwsEYu2SThI2qbzaP/K7MTnTanV5vNFcdQOpuQ7x3PrzTlH3AWZueCr3Vw==";
+      };
+    };
+    "@aws-sdk/credential-providers-3.409.0" = {
+      name = "_at_aws-sdk_slash_credential-providers";
+      packageName = "@aws-sdk/credential-providers";
+      version = "3.409.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.409.0.tgz";
+        sha512 = "eaQChfbLnVs1ctC04dIdQPh5FtJD9v8R3xbVttKowdhUUV18rTHM5sVJuL5DGbHTXxmZSiURsoVCujrc/kaEiA==";
+      };
+    };
+    "@aws-sdk/middleware-host-header-3.408.0" = {
+      name = "_at_aws-sdk_slash_middleware-host-header";
+      packageName = "@aws-sdk/middleware-host-header";
+      version = "3.408.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.408.0.tgz";
+        sha512 = "eofCXuSZ+ntbLzeCRdHzraXzgWqAplXU7W2qFFVC4O9lZBhADwNPI8n8x98TH0mftnmvZxh5Bo5U8WvEolIDkw==";
+      };
+    };
+    "@aws-sdk/middleware-logger-3.408.0" = {
+      name = "_at_aws-sdk_slash_middleware-logger";
+      packageName = "@aws-sdk/middleware-logger";
+      version = "3.408.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.408.0.tgz";
+        sha512 = "otwXPCubsGRFv8Hb6nKw6Vvnu4dC8CcPk05buStj42nF8QdjWrKGb2rDCvLph5lr576LF5HN+Y2moyOi7z/I7g==";
+      };
+    };
+    "@aws-sdk/middleware-recursion-detection-3.408.0" = {
+      name = "_at_aws-sdk_slash_middleware-recursion-detection";
+      packageName = "@aws-sdk/middleware-recursion-detection";
+      version = "3.408.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.408.0.tgz";
+        sha512 = "QfZwmX5z0IRC2c8pBi9VozSqbJw19V5oxyykSTqdjGe3CG3yNujXObV6xQesK67CWSnPb9wDgVGKUoYuIXwOxw==";
+      };
+    };
+    "@aws-sdk/middleware-sdk-sts-3.408.0" = {
+      name = "_at_aws-sdk_slash_middleware-sdk-sts";
+      packageName = "@aws-sdk/middleware-sdk-sts";
+      version = "3.408.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.408.0.tgz";
+        sha512 = "dIO9BTX049P2PwaeAK2lxJeA2rZi9/bWzMP1GIE60VrMDHmN5Ljvh1lLActECLAqNQIqN5Ub0bKV2tC/jMn+CA==";
+      };
+    };
+    "@aws-sdk/middleware-signing-3.408.0" = {
+      name = "_at_aws-sdk_slash_middleware-signing";
+      packageName = "@aws-sdk/middleware-signing";
+      version = "3.408.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.408.0.tgz";
+        sha512 = "flLiLKATJ4NLcLb7lPojyQ6NvLSyQ3axqIClqwMRnhSRxvREB7OgBKwmPecSl0I5JxsNEqo+mjARdMjUHadgWQ==";
+      };
+    };
+    "@aws-sdk/middleware-user-agent-3.408.0" = {
+      name = "_at_aws-sdk_slash_middleware-user-agent";
+      packageName = "@aws-sdk/middleware-user-agent";
+      version = "3.408.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.408.0.tgz";
+        sha512 = "UvlKri8/Mgf5W+tFU6ZJ65fC6HljcysIqfRFts/8Wurl322IS1I4j+pyjV2P6eK1054bzynfi3Trv+tRYHtVcA==";
+      };
+    };
+    "@aws-sdk/token-providers-3.408.0" = {
+      name = "_at_aws-sdk_slash_token-providers";
+      packageName = "@aws-sdk/token-providers";
+      version = "3.408.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.408.0.tgz";
+        sha512 = "D//BjUrVtDzDdCz1mRdZZSAc822fh75Ssq46smeS6S6NKq3vJeHhfrQJMyVU1GclXu1tn9AwykaQW5Jwb5im+g==";
+      };
+    };
+    "@aws-sdk/types-3.408.0" = {
+      name = "_at_aws-sdk_slash_types";
+      packageName = "@aws-sdk/types";
+      version = "3.408.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@aws-sdk/types/-/types-3.408.0.tgz";
+        sha512 = "sIsR5224xWQTW7O6h4V0S7DMWs4bK4DCunwOo7Avpq7ZVmH2YyLTs0n4NGL186j8xTosycF1ACQgpM48SLIvaA==";
+      };
+    };
+    "@aws-sdk/util-endpoints-3.408.0" = {
+      name = "_at_aws-sdk_slash_util-endpoints";
+      packageName = "@aws-sdk/util-endpoints";
+      version = "3.408.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.408.0.tgz";
+        sha512 = "N1D5cKEkCqf5Q7IF/pI9kfcNrT+/5ctZ6cQo4Ex6xaOcnUzdOZcXdPqaMRZVZRn8enjK2SpoLlRpXGISOugPaw==";
+      };
+    };
+    "@aws-sdk/util-locate-window-3.310.0" = {
+      name = "_at_aws-sdk_slash_util-locate-window";
+      packageName = "@aws-sdk/util-locate-window";
+      version = "3.310.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz";
+        sha512 = "qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==";
+      };
+    };
+    "@aws-sdk/util-user-agent-browser-3.408.0" = {
+      name = "_at_aws-sdk_slash_util-user-agent-browser";
+      packageName = "@aws-sdk/util-user-agent-browser";
+      version = "3.408.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.408.0.tgz";
+        sha512 = "wOVjDprG5h6kM8aJZk/tRX/RgxNxr73d6kIsUePlAgil13q62M9lcFMcIXduqtDsa1B6FfVB2wx/pyUuOZri5g==";
+      };
+    };
+    "@aws-sdk/util-user-agent-node-3.408.0" = {
+      name = "_at_aws-sdk_slash_util-user-agent-node";
+      packageName = "@aws-sdk/util-user-agent-node";
+      version = "3.408.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.408.0.tgz";
+        sha512 = "BzMFV+cIXrtfcfJk3GpXnkANFkzZisvAtD306TMgIscn5FF26K1jD5DU+h5Q5WMq7gx+oXh9kJ3Lu3hi7hahKQ==";
+      };
+    };
+    "@aws-sdk/util-utf8-browser-3.259.0" = {
+      name = "_at_aws-sdk_slash_util-utf8-browser";
+      packageName = "@aws-sdk/util-utf8-browser";
+      version = "3.259.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz";
+        sha512 = "UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==";
+      };
+    };
+    "@azure/abort-controller-1.1.0" = {
+      name = "_at_azure_slash_abort-controller";
+      packageName = "@azure/abort-controller";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.1.0.tgz";
+        sha512 = "TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==";
+      };
+    };
+    "@azure/core-auth-1.5.0" = {
+      name = "_at_azure_slash_core-auth";
+      packageName = "@azure/core-auth";
+      version = "1.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.5.0.tgz";
+        sha512 = "udzoBuYG1VBoHVohDTrvKjyzel34zt77Bhp7dQntVGGD0ehVq48owENbBG8fIgkHRNUBQH5k1r0hpoMu5L8+kw==";
+      };
+    };
+    "@azure/core-client-1.7.3" = {
+      name = "_at_azure_slash_core-client";
+      packageName = "@azure/core-client";
+      version = "1.7.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@azure/core-client/-/core-client-1.7.3.tgz";
+        sha512 = "kleJ1iUTxcO32Y06dH9Pfi9K4U+Tlb111WXEnbt7R/ne+NLRwppZiTGJuTD5VVoxTMK5NTbEtm5t2vcdNCFe2g==";
+      };
+    };
+    "@azure/core-http-3.0.3" = {
+      name = "_at_azure_slash_core-http";
+      packageName = "@azure/core-http";
+      version = "3.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@azure/core-http/-/core-http-3.0.3.tgz";
+        sha512 = "QMib3wXotJMFhHgmJBPUF9YsyErw34H0XDFQd9CauH7TPB+RGcyl9Ayy7iURtJB04ngXhE6YwrQsWDXlSLrilg==";
+      };
+    };
+    "@azure/core-http-compat-1.3.0" = {
+      name = "_at_azure_slash_core-http-compat";
+      packageName = "@azure/core-http-compat";
+      version = "1.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@azure/core-http-compat/-/core-http-compat-1.3.0.tgz";
+        sha512 = "ZN9avruqbQ5TxopzG3ih3KRy52n8OAbitX3fnZT5go4hzu0J+KVPSzkL+Wt3hpJpdG8WIfg1sBD1tWkgUdEpBA==";
+      };
+    };
+    "@azure/core-lro-2.5.4" = {
+      name = "_at_azure_slash_core-lro";
+      packageName = "@azure/core-lro";
+      version = "2.5.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@azure/core-lro/-/core-lro-2.5.4.tgz";
+        sha512 = "3GJiMVH7/10bulzOKGrrLeG/uCBH/9VtxqaMcB9lIqAeamI/xYQSHJL/KcsLDuH+yTjYpro/u6D/MuRe4dN70Q==";
+      };
+    };
+    "@azure/core-paging-1.5.0" = {
+      name = "_at_azure_slash_core-paging";
+      packageName = "@azure/core-paging";
+      version = "1.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@azure/core-paging/-/core-paging-1.5.0.tgz";
+        sha512 = "zqWdVIt+2Z+3wqxEOGzR5hXFZ8MGKK52x4vFLw8n58pR6ZfKRx3EXYTxTaYxYHc/PexPUTyimcTWFJbji9Z6Iw==";
+      };
+    };
+    "@azure/core-rest-pipeline-1.12.1" = {
+      name = "_at_azure_slash_core-rest-pipeline";
+      packageName = "@azure/core-rest-pipeline";
+      version = "1.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.12.1.tgz";
+        sha512 = "SsyWQ+T5MFQRX+M8H/66AlaI6HyCbQStGfFngx2fuiW+vKI2DkhtOvbYodPyf9fOe/ARLWWc3ohX54lQ5Kmaog==";
+      };
+    };
+    "@azure/core-tracing-1.0.0-preview.13" = {
+      name = "_at_azure_slash_core-tracing";
+      packageName = "@azure/core-tracing";
+      version = "1.0.0-preview.13";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.0-preview.13.tgz";
+        sha512 = "KxDlhXyMlh2Jhj2ykX6vNEU0Vou4nHr025KoSEiz7cS3BNiHNaZcdECk/DmLkEB0as5T7b/TpRcehJ5yV6NeXQ==";
+      };
+    };
+    "@azure/core-tracing-1.0.1" = {
+      name = "_at_azure_slash_core-tracing";
+      packageName = "@azure/core-tracing";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.1.tgz";
+        sha512 = "I5CGMoLtX+pI17ZdiFJZgxMJApsK6jjfm85hpgp3oazCdq5Wxgh4wMr7ge/TTWW1B5WBuvIOI1fMU/FrOAMKrw==";
+      };
+    };
+    "@azure/core-util-1.4.0" = {
+      name = "_at_azure_slash_core-util";
+      packageName = "@azure/core-util";
+      version = "1.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@azure/core-util/-/core-util-1.4.0.tgz";
+        sha512 = "eGAyJpm3skVQoLiRqm/xPa+SXi/NPDdSHMxbRAz2lSprd+Zs+qrpQGQQ2VQ3Nttu+nSZR4XoYQC71LbEI7jsig==";
+      };
+    };
+    "@azure/identity-2.1.0" = {
+      name = "_at_azure_slash_identity";
+      packageName = "@azure/identity";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@azure/identity/-/identity-2.1.0.tgz";
+        sha512 = "BPDz1sK7Ul9t0l9YKLEa8PHqWU4iCfhGJ+ELJl6c8CP3TpJt2urNCbm0ZHsthmxRsYoMPbz2Dvzj30zXZVmAFw==";
+      };
+    };
+    "@azure/keyvault-keys-4.7.2" = {
+      name = "_at_azure_slash_keyvault-keys";
+      packageName = "@azure/keyvault-keys";
+      version = "4.7.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@azure/keyvault-keys/-/keyvault-keys-4.7.2.tgz";
+        sha512 = "VdIH6PjbQ3J5ntK+xeI8eOe1WsDxF9ndXw8BPR/9MZVnIj0vQNtNCS6gpR7EFQeGcs8XjzMfHm0AvKGErobqJQ==";
+      };
+    };
+    "@azure/logger-1.0.4" = {
+      name = "_at_azure_slash_logger";
+      packageName = "@azure/logger";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@azure/logger/-/logger-1.0.4.tgz";
+        sha512 = "ustrPY8MryhloQj7OWGe+HrYx+aoiOxzbXTtgblbV3xwCqpzUK36phH3XNHQKj3EPonyFUuDTfR3qFhTEAuZEg==";
+      };
+    };
+    "@azure/msal-browser-2.38.2" = {
+      name = "_at_azure_slash_msal-browser";
+      packageName = "@azure/msal-browser";
+      version = "2.38.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-2.38.2.tgz";
+        sha512 = "71BeIn2we6LIgMplwCSaMq5zAwmalyJR3jFcVOZxNVfQ1saBRwOD+P77nLs5vrRCedVKTq8RMFhIOdpMLNno0A==";
+      };
+    };
+    "@azure/msal-common-13.3.0" = {
+      name = "_at_azure_slash_msal-common";
+      packageName = "@azure/msal-common";
+      version = "13.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@azure/msal-common/-/msal-common-13.3.0.tgz";
+        sha512 = "/VFWTicjcJbrGp3yQP7A24xU95NiDMe23vxIU1U6qdRPFsprMDNUohMudclnd+WSHE4/McqkZs/nUU3sAKkVjg==";
+      };
+    };
+    "@azure/msal-common-7.6.0" = {
+      name = "_at_azure_slash_msal-common";
+      packageName = "@azure/msal-common";
+      version = "7.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@azure/msal-common/-/msal-common-7.6.0.tgz";
+        sha512 = "XqfbglUTVLdkHQ8F9UQJtKseRr3sSnr9ysboxtoswvaMVaEfvyLtMoHv9XdKUfOc0qKGzNgRFd9yRjIWVepl6Q==";
+      };
+    };
+    "@azure/msal-node-1.18.3" = {
+      name = "_at_azure_slash_msal-node";
+      packageName = "@azure/msal-node";
+      version = "1.18.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@azure/msal-node/-/msal-node-1.18.3.tgz";
+        sha512 = "lI1OsxNbS/gxRD4548Wyj22Dk8kS7eGMwD9GlBZvQmFV8FJUXoXySL1BiNzDsHUE96/DS/DHmA+F73p1Dkcktg==";
+      };
+    };
+    "@azure/storage-blob-12.15.0" = {
+      name = "_at_azure_slash_storage-blob";
+      packageName = "@azure/storage-blob";
+      version = "12.15.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@azure/storage-blob/-/storage-blob-12.15.0.tgz";
+        sha512 = "e7JBKLOFi0QVJqqLzrjx1eL3je3/Ug2IQj24cTM9b85CsnnFjLGeGjJVIjbGGZaytewiCEG7r3lRwQX7fKj0/w==";
+      };
+    };
+    "@babel/parser-7.22.16" = {
+      name = "_at_babel_slash_parser";
+      packageName = "@babel/parser";
+      version = "7.22.16";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz";
+        sha512 = "+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==";
+      };
+    };
+    "@babel/runtime-7.22.15" = {
+      name = "_at_babel_slash_runtime";
+      packageName = "@babel/runtime";
+      version = "7.22.15";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.15.tgz";
+        sha512 = "T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==";
+      };
+    };
+    "@codemirror/autocomplete-6.9.0" = {
+      name = "_at_codemirror_slash_autocomplete";
+      packageName = "@codemirror/autocomplete";
+      version = "6.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.9.0.tgz";
+        sha512 = "Fbwm0V/Wn3BkEJZRhr0hi5BhCo5a7eBL6LYaliPjOSwCyfOpnjXY59HruSxOUNV+1OYer0Tgx1zRNQttjXyDog==";
+      };
+    };
+    "@codemirror/commands-6.2.5" = {
+      name = "_at_codemirror_slash_commands";
+      packageName = "@codemirror/commands";
+      version = "6.2.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@codemirror/commands/-/commands-6.2.5.tgz";
+        sha512 = "dSi7ow2P2YgPBZflR9AJoaTHvqmeGIgkhignYMd5zK5y6DANTvxKxp6eMEpIDUJkRAaOY/TFZ4jP1ADIO/GLVA==";
+      };
+    };
+    "@codemirror/lang-css-6.2.1" = {
+      name = "_at_codemirror_slash_lang-css";
+      packageName = "@codemirror/lang-css";
+      version = "6.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@codemirror/lang-css/-/lang-css-6.2.1.tgz";
+        sha512 = "/UNWDNV5Viwi/1lpr/dIXJNWiwDxpw13I4pTUAsNxZdg6E0mI2kTQb0P2iHczg1Tu+H4EBgJR+hYhKiHKko7qg==";
+      };
+    };
+    "@codemirror/lang-javascript-6.2.1" = {
+      name = "_at_codemirror_slash_lang-javascript";
+      packageName = "@codemirror/lang-javascript";
+      version = "6.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@codemirror/lang-javascript/-/lang-javascript-6.2.1.tgz";
+        sha512 = "jlFOXTejVyiQCW3EQwvKH0m99bUYIw40oPmFjSX2VS78yzfe0HELZ+NEo9Yfo1MkGRpGlj3Gnu4rdxV1EnAs5A==";
+      };
+    };
+    "@codemirror/lang-json-6.0.1" = {
+      name = "_at_codemirror_slash_lang-json";
+      packageName = "@codemirror/lang-json";
+      version = "6.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@codemirror/lang-json/-/lang-json-6.0.1.tgz";
+        sha512 = "+T1flHdgpqDDlJZ2Lkil/rLiRy684WMLc74xUnjJH48GQdfJo/pudlTRreZmKwzP8/tGdKf83wlbAdOCzlJOGQ==";
+      };
+    };
+    "@codemirror/lang-python-6.1.3" = {
+      name = "_at_codemirror_slash_lang-python";
+      packageName = "@codemirror/lang-python";
+      version = "6.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@codemirror/lang-python/-/lang-python-6.1.3.tgz";
+        sha512 = "S9w2Jl74hFlD5nqtUMIaXAq9t5WlM0acCkyuQWUUSvZclk1sV+UfnpFiZzuZSG+hfEaOmxKR5UxY/Uxswn7EhQ==";
+      };
+    };
+    "@codemirror/language-6.9.0" = {
+      name = "_at_codemirror_slash_language";
+      packageName = "@codemirror/language";
+      version = "6.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@codemirror/language/-/language-6.9.0.tgz";
+        sha512 = "nFu311/0ne/qGuGCL3oKuktBgzVOaxCHZPZv1tLSZkNjPYxxvkjSbzno3MlErG2tgw1Yw1yF8BxMCegeMXqpiw==";
+      };
+    };
+    "@codemirror/lint-6.4.1" = {
+      name = "_at_codemirror_slash_lint";
+      packageName = "@codemirror/lint";
+      version = "6.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@codemirror/lint/-/lint-6.4.1.tgz";
+        sha512 = "2Hx945qKX7FBan5/gUdTM8fsMYrNG9clIgEcPXestbLVFAUyQYFAuju/5BMNf/PwgpVaX5pvRm4+ovjbp9D9gQ==";
+      };
+    };
+    "@codemirror/state-6.2.1" = {
+      name = "_at_codemirror_slash_state";
+      packageName = "@codemirror/state";
+      version = "6.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@codemirror/state/-/state-6.2.1.tgz";
+        sha512 = "RupHSZ8+OjNT38zU9fKH2sv+Dnlr8Eb8sl4NOnnqz95mCFTZUaiRP8Xv5MeeaG0px2b8Bnfe7YGwCV3nsBhbuw==";
+      };
+    };
+    "@codemirror/view-6.18.1" = {
+      name = "_at_codemirror_slash_view";
+      packageName = "@codemirror/view";
+      version = "6.18.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@codemirror/view/-/view-6.18.1.tgz";
+        sha512 = "xcsXcMkIMd7l3WZEWoc4ljteAiqzxb5gVerRxk5132p5cLix6rTydWTQjsj2oxORepfsrwy1fC4r20iMa9plrg==";
+      };
+    };
+    "@colors/colors-1.5.0" = {
+      name = "_at_colors_slash_colors";
+      packageName = "@colors/colors";
+      version = "1.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz";
+        sha512 = "ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==";
+      };
+    };
+    "@cspotcode/source-map-support-0.8.1" = {
+      name = "_at_cspotcode_slash_source-map-support";
+      packageName = "@cspotcode/source-map-support";
+      version = "0.8.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz";
+        sha512 = "IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==";
+      };
+    };
+    "@ctrl/tinycolor-3.6.1" = {
+      name = "_at_ctrl_slash_tinycolor";
+      packageName = "@ctrl/tinycolor";
+      version = "3.6.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz";
+        sha512 = "SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==";
+      };
+    };
+    "@curlconverter/yargs-0.0.2" = {
+      name = "_at_curlconverter_slash_yargs";
+      packageName = "@curlconverter/yargs";
+      version = "0.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@curlconverter/yargs/-/yargs-0.0.2.tgz";
+        sha512 = "Q1YEebpCY61kxme4wvU0/IN/uMBfG5pZOKCo9FU+w20ElPvN+eH2qEVbK1C12t3Tee3qeYLLEU6HkiUeO1gc4A==";
+      };
+    };
+    "@curlconverter/yargs-parser-0.0.1" = {
+      name = "_at_curlconverter_slash_yargs-parser";
+      packageName = "@curlconverter/yargs-parser";
+      version = "0.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@curlconverter/yargs-parser/-/yargs-parser-0.0.1.tgz";
+        sha512 = "DbEVRYqrorzwqc63MQ3RODflut1tNla8ZCKo1h83lF7+fbntgubZsDfRDBv5Lxj3vkKuvAolysNM2ekwJev8wA==";
+      };
+    };
+    "@dabh/diagnostics-2.0.3" = {
+      name = "_at_dabh_slash_diagnostics";
+      packageName = "@dabh/diagnostics";
+      version = "2.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz";
+        sha512 = "hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==";
+      };
+    };
+    "@element-plus/icons-vue-2.1.0" = {
+      name = "_at_element-plus_slash_icons-vue";
+      packageName = "@element-plus/icons-vue";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-2.1.0.tgz";
+        sha512 = "PSBn3elNoanENc1vnCfh+3WA9fimRC7n+fWkf3rE5jvv+aBohNHABC/KAR5KWPecxWxDTVT1ERpRbOMRcOV/vA==";
+      };
+    };
+    "@ewoudenberg/difflib-0.1.0" = {
+      name = "_at_ewoudenberg_slash_difflib";
+      packageName = "@ewoudenberg/difflib";
+      version = "0.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@ewoudenberg/difflib/-/difflib-0.1.0.tgz";
+        sha512 = "OU5P5mJyD3OoWYMWY+yIgwvgNS9cFAU10f+DDuvtogcWQOoJIsQ4Hy2McSfUfhKjq8L0FuWVb4Rt7kgA+XK86A==";
+      };
+    };
+    "@floating-ui/core-1.4.1" = {
+      name = "_at_floating-ui_slash_core";
+      packageName = "@floating-ui/core";
+      version = "1.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@floating-ui/core/-/core-1.4.1.tgz";
+        sha512 = "jk3WqquEJRlcyu7997NtR5PibI+y5bi+LS3hPmguVClypenMsCY3CBa3LAQnozRCtCrYWSEtAdiskpamuJRFOQ==";
+      };
+    };
+    "@floating-ui/dom-1.5.2" = {
+      name = "_at_floating-ui_slash_dom";
+      packageName = "@floating-ui/dom";
+      version = "1.5.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.2.tgz";
+        sha512 = "6ArmenS6qJEWmwzczWyhvrXRdI/rI78poBcW0h/456+onlabit+2G+QxHx5xTOX60NBJQXjsCLFbW2CmsXpUog==";
+      };
+    };
+    "@floating-ui/utils-0.1.2" = {
+      name = "_at_floating-ui_slash_utils";
+      packageName = "@floating-ui/utils";
+      version = "0.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.2.tgz";
+        sha512 = "ou3elfqG/hZsbmF4bxeJhPHIf3G2pm0ujc39hYEZrfVqt7Vk/Zji6CXc3W0pmYM8BW1g40U+akTl9DKZhFhInQ==";
+      };
+    };
+    "@fontsource/open-sans-4.5.14" = {
+      name = "_at_fontsource_slash_open-sans";
+      packageName = "@fontsource/open-sans";
+      version = "4.5.14";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@fontsource/open-sans/-/open-sans-4.5.14.tgz";
+        sha512 = "mBXIIETBlW8q/ocuUN0hyGow2iuf75hQEHQt8R/RJ/HcphVbLg8KB7pHYGbFGDqs75W+SWvTC7JkVeAjT65BuQ==";
+      };
+    };
+    "@fortawesome/fontawesome-common-types-0.2.36" = {
+      name = "_at_fortawesome_slash_fontawesome-common-types";
+      packageName = "@fortawesome/fontawesome-common-types";
+      version = "0.2.36";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.36.tgz";
+        sha512 = "a/7BiSgobHAgBWeN7N0w+lAhInrGxksn13uK7231n2m8EDPE3BMCl9NZLTGrj9ZXfCmC6LM0QLqXidIizVQ6yg==";
+      };
+    };
+    "@fortawesome/fontawesome-common-types-0.3.0" = {
+      name = "_at_fortawesome_slash_fontawesome-common-types";
+      packageName = "@fortawesome/fontawesome-common-types";
+      version = "0.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.3.0.tgz";
+        sha512 = "CA3MAZBTxVsF6SkfkHXDerkhcQs0QPofy43eFdbWJJkZiq3SfiaH1msOkac59rQaqto5EqWnASboY1dBuKen5w==";
+      };
+    };
+    "@fortawesome/fontawesome-common-types-6.4.2" = {
+      name = "_at_fortawesome_slash_fontawesome-common-types";
+      packageName = "@fortawesome/fontawesome-common-types";
+      version = "6.4.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.4.2.tgz";
+        sha512 = "1DgP7f+XQIJbLFCTX1V2QnxVmpLdKdzzo2k8EmvDOePfchaIGQ9eCHj2up3/jNEbZuBqel5OxiaOJf37TWauRA==";
+      };
+    };
+    "@fortawesome/fontawesome-svg-core-1.3.0" = {
+      name = "_at_fortawesome_slash_fontawesome-svg-core";
+      packageName = "@fortawesome/fontawesome-svg-core";
+      version = "1.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.3.0.tgz";
+        sha512 = "UIL6crBWhjTNQcONt96ExjUnKt1D68foe3xjEensLDclqQ6YagwCRYVQdrp/hW0ALRp/5Fv/VKw+MqTUWYYvPg==";
+      };
+    };
+    "@fortawesome/free-regular-svg-icons-6.4.2" = {
+      name = "_at_fortawesome_slash_free-regular-svg-icons";
+      packageName = "@fortawesome/free-regular-svg-icons";
+      version = "6.4.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.4.2.tgz";
+        sha512 = "0+sIUWnkgTVVXVAPQmW4vxb9ZTHv0WstOa3rBx9iPxrrrDH6bNLsDYuwXF9b6fGm+iR7DKQvQshUH/FJm3ed9Q==";
+      };
+    };
+    "@fortawesome/free-solid-svg-icons-5.15.4" = {
+      name = "_at_fortawesome_slash_free-solid-svg-icons";
+      packageName = "@fortawesome/free-solid-svg-icons";
+      version = "5.15.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.4.tgz";
+        sha512 = "JLmQfz6tdtwxoihXLg6lT78BorrFyCf59SAwBM6qV/0zXyVeDygJVb3fk+j5Qat+Yvcxp1buLTY5iDh1ZSAQ8w==";
+      };
+    };
+    "@fortawesome/vue-fontawesome-2.0.10" = {
+      name = "_at_fortawesome_slash_vue-fontawesome";
+      packageName = "@fortawesome/vue-fontawesome";
+      version = "2.0.10";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@fortawesome/vue-fontawesome/-/vue-fontawesome-2.0.10.tgz";
+        sha512 = "OTETSXz+3ygD2OK2/vy82cmUBpuJqeOAg4gfnnv+f2Rir1tDIhQg026Q3NQxznq83ZLz8iNqGG9XJm26inpDeg==";
+      };
+    };
+    "@fortawesome/vue-fontawesome-3.0.3" = {
+      name = "_at_fortawesome_slash_vue-fontawesome";
+      packageName = "@fortawesome/vue-fontawesome";
+      version = "3.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@fortawesome/vue-fontawesome/-/vue-fontawesome-3.0.3.tgz";
+        sha512 = "KCPHi9QemVXGMrfuwf3nNnNo129resAIQWut9QTAMXmXqL2ErABC6ohd2yY5Ipq0CLWNbKHk8TMdTXL/Zf3ZhA==";
+      };
+    };
+    "@gar/promisify-1.1.3" = {
+      name = "_at_gar_slash_promisify";
+      packageName = "@gar/promisify";
+      version = "1.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz";
+        sha512 = "k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==";
+      };
+    };
+    "@google-cloud/common-3.10.0" = {
+      name = "_at_google-cloud_slash_common";
+      packageName = "@google-cloud/common";
+      version = "3.10.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@google-cloud/common/-/common-3.10.0.tgz";
+        sha512 = "XMbJYMh/ZSaZnbnrrOFfR/oQrb0SxG4qh6hDisWCoEbFcBHV0qHQo4uXfeMCzolx2Mfkh6VDaOGg+hyJsmxrlw==";
+      };
+    };
+    "@google-cloud/paginator-3.0.7" = {
+      name = "_at_google-cloud_slash_paginator";
+      packageName = "@google-cloud/paginator";
+      version = "3.0.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-3.0.7.tgz";
+        sha512 = "jJNutk0arIQhmpUUQJPJErsojqo834KcyB6X7a1mxuic8i1tKXxde8E69IZxNZawRIlZdIK2QY4WALvlK5MzYQ==";
+      };
+    };
+    "@google-cloud/precise-date-2.0.4" = {
+      name = "_at_google-cloud_slash_precise-date";
+      packageName = "@google-cloud/precise-date";
+      version = "2.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@google-cloud/precise-date/-/precise-date-2.0.4.tgz";
+        sha512 = "nOB+mZdevI/1Si0QAfxWfzzIqFdc7wrO+DYePFvgbOoMtvX+XfFTINNt7e9Zg66AbDbWCPRnikU+6f5LTm9Wyg==";
+      };
+    };
+    "@google-cloud/projectify-2.1.1" = {
+      name = "_at_google-cloud_slash_projectify";
+      packageName = "@google-cloud/projectify";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-2.1.1.tgz";
+        sha512 = "+rssMZHnlh0twl122gXY4/aCrk0G1acBqkHFfYddtsqpYXGxA29nj9V5V9SfC+GyOG00l650f6lG9KL+EpFEWQ==";
+      };
+    };
+    "@google-cloud/projectify-3.0.0" = {
+      name = "_at_google-cloud_slash_projectify";
+      packageName = "@google-cloud/projectify";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-3.0.0.tgz";
+        sha512 = "HRkZsNmjScY6Li8/kb70wjGlDDyLkVk3KvoEo9uIoxSjYLJasGiCch9+PqRVDOCGUFvEIqyogl+BeqILL4OJHA==";
+      };
+    };
+    "@google-cloud/promisify-2.0.4" = {
+      name = "_at_google-cloud_slash_promisify";
+      packageName = "@google-cloud/promisify";
+      version = "2.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-2.0.4.tgz";
+        sha512 = "j8yRSSqswWi1QqUGKVEKOG03Q7qOoZP6/h2zN2YO+F5h2+DHU0bSrHCK9Y7lo2DI9fBd8qGAw795sf+3Jva4yA==";
+      };
+    };
+    "@google-cloud/promisify-3.0.1" = {
+      name = "_at_google-cloud_slash_promisify";
+      packageName = "@google-cloud/promisify";
+      version = "3.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-3.0.1.tgz";
+        sha512 = "z1CjRjtQyBOYL+5Qr9DdYIfrdLBe746jRTYfaYU6MeXkqp7UfYs/jX16lFFVzZ7PGEJvqZNqYUEtb1mvDww4pA==";
+      };
+    };
+    "@google-cloud/spanner-5.18.0" = {
+      name = "_at_google-cloud_slash_spanner";
+      packageName = "@google-cloud/spanner";
+      version = "5.18.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@google-cloud/spanner/-/spanner-5.18.0.tgz";
+        sha512 = "KcfepoEuGsjqjeI8cVWfJ9yPdYJFPnpMzdZg3FX2W4MzNOzeNrJEB/EfD/epOOZ/fNhRlUTl+tLFN3WjVxcWlw==";
+      };
+    };
+    "@google-cloud/storage-6.12.0" = {
+      name = "_at_google-cloud_slash_storage";
+      packageName = "@google-cloud/storage";
+      version = "6.12.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@google-cloud/storage/-/storage-6.12.0.tgz";
+        sha512 = "78nNAY7iiZ4O/BouWMWTD/oSF2YtYgYB3GZirn0To6eBOugjXVoK+GXgUXOl+HlqbAOyHxAVXOlsj3snfbQ1dw==";
+      };
+    };
+    "@grpc/grpc-js-1.6.12" = {
+      name = "_at_grpc_slash_grpc-js";
+      packageName = "@grpc/grpc-js";
+      version = "1.6.12";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.6.12.tgz";
+        sha512 = "JmvQ03OTSpVd9JTlj/K3IWHSz4Gk/JMLUTtW7Zb0KvO1LcOYGATh5cNuRYzCAeDR3O8wq+q8FZe97eO9MBrkUw==";
+      };
+    };
+    "@grpc/proto-loader-0.6.13" = {
+      name = "_at_grpc_slash_proto-loader";
+      packageName = "@grpc/proto-loader";
+      version = "0.6.13";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.13.tgz";
+        sha512 = "FjxPYDRTn6Ec3V0arm1FtSpmP6V50wuph2yILpyvTKzjc76oDdoihXqM1DzOW5ubvCC8GivfCnNtfaRE8myJ7g==";
+      };
+    };
+    "@grpc/proto-loader-0.7.9" = {
+      name = "_at_grpc_slash_proto-loader";
+      packageName = "@grpc/proto-loader";
+      version = "0.7.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.9.tgz";
+        sha512 = "YJsOehVXzgurc+lLAxYnlSMc1p/Gu6VAvnfx0ATi2nzvr0YZcjhmZDeY8SeAKv1M7zE3aEJH0Xo9mK1iZ8GYoQ==";
+      };
+    };
+    "@httptoolkit/websocket-stream-6.0.1" = {
+      name = "_at_httptoolkit_slash_websocket-stream";
+      packageName = "@httptoolkit/websocket-stream";
+      version = "6.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@httptoolkit/websocket-stream/-/websocket-stream-6.0.1.tgz";
+        sha512 = "A0NOZI+Glp3Xgcz6Na7i7o09+/+xm2m0UCU8gdtM2nIv6/cjLmhMZMqehSpTlgbx9omtLmV8LVqOskPEyWnmZQ==";
+      };
+    };
+    "@icetee/ftp-0.3.15" = {
+      name = "_at_icetee_slash_ftp";
+      packageName = "@icetee/ftp";
+      version = "0.3.15";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@icetee/ftp/-/ftp-0.3.15.tgz";
+        sha512 = "RxSa9VjcDWgWCYsaLdZItdCnJj7p4LxggaEk+Y3MP0dHKoxez8ioG07DVekVbZZqccsrL+oPB/N9AzVPxj4blg==";
+      };
+    };
+    "@intlify/core-base-9.4.0" = {
+      name = "_at_intlify_slash_core-base";
+      packageName = "@intlify/core-base";
+      version = "9.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.4.0.tgz";
+        sha512 = "bIvtuEjLES35l39R0OccYbmr/fatSr4VSRThhouvFc05mnoAZyJGgj3st1iLaHGlFTmvd507uww1427o56r36Q==";
+      };
+    };
+    "@intlify/message-compiler-9.4.0" = {
+      name = "_at_intlify_slash_message-compiler";
+      packageName = "@intlify/message-compiler";
+      version = "9.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.4.0.tgz";
+        sha512 = "EdjqOH3bQqEjZcUOwo90wuW4ZuFr41FDxVni6WNKS0V0myKgwz9EuvLDcnEbjJMIX8vKAWPjWfnSTt5fMwKHLA==";
+      };
+    };
+    "@intlify/shared-9.4.0" = {
+      name = "_at_intlify_slash_shared";
+      packageName = "@intlify/shared";
+      version = "9.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@intlify/shared/-/shared-9.4.0.tgz";
+        sha512 = "AFqymip2kToqA0B6KZPg5jSrdcVHoli9t/VhGKE2iiMq9utFuMoGdDC/JOCIZgwxo6aXAk86QyU2XtzEoMuZ6A==";
+      };
+    };
+    "@ioredis/commands-1.2.0" = {
+      name = "_at_ioredis_slash_commands";
+      packageName = "@ioredis/commands";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz";
+        sha512 = "Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==";
+      };
+    };
+    "@isaacs/cliui-8.0.2" = {
+      name = "_at_isaacs_slash_cliui";
+      packageName = "@isaacs/cliui";
+      version = "8.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz";
+        sha512 = "O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==";
+      };
+    };
+    "@jridgewell/gen-mapping-0.3.3" = {
+      name = "_at_jridgewell_slash_gen-mapping";
+      packageName = "@jridgewell/gen-mapping";
+      version = "0.3.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz";
+        sha512 = "HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==";
+      };
+    };
+    "@jridgewell/resolve-uri-3.1.1" = {
+      name = "_at_jridgewell_slash_resolve-uri";
+      packageName = "@jridgewell/resolve-uri";
+      version = "3.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz";
+        sha512 = "dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==";
+      };
+    };
+    "@jridgewell/set-array-1.1.2" = {
+      name = "_at_jridgewell_slash_set-array";
+      packageName = "@jridgewell/set-array";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz";
+        sha512 = "xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==";
+      };
+    };
+    "@jridgewell/source-map-0.3.5" = {
+      name = "_at_jridgewell_slash_source-map";
+      packageName = "@jridgewell/source-map";
+      version = "0.3.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz";
+        sha512 = "UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==";
+      };
+    };
+    "@jridgewell/sourcemap-codec-1.4.15" = {
+      name = "_at_jridgewell_slash_sourcemap-codec";
+      packageName = "@jridgewell/sourcemap-codec";
+      version = "1.4.15";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz";
+        sha512 = "eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==";
+      };
+    };
+    "@jridgewell/trace-mapping-0.3.19" = {
+      name = "_at_jridgewell_slash_trace-mapping";
+      packageName = "@jridgewell/trace-mapping";
+      version = "0.3.19";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz";
+        sha512 = "kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==";
+      };
+    };
+    "@jridgewell/trace-mapping-0.3.9" = {
+      name = "_at_jridgewell_slash_trace-mapping";
+      packageName = "@jridgewell/trace-mapping";
+      version = "0.3.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz";
+        sha512 = "3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==";
+      };
+    };
+    "@js-joda/core-5.5.3" = {
+      name = "_at_js-joda_slash_core";
+      packageName = "@js-joda/core";
+      version = "5.5.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@js-joda/core/-/core-5.5.3.tgz";
+        sha512 = "7dqNYwG8gCt4hfg5PKgM7xLEcgSBcx/UgC92OMnhMmvAnq11QzDFPrxUkNR/u5kn17WWLZ8beZ4A3Qrz4pZcmQ==";
+      };
+    };
+    "@jsdevtools/ono-7.1.3" = {
+      name = "_at_jsdevtools_slash_ono";
+      packageName = "@jsdevtools/ono";
+      version = "7.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz";
+        sha512 = "4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==";
+      };
+    };
+    "@jsplumb/browser-ui-5.13.7" = {
+      name = "_at_jsplumb_slash_browser-ui";
+      packageName = "@jsplumb/browser-ui";
+      version = "5.13.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@jsplumb/browser-ui/-/browser-ui-5.13.7.tgz";
+        sha512 = "rVw6DrDpUlBOOxggSWgWagf/PoXB+mQx+jCK0IXWEpmsaYfFp+4sx8qhH8jrLQf3LMEsXeQA2YI7Mi3Dz+4bRQ==";
+      };
+    };
+    "@jsplumb/common-5.13.7" = {
+      name = "_at_jsplumb_slash_common";
+      packageName = "@jsplumb/common";
+      version = "5.13.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@jsplumb/common/-/common-5.13.7.tgz";
+        sha512 = "NTQ/N3qRaY+axpOVrTtFPq6l36zsJx6TDlpUo3FGh0KhXd0BE7TRNkDUijNsXXj8aVFJ4djlqFuMYoroonYA+Q==";
+      };
+    };
+    "@jsplumb/connector-bezier-5.13.7" = {
+      name = "_at_jsplumb_slash_connector-bezier";
+      packageName = "@jsplumb/connector-bezier";
+      version = "5.13.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@jsplumb/connector-bezier/-/connector-bezier-5.13.7.tgz";
+        sha512 = "UtmIAabkNJx13nM335CKb4OSy9dTJrNorBY+DJ6rN63pG/eHhWZKW3Mwdxv/mGX1OT7sNK+N71qi+/QtqidbGw==";
+      };
+    };
+    "@jsplumb/core-5.13.7" = {
+      name = "_at_jsplumb_slash_core";
+      packageName = "@jsplumb/core";
+      version = "5.13.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@jsplumb/core/-/core-5.13.7.tgz";
+        sha512 = "24SfEuyjmOSdrN3m3gDesAFzlZARJIYiV8CEtoK6tBwaVwoqSSiUvY4zGHrppwx2yWDOEO5Vwv5iyw6OYlUjGw==";
+      };
+    };
+    "@jsplumb/util-5.13.7" = {
+      name = "_at_jsplumb_slash_util";
+      packageName = "@jsplumb/util";
+      version = "5.13.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@jsplumb/util/-/util-5.13.7.tgz";
+        sha512 = "DEoDaKDl0e8Y8P6rKGfpnRaaSUVDvZ52cvULLWiZIYQuo3K328vSAIoYVef3V6OSxmpfndOSfkO7oqfY0pWh0g==";
+      };
+    };
+    "@kafkajs/confluent-schema-registry-1.0.6" = {
+      name = "_at_kafkajs_slash_confluent-schema-registry";
+      packageName = "@kafkajs/confluent-schema-registry";
+      version = "1.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@kafkajs/confluent-schema-registry/-/confluent-schema-registry-1.0.6.tgz";
+        sha512 = "NrZL1peOIlmlLKvheQcJAx9PHdnc4kaW+9+Yt4jXUfbbYR9EFNCZt6yApI4SwlFilaiZieReM6XslWy1LZAvoQ==";
+      };
+    };
+    "@kwsites/file-exists-1.1.1" = {
+      name = "_at_kwsites_slash_file-exists";
+      packageName = "@kwsites/file-exists";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz";
+        sha512 = "m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==";
+      };
+    };
+    "@kwsites/promise-deferred-1.1.1" = {
+      name = "_at_kwsites_slash_promise-deferred";
+      packageName = "@kwsites/promise-deferred";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz";
+        sha512 = "GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==";
+      };
+    };
+    "@lezer/common-1.0.4" = {
+      name = "_at_lezer_slash_common";
+      packageName = "@lezer/common";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@lezer/common/-/common-1.0.4.tgz";
+        sha512 = "lZHlk8p67x4aIDtJl6UQrXSOP6oi7dQR3W/geFVrENdA1JDaAJWldnVqVjPMJupbTKbzDfFcePfKttqVidS/dg==";
+      };
+    };
+    "@lezer/css-1.1.3" = {
+      name = "_at_lezer_slash_css";
+      packageName = "@lezer/css";
+      version = "1.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@lezer/css/-/css-1.1.3.tgz";
+        sha512 = "SjSM4pkQnQdJDVc80LYzEaMiNy9txsFbI7HsMgeVF28NdLaAdHNtQ+kB/QqDUzRBV/75NTXjJ/R5IdC8QQGxMg==";
+      };
+    };
+    "@lezer/highlight-1.1.6" = {
+      name = "_at_lezer_slash_highlight";
+      packageName = "@lezer/highlight";
+      version = "1.1.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.1.6.tgz";
+        sha512 = "cmSJYa2us+r3SePpRCjN5ymCqCPv+zyXmDl0ciWtVaNiORT/MxM7ZgOMQZADD0o51qOaOg24qc/zBViOIwAjJg==";
+      };
+    };
+    "@lezer/html-1.3.6" = {
+      name = "_at_lezer_slash_html";
+      packageName = "@lezer/html";
+      version = "1.3.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@lezer/html/-/html-1.3.6.tgz";
+        sha512 = "Kk9HJARZTc0bAnMQUqbtuhFVsB4AnteR2BFUWfZV7L/x1H0aAKz6YabrfJ2gk/BEgjh9L3hg5O4y2IDZRBdzuQ==";
+      };
+    };
+    "@lezer/javascript-1.4.7" = {
+      name = "_at_lezer_slash_javascript";
+      packageName = "@lezer/javascript";
+      version = "1.4.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@lezer/javascript/-/javascript-1.4.7.tgz";
+        sha512 = "OVWlK0YEi7HM+9JRWtRkir8qvcg0/kVYg2TAMHlVtl6DU1C9yK1waEOLBMztZsV/axRJxsqfJKhzYz+bxZme5g==";
+      };
+    };
+    "@lezer/json-1.0.1" = {
+      name = "_at_lezer_slash_json";
+      packageName = "@lezer/json";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@lezer/json/-/json-1.0.1.tgz";
+        sha512 = "nkVC27qiEZEjySbi6gQRuMwa2sDu2PtfjSgz0A4QF81QyRGm3kb2YRzLcOPcTEtmcwvrX/cej7mlhbwViA4WJw==";
+      };
+    };
+    "@lezer/lr-1.3.10" = {
+      name = "_at_lezer_slash_lr";
+      packageName = "@lezer/lr";
+      version = "1.3.10";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@lezer/lr/-/lr-1.3.10.tgz";
+        sha512 = "BZfVvf7Re5BIwJHlZXbJn9L8lus5EonxQghyn+ih8Wl36XMFBPTXC0KM0IdUtj9w/diPHsKlXVgL+AlX2jYJ0Q==";
+      };
+    };
+    "@lezer/python-1.1.8" = {
+      name = "_at_lezer_slash_python";
+      packageName = "@lezer/python";
+      version = "1.1.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@lezer/python/-/python-1.1.8.tgz";
+        sha512 = "1T/XsmeF57ijrjpC0Zmrf9YeO5mn2zC1XeSNrOnc0KB+6PgxJ5m7kWKt0CnwyS74oHQXbJxUUL+QDQJR26c1Gw==";
+      };
+    };
+    "@mapbox/node-pre-gyp-1.0.11" = {
+      name = "_at_mapbox_slash_node-pre-gyp";
+      packageName = "@mapbox/node-pre-gyp";
+      version = "1.0.11";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz";
+        sha512 = "Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==";
+      };
+    };
+    "@mongodb-js/zstd-1.2.0" = {
+      name = "_at_mongodb-js_slash_zstd";
+      packageName = "@mongodb-js/zstd";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@mongodb-js/zstd/-/zstd-1.2.0.tgz";
+        sha512 = "sKHsJU2MXsp822IFXOHw/4mpFulScNHpZzVy1Zi5k5wBsdiAPx1QramyOXZkpacla+2QPEC/s7TxPlEhG/HuNQ==";
+      };
+    };
+    "@n8n/client-oauth2-0.7.0" = {
+      name = "_at_n8n_slash_client-oauth2";
+      packageName = "@n8n/client-oauth2";
+      version = "0.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@n8n/client-oauth2/-/client-oauth2-0.7.0.tgz";
+        sha512 = "E/ir1Ay8Pmia+b5tvV4KhZ0J0xexz3jJc1w93xx39Iaq5XuZRWC3TNJhJdVp0f2fPti0rVDHnAMHsovBucHBIw==";
+      };
+    };
+    "@n8n/codemirror-lang-sql-1.0.2" = {
+      name = "_at_n8n_slash_codemirror-lang-sql";
+      packageName = "@n8n/codemirror-lang-sql";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@n8n/codemirror-lang-sql/-/codemirror-lang-sql-1.0.2.tgz";
+        sha512 = "sOf/KyewSu3Ikij0CkRtzJJDhRDZcwNCEYl8UdH4U/riL0/XZGcBD7MYofCCcKszanJZiEWRZ2KU1sRp234iMg==";
+      };
+    };
+    "@n8n/vm2-3.9.20" = {
+      name = "_at_n8n_slash_vm2";
+      packageName = "@n8n/vm2";
+      version = "3.9.20";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@n8n/vm2/-/vm2-3.9.20.tgz";
+        sha512 = "qk2oJYkuFRVSTxoro4obX/sv/wT1pViZjHh/isjOvFB93D52QIg3TCjMPsHOfHTmkxCKJffjLrUvjIwvWzSMCQ==";
+      };
+    };
+    "@n8n_io/license-sdk-2.4.0" = {
+      name = "_at_n8n_io_slash_license-sdk";
+      packageName = "@n8n_io/license-sdk";
+      version = "2.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@n8n_io/license-sdk/-/license-sdk-2.4.0.tgz";
+        sha512 = "99kuCVH4NcBi4nyn/WIpd6KSIMLk/pbBks0zr8bC65ALKj0se7/2MwC6N+WwGkG7NqH0kMdGe/7Y5KnJkMTefg==";
+      };
+    };
+    "@n8n_io/riot-tmpl-4.0.1" = {
+      name = "_at_n8n_io_slash_riot-tmpl";
+      packageName = "@n8n_io/riot-tmpl";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@n8n_io/riot-tmpl/-/riot-tmpl-4.0.1.tgz";
+        sha512 = "/zdRbEfTFjsm1NqnpPQHgZTkTdbp5v3VUxGeMA9098sps8jRCTraQkc3AQstJgHUm7ylBXJcIVhnVeLUMWAfwQ==";
+      };
+    };
+    "@nodelib/fs.scandir-2.1.5" = {
+      name = "_at_nodelib_slash_fs.scandir";
+      packageName = "@nodelib/fs.scandir";
+      version = "2.1.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz";
+        sha512 = "vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==";
+      };
+    };
+    "@nodelib/fs.stat-2.0.5" = {
+      name = "_at_nodelib_slash_fs.stat";
+      packageName = "@nodelib/fs.stat";
+      version = "2.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz";
+        sha512 = "RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==";
+      };
+    };
+    "@nodelib/fs.walk-1.2.8" = {
+      name = "_at_nodelib_slash_fs.walk";
+      packageName = "@nodelib/fs.walk";
+      version = "1.2.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz";
+        sha512 = "oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==";
+      };
+    };
+    "@npmcli/fs-1.1.1" = {
+      name = "_at_npmcli_slash_fs";
+      packageName = "@npmcli/fs";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz";
+        sha512 = "8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==";
+      };
+    };
+    "@npmcli/move-file-1.1.2" = {
+      name = "_at_npmcli_slash_move-file";
+      packageName = "@npmcli/move-file";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz";
+        sha512 = "1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==";
+      };
+    };
+    "@oclif/command-1.8.36" = {
+      name = "_at_oclif_slash_command";
+      packageName = "@oclif/command";
+      version = "1.8.36";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@oclif/command/-/command-1.8.36.tgz";
+        sha512 = "/zACSgaYGtAQRzc7HjzrlIs14FuEYAZrMOEwicRoUnZVyRunG4+t5iSEeQu0Xy2bgbCD0U1SP/EdeNZSTXRwjQ==";
+      };
+    };
+    "@oclif/config-1.18.16" = {
+      name = "_at_oclif_slash_config";
+      packageName = "@oclif/config";
+      version = "1.18.16";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@oclif/config/-/config-1.18.16.tgz";
+        sha512 = "VskIxVcN22qJzxRUq+raalq6Q3HUde7sokB7/xk5TqRZGEKRVbFeqdQBxDWwQeudiJEgcNiMvIFbMQ43dY37FA==";
+      };
+    };
+    "@oclif/config-1.18.17" = {
+      name = "_at_oclif_slash_config";
+      packageName = "@oclif/config";
+      version = "1.18.17";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@oclif/config/-/config-1.18.17.tgz";
+        sha512 = "k77qyeUvjU8qAJ3XK3fr/QVAqsZO8QOBuESnfeM5HHtPNLSyfVcwiMM2zveSW5xRdLSG3MfV8QnLVkuyCL2ENg==";
+      };
+    };
+    "@oclif/core-1.26.2" = {
+      name = "_at_oclif_slash_core";
+      packageName = "@oclif/core";
+      version = "1.26.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@oclif/core/-/core-1.26.2.tgz";
+        sha512 = "6jYuZgXvHfOIc9GIaS4T3CIKGTjPmfAxuMcbCbMRKJJl4aq/4xeRlEz0E8/hz8HxvxZBGvN2GwAUHlrGWQVrVw==";
+      };
+    };
+    "@oclif/errors-1.3.6" = {
+      name = "_at_oclif_slash_errors";
+      packageName = "@oclif/errors";
+      version = "1.3.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@oclif/errors/-/errors-1.3.6.tgz";
+        sha512 = "fYaU4aDceETd89KXP+3cLyg9EHZsLD3RxF2IU9yxahhBpspWjkWi3Dy3bTgcwZ3V47BgxQaGapzJWDM33XIVDQ==";
+      };
+    };
+    "@oclif/help-1.0.15" = {
+      name = "_at_oclif_slash_help";
+      packageName = "@oclif/help";
+      version = "1.0.15";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@oclif/help/-/help-1.0.15.tgz";
+        sha512 = "Yt8UHoetk/XqohYX76DfdrUYLsPKMc5pgkzsZVHDyBSkLiGRzujVaGZdjr32ckVZU9q3a47IjhWxhip7Dz5W/g==";
+      };
+    };
+    "@oclif/linewrap-1.0.0" = {
+      name = "_at_oclif_slash_linewrap";
+      packageName = "@oclif/linewrap";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@oclif/linewrap/-/linewrap-1.0.0.tgz";
+        sha512 = "Ups2dShK52xXa8w6iBWLgcjPJWjais6KPJQq3gQ/88AY6BXoTX+MIGFPrWQO1KLMiQfoTpcLnUwloN4brrVUHw==";
+      };
+    };
+    "@oclif/parser-3.8.17" = {
+      name = "_at_oclif_slash_parser";
+      packageName = "@oclif/parser";
+      version = "3.8.17";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@oclif/parser/-/parser-3.8.17.tgz";
+        sha512 = "l04iSd0xoh/16TGVpXb81Gg3z7tlQGrEup16BrVLsZBK6SEYpYHRJZnM32BwZrHI97ZSFfuSwVlzoo6HdsaK8A==";
+      };
+    };
+    "@oclif/screen-3.0.6" = {
+      name = "_at_oclif_slash_screen";
+      packageName = "@oclif/screen";
+      version = "3.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@oclif/screen/-/screen-3.0.6.tgz";
+        sha512 = "nEv7dFPxCrWrvK6dQ8zya0/Kb54EXVcwIKV9capjSa89ZDoOo+qH0YSo4/eQVECXgW3eUvgKLDIcIt62YBk0HA==";
+      };
+    };
+    "@opentelemetry/api-1.5.0" = {
+      name = "_at_opentelemetry_slash_api";
+      packageName = "@opentelemetry/api";
+      version = "1.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@opentelemetry/api/-/api-1.5.0.tgz";
+        sha512 = "636km3y3pVyJldKGp9qM+lPvxuOvhThUED9cHNPsERkp+APbdtCtj0sALW+mZsbQqnqQkNRHqoGw/Uc82UP6fQ==";
+      };
+    };
+    "@popperjs/core-2.11.7" = {
+      name = "_at_popperjs_slash_core";
+      packageName = "@popperjs/core";
+      version = "2.11.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz";
+        sha512 = "Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==";
+      };
+    };
+    "@protobufjs/aspromise-1.1.2" = {
+      name = "_at_protobufjs_slash_aspromise";
+      packageName = "@protobufjs/aspromise";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz";
+        sha512 = "j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==";
+      };
+    };
+    "@protobufjs/base64-1.1.2" = {
+      name = "_at_protobufjs_slash_base64";
+      packageName = "@protobufjs/base64";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz";
+        sha512 = "AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==";
+      };
+    };
+    "@protobufjs/codegen-2.0.4" = {
+      name = "_at_protobufjs_slash_codegen";
+      packageName = "@protobufjs/codegen";
+      version = "2.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz";
+        sha512 = "YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==";
+      };
+    };
+    "@protobufjs/eventemitter-1.1.0" = {
+      name = "_at_protobufjs_slash_eventemitter";
+      packageName = "@protobufjs/eventemitter";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz";
+        sha512 = "j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==";
+      };
+    };
+    "@protobufjs/fetch-1.1.0" = {
+      name = "_at_protobufjs_slash_fetch";
+      packageName = "@protobufjs/fetch";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz";
+        sha512 = "lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==";
+      };
+    };
+    "@protobufjs/float-1.0.2" = {
+      name = "_at_protobufjs_slash_float";
+      packageName = "@protobufjs/float";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz";
+        sha512 = "Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==";
+      };
+    };
+    "@protobufjs/inquire-1.1.0" = {
+      name = "_at_protobufjs_slash_inquire";
+      packageName = "@protobufjs/inquire";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz";
+        sha512 = "kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==";
+      };
+    };
+    "@protobufjs/path-1.1.2" = {
+      name = "_at_protobufjs_slash_path";
+      packageName = "@protobufjs/path";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz";
+        sha512 = "6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==";
+      };
+    };
+    "@protobufjs/pool-1.1.0" = {
+      name = "_at_protobufjs_slash_pool";
+      packageName = "@protobufjs/pool";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz";
+        sha512 = "0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==";
+      };
+    };
+    "@protobufjs/utf8-1.1.0" = {
+      name = "_at_protobufjs_slash_utf8";
+      packageName = "@protobufjs/utf8";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz";
+        sha512 = "Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==";
+      };
+    };
+    "@redis/bloom-1.2.0" = {
+      name = "_at_redis_slash_bloom";
+      packageName = "@redis/bloom";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@redis/bloom/-/bloom-1.2.0.tgz";
+        sha512 = "HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg==";
+      };
+    };
+    "@redis/client-1.5.9" = {
+      name = "_at_redis_slash_client";
+      packageName = "@redis/client";
+      version = "1.5.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@redis/client/-/client-1.5.9.tgz";
+        sha512 = "SffgN+P1zdWJWSXBvJeynvEnmnZrYmtKSRW00xl8pOPFOMJjxRR9u0frSxJpPR6Y4V+k54blJjGW7FgxbTI7bQ==";
+      };
+    };
+    "@redis/graph-1.1.0" = {
+      name = "_at_redis_slash_graph";
+      packageName = "@redis/graph";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@redis/graph/-/graph-1.1.0.tgz";
+        sha512 = "16yZWngxyXPd+MJxeSr0dqh2AIOi8j9yXKcKCwVaKDbH3HTuETpDVPcLujhFYVPtYrngSco31BUcSa9TH31Gqg==";
+      };
+    };
+    "@redis/json-1.0.4" = {
+      name = "_at_redis_slash_json";
+      packageName = "@redis/json";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@redis/json/-/json-1.0.4.tgz";
+        sha512 = "LUZE2Gdrhg0Rx7AN+cZkb1e6HjoSKaeeW8rYnt89Tly13GBI5eP4CwDVr+MY8BAYfCg4/N15OUrtLoona9uSgw==";
+      };
+    };
+    "@redis/search-1.1.3" = {
+      name = "_at_redis_slash_search";
+      packageName = "@redis/search";
+      version = "1.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@redis/search/-/search-1.1.3.tgz";
+        sha512 = "4Dg1JjvCevdiCBTZqjhKkGoC5/BcB7k9j99kdMnaXFXg8x4eyOIVg9487CMv7/BUVkFLZCaIh8ead9mU15DNng==";
+      };
+    };
+    "@redis/time-series-1.0.5" = {
+      name = "_at_redis_slash_time-series";
+      packageName = "@redis/time-series";
+      version = "1.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@redis/time-series/-/time-series-1.0.5.tgz";
+        sha512 = "IFjIgTusQym2B5IZJG3XKr5llka7ey84fw/NOYqESP5WUfQs9zz1ww/9+qoz4ka/S6KcGBodzlCeZ5UImKbscg==";
+      };
+    };
+    "@rudderstack/rudder-sdk-node-1.0.6" = {
+      name = "_at_rudderstack_slash_rudder-sdk-node";
+      packageName = "@rudderstack/rudder-sdk-node";
+      version = "1.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@rudderstack/rudder-sdk-node/-/rudder-sdk-node-1.0.6.tgz";
+        sha512 = "kJYCXv6fRFbQrAp3hMsgRCnAa7RUBdbiGLBT9PcpQURi0VwHmD7mk3Ja7U4HDnL0EHXYJpPyx3oSonkklmPJ9Q==";
+      };
+    };
+    "@sap/hana-client-2.18.22" = {
+      name = "_at_sap_slash_hana-client";
+      packageName = "@sap/hana-client";
+      version = "2.18.22";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@sap/hana-client/-/hana-client-2.18.22.tgz";
+        sha512 = "iihhrDk70vg9SYHCDWnFiYSBjS3y5TMojPqEPkcPpkNg7YuYlabcdY7xy4iepLpDP6jqa1EijPxPi33zYAnXzw==";
+      };
+    };
+    "@segment/loosely-validate-event-2.0.0" = {
+      name = "_at_segment_slash_loosely-validate-event";
+      packageName = "@segment/loosely-validate-event";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@segment/loosely-validate-event/-/loosely-validate-event-2.0.0.tgz";
+        sha512 = "ZMCSfztDBqwotkl848ODgVcAmN4OItEWDCkshcKz0/W6gGSQayuuCtWV/MlodFivAZD793d6UgANd6wCXUfrIw==";
+      };
+    };
+    "@selderee/plugin-htmlparser2-0.11.0" = {
+      name = "_at_selderee_slash_plugin-htmlparser2";
+      packageName = "@selderee/plugin-htmlparser2";
+      version = "0.11.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@selderee/plugin-htmlparser2/-/plugin-htmlparser2-0.11.0.tgz";
+        sha512 = "P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==";
+      };
+    };
+    "@sentry-internal/tracing-7.68.0" = {
+      name = "_at_sentry-internal_slash_tracing";
+      packageName = "@sentry-internal/tracing";
+      version = "7.68.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.68.0.tgz";
+        sha512 = "nNKS/q21+Iqzxs2K7T/l3dZi8Z9s/uxsAazpk2AYhFzx9mFnPj1Xfe3dgbFoygNifE+IrpUuldr6D5HQamTDPQ==";
+      };
+    };
+    "@sentry/core-7.68.0" = {
+      name = "_at_sentry_slash_core";
+      packageName = "@sentry/core";
+      version = "7.68.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@sentry/core/-/core-7.68.0.tgz";
+        sha512 = "mT3ObBWgvAky/QF3dZy4KBoXbRXbNsD6evn+mYi9UEeIZQ5NpnQYDEp78mapiEjI/TAHZIhTIuaBhj1Jk0qUUA==";
+      };
+    };
+    "@sentry/integrations-7.68.0" = {
+      name = "_at_sentry_slash_integrations";
+      packageName = "@sentry/integrations";
+      version = "7.68.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@sentry/integrations/-/integrations-7.68.0.tgz";
+        sha512 = "kCY+rD2QD9YAatx9rFT7ndxCTigP10lWTX1qZHNKZBZqr38SvsaD3tyVpbXVPjaFR1tnpuH0osWAjY/gyjFhlw==";
+      };
+    };
+    "@sentry/node-7.68.0" = {
+      name = "_at_sentry_slash_node";
+      packageName = "@sentry/node";
+      version = "7.68.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@sentry/node/-/node-7.68.0.tgz";
+        sha512 = "gtcHoi6Xu6Iu8MpPgKJA4E0nozqLvYF0fKtt+27T0QBzWioO6lkxSQkKGWMyJGL0AmpLCex0E28fck/rlbt0LA==";
+      };
+    };
+    "@sentry/types-7.68.0" = {
+      name = "_at_sentry_slash_types";
+      packageName = "@sentry/types";
+      version = "7.68.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@sentry/types/-/types-7.68.0.tgz";
+        sha512 = "5J2pH1Pjx/029zTm3CNY9MaE8Aui81nG7JCtlMp7uEfQ//9Ja4d4Sliz/kV4ARbkIKUZerSgaRAm3xCy5XOXLg==";
+      };
+    };
+    "@sentry/utils-7.68.0" = {
+      name = "_at_sentry_slash_utils";
+      packageName = "@sentry/utils";
+      version = "7.68.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@sentry/utils/-/utils-7.68.0.tgz";
+        sha512 = "NecnQegvKARyeFmBx7mYmbI17mTvjARWs1nfzY5jhPyNc3Zk4M3bQsgIdnJ1t+jo93UYudlNND7hxhDzjcBAVg==";
+      };
+    };
+    "@smithy/abort-controller-2.0.6" = {
+      name = "_at_smithy_slash_abort-controller";
+      packageName = "@smithy/abort-controller";
+      version = "2.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.6.tgz";
+        sha512 = "4I7g0lyGUlW2onf8mD76IzU37oRWSHsQ5zlW5MjDzgg4I4J9bOK4500Gx6qOuoN7+GulAnGLe1YwyrIluzhakg==";
+      };
+    };
+    "@smithy/config-resolver-2.0.7" = {
+      name = "_at_smithy_slash_config-resolver";
+      packageName = "@smithy/config-resolver";
+      version = "2.0.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.7.tgz";
+        sha512 = "J4J1AWiqaApC+3I9U++SuxAQ3BOoM5VoYnpFzCZcb63aLF80Zpc/nq2pFR1OsEIYyg2UYNdcBKKfHABmwo4WgQ==";
+      };
+    };
+    "@smithy/credential-provider-imds-2.0.9" = {
+      name = "_at_smithy_slash_credential-provider-imds";
+      packageName = "@smithy/credential-provider-imds";
+      version = "2.0.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.9.tgz";
+        sha512 = "K7WZRkHS5HZofRgK+O8W4YXXyaVexU1K6hp9vlUL/8CsnrFbZS9quyH/6hTROrYh2PuJr24yii1kc83NJdxMGQ==";
+      };
+    };
+    "@smithy/eventstream-codec-2.0.6" = {
+      name = "_at_smithy_slash_eventstream-codec";
+      packageName = "@smithy/eventstream-codec";
+      version = "2.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.6.tgz";
+        sha512 = "J9xL82mlYRUMXFnB9VaThXkD7z2JLr52FIVZMoQQ1dxZG5ub+NOGmzaTTZC/cMmKXI/nwCoFuwDWCTjwQhYhQA==";
+      };
+    };
+    "@smithy/fetch-http-handler-2.1.2" = {
+      name = "_at_smithy_slash_fetch-http-handler";
+      packageName = "@smithy/fetch-http-handler";
+      version = "2.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.1.2.tgz";
+        sha512 = "3Gm3pQm4viUPU+e7KkRScS9t5phBxSNRS8rQSZ+HeCwK/busrX0/2HJZiwLvGblqPqi1laJB0lD18AdiOioJww==";
+      };
+    };
+    "@smithy/hash-node-2.0.6" = {
+      name = "_at_smithy_slash_hash-node";
+      packageName = "@smithy/hash-node";
+      version = "2.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.6.tgz";
+        sha512 = "xz7fzFxSzxohKGGyKPbLReRrY01JOZgRDHIXSks3PxQxG9c8PJMa5nUw0stH8UOySUgkofmMy0n7vTUsF5Mdqg==";
+      };
+    };
+    "@smithy/invalid-dependency-2.0.6" = {
+      name = "_at_smithy_slash_invalid-dependency";
+      packageName = "@smithy/invalid-dependency";
+      version = "2.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.6.tgz";
+        sha512 = "L5MUyl9mzawIvBxr0Hg3J/Q5qZFXKcBgMk0PacfK3Mthp4WAR6h7iMxdSQ23Q7X/kxOrpZuoYEdh1BWLKbDc8Q==";
+      };
+    };
+    "@smithy/is-array-buffer-2.0.0" = {
+      name = "_at_smithy_slash_is-array-buffer";
+      packageName = "@smithy/is-array-buffer";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz";
+        sha512 = "z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==";
+      };
+    };
+    "@smithy/middleware-content-length-2.0.8" = {
+      name = "_at_smithy_slash_middleware-content-length";
+      packageName = "@smithy/middleware-content-length";
+      version = "2.0.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.8.tgz";
+        sha512 = "fHJFsscHXrYhUSWMFJNXfsZW8KsyhWQfBgU3b0nvDfpm+NAeQLqKYNhywGrDwZQc1k+lt7Fw9faAquhNPxTZRA==";
+      };
+    };
+    "@smithy/middleware-endpoint-2.0.6" = {
+      name = "_at_smithy_slash_middleware-endpoint";
+      packageName = "@smithy/middleware-endpoint";
+      version = "2.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.0.6.tgz";
+        sha512 = "MuSPPtEHFal/M77tR3ffLsdOfX29IZpA990nGuoPj5zQnAYrA4PYBGoqqrASQKm8Xb3C0NwuYzOATT7WX4f5Pg==";
+      };
+    };
+    "@smithy/middleware-retry-2.0.9" = {
+      name = "_at_smithy_slash_middleware-retry";
+      packageName = "@smithy/middleware-retry";
+      version = "2.0.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.9.tgz";
+        sha512 = "gneEqWj4l/ZjHdZPk0BFMXoTalRArdQ8i579/KqJgBAc6Ux5vnR/SSppkMCkj2kOQYwdypvzSPeqEW3ZrvIg6g==";
+      };
+    };
+    "@smithy/middleware-serde-2.0.6" = {
+      name = "_at_smithy_slash_middleware-serde";
+      packageName = "@smithy/middleware-serde";
+      version = "2.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.6.tgz";
+        sha512 = "8/GODBngYbrS28CMZtaHIL4R9rLNSQ/zgb+N1OAZ02NwBUawlnLDcatve9YRzhJC/IWz0/pt+WimJZaO1sGcig==";
+      };
+    };
+    "@smithy/middleware-stack-2.0.0" = {
+      name = "_at_smithy_slash_middleware-stack";
+      packageName = "@smithy/middleware-stack";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.0.tgz";
+        sha512 = "31XC1xNF65nlbc16yuh3wwTudmqs6qy4EseQUGF8A/p2m/5wdd/cnXJqpniy/XvXVwkHPz/GwV36HqzHtIKATQ==";
+      };
+    };
+    "@smithy/node-config-provider-2.0.9" = {
+      name = "_at_smithy_slash_node-config-provider";
+      packageName = "@smithy/node-config-provider";
+      version = "2.0.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.0.9.tgz";
+        sha512 = "TlSPbCwtT/jgNnmPQqKuCR5CFN8UIrCCHRrgUfs3NqRMuaLLeP8TPe1fSKq2J8h1M/jd4BF853gneles0gWevg==";
+      };
+    };
+    "@smithy/node-http-handler-2.1.2" = {
+      name = "_at_smithy_slash_node-http-handler";
+      packageName = "@smithy/node-http-handler";
+      version = "2.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.2.tgz";
+        sha512 = "PdEEDCShuM8zxGoaRxmGB/1ikB8oeqz+ZAF9VIA8FCP3E59j8zDTF+wCELoWd1Y6gtxr+RcTAg5sA8nvn5qH/w==";
+      };
+    };
+    "@smithy/property-provider-2.0.7" = {
+      name = "_at_smithy_slash_property-provider";
+      packageName = "@smithy/property-provider";
+      version = "2.0.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.7.tgz";
+        sha512 = "XT8Tl7YNxM8tCtGqy7v7DSf6PxyXaPE9cdA/Yj4dEw2b05V3RrPqsP+t5XJiZu0yIsQ7pdeYZWv2sSEWVjNeAg==";
+      };
+    };
+    "@smithy/protocol-http-2.0.5" = {
+      name = "_at_smithy_slash_protocol-http";
+      packageName = "@smithy/protocol-http";
+      version = "2.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-2.0.5.tgz";
+        sha512 = "d2hhHj34mA2V86doiDfrsy2fNTnUOowGaf9hKb0hIPHqvcnShU4/OSc4Uf1FwHkAdYF3cFXTrj5VGUYbEuvMdw==";
+      };
+    };
+    "@smithy/protocol-http-3.0.2" = {
+      name = "_at_smithy_slash_protocol-http";
+      packageName = "@smithy/protocol-http";
+      version = "3.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.2.tgz";
+        sha512 = "LUOWCPRihvJBkdSs+ivK9m1f/rMfF3n9Zpzg8qdry2eIG4HQqqLBMWQyF9bgk7JhsrrOa3//jJKhXzvL7wL5Xw==";
+      };
+    };
+    "@smithy/querystring-builder-2.0.6" = {
+      name = "_at_smithy_slash_querystring-builder";
+      packageName = "@smithy/querystring-builder";
+      version = "2.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.6.tgz";
+        sha512 = "HnU00shCGoV8vKJZTiNBkNvR9NogU3NIUaVMAGJPSqNGJj3psWo+TUrC0BVCDcwiCljXwXCFGJqIcsWtClrktQ==";
+      };
+    };
+    "@smithy/querystring-parser-2.0.6" = {
+      name = "_at_smithy_slash_querystring-parser";
+      packageName = "@smithy/querystring-parser";
+      version = "2.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.6.tgz";
+        sha512 = "i4LKoXHP7pTFAPjLIJyQXYOhWokbcFha3WWsX74sAKmuluv0XM2cxONZoFxwEzmWhsNyM6buSwJSZXyPiec0AQ==";
+      };
+    };
+    "@smithy/service-error-classification-2.0.0" = {
+      name = "_at_smithy_slash_service-error-classification";
+      packageName = "@smithy/service-error-classification";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.0.tgz";
+        sha512 = "2z5Nafy1O0cTf69wKyNjGW/sNVMiqDnb4jgwfMG8ye8KnFJ5qmJpDccwIbJNhXIfbsxTg9SEec2oe1cexhMJvw==";
+      };
+    };
+    "@smithy/shared-ini-file-loader-2.0.8" = {
+      name = "_at_smithy_slash_shared-ini-file-loader";
+      packageName = "@smithy/shared-ini-file-loader";
+      version = "2.0.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.8.tgz";
+        sha512 = "4u+V+Dv7JGpJ0tppB5rxCem7WhdFux950z4cGPhV0kHTPkKe8DDgINzOlVa2RBu5dI33D02OBJcxFjhW4FPORg==";
+      };
+    };
+    "@smithy/signature-v4-2.0.6" = {
+      name = "_at_smithy_slash_signature-v4";
+      packageName = "@smithy/signature-v4";
+      version = "2.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.6.tgz";
+        sha512 = "4zNTi8w4sky07YKq7oYucZt4ogY00IEaS1NFDXxmCN5V/ywE0WiK+WMim+8wtYQmB0qy3oExZR4LoCAml6j/rA==";
+      };
+    };
+    "@smithy/smithy-client-2.1.3" = {
+      name = "_at_smithy_slash_smithy-client";
+      packageName = "@smithy/smithy-client";
+      version = "2.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.3.tgz";
+        sha512 = "nSMMp2AKqcG/ruzCY01ogrMdbq/WS1cvGStTsw7yd6bTpp/bGtlOgXvy3h7e0zP7w2DH1AtvIwzYBD6ejZePsQ==";
+      };
+    };
+    "@smithy/types-2.3.0" = {
+      name = "_at_smithy_slash_types";
+      packageName = "@smithy/types";
+      version = "2.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@smithy/types/-/types-2.3.0.tgz";
+        sha512 = "pJce3rd39MElkV57UTPAoSYAApjQLELUxjU5adHNLYk9gnPvyIGbJNJTZVVFu00BrgZH3W/cQe8QuFcknDyodQ==";
+      };
+    };
+    "@smithy/url-parser-2.0.6" = {
+      name = "_at_smithy_slash_url-parser";
+      packageName = "@smithy/url-parser";
+      version = "2.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.6.tgz";
+        sha512 = "9i6j5QW6bapHZ4rtkXOAm0hOUG1+5IVdVJXNSUTcNskwJchZH5IQuDNPCbgUi/u2P8EZazKt4wXT51QxOXCz1A==";
+      };
+    };
+    "@smithy/util-base64-2.0.0" = {
+      name = "_at_smithy_slash_util-base64";
+      packageName = "@smithy/util-base64";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.0.tgz";
+        sha512 = "Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA==";
+      };
+    };
+    "@smithy/util-body-length-browser-2.0.0" = {
+      name = "_at_smithy_slash_util-body-length-browser";
+      packageName = "@smithy/util-body-length-browser";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.0.tgz";
+        sha512 = "JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==";
+      };
+    };
+    "@smithy/util-body-length-node-2.1.0" = {
+      name = "_at_smithy_slash_util-body-length-node";
+      packageName = "@smithy/util-body-length-node";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.1.0.tgz";
+        sha512 = "/li0/kj/y3fQ3vyzn36NTLGmUwAICb7Jbe/CsWCktW363gh1MOcpEcSO3mJ344Gv2dqz8YJCLQpb6hju/0qOWw==";
+      };
+    };
+    "@smithy/util-buffer-from-2.0.0" = {
+      name = "_at_smithy_slash_util-buffer-from";
+      packageName = "@smithy/util-buffer-from";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz";
+        sha512 = "/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==";
+      };
+    };
+    "@smithy/util-config-provider-2.0.0" = {
+      name = "_at_smithy_slash_util-config-provider";
+      packageName = "@smithy/util-config-provider";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.0.0.tgz";
+        sha512 = "xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==";
+      };
+    };
+    "@smithy/util-defaults-mode-browser-2.0.7" = {
+      name = "_at_smithy_slash_util-defaults-mode-browser";
+      packageName = "@smithy/util-defaults-mode-browser";
+      version = "2.0.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.7.tgz";
+        sha512 = "s1caKxC7Y87Q72Goll//clZs2WNBfG9WtFDWVRS+Qgk147YPCOUYtkpuD0XZAh/vbayObFz5tQ1fiX4G19HSCA==";
+      };
+    };
+    "@smithy/util-defaults-mode-node-2.0.9" = {
+      name = "_at_smithy_slash_util-defaults-mode-node";
+      packageName = "@smithy/util-defaults-mode-node";
+      version = "2.0.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.9.tgz";
+        sha512 = "HlV4iNL3/PgPpmDGs0+XrAKtwFQ8rOs5P2y5Dye8dUYaJauadlzHRrNKk7wH2aBYswvT2HM+PIgXamvrE7xbcw==";
+      };
+    };
+    "@smithy/util-hex-encoding-2.0.0" = {
+      name = "_at_smithy_slash_util-hex-encoding";
+      packageName = "@smithy/util-hex-encoding";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz";
+        sha512 = "c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==";
+      };
+    };
+    "@smithy/util-middleware-2.0.0" = {
+      name = "_at_smithy_slash_util-middleware";
+      packageName = "@smithy/util-middleware";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.0.tgz";
+        sha512 = "eCWX4ECuDHn1wuyyDdGdUWnT4OGyIzV0LN1xRttBFMPI9Ff/4heSHVxneyiMtOB//zpXWCha1/SWHJOZstG7kA==";
+      };
+    };
+    "@smithy/util-retry-2.0.0" = {
+      name = "_at_smithy_slash_util-retry";
+      packageName = "@smithy/util-retry";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.0.tgz";
+        sha512 = "/dvJ8afrElasuiiIttRJeoS2sy8YXpksQwiM/TcepqdRVp7u4ejd9C4IQURHNjlfPUT7Y6lCDSa2zQJbdHhVTg==";
+      };
+    };
+    "@smithy/util-stream-2.0.9" = {
+      name = "_at_smithy_slash_util-stream";
+      packageName = "@smithy/util-stream";
+      version = "2.0.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.9.tgz";
+        sha512 = "Fn2/3IMwqu0l2hOC7K3bbtSqFEJ6nOzMLoPVIhuH84yw/95itNkFBwVbIIiAfDaout0ZfZ26+5ch86E2q3avww==";
+      };
+    };
+    "@smithy/util-uri-escape-2.0.0" = {
+      name = "_at_smithy_slash_util-uri-escape";
+      packageName = "@smithy/util-uri-escape";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz";
+        sha512 = "ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==";
+      };
+    };
+    "@smithy/util-utf8-2.0.0" = {
+      name = "_at_smithy_slash_util-utf8";
+      packageName = "@smithy/util-utf8";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.0.tgz";
+        sha512 = "rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==";
+      };
+    };
+    "@sqltools/formatter-1.2.5" = {
+      name = "_at_sqltools_slash_formatter";
+      packageName = "@sqltools/formatter";
+      version = "1.2.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@sqltools/formatter/-/formatter-1.2.5.tgz";
+        sha512 = "Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==";
+      };
+    };
+    "@swc/core-1.3.84" = {
+      name = "_at_swc_slash_core";
+      packageName = "@swc/core";
+      version = "1.3.84";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@swc/core/-/core-1.3.84.tgz";
+        sha512 = "UPKUiDwG7HOdPfOb1VFeEJ76JDgU2w80JLewzx6tb0fk9TIjhr9yxKBzPbzc/QpjGHDu5iaEuNeZcu27u4j63g==";
+      };
+    };
+    "@swc/helpers-0.5.2" = {
+      name = "_at_swc_slash_helpers";
+      packageName = "@swc/helpers";
+      version = "0.5.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz";
+        sha512 = "E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==";
+      };
+    };
+    "@swc/types-0.1.4" = {
+      name = "_at_swc_slash_types";
+      packageName = "@swc/types";
+      version = "0.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@swc/types/-/types-0.1.4.tgz";
+        sha512 = "z/G02d+59gyyUb7KYhKi9jOhicek6QD2oMaotUyG+lUkybpXoV49dY9bj7Ah5Q+y7knK2jU67UTX9FyfGzaxQg==";
+      };
+    };
+    "@swc/wasm-1.3.84" = {
+      name = "_at_swc_slash_wasm";
+      packageName = "@swc/wasm";
+      version = "1.3.84";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@swc/wasm/-/wasm-1.3.84.tgz";
+        sha512 = "lFF3vflQLl9pDVnlZAmH0y8cTdXDU5LhUlj6HxyZA83Ft4CkLhZSCE3CU9ksBeonGdj8YsIh0RPDQ3dqj70IZQ==";
+      };
+    };
+    "@techteamer/ocsp-1.0.0" = {
+      name = "_at_techteamer_slash_ocsp";
+      packageName = "@techteamer/ocsp";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@techteamer/ocsp/-/ocsp-1.0.0.tgz";
+        sha512 = "lNAOoFHaZN+4huo30ukeqVrUmfC+avoEBYQ11QAnAw1PFhnI5oBCg8O/TNiCoEWix7gNGBIEjrQwtPREqKMPog==";
+      };
+    };
+    "@tediousjs/connection-string-0.3.0" = {
+      name = "_at_tediousjs_slash_connection-string";
+      packageName = "@tediousjs/connection-string";
+      version = "0.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@tediousjs/connection-string/-/connection-string-0.3.0.tgz";
+        sha512 = "d/keJiNKfpHo+GmSB8QcsAwBx8h+V1UbdozA5TD+eSLXprNY53JAYub47J9evsSKWDdNG5uVj0FiMozLKuzowQ==";
+      };
+    };
+    "@tediousjs/connection-string-0.5.0" = {
+      name = "_at_tediousjs_slash_connection-string";
+      packageName = "@tediousjs/connection-string";
+      version = "0.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@tediousjs/connection-string/-/connection-string-0.5.0.tgz";
+        sha512 = "7qSgZbincDDDFyRweCIEvZULFAw5iz/DeunhvuxpL31nfntX3P4Yd4HkHBRg9H8CdqY1e5WFN1PZIz/REL9MVQ==";
+      };
+    };
+    "@tokenizer/token-0.3.0" = {
+      name = "_at_tokenizer_slash_token";
+      packageName = "@tokenizer/token";
+      version = "0.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz";
+        sha512 = "OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==";
+      };
+    };
+    "@tootallnate/once-1.1.2" = {
+      name = "_at_tootallnate_slash_once";
+      packageName = "@tootallnate/once";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz";
+        sha512 = "RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==";
+      };
+    };
+    "@tootallnate/once-2.0.0" = {
+      name = "_at_tootallnate_slash_once";
+      packageName = "@tootallnate/once";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz";
+        sha512 = "XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==";
+      };
+    };
+    "@tsconfig/node10-1.0.9" = {
+      name = "_at_tsconfig_slash_node10";
+      packageName = "@tsconfig/node10";
+      version = "1.0.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz";
+        sha512 = "jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==";
+      };
+    };
+    "@tsconfig/node12-1.0.11" = {
+      name = "_at_tsconfig_slash_node12";
+      packageName = "@tsconfig/node12";
+      version = "1.0.11";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz";
+        sha512 = "cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==";
+      };
+    };
+    "@tsconfig/node14-1.0.3" = {
+      name = "_at_tsconfig_slash_node14";
+      packageName = "@tsconfig/node14";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz";
+        sha512 = "ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==";
+      };
+    };
+    "@tsconfig/node16-1.0.4" = {
+      name = "_at_tsconfig_slash_node16";
+      packageName = "@tsconfig/node16";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz";
+        sha512 = "vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==";
+      };
+    };
+    "@types/asn1-0.2.1" = {
+      name = "_at_types_slash_asn1";
+      packageName = "@types/asn1";
+      version = "0.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/asn1/-/asn1-0.2.1.tgz";
+        sha512 = "MgrOWeBGvb9CU43AOMvrr7laqiATS4dApdqnmXl4MLxH6rSXcjSoh12y/9YGv/7Cn63cob5xQjcxVvjnOLmrmw==";
+      };
+    };
+    "@types/big.js-6.2.0" = {
+      name = "_at_types_slash_big.js";
+      packageName = "@types/big.js";
+      version = "6.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/big.js/-/big.js-6.2.0.tgz";
+        sha512 = "ubLURWoc4tCw/8Yds0P3CE9cBG5q+aoycwWBiXXx4gp7XPYZy9ch0L9+Pv6osSoSRgvuQNqJdlwEhP5QhKKl6w==";
+      };
+    };
+    "@types/body-parser-1.19.2" = {
+      name = "_at_types_slash_body-parser";
+      packageName = "@types/body-parser";
+      version = "1.19.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz";
+        sha512 = "ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==";
+      };
+    };
+    "@types/connect-3.4.36" = {
+      name = "_at_types_slash_connect";
+      packageName = "@types/connect";
+      version = "3.4.36";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/connect/-/connect-3.4.36.tgz";
+        sha512 = "P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==";
+      };
+    };
+    "@types/duplexify-3.6.1" = {
+      name = "_at_types_slash_duplexify";
+      packageName = "@types/duplexify";
+      version = "3.6.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/duplexify/-/duplexify-3.6.1.tgz";
+        sha512 = "n0zoEj/fMdMOvqbHxmqnza/kXyoGgJmEpsXjpP+gEqE1Ye4yNqc7xWipKnUoMpWhMuzJQSfK2gMrwlElly7OGQ==";
+      };
+    };
+    "@types/es-aggregate-error-1.0.2" = {
+      name = "_at_types_slash_es-aggregate-error";
+      packageName = "@types/es-aggregate-error";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/es-aggregate-error/-/es-aggregate-error-1.0.2.tgz";
+        sha512 = "erqUpFXksaeR2kejKnhnjZjbFxUpGZx4Z7ydNL9ie8tEhXPiZTsLeUDJ6aR1F8j5wWUAtOAQWUqkc7givBJbBA==";
+      };
+    };
+    "@types/eslint-8.44.2" = {
+      name = "_at_types_slash_eslint";
+      packageName = "@types/eslint";
+      version = "8.44.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.2.tgz";
+        sha512 = "sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg==";
+      };
+    };
+    "@types/eslint-scope-3.7.4" = {
+      name = "_at_types_slash_eslint-scope";
+      packageName = "@types/eslint-scope";
+      version = "3.7.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz";
+        sha512 = "9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==";
+      };
+    };
+    "@types/estree-1.0.1" = {
+      name = "_at_types_slash_estree";
+      packageName = "@types/estree";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz";
+        sha512 = "LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==";
+      };
+    };
+    "@types/express-4.17.17" = {
+      name = "_at_types_slash_express";
+      packageName = "@types/express";
+      version = "4.17.17";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz";
+        sha512 = "Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==";
+      };
+    };
+    "@types/express-serve-static-core-4.17.36" = {
+      name = "_at_types_slash_express-serve-static-core";
+      packageName = "@types/express-serve-static-core";
+      version = "4.17.36";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.36.tgz";
+        sha512 = "zbivROJ0ZqLAtMzgzIUC4oNqDG9iF0lSsAqpOD9kbs5xcIM3dTiyuHvBc7R8MtWBp3AAWGaovJa+wzWPjLYW7Q==";
+      };
+    };
+    "@types/http-errors-2.0.1" = {
+      name = "_at_types_slash_http-errors";
+      packageName = "@types/http-errors";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.1.tgz";
+        sha512 = "/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==";
+      };
+    };
+    "@types/json-schema-7.0.12" = {
+      name = "_at_types_slash_json-schema";
+      packageName = "@types/json-schema";
+      version = "7.0.12";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz";
+        sha512 = "Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==";
+      };
+    };
+    "@types/jsonwebtoken-9.0.2" = {
+      name = "_at_types_slash_jsonwebtoken";
+      packageName = "@types/jsonwebtoken";
+      version = "9.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz";
+        sha512 = "drE6uz7QBKq1fYqqoFKTDRdFCPHd5TCub75BM+D+cMx7NU9hUz7SESLfC2fSCXVFMO5Yj8sOWHuGqPgjc+fz0Q==";
+      };
+    };
+    "@types/lodash-4.14.198" = {
+      name = "_at_types_slash_lodash";
+      packageName = "@types/lodash";
+      version = "4.14.198";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.198.tgz";
+        sha512 = "trNJ/vtMZYMLhfN45uLq4ShQSw0/S7xCTLLVM+WM1rmFpba/VS42jVUgaO3w/NOLiWR/09lnYk0yMaA/atdIsg==";
+      };
+    };
+    "@types/lodash-es-4.17.9" = {
+      name = "_at_types_slash_lodash-es";
+      packageName = "@types/lodash-es";
+      version = "4.17.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.9.tgz";
+        sha512 = "ZTcmhiI3NNU7dEvWLZJkzG6ao49zOIjEgIE0RgV7wbPxU0f2xT3VSAHw2gmst8swH6V0YkLRGp4qPlX/6I90MQ==";
+      };
+    };
+    "@types/long-4.0.2" = {
+      name = "_at_types_slash_long";
+      packageName = "@types/long";
+      version = "4.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz";
+        sha512 = "MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==";
+      };
+    };
+    "@types/mime-1.3.2" = {
+      name = "_at_types_slash_mime";
+      packageName = "@types/mime";
+      version = "1.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz";
+        sha512 = "YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==";
+      };
+    };
+    "@types/multer-1.4.7" = {
+      name = "_at_types_slash_multer";
+      packageName = "@types/multer";
+      version = "1.4.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/multer/-/multer-1.4.7.tgz";
+        sha512 = "/SNsDidUFCvqqcWDwxv2feww/yqhNeTRL5CVoL3jU4Goc4kKEL10T7Eye65ZqPNi4HRx8sAEX59pV1aEH7drNA==";
+      };
+    };
+    "@types/node-20.6.0" = {
+      name = "_at_types_slash_node";
+      packageName = "@types/node";
+      version = "20.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/node/-/node-20.6.0.tgz";
+        sha512 = "najjVq5KN2vsH2U/xyh2opaSEz6cZMR2SetLIlxlj08nOcmPOemJmUK2o4kUzfLqfrWE0PIrNeE16XhYDd3nqg==";
+      };
+    };
+    "@types/node-fetch-2.6.4" = {
+      name = "_at_types_slash_node-fetch";
+      packageName = "@types/node-fetch";
+      version = "2.6.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.4.tgz";
+        sha512 = "1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg==";
+      };
+    };
+    "@types/pumpify-1.4.1" = {
+      name = "_at_types_slash_pumpify";
+      packageName = "@types/pumpify";
+      version = "1.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/pumpify/-/pumpify-1.4.1.tgz";
+        sha512 = "l7u/Dnh1OG9T7VH6TvulR0g8oE8hgIW5409mSUKi8Vxw2+JV18aTa06Sv5bvNjrD0zbsB/cuZ/iTFQgFNfzIuw==";
+      };
+    };
+    "@types/qs-6.9.8" = {
+      name = "_at_types_slash_qs";
+      packageName = "@types/qs";
+      version = "6.9.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz";
+        sha512 = "u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg==";
+      };
+    };
+    "@types/range-parser-1.2.4" = {
+      name = "_at_types_slash_range-parser";
+      packageName = "@types/range-parser";
+      version = "1.2.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz";
+        sha512 = "EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==";
+      };
+    };
+    "@types/readable-stream-4.0.2" = {
+      name = "_at_types_slash_readable-stream";
+      packageName = "@types/readable-stream";
+      version = "4.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.2.tgz";
+        sha512 = "hhzOsMEISZ+mX1l+01F0duYt9wHEbCGmjARed0PcQoVS5zAdu7u5YbWYuNGhw09M1MgGr3kfsto+ut/MnAdKqA==";
+      };
+    };
+    "@types/send-0.17.1" = {
+      name = "_at_types_slash_send";
+      packageName = "@types/send";
+      version = "0.17.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz";
+        sha512 = "Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==";
+      };
+    };
+    "@types/serve-static-1.15.2" = {
+      name = "_at_types_slash_serve-static";
+      packageName = "@types/serve-static";
+      version = "1.15.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.2.tgz";
+        sha512 = "J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==";
+      };
+    };
+    "@types/stack-trace-0.0.29" = {
+      name = "_at_types_slash_stack-trace";
+      packageName = "@types/stack-trace";
+      version = "0.0.29";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/stack-trace/-/stack-trace-0.0.29.tgz";
+        sha512 = "TgfOX+mGY/NyNxJLIbDWrO9DjGoVSW9+aB8H2yy1fy32jsvxijhmyJI9fDFgvz3YP4lvJaq9DzdR/M1bOgVc9g==";
+      };
+    };
+    "@types/triple-beam-1.3.2" = {
+      name = "_at_types_slash_triple-beam";
+      packageName = "@types/triple-beam";
+      version = "1.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.2.tgz";
+        sha512 = "txGIh+0eDFzKGC25zORnswy+br1Ha7hj5cMVwKIU7+s0U2AxxJru/jZSMU6OC9MJWP6+pc/hc6ZjyZShpsyY2g==";
+      };
+    };
+    "@types/tunnel-0.0.3" = {
+      name = "_at_types_slash_tunnel";
+      packageName = "@types/tunnel";
+      version = "0.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/tunnel/-/tunnel-0.0.3.tgz";
+        sha512 = "sOUTGn6h1SfQ+gbgqC364jLFBw2lnFqkgF3q0WovEHRLMrVD1sd5aufqi/aJObLekJO+Aq5z646U4Oxy6shXMA==";
+      };
+    };
+    "@types/uuid-8.3.4" = {
+      name = "_at_types_slash_uuid";
+      packageName = "@types/uuid";
+      version = "8.3.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz";
+        sha512 = "c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==";
+      };
+    };
+    "@types/uuid-9.0.3" = {
+      name = "_at_types_slash_uuid";
+      packageName = "@types/uuid";
+      version = "9.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.3.tgz";
+        sha512 = "taHQQH/3ZyI3zP8M/puluDEIEvtQHVYcC6y3N8ijFtAd28+Ey/G4sg1u2gB01S8MwybLOKAp9/yCMu/uR5l3Ug==";
+      };
+    };
+    "@types/validator-13.11.1" = {
+      name = "_at_types_slash_validator";
+      packageName = "@types/validator";
+      version = "13.11.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/validator/-/validator-13.11.1.tgz";
+        sha512 = "d/MUkJYdOeKycmm75Arql4M5+UuXmf4cHdHKsyw1GcvnNgL6s77UkgSgJ8TE/rI5PYsnwYq5jkcWBLuN/MpQ1A==";
+      };
+    };
+    "@types/web-bluetooth-0.0.16" = {
+      name = "_at_types_slash_web-bluetooth";
+      packageName = "@types/web-bluetooth";
+      version = "0.0.16";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz";
+        sha512 = "oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==";
+      };
+    };
+    "@types/web-bluetooth-0.0.17" = {
+      name = "_at_types_slash_web-bluetooth";
+      packageName = "@types/web-bluetooth";
+      version = "0.0.17";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.17.tgz";
+        sha512 = "4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA==";
+      };
+    };
+    "@types/webidl-conversions-7.0.0" = {
+      name = "_at_types_slash_webidl-conversions";
+      packageName = "@types/webidl-conversions";
+      version = "7.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.0.tgz";
+        sha512 = "xTE1E+YF4aWPJJeUzaZI5DRntlkY3+BCVJi0axFptnjGmAoWxkyREIh/XMrfxVLejwQxMCfDXdICo0VLxThrog==";
+      };
+    };
+    "@types/whatwg-url-8.2.2" = {
+      name = "_at_types_slash_whatwg-url";
+      packageName = "@types/whatwg-url";
+      version = "8.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz";
+        sha512 = "FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==";
+      };
+    };
+    "@types/ws-8.5.5" = {
+      name = "_at_types_slash_ws";
+      packageName = "@types/ws";
+      version = "8.5.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz";
+        sha512 = "lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==";
+      };
+    };
+    "@vue/compiler-core-3.3.4" = {
+      name = "_at_vue_slash_compiler-core";
+      packageName = "@vue/compiler-core";
+      version = "3.3.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.4.tgz";
+        sha512 = "cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==";
+      };
+    };
+    "@vue/compiler-dom-3.3.4" = {
+      name = "_at_vue_slash_compiler-dom";
+      packageName = "@vue/compiler-dom";
+      version = "3.3.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz";
+        sha512 = "wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==";
+      };
+    };
+    "@vue/compiler-sfc-2.7.14" = {
+      name = "_at_vue_slash_compiler-sfc";
+      packageName = "@vue/compiler-sfc";
+      version = "2.7.14";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz";
+        sha512 = "aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==";
+      };
+    };
+    "@vue/compiler-sfc-3.3.4" = {
+      name = "_at_vue_slash_compiler-sfc";
+      packageName = "@vue/compiler-sfc";
+      version = "3.3.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz";
+        sha512 = "6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==";
+      };
+    };
+    "@vue/compiler-ssr-3.3.4" = {
+      name = "_at_vue_slash_compiler-ssr";
+      packageName = "@vue/compiler-ssr";
+      version = "3.3.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz";
+        sha512 = "m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==";
+      };
+    };
+    "@vue/composition-api-1.7.2" = {
+      name = "_at_vue_slash_composition-api";
+      packageName = "@vue/composition-api";
+      version = "1.7.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@vue/composition-api/-/composition-api-1.7.2.tgz";
+        sha512 = "M8jm9J/laYrYT02665HkZ5l2fWTK4dcVg3BsDHm/pfz+MjDYwX+9FUaZyGwEyXEDonQYRCo0H7aLgdklcIELjw==";
+      };
+    };
+    "@vue/devtools-api-6.5.0" = {
+      name = "_at_vue_slash_devtools-api";
+      packageName = "@vue/devtools-api";
+      version = "6.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.0.tgz";
+        sha512 = "o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==";
+      };
+    };
+    "@vue/reactivity-3.3.4" = {
+      name = "_at_vue_slash_reactivity";
+      packageName = "@vue/reactivity";
+      version = "3.3.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.4.tgz";
+        sha512 = "kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==";
+      };
+    };
+    "@vue/reactivity-transform-3.3.4" = {
+      name = "_at_vue_slash_reactivity-transform";
+      packageName = "@vue/reactivity-transform";
+      version = "3.3.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz";
+        sha512 = "MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==";
+      };
+    };
+    "@vue/runtime-core-3.3.4" = {
+      name = "_at_vue_slash_runtime-core";
+      packageName = "@vue/runtime-core";
+      version = "3.3.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.4.tgz";
+        sha512 = "R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==";
+      };
+    };
+    "@vue/runtime-dom-3.3.4" = {
+      name = "_at_vue_slash_runtime-dom";
+      packageName = "@vue/runtime-dom";
+      version = "3.3.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz";
+        sha512 = "Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==";
+      };
+    };
+    "@vue/server-renderer-3.3.4" = {
+      name = "_at_vue_slash_server-renderer";
+      packageName = "@vue/server-renderer";
+      version = "3.3.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.4.tgz";
+        sha512 = "Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==";
+      };
+    };
+    "@vue/shared-3.3.4" = {
+      name = "_at_vue_slash_shared";
+      packageName = "@vue/shared";
+      version = "3.3.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@vue/shared/-/shared-3.3.4.tgz";
+        sha512 = "7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==";
+      };
+    };
+    "@vueuse/components-10.4.1" = {
+      name = "_at_vueuse_slash_components";
+      packageName = "@vueuse/components";
+      version = "10.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@vueuse/components/-/components-10.4.1.tgz";
+        sha512 = "hEWeumCfH394fkEYc/hng6T5VcjVkdqx7b75Sd6z4Uw3anjeo93Zp9qqtzFOv5bAmHls3Zy04Kowo1glrxDFRQ==";
+      };
+    };
+    "@vueuse/core-10.4.1" = {
+      name = "_at_vueuse_slash_core";
+      packageName = "@vueuse/core";
+      version = "10.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@vueuse/core/-/core-10.4.1.tgz";
+        sha512 = "DkHIfMIoSIBjMgRRvdIvxsyboRZQmImofLyOHADqiVbQVilP8VVHDhBX2ZqoItOgu7dWa8oXiNnScOdPLhdEXg==";
+      };
+    };
+    "@vueuse/core-9.13.0" = {
+      name = "_at_vueuse_slash_core";
+      packageName = "@vueuse/core";
+      version = "9.13.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@vueuse/core/-/core-9.13.0.tgz";
+        sha512 = "pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==";
+      };
+    };
+    "@vueuse/metadata-10.4.1" = {
+      name = "_at_vueuse_slash_metadata";
+      packageName = "@vueuse/metadata";
+      version = "10.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.4.1.tgz";
+        sha512 = "2Sc8X+iVzeuMGHr6O2j4gv/zxvQGGOYETYXEc41h0iZXIRnRbJZGmY/QP8dvzqUelf8vg0p/yEA5VpCEu+WpZg==";
+      };
+    };
+    "@vueuse/metadata-9.13.0" = {
+      name = "_at_vueuse_slash_metadata";
+      packageName = "@vueuse/metadata";
+      version = "9.13.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@vueuse/metadata/-/metadata-9.13.0.tgz";
+        sha512 = "gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==";
+      };
+    };
+    "@vueuse/shared-10.4.1" = {
+      name = "_at_vueuse_slash_shared";
+      packageName = "@vueuse/shared";
+      version = "10.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@vueuse/shared/-/shared-10.4.1.tgz";
+        sha512 = "vz5hbAM4qA0lDKmcr2y3pPdU+2EVw/yzfRsBdu+6+USGa4PxqSQRYIUC9/NcT06y+ZgaTsyURw2I9qOFaaXHAg==";
+      };
+    };
+    "@vueuse/shared-9.13.0" = {
+      name = "_at_vueuse_slash_shared";
+      packageName = "@vueuse/shared";
+      version = "9.13.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@vueuse/shared/-/shared-9.13.0.tgz";
+        sha512 = "UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==";
+      };
+    };
+    "@webassemblyjs/ast-1.11.6" = {
+      name = "_at_webassemblyjs_slash_ast";
+      packageName = "@webassemblyjs/ast";
+      version = "1.11.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz";
+        sha512 = "IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==";
+      };
+    };
+    "@webassemblyjs/floating-point-hex-parser-1.11.6" = {
+      name = "_at_webassemblyjs_slash_floating-point-hex-parser";
+      packageName = "@webassemblyjs/floating-point-hex-parser";
+      version = "1.11.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz";
+        sha512 = "ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==";
+      };
+    };
+    "@webassemblyjs/helper-api-error-1.11.6" = {
+      name = "_at_webassemblyjs_slash_helper-api-error";
+      packageName = "@webassemblyjs/helper-api-error";
+      version = "1.11.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz";
+        sha512 = "o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==";
+      };
+    };
+    "@webassemblyjs/helper-buffer-1.11.6" = {
+      name = "_at_webassemblyjs_slash_helper-buffer";
+      packageName = "@webassemblyjs/helper-buffer";
+      version = "1.11.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz";
+        sha512 = "z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==";
+      };
+    };
+    "@webassemblyjs/helper-numbers-1.11.6" = {
+      name = "_at_webassemblyjs_slash_helper-numbers";
+      packageName = "@webassemblyjs/helper-numbers";
+      version = "1.11.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz";
+        sha512 = "vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==";
+      };
+    };
+    "@webassemblyjs/helper-wasm-bytecode-1.11.6" = {
+      name = "_at_webassemblyjs_slash_helper-wasm-bytecode";
+      packageName = "@webassemblyjs/helper-wasm-bytecode";
+      version = "1.11.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz";
+        sha512 = "sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==";
+      };
+    };
+    "@webassemblyjs/helper-wasm-section-1.11.6" = {
+      name = "_at_webassemblyjs_slash_helper-wasm-section";
+      packageName = "@webassemblyjs/helper-wasm-section";
+      version = "1.11.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz";
+        sha512 = "LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==";
+      };
+    };
+    "@webassemblyjs/ieee754-1.11.6" = {
+      name = "_at_webassemblyjs_slash_ieee754";
+      packageName = "@webassemblyjs/ieee754";
+      version = "1.11.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz";
+        sha512 = "LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==";
+      };
+    };
+    "@webassemblyjs/leb128-1.11.6" = {
+      name = "_at_webassemblyjs_slash_leb128";
+      packageName = "@webassemblyjs/leb128";
+      version = "1.11.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz";
+        sha512 = "m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==";
+      };
+    };
+    "@webassemblyjs/utf8-1.11.6" = {
+      name = "_at_webassemblyjs_slash_utf8";
+      packageName = "@webassemblyjs/utf8";
+      version = "1.11.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz";
+        sha512 = "vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==";
+      };
+    };
+    "@webassemblyjs/wasm-edit-1.11.6" = {
+      name = "_at_webassemblyjs_slash_wasm-edit";
+      packageName = "@webassemblyjs/wasm-edit";
+      version = "1.11.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz";
+        sha512 = "Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==";
+      };
+    };
+    "@webassemblyjs/wasm-gen-1.11.6" = {
+      name = "_at_webassemblyjs_slash_wasm-gen";
+      packageName = "@webassemblyjs/wasm-gen";
+      version = "1.11.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz";
+        sha512 = "3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==";
+      };
+    };
+    "@webassemblyjs/wasm-opt-1.11.6" = {
+      name = "_at_webassemblyjs_slash_wasm-opt";
+      packageName = "@webassemblyjs/wasm-opt";
+      version = "1.11.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz";
+        sha512 = "cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==";
+      };
+    };
+    "@webassemblyjs/wasm-parser-1.11.6" = {
+      name = "_at_webassemblyjs_slash_wasm-parser";
+      packageName = "@webassemblyjs/wasm-parser";
+      version = "1.11.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz";
+        sha512 = "6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==";
+      };
+    };
+    "@webassemblyjs/wast-printer-1.11.6" = {
+      name = "_at_webassemblyjs_slash_wast-printer";
+      packageName = "@webassemblyjs/wast-printer";
+      version = "1.11.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz";
+        sha512 = "JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==";
+      };
+    };
+    "@xmldom/xmldom-0.8.10" = {
+      name = "_at_xmldom_slash_xmldom";
+      packageName = "@xmldom/xmldom";
+      version = "0.8.10";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz";
+        sha512 = "2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==";
+      };
+    };
+    "@xtuc/ieee754-1.2.0" = {
+      name = "_at_xtuc_slash_ieee754";
+      packageName = "@xtuc/ieee754";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz";
+        sha512 = "DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==";
+      };
+    };
+    "@xtuc/long-4.2.2" = {
+      name = "_at_xtuc_slash_long";
+      packageName = "@xtuc/long";
+      version = "4.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz";
+        sha512 = "NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==";
+      };
+    };
+    "a-sync-waterfall-1.0.1" = {
+      name = "a-sync-waterfall";
+      packageName = "a-sync-waterfall";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz";
+        sha512 = "RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==";
+      };
+    };
+    "abbrev-1.1.1" = {
+      name = "abbrev";
+      packageName = "abbrev";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz";
+        sha512 = "nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==";
+      };
+    };
+    "abort-controller-3.0.0" = {
+      name = "abort-controller";
+      packageName = "abort-controller";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz";
+        sha512 = "h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==";
+      };
+    };
+    "accepts-1.3.8" = {
+      name = "accepts";
+      packageName = "accepts";
+      version = "1.3.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz";
+        sha512 = "PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==";
+      };
+    };
+    "acorn-8.10.0" = {
+      name = "acorn";
+      packageName = "acorn";
+      version = "8.10.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz";
+        sha512 = "F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==";
+      };
+    };
+    "acorn-import-assertions-1.9.0" = {
+      name = "acorn-import-assertions";
+      packageName = "acorn-import-assertions";
+      version = "1.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz";
+        sha512 = "cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==";
+      };
+    };
+    "acorn-walk-8.2.0" = {
+      name = "acorn-walk";
+      packageName = "acorn-walk";
+      version = "8.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz";
+        sha512 = "k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==";
+      };
+    };
+    "agent-base-6.0.2" = {
+      name = "agent-base";
+      packageName = "agent-base";
+      version = "6.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz";
+        sha512 = "RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==";
+      };
+    };
+    "agentkeepalive-4.5.0" = {
+      name = "agentkeepalive";
+      packageName = "agentkeepalive";
+      version = "4.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz";
+        sha512 = "5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==";
+      };
+    };
+    "aggregate-error-3.1.0" = {
+      name = "aggregate-error";
+      packageName = "aggregate-error";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz";
+        sha512 = "4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==";
+      };
+    };
+    "ajv-6.12.6" = {
+      name = "ajv";
+      packageName = "ajv";
+      version = "6.12.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz";
+        sha512 = "j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==";
+      };
+    };
+    "ajv-keywords-3.5.2" = {
+      name = "ajv-keywords";
+      packageName = "ajv-keywords";
+      version = "3.5.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz";
+        sha512 = "5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==";
+      };
+    };
+    "amqplib-0.10.3" = {
+      name = "amqplib";
+      packageName = "amqplib";
+      version = "0.10.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/amqplib/-/amqplib-0.10.3.tgz";
+        sha512 = "UHmuSa7n8vVW/a5HGh2nFPqAEr8+cD4dEZ6u9GjP91nHfr1a54RyAKyra7Sb5NH7NBKOUlyQSMXIp0qAixKexw==";
+      };
+    };
+    "ansi-escapes-4.3.2" = {
+      name = "ansi-escapes";
+      packageName = "ansi-escapes";
+      version = "4.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz";
+        sha512 = "gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==";
+      };
+    };
+    "ansi-regex-5.0.1" = {
+      name = "ansi-regex";
+      packageName = "ansi-regex";
+      version = "5.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz";
+        sha512 = "quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==";
+      };
+    };
+    "ansi-regex-6.0.1" = {
+      name = "ansi-regex";
+      packageName = "ansi-regex";
+      version = "6.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz";
+        sha512 = "n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==";
+      };
+    };
+    "ansi-styles-4.3.0" = {
+      name = "ansi-styles";
+      packageName = "ansi-styles";
+      version = "4.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz";
+        sha512 = "zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==";
+      };
+    };
+    "ansi-styles-6.2.1" = {
+      name = "ansi-styles";
+      packageName = "ansi-styles";
+      version = "6.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz";
+        sha512 = "bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==";
+      };
+    };
+    "ansicolors-0.3.2" = {
+      name = "ansicolors";
+      packageName = "ansicolors";
+      version = "0.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz";
+        sha512 = "QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==";
+      };
+    };
+    "any-promise-1.3.0" = {
+      name = "any-promise";
+      packageName = "any-promise";
+      version = "1.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz";
+        sha512 = "7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==";
+      };
+    };
+    "anymatch-3.1.3" = {
+      name = "anymatch";
+      packageName = "anymatch";
+      version = "3.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz";
+        sha512 = "KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==";
+      };
+    };
+    "app-root-path-3.1.0" = {
+      name = "app-root-path";
+      packageName = "app-root-path";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/app-root-path/-/app-root-path-3.1.0.tgz";
+        sha512 = "biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==";
+      };
+    };
+    "append-field-1.0.0" = {
+      name = "append-field";
+      packageName = "append-field";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz";
+        sha512 = "klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==";
+      };
+    };
+    "aproba-2.0.0" = {
+      name = "aproba";
+      packageName = "aproba";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz";
+        sha512 = "lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==";
+      };
+    };
+    "are-we-there-yet-2.0.0" = {
+      name = "are-we-there-yet";
+      packageName = "are-we-there-yet";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz";
+        sha512 = "Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==";
+      };
+    };
+    "are-we-there-yet-3.0.1" = {
+      name = "are-we-there-yet";
+      packageName = "are-we-there-yet";
+      version = "3.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz";
+        sha512 = "QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==";
+      };
+    };
+    "arg-4.1.3" = {
+      name = "arg";
+      packageName = "arg";
+      version = "4.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz";
+        sha512 = "58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==";
+      };
+    };
+    "argparse-1.0.10" = {
+      name = "argparse";
+      packageName = "argparse";
+      version = "1.0.10";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz";
+        sha512 = "o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==";
+      };
+    };
+    "argparse-2.0.1" = {
+      name = "argparse";
+      packageName = "argparse";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz";
+        sha512 = "8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==";
+      };
+    };
+    "array-buffer-byte-length-1.0.0" = {
+      name = "array-buffer-byte-length";
+      packageName = "array-buffer-byte-length";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz";
+        sha512 = "LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==";
+      };
+    };
+    "array-flatten-1.1.1" = {
+      name = "array-flatten";
+      packageName = "array-flatten";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz";
+        sha512 = "PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==";
+      };
+    };
+    "array-parallel-0.1.3" = {
+      name = "array-parallel";
+      packageName = "array-parallel";
+      version = "0.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/array-parallel/-/array-parallel-0.1.3.tgz";
+        sha512 = "TDPTwSWW5E4oiFiKmz6RGJ/a80Y91GuLgUYuLd49+XBS75tYo8PNgaT2K/OxuQYqkoI852MDGBorg9OcUSTQ8w==";
+      };
+    };
+    "array-series-0.1.5" = {
+      name = "array-series";
+      packageName = "array-series";
+      version = "0.1.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/array-series/-/array-series-0.1.5.tgz";
+        sha512 = "L0XlBwfx9QetHOsbLDrE/vh2t018w9462HM3iaFfxRiK83aJjAt/Ja3NMkOW7FICwWTlQBa3ZbL5FKhuQWkDrg==";
+      };
+    };
+    "array-union-2.1.0" = {
+      name = "array-union";
+      packageName = "array-union";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz";
+        sha512 = "HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==";
+      };
+    };
+    "array.prototype.reduce-1.0.6" = {
+      name = "array.prototype.reduce";
+      packageName = "array.prototype.reduce";
+      version = "1.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.6.tgz";
+        sha512 = "UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg==";
+      };
+    };
+    "arraybuffer.prototype.slice-1.0.2" = {
+      name = "arraybuffer.prototype.slice";
+      packageName = "arraybuffer.prototype.slice";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz";
+        sha512 = "yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==";
+      };
+    };
+    "arrify-2.0.1" = {
+      name = "arrify";
+      packageName = "arrify";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz";
+        sha512 = "3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==";
+      };
+    };
+    "asap-2.0.6" = {
+      name = "asap";
+      packageName = "asap";
+      version = "2.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz";
+        sha512 = "BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==";
+      };
+    };
+    "asn1-0.2.6" = {
+      name = "asn1";
+      packageName = "asn1";
+      version = "0.2.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz";
+        sha512 = "ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==";
+      };
+    };
+    "asn1.js-5.4.1" = {
+      name = "asn1.js";
+      packageName = "asn1.js";
+      version = "5.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz";
+        sha512 = "+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==";
+      };
+    };
+    "asn1.js-rfc2560-5.0.1" = {
+      name = "asn1.js-rfc2560";
+      packageName = "asn1.js-rfc2560";
+      version = "5.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/asn1.js-rfc2560/-/asn1.js-rfc2560-5.0.1.tgz";
+        sha512 = "1PrVg6kuBziDN3PGFmRk3QrjpKvP9h/Hv5yMrFZvC1kpzP6dQRzf5BpKstANqHBkaOUmTpakJWhicTATOA/SbA==";
+      };
+    };
+    "asn1.js-rfc5280-3.0.0" = {
+      name = "asn1.js-rfc5280";
+      packageName = "asn1.js-rfc5280";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/asn1.js-rfc5280/-/asn1.js-rfc5280-3.0.0.tgz";
+        sha512 = "Y2LZPOWeZ6qehv698ZgOGGCZXBQShObWnGthTrIFlIQjuV1gg2B8QOhWFRExq/MR1VnPpIIe7P9vX2vElxv+Pg==";
+      };
+    };
+    "assert-options-0.8.0" = {
+      name = "assert-options";
+      packageName = "assert-options";
+      version = "0.8.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/assert-options/-/assert-options-0.8.0.tgz";
+        sha512 = "qSELrEaEz4sGwTs4Qh+swQkjiHAysC4rot21+jzXU86dJzNG+FDqBzyS3ohSoTRf4ZLA3FSwxQdiuNl5NXUtvA==";
+      };
+    };
+    "assert-plus-1.0.0" = {
+      name = "assert-plus";
+      packageName = "assert-plus";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz";
+        sha512 = "NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==";
+      };
+    };
+    "ast-types-0.13.4" = {
+      name = "ast-types";
+      packageName = "ast-types";
+      version = "0.13.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz";
+        sha512 = "x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==";
+      };
+    };
+    "ast-types-0.15.2" = {
+      name = "ast-types";
+      packageName = "ast-types";
+      version = "0.15.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ast-types/-/ast-types-0.15.2.tgz";
+        sha512 = "c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==";
+      };
+    };
+    "async-2.6.4" = {
+      name = "async";
+      packageName = "async";
+      version = "2.6.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/async/-/async-2.6.4.tgz";
+        sha512 = "mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==";
+      };
+    };
+    "async-3.2.4" = {
+      name = "async";
+      packageName = "async";
+      version = "3.2.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/async/-/async-3.2.4.tgz";
+        sha512 = "iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==";
+      };
+    };
+    "async-retry-1.3.3" = {
+      name = "async-retry";
+      packageName = "async-retry";
+      version = "1.3.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz";
+        sha512 = "wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==";
+      };
+    };
+    "async-validator-4.2.5" = {
+      name = "async-validator";
+      packageName = "async-validator";
+      version = "4.2.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz";
+        sha512 = "7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==";
+      };
+    };
+    "asynckit-0.4.0" = {
+      name = "asynckit";
+      packageName = "asynckit";
+      version = "0.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz";
+        sha512 = "Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==";
+      };
+    };
+    "at-least-node-1.0.0" = {
+      name = "at-least-node";
+      packageName = "at-least-node";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz";
+        sha512 = "+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==";
+      };
+    };
+    "auto-changelog-1.16.4" = {
+      name = "auto-changelog";
+      packageName = "auto-changelog";
+      version = "1.16.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/auto-changelog/-/auto-changelog-1.16.4.tgz";
+        sha512 = "h7diyELoq692AA4oqO50ULoYKIomUdzuQ+NW+eFPwIX0xzVbXEu9cIcgzZ3TYNVbpkGtcNKh51aRfAQNef7HVA==";
+      };
+    };
+    "available-typed-arrays-1.0.5" = {
+      name = "available-typed-arrays";
+      packageName = "available-typed-arrays";
+      version = "1.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz";
+        sha512 = "DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==";
+      };
+    };
+    "avsc-5.7.7" = {
+      name = "avsc";
+      packageName = "avsc";
+      version = "5.7.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/avsc/-/avsc-5.7.7.tgz";
+        sha512 = "9cYNccliXZDByFsFliVwk5GvTq058Fj513CiR4E60ndDwmuXzTJEp/Bp8FyuRmGyYupLjHLs+JA9/CBoVS4/NQ==";
+      };
+    };
+    "aws-crt-1.18.0" = {
+      name = "aws-crt";
+      packageName = "aws-crt";
+      version = "1.18.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/aws-crt/-/aws-crt-1.18.0.tgz";
+        sha512 = "H5Vrb/GMzq72+Of2zrW69i/BTQ4gQd3MQvdZ3X3okfppzHdEjSPkdJN6ia8V2/1J1FmFvEtoxaY4nwraHUGQvg==";
+      };
+    };
+    "aws-sdk-2.1454.0" = {
+      name = "aws-sdk";
+      packageName = "aws-sdk";
+      version = "2.1454.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1454.0.tgz";
+        sha512 = "k+wBy+ev2HWawdfYlZqGMD4WI8zyS+r6t1hc8pwSxm3s8wjP69s8df4LjUaMxMwK8xu7UscVVsXJBpMMsXFhew==";
+      };
+    };
+    "aws4-1.12.0" = {
+      name = "aws4";
+      packageName = "aws4";
+      version = "1.12.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz";
+        sha512 = "NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==";
+      };
+    };
+    "axios-0.21.4" = {
+      name = "axios";
+      packageName = "axios";
+      version = "0.21.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz";
+        sha512 = "ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==";
+      };
+    };
+    "axios-0.24.0" = {
+      name = "axios";
+      packageName = "axios";
+      version = "0.24.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz";
+        sha512 = "Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==";
+      };
+    };
+    "axios-0.27.2" = {
+      name = "axios";
+      packageName = "axios";
+      version = "0.27.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz";
+        sha512 = "t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==";
+      };
+    };
+    "axios-1.5.0" = {
+      name = "axios";
+      packageName = "axios";
+      version = "1.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/axios/-/axios-1.5.0.tgz";
+        sha512 = "D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==";
+      };
+    };
+    "axios-retry-3.7.0" = {
+      name = "axios-retry";
+      packageName = "axios-retry";
+      version = "3.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/axios-retry/-/axios-retry-3.7.0.tgz";
+        sha512 = "ZTnCkJbRtfScvwiRnoVskFAfvU0UG3xNcsjwTR0mawSbIJoothxn67gKsMaNAFHRXJ1RmuLhmZBzvyXi3+9WyQ==";
+      };
+    };
+    "balanced-match-1.0.2" = {
+      name = "balanced-match";
+      packageName = "balanced-match";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz";
+        sha512 = "3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==";
+      };
+    };
+    "base-64-1.0.0" = {
+      name = "base-64";
+      packageName = "base-64";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz";
+        sha512 = "kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==";
+      };
+    };
+    "base64-js-1.5.1" = {
+      name = "base64-js";
+      packageName = "base64-js";
+      version = "1.5.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz";
+        sha512 = "AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==";
+      };
+    };
+    "basic-auth-2.0.1" = {
+      name = "basic-auth";
+      packageName = "basic-auth";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz";
+        sha512 = "NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==";
+      };
+    };
+    "bcrypt-pbkdf-1.0.2" = {
+      name = "bcrypt-pbkdf";
+      packageName = "bcrypt-pbkdf";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz";
+        sha512 = "qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==";
+      };
+    };
+    "bcryptjs-2.4.3" = {
+      name = "bcryptjs";
+      packageName = "bcryptjs";
+      version = "2.4.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz";
+        sha512 = "V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==";
+      };
+    };
+    "better-sqlite3-8.6.0" = {
+      name = "better-sqlite3";
+      packageName = "better-sqlite3";
+      version = "8.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-8.6.0.tgz";
+        sha512 = "jwAudeiTMTSyby+/SfbHDebShbmC2MCH8mU2+DXi0WJfv13ypEJm47cd3kljmy/H130CazEvkf2Li//ewcMJ1g==";
+      };
+    };
+    "big-integer-1.6.51" = {
+      name = "big-integer";
+      packageName = "big-integer";
+      version = "1.6.51";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz";
+        sha512 = "GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==";
+      };
+    };
+    "big.js-5.2.2" = {
+      name = "big.js";
+      packageName = "big.js";
+      version = "5.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz";
+        sha512 = "vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==";
+      };
+    };
+    "big.js-6.2.1" = {
+      name = "big.js";
+      packageName = "big.js";
+      version = "6.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/big.js/-/big.js-6.2.1.tgz";
+        sha512 = "bCtHMwL9LeDIozFn+oNhhFoq+yQ3BNdnsLSASUxLciOb1vgvpHsIO1dsENiGMgbb4SkP5TrzWzRiLddn8ahVOQ==";
+      };
+    };
+    "bignumber.js-2.4.0" = {
+      name = "bignumber.js";
+      packageName = "bignumber.js";
+      version = "2.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bignumber.js/-/bignumber.js-2.4.0.tgz";
+        sha512 = "uw4ra6Cv483Op/ebM0GBKKfxZlSmn6NgFRby5L3yGTlunLj53KQgndDlqy2WVFOwgvurocApYkSud0aO+mvrpQ==";
+      };
+    };
+    "bignumber.js-9.1.2" = {
+      name = "bignumber.js";
+      packageName = "bignumber.js";
+      version = "9.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz";
+        sha512 = "2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==";
+      };
+    };
+    "binary-extensions-2.2.0" = {
+      name = "binary-extensions";
+      packageName = "binary-extensions";
+      version = "2.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz";
+        sha512 = "jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==";
+      };
+    };
+    "binascii-0.0.2" = {
+      name = "binascii";
+      packageName = "binascii";
+      version = "0.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/binascii/-/binascii-0.0.2.tgz";
+        sha512 = "rA2CrUl1+6yKrn+XgLs8Hdy18OER1UW146nM+ixzhQXDY+Bd3ySkyIJGwF2a4I45JwbvF1mDL/nWkqBwpOcdBA==";
+      };
+    };
+    "bindings-1.5.0" = {
+      name = "bindings";
+      packageName = "bindings";
+      version = "1.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz";
+        sha512 = "p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==";
+      };
+    };
+    "bintrees-1.0.2" = {
+      name = "bintrees";
+      packageName = "bintrees";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bintrees/-/bintrees-1.0.2.tgz";
+        sha512 = "VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw==";
+      };
+    };
+    "bl-4.1.0" = {
+      name = "bl";
+      packageName = "bl";
+      version = "4.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz";
+        sha512 = "1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==";
+      };
+    };
+    "bl-5.1.0" = {
+      name = "bl";
+      packageName = "bl";
+      version = "5.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz";
+        sha512 = "tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==";
+      };
+    };
+    "bluebird-2.11.0" = {
+      name = "bluebird";
+      packageName = "bluebird";
+      version = "2.11.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz";
+        sha512 = "UfFSr22dmHPQqPP9XWHRhq+gWnHCYguQGkXQlbyPtW5qTnhFWA8/iXg765tH0cAjy7l/zPJ1aBTO0g5XgA7kvQ==";
+      };
+    };
+    "bn.js-4.12.0" = {
+      name = "bn.js";
+      packageName = "bn.js";
+      version = "4.12.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz";
+        sha512 = "c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==";
+      };
+    };
+    "bn.js-5.2.1" = {
+      name = "bn.js";
+      packageName = "bn.js";
+      version = "5.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz";
+        sha512 = "eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==";
+      };
+    };
+    "body-parser-1.20.1" = {
+      name = "body-parser";
+      packageName = "body-parser";
+      version = "1.20.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz";
+        sha512 = "jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==";
+      };
+    };
+    "boolbase-1.0.0" = {
+      name = "boolbase";
+      packageName = "boolbase";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz";
+        sha512 = "JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==";
+      };
+    };
+    "bowser-2.11.0" = {
+      name = "bowser";
+      packageName = "bowser";
+      version = "2.11.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz";
+        sha512 = "AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==";
+      };
+    };
+    "brace-expansion-1.1.11" = {
+      name = "brace-expansion";
+      packageName = "brace-expansion";
+      version = "1.1.11";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz";
+        sha512 = "iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==";
+      };
+    };
+    "brace-expansion-2.0.1" = {
+      name = "brace-expansion";
+      packageName = "brace-expansion";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz";
+        sha512 = "XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==";
+      };
+    };
+    "braces-3.0.2" = {
+      name = "braces";
+      packageName = "braces";
+      version = "3.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz";
+        sha512 = "b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==";
+      };
+    };
+    "browser-request-0.3.3" = {
+      name = "browser-request";
+      packageName = "browser-request";
+      version = "0.3.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/browser-request/-/browser-request-0.3.3.tgz";
+        sha512 = "YyNI4qJJ+piQG6MMEuo7J3Bzaqssufx04zpEKYfSrl/1Op59HWali9zMtBpXnkmqMcOuWJPZvudrm9wISmnCbg==";
+      };
+    };
+    "browserslist-4.21.10" = {
+      name = "browserslist";
+      packageName = "browserslist";
+      version = "4.21.10";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz";
+        sha512 = "bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==";
+      };
+    };
+    "bson-4.7.2" = {
+      name = "bson";
+      packageName = "bson";
+      version = "4.7.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bson/-/bson-4.7.2.tgz";
+        sha512 = "Ry9wCtIZ5kGqkJoi6aD8KjxFZEx78guTQDnpXWiNthsxzrxAK/i8E6pCHAIZTbaEFWcOCvbecMukfK7XUvyLpQ==";
+      };
+    };
+    "bson-5.4.0" = {
+      name = "bson";
+      packageName = "bson";
+      version = "5.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bson/-/bson-5.4.0.tgz";
+        sha512 = "WRZ5SQI5GfUuKnPTNmAYPiKIof3ORXAF4IRU5UcgmivNIon01rWQlw5RUH954dpu8yGL8T59YShVddIPaU/gFA==";
+      };
+    };
+    "buffer-4.9.2" = {
+      name = "buffer";
+      packageName = "buffer";
+      version = "4.9.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz";
+        sha512 = "xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==";
+      };
+    };
+    "buffer-5.7.1" = {
+      name = "buffer";
+      packageName = "buffer";
+      version = "5.7.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz";
+        sha512 = "EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==";
+      };
+    };
+    "buffer-6.0.3" = {
+      name = "buffer";
+      packageName = "buffer";
+      version = "6.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz";
+        sha512 = "FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==";
+      };
+    };
+    "buffer-equal-constant-time-1.0.1" = {
+      name = "buffer-equal-constant-time";
+      packageName = "buffer-equal-constant-time";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz";
+        sha512 = "zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==";
+      };
+    };
+    "buffer-from-1.1.2" = {
+      name = "buffer-from";
+      packageName = "buffer-from";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz";
+        sha512 = "E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==";
+      };
+    };
+    "buffer-more-ints-1.0.0" = {
+      name = "buffer-more-ints";
+      packageName = "buffer-more-ints";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/buffer-more-ints/-/buffer-more-ints-1.0.0.tgz";
+        sha512 = "EMetuGFz5SLsT0QTnXzINh4Ksr+oo4i+UGTXEshiGCQWnsgSs7ZhJ8fzlwQ+OzEMs0MpDAMr1hxnblp5a4vcHg==";
+      };
+    };
+    "buffer-writer-2.0.0" = {
+      name = "buffer-writer";
+      packageName = "buffer-writer";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz";
+        sha512 = "a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==";
+      };
+    };
+    "bufferutil-4.0.7" = {
+      name = "bufferutil";
+      packageName = "bufferutil";
+      version = "4.0.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz";
+        sha512 = "kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==";
+      };
+    };
+    "bull-3.29.3" = {
+      name = "bull";
+      packageName = "bull";
+      version = "3.29.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bull/-/bull-3.29.3.tgz";
+        sha512 = "MOqV1dKLy1YQgP9m3lFolyMxaU+1+o4afzYYf0H4wNM+x/S0I1QPQfkgGlLiH00EyFrvSmeubeCYFP47rTfpjg==";
+      };
+    };
+    "bull-4.11.3" = {
+      name = "bull";
+      packageName = "bull";
+      version = "4.11.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bull/-/bull-4.11.3.tgz";
+        sha512 = "DhS0XtiAuejkAY08iGOdDK35eex/yGNoezlWqGJTu9FqWFF/oBjUhpsusE9SXiI4culyDbOoFs+l3ar0VXhFqQ==";
+      };
+    };
+    "busboy-1.6.0" = {
+      name = "busboy";
+      packageName = "busboy";
+      version = "1.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz";
+        sha512 = "8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==";
+      };
+    };
+    "bytes-3.0.0" = {
+      name = "bytes";
+      packageName = "bytes";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz";
+        sha512 = "pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==";
+      };
+    };
+    "bytes-3.1.2" = {
+      name = "bytes";
+      packageName = "bytes";
+      version = "3.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz";
+        sha512 = "/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==";
+      };
+    };
+    "cacache-15.3.0" = {
+      name = "cacache";
+      packageName = "cacache";
+      version = "15.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz";
+        sha512 = "VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==";
+      };
+    };
+    "cache-manager-5.2.3" = {
+      name = "cache-manager";
+      packageName = "cache-manager";
+      version = "5.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cache-manager/-/cache-manager-5.2.3.tgz";
+        sha512 = "9OErI8fksFkxAMJ8Mco0aiZSdphyd90HcKiOMJQncSlU1yq/9lHHxrT8PDayxrmr9IIIZPOAEfXuGSD7g29uog==";
+      };
+    };
+    "cache-manager-ioredis-yet-1.2.2" = {
+      name = "cache-manager-ioredis-yet";
+      packageName = "cache-manager-ioredis-yet";
+      version = "1.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cache-manager-ioredis-yet/-/cache-manager-ioredis-yet-1.2.2.tgz";
+        sha512 = "o03N/tQxfFONZ1XLGgIxOFHuQQpjpRdnSAL1THG1YWZIVp1JMUfjU3ElSAjFN1LjbJXa55IpC8waG+VEoLUCUw==";
+      };
+    };
+    "call-bind-1.0.2" = {
+      name = "call-bind";
+      packageName = "call-bind";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz";
+        sha512 = "7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==";
+      };
+    };
+    "call-me-maybe-1.0.2" = {
+      name = "call-me-maybe";
+      packageName = "call-me-maybe";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz";
+        sha512 = "HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==";
+      };
+    };
+    "callsites-3.1.0" = {
+      name = "callsites";
+      packageName = "callsites";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz";
+        sha512 = "P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==";
+      };
+    };
+    "camel-case-4.1.2" = {
+      name = "camel-case";
+      packageName = "camel-case";
+      version = "4.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz";
+        sha512 = "gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==";
+      };
+    };
+    "camelcase-6.3.0" = {
+      name = "camelcase";
+      packageName = "camelcase";
+      version = "6.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz";
+        sha512 = "Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==";
+      };
+    };
+    "caniuse-lite-1.0.30001532" = {
+      name = "caniuse-lite";
+      packageName = "caniuse-lite";
+      version = "1.0.30001532";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001532.tgz";
+        sha512 = "FbDFnNat3nMnrROzqrsg314zhqN5LGQ1kyyMk2opcrwGbVGpHRhgCWtAgD5YJUqNAiQ+dklreil/c3Qf1dfCTw==";
+      };
+    };
+    "capital-case-1.0.4" = {
+      name = "capital-case";
+      packageName = "capital-case";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz";
+        sha512 = "ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==";
+      };
+    };
+    "cardinal-2.1.1" = {
+      name = "cardinal";
+      packageName = "cardinal";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz";
+        sha512 = "JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==";
+      };
+    };
+    "chalk-4.1.2" = {
+      name = "chalk";
+      packageName = "chalk";
+      version = "4.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz";
+        sha512 = "oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==";
+      };
+    };
+    "change-case-4.1.2" = {
+      name = "change-case";
+      packageName = "change-case";
+      version = "4.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/change-case/-/change-case-4.1.2.tgz";
+        sha512 = "bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==";
+      };
+    };
+    "chardet-0.7.0" = {
+      name = "chardet";
+      packageName = "chardet";
+      version = "0.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz";
+        sha512 = "mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==";
+      };
+    };
+    "charenc-0.0.2" = {
+      name = "charenc";
+      packageName = "charenc";
+      version = "0.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz";
+        sha512 = "yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==";
+      };
+    };
+    "checkpoint-stream-0.1.2" = {
+      name = "checkpoint-stream";
+      packageName = "checkpoint-stream";
+      version = "0.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/checkpoint-stream/-/checkpoint-stream-0.1.2.tgz";
+        sha512 = "eYXIcydL3mPjjEVLxHdi1ISgTwmxGJZ8vyJ3lYVvFTDRyTOZMTbKZdRJqiA7Gi1rPcwOyyzcrZmGLL8ff7e69w==";
+      };
+    };
+    "cheerio-1.0.0-rc.6" = {
+      name = "cheerio";
+      packageName = "cheerio";
+      version = "1.0.0-rc.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.6.tgz";
+        sha512 = "hjx1XE1M/D5pAtMgvWwE21QClmAEeGHOIDfycgmndisdNgI6PE1cGRQkMGBcsbUbmEQyWu5PJLUcAOjtQS8DWw==";
+      };
+    };
+    "cheerio-select-1.6.0" = {
+      name = "cheerio-select";
+      packageName = "cheerio-select";
+      version = "1.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.6.0.tgz";
+        sha512 = "eq0GdBvxVFbqWgmCm7M3XGs1I8oLy/nExUnh6oLqmBditPO9AqQJrkslDpMun/hZ0yyTs8L0m85OHp4ho6Qm9g==";
+      };
+    };
+    "chokidar-3.5.2" = {
+      name = "chokidar";
+      packageName = "chokidar";
+      version = "3.5.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz";
+        sha512 = "ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==";
+      };
+    };
+    "chokidar-3.5.3" = {
+      name = "chokidar";
+      packageName = "chokidar";
+      version = "3.5.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz";
+        sha512 = "Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==";
+      };
+    };
+    "chownr-1.1.4" = {
+      name = "chownr";
+      packageName = "chownr";
+      version = "1.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz";
+        sha512 = "jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==";
+      };
+    };
+    "chownr-2.0.0" = {
+      name = "chownr";
+      packageName = "chownr";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz";
+        sha512 = "bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==";
+      };
+    };
+    "chrome-trace-event-1.0.3" = {
+      name = "chrome-trace-event";
+      packageName = "chrome-trace-event";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz";
+        sha512 = "p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==";
+      };
+    };
+    "class-transformer-0.5.1" = {
+      name = "class-transformer";
+      packageName = "class-transformer";
+      version = "0.5.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz";
+        sha512 = "SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==";
+      };
+    };
+    "class-validator-0.14.0" = {
+      name = "class-validator";
+      packageName = "class-validator";
+      version = "0.14.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/class-validator/-/class-validator-0.14.0.tgz";
+        sha512 = "ct3ltplN8I9fOwUd8GrP8UQixwff129BkEtuWDKL5W45cQuLd19xqmTLu5ge78YDm/fdje6FMt0hGOhl0lii3A==";
+      };
+    };
+    "clean-stack-2.2.0" = {
+      name = "clean-stack";
+      packageName = "clean-stack";
+      version = "2.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz";
+        sha512 = "4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==";
+      };
+    };
+    "clean-stack-3.0.1" = {
+      name = "clean-stack";
+      packageName = "clean-stack";
+      version = "3.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.1.tgz";
+        sha512 = "lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==";
+      };
+    };
+    "cli-cursor-3.1.0" = {
+      name = "cli-cursor";
+      packageName = "cli-cursor";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz";
+        sha512 = "I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==";
+      };
+    };
+    "cli-highlight-2.1.11" = {
+      name = "cli-highlight";
+      packageName = "cli-highlight";
+      version = "2.1.11";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz";
+        sha512 = "9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==";
+      };
+    };
+    "cli-progress-3.12.0" = {
+      name = "cli-progress";
+      packageName = "cli-progress";
+      version = "3.12.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cli-progress/-/cli-progress-3.12.0.tgz";
+        sha512 = "tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==";
+      };
+    };
+    "cli-width-3.0.0" = {
+      name = "cli-width";
+      packageName = "cli-width";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz";
+        sha512 = "FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==";
+      };
+    };
+    "cliui-7.0.4" = {
+      name = "cliui";
+      packageName = "cliui";
+      version = "7.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz";
+        sha512 = "OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==";
+      };
+    };
+    "cliui-8.0.1" = {
+      name = "cliui";
+      packageName = "cliui";
+      version = "8.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz";
+        sha512 = "BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==";
+      };
+    };
+    "cluster-key-slot-1.1.2" = {
+      name = "cluster-key-slot";
+      packageName = "cluster-key-slot";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz";
+        sha512 = "RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==";
+      };
+    };
+    "codemirror-lang-html-n8n-1.0.0" = {
+      name = "codemirror-lang-html-n8n";
+      packageName = "codemirror-lang-html-n8n";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/codemirror-lang-html-n8n/-/codemirror-lang-html-n8n-1.0.0.tgz";
+        sha512 = "ofNP6VTDGJ5rue+kTCZlDZdF1PnE0sl2cAkfrsCAd5MlBgDmqTwuFJIkTI6KXOJXs0ucdTYH6QLhy9BSW7EaOQ==";
+      };
+    };
+    "codemirror-lang-n8n-expression-0.2.0" = {
+      name = "codemirror-lang-n8n-expression";
+      packageName = "codemirror-lang-n8n-expression";
+      version = "0.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/codemirror-lang-n8n-expression/-/codemirror-lang-n8n-expression-0.2.0.tgz";
+        sha512 = "kdlpzevdCpWcpbNcwES9YZy+rDFwWOdO6Z78SWxT6jMhCPmdHQmO+gJ39aXAXlUI7OGLfOBtg1/ONxPjRpEIYQ==";
+      };
+    };
+    "color-3.2.1" = {
+      name = "color";
+      packageName = "color";
+      version = "3.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/color/-/color-3.2.1.tgz";
+        sha512 = "aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==";
+      };
+    };
+    "color-convert-1.9.3" = {
+      name = "color-convert";
+      packageName = "color-convert";
+      version = "1.9.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz";
+        sha512 = "QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==";
+      };
+    };
+    "color-convert-2.0.1" = {
+      name = "color-convert";
+      packageName = "color-convert";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz";
+        sha512 = "RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==";
+      };
+    };
+    "color-name-1.1.3" = {
+      name = "color-name";
+      packageName = "color-name";
+      version = "1.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz";
+        sha512 = "72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==";
+      };
+    };
+    "color-name-1.1.4" = {
+      name = "color-name";
+      packageName = "color-name";
+      version = "1.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz";
+        sha512 = "dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==";
+      };
+    };
+    "color-string-1.9.1" = {
+      name = "color-string";
+      packageName = "color-string";
+      version = "1.9.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz";
+        sha512 = "shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==";
+      };
+    };
+    "color-support-1.1.3" = {
+      name = "color-support";
+      packageName = "color-support";
+      version = "1.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz";
+        sha512 = "qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==";
+      };
+    };
+    "colors-1.4.0" = {
+      name = "colors";
+      packageName = "colors";
+      version = "1.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz";
+        sha512 = "a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==";
+      };
+    };
+    "colorspace-1.1.4" = {
+      name = "colorspace";
+      packageName = "colorspace";
+      version = "1.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz";
+        sha512 = "BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==";
+      };
+    };
+    "combined-stream-1.0.8" = {
+      name = "combined-stream";
+      packageName = "combined-stream";
+      version = "1.0.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz";
+        sha512 = "FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==";
+      };
+    };
+    "commander-11.0.0" = {
+      name = "commander";
+      packageName = "commander";
+      version = "11.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz";
+        sha512 = "9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==";
+      };
+    };
+    "commander-2.20.3" = {
+      name = "commander";
+      packageName = "commander";
+      version = "2.20.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz";
+        sha512 = "GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==";
+      };
+    };
+    "commander-5.1.0" = {
+      name = "commander";
+      packageName = "commander";
+      version = "5.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz";
+        sha512 = "P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==";
+      };
+    };
+    "commander-9.5.0" = {
+      name = "commander";
+      packageName = "commander";
+      version = "9.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz";
+        sha512 = "KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==";
+      };
+    };
+    "commist-1.1.0" = {
+      name = "commist";
+      packageName = "commist";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/commist/-/commist-1.1.0.tgz";
+        sha512 = "rraC8NXWOEjhADbZe9QBNzLAN5Q3fsTPQtBV+fEVj6xKIgDgNiEVE6ZNfHpZOqfQ21YUzfVNUXLOEZquYvQPPg==";
+      };
+    };
+    "commist-3.2.0" = {
+      name = "commist";
+      packageName = "commist";
+      version = "3.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/commist/-/commist-3.2.0.tgz";
+        sha512 = "4PIMoPniho+LqXmpS5d3NuGYncG6XWlkBSVGiWycL22dd42OYdUGil2CWuzklaJoNxyxUSpO4MKIBU94viWNAw==";
+      };
+    };
+    "component-type-1.2.1" = {
+      name = "component-type";
+      packageName = "component-type";
+      version = "1.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/component-type/-/component-type-1.2.1.tgz";
+        sha512 = "Kgy+2+Uwr75vAi6ChWXgHuLvd+QLD7ssgpaRq2zCvt80ptvAfMc/hijcJxXkBa2wMlEZcJvC2H8Ubo+A9ATHIg==";
+      };
+    };
+    "compressible-2.0.18" = {
+      name = "compressible";
+      packageName = "compressible";
+      version = "2.0.18";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz";
+        sha512 = "AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==";
+      };
+    };
+    "compression-1.7.4" = {
+      name = "compression";
+      packageName = "compression";
+      version = "1.7.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz";
+        sha512 = "jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==";
+      };
+    };
+    "concat-map-0.0.1" = {
+      name = "concat-map";
+      packageName = "concat-map";
+      version = "0.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz";
+        sha512 = "/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==";
+      };
+    };
+    "concat-stream-1.6.2" = {
+      name = "concat-stream";
+      packageName = "concat-stream";
+      version = "1.6.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz";
+        sha512 = "27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==";
+      };
+    };
+    "concat-stream-2.0.0" = {
+      name = "concat-stream";
+      packageName = "concat-stream";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz";
+        sha512 = "MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==";
+      };
+    };
+    "connect-history-api-fallback-1.6.0" = {
+      name = "connect-history-api-fallback";
+      packageName = "connect-history-api-fallback";
+      version = "1.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz";
+        sha512 = "e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==";
+      };
+    };
+    "console-control-strings-1.1.0" = {
+      name = "console-control-strings";
+      packageName = "console-control-strings";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz";
+        sha512 = "ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==";
+      };
+    };
+    "constant-case-3.0.4" = {
+      name = "constant-case";
+      packageName = "constant-case";
+      version = "3.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz";
+        sha512 = "I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==";
+      };
+    };
+    "content-disposition-0.5.4" = {
+      name = "content-disposition";
+      packageName = "content-disposition";
+      version = "0.5.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz";
+        sha512 = "FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==";
+      };
+    };
+    "content-type-1.0.5" = {
+      name = "content-type";
+      packageName = "content-type";
+      version = "1.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz";
+        sha512 = "nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==";
+      };
+    };
+    "convict-6.2.4" = {
+      name = "convict";
+      packageName = "convict";
+      version = "6.2.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/convict/-/convict-6.2.4.tgz";
+        sha512 = "qN60BAwdMVdofckX7AlohVJ2x9UvjTNoKVXCL2LxFk1l7757EJqf1nySdMkPQer0bt8kQ5lQiyZ9/2NvrFBuwQ==";
+      };
+    };
+    "cookie-0.4.1" = {
+      name = "cookie";
+      packageName = "cookie";
+      version = "0.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz";
+        sha512 = "ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==";
+      };
+    };
+    "cookie-0.4.2" = {
+      name = "cookie";
+      packageName = "cookie";
+      version = "0.4.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz";
+        sha512 = "aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==";
+      };
+    };
+    "cookie-0.5.0" = {
+      name = "cookie";
+      packageName = "cookie";
+      version = "0.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz";
+        sha512 = "YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==";
+      };
+    };
+    "cookie-parser-1.4.6" = {
+      name = "cookie-parser";
+      packageName = "cookie-parser";
+      version = "1.4.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz";
+        sha512 = "z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==";
+      };
+    };
+    "cookie-signature-1.0.6" = {
+      name = "cookie-signature";
+      packageName = "cookie-signature";
+      version = "1.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz";
+        sha512 = "QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==";
+      };
+    };
+    "copy-to-2.0.1" = {
+      name = "copy-to";
+      packageName = "copy-to";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/copy-to/-/copy-to-2.0.1.tgz";
+        sha512 = "3DdaFaU/Zf1AnpLiFDeNCD4TOWe3Zl2RZaTzUvWiIk5ERzcCodOE20Vqq4fzCbNoHURFHT4/us/Lfq+S2zyY4w==";
+      };
+    };
+    "copy-to-clipboard-3.3.3" = {
+      name = "copy-to-clipboard";
+      packageName = "copy-to-clipboard";
+      version = "3.3.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz";
+        sha512 = "2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==";
+      };
+    };
+    "core-js-3.32.2" = {
+      name = "core-js";
+      packageName = "core-js";
+      version = "3.32.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/core-js/-/core-js-3.32.2.tgz";
+        sha512 = "pxXSw1mYZPDGvTQqEc5vgIb83jGQKFGYWY76z4a7weZXUolw3G+OvpZqSRcfYOoOVUQJYEPsWeQK8pKEnUtWxQ==";
+      };
+    };
+    "core-util-is-1.0.3" = {
+      name = "core-util-is";
+      packageName = "core-util-is";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz";
+        sha512 = "ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==";
+      };
+    };
+    "create-require-1.1.1" = {
+      name = "create-require";
+      packageName = "create-require";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz";
+        sha512 = "dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==";
+      };
+    };
+    "crelt-1.0.6" = {
+      name = "crelt";
+      packageName = "crelt";
+      version = "1.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz";
+        sha512 = "VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==";
+      };
+    };
+    "cron-1.7.2" = {
+      name = "cron";
+      packageName = "cron";
+      version = "1.7.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cron/-/cron-1.7.2.tgz";
+        sha512 = "+SaJ2OfeRvfQqwXQ2kgr0Y5pzBR/lijf5OpnnaruwWnmI799JfWr2jN2ItOV9s3A/+TFOt6mxvKzQq5F0Jp6VQ==";
+      };
+    };
+    "cron-parser-2.18.0" = {
+      name = "cron-parser";
+      packageName = "cron-parser";
+      version = "2.18.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cron-parser/-/cron-parser-2.18.0.tgz";
+        sha512 = "s4odpheTyydAbTBQepsqd2rNWGa2iV3cyo8g7zbI2QQYGLVsfbhmwukayS1XHppe02Oy1fg7mg6xoaraVJeEcg==";
+      };
+    };
+    "cron-parser-4.9.0" = {
+      name = "cron-parser";
+      packageName = "cron-parser";
+      version = "4.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cron-parser/-/cron-parser-4.9.0.tgz";
+        sha512 = "p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==";
+      };
+    };
+    "cross-spawn-4.0.2" = {
+      name = "cross-spawn";
+      packageName = "cross-spawn";
+      version = "4.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz";
+        sha512 = "yAXz/pA1tD8Gtg2S98Ekf/sewp3Lcp3YoFKJ4Hkp5h5yLWnKVTDU0kwjKJ8NDCYcfTLfyGkzTikst+jWypT1iA==";
+      };
+    };
+    "cross-spawn-7.0.3" = {
+      name = "cross-spawn";
+      packageName = "cross-spawn";
+      version = "7.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz";
+        sha512 = "iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==";
+      };
+    };
+    "crypt-0.0.2" = {
+      name = "crypt";
+      packageName = "crypt";
+      version = "0.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz";
+        sha512 = "mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==";
+      };
+    };
+    "crypto-js-4.1.1" = {
+      name = "crypto-js";
+      packageName = "crypto-js";
+      version = "4.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz";
+        sha512 = "o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==";
+      };
+    };
+    "csrf-3.1.0" = {
+      name = "csrf";
+      packageName = "csrf";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/csrf/-/csrf-3.1.0.tgz";
+        sha512 = "uTqEnCvWRk042asU6JtapDTcJeeailFy4ydOQS28bj1hcLnYRiqi8SsD2jS412AY1I/4qdOwWZun774iqywf9w==";
+      };
+    };
+    "css-select-4.3.0" = {
+      name = "css-select";
+      packageName = "css-select";
+      version = "4.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz";
+        sha512 = "wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==";
+      };
+    };
+    "css-select-5.1.0" = {
+      name = "css-select";
+      packageName = "css-select";
+      version = "5.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz";
+        sha512 = "nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==";
+      };
+    };
+    "css-what-6.1.0" = {
+      name = "css-what";
+      packageName = "css-what";
+      version = "6.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz";
+        sha512 = "HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==";
+      };
+    };
+    "cssfilter-0.0.10" = {
+      name = "cssfilter";
+      packageName = "cssfilter";
+      version = "0.0.10";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz";
+        sha512 = "FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==";
+      };
+    };
+    "csstype-3.1.2" = {
+      name = "csstype";
+      packageName = "csstype";
+      version = "3.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz";
+        sha512 = "I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==";
+      };
+    };
+    "curlconverter-3.21.0" = {
+      name = "curlconverter";
+      packageName = "curlconverter";
+      version = "3.21.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/curlconverter/-/curlconverter-3.21.0.tgz";
+        sha512 = "DXCnp1A/Xa69FujksUfdvWQFAnIn/C+4Wuv8t+UVdZkF/lY5bzj98GGKOGme7V/ckSHDLxE29Xp76sJ5Cpsp5A==";
+      };
+    };
+    "currency-codes-2.1.0" = {
+      name = "currency-codes";
+      packageName = "currency-codes";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/currency-codes/-/currency-codes-2.1.0.tgz";
+        sha512 = "aASwFNP8VjZ0y0PWlSW7c9N/isYTLxK6OCbm7aVuQMk7dWO2zgup9KGiFQgeL9OGL5P/ulvCHcjQizmuEeZXtw==";
+      };
+    };
+    "dashdash-1.14.1" = {
+      name = "dashdash";
+      packageName = "dashdash";
+      version = "1.14.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz";
+        sha512 = "jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==";
+      };
+    };
+    "data-api-client-1.3.0" = {
+      name = "data-api-client";
+      packageName = "data-api-client";
+      version = "1.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/data-api-client/-/data-api-client-1.3.0.tgz";
+        sha512 = "+Q+lChhl5PBogsB7nO/VZFF3X0WJe8y93dyft50HIg2Bg+c765wM/sXkfBz5pjmGoRESkB/GLesQJLTMBbK4dQ==";
+      };
+    };
+    "data-uri-to-buffer-3.0.1" = {
+      name = "data-uri-to-buffer";
+      packageName = "data-uri-to-buffer";
+      version = "3.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz";
+        sha512 = "WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==";
+      };
+    };
+    "date-fns-2.30.0" = {
+      name = "date-fns";
+      packageName = "date-fns";
+      version = "2.30.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz";
+        sha512 = "fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==";
+      };
+    };
+    "dateformat-3.0.3" = {
+      name = "dateformat";
+      packageName = "dateformat";
+      version = "3.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz";
+        sha512 = "jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==";
+      };
+    };
+    "dayjs-1.11.9" = {
+      name = "dayjs";
+      packageName = "dayjs";
+      version = "1.11.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz";
+        sha512 = "QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==";
+      };
+    };
+    "debug-2.6.9" = {
+      name = "debug";
+      packageName = "debug";
+      version = "2.6.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz";
+        sha512 = "bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==";
+      };
+    };
+    "debug-3.1.0" = {
+      name = "debug";
+      packageName = "debug";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz";
+        sha512 = "OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==";
+      };
+    };
+    "debug-3.2.7" = {
+      name = "debug";
+      packageName = "debug";
+      version = "3.2.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz";
+        sha512 = "CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==";
+      };
+    };
+    "debug-4.3.2" = {
+      name = "debug";
+      packageName = "debug";
+      version = "4.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz";
+        sha512 = "mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==";
+      };
+    };
+    "debug-4.3.4" = {
+      name = "debug";
+      packageName = "debug";
+      version = "4.3.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz";
+        sha512 = "PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==";
+      };
+    };
+    "debuglog-1.0.1" = {
+      name = "debuglog";
+      packageName = "debuglog";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz";
+        sha512 = "syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==";
+      };
+    };
+    "decode-uri-component-0.2.2" = {
+      name = "decode-uri-component";
+      packageName = "decode-uri-component";
+      version = "0.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz";
+        sha512 = "FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==";
+      };
+    };
+    "decompress-response-6.0.0" = {
+      name = "decompress-response";
+      packageName = "decompress-response";
+      version = "6.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz";
+        sha512 = "aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==";
+      };
+    };
+    "deep-equal-2.2.2" = {
+      name = "deep-equal";
+      packageName = "deep-equal";
+      version = "2.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.2.tgz";
+        sha512 = "xjVyBf0w5vH0I42jdAZzOKVldmPgSulmiyPRywoyq7HXC9qdgo17kxJE+rdnif5Tz6+pIrpJI8dCpMNLIGkUiA==";
+      };
+    };
+    "deep-extend-0.6.0" = {
+      name = "deep-extend";
+      packageName = "deep-extend";
+      version = "0.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz";
+        sha512 = "LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==";
+      };
+    };
+    "deep-is-0.1.4" = {
+      name = "deep-is";
+      packageName = "deep-is";
+      version = "0.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz";
+        sha512 = "oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==";
+      };
+    };
+    "deepmerge-4.3.1" = {
+      name = "deepmerge";
+      packageName = "deepmerge";
+      version = "4.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz";
+        sha512 = "3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==";
+      };
+    };
+    "default-user-agent-1.0.0" = {
+      name = "default-user-agent";
+      packageName = "default-user-agent";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/default-user-agent/-/default-user-agent-1.0.0.tgz";
+        sha512 = "bDF7bg6OSNcSwFWPu4zYKpVkJZQYVrAANMYB8bc9Szem1D0yKdm4sa/rOCs2aC9+2GMqQ7KnwtZRvDhmLF0dXw==";
+      };
+    };
+    "define-lazy-prop-2.0.0" = {
+      name = "define-lazy-prop";
+      packageName = "define-lazy-prop";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz";
+        sha512 = "Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==";
+      };
+    };
+    "define-properties-1.2.0" = {
+      name = "define-properties";
+      packageName = "define-properties";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz";
+        sha512 = "xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==";
+      };
+    };
+    "degenerator-3.0.4" = {
+      name = "degenerator";
+      packageName = "degenerator";
+      version = "3.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/degenerator/-/degenerator-3.0.4.tgz";
+        sha512 = "Z66uPeBfHZAHVmue3HPfyKu2Q0rC2cRxbTOsvmU/po5fvvcx27W4mIu9n0PUlQih4oUYvcG1BsbtVv8x7KDOSw==";
+      };
+    };
+    "delayed-stream-1.0.0" = {
+      name = "delayed-stream";
+      packageName = "delayed-stream";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz";
+        sha512 = "ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==";
+      };
+    };
+    "delegates-1.0.0" = {
+      name = "delegates";
+      packageName = "delegates";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz";
+        sha512 = "bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==";
+      };
+    };
+    "denque-1.5.1" = {
+      name = "denque";
+      packageName = "denque";
+      version = "1.5.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz";
+        sha512 = "XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==";
+      };
+    };
+    "denque-2.1.0" = {
+      name = "denque";
+      packageName = "denque";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz";
+        sha512 = "HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==";
+      };
+    };
+    "depd-2.0.0" = {
+      name = "depd";
+      packageName = "depd";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz";
+        sha512 = "g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==";
+      };
+    };
+    "destroy-1.2.0" = {
+      name = "destroy";
+      packageName = "destroy";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz";
+        sha512 = "2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==";
+      };
+    };
+    "detect-libc-2.0.2" = {
+      name = "detect-libc";
+      packageName = "detect-libc";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz";
+        sha512 = "UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==";
+      };
+    };
+    "dezalgo-1.0.4" = {
+      name = "dezalgo";
+      packageName = "dezalgo";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz";
+        sha512 = "rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==";
+      };
+    };
+    "diff-4.0.2" = {
+      name = "diff";
+      packageName = "diff";
+      version = "4.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz";
+        sha512 = "58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==";
+      };
+    };
+    "digest-header-1.1.0" = {
+      name = "digest-header";
+      packageName = "digest-header";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/digest-header/-/digest-header-1.1.0.tgz";
+        sha512 = "glXVh42vz40yZb9Cq2oMOt70FIoWiv+vxNvdKdU8CwjLad25qHM3trLxhl9bVjdr6WaslIXhWpn0NO8T/67Qjg==";
+      };
+    };
+    "dir-glob-3.0.1" = {
+      name = "dir-glob";
+      packageName = "dir-glob";
+      version = "3.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz";
+        sha512 = "WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==";
+      };
+    };
+    "dom-serializer-1.4.1" = {
+      name = "dom-serializer";
+      packageName = "dom-serializer";
+      version = "1.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz";
+        sha512 = "VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==";
+      };
+    };
+    "dom-serializer-2.0.0" = {
+      name = "dom-serializer";
+      packageName = "dom-serializer";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz";
+        sha512 = "wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==";
+      };
+    };
+    "domelementtype-2.3.0" = {
+      name = "domelementtype";
+      packageName = "domelementtype";
+      version = "2.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz";
+        sha512 = "OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==";
+      };
+    };
+    "domhandler-4.3.1" = {
+      name = "domhandler";
+      packageName = "domhandler";
+      version = "4.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz";
+        sha512 = "GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==";
+      };
+    };
+    "domhandler-5.0.3" = {
+      name = "domhandler";
+      packageName = "domhandler";
+      version = "5.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz";
+        sha512 = "cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==";
+      };
+    };
+    "dommatrix-1.0.3" = {
+      name = "dommatrix";
+      packageName = "dommatrix";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dommatrix/-/dommatrix-1.0.3.tgz";
+        sha512 = "l32Xp/TLgWb8ReqbVJAFIvXmY7go4nTxxlWiAFyhoQw9RKEOHBZNnyGvJWqDVSPmq3Y9HlM4npqF/T6VMOXhww==";
+      };
+    };
+    "domutils-2.8.0" = {
+      name = "domutils";
+      packageName = "domutils";
+      version = "2.8.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz";
+        sha512 = "w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==";
+      };
+    };
+    "domutils-3.1.0" = {
+      name = "domutils";
+      packageName = "domutils";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz";
+        sha512 = "H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==";
+      };
+    };
+    "dot-case-3.0.4" = {
+      name = "dot-case";
+      packageName = "dot-case";
+      version = "3.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz";
+        sha512 = "Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==";
+      };
+    };
+    "dotenv-16.3.1" = {
+      name = "dotenv";
+      packageName = "dotenv";
+      version = "16.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz";
+        sha512 = "IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==";
+      };
+    };
+    "dotenv-8.6.0" = {
+      name = "dotenv";
+      packageName = "dotenv";
+      version = "8.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz";
+        sha512 = "IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==";
+      };
+    };
+    "dreamopt-0.8.0" = {
+      name = "dreamopt";
+      packageName = "dreamopt";
+      version = "0.8.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dreamopt/-/dreamopt-0.8.0.tgz";
+        sha512 = "vyJTp8+mC+G+5dfgsY+r3ckxlz+QMX40VjPQsZc5gxVAxLmi64TBoVkP54A/pRAXMXsbu2GMMBrZPxNv23waMg==";
+      };
+    };
+    "duplexify-3.7.1" = {
+      name = "duplexify";
+      packageName = "duplexify";
+      version = "3.7.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz";
+        sha512 = "07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==";
+      };
+    };
+    "duplexify-4.1.2" = {
+      name = "duplexify";
+      packageName = "duplexify";
+      version = "4.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz";
+        sha512 = "fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==";
+      };
+    };
+    "eastasianwidth-0.2.0" = {
+      name = "eastasianwidth";
+      packageName = "eastasianwidth";
+      version = "0.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz";
+        sha512 = "I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==";
+      };
+    };
+    "ecc-jsbn-0.1.2" = {
+      name = "ecc-jsbn";
+      packageName = "ecc-jsbn";
+      version = "0.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz";
+        sha512 = "eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==";
+      };
+    };
+    "ecdsa-sig-formatter-1.0.11" = {
+      name = "ecdsa-sig-formatter";
+      packageName = "ecdsa-sig-formatter";
+      version = "1.0.11";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz";
+        sha512 = "nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==";
+      };
+    };
+    "ee-first-1.1.1" = {
+      name = "ee-first";
+      packageName = "ee-first";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz";
+        sha512 = "WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==";
+      };
+    };
+    "ejs-3.1.9" = {
+      name = "ejs";
+      packageName = "ejs";
+      version = "3.1.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz";
+        sha512 = "rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==";
+      };
+    };
+    "electron-to-chromium-1.4.513" = {
+      name = "electron-to-chromium";
+      packageName = "electron-to-chromium";
+      version = "1.4.513";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.513.tgz";
+        sha512 = "cOB0xcInjm+E5qIssHeXJ29BaUyWpMyFKT5RB3bsLENDheCja0wMkHJyiPl0NBE/VzDI7JDuNEQWhe6RitEUcw==";
+      };
+    };
+    "element-plus-2.3.12" = {
+      name = "element-plus";
+      packageName = "element-plus";
+      version = "2.3.12";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/element-plus/-/element-plus-2.3.12.tgz";
+        sha512 = "fAWpbKCyt+l1dsqSNPOs/F/dBN4Wp5CGAyxbiS5zqDwI4q3QPM+LxLU2h3GUHMIBtMGCvmsG98j5HPMkTKkvcA==";
+      };
+    };
+    "emoji-regex-8.0.0" = {
+      name = "emoji-regex";
+      packageName = "emoji-regex";
+      version = "8.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz";
+        sha512 = "MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==";
+      };
+    };
+    "emoji-regex-9.2.2" = {
+      name = "emoji-regex";
+      packageName = "emoji-regex";
+      version = "9.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz";
+        sha512 = "L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==";
+      };
+    };
+    "emojis-list-3.0.0" = {
+      name = "emojis-list";
+      packageName = "emojis-list";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz";
+        sha512 = "/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==";
+      };
+    };
+    "enabled-2.0.0" = {
+      name = "enabled";
+      packageName = "enabled";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz";
+        sha512 = "AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==";
+      };
+    };
+    "encodeurl-1.0.2" = {
+      name = "encodeurl";
+      packageName = "encodeurl";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz";
+        sha512 = "TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==";
+      };
+    };
+    "encoding-0.1.13" = {
+      name = "encoding";
+      packageName = "encoding";
+      version = "0.1.13";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz";
+        sha512 = "ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==";
+      };
+    };
+    "encoding-japanese-2.0.0" = {
+      name = "encoding-japanese";
+      packageName = "encoding-japanese";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/encoding-japanese/-/encoding-japanese-2.0.0.tgz";
+        sha512 = "++P0RhebUC8MJAwJOsT93dT+5oc5oPImp1HubZpAuCZ5kTLnhuuBhKHj2jJeO/Gj93idPBWmIuQ9QWMe5rX3pQ==";
+      };
+    };
+    "end-of-stream-1.4.4" = {
+      name = "end-of-stream";
+      packageName = "end-of-stream";
+      version = "1.4.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz";
+        sha512 = "+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==";
+      };
+    };
+    "enhanced-resolve-5.15.0" = {
+      name = "enhanced-resolve";
+      packageName = "enhanced-resolve";
+      version = "5.15.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz";
+        sha512 = "LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==";
+      };
+    };
+    "ent-2.2.0" = {
+      name = "ent";
+      packageName = "ent";
+      version = "2.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz";
+        sha512 = "GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==";
+      };
+    };
+    "entities-2.1.0" = {
+      name = "entities";
+      packageName = "entities";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz";
+        sha512 = "hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==";
+      };
+    };
+    "entities-4.5.0" = {
+      name = "entities";
+      packageName = "entities";
+      version = "4.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz";
+        sha512 = "V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==";
+      };
+    };
+    "env-paths-2.2.1" = {
+      name = "env-paths";
+      packageName = "env-paths";
+      version = "2.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz";
+        sha512 = "+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==";
+      };
+    };
+    "err-code-2.0.3" = {
+      name = "err-code";
+      packageName = "err-code";
+      version = "2.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz";
+        sha512 = "2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==";
+      };
+    };
+    "es-abstract-1.22.1" = {
+      name = "es-abstract";
+      packageName = "es-abstract";
+      version = "1.22.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz";
+        sha512 = "ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==";
+      };
+    };
+    "es-aggregate-error-1.0.10" = {
+      name = "es-aggregate-error";
+      packageName = "es-aggregate-error";
+      version = "1.0.10";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/es-aggregate-error/-/es-aggregate-error-1.0.10.tgz";
+        sha512 = "qX3K9eP7HcgeFckzRy1T5Mtb7wYwZt9ahFteBDigG5Te0vGOmOH3dHDncBiuNkZBX9i+C8LgSbpqSEl97gN11Q==";
+      };
+    };
+    "es-array-method-boxes-properly-1.0.0" = {
+      name = "es-array-method-boxes-properly";
+      packageName = "es-array-method-boxes-properly";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz";
+        sha512 = "wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==";
+      };
+    };
+    "es-get-iterator-1.1.3" = {
+      name = "es-get-iterator";
+      packageName = "es-get-iterator";
+      version = "1.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz";
+        sha512 = "sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==";
+      };
+    };
+    "es-module-lexer-1.3.1" = {
+      name = "es-module-lexer";
+      packageName = "es-module-lexer";
+      version = "1.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.1.tgz";
+        sha512 = "JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==";
+      };
+    };
+    "es-set-tostringtag-2.0.1" = {
+      name = "es-set-tostringtag";
+      packageName = "es-set-tostringtag";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz";
+        sha512 = "g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==";
+      };
+    };
+    "es-to-primitive-1.2.1" = {
+      name = "es-to-primitive";
+      packageName = "es-to-primitive";
+      version = "1.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz";
+        sha512 = "QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==";
+      };
+    };
+    "escalade-3.1.1" = {
+      name = "escalade";
+      packageName = "escalade";
+      version = "3.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz";
+        sha512 = "k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==";
+      };
+    };
+    "escape-html-1.0.3" = {
+      name = "escape-html";
+      packageName = "escape-html";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz";
+        sha512 = "NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==";
+      };
+    };
+    "escape-string-regexp-1.0.5" = {
+      name = "escape-string-regexp";
+      packageName = "escape-string-regexp";
+      version = "1.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz";
+        sha512 = "vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==";
+      };
+    };
+    "escape-string-regexp-4.0.0" = {
+      name = "escape-string-regexp";
+      packageName = "escape-string-regexp";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz";
+        sha512 = "TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==";
+      };
+    };
+    "escodegen-1.14.3" = {
+      name = "escodegen";
+      packageName = "escodegen";
+      version = "1.14.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz";
+        sha512 = "qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==";
+      };
+    };
+    "eslint-config-riot-1.0.0" = {
+      name = "eslint-config-riot";
+      packageName = "eslint-config-riot";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/eslint-config-riot/-/eslint-config-riot-1.0.0.tgz";
+        sha512 = "NB/L/1Y30qyJcG5xZxCJKW/+bqyj+llbcCwo9DEz8bESIP0SLTOQ8T1DWCCFc+wJ61AMEstj4511PSScqMMfCw==";
+      };
+    };
+    "eslint-scope-5.1.1" = {
+      name = "eslint-scope";
+      packageName = "eslint-scope";
+      version = "5.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz";
+        sha512 = "2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==";
+      };
+    };
+    "esprima-1.2.2" = {
+      name = "esprima";
+      packageName = "esprima";
+      version = "1.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/esprima/-/esprima-1.2.2.tgz";
+        sha512 = "+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A==";
+      };
+    };
+    "esprima-4.0.1" = {
+      name = "esprima";
+      packageName = "esprima";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz";
+        sha512 = "eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==";
+      };
+    };
+    "esprima-next-5.8.4" = {
+      name = "esprima-next";
+      packageName = "esprima-next";
+      version = "5.8.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/esprima-next/-/esprima-next-5.8.4.tgz";
+        sha512 = "8nYVZ4ioIH4Msjb/XmhnBdz5WRRBaYqevKa1cv9nGJdCehMbzZCPNEEnqfLCZVetUVrUPEcb5IYyu1GG4hFqgg==";
+      };
+    };
+    "esrecurse-4.3.0" = {
+      name = "esrecurse";
+      packageName = "esrecurse";
+      version = "4.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz";
+        sha512 = "KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==";
+      };
+    };
+    "estraverse-4.3.0" = {
+      name = "estraverse";
+      packageName = "estraverse";
+      version = "4.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz";
+        sha512 = "39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==";
+      };
+    };
+    "estraverse-5.3.0" = {
+      name = "estraverse";
+      packageName = "estraverse";
+      version = "5.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz";
+        sha512 = "MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==";
+      };
+    };
+    "estree-walker-2.0.2" = {
+      name = "estree-walker";
+      packageName = "estree-walker";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz";
+        sha512 = "Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==";
+      };
+    };
+    "esutils-2.0.3" = {
+      name = "esutils";
+      packageName = "esutils";
+      version = "2.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz";
+        sha512 = "kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==";
+      };
+    };
+    "etag-1.8.1" = {
+      name = "etag";
+      packageName = "etag";
+      version = "1.8.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz";
+        sha512 = "aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==";
+      };
+    };
+    "event-target-shim-5.0.1" = {
+      name = "event-target-shim";
+      packageName = "event-target-shim";
+      version = "5.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz";
+        sha512 = "i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==";
+      };
+    };
+    "eventemitter3-4.0.7" = {
+      name = "eventemitter3";
+      packageName = "eventemitter3";
+      version = "4.0.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz";
+        sha512 = "8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==";
+      };
+    };
+    "events-1.1.1" = {
+      name = "events";
+      packageName = "events";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/events/-/events-1.1.1.tgz";
+        sha512 = "kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==";
+      };
+    };
+    "events-3.3.0" = {
+      name = "events";
+      packageName = "events";
+      version = "3.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/events/-/events-3.3.0.tgz";
+        sha512 = "mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==";
+      };
+    };
+    "events-intercept-2.0.0" = {
+      name = "events-intercept";
+      packageName = "events-intercept";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/events-intercept/-/events-intercept-2.0.0.tgz";
+        sha512 = "blk1va0zol9QOrdZt0rFXo5KMkNPVSp92Eju/Qz8THwKWKRKeE0T8Br/1aW6+Edkyq9xHYgYxn2QtOnUKPUp+Q==";
+      };
+    };
+    "eventsource-2.0.2" = {
+      name = "eventsource";
+      packageName = "eventsource";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/eventsource/-/eventsource-2.0.2.tgz";
+        sha512 = "IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==";
+      };
+    };
+    "expand-template-2.0.3" = {
+      name = "expand-template";
+      packageName = "expand-template";
+      version = "2.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz";
+        sha512 = "XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==";
+      };
+    };
+    "expand-tilde-2.0.2" = {
+      name = "expand-tilde";
+      packageName = "expand-tilde";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz";
+        sha512 = "A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==";
+      };
+    };
+    "express-4.18.2" = {
+      name = "express";
+      packageName = "express";
+      version = "4.18.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/express/-/express-4.18.2.tgz";
+        sha512 = "5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==";
+      };
+    };
+    "express-async-errors-3.1.1" = {
+      name = "express-async-errors";
+      packageName = "express-async-errors";
+      version = "3.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/express-async-errors/-/express-async-errors-3.1.1.tgz";
+        sha512 = "h6aK1da4tpqWSbyCa3FxB/V6Ehd4EEB15zyQq9qe75OZBp0krinNKuH4rAY+S/U/2I36vdLAUFSjQJ+TFmODng==";
+      };
+    };
+    "express-handlebars-7.1.2" = {
+      name = "express-handlebars";
+      packageName = "express-handlebars";
+      version = "7.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/express-handlebars/-/express-handlebars-7.1.2.tgz";
+        sha512 = "ss9d3mBChOLTEtyfzXCsxlItUxpgS3i4cb/F70G6Q5ohQzmD12XB4x/Y9U6YboeeYBJZt7WQ5yUNu7ZSQ/EGyQ==";
+      };
+    };
+    "express-openapi-validator-4.13.8" = {
+      name = "express-openapi-validator";
+      packageName = "express-openapi-validator";
+      version = "4.13.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/express-openapi-validator/-/express-openapi-validator-4.13.8.tgz";
+        sha512 = "89/sdkq+BKBuIyykaMl/vR9grFc3WFUPTjFo0THHbu+5g+q8rA7fKeoMfz+h84yOQIBcztmJ5ZJdk5uhEls31A==";
+      };
+    };
+    "express-prom-bundle-6.6.0" = {
+      name = "express-prom-bundle";
+      packageName = "express-prom-bundle";
+      version = "6.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/express-prom-bundle/-/express-prom-bundle-6.6.0.tgz";
+        sha512 = "tZh2P2p5a8/yxQ5VbRav011Poa4R0mHqdFwn9Swe/obXDe5F0jY9wtRAfNYnqk4LXY7akyvR/nrvAHxQPWUjsQ==";
+      };
+    };
+    "extend-3.0.2" = {
+      name = "extend";
+      packageName = "extend";
+      version = "3.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz";
+        sha512 = "fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==";
+      };
+    };
+    "extend-shallow-2.0.1" = {
+      name = "extend-shallow";
+      packageName = "extend-shallow";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz";
+        sha512 = "zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==";
+      };
+    };
+    "external-editor-3.1.0" = {
+      name = "external-editor";
+      packageName = "external-editor";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz";
+        sha512 = "hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==";
+      };
+    };
+    "fast-deep-equal-3.1.3" = {
+      name = "fast-deep-equal";
+      packageName = "fast-deep-equal";
+      version = "3.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz";
+        sha512 = "f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==";
+      };
+    };
+    "fast-glob-3.3.1" = {
+      name = "fast-glob";
+      packageName = "fast-glob";
+      version = "3.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz";
+        sha512 = "kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==";
+      };
+    };
+    "fast-json-stable-stringify-2.1.0" = {
+      name = "fast-json-stable-stringify";
+      packageName = "fast-json-stable-stringify";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz";
+        sha512 = "lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==";
+      };
+    };
+    "fast-levenshtein-2.0.6" = {
+      name = "fast-levenshtein";
+      packageName = "fast-levenshtein";
+      version = "2.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz";
+        sha512 = "DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==";
+      };
+    };
+    "fast-text-encoding-1.0.6" = {
+      name = "fast-text-encoding";
+      packageName = "fast-text-encoding";
+      version = "1.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz";
+        sha512 = "VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==";
+      };
+    };
+    "fast-xml-parser-4.2.5" = {
+      name = "fast-xml-parser";
+      packageName = "fast-xml-parser";
+      version = "4.2.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz";
+        sha512 = "B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==";
+      };
+    };
+    "fastq-1.15.0" = {
+      name = "fastq";
+      packageName = "fastq";
+      version = "1.15.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz";
+        sha512 = "wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==";
+      };
+    };
+    "fecha-4.2.3" = {
+      name = "fecha";
+      packageName = "fecha";
+      version = "4.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz";
+        sha512 = "OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==";
+      };
+    };
+    "fflate-0.7.4" = {
+      name = "fflate";
+      packageName = "fflate";
+      version = "0.7.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fflate/-/fflate-0.7.4.tgz";
+        sha512 = "5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw==";
+      };
+    };
+    "figures-3.2.0" = {
+      name = "figures";
+      packageName = "figures";
+      version = "3.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz";
+        sha512 = "yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==";
+      };
+    };
+    "file-saver-2.0.5" = {
+      name = "file-saver";
+      packageName = "file-saver";
+      version = "2.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz";
+        sha512 = "P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==";
+      };
+    };
+    "file-type-16.5.4" = {
+      name = "file-type";
+      packageName = "file-type";
+      version = "16.5.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/file-type/-/file-type-16.5.4.tgz";
+        sha512 = "/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==";
+      };
+    };
+    "file-uri-to-path-1.0.0" = {
+      name = "file-uri-to-path";
+      packageName = "file-uri-to-path";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz";
+        sha512 = "0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==";
+      };
+    };
+    "file-uri-to-path-2.0.0" = {
+      name = "file-uri-to-path";
+      packageName = "file-uri-to-path";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz";
+        sha512 = "hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==";
+      };
+    };
+    "filelist-1.0.4" = {
+      name = "filelist";
+      packageName = "filelist";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz";
+        sha512 = "w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==";
+      };
+    };
+    "fill-range-7.0.1" = {
+      name = "fill-range";
+      packageName = "fill-range";
+      version = "7.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz";
+        sha512 = "qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==";
+      };
+    };
+    "filter-obj-1.1.0" = {
+      name = "filter-obj";
+      packageName = "filter-obj";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz";
+        sha512 = "8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==";
+      };
+    };
+    "finalhandler-1.2.0" = {
+      name = "finalhandler";
+      packageName = "finalhandler";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz";
+        sha512 = "5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==";
+      };
+    };
+    "first-match-0.0.1" = {
+      name = "first-match";
+      packageName = "first-match";
+      version = "0.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/first-match/-/first-match-0.0.1.tgz";
+        sha512 = "VvKbnaxrC0polTFDC+teKPTdl2mn6B/KUW+WB3C9RzKDeNwbzfLdnUz3FxC+tnjvus6bI0jWrWicQyVIPdS37A==";
+      };
+    };
+    "flatted-3.2.7" = {
+      name = "flatted";
+      packageName = "flatted";
+      version = "3.2.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz";
+        sha512 = "5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==";
+      };
+    };
+    "fn.name-1.1.0" = {
+      name = "fn.name";
+      packageName = "fn.name";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz";
+        sha512 = "GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==";
+      };
+    };
+    "follow-redirects-1.15.2" = {
+      name = "follow-redirects";
+      packageName = "follow-redirects";
+      version = "1.15.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz";
+        sha512 = "VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==";
+      };
+    };
+    "for-each-0.3.3" = {
+      name = "for-each";
+      packageName = "for-each";
+      version = "0.3.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz";
+        sha512 = "jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==";
+      };
+    };
+    "foreground-child-3.1.1" = {
+      name = "foreground-child";
+      packageName = "foreground-child";
+      version = "3.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz";
+        sha512 = "TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==";
+      };
+    };
+    "form-data-3.0.1" = {
+      name = "form-data";
+      packageName = "form-data";
+      version = "3.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz";
+        sha512 = "RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==";
+      };
+    };
+    "form-data-4.0.0" = {
+      name = "form-data";
+      packageName = "form-data";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz";
+        sha512 = "ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==";
+      };
+    };
+    "formidable-3.5.1" = {
+      name = "formidable";
+      packageName = "formidable";
+      version = "3.5.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/formidable/-/formidable-3.5.1.tgz";
+        sha512 = "WJWKelbRHN41m5dumb0/k8TeAx7Id/y3a+Z7QfhxP/htI9Js5zYaEDtG8uMgG0vM0lOlqnmjE99/kfpOYi/0Og==";
+      };
+    };
+    "formstream-1.3.1" = {
+      name = "formstream";
+      packageName = "formstream";
+      version = "1.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/formstream/-/formstream-1.3.1.tgz";
+        sha512 = "FkW++ub+VbE5dpwukJVDizNWhSgp8FhmhI65pF7BZSVStBqe6Wgxe2Z9/Vhsn7l7nXCPwP+G1cyYlX8VwWOf0g==";
+      };
+    };
+    "forwarded-0.2.0" = {
+      name = "forwarded";
+      packageName = "forwarded";
+      version = "0.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz";
+        sha512 = "buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==";
+      };
+    };
+    "fresh-0.5.2" = {
+      name = "fresh";
+      packageName = "fresh";
+      version = "0.5.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz";
+        sha512 = "zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==";
+      };
+    };
+    "fs-constants-1.0.0" = {
+      name = "fs-constants";
+      packageName = "fs-constants";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz";
+        sha512 = "y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==";
+      };
+    };
+    "fs-extra-8.1.0" = {
+      name = "fs-extra";
+      packageName = "fs-extra";
+      version = "8.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz";
+        sha512 = "yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==";
+      };
+    };
+    "fs-extra-9.1.0" = {
+      name = "fs-extra";
+      packageName = "fs-extra";
+      version = "9.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz";
+        sha512 = "hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==";
+      };
+    };
+    "fs-minipass-2.1.0" = {
+      name = "fs-minipass";
+      packageName = "fs-minipass";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz";
+        sha512 = "V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==";
+      };
+    };
+    "fs.realpath-1.0.0" = {
+      name = "fs.realpath";
+      packageName = "fs.realpath";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz";
+        sha512 = "OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==";
+      };
+    };
+    "ftp-0.3.10" = {
+      name = "ftp";
+      packageName = "ftp";
+      version = "0.3.10";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz";
+        sha512 = "faFVML1aBx2UoDStmLwv2Wptt4vw5x03xxX172nhA5Y5HBshW5JweqQ2W4xL4dezQTG8inJsuYcpPHHU3X5OTQ==";
+      };
+    };
+    "function-bind-1.1.1" = {
+      name = "function-bind";
+      packageName = "function-bind";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz";
+        sha512 = "yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==";
+      };
+    };
+    "function.prototype.name-1.1.6" = {
+      name = "function.prototype.name";
+      packageName = "function.prototype.name";
+      version = "1.1.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz";
+        sha512 = "Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==";
+      };
+    };
+    "functions-have-names-1.2.3" = {
+      name = "functions-have-names";
+      packageName = "functions-have-names";
+      version = "1.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz";
+        sha512 = "xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==";
+      };
+    };
+    "gauge-3.0.2" = {
+      name = "gauge";
+      packageName = "gauge";
+      version = "3.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz";
+        sha512 = "+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==";
+      };
+    };
+    "gauge-4.0.4" = {
+      name = "gauge";
+      packageName = "gauge";
+      version = "4.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz";
+        sha512 = "f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==";
+      };
+    };
+    "gaxios-4.3.3" = {
+      name = "gaxios";
+      packageName = "gaxios";
+      version = "4.3.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz";
+        sha512 = "gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==";
+      };
+    };
+    "gaxios-5.1.3" = {
+      name = "gaxios";
+      packageName = "gaxios";
+      version = "5.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/gaxios/-/gaxios-5.1.3.tgz";
+        sha512 = "95hVgBRgEIRQQQHIbnxBXeHbW4TqFk4ZDJW7wmVtvYar72FdhRIo1UGOLS2eRAKCPEdPBWu+M7+A33D9CdX9rA==";
+      };
+    };
+    "gcp-metadata-4.3.1" = {
+      name = "gcp-metadata";
+      packageName = "gcp-metadata";
+      version = "4.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.1.tgz";
+        sha512 = "x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==";
+      };
+    };
+    "gcp-metadata-5.3.0" = {
+      name = "gcp-metadata";
+      packageName = "gcp-metadata";
+      version = "5.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.3.0.tgz";
+        sha512 = "FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w==";
+      };
+    };
+    "generate-function-2.3.1" = {
+      name = "generate-function";
+      packageName = "generate-function";
+      version = "2.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz";
+        sha512 = "eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==";
+      };
+    };
+    "generic-pool-3.9.0" = {
+      name = "generic-pool";
+      packageName = "generic-pool";
+      version = "3.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/generic-pool/-/generic-pool-3.9.0.tgz";
+        sha512 = "hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g==";
+      };
+    };
+    "get-caller-file-2.0.5" = {
+      name = "get-caller-file";
+      packageName = "get-caller-file";
+      version = "2.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz";
+        sha512 = "DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==";
+      };
+    };
+    "get-intrinsic-1.2.1" = {
+      name = "get-intrinsic";
+      packageName = "get-intrinsic";
+      version = "1.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz";
+        sha512 = "2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==";
+      };
+    };
+    "get-package-type-0.1.0" = {
+      name = "get-package-type";
+      packageName = "get-package-type";
+      version = "0.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz";
+        sha512 = "pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==";
+      };
+    };
+    "get-port-5.1.1" = {
+      name = "get-port";
+      packageName = "get-port";
+      version = "5.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz";
+        sha512 = "g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==";
+      };
+    };
+    "get-symbol-description-1.0.0" = {
+      name = "get-symbol-description";
+      packageName = "get-symbol-description";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz";
+        sha512 = "2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==";
+      };
+    };
+    "get-system-fonts-2.0.2" = {
+      name = "get-system-fonts";
+      packageName = "get-system-fonts";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/get-system-fonts/-/get-system-fonts-2.0.2.tgz";
+        sha512 = "zzlgaYnHMIEgHRrfC7x0Qp0Ylhw/sHpM6MHXeVBTYIsvGf5GpbnClB+Q6rAPdn+0gd2oZZIo6Tj3EaWrt4VhDQ==";
+      };
+    };
+    "get-uri-3.0.2" = {
+      name = "get-uri";
+      packageName = "get-uri";
+      version = "3.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/get-uri/-/get-uri-3.0.2.tgz";
+        sha512 = "+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg==";
+      };
+    };
+    "getpass-0.1.7" = {
+      name = "getpass";
+      packageName = "getpass";
+      version = "0.1.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz";
+        sha512 = "0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==";
+      };
+    };
+    "github-from-package-0.0.0" = {
+      name = "github-from-package";
+      packageName = "github-from-package";
+      version = "0.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz";
+        sha512 = "SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==";
+      };
+    };
+    "glob-10.3.4" = {
+      name = "glob";
+      packageName = "glob";
+      version = "10.3.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/glob/-/glob-10.3.4.tgz";
+        sha512 = "6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==";
+      };
+    };
+    "glob-7.2.3" = {
+      name = "glob";
+      packageName = "glob";
+      version = "7.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz";
+        sha512 = "nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==";
+      };
+    };
+    "glob-8.1.0" = {
+      name = "glob";
+      packageName = "glob";
+      version = "8.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz";
+        sha512 = "r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==";
+      };
+    };
+    "glob-parent-5.1.2" = {
+      name = "glob-parent";
+      packageName = "glob-parent";
+      version = "5.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz";
+        sha512 = "AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==";
+      };
+    };
+    "glob-to-regexp-0.4.1" = {
+      name = "glob-to-regexp";
+      packageName = "glob-to-regexp";
+      version = "0.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz";
+        sha512 = "lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==";
+      };
+    };
+    "globalthis-1.0.3" = {
+      name = "globalthis";
+      packageName = "globalthis";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz";
+        sha512 = "sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==";
+      };
+    };
+    "globby-11.1.0" = {
+      name = "globby";
+      packageName = "globby";
+      version = "11.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz";
+        sha512 = "jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==";
+      };
+    };
+    "gm-1.25.0" = {
+      name = "gm";
+      packageName = "gm";
+      version = "1.25.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/gm/-/gm-1.25.0.tgz";
+        sha512 = "4kKdWXTtgQ4biIo7hZA396HT062nDVVHPjQcurNZ3o/voYN+o5FUC5kOwuORbpExp3XbTJ3SU7iRipiIhQtovw==";
+      };
+    };
+    "google-auth-library-7.14.1" = {
+      name = "google-auth-library";
+      packageName = "google-auth-library";
+      version = "7.14.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/google-auth-library/-/google-auth-library-7.14.1.tgz";
+        sha512 = "5Rk7iLNDFhFeBYc3s8l1CqzbEBcdhwR193RlD4vSNFajIcINKI8W8P0JLmBpwymHqqWbX34pJDQu39cSy/6RsA==";
+      };
+    };
+    "google-auth-library-8.9.0" = {
+      name = "google-auth-library";
+      packageName = "google-auth-library";
+      version = "8.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.9.0.tgz";
+        sha512 = "f7aQCJODJFmYWN6PeNKzgvy9LI2tYmXnzpNDHEjG5sDNPgGb2FXQyTBnXeSH+PAtpKESFD+LmHw3Ox3mN7e1Fg==";
+      };
+    };
+    "google-gax-2.30.5" = {
+      name = "google-gax";
+      packageName = "google-gax";
+      version = "2.30.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/google-gax/-/google-gax-2.30.5.tgz";
+        sha512 = "Jey13YrAN2hfpozHzbtrwEfEHdStJh1GwaQ2+Akh1k0Tv/EuNVSuBtHZoKSBm5wBMvNsxTsEIZ/152NrYyZgxQ==";
+      };
+    };
+    "google-p12-pem-3.1.4" = {
+      name = "google-p12-pem";
+      packageName = "google-p12-pem";
+      version = "3.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.1.4.tgz";
+        sha512 = "HHuHmkLgwjdmVRngf5+gSmpkyaRI6QmOg77J8tkNBHhNEI62sGHyw4/+UkgyZEI7h84NbWprXDJ+sa3xOYFvTg==";
+      };
+    };
+    "google-p12-pem-4.0.1" = {
+      name = "google-p12-pem";
+      packageName = "google-p12-pem";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-4.0.1.tgz";
+        sha512 = "WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ==";
+      };
+    };
+    "google-timezones-json-1.2.0" = {
+      name = "google-timezones-json";
+      packageName = "google-timezones-json";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/google-timezones-json/-/google-timezones-json-1.2.0.tgz";
+        sha512 = "NqhNA3tS6kiQMpmV6LyrkYPckxDpydrG09AcN5lk/grDNcihl73Q+SBUqpWOCdZ8BxFRbM7V62hpzidiYeYCEQ==";
+      };
+    };
+    "gopd-1.0.1" = {
+      name = "gopd";
+      packageName = "gopd";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz";
+        sha512 = "d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==";
+      };
+    };
+    "graceful-fs-4.2.11" = {
+      name = "graceful-fs";
+      packageName = "graceful-fs";
+      version = "4.2.11";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz";
+        sha512 = "RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==";
+      };
+    };
+    "grpc-gcp-0.3.3" = {
+      name = "grpc-gcp";
+      packageName = "grpc-gcp";
+      version = "0.3.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/grpc-gcp/-/grpc-gcp-0.3.3.tgz";
+        sha512 = "GuIoDnxuSDZoB5DEuuNh8SNB2vk+ZGPoY0+tXQ53TcLTyeY3X0xmkF2v6f9+HAS70TzJ6biyug8Eq9t4HIqpbQ==";
+      };
+    };
+    "gtoken-5.3.2" = {
+      name = "gtoken";
+      packageName = "gtoken";
+      version = "5.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/gtoken/-/gtoken-5.3.2.tgz";
+        sha512 = "gkvEKREW7dXWF8NV8pVrKfW7WqReAmjjkMBh6lNCCGOM4ucS0r0YyXXl0r/9Yj8wcW/32ISkfc8h5mPTDbtifQ==";
+      };
+    };
+    "gtoken-6.1.2" = {
+      name = "gtoken";
+      packageName = "gtoken";
+      version = "6.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/gtoken/-/gtoken-6.1.2.tgz";
+        sha512 = "4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ==";
+      };
+    };
+    "handlebars-4.7.7" = {
+      name = "handlebars";
+      packageName = "handlebars";
+      version = "4.7.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz";
+        sha512 = "aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==";
+      };
+    };
+    "handlebars-4.7.8" = {
+      name = "handlebars";
+      packageName = "handlebars";
+      version = "4.7.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz";
+        sha512 = "vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==";
+      };
+    };
+    "has-1.0.3" = {
+      name = "has";
+      packageName = "has";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has/-/has-1.0.3.tgz";
+        sha512 = "f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==";
+      };
+    };
+    "has-bigints-1.0.2" = {
+      name = "has-bigints";
+      packageName = "has-bigints";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz";
+        sha512 = "tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==";
+      };
+    };
+    "has-flag-4.0.0" = {
+      name = "has-flag";
+      packageName = "has-flag";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz";
+        sha512 = "EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==";
+      };
+    };
+    "has-property-descriptors-1.0.0" = {
+      name = "has-property-descriptors";
+      packageName = "has-property-descriptors";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz";
+        sha512 = "62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==";
+      };
+    };
+    "has-proto-1.0.1" = {
+      name = "has-proto";
+      packageName = "has-proto";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz";
+        sha512 = "7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==";
+      };
+    };
+    "has-symbols-1.0.3" = {
+      name = "has-symbols";
+      packageName = "has-symbols";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz";
+        sha512 = "l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==";
+      };
+    };
+    "has-tostringtag-1.0.0" = {
+      name = "has-tostringtag";
+      packageName = "has-tostringtag";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz";
+        sha512 = "kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==";
+      };
+    };
+    "has-unicode-2.0.1" = {
+      name = "has-unicode";
+      packageName = "has-unicode";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz";
+        sha512 = "8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==";
+      };
+    };
+    "hdb-pool-0.1.6" = {
+      name = "hdb-pool";
+      packageName = "hdb-pool";
+      version = "0.1.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/hdb-pool/-/hdb-pool-0.1.6.tgz";
+        sha512 = "8VZOLn1EHamm1NmTFQj2iqjVcfonYIsD7F5DU2bz2N+gF+knp6/MbAVeRXkJtya717IBkPeA5iv0/1iPuYo4ZA==";
+      };
+    };
+    "he-1.2.0" = {
+      name = "he";
+      packageName = "he";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/he/-/he-1.2.0.tgz";
+        sha512 = "F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==";
+      };
+    };
+    "header-case-2.0.4" = {
+      name = "header-case";
+      packageName = "header-case";
+      version = "2.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz";
+        sha512 = "H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==";
+      };
+    };
+    "heap-0.2.7" = {
+      name = "heap";
+      packageName = "heap";
+      version = "0.2.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz";
+        sha512 = "2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==";
+      };
+    };
+    "help-me-3.0.0" = {
+      name = "help-me";
+      packageName = "help-me";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/help-me/-/help-me-3.0.0.tgz";
+        sha512 = "hx73jClhyk910sidBB7ERlnhMlFsJJIBqSVMFDwPN8o2v9nmp5KgLq1Xz1Bf1fCMMZ6mPrX159iG0VLy/fPMtQ==";
+      };
+    };
+    "help-me-4.2.0" = {
+      name = "help-me";
+      packageName = "help-me";
+      version = "4.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/help-me/-/help-me-4.2.0.tgz";
+        sha512 = "TAOnTB8Tz5Dw8penUuzHVrKNKlCIbwwbHnXraNJxPwf8LRtE2HlM84RYuezMFcwOJmoYOCWVDyJ8TQGxn9PgxA==";
+      };
+    };
+    "hexoid-1.0.0" = {
+      name = "hexoid";
+      packageName = "hexoid";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz";
+        sha512 = "QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==";
+      };
+    };
+    "highlight.js-10.7.3" = {
+      name = "highlight.js";
+      packageName = "highlight.js";
+      version = "10.7.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz";
+        sha512 = "tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==";
+      };
+    };
+    "homedir-polyfill-1.0.3" = {
+      name = "homedir-polyfill";
+      packageName = "homedir-polyfill";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz";
+        sha512 = "eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==";
+      };
+    };
+    "html-to-text-9.0.5" = {
+      name = "html-to-text";
+      packageName = "html-to-text";
+      version = "9.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/html-to-text/-/html-to-text-9.0.5.tgz";
+        sha512 = "qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==";
+      };
+    };
+    "htmlparser2-6.1.0" = {
+      name = "htmlparser2";
+      packageName = "htmlparser2";
+      version = "6.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz";
+        sha512 = "gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==";
+      };
+    };
+    "htmlparser2-8.0.2" = {
+      name = "htmlparser2";
+      packageName = "htmlparser2";
+      version = "8.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz";
+        sha512 = "GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==";
+      };
+    };
+    "http-cache-semantics-4.1.1" = {
+      name = "http-cache-semantics";
+      packageName = "http-cache-semantics";
+      version = "4.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz";
+        sha512 = "er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==";
+      };
+    };
+    "http-errors-2.0.0" = {
+      name = "http-errors";
+      packageName = "http-errors";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz";
+        sha512 = "FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==";
+      };
+    };
+    "http-proxy-agent-4.0.1" = {
+      name = "http-proxy-agent";
+      packageName = "http-proxy-agent";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz";
+        sha512 = "k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==";
+      };
+    };
+    "http-proxy-agent-5.0.0" = {
+      name = "http-proxy-agent";
+      packageName = "http-proxy-agent";
+      version = "5.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz";
+        sha512 = "n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==";
+      };
+    };
+    "https-proxy-agent-5.0.1" = {
+      name = "https-proxy-agent";
+      packageName = "https-proxy-agent";
+      version = "5.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz";
+        sha512 = "dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==";
+      };
+    };
+    "humanize-duration-3.29.0" = {
+      name = "humanize-duration";
+      packageName = "humanize-duration";
+      version = "3.29.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/humanize-duration/-/humanize-duration-3.29.0.tgz";
+        sha512 = "G5wZGwYTLaQAmYqhfK91aw3xt6wNbJW1RnWDh4qP1PvF4T/jnkjx2RVhG5kzB2PGsYGTn+oSDBQp+dMdILLxcg==";
+      };
+    };
+    "humanize-ms-1.2.1" = {
+      name = "humanize-ms";
+      packageName = "humanize-ms";
+      version = "1.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz";
+        sha512 = "Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==";
+      };
+    };
+    "hyperlinker-1.0.0" = {
+      name = "hyperlinker";
+      packageName = "hyperlinker";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/hyperlinker/-/hyperlinker-1.0.0.tgz";
+        sha512 = "Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ==";
+      };
+    };
+    "iconv-lite-0.4.24" = {
+      name = "iconv-lite";
+      packageName = "iconv-lite";
+      version = "0.4.24";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz";
+        sha512 = "v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==";
+      };
+    };
+    "iconv-lite-0.4.5" = {
+      name = "iconv-lite";
+      packageName = "iconv-lite";
+      version = "0.4.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.5.tgz";
+        sha512 = "LQ4GtDkFagYaac8u4rE73zWu7h0OUUmR0qVBOgzLyFSoJhoDG2xV9PZJWWyVVcYha/9/RZzQHUinFMbNKiOoAA==";
+      };
+    };
+    "iconv-lite-0.6.3" = {
+      name = "iconv-lite";
+      packageName = "iconv-lite";
+      version = "0.6.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz";
+        sha512 = "4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==";
+      };
+    };
+    "ics-2.44.0" = {
+      name = "ics";
+      packageName = "ics";
+      version = "2.44.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ics/-/ics-2.44.0.tgz";
+        sha512 = "JeiPjNeWkd7Qri/wfHqjZCtglVwRJRqy1MEFKn9QzatzxUyCOsx4YARPlLkU8UnPxpg4VtEjR+VRUG+Cvj6bDg==";
+      };
+    };
+    "ieee754-1.1.13" = {
+      name = "ieee754";
+      packageName = "ieee754";
+      version = "1.1.13";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz";
+        sha512 = "4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==";
+      };
+    };
+    "ieee754-1.2.1" = {
+      name = "ieee754";
+      packageName = "ieee754";
+      version = "1.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz";
+        sha512 = "dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==";
+      };
+    };
+    "ignore-5.2.4" = {
+      name = "ignore";
+      packageName = "ignore";
+      version = "5.2.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz";
+        sha512 = "MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==";
+      };
+    };
+    "imap-0.8.19" = {
+      name = "imap";
+      packageName = "imap";
+      version = "0.8.19";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/imap/-/imap-0.8.19.tgz";
+        sha512 = "z5DxEA1uRnZG73UcPA4ES5NSCGnPuuouUx43OPX7KZx1yzq3N8/vx2mtXEShT5inxB3pRgnfG1hijfu7XN2YMw==";
+      };
+    };
+    "imap-simple-4.3.0" = {
+      name = "imap-simple";
+      packageName = "imap-simple";
+      version = "4.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/imap-simple/-/imap-simple-4.3.0.tgz";
+        sha512 = "SW3LtfEJFjlJKS/h2CmpX2IKpya2RXobR3ENJJW4iMQ3QYPxWxf5oeaz1K3P4eGUwfGEndkqt7uVDKnEyG9zeQ==";
+      };
+    };
+    "immediate-3.0.6" = {
+      name = "immediate";
+      packageName = "immediate";
+      version = "3.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz";
+        sha512 = "XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==";
+      };
+    };
+    "imurmurhash-0.1.4" = {
+      name = "imurmurhash";
+      packageName = "imurmurhash";
+      version = "0.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz";
+        sha512 = "JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==";
+      };
+    };
+    "indent-string-4.0.0" = {
+      name = "indent-string";
+      packageName = "indent-string";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz";
+        sha512 = "EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==";
+      };
+    };
+    "infer-owner-1.0.4" = {
+      name = "infer-owner";
+      packageName = "infer-owner";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz";
+        sha512 = "IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==";
+      };
+    };
+    "infisical-node-1.4.3" = {
+      name = "infisical-node";
+      packageName = "infisical-node";
+      version = "1.4.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/infisical-node/-/infisical-node-1.4.3.tgz";
+        sha512 = "z/gYkctAB6yQoH/9um9znvljsF6WVhsrMw9urZ80O5E1M+/RwZW40mc6LHs2nQpZD90at6SbuzVWQoEwSdEmTw==";
+      };
+    };
+    "inflight-1.0.6" = {
+      name = "inflight";
+      packageName = "inflight";
+      version = "1.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz";
+        sha512 = "k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==";
+      };
+    };
+    "inherits-2.0.4" = {
+      name = "inherits";
+      packageName = "inherits";
+      version = "2.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz";
+        sha512 = "k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==";
+      };
+    };
+    "ini-1.3.8" = {
+      name = "ini";
+      packageName = "ini";
+      version = "1.3.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz";
+        sha512 = "JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==";
+      };
+    };
+    "inquirer-7.3.3" = {
+      name = "inquirer";
+      packageName = "inquirer";
+      version = "7.3.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz";
+        sha512 = "JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==";
+      };
+    };
+    "internal-slot-1.0.5" = {
+      name = "internal-slot";
+      packageName = "internal-slot";
+      version = "1.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz";
+        sha512 = "Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==";
+      };
+    };
+    "interpret-1.4.0" = {
+      name = "interpret";
+      packageName = "interpret";
+      version = "1.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz";
+        sha512 = "agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==";
+      };
+    };
+    "ioredis-4.28.5" = {
+      name = "ioredis";
+      packageName = "ioredis";
+      version = "4.28.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ioredis/-/ioredis-4.28.5.tgz";
+        sha512 = "3GYo0GJtLqgNXj4YhrisLaNNvWSNwSS2wS4OELGfGxH8I69+XfNdnmV1AyN+ZqMh0i7eX+SWjrwFKDBDgfBC1A==";
+      };
+    };
+    "ioredis-5.3.2" = {
+      name = "ioredis";
+      packageName = "ioredis";
+      version = "5.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ioredis/-/ioredis-5.3.2.tgz";
+        sha512 = "1DKMMzlIHM02eBBVOFQ1+AolGjs6+xEcM4PDL7NqOS6szq7H9jSaEkIUH6/a5Hl241LzW6JLSiAbNvTQjUupUA==";
+      };
+    };
+    "ip-1.1.8" = {
+      name = "ip";
+      packageName = "ip";
+      version = "1.1.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz";
+        sha512 = "PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==";
+      };
+    };
+    "ip-2.0.0" = {
+      name = "ip";
+      packageName = "ip";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz";
+        sha512 = "WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==";
+      };
+    };
+    "ipaddr.js-1.9.1" = {
+      name = "ipaddr.js";
+      packageName = "ipaddr.js";
+      version = "1.9.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz";
+        sha512 = "0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==";
+      };
+    };
+    "is-3.3.0" = {
+      name = "is";
+      packageName = "is";
+      version = "3.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is/-/is-3.3.0.tgz";
+        sha512 = "nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg==";
+      };
+    };
+    "is-arguments-1.1.1" = {
+      name = "is-arguments";
+      packageName = "is-arguments";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz";
+        sha512 = "8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==";
+      };
+    };
+    "is-array-buffer-3.0.2" = {
+      name = "is-array-buffer";
+      packageName = "is-array-buffer";
+      version = "3.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz";
+        sha512 = "y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==";
+      };
+    };
+    "is-arrayish-0.3.2" = {
+      name = "is-arrayish";
+      packageName = "is-arrayish";
+      version = "0.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz";
+        sha512 = "eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==";
+      };
+    };
+    "is-bigint-1.0.4" = {
+      name = "is-bigint";
+      packageName = "is-bigint";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz";
+        sha512 = "zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==";
+      };
+    };
+    "is-binary-path-2.1.0" = {
+      name = "is-binary-path";
+      packageName = "is-binary-path";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz";
+        sha512 = "ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==";
+      };
+    };
+    "is-boolean-object-1.1.2" = {
+      name = "is-boolean-object";
+      packageName = "is-boolean-object";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz";
+        sha512 = "gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==";
+      };
+    };
+    "is-buffer-1.1.6" = {
+      name = "is-buffer";
+      packageName = "is-buffer";
+      version = "1.1.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz";
+        sha512 = "NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==";
+      };
+    };
+    "is-callable-1.2.7" = {
+      name = "is-callable";
+      packageName = "is-callable";
+      version = "1.2.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz";
+        sha512 = "1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==";
+      };
+    };
+    "is-core-module-2.13.0" = {
+      name = "is-core-module";
+      packageName = "is-core-module";
+      version = "2.13.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz";
+        sha512 = "Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==";
+      };
+    };
+    "is-date-object-1.0.5" = {
+      name = "is-date-object";
+      packageName = "is-date-object";
+      version = "1.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz";
+        sha512 = "9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==";
+      };
+    };
+    "is-docker-2.2.1" = {
+      name = "is-docker";
+      packageName = "is-docker";
+      version = "2.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz";
+        sha512 = "F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==";
+      };
+    };
+    "is-extendable-0.1.1" = {
+      name = "is-extendable";
+      packageName = "is-extendable";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz";
+        sha512 = "5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==";
+      };
+    };
+    "is-extglob-2.1.1" = {
+      name = "is-extglob";
+      packageName = "is-extglob";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz";
+        sha512 = "SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==";
+      };
+    };
+    "is-fullwidth-code-point-3.0.0" = {
+      name = "is-fullwidth-code-point";
+      packageName = "is-fullwidth-code-point";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz";
+        sha512 = "zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==";
+      };
+    };
+    "is-generator-function-1.0.10" = {
+      name = "is-generator-function";
+      packageName = "is-generator-function";
+      version = "1.0.10";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz";
+        sha512 = "jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==";
+      };
+    };
+    "is-glob-4.0.3" = {
+      name = "is-glob";
+      packageName = "is-glob";
+      version = "4.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz";
+        sha512 = "xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==";
+      };
+    };
+    "is-lambda-1.0.1" = {
+      name = "is-lambda";
+      packageName = "is-lambda";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz";
+        sha512 = "z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==";
+      };
+    };
+    "is-map-2.0.2" = {
+      name = "is-map";
+      packageName = "is-map";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz";
+        sha512 = "cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==";
+      };
+    };
+    "is-nan-1.3.2" = {
+      name = "is-nan";
+      packageName = "is-nan";
+      version = "1.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz";
+        sha512 = "E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==";
+      };
+    };
+    "is-negative-zero-2.0.2" = {
+      name = "is-negative-zero";
+      packageName = "is-negative-zero";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz";
+        sha512 = "dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==";
+      };
+    };
+    "is-number-7.0.0" = {
+      name = "is-number";
+      packageName = "is-number";
+      version = "7.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz";
+        sha512 = "41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==";
+      };
+    };
+    "is-number-object-1.0.7" = {
+      name = "is-number-object";
+      packageName = "is-number-object";
+      version = "1.0.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz";
+        sha512 = "k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==";
+      };
+    };
+    "is-plain-object-5.0.0" = {
+      name = "is-plain-object";
+      packageName = "is-plain-object";
+      version = "5.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz";
+        sha512 = "VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==";
+      };
+    };
+    "is-promise-1.0.1" = {
+      name = "is-promise";
+      packageName = "is-promise";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-promise/-/is-promise-1.0.1.tgz";
+        sha512 = "mjWH5XxnhMA8cFnDchr6qRP9S/kLntKuEfIYku+PaN1CnS8v+OG9O/BKpRCVRJvpIkgAZm0Pf5Is3iSSOILlcg==";
+      };
+    };
+    "is-property-1.0.2" = {
+      name = "is-property";
+      packageName = "is-property";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz";
+        sha512 = "Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==";
+      };
+    };
+    "is-regex-1.1.4" = {
+      name = "is-regex";
+      packageName = "is-regex";
+      version = "1.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz";
+        sha512 = "kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==";
+      };
+    };
+    "is-retry-allowed-2.2.0" = {
+      name = "is-retry-allowed";
+      packageName = "is-retry-allowed";
+      version = "2.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-2.2.0.tgz";
+        sha512 = "XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg==";
+      };
+    };
+    "is-set-2.0.2" = {
+      name = "is-set";
+      packageName = "is-set";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz";
+        sha512 = "+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==";
+      };
+    };
+    "is-shared-array-buffer-1.0.2" = {
+      name = "is-shared-array-buffer";
+      packageName = "is-shared-array-buffer";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz";
+        sha512 = "sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==";
+      };
+    };
+    "is-stream-2.0.1" = {
+      name = "is-stream";
+      packageName = "is-stream";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz";
+        sha512 = "hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==";
+      };
+    };
+    "is-stream-ended-0.1.4" = {
+      name = "is-stream-ended";
+      packageName = "is-stream-ended";
+      version = "0.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz";
+        sha512 = "xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==";
+      };
+    };
+    "is-string-1.0.7" = {
+      name = "is-string";
+      packageName = "is-string";
+      version = "1.0.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz";
+        sha512 = "tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==";
+      };
+    };
+    "is-symbol-1.0.4" = {
+      name = "is-symbol";
+      packageName = "is-symbol";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz";
+        sha512 = "C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==";
+      };
+    };
+    "is-typed-array-1.1.12" = {
+      name = "is-typed-array";
+      packageName = "is-typed-array";
+      version = "1.1.12";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz";
+        sha512 = "Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==";
+      };
+    };
+    "is-weakmap-2.0.1" = {
+      name = "is-weakmap";
+      packageName = "is-weakmap";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz";
+        sha512 = "NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==";
+      };
+    };
+    "is-weakref-1.0.2" = {
+      name = "is-weakref";
+      packageName = "is-weakref";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz";
+        sha512 = "qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==";
+      };
+    };
+    "is-weakset-2.0.2" = {
+      name = "is-weakset";
+      packageName = "is-weakset";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz";
+        sha512 = "t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==";
+      };
+    };
+    "is-wsl-2.2.0" = {
+      name = "is-wsl";
+      packageName = "is-wsl";
+      version = "2.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz";
+        sha512 = "fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==";
+      };
+    };
+    "isarray-0.0.1" = {
+      name = "isarray";
+      packageName = "isarray";
+      version = "0.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz";
+        sha512 = "D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==";
+      };
+    };
+    "isarray-1.0.0" = {
+      name = "isarray";
+      packageName = "isarray";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz";
+        sha512 = "VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==";
+      };
+    };
+    "isarray-2.0.5" = {
+      name = "isarray";
+      packageName = "isarray";
+      version = "2.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz";
+        sha512 = "xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==";
+      };
+    };
+    "isbot-3.6.13" = {
+      name = "isbot";
+      packageName = "isbot";
+      version = "3.6.13";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/isbot/-/isbot-3.6.13.tgz";
+        sha512 = "uoP4uK5Dc2CrabmK+Gue1jTL+scHiCc1c9rblRpJwG8CPxjLIv8jmGyyGRGkbPOweayhkskdZsEQXG6p+QCQrg==";
+      };
+    };
+    "isexe-2.0.0" = {
+      name = "isexe";
+      packageName = "isexe";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz";
+        sha512 = "RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==";
+      };
+    };
+    "iso-639-1-2.1.15" = {
+      name = "iso-639-1";
+      packageName = "iso-639-1";
+      version = "2.1.15";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/iso-639-1/-/iso-639-1-2.1.15.tgz";
+        sha512 = "7c7mBznZu2ktfvyT582E2msM+Udc1EjOyhVRE/0ZsjD9LBtWSm23h3PtiRh2a35XoUsTQQjJXaJzuLjXsOdFDg==";
+      };
+    };
+    "isomorphic-ws-4.0.1" = {
+      name = "isomorphic-ws";
+      packageName = "isomorphic-ws";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz";
+        sha512 = "BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==";
+      };
+    };
+    "jackspeak-2.3.3" = {
+      name = "jackspeak";
+      packageName = "jackspeak";
+      version = "2.3.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.3.tgz";
+        sha512 = "R2bUw+kVZFS/h1AZqBKrSgDmdmjApzgY0AlCPumopFiAlbUxE2gf+SCuBzQ0cP5hHmUmFYF5yw55T97Th5Kstg==";
+      };
+    };
+    "jake-10.8.7" = {
+      name = "jake";
+      packageName = "jake";
+      version = "10.8.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz";
+        sha512 = "ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==";
+      };
+    };
+    "jest-worker-27.5.1" = {
+      name = "jest-worker";
+      packageName = "jest-worker";
+      version = "27.5.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz";
+        sha512 = "7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==";
+      };
+    };
+    "jmespath-0.16.0" = {
+      name = "jmespath";
+      packageName = "jmespath";
+      version = "0.16.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz";
+        sha512 = "9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==";
+      };
+    };
+    "join-component-1.1.0" = {
+      name = "join-component";
+      packageName = "join-component";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/join-component/-/join-component-1.1.0.tgz";
+        sha512 = "bF7vcQxbODoGK1imE2P9GS9aw4zD0Sd+Hni68IMZLj7zRnquH7dXUmMw9hDI5S/Jzt7q+IyTXN0rSg2GI0IKhQ==";
+      };
+    };
+    "jose-4.14.6" = {
+      name = "jose";
+      packageName = "jose";
+      version = "4.14.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jose/-/jose-4.14.6.tgz";
+        sha512 = "EqJPEUlZD0/CSUMubKtMaYUOtWe91tZXTWMJZoKSbLk+KtdhNdcvppH8lA9XwVu2V4Ailvsj0GBZJ2ZwDjfesQ==";
+      };
+    };
+    "js-base64-3.7.5" = {
+      name = "js-base64";
+      packageName = "js-base64";
+      version = "3.7.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/js-base64/-/js-base64-3.7.5.tgz";
+        sha512 = "3MEt5DTINKqfScXKfJFrRbxkrnk2AxPWGBL/ycjz4dK8iqiSJ06UxD8jh8xuh6p10TX4t2+7FsBYVxxQbMg+qA==";
+      };
+    };
+    "js-md4-0.3.2" = {
+      name = "js-md4";
+      packageName = "js-md4";
+      version = "0.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/js-md4/-/js-md4-0.3.2.tgz";
+        sha512 = "/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA==";
+      };
+    };
+    "js-nacl-1.4.0" = {
+      name = "js-nacl";
+      packageName = "js-nacl";
+      version = "1.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/js-nacl/-/js-nacl-1.4.0.tgz";
+        sha512 = "HgYLcutGbMYBJrwgVICiHliuw1OJLy2U3tIuK6a1rZ06KC84TPl81WG1hcBRrBCiIIuBe3PSo9G4IZOMGdSg3Q==";
+      };
+    };
+    "js-sdsl-4.3.0" = {
+      name = "js-sdsl";
+      packageName = "js-sdsl";
+      version = "4.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz";
+        sha512 = "mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==";
+      };
+    };
+    "js-yaml-3.14.1" = {
+      name = "js-yaml";
+      packageName = "js-yaml";
+      version = "3.14.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz";
+        sha512 = "okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==";
+      };
+    };
+    "js-yaml-4.1.0" = {
+      name = "js-yaml";
+      packageName = "js-yaml";
+      version = "4.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz";
+        sha512 = "wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==";
+      };
+    };
+    "jsbi-4.3.0" = {
+      name = "jsbi";
+      packageName = "jsbi";
+      version = "4.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jsbi/-/jsbi-4.3.0.tgz";
+        sha512 = "SnZNcinB4RIcnEyZqFPdGPVgrg2AcnykiBy0sHVJQKHYeaLUvi3Exj+iaPpLnFVkDPZIV4U0yvgC9/R4uEAZ9g==";
+      };
+    };
+    "jsbn-0.1.1" = {
+      name = "jsbn";
+      packageName = "jsbn";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz";
+        sha512 = "UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==";
+      };
+    };
+    "jsesc-3.0.2" = {
+      name = "jsesc";
+      packageName = "jsesc";
+      version = "3.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz";
+        sha512 = "xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==";
+      };
+    };
+    "json-bigint-1.0.0" = {
+      name = "json-bigint";
+      packageName = "json-bigint";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz";
+        sha512 = "SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==";
+      };
+    };
+    "json-diff-1.0.6" = {
+      name = "json-diff";
+      packageName = "json-diff";
+      version = "1.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json-diff/-/json-diff-1.0.6.tgz";
+        sha512 = "tcFIPRdlc35YkYdGxcamJjllUhXWv4n2rK9oJ2RsAzV4FBkuV4ojKEDgcZ+kpKxDmJKv+PFK65+1tVVOnSeEqA==";
+      };
+    };
+    "json-parse-even-better-errors-2.3.1" = {
+      name = "json-parse-even-better-errors";
+      packageName = "json-parse-even-better-errors";
+      version = "2.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz";
+        sha512 = "xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==";
+      };
+    };
+    "json-schema-ref-parser-9.0.9" = {
+      name = "json-schema-ref-parser";
+      packageName = "json-schema-ref-parser";
+      version = "9.0.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz";
+        sha512 = "qcP2lmGy+JUoQJ4DOQeLaZDqH9qSkeGCK3suKWxJXS82dg728Mn3j97azDMaOUmJAN4uCq91LdPx4K7E8F1a7Q==";
+      };
+    };
+    "json-schema-traverse-0.4.1" = {
+      name = "json-schema-traverse";
+      packageName = "json-schema-traverse";
+      version = "0.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz";
+        sha512 = "xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==";
+      };
+    };
+    "json5-2.2.3" = {
+      name = "json5";
+      packageName = "json5";
+      version = "2.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz";
+        sha512 = "XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==";
+      };
+    };
+    "jsonfile-4.0.0" = {
+      name = "jsonfile";
+      packageName = "jsonfile";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz";
+        sha512 = "m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==";
+      };
+    };
+    "jsonfile-6.1.0" = {
+      name = "jsonfile";
+      packageName = "jsonfile";
+      version = "6.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz";
+        sha512 = "5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==";
+      };
+    };
+    "jsonpath-1.1.1" = {
+      name = "jsonpath";
+      packageName = "jsonpath";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jsonpath/-/jsonpath-1.1.1.tgz";
+        sha512 = "l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==";
+      };
+    };
+    "jsonschema-1.4.1" = {
+      name = "jsonschema";
+      packageName = "jsonschema";
+      version = "1.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.1.tgz";
+        sha512 = "S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==";
+      };
+    };
+    "jsonwebtoken-9.0.2" = {
+      name = "jsonwebtoken";
+      packageName = "jsonwebtoken";
+      version = "9.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz";
+        sha512 = "PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==";
+      };
+    };
+    "jssha-3.3.1" = {
+      name = "jssha";
+      packageName = "jssha";
+      version = "3.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jssha/-/jssha-3.3.1.tgz";
+        sha512 = "VCMZj12FCFMQYcFLPRm/0lOBbLi8uM2BhXPTqw3U4YAfs4AZfiApOoBLoN8cQE60Z50m1MYMTQVCfgF/KaCVhQ==";
+      };
+    };
+    "jwa-1.4.1" = {
+      name = "jwa";
+      packageName = "jwa";
+      version = "1.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz";
+        sha512 = "qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==";
+      };
+    };
+    "jwa-2.0.0" = {
+      name = "jwa";
+      packageName = "jwa";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz";
+        sha512 = "jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==";
+      };
+    };
+    "jwks-rsa-3.0.1" = {
+      name = "jwks-rsa";
+      packageName = "jwks-rsa";
+      version = "3.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-3.0.1.tgz";
+        sha512 = "UUOZ0CVReK1QVU3rbi9bC7N5/le8ziUj0A2ef1Q0M7OPD2KvjEYizptqIxGIo6fSLYDkqBrazILS18tYuRc8gw==";
+      };
+    };
+    "jws-3.2.2" = {
+      name = "jws";
+      packageName = "jws";
+      version = "3.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz";
+        sha512 = "YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==";
+      };
+    };
+    "jws-4.0.0" = {
+      name = "jws";
+      packageName = "jws";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz";
+        sha512 = "KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==";
+      };
+    };
+    "kafkajs-1.16.0" = {
+      name = "kafkajs";
+      packageName = "kafkajs";
+      version = "1.16.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/kafkajs/-/kafkajs-1.16.0.tgz";
+        sha512 = "+Rcfu2hyQ/jv5skqRY8xA7Ra+mmRkDAzCaLDYbkGtgsNKpzxPWiLbk8ub0dgr4EbWrN1Zb4BCXHUkD6+zYfdWg==";
+      };
+    };
+    "kerberos-2.0.2" = {
+      name = "kerberos";
+      packageName = "kerberos";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/kerberos/-/kerberos-2.0.2.tgz";
+        sha512 = "pP1aZ+T9/58joIdvhqTKTAnwLVLe3cnh+fE7UazuuHNCf4BxHUwF+oh5g2KK3yhouTfb3RQMi+mjw3/6vshdOg==";
+      };
+    };
+    "kuler-2.0.0" = {
+      name = "kuler";
+      packageName = "kuler";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz";
+        sha512 = "Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==";
+      };
+    };
+    "ldapts-4.2.6" = {
+      name = "ldapts";
+      packageName = "ldapts";
+      version = "4.2.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ldapts/-/ldapts-4.2.6.tgz";
+        sha512 = "r1eOj2PtTJi+9aZxLirktoHntuYXlbQD9ZXCjiZmJx0VBQtBcWc+rueqABuh/AxMcFHNPDSJLJAXxoj5VevTwQ==";
+      };
+    };
+    "leac-0.6.0" = {
+      name = "leac";
+      packageName = "leac";
+      version = "0.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/leac/-/leac-0.6.0.tgz";
+        sha512 = "y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==";
+      };
+    };
+    "leven-2.1.0" = {
+      name = "leven";
+      packageName = "leven";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz";
+        sha512 = "nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA==";
+      };
+    };
+    "levn-0.3.0" = {
+      name = "levn";
+      packageName = "levn";
+      version = "0.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz";
+        sha512 = "0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==";
+      };
+    };
+    "libbase64-1.2.1" = {
+      name = "libbase64";
+      packageName = "libbase64";
+      version = "1.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/libbase64/-/libbase64-1.2.1.tgz";
+        sha512 = "l+nePcPbIG1fNlqMzrh68MLkX/gTxk/+vdvAb388Ssi7UuUN31MI44w4Yf33mM3Cm4xDfw48mdf3rkdHszLNew==";
+      };
+    };
+    "libmime-5.2.0" = {
+      name = "libmime";
+      packageName = "libmime";
+      version = "5.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/libmime/-/libmime-5.2.0.tgz";
+        sha512 = "X2U5Wx0YmK0rXFbk67ASMeqYIkZ6E5vY7pNWRKtnNzqjvdYYG8xtPDpCnuUEnPU9vlgNev+JoSrcaKSUaNvfsw==";
+      };
+    };
+    "libmime-5.2.1" = {
+      name = "libmime";
+      packageName = "libmime";
+      version = "5.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/libmime/-/libmime-5.2.1.tgz";
+        sha512 = "A0z9O4+5q+ZTj7QwNe/Juy1KARNb4WaviO4mYeFC4b8dBT2EEqK2pkM+GC8MVnkOjqhl5nYQxRgnPYRRTNmuSQ==";
+      };
+    };
+    "libphonenumber-js-1.10.44" = {
+      name = "libphonenumber-js";
+      packageName = "libphonenumber-js";
+      version = "1.10.44";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.44.tgz";
+        sha512 = "svlRdNBI5WgBjRC20GrCfbFiclbF0Cx+sCcQob/C1r57nsoq0xg8r65QbTyVyweQIlB33P+Uahyho6EMYgcOyQ==";
+      };
+    };
+    "libpq-1.8.12" = {
+      name = "libpq";
+      packageName = "libpq";
+      version = "1.8.12";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/libpq/-/libpq-1.8.12.tgz";
+        sha512 = "4lUY9BD9suz76mVS0kH4rRgRy620g/c9YZH5GYC3smfIpjtj6KiPuQ4IwQSHSZMMMhMM3tBFrYUrw8mHOOZVeg==";
+      };
+    };
+    "libqp-2.0.1" = {
+      name = "libqp";
+      packageName = "libqp";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/libqp/-/libqp-2.0.1.tgz";
+        sha512 = "Ka0eC5LkF3IPNQHJmYBWljJsw0UvM6j+QdKRbWyCdTmYwvIDE6a7bCm0UkTAL/K+3KXK5qXT/ClcInU01OpdLg==";
+      };
+    };
+    "lie-3.1.1" = {
+      name = "lie";
+      packageName = "lie";
+      version = "3.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz";
+        sha512 = "RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==";
+      };
+    };
+    "limiter-1.1.5" = {
+      name = "limiter";
+      packageName = "limiter";
+      version = "1.1.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz";
+        sha512 = "FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==";
+      };
+    };
+    "linkify-it-3.0.3" = {
+      name = "linkify-it";
+      packageName = "linkify-it";
+      version = "3.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz";
+        sha512 = "ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==";
+      };
+    };
+    "linkify-it-4.0.1" = {
+      name = "linkify-it";
+      packageName = "linkify-it";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz";
+        sha512 = "C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==";
+      };
+    };
+    "loader-runner-4.3.0" = {
+      name = "loader-runner";
+      packageName = "loader-runner";
+      version = "4.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz";
+        sha512 = "3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==";
+      };
+    };
+    "loader-utils-2.0.4" = {
+      name = "loader-utils";
+      packageName = "loader-utils";
+      version = "2.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz";
+        sha512 = "xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==";
+      };
+    };
+    "localforage-1.10.0" = {
+      name = "localforage";
+      packageName = "localforage";
+      version = "1.10.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz";
+        sha512 = "14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==";
+      };
+    };
+    "localtunnel-2.0.2" = {
+      name = "localtunnel";
+      packageName = "localtunnel";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/localtunnel/-/localtunnel-2.0.2.tgz";
+        sha512 = "n418Cn5ynvJd7m/N1d9WVJISLJF/ellZnfsLnx8WBWGzxv/ntNcFkJ1o6se5quUhCplfLGBNL5tYHiq5WF3Nug==";
+      };
+    };
+    "lodash-4.17.21" = {
+      name = "lodash";
+      packageName = "lodash";
+      version = "4.17.21";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz";
+        sha512 = "v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==";
+      };
+    };
+    "lodash-es-4.17.21" = {
+      name = "lodash-es";
+      packageName = "lodash-es";
+      version = "4.17.21";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz";
+        sha512 = "mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==";
+      };
+    };
+    "lodash-unified-1.0.3" = {
+      name = "lodash-unified";
+      packageName = "lodash-unified";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash-unified/-/lodash-unified-1.0.3.tgz";
+        sha512 = "WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==";
+      };
+    };
+    "lodash.camelcase-4.3.0" = {
+      name = "lodash.camelcase";
+      packageName = "lodash.camelcase";
+      version = "4.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz";
+        sha512 = "TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==";
+      };
+    };
+    "lodash.clonedeep-4.5.0" = {
+      name = "lodash.clonedeep";
+      packageName = "lodash.clonedeep";
+      version = "4.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz";
+        sha512 = "H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==";
+      };
+    };
+    "lodash.defaults-4.2.0" = {
+      name = "lodash.defaults";
+      packageName = "lodash.defaults";
+      version = "4.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz";
+        sha512 = "qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==";
+      };
+    };
+    "lodash.flatten-4.4.0" = {
+      name = "lodash.flatten";
+      packageName = "lodash.flatten";
+      version = "4.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz";
+        sha512 = "C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==";
+      };
+    };
+    "lodash.get-4.4.2" = {
+      name = "lodash.get";
+      packageName = "lodash.get";
+      version = "4.4.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz";
+        sha512 = "z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==";
+      };
+    };
+    "lodash.includes-4.3.0" = {
+      name = "lodash.includes";
+      packageName = "lodash.includes";
+      version = "4.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz";
+        sha512 = "W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==";
+      };
+    };
+    "lodash.isarguments-3.1.0" = {
+      name = "lodash.isarguments";
+      packageName = "lodash.isarguments";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz";
+        sha512 = "chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==";
+      };
+    };
+    "lodash.isboolean-3.0.3" = {
+      name = "lodash.isboolean";
+      packageName = "lodash.isboolean";
+      version = "3.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz";
+        sha512 = "Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==";
+      };
+    };
+    "lodash.isinteger-4.0.4" = {
+      name = "lodash.isinteger";
+      packageName = "lodash.isinteger";
+      version = "4.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz";
+        sha512 = "DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==";
+      };
+    };
+    "lodash.isnumber-3.0.3" = {
+      name = "lodash.isnumber";
+      packageName = "lodash.isnumber";
+      version = "3.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz";
+        sha512 = "QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==";
+      };
+    };
+    "lodash.isplainobject-4.0.6" = {
+      name = "lodash.isplainobject";
+      packageName = "lodash.isplainobject";
+      version = "4.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz";
+        sha512 = "oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==";
+      };
+    };
+    "lodash.isstring-4.0.1" = {
+      name = "lodash.isstring";
+      packageName = "lodash.isstring";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz";
+        sha512 = "0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==";
+      };
+    };
+    "lodash.once-4.1.1" = {
+      name = "lodash.once";
+      packageName = "lodash.once";
+      version = "4.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz";
+        sha512 = "Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==";
+      };
+    };
+    "lodash.orderby-4.6.0" = {
+      name = "lodash.orderby";
+      packageName = "lodash.orderby";
+      version = "4.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.orderby/-/lodash.orderby-4.6.0.tgz";
+        sha512 = "T0rZxKmghOOf5YPnn8EY5iLYeWCpZq8G41FfqoVHH5QDTAFaghJRmAdLiadEDq+ztgM2q5PjA+Z1fOwGrLgmtg==";
+      };
+    };
+    "lodash.snakecase-4.1.1" = {
+      name = "lodash.snakecase";
+      packageName = "lodash.snakecase";
+      version = "4.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz";
+        sha512 = "QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==";
+      };
+    };
+    "lodash.throttle-4.1.1" = {
+      name = "lodash.throttle";
+      packageName = "lodash.throttle";
+      version = "4.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz";
+        sha512 = "wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==";
+      };
+    };
+    "lodash.uniq-4.5.0" = {
+      name = "lodash.uniq";
+      packageName = "lodash.uniq";
+      version = "4.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz";
+        sha512 = "xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==";
+      };
+    };
+    "lodash.uniqby-4.7.0" = {
+      name = "lodash.uniqby";
+      packageName = "lodash.uniqby";
+      version = "4.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz";
+        sha512 = "e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==";
+      };
+    };
+    "lodash.zipobject-4.1.3" = {
+      name = "lodash.zipobject";
+      packageName = "lodash.zipobject";
+      version = "4.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lodash.zipobject/-/lodash.zipobject-4.1.3.tgz";
+        sha512 = "A9SzX4hMKWS25MyalwcOnNoplyHbkNVsjidhTp8ru0Sj23wY9GWBKS8gAIGDSAqeWjIjvE4KBEl24XXAs+v4wQ==";
+      };
+    };
+    "logform-2.5.1" = {
+      name = "logform";
+      packageName = "logform";
+      version = "2.5.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/logform/-/logform-2.5.1.tgz";
+        sha512 = "9FyqAm9o9NKKfiAKfZoYo9bGXXuwMkxQiQttkT4YjjVtQVIQtK6LmVtlxmCaFswo6N4AfEkHqZTV0taDtPotNg==";
+      };
+    };
+    "long-4.0.0" = {
+      name = "long";
+      packageName = "long";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/long/-/long-4.0.0.tgz";
+        sha512 = "XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==";
+      };
+    };
+    "long-5.2.3" = {
+      name = "long";
+      packageName = "long";
+      version = "5.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/long/-/long-5.2.3.tgz";
+        sha512 = "lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==";
+      };
+    };
+    "lossless-json-1.0.5" = {
+      name = "lossless-json";
+      packageName = "lossless-json";
+      version = "1.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lossless-json/-/lossless-json-1.0.5.tgz";
+        sha512 = "RicKUuLwZVNZ6ZdJHgIZnSeA05p8qWc5NW0uR96mpPIjN9WDLUg9+kj1esQU1GkPn9iLZVKatSQK5gyiaFHgJA==";
+      };
+    };
+    "lower-case-2.0.2" = {
+      name = "lower-case";
+      packageName = "lower-case";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz";
+        sha512 = "7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==";
+      };
+    };
+    "lru-cache-4.0.2" = {
+      name = "lru-cache";
+      packageName = "lru-cache";
+      version = "4.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.2.tgz";
+        sha512 = "uQw9OqphAGiZhkuPlpFGmdTU2tEuhxTourM/19qGJrxBPHAr/f8BT1a0i/lOclESnGatdJG/UCkP9kZB/Lh1iw==";
+      };
+    };
+    "lru-cache-4.1.5" = {
+      name = "lru-cache";
+      packageName = "lru-cache";
+      version = "4.1.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz";
+        sha512 = "sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==";
+      };
+    };
+    "lru-cache-5.1.1" = {
+      name = "lru-cache";
+      packageName = "lru-cache";
+      version = "5.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz";
+        sha512 = "KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==";
+      };
+    };
+    "lru-cache-6.0.0" = {
+      name = "lru-cache";
+      packageName = "lru-cache";
+      version = "6.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz";
+        sha512 = "Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==";
+      };
+    };
+    "lru-cache-7.18.3" = {
+      name = "lru-cache";
+      packageName = "lru-cache";
+      version = "7.18.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz";
+        sha512 = "jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==";
+      };
+    };
+    "lru-cache-9.1.2" = {
+      name = "lru-cache";
+      packageName = "lru-cache";
+      version = "9.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.2.tgz";
+        sha512 = "ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==";
+      };
+    };
+    "lru-memoizer-2.2.0" = {
+      name = "lru-memoizer";
+      packageName = "lru-memoizer";
+      version = "2.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lru-memoizer/-/lru-memoizer-2.2.0.tgz";
+        sha512 = "QfOZ6jNkxCcM/BkIPnFsqDhtrazLRsghi9mBwFAzol5GCvj4EkFT899Za3+QwikCg5sRX8JstioBDwOxEyzaNw==";
+      };
+    };
+    "lru_map-0.3.3" = {
+      name = "lru_map";
+      packageName = "lru_map";
+      version = "0.3.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz";
+        sha512 = "Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==";
+      };
+    };
+    "luxon-3.4.3" = {
+      name = "luxon";
+      packageName = "luxon";
+      version = "3.4.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/luxon/-/luxon-3.4.3.tgz";
+        sha512 = "tFWBiv3h7z+T/tDaoxA8rqTxy1CHV6gHS//QdaH4pulbq/JuBSGgQspQQqcgnwdAx6pNI7cmvz5Sv/addzHmUg==";
+      };
+    };
+    "magic-string-0.30.3" = {
+      name = "magic-string";
+      packageName = "magic-string";
+      version = "0.30.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/magic-string/-/magic-string-0.30.3.tgz";
+        sha512 = "B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw==";
+      };
+    };
+    "mailparser-3.6.5" = {
+      name = "mailparser";
+      packageName = "mailparser";
+      version = "3.6.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mailparser/-/mailparser-3.6.5.tgz";
+        sha512 = "nteTpF0Khm5JLOnt4sigmzNdUH/6mO7PZ4KEnvxf4mckyXYFFhrtAWZzbq/V5aQMH+049gA7ZjfLdh+QiX2Uqg==";
+      };
+    };
+    "mailsplit-5.4.0" = {
+      name = "mailsplit";
+      packageName = "mailsplit";
+      version = "5.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mailsplit/-/mailsplit-5.4.0.tgz";
+        sha512 = "wnYxX5D5qymGIPYLwnp6h8n1+6P6vz/MJn5AzGjZ8pwICWssL+CCQjWBIToOVHASmATot4ktvlLo6CyLfOXWYA==";
+      };
+    };
+    "make-dir-3.1.0" = {
+      name = "make-dir";
+      packageName = "make-dir";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz";
+        sha512 = "g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==";
+      };
+    };
+    "make-error-1.3.6" = {
+      name = "make-error";
+      packageName = "make-error";
+      version = "1.3.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz";
+        sha512 = "s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==";
+      };
+    };
+    "make-fetch-happen-9.1.0" = {
+      name = "make-fetch-happen";
+      packageName = "make-fetch-happen";
+      version = "9.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz";
+        sha512 = "+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==";
+      };
+    };
+    "mappersmith-2.42.0" = {
+      name = "mappersmith";
+      packageName = "mappersmith";
+      version = "2.42.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mappersmith/-/mappersmith-2.42.0.tgz";
+        sha512 = "1QCZ1FKu+3GqgPkCotTkhnDEyFCU+ZPJnIx7X20L9d2JL6OfBDL9VVc5kyGGlroxZZ6IwYZrmSke+14HpSVC1g==";
+      };
+    };
+    "markdown-it-12.3.2" = {
+      name = "markdown-it";
+      packageName = "markdown-it";
+      version = "12.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz";
+        sha512 = "TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==";
+      };
+    };
+    "markdown-it-13.0.1" = {
+      name = "markdown-it";
+      packageName = "markdown-it";
+      version = "13.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.1.tgz";
+        sha512 = "lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==";
+      };
+    };
+    "markdown-it-emoji-2.0.2" = {
+      name = "markdown-it-emoji";
+      packageName = "markdown-it-emoji";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/markdown-it-emoji/-/markdown-it-emoji-2.0.2.tgz";
+        sha512 = "zLftSaNrKuYl0kR5zm4gxXjHaOI3FAOEaloKmRA5hijmJZvSjmxcokOLlzycb/HXlUFWzXqpIEoyEMCE4i9MvQ==";
+      };
+    };
+    "markdown-it-link-attributes-4.0.1" = {
+      name = "markdown-it-link-attributes";
+      packageName = "markdown-it-link-attributes";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/markdown-it-link-attributes/-/markdown-it-link-attributes-4.0.1.tgz";
+        sha512 = "pg5OK0jPLg62H4k7M9mRJLT61gUp9nvG0XveKYHMOOluASo9OEF13WlXrpAp2aj35LbedAy3QOCgQCw0tkLKAQ==";
+      };
+    };
+    "markdown-it-task-lists-2.1.1" = {
+      name = "markdown-it-task-lists";
+      packageName = "markdown-it-task-lists";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/markdown-it-task-lists/-/markdown-it-task-lists-2.1.1.tgz";
+        sha512 = "TxFAc76Jnhb2OUu+n3yz9RMu4CwGfaT788br6HhEDlvWfdeJcLUsxk1Hgw2yJio0OXsxv7pyIPmvECY7bMbluA==";
+      };
+    };
+    "md5-2.3.0" = {
+      name = "md5";
+      packageName = "md5";
+      version = "2.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz";
+        sha512 = "T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==";
+      };
+    };
+    "mdurl-1.0.1" = {
+      name = "mdurl";
+      packageName = "mdurl";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz";
+        sha512 = "/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==";
+      };
+    };
+    "media-typer-0.3.0" = {
+      name = "media-typer";
+      packageName = "media-typer";
+      version = "0.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz";
+        sha512 = "dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==";
+      };
+    };
+    "media-typer-1.1.0" = {
+      name = "media-typer";
+      packageName = "media-typer";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz";
+        sha512 = "aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==";
+      };
+    };
+    "memoize-one-6.0.0" = {
+      name = "memoize-one";
+      packageName = "memoize-one";
+      version = "6.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz";
+        sha512 = "rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==";
+      };
+    };
+    "merge-descriptors-1.0.1" = {
+      name = "merge-descriptors";
+      packageName = "merge-descriptors";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz";
+        sha512 = "cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==";
+      };
+    };
+    "merge-stream-2.0.0" = {
+      name = "merge-stream";
+      packageName = "merge-stream";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz";
+        sha512 = "abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==";
+      };
+    };
+    "merge2-1.4.1" = {
+      name = "merge2";
+      packageName = "merge2";
+      version = "1.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz";
+        sha512 = "8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==";
+      };
+    };
+    "methods-1.1.2" = {
+      name = "methods";
+      packageName = "methods";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz";
+        sha512 = "iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==";
+      };
+    };
+    "micromatch-4.0.5" = {
+      name = "micromatch";
+      packageName = "micromatch";
+      version = "4.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz";
+        sha512 = "DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==";
+      };
+    };
+    "mime-1.6.0" = {
+      name = "mime";
+      packageName = "mime";
+      version = "1.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz";
+        sha512 = "x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==";
+      };
+    };
+    "mime-2.6.0" = {
+      name = "mime";
+      packageName = "mime";
+      version = "2.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz";
+        sha512 = "USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==";
+      };
+    };
+    "mime-3.0.0" = {
+      name = "mime";
+      packageName = "mime";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz";
+        sha512 = "jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==";
+      };
+    };
+    "mime-db-1.52.0" = {
+      name = "mime-db";
+      packageName = "mime-db";
+      version = "1.52.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz";
+        sha512 = "sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==";
+      };
+    };
+    "mime-types-2.1.35" = {
+      name = "mime-types";
+      packageName = "mime-types";
+      version = "2.1.35";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz";
+        sha512 = "ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==";
+      };
+    };
+    "mimic-fn-2.1.0" = {
+      name = "mimic-fn";
+      packageName = "mimic-fn";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz";
+        sha512 = "OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==";
+      };
+    };
+    "mimic-response-3.1.0" = {
+      name = "mimic-response";
+      packageName = "mimic-response";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz";
+        sha512 = "z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==";
+      };
+    };
+    "minifaker-1.34.1" = {
+      name = "minifaker";
+      packageName = "minifaker";
+      version = "1.34.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minifaker/-/minifaker-1.34.1.tgz";
+        sha512 = "O9+c6GaUETgtKe65bJkpDTJxGcAALiUPqJtDv97dT3o0uP2HmyUVEguEGm6PLKuoSzZUmHqSTZ4cS7m8xKFEAg==";
+      };
+    };
+    "minimalistic-assert-1.0.1" = {
+      name = "minimalistic-assert";
+      packageName = "minimalistic-assert";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz";
+        sha512 = "UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==";
+      };
+    };
+    "minimatch-3.1.2" = {
+      name = "minimatch";
+      packageName = "minimatch";
+      version = "3.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz";
+        sha512 = "J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==";
+      };
+    };
+    "minimatch-5.1.6" = {
+      name = "minimatch";
+      packageName = "minimatch";
+      version = "5.1.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz";
+        sha512 = "lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==";
+      };
+    };
+    "minimatch-9.0.3" = {
+      name = "minimatch";
+      packageName = "minimatch";
+      version = "9.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz";
+        sha512 = "RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==";
+      };
+    };
+    "minimist-1.2.8" = {
+      name = "minimist";
+      packageName = "minimist";
+      version = "1.2.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz";
+        sha512 = "2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==";
+      };
+    };
+    "minipass-3.3.6" = {
+      name = "minipass";
+      packageName = "minipass";
+      version = "3.3.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz";
+        sha512 = "DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==";
+      };
+    };
+    "minipass-5.0.0" = {
+      name = "minipass";
+      packageName = "minipass";
+      version = "5.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz";
+        sha512 = "3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==";
+      };
+    };
+    "minipass-7.0.3" = {
+      name = "minipass";
+      packageName = "minipass";
+      version = "7.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz";
+        sha512 = "LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==";
+      };
+    };
+    "minipass-collect-1.0.2" = {
+      name = "minipass-collect";
+      packageName = "minipass-collect";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz";
+        sha512 = "6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==";
+      };
+    };
+    "minipass-fetch-1.4.1" = {
+      name = "minipass-fetch";
+      packageName = "minipass-fetch";
+      version = "1.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz";
+        sha512 = "CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==";
+      };
+    };
+    "minipass-flush-1.0.5" = {
+      name = "minipass-flush";
+      packageName = "minipass-flush";
+      version = "1.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz";
+        sha512 = "JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==";
+      };
+    };
+    "minipass-pipeline-1.2.4" = {
+      name = "minipass-pipeline";
+      packageName = "minipass-pipeline";
+      version = "1.2.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz";
+        sha512 = "xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==";
+      };
+    };
+    "minipass-sized-1.0.3" = {
+      name = "minipass-sized";
+      packageName = "minipass-sized";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz";
+        sha512 = "MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==";
+      };
+    };
+    "minizlib-2.1.2" = {
+      name = "minizlib";
+      packageName = "minizlib";
+      version = "2.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz";
+        sha512 = "bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==";
+      };
+    };
+    "mkdirp-0.5.6" = {
+      name = "mkdirp";
+      packageName = "mkdirp";
+      version = "0.5.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz";
+        sha512 = "FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==";
+      };
+    };
+    "mkdirp-1.0.4" = {
+      name = "mkdirp";
+      packageName = "mkdirp";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz";
+        sha512 = "vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==";
+      };
+    };
+    "mkdirp-2.1.6" = {
+      name = "mkdirp";
+      packageName = "mkdirp";
+      version = "2.1.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.6.tgz";
+        sha512 = "+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==";
+      };
+    };
+    "mkdirp-classic-0.5.3" = {
+      name = "mkdirp-classic";
+      packageName = "mkdirp-classic";
+      version = "0.5.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz";
+        sha512 = "gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==";
+      };
+    };
+    "moment-2.29.4" = {
+      name = "moment";
+      packageName = "moment";
+      version = "2.29.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz";
+        sha512 = "5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==";
+      };
+    };
+    "moment-timezone-0.5.43" = {
+      name = "moment-timezone";
+      packageName = "moment-timezone";
+      version = "0.5.43";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.43.tgz";
+        sha512 = "72j3aNyuIsDxdF1i7CEgV2FfxM1r6aaqJyLB2vwb33mXYyoyLly+F1zbWqhA3/bVIoJ4szlUoMbUnVdid32NUQ==";
+      };
+    };
+    "mongodb-4.17.1" = {
+      name = "mongodb";
+      packageName = "mongodb";
+      version = "4.17.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mongodb/-/mongodb-4.17.1.tgz";
+        sha512 = "MBuyYiPUPRTqfH2dV0ya4dcr2E5N52ocBuZ8Sgg/M030nGF78v855B3Z27mZJnp8PxjnUquEnAtjOsphgMZOlQ==";
+      };
+    };
+    "mongodb-5.8.1" = {
+      name = "mongodb";
+      packageName = "mongodb";
+      version = "5.8.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mongodb/-/mongodb-5.8.1.tgz";
+        sha512 = "wKyh4kZvm6NrCPH8AxyzXm3JBoEf4Xulo0aUWh3hCgwgYJxyQ1KLST86ZZaSWdj6/kxYUA3+YZuyADCE61CMSg==";
+      };
+    };
+    "mongodb-client-encryption-2.9.0" = {
+      name = "mongodb-client-encryption";
+      packageName = "mongodb-client-encryption";
+      version = "2.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mongodb-client-encryption/-/mongodb-client-encryption-2.9.0.tgz";
+        sha512 = "OGMfTnS+JJ49ksWdExQ5048ynaQJLhPjbOi3i44PbU2sdufKH0Z4YZqn1pvd/eQ4WgLfbmSws3u9kAiFNFxpOg==";
+      };
+    };
+    "mongodb-connection-string-url-2.6.0" = {
+      name = "mongodb-connection-string-url";
+      packageName = "mongodb-connection-string-url";
+      version = "2.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz";
+        sha512 = "WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==";
+      };
+    };
+    "mqtt-4.3.7" = {
+      name = "mqtt";
+      packageName = "mqtt";
+      version = "4.3.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mqtt/-/mqtt-4.3.7.tgz";
+        sha512 = "ew3qwG/TJRorTz47eW46vZ5oBw5MEYbQZVaEji44j5lAUSQSqIEoul7Kua/BatBW0H0kKQcC9kwUHa1qzaWHSw==";
+      };
+    };
+    "mqtt-5.0.5" = {
+      name = "mqtt";
+      packageName = "mqtt";
+      version = "5.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mqtt/-/mqtt-5.0.5.tgz";
+        sha512 = "Ahbzk7nddvYg0aOezbYl/d9o8wcEbZw1NjiH+CmGObxiHsG4HgL7+IaRkph5yxwH679GVMAwtfsyUY2dFBSVSw==";
+      };
+    };
+    "mqtt-packet-6.10.0" = {
+      name = "mqtt-packet";
+      packageName = "mqtt-packet";
+      version = "6.10.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mqtt-packet/-/mqtt-packet-6.10.0.tgz";
+        sha512 = "ja8+mFKIHdB1Tpl6vac+sktqy3gA8t9Mduom1BA75cI+R9AHnZOiaBQwpGiWnaVJLDGRdNhQmFaAqd7tkKSMGA==";
+      };
+    };
+    "mqtt-packet-8.2.0" = {
+      name = "mqtt-packet";
+      packageName = "mqtt-packet";
+      version = "8.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mqtt-packet/-/mqtt-packet-8.2.0.tgz";
+        sha512 = "21Vo7XdRXUw2qhdTfk8GeOl2jtb8Dkwd4dKxn/epvf37mxTxHodvBJoozTPZGVwh57JXlsh2ChsaxMsAfqxp+A==";
+      };
+    };
+    "ms-2.0.0" = {
+      name = "ms";
+      packageName = "ms";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz";
+        sha512 = "Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==";
+      };
+    };
+    "ms-2.1.2" = {
+      name = "ms";
+      packageName = "ms";
+      version = "2.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz";
+        sha512 = "sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==";
+      };
+    };
+    "ms-2.1.3" = {
+      name = "ms";
+      packageName = "ms";
+      version = "2.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz";
+        sha512 = "6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==";
+      };
+    };
+    "msgpackr-1.9.9" = {
+      name = "msgpackr";
+      packageName = "msgpackr";
+      version = "1.9.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/msgpackr/-/msgpackr-1.9.9.tgz";
+        sha512 = "sbn6mioS2w0lq1O6PpGtsv6Gy8roWM+o3o4Sqjd6DudrL/nOugY+KyJUimoWzHnf9OkO0T6broHFnYE/R05t9A==";
+      };
+    };
+    "mssql-8.1.4" = {
+      name = "mssql";
+      packageName = "mssql";
+      version = "8.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mssql/-/mssql-8.1.4.tgz";
+        sha512 = "nqkYYehETWVvFLB9zAGJV2kegOsdtLjUnkHA52aFhlE0ZIoOXC3BL8pLERwFicFypM4i3DX1hYeuM726EEIxjQ==";
+      };
+    };
+    "mssql-9.3.2" = {
+      name = "mssql";
+      packageName = "mssql";
+      version = "9.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mssql/-/mssql-9.3.2.tgz";
+        sha512 = "XI5GOGCCSSNL8K2SSXg9HMyugJoCjLmrhiZfcZrJrJ2r3NfTcnz3Cegeg4m+xPkNVd0o3owsSL/NsDCFYfjOlw==";
+      };
+    };
+    "multer-1.4.5-lts.1" = {
+      name = "multer";
+      packageName = "multer";
+      version = "1.4.5-lts.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/multer/-/multer-1.4.5-lts.1.tgz";
+        sha512 = "ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==";
+      };
+    };
+    "mute-stream-0.0.8" = {
+      name = "mute-stream";
+      packageName = "mute-stream";
+      version = "0.0.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz";
+        sha512 = "nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==";
+      };
+    };
+    "mysql2-2.3.3" = {
+      name = "mysql2";
+      packageName = "mysql2";
+      version = "2.3.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mysql2/-/mysql2-2.3.3.tgz";
+        sha512 = "wxJUev6LgMSgACDkb/InIFxDprRa6T95+VEoR+xPvtngtccNH2dGjEB/fVZ8yg1gWv1510c9CvXuJHi5zUm0ZA==";
+      };
+    };
+    "mz-2.7.0" = {
+      name = "mz";
+      packageName = "mz";
+      version = "2.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz";
+        sha512 = "z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==";
+      };
+    };
+    "n8n-core-1.5.0" = {
+      name = "n8n-core";
+      packageName = "n8n-core";
+      version = "1.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/n8n-core/-/n8n-core-1.5.0.tgz";
+        sha512 = "1OLb/C0QOuaHgXYAn2SO+t9pkRSbYdeAdB7ienu8foz8ptHygAieACoaAVrI4VLeGBTWbVKcVA9kISEsVk6/3g==";
+      };
+    };
+    "n8n-design-system-1.5.0" = {
+      name = "n8n-design-system";
+      packageName = "n8n-design-system";
+      version = "1.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/n8n-design-system/-/n8n-design-system-1.5.0.tgz";
+        sha512 = "Hx4uDVkpBSo+bpNNS/WiGb6o2D9lUcWGPddJLbbUEBFwf2gJPYz7HYf2X7oycJBwxdlGClf6EQNdI6Wlo2rT5w==";
+      };
+    };
+    "n8n-editor-ui-1.5.0" = {
+      name = "n8n-editor-ui";
+      packageName = "n8n-editor-ui";
+      version = "1.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/n8n-editor-ui/-/n8n-editor-ui-1.5.0.tgz";
+        sha512 = "/qEKz0/ZY/cDFmIubhJxVE/UMuSfJSWxapbLtjA8ODNtQgVR1KQ3PM9noFoBDodoXT0RfFq/uVY5V9tRpxkNaA==";
+      };
+    };
+    "n8n-nodes-base-1.5.1" = {
+      name = "n8n-nodes-base";
+      packageName = "n8n-nodes-base";
+      version = "1.5.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/n8n-nodes-base/-/n8n-nodes-base-1.5.1.tgz";
+        sha512 = "eCN9p4i5KWDO2fNOQ00QE093z92GDwAtSfgmRe9JkMf5L9VkeEr7TVOrRV+jqd/tBeG8fLsaauTkcRiB3kGnEA==";
+      };
+    };
+    "n8n-workflow-1.5.0" = {
+      name = "n8n-workflow";
+      packageName = "n8n-workflow";
+      version = "1.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/n8n-workflow/-/n8n-workflow-1.5.0.tgz";
+        sha512 = "bUf3dPpo+tGKl5TaxIOtr6IrW2TW7gNJSBO5cZ55SqJnbK3r15u5JyDlCHMDmL3iZS6znOVfggHfzAg29IB3Ww==";
+      };
+    };
+    "named-placeholders-1.1.3" = {
+      name = "named-placeholders";
+      packageName = "named-placeholders";
+      version = "1.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.3.tgz";
+        sha512 = "eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==";
+      };
+    };
+    "nan-2.17.0" = {
+      name = "nan";
+      packageName = "nan";
+      version = "2.17.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz";
+        sha512 = "2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==";
+      };
+    };
+    "nanoclone-0.2.1" = {
+      name = "nanoclone";
+      packageName = "nanoclone";
+      version = "0.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/nanoclone/-/nanoclone-0.2.1.tgz";
+        sha512 = "wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA==";
+      };
+    };
+    "nanoid-3.3.6" = {
+      name = "nanoid";
+      packageName = "nanoid";
+      version = "3.3.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz";
+        sha512 = "BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==";
+      };
+    };
+    "napi-build-utils-1.0.2" = {
+      name = "napi-build-utils";
+      packageName = "napi-build-utils";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz";
+        sha512 = "ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==";
+      };
+    };
+    "native-duplexpair-1.0.0" = {
+      name = "native-duplexpair";
+      packageName = "native-duplexpair";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/native-duplexpair/-/native-duplexpair-1.0.0.tgz";
+        sha512 = "E7QQoM+3jvNtlmyfqRZ0/U75VFgCls+fSkbml2MpgWkWyz3ox8Y58gNhfuziuQYGNNQAbFZJQck55LHCnCK6CA==";
+      };
+    };
+    "natural-orderby-2.0.3" = {
+      name = "natural-orderby";
+      packageName = "natural-orderby";
+      version = "2.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/natural-orderby/-/natural-orderby-2.0.3.tgz";
+        sha512 = "p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q==";
+      };
+    };
+    "negotiator-0.6.3" = {
+      name = "negotiator";
+      packageName = "negotiator";
+      version = "0.6.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz";
+        sha512 = "+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==";
+      };
+    };
+    "neo-async-2.6.2" = {
+      name = "neo-async";
+      packageName = "neo-async";
+      version = "2.6.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz";
+        sha512 = "Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==";
+      };
+    };
+    "netmask-2.0.2" = {
+      name = "netmask";
+      packageName = "netmask";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz";
+        sha512 = "dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==";
+      };
+    };
+    "no-case-3.0.4" = {
+      name = "no-case";
+      packageName = "no-case";
+      version = "3.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz";
+        sha512 = "fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==";
+      };
+    };
+    "node-abi-3.47.0" = {
+      name = "node-abi";
+      packageName = "node-abi";
+      version = "3.47.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/node-abi/-/node-abi-3.47.0.tgz";
+        sha512 = "2s6B2CWZM//kPgwnuI0KrYwNjfdByE25zvAaEpq9IH4zcNsarH8Ihu/UuX6XMPEogDAxkuUFeZn60pXNHAqn3A==";
+      };
+    };
+    "node-abort-controller-3.1.1" = {
+      name = "node-abort-controller";
+      packageName = "node-abort-controller";
+      version = "3.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz";
+        sha512 = "AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==";
+      };
+    };
+    "node-addon-api-4.3.0" = {
+      name = "node-addon-api";
+      packageName = "node-addon-api";
+      version = "4.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz";
+        sha512 = "73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==";
+      };
+    };
+    "node-addon-api-6.1.0" = {
+      name = "node-addon-api";
+      packageName = "node-addon-api";
+      version = "6.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz";
+        sha512 = "+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==";
+      };
+    };
+    "node-fetch-2.7.0" = {
+      name = "node-fetch";
+      packageName = "node-fetch";
+      version = "2.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz";
+        sha512 = "c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==";
+      };
+    };
+    "node-forge-1.3.1" = {
+      name = "node-forge";
+      packageName = "node-forge";
+      version = "1.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz";
+        sha512 = "dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==";
+      };
+    };
+    "node-gyp-8.4.1" = {
+      name = "node-gyp";
+      packageName = "node-gyp";
+      version = "8.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz";
+        sha512 = "olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==";
+      };
+    };
+    "node-gyp-build-4.6.1" = {
+      name = "node-gyp-build";
+      packageName = "node-gyp-build";
+      version = "4.6.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.1.tgz";
+        sha512 = "24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==";
+      };
+    };
+    "node-html-markdown-1.3.0" = {
+      name = "node-html-markdown";
+      packageName = "node-html-markdown";
+      version = "1.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/node-html-markdown/-/node-html-markdown-1.3.0.tgz";
+        sha512 = "OeFi3QwC/cPjvVKZ114tzzu+YoR+v9UXW5RwSXGUqGb0qCl0DvP406tzdL7SFn8pZrMyzXoisfG2zcuF9+zw4g==";
+      };
+    };
+    "node-html-parser-6.1.9" = {
+      name = "node-html-parser";
+      packageName = "node-html-parser";
+      version = "6.1.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/node-html-parser/-/node-html-parser-6.1.9.tgz";
+        sha512 = "nQ+MRf0PmRTLcMalVqMsWvceSaBydBCBlnQSL78HVk/E8e0Aazyao4SI9aB67XAAgOgHMsw7q5dJBUPPt9XE3g==";
+      };
+    };
+    "node-machine-id-1.1.12" = {
+      name = "node-machine-id";
+      packageName = "node-machine-id";
+      version = "1.1.12";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/node-machine-id/-/node-machine-id-1.1.12.tgz";
+        sha512 = "QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==";
+      };
+    };
+    "node-releases-2.0.13" = {
+      name = "node-releases";
+      packageName = "node-releases";
+      version = "2.0.13";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz";
+        sha512 = "uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==";
+      };
+    };
+    "node-rsa-1.1.1" = {
+      name = "node-rsa";
+      packageName = "node-rsa";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/node-rsa/-/node-rsa-1.1.1.tgz";
+        sha512 = "Jd4cvbJMryN21r5HgxQOpMEqv+ooke/korixNNK3mGqfGJmy0M77WDDzo/05969+OkMy3XW1UuZsSmW9KQm7Fw==";
+      };
+    };
+    "node-ssh-12.0.5" = {
+      name = "node-ssh";
+      packageName = "node-ssh";
+      version = "12.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/node-ssh/-/node-ssh-12.0.5.tgz";
+        sha512 = "uN2GTGdBRUUKkZmcNBr9OM+xKL6zq74emnkSyb1TshBdVWegj3boue6QallQeqZzo7YGVheP5gAovUL+8hZSig==";
+      };
+    };
+    "nodeify-1.0.1" = {
+      name = "nodeify";
+      packageName = "nodeify";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/nodeify/-/nodeify-1.0.1.tgz";
+        sha512 = "n7C2NyEze8GCo/z73KdbjRsBiLbv6eBn1FxwYKQ23IqGo7pQY3mhQan61Sv7eEDJCiyUjTVrVkXTzJCo1dW7Aw==";
+      };
+    };
+    "nodemailer-6.9.3" = {
+      name = "nodemailer";
+      packageName = "nodemailer";
+      version = "6.9.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.3.tgz";
+        sha512 = "fy9v3NgTzBngrMFkDsKEj0r02U7jm6XfC3b52eoNV+GCrGj+s8pt5OqhiJdWKuw51zCTdiNR/IUD1z33LIIGpg==";
+      };
+    };
+    "nodemailer-6.9.5" = {
+      name = "nodemailer";
+      packageName = "nodemailer";
+      version = "6.9.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.5.tgz";
+        sha512 = "/dmdWo62XjumuLc5+AYQZeiRj+PRR8y8qKtFCOyuOl1k/hckZd8durUUHs/ucKx6/8kN+wFxqKJlQ/LK/qR5FA==";
+      };
+    };
+    "nopt-5.0.0" = {
+      name = "nopt";
+      packageName = "nopt";
+      version = "5.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz";
+        sha512 = "Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==";
+      };
+    };
+    "normalize-path-3.0.0" = {
+      name = "normalize-path";
+      packageName = "normalize-path";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz";
+        sha512 = "6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==";
+      };
+    };
+    "normalize-wheel-1.0.1" = {
+      name = "normalize-wheel";
+      packageName = "normalize-wheel";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/normalize-wheel/-/normalize-wheel-1.0.1.tgz";
+        sha512 = "1OnlAPZ3zgrk8B91HyRj+eVv+kS5u+Z0SCsak6Xil/kmgEia50ga7zfkumayonZrImffAxPU/5WcyGhzetHNPA==";
+      };
+    };
+    "normalize-wheel-es-1.2.0" = {
+      name = "normalize-wheel-es";
+      packageName = "normalize-wheel-es";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz";
+        sha512 = "Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==";
+      };
+    };
+    "npmlog-5.0.1" = {
+      name = "npmlog";
+      packageName = "npmlog";
+      version = "5.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz";
+        sha512 = "AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==";
+      };
+    };
+    "npmlog-6.0.2" = {
+      name = "npmlog";
+      packageName = "npmlog";
+      version = "6.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz";
+        sha512 = "/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==";
+      };
+    };
+    "nth-check-2.1.1" = {
+      name = "nth-check";
+      packageName = "nth-check";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz";
+        sha512 = "lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==";
+      };
+    };
+    "nub-0.0.0" = {
+      name = "nub";
+      packageName = "nub";
+      version = "0.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/nub/-/nub-0.0.0.tgz";
+        sha512 = "dK0Ss9C34R/vV0FfYJXuqDAqHlaW9fvWVufq9MmGF2umCuDbd5GRfRD9fpi/LiM0l4ZXf8IBB+RYmZExqCrf0w==";
+      };
+    };
+    "number-allocator-1.0.14" = {
+      name = "number-allocator";
+      packageName = "number-allocator";
+      version = "1.0.14";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/number-allocator/-/number-allocator-1.0.14.tgz";
+        sha512 = "OrL44UTVAvkKdOdRQZIJpLkAdjXGTRda052sN4sO77bKEzYYqWKMBjQvrJFzqygI99gL6Z4u2xctPW1tB8ErvA==";
+      };
+    };
+    "nunjucks-3.2.4" = {
+      name = "nunjucks";
+      packageName = "nunjucks";
+      version = "3.2.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/nunjucks/-/nunjucks-3.2.4.tgz";
+        sha512 = "26XRV6BhkgK0VOxfbU5cQI+ICFUtMLixv1noZn1tGU38kQH5A5nmmbk/O45xdyBhD1esk47nKrY0mvQpZIhRjQ==";
+      };
+    };
+    "oauth-1.0a-2.2.6" = {
+      name = "oauth-1.0a";
+      packageName = "oauth-1.0a";
+      version = "2.2.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/oauth-1.0a/-/oauth-1.0a-2.2.6.tgz";
+        sha512 = "6bkxv3N4Gu5lty4viIcIAnq5GbxECviMBeKR3WX/q87SPQ8E8aursPZUtsXDnxCs787af09WPRBLqYrf/lwoYQ==";
+      };
+    };
+    "object-assign-4.1.1" = {
+      name = "object-assign";
+      packageName = "object-assign";
+      version = "4.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz";
+        sha512 = "rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==";
+      };
+    };
+    "object-hash-3.0.0" = {
+      name = "object-hash";
+      packageName = "object-hash";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz";
+        sha512 = "RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==";
+      };
+    };
+    "object-inspect-1.12.3" = {
+      name = "object-inspect";
+      packageName = "object-inspect";
+      version = "1.12.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz";
+        sha512 = "geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==";
+      };
+    };
+    "object-is-1.1.5" = {
+      name = "object-is";
+      packageName = "object-is";
+      version = "1.1.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz";
+        sha512 = "3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==";
+      };
+    };
+    "object-keys-1.1.1" = {
+      name = "object-keys";
+      packageName = "object-keys";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz";
+        sha512 = "NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==";
+      };
+    };
+    "object-treeify-1.1.33" = {
+      name = "object-treeify";
+      packageName = "object-treeify";
+      version = "1.1.33";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object-treeify/-/object-treeify-1.1.33.tgz";
+        sha512 = "EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==";
+      };
+    };
+    "object.assign-4.1.4" = {
+      name = "object.assign";
+      packageName = "object.assign";
+      version = "4.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz";
+        sha512 = "1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==";
+      };
+    };
+    "object.getownpropertydescriptors-2.1.7" = {
+      name = "object.getownpropertydescriptors";
+      packageName = "object.getownpropertydescriptors";
+      version = "2.1.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.7.tgz";
+        sha512 = "PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g==";
+      };
+    };
+    "on-finished-2.4.1" = {
+      name = "on-finished";
+      packageName = "on-finished";
+      version = "2.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz";
+        sha512 = "oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==";
+      };
+    };
+    "on-headers-1.0.2" = {
+      name = "on-headers";
+      packageName = "on-headers";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz";
+        sha512 = "pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==";
+      };
+    };
+    "once-1.4.0" = {
+      name = "once";
+      packageName = "once";
+      version = "1.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/once/-/once-1.4.0.tgz";
+        sha512 = "lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==";
+      };
+    };
+    "one-time-1.0.0" = {
+      name = "one-time";
+      packageName = "one-time";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz";
+        sha512 = "5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==";
+      };
+    };
+    "onetime-5.1.2" = {
+      name = "onetime";
+      packageName = "onetime";
+      version = "5.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz";
+        sha512 = "kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==";
+      };
+    };
+    "ono-7.1.3" = {
+      name = "ono";
+      packageName = "ono";
+      version = "7.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ono/-/ono-7.1.3.tgz";
+        sha512 = "9jnfVriq7uJM4o5ganUY54ntUm+5EK21EGaQ5NWnkWg3zz5ywbbonlBguRcnmF1/HDiIe3zxNxXcO1YPBmPcQQ==";
+      };
+    };
+    "open-7.4.2" = {
+      name = "open";
+      packageName = "open";
+      version = "7.4.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/open/-/open-7.4.2.tgz";
+        sha512 = "MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==";
+      };
+    };
+    "open-8.4.2" = {
+      name = "open";
+      packageName = "open";
+      version = "8.4.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/open/-/open-8.4.2.tgz";
+        sha512 = "7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==";
+      };
+    };
+    "openapi-types-10.0.0" = {
+      name = "openapi-types";
+      packageName = "openapi-types";
+      version = "10.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/openapi-types/-/openapi-types-10.0.0.tgz";
+        sha512 = "Y8xOCT2eiKGYDzMW9R4x5cmfc3vGaaI4EL2pwhDmodWw1HlK18YcZ4uJxc7Rdp7/gGzAygzH9SXr6GKYIXbRcQ==";
+      };
+    };
+    "openurl-1.1.1" = {
+      name = "openurl";
+      packageName = "openurl";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz";
+        sha512 = "d/gTkTb1i1GKz5k3XE3XFV/PxQ1k45zDqGP2OA7YhgsaLoqm6qRvARAZOFer1fcXritWlGBRCu/UgeS4HAnXAA==";
+      };
+    };
+    "optionator-0.8.3" = {
+      name = "optionator";
+      packageName = "optionator";
+      version = "0.8.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz";
+        sha512 = "+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==";
+      };
+    };
+    "oracledb-5.5.0" = {
+      name = "oracledb";
+      packageName = "oracledb";
+      version = "5.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/oracledb/-/oracledb-5.5.0.tgz";
+        sha512 = "i5cPvMENpZP8nnqptB6l0pjiOyySj1IISkbM4Hr3yZEDdANo2eezarwZb9NQ8fTh5pRjmgpZdSyIbnn9N3AENw==";
+      };
+    };
+    "os-name-1.0.3" = {
+      name = "os-name";
+      packageName = "os-name";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/os-name/-/os-name-1.0.3.tgz";
+        sha512 = "f5estLO2KN8vgtTRaILIgEGBoBrMnZ3JQ7W9TMZCnOIGwHe8TRGSpcagnWDo+Dfhd/z08k9Xe75hvciJJ8Qaew==";
+      };
+    };
+    "os-tmpdir-1.0.2" = {
+      name = "os-tmpdir";
+      packageName = "os-tmpdir";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz";
+        sha512 = "D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==";
+      };
+    };
+    "osx-release-1.1.0" = {
+      name = "osx-release";
+      packageName = "osx-release";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/osx-release/-/osx-release-1.1.0.tgz";
+        sha512 = "ixCMMwnVxyHFQLQnINhmIpWqXIfS2YOXchwQrk+OFzmo6nDjQ0E4KXAyyUh0T0MZgV4bUhkRrAbVqlE4yLVq4A==";
+      };
+    };
+    "otpauth-9.1.4" = {
+      name = "otpauth";
+      packageName = "otpauth";
+      version = "9.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/otpauth/-/otpauth-9.1.4.tgz";
+        sha512 = "T6T0E1WlzwKWESq8K0Ja47u01XjmDmRY/AiUoMAc6xZI/OsTsD4cqBrfpt2WfJ29W5pRiWkuUuyHdNQl0/Ic+Q==";
+      };
+    };
+    "p-cancelable-2.1.1" = {
+      name = "p-cancelable";
+      packageName = "p-cancelable";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz";
+        sha512 = "BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==";
+      };
+    };
+    "p-finally-1.0.0" = {
+      name = "p-finally";
+      packageName = "p-finally";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz";
+        sha512 = "LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==";
+      };
+    };
+    "p-lazy-3.1.0" = {
+      name = "p-lazy";
+      packageName = "p-lazy";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/p-lazy/-/p-lazy-3.1.0.tgz";
+        sha512 = "sCJn0Cdahs6G6SX9+DUihVFUhrzDEduzE5xeViVBGtoqy5dBWko7W8T6Kk6TjR2uevRXJO7CShfWrqdH5s3w3g==";
+      };
+    };
+    "p-limit-3.1.0" = {
+      name = "p-limit";
+      packageName = "p-limit";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz";
+        sha512 = "TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==";
+      };
+    };
+    "p-map-2.1.0" = {
+      name = "p-map";
+      packageName = "p-map";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz";
+        sha512 = "y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==";
+      };
+    };
+    "p-map-4.0.0" = {
+      name = "p-map";
+      packageName = "p-map";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz";
+        sha512 = "/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==";
+      };
+    };
+    "p-queue-6.6.2" = {
+      name = "p-queue";
+      packageName = "p-queue";
+      version = "6.6.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz";
+        sha512 = "RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==";
+      };
+    };
+    "p-timeout-3.2.0" = {
+      name = "p-timeout";
+      packageName = "p-timeout";
+      version = "3.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz";
+        sha512 = "rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==";
+      };
+    };
+    "pac-proxy-agent-5.0.0" = {
+      name = "pac-proxy-agent";
+      packageName = "pac-proxy-agent";
+      version = "5.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-5.0.0.tgz";
+        sha512 = "CcFG3ZtnxO8McDigozwE3AqAw15zDvGH+OjXO4kzf7IkEKkQ4gxQ+3sdF50WmhQ4P/bVusXcqNE2S3XrNURwzQ==";
+      };
+    };
+    "pac-resolver-5.0.1" = {
+      name = "pac-resolver";
+      packageName = "pac-resolver";
+      version = "5.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pac-resolver/-/pac-resolver-5.0.1.tgz";
+        sha512 = "cy7u00ko2KVgBAjuhevqpPeHIkCIqPe1v24cydhWjmeuzaBfmUWFCZJ1iAh5TuVzVZoUzXIW7K8sMYOZ84uZ9Q==";
+      };
+    };
+    "packet-reader-1.0.0" = {
+      name = "packet-reader";
+      packageName = "packet-reader";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz";
+        sha512 = "HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==";
+      };
+    };
+    "pako-1.0.11" = {
+      name = "pako";
+      packageName = "pako";
+      version = "1.0.11";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz";
+        sha512 = "4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==";
+      };
+    };
+    "param-case-3.0.4" = {
+      name = "param-case";
+      packageName = "param-case";
+      version = "3.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz";
+        sha512 = "RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==";
+      };
+    };
+    "parse-github-url-1.0.2" = {
+      name = "parse-github-url";
+      packageName = "parse-github-url";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/parse-github-url/-/parse-github-url-1.0.2.tgz";
+        sha512 = "kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw==";
+      };
+    };
+    "parse-passwd-1.0.0" = {
+      name = "parse-passwd";
+      packageName = "parse-passwd";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz";
+        sha512 = "1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==";
+      };
+    };
+    "parse-srcset-1.0.2" = {
+      name = "parse-srcset";
+      packageName = "parse-srcset";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz";
+        sha512 = "/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==";
+      };
+    };
+    "parse5-5.1.1" = {
+      name = "parse5";
+      packageName = "parse5";
+      version = "5.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz";
+        sha512 = "ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==";
+      };
+    };
+    "parse5-6.0.1" = {
+      name = "parse5";
+      packageName = "parse5";
+      version = "6.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz";
+        sha512 = "Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==";
+      };
+    };
+    "parse5-htmlparser2-tree-adapter-6.0.1" = {
+      name = "parse5-htmlparser2-tree-adapter";
+      packageName = "parse5-htmlparser2-tree-adapter";
+      version = "6.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz";
+        sha512 = "qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==";
+      };
+    };
+    "parseley-0.12.1" = {
+      name = "parseley";
+      packageName = "parseley";
+      version = "0.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/parseley/-/parseley-0.12.1.tgz";
+        sha512 = "e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==";
+      };
+    };
+    "parseurl-1.3.3" = {
+      name = "parseurl";
+      packageName = "parseurl";
+      version = "1.3.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz";
+        sha512 = "CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==";
+      };
+    };
+    "pascal-case-3.1.2" = {
+      name = "pascal-case";
+      packageName = "pascal-case";
+      version = "3.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz";
+        sha512 = "uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==";
+      };
+    };
+    "passport-0.6.0" = {
+      name = "passport";
+      packageName = "passport";
+      version = "0.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/passport/-/passport-0.6.0.tgz";
+        sha512 = "0fe+p3ZnrWRW74fe8+SvCyf4a3Pb2/h7gFkQ8yTJpAO50gDzlfjZUZTO1k5Eg9kUct22OxHLqDZoKUWRHOh9ug==";
+      };
+    };
+    "passport-cookie-1.0.9" = {
+      name = "passport-cookie";
+      packageName = "passport-cookie";
+      version = "1.0.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/passport-cookie/-/passport-cookie-1.0.9.tgz";
+        sha512 = "8a6foX2bbGoJzup0RAiNcC2tTqzYS46RQEK3Z4u8p86wesPUjgDaji3C7+5j4TGyCq4ZoOV+3YLw1Hy6cV6kyw==";
+      };
+    };
+    "passport-jwt-4.0.1" = {
+      name = "passport-jwt";
+      packageName = "passport-jwt";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/passport-jwt/-/passport-jwt-4.0.1.tgz";
+        sha512 = "UCKMDYhNuGOBE9/9Ycuoyh7vP6jpeTp/+sfMJl7nLff/t6dps+iaeE0hhNkKN8/HZHcJ7lCdOyDxHdDoxoSvdQ==";
+      };
+    };
+    "passport-strategy-1.0.0" = {
+      name = "passport-strategy";
+      packageName = "passport-strategy";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz";
+        sha512 = "CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==";
+      };
+    };
+    "password-prompt-1.1.3" = {
+      name = "password-prompt";
+      packageName = "password-prompt";
+      version = "1.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/password-prompt/-/password-prompt-1.1.3.tgz";
+        sha512 = "HkrjG2aJlvF0t2BMH0e2LB/EHf3Lcq3fNMzy4GYHcQblAvOl+QQji1Lx7WRBMqpVK8p+KR7bCg7oqAMXtdgqyw==";
+      };
+    };
+    "path-case-3.0.4" = {
+      name = "path-case";
+      packageName = "path-case";
+      version = "3.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz";
+        sha512 = "qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==";
+      };
+    };
+    "path-is-absolute-1.0.1" = {
+      name = "path-is-absolute";
+      packageName = "path-is-absolute";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz";
+        sha512 = "AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==";
+      };
+    };
+    "path-key-3.1.1" = {
+      name = "path-key";
+      packageName = "path-key";
+      version = "3.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz";
+        sha512 = "ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==";
+      };
+    };
+    "path-parse-1.0.7" = {
+      name = "path-parse";
+      packageName = "path-parse";
+      version = "1.0.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz";
+        sha512 = "LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==";
+      };
+    };
+    "path-scurry-1.10.1" = {
+      name = "path-scurry";
+      packageName = "path-scurry";
+      version = "1.10.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz";
+        sha512 = "MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==";
+      };
+    };
+    "path-to-regexp-0.1.7" = {
+      name = "path-to-regexp";
+      packageName = "path-to-regexp";
+      version = "0.1.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz";
+        sha512 = "5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==";
+      };
+    };
+    "path-to-regexp-6.2.1" = {
+      name = "path-to-regexp";
+      packageName = "path-to-regexp";
+      version = "6.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz";
+        sha512 = "JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==";
+      };
+    };
+    "path-type-4.0.0" = {
+      name = "path-type";
+      packageName = "path-type";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz";
+        sha512 = "gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==";
+      };
+    };
+    "pause-0.0.1" = {
+      name = "pause";
+      packageName = "pause";
+      version = "0.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz";
+        sha512 = "KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==";
+      };
+    };
+    "pause-stream-0.0.11" = {
+      name = "pause-stream";
+      packageName = "pause-stream";
+      version = "0.0.11";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz";
+        sha512 = "e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==";
+      };
+    };
+    "pdfjs-dist-2.16.105" = {
+      name = "pdfjs-dist";
+      packageName = "pdfjs-dist";
+      version = "2.16.105";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-2.16.105.tgz";
+        sha512 = "J4dn41spsAwUxCpEoVf6GVoz908IAA3mYiLmNxg8J9kfRXc2jxpbUepcP0ocp0alVNLFthTAM8DZ1RaHh8sU0A==";
+      };
+    };
+    "peberminta-0.9.0" = {
+      name = "peberminta";
+      packageName = "peberminta";
+      version = "0.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/peberminta/-/peberminta-0.9.0.tgz";
+        sha512 = "XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==";
+      };
+    };
+    "peek-readable-4.1.0" = {
+      name = "peek-readable";
+      packageName = "peek-readable";
+      version = "4.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz";
+        sha512 = "ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==";
+      };
+    };
+    "pg-8.11.3" = {
+      name = "pg";
+      packageName = "pg";
+      version = "8.11.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pg/-/pg-8.11.3.tgz";
+        sha512 = "+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g==";
+      };
+    };
+    "pg-8.8.0" = {
+      name = "pg";
+      packageName = "pg";
+      version = "8.8.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pg/-/pg-8.8.0.tgz";
+        sha512 = "UXYN0ziKj+AeNNP7VDMwrehpACThH7LUl/p8TDFpEUuSejCUIwGSfxpHsPvtM6/WXFy6SU4E5RG4IJV/TZAGjw==";
+      };
+    };
+    "pg-connection-string-2.6.2" = {
+      name = "pg-connection-string";
+      packageName = "pg-connection-string";
+      version = "2.6.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.2.tgz";
+        sha512 = "ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==";
+      };
+    };
+    "pg-cursor-2.10.3" = {
+      name = "pg-cursor";
+      packageName = "pg-cursor";
+      version = "2.10.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pg-cursor/-/pg-cursor-2.10.3.tgz";
+        sha512 = "rDyBVoqPVnx/PTmnwQAYgusSeAKlTL++gmpf5klVK+mYMFEqsOc6VHHZnPKc/4lOvr4r6fiMuoxSFuBF1dx4FQ==";
+      };
+    };
+    "pg-int8-1.0.1" = {
+      name = "pg-int8";
+      packageName = "pg-int8";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz";
+        sha512 = "WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==";
+      };
+    };
+    "pg-minify-1.6.2" = {
+      name = "pg-minify";
+      packageName = "pg-minify";
+      version = "1.6.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pg-minify/-/pg-minify-1.6.2.tgz";
+        sha512 = "1KdmFGGTP6jplJoI8MfvRlfvMiyBivMRP7/ffh4a11RUFJ7kC2J0ZHlipoKiH/1hz+DVgceon9U2qbaHpPeyPg==";
+      };
+    };
+    "pg-native-3.0.1" = {
+      name = "pg-native";
+      packageName = "pg-native";
+      version = "3.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pg-native/-/pg-native-3.0.1.tgz";
+        sha512 = "LBVNWkNh0fVx/cienARRP2y22J5OpUsKBe0TpxzAx3arEUUdIs77aLSAHS3scS7SMaqc+OkG40CEu5fN0/cjIw==";
+      };
+    };
+    "pg-pool-3.6.1" = {
+      name = "pg-pool";
+      packageName = "pg-pool";
+      version = "3.6.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.1.tgz";
+        sha512 = "jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og==";
+      };
+    };
+    "pg-promise-10.15.4" = {
+      name = "pg-promise";
+      packageName = "pg-promise";
+      version = "10.15.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pg-promise/-/pg-promise-10.15.4.tgz";
+        sha512 = "BKlHCMCdNUmF6gagVbehRWSEiVcZzPVltEx14OJExR9Iz9/1R6KETDWLLGv2l6yRqYFnEZZy1VDjRhArzeIGrw==";
+      };
+    };
+    "pg-protocol-1.6.0" = {
+      name = "pg-protocol";
+      packageName = "pg-protocol";
+      version = "1.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.0.tgz";
+        sha512 = "M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==";
+      };
+    };
+    "pg-query-stream-4.5.3" = {
+      name = "pg-query-stream";
+      packageName = "pg-query-stream";
+      version = "4.5.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pg-query-stream/-/pg-query-stream-4.5.3.tgz";
+        sha512 = "ufa94r/lHJdjAm3+zPZEO0gXAmCb4tZPaOt7O76mjcxdL/HxwTuryy76km+u0odBBgtfdKFYq/9XGfiYeQF0yA==";
+      };
+    };
+    "pg-types-1.13.0" = {
+      name = "pg-types";
+      packageName = "pg-types";
+      version = "1.13.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pg-types/-/pg-types-1.13.0.tgz";
+        sha512 = "lfKli0Gkl/+za/+b6lzENajczwZHc7D5kiUCZfgm914jipD2kIOIvEkAhZ8GrW3/TUoP9w8FHjwpPObBye5KQQ==";
+      };
+    };
+    "pg-types-2.2.0" = {
+      name = "pg-types";
+      packageName = "pg-types";
+      version = "2.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz";
+        sha512 = "qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==";
+      };
+    };
+    "pgpass-1.0.5" = {
+      name = "pgpass";
+      packageName = "pgpass";
+      version = "1.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz";
+        sha512 = "FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==";
+      };
+    };
+    "picocolors-1.0.0" = {
+      name = "picocolors";
+      packageName = "picocolors";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz";
+        sha512 = "1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==";
+      };
+    };
+    "picomatch-2.3.1" = {
+      name = "picomatch";
+      packageName = "picomatch";
+      version = "2.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz";
+        sha512 = "JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==";
+      };
+    };
+    "pinia-2.1.6" = {
+      name = "pinia";
+      packageName = "pinia";
+      version = "2.1.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pinia/-/pinia-2.1.6.tgz";
+        sha512 = "bIU6QuE5qZviMmct5XwCesXelb5VavdOWKWaB17ggk++NUwQWWbP5YnsONTk3b752QkW9sACiR81rorpeOMSvQ==";
+      };
+    };
+    "pkce-challenge-3.1.0" = {
+      name = "pkce-challenge";
+      packageName = "pkce-challenge";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-3.1.0.tgz";
+        sha512 = "bQ/0XPZZ7eX+cdAkd61uYWpfMhakH3NeteUF1R8GNa+LMqX8QFAkbCLqq+AYAns1/ueACBu/BMWhrlKGrdvGZg==";
+      };
+    };
+    "postcss-8.4.29" = {
+      name = "postcss";
+      packageName = "postcss";
+      version = "8.4.29";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postcss/-/postcss-8.4.29.tgz";
+        sha512 = "cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==";
+      };
+    };
+    "postgres-array-1.0.3" = {
+      name = "postgres-array";
+      packageName = "postgres-array";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postgres-array/-/postgres-array-1.0.3.tgz";
+        sha512 = "5wClXrAP0+78mcsNX3/ithQ5exKvCyK5lr5NEEEeGwwM6NJdQgzIJBVxLvRW+huFpX92F2QnZ5CcokH0VhK2qQ==";
+      };
+    };
+    "postgres-array-2.0.0" = {
+      name = "postgres-array";
+      packageName = "postgres-array";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz";
+        sha512 = "VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==";
+      };
+    };
+    "postgres-bytea-1.0.0" = {
+      name = "postgres-bytea";
+      packageName = "postgres-bytea";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz";
+        sha512 = "xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==";
+      };
+    };
+    "postgres-date-1.0.7" = {
+      name = "postgres-date";
+      packageName = "postgres-date";
+      version = "1.0.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz";
+        sha512 = "suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==";
+      };
+    };
+    "postgres-interval-1.2.0" = {
+      name = "postgres-interval";
+      packageName = "postgres-interval";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz";
+        sha512 = "9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==";
+      };
+    };
+    "posthog-node-2.6.0" = {
+      name = "posthog-node";
+      packageName = "posthog-node";
+      version = "2.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/posthog-node/-/posthog-node-2.6.0.tgz";
+        sha512 = "/BiFw/jwdP0uJSRAIoYqLoBTjZ612xv74b1L/a3T/p1nJVL8e0OrHuxbJW56c6WVW/IKm9gBF/zhbqfaz0XgJQ==";
+      };
+    };
+    "prebuild-install-7.1.1" = {
+      name = "prebuild-install";
+      packageName = "prebuild-install";
+      version = "7.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz";
+        sha512 = "jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==";
+      };
+    };
+    "prelude-ls-1.1.2" = {
+      name = "prelude-ls";
+      packageName = "prelude-ls";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz";
+        sha512 = "ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==";
+      };
+    };
+    "prettier-3.0.3" = {
+      name = "prettier";
+      packageName = "prettier";
+      version = "3.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz";
+        sha512 = "L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==";
+      };
+    };
+    "pretty-bytes-5.6.0" = {
+      name = "pretty-bytes";
+      packageName = "pretty-bytes";
+      version = "5.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz";
+        sha512 = "FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==";
+      };
+    };
+    "process-0.11.10" = {
+      name = "process";
+      packageName = "process";
+      version = "0.11.10";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/process/-/process-0.11.10.tgz";
+        sha512 = "cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==";
+      };
+    };
+    "process-nextick-args-2.0.1" = {
+      name = "process-nextick-args";
+      packageName = "process-nextick-args";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz";
+        sha512 = "3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==";
+      };
+    };
+    "prom-client-13.2.0" = {
+      name = "prom-client";
+      packageName = "prom-client";
+      version = "13.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/prom-client/-/prom-client-13.2.0.tgz";
+        sha512 = "wGr5mlNNdRNzEhRYXgboUU2LxHWIojxscJKmtG3R8f4/KiWqyYgXTLHs0+Ted7tG3zFT7pgHJbtomzZ1L0ARaQ==";
+      };
+    };
+    "promise-1.3.0" = {
+      name = "promise";
+      packageName = "promise";
+      version = "1.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/promise/-/promise-1.3.0.tgz";
+        sha512 = "R9WrbTF3EPkVtWjp7B7umQGVndpsi+rsDAfrR4xAALQpFLa/+2OriecLhawxzvii2gd9+DZFwROWDuUUaqS5yA==";
+      };
+    };
+    "promise-ftp-1.3.5" = {
+      name = "promise-ftp";
+      packageName = "promise-ftp";
+      version = "1.3.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/promise-ftp/-/promise-ftp-1.3.5.tgz";
+        sha512 = "v368jPSqzmjjKDIyggulC+dRFcpAOEX7aFdEWkFYQp8Ao3P2N4Y6XnFFdKgK7PtkylwvGQkZR/65HZuzmq0V7A==";
+      };
+    };
+    "promise-ftp-common-1.1.5" = {
+      name = "promise-ftp-common";
+      packageName = "promise-ftp-common";
+      version = "1.1.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/promise-ftp-common/-/promise-ftp-common-1.1.5.tgz";
+        sha512 = "a84F/zM2Z0Ry/ht3nXfV6Ze7BISOQlWrct/YObrluJn8qy2LVeeQ+IJ7jD4bkmM0N2xfXYy5nurz4L1KEj+rJg==";
+      };
+    };
+    "promise-inflight-1.0.1" = {
+      name = "promise-inflight";
+      packageName = "promise-inflight";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz";
+        sha512 = "6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==";
+      };
+    };
+    "promise-retry-2.0.1" = {
+      name = "promise-retry";
+      packageName = "promise-retry";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz";
+        sha512 = "y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==";
+      };
+    };
+    "promise.prototype.finally-3.1.5" = {
+      name = "promise.prototype.finally";
+      packageName = "promise.prototype.finally";
+      version = "3.1.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/promise.prototype.finally/-/promise.prototype.finally-3.1.5.tgz";
+        sha512 = "4TQ3Dk8yyUZGyU+UXInKdkQ2b6xtiBXAIScGAtGnXVmJtG1uOrxRgbF1ggIu72uzoWFzUfT3nUKa1SuMm9NBdg==";
+      };
+    };
+    "property-expr-2.0.5" = {
+      name = "property-expr";
+      packageName = "property-expr";
+      version = "2.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/property-expr/-/property-expr-2.0.5.tgz";
+        sha512 = "IJUkICM5dP5znhCckHSv30Q4b5/JA5enCtkRHYaOVOAocnH/1BQEYTC5NMfT3AVl/iXKdr3aqQbQn9DxyWknwA==";
+      };
+    };
+    "proto3-json-serializer-0.1.9" = {
+      name = "proto3-json-serializer";
+      packageName = "proto3-json-serializer";
+      version = "0.1.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-0.1.9.tgz";
+        sha512 = "A60IisqvnuI45qNRygJjrnNjX2TMdQGMY+57tR3nul3ZgO2zXkR9OGR8AXxJhkqx84g0FTnrfi3D5fWMSdANdQ==";
+      };
+    };
+    "protobufjs-6.11.3" = {
+      name = "protobufjs";
+      packageName = "protobufjs";
+      version = "6.11.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz";
+        sha512 = "xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==";
+      };
+    };
+    "protobufjs-6.11.4" = {
+      name = "protobufjs";
+      packageName = "protobufjs";
+      version = "6.11.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.4.tgz";
+        sha512 = "5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw==";
+      };
+    };
+    "protobufjs-7.2.5" = {
+      name = "protobufjs";
+      packageName = "protobufjs";
+      version = "7.2.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.5.tgz";
+        sha512 = "gGXRSXvxQ7UiPgfw8gevrfRWcTlSbOFg+p/N+JVJEK5VhueL2miT6qTymqAmjr1Q5WbOCyJbyrk6JfWKwlFn6A==";
+      };
+    };
+    "proxy-addr-2.0.7" = {
+      name = "proxy-addr";
+      packageName = "proxy-addr";
+      version = "2.0.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz";
+        sha512 = "llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==";
+      };
+    };
+    "proxy-agent-5.0.0" = {
+      name = "proxy-agent";
+      packageName = "proxy-agent";
+      version = "5.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/proxy-agent/-/proxy-agent-5.0.0.tgz";
+        sha512 = "gkH7BkvLVkSfX9Dk27W6TyNOWWZWRilRfk1XxGNWOYJ2TuedAv1yFpCaU9QSBmBe716XOTNpYNOzhysyw8xn7g==";
+      };
+    };
+    "proxy-from-env-1.1.0" = {
+      name = "proxy-from-env";
+      packageName = "proxy-from-env";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz";
+        sha512 = "D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==";
+      };
+    };
+    "pseudomap-1.0.2" = {
+      name = "pseudomap";
+      packageName = "pseudomap";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz";
+        sha512 = "b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==";
+      };
+    };
+    "psl-1.9.0" = {
+      name = "psl";
+      packageName = "psl";
+      version = "1.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz";
+        sha512 = "E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==";
+      };
+    };
+    "pump-2.0.1" = {
+      name = "pump";
+      packageName = "pump";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz";
+        sha512 = "ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==";
+      };
+    };
+    "pump-3.0.0" = {
+      name = "pump";
+      packageName = "pump";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz";
+        sha512 = "LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==";
+      };
+    };
+    "pumpify-1.5.1" = {
+      name = "pumpify";
+      packageName = "pumpify";
+      version = "1.5.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz";
+        sha512 = "oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==";
+      };
+    };
+    "punycode-1.3.2" = {
+      name = "punycode";
+      packageName = "punycode";
+      version = "1.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz";
+        sha512 = "RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==";
+      };
+    };
+    "punycode-2.3.0" = {
+      name = "punycode";
+      packageName = "punycode";
+      version = "2.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz";
+        sha512 = "rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==";
+      };
+    };
+    "pyodide-0.23.4" = {
+      name = "pyodide";
+      packageName = "pyodide";
+      version = "0.23.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/pyodide/-/pyodide-0.23.4.tgz";
+        sha512 = "WpQUHaIXQ1xede5BMqPAjBcmopxN22s5hEsYOR8T7/UW/fkNLFUn07SaemUgthbtvedD5JGymMMj4VpD9sGMTg==";
+      };
+    };
+    "python-struct-1.1.3" = {
+      name = "python-struct";
+      packageName = "python-struct";
+      version = "1.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/python-struct/-/python-struct-1.1.3.tgz";
+        sha512 = "UsI/mNvk25jRpGKYI38Nfbv84z48oiIWwG67DLVvjRhy8B/0aIK+5Ju5WOHgw/o9rnEmbAS00v4rgKFQeC332Q==";
+      };
+    };
+    "qrcode.vue-3.4.1" = {
+      name = "qrcode.vue";
+      packageName = "qrcode.vue";
+      version = "3.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/qrcode.vue/-/qrcode.vue-3.4.1.tgz";
+        sha512 = "wq/zHsifH4FJ1GXQi8/wNxD1KfQkckIpjK1KPTc/qwYU5/Bkd4me0w4xZSg6EXk6xLBkVDE0zxVagewv5EMAVA==";
+      };
+    };
+    "qs-6.11.0" = {
+      name = "qs";
+      packageName = "qs";
+      version = "6.11.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz";
+        sha512 = "MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==";
+      };
+    };
+    "query-string-7.1.3" = {
+      name = "query-string";
+      packageName = "query-string";
+      version = "7.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/query-string/-/query-string-7.1.3.tgz";
+        sha512 = "hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==";
+      };
+    };
+    "querystring-0.2.0" = {
+      name = "querystring";
+      packageName = "querystring";
+      version = "0.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz";
+        sha512 = "X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==";
+      };
+    };
+    "querystringify-2.2.0" = {
+      name = "querystringify";
+      packageName = "querystringify";
+      version = "2.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz";
+        sha512 = "FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==";
+      };
+    };
+    "queue-microtask-1.2.3" = {
+      name = "queue-microtask";
+      packageName = "queue-microtask";
+      version = "1.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz";
+        sha512 = "NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==";
+      };
+    };
+    "quoted-printable-1.0.1" = {
+      name = "quoted-printable";
+      packageName = "quoted-printable";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/quoted-printable/-/quoted-printable-1.0.1.tgz";
+        sha512 = "cihC68OcGiQOjGiXuo5Jk6XHANTHl1K4JLk/xlEJRTIXfy19Sg6XzB95XonYgr+1rB88bCpr7WZE7D7AlZow4g==";
+      };
+    };
+    "random-bytes-1.0.0" = {
+      name = "random-bytes";
+      packageName = "random-bytes";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz";
+        sha512 = "iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==";
+      };
+    };
+    "randombytes-2.1.0" = {
+      name = "randombytes";
+      packageName = "randombytes";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz";
+        sha512 = "vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==";
+      };
+    };
+    "range-parser-1.2.1" = {
+      name = "range-parser";
+      packageName = "range-parser";
+      version = "1.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz";
+        sha512 = "Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==";
+      };
+    };
+    "raw-body-2.5.1" = {
+      name = "raw-body";
+      packageName = "raw-body";
+      version = "2.5.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz";
+        sha512 = "qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==";
+      };
+    };
+    "raw-body-2.5.2" = {
+      name = "raw-body";
+      packageName = "raw-body";
+      version = "2.5.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz";
+        sha512 = "8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==";
+      };
+    };
+    "rc-1.2.8" = {
+      name = "rc";
+      packageName = "rc";
+      version = "1.2.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz";
+        sha512 = "y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==";
+      };
+    };
+    "readable-stream-1.0.31" = {
+      name = "readable-stream";
+      packageName = "readable-stream";
+      version = "1.0.31";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.31.tgz";
+        sha512 = "tco/Dwv1f/sgIgN6CWdj/restacPKNskK6yps1981ivH2ZmLYcs5o5rVzL3qaO/cSkhN8hYOMWs7+glzOLSgRg==";
+      };
+    };
+    "readable-stream-1.1.14" = {
+      name = "readable-stream";
+      packageName = "readable-stream";
+      version = "1.1.14";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz";
+        sha512 = "+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==";
+      };
+    };
+    "readable-stream-2.3.8" = {
+      name = "readable-stream";
+      packageName = "readable-stream";
+      version = "2.3.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz";
+        sha512 = "8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==";
+      };
+    };
+    "readable-stream-3.6.2" = {
+      name = "readable-stream";
+      packageName = "readable-stream";
+      version = "3.6.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz";
+        sha512 = "9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==";
+      };
+    };
+    "readable-stream-4.4.2" = {
+      name = "readable-stream";
+      packageName = "readable-stream";
+      version = "4.4.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz";
+        sha512 = "Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==";
+      };
+    };
+    "readable-web-to-node-stream-3.0.2" = {
+      name = "readable-web-to-node-stream";
+      packageName = "readable-web-to-node-stream";
+      version = "3.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz";
+        sha512 = "ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==";
+      };
+    };
+    "readdirp-3.6.0" = {
+      name = "readdirp";
+      packageName = "readdirp";
+      version = "3.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz";
+        sha512 = "hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==";
+      };
+    };
+    "recast-0.21.5" = {
+      name = "recast";
+      packageName = "recast";
+      version = "0.21.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/recast/-/recast-0.21.5.tgz";
+        sha512 = "hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==";
+      };
+    };
+    "rechoir-0.6.2" = {
+      name = "rechoir";
+      packageName = "rechoir";
+      version = "0.6.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz";
+        sha512 = "HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==";
+      };
+    };
+    "redeyed-2.1.1" = {
+      name = "redeyed";
+      packageName = "redeyed";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz";
+        sha512 = "FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==";
+      };
+    };
+    "redis-3.1.2" = {
+      name = "redis";
+      packageName = "redis";
+      version = "3.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/redis/-/redis-3.1.2.tgz";
+        sha512 = "grn5KoZLr/qrRQVwoSkmzdbw6pwF+/rwODtrOr6vuBRiR/f3rjSTGupbF90Zpqm2oenix8Do6RV7pYEkGwlKkw==";
+      };
+    };
+    "redis-4.6.8" = {
+      name = "redis";
+      packageName = "redis";
+      version = "4.6.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/redis/-/redis-4.6.8.tgz";
+        sha512 = "S7qNkPUYrsofQ0ztWlTHSaK0Qqfl1y+WMIxrzeAGNG+9iUZB4HGeBgkHxE6uJJ6iXrkvLd1RVJ2nvu6H1sAzfQ==";
+      };
+    };
+    "redis-commands-1.7.0" = {
+      name = "redis-commands";
+      packageName = "redis-commands";
+      version = "1.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/redis-commands/-/redis-commands-1.7.0.tgz";
+        sha512 = "nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ==";
+      };
+    };
+    "redis-errors-1.2.0" = {
+      name = "redis-errors";
+      packageName = "redis-errors";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz";
+        sha512 = "1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==";
+      };
+    };
+    "redis-parser-3.0.0" = {
+      name = "redis-parser";
+      packageName = "redis-parser";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz";
+        sha512 = "DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==";
+      };
+    };
+    "reflect-metadata-0.1.13" = {
+      name = "reflect-metadata";
+      packageName = "reflect-metadata";
+      version = "0.1.13";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz";
+        sha512 = "Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==";
+      };
+    };
+    "regenerator-runtime-0.13.11" = {
+      name = "regenerator-runtime";
+      packageName = "regenerator-runtime";
+      version = "0.13.11";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz";
+        sha512 = "kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==";
+      };
+    };
+    "regenerator-runtime-0.14.0" = {
+      name = "regenerator-runtime";
+      packageName = "regenerator-runtime";
+      version = "0.14.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz";
+        sha512 = "srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==";
+      };
+    };
+    "regexp.prototype.flags-1.5.0" = {
+      name = "regexp.prototype.flags";
+      packageName = "regexp.prototype.flags";
+      version = "1.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz";
+        sha512 = "0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==";
+      };
+    };
+    "reinterval-1.1.0" = {
+      name = "reinterval";
+      packageName = "reinterval";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/reinterval/-/reinterval-1.1.0.tgz";
+        sha512 = "QIRet3SYrGp0HUHO88jVskiG6seqUGC5iAG7AwI/BV4ypGcuqk9Du6YQBUOUqm9c8pw1eyLoIaONifRua1lsEQ==";
+      };
+    };
+    "remove-trailing-slash-0.1.1" = {
+      name = "remove-trailing-slash";
+      packageName = "remove-trailing-slash";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/remove-trailing-slash/-/remove-trailing-slash-0.1.1.tgz";
+        sha512 = "o4S4Qh6L2jpnCy83ysZDau+VORNvnFw07CKSAymkd6ICNVEPisMyzlc00KlvvicsxKck94SEwhDnMNdICzO+tA==";
+      };
+    };
+    "replacestream-4.0.3" = {
+      name = "replacestream";
+      packageName = "replacestream";
+      version = "4.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/replacestream/-/replacestream-4.0.3.tgz";
+        sha512 = "AC0FiLS352pBBiZhd4VXB1Ab/lh0lEgpP+GGvZqbQh8a5cmXVoTe5EX/YeTFArnp4SRGTHh1qCHu9lGs1qG8sA==";
+      };
+    };
+    "require-directory-2.1.1" = {
+      name = "require-directory";
+      packageName = "require-directory";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz";
+        sha512 = "fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==";
+      };
+    };
+    "requires-port-1.0.0" = {
+      name = "requires-port";
+      packageName = "requires-port";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz";
+        sha512 = "KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==";
+      };
+    };
+    "resolve-1.22.4" = {
+      name = "resolve";
+      packageName = "resolve";
+      version = "1.22.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz";
+        sha512 = "PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==";
+      };
+    };
+    "restore-cursor-3.1.0" = {
+      name = "restore-cursor";
+      packageName = "restore-cursor";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz";
+        sha512 = "l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==";
+      };
+    };
+    "retry-0.12.0" = {
+      name = "retry";
+      packageName = "retry";
+      version = "0.12.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz";
+        sha512 = "9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==";
+      };
+    };
+    "retry-0.13.1" = {
+      name = "retry";
+      packageName = "retry";
+      version = "0.13.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz";
+        sha512 = "XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==";
+      };
+    };
+    "retry-request-4.2.2" = {
+      name = "retry-request";
+      packageName = "retry-request";
+      version = "4.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/retry-request/-/retry-request-4.2.2.tgz";
+        sha512 = "xA93uxUD/rogV7BV59agW/JHPGXeREMWiZc9jhcwY4YdZ7QOtC7qbomYg0n4wyk2lJhggjvKvhNX8wln/Aldhg==";
+      };
+    };
+    "retry-request-5.0.2" = {
+      name = "retry-request";
+      packageName = "retry-request";
+      version = "5.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/retry-request/-/retry-request-5.0.2.tgz";
+        sha512 = "wfI3pk7EE80lCIXprqh7ym48IHYdwmAAzESdbU8Q9l7pnRCk9LEhpbOTNKjz6FARLm/Bl5m+4F0ABxOkYUujSQ==";
+      };
+    };
+    "reusify-1.0.4" = {
+      name = "reusify";
+      packageName = "reusify";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz";
+        sha512 = "U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==";
+      };
+    };
+    "rfc2047-4.0.1" = {
+      name = "rfc2047";
+      packageName = "rfc2047";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/rfc2047/-/rfc2047-4.0.1.tgz";
+        sha512 = "x5zHBAZtSSZDuBNAqGEAVpsQFV+YUluIkMWVaYRMEeGoLPxNVMmg67TxRnXwmRmCB7QaneyrkWXeKqbjfcK6RA==";
+      };
+    };
+    "rfdc-1.3.0" = {
+      name = "rfdc";
+      packageName = "rfdc";
+      version = "1.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz";
+        sha512 = "V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==";
+      };
+    };
+    "rhea-1.0.24" = {
+      name = "rhea";
+      packageName = "rhea";
+      version = "1.0.24";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/rhea/-/rhea-1.0.24.tgz";
+        sha512 = "PEl62U2EhxCO5wMUZ2/bCBcXAVKN9AdMSNQOrp3+R5b77TEaOSiy16MQ0sIOmzj/iqsgIAgPs1mt3FYfu1vIXA==";
+      };
+    };
+    "rimraf-3.0.2" = {
+      name = "rimraf";
+      packageName = "rimraf";
+      version = "3.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz";
+        sha512 = "JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==";
+      };
+    };
+    "rndm-1.2.0" = {
+      name = "rndm";
+      packageName = "rndm";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/rndm/-/rndm-1.2.0.tgz";
+        sha512 = "fJhQQI5tLrQvYIYFpOnFinzv9dwmR7hRnUz1XqP3OJ1jIweTNOd6aTO4jwQSgcBSFUB+/KHJxuGneime+FdzOw==";
+      };
+    };
+    "rss-parser-3.13.0" = {
+      name = "rss-parser";
+      packageName = "rss-parser";
+      version = "3.13.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/rss-parser/-/rss-parser-3.13.0.tgz";
+        sha512 = "7jWUBV5yGN3rqMMj7CZufl/291QAhvrrGpDNE4k/02ZchL0npisiYYqULF71jCEKoIiHvK/Q2e6IkDwPziT7+w==";
+      };
+    };
+    "run-async-2.4.1" = {
+      name = "run-async";
+      packageName = "run-async";
+      version = "2.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz";
+        sha512 = "tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==";
+      };
+    };
+    "run-parallel-1.2.0" = {
+      name = "run-parallel";
+      packageName = "run-parallel";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz";
+        sha512 = "5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==";
+      };
+    };
+    "rxjs-6.6.7" = {
+      name = "rxjs";
+      packageName = "rxjs";
+      version = "6.6.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz";
+        sha512 = "hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==";
+      };
+    };
+    "safe-array-concat-1.0.1" = {
+      name = "safe-array-concat";
+      packageName = "safe-array-concat";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz";
+        sha512 = "6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==";
+      };
+    };
+    "safe-buffer-5.1.2" = {
+      name = "safe-buffer";
+      packageName = "safe-buffer";
+      version = "5.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz";
+        sha512 = "Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==";
+      };
+    };
+    "safe-buffer-5.2.1" = {
+      name = "safe-buffer";
+      packageName = "safe-buffer";
+      version = "5.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz";
+        sha512 = "rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==";
+      };
+    };
+    "safe-regex-test-1.0.0" = {
+      name = "safe-regex-test";
+      packageName = "safe-regex-test";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz";
+        sha512 = "JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==";
+      };
+    };
+    "safe-stable-stringify-2.4.3" = {
+      name = "safe-stable-stringify";
+      packageName = "safe-stable-stringify";
+      version = "2.4.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz";
+        sha512 = "e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==";
+      };
+    };
+    "safer-buffer-2.1.2" = {
+      name = "safer-buffer";
+      packageName = "safer-buffer";
+      version = "2.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz";
+        sha512 = "YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==";
+      };
+    };
+    "samlify-2.8.10" = {
+      name = "samlify";
+      packageName = "samlify";
+      version = "2.8.10";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/samlify/-/samlify-2.8.10.tgz";
+        sha512 = "g2M1Qq2uL7GHtmBRaTVYcJD0Vb+XOyvXHsPARHCoqQ54Vp7m5h3NMUGzvLEIFGujxaamyM3BhEi9fdVAkJMvHw==";
+      };
+    };
+    "sanitize-html-2.10.0" = {
+      name = "sanitize-html";
+      packageName = "sanitize-html";
+      version = "2.10.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.10.0.tgz";
+        sha512 = "JqdovUd81dG4k87vZt6uA6YhDfWkUGruUu/aPmXLxXi45gZExnt9Bnw/qeQU8oGf82vPyaE0vO4aH0PbobB9JQ==";
+      };
+    };
+    "sax-1.2.1" = {
+      name = "sax";
+      packageName = "sax";
+      version = "1.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz";
+        sha512 = "8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==";
+      };
+    };
+    "sax-1.2.4" = {
+      name = "sax";
+      packageName = "sax";
+      version = "1.2.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz";
+        sha512 = "NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==";
+      };
+    };
+    "sb-promise-queue-2.1.0" = {
+      name = "sb-promise-queue";
+      packageName = "sb-promise-queue";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sb-promise-queue/-/sb-promise-queue-2.1.0.tgz";
+        sha512 = "zwq4YuP1FQFkGx2Q7GIkZYZ6PqWpV+bg0nIO1sJhWOyGyhqbj0MsTvK6lCFo5TQwX5pZr6SCQ75e8PCDCuNvkg==";
+      };
+    };
+    "sb-scandir-3.1.0" = {
+      name = "sb-scandir";
+      packageName = "sb-scandir";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sb-scandir/-/sb-scandir-3.1.0.tgz";
+        sha512 = "70BVm2xz9jn94zSQdpvYrEG101/UV9TVGcfWr9T5iob3QhCK4lYXeculfBqPGFv3XTeKgx4dpWyYIDeZUqo4kg==";
+      };
+    };
+    "schema-utils-3.3.0" = {
+      name = "schema-utils";
+      packageName = "schema-utils";
+      version = "3.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz";
+        sha512 = "pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==";
+      };
+    };
+    "selderee-0.11.0" = {
+      name = "selderee";
+      packageName = "selderee";
+      version = "0.11.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/selderee/-/selderee-0.11.0.tgz";
+        sha512 = "5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==";
+      };
+    };
+    "semver-5.3.0" = {
+      name = "semver";
+      packageName = "semver";
+      version = "5.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz";
+        sha512 = "mfmm3/H9+67MCVix1h+IXTpDwL6710LyHuk7+cWC9T1mE0qz4iHhh6r4hU2wrIT9iTsAAC2XQRvfblL028cpLw==";
+      };
+    };
+    "semver-5.7.2" = {
+      name = "semver";
+      packageName = "semver";
+      version = "5.7.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz";
+        sha512 = "cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==";
+      };
+    };
+    "semver-6.3.1" = {
+      name = "semver";
+      packageName = "semver";
+      version = "6.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz";
+        sha512 = "BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==";
+      };
+    };
+    "semver-7.5.4" = {
+      name = "semver";
+      packageName = "semver";
+      version = "7.5.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz";
+        sha512 = "1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==";
+      };
+    };
+    "send-0.18.0" = {
+      name = "send";
+      packageName = "send";
+      version = "0.18.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/send/-/send-0.18.0.tgz";
+        sha512 = "qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==";
+      };
+    };
+    "sentence-case-3.0.4" = {
+      name = "sentence-case";
+      packageName = "sentence-case";
+      version = "3.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz";
+        sha512 = "8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==";
+      };
+    };
+    "seq-queue-0.0.5" = {
+      name = "seq-queue";
+      packageName = "seq-queue";
+      version = "0.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz";
+        sha512 = "hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==";
+      };
+    };
+    "serialize-javascript-5.0.1" = {
+      name = "serialize-javascript";
+      packageName = "serialize-javascript";
+      version = "5.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz";
+        sha512 = "SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==";
+      };
+    };
+    "serialize-javascript-6.0.1" = {
+      name = "serialize-javascript";
+      packageName = "serialize-javascript";
+      version = "6.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz";
+        sha512 = "owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==";
+      };
+    };
+    "serve-static-1.15.0" = {
+      name = "serve-static";
+      packageName = "serve-static";
+      version = "1.15.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz";
+        sha512 = "XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==";
+      };
+    };
+    "set-blocking-2.0.0" = {
+      name = "set-blocking";
+      packageName = "set-blocking";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz";
+        sha512 = "KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==";
+      };
+    };
+    "setprototypeof-1.2.0" = {
+      name = "setprototypeof";
+      packageName = "setprototypeof";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz";
+        sha512 = "E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==";
+      };
+    };
+    "sha.js-2.4.11" = {
+      name = "sha.js";
+      packageName = "sha.js";
+      version = "2.4.11";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz";
+        sha512 = "QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==";
+      };
+    };
+    "shebang-command-2.0.0" = {
+      name = "shebang-command";
+      packageName = "shebang-command";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz";
+        sha512 = "kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==";
+      };
+    };
+    "shebang-regex-3.0.0" = {
+      name = "shebang-regex";
+      packageName = "shebang-regex";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz";
+        sha512 = "7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==";
+      };
+    };
+    "shell-escape-0.2.0" = {
+      name = "shell-escape";
+      packageName = "shell-escape";
+      version = "0.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/shell-escape/-/shell-escape-0.2.0.tgz";
+        sha512 = "uRRBT2MfEOyxuECseCZd28jC1AJ8hmqqneWQ4VWUTgCAFvb3wKU1jLqj6egC4Exrr88ogg3dp+zroH4wJuaXzw==";
+      };
+    };
+    "shelljs-0.8.5" = {
+      name = "shelljs";
+      packageName = "shelljs";
+      version = "0.8.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz";
+        sha512 = "TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==";
+      };
+    };
+    "showdown-2.1.0" = {
+      name = "showdown";
+      packageName = "showdown";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/showdown/-/showdown-2.1.0.tgz";
+        sha512 = "/6NVYu4U819R2pUIk79n67SYgJHWCce0a5xTP979WbNp0FL9MN1I1QK662IDU1b6JzKTvmhgI7T7JYIxBi3kMQ==";
+      };
+    };
+    "side-channel-1.0.4" = {
+      name = "side-channel";
+      packageName = "side-channel";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz";
+        sha512 = "q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==";
+      };
+    };
+    "signal-exit-3.0.7" = {
+      name = "signal-exit";
+      packageName = "signal-exit";
+      version = "3.0.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz";
+        sha512 = "wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==";
+      };
+    };
+    "signal-exit-4.1.0" = {
+      name = "signal-exit";
+      packageName = "signal-exit";
+      version = "4.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz";
+        sha512 = "bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==";
+      };
+    };
+    "simple-concat-1.0.1" = {
+      name = "simple-concat";
+      packageName = "simple-concat";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz";
+        sha512 = "cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==";
+      };
+    };
+    "simple-get-4.0.1" = {
+      name = "simple-get";
+      packageName = "simple-get";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz";
+        sha512 = "brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==";
+      };
+    };
+    "simple-git-3.19.1" = {
+      name = "simple-git";
+      packageName = "simple-git";
+      version = "3.19.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/simple-git/-/simple-git-3.19.1.tgz";
+        sha512 = "Ck+rcjVaE1HotraRAS8u/+xgTvToTuoMkT9/l9lvuP5jftwnYUp6DwuJzsKErHgfyRk8IB8pqGHWEbM3tLgV1w==";
+      };
+    };
+    "simple-lru-cache-0.0.2" = {
+      name = "simple-lru-cache";
+      packageName = "simple-lru-cache";
+      version = "0.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/simple-lru-cache/-/simple-lru-cache-0.0.2.tgz";
+        sha512 = "uEv/AFO0ADI7d99OHDmh1QfYzQk/izT1vCmu/riQfh7qjBVUUgRT87E5s5h7CxWCA/+YoZerykpEthzVrW3LIw==";
+      };
+    };
+    "simple-swizzle-0.2.2" = {
+      name = "simple-swizzle";
+      packageName = "simple-swizzle";
+      version = "0.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz";
+        sha512 = "JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==";
+      };
+    };
+    "slash-3.0.0" = {
+      name = "slash";
+      packageName = "slash";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz";
+        sha512 = "g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==";
+      };
+    };
+    "smart-buffer-4.2.0" = {
+      name = "smart-buffer";
+      packageName = "smart-buffer";
+      version = "4.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz";
+        sha512 = "94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==";
+      };
+    };
+    "snake-case-3.0.4" = {
+      name = "snake-case";
+      packageName = "snake-case";
+      version = "3.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz";
+        sha512 = "LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==";
+      };
+    };
+    "snappy-7.2.2" = {
+      name = "snappy";
+      packageName = "snappy";
+      version = "7.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/snappy/-/snappy-7.2.2.tgz";
+        sha512 = "iADMq1kY0v3vJmGTuKcFWSXt15qYUz7wFkArOrsSg0IFfI3nJqIJvK2/ZbEIndg7erIJLtAVX2nSOqPz7DcwbA==";
+      };
+    };
+    "snowflake-sdk-1.8.0" = {
+      name = "snowflake-sdk";
+      packageName = "snowflake-sdk";
+      version = "1.8.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/snowflake-sdk/-/snowflake-sdk-1.8.0.tgz";
+        sha512 = "zdU1c+ytIZclF4K6D4XPPHa5II6l6cOQdsLdvKP95IwSdTYJz324ESA7fPcg/rwYV7vUKnIZJ9OCjB1mE7D2IQ==";
+      };
+    };
+    "socks-2.7.1" = {
+      name = "socks";
+      packageName = "socks";
+      version = "2.7.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz";
+        sha512 = "7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==";
+      };
+    };
+    "socks-proxy-agent-5.0.1" = {
+      name = "socks-proxy-agent";
+      packageName = "socks-proxy-agent";
+      version = "5.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz";
+        sha512 = "vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==";
+      };
+    };
+    "socks-proxy-agent-6.2.1" = {
+      name = "socks-proxy-agent";
+      packageName = "socks-proxy-agent";
+      version = "6.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz";
+        sha512 = "a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==";
+      };
+    };
+    "source-map-0.6.1" = {
+      name = "source-map";
+      packageName = "source-map";
+      version = "0.6.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz";
+        sha512 = "UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==";
+      };
+    };
+    "source-map-js-1.0.2" = {
+      name = "source-map-js";
+      packageName = "source-map-js";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz";
+        sha512 = "R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==";
+      };
+    };
+    "source-map-support-0.5.21" = {
+      name = "source-map-support";
+      packageName = "source-map-support";
+      version = "0.5.21";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz";
+        sha512 = "uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==";
+      };
+    };
+    "spex-3.2.0" = {
+      name = "spex";
+      packageName = "spex";
+      version = "3.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/spex/-/spex-3.2.0.tgz";
+        sha512 = "9srjJM7NaymrpwMHvSmpDeIK5GoRMX/Tq0E8aOlDPS54dDnDUIp30DrP9SphMPEETDLzEM9+4qo+KipmbtPecg==";
+      };
+    };
+    "split-array-stream-1.0.3" = {
+      name = "split-array-stream";
+      packageName = "split-array-stream";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/split-array-stream/-/split-array-stream-1.0.3.tgz";
+        sha512 = "yGY35QmZFzZkWZ0eHE06RPBi63umym8m+pdtuC/dlO1ADhdKSfCj0uNn87BYCXBBDFxyTq4oTw0BgLYT0K5z/A==";
+      };
+    };
+    "split-array-stream-2.0.0" = {
+      name = "split-array-stream";
+      packageName = "split-array-stream";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/split-array-stream/-/split-array-stream-2.0.0.tgz";
+        sha512 = "hmMswlVY91WvGMxs0k8MRgq8zb2mSen4FmDNc5AFiTWtrBpdZN6nwD6kROVe4vNL+ywrvbCKsWVCnEd4riELIg==";
+      };
+    };
+    "split-on-first-1.1.0" = {
+      name = "split-on-first";
+      packageName = "split-on-first";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz";
+        sha512 = "43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==";
+      };
+    };
+    "split2-3.2.2" = {
+      name = "split2";
+      packageName = "split2";
+      version = "3.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz";
+        sha512 = "9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==";
+      };
+    };
+    "split2-4.2.0" = {
+      name = "split2";
+      packageName = "split2";
+      version = "4.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz";
+        sha512 = "UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==";
+      };
+    };
+    "sprintf-js-1.0.3" = {
+      name = "sprintf-js";
+      packageName = "sprintf-js";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz";
+        sha512 = "D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==";
+      };
+    };
+    "sprintf-js-1.1.3" = {
+      name = "sprintf-js";
+      packageName = "sprintf-js";
+      version = "1.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz";
+        sha512 = "Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==";
+      };
+    };
+    "sql.js-1.8.0" = {
+      name = "sql.js";
+      packageName = "sql.js";
+      version = "1.8.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sql.js/-/sql.js-1.8.0.tgz";
+        sha512 = "3HD8pSkZL+5YvYUI8nlvNILs61ALqq34xgmF+BHpqxe68yZIJ1H+sIVIODvni25+CcxHUxDyrTJUL0lE/m7afw==";
+      };
+    };
+    "sqlite3-5.1.6" = {
+      name = "sqlite3";
+      packageName = "sqlite3";
+      version = "5.1.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.6.tgz";
+        sha512 = "olYkWoKFVNSSSQNvxVUfjiVbz3YtBwTJj+mfV5zpHmqW3sELx2Cf4QCdirMelhM5Zh+KDVaKgQHqCxrqiWHybw==";
+      };
+    };
+    "sqlstring-2.3.3" = {
+      name = "sqlstring";
+      packageName = "sqlstring";
+      version = "2.3.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz";
+        sha512 = "qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==";
+      };
+    };
+    "sse-channel-4.0.0" = {
+      name = "sse-channel";
+      packageName = "sse-channel";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sse-channel/-/sse-channel-4.0.0.tgz";
+        sha512 = "I539Tc0gyDTQ2QCSg4v78Flxo/UbqR9x7JoyPcqaPtwo+qzeOw/fF+aPSbk0xTvBQAAAZk7Dlkc8K1bum5GUnw==";
+      };
+    };
+    "ssh2-1.14.0" = {
+      name = "ssh2";
+      packageName = "ssh2";
+      version = "1.14.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ssh2/-/ssh2-1.14.0.tgz";
+        sha512 = "AqzD1UCqit8tbOKoj6ztDDi1ffJZ2rV2SwlgrVVrHPkV5vWqGJOVp5pmtj18PunkPJAuKQsnInyKV+/Nb2bUnA==";
+      };
+    };
+    "ssh2-sftp-client-7.2.3" = {
+      name = "ssh2-sftp-client";
+      packageName = "ssh2-sftp-client";
+      version = "7.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ssh2-sftp-client/-/ssh2-sftp-client-7.2.3.tgz";
+        sha512 = "Bmq4Uewu3e0XOwu5bnPbiS5KRQYv+dff5H6+85V4GZrPrt0Fkt1nUH+uXanyAkoNxUpzjnAPEEoLdOaBO9c3xw==";
+      };
+    };
+    "sshpk-1.17.0" = {
+      name = "sshpk";
+      packageName = "sshpk";
+      version = "1.17.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz";
+        sha512 = "/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==";
+      };
+    };
+    "ssri-8.0.1" = {
+      name = "ssri";
+      packageName = "ssri";
+      version = "8.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz";
+        sha512 = "97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==";
+      };
+    };
+    "stack-trace-0.0.10" = {
+      name = "stack-trace";
+      packageName = "stack-trace";
+      version = "0.0.10";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz";
+        sha512 = "KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==";
+      };
+    };
+    "standard-as-callback-2.1.0" = {
+      name = "standard-as-callback";
+      packageName = "standard-as-callback";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz";
+        sha512 = "qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==";
+      };
+    };
+    "static-eval-2.0.2" = {
+      name = "static-eval";
+      packageName = "static-eval";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/static-eval/-/static-eval-2.0.2.tgz";
+        sha512 = "N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==";
+      };
+    };
+    "statuses-1.5.0" = {
+      name = "statuses";
+      packageName = "statuses";
+      version = "1.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz";
+        sha512 = "OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==";
+      };
+    };
+    "statuses-2.0.1" = {
+      name = "statuses";
+      packageName = "statuses";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz";
+        sha512 = "RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==";
+      };
+    };
+    "stop-iteration-iterator-1.0.0" = {
+      name = "stop-iteration-iterator";
+      packageName = "stop-iteration-iterator";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz";
+        sha512 = "iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==";
+      };
+    };
+    "stoppable-1.1.0" = {
+      name = "stoppable";
+      packageName = "stoppable";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz";
+        sha512 = "KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==";
+      };
+    };
+    "stream-browserify-3.0.0" = {
+      name = "stream-browserify";
+      packageName = "stream-browserify";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz";
+        sha512 = "H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==";
+      };
+    };
+    "stream-events-1.0.5" = {
+      name = "stream-events";
+      packageName = "stream-events";
+      version = "1.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz";
+        sha512 = "E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==";
+      };
+    };
+    "stream-shift-1.0.1" = {
+      name = "stream-shift";
+      packageName = "stream-shift";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz";
+        sha512 = "AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==";
+      };
+    };
+    "streamsearch-1.1.0" = {
+      name = "streamsearch";
+      packageName = "streamsearch";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz";
+        sha512 = "Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==";
+      };
+    };
+    "strict-event-emitter-types-2.0.0" = {
+      name = "strict-event-emitter-types";
+      packageName = "strict-event-emitter-types";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strict-event-emitter-types/-/strict-event-emitter-types-2.0.0.tgz";
+        sha512 = "Nk/brWYpD85WlOgzw5h173aci0Teyv8YdIAEtV+N88nDB0dLlazZyJMIsN6eo1/AR61l+p6CJTG1JIyFaoNEEA==";
+      };
+    };
+    "strict-uri-encode-2.0.0" = {
+      name = "strict-uri-encode";
+      packageName = "strict-uri-encode";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz";
+        sha512 = "QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==";
+      };
+    };
+    "string-similarity-4.0.4" = {
+      name = "string-similarity";
+      packageName = "string-similarity";
+      version = "4.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/string-similarity/-/string-similarity-4.0.4.tgz";
+        sha512 = "/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ==";
+      };
+    };
+    "string-width-4.2.3" = {
+      name = "string-width";
+      packageName = "string-width";
+      version = "4.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz";
+        sha512 = "wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==";
+      };
+    };
+    "string-width-5.1.2" = {
+      name = "string-width";
+      packageName = "string-width";
+      version = "5.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz";
+        sha512 = "HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==";
+      };
+    };
+    "string-width-cjs-4.2.3" = {
+      name = "string-width-cjs";
+      packageName = "string-width-cjs";
+      version = "4.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz";
+        sha512 = "wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==";
+      };
+    };
+    "string.prototype.startswith-1.0.0" = {
+      name = "string.prototype.startswith";
+      packageName = "string.prototype.startswith";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/string.prototype.startswith/-/string.prototype.startswith-1.0.0.tgz";
+        sha512 = "VHhsDkuf8gsw4JNRK9cIZjYe6r7PsVUutVohaBhqYAoPaRADoQH+mMgUg7Cs/TgQeDGEvI+PzPEMOdvdsCMvpg==";
+      };
+    };
+    "string.prototype.trim-1.2.8" = {
+      name = "string.prototype.trim";
+      packageName = "string.prototype.trim";
+      version = "1.2.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz";
+        sha512 = "lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==";
+      };
+    };
+    "string.prototype.trimend-1.0.7" = {
+      name = "string.prototype.trimend";
+      packageName = "string.prototype.trimend";
+      version = "1.0.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz";
+        sha512 = "Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==";
+      };
+    };
+    "string.prototype.trimstart-1.0.7" = {
+      name = "string.prototype.trimstart";
+      packageName = "string.prototype.trimstart";
+      version = "1.0.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz";
+        sha512 = "NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==";
+      };
+    };
+    "string_decoder-0.10.31" = {
+      name = "string_decoder";
+      packageName = "string_decoder";
+      version = "0.10.31";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz";
+        sha512 = "ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==";
+      };
+    };
+    "string_decoder-1.1.1" = {
+      name = "string_decoder";
+      packageName = "string_decoder";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz";
+        sha512 = "n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==";
+      };
+    };
+    "string_decoder-1.3.0" = {
+      name = "string_decoder";
+      packageName = "string_decoder";
+      version = "1.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz";
+        sha512 = "hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==";
+      };
+    };
+    "strip-ansi-6.0.1" = {
+      name = "strip-ansi";
+      packageName = "strip-ansi";
+      version = "6.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz";
+        sha512 = "Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==";
+      };
+    };
+    "strip-ansi-7.1.0" = {
+      name = "strip-ansi";
+      packageName = "strip-ansi";
+      version = "7.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz";
+        sha512 = "iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==";
+      };
+    };
+    "strip-ansi-cjs-6.0.1" = {
+      name = "strip-ansi-cjs";
+      packageName = "strip-ansi-cjs";
+      version = "6.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz";
+        sha512 = "Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==";
+      };
+    };
+    "strip-json-comments-2.0.1" = {
+      name = "strip-json-comments";
+      packageName = "strip-json-comments";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz";
+        sha512 = "4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==";
+      };
+    };
+    "strnum-1.0.5" = {
+      name = "strnum";
+      packageName = "strnum";
+      version = "1.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz";
+        sha512 = "J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==";
+      };
+    };
+    "strtok3-6.3.0" = {
+      name = "strtok3";
+      packageName = "strtok3";
+      version = "6.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strtok3/-/strtok3-6.3.0.tgz";
+        sha512 = "fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==";
+      };
+    };
+    "stubs-3.0.0" = {
+      name = "stubs";
+      packageName = "stubs";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz";
+        sha512 = "PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==";
+      };
+    };
+    "style-mod-4.1.0" = {
+      name = "style-mod";
+      packageName = "style-mod";
+      version = "4.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/style-mod/-/style-mod-4.1.0.tgz";
+        sha512 = "Ca5ib8HrFn+f+0n4N4ScTIA9iTOQ7MaGS1ylHcoVqW9J7w2w8PzN6g9gKmTYgGEBH8e120+RCmhpje6jC5uGWA==";
+      };
+    };
+    "supports-color-7.2.0" = {
+      name = "supports-color";
+      packageName = "supports-color";
+      version = "7.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz";
+        sha512 = "qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==";
+      };
+    };
+    "supports-color-8.1.1" = {
+      name = "supports-color";
+      packageName = "supports-color";
+      version = "8.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz";
+        sha512 = "MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==";
+      };
+    };
+    "supports-hyperlinks-2.3.0" = {
+      name = "supports-hyperlinks";
+      packageName = "supports-hyperlinks";
+      version = "2.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz";
+        sha512 = "RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==";
+      };
+    };
+    "supports-preserve-symlinks-flag-1.0.0" = {
+      name = "supports-preserve-symlinks-flag";
+      packageName = "supports-preserve-symlinks-flag";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz";
+        sha512 = "ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==";
+      };
+    };
+    "swagger-ui-dist-5.6.2" = {
+      name = "swagger-ui-dist";
+      packageName = "swagger-ui-dist";
+      version = "5.6.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.6.2.tgz";
+        sha512 = "2LKVuU2m6RHkemJloKiKJOTpN2RPmbsiad0OfSdtmFHOXJKAgYRZMwJcpT96RX6E9HUB5RkVOFC6vWqVjRgSOg==";
+      };
+    };
+    "swagger-ui-express-4.6.3" = {
+      name = "swagger-ui-express";
+      packageName = "swagger-ui-express";
+      version = "4.6.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/swagger-ui-express/-/swagger-ui-express-4.6.3.tgz";
+        sha512 = "CDje4PndhTD2HkgyKH3pab+LKspDeB/NhPN2OF1j+piYIamQqBYwAXWESOT1Yju2xFg51bRW9sUng2WxDjzArw==";
+      };
+    };
+    "syslog-client-1.1.1" = {
+      name = "syslog-client";
+      packageName = "syslog-client";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/syslog-client/-/syslog-client-1.1.1.tgz";
+        sha512 = "c3qKw8JzCuHt0mwrzKQr8eqOc3RB28HgOpFuwGMO3GLscVpfR+0ECevWLZq/yIJTbx3WTb3QXBFVpTFtKAPDrw==";
+      };
+    };
+    "tapable-2.2.1" = {
+      name = "tapable";
+      packageName = "tapable";
+      version = "2.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz";
+        sha512 = "GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==";
+      };
+    };
+    "tar-6.2.0" = {
+      name = "tar";
+      packageName = "tar";
+      version = "6.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz";
+        sha512 = "/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==";
+      };
+    };
+    "tar-fs-2.1.1" = {
+      name = "tar-fs";
+      packageName = "tar-fs";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz";
+        sha512 = "V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==";
+      };
+    };
+    "tar-stream-2.2.0" = {
+      name = "tar-stream";
+      packageName = "tar-stream";
+      version = "2.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz";
+        sha512 = "ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==";
+      };
+    };
+    "tarn-3.0.2" = {
+      name = "tarn";
+      packageName = "tarn";
+      version = "3.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tarn/-/tarn-3.0.2.tgz";
+        sha512 = "51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==";
+      };
+    };
+    "tdigest-0.1.2" = {
+      name = "tdigest";
+      packageName = "tdigest";
+      version = "0.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tdigest/-/tdigest-0.1.2.tgz";
+        sha512 = "+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA==";
+      };
+    };
+    "tedious-14.7.0" = {
+      name = "tedious";
+      packageName = "tedious";
+      version = "14.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tedious/-/tedious-14.7.0.tgz";
+        sha512 = "d3qlmZcvZyt7akyPHiOdR+knfzObWZH3mW+gouQTSb7YTSwtpHuYHcvsQabfbY7oOvgbs51xRb7CwOahWK/t9w==";
+      };
+    };
+    "tedious-15.1.3" = {
+      name = "tedious";
+      packageName = "tedious";
+      version = "15.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tedious/-/tedious-15.1.3.tgz";
+        sha512 = "166EpRm5qknwhEisjZqz/mF7k14fXKJYHRg6XiAXVovd/YkyHJ3SG4Ppy89caPaNFfRr7PVYe+s4dAvKaCMFvw==";
+      };
+    };
+    "teeny-request-7.2.0" = {
+      name = "teeny-request";
+      packageName = "teeny-request";
+      version = "7.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/teeny-request/-/teeny-request-7.2.0.tgz";
+        sha512 = "SyY0pek1zWsi0LRVAALem+avzMLc33MKW/JLLakdP4s9+D7+jHcy5x6P+h94g2QNZsAqQNfX5lsbd3WSeJXrrw==";
+      };
+    };
+    "teeny-request-8.0.3" = {
+      name = "teeny-request";
+      packageName = "teeny-request";
+      version = "8.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/teeny-request/-/teeny-request-8.0.3.tgz";
+        sha512 = "jJZpA5He2y52yUhA7pyAGZlgQpcB+xLjcN0eUFxr9c8hP/H7uOXbBNVo/O0C/xVfJLJs680jvkFgVJEEvk9+ww==";
+      };
+    };
+    "terser-5.19.4" = {
+      name = "terser";
+      packageName = "terser";
+      version = "5.19.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/terser/-/terser-5.19.4.tgz";
+        sha512 = "6p1DjHeuluwxDXcuT9VR8p64klWJKo1ILiy19s6C9+0Bh2+NWTX6nD9EPppiER4ICkHDVB1RkVpin/YW2nQn/g==";
+      };
+    };
+    "terser-webpack-plugin-5.3.9" = {
+      name = "terser-webpack-plugin";
+      packageName = "terser-webpack-plugin";
+      version = "5.3.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz";
+        sha512 = "ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==";
+      };
+    };
+    "text-hex-1.0.0" = {
+      name = "text-hex";
+      packageName = "text-hex";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz";
+        sha512 = "uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==";
+      };
+    };
+    "thenify-3.3.1" = {
+      name = "thenify";
+      packageName = "thenify";
+      version = "3.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz";
+        sha512 = "RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==";
+      };
+    };
+    "thenify-all-1.6.0" = {
+      name = "thenify-all";
+      packageName = "thenify-all";
+      version = "1.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz";
+        sha512 = "RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==";
+      };
+    };
+    "through-2.3.8" = {
+      name = "through";
+      packageName = "through";
+      version = "2.3.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/through/-/through-2.3.8.tgz";
+        sha512 = "w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==";
+      };
+    };
+    "through2-2.0.5" = {
+      name = "through2";
+      packageName = "through2";
+      version = "2.0.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz";
+        sha512 = "/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==";
+      };
+    };
+    "through2-4.0.2" = {
+      name = "through2";
+      packageName = "through2";
+      version = "4.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz";
+        sha512 = "iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==";
+      };
+    };
+    "timeago.js-4.0.2" = {
+      name = "timeago.js";
+      packageName = "timeago.js";
+      version = "4.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/timeago.js/-/timeago.js-4.0.2.tgz";
+        sha512 = "a7wPxPdVlQL7lqvitHGGRsofhdwtkoSXPGATFuSOA2i1ZNQEPLrGnj68vOp2sOJTCFAQVXPeNMX/GctBaO9L2w==";
+      };
+    };
+    "title-case-3.0.3" = {
+      name = "title-case";
+      packageName = "title-case";
+      version = "3.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/title-case/-/title-case-3.0.3.tgz";
+        sha512 = "e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==";
+      };
+    };
+    "tlds-1.240.0" = {
+      name = "tlds";
+      packageName = "tlds";
+      version = "1.240.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tlds/-/tlds-1.240.0.tgz";
+        sha512 = "1OYJQenswGZSOdRw7Bql5Qu7uf75b+F3HFBXbqnG/ifHa0fev1XcG+3pJf3pA/KC6RtHQzfKgIf1vkMlMG7mtQ==";
+      };
+    };
+    "tmp-0.0.33" = {
+      name = "tmp";
+      packageName = "tmp";
+      version = "0.0.33";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz";
+        sha512 = "jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==";
+      };
+    };
+    "tmp-0.2.1" = {
+      name = "tmp";
+      packageName = "tmp";
+      version = "0.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz";
+        sha512 = "76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==";
+      };
+    };
+    "tmp-promise-3.0.3" = {
+      name = "tmp-promise";
+      packageName = "tmp-promise";
+      version = "3.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz";
+        sha512 = "RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==";
+      };
+    };
+    "to-regex-range-5.0.1" = {
+      name = "to-regex-range";
+      packageName = "to-regex-range";
+      version = "5.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz";
+        sha512 = "65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==";
+      };
+    };
+    "toggle-selection-1.0.6" = {
+      name = "toggle-selection";
+      packageName = "toggle-selection";
+      version = "1.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz";
+        sha512 = "BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==";
+      };
+    };
+    "toidentifier-1.0.1" = {
+      name = "toidentifier";
+      packageName = "toidentifier";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz";
+        sha512 = "o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==";
+      };
+    };
+    "token-types-4.2.1" = {
+      name = "token-types";
+      packageName = "token-types";
+      version = "4.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/token-types/-/token-types-4.2.1.tgz";
+        sha512 = "6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==";
+      };
+    };
+    "toposort-2.0.2" = {
+      name = "toposort";
+      packageName = "toposort";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz";
+        sha512 = "0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==";
+      };
+    };
+    "tr46-0.0.3" = {
+      name = "tr46";
+      packageName = "tr46";
+      version = "0.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz";
+        sha512 = "N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==";
+      };
+    };
+    "tr46-3.0.0" = {
+      name = "tr46";
+      packageName = "tr46";
+      version = "3.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz";
+        sha512 = "l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==";
+      };
+    };
+    "transliteration-2.3.5" = {
+      name = "transliteration";
+      packageName = "transliteration";
+      version = "2.3.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/transliteration/-/transliteration-2.3.5.tgz";
+        sha512 = "HAGI4Lq4Q9dZ3Utu2phaWgtm3vB6PkLUFqWAScg/UW+1eZ/Tg6Exo4oC0/3VUol/w4BlefLhUUSVBr/9/ZGQOw==";
+      };
+    };
+    "triple-beam-1.4.1" = {
+      name = "triple-beam";
+      packageName = "triple-beam";
+      version = "1.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz";
+        sha512 = "aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==";
+      };
+    };
+    "ts-node-10.9.1" = {
+      name = "ts-node";
+      packageName = "ts-node";
+      version = "10.9.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz";
+        sha512 = "NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==";
+      };
+    };
+    "tslib-1.14.1" = {
+      name = "tslib";
+      packageName = "tslib";
+      version = "1.14.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz";
+        sha512 = "Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==";
+      };
+    };
+    "tslib-2.6.2" = {
+      name = "tslib";
+      packageName = "tslib";
+      version = "2.6.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz";
+        sha512 = "AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==";
+      };
+    };
+    "tsscmp-1.0.6" = {
+      name = "tsscmp";
+      packageName = "tsscmp";
+      version = "1.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz";
+        sha512 = "LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==";
+      };
+    };
+    "tunnel-0.0.6" = {
+      name = "tunnel";
+      packageName = "tunnel";
+      version = "0.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz";
+        sha512 = "1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==";
+      };
+    };
+    "tunnel-agent-0.6.0" = {
+      name = "tunnel-agent";
+      packageName = "tunnel-agent";
+      version = "0.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz";
+        sha512 = "McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==";
+      };
+    };
+    "tweetnacl-0.14.5" = {
+      name = "tweetnacl";
+      packageName = "tweetnacl";
+      version = "0.14.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz";
+        sha512 = "KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==";
+      };
+    };
+    "tweetnacl-1.0.3" = {
+      name = "tweetnacl";
+      packageName = "tweetnacl";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz";
+        sha512 = "6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==";
+      };
+    };
+    "tweetnacl-util-0.15.1" = {
+      name = "tweetnacl-util";
+      packageName = "tweetnacl-util";
+      version = "0.15.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz";
+        sha512 = "RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==";
+      };
+    };
+    "type-check-0.3.2" = {
+      name = "type-check";
+      packageName = "type-check";
+      version = "0.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz";
+        sha512 = "ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==";
+      };
+    };
+    "type-fest-0.21.3" = {
+      name = "type-fest";
+      packageName = "type-fest";
+      version = "0.21.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz";
+        sha512 = "t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==";
+      };
+    };
+    "type-is-1.6.18" = {
+      name = "type-is";
+      packageName = "type-is";
+      version = "1.6.18";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz";
+        sha512 = "TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==";
+      };
+    };
+    "typed-array-buffer-1.0.0" = {
+      name = "typed-array-buffer";
+      packageName = "typed-array-buffer";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz";
+        sha512 = "Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==";
+      };
+    };
+    "typed-array-byte-length-1.0.0" = {
+      name = "typed-array-byte-length";
+      packageName = "typed-array-byte-length";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz";
+        sha512 = "Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==";
+      };
+    };
+    "typed-array-byte-offset-1.0.0" = {
+      name = "typed-array-byte-offset";
+      packageName = "typed-array-byte-offset";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz";
+        sha512 = "RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==";
+      };
+    };
+    "typed-array-length-1.0.4" = {
+      name = "typed-array-length";
+      packageName = "typed-array-length";
+      version = "1.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz";
+        sha512 = "KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==";
+      };
+    };
+    "typedarray-0.0.6" = {
+      name = "typedarray";
+      packageName = "typedarray";
+      version = "0.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz";
+        sha512 = "/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==";
+      };
+    };
+    "typedi-0.10.0" = {
+      name = "typedi";
+      packageName = "typedi";
+      version = "0.10.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/typedi/-/typedi-0.10.0.tgz";
+        sha512 = "v3UJF8xm68BBj6AF4oQML3ikrfK2c9EmZUyLOfShpJuItAqVBHWP/KtpGinkSsIiP6EZyyb6Z3NXyW9dgS9X1w==";
+      };
+    };
+    "typeorm-0.3.17" = {
+      name = "typeorm";
+      packageName = "typeorm";
+      version = "0.3.17";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/typeorm/-/typeorm-0.3.17.tgz";
+        sha512 = "UDjUEwIQalO9tWw9O2A4GU+sT3oyoUXheHJy4ft+RFdnRdQctdQ34L9SqE2p7LdwzafHx1maxT+bqXON+Qnmig==";
+      };
+    };
+    "typeorm-aurora-data-api-driver-2.4.4" = {
+      name = "typeorm-aurora-data-api-driver";
+      packageName = "typeorm-aurora-data-api-driver";
+      version = "2.4.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/typeorm-aurora-data-api-driver/-/typeorm-aurora-data-api-driver-2.4.4.tgz";
+        sha512 = "EqrdoXr0FbUrAMmkNQQuPwlhUGM7SJnpwUlWTWNlK2mOhOUyM+33fhm1f1hz3nnJJV8fTxzS3kTDq6pkVASLAw==";
+      };
+    };
+    "typescript-5.2.2" = {
+      name = "typescript";
+      packageName = "typescript";
+      version = "5.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz";
+        sha512 = "mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==";
+      };
+    };
+    "uc.micro-1.0.6" = {
+      name = "uc.micro";
+      packageName = "uc.micro";
+      version = "1.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz";
+        sha512 = "8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==";
+      };
+    };
+    "uid-safe-2.1.5" = {
+      name = "uid-safe";
+      packageName = "uid-safe";
+      version = "2.1.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz";
+        sha512 = "KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==";
+      };
+    };
+    "unbox-primitive-1.0.2" = {
+      name = "unbox-primitive";
+      packageName = "unbox-primitive";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz";
+        sha512 = "61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==";
+      };
+    };
+    "underscore-1.12.1" = {
+      name = "underscore";
+      packageName = "underscore";
+      version = "1.12.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz";
+        sha512 = "hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==";
+      };
+    };
+    "undici-5.24.0" = {
+      name = "undici";
+      packageName = "undici";
+      version = "5.24.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/undici/-/undici-5.24.0.tgz";
+        sha512 = "OKlckxBjFl0oXxcj9FU6oB8fDAaiRUq+D8jrFWGmOfI/gIyjk/IeS75LMzgYKUaeHzLUcYvf9bbJGSrUwTfwwQ==";
+      };
+    };
+    "unescape-1.0.1" = {
+      name = "unescape";
+      packageName = "unescape";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/unescape/-/unescape-1.0.1.tgz";
+        sha512 = "O0+af1Gs50lyH1nUu3ZyYS1cRh01Q/kUKatTOkSs7jukXE6/NebucDVxyiDsA9AQ4JC1V1jUH9EO8JX2nMDgGQ==";
+      };
+    };
+    "unique-filename-1.1.1" = {
+      name = "unique-filename";
+      packageName = "unique-filename";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz";
+        sha512 = "Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==";
+      };
+    };
+    "unique-slug-2.0.2" = {
+      name = "unique-slug";
+      packageName = "unique-slug";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz";
+        sha512 = "zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==";
+      };
+    };
+    "universalify-0.1.2" = {
+      name = "universalify";
+      packageName = "universalify";
+      version = "0.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz";
+        sha512 = "rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==";
+      };
+    };
+    "universalify-2.0.0" = {
+      name = "universalify";
+      packageName = "universalify";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz";
+        sha512 = "hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==";
+      };
+    };
+    "unpipe-1.0.0" = {
+      name = "unpipe";
+      packageName = "unpipe";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz";
+        sha512 = "pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==";
+      };
+    };
+    "update-browserslist-db-1.0.11" = {
+      name = "update-browserslist-db";
+      packageName = "update-browserslist-db";
+      version = "1.0.11";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz";
+        sha512 = "dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==";
+      };
+    };
+    "upper-case-2.0.2" = {
+      name = "upper-case";
+      packageName = "upper-case";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz";
+        sha512 = "KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==";
+      };
+    };
+    "upper-case-first-2.0.2" = {
+      name = "upper-case-first";
+      packageName = "upper-case-first";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz";
+        sha512 = "514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==";
+      };
+    };
+    "uri-js-4.4.1" = {
+      name = "uri-js";
+      packageName = "uri-js";
+      version = "4.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz";
+        sha512 = "7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==";
+      };
+    };
+    "url-0.10.3" = {
+      name = "url";
+      packageName = "url";
+      version = "0.10.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/url/-/url-0.10.3.tgz";
+        sha512 = "hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==";
+      };
+    };
+    "url-parse-1.5.10" = {
+      name = "url-parse";
+      packageName = "url-parse";
+      version = "1.5.10";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz";
+        sha512 = "WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==";
+      };
+    };
+    "url-value-parser-2.2.0" = {
+      name = "url-value-parser";
+      packageName = "url-value-parser";
+      version = "2.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/url-value-parser/-/url-value-parser-2.2.0.tgz";
+        sha512 = "yIQdxJpgkPamPPAPuGdS7Q548rLhny42tg8d4vyTNzFqvOnwqrgHXvgehT09U7fwrzxi3RxCiXjoNUNnNOlQ8A==";
+      };
+    };
+    "urllib-2.41.0" = {
+      name = "urllib";
+      packageName = "urllib";
+      version = "2.41.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/urllib/-/urllib-2.41.0.tgz";
+        sha512 = "pNXdxEv52L67jahLT+/7QE+Fup1y2Gc6EdmrAhQ6OpQIC2rl14oWwv9hvk1GXOZqEnJNwRXHABuwgPOs1CtL7g==";
+      };
+    };
+    "utf-8-validate-5.0.10" = {
+      name = "utf-8-validate";
+      packageName = "utf-8-validate";
+      version = "5.0.10";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz";
+        sha512 = "Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==";
+      };
+    };
+    "utf7-1.0.2" = {
+      name = "utf7";
+      packageName = "utf7";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/utf7/-/utf7-1.0.2.tgz";
+        sha512 = "qQrPtYLLLl12NF4DrM9CvfkxkYI97xOb5dsnGZHE3teFr0tWiEZ9UdgMPczv24vl708cYMpe6mGXGHrotIp3Bw==";
+      };
+    };
+    "utf8-2.1.2" = {
+      name = "utf8";
+      packageName = "utf8";
+      version = "2.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/utf8/-/utf8-2.1.2.tgz";
+        sha512 = "QXo+O/QkLP/x1nyi54uQiG0XrODxdysuQvE5dtVqv7F5K2Qb6FsN+qbr6KhF5wQ20tfcV3VQp0/2x1e1MRSPWg==";
+      };
+    };
+    "util-0.12.5" = {
+      name = "util";
+      packageName = "util";
+      version = "0.12.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/util/-/util-0.12.5.tgz";
+        sha512 = "kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==";
+      };
+    };
+    "util-deprecate-1.0.2" = {
+      name = "util-deprecate";
+      packageName = "util-deprecate";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz";
+        sha512 = "EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==";
+      };
+    };
+    "util.promisify-1.1.2" = {
+      name = "util.promisify";
+      packageName = "util.promisify";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/util.promisify/-/util.promisify-1.1.2.tgz";
+        sha512 = "PBdZ03m1kBnQ5cjjO0ZvJMJS+QsbyIcFwi4hY4U76OQsCO9JrOYjbCFgIF76ccFg9xnJo7ZHPkqyj1GqmdS7MA==";
+      };
+    };
+    "utility-1.18.0" = {
+      name = "utility";
+      packageName = "utility";
+      version = "1.18.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/utility/-/utility-1.18.0.tgz";
+        sha512 = "PYxZDA+6QtvRvm//++aGdmKG/cI07jNwbROz0Ql+VzFV1+Z0Dy55NI4zZ7RHc9KKpBePNFwoErqIuqQv/cjiTA==";
+      };
+    };
+    "utils-merge-1.0.1" = {
+      name = "utils-merge";
+      packageName = "utils-merge";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz";
+        sha512 = "pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==";
+      };
+    };
+    "uuencode-0.0.4" = {
+      name = "uuencode";
+      packageName = "uuencode";
+      version = "0.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/uuencode/-/uuencode-0.0.4.tgz";
+        sha512 = "yEEhCuCi5wRV7Z5ZVf9iV2gWMvUZqKJhAs1ecFdKJ0qzbyaVelmsE3QjYAamehfp9FKLiZbKldd+jklG3O0LfA==";
+      };
+    };
+    "uuid-3.4.0" = {
+      name = "uuid";
+      packageName = "uuid";
+      version = "3.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz";
+        sha512 = "HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==";
+      };
+    };
+    "uuid-8.0.0" = {
+      name = "uuid";
+      packageName = "uuid";
+      version = "8.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz";
+        sha512 = "jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==";
+      };
+    };
+    "uuid-8.3.2" = {
+      name = "uuid";
+      packageName = "uuid";
+      version = "8.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz";
+        sha512 = "+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==";
+      };
+    };
+    "uuid-9.0.0" = {
+      name = "uuid";
+      packageName = "uuid";
+      version = "9.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz";
+        sha512 = "MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==";
+      };
+    };
+    "v3-infinite-loading-1.3.1" = {
+      name = "v3-infinite-loading";
+      packageName = "v3-infinite-loading";
+      version = "1.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/v3-infinite-loading/-/v3-infinite-loading-1.3.1.tgz";
+        sha512 = "Yi/STWDo+jasQSd8sBCta2u5/C75eLWdTyqkUPOcCEWYFzzw0DddYrDfvjB2IEbcvFxNiA4ljBpNLcRLVe2adA==";
+      };
+    };
+    "v8-compile-cache-lib-3.0.1" = {
+      name = "v8-compile-cache-lib";
+      packageName = "v8-compile-cache-lib";
+      version = "3.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz";
+        sha512 = "wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==";
+      };
+    };
+    "validator-13.7.0" = {
+      name = "validator";
+      packageName = "validator";
+      version = "13.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz";
+        sha512 = "nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==";
+      };
+    };
+    "vary-1.1.2" = {
+      name = "vary";
+      packageName = "vary";
+      version = "1.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz";
+        sha512 = "BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==";
+      };
+    };
+    "vm2-3.9.19" = {
+      name = "vm2";
+      packageName = "vm2";
+      version = "3.9.19";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vm2/-/vm2-3.9.19.tgz";
+        sha512 = "J637XF0DHDMV57R6JyVsTak7nIL8gy5KH4r1HiwWLf/4GBbb5MKL5y7LpmF4A8E2nR6XmzpmMFQ7V7ppPTmUQg==";
+      };
+    };
+    "vue-2.6.14" = {
+      name = "vue";
+      packageName = "vue";
+      version = "2.6.14";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vue/-/vue-2.6.14.tgz";
+        sha512 = "x2284lgYvjOMj3Za7kqzRcUSxBboHqtgRE2zlos1qWaOye5yUmHn42LB1250NJBLRwEcdrB0JRwyPTEPhfQjiQ==";
+      };
+    };
+    "vue-2.7.14" = {
+      name = "vue";
+      packageName = "vue";
+      version = "2.7.14";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vue/-/vue-2.7.14.tgz";
+        sha512 = "b2qkFyOM0kwqWFuQmgd4o+uHGU7T+2z3T+WQp8UBjADfEv2n4FEMffzBmCKNP0IGzOEEfYjvtcC62xaSKeQDrQ==";
+      };
+    };
+    "vue-3.3.4" = {
+      name = "vue";
+      packageName = "vue";
+      version = "3.3.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vue/-/vue-3.3.4.tgz";
+        sha512 = "VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==";
+      };
+    };
+    "vue-agile-2.0.0" = {
+      name = "vue-agile";
+      packageName = "vue-agile";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vue-agile/-/vue-agile-2.0.0.tgz";
+        sha512 = "5xkSLJQNRdQ7qpEnXj5FgLg33XKRHaTZKGP5qkvteOc/uGJX89MYCjPSgdNqJ1GYFGfdGAp0jvhihW8OMuXS3g==";
+      };
+    };
+    "vue-boring-avatars-1.3.0" = {
+      name = "vue-boring-avatars";
+      packageName = "vue-boring-avatars";
+      version = "1.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vue-boring-avatars/-/vue-boring-avatars-1.3.0.tgz";
+        sha512 = "X0Ur6+aYE8jXjKyY/LaWKrZ+FeJmc4xsirdz/lLuvm68wiokJc26Y9WpYPDuS1L2GwbvRDqLrnd9F2eL46buzA==";
+      };
+    };
+    "vue-demi-0.14.6" = {
+      name = "vue-demi";
+      packageName = "vue-demi";
+      version = "0.14.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz";
+        sha512 = "8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==";
+      };
+    };
+    "vue-i18n-9.4.0" = {
+      name = "vue-i18n";
+      packageName = "vue-i18n";
+      version = "9.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.4.0.tgz";
+        sha512 = "701V7wv6m/Fesbu58rRJv9Rd3en/9F7Nxyn/NiwcR7bJkEfwflMJg5wVezkeHy1tIqjXME1e1zbHhK1dNaR8mg==";
+      };
+    };
+    "vue-json-pretty-2.2.4" = {
+      name = "vue-json-pretty";
+      packageName = "vue-json-pretty";
+      version = "2.2.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vue-json-pretty/-/vue-json-pretty-2.2.4.tgz";
+        sha512 = "JX80b3QDrspcH43C53CdtYeq/froApQGSV5y43bEMWFj2LGOxB96aH1VmvrFA21nD1WTP6nwfFMQqGXuS4jyFQ==";
+      };
+    };
+    "vue-router-4.2.4" = {
+      name = "vue-router";
+      packageName = "vue-router";
+      version = "4.2.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vue-router/-/vue-router-4.2.4.tgz";
+        sha512 = "9PISkmaCO02OzPVOMq2w82ilty6+xJmQrarYZDkjZBfl4RvYAlt4PKnEX21oW4KTtWfa9OuO/b3qk1Od3AEdCQ==";
+      };
+    };
+    "vue3-touch-events-4.1.3" = {
+      name = "vue3-touch-events";
+      packageName = "vue3-touch-events";
+      version = "4.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/vue3-touch-events/-/vue3-touch-events-4.1.3.tgz";
+        sha512 = "uXTclRzn7de1mgiDIZ8N4J/wnWl1vBPLTWr60fqoLXu7ifhDKpl83Q2m9qA20KfEiAy+L4X/xXGc5ptGmdPh4A==";
+      };
+    };
+    "w3c-keyname-2.2.8" = {
+      name = "w3c-keyname";
+      packageName = "w3c-keyname";
+      version = "2.2.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz";
+        sha512 = "dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==";
+      };
+    };
+    "watchpack-2.4.0" = {
+      name = "watchpack";
+      packageName = "watchpack";
+      version = "2.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz";
+        sha512 = "Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==";
+      };
+    };
+    "web-streams-polyfill-3.2.1" = {
+      name = "web-streams-polyfill";
+      packageName = "web-streams-polyfill";
+      version = "3.2.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz";
+        sha512 = "e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==";
+      };
+    };
+    "webidl-conversions-3.0.1" = {
+      name = "webidl-conversions";
+      packageName = "webidl-conversions";
+      version = "3.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz";
+        sha512 = "2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==";
+      };
+    };
+    "webidl-conversions-7.0.0" = {
+      name = "webidl-conversions";
+      packageName = "webidl-conversions";
+      version = "7.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz";
+        sha512 = "VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==";
+      };
+    };
+    "webpack-5.88.2" = {
+      name = "webpack";
+      packageName = "webpack";
+      version = "5.88.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz";
+        sha512 = "JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==";
+      };
+    };
+    "webpack-sources-3.2.3" = {
+      name = "webpack-sources";
+      packageName = "webpack-sources";
+      version = "3.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz";
+        sha512 = "/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==";
+      };
+    };
+    "whatwg-url-11.0.0" = {
+      name = "whatwg-url";
+      packageName = "whatwg-url";
+      version = "11.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz";
+        sha512 = "RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==";
+      };
+    };
+    "whatwg-url-5.0.0" = {
+      name = "whatwg-url";
+      packageName = "whatwg-url";
+      version = "5.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz";
+        sha512 = "saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==";
+      };
+    };
+    "which-1.3.1" = {
+      name = "which";
+      packageName = "which";
+      version = "1.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/which/-/which-1.3.1.tgz";
+        sha512 = "HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==";
+      };
+    };
+    "which-2.0.2" = {
+      name = "which";
+      packageName = "which";
+      version = "2.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/which/-/which-2.0.2.tgz";
+        sha512 = "BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==";
+      };
+    };
+    "which-boxed-primitive-1.0.2" = {
+      name = "which-boxed-primitive";
+      packageName = "which-boxed-primitive";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz";
+        sha512 = "bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==";
+      };
+    };
+    "which-collection-1.0.1" = {
+      name = "which-collection";
+      packageName = "which-collection";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz";
+        sha512 = "W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==";
+      };
+    };
+    "which-typed-array-1.1.11" = {
+      name = "which-typed-array";
+      packageName = "which-typed-array";
+      version = "1.1.11";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz";
+        sha512 = "qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==";
+      };
+    };
+    "wide-align-1.1.5" = {
+      name = "wide-align";
+      packageName = "wide-align";
+      version = "1.1.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz";
+        sha512 = "eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==";
+      };
+    };
+    "widest-line-3.1.0" = {
+      name = "widest-line";
+      packageName = "widest-line";
+      version = "3.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz";
+        sha512 = "NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==";
+      };
+    };
+    "win-release-1.1.1" = {
+      name = "win-release";
+      packageName = "win-release";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/win-release/-/win-release-1.1.1.tgz";
+        sha512 = "iCRnKVvGxOQdsKhcQId2PXV1vV3J/sDPXKA4Oe9+Eti2nb2ESEsYHRYls/UjoUW3bIc5ZDO8dTH50A/5iVN+bw==";
+      };
+    };
+    "winston-3.10.0" = {
+      name = "winston";
+      packageName = "winston";
+      version = "3.10.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/winston/-/winston-3.10.0.tgz";
+        sha512 = "nT6SIDaE9B7ZRO0u3UvdrimG0HkB7dSTAgInQnNR2SOPJ4bvq5q79+pXLftKmP52lJGW15+H5MCK0nM9D3KB/g==";
+      };
+    };
+    "winston-transport-4.5.0" = {
+      name = "winston-transport";
+      packageName = "winston-transport";
+      version = "4.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz";
+        sha512 = "YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==";
+      };
+    };
+    "word-wrap-1.2.5" = {
+      name = "word-wrap";
+      packageName = "word-wrap";
+      version = "1.2.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz";
+        sha512 = "BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==";
+      };
+    };
+    "wordwrap-1.0.0" = {
+      name = "wordwrap";
+      packageName = "wordwrap";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz";
+        sha512 = "gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==";
+      };
+    };
+    "worker-loader-3.0.8" = {
+      name = "worker-loader";
+      packageName = "worker-loader";
+      version = "3.0.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/worker-loader/-/worker-loader-3.0.8.tgz";
+        sha512 = "XQyQkIFeRVC7f7uRhFdNMe/iJOdO6zxAaR3EWbDp45v3mDhrTi+++oswKNxShUNjPC/1xUp5DB29YKLhFo129g==";
+      };
+    };
+    "wrap-ansi-6.2.0" = {
+      name = "wrap-ansi";
+      packageName = "wrap-ansi";
+      version = "6.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz";
+        sha512 = "r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==";
+      };
+    };
+    "wrap-ansi-7.0.0" = {
+      name = "wrap-ansi";
+      packageName = "wrap-ansi";
+      version = "7.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz";
+        sha512 = "YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==";
+      };
+    };
+    "wrap-ansi-8.1.0" = {
+      name = "wrap-ansi";
+      packageName = "wrap-ansi";
+      version = "8.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz";
+        sha512 = "si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==";
+      };
+    };
+    "wrap-ansi-cjs-7.0.0" = {
+      name = "wrap-ansi-cjs";
+      packageName = "wrap-ansi-cjs";
+      version = "7.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz";
+        sha512 = "YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==";
+      };
+    };
+    "wrappy-1.0.2" = {
+      name = "wrappy";
+      packageName = "wrappy";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz";
+        sha512 = "l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==";
+      };
+    };
+    "ws-7.5.9" = {
+      name = "ws";
+      packageName = "ws";
+      version = "7.5.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz";
+        sha512 = "F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==";
+      };
+    };
+    "ws-8.14.1" = {
+      name = "ws";
+      packageName = "ws";
+      version = "8.14.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ws/-/ws-8.14.1.tgz";
+        sha512 = "4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==";
+      };
+    };
+    "xlsx-https://cdn.sheetjs.com/xlsx-0.19.3/xlsx-0.19.3.tgz" = {
+      name = "xlsx";
+      packageName = "xlsx";
+      version = "0.19.3";
+      src = fetchurl {
+        name = "xlsx-0.19.3.tar.gz";
+        url = "https://cdn.sheetjs.com/xlsx-0.19.3/xlsx-0.19.3.tgz";
+        sha256 = "1705b76a0a18e86f71d133a204bd9c21fafd626c742dd5655647da40e6dceb13";
+      };
+    };
+    "xml-1.0.1" = {
+      name = "xml";
+      packageName = "xml";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz";
+        sha512 = "huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==";
+      };
+    };
+    "xml-crypto-3.2.0" = {
+      name = "xml-crypto";
+      packageName = "xml-crypto";
+      version = "3.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/xml-crypto/-/xml-crypto-3.2.0.tgz";
+        sha512 = "qVurBUOQrmvlgmZqIVBqmb06TD2a/PpEUfFPgD7BuBfjmoH4zgkqaWSIJrnymlCvM2GGt9x+XtJFA+ttoAufqg==";
+      };
+    };
+    "xml2js-0.5.0" = {
+      name = "xml2js";
+      packageName = "xml2js";
+      version = "0.5.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz";
+        sha512 = "drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==";
+      };
+    };
+    "xmlbuilder-11.0.1" = {
+      name = "xmlbuilder";
+      packageName = "xmlbuilder";
+      version = "11.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz";
+        sha512 = "fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==";
+      };
+    };
+    "xmllint-wasm-3.0.1" = {
+      name = "xmllint-wasm";
+      packageName = "xmllint-wasm";
+      version = "3.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/xmllint-wasm/-/xmllint-wasm-3.0.1.tgz";
+        sha512 = "t+aKQXJQNAt9/qLgCjhHUmCnPXAyqBKiyh8oV0ZwBMar/uB+5F40tqOJZ97JwLADcqQr5WB2bjCxLKrm+DHz1g==";
+      };
+    };
+    "xpath-0.0.32" = {
+      name = "xpath";
+      packageName = "xpath";
+      version = "0.0.32";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/xpath/-/xpath-0.0.32.tgz";
+        sha512 = "rxMJhSIoiO8vXcWvSifKqhvV96GjiD5wYb8/QHdoRyQvraTpp4IEv944nhGausZZ3u7dhQXteZuZbaqfpB7uYw==";
+      };
+    };
+    "xregexp-2.0.0" = {
+      name = "xregexp";
+      packageName = "xregexp";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz";
+        sha512 = "xl/50/Cf32VsGq/1R8jJE5ajH1yMCQkpmoS10QbFZWl2Oor4H0Me64Pu2yxvsRWK3m6soJbmGfzSR7BYmDcWAA==";
+      };
+    };
+    "xss-1.0.14" = {
+      name = "xss";
+      packageName = "xss";
+      version = "1.0.14";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/xss/-/xss-1.0.14.tgz";
+        sha512 = "og7TEJhXvn1a7kzZGQ7ETjdQVS2UfZyTlsEdDOqvQF7GoxNfY+0YLCzBy1kPdsDDx4QuNAonQPddpsn6Xl/7sw==";
+      };
+    };
+    "xtend-4.0.2" = {
+      name = "xtend";
+      packageName = "xtend";
+      version = "4.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz";
+        sha512 = "LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==";
+      };
+    };
+    "y18n-5.0.8" = {
+      name = "y18n";
+      packageName = "y18n";
+      version = "5.0.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz";
+        sha512 = "0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==";
+      };
+    };
+    "yallist-2.1.2" = {
+      name = "yallist";
+      packageName = "yallist";
+      version = "2.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz";
+        sha512 = "ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==";
+      };
+    };
+    "yallist-3.1.1" = {
+      name = "yallist";
+      packageName = "yallist";
+      version = "3.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz";
+        sha512 = "a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==";
+      };
+    };
+    "yallist-4.0.0" = {
+      name = "yallist";
+      packageName = "yallist";
+      version = "4.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz";
+        sha512 = "3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==";
+      };
+    };
+    "yamljs-0.3.0" = {
+      name = "yamljs";
+      packageName = "yamljs";
+      version = "0.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/yamljs/-/yamljs-0.3.0.tgz";
+        sha512 = "C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ==";
+      };
+    };
+    "yargs-16.2.0" = {
+      name = "yargs";
+      packageName = "yargs";
+      version = "16.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz";
+        sha512 = "D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==";
+      };
+    };
+    "yargs-17.1.1" = {
+      name = "yargs";
+      packageName = "yargs";
+      version = "17.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/yargs/-/yargs-17.1.1.tgz";
+        sha512 = "c2k48R0PwKIqKhPMWjeiF6y2xY/gPMUlro0sgxqXpbOIohWiLNXWslsootttv7E1e73QPAMQSg5FeySbVcpsPQ==";
+      };
+    };
+    "yargs-17.7.2" = {
+      name = "yargs";
+      packageName = "yargs";
+      version = "17.7.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz";
+        sha512 = "7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==";
+      };
+    };
+    "yargs-parser-20.2.9" = {
+      name = "yargs-parser";
+      packageName = "yargs-parser";
+      version = "20.2.9";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz";
+        sha512 = "y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==";
+      };
+    };
+    "yargs-parser-21.1.1" = {
+      name = "yargs-parser";
+      packageName = "yargs-parser";
+      version = "21.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz";
+        sha512 = "tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==";
+      };
+    };
+    "yn-3.1.1" = {
+      name = "yn";
+      packageName = "yn";
+      version = "3.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz";
+        sha512 = "Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==";
+      };
+    };
+    "yocto-queue-0.1.0" = {
+      name = "yocto-queue";
+      packageName = "yocto-queue";
+      version = "0.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz";
+        sha512 = "rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==";
+      };
+    };
+    "yup-0.32.11" = {
+      name = "yup";
+      packageName = "yup";
+      version = "0.32.11";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/yup/-/yup-0.32.11.tgz";
+        sha512 = "Z2Fe1bn+eLstG8DRR6FTavGD+MeAwyfmouhHsIUgaADz8jvFKbO/fXc2trJKZg+5EBjh4gGm3iU/t3onKlXHIg==";
+      };
+    };
+  };
+in
+{
+  n8n = nodeEnv.buildNodePackage {
+    name = "n8n";
+    packageName = "n8n";
+    version = "1.5.1";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/n8n/-/n8n-1.5.1.tgz";
+      sha512 = "KrrT4HhyIJfROBLUwMm1bdvk2M/YPBd+rUCdkXMfVud8mHKcMfykT80+OtRwD76OJJR70/ImF2M+NNk2HWl9tQ==";
+    };
+    dependencies = [
+      (sources."@acuminous/bitsyntax-0.1.2" // {
+        dependencies = [
+          sources."safe-buffer-5.1.2"
+        ];
+      })
+      (sources."@apidevtools/json-schema-ref-parser-9.0.9" // {
+        dependencies = [
+          sources."argparse-2.0.1"
+          sources."js-yaml-4.1.0"
+        ];
+      })
+      sources."@authenio/xml-encryption-2.0.2"
+      (sources."@aws-crypto/crc32-3.0.0" // {
+        dependencies = [
+          sources."tslib-1.14.1"
+        ];
+      })
+      (sources."@aws-crypto/ie11-detection-3.0.0" // {
+        dependencies = [
+          sources."tslib-1.14.1"
+        ];
+      })
+      (sources."@aws-crypto/sha256-browser-3.0.0" // {
+        dependencies = [
+          sources."tslib-1.14.1"
+        ];
+      })
+      (sources."@aws-crypto/sha256-js-3.0.0" // {
+        dependencies = [
+          sources."tslib-1.14.1"
+        ];
+      })
+      (sources."@aws-crypto/supports-web-crypto-3.0.0" // {
+        dependencies = [
+          sources."tslib-1.14.1"
+        ];
+      })
+      (sources."@aws-crypto/util-3.0.0" // {
+        dependencies = [
+          sources."tslib-1.14.1"
+        ];
+      })
+      sources."@aws-sdk/client-cognito-identity-3.409.0"
+      sources."@aws-sdk/client-sso-3.409.0"
+      sources."@aws-sdk/client-sts-3.409.0"
+      sources."@aws-sdk/credential-provider-cognito-identity-3.409.0"
+      sources."@aws-sdk/credential-provider-env-3.408.0"
+      sources."@aws-sdk/credential-provider-ini-3.409.0"
+      sources."@aws-sdk/credential-provider-node-3.409.0"
+      sources."@aws-sdk/credential-provider-process-3.408.0"
+      sources."@aws-sdk/credential-provider-sso-3.409.0"
+      sources."@aws-sdk/credential-provider-web-identity-3.408.0"
+      sources."@aws-sdk/credential-providers-3.409.0"
+      sources."@aws-sdk/middleware-host-header-3.408.0"
+      sources."@aws-sdk/middleware-logger-3.408.0"
+      sources."@aws-sdk/middleware-recursion-detection-3.408.0"
+      sources."@aws-sdk/middleware-sdk-sts-3.408.0"
+      sources."@aws-sdk/middleware-signing-3.408.0"
+      sources."@aws-sdk/middleware-user-agent-3.408.0"
+      sources."@aws-sdk/token-providers-3.408.0"
+      sources."@aws-sdk/types-3.408.0"
+      sources."@aws-sdk/util-endpoints-3.408.0"
+      sources."@aws-sdk/util-locate-window-3.310.0"
+      sources."@aws-sdk/util-user-agent-browser-3.408.0"
+      sources."@aws-sdk/util-user-agent-node-3.408.0"
+      sources."@aws-sdk/util-utf8-browser-3.259.0"
+      sources."@azure/abort-controller-1.1.0"
+      sources."@azure/core-auth-1.5.0"
+      sources."@azure/core-client-1.7.3"
+      (sources."@azure/core-http-3.0.3" // {
+        dependencies = [
+          sources."@azure/core-tracing-1.0.0-preview.13"
+        ];
+      })
+      sources."@azure/core-http-compat-1.3.0"
+      sources."@azure/core-lro-2.5.4"
+      sources."@azure/core-paging-1.5.0"
+      (sources."@azure/core-rest-pipeline-1.12.1" // {
+        dependencies = [
+          sources."@tootallnate/once-2.0.0"
+          sources."http-proxy-agent-5.0.0"
+        ];
+      })
+      sources."@azure/core-tracing-1.0.1"
+      sources."@azure/core-util-1.4.0"
+      (sources."@azure/identity-2.1.0" // {
+        dependencies = [
+          sources."jwa-2.0.0"
+          sources."jws-4.0.0"
+          sources."open-8.4.2"
+        ];
+      })
+      sources."@azure/keyvault-keys-4.7.2"
+      sources."@azure/logger-1.0.4"
+      (sources."@azure/msal-browser-2.38.2" // {
+        dependencies = [
+          sources."@azure/msal-common-13.3.0"
+        ];
+      })
+      sources."@azure/msal-common-7.6.0"
+      (sources."@azure/msal-node-1.18.3" // {
+        dependencies = [
+          sources."@azure/msal-common-13.3.0"
+        ];
+      })
+      (sources."@azure/storage-blob-12.15.0" // {
+        dependencies = [
+          sources."@azure/core-tracing-1.0.0-preview.13"
+        ];
+      })
+      sources."@babel/parser-7.22.16"
+      (sources."@babel/runtime-7.22.15" // {
+        dependencies = [
+          sources."regenerator-runtime-0.14.0"
+        ];
+      })
+      sources."@codemirror/autocomplete-6.9.0"
+      sources."@codemirror/commands-6.2.5"
+      sources."@codemirror/lang-css-6.2.1"
+      sources."@codemirror/lang-javascript-6.2.1"
+      sources."@codemirror/lang-json-6.0.1"
+      sources."@codemirror/lang-python-6.1.3"
+      sources."@codemirror/language-6.9.0"
+      sources."@codemirror/lint-6.4.1"
+      sources."@codemirror/state-6.2.1"
+      sources."@codemirror/view-6.18.1"
+      sources."@colors/colors-1.5.0"
+      sources."@cspotcode/source-map-support-0.8.1"
+      sources."@ctrl/tinycolor-3.6.1"
+      sources."@curlconverter/yargs-0.0.2"
+      sources."@curlconverter/yargs-parser-0.0.1"
+      sources."@dabh/diagnostics-2.0.3"
+      sources."@element-plus/icons-vue-2.1.0"
+      sources."@ewoudenberg/difflib-0.1.0"
+      sources."@floating-ui/core-1.4.1"
+      sources."@floating-ui/dom-1.5.2"
+      sources."@floating-ui/utils-0.1.2"
+      sources."@fontsource/open-sans-4.5.14"
+      sources."@fortawesome/fontawesome-common-types-0.3.0"
+      sources."@fortawesome/fontawesome-svg-core-1.3.0"
+      (sources."@fortawesome/free-regular-svg-icons-6.4.2" // {
+        dependencies = [
+          sources."@fortawesome/fontawesome-common-types-6.4.2"
+        ];
+      })
+      (sources."@fortawesome/free-solid-svg-icons-5.15.4" // {
+        dependencies = [
+          sources."@fortawesome/fontawesome-common-types-0.2.36"
+        ];
+      })
+      sources."@fortawesome/vue-fontawesome-3.0.3"
+      sources."@gar/promisify-1.1.3"
+      sources."@google-cloud/common-3.10.0"
+      sources."@google-cloud/paginator-3.0.7"
+      sources."@google-cloud/precise-date-2.0.4"
+      sources."@google-cloud/projectify-2.1.1"
+      sources."@google-cloud/promisify-2.0.4"
+      sources."@google-cloud/spanner-5.18.0"
+      (sources."@google-cloud/storage-6.12.0" // {
+        dependencies = [
+          sources."@google-cloud/projectify-3.0.0"
+          sources."@google-cloud/promisify-3.0.1"
+          sources."@tootallnate/once-2.0.0"
+          sources."gaxios-5.1.3"
+          sources."gcp-metadata-5.3.0"
+          sources."google-auth-library-8.9.0"
+          sources."google-p12-pem-4.0.1"
+          sources."gtoken-6.1.2"
+          sources."http-proxy-agent-5.0.0"
+          sources."jwa-2.0.0"
+          sources."jws-4.0.0"
+          sources."lru-cache-6.0.0"
+          sources."mime-3.0.0"
+          sources."retry-request-5.0.2"
+          (sources."teeny-request-8.0.3" // {
+            dependencies = [
+              sources."uuid-9.0.0"
+            ];
+          })
+          sources."yallist-4.0.0"
+        ];
+      })
+      (sources."@grpc/grpc-js-1.6.12" // {
+        dependencies = [
+          sources."@grpc/proto-loader-0.7.9"
+          sources."cliui-8.0.1"
+          sources."long-5.2.3"
+          sources."protobufjs-7.2.5"
+          sources."wrap-ansi-7.0.0"
+          sources."yargs-17.7.2"
+          sources."yargs-parser-21.1.1"
+        ];
+      })
+      (sources."@grpc/proto-loader-0.6.13" // {
+        dependencies = [
+          sources."yargs-16.2.0"
+        ];
+      })
+      (sources."@httptoolkit/websocket-stream-6.0.1" // {
+        dependencies = [
+          sources."duplexify-3.7.1"
+        ];
+      })
+      (sources."@icetee/ftp-0.3.15" // {
+        dependencies = [
+          sources."isarray-0.0.1"
+          sources."readable-stream-1.1.14"
+          sources."string_decoder-0.10.31"
+        ];
+      })
+      sources."@intlify/core-base-9.4.0"
+      sources."@intlify/message-compiler-9.4.0"
+      sources."@intlify/shared-9.4.0"
+      sources."@ioredis/commands-1.2.0"
+      (sources."@isaacs/cliui-8.0.2" // {
+        dependencies = [
+          sources."ansi-regex-6.0.1"
+          sources."ansi-styles-6.2.1"
+          sources."emoji-regex-9.2.2"
+          sources."string-width-5.1.2"
+          sources."strip-ansi-7.1.0"
+          sources."wrap-ansi-8.1.0"
+        ];
+      })
+      sources."@jridgewell/gen-mapping-0.3.3"
+      sources."@jridgewell/resolve-uri-3.1.1"
+      sources."@jridgewell/set-array-1.1.2"
+      sources."@jridgewell/source-map-0.3.5"
+      sources."@jridgewell/sourcemap-codec-1.4.15"
+      sources."@jridgewell/trace-mapping-0.3.9"
+      sources."@js-joda/core-5.5.3"
+      sources."@jsdevtools/ono-7.1.3"
+      sources."@jsplumb/browser-ui-5.13.7"
+      sources."@jsplumb/common-5.13.7"
+      sources."@jsplumb/connector-bezier-5.13.7"
+      sources."@jsplumb/core-5.13.7"
+      sources."@jsplumb/util-5.13.7"
+      sources."@kafkajs/confluent-schema-registry-1.0.6"
+      sources."@kwsites/file-exists-1.1.1"
+      sources."@kwsites/promise-deferred-1.1.1"
+      sources."@lezer/common-1.0.4"
+      sources."@lezer/css-1.1.3"
+      sources."@lezer/highlight-1.1.6"
+      sources."@lezer/html-1.3.6"
+      sources."@lezer/javascript-1.4.7"
+      sources."@lezer/json-1.0.1"
+      sources."@lezer/lr-1.3.10"
+      sources."@lezer/python-1.1.8"
+      sources."@mapbox/node-pre-gyp-1.0.11"
+      sources."@mongodb-js/zstd-1.2.0"
+      sources."@n8n/client-oauth2-0.7.0"
+      sources."@n8n/codemirror-lang-sql-1.0.2"
+      sources."@n8n/vm2-3.9.20"
+      sources."@n8n_io/license-sdk-2.4.0"
+      sources."@n8n_io/riot-tmpl-4.0.1"
+      sources."@nodelib/fs.scandir-2.1.5"
+      sources."@nodelib/fs.stat-2.0.5"
+      sources."@nodelib/fs.walk-1.2.8"
+      sources."@npmcli/fs-1.1.1"
+      (sources."@npmcli/move-file-1.1.2" // {
+        dependencies = [
+          sources."mkdirp-1.0.4"
+        ];
+      })
+      sources."@oclif/command-1.8.36"
+      sources."@oclif/config-1.18.17"
+      (sources."@oclif/core-1.26.2" // {
+        dependencies = [
+          sources."supports-color-8.1.1"
+          sources."wrap-ansi-7.0.0"
+        ];
+      })
+      (sources."@oclif/errors-1.3.6" // {
+        dependencies = [
+          sources."fs-extra-8.1.0"
+          sources."jsonfile-4.0.0"
+          sources."universalify-0.1.2"
+          sources."wrap-ansi-7.0.0"
+        ];
+      })
+      (sources."@oclif/help-1.0.15" // {
+        dependencies = [
+          sources."@oclif/config-1.18.16"
+        ];
+      })
+      sources."@oclif/linewrap-1.0.0"
+      sources."@oclif/parser-3.8.17"
+      sources."@oclif/screen-3.0.6"
+      sources."@opentelemetry/api-1.5.0"
+      sources."@popperjs/core-2.11.7"
+      sources."@protobufjs/aspromise-1.1.2"
+      sources."@protobufjs/base64-1.1.2"
+      sources."@protobufjs/codegen-2.0.4"
+      sources."@protobufjs/eventemitter-1.1.0"
+      sources."@protobufjs/fetch-1.1.0"
+      sources."@protobufjs/float-1.0.2"
+      sources."@protobufjs/inquire-1.1.0"
+      sources."@protobufjs/path-1.1.2"
+      sources."@protobufjs/pool-1.1.0"
+      sources."@protobufjs/utf8-1.1.0"
+      sources."@redis/bloom-1.2.0"
+      (sources."@redis/client-1.5.9" // {
+        dependencies = [
+          sources."yallist-4.0.0"
+        ];
+      })
+      sources."@redis/graph-1.1.0"
+      sources."@redis/json-1.0.4"
+      sources."@redis/search-1.1.3"
+      sources."@redis/time-series-1.0.5"
+      (sources."@rudderstack/rudder-sdk-node-1.0.6" // {
+        dependencies = [
+          sources."bull-3.29.3"
+          sources."ioredis-4.28.5"
+        ];
+      })
+      (sources."@sap/hana-client-2.18.22" // {
+        dependencies = [
+          sources."debug-3.1.0"
+          sources."ms-2.0.0"
+        ];
+      })
+      sources."@segment/loosely-validate-event-2.0.0"
+      sources."@selderee/plugin-htmlparser2-0.11.0"
+      sources."@sentry-internal/tracing-7.68.0"
+      sources."@sentry/core-7.68.0"
+      sources."@sentry/integrations-7.68.0"
+      sources."@sentry/node-7.68.0"
+      sources."@sentry/types-7.68.0"
+      sources."@sentry/utils-7.68.0"
+      sources."@smithy/abort-controller-2.0.6"
+      sources."@smithy/config-resolver-2.0.7"
+      sources."@smithy/credential-provider-imds-2.0.9"
+      sources."@smithy/eventstream-codec-2.0.6"
+      (sources."@smithy/fetch-http-handler-2.1.2" // {
+        dependencies = [
+          sources."@smithy/protocol-http-3.0.2"
+        ];
+      })
+      sources."@smithy/hash-node-2.0.6"
+      sources."@smithy/invalid-dependency-2.0.6"
+      sources."@smithy/is-array-buffer-2.0.0"
+      (sources."@smithy/middleware-content-length-2.0.8" // {
+        dependencies = [
+          sources."@smithy/protocol-http-3.0.2"
+        ];
+      })
+      sources."@smithy/middleware-endpoint-2.0.6"
+      (sources."@smithy/middleware-retry-2.0.9" // {
+        dependencies = [
+          sources."@smithy/protocol-http-3.0.2"
+        ];
+      })
+      sources."@smithy/middleware-serde-2.0.6"
+      sources."@smithy/middleware-stack-2.0.0"
+      sources."@smithy/node-config-provider-2.0.9"
+      (sources."@smithy/node-http-handler-2.1.2" // {
+        dependencies = [
+          sources."@smithy/protocol-http-3.0.2"
+        ];
+      })
+      sources."@smithy/property-provider-2.0.7"
+      sources."@smithy/protocol-http-2.0.5"
+      sources."@smithy/querystring-builder-2.0.6"
+      sources."@smithy/querystring-parser-2.0.6"
+      sources."@smithy/service-error-classification-2.0.0"
+      sources."@smithy/shared-ini-file-loader-2.0.8"
+      sources."@smithy/signature-v4-2.0.6"
+      sources."@smithy/smithy-client-2.1.3"
+      sources."@smithy/types-2.3.0"
+      sources."@smithy/url-parser-2.0.6"
+      sources."@smithy/util-base64-2.0.0"
+      sources."@smithy/util-body-length-browser-2.0.0"
+      sources."@smithy/util-body-length-node-2.1.0"
+      sources."@smithy/util-buffer-from-2.0.0"
+      sources."@smithy/util-config-provider-2.0.0"
+      sources."@smithy/util-defaults-mode-browser-2.0.7"
+      sources."@smithy/util-defaults-mode-node-2.0.9"
+      sources."@smithy/util-hex-encoding-2.0.0"
+      sources."@smithy/util-middleware-2.0.0"
+      sources."@smithy/util-retry-2.0.0"
+      sources."@smithy/util-stream-2.0.9"
+      sources."@smithy/util-uri-escape-2.0.0"
+      sources."@smithy/util-utf8-2.0.0"
+      sources."@sqltools/formatter-1.2.5"
+      sources."@swc/core-1.3.84"
+      sources."@swc/helpers-0.5.2"
+      sources."@swc/types-0.1.4"
+      sources."@swc/wasm-1.3.84"
+      sources."@techteamer/ocsp-1.0.0"
+      sources."@tediousjs/connection-string-0.5.0"
+      sources."@tokenizer/token-0.3.0"
+      sources."@tootallnate/once-1.1.2"
+      sources."@tsconfig/node10-1.0.9"
+      sources."@tsconfig/node12-1.0.11"
+      sources."@tsconfig/node14-1.0.3"
+      sources."@tsconfig/node16-1.0.4"
+      sources."@types/asn1-0.2.1"
+      sources."@types/big.js-6.2.0"
+      sources."@types/body-parser-1.19.2"
+      sources."@types/connect-3.4.36"
+      sources."@types/duplexify-3.6.1"
+      sources."@types/es-aggregate-error-1.0.2"
+      sources."@types/eslint-8.44.2"
+      sources."@types/eslint-scope-3.7.4"
+      sources."@types/estree-1.0.1"
+      sources."@types/express-4.17.17"
+      sources."@types/express-serve-static-core-4.17.36"
+      sources."@types/http-errors-2.0.1"
+      sources."@types/json-schema-7.0.12"
+      sources."@types/jsonwebtoken-9.0.2"
+      sources."@types/lodash-4.14.198"
+      sources."@types/lodash-es-4.17.9"
+      sources."@types/long-4.0.2"
+      sources."@types/mime-1.3.2"
+      sources."@types/multer-1.4.7"
+      sources."@types/node-20.6.0"
+      (sources."@types/node-fetch-2.6.4" // {
+        dependencies = [
+          sources."form-data-3.0.1"
+        ];
+      })
+      sources."@types/pumpify-1.4.1"
+      sources."@types/qs-6.9.8"
+      sources."@types/range-parser-1.2.4"
+      (sources."@types/readable-stream-4.0.2" // {
+        dependencies = [
+          sources."safe-buffer-5.1.2"
+        ];
+      })
+      sources."@types/send-0.17.1"
+      sources."@types/serve-static-1.15.2"
+      sources."@types/stack-trace-0.0.29"
+      sources."@types/triple-beam-1.3.2"
+      sources."@types/tunnel-0.0.3"
+      sources."@types/uuid-9.0.3"
+      sources."@types/validator-13.11.1"
+      sources."@types/web-bluetooth-0.0.17"
+      sources."@types/webidl-conversions-7.0.0"
+      sources."@types/whatwg-url-8.2.2"
+      sources."@types/ws-8.5.5"
+      sources."@vue/compiler-core-3.3.4"
+      sources."@vue/compiler-dom-3.3.4"
+      sources."@vue/compiler-sfc-3.3.4"
+      sources."@vue/compiler-ssr-3.3.4"
+      (sources."@vue/composition-api-1.7.2" // {
+        dependencies = [
+          sources."vue-2.6.14"
+        ];
+      })
+      sources."@vue/devtools-api-6.5.0"
+      sources."@vue/reactivity-3.3.4"
+      sources."@vue/reactivity-transform-3.3.4"
+      sources."@vue/runtime-core-3.3.4"
+      sources."@vue/runtime-dom-3.3.4"
+      sources."@vue/server-renderer-3.3.4"
+      sources."@vue/shared-3.3.4"
+      sources."@vueuse/components-10.4.1"
+      sources."@vueuse/core-10.4.1"
+      sources."@vueuse/metadata-10.4.1"
+      sources."@vueuse/shared-10.4.1"
+      sources."@webassemblyjs/ast-1.11.6"
+      sources."@webassemblyjs/floating-point-hex-parser-1.11.6"
+      sources."@webassemblyjs/helper-api-error-1.11.6"
+      sources."@webassemblyjs/helper-buffer-1.11.6"
+      sources."@webassemblyjs/helper-numbers-1.11.6"
+      sources."@webassemblyjs/helper-wasm-bytecode-1.11.6"
+      sources."@webassemblyjs/helper-wasm-section-1.11.6"
+      sources."@webassemblyjs/ieee754-1.11.6"
+      sources."@webassemblyjs/leb128-1.11.6"
+      sources."@webassemblyjs/utf8-1.11.6"
+      sources."@webassemblyjs/wasm-edit-1.11.6"
+      sources."@webassemblyjs/wasm-gen-1.11.6"
+      sources."@webassemblyjs/wasm-opt-1.11.6"
+      sources."@webassemblyjs/wasm-parser-1.11.6"
+      sources."@webassemblyjs/wast-printer-1.11.6"
+      sources."@xmldom/xmldom-0.8.10"
+      sources."@xtuc/ieee754-1.2.0"
+      sources."@xtuc/long-4.2.2"
+      sources."a-sync-waterfall-1.0.1"
+      sources."abbrev-1.1.1"
+      sources."abort-controller-3.0.0"
+      sources."accepts-1.3.8"
+      sources."acorn-8.10.0"
+      sources."acorn-import-assertions-1.9.0"
+      sources."acorn-walk-8.2.0"
+      sources."agent-base-6.0.2"
+      sources."agentkeepalive-4.5.0"
+      (sources."aggregate-error-3.1.0" // {
+        dependencies = [
+          sources."clean-stack-2.2.0"
+        ];
+      })
+      sources."ajv-6.12.6"
+      sources."ajv-keywords-3.5.2"
+      (sources."amqplib-0.10.3" // {
+        dependencies = [
+          sources."isarray-0.0.1"
+          sources."readable-stream-1.1.14"
+          sources."string_decoder-0.10.31"
+        ];
+      })
+      sources."ansi-escapes-4.3.2"
+      sources."ansi-regex-5.0.1"
+      sources."ansi-styles-4.3.0"
+      sources."ansicolors-0.3.2"
+      sources."any-promise-1.3.0"
+      sources."anymatch-3.1.3"
+      sources."app-root-path-3.1.0"
+      sources."append-field-1.0.0"
+      sources."aproba-2.0.0"
+      (sources."are-we-there-yet-2.0.0" // {
+        dependencies = [
+          sources."readable-stream-3.6.2"
+        ];
+      })
+      sources."arg-4.1.3"
+      sources."argparse-1.0.10"
+      sources."array-buffer-byte-length-1.0.0"
+      sources."array-flatten-1.1.1"
+      sources."array-parallel-0.1.3"
+      sources."array-series-0.1.5"
+      sources."array-union-2.1.0"
+      sources."array.prototype.reduce-1.0.6"
+      sources."arraybuffer.prototype.slice-1.0.2"
+      sources."arrify-2.0.1"
+      sources."asap-2.0.6"
+      sources."asn1-0.2.6"
+      (sources."asn1.js-5.4.1" // {
+        dependencies = [
+          sources."bn.js-4.12.0"
+        ];
+      })
+      sources."asn1.js-rfc2560-5.0.1"
+      sources."asn1.js-rfc5280-3.0.0"
+      sources."assert-options-0.8.0"
+      sources."assert-plus-1.0.0"
+      sources."ast-types-0.13.4"
+      sources."async-3.2.4"
+      (sources."async-retry-1.3.3" // {
+        dependencies = [
+          sources."retry-0.13.1"
+        ];
+      })
+      sources."async-validator-4.2.5"
+      sources."asynckit-0.4.0"
+      sources."at-least-node-1.0.0"
+      (sources."auto-changelog-1.16.4" // {
+        dependencies = [
+          sources."semver-6.3.1"
+        ];
+      })
+      sources."available-typed-arrays-1.0.5"
+      sources."avsc-5.7.7"
+      (sources."aws-crt-1.18.0" // {
+        dependencies = [
+          sources."axios-0.24.0"
+        ];
+      })
+      (sources."aws-sdk-2.1454.0" // {
+        dependencies = [
+          sources."buffer-4.9.2"
+          sources."events-1.1.1"
+          sources."ieee754-1.1.13"
+          sources."isarray-1.0.0"
+          sources."sax-1.2.1"
+          sources."uuid-8.0.0"
+        ];
+      })
+      sources."aws4-1.12.0"
+      sources."axios-0.21.4"
+      sources."axios-retry-3.7.0"
+      sources."balanced-match-1.0.2"
+      sources."base-64-1.0.0"
+      sources."base64-js-1.5.1"
+      (sources."basic-auth-2.0.1" // {
+        dependencies = [
+          sources."safe-buffer-5.1.2"
+        ];
+      })
+      (sources."bcrypt-pbkdf-1.0.2" // {
+        dependencies = [
+          sources."tweetnacl-0.14.5"
+        ];
+      })
+      sources."bcryptjs-2.4.3"
+      sources."better-sqlite3-8.6.0"
+      sources."big-integer-1.6.51"
+      sources."big.js-6.2.1"
+      sources."bignumber.js-9.1.2"
+      sources."binary-extensions-2.2.0"
+      sources."binascii-0.0.2"
+      sources."bindings-1.5.0"
+      sources."bintrees-1.0.2"
+      (sources."bl-4.1.0" // {
+        dependencies = [
+          sources."buffer-5.7.1"
+          sources."readable-stream-3.6.2"
+        ];
+      })
+      sources."bluebird-2.11.0"
+      sources."bn.js-5.2.1"
+      (sources."body-parser-1.20.1" // {
+        dependencies = [
+          sources."bytes-3.1.2"
+          sources."debug-2.6.9"
+          sources."iconv-lite-0.4.24"
+          sources."ms-2.0.0"
+          sources."raw-body-2.5.1"
+        ];
+      })
+      sources."boolbase-1.0.0"
+      sources."bowser-2.11.0"
+      sources."brace-expansion-2.0.1"
+      sources."braces-3.0.2"
+      sources."browser-request-0.3.3"
+      sources."browserslist-4.21.10"
+      sources."bson-5.4.0"
+      sources."buffer-6.0.3"
+      sources."buffer-equal-constant-time-1.0.1"
+      sources."buffer-from-1.1.2"
+      sources."buffer-more-ints-1.0.0"
+      sources."buffer-writer-2.0.0"
+      sources."bufferutil-4.0.7"
+      (sources."bull-4.11.3" // {
+        dependencies = [
+          sources."cron-parser-4.9.0"
+        ];
+      })
+      sources."busboy-1.6.0"
+      sources."bytes-3.0.0"
+      (sources."cacache-15.3.0" // {
+        dependencies = [
+          sources."glob-7.2.3"
+          sources."lru-cache-6.0.0"
+          sources."minipass-3.3.6"
+          sources."mkdirp-1.0.4"
+          sources."p-map-4.0.0"
+          sources."yallist-4.0.0"
+        ];
+      })
+      sources."cache-manager-5.2.3"
+      sources."cache-manager-ioredis-yet-1.2.2"
+      sources."call-bind-1.0.2"
+      sources."call-me-maybe-1.0.2"
+      sources."callsites-3.1.0"
+      sources."camel-case-4.1.2"
+      sources."camelcase-6.3.0"
+      sources."caniuse-lite-1.0.30001532"
+      sources."capital-case-1.0.4"
+      sources."cardinal-2.1.1"
+      sources."chalk-4.1.2"
+      sources."change-case-4.1.2"
+      sources."chardet-0.7.0"
+      sources."charenc-0.0.2"
+      (sources."checkpoint-stream-0.1.2" // {
+        dependencies = [
+          sources."async-2.6.4"
+          sources."split-array-stream-1.0.3"
+          sources."through2-2.0.5"
+        ];
+      })
+      (sources."cheerio-1.0.0-rc.6" // {
+        dependencies = [
+          sources."dom-serializer-1.4.1"
+          sources."domhandler-4.3.1"
+          sources."domutils-2.8.0"
+          sources."htmlparser2-6.1.0"
+          sources."parse5-6.0.1"
+        ];
+      })
+      (sources."cheerio-select-1.6.0" // {
+        dependencies = [
+          sources."dom-serializer-1.4.1"
+          sources."domhandler-4.3.1"
+          sources."domutils-2.8.0"
+        ];
+      })
+      sources."chokidar-3.5.3"
+      sources."chownr-2.0.0"
+      sources."chrome-trace-event-1.0.3"
+      sources."class-transformer-0.5.1"
+      sources."class-validator-0.14.0"
+      sources."clean-stack-3.0.1"
+      sources."cli-cursor-3.1.0"
+      (sources."cli-highlight-2.1.11" // {
+        dependencies = [
+          sources."yargs-16.2.0"
+        ];
+      })
+      sources."cli-progress-3.12.0"
+      sources."cli-width-3.0.0"
+      (sources."cliui-7.0.4" // {
+        dependencies = [
+          sources."wrap-ansi-7.0.0"
+        ];
+      })
+      sources."cluster-key-slot-1.1.2"
+      sources."codemirror-lang-html-n8n-1.0.0"
+      sources."codemirror-lang-n8n-expression-0.2.0"
+      (sources."color-3.2.1" // {
+        dependencies = [
+          sources."color-convert-1.9.3"
+          sources."color-name-1.1.3"
+        ];
+      })
+      sources."color-convert-2.0.1"
+      sources."color-name-1.1.4"
+      sources."color-string-1.9.1"
+      sources."color-support-1.1.3"
+      sources."colors-1.4.0"
+      sources."colorspace-1.1.4"
+      sources."combined-stream-1.0.8"
+      sources."commander-5.1.0"
+      sources."commist-1.1.0"
+      sources."component-type-1.2.1"
+      sources."compressible-2.0.18"
+      (sources."compression-1.7.4" // {
+        dependencies = [
+          sources."debug-2.6.9"
+          sources."ms-2.0.0"
+          sources."safe-buffer-5.1.2"
+        ];
+      })
+      sources."concat-map-0.0.1"
+      sources."concat-stream-1.6.2"
+      sources."connect-history-api-fallback-1.6.0"
+      sources."console-control-strings-1.1.0"
+      sources."constant-case-3.0.4"
+      sources."content-disposition-0.5.4"
+      sources."content-type-1.0.5"
+      sources."convict-6.2.4"
+      sources."cookie-0.4.2"
+      (sources."cookie-parser-1.4.6" // {
+        dependencies = [
+          sources."cookie-0.4.1"
+        ];
+      })
+      sources."cookie-signature-1.0.6"
+      sources."copy-to-2.0.1"
+      sources."copy-to-clipboard-3.3.3"
+      sources."core-js-3.32.2"
+      sources."core-util-is-1.0.3"
+      sources."create-require-1.1.1"
+      sources."crelt-1.0.6"
+      sources."cron-1.7.2"
+      sources."cron-parser-2.18.0"
+      sources."cross-spawn-7.0.3"
+      sources."crypt-0.0.2"
+      sources."crypto-js-4.1.1"
+      sources."csrf-3.1.0"
+      (sources."css-select-4.3.0" // {
+        dependencies = [
+          sources."dom-serializer-1.4.1"
+          sources."domhandler-4.3.1"
+          sources."domutils-2.8.0"
+        ];
+      })
+      sources."css-what-6.1.0"
+      sources."cssfilter-0.0.10"
+      sources."csstype-3.1.2"
+      sources."curlconverter-3.21.0"
+      sources."currency-codes-2.1.0"
+      sources."dashdash-1.14.1"
+      sources."data-api-client-1.3.0"
+      sources."data-uri-to-buffer-3.0.1"
+      sources."date-fns-2.30.0"
+      sources."dateformat-3.0.3"
+      sources."dayjs-1.11.9"
+      sources."debug-4.3.4"
+      sources."debuglog-1.0.1"
+      sources."decode-uri-component-0.2.2"
+      sources."decompress-response-6.0.0"
+      sources."deep-equal-2.2.2"
+      sources."deep-extend-0.6.0"
+      sources."deep-is-0.1.4"
+      sources."deepmerge-4.3.1"
+      sources."default-user-agent-1.0.0"
+      sources."define-lazy-prop-2.0.0"
+      sources."define-properties-1.2.0"
+      sources."degenerator-3.0.4"
+      sources."delayed-stream-1.0.0"
+      sources."delegates-1.0.0"
+      sources."denque-1.5.1"
+      sources."depd-2.0.0"
+      sources."destroy-1.2.0"
+      sources."detect-libc-2.0.2"
+      sources."dezalgo-1.0.4"
+      sources."diff-4.0.2"
+      sources."digest-header-1.1.0"
+      sources."dir-glob-3.0.1"
+      (sources."dom-serializer-2.0.0" // {
+        dependencies = [
+          sources."entities-4.5.0"
+        ];
+      })
+      sources."domelementtype-2.3.0"
+      sources."domhandler-5.0.3"
+      sources."dommatrix-1.0.3"
+      sources."domutils-3.1.0"
+      sources."dot-case-3.0.4"
+      sources."dotenv-8.6.0"
+      sources."dreamopt-0.8.0"
+      (sources."duplexify-4.1.2" // {
+        dependencies = [
+          sources."readable-stream-3.6.2"
+        ];
+      })
+      sources."eastasianwidth-0.2.0"
+      sources."ecc-jsbn-0.1.2"
+      sources."ecdsa-sig-formatter-1.0.11"
+      sources."ee-first-1.1.1"
+      sources."ejs-3.1.9"
+      sources."electron-to-chromium-1.4.513"
+      (sources."element-plus-2.3.12" // {
+        dependencies = [
+          sources."@types/web-bluetooth-0.0.16"
+          sources."@vueuse/core-9.13.0"
+          sources."@vueuse/metadata-9.13.0"
+          sources."@vueuse/shared-9.13.0"
+        ];
+      })
+      sources."emoji-regex-8.0.0"
+      sources."emojis-list-3.0.0"
+      sources."enabled-2.0.0"
+      sources."encodeurl-1.0.2"
+      sources."encoding-0.1.13"
+      sources."encoding-japanese-2.0.0"
+      sources."end-of-stream-1.4.4"
+      sources."enhanced-resolve-5.15.0"
+      sources."ent-2.2.0"
+      sources."entities-2.1.0"
+      sources."env-paths-2.2.1"
+      sources."err-code-2.0.3"
+      sources."es-abstract-1.22.1"
+      sources."es-aggregate-error-1.0.10"
+      sources."es-array-method-boxes-properly-1.0.0"
+      sources."es-get-iterator-1.1.3"
+      sources."es-module-lexer-1.3.1"
+      sources."es-set-tostringtag-2.0.1"
+      sources."es-to-primitive-1.2.1"
+      sources."escalade-3.1.1"
+      sources."escape-html-1.0.3"
+      sources."escape-string-regexp-4.0.0"
+      sources."escodegen-1.14.3"
+      sources."eslint-config-riot-1.0.0"
+      sources."eslint-scope-5.1.1"
+      sources."esprima-4.0.1"
+      sources."esprima-next-5.8.4"
+      (sources."esrecurse-4.3.0" // {
+        dependencies = [
+          sources."estraverse-5.3.0"
+        ];
+      })
+      sources."estraverse-4.3.0"
+      sources."estree-walker-2.0.2"
+      sources."esutils-2.0.3"
+      sources."etag-1.8.1"
+      sources."event-target-shim-5.0.1"
+      sources."eventemitter3-4.0.7"
+      sources."events-3.3.0"
+      sources."events-intercept-2.0.0"
+      sources."eventsource-2.0.2"
+      sources."expand-template-2.0.3"
+      sources."expand-tilde-2.0.2"
+      (sources."express-4.18.2" // {
+        dependencies = [
+          sources."cookie-0.5.0"
+          sources."debug-2.6.9"
+          sources."ms-2.0.0"
+        ];
+      })
+      sources."express-async-errors-3.1.1"
+      (sources."express-handlebars-7.1.2" // {
+        dependencies = [
+          sources."handlebars-4.7.8"
+        ];
+      })
+      (sources."express-openapi-validator-4.13.8" // {
+        dependencies = [
+          sources."media-typer-1.1.0"
+          sources."path-to-regexp-6.2.1"
+        ];
+      })
+      sources."express-prom-bundle-6.6.0"
+      sources."extend-3.0.2"
+      sources."extend-shallow-2.0.1"
+      (sources."external-editor-3.1.0" // {
+        dependencies = [
+          sources."iconv-lite-0.4.24"
+        ];
+      })
+      sources."fast-deep-equal-3.1.3"
+      sources."fast-glob-3.3.1"
+      sources."fast-json-stable-stringify-2.1.0"
+      sources."fast-levenshtein-2.0.6"
+      sources."fast-text-encoding-1.0.6"
+      sources."fast-xml-parser-4.2.5"
+      sources."fastq-1.15.0"
+      sources."fecha-4.2.3"
+      sources."fflate-0.7.4"
+      (sources."figures-3.2.0" // {
+        dependencies = [
+          sources."escape-string-regexp-1.0.5"
+        ];
+      })
+      sources."file-saver-2.0.5"
+      sources."file-type-16.5.4"
+      sources."file-uri-to-path-1.0.0"
+      (sources."filelist-1.0.4" // {
+        dependencies = [
+          sources."minimatch-5.1.6"
+        ];
+      })
+      sources."fill-range-7.0.1"
+      sources."filter-obj-1.1.0"
+      (sources."finalhandler-1.2.0" // {
+        dependencies = [
+          sources."debug-2.6.9"
+          sources."ms-2.0.0"
+        ];
+      })
+      sources."first-match-0.0.1"
+      sources."flatted-3.2.7"
+      sources."fn.name-1.1.0"
+      sources."follow-redirects-1.15.2"
+      sources."for-each-0.3.3"
+      sources."foreground-child-3.1.1"
+      sources."form-data-4.0.0"
+      sources."formidable-3.5.1"
+      (sources."formstream-1.3.1" // {
+        dependencies = [
+          sources."mime-2.6.0"
+        ];
+      })
+      sources."forwarded-0.2.0"
+      sources."fresh-0.5.2"
+      sources."fs-constants-1.0.0"
+      sources."fs-extra-9.1.0"
+      (sources."fs-minipass-2.1.0" // {
+        dependencies = [
+          sources."minipass-3.3.6"
+          sources."yallist-4.0.0"
+        ];
+      })
+      sources."fs.realpath-1.0.0"
+      (sources."ftp-0.3.10" // {
+        dependencies = [
+          sources."isarray-0.0.1"
+          sources."readable-stream-1.1.14"
+          sources."string_decoder-0.10.31"
+        ];
+      })
+      sources."function-bind-1.1.1"
+      sources."function.prototype.name-1.1.6"
+      sources."functions-have-names-1.2.3"
+      (sources."gauge-3.0.2" // {
+        dependencies = [
+          sources."signal-exit-3.0.7"
+        ];
+      })
+      sources."gaxios-4.3.3"
+      sources."gcp-metadata-4.3.1"
+      sources."generate-function-2.3.1"
+      sources."generic-pool-3.9.0"
+      sources."get-caller-file-2.0.5"
+      sources."get-intrinsic-1.2.1"
+      sources."get-package-type-0.1.0"
+      sources."get-port-5.1.1"
+      sources."get-symbol-description-1.0.0"
+      sources."get-system-fonts-2.0.2"
+      (sources."get-uri-3.0.2" // {
+        dependencies = [
+          sources."file-uri-to-path-2.0.0"
+          sources."fs-extra-8.1.0"
+          sources."jsonfile-4.0.0"
+          sources."universalify-0.1.2"
+        ];
+      })
+      sources."getpass-0.1.7"
+      sources."github-from-package-0.0.0"
+      (sources."glob-10.3.4" // {
+        dependencies = [
+          sources."minimatch-9.0.3"
+        ];
+      })
+      sources."glob-parent-5.1.2"
+      sources."glob-to-regexp-0.4.1"
+      sources."globalthis-1.0.3"
+      sources."globby-11.1.0"
+      (sources."gm-1.25.0" // {
+        dependencies = [
+          sources."cross-spawn-4.0.2"
+          sources."debug-3.2.7"
+          sources."lru-cache-4.1.5"
+          sources."which-1.3.1"
+        ];
+      })
+      (sources."google-auth-library-7.14.1" // {
+        dependencies = [
+          sources."jwa-2.0.0"
+          sources."jws-4.0.0"
+          sources."lru-cache-6.0.0"
+          sources."yallist-4.0.0"
+        ];
+      })
+      (sources."google-gax-2.30.5" // {
+        dependencies = [
+          sources."protobufjs-6.11.3"
+        ];
+      })
+      sources."google-p12-pem-3.1.4"
+      sources."google-timezones-json-1.2.0"
+      sources."gopd-1.0.1"
+      sources."graceful-fs-4.2.11"
+      sources."grpc-gcp-0.3.3"
+      (sources."gtoken-5.3.2" // {
+        dependencies = [
+          sources."jwa-2.0.0"
+          sources."jws-4.0.0"
+        ];
+      })
+      sources."handlebars-4.7.7"
+      sources."has-1.0.3"
+      sources."has-bigints-1.0.2"
+      sources."has-flag-4.0.0"
+      sources."has-property-descriptors-1.0.0"
+      sources."has-proto-1.0.1"
+      sources."has-symbols-1.0.3"
+      sources."has-tostringtag-1.0.0"
+      sources."has-unicode-2.0.1"
+      sources."hdb-pool-0.1.6"
+      sources."he-1.2.0"
+      sources."header-case-2.0.4"
+      sources."heap-0.2.7"
+      (sources."help-me-3.0.0" // {
+        dependencies = [
+          sources."glob-7.2.3"
+          sources."readable-stream-3.6.2"
+        ];
+      })
+      sources."hexoid-1.0.0"
+      sources."highlight.js-10.7.3"
+      sources."homedir-polyfill-1.0.3"
+      sources."html-to-text-9.0.5"
+      (sources."htmlparser2-8.0.2" // {
+        dependencies = [
+          sources."entities-4.5.0"
+        ];
+      })
+      sources."http-cache-semantics-4.1.1"
+      sources."http-errors-2.0.0"
+      sources."http-proxy-agent-4.0.1"
+      sources."https-proxy-agent-5.0.1"
+      sources."humanize-duration-3.29.0"
+      sources."humanize-ms-1.2.1"
+      sources."hyperlinker-1.0.0"
+      sources."iconv-lite-0.6.3"
+      sources."ics-2.44.0"
+      sources."ieee754-1.2.1"
+      sources."ignore-5.2.4"
+      (sources."imap-0.8.19" // {
+        dependencies = [
+          sources."isarray-0.0.1"
+          sources."readable-stream-1.1.14"
+          sources."string_decoder-0.10.31"
+        ];
+      })
+      (sources."imap-simple-4.3.0" // {
+        dependencies = [
+          sources."iconv-lite-0.4.24"
+        ];
+      })
+      sources."immediate-3.0.6"
+      sources."imurmurhash-0.1.4"
+      sources."indent-string-4.0.0"
+      sources."infer-owner-1.0.4"
+      (sources."infisical-node-1.4.3" // {
+        dependencies = [
+          sources."axios-1.5.0"
+          sources."dotenv-16.3.1"
+        ];
+      })
+      sources."inflight-1.0.6"
+      sources."inherits-2.0.4"
+      sources."ini-1.3.8"
+      sources."inquirer-7.3.3"
+      sources."internal-slot-1.0.5"
+      sources."interpret-1.4.0"
+      (sources."ioredis-5.3.2" // {
+        dependencies = [
+          sources."denque-2.1.0"
+        ];
+      })
+      sources."ip-2.0.0"
+      sources."ipaddr.js-1.9.1"
+      sources."is-3.3.0"
+      sources."is-arguments-1.1.1"
+      sources."is-array-buffer-3.0.2"
+      sources."is-arrayish-0.3.2"
+      sources."is-bigint-1.0.4"
+      sources."is-binary-path-2.1.0"
+      sources."is-boolean-object-1.1.2"
+      sources."is-buffer-1.1.6"
+      sources."is-callable-1.2.7"
+      sources."is-core-module-2.13.0"
+      sources."is-date-object-1.0.5"
+      sources."is-docker-2.2.1"
+      sources."is-extendable-0.1.1"
+      sources."is-extglob-2.1.1"
+      sources."is-fullwidth-code-point-3.0.0"
+      sources."is-generator-function-1.0.10"
+      sources."is-glob-4.0.3"
+      sources."is-lambda-1.0.1"
+      sources."is-map-2.0.2"
+      sources."is-nan-1.3.2"
+      sources."is-negative-zero-2.0.2"
+      sources."is-number-7.0.0"
+      sources."is-number-object-1.0.7"
+      sources."is-plain-object-5.0.0"
+      sources."is-promise-1.0.1"
+      sources."is-property-1.0.2"
+      sources."is-regex-1.1.4"
+      sources."is-retry-allowed-2.2.0"
+      sources."is-set-2.0.2"
+      sources."is-shared-array-buffer-1.0.2"
+      sources."is-stream-2.0.1"
+      sources."is-stream-ended-0.1.4"
+      sources."is-string-1.0.7"
+      sources."is-symbol-1.0.4"
+      sources."is-typed-array-1.1.12"
+      sources."is-weakmap-2.0.1"
+      sources."is-weakref-1.0.2"
+      sources."is-weakset-2.0.2"
+      sources."is-wsl-2.2.0"
+      sources."isarray-2.0.5"
+      sources."isbot-3.6.13"
+      sources."isexe-2.0.0"
+      sources."iso-639-1-2.1.15"
+      sources."isomorphic-ws-4.0.1"
+      sources."jackspeak-2.3.3"
+      sources."jake-10.8.7"
+      (sources."jest-worker-27.5.1" // {
+        dependencies = [
+          sources."supports-color-8.1.1"
+        ];
+      })
+      sources."jmespath-0.16.0"
+      sources."join-component-1.1.0"
+      sources."jose-4.14.6"
+      sources."js-base64-3.7.5"
+      sources."js-md4-0.3.2"
+      sources."js-nacl-1.4.0"
+      sources."js-sdsl-4.3.0"
+      sources."js-yaml-3.14.1"
+      sources."jsbi-4.3.0"
+      sources."jsbn-0.1.1"
+      sources."jsesc-3.0.2"
+      sources."json-bigint-1.0.0"
+      sources."json-diff-1.0.6"
+      sources."json-parse-even-better-errors-2.3.1"
+      sources."json-schema-ref-parser-9.0.9"
+      sources."json-schema-traverse-0.4.1"
+      sources."json5-2.2.3"
+      sources."jsonfile-6.1.0"
+      (sources."jsonpath-1.1.1" // {
+        dependencies = [
+          sources."esprima-1.2.2"
+        ];
+      })
+      sources."jsonschema-1.4.1"
+      sources."jsonwebtoken-9.0.2"
+      sources."jssha-3.3.1"
+      sources."jwa-1.4.1"
+      sources."jwks-rsa-3.0.1"
+      sources."jws-3.2.2"
+      sources."kafkajs-1.16.0"
+      (sources."kerberos-2.0.2" // {
+        dependencies = [
+          sources."node-addon-api-6.1.0"
+        ];
+      })
+      sources."kuler-2.0.0"
+      (sources."ldapts-4.2.6" // {
+        dependencies = [
+          sources."uuid-9.0.0"
+        ];
+      })
+      sources."leac-0.6.0"
+      sources."leven-2.1.0"
+      sources."levn-0.3.0"
+      sources."libbase64-1.2.1"
+      sources."libmime-5.2.1"
+      sources."libphonenumber-js-1.10.44"
+      sources."libpq-1.8.12"
+      sources."libqp-2.0.1"
+      sources."lie-3.1.1"
+      sources."limiter-1.1.5"
+      sources."linkify-it-3.0.3"
+      sources."loader-runner-4.3.0"
+      (sources."loader-utils-2.0.4" // {
+        dependencies = [
+          sources."big.js-5.2.2"
+        ];
+      })
+      sources."localforage-1.10.0"
+      (sources."localtunnel-2.0.2" // {
+        dependencies = [
+          sources."debug-4.3.2"
+        ];
+      })
+      sources."lodash-4.17.21"
+      sources."lodash-es-4.17.21"
+      sources."lodash-unified-1.0.3"
+      sources."lodash.camelcase-4.3.0"
+      sources."lodash.clonedeep-4.5.0"
+      sources."lodash.defaults-4.2.0"
+      sources."lodash.flatten-4.4.0"
+      sources."lodash.get-4.4.2"
+      sources."lodash.includes-4.3.0"
+      sources."lodash.isarguments-3.1.0"
+      sources."lodash.isboolean-3.0.3"
+      sources."lodash.isinteger-4.0.4"
+      sources."lodash.isnumber-3.0.3"
+      sources."lodash.isplainobject-4.0.6"
+      sources."lodash.isstring-4.0.1"
+      sources."lodash.once-4.1.1"
+      sources."lodash.orderby-4.6.0"
+      sources."lodash.snakecase-4.1.1"
+      sources."lodash.throttle-4.1.1"
+      sources."lodash.uniq-4.5.0"
+      sources."lodash.uniqby-4.7.0"
+      sources."lodash.zipobject-4.1.3"
+      sources."logform-2.5.1"
+      sources."long-4.0.0"
+      sources."lossless-json-1.0.5"
+      sources."lower-case-2.0.2"
+      sources."lru-cache-9.1.2"
+      (sources."lru-memoizer-2.2.0" // {
+        dependencies = [
+          sources."lru-cache-4.0.2"
+        ];
+      })
+      sources."lru_map-0.3.3"
+      sources."luxon-3.4.3"
+      sources."magic-string-0.30.3"
+      (sources."mailparser-3.6.5" // {
+        dependencies = [
+          sources."linkify-it-4.0.1"
+          sources."nodemailer-6.9.3"
+        ];
+      })
+      (sources."mailsplit-5.4.0" // {
+        dependencies = [
+          sources."libmime-5.2.0"
+        ];
+      })
+      (sources."make-dir-3.1.0" // {
+        dependencies = [
+          sources."semver-6.3.1"
+        ];
+      })
+      sources."make-error-1.3.6"
+      (sources."make-fetch-happen-9.1.0" // {
+        dependencies = [
+          sources."lru-cache-6.0.0"
+          sources."minipass-3.3.6"
+          sources."yallist-4.0.0"
+        ];
+      })
+      sources."mappersmith-2.42.0"
+      sources."markdown-it-13.0.1"
+      sources."markdown-it-emoji-2.0.2"
+      sources."markdown-it-link-attributes-4.0.1"
+      sources."markdown-it-task-lists-2.1.1"
+      sources."md5-2.3.0"
+      sources."mdurl-1.0.1"
+      sources."media-typer-0.3.0"
+      sources."memoize-one-6.0.0"
+      sources."merge-descriptors-1.0.1"
+      sources."merge-stream-2.0.0"
+      sources."merge2-1.4.1"
+      sources."methods-1.1.2"
+      sources."micromatch-4.0.5"
+      sources."mime-1.6.0"
+      sources."mime-db-1.52.0"
+      sources."mime-types-2.1.35"
+      sources."mimic-fn-2.1.0"
+      sources."mimic-response-3.1.0"
+      (sources."minifaker-1.34.1" // {
+        dependencies = [
+          sources."@types/uuid-8.3.4"
+        ];
+      })
+      sources."minimalistic-assert-1.0.1"
+      (sources."minimatch-3.1.2" // {
+        dependencies = [
+          sources."brace-expansion-1.1.11"
+        ];
+      })
+      sources."minimist-1.2.8"
+      sources."minipass-7.0.3"
+      (sources."minipass-collect-1.0.2" // {
+        dependencies = [
+          sources."minipass-3.3.6"
+          sources."yallist-4.0.0"
+        ];
+      })
+      (sources."minipass-fetch-1.4.1" // {
+        dependencies = [
+          sources."minipass-3.3.6"
+          sources."yallist-4.0.0"
+        ];
+      })
+      (sources."minipass-flush-1.0.5" // {
+        dependencies = [
+          sources."minipass-3.3.6"
+          sources."yallist-4.0.0"
+        ];
+      })
+      (sources."minipass-pipeline-1.2.4" // {
+        dependencies = [
+          sources."minipass-3.3.6"
+          sources."yallist-4.0.0"
+        ];
+      })
+      (sources."minipass-sized-1.0.3" // {
+        dependencies = [
+          sources."minipass-3.3.6"
+          sources."yallist-4.0.0"
+        ];
+      })
+      (sources."minizlib-2.1.2" // {
+        dependencies = [
+          sources."minipass-3.3.6"
+          sources."yallist-4.0.0"
+        ];
+      })
+      sources."mkdirp-0.5.6"
+      sources."mkdirp-classic-0.5.3"
+      sources."moment-2.29.4"
+      sources."moment-timezone-0.5.43"
+      sources."mongodb-5.8.1"
+      (sources."mongodb-client-encryption-2.9.0" // {
+        dependencies = [
+          sources."gaxios-5.1.3"
+          sources."gcp-metadata-5.3.0"
+        ];
+      })
+      (sources."mongodb-connection-string-url-2.6.0" // {
+        dependencies = [
+          sources."tr46-3.0.0"
+          sources."webidl-conversions-7.0.0"
+          sources."whatwg-url-11.0.0"
+        ];
+      })
+      (sources."mqtt-4.3.7" // {
+        dependencies = [
+          sources."concat-stream-2.0.0"
+          sources."lru-cache-6.0.0"
+          sources."pump-3.0.0"
+          sources."readable-stream-3.6.2"
+          sources."split2-3.2.2"
+          sources."ws-7.5.9"
+          sources."yallist-4.0.0"
+        ];
+      })
+      sources."mqtt-packet-6.10.0"
+      sources."ms-2.1.2"
+      sources."msgpackr-1.9.9"
+      (sources."mssql-9.3.2" // {
+        dependencies = [
+          sources."commander-11.0.0"
+        ];
+      })
+      sources."multer-1.4.5-lts.1"
+      sources."mute-stream-0.0.8"
+      (sources."mysql2-2.3.3" // {
+        dependencies = [
+          sources."denque-2.1.0"
+          sources."lru-cache-6.0.0"
+          sources."yallist-4.0.0"
+        ];
+      })
+      sources."mz-2.7.0"
+      (sources."n8n-core-1.5.0" // {
+        dependencies = [
+          sources."concat-stream-2.0.0"
+          sources."readable-stream-3.6.2"
+        ];
+      })
+      (sources."n8n-design-system-1.5.0" // {
+        dependencies = [
+          sources."@fortawesome/vue-fontawesome-2.0.10"
+          sources."@vue/compiler-sfc-2.7.14"
+          sources."argparse-2.0.1"
+          sources."markdown-it-12.3.2"
+          sources."vue-2.7.14"
+        ];
+      })
+      sources."n8n-editor-ui-1.5.0"
+      (sources."n8n-nodes-base-1.5.1" // {
+        dependencies = [
+          sources."@tediousjs/connection-string-0.3.0"
+          (sources."bl-5.1.0" // {
+            dependencies = [
+              sources."buffer-6.0.3"
+              sources."readable-stream-3.6.2"
+            ];
+          })
+          sources."bson-4.7.2"
+          sources."buffer-5.7.1"
+          sources."chokidar-3.5.2"
+          sources."commander-9.5.0"
+          sources."commist-3.2.0"
+          (sources."concat-stream-2.0.0" // {
+            dependencies = [
+              sources."readable-stream-3.6.2"
+            ];
+          })
+          sources."glob-8.1.0"
+          (sources."help-me-4.2.0" // {
+            dependencies = [
+              sources."readable-stream-3.6.2"
+            ];
+          })
+          sources."lru-cache-7.18.3"
+          sources."minimatch-5.1.6"
+          sources."mongodb-4.17.1"
+          sources."mqtt-5.0.5"
+          sources."mqtt-packet-8.2.0"
+          sources."mssql-8.1.4"
+          (sources."readable-stream-4.4.2" // {
+            dependencies = [
+              sources."buffer-6.0.3"
+            ];
+          })
+          sources."redis-3.1.2"
+          sources."sprintf-js-1.1.3"
+          sources."string_decoder-1.3.0"
+          sources."tedious-14.7.0"
+        ];
+      })
+      (sources."n8n-workflow-1.5.0" // {
+        dependencies = [
+          sources."ast-types-0.15.2"
+        ];
+      })
+      (sources."named-placeholders-1.1.3" // {
+        dependencies = [
+          sources."lru-cache-7.18.3"
+        ];
+      })
+      sources."nan-2.17.0"
+      sources."nanoclone-0.2.1"
+      sources."nanoid-3.3.6"
+      sources."napi-build-utils-1.0.2"
+      sources."native-duplexpair-1.0.0"
+      sources."natural-orderby-2.0.3"
+      sources."negotiator-0.6.3"
+      sources."neo-async-2.6.2"
+      sources."netmask-2.0.2"
+      sources."no-case-3.0.4"
+      sources."node-abi-3.47.0"
+      sources."node-abort-controller-3.1.1"
+      sources."node-addon-api-4.3.0"
+      sources."node-fetch-2.7.0"
+      sources."node-forge-1.3.1"
+      (sources."node-gyp-8.4.1" // {
+        dependencies = [
+          sources."are-we-there-yet-3.0.1"
+          sources."gauge-4.0.4"
+          sources."glob-7.2.3"
+          sources."npmlog-6.0.2"
+          sources."readable-stream-3.6.2"
+          sources."signal-exit-3.0.7"
+        ];
+      })
+      sources."node-gyp-build-4.6.1"
+      sources."node-html-markdown-1.3.0"
+      (sources."node-html-parser-6.1.9" // {
+        dependencies = [
+          sources."css-select-5.1.0"
+        ];
+      })
+      sources."node-machine-id-1.1.12"
+      sources."node-releases-2.0.13"
+      sources."node-rsa-1.1.1"
+      sources."node-ssh-12.0.5"
+      sources."nodeify-1.0.1"
+      sources."nodemailer-6.9.5"
+      sources."nopt-5.0.0"
+      sources."normalize-path-3.0.0"
+      sources."normalize-wheel-1.0.1"
+      sources."normalize-wheel-es-1.2.0"
+      sources."npmlog-5.0.1"
+      sources."nth-check-2.1.1"
+      sources."nub-0.0.0"
+      sources."number-allocator-1.0.14"
+      sources."nunjucks-3.2.4"
+      sources."oauth-1.0a-2.2.6"
+      sources."object-assign-4.1.1"
+      sources."object-hash-3.0.0"
+      sources."object-inspect-1.12.3"
+      sources."object-is-1.1.5"
+      sources."object-keys-1.1.1"
+      sources."object-treeify-1.1.33"
+      sources."object.assign-4.1.4"
+      sources."object.getownpropertydescriptors-2.1.7"
+      sources."on-finished-2.4.1"
+      sources."on-headers-1.0.2"
+      sources."once-1.4.0"
+      sources."one-time-1.0.0"
+      sources."onetime-5.1.2"
+      sources."ono-7.1.3"
+      sources."open-7.4.2"
+      sources."openapi-types-10.0.0"
+      sources."openurl-1.1.1"
+      sources."optionator-0.8.3"
+      sources."oracledb-5.5.0"
+      sources."os-name-1.0.3"
+      sources."os-tmpdir-1.0.2"
+      sources."osx-release-1.1.0"
+      sources."otpauth-9.1.4"
+      sources."p-cancelable-2.1.1"
+      sources."p-finally-1.0.0"
+      sources."p-lazy-3.1.0"
+      sources."p-limit-3.1.0"
+      sources."p-map-2.1.0"
+      sources."p-queue-6.6.2"
+      sources."p-timeout-3.2.0"
+      (sources."pac-proxy-agent-5.0.0" // {
+        dependencies = [
+          sources."socks-proxy-agent-5.0.1"
+        ];
+      })
+      (sources."pac-resolver-5.0.1" // {
+        dependencies = [
+          sources."ip-1.1.8"
+        ];
+      })
+      sources."packet-reader-1.0.0"
+      sources."pako-1.0.11"
+      sources."param-case-3.0.4"
+      sources."parse-github-url-1.0.2"
+      sources."parse-passwd-1.0.0"
+      sources."parse-srcset-1.0.2"
+      sources."parse5-5.1.1"
+      (sources."parse5-htmlparser2-tree-adapter-6.0.1" // {
+        dependencies = [
+          sources."parse5-6.0.1"
+        ];
+      })
+      sources."parseley-0.12.1"
+      sources."parseurl-1.3.3"
+      sources."pascal-case-3.1.2"
+      sources."passport-0.6.0"
+      sources."passport-cookie-1.0.9"
+      sources."passport-jwt-4.0.1"
+      sources."passport-strategy-1.0.0"
+      sources."password-prompt-1.1.3"
+      sources."path-case-3.0.4"
+      sources."path-is-absolute-1.0.1"
+      sources."path-key-3.1.1"
+      sources."path-parse-1.0.7"
+      sources."path-scurry-1.10.1"
+      sources."path-to-regexp-0.1.7"
+      sources."path-type-4.0.0"
+      sources."pause-0.0.1"
+      sources."pause-stream-0.0.11"
+      sources."pdfjs-dist-2.16.105"
+      sources."peberminta-0.9.0"
+      sources."peek-readable-4.1.0"
+      sources."pg-8.11.3"
+      sources."pg-connection-string-2.6.2"
+      sources."pg-cursor-2.10.3"
+      sources."pg-int8-1.0.1"
+      sources."pg-minify-1.6.2"
+      (sources."pg-native-3.0.1" // {
+        dependencies = [
+          sources."isarray-0.0.1"
+          sources."pg-types-1.13.0"
+          sources."postgres-array-1.0.3"
+          sources."readable-stream-1.0.31"
+          sources."string_decoder-0.10.31"
+        ];
+      })
+      sources."pg-pool-3.6.1"
+      (sources."pg-promise-10.15.4" // {
+        dependencies = [
+          sources."pg-8.8.0"
+        ];
+      })
+      sources."pg-protocol-1.6.0"
+      sources."pg-query-stream-4.5.3"
+      sources."pg-types-2.2.0"
+      sources."pgpass-1.0.5"
+      sources."picocolors-1.0.0"
+      sources."picomatch-2.3.1"
+      sources."pinia-2.1.6"
+      sources."pkce-challenge-3.1.0"
+      sources."postcss-8.4.29"
+      sources."postgres-array-2.0.0"
+      sources."postgres-bytea-1.0.0"
+      sources."postgres-date-1.0.7"
+      sources."postgres-interval-1.2.0"
+      (sources."posthog-node-2.6.0" // {
+        dependencies = [
+          sources."axios-0.27.2"
+        ];
+      })
+      (sources."prebuild-install-7.1.1" // {
+        dependencies = [
+          sources."pump-3.0.0"
+        ];
+      })
+      sources."prelude-ls-1.1.2"
+      sources."prettier-3.0.3"
+      sources."pretty-bytes-5.6.0"
+      sources."process-0.11.10"
+      sources."process-nextick-args-2.0.1"
+      sources."prom-client-13.2.0"
+      sources."promise-1.3.0"
+      sources."promise-ftp-1.3.5"
+      sources."promise-ftp-common-1.1.5"
+      sources."promise-inflight-1.0.1"
+      sources."promise-retry-2.0.1"
+      sources."promise.prototype.finally-3.1.5"
+      sources."property-expr-2.0.5"
+      sources."proto3-json-serializer-0.1.9"
+      sources."protobufjs-6.11.4"
+      sources."proxy-addr-2.0.7"
+      (sources."proxy-agent-5.0.0" // {
+        dependencies = [
+          sources."lru-cache-5.1.1"
+          sources."socks-proxy-agent-5.0.1"
+          sources."yallist-3.1.1"
+        ];
+      })
+      sources."proxy-from-env-1.1.0"
+      sources."pseudomap-1.0.2"
+      sources."psl-1.9.0"
+      sources."pump-2.0.1"
+      (sources."pumpify-1.5.1" // {
+        dependencies = [
+          sources."duplexify-3.7.1"
+        ];
+      })
+      sources."punycode-2.3.0"
+      sources."pyodide-0.23.4"
+      sources."python-struct-1.1.3"
+      sources."qrcode.vue-3.4.1"
+      sources."qs-6.11.0"
+      sources."query-string-7.1.3"
+      sources."querystring-0.2.0"
+      sources."querystringify-2.2.0"
+      sources."queue-microtask-1.2.3"
+      sources."quoted-printable-1.0.1"
+      sources."random-bytes-1.0.0"
+      sources."randombytes-2.1.0"
+      sources."range-parser-1.2.1"
+      (sources."raw-body-2.5.2" // {
+        dependencies = [
+          sources."bytes-3.1.2"
+          sources."iconv-lite-0.4.24"
+        ];
+      })
+      sources."rc-1.2.8"
+      (sources."readable-stream-2.3.8" // {
+        dependencies = [
+          sources."isarray-1.0.0"
+          sources."safe-buffer-5.1.2"
+        ];
+      })
+      (sources."readable-web-to-node-stream-3.0.2" // {
+        dependencies = [
+          sources."readable-stream-3.6.2"
+        ];
+      })
+      sources."readdirp-3.6.0"
+      (sources."recast-0.21.5" // {
+        dependencies = [
+          sources."ast-types-0.15.2"
+        ];
+      })
+      sources."rechoir-0.6.2"
+      sources."redeyed-2.1.1"
+      sources."redis-4.6.8"
+      sources."redis-commands-1.7.0"
+      sources."redis-errors-1.2.0"
+      sources."redis-parser-3.0.0"
+      sources."reflect-metadata-0.1.13"
+      sources."regenerator-runtime-0.13.11"
+      sources."regexp.prototype.flags-1.5.0"
+      sources."reinterval-1.1.0"
+      sources."remove-trailing-slash-0.1.1"
+      (sources."replacestream-4.0.3" // {
+        dependencies = [
+          sources."escape-string-regexp-1.0.5"
+        ];
+      })
+      sources."require-directory-2.1.1"
+      sources."requires-port-1.0.0"
+      sources."resolve-1.22.4"
+      (sources."restore-cursor-3.1.0" // {
+        dependencies = [
+          sources."signal-exit-3.0.7"
+        ];
+      })
+      sources."retry-0.12.0"
+      sources."retry-request-4.2.2"
+      sources."reusify-1.0.4"
+      (sources."rfc2047-4.0.1" // {
+        dependencies = [
+          sources."iconv-lite-0.4.5"
+        ];
+      })
+      sources."rfdc-1.3.0"
+      (sources."rhea-1.0.24" // {
+        dependencies = [
+          sources."debug-3.2.7"
+        ];
+      })
+      (sources."rimraf-3.0.2" // {
+        dependencies = [
+          sources."glob-7.2.3"
+        ];
+      })
+      sources."rndm-1.2.0"
+      sources."rss-parser-3.13.0"
+      sources."run-async-2.4.1"
+      sources."run-parallel-1.2.0"
+      (sources."rxjs-6.6.7" // {
+        dependencies = [
+          sources."tslib-1.14.1"
+        ];
+      })
+      sources."safe-array-concat-1.0.1"
+      sources."safe-buffer-5.2.1"
+      sources."safe-regex-test-1.0.0"
+      sources."safe-stable-stringify-2.4.3"
+      sources."safer-buffer-2.1.2"
+      sources."samlify-2.8.10"
+      sources."sanitize-html-2.10.0"
+      sources."sax-1.2.4"
+      sources."sb-promise-queue-2.1.0"
+      sources."sb-scandir-3.1.0"
+      sources."schema-utils-3.3.0"
+      sources."selderee-0.11.0"
+      (sources."semver-7.5.4" // {
+        dependencies = [
+          sources."lru-cache-6.0.0"
+          sources."yallist-4.0.0"
+        ];
+      })
+      (sources."send-0.18.0" // {
+        dependencies = [
+          (sources."debug-2.6.9" // {
+            dependencies = [
+              sources."ms-2.0.0"
+            ];
+          })
+          sources."ms-2.1.3"
+        ];
+      })
+      sources."sentence-case-3.0.4"
+      sources."seq-queue-0.0.5"
+      sources."serialize-javascript-5.0.1"
+      sources."serve-static-1.15.0"
+      sources."set-blocking-2.0.0"
+      sources."setprototypeof-1.2.0"
+      sources."sha.js-2.4.11"
+      sources."shebang-command-2.0.0"
+      sources."shebang-regex-3.0.0"
+      sources."shell-escape-0.2.0"
+      (sources."shelljs-0.8.5" // {
+        dependencies = [
+          sources."glob-7.2.3"
+        ];
+      })
+      (sources."showdown-2.1.0" // {
+        dependencies = [
+          sources."commander-9.5.0"
+        ];
+      })
+      sources."side-channel-1.0.4"
+      sources."signal-exit-4.1.0"
+      sources."simple-concat-1.0.1"
+      sources."simple-get-4.0.1"
+      sources."simple-git-3.19.1"
+      sources."simple-lru-cache-0.0.2"
+      sources."simple-swizzle-0.2.2"
+      sources."slash-3.0.0"
+      sources."smart-buffer-4.2.0"
+      sources."snake-case-3.0.4"
+      sources."snappy-7.2.2"
+      (sources."snowflake-sdk-1.8.0" // {
+        dependencies = [
+          sources."axios-0.27.2"
+          sources."bignumber.js-2.4.0"
+          sources."debug-3.2.7"
+          sources."glob-7.2.3"
+          sources."mkdirp-1.0.4"
+          sources."tmp-0.2.1"
+          sources."uuid-3.4.0"
+        ];
+      })
+      sources."socks-2.7.1"
+      sources."socks-proxy-agent-6.2.1"
+      sources."source-map-0.6.1"
+      sources."source-map-js-1.0.2"
+      sources."source-map-support-0.5.21"
+      sources."spex-3.2.0"
+      sources."split-array-stream-2.0.0"
+      sources."split-on-first-1.1.0"
+      sources."split2-4.2.0"
+      sources."sprintf-js-1.0.3"
+      sources."sql.js-1.8.0"
+      sources."sqlite3-5.1.6"
+      sources."sqlstring-2.3.3"
+      sources."sse-channel-4.0.0"
+      sources."ssh2-1.14.0"
+      (sources."ssh2-sftp-client-7.2.3" // {
+        dependencies = [
+          sources."concat-stream-2.0.0"
+          sources."readable-stream-3.6.2"
+        ];
+      })
+      (sources."sshpk-1.17.0" // {
+        dependencies = [
+          sources."tweetnacl-0.14.5"
+        ];
+      })
+      (sources."ssri-8.0.1" // {
+        dependencies = [
+          sources."minipass-3.3.6"
+          sources."yallist-4.0.0"
+        ];
+      })
+      sources."stack-trace-0.0.10"
+      sources."standard-as-callback-2.1.0"
+      sources."static-eval-2.0.2"
+      sources."statuses-2.0.1"
+      sources."stop-iteration-iterator-1.0.0"
+      sources."stoppable-1.1.0"
+      (sources."stream-browserify-3.0.0" // {
+        dependencies = [
+          sources."readable-stream-3.6.2"
+        ];
+      })
+      sources."stream-events-1.0.5"
+      sources."stream-shift-1.0.1"
+      sources."streamsearch-1.1.0"
+      sources."strict-event-emitter-types-2.0.0"
+      sources."strict-uri-encode-2.0.0"
+      sources."string-similarity-4.0.4"
+      sources."string-width-4.2.3"
+      sources."string-width-cjs-4.2.3"
+      sources."string.prototype.startswith-1.0.0"
+      sources."string.prototype.trim-1.2.8"
+      sources."string.prototype.trimend-1.0.7"
+      sources."string.prototype.trimstart-1.0.7"
+      (sources."string_decoder-1.1.1" // {
+        dependencies = [
+          sources."safe-buffer-5.1.2"
+        ];
+      })
+      sources."strip-ansi-6.0.1"
+      sources."strip-ansi-cjs-6.0.1"
+      sources."strip-json-comments-2.0.1"
+      sources."strnum-1.0.5"
+      sources."strtok3-6.3.0"
+      sources."stubs-3.0.0"
+      sources."style-mod-4.1.0"
+      sources."supports-color-7.2.0"
+      sources."supports-hyperlinks-2.3.0"
+      sources."supports-preserve-symlinks-flag-1.0.0"
+      sources."swagger-ui-dist-5.6.2"
+      sources."swagger-ui-express-4.6.3"
+      sources."syslog-client-1.1.1"
+      sources."tapable-2.2.1"
+      (sources."tar-6.2.0" // {
+        dependencies = [
+          sources."minipass-5.0.0"
+          sources."mkdirp-1.0.4"
+          sources."yallist-4.0.0"
+        ];
+      })
+      (sources."tar-fs-2.1.1" // {
+        dependencies = [
+          sources."chownr-1.1.4"
+          sources."pump-3.0.0"
+        ];
+      })
+      (sources."tar-stream-2.2.0" // {
+        dependencies = [
+          sources."readable-stream-3.6.2"
+        ];
+      })
+      sources."tarn-3.0.2"
+      sources."tdigest-0.1.2"
+      (sources."tedious-15.1.3" // {
+        dependencies = [
+          sources."bl-5.1.0"
+          sources."readable-stream-3.6.2"
+          sources."sprintf-js-1.1.3"
+        ];
+      })
+      (sources."teeny-request-7.2.0" // {
+        dependencies = [
+          sources."@tootallnate/once-2.0.0"
+          sources."http-proxy-agent-5.0.0"
+        ];
+      })
+      (sources."terser-5.19.4" // {
+        dependencies = [
+          sources."commander-2.20.3"
+        ];
+      })
+      (sources."terser-webpack-plugin-5.3.9" // {
+        dependencies = [
+          sources."@jridgewell/trace-mapping-0.3.19"
+          sources."serialize-javascript-6.0.1"
+        ];
+      })
+      sources."text-hex-1.0.0"
+      sources."thenify-3.3.1"
+      sources."thenify-all-1.6.0"
+      sources."through-2.3.8"
+      (sources."through2-4.0.2" // {
+        dependencies = [
+          sources."readable-stream-3.6.2"
+        ];
+      })
+      sources."timeago.js-4.0.2"
+      sources."title-case-3.0.3"
+      sources."tlds-1.240.0"
+      sources."tmp-0.0.33"
+      (sources."tmp-promise-3.0.3" // {
+        dependencies = [
+          sources."tmp-0.2.1"
+        ];
+      })
+      sources."to-regex-range-5.0.1"
+      sources."toggle-selection-1.0.6"
+      sources."toidentifier-1.0.1"
+      sources."token-types-4.2.1"
+      sources."toposort-2.0.2"
+      sources."tr46-0.0.3"
+      (sources."transliteration-2.3.5" // {
+        dependencies = [
+          sources."cliui-8.0.1"
+          sources."wrap-ansi-7.0.0"
+          sources."yargs-17.7.2"
+          sources."yargs-parser-21.1.1"
+        ];
+      })
+      sources."triple-beam-1.4.1"
+      sources."ts-node-10.9.1"
+      sources."tslib-2.6.2"
+      sources."tsscmp-1.0.6"
+      sources."tunnel-0.0.6"
+      sources."tunnel-agent-0.6.0"
+      sources."tweetnacl-1.0.3"
+      sources."tweetnacl-util-0.15.1"
+      sources."type-check-0.3.2"
+      sources."type-fest-0.21.3"
+      sources."type-is-1.6.18"
+      sources."typed-array-buffer-1.0.0"
+      sources."typed-array-byte-length-1.0.0"
+      sources."typed-array-byte-offset-1.0.0"
+      sources."typed-array-length-1.0.4"
+      sources."typedarray-0.0.6"
+      sources."typedi-0.10.0"
+      (sources."typeorm-0.3.17" // {
+        dependencies = [
+          sources."cliui-8.0.1"
+          sources."dotenv-16.3.1"
+          sources."glob-8.1.0"
+          sources."minimatch-5.1.6"
+          sources."mkdirp-2.1.6"
+          sources."uuid-9.0.0"
+          sources."wrap-ansi-7.0.0"
+          sources."yargs-17.7.2"
+          sources."yargs-parser-21.1.1"
+        ];
+      })
+      sources."typeorm-aurora-data-api-driver-2.4.4"
+      sources."typescript-5.2.2"
+      sources."uc.micro-1.0.6"
+      sources."uid-safe-2.1.5"
+      sources."unbox-primitive-1.0.2"
+      sources."underscore-1.12.1"
+      sources."undici-5.24.0"
+      sources."unescape-1.0.1"
+      sources."unique-filename-1.1.1"
+      sources."unique-slug-2.0.2"
+      sources."universalify-2.0.0"
+      sources."unpipe-1.0.0"
+      sources."update-browserslist-db-1.0.11"
+      sources."upper-case-2.0.2"
+      sources."upper-case-first-2.0.2"
+      sources."uri-js-4.4.1"
+      (sources."url-0.10.3" // {
+        dependencies = [
+          sources."punycode-1.3.2"
+        ];
+      })
+      sources."url-parse-1.5.10"
+      sources."url-value-parser-2.2.0"
+      (sources."urllib-2.41.0" // {
+        dependencies = [
+          sources."debug-2.6.9"
+          sources."iconv-lite-0.4.24"
+          sources."ip-1.1.8"
+          sources."ms-2.0.0"
+          sources."pump-3.0.0"
+          sources."statuses-1.5.0"
+        ];
+      })
+      sources."utf-8-validate-5.0.10"
+      (sources."utf7-1.0.2" // {
+        dependencies = [
+          sources."semver-5.3.0"
+        ];
+      })
+      sources."utf8-2.1.2"
+      sources."util-0.12.5"
+      sources."util-deprecate-1.0.2"
+      sources."util.promisify-1.1.2"
+      sources."utility-1.18.0"
+      sources."utils-merge-1.0.1"
+      sources."uuencode-0.0.4"
+      sources."uuid-8.3.2"
+      sources."v3-infinite-loading-1.3.1"
+      sources."v8-compile-cache-lib-3.0.1"
+      sources."validator-13.7.0"
+      sources."vary-1.1.2"
+      sources."vm2-3.9.19"
+      sources."vue-3.3.4"
+      sources."vue-agile-2.0.0"
+      sources."vue-boring-avatars-1.3.0"
+      sources."vue-demi-0.14.6"
+      sources."vue-i18n-9.4.0"
+      sources."vue-json-pretty-2.2.4"
+      sources."vue-router-4.2.4"
+      sources."vue3-touch-events-4.1.3"
+      sources."w3c-keyname-2.2.8"
+      sources."watchpack-2.4.0"
+      sources."web-streams-polyfill-3.2.1"
+      sources."webidl-conversions-3.0.1"
+      sources."webpack-5.88.2"
+      sources."webpack-sources-3.2.3"
+      sources."whatwg-url-5.0.0"
+      sources."which-2.0.2"
+      sources."which-boxed-primitive-1.0.2"
+      sources."which-collection-1.0.1"
+      sources."which-typed-array-1.1.11"
+      sources."wide-align-1.1.5"
+      sources."widest-line-3.1.0"
+      (sources."win-release-1.1.1" // {
+        dependencies = [
+          sources."semver-5.7.2"
+        ];
+      })
+      (sources."winston-3.10.0" // {
+        dependencies = [
+          sources."readable-stream-3.6.2"
+        ];
+      })
+      (sources."winston-transport-4.5.0" // {
+        dependencies = [
+          sources."readable-stream-3.6.2"
+        ];
+      })
+      sources."word-wrap-1.2.5"
+      sources."wordwrap-1.0.0"
+      sources."worker-loader-3.0.8"
+      sources."wrap-ansi-6.2.0"
+      sources."wrap-ansi-cjs-7.0.0"
+      sources."wrappy-1.0.2"
+      sources."ws-8.14.1"
+      sources."xlsx-https://cdn.sheetjs.com/xlsx-0.19.3/xlsx-0.19.3.tgz"
+      sources."xml-1.0.1"
+      sources."xml-crypto-3.2.0"
+      sources."xml2js-0.5.0"
+      sources."xmlbuilder-11.0.1"
+      sources."xmllint-wasm-3.0.1"
+      sources."xpath-0.0.32"
+      sources."xregexp-2.0.0"
+      (sources."xss-1.0.14" // {
+        dependencies = [
+          sources."commander-2.20.3"
+        ];
+      })
+      sources."xtend-4.0.2"
+      sources."y18n-5.0.8"
+      sources."yallist-2.1.2"
+      (sources."yamljs-0.3.0" // {
+        dependencies = [
+          sources."glob-7.2.3"
+        ];
+      })
+      sources."yargs-17.1.1"
+      sources."yargs-parser-20.2.9"
+      sources."yn-3.1.1"
+      sources."yocto-queue-0.1.0"
+      sources."yup-0.32.11"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "n8n Workflow Automation Tool";
+      homepage = "https://n8n.io";
+      license = "SEE LICENSE IN LICENSE.md";
+    };
+    production = true;
+    bypassCache = true;
+    reconstructLock = true;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/n8n/package.json b/nixpkgs/pkgs/applications/networking/n8n/package.json
new file mode 100644
index 000000000000..ac8d49dfaa41
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/n8n/package.json
@@ -0,0 +1,3 @@
+[
+  "n8n"
+]
diff --git a/nixpkgs/pkgs/applications/networking/nali/default.nix b/nixpkgs/pkgs/applications/networking/nali/default.nix
new file mode 100644
index 000000000000..96f5bc2cf0dd
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/nali/default.nix
@@ -0,0 +1,32 @@
+{ lib, fetchFromGitHub, buildGoModule, installShellFiles }:
+
+buildGoModule rec {
+  pname = "nali";
+  version = "0.7.3";
+
+  src = fetchFromGitHub {
+    owner = "zu1k";
+    repo = "nali";
+    rev = "v${version}";
+    sha256 = "sha256-ZKLxsq7ybom96NKWkioROAVXUoY20zFBZn7ksk4XvT4=";
+  };
+
+  vendorHash = "sha256-l3Fs1Hd0kXI56uotic1407tb4ltkCSMzqqozFpvobH8=";
+  subPackages = [ "." ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installShellCompletion --cmd nali \
+      --bash <($out/bin/nali completion bash) \
+      --fish <($out/bin/nali completion fish) \
+      --zsh <($out/bin/nali completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "An offline tool for querying IP geographic information and CDN provider";
+    homepage = "https://github.com/zu1k/nali";
+    license = licenses.mit;
+    maintainers = with maintainers; [ diffumist xyenon ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/ncgopher/default.nix b/nixpkgs/pkgs/applications/networking/ncgopher/default.nix
new file mode 100644
index 000000000000..bebb16740840
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/ncgopher/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, pkg-config
+, ncurses6
+, openssl
+, sqlite
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "ncgopher";
+  version = "0.5.0";
+
+  src = fetchFromGitHub {
+    owner = "jansc";
+    repo = "ncgopher";
+    rev = "v${version}";
+    sha256 = "sha256-KrvTwcIeINIBkia6PTnKXp4jFd6GEMBh/xbn0Ot/wmE=";
+  };
+
+  cargoSha256 = "sha256-Zft/ip+/uJbUIqCDDEa4hchmZZiYWGdaVnzWC74FgU8=";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [
+    ncurses6
+    openssl
+    sqlite
+  ];
+
+  meta = with lib; {
+    description = "A gopher and gemini client for the modern internet";
+    homepage = "https://github.com/jansc/ncgopher";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ shamilton ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/ndppd/default.nix b/nixpkgs/pkgs/applications/networking/ndppd/default.nix
new file mode 100644
index 000000000000..df3bc9f9f236
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/ndppd/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, gzip }:
+
+stdenv.mkDerivation rec {
+  pname = "ndppd";
+  version = "0.2.5";
+
+  src = fetchFromGitHub {
+    owner = "DanielAdolfsson";
+    repo = "ndppd";
+    rev = version;
+    sha256 = "0niri5q9qyyyw5lmjpxk19pv3v4srjvmvyd5k6ks99mvqczjx9c0";
+  };
+
+  nativeBuildInputs = [ gzip ];
+
+  makeFlags = [
+    "PREFIX=$(out)"
+  ];
+
+  preConfigure = ''
+    substituteInPlace Makefile --replace /bin/gzip gzip
+  '';
+
+  postInstall = ''
+    mkdir -p $out/etc
+    cp ndppd.conf-dist $out/etc/ndppd.conf
+  '';
+
+  meta = with lib; {
+    description = "A daemon that proxies NDP (Neighbor Discovery Protocol) messages between interfaces";
+    homepage = "https://github.com/DanielAdolfsson/ndppd";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ fadenb globin ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/netmaker/default.nix b/nixpkgs/pkgs/applications/networking/netmaker/default.nix
new file mode 100644
index 000000000000..fe90b8a81115
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/netmaker/default.nix
@@ -0,0 +1,44 @@
+{ buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, lib
+, libglvnd
+, pkg-config
+, subPackages ? ["." "netclient"]
+, xorg
+}:
+
+buildGoModule rec {
+  pname = "netmaker";
+  version = "0.21.0";
+
+  src = fetchFromGitHub {
+    owner = "gravitl";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-RL0tGhtndahTezQFz/twyLh36h2RXFy7EUnPiLAxP4U=";
+  };
+
+  vendorHash = "sha256-4Wxutkg9OdKs6B8z/P6JMgcE3cGS+6W4V7sKzVBwRJc=";
+
+  inherit subPackages;
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [
+    libglvnd
+    xorg.libX11
+    xorg.libXcursor
+    xorg.libXi
+    xorg.libXinerama
+    xorg.libXrandr
+  ];
+
+  meta = with lib; {
+    description = "WireGuard automation from homelab to enterprise";
+    homepage = "https://netmaker.io";
+    changelog = "https://github.com/gravitl/netmaker/-/releases/v${version}";
+    license = licenses.sspl;
+    maintainers = with maintainers; [ urandom qjoly ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/netperf/default.nix b/nixpkgs/pkgs/applications/networking/netperf/default.nix
new file mode 100644
index 000000000000..7722ab479c56
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/netperf/default.nix
@@ -0,0 +1,40 @@
+{ libsmbios, lib, stdenv, autoreconfHook, fetchFromGitHub, fetchpatch }:
+
+stdenv.mkDerivation {
+  pname = "netperf";
+  version = "20210121";
+
+  src = fetchFromGitHub {
+    owner = "HewlettPackard";
+    repo = "netperf";
+    rev = "3bc455b23f901dae377ca0a558e1e32aa56b31c4";
+    sha256 = "s4G1ZN+6LERdEMDkc+12ZQgTi6K+ppUYUCGn4faCS9c=";
+  };
+
+  patches = [
+    # Pul fix pending upstream inclusion for -fno-common toolchains:
+    #   https://github.com/HewlettPackard/netperf/pull/46
+    (fetchpatch {
+      name = "fno-common.patch";
+      url = "https://github.com/HewlettPackard/netperf/commit/c6a2e17fe35f0e68823451fedfdf5b1dbecddbe3.patch";
+      sha256 = "P/lRa6EakSalKWDTgZ7bWeGleaTLLa5UhzulxKd1xE4=";
+    })
+  ];
+
+  buildInputs = lib.optional (with stdenv.hostPlatform; isx86 && isLinux) libsmbios;
+  nativeBuildInputs = [ autoreconfHook ];
+  autoreconfPhase = ''
+    autoreconf -i -I src/missing/m4
+  '';
+  configureFlags = [ "--enable-demo" ];
+  enableParallelBuilding = true;
+
+  meta = {
+    description = "Benchmark to measure the performance of many different types of networking";
+    homepage = "http://www.netperf.org/netperf/";
+    license = lib.licenses.mit;
+
+    platforms = lib.platforms.unix;
+    maintainers = [ lib.maintainers.mmlb ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/newsreaders/liferea/default.nix b/nixpkgs/pkgs/applications/networking/newsreaders/liferea/default.nix
new file mode 100644
index 000000000000..fc2537a3e6d5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/newsreaders/liferea/default.nix
@@ -0,0 +1,92 @@
+{ lib, stdenv
+, fetchurl
+, pkg-config
+, intltool
+, python3Packages
+, wrapGAppsHook
+, glib
+, libxml2
+, libxslt
+, sqlite
+, libsoup
+, webkitgtk
+, json-glib
+, gst_all_1
+, libnotify
+, gtk3
+, gsettings-desktop-schemas
+, libpeas
+, libsecret
+, gobject-introspection
+, glib-networking
+, gitUpdater
+}:
+
+stdenv.mkDerivation rec {
+  pname = "liferea";
+  version = "1.15.2";
+
+  src = fetchurl {
+    url = "https://github.com/lwindolf/${pname}/releases/download/v${version}/${pname}-${version}.tar.bz2";
+    sha256 = "TpuET1VLOXwZHdpYg6vXT1MDGpV0IKbSIduf3bkNbeI=";
+  };
+
+  nativeBuildInputs = [
+    wrapGAppsHook
+    python3Packages.wrapPython
+    intltool
+    pkg-config
+    gobject-introspection
+  ];
+
+  buildInputs = [
+    glib
+    gtk3
+    webkitgtk
+    libxml2
+    libxslt
+    sqlite
+    libsoup
+    libpeas
+    gsettings-desktop-schemas
+    json-glib
+    libsecret
+    glib-networking
+    libnotify
+  ] ++ (with gst_all_1; [
+    gstreamer
+    gst-plugins-base
+    gst-plugins-good
+    gst-plugins-bad
+  ]);
+
+  pythonPath = with python3Packages; [
+    pygobject3
+    pycairo
+  ];
+
+  preFixup = ''
+    buildPythonPath "$out $pythonPath"
+    gappsWrapperArgs+=(--prefix PYTHONPATH : "$program_PYTHONPATH")
+  '';
+
+  passthru.updateScript = gitUpdater {
+    url = "https://github.com/lwindolf/${pname}";
+    rev-prefix = "v";
+  };
+
+  meta = with lib; {
+    description = "A GTK-based news feed aggregator";
+    homepage = "http://lzone.de/liferea/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ romildo yayayayaka ];
+    platforms = platforms.linux;
+
+    longDescription = ''
+      Liferea (Linux Feed Reader) is an RSS/RDF feed reader.
+      It's intended to be a clone of the Windows-only FeedReader.
+      It can be used to maintain a list of subscribed feeds,
+      browse through their items, and show their contents.
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/newsreaders/pan/default.nix b/nixpkgs/pkgs/applications/networking/newsreaders/pan/default.nix
new file mode 100644
index 000000000000..839766e2ac7b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/newsreaders/pan/default.nix
@@ -0,0 +1,62 @@
+{ spellChecking ? true
+, lib
+, stdenv
+, fetchFromGitLab
+, autoreconfHook
+, pkg-config
+, gtk3
+, gtkspell3
+, gmime3
+, gettext
+, intltool
+, itstool
+, libxml2
+, libnotify
+, gnutls
+, makeWrapper
+, gnupg
+, gnomeSupport ? true
+, libsecret
+, gcr
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pan";
+  version = "0.154";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.gnome.org";
+    owner = "GNOME";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-o+JFUraSoQ0HDmldHvTX+X7rl2L4n4lJmI4UFZrsfkQ=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config gettext intltool itstool libxml2 makeWrapper ];
+
+  buildInputs = [ gtk3 gmime3 libnotify gnutls ]
+    ++ lib.optional spellChecking gtkspell3
+    ++ lib.optionals gnomeSupport [ libsecret gcr ];
+
+  configureFlags = [
+    "--with-dbus"
+    "--with-gtk3"
+    "--with-gnutls"
+    "--enable-libnotify"
+  ] ++ lib.optional spellChecking "--with-gtkspell"
+  ++ lib.optional gnomeSupport "--enable-gkr";
+
+  postInstall = ''
+    wrapProgram $out/bin/pan --suffix PATH : ${gnupg}/bin
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "A GTK-based Usenet newsreader good at both text and binaries";
+    homepage = "http://pan.rebelbase.com/";
+    maintainers = [ maintainers.eelco ];
+    platforms = platforms.linux;
+    license = with licenses; [ gpl2Only fdl11Only ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/newsreaders/quiterss/default.nix b/nixpkgs/pkgs/applications/networking/newsreaders/quiterss/default.nix
new file mode 100644
index 000000000000..176ce43af5f7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/newsreaders/quiterss/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, qmake, pkg-config, wrapQtAppsHook
+, qtbase, qttools, qtwebkit, sqlite
+}:
+
+stdenv.mkDerivation rec {
+  pname = "quiterss";
+  version = "0.19.4";
+
+  src = fetchFromGitHub {
+    owner = "QuiteRSS";
+    repo = "quiterss";
+    rev = version;
+    sha256 = "1cgvl67vhn5y7bj5gbjbgk26bhb0196bgrgsp3r5fmrislarj8s6";
+  };
+
+  nativeBuildInputs = [ qmake pkg-config wrapQtAppsHook ];
+  buildInputs = [ qtbase qttools qtwebkit sqlite.dev ];
+
+  meta = with lib; {
+    description = "A Qt-based RSS/Atom news feed reader";
+    longDescription = ''
+      QuiteRSS is a open-source cross-platform RSS/Atom news feeds reader
+      written on Qt/C++
+    '';
+    homepage = "https://quiterss.org";
+    changelog = "https://github.com/QuiteRSS/quiterss/blob/${version}/CHANGELOG";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ primeos ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/newsreaders/raven-reader/default.nix b/nixpkgs/pkgs/applications/networking/newsreaders/raven-reader/default.nix
new file mode 100644
index 000000000000..b78afb6a726e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/newsreaders/raven-reader/default.nix
@@ -0,0 +1,38 @@
+{ lib, fetchurl, appimageTools }:
+
+let
+  pname = "raven-reader";
+  version = "1.0.80";
+  src = fetchurl {
+    url = "https://github.com/hello-efficiency-inc/raven-reader/releases/download/v${version}/Raven-Reader-${version}.AppImage";
+    sha256 = "sha256-RkpUWM1hAH73ePpQPj2C3SOukLpcPXbaXmb1VbcHaSU=";
+  };
+  appimageContents = appimageTools.extractType2 { inherit pname version src; };
+
+in
+appimageTools.wrapType2 {
+  inherit pname version src;
+
+  extraInstallCommands = ''
+    mv $out/bin/${pname}-${version} $out/bin/${pname}
+
+    mkdir -p $out/share/${pname}
+    cp -a ${appimageContents}/locales $out/share/${pname}
+    cp -a ${appimageContents}/resources $out/share/${pname}
+
+    install -m 444 -D ${appimageContents}/raven-reader.desktop -t $out/share/applications
+
+    cp -a ${appimageContents}/usr/share/icons $out/share/
+
+    substituteInPlace $out/share/applications/raven-reader.desktop \
+      --replace 'Exec=AppRun' 'Exec=raven-reader'
+  '';
+
+  meta = with lib; {
+    description = "Open source desktop news reader with flexible settings to optimize your experience";
+    homepage = "https://ravenreader.app/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ wolfangaukang ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/newsreaders/slrn/default.nix b/nixpkgs/pkgs/applications/networking/newsreaders/slrn/default.nix
new file mode 100644
index 000000000000..b29d9f494b04
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/newsreaders/slrn/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchurl
+, slang, ncurses, openssl }:
+
+stdenv.mkDerivation rec {
+  pname = "slrn";
+  version = "1.0.3a";
+
+  src = fetchurl {
+    url = "http://www.jedsoft.org/releases/slrn/slrn-${version}.tar.bz2";
+    sha256 = "1b1d9iikr60w0vq86y9a0l4gjl0jxhdznlrdp3r405i097as9a1v";
+  };
+
+  preConfigure = ''
+    sed -i -e "s|-ltermcap|-lncurses|" configure
+    sed -i autoconf/Makefile.in src/Makefile.in \
+      -e "s|/bin/cp|cp|"  \
+      -e "s|/bin/rm|rm|"
+  '';
+
+  configureFlags = [
+    "--with-slang=${slang.dev}"
+    "--with-ssl=${openssl.dev}"
+    "--with-slrnpull"
+  ];
+
+  buildInputs = [ slang ncurses openssl ];
+
+  meta = with lib; {
+    description = "The slrn (S-Lang read news) newsreader";
+    homepage = "https://slrn.sourceforge.net/index.html";
+    maintainers = with maintainers; [ ehmry ];
+    license = licenses.gpl2;
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/nextcloud-client/0001-Explicitly-copy-dbus-files-into-the-store-dir.patch b/nixpkgs/pkgs/applications/networking/nextcloud-client/0001-Explicitly-copy-dbus-files-into-the-store-dir.patch
new file mode 100644
index 000000000000..260a7dd4ddd7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/nextcloud-client/0001-Explicitly-copy-dbus-files-into-the-store-dir.patch
@@ -0,0 +1,20 @@
+From bbd366348d1f0e334d4604d04e293a046070e666 Mon Sep 17 00:00:00 2001
+From: Maximilian Bosch <maximilian@mbosch.me>
+Date: Fri, 23 Aug 2019 00:19:20 +0200
+Subject: [PATCH] Explicitly copy dbus files into the store dir
+
+---
+ shell_integration/libcloudproviders/CMakeLists.txt | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell_integration/libcloudproviders/CMakeLists.txt b/shell_integration/libcloudproviders/CMakeLists.txt
+index 2e7349ef7..512d4b188 100644
+--- a/shell_integration/libcloudproviders/CMakeLists.txt
++++ b/shell_integration/libcloudproviders/CMakeLists.txt
+@@ -1,5 +1,6 @@
+ macro(dbus_add_activation_service _sources)
+     pkg_get_variable(_install_dir dbus-1 session_bus_services_dir)
++    set(_install_dir "${CMAKE_INSTALL_DATADIR}/dbus-1/service")
+     foreach (_i ${_sources})
+         get_filename_component(_service_file ${_i} ABSOLUTE)
+         string(REGEX REPLACE "\\.service.*$" ".service" _output_file ${_i})
diff --git a/nixpkgs/pkgs/applications/networking/nextcloud-client/0001-When-creating-the-autostart-entry-do-not-use-an-abso.patch b/nixpkgs/pkgs/applications/networking/nextcloud-client/0001-When-creating-the-autostart-entry-do-not-use-an-abso.patch
new file mode 100644
index 000000000000..d3bac6af08d2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/nextcloud-client/0001-When-creating-the-autostart-entry-do-not-use-an-abso.patch
@@ -0,0 +1,24 @@
+From 54255deceaaaf118e9daadc3dd9f517c33bdd658 Mon Sep 17 00:00:00 2001
+From: Ilan Joselevich <personal@ilanjoselevich.com>
+Date: Tue, 30 Nov 2021 22:50:43 +0200
+Subject: [PATCH] When creating the autostart entry, do not use an absolute
+
+---
+ src/common/utility_unix.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/common/utility_unix.cpp b/src/common/utility_unix.cpp
+index 887213f09..c66468306 100644
+--- a/src/common/utility_unix.cpp
++++ b/src/common/utility_unix.cpp
+@@ -88,7 +88,7 @@ void setLaunchOnStartup_private(const QString &appName, const QString &guiName,
+         ts << QLatin1String("[Desktop Entry]\n")
+            << QLatin1String("Name=") << guiName << QLatin1Char('\n')
+            << QLatin1String("GenericName=") << QLatin1String("File Synchronizer\n")
+-           << QLatin1String("Exec=\"") << executablePath << "\" --background\n"
++           << QLatin1String("Exec=") << "nextcloud --background" << endl
+            << QLatin1String("Terminal=") << "false\n"
+            << QLatin1String("Icon=") << APPLICATION_ICON_NAME << QLatin1Char('\n')
+            << QLatin1String("Categories=") << QLatin1String("Network\n")
+-- 
+2.33.1
diff --git a/nixpkgs/pkgs/applications/networking/nextcloud-client/default.nix b/nixpkgs/pkgs/applications/networking/nextcloud-client/default.nix
new file mode 100644
index 000000000000..0699a9ffb236
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/nextcloud-client/default.nix
@@ -0,0 +1,104 @@
+{ lib
+, mkDerivation
+, fetchFromGitHub
+, cmake
+, extra-cmake-modules
+, inotify-tools
+, libcloudproviders
+, librsvg
+, libsecret
+, openssl
+, pcre
+, pkg-config
+, qtbase
+, qtkeychain
+, qttools
+, qtwebengine
+, qtwebsockets
+, qtquickcontrols2
+, qtgraphicaleffects
+, plasma5Packages
+, sphinx
+, sqlite
+, xdg-utils
+}:
+
+mkDerivation rec {
+  pname = "nextcloud-client";
+  version = "3.9.4";
+
+  outputs = [ "out" "dev" ];
+
+  src = fetchFromGitHub {
+    owner = "nextcloud";
+    repo = "desktop";
+    rev = "v${version}";
+    sha256 = "sha256-h8lOstl085haesmCmzq2o0OlQrO5U/mfGngQunynIuQ=";
+  };
+
+  patches = [
+    # Explicitly move dbus configuration files to the store path rather than `/etc/dbus-1/services`.
+    ./0001-Explicitly-copy-dbus-files-into-the-store-dir.patch
+    ./0001-When-creating-the-autostart-entry-do-not-use-an-abso.patch
+  ];
+
+  postPatch = ''
+    for file in src/libsync/vfs/*/CMakeLists.txt; do
+      substituteInPlace $file \
+        --replace "PLUGINDIR" "KDE_INSTALL_PLUGINDIR"
+    done
+  '';
+
+  nativeBuildInputs = [
+    pkg-config
+    cmake
+    extra-cmake-modules
+    librsvg
+    sphinx
+  ];
+
+  buildInputs = [
+    inotify-tools
+    libcloudproviders
+    libsecret
+    openssl
+    pcre
+    plasma5Packages.kio
+    qtbase
+    qtkeychain
+    qttools
+    qtwebengine
+    qtquickcontrols2
+    qtgraphicaleffects
+    qtwebsockets
+    sqlite
+  ];
+
+  qtWrapperArgs = [
+    "--prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ libsecret ]}"
+    # make xdg-open overrideable at runtime
+    "--suffix PATH : ${lib.makeBinPath [ xdg-utils ]}"
+  ];
+
+  cmakeFlags = [
+    "-DBUILD_UPDATER=off"
+    "-DCMAKE_INSTALL_LIBDIR=lib" # expected to be prefix-relative by build code setting RPATH
+    "-DNO_SHIBBOLETH=1" # allows to compile without qtwebkit
+  ];
+
+  # causes redefinition of _FORTIFY_SOURCE
+  hardeningDisable = [ "fortify3" ];
+
+  postBuild = ''
+    make doc-man
+  '';
+
+  meta = with lib; {
+    description = "Nextcloud themed desktop client";
+    homepage = "https://nextcloud.com";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ kranzes SuperSandro2000 ];
+    platforms = platforms.linux;
+    mainProgram = "nextcloud";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/nextdns/default.nix b/nixpkgs/pkgs/applications/networking/nextdns/default.nix
new file mode 100644
index 000000000000..c17c65e14fe2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/nextdns/default.nix
@@ -0,0 +1,24 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "nextdns";
+  version = "1.39.4";
+
+  src = fetchFromGitHub {
+    owner = "nextdns";
+    repo = "nextdns";
+    rev = "v${version}";
+    sha256 = "sha256-7inMloKU/AL4s/p171xCzs4p4+AcLsvsbVsELK9vhFc=";
+  };
+
+  vendorHash = "sha256-pCta8FzGVpl9fvnnjQ7/e2x/HolXAuxnz0vwKejGk98=";
+
+  ldflags = [ "-s" "-w" "-X main.version=${version}" ];
+
+  meta = with lib; {
+    description = "NextDNS DNS/53 to DoH Proxy";
+    homepage = "https://nextdns.io";
+    license = licenses.mit;
+    maintainers = with maintainers; [ pnelson ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/ngadmin/default.nix b/nixpkgs/pkgs/applications/networking/ngadmin/default.nix
new file mode 100644
index 000000000000..f63fbfcf9503
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/ngadmin/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, lib, fetchFromGitHub, autoreconfHook, readline
+, withReadline ? true
+, enableEmu ? true
+, enableSpy ? true
+}:
+
+stdenv.mkDerivation {
+  pname = "ngadmin";
+  version = "unstable-2020-10-05";
+
+  src = fetchFromGitHub {
+    owner = "Alkorin";
+    repo = "ngadmin";
+    rev = "5bf8650ce6d465b8cb1e570548819f0cefe9a87d";
+    sha256 = "15vixhwqcpbjdxlaznans9w63kwl29mdkds6spvbv2i7l33qnhq4";
+  };
+
+  nativeBuildInputs =
+    [ autoreconfHook ]
+    ++ lib.optional withReadline readline;
+  enableParallelBuilding = true;
+  configureFlags = with lib;
+    optional (!withReadline) "--without-readline"
+    ++ optional enableEmu "--enable-emu"
+    ++ optional enableSpy "--enable-spy";
+
+  meta = with lib; {
+    description = "Netgear switch (NSDP) administration tool";
+    homepage = "https://www.netgeek.ovh/wiki/projets:ngadmin";
+    license = licenses.gpl2Only;
+    maintainers = [ maintainers.astro ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/nload/default.nix b/nixpkgs/pkgs/applications/networking/nload/default.nix
new file mode 100644
index 000000000000..e46a95d71e49
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/nload/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchurl, fetchpatch, ncurses }:
+
+stdenv.mkDerivation rec {
+  version = "0.7.4";
+  pname = "nload";
+
+  src = fetchurl {
+    url = "http://www.roland-riegel.de/nload/${pname}-${version}.tar.gz";
+    sha256 = "1rb9skch2kgqzigf19x8bzk211jdfjfdkrcvaqyj89jy2pkm3h61";
+  };
+
+  patches = [
+    # Fixes an ugly bug of graphs scrolling to the side, corrupting the view.
+    # There is an upstream fix, but not a new upstream release that includes it.
+    # Other distributions like Gentoo also patch this as a result; see:
+    #   https://github.com/rolandriegel/nload/issues/3#issuecomment-427579143
+    # TODO Remove when https://github.com/rolandriegel/nload/issues/3 is merged and available
+    (fetchpatch {
+      url = "https://github.com/rolandriegel/nload/commit/8a93886e0fb33a81b8fe32e88ee106a581fedd34.patch";
+      name = "nload-0.7.4-Eliminate-flicker-on-some-terminals.patch";
+      sha256 = "10yppy5l50wzpcvagsqkbyf1rcan6aj30am4rw8hmkgnbidf4zbq";
+    })
+  ];
+
+  buildInputs = [ ncurses ];
+
+  meta = {
+    description = "Monitors network traffic and bandwidth usage with ncurses graphs";
+    longDescription = ''
+      nload is a console application which monitors network traffic and
+      bandwidth usage in real time. It visualizes the in- and outgoing traffic
+      using two graphs and provides additional info like total amount of
+      transfered data and min/max network usage.
+    '';
+    homepage = "http://www.roland-riegel.de/nload/index.html";
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
+    maintainers = [ lib.maintainers.devhell ];
+    mainProgram = "nload";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/nntp-proxy/default.nix b/nixpkgs/pkgs/applications/networking/nntp-proxy/default.nix
new file mode 100644
index 000000000000..a3a136a32695
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/nntp-proxy/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, libconfig, pkg-config, libevent, openssl, libxcrypt }:
+
+stdenv.mkDerivation {
+  pname = "nntp-proxy";
+  version = "2014-01-06";
+
+  src = fetchFromGitHub {
+    owner = "nieluj";
+    repo = "nntp-proxy";
+    rev = "0358e7ad6c4676f90ac5074320b16e1461b0011a";
+    sha256 = "0jwxh71am83fbnq9mn06jl06rq8qybm506js79xmmc3xbk5pqvy4";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libconfig libevent openssl libxcrypt ];
+
+  installFlags = [ "INSTALL_DIR=$(out)/bin/" ];
+
+  prePatch = ''
+    mkdir -p $out/bin
+    substituteInPlace Makefile \
+      --replace /usr/bin/install $(type -P install) \
+      --replace gcc cc
+  '';
+
+  meta = {
+    description = "Simple NNTP proxy with SSL support";
+    homepage = "https://github.com/nieluj/nntp-proxy";
+    license = lib.licenses.gpl2Plus;
+    maintainers = [ lib.maintainers.fadenb ];
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/novnc/default.nix b/nixpkgs/pkgs/applications/networking/novnc/default.nix
new file mode 100644
index 000000000000..17d32b84a78f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/novnc/default.nix
@@ -0,0 +1,41 @@
+{ lib, python3, stdenv, substituteAll, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "novnc";
+  version = "1.4.0";
+
+  src = fetchFromGitHub {
+    owner = "novnc";
+    repo = "noVNC";
+    rev = "v${version}";
+    sha256 = "sha256-G7Rtv7pQFR9UrzhYXDyBf+FRqtjo5NAXU7m/HeXhI1k=";
+  };
+
+  patches = with python3.pkgs; [
+    (substituteAll {
+      src = ./websockify.patch;
+      inherit websockify;
+    })
+  ] ++ [ ./fix-paths.patch ];
+
+  postPatch = ''
+    substituteAllInPlace utils/novnc_proxy
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 utils/novnc_proxy "$out/bin/novnc"
+    install -dm755 "$out/share/webapps/novnc/"
+    cp -a app core po vendor vnc.html karma.conf.js package.json vnc_lite.html "$out/share/webapps/novnc/"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "VNC client web application";
+    homepage = "https://novnc.com";
+    license = with licenses; [ mpl20 ofl bsd3 bsd2 mit ];
+    maintainers = with maintainers; [ neverbehave ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/novnc/fix-paths.patch b/nixpkgs/pkgs/applications/networking/novnc/fix-paths.patch
new file mode 100644
index 000000000000..cb160320dd53
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/novnc/fix-paths.patch
@@ -0,0 +1,22 @@
+diff --git a/utils/novnc_proxy b/utils/novnc_proxy
+index 0900f7e..a931763 100755
+--- a/utils/novnc_proxy
++++ b/utils/novnc_proxy
+@@ -22,7 +22,7 @@ usage() {
+     echo "                          Default: self.pem"
+     echo "    --key KEY             Path to key file, when not combined with cert"
+     echo "    --web WEB             Path to web files (e.g. vnc.html)"
+-    echo "                          Default: ./"
++    echo "                          Default: @out@/share/webapps/novnc"
+     echo "    --ssl-only            Disable non-https connections."
+     echo "                                    "
+     echo "    --record FILE         Record traffic to FILE.session.js"
+@@ -44,7 +44,7 @@ PORT="6080"
+ VNC_DEST="localhost:5900"
+ CERT=""
+ KEY=""
+-WEB=""
++WEB="@out@/share/webapps/novnc"
+ proxy_pid=""
+ SSLONLY=""
+ RECORD_ARG=""
diff --git a/nixpkgs/pkgs/applications/networking/novnc/websockify.patch b/nixpkgs/pkgs/applications/networking/novnc/websockify.patch
new file mode 100644
index 000000000000..dd335cdbfc6c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/novnc/websockify.patch
@@ -0,0 +1,13 @@
+diff --git a/utils/novnc_proxy b/utils/novnc_proxy
+index 0365c1e..7eba2db 100755
+--- a/utils/novnc_proxy
++++ b/utils/novnc_proxy
+@@ -167,7 +167,7 @@ if [[ -d ${HERE}/websockify ]]; then
+ 
+     echo "Using local websockify at $WEBSOCKIFY"
+ else
+-    WEBSOCKIFY_FROMSYSTEM=$(which websockify 2>/dev/null)
++    WEBSOCKIFY_FROMSYSTEM="@websockify@/bin/websockify"
+     WEBSOCKIFY_FROMSNAP=${HERE}/../usr/bin/python2-websockify
+     [ -f $WEBSOCKIFY_FROMSYSTEM ] && WEBSOCKIFY=$WEBSOCKIFY_FROMSYSTEM
+     [ -f $WEBSOCKIFY_FROMSNAP ] && WEBSOCKIFY=$WEBSOCKIFY_FROMSNAP
diff --git a/nixpkgs/pkgs/applications/networking/nym/Cargo.lock b/nixpkgs/pkgs/applications/networking/nym/Cargo.lock
new file mode 100644
index 000000000000..0863011bb32f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/nym/Cargo.lock
@@ -0,0 +1,7899 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "Inflector"
+version = "0.11.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3"
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "aead"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0"
+dependencies = [
+ "crypto-common",
+ "generic-array 0.14.7",
+]
+
+[[package]]
+name = "aes"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8"
+dependencies = [
+ "cfg-if",
+ "cipher 0.3.0",
+ "cpufeatures",
+ "ctr 0.8.0",
+ "opaque-debug 0.3.0",
+]
+
+[[package]]
+name = "aes"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "433cfd6710c9986c576a25ca913c39d66a6474107b406f34f91d4a8923395241"
+dependencies = [
+ "cfg-if",
+ "cipher 0.4.4",
+ "cpufeatures",
+]
+
+[[package]]
+name = "aes-gcm"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82e1366e0c69c9f927b1fa5ce2c7bf9eafc8f9268c0b9800729e8b267612447c"
+dependencies = [
+ "aead",
+ "aes 0.8.2",
+ "cipher 0.4.4",
+ "ctr 0.9.2",
+ "ghash",
+ "subtle 2.4.1",
+]
+
+[[package]]
+name = "ahash"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
+dependencies = [
+ "getrandom 0.2.9",
+ "once_cell",
+ "version_check",
+]
+
+[[package]]
+name = "ahash"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+ "version_check",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67fc08ce920c31afb70f013dcce1bfc3a3195de6a228474e45e1f145b36f8d04"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "android_log-sys"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "27f0fc03f560e1aebde41c2398b691cb98b5ea5996a6184a7a67bbbb77448969"
+
+[[package]]
+name = "android_logger"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fa490e751f3878eb9accb9f18988eca52c2337ce000a8bf31ef50d4c723ca9e"
+dependencies = [
+ "android_log-sys",
+ "env_logger 0.10.0",
+ "log",
+ "once_cell",
+]
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "anes"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299"
+
+[[package]]
+name = "anstream"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "is-terminal",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41ed9a86bf92ae6580e0a31281f65a1b1d867c0cc68d5346e2ae128dddfa6a7d"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e765fd216e48e067936442276d1d57399e37bce53c264d6fefbe298080cb57ee"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188"
+dependencies = [
+ "anstyle",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.71"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8"
+
+[[package]]
+name = "argon2"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95c2fcf79ad1932ac6269a738109997a83c227c09b75842ae564dc8ede6a861c"
+dependencies = [
+ "base64ct",
+ "blake2 0.10.6",
+ "password-hash",
+]
+
+[[package]]
+name = "arrayref"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545"
+
+[[package]]
+name = "arrayvec"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6"
+
+[[package]]
+name = "async-file-watcher"
+version = "0.1.0"
+dependencies = [
+ "futures",
+ "log",
+ "notify",
+ "tokio",
+]
+
+[[package]]
+name = "async-stream"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51"
+dependencies = [
+ "async-stream-impl",
+ "futures-core",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "async-stream-impl"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.16",
+]
+
+[[package]]
+name = "async-trait"
+version = "0.1.68"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.16",
+]
+
+[[package]]
+name = "atoi"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "616896e05fc0e2649463a93a15183c6a16bf03413a7af88ef1285ddedfa9cda5"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "atoi"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d7c57d12312ff59c811c0643f4d80830505833c9ffaebd193d819392b265be8e"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "atomic"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c59bdb34bc650a32731b31bd8f0829cc15d24a708ee31559e0bb34f2bc320cba"
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0dde43e75fd43e8a1bf86103336bc699aa8d17ad1be60c76c0bdfd4828e19b78"
+dependencies = [
+ "autocfg 1.1.0",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "axum"
+version = "0.6.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8175979259124331c1d7bf6586ee7e0da434155e4b2d48ec2c8386281d8df39"
+dependencies = [
+ "async-trait",
+ "axum-core",
+ "bitflags",
+ "bytes",
+ "futures-util",
+ "http",
+ "http-body",
+ "hyper",
+ "itoa",
+ "matchit",
+ "memchr",
+ "mime",
+ "percent-encoding",
+ "pin-project-lite",
+ "rustversion",
+ "serde",
+ "sync_wrapper",
+ "tower",
+ "tower-layer",
+ "tower-service",
+]
+
+[[package]]
+name = "axum-core"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c"
+dependencies = [
+ "async-trait",
+ "bytes",
+ "futures-util",
+ "http",
+ "http-body",
+ "mime",
+ "rustversion",
+ "tower-layer",
+ "tower-service",
+]
+
+[[package]]
+name = "base16ct"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce"
+
+[[package]]
+name = "base64"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+[[package]]
+name = "base64"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ea22880d78093b0cbe17c89f64a7d457941e65759157ec6cb31a31d652b05e5"
+
+[[package]]
+name = "base64"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a"
+
+[[package]]
+name = "base64ct"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b"
+
+[[package]]
+name = "binascii"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "383d29d513d8764dcdc42ea295d979eb99c3c9f00607b3692cf68a431f7dca72"
+
+[[package]]
+name = "bincode"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "bip32"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "873faa4363bfc54c36a48321da034c92a0645a363eed34d948683ffc1706e37f"
+dependencies = [
+ "bs58",
+ "hmac 0.11.0",
+ "k256",
+ "once_cell",
+ "pbkdf2",
+ "rand_core 0.6.4",
+ "ripemd160",
+ "sha2 0.9.9",
+ "subtle 2.4.1",
+ "zeroize",
+]
+
+[[package]]
+name = "bip39"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93f2635620bf0b9d4576eb7bb9a38a55df78bd1205d26fa994b25911a69f212f"
+dependencies = [
+ "bitcoin_hashes",
+ "rand 0.8.5",
+ "rand_core 0.6.4",
+ "serde",
+ "unicode-normalization",
+ "zeroize",
+]
+
+[[package]]
+name = "bitcoin_hashes"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90064b8dee6815a6470d60bad07bbbaee885c0e12d04177138fa3291a01b7bc4"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitvec"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c"
+dependencies = [
+ "funty",
+ "radium",
+ "tap",
+ "wyz",
+]
+
+[[package]]
+name = "blake2"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94cb07b0da6a73955f8fb85d24c466778e70cda767a568229b104f0264089330"
+dependencies = [
+ "byte-tools",
+ "crypto-mac 0.7.0",
+ "digest 0.8.1",
+ "opaque-debug 0.2.3",
+]
+
+[[package]]
+name = "blake2"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe"
+dependencies = [
+ "digest 0.10.6",
+]
+
+[[package]]
+name = "blake3"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42ae2468a89544a466886840aa467a25b766499f4f04bf7d9fcd10ecee9fccef"
+dependencies = [
+ "arrayref",
+ "arrayvec",
+ "cc",
+ "cfg-if",
+ "constant_time_eq",
+ "digest 0.10.6",
+]
+
+[[package]]
+name = "block-buffer"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4"
+dependencies = [
+ "block-padding",
+ "generic-array 0.14.7",
+]
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array 0.14.7",
+]
+
+[[package]]
+name = "block-padding"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae"
+
+[[package]]
+name = "bls12_381"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54757888b09a69be70b5ec303e382a74227392086ba808cb01eeca29233a2397"
+dependencies = [
+ "digest 0.9.0",
+ "ff 0.10.1",
+ "group 0.10.0",
+ "pairing 0.20.0",
+ "rand_core 0.6.4",
+ "subtle 2.4.1",
+]
+
+[[package]]
+name = "bls12_381"
+version = "0.6.0"
+source = "git+https://github.com/jstuczyn/bls12_381?branch=gt-serialisation#10fb6f700bfda17c8475af3bfd31e3fec15f2278"
+dependencies = [
+ "digest 0.9.0",
+ "ff 0.11.1",
+ "group 0.11.0",
+ "pairing 0.21.0",
+ "rand_core 0.6.4",
+ "subtle 2.4.1",
+ "zeroize",
+]
+
+[[package]]
+name = "bs58"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3"
+dependencies = [
+ "sha2 0.9.9",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.12.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c6ed94e98ecff0c12dd1b04c15ec0d7d9458ca8fe806cea6f12954efe74c63b"
+
+[[package]]
+name = "byte-tools"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "bytes"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
+
+[[package]]
+name = "cast"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5"
+
+[[package]]
+name = "cc"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+dependencies = [
+ "jobserver",
+]
+
+[[package]]
+name = "cesu8"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chacha"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ddf3c081b5fba1e5615640aae998e0fbd10c24cbd897ee39ed754a77601a4862"
+dependencies = [
+ "byteorder",
+ "keystream",
+]
+
+[[package]]
+name = "chacha20"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818"
+dependencies = [
+ "cfg-if",
+ "cipher 0.4.4",
+ "cpufeatures",
+]
+
+[[package]]
+name = "chacha20poly1305"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35"
+dependencies = [
+ "aead",
+ "chacha20",
+ "cipher 0.4.4",
+ "poly1305",
+ "zeroize",
+]
+
+[[package]]
+name = "chrono"
+version = "0.4.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b"
+dependencies = [
+ "iana-time-zone",
+ "js-sys",
+ "num-integer",
+ "num-traits",
+ "serde",
+ "time 0.1.45",
+ "wasm-bindgen",
+ "winapi",
+]
+
+[[package]]
+name = "ciborium"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "effd91f6c78e5a4ace8a5d3c0b6bfaec9e2baaef55f3efc00e45fb2e477ee926"
+dependencies = [
+ "ciborium-io",
+ "ciborium-ll",
+ "serde",
+]
+
+[[package]]
+name = "ciborium-io"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cdf919175532b369853f5d5e20b26b43112613fd6fe7aee757e35f7a44642656"
+
+[[package]]
+name = "ciborium-ll"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "defaa24ecc093c77630e6c15e17c51f5e187bf35ee514f4e2d67baaa96dae22b"
+dependencies = [
+ "ciborium-io",
+ "half",
+]
+
+[[package]]
+name = "cipher"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7"
+dependencies = [
+ "generic-array 0.14.7",
+]
+
+[[package]]
+name = "cipher"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad"
+dependencies = [
+ "crypto-common",
+ "inout",
+ "zeroize",
+]
+
+[[package]]
+name = "clap"
+version = "3.2.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123"
+dependencies = [
+ "bitflags",
+ "clap_lex 0.2.4",
+ "indexmap",
+ "textwrap",
+]
+
+[[package]]
+name = "clap"
+version = "4.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34d21f9bf1b425d2968943631ec91202fe5e837264063503708b83013f8fc938"
+dependencies = [
+ "clap_builder",
+ "clap_derive",
+ "once_cell",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "914c8c79fb560f238ef6429439a30023c862f7a28e688c58f7203f12b29970bd"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "bitflags",
+ "clap_lex 0.4.1",
+ "once_cell",
+ "strsim",
+]
+
+[[package]]
+name = "clap_complete"
+version = "4.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1594fe2312ec4abf402076e407628f5c313e54c32ade058521df4ee34ecac8a8"
+dependencies = [
+ "clap 4.2.7",
+]
+
+[[package]]
+name = "clap_complete_fig"
+version = "4.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3af28956330989baa428ed4d3471b853715d445c62de21b67292e22cf8a41fa"
+dependencies = [
+ "clap 4.2.7",
+ "clap_complete",
+]
+
+[[package]]
+name = "clap_derive"
+version = "4.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9644cd56d6b87dbe899ef8b053e331c0637664e9e21a33dfcdc36093f5c5c4"
+dependencies = [
+ "heck 0.4.1",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.16",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5"
+dependencies = [
+ "os_str_bytes",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a2dd5a6fe8c6e3502f568a6353e5273bbb15193ad9a89e457b9970798efbea1"
+
+[[package]]
+name = "cloudabi"
+version = "0.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "colorchoice"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
+
+[[package]]
+name = "colored"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b3616f750b84d8f0de8a58bda93e08e2a81ad3f523089b05f1dffecab48c6cbd"
+dependencies = [
+ "atty",
+ "lazy_static",
+ "winapi",
+]
+
+[[package]]
+name = "combine"
+version = "4.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4"
+dependencies = [
+ "bytes",
+ "memchr",
+]
+
+[[package]]
+name = "comfy-table"
+version = "6.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e7b787b0dc42e8111badfdbe4c3059158ccb2db8780352fa1b01e8ccf45cc4d"
+dependencies = [
+ "crossterm",
+ "strum 0.24.1",
+ "strum_macros 0.24.3",
+ "unicode-width",
+]
+
+[[package]]
+name = "console-api"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2895653b4d9f1538a83970077cb01dfc77a4810524e51a110944688e916b18e"
+dependencies = [
+ "prost 0.11.9",
+ "prost-types 0.11.9",
+ "tonic",
+ "tracing-core",
+]
+
+[[package]]
+name = "console-subscriber"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57ab2224a0311582eb03adba4caaf18644f7b1f10a760803a803b9b605187fc7"
+dependencies = [
+ "console-api",
+ "crossbeam-channel",
+ "crossbeam-utils",
+ "futures",
+ "hdrhistogram",
+ "humantime 2.1.0",
+ "prost-types 0.11.9",
+ "serde",
+ "serde_json",
+ "thread_local",
+ "tokio",
+ "tokio-stream",
+ "tonic",
+ "tracing",
+ "tracing-core",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "const-oid"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4c78c047431fee22c1a7bb92e00ad095a02a983affe4d8a72e2a2c62c1b94f3"
+
+[[package]]
+name = "constant_time_eq"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13418e745008f7349ec7e449155f419a61b92b58a99cc3616942b926825ec76b"
+
+[[package]]
+name = "cookie"
+version = "0.16.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e859cd57d0710d9e06c381b550c06e76992472a8c6d527aecd2fc673dcc231fb"
+dependencies = [
+ "aes-gcm",
+ "base64 0.20.0",
+ "hkdf 0.12.3",
+ "hmac 0.12.1",
+ "percent-encoding",
+ "rand 0.8.5",
+ "sha2 0.10.6",
+ "subtle 2.4.1",
+ "time 0.3.21",
+ "version_check",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+
+[[package]]
+name = "cosmos-sdk-proto"
+version = "0.12.3"
+source = "git+https://github.com/neacsu/cosmos-rust?branch=neacsu/feegrant_support#f63ded63ec13e753ebe8bdafe9dc503df265d67d"
+dependencies = [
+ "prost 0.10.4",
+ "prost-types 0.10.1",
+ "tendermint-proto",
+]
+
+[[package]]
+name = "cosmrs"
+version = "0.7.1"
+source = "git+https://github.com/neacsu/cosmos-rust?branch=neacsu/feegrant_support#f63ded63ec13e753ebe8bdafe9dc503df265d67d"
+dependencies = [
+ "bip32",
+ "cosmos-sdk-proto",
+ "ecdsa",
+ "eyre",
+ "getrandom 0.2.9",
+ "k256",
+ "prost 0.10.4",
+ "prost-types 0.10.1",
+ "rand_core 0.6.4",
+ "serde",
+ "serde_json",
+ "subtle-encoding",
+ "tendermint",
+ "tendermint-rpc",
+ "thiserror",
+]
+
+[[package]]
+name = "cosmwasm-crypto"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "970d1d705862179b5d7a233ae36f02f21c4ec1b8075fe60c77fc5b43471331fa"
+dependencies = [
+ "digest 0.9.0",
+ "ed25519-zebra",
+ "k256",
+ "rand_core 0.6.4",
+ "thiserror",
+]
+
+[[package]]
+name = "cosmwasm-derive"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b36e527620a2a3e00e46b6e731ab6c9b68d11069c986f7d7be8eba79ef081a4"
+dependencies = [
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "cosmwasm-std"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "875994993c2082a6fcd406937bf0fca21c349e4a624f3810253a14fa83a3a195"
+dependencies = [
+ "base64 0.13.1",
+ "cosmwasm-crypto",
+ "cosmwasm-derive",
+ "forward_ref",
+ "schemars",
+ "serde",
+ "serde-json-wasm",
+ "thiserror",
+ "uint",
+]
+
+[[package]]
+name = "cpu-cycles"
+version = "0.1.0"
+dependencies = [
+ "cfg-if",
+ "libc",
+]
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49fc9a695bca7f35f5f4c15cddc84415f66a74ea78eef08e90c5024f2b540e23"
+dependencies = [
+ "crc-catalog 1.1.1",
+]
+
+[[package]]
+name = "crc"
+version = "3.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86ec7a15cbe22e59248fc7eadb1907dab5ba09372595da4d73dd805ed4417dfe"
+dependencies = [
+ "crc-catalog 2.2.0",
+]
+
+[[package]]
+name = "crc-catalog"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccaeedb56da03b09f598226e25e80088cb4cd25f316e6e4df7d695f0feeb1403"
+
+[[package]]
+name = "crc-catalog"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9cace84e55f07e7301bae1c519df89cdad8cc3cd868413d3fdbdeca9ff3db484"
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "criterion"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7c76e09c1aae2bc52b3d2f29e13c6572553b30c4aa1b8a49fd70de6412654cb"
+dependencies = [
+ "anes",
+ "atty",
+ "cast",
+ "ciborium",
+ "clap 3.2.25",
+ "criterion-plot",
+ "itertools",
+ "lazy_static",
+ "num-traits",
+ "oorandom",
+ "plotters",
+ "rayon",
+ "regex",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "tinytemplate",
+ "walkdir",
+]
+
+[[package]]
+name = "criterion-plot"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1"
+dependencies = [
+ "cast",
+ "itertools",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+dependencies = [
+ "cfg-if",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695"
+dependencies = [
+ "autocfg 1.1.0",
+ "cfg-if",
+ "crossbeam-utils",
+ "memoffset",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-queue"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d1cfb3ea8a53f37c40dea2c7bedcbd88bdfae54f5e2175d6ecaff1c988353add"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crossterm"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e64e6c0fbe2c17357405f7c758c1ef960fce08bdfb2c03d88d2a18d7e09c4b67"
+dependencies = [
+ "bitflags",
+ "crossterm_winapi",
+ "libc",
+ "mio",
+ "parking_lot 0.12.1",
+ "signal-hook",
+ "signal-hook-mio",
+ "winapi",
+]
+
+[[package]]
+name = "crossterm_winapi"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ae1b35a484aa10e07fe0638d02301c5ad24de82d310ccbd2f3693da5f09bf1c"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "crunchy"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
+
+[[package]]
+name = "crypto-bigint"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03c6a1d5fa1de37e071642dfa44ec552ca5b299adb128fab16138e24b548fd21"
+dependencies = [
+ "generic-array 0.14.7",
+ "rand_core 0.6.4",
+ "subtle 2.4.1",
+ "zeroize",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array 0.14.7",
+ "rand_core 0.6.4",
+ "typenum",
+]
+
+[[package]]
+name = "crypto-mac"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4434400df11d95d556bac068ddfedd482915eb18fe8bea89bc80b6e4b1c179e5"
+dependencies = [
+ "generic-array 0.12.4",
+ "subtle 1.0.0",
+]
+
+[[package]]
+name = "crypto-mac"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714"
+dependencies = [
+ "generic-array 0.14.7",
+ "subtle 2.4.1",
+]
+
+[[package]]
+name = "ct-logs"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1a816186fa68d9e426e3cb4ae4dff1fcd8e4a2c34b781bf7a822574a0d0aac8"
+dependencies = [
+ "sct 0.6.1",
+]
+
+[[package]]
+name = "ctor"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096"
+dependencies = [
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "ctr"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea"
+dependencies = [
+ "cipher 0.3.0",
+]
+
+[[package]]
+name = "ctr"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835"
+dependencies = [
+ "cipher 0.4.4",
+]
+
+[[package]]
+name = "cupid"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8bad352a84b567cc38a5854e3aa8ee903cb8519a25d0b799b739bafffd1f91a1"
+dependencies = [
+ "gcc",
+ "rustc_version 0.2.3",
+]
+
+[[package]]
+name = "curve25519-dalek"
+version = "3.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61"
+dependencies = [
+ "byteorder",
+ "digest 0.9.0",
+ "rand_core 0.5.1",
+ "serde",
+ "subtle 2.4.1",
+ "zeroize",
+]
+
+[[package]]
+name = "cw-controllers"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f0bc6019b4d3d81e11f5c384bcce7173e2210bd654d75c6c9668e12cca05dfa"
+dependencies = [
+ "cosmwasm-std",
+ "cw-storage-plus",
+ "cw-utils",
+ "schemars",
+ "serde",
+ "thiserror",
+]
+
+[[package]]
+name = "cw-storage-plus"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "648b1507290bbc03a8d88463d7cd9b04b1fa0155e5eef366c4fa052b9caaac7a"
+dependencies = [
+ "cosmwasm-std",
+ "schemars",
+ "serde",
+]
+
+[[package]]
+name = "cw-utils"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9dbaecb78c8e8abfd6b4258c7f4fbeb5c49a5e45ee4d910d3240ee8e1d714e1b"
+dependencies = [
+ "cosmwasm-std",
+ "schemars",
+ "serde",
+ "thiserror",
+]
+
+[[package]]
+name = "cw2"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04cf4639517490dd36b333bbd6c4fbd92e325fd0acf4683b41753bc5eb63bfc1"
+dependencies = [
+ "cosmwasm-std",
+ "cw-storage-plus",
+ "schemars",
+ "serde",
+]
+
+[[package]]
+name = "cw3"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe19462a7f644ba60c19d3443cb90d00c50d9b6b3b0a3a7fca93df8261af979b"
+dependencies = [
+ "cosmwasm-std",
+ "cw-utils",
+ "schemars",
+ "serde",
+]
+
+[[package]]
+name = "cw4"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0acc3549d5ce11c6901b3a676f2e2628684722197054d97cd0101ea174ed5cbd"
+dependencies = [
+ "cosmwasm-std",
+ "cw-storage-plus",
+ "schemars",
+ "serde",
+]
+
+[[package]]
+name = "darling"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c"
+dependencies = [
+ "darling_core",
+ "darling_macro",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "strsim",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835"
+dependencies = [
+ "darling_core",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "dashmap"
+version = "4.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e77a43b28d0668df09411cb0bc9a8c2adc40f9a048afe863e05fd43251e8e39c"
+dependencies = [
+ "cfg-if",
+ "num_cpus",
+]
+
+[[package]]
+name = "dashmap"
+version = "5.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "907076dfda823b0b36d2a1bb5f90c96660a5bbcd7729e10727f07858f22c4edc"
+dependencies = [
+ "cfg-if",
+ "hashbrown 0.12.3",
+ "lock_api",
+ "once_cell",
+ "parking_lot_core 0.9.7",
+]
+
+[[package]]
+name = "der"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6919815d73839e7ad218de758883aae3a257ba6759ce7a9992501efbb53d705c"
+dependencies = [
+ "const-oid",
+]
+
+[[package]]
+name = "devise"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50c7580b072f1c8476148f16e0a0d5dedddab787da98d86c5082c5e9ed8ab595"
+dependencies = [
+ "devise_codegen",
+ "devise_core",
+]
+
+[[package]]
+name = "devise_codegen"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "123c73e7a6e51b05c75fe1a1b2f4e241399ea5740ed810b0e3e6cacd9db5e7b2"
+dependencies = [
+ "devise_core",
+ "quote",
+]
+
+[[package]]
+name = "devise_core"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "841ef46f4787d9097405cac4e70fb8644fc037b526e8c14054247c0263c400d0"
+dependencies = [
+ "bitflags",
+ "proc-macro2",
+ "proc-macro2-diagnostics 0.9.1",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "digest"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5"
+dependencies = [
+ "generic-array 0.12.4",
+]
+
+[[package]]
+name = "digest"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
+dependencies = [
+ "generic-array 0.14.7",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f"
+dependencies = [
+ "block-buffer 0.10.4",
+ "crypto-common",
+ "subtle 2.4.1",
+]
+
+[[package]]
+name = "dirs"
+version = "4.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059"
+dependencies = [
+ "dirs-sys",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "doc-comment"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10"
+
+[[package]]
+name = "dotenv"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f"
+
+[[package]]
+name = "dotenvy"
+version = "0.15.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b"
+
+[[package]]
+name = "dyn-clone"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68b0cf012f1230e43cd00ebb729c6bb58707ecfa8ad08b52ef3a4ccd2697fc30"
+
+[[package]]
+name = "ecdsa"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0d69ae62e0ce582d56380743515fefaf1a8c70cec685d9677636d7e30ae9dc9"
+dependencies = [
+ "der",
+ "elliptic-curve",
+ "rfc6979",
+ "signature",
+]
+
+[[package]]
+name = "ed25519"
+version = "1.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7"
+dependencies = [
+ "serde",
+ "signature",
+]
+
+[[package]]
+name = "ed25519-dalek"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d"
+dependencies = [
+ "curve25519-dalek",
+ "ed25519",
+ "rand 0.7.3",
+ "serde",
+ "serde_bytes",
+ "sha2 0.9.9",
+ "zeroize",
+]
+
+[[package]]
+name = "ed25519-zebra"
+version = "3.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c24f403d068ad0b359e577a77f92392118be3f3c927538f2bb544a5ecd828c6"
+dependencies = [
+ "curve25519-dalek",
+ "hashbrown 0.12.3",
+ "hex",
+ "rand_core 0.6.4",
+ "serde",
+ "sha2 0.9.9",
+ "zeroize",
+]
+
+[[package]]
+name = "either"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
+
+[[package]]
+name = "elliptic-curve"
+version = "0.11.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25b477563c2bfed38a3b7a60964c49e058b2510ad3f12ba3483fd8f62c2306d6"
+dependencies = [
+ "base16ct",
+ "crypto-bigint",
+ "der",
+ "ff 0.11.1",
+ "generic-array 0.14.7",
+ "group 0.11.0",
+ "rand_core 0.6.4",
+ "sec1",
+ "subtle 2.4.1",
+ "zeroize",
+]
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "enum-iterator"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45a0ac4aeb3a18f92eaf09c6bb9b3ac30ff61ca95514fc58cbead1c9a6bf5401"
+dependencies = [
+ "enum-iterator-derive",
+]
+
+[[package]]
+name = "enum-iterator-derive"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eecf8589574ce9b895052fa12d69af7a233f99e6107f5cb8dd1044f2a17bfdcb"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.16",
+]
+
+[[package]]
+name = "env_logger"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36"
+dependencies = [
+ "atty",
+ "humantime 1.3.0",
+ "log",
+ "regex",
+ "termcolor",
+]
+
+[[package]]
+name = "env_logger"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0"
+dependencies = [
+ "log",
+ "regex",
+]
+
+[[package]]
+name = "errno"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "event-listener"
+version = "2.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
+
+[[package]]
+name = "explorer-api"
+version = "1.1.21"
+dependencies = [
+ "chrono",
+ "clap 4.2.7",
+ "dotenvy",
+ "humantime-serde",
+ "isocountry",
+ "itertools",
+ "log",
+ "maxminddb",
+ "nym-bin-common",
+ "nym-contracts-common",
+ "nym-mixnet-contract-common",
+ "nym-network-defaults",
+ "nym-task",
+ "nym-validator-client",
+ "okapi",
+ "pretty_env_logger",
+ "rand 0.8.5",
+ "rand_pcg 0.3.1",
+ "rand_seeder",
+ "reqwest",
+ "rocket",
+ "rocket_cors",
+ "rocket_okapi",
+ "schemars",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "tokio",
+]
+
+[[package]]
+name = "ext-trait"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d772df1c1a777963712fb68e014235e80863d6a91a85c4e06ba2d16243a310e5"
+dependencies = [
+ "ext-trait-proc_macros",
+]
+
+[[package]]
+name = "ext-trait-proc_macros"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ab7934152eaf26aa5aa9f7371408ad5af4c31357073c9e84c3b9d7f11ad639a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "extension-traits"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a296e5a895621edf9fa8329c83aa1cb69a964643e36cf54d8d7a69b789089537"
+dependencies = [
+ "ext-trait",
+]
+
+[[package]]
+name = "eyre"
+version = "0.6.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c2b6b5a29c02cdc822728b7d7b8ae1bab3e3b05d44522770ddd49722eeac7eb"
+dependencies = [
+ "indenter",
+ "once_cell",
+]
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "ff"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0f40b2dcd8bc322217a5f6559ae5f9e9d1de202a2ecee2e9eafcbece7562a4f"
+dependencies = [
+ "rand_core 0.6.4",
+ "subtle 2.4.1",
+]
+
+[[package]]
+name = "ff"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "131655483be284720a17d74ff97592b8e76576dc25563148601df2d7c9080924"
+dependencies = [
+ "rand_core 0.6.4",
+ "subtle 2.4.1",
+]
+
+[[package]]
+name = "figment"
+version = "0.10.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e56602b469b2201400dec66a66aec5a9b8761ee97cd1b8c96ab2483fcc16cc9"
+dependencies = [
+ "atomic",
+ "pear",
+ "serde",
+ "toml",
+ "uncased",
+ "version_check",
+]
+
+[[package]]
+name = "filetime"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall 0.2.16",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "flex-error"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c606d892c9de11507fa0dcffc116434f94e105d0bbdc4e405b61519464c49d7b"
+dependencies = [
+ "eyre",
+ "paste",
+]
+
+[[package]]
+name = "flume"
+version = "0.10.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+ "pin-project",
+ "spin 0.9.8",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "forward_ref"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c8cbd1169bd7b4a0a20d92b9af7a7e0422888bd38a6f5ec29c1fd8c1558a272e"
+
+[[package]]
+name = "fsevent-sys"
+version = "4.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "fuchsia-cprng"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
+
+[[package]]
+name = "funty"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c"
+
+[[package]]
+name = "futures"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-intrusive"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a604f7a68fbf8103337523b1fadc8ade7361ee3f112f7c680ad179651616aed5"
+dependencies = [
+ "futures-core",
+ "lock_api",
+ "parking_lot 0.11.2",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
+
+[[package]]
+name = "futures-macro"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.16",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
+
+[[package]]
+name = "futures-task"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
+
+[[package]]
+name = "futures-util"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "gcc"
+version = "0.3.55"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2"
+
+[[package]]
+name = "generator"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3e123d9ae7c02966b4d892e550bdc32164f05853cd40ab570650ad600596a8a"
+dependencies = [
+ "cc",
+ "libc",
+ "log",
+ "rustversion",
+ "windows",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.12.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd"
+dependencies = [
+ "typenum",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "serde",
+ "typenum",
+ "version_check",
+ "zeroize",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "libc",
+ "wasi 0.9.0+wasi-snapshot-preview1",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "getset"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e45727250e75cc04ff2846a66397da8ef2b3db8e40e0cef4df67950a07621eb9"
+dependencies = [
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "ghash"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d930750de5717d2dd0b8c0d42c076c0e884c81a73e6cab859bbd2339c71e3e40"
+dependencies = [
+ "opaque-debug 0.3.0",
+ "polyval",
+]
+
+[[package]]
+name = "ghost"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e77ac7b51b8e6313251737fcef4b1c01a2ea102bde68415b62c0ee9268fec357"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.16",
+]
+
+[[package]]
+name = "git2"
+version = "0.14.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0155506aab710a86160ddb504a480d2964d7ab5b9e62419be69e0032bc5931c"
+dependencies = [
+ "bitflags",
+ "libc",
+ "libgit2-sys",
+ "log",
+ "url",
+]
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "gloo-timers"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "group"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c363a5301b8f153d80747126a04b3c82073b9fe3130571a9d170cacdeaf7912"
+dependencies = [
+ "byteorder",
+ "ff 0.10.1",
+ "rand_core 0.6.4",
+ "subtle 2.4.1",
+]
+
+[[package]]
+name = "group"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc5ac374b108929de78460075f3dc439fa66df9d8fc77e8f12caa5165fcf0c89"
+dependencies = [
+ "byteorder",
+ "ff 0.11.1",
+ "rand_core 0.6.4",
+ "subtle 2.4.1",
+]
+
+[[package]]
+name = "h2"
+version = "0.3.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d357c7ae988e7d2182f7d7871d0b963962420b0678b0997ce7de72001aeab782"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "half"
+version = "1.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7"
+
+[[package]]
+name = "handlebars"
+version = "3.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4498fc115fa7d34de968184e473529abb40eeb6be8bc5f7faba3d08c316cb3e3"
+dependencies = [
+ "log",
+ "pest",
+ "pest_derive",
+ "quick-error 2.0.1",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
+dependencies = [
+ "ahash 0.7.6",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+dependencies = [
+ "ahash 0.7.6",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e"
+dependencies = [
+ "ahash 0.8.3",
+]
+
+[[package]]
+name = "hashlink"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7249a3129cbc1ffccd74857f81464a323a152173cdb134e0fd81bc803b29facf"
+dependencies = [
+ "hashbrown 0.11.2",
+]
+
+[[package]]
+name = "hashlink"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0761a1b9491c4f2e3d66aa0f62d0fba0af9a0e2852e4d48ea506632a4b56e6aa"
+dependencies = [
+ "hashbrown 0.13.2",
+]
+
+[[package]]
+name = "hdrhistogram"
+version = "7.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f19b9f54f7c7f55e31401bb647626ce0cf0f67b0004982ce815b3ee72a02aa8"
+dependencies = [
+ "base64 0.13.1",
+ "byteorder",
+ "flate2",
+ "nom",
+ "num-traits",
+]
+
+[[package]]
+name = "headers"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3e372db8e5c0d213e0cd0b9be18be2aca3d44cf2fe30a9d46a65581cd454584"
+dependencies = [
+ "base64 0.13.1",
+ "bitflags",
+ "bytes",
+ "headers-core",
+ "http",
+ "httpdate",
+ "mime",
+ "sha1",
+]
+
+[[package]]
+name = "headers-core"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429"
+dependencies = [
+ "http",
+]
+
+[[package]]
+name = "heck"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
+name = "hex-literal"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0"
+
+[[package]]
+name = "hidapi"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "798154e4b6570af74899d71155fb0072d5b17e6aa12f39c8ef22c60fb8ec99e7"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "winapi",
+]
+
+[[package]]
+name = "hkdf"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01706d578d5c281058480e673ae4086a9f4710d8df1ad80a5b03e39ece5f886b"
+dependencies = [
+ "digest 0.9.0",
+ "hmac 0.11.0",
+]
+
+[[package]]
+name = "hkdf"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437"
+dependencies = [
+ "hmac 0.12.1",
+]
+
+[[package]]
+name = "hmac"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b"
+dependencies = [
+ "crypto-mac 0.11.1",
+ "digest 0.9.0",
+]
+
+[[package]]
+name = "hmac"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
+dependencies = [
+ "digest 0.10.6",
+]
+
+[[package]]
+name = "http"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
+
+[[package]]
+name = "humantime"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f"
+dependencies = [
+ "quick-error 1.2.3",
+]
+
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[package]]
+name = "humantime-serde"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57a3db5ea5923d99402c94e9feb261dc5ee9b4efa158b0315f788cf549cc200c"
+dependencies = [
+ "humantime 2.1.0",
+ "serde",
+]
+
+[[package]]
+name = "hyper"
+version = "0.14.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab302d72a6f11a3b910431ff93aae7e773078c769f0a3ef15fb9ec692ed147d4"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-proxy"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca815a891b24fdfb243fa3239c86154392b0953ee584aa1a2a1f66d20cbe75cc"
+dependencies = [
+ "bytes",
+ "futures",
+ "headers",
+ "http",
+ "hyper",
+ "hyper-rustls",
+ "rustls-native-certs",
+ "tokio",
+ "tokio-rustls 0.22.0",
+ "tower-service",
+ "webpki 0.21.4",
+]
+
+[[package]]
+name = "hyper-rustls"
+version = "0.22.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f9f7a97316d44c0af9b0301e65010573a853a9fc97046d7331d7f6bc0fd5a64"
+dependencies = [
+ "ct-logs",
+ "futures-util",
+ "hyper",
+ "log",
+ "rustls 0.19.1",
+ "rustls-native-certs",
+ "tokio",
+ "tokio-rustls 0.22.0",
+ "webpki 0.21.4",
+ "webpki-roots 0.21.1",
+]
+
+[[package]]
+name = "hyper-timeout"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1"
+dependencies = [
+ "hyper",
+ "pin-project-lite",
+ "tokio",
+ "tokio-io-timeout",
+]
+
+[[package]]
+name = "hyper-tls"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
+dependencies = [
+ "bytes",
+ "hyper",
+ "native-tls",
+ "tokio",
+ "tokio-native-tls",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0722cd7114b7de04316e7ea5456a0bbb20e4adb46fd27a3697adb812cff0f37c"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "windows",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "ident_case"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+
+[[package]]
+name = "idna"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8"
+dependencies = [
+ "matches",
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "idna"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "indenter"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683"
+
+[[package]]
+name = "indexed_db_futures"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfbcff6ae46750b15cc594bfd277b188cbddcfdc1817848f97f03f26f8625b9e"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "uuid 1.3.3",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+dependencies = [
+ "autocfg 1.1.0",
+ "hashbrown 0.12.3",
+ "serde",
+]
+
+[[package]]
+name = "inlinable_string"
+version = "0.1.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c8fae54786f62fb2918dcfae3d568594e50eb9b5c25bf04371af6fe7516452fb"
+
+[[package]]
+name = "inotify"
+version = "0.9.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff"
+dependencies = [
+ "bitflags",
+ "inotify-sys",
+ "libc",
+]
+
+[[package]]
+name = "inotify-sys"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "inout"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5"
+dependencies = [
+ "generic-array 0.14.7",
+]
+
+[[package]]
+name = "input_buffer"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f97967975f448f1a7ddb12b0bc41069d09ed6a1c161a92687e057325db35d413"
+dependencies = [
+ "bytes",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "inventory"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0eb5160c60ba1e809707918ee329adb99d222888155835c6feedba19f6c3fd4"
+dependencies = [
+ "ctor",
+ "ghost",
+ "inventory-impl",
+]
+
+[[package]]
+name = "inventory-impl"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e41b53715c6f0c4be49510bb82dee2c1e51c8586d885abe65396e82ed518548"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f"
+
+[[package]]
+name = "ipnetwork"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4088d739b183546b239688ddbc79891831df421773df95e236daf7867866d355"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "ipnetwork"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf466541e9d546596ee94f9f69590f89473455f88372423e0008fc1a7daf100e"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "is-terminal"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "io-lifetimes",
+ "rustix",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "isocountry"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ea1dc4bf0fb4904ba83ffdb98af3d9c325274e92e6e295e4151e86c96363e04"
+dependencies = [
+ "serde",
+ "thiserror",
+]
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
+
+[[package]]
+name = "jni"
+version = "0.21.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97"
+dependencies = [
+ "cesu8",
+ "cfg-if",
+ "combine",
+ "jni-sys",
+ "log",
+ "thiserror",
+ "walkdir",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "jni-sys"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
+
+[[package]]
+name = "jobserver"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "js-sys"
+version = "0.3.60"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "k256"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19c3a5e0a0b8450278feda242592512e09f61c72e018b8cd5c859482802daf2d"
+dependencies = [
+ "cfg-if",
+ "ecdsa",
+ "elliptic-curve",
+ "sec1",
+ "sha2 0.9.9",
+ "sha3",
+]
+
+[[package]]
+name = "keccak"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940"
+dependencies = [
+ "cpufeatures",
+]
+
+[[package]]
+name = "keystream"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c33070833c9ee02266356de0c43f723152bd38bd96ddf52c82b3af10c9138b28"
+
+[[package]]
+name = "kqueue"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c8fc60ba15bf51257aa9807a48a61013db043fcf3a78cb0d916e8e396dcad98"
+dependencies = [
+ "kqueue-sys",
+ "libc",
+]
+
+[[package]]
+name = "kqueue-sys"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8367585489f01bc55dd27404dcf56b95e6da061a256a666ab23be9ba96a2e587"
+dependencies = [
+ "bitflags",
+ "libc",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "ledger"
+version = "0.1.0"
+dependencies = [
+ "bip32",
+ "k256",
+ "ledger-transport",
+ "ledger-transport-hid",
+ "thiserror",
+]
+
+[[package]]
+name = "ledger-apdu"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe435806c197dfeaa5efcded5e623c4b8230fd28fdf1e91e7a86e40ef2acbf90"
+dependencies = [
+ "arrayref",
+ "no-std-compat",
+ "snafu",
+]
+
+[[package]]
+name = "ledger-transport"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1117f2143d92c157197785bf57711d7b02f2cfa101e162f8ca7900fb7f976321"
+dependencies = [
+ "async-trait",
+ "ledger-apdu",
+]
+
+[[package]]
+name = "ledger-transport-hid"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45ba81a1f5f24396b37211478aff7fbcd605dd4544df8dbed07b9da3c2057aee"
+dependencies = [
+ "byteorder",
+ "cfg-if",
+ "hex",
+ "hidapi",
+ "ledger-transport",
+ "libc",
+ "log",
+ "thiserror",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.144"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1"
+
+[[package]]
+name = "libgit2-sys"
+version = "0.13.5+1.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51e5ea06c26926f1002dd553fded6cfcdc9784c1f60feeb58368b4d9b07b6dba"
+dependencies = [
+ "cc",
+ "libc",
+ "libz-sys",
+ "pkg-config",
+]
+
+[[package]]
+name = "libm"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4"
+
+[[package]]
+name = "libsqlite3-sys"
+version = "0.24.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "898745e570c7d0453cc1fbc4a701eb6c662ed54e8fec8b7d14be137ebeeb9d14"
+dependencies = [
+ "cc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "libz-sys"
+version = "1.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56ee889ecc9568871456d42f603d6a0ce59ff328d291063a45cbdf0036baf6db"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ece97ea872ece730aed82664c424eb4c8291e1ff2480247ccf7409044bc6479f"
+
+[[package]]
+name = "lioness"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ae926706ba42c425c9457121178330d75e273df2e82e28b758faf3de3a9acb9"
+dependencies = [
+ "arrayref",
+ "blake2 0.8.1",
+ "chacha",
+ "keystream",
+]
+
+[[package]]
+name = "lock_api"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df"
+dependencies = [
+ "autocfg 1.1.0",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "loom"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5"
+dependencies = [
+ "cfg-if",
+ "generator",
+ "scoped-tls",
+ "serde",
+ "serde_json",
+ "tracing",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "macro_rules_attribute"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf0c9b980bf4f3a37fd7b1c066941dd1b1d0152ce6ee6e8fe8c49b9f6810d862"
+dependencies = [
+ "macro_rules_attribute-proc_macro",
+ "paste",
+]
+
+[[package]]
+name = "macro_rules_attribute-proc_macro"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58093314a45e00c77d5c508f76e77c3396afbbc0d01506e7fae47b018bac2b1d"
+
+[[package]]
+name = "matchers"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
+dependencies = [
+ "regex-automata",
+]
+
+[[package]]
+name = "matches"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5"
+
+[[package]]
+name = "matchit"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b87248edafb776e59e6ee64a79086f65890d3510f2c656c000bf2a7e8a0aea40"
+
+[[package]]
+name = "maxminddb"
+version = "0.23.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe2ba61113f9f7a9f0e87c519682d39c43a6f3f79c2cc42c3ba3dda83b1fa334"
+dependencies = [
+ "ipnetwork 0.18.0",
+ "log",
+ "memchr",
+ "serde",
+]
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memoffset"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1"
+dependencies = [
+ "autocfg 1.1.0",
+]
+
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9"
+dependencies = [
+ "libc",
+ "log",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "multer"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01acbdc23469fd8fe07ab135923371d5f5a422fbf9c522158677c8eb15bc51c2"
+dependencies = [
+ "bytes",
+ "encoding_rs",
+ "futures-util",
+ "http",
+ "httparse",
+ "log",
+ "memchr",
+ "mime",
+ "spin 0.9.8",
+ "tokio",
+ "tokio-util",
+ "version_check",
+]
+
+[[package]]
+name = "native-tls"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "log",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
+]
+
+[[package]]
+name = "no-std-compat"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c"
+
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "notify"
+version = "5.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "729f63e1ca555a43fe3efa4f3efdf4801c479da85b432242a7b726f353c88486"
+dependencies = [
+ "bitflags",
+ "crossbeam-channel",
+ "filetime",
+ "fsevent-sys",
+ "inotify",
+ "kqueue",
+ "libc",
+ "mio",
+ "walkdir",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "ntapi"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "nu-ansi-term"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
+dependencies = [
+ "overload",
+ "winapi",
+]
+
+[[package]]
+name = "num-derive"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg 1.1.0",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+dependencies = [
+ "autocfg 1.1.0",
+ "libm",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
+dependencies = [
+ "hermit-abi 0.2.6",
+ "libc",
+]
+
+[[package]]
+name = "nym-api"
+version = "1.1.22"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "bip39",
+ "bs58",
+ "cfg-if",
+ "clap 4.2.7",
+ "console-subscriber",
+ "cosmwasm-std",
+ "cw-utils",
+ "cw3",
+ "cw4",
+ "dirs",
+ "futures",
+ "getset",
+ "humantime-serde",
+ "lazy_static",
+ "log",
+ "nym-api-requests",
+ "nym-bandwidth-controller",
+ "nym-bin-common",
+ "nym-coconut",
+ "nym-coconut-bandwidth-contract-common",
+ "nym-coconut-dkg-common",
+ "nym-coconut-interface",
+ "nym-config",
+ "nym-contracts-common",
+ "nym-credential-storage",
+ "nym-credentials",
+ "nym-crypto",
+ "nym-dkg",
+ "nym-gateway-client",
+ "nym-inclusion-probability",
+ "nym-mixnet-contract-common",
+ "nym-multisig-contract-common",
+ "nym-name-service-common",
+ "nym-node-tester-utils",
+ "nym-pemstore",
+ "nym-service-provider-directory-common",
+ "nym-sphinx",
+ "nym-task",
+ "nym-topology",
+ "nym-validator-client",
+ "nym-vesting-contract-common",
+ "okapi",
+ "pin-project",
+ "pretty_env_logger",
+ "rand 0.7.3",
+ "rand 0.8.5",
+ "reqwest",
+ "rocket",
+ "rocket_cors",
+ "rocket_okapi",
+ "schemars",
+ "serde",
+ "serde_json",
+ "sqlx 0.6.3",
+ "tap",
+ "thiserror",
+ "time 0.3.21",
+ "tokio",
+ "tokio-stream",
+ "ts-rs",
+ "url",
+]
+
+[[package]]
+name = "nym-api-requests"
+version = "0.1.0"
+dependencies = [
+ "bs58",
+ "cosmrs",
+ "cosmwasm-std",
+ "getset",
+ "nym-coconut-interface",
+ "nym-mixnet-contract-common",
+ "schemars",
+ "serde",
+ "ts-rs",
+]
+
+[[package]]
+name = "nym-bandwidth-controller"
+version = "0.1.0"
+dependencies = [
+ "bip39",
+ "nym-coconut-interface",
+ "nym-credential-storage",
+ "nym-credentials",
+ "nym-crypto",
+ "nym-network-defaults",
+ "nym-validator-client",
+ "rand 0.7.3",
+ "thiserror",
+ "url",
+]
+
+[[package]]
+name = "nym-bin-common"
+version = "0.5.0"
+dependencies = [
+ "atty",
+ "clap 4.2.7",
+ "clap_complete",
+ "clap_complete_fig",
+ "log",
+ "pretty_env_logger",
+ "semver 0.11.0",
+ "serde",
+ "serde_json",
+ "tracing-appender",
+ "tracing-subscriber",
+ "tracing-tree",
+ "vergen",
+]
+
+[[package]]
+name = "nym-bity-integration"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "cosmrs",
+ "eyre",
+ "k256",
+ "nym-cli-commands",
+ "nym-validator-client",
+ "serde",
+ "serde_json",
+ "thiserror",
+]
+
+[[package]]
+name = "nym-cli"
+version = "1.1.21"
+dependencies = [
+ "anyhow",
+ "base64 0.13.1",
+ "bip39",
+ "bs58",
+ "clap 4.2.7",
+ "clap_complete",
+ "clap_complete_fig",
+ "dotenvy",
+ "log",
+ "nym-bin-common",
+ "nym-cli-commands",
+ "nym-network-defaults",
+ "nym-validator-client",
+ "pretty_env_logger",
+ "serde",
+ "serde_json",
+ "tap",
+ "tokio",
+]
+
+[[package]]
+name = "nym-cli-commands"
+version = "1.0.0"
+dependencies = [
+ "base64 0.13.1",
+ "bip39",
+ "bs58",
+ "cfg-if",
+ "clap 4.2.7",
+ "comfy-table",
+ "cosmrs",
+ "cosmwasm-std",
+ "cw-utils",
+ "handlebars",
+ "humantime-serde",
+ "k256",
+ "log",
+ "nym-bin-common",
+ "nym-coconut-bandwidth-contract-common",
+ "nym-coconut-dkg-common",
+ "nym-contracts-common",
+ "nym-crypto",
+ "nym-mixnet-contract-common",
+ "nym-multisig-contract-common",
+ "nym-name-service-common",
+ "nym-network-defaults",
+ "nym-service-provider-directory-common",
+ "nym-sphinx",
+ "nym-validator-client",
+ "nym-vesting-contract-common",
+ "rand 0.6.5",
+ "serde",
+ "serde_json",
+ "tap",
+ "thiserror",
+ "time 0.3.21",
+ "toml",
+ "url",
+]
+
+[[package]]
+name = "nym-client"
+version = "1.1.21"
+dependencies = [
+ "clap 4.2.7",
+ "dirs",
+ "futures",
+ "lazy_static",
+ "log",
+ "nym-bandwidth-controller",
+ "nym-bin-common",
+ "nym-client-core",
+ "nym-client-websocket-requests",
+ "nym-coconut-interface",
+ "nym-config",
+ "nym-credential-storage",
+ "nym-credentials",
+ "nym-crypto",
+ "nym-gateway-requests",
+ "nym-network-defaults",
+ "nym-pemstore",
+ "nym-sphinx",
+ "nym-task",
+ "nym-topology",
+ "nym-validator-client",
+ "pretty_env_logger",
+ "rand 0.7.3",
+ "serde",
+ "serde_json",
+ "tap",
+ "thiserror",
+ "tokio",
+ "tokio-tungstenite 0.14.0",
+ "url",
+]
+
+[[package]]
+name = "nym-client-core"
+version = "1.1.14"
+dependencies = [
+ "async-trait",
+ "dashmap 5.4.0",
+ "dirs",
+ "futures",
+ "gloo-timers",
+ "humantime-serde",
+ "log",
+ "nym-bandwidth-controller",
+ "nym-config",
+ "nym-credential-storage",
+ "nym-crypto",
+ "nym-gateway-client",
+ "nym-gateway-requests",
+ "nym-network-defaults",
+ "nym-nonexhaustive-delayqueue",
+ "nym-pemstore",
+ "nym-sphinx",
+ "nym-task",
+ "nym-topology",
+ "nym-validator-client",
+ "rand 0.7.3",
+ "serde",
+ "serde_json",
+ "sqlx 0.6.3",
+ "tap",
+ "tempfile",
+ "thiserror",
+ "time 0.3.21",
+ "tokio",
+ "tokio-stream",
+ "tokio-tungstenite 0.14.0",
+ "tungstenite 0.13.0",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "wasm-timer",
+ "wasm-utils",
+ "zeroize",
+]
+
+[[package]]
+name = "nym-client-websocket-requests"
+version = "0.1.0"
+dependencies = [
+ "nym-sphinx",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "nym-coconut"
+version = "0.5.0"
+dependencies = [
+ "bls12_381 0.6.0",
+ "bs58",
+ "criterion",
+ "digest 0.9.0",
+ "doc-comment",
+ "ff 0.11.1",
+ "getrandom 0.2.9",
+ "group 0.11.0",
+ "itertools",
+ "nym-dkg",
+ "nym-pemstore",
+ "rand 0.8.5",
+ "rand_chacha 0.3.1",
+ "serde",
+ "serde_derive",
+ "sha2 0.9.9",
+ "thiserror",
+]
+
+[[package]]
+name = "nym-coconut-bandwidth-contract-common"
+version = "0.1.0"
+dependencies = [
+ "cosmwasm-std",
+ "nym-multisig-contract-common",
+ "schemars",
+ "serde",
+]
+
+[[package]]
+name = "nym-coconut-dkg-common"
+version = "0.1.0"
+dependencies = [
+ "cosmwasm-std",
+ "cw-utils",
+ "nym-contracts-common",
+ "nym-multisig-contract-common",
+ "schemars",
+ "serde",
+]
+
+[[package]]
+name = "nym-coconut-interface"
+version = "0.1.0"
+dependencies = [
+ "bs58",
+ "getset",
+ "nym-coconut",
+ "serde",
+ "thiserror",
+]
+
+[[package]]
+name = "nym-config"
+version = "0.1.0"
+dependencies = [
+ "cfg-if",
+ "handlebars",
+ "log",
+ "nym-network-defaults",
+ "serde",
+ "toml",
+ "url",
+]
+
+[[package]]
+name = "nym-contracts-common"
+version = "0.5.0"
+dependencies = [
+ "bs58",
+ "cosmwasm-std",
+ "schemars",
+ "serde",
+ "serde_json",
+ "thiserror",
+]
+
+[[package]]
+name = "nym-credential-client"
+version = "0.1.0"
+dependencies = [
+ "clap 4.2.7",
+ "log",
+ "nym-bandwidth-controller",
+ "nym-bin-common",
+ "nym-config",
+ "nym-credential-storage",
+ "nym-credentials",
+ "nym-network-defaults",
+ "nym-pemstore",
+ "nym-validator-client",
+ "serde",
+ "thiserror",
+ "tokio",
+]
+
+[[package]]
+name = "nym-credential-storage"
+version = "0.1.0"
+dependencies = [
+ "async-trait",
+ "log",
+ "sqlx 0.5.13",
+ "thiserror",
+ "tokio",
+]
+
+[[package]]
+name = "nym-credentials"
+version = "0.1.0"
+dependencies = [
+ "bls12_381 0.5.0",
+ "cosmrs",
+ "nym-api-requests",
+ "nym-coconut-interface",
+ "nym-crypto",
+ "nym-validator-client",
+ "rand 0.7.3",
+ "thiserror",
+]
+
+[[package]]
+name = "nym-crypto"
+version = "0.4.0"
+dependencies = [
+ "aes 0.8.2",
+ "blake3",
+ "bs58",
+ "cipher 0.4.4",
+ "ctr 0.9.2",
+ "digest 0.10.6",
+ "ed25519-dalek",
+ "generic-array 0.14.7",
+ "hkdf 0.12.3",
+ "hmac 0.12.1",
+ "nym-pemstore",
+ "nym-sphinx-types",
+ "rand 0.7.3",
+ "rand_chacha 0.2.2",
+ "serde",
+ "serde_bytes",
+ "subtle-encoding",
+ "thiserror",
+ "x25519-dalek",
+ "zeroize",
+]
+
+[[package]]
+name = "nym-dkg"
+version = "0.1.0"
+dependencies = [
+ "bitvec",
+ "bls12_381 0.6.0",
+ "bs58",
+ "criterion",
+ "ff 0.11.1",
+ "group 0.11.0",
+ "lazy_static",
+ "nym-contracts-common",
+ "nym-pemstore",
+ "rand 0.8.5",
+ "rand_chacha 0.3.1",
+ "rand_core 0.6.4",
+ "serde",
+ "serde_derive",
+ "sha2 0.9.9",
+ "thiserror",
+ "zeroize",
+]
+
+[[package]]
+name = "nym-execute"
+version = "0.1.0"
+dependencies = [
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "nym-gateway"
+version = "1.1.21"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "atty",
+ "bip39",
+ "bs58",
+ "clap 4.2.7",
+ "colored",
+ "dashmap 4.0.2",
+ "dirs",
+ "dotenvy",
+ "futures",
+ "humantime-serde",
+ "lazy_static",
+ "log",
+ "nym-api-requests",
+ "nym-bin-common",
+ "nym-coconut-interface",
+ "nym-config",
+ "nym-credentials",
+ "nym-crypto",
+ "nym-gateway-requests",
+ "nym-mixnet-client",
+ "nym-mixnode-common",
+ "nym-network-defaults",
+ "nym-pemstore",
+ "nym-sphinx",
+ "nym-statistics-common",
+ "nym-task",
+ "nym-types",
+ "nym-validator-client",
+ "once_cell",
+ "pretty_env_logger",
+ "rand 0.7.3",
+ "serde",
+ "serde_json",
+ "sqlx 0.5.13",
+ "subtle-encoding",
+ "thiserror",
+ "tokio",
+ "tokio-stream",
+ "tokio-tungstenite 0.14.0",
+ "tokio-util",
+ "url",
+ "zeroize",
+]
+
+[[package]]
+name = "nym-gateway-client"
+version = "0.1.0"
+dependencies = [
+ "futures",
+ "getrandom 0.2.9",
+ "log",
+ "nym-bandwidth-controller",
+ "nym-coconut-interface",
+ "nym-credential-storage",
+ "nym-crypto",
+ "nym-gateway-requests",
+ "nym-network-defaults",
+ "nym-pemstore",
+ "nym-sphinx",
+ "nym-task",
+ "nym-validator-client",
+ "rand 0.7.3",
+ "serde",
+ "thiserror",
+ "tokio",
+ "tokio-stream",
+ "tokio-tungstenite 0.14.0",
+ "tungstenite 0.13.0",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "wasm-timer",
+ "wasm-utils",
+]
+
+[[package]]
+name = "nym-gateway-requests"
+version = "0.1.0"
+dependencies = [
+ "bs58",
+ "futures",
+ "generic-array 0.14.7",
+ "log",
+ "nym-coconut-interface",
+ "nym-credentials",
+ "nym-crypto",
+ "nym-pemstore",
+ "nym-sphinx",
+ "rand 0.7.3",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "tungstenite 0.13.0",
+ "zeroize",
+]
+
+[[package]]
+name = "nym-group-contract-common"
+version = "0.1.0"
+dependencies = [
+ "cw4",
+ "schemars",
+ "serde",
+]
+
+[[package]]
+name = "nym-inclusion-probability"
+version = "0.1.0"
+dependencies = [
+ "log",
+ "rand 0.8.5",
+ "thiserror",
+]
+
+[[package]]
+name = "nym-mixnet-client"
+version = "0.1.0"
+dependencies = [
+ "futures",
+ "log",
+ "nym-sphinx",
+ "nym-task",
+ "tokio",
+ "tokio-util",
+]
+
+[[package]]
+name = "nym-mixnet-contract-common"
+version = "0.6.0"
+dependencies = [
+ "bs58",
+ "cosmwasm-std",
+ "humantime-serde",
+ "log",
+ "nym-contracts-common",
+ "rand_chacha 0.3.1",
+ "schemars",
+ "serde",
+ "serde-json-wasm",
+ "serde_repr",
+ "thiserror",
+ "time 0.3.21",
+ "ts-rs",
+]
+
+[[package]]
+name = "nym-mixnode"
+version = "1.1.22"
+dependencies = [
+ "anyhow",
+ "bs58",
+ "cfg-if",
+ "clap 4.2.7",
+ "colored",
+ "cpu-cycles",
+ "cupid",
+ "dirs",
+ "futures",
+ "humantime-serde",
+ "lazy_static",
+ "log",
+ "nym-bin-common",
+ "nym-config",
+ "nym-contracts-common",
+ "nym-crypto",
+ "nym-mixnet-client",
+ "nym-mixnode-common",
+ "nym-nonexhaustive-delayqueue",
+ "nym-pemstore",
+ "nym-sphinx",
+ "nym-sphinx-params",
+ "nym-sphinx-types",
+ "nym-task",
+ "nym-topology",
+ "nym-types",
+ "nym-validator-client",
+ "opentelemetry",
+ "pretty_env_logger",
+ "rand 0.7.3",
+ "rocket",
+ "serde",
+ "serde_json",
+ "sysinfo",
+ "tokio",
+ "tokio-util",
+ "toml",
+ "tracing",
+ "url",
+]
+
+[[package]]
+name = "nym-mixnode-common"
+version = "0.1.0"
+dependencies = [
+ "bytes",
+ "cfg-if",
+ "cpu-cycles",
+ "futures",
+ "humantime-serde",
+ "log",
+ "nym-bin-common",
+ "nym-crypto",
+ "nym-network-defaults",
+ "nym-sphinx-acknowledgements",
+ "nym-sphinx-addressing",
+ "nym-sphinx-forwarding",
+ "nym-sphinx-framing",
+ "nym-sphinx-params",
+ "nym-sphinx-types",
+ "nym-task",
+ "nym-validator-client",
+ "rand 0.8.5",
+ "serde",
+ "thiserror",
+ "tokio",
+ "tokio-util",
+ "tracing",
+ "url",
+]
+
+[[package]]
+name = "nym-multisig-contract-common"
+version = "0.1.0"
+dependencies = [
+ "cosmwasm-std",
+ "cw-utils",
+ "cw3",
+ "cw4",
+ "schemars",
+ "serde",
+ "thiserror",
+]
+
+[[package]]
+name = "nym-name-service-common"
+version = "0.1.0"
+dependencies = [
+ "cosmwasm-std",
+ "schemars",
+ "serde",
+]
+
+[[package]]
+name = "nym-network-defaults"
+version = "0.1.0"
+dependencies = [
+ "cfg-if",
+ "dotenvy",
+ "hex-literal",
+ "once_cell",
+ "serde",
+ "thiserror",
+ "url",
+]
+
+[[package]]
+name = "nym-network-requester"
+version = "1.1.21"
+dependencies = [
+ "anyhow",
+ "async-file-watcher",
+ "async-trait",
+ "bs58",
+ "clap 4.2.7",
+ "dirs",
+ "futures",
+ "humantime-serde",
+ "ipnetwork 0.20.0",
+ "lazy_static",
+ "log",
+ "nym-bin-common",
+ "nym-client-core",
+ "nym-client-websocket-requests",
+ "nym-config",
+ "nym-credential-storage",
+ "nym-crypto",
+ "nym-network-defaults",
+ "nym-sdk",
+ "nym-service-providers-common",
+ "nym-socks5-proxy-helpers",
+ "nym-socks5-requests",
+ "nym-sphinx",
+ "nym-statistics-common",
+ "nym-task",
+ "nym-types",
+ "pretty_env_logger",
+ "publicsuffix",
+ "rand 0.7.3",
+ "reqwest",
+ "serde",
+ "serde_json",
+ "sqlx 0.6.3",
+ "tap",
+ "tempfile",
+ "thiserror",
+ "tokio",
+ "tokio-tungstenite 0.17.2",
+ "url",
+]
+
+[[package]]
+name = "nym-network-statistics"
+version = "1.1.21"
+dependencies = [
+ "dirs",
+ "log",
+ "nym-bin-common",
+ "nym-statistics-common",
+ "nym-task",
+ "pretty_env_logger",
+ "rocket",
+ "serde",
+ "sqlx 0.5.13",
+ "thiserror",
+ "tokio",
+]
+
+[[package]]
+name = "nym-node-tester-utils"
+version = "0.1.0"
+dependencies = [
+ "futures",
+ "log",
+ "nym-crypto",
+ "nym-sphinx",
+ "nym-sphinx-params",
+ "nym-task",
+ "nym-topology",
+ "rand 0.7.3",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "tokio",
+ "wasm-utils",
+]
+
+[[package]]
+name = "nym-nonexhaustive-delayqueue"
+version = "0.1.0"
+dependencies = [
+ "futures-core",
+ "slab",
+ "tokio",
+ "tokio-stream",
+ "tokio-util",
+ "wasm-timer",
+]
+
+[[package]]
+name = "nym-ordered-buffer"
+version = "0.1.0"
+dependencies = [
+ "log",
+ "thiserror",
+]
+
+[[package]]
+name = "nym-outfox"
+version = "0.1.0"
+dependencies = [
+ "blake3",
+ "chacha20",
+ "chacha20poly1305",
+ "criterion",
+ "curve25519-dalek",
+ "fastrand",
+ "getrandom 0.2.9",
+ "log",
+ "rand 0.7.3",
+ "rayon",
+ "sphinx-packet",
+ "thiserror",
+ "zeroize",
+]
+
+[[package]]
+name = "nym-pemstore"
+version = "0.3.0"
+dependencies = [
+ "pem",
+]
+
+[[package]]
+name = "nym-sdk"
+version = "0.1.0"
+dependencies = [
+ "bip39",
+ "dotenvy",
+ "futures",
+ "log",
+ "nym-bandwidth-controller",
+ "nym-bin-common",
+ "nym-client-core",
+ "nym-credential-storage",
+ "nym-credentials",
+ "nym-crypto",
+ "nym-gateway-requests",
+ "nym-network-defaults",
+ "nym-socks5-client-core",
+ "nym-sphinx",
+ "nym-task",
+ "nym-topology",
+ "nym-validator-client",
+ "pretty_env_logger",
+ "rand 0.7.3",
+ "reqwest",
+ "tap",
+ "thiserror",
+ "tokio",
+ "toml",
+ "url",
+]
+
+[[package]]
+name = "nym-service-provider-directory-common"
+version = "0.1.0"
+dependencies = [
+ "cosmwasm-std",
+ "cw-controllers",
+ "cw-utils",
+ "nym-contracts-common",
+ "schemars",
+ "serde",
+ "thiserror",
+]
+
+[[package]]
+name = "nym-service-providers-common"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "log",
+ "nym-bin-common",
+ "nym-sdk",
+ "nym-socks5-requests",
+ "nym-sphinx-anonymous-replies",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "tokio",
+]
+
+[[package]]
+name = "nym-socks5-client"
+version = "1.1.21"
+dependencies = [
+ "clap 4.2.7",
+ "lazy_static",
+ "log",
+ "nym-bin-common",
+ "nym-client-core",
+ "nym-coconut-interface",
+ "nym-config",
+ "nym-credential-storage",
+ "nym-credentials",
+ "nym-crypto",
+ "nym-gateway-requests",
+ "nym-network-defaults",
+ "nym-ordered-buffer",
+ "nym-pemstore",
+ "nym-socks5-client-core",
+ "nym-sphinx",
+ "nym-topology",
+ "pretty_env_logger",
+ "serde",
+ "serde_json",
+ "tap",
+ "thiserror",
+ "tokio",
+ "url",
+]
+
+[[package]]
+name = "nym-socks5-client-core"
+version = "0.1.0"
+dependencies = [
+ "dirs",
+ "futures",
+ "log",
+ "nym-bandwidth-controller",
+ "nym-client-core",
+ "nym-config",
+ "nym-credential-storage",
+ "nym-network-defaults",
+ "nym-service-providers-common",
+ "nym-socks5-proxy-helpers",
+ "nym-socks5-requests",
+ "nym-sphinx",
+ "nym-task",
+ "nym-validator-client",
+ "pin-project",
+ "rand 0.7.3",
+ "serde",
+ "tap",
+ "thiserror",
+ "tokio",
+]
+
+[[package]]
+name = "nym-socks5-listener"
+version = "0.1.0"
+dependencies = [
+ "android_logger",
+ "anyhow",
+ "futures",
+ "jni",
+ "lazy_static",
+ "log",
+ "nym-bin-common",
+ "nym-client-core",
+ "nym-config",
+ "nym-credential-storage",
+ "nym-crypto",
+ "nym-socks5-client-core",
+ "openssl",
+ "rand 0.7.3",
+ "safer-ffi",
+ "tokio",
+]
+
+[[package]]
+name = "nym-socks5-proxy-helpers"
+version = "0.1.0"
+dependencies = [
+ "bytes",
+ "futures",
+ "log",
+ "nym-ordered-buffer",
+ "nym-socks5-requests",
+ "nym-task",
+ "tokio",
+ "tokio-test",
+ "tokio-util",
+]
+
+[[package]]
+name = "nym-socks5-requests"
+version = "0.1.0"
+dependencies = [
+ "bincode",
+ "log",
+ "nym-service-providers-common",
+ "nym-sphinx-addressing",
+ "serde",
+ "serde_json",
+ "tap",
+ "thiserror",
+]
+
+[[package]]
+name = "nym-sphinx"
+version = "0.1.0"
+dependencies = [
+ "log",
+ "nym-crypto",
+ "nym-mixnet-contract-common",
+ "nym-sphinx-acknowledgements",
+ "nym-sphinx-addressing",
+ "nym-sphinx-anonymous-replies",
+ "nym-sphinx-chunking",
+ "nym-sphinx-cover",
+ "nym-sphinx-forwarding",
+ "nym-sphinx-framing",
+ "nym-sphinx-params",
+ "nym-sphinx-routing",
+ "nym-sphinx-types",
+ "nym-topology",
+ "rand 0.7.3",
+ "rand_distr",
+ "thiserror",
+ "tokio",
+]
+
+[[package]]
+name = "nym-sphinx-acknowledgements"
+version = "0.1.0"
+dependencies = [
+ "generic-array 0.14.7",
+ "nym-crypto",
+ "nym-pemstore",
+ "nym-sphinx-addressing",
+ "nym-sphinx-params",
+ "nym-sphinx-types",
+ "nym-topology",
+ "rand 0.7.3",
+ "serde",
+ "thiserror",
+ "zeroize",
+]
+
+[[package]]
+name = "nym-sphinx-addressing"
+version = "0.1.0"
+dependencies = [
+ "nym-crypto",
+ "nym-sphinx-types",
+ "rand 0.7.3",
+ "serde",
+ "thiserror",
+]
+
+[[package]]
+name = "nym-sphinx-anonymous-replies"
+version = "0.1.0"
+dependencies = [
+ "bs58",
+ "nym-crypto",
+ "nym-sphinx-addressing",
+ "nym-sphinx-params",
+ "nym-sphinx-types",
+ "nym-topology",
+ "rand 0.7.3",
+ "rand_chacha 0.2.2",
+ "serde",
+ "thiserror",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "nym-sphinx-chunking"
+version = "0.1.0"
+dependencies = [
+ "log",
+ "nym-sphinx-addressing",
+ "nym-sphinx-params",
+ "nym-sphinx-types",
+ "rand 0.7.3",
+ "thiserror",
+]
+
+[[package]]
+name = "nym-sphinx-cover"
+version = "0.1.0"
+dependencies = [
+ "nym-crypto",
+ "nym-sphinx-acknowledgements",
+ "nym-sphinx-addressing",
+ "nym-sphinx-chunking",
+ "nym-sphinx-forwarding",
+ "nym-sphinx-params",
+ "nym-sphinx-types",
+ "nym-topology",
+ "rand 0.7.3",
+ "thiserror",
+]
+
+[[package]]
+name = "nym-sphinx-forwarding"
+version = "0.1.0"
+dependencies = [
+ "nym-outfox",
+ "nym-sphinx-addressing",
+ "nym-sphinx-params",
+ "nym-sphinx-types",
+ "thiserror",
+]
+
+[[package]]
+name = "nym-sphinx-framing"
+version = "0.1.0"
+dependencies = [
+ "bytes",
+ "nym-sphinx-params",
+ "nym-sphinx-types",
+ "thiserror",
+ "tokio-util",
+]
+
+[[package]]
+name = "nym-sphinx-params"
+version = "0.1.0"
+dependencies = [
+ "nym-crypto",
+ "nym-sphinx-types",
+ "serde",
+ "thiserror",
+]
+
+[[package]]
+name = "nym-sphinx-routing"
+version = "0.1.0"
+dependencies = [
+ "nym-sphinx-addressing",
+ "nym-sphinx-types",
+ "thiserror",
+]
+
+[[package]]
+name = "nym-sphinx-types"
+version = "0.2.0"
+dependencies = [
+ "nym-outfox",
+ "sphinx-packet",
+ "thiserror",
+]
+
+[[package]]
+name = "nym-statistics-common"
+version = "1.0.1"
+dependencies = [
+ "async-trait",
+ "log",
+ "reqwest",
+ "serde",
+ "serde_json",
+ "sqlx 0.5.13",
+ "thiserror",
+ "tokio",
+]
+
+[[package]]
+name = "nym-store-cipher"
+version = "0.1.0"
+dependencies = [
+ "aes-gcm",
+ "argon2",
+ "generic-array 0.14.7",
+ "getrandom 0.2.9",
+ "rand 0.8.5",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "zeroize",
+]
+
+[[package]]
+name = "nym-task"
+version = "0.1.0"
+dependencies = [
+ "futures",
+ "log",
+ "thiserror",
+ "tokio",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+]
+
+[[package]]
+name = "nym-topology"
+version = "0.1.0"
+dependencies = [
+ "async-trait",
+ "bs58",
+ "log",
+ "nym-bin-common",
+ "nym-crypto",
+ "nym-mixnet-contract-common",
+ "nym-sphinx-addressing",
+ "nym-sphinx-routing",
+ "nym-sphinx-types",
+ "rand 0.7.3",
+ "thiserror",
+]
+
+[[package]]
+name = "nym-types"
+version = "1.0.0"
+dependencies = [
+ "cosmrs",
+ "cosmwasm-std",
+ "eyre",
+ "itertools",
+ "log",
+ "nym-coconut-interface",
+ "nym-config",
+ "nym-mixnet-contract-common",
+ "nym-validator-client",
+ "nym-vesting-contract",
+ "nym-vesting-contract-common",
+ "reqwest",
+ "schemars",
+ "serde",
+ "serde_json",
+ "strum 0.23.0",
+ "tempfile",
+ "thiserror",
+ "ts-rs",
+ "url",
+]
+
+[[package]]
+name = "nym-validator-client"
+version = "0.1.0"
+dependencies = [
+ "async-trait",
+ "base64 0.13.1",
+ "bip39",
+ "colored",
+ "cosmrs",
+ "cosmwasm-std",
+ "cw3",
+ "cw4",
+ "eyre",
+ "flate2",
+ "futures",
+ "itertools",
+ "log",
+ "nym-api-requests",
+ "nym-coconut-bandwidth-contract-common",
+ "nym-coconut-dkg-common",
+ "nym-coconut-interface",
+ "nym-config",
+ "nym-contracts-common",
+ "nym-group-contract-common",
+ "nym-mixnet-contract-common",
+ "nym-multisig-contract-common",
+ "nym-name-service-common",
+ "nym-network-defaults",
+ "nym-service-provider-directory-common",
+ "nym-vesting-contract",
+ "nym-vesting-contract-common",
+ "prost 0.10.4",
+ "reqwest",
+ "serde",
+ "serde_json",
+ "sha2 0.9.9",
+ "thiserror",
+ "tokio",
+ "ts-rs",
+ "url",
+ "zeroize",
+]
+
+[[package]]
+name = "nym-vesting-contract"
+version = "1.4.0"
+dependencies = [
+ "cosmwasm-derive",
+ "cosmwasm-std",
+ "cw-storage-plus",
+ "cw2",
+ "nym-contracts-common",
+ "nym-mixnet-contract-common",
+ "nym-vesting-contract-common",
+ "schemars",
+ "semver 1.0.17",
+ "serde",
+ "thiserror",
+ "vergen",
+]
+
+[[package]]
+name = "nym-vesting-contract-common"
+version = "0.7.0"
+dependencies = [
+ "cosmwasm-std",
+ "nym-contracts-common",
+ "nym-mixnet-contract-common",
+ "schemars",
+ "serde",
+ "ts-rs",
+]
+
+[[package]]
+name = "nym-wallet-types"
+version = "1.0.0"
+dependencies = [
+ "cosmrs",
+ "cosmwasm-std",
+ "hex-literal",
+ "nym-config",
+ "nym-mixnet-contract-common",
+ "nym-network-defaults",
+ "nym-types",
+ "nym-validator-client",
+ "nym-vesting-contract",
+ "nym-vesting-contract-common",
+ "serde",
+ "serde_json",
+ "strum 0.23.0",
+ "ts-rs",
+]
+
+[[package]]
+name = "okapi"
+version = "0.7.0-rc.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce66b6366e049880a35c378123fddb630b1a1a3c37fa1ca70caaf4a09f6e2893"
+dependencies = [
+ "log",
+ "schemars",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+
+[[package]]
+name = "oorandom"
+version = "11.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575"
+
+[[package]]
+name = "opaque-debug"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c"
+
+[[package]]
+name = "opaque-debug"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
+
+[[package]]
+name = "openssl"
+version = "0.10.52"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01b8574602df80f7b85fdfc5392fa884a4e3b3f4f35402c070ab34c3d3f78d56"
+dependencies = [
+ "bitflags",
+ "cfg-if",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.16",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-src"
+version = "111.25.3+1.1.1t"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "924757a6a226bf60da5f7dd0311a34d2b52283dd82ddeb103208ddc66362f80c"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e17f59264b2809d77ae94f0e1ebabc434773f370d6ca667bd223ea10e06cc7e"
+dependencies = [
+ "cc",
+ "libc",
+ "openssl-src",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "opentelemetry"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f4b8347cc26099d3aeee044065ecc3ae11469796b4d65d065a23a584ed92a6f"
+dependencies = [
+ "opentelemetry_api",
+ "opentelemetry_sdk",
+]
+
+[[package]]
+name = "opentelemetry_api"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed41783a5bf567688eb38372f2b7a8530f5a607a4b49d38dd7573236c23ca7e2"
+dependencies = [
+ "futures-channel",
+ "futures-util",
+ "indexmap",
+ "once_cell",
+ "pin-project-lite",
+ "thiserror",
+ "urlencoding",
+]
+
+[[package]]
+name = "opentelemetry_sdk"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b3a2a91fdbfdd4d212c0dcc2ab540de2c2bcbbd90be17de7a7daf8822d010c1"
+dependencies = [
+ "async-trait",
+ "crossbeam-channel",
+ "futures-channel",
+ "futures-executor",
+ "futures-util",
+ "once_cell",
+ "opentelemetry_api",
+ "percent-encoding",
+ "rand 0.8.5",
+ "thiserror",
+]
+
+[[package]]
+name = "os_str_bytes"
+version = "6.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ceedf44fb00f2d1984b0bc98102627ce622e083e49a5bacdb3e514fa4238e267"
+
+[[package]]
+name = "overload"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
+
+[[package]]
+name = "pairing"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7de9d09263c9966e8196fe0380c9dbbc7ea114b5cf371ba29004bc1f9c6db7f3"
+dependencies = [
+ "group 0.10.0",
+]
+
+[[package]]
+name = "pairing"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2e415e349a3006dd7d9482cdab1c980a845bed1377777d768cb693a44540b42"
+dependencies = [
+ "group 0.11.0",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99"
+dependencies = [
+ "instant",
+ "lock_api",
+ "parking_lot_core 0.8.6",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core 0.9.7",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc"
+dependencies = [
+ "cfg-if",
+ "instant",
+ "libc",
+ "redox_syscall 0.2.16",
+ "smallvec",
+ "winapi",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall 0.2.16",
+ "smallvec",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "password-hash"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166"
+dependencies = [
+ "base64ct",
+ "rand_core 0.6.4",
+ "subtle 2.4.1",
+]
+
+[[package]]
+name = "paste"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79"
+
+[[package]]
+name = "pbkdf2"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f05894bce6a1ba4be299d0c5f29563e08af2bc18bb7d48313113bed71e904739"
+dependencies = [
+ "crypto-mac 0.11.1",
+]
+
+[[package]]
+name = "pear"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ec95680a7087503575284e5063e14b694b7a9c0b065e5dceec661e0497127e8"
+dependencies = [
+ "inlinable_string",
+ "pear_codegen",
+ "yansi",
+]
+
+[[package]]
+name = "pear_codegen"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9661a3a53f93f09f2ea882018e4d7c88f6ff2956d809a276060476fd8c879d3c"
+dependencies = [
+ "proc-macro2",
+ "proc-macro2-diagnostics 0.10.0",
+ "quote",
+ "syn 2.0.16",
+]
+
+[[package]]
+name = "peg"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07c0b841ea54f523f7aa556956fbd293bcbe06f2e67d2eb732b7278aaf1d166a"
+dependencies = [
+ "peg-macros",
+ "peg-runtime",
+]
+
+[[package]]
+name = "peg-macros"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5aa52829b8decbef693af90202711348ab001456803ba2a98eb4ec8fb70844c"
+dependencies = [
+ "peg-runtime",
+ "proc-macro2",
+ "quote",
+]
+
+[[package]]
+name = "peg-runtime"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c719dcf55f09a3a7e764c6649ab594c18a177e3599c467983cdf644bfc0a4088"
+
+[[package]]
+name = "pem"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd56cbd21fea48d0c440b41cd69c589faacade08c992d9a54e471b79d0fd13eb"
+dependencies = [
+ "base64 0.13.1",
+ "once_cell",
+ "regex",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
+
+[[package]]
+name = "pest"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e68e84bfb01f0507134eac1e9b410a12ba379d064eab48c50ba4ce329a527b70"
+dependencies = [
+ "thiserror",
+ "ucd-trie",
+]
+
+[[package]]
+name = "pest_derive"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b79d4c71c865a25a4322296122e3924d30bc8ee0834c8bfc8b95f7f054afbfb"
+dependencies = [
+ "pest",
+ "pest_generator",
+]
+
+[[package]]
+name = "pest_generator"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c435bf1076437b851ebc8edc3a18442796b30f1728ffea6262d59bbe28b077e"
+dependencies = [
+ "pest",
+ "pest_meta",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.16",
+]
+
+[[package]]
+name = "pest_meta"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "745a452f8eb71e39ffd8ee32b3c5f51d03845f99786fa9b68db6ff509c505411"
+dependencies = [
+ "once_cell",
+ "pest",
+ "sha2 0.10.6",
+]
+
+[[package]]
+name = "pin-project"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c95a7476719eab1e366eaf73d0260af3021184f18177925b07f54b30089ceead"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39407670928234ebc5e6e580247dd567ad73a3578460c5990f9503df207e8f07"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.16",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkcs8"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7cabda3fb821068a9a4fab19a683eac3af12edf0f34b94a8be53c4972b8149d0"
+dependencies = [
+ "der",
+ "spki",
+ "zeroize",
+]
+
+[[package]]
+name = "pkg-config"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+
+[[package]]
+name = "plotters"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2538b639e642295546c50fcd545198c9d64ee2a38620a628724a3b266d5fbf97"
+dependencies = [
+ "num-traits",
+ "plotters-backend",
+ "plotters-svg",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "plotters-backend"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "193228616381fecdc1224c62e96946dfbc73ff4384fba576e052ff8c1bea8142"
+
+[[package]]
+name = "plotters-svg"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9a81d2759aae1dae668f783c308bc5c8ebd191ff4184aaa1b37f65a6ae5a56f"
+dependencies = [
+ "plotters-backend",
+]
+
+[[package]]
+name = "poly1305"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf"
+dependencies = [
+ "cpufeatures",
+ "opaque-debug 0.3.0",
+ "universal-hash",
+]
+
+[[package]]
+name = "polyval"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ef234e08c11dfcb2e56f79fd70f6f2eb7f025c0ce2333e82f4f0518ecad30c6"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "opaque-debug 0.3.0",
+ "universal-hash",
+]
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "pretty_env_logger"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "926d36b9553851b8b0005f1275891b392ee4d2d833852c417ed025477350fb9d"
+dependencies = [
+ "env_logger 0.7.1",
+ "log",
+]
+
+[[package]]
+name = "prettyplease"
+version = "0.1.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86"
+dependencies = [
+ "proc-macro2",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.58"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa1fb82fc0c281dd9671101b66b771ebbe1eaf967b96ac8740dcba4b70005ca8"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "proc-macro2-diagnostics"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bf29726d67464d49fa6224a1d07936a8c08bb3fba727c7493f6cf1616fdaada"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "version_check",
+ "yansi",
+]
+
+[[package]]
+name = "proc-macro2-diagnostics"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "606c4ba35817e2922a308af55ad51bab3645b59eae5c570d4a6cf07e36bd493b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.16",
+ "version_check",
+ "yansi",
+]
+
+[[package]]
+name = "prost"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "71adf41db68aa0daaefc69bb30bcd68ded9b9abaad5d1fbb6304c4fb390e083e"
+dependencies = [
+ "bytes",
+ "prost-derive 0.10.1",
+]
+
+[[package]]
+name = "prost"
+version = "0.11.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd"
+dependencies = [
+ "bytes",
+ "prost-derive 0.11.9",
+]
+
+[[package]]
+name = "prost-derive"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b670f45da57fb8542ebdbb6105a925fe571b67f9e7ed9f47a06a84e72b4e7cc"
+dependencies = [
+ "anyhow",
+ "itertools",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "prost-derive"
+version = "0.11.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4"
+dependencies = [
+ "anyhow",
+ "itertools",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "prost-types"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d0a014229361011dc8e69c8a1ec6c2e8d0f2af7c91e3ea3f5b2170298461e68"
+dependencies = [
+ "bytes",
+ "prost 0.10.4",
+]
+
+[[package]]
+name = "prost-types"
+version = "0.11.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13"
+dependencies = [
+ "prost 0.11.9",
+]
+
+[[package]]
+name = "publicsuffix"
+version = "1.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95b4ce31ff0a27d93c8de1849cf58162283752f065a90d508f1105fa6c9a213f"
+dependencies = [
+ "idna 0.2.3",
+ "native-tls",
+ "url",
+]
+
+[[package]]
+name = "quick-error"
+version = "1.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
+
+[[package]]
+name = "quick-error"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3"
+
+[[package]]
+name = "quote"
+version = "1.0.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f4f29d145265ec1c483c7c654450edde0bfe043d3938d6972630663356d9500"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "radium"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09"
+
+[[package]]
+name = "rand"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca"
+dependencies = [
+ "autocfg 0.1.8",
+ "libc",
+ "rand_chacha 0.1.1",
+ "rand_core 0.4.2",
+ "rand_hc 0.1.0",
+ "rand_isaac",
+ "rand_jitter",
+ "rand_os",
+ "rand_pcg 0.1.2",
+ "rand_xorshift",
+ "winapi",
+]
+
+[[package]]
+name = "rand"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
+dependencies = [
+ "getrandom 0.1.16",
+ "libc",
+ "rand_chacha 0.2.2",
+ "rand_core 0.5.1",
+ "rand_hc 0.2.0",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha 0.3.1",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef"
+dependencies = [
+ "autocfg 0.1.8",
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
+dependencies = [
+ "rand_core 0.4.2",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
+
+[[package]]
+name = "rand_core"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
+dependencies = [
+ "getrandom 0.1.16",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom 0.2.9",
+]
+
+[[package]]
+name = "rand_distr"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c9e9532ada3929fb8b2e9dbe28d1e06c9b2cc65813f074fcb6bd5fbefeff9d56"
+dependencies = [
+ "num-traits",
+ "rand 0.7.3",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
+dependencies = [
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rand_isaac"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "rand_jitter"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b"
+dependencies = [
+ "libc",
+ "rand_core 0.4.2",
+ "winapi",
+]
+
+[[package]]
+name = "rand_os"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071"
+dependencies = [
+ "cloudabi",
+ "fuchsia-cprng",
+ "libc",
+ "rand_core 0.4.2",
+ "rdrand",
+ "winapi",
+]
+
+[[package]]
+name = "rand_pcg"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44"
+dependencies = [
+ "autocfg 0.1.8",
+ "rand_core 0.4.2",
+]
+
+[[package]]
+name = "rand_pcg"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59cad018caf63deb318e5a4586d99a24424a364f40f1e5778c29aca23f4fc73e"
+dependencies = [
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_seeder"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf2890aaef0aa82719a50e808de264f9484b74b442e1a3a0e5ee38243ac40bdb"
+dependencies = [
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_xorshift"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "rayon"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-utils",
+ "num_cpus",
+]
+
+[[package]]
+name = "rdrand"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
+dependencies = [
+ "getrandom 0.2.9",
+ "redox_syscall 0.2.16",
+ "thiserror",
+]
+
+[[package]]
+name = "ref-cast"
+version = "1.0.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f43faa91b1c8b36841ee70e97188a869d37ae21759da6846d4be66de5bf7b12c"
+dependencies = [
+ "ref-cast-impl",
+]
+
+[[package]]
+name = "ref-cast-impl"
+version = "1.0.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d2275aab483050ab2a7364c1a46604865ee7d6906684e08db0f090acf74f9e7"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.16",
+]
+
+[[package]]
+name = "regex"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af83e617f331cc6ae2da5443c602dfa5af81e517212d9d611a5b3ba1777b5370"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax 0.7.1",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+dependencies = [
+ "regex-syntax 0.6.29",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
+
+[[package]]
+name = "regex-syntax"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a5996294f19bd3aae0453a862ad728f60e6600695733dd5df01da90c54363a3c"
+
+[[package]]
+name = "reqwest"
+version = "0.11.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cde824a14b7c14f85caff81225f411faacc04a2013f41670f41443742b1c1c55"
+dependencies = [
+ "base64 0.21.0",
+ "bytes",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-tls",
+ "ipnet",
+ "js-sys",
+ "log",
+ "mime",
+ "native-tls",
+ "once_cell",
+ "percent-encoding",
+ "pin-project-lite",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "tokio",
+ "tokio-native-tls",
+ "tokio-socks",
+ "tower-service",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "winreg",
+]
+
+[[package]]
+name = "rfc6979"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96ef608575f6392792f9ecf7890c00086591d29a83910939d430753f7c050525"
+dependencies = [
+ "crypto-bigint",
+ "hmac 0.11.0",
+ "zeroize",
+]
+
+[[package]]
+name = "ring"
+version = "0.16.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
+dependencies = [
+ "cc",
+ "libc",
+ "once_cell",
+ "spin 0.5.2",
+ "untrusted",
+ "web-sys",
+ "winapi",
+]
+
+[[package]]
+name = "ripemd160"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2eca4ecc81b7f313189bf73ce724400a07da2a6dac19588b03c8bd76a2dcc251"
+dependencies = [
+ "block-buffer 0.9.0",
+ "digest 0.9.0",
+ "opaque-debug 0.3.0",
+]
+
+[[package]]
+name = "rocket"
+version = "0.5.0-rc.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "98ead083fce4a405feb349cf09abdf64471c6077f14e0ce59364aa90d4b99317"
+dependencies = [
+ "async-stream",
+ "async-trait",
+ "atomic",
+ "atty",
+ "binascii",
+ "bytes",
+ "either",
+ "figment",
+ "futures",
+ "indexmap",
+ "log",
+ "memchr",
+ "multer",
+ "num_cpus",
+ "parking_lot 0.12.1",
+ "pin-project-lite",
+ "rand 0.8.5",
+ "ref-cast",
+ "rocket_codegen",
+ "rocket_http",
+ "serde",
+ "serde_json",
+ "state",
+ "tempfile",
+ "time 0.3.21",
+ "tokio",
+ "tokio-stream",
+ "tokio-util",
+ "ubyte",
+ "version_check",
+ "yansi",
+]
+
+[[package]]
+name = "rocket_codegen"
+version = "0.5.0-rc.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6aeb6bb9c61e9cd2c00d70ea267bf36f76a4cc615e5908b349c2f9d93999b47"
+dependencies = [
+ "devise",
+ "glob",
+ "indexmap",
+ "proc-macro2",
+ "quote",
+ "rocket_http",
+ "syn 1.0.109",
+ "unicode-xid",
+]
+
+[[package]]
+name = "rocket_cors"
+version = "0.5.2"
+source = "git+https://github.com/lawliet89/rocket_cors?rev=dfd3662c49e2f6fc37df35091cb94d82f7fb5915#dfd3662c49e2f6fc37df35091cb94d82f7fb5915"
+dependencies = [
+ "log",
+ "regex",
+ "rocket",
+ "serde",
+ "serde_derive",
+ "unicase",
+ "unicase_serde",
+ "url",
+]
+
+[[package]]
+name = "rocket_http"
+version = "0.5.0-rc.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ded65d127954de3c12471630bf4b81a2792f065984461e65b91d0fdaafc17a2"
+dependencies = [
+ "cookie",
+ "either",
+ "futures",
+ "http",
+ "hyper",
+ "indexmap",
+ "log",
+ "memchr",
+ "pear",
+ "percent-encoding",
+ "pin-project-lite",
+ "ref-cast",
+ "serde",
+ "smallvec",
+ "stable-pattern",
+ "state",
+ "time 0.3.21",
+ "tokio",
+ "uncased",
+]
+
+[[package]]
+name = "rocket_okapi"
+version = "0.8.0-rc.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "489f4f5b120762f7974e65b919fc462d0660fd8b839026d8985b850fe5acccb0"
+dependencies = [
+ "either",
+ "log",
+ "okapi",
+ "rocket",
+ "rocket_okapi_codegen",
+ "schemars",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "rocket_okapi_codegen"
+version = "0.8.0-rc.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54f94d1ffe41472e08463d7a2674f1db04dc4df745285e8369b33d3cfd6b0308"
+dependencies = [
+ "darling",
+ "proc-macro2",
+ "quote",
+ "rocket_http",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "rustc_version"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
+dependencies = [
+ "semver 0.9.0",
+]
+
+[[package]]
+name = "rustc_version"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver 1.0.17",
+]
+
+[[package]]
+name = "rustix"
+version = "0.37.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d"
+dependencies = [
+ "bitflags",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rustls"
+version = "0.19.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7"
+dependencies = [
+ "base64 0.13.1",
+ "log",
+ "ring",
+ "sct 0.6.1",
+ "webpki 0.21.4",
+]
+
+[[package]]
+name = "rustls"
+version = "0.20.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f"
+dependencies = [
+ "log",
+ "ring",
+ "sct 0.7.0",
+ "webpki 0.22.0",
+]
+
+[[package]]
+name = "rustls-native-certs"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a07b7c1885bd8ed3831c289b7870b13ef46fe0e856d288c30d9cc17d75a2092"
+dependencies = [
+ "openssl-probe",
+ "rustls 0.19.1",
+ "schannel",
+ "security-framework",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b"
+dependencies = [
+ "base64 0.21.0",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06"
+
+[[package]]
+name = "ryu"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
+
+[[package]]
+name = "safer-ffi"
+version = "0.1.0-rc1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7270b08a2af50909969cfc28a239cfdda9ab1b3df74749b265c46956183e5bf7"
+dependencies = [
+ "inventory",
+ "libc",
+ "macro_rules_attribute",
+ "paste",
+ "safer_ffi-proc_macros",
+ "scopeguard",
+ "uninit",
+ "unwind_safe",
+ "with_builtin_macros",
+]
+
+[[package]]
+name = "safer_ffi-proc_macros"
+version = "0.1.0-rc1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1438fb328c52f5148ea02a317603efd802f2cd6eb9e721adfd51b94bb55d9ddb"
+dependencies = [
+ "macro_rules_attribute",
+ "prettyplease",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "schannel"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3"
+dependencies = [
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "schemars"
+version = "0.8.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02c613288622e5f0c3fdc5dbd4db1c5fbe752746b1d1a56a0630b78fd00de44f"
+dependencies = [
+ "dyn-clone",
+ "indexmap",
+ "schemars_derive",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "schemars_derive"
+version = "0.8.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "109da1e6b197438deb6db99952990c7f959572794b80ff93707d55a232545e7c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "serde_derive_internals",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "scoped-tls"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "sct"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "sct"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "sec1"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08da66b8b0965a5555b6bd6639e68ccba85e1e2506f5fbb089e93f8a04e1a2d1"
+dependencies = [
+ "der",
+ "generic-array 0.14.7",
+ "pkcs8",
+ "subtle 2.4.1",
+ "zeroize",
+]
+
+[[package]]
+name = "security-framework"
+version = "2.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2855b3715770894e67cbfa3df957790aa0c9edc3bf06efa1a84d77fa0839d1"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f51d0c0d83bec45f16480d0ce0058397a69e48fcdc52d1dc8855fb68acbd31a7"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "semver"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
+dependencies = [
+ "semver-parser 0.7.0",
+]
+
+[[package]]
+name = "semver"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6"
+dependencies = [
+ "semver-parser 0.10.2",
+]
+
+[[package]]
+name = "semver"
+version = "1.0.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed"
+
+[[package]]
+name = "semver-parser"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
+
+[[package]]
+name = "semver-parser"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7"
+dependencies = [
+ "pest",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.163"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2113ab51b87a539ae008b5c6c02dc020ffa39afd2d83cffcb3f4eb2722cebec2"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde-json-wasm"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "479b4dbc401ca13ee8ce902851b834893251404c4f3c65370a49e047a6be09a5"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde-wasm-bindgen"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3b143e2833c57ab9ad3ea280d21fd34e285a42837aeb0ee301f4f41890fa00e"
+dependencies = [
+ "js-sys",
+ "serde",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "serde_bytes"
+version = "0.11.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "416bda436f9aab92e02c8e10d49a15ddd339cea90b6e340fe51ed97abb548294"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.163"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c805777e3930c8883389c602315a24224bcc738b63905ef87cd1420353ea93e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.16",
+]
+
+[[package]]
+name = "serde_derive_internals"
+version = "0.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85bf8229e7920a9f636479437026331ce11aa132b4dde37d121944a44d6e5f3c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.96"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_repr"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bcec881020c684085e55a25f7fd888954d56609ef363479dc5a1305eb0d40cab"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.16",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "sha-1"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6"
+dependencies = [
+ "block-buffer 0.9.0",
+ "cfg-if",
+ "cpufeatures",
+ "digest 0.9.0",
+ "opaque-debug 0.3.0",
+]
+
+[[package]]
+name = "sha-1"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest 0.10.6",
+]
+
+[[package]]
+name = "sha1"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest 0.10.6",
+]
+
+[[package]]
+name = "sha2"
+version = "0.9.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800"
+dependencies = [
+ "block-buffer 0.9.0",
+ "cfg-if",
+ "cpufeatures",
+ "digest 0.9.0",
+ "opaque-debug 0.3.0",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest 0.10.6",
+]
+
+[[package]]
+name = "sha3"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f81199417d4e5de3f04b1e871023acea7389672c4135918f05aa9cbf2f2fa809"
+dependencies = [
+ "block-buffer 0.9.0",
+ "digest 0.9.0",
+ "keccak",
+ "opaque-debug 0.3.0",
+]
+
+[[package]]
+name = "sharded-slab"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "signal-hook"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "732768f1176d21d09e076c23a93123d40bba92d50c4058da34d45c8de8e682b9"
+dependencies = [
+ "libc",
+ "signal-hook-registry",
+]
+
+[[package]]
+name = "signal-hook-mio"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af"
+dependencies = [
+ "libc",
+ "mio",
+ "signal-hook",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "signature"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02658e48d89f2bec991f9a78e69cfa4c316f8d6a6c4ec12fae1aeb263d486788"
+dependencies = [
+ "digest 0.9.0",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "slab"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
+dependencies = [
+ "autocfg 1.1.0",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
+
+[[package]]
+name = "snafu"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb0656e7e3ffb70f6c39b3c2a86332bb74aa3c679da781642590f3c1118c5045"
+dependencies = [
+ "doc-comment",
+ "snafu-derive",
+]
+
+[[package]]
+name = "snafu-derive"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "475b3bbe5245c26f2d8a6f62d67c1f30eb9fffeccee721c45d162c3ebbdf81b2"
+dependencies = [
+ "heck 0.4.1",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "socket2"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "sphinx-packet"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc43eda802856ee82a7555c7b75ceb9e07451741c7a2f5f23d036020e01189d4"
+dependencies = [
+ "aes 0.7.5",
+ "arrayref",
+ "blake2 0.8.1",
+ "bs58",
+ "byteorder",
+ "chacha",
+ "curve25519-dalek",
+ "digest 0.9.0",
+ "hkdf 0.11.0",
+ "hmac 0.11.0",
+ "lioness",
+ "log",
+ "rand 0.7.3",
+ "rand_distr",
+ "sha2 0.9.9",
+ "subtle 2.4.1",
+]
+
+[[package]]
+name = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[package]]
+name = "spin"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
+dependencies = [
+ "lock_api",
+]
+
+[[package]]
+name = "spki"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d01ac02a6ccf3e07db148d2be087da624fea0221a16152ed01f0496a6b0a27"
+dependencies = [
+ "base64ct",
+ "der",
+]
+
+[[package]]
+name = "sqlformat"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4b7922be017ee70900be125523f38bdd644f4f06a1b16e8fa5a8ee8c34bffd4"
+dependencies = [
+ "itertools",
+ "nom",
+ "unicode_categories",
+]
+
+[[package]]
+name = "sqlformat"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c12bc9199d1db8234678b7051747c07f517cdcf019262d1847b94ec8b1aee3e"
+dependencies = [
+ "itertools",
+ "nom",
+ "unicode_categories",
+]
+
+[[package]]
+name = "sqlx"
+version = "0.5.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "551873805652ba0d912fec5bbb0f8b4cdd96baf8e2ebf5970e5671092966019b"
+dependencies = [
+ "sqlx-core 0.5.13",
+ "sqlx-macros 0.5.13",
+]
+
+[[package]]
+name = "sqlx"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8de3b03a925878ed54a954f621e64bf55a3c1bd29652d0d1a17830405350188"
+dependencies = [
+ "sqlx-core 0.6.3",
+ "sqlx-macros 0.6.3",
+]
+
+[[package]]
+name = "sqlx-core"
+version = "0.5.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e48c61941ccf5ddcada342cd59e3e5173b007c509e1e8e990dafc830294d9dc5"
+dependencies = [
+ "ahash 0.7.6",
+ "atoi 0.4.0",
+ "bitflags",
+ "byteorder",
+ "bytes",
+ "chrono",
+ "crc 2.1.0",
+ "crossbeam-queue",
+ "either",
+ "event-listener",
+ "flume",
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-intrusive",
+ "futures-util",
+ "hashlink 0.7.0",
+ "hex",
+ "indexmap",
+ "itoa",
+ "libc",
+ "libsqlite3-sys",
+ "log",
+ "memchr",
+ "once_cell",
+ "paste",
+ "percent-encoding",
+ "rustls 0.19.1",
+ "sha2 0.10.6",
+ "smallvec",
+ "sqlformat 0.1.8",
+ "sqlx-rt 0.5.13",
+ "stringprep",
+ "thiserror",
+ "tokio-stream",
+ "url",
+ "webpki 0.21.4",
+ "webpki-roots 0.21.1",
+]
+
+[[package]]
+name = "sqlx-core"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa8241483a83a3f33aa5fff7e7d9def398ff9990b2752b6c6112b83c6d246029"
+dependencies = [
+ "ahash 0.7.6",
+ "atoi 1.0.0",
+ "bitflags",
+ "byteorder",
+ "bytes",
+ "chrono",
+ "crc 3.0.1",
+ "crossbeam-queue",
+ "dotenvy",
+ "either",
+ "event-listener",
+ "flume",
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-intrusive",
+ "futures-util",
+ "hashlink 0.8.2",
+ "hex",
+ "indexmap",
+ "itoa",
+ "libc",
+ "libsqlite3-sys",
+ "log",
+ "memchr",
+ "once_cell",
+ "paste",
+ "percent-encoding",
+ "rustls 0.20.8",
+ "rustls-pemfile",
+ "sha2 0.10.6",
+ "smallvec",
+ "sqlformat 0.2.1",
+ "sqlx-rt 0.6.3",
+ "stringprep",
+ "thiserror",
+ "tokio-stream",
+ "url",
+ "webpki-roots 0.22.6",
+]
+
+[[package]]
+name = "sqlx-macros"
+version = "0.5.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc0fba2b0cae21fc00fe6046f8baa4c7fcb49e379f0f592b04696607f69ed2e1"
+dependencies = [
+ "dotenv",
+ "either",
+ "heck 0.4.1",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "sha2 0.10.6",
+ "sqlx-core 0.5.13",
+ "sqlx-rt 0.5.13",
+ "syn 1.0.109",
+ "url",
+]
+
+[[package]]
+name = "sqlx-macros"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9966e64ae989e7e575b19d7265cb79d7fc3cbbdf179835cb0d716f294c2049c9"
+dependencies = [
+ "dotenvy",
+ "either",
+ "heck 0.4.1",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "sha2 0.10.6",
+ "sqlx-core 0.6.3",
+ "sqlx-rt 0.6.3",
+ "syn 1.0.109",
+ "url",
+]
+
+[[package]]
+name = "sqlx-rt"
+version = "0.5.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4db708cd3e459078f85f39f96a00960bd841f66ee2a669e90bf36907f5a79aae"
+dependencies = [
+ "once_cell",
+ "tokio",
+ "tokio-rustls 0.22.0",
+]
+
+[[package]]
+name = "sqlx-rt"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "804d3f245f894e61b1e6263c84b23ca675d96753b5abfd5cc8597d86806e8024"
+dependencies = [
+ "once_cell",
+ "tokio",
+ "tokio-rustls 0.23.4",
+]
+
+[[package]]
+name = "stable-pattern"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4564168c00635f88eaed410d5efa8131afa8d8699a612c80c455a0ba05c21045"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "state"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbe866e1e51e8260c9eed836a042a5e7f6726bb2b411dffeaa712e19c388f23b"
+dependencies = [
+ "loom",
+]
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "stringprep"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ee348cb74b87454fff4b551cbf727025810a004f88aeacae7f85b87f4e9a1c1"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "strum"
+version = "0.23.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cae14b91c7d11c9a851d3fbc80a963198998c2a64eec840477fa92d8ce9b70bb"
+dependencies = [
+ "strum_macros 0.23.1",
+]
+
+[[package]]
+name = "strum"
+version = "0.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f"
+
+[[package]]
+name = "strum_macros"
+version = "0.23.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5bb0dc7ee9c15cea6199cde9a127fa16a4c5819af85395457ad72d68edc85a38"
+dependencies = [
+ "heck 0.3.3",
+ "proc-macro2",
+ "quote",
+ "rustversion",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "strum_macros"
+version = "0.24.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59"
+dependencies = [
+ "heck 0.4.1",
+ "proc-macro2",
+ "quote",
+ "rustversion",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "subtle"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee"
+
+[[package]]
+name = "subtle"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
+
+[[package]]
+name = "subtle-encoding"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7dcb1ed7b8330c5eed5441052651dd7a12c75e2ed88f2ec024ae1fa3a5e59945"
+dependencies = [
+ "zeroize",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6f671d4b5ffdb8eadec19c0ae67fe2639df8684bd7bc4b83d986b8db549cf01"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "sync_wrapper"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
+
+[[package]]
+name = "sysinfo"
+version = "0.27.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a902e9050fca0a5d6877550b769abd2bd1ce8c04634b941dbe2809735e1a1e33"
+dependencies = [
+ "cfg-if",
+ "core-foundation-sys",
+ "libc",
+ "ntapi",
+ "once_cell",
+ "rayon",
+ "winapi",
+]
+
+[[package]]
+name = "tap"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
+
+[[package]]
+name = "tempfile"
+version = "3.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "redox_syscall 0.3.5",
+ "rustix",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "tendermint"
+version = "0.23.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ca881fa4dedd2b46334f13be7fbc8cc1549ba4be5a833fe4e73d1a1baaf7949"
+dependencies = [
+ "async-trait",
+ "bytes",
+ "ed25519",
+ "ed25519-dalek",
+ "flex-error",
+ "futures",
+ "k256",
+ "num-traits",
+ "once_cell",
+ "prost 0.10.4",
+ "prost-types 0.10.1",
+ "ripemd160",
+ "serde",
+ "serde_bytes",
+ "serde_json",
+ "serde_repr",
+ "sha2 0.9.9",
+ "signature",
+ "subtle 2.4.1",
+ "subtle-encoding",
+ "tendermint-proto",
+ "time 0.3.21",
+ "zeroize",
+]
+
+[[package]]
+name = "tendermint-config"
+version = "0.23.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6c56ee93f4e9b7e7daba86d171f44572e91b741084384d0ae00df7991873dfd"
+dependencies = [
+ "flex-error",
+ "serde",
+ "serde_json",
+ "tendermint",
+ "toml",
+ "url",
+]
+
+[[package]]
+name = "tendermint-proto"
+version = "0.23.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b71f925d74903f4abbdc4af0110635a307b3cb05b175fdff4a7247c14a4d0874"
+dependencies = [
+ "bytes",
+ "flex-error",
+ "num-derive",
+ "num-traits",
+ "prost 0.10.4",
+ "prost-types 0.10.1",
+ "serde",
+ "serde_bytes",
+ "subtle-encoding",
+ "time 0.3.21",
+]
+
+[[package]]
+name = "tendermint-rpc"
+version = "0.23.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a13e63f57ee05a1e927887191c76d1b139de9fa40c180b9f8727ee44377242a6"
+dependencies = [
+ "async-trait",
+ "bytes",
+ "flex-error",
+ "futures",
+ "getrandom 0.2.9",
+ "http",
+ "hyper",
+ "hyper-proxy",
+ "hyper-rustls",
+ "peg",
+ "pin-project",
+ "serde",
+ "serde_bytes",
+ "serde_json",
+ "subtle-encoding",
+ "tendermint",
+ "tendermint-config",
+ "tendermint-proto",
+ "thiserror",
+ "time 0.3.21",
+ "tokio",
+ "tracing",
+ "url",
+ "uuid 0.8.2",
+ "walkdir",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
+
+[[package]]
+name = "thiserror"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.16",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+]
+
+[[package]]
+name = "time"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"
+dependencies = [
+ "libc",
+ "wasi 0.10.0+wasi-snapshot-preview1",
+ "winapi",
+]
+
+[[package]]
+name = "time"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f3403384eaacbca9923fa06940178ac13e4edb725486d70e8e15881d0c836cc"
+dependencies = [
+ "itoa",
+ "js-sys",
+ "serde",
+ "time-core",
+ "time-macros",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb"
+
+[[package]]
+name = "time-macros"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "372950940a5f07bf38dbe211d7283c9e6d7327df53794992d293e534c733d09b"
+dependencies = [
+ "time-core",
+]
+
+[[package]]
+name = "tinytemplate"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc"
+dependencies = [
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "1.28.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0aa32867d44e6f2ce3385e89dceb990188b8bb0fb25b0cf576647a6f98ac5105"
+dependencies = [
+ "autocfg 1.1.0",
+ "bytes",
+ "libc",
+ "mio",
+ "num_cpus",
+ "parking_lot 0.12.1",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2",
+ "tokio-macros",
+ "tracing",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "tokio-io-timeout"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf"
+dependencies = [
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.16",
+]
+
+[[package]]
+name = "tokio-native-tls"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
+dependencies = [
+ "native-tls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc6844de72e57df1980054b38be3a9f4702aba4858be64dd700181a8a6d0e1b6"
+dependencies = [
+ "rustls 0.19.1",
+ "tokio",
+ "webpki 0.21.4",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.23.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59"
+dependencies = [
+ "rustls 0.20.8",
+ "tokio",
+ "webpki 0.22.0",
+]
+
+[[package]]
+name = "tokio-socks"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51165dfa029d2a65969413a6cc96f354b86b464498702f174a4efa13608fd8c0"
+dependencies = [
+ "either",
+ "futures-util",
+ "thiserror",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-stream"
+version = "0.1.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+ "tokio",
+ "tokio-util",
+]
+
+[[package]]
+name = "tokio-test"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53474327ae5e166530d17f2d956afcb4f8a004de581b3cae10f12006bc8163e3"
+dependencies = [
+ "async-stream",
+ "bytes",
+ "futures-core",
+ "tokio",
+ "tokio-stream",
+]
+
+[[package]]
+name = "tokio-tungstenite"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e96bb520beab540ab664bd5a9cfeaa1fcd846fa68c830b42e2c8963071251d2"
+dependencies = [
+ "futures-util",
+ "log",
+ "pin-project",
+ "tokio",
+ "tungstenite 0.13.0",
+]
+
+[[package]]
+name = "tokio-tungstenite"
+version = "0.17.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f714dd15bead90401d77e04243611caec13726c2408afd5b31901dfcdcb3b181"
+dependencies = [
+ "futures-util",
+ "log",
+ "tokio",
+ "tungstenite 0.17.3",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "slab",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "tonic"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3082666a3a6433f7f511c7192923fa1fe07c69332d3c6a2e6bb040b569199d5a"
+dependencies = [
+ "async-trait",
+ "axum",
+ "base64 0.21.0",
+ "bytes",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-timeout",
+ "percent-encoding",
+ "pin-project",
+ "prost 0.11.9",
+ "tokio",
+ "tokio-stream",
+ "tower",
+ "tower-layer",
+ "tower-service",
+ "tracing",
+]
+
+[[package]]
+name = "tower"
+version = "0.4.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c"
+dependencies = [
+ "futures-core",
+ "futures-util",
+ "indexmap",
+ "pin-project",
+ "pin-project-lite",
+ "rand 0.8.5",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tower-layer",
+ "tower-service",
+ "tracing",
+]
+
+[[package]]
+name = "tower-layer"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0"
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tracing"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+dependencies = [
+ "cfg-if",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-appender"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09d48f71a791638519505cefafe162606f706c25592e4bde4d97600c0195312e"
+dependencies = [
+ "crossbeam-channel",
+ "time 0.3.21",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f57e3ca2a01450b1a921183a9c9cbfda207fd822cef4ccb00a65402cbba7a74"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.16",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
+dependencies = [
+ "once_cell",
+ "valuable",
+]
+
+[[package]]
+name = "tracing-log"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922"
+dependencies = [
+ "lazy_static",
+ "log",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-subscriber"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77"
+dependencies = [
+ "matchers",
+ "nu-ansi-term",
+ "once_cell",
+ "regex",
+ "sharded-slab",
+ "smallvec",
+ "thread_local",
+ "tracing",
+ "tracing-core",
+ "tracing-log",
+]
+
+[[package]]
+name = "tracing-tree"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f9742d8df709837409dbb22aa25dd7769c260406f20ff48a2320b80a4a6aed0"
+dependencies = [
+ "atty",
+ "nu-ansi-term",
+ "tracing-core",
+ "tracing-log",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+
+[[package]]
+name = "ts-rs"
+version = "6.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4added4070a4fdf9df03457206cd2e4b12417c8560a2954d91ffcbe60177a56a"
+dependencies = [
+ "thiserror",
+ "ts-rs-macros",
+]
+
+[[package]]
+name = "ts-rs-cli"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "nym-api-requests",
+ "nym-mixnet-contract-common",
+ "nym-types",
+ "nym-validator-client",
+ "nym-vesting-contract-common",
+ "nym-wallet-types",
+ "ts-rs",
+ "walkdir",
+]
+
+[[package]]
+name = "ts-rs-macros"
+version = "6.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f807fdb3151fee75df7485b901a89624358cd07a67a8fb1a5831bf5a07681ff"
+dependencies = [
+ "Inflector",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "termcolor",
+]
+
+[[package]]
+name = "tungstenite"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fe8dada8c1a3aeca77d6b51a4f1314e0f4b8e438b7b1b71e3ddaca8080e4093"
+dependencies = [
+ "base64 0.13.1",
+ "byteorder",
+ "bytes",
+ "http",
+ "httparse",
+ "input_buffer",
+ "log",
+ "rand 0.8.5",
+ "sha-1 0.9.8",
+ "thiserror",
+ "url",
+ "utf-8",
+]
+
+[[package]]
+name = "tungstenite"
+version = "0.17.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e27992fd6a8c29ee7eef28fc78349aa244134e10ad447ce3b9f0ac0ed0fa4ce0"
+dependencies = [
+ "base64 0.13.1",
+ "byteorder",
+ "bytes",
+ "http",
+ "httparse",
+ "log",
+ "rand 0.8.5",
+ "sha-1 0.10.1",
+ "thiserror",
+ "url",
+ "utf-8",
+]
+
+[[package]]
+name = "typenum"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
+
+[[package]]
+name = "ubyte"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c81f0dae7d286ad0d9366d7679a77934cfc3cf3a8d67e82669794412b2368fe6"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "ucd-trie"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81"
+
+[[package]]
+name = "uint"
+version = "0.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52"
+dependencies = [
+ "byteorder",
+ "crunchy",
+ "hex",
+ "static_assertions",
+]
+
+[[package]]
+name = "uncased"
+version = "0.9.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b9bc53168a4be7402ab86c3aad243a84dd7381d09be0eddc81280c1da95ca68"
+dependencies = [
+ "serde",
+ "version_check",
+]
+
+[[package]]
+name = "unicase"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "unicase_serde"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ef53697679d874d69f3160af80bc28de12730a985d57bdf2b47456ccb8b11f1"
+dependencies = [
+ "serde",
+ "unicase",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
+
+[[package]]
+name = "unicode_categories"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e"
+
+[[package]]
+name = "uninit"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e130f2ed46ca5d8ec13c7ff95836827f92f5f5f37fd2b2bf16f33c408d98bb6"
+dependencies = [
+ "extension-traits",
+]
+
+[[package]]
+name = "universal-hash"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d3160b73c9a19f7e2939a2fdad446c57c1bbbbf4d919d3213ff1267a580d8b5"
+dependencies = [
+ "crypto-common",
+ "subtle 2.4.1",
+]
+
+[[package]]
+name = "untrusted"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+
+[[package]]
+name = "unwind_safe"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0976c77def3f1f75c4ef892a292c31c0bbe9e3d0702c63044d7c76db298171a3"
+
+[[package]]
+name = "url"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
+dependencies = [
+ "form_urlencoded",
+ "idna 0.3.0",
+ "percent-encoding",
+ "serde",
+]
+
+[[package]]
+name = "urlencoding"
+version = "2.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8db7427f936968176eaa7cdf81b7f98b980b18495ec28f1b5791ac3bfe3eea9"
+
+[[package]]
+name = "utf-8"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
+
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
+[[package]]
+name = "uuid"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7"
+
+[[package]]
+name = "uuid"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "345444e32442451b267fc254ae85a209c64be56d2890e601a0c37ff0c3c5ecd2"
+dependencies = [
+ "getrandom 0.2.9",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "valuable"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "vergen"
+version = "7.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "447f9238a4553957277b3ee09d80babeae0811f1b3baefb093de1c0448437a37"
+dependencies = [
+ "anyhow",
+ "cfg-if",
+ "enum-iterator",
+ "getset",
+ "git2",
+ "rustc_version 0.4.0",
+ "rustversion",
+ "thiserror",
+ "time 0.3.21",
+]
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "walkdir"
+version = "2.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "want"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
+dependencies = [
+ "log",
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.9.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
+
+[[package]]
+name = "wasi"
+version = "0.10.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23639446165ca5a5de86ae1d8896b737ae80319560fbaa4c2887b7da6e7ebd7d"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f"
+
+[[package]]
+name = "wasm-timer"
+version = "0.2.5"
+source = "git+https://github.com/mmsinclair/wasm-timer?rev=b9d1a54ad514c2f230a026afe0dde341e98cd7b6#b9d1a54ad514c2f230a026afe0dde341e98cd7b6"
+dependencies = [
+ "futures",
+ "js-sys",
+ "parking_lot 0.11.2",
+ "pin-utils",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-utils"
+version = "0.1.0"
+dependencies = [
+ "futures",
+ "getrandom 0.2.9",
+ "indexed_db_futures",
+ "js-sys",
+ "nym-store-cipher",
+ "serde",
+ "serde-wasm-bindgen",
+ "thiserror",
+ "tungstenite 0.13.0",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+]
+
+[[package]]
+name = "web-sys"
+version = "0.3.60"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webpki"
+version = "0.21.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "webpki"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.21.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aabe153544e473b775453675851ecc86863d2a81d786d741f6b76778f2a48940"
+dependencies = [
+ "webpki 0.21.4",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.22.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87"
+dependencies = [
+ "webpki 0.22.0",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
+dependencies = [
+ "windows-targets 0.48.0",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.0",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.0",
+ "windows_aarch64_msvc 0.48.0",
+ "windows_i686_gnu 0.48.0",
+ "windows_i686_msvc 0.48.0",
+ "windows_x86_64_gnu 0.48.0",
+ "windows_x86_64_gnullvm 0.48.0",
+ "windows_x86_64_msvc 0.48.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
+
+[[package]]
+name = "winreg"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "with_builtin_macros"
+version = "0.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a59d55032495429b87f9d69954c6c8602e4d3f3e0a747a12dea6b0b23de685da"
+dependencies = [
+ "with_builtin_macros-proc_macros",
+]
+
+[[package]]
+name = "with_builtin_macros-proc_macros"
+version = "0.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15bd7679c15e22924f53aee34d4e448c45b674feb6129689af88593e129f8f42"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "wyz"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed"
+dependencies = [
+ "tap",
+]
+
+[[package]]
+name = "x25519-dalek"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a0c105152107e3b96f6a00a65e86ce82d9b125230e1c4302940eca58ff71f4f"
+dependencies = [
+ "curve25519-dalek",
+ "rand_core 0.5.1",
+ "serde",
+ "zeroize",
+]
+
+[[package]]
+name = "yansi"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec"
+
+[[package]]
+name = "zeroize"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9"
+dependencies = [
+ "zeroize_derive",
+]
+
+[[package]]
+name = "zeroize_derive"
+version = "1.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.16",
+]
diff --git a/nixpkgs/pkgs/applications/networking/nym/default.nix b/nixpkgs/pkgs/applications/networking/nym/default.nix
new file mode 100644
index 000000000000..b5d0e15c3f02
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/nym/default.nix
@@ -0,0 +1,85 @@
+{ stdenv
+, lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, openssl
+, Security
+, CoreServices
+, nix-update-script
+, rustc
+}:
+
+let
+  version = "1.1.21";
+  hash = "sha256-VM0Pc5qyrsn9wV3mfvrAlCfm/rIf3cednZzFtJCT+no=";
+in
+rustPlatform.buildRustPackage {
+  pname = "nym";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "nymtech";
+    repo = "nym";
+    rev = "nym-binaries-v${version}";
+    inherit hash;
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "bls12_381-0.6.0" = "sha256-sIZy+CTASP+uiY10nP/N4WfCLjeqkjiNl/FzO0p5WdI=";
+      "cosmos-sdk-proto-0.12.3" = "sha256-ekQ9JA6WaTkvHkBKJbYPzfmx6I7LZnhIPiHsZFAP90w=";
+      "rocket_cors-0.5.2" = "sha256-hfk5gKtc94g+VZmm+S6HKvg+E71QVKQTK2E3K2MCvz0=";
+      "wasm-timer-0.2.5" = "sha256-od+r3ttFpFhcIh8rPQJQARaQLsbLeEZpCY1h9c4gow8=";
+    };
+  };
+
+  postPatch = ''
+    substituteInPlace contracts/vesting/build.rs \
+      --replace 'vergen(config).expect("failed to extract build metadata")' '()'
+
+    substituteInPlace common/bin-common/build.rs \
+      --replace 'vergen(config).expect("failed to extract build metadata")' '()'
+  '';
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [ Security CoreServices ];
+
+  checkType = "debug";
+
+  passthru.updateScript = nix-update-script { };
+
+  checkFlags = [
+    "--skip=commands::upgrade::upgrade_tests"
+    "--skip=allowed_hosts::filter::tests::creating_a_new_host_store"
+    "--skip=allowed_hosts::filter::tests::getting_the_domain_root"
+    "--skip=allowed_hosts::filter::tests::requests_to_allowed_hosts"
+    "--skip=allowed_hosts::filter::tests::requests_to_unknown_hosts"
+    "--skip=ping::http::tests::resolve_host_with_valid_hostname_returns_some"
+  ];
+
+  env = {
+    VERGEN_BUILD_TIMESTAMP = "0";
+    VERGEN_BUILD_SEMVER = version;
+    VERGEN_GIT_SHA = hash;
+    VERGEN_GIT_COMMIT_TIMESTAMP = "0";
+    VERGEN_GIT_BRANCH = "master";
+    VERGEN_RUSTC_SEMVER = rustc.version;
+    VERGEN_RUSTC_CHANNEL = "stable";
+    VERGEN_CARGO_PROFILE = "release";
+  };
+
+  meta = with lib; {
+    description = "A mixnet providing IP-level privacy";
+    longDescription = ''
+      Nym routes IP packets through other participating nodes to hide their source and destination.
+      In contrast with Tor, it prevents timing attacks at the cost of latency.
+    '';
+    homepage = "https://nymtech.net";
+    license = licenses.asl20;
+    maintainers = [ maintainers.ehmry ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/offrss/default.nix b/nixpkgs/pkgs/applications/networking/offrss/default.nix
new file mode 100644
index 000000000000..773ec444edf9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/offrss/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchurl, curl, libmrss, podofo, libiconv }:
+
+stdenv.mkDerivation rec {
+  pname = "offrss";
+  version = "1.3";
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp offrss $out/bin
+  '';
+
+  buildInputs = [ curl libmrss ]
+    ++ lib.optional (stdenv.hostPlatform == stdenv.buildPlatform) podofo
+    ++ lib.optional (!stdenv.isLinux) libiconv;
+
+  # Workaround build failure on -fno-common toolchains:
+  #   ld: serve_pdf.o:offrss.h:75: multiple definition of `cgi_url_path';
+  #     offrss.o:offrss.h:75: first defined here
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  configurePhase = ''
+    substituteInPlace Makefile \
+      --replace '$(CC) $(CFLAGS) $(LDFLAGS)' '$(CXX) $(CFLAGS) $(LDFLAGS)'
+  '' + lib.optionalString (!stdenv.isLinux) ''
+    sed 's/#EXTRA/EXTRA/' -i Makefile
+  '' + lib.optionalString (stdenv.hostPlatform != stdenv.buildPlatform) ''
+    sed 's/^PDF/#PDF/' -i Makefile
+  '';
+
+  src = fetchurl {
+    url = "http://vicerveza.homeunix.net/~viric/soft/offrss/offrss-${version}.tar.gz";
+    sha256 = "1akw1x84jj2m9z60cvlvmz21qwlaywmw18pl7lgp3bj5nw6250p6";
+  };
+
+  meta = with lib; {
+    homepage = "http://vicerveza.homeunix.net/~viric/cgi-bin/offrss";
+    description = "Offline RSS/Atom reader";
+    license = licenses.agpl3Plus;
+    maintainers = with maintainers; [ viric ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/omping/default.nix b/nixpkgs/pkgs/applications/networking/omping/default.nix
new file mode 100644
index 000000000000..2089408d09ba
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/omping/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch }:
+
+stdenv.mkDerivation rec {
+  pname = "omping";
+  version = "0.0.5";
+
+  src = fetchFromGitHub {
+    owner  = "troglobit";
+    repo   = "omping";
+    rev    = version;
+    sha256 = "1f0vsbnhxp7bbgdnfqshryx3nhz2sqdnxdj068s0nmzsh53ckbf7";
+  };
+
+  patches = [
+    # This can go in 0.0.6+
+    (fetchpatch {
+      url    = "https://github.com/troglobit/omping/commit/08a31ec1a6eb4e8f88c301ef679c3b6f9893f333.patch";
+      sha256 = "1xafyvd46bq53w2zvjw8bdw7vjqbrcrr21cyh6d0zfcn4gif1k0f";
+      name   = "fix_manpage_install.patch";
+    })
+  ];
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+  ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    description = "Open Multicast Ping (omping) is a tool for testing IPv4/IPv6 multicast connectivity on a LAN";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    inherit (src.meta) homepage;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/onionshare/default.nix b/nixpkgs/pkgs/applications/networking/onionshare/default.nix
new file mode 100644
index 000000000000..369cd7e33850
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/onionshare/default.nix
@@ -0,0 +1,157 @@
+{ lib
+, stdenv
+, buildPythonApplication
+, substituteAll
+, fetchFromGitHub
+, isPy3k
+, colorama
+, flask
+, flask-httpauth
+, flask-socketio
+, cepa
+, psutil
+, pyqt5
+, pycrypto
+, pynacl
+, pyside2
+, pysocks
+, pytestCheckHook
+, qrcode
+, qt5
+, requests
+, unidecode
+, tor
+, obfs4
+, snowflake
+}:
+
+let
+  version = "2.6";
+  src = fetchFromGitHub {
+    owner = "onionshare";
+    repo = "onionshare";
+    rev = "v${version}";
+    sha256 = "sha256-LA7XlzoCXUiG/9subTddAd22336wO9sOHCIBlQK4Ga4=";
+  };
+  meta = with lib; {
+    description = "Securely and anonymously send and receive files";
+    longDescription = ''
+      OnionShare is an open source tool for securely and anonymously sending
+      and receiving files using Tor onion services. It works by starting a web
+      server directly on your computer and making it accessible as an
+      unguessable Tor web address that others can load in Tor Browser to
+      download files from you, or upload files to you. It doesn't require
+      setting up a separate server, using a third party file-sharing service,
+      or even logging into an account.
+
+      Unlike services like email, Google Drive, DropBox, WeTransfer, or nearly
+      any other way people typically send files to each other, when you use
+      OnionShare you don't give any companies access to the files that you're
+      sharing. So long as you share the unguessable web address in a secure way
+      (like pasting it in an encrypted messaging app), no one but you and the
+      person you're sharing with can access the files.
+    '';
+
+    homepage = "https://onionshare.org/";
+
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ lourkeur ];
+  };
+
+  # TODO: package meek https://support.torproject.org/glossary/meek/
+  meek = "/meek-not-available";
+
+in
+rec {
+  onionshare = buildPythonApplication {
+    pname = "onionshare-cli";
+    inherit version meta;
+    src = "${src}/cli";
+    patches = [
+      # hardcode store paths of dependencies
+      (substituteAll {
+        src = ./fix-paths.patch;
+        inherit tor meek obfs4 snowflake;
+        inherit (tor) geoip;
+      })
+    ];
+    disable = !isPy3k;
+    propagatedBuildInputs = [
+      colorama
+      flask
+      flask-httpauth
+      flask-socketio
+      cepa
+      psutil
+      pycrypto
+      pynacl
+      requests
+      unidecode
+    ];
+
+    buildInputs = [
+      tor
+      obfs4
+    ];
+
+    nativeCheckInputs = [
+      pytestCheckHook
+    ];
+
+    preCheck = ''
+      # Tests use the home directory
+      export HOME="$(mktemp -d)"
+    '';
+
+    disabledTests = [
+      "test_get_tor_paths_linux"  # expects /usr instead of /nix/store
+    ] ++ lib.optionals stdenv.isDarwin [
+      # on darwin (and only on darwin) onionshare attempts to discover
+      # user's *real* homedir via /etc/passwd, making it more painful
+      # to fake
+      "test_receive_mode_webhook"
+    ];
+  };
+
+  onionshare-gui = buildPythonApplication {
+    pname = "onionshare";
+    inherit version meta;
+    src = "${src}/desktop";
+    patches = [
+      # hardcode store paths of dependencies
+      (substituteAll {
+        src = ./fix-paths-gui.patch;
+        inherit tor meek obfs4 snowflake;
+        inherit (tor) geoip;
+      })
+      ./fix-qrcode-gui.patch
+    ];
+
+    disable = !isPy3k;
+    propagatedBuildInputs = [
+      onionshare
+      pyqt5
+      pyside2
+      psutil
+      qrcode
+      pysocks
+    ];
+
+    nativeBuildInputs = [ qt5.wrapQtAppsHook ];
+
+    postInstall = ''
+      mkdir -p $out/share/{appdata,applications,icons}
+      cp $src/org.onionshare.OnionShare.desktop $out/share/applications
+      cp $src/org.onionshare.OnionShare.svg $out/share/icons
+      cp $src/org.onionshare.OnionShare.appdata.xml $out/share/appdata
+    '';
+
+    preFixup = ''
+      wrapQtApp $out/bin/onionshare
+    '';
+
+    doCheck = false;
+
+    pythonImportsCheck = [ "onionshare" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/onionshare/fix-paths-gui.patch b/nixpkgs/pkgs/applications/networking/onionshare/fix-paths-gui.patch
new file mode 100644
index 000000000000..63bc3f68d3b1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/onionshare/fix-paths-gui.patch
@@ -0,0 +1,61 @@
+--- a/onionshare/gui_common.py
++++ b/onionshare/gui_common.py
+@@ -482,52 +482,12 @@ class GuiCommon:
+         }
+ 
+     def get_tor_paths(self):
+-        if self.common.platform == "Linux":
+-            base_path = self.get_resource_path("tor")
+-            if base_path and os.path.isdir(base_path):
+-                self.common.log(
+-                    "GuiCommon", "get_tor_paths", "using paths in resources"
+-                )
+-                tor_path = os.path.join(base_path, "tor")
+-                tor_geo_ip_file_path = os.path.join(base_path, "geoip")
+-                tor_geo_ipv6_file_path = os.path.join(base_path, "geoip6")
+-                obfs4proxy_file_path = os.path.join(base_path, "obfs4proxy")
+-                snowflake_file_path = os.path.join(base_path, "snowflake-client")
+-                meek_client_file_path = os.path.join(base_path, "meek-client")
+-            else:
+-                # Fallback to looking in the path
+-                self.common.log("GuiCommon", "get_tor_paths", "using paths from PATH")
+-                tor_path = shutil.which("tor")
+-                obfs4proxy_file_path = shutil.which("obfs4proxy")
+-                snowflake_file_path = shutil.which("snowflake-client")
+-                meek_client_file_path = shutil.which("meek-client")
+-                prefix = os.path.dirname(os.path.dirname(tor_path))
+-                tor_geo_ip_file_path = os.path.join(prefix, "share/tor/geoip")
+-                tor_geo_ipv6_file_path = os.path.join(prefix, "share/tor/geoip6")
+-
+-        if self.common.platform == "Windows":
+-            base_path = self.get_resource_path("tor")
+-            tor_path = os.path.join(base_path, "tor.exe")
+-            obfs4proxy_file_path = os.path.join(base_path, "obfs4proxy.exe")
+-            snowflake_file_path = os.path.join(base_path, "snowflake-client.exe")
+-            meek_client_file_path = os.path.join(base_path, "meek-client.exe")
+-            tor_geo_ip_file_path = os.path.join(base_path, "geoip")
+-            tor_geo_ipv6_file_path = os.path.join(base_path, "geoip6")
+-        elif self.common.platform == "Darwin":
+-            base_path = self.get_resource_path("tor")
+-            tor_path = os.path.join(base_path, "tor")
+-            obfs4proxy_file_path = os.path.join(base_path, "obfs4proxy")
+-            snowflake_file_path = os.path.join(base_path, "snowflake-client")
+-            meek_client_file_path = os.path.join(base_path, "meek-client")
+-            tor_geo_ip_file_path = os.path.join(base_path, "geoip")
+-            tor_geo_ipv6_file_path = os.path.join(base_path, "geoip6")
+-        elif self.common.platform == "BSD":
+-            tor_path = "/usr/local/bin/tor"
+-            tor_geo_ip_file_path = "/usr/local/share/tor/geoip"
+-            tor_geo_ipv6_file_path = "/usr/local/share/tor/geoip6"
+-            obfs4proxy_file_path = "/usr/local/bin/obfs4proxy"
+-            meek_client_file_path = "/usr/local/bin/meek-client"
+-            snowflake_file_path = "/usr/local/bin/snowflake-client"
++        tor_path = "@tor@/bin/tor"
++        tor_geo_ip_file_path = "@geoip@/share/tor/geoip"
++        tor_geo_ipv6_file_path = "@geoip@/share/tor/geoip6"
++        obfs4proxy_file_path = "@obfs4@/bin/obfs4proxy"
++        meek_client_file_path = "@meek@/bin/meek-client"
++        snowflake_file_path = "@snowflake@/bin/snowflake-client"
+ 
+         return (
+             tor_path,
diff --git a/nixpkgs/pkgs/applications/networking/onionshare/fix-paths.patch b/nixpkgs/pkgs/applications/networking/onionshare/fix-paths.patch
new file mode 100644
index 000000000000..62e69f927b56
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/onionshare/fix-paths.patch
@@ -0,0 +1,82 @@
+--- a/onionshare_cli/common.py
++++ b/onionshare_cli/common.py
+@@ -318,73 +318,12 @@ class Common:
+         return path
+ 
+     def get_tor_paths(self):
+-        if self.platform == "Linux":
+-            tor_path = shutil.which("tor")
+-            if not tor_path:
+-                raise CannotFindTor()
+-            obfs4proxy_file_path = shutil.which("obfs4proxy")
+-            snowflake_file_path = shutil.which("snowflake-client")
+-            meek_client_file_path = shutil.which("meek-client")
+-            prefix = os.path.dirname(os.path.dirname(tor_path))
+-            tor_geo_ip_file_path = os.path.join(prefix, "share/tor/geoip")
+-            tor_geo_ipv6_file_path = os.path.join(prefix, "share/tor/geoip6")
+-        elif self.platform == "Windows":
+-            # In Windows, the Tor binaries are in the onionshare package, not the onionshare_cli package
+-            base_path = self.get_resource_path("tor")
+-            base_path = base_path.replace("onionshare_cli", "onionshare")
+-            tor_path = os.path.join(base_path, "tor.exe")
+-
+-            # If tor.exe isn't there, mayber we're running from the source tree
+-            if not os.path.exists(tor_path):
+-                self.log(
+-                    "Common", "get_tor_paths", f"Cannot find tor.exe at {tor_path}"
+-                )
+-                base_path = os.path.join(os.getcwd(), "onionshare", "resources", "tor")
+-
+-                tor_path = os.path.join(base_path, "tor.exe")
+-                if not os.path.exists(tor_path):
+-                    self.log(
+-                        "Common", "get_tor_paths", f"Cannot find tor.exe at {tor_path}"
+-                    )
+-                    raise CannotFindTor()
+-
+-            obfs4proxy_file_path = os.path.join(base_path, "obfs4proxy.exe")
+-            snowflake_file_path = os.path.join(base_path, "snowflake-client.exe")
+-            meek_client_file_path = os.path.join(base_path, "meek-client.exe")
+-            tor_geo_ip_file_path = os.path.join(base_path, "geoip")
+-            tor_geo_ipv6_file_path = os.path.join(base_path, "geoip6")
+-
+-        elif self.platform == "Darwin":
+-            # Let's see if we have tor binaries in the onionshare GUI package
+-            base_path = self.get_resource_path("tor")
+-            base_path = base_path.replace("onionshare_cli", "onionshare")
+-            tor_path = os.path.join(base_path, "tor")
+-            if os.path.exists(tor_path):
+-                obfs4proxy_file_path = os.path.join(base_path, "obfs4proxy")
+-                snowflake_file_path = os.path.join(base_path, "snowflake-client")
+-                meek_client_file_path = os.path.join(base_path, "meek-client")
+-                tor_geo_ip_file_path = os.path.join(base_path, "geoip")
+-                tor_geo_ipv6_file_path = os.path.join(base_path, "geoip6")
+-            else:
+-                # Fallback to looking in the path
+-                tor_path = shutil.which("tor")
+-                if not os.path.exists(tor_path):
+-                    raise CannotFindTor()
+-
+-                obfs4proxy_file_path = shutil.which("obfs4proxy")
+-                snowflake_file_path = shutil.which("snowflake-client")
+-                meek_client_file_path = shutil.which("meek-client")
+-                prefix = os.path.dirname(os.path.dirname(tor_path))
+-                tor_geo_ip_file_path = os.path.join(prefix, "share/tor/geoip")
+-                tor_geo_ipv6_file_path = os.path.join(prefix, "share/tor/geoip6")
+-
+-        elif self.platform == "BSD":
+-            tor_path = "/usr/local/bin/tor"
+-            tor_geo_ip_file_path = "/usr/local/share/tor/geoip"
+-            tor_geo_ipv6_file_path = "/usr/local/share/tor/geoip6"
+-            obfs4proxy_file_path = "/usr/local/bin/obfs4proxy"
+-            snowflake_file_path = "/usr/local/bin/snowflake-client"
+-            meek_client_file_path = "/usr/local/bin/meek-client"
++        tor_path = "@tor@/bin/tor"
++        tor_geo_ip_file_path = "@geoip@/share/tor/geoip"
++        tor_geo_ipv6_file_path = "@geoip@/share/tor/geoip6"
++        obfs4proxy_file_path = "@obfs4@/bin/obfs4proxy"
++        snowflake_file_path = "@snowflake@/bin/snowflake-client"
++        meek_client_file_path = "@meek@/bin/meek-client"
+ 
+         return (
+             tor_path,
diff --git a/nixpkgs/pkgs/applications/networking/onionshare/fix-qrcode-gui.patch b/nixpkgs/pkgs/applications/networking/onionshare/fix-qrcode-gui.patch
new file mode 100644
index 000000000000..97ee3817ab68
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/onionshare/fix-qrcode-gui.patch
@@ -0,0 +1,14 @@
+diff --git desktop/onionshare/widgets.py desktop/onionshare/widgets.py
+index 64a07703..bca974fb 100644
+--- desktop/onionshare/widgets.py
++++ desktop/onionshare/widgets.py
+@@ -101,7 +101,7 @@ class Image(qrcode.image.base.BaseImage):
+     A custom Image class, for use with the QR Code pixmap.
+     """
+ 
+-    def __init__(self, border, width, box_size):
++    def __init__(self, border, width, box_size, *args, **kargs):
+         self.border = border
+         self.width = width
+         self.box_size = box_size
+
diff --git a/nixpkgs/pkgs/applications/networking/opsdroid/default.nix b/nixpkgs/pkgs/applications/networking/opsdroid/default.nix
new file mode 100644
index 000000000000..4398c771e535
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/opsdroid/default.nix
@@ -0,0 +1,36 @@
+{ lib, fetchFromGitHub, python3Packages }:
+
+python3Packages.buildPythonPackage rec {
+  pname = "opsdroid";
+  version = "0.25.0";
+
+  src = fetchFromGitHub {
+    owner = "opsdroid";
+    repo = "opsdroid";
+    rev = "v${version}";
+    sha256 = "0f32jf2rds9543akysxinf3hsgzr0w880xwcrcm1r2r0nhp8b8s5";
+  };
+
+  disabled = !python3Packages.isPy3k;
+
+  # tests folder is not included in release
+  doCheck = false;
+
+  propagatedBuildInputs = with python3Packages; [
+    click babel opsdroid_get_image_size slackclient webexteamssdk bleach
+    parse emoji puremagic yamale nbformat websockets pycron nbconvert
+    aiohttp matrix-api-async aioredis aiosqlite arrow pyyaml motor regex
+    mattermostdriver setuptools voluptuous ibm-watson tailer multidict
+    watchgod get-video-properties appdirs bitstring matrix-nio
+  ] ++ matrix-nio.optional-dependencies.e2e;
+
+  passthru.python = python3Packages.python;
+
+  meta = with lib; {
+    description = "An open source chat-ops bot framework";
+    homepage = "https://opsdroid.dev";
+    maintainers = with maintainers; [ globin willibutz ];
+    license = licenses.asl20;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/ostinato/default.nix b/nixpkgs/pkgs/applications/networking/ostinato/default.nix
new file mode 100644
index 000000000000..abc75b8bb73f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/ostinato/default.nix
@@ -0,0 +1,74 @@
+{ lib, mkDerivation, fetchFromGitHub, fetchurl, qmake, makeDesktopItem
+, qtbase, qtscript, protobuf, libpcap, wireshark, gzip, diffutils, gawk
+, libnl
+, copyDesktopItems
+}:
+
+mkDerivation rec {
+  pname = "ostinato";
+  version = "1.2.0";
+
+  src = fetchFromGitHub  {
+    owner  = "pstavirs";
+    repo   = "ostinato";
+    rev    = "v${version}";
+    sha256 = "sha256-yhfhNfkiZulF0FxNT+3CeGqUTXLmwPQntl2TLdCcMTQ=";
+  };
+
+  ostinatoIcon = fetchurl {
+    url = "https://ostinato.org/images/site-logo.png";
+    sha256 = "f5c067823f2934e4d358d76f65a343efd69ad783a7aeabd7ab4ce3cd03490d70";
+  };
+
+  buildInputs = [ qtbase protobuf libpcap qtscript libnl ];
+
+  nativeBuildInputs = [
+    copyDesktopItems
+    qmake
+  ];
+
+  patches = [ ./drone_ini.patch ];
+  prePatch = ''
+    sed -i 's|/usr/include/libnl3|${libnl.dev}/include/libnl3|' server/drone.pro
+  '';
+
+  desktopItems = lib.singleton (makeDesktopItem {
+    name          = "ostinato";
+    desktopName   = "Ostinato";
+    genericName   = "Packet/Traffic Generator and Analyzer";
+    comment       = "Network packet and traffic generator and analyzer with a friendly GUI";
+    categories    = [ "Network" ];
+    startupNotify = true;
+    exec          = "@out@/bin/ostinato";
+    icon          =  ostinatoIcon;
+    extraConfig   = {
+      "GenericName[it]" = "Generatore ed Analizzatore di pacchetti di rete";
+      "Comment[it]"     = "Generatore ed Analizzatore di pacchetti di rete con interfaccia amichevole";
+    };
+  });
+
+  preFixup = ''
+    substituteInPlace $out/share/applications/ostinato.desktop \
+      --subst-var out
+
+    cat > $out/bin/ostinato.ini <<EOF
+    WiresharkPath=${wireshark}/bin/wireshark
+    TsharkPath=${wireshark}/bin/tshark
+    GzipPath=${gzip}/bin/gzip
+    DiffPath=${diffutils}/bin/diff
+    AwkPath=${gawk}/bin/awk
+    EOF
+  '';
+
+  # `cd common; qmake ostproto.pro; make pdmlreader.o`:
+  # pdmlprotocol.h:23:25: fatal error: protocol.pb.h: No such file or directory
+  enableParallelBuilding = false;
+
+  meta = with lib; {
+    description = "A packet traffic generator and analyzer";
+    homepage    = "https://ostinato.org/";
+    license     = licenses.gpl3Plus;
+    maintainers = with maintainers; [ rick68 ];
+    platforms   = with platforms; linux ++ darwin ++ cygwin;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/ostinato/drone_ini.patch b/nixpkgs/pkgs/applications/networking/ostinato/drone_ini.patch
new file mode 100644
index 000000000000..5818f4e94c30
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/ostinato/drone_ini.patch
@@ -0,0 +1,14 @@
+diff -Nru ostinato-414d89860de0987843295d149bcabeac7c6fd9e5/server/drone_main.cpp ostinato-414d89860de0987843295d149bcabeac7c6fd9e5.new/server/drone_main.cpp
+--- ostinato-414d89860de0987843295d149bcabeac7c6fd9e5/server/drone_main.cpp	2015-12-24 16:46:35.000000000 +0800
++++ ostinato-414d89860de0987843295d149bcabeac7c6fd9e5.new/server/drone_main.cpp	2015-12-30 20:59:04.319199699 +0800
+@@ -62,8 +62,8 @@
+     /* (Portable Mode) If we have a .ini file in the same directory as the 
+        executable, we use that instead of the platform specific location
+        and format for the settings */
+-    QString portableIni = QCoreApplication::applicationDirPath() 
+-            + "/drone.ini";
++    QString portableIni = argc > 2 ? argv[2] :
++            QCoreApplication::applicationDirPath() + "/drone.ini";
+     if (QFile::exists(portableIni))
+         appSettings = new QSettings(portableIni, QSettings::IniFormat);
+     else
diff --git a/nixpkgs/pkgs/applications/networking/owamp/default.nix b/nixpkgs/pkgs/applications/networking/owamp/default.nix
new file mode 100644
index 000000000000..fb3660ace2dc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/owamp/default.nix
@@ -0,0 +1,31 @@
+{lib, stdenv, fetchFromGitHub
+, autoconf, automake, mandoc }:
+
+stdenv.mkDerivation rec {
+  pname = "owamp";
+  version = "4.4.6";
+
+  src = fetchFromGitHub {
+    owner = "perfsonar";
+    repo = "owamp";
+    rev = "v${version}";
+    sha256= "5o85XSn84nOvNjIzlaZ2R6/TSHpKbWLXTO0FmqWsNMU=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ autoconf automake ];
+  buildInputs = [ mandoc ];
+
+  preConfigure = ''
+    I2util/bootstrap.sh
+    ./bootstrap
+  '';
+
+  meta = with lib; {
+    homepage = "http://software.internet2.edu/owamp/";
+    description = "A tool for performing one-way active measurements";
+    platforms = platforms.linux;
+    maintainers = [maintainers.teto];
+    license = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/owncloud-client/default.nix b/nixpkgs/pkgs/applications/networking/owncloud-client/default.nix
new file mode 100644
index 000000000000..7da1a368d845
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/owncloud-client/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, mkDerivation
+, pkg-config
+, cmake
+, extra-cmake-modules
+, callPackage
+, qtbase
+, qtkeychain
+, wrapQtAppsHook
+, qttools
+, sqlite
+, libsecret
+}:
+
+stdenv.mkDerivation rec {
+  pname = "owncloud-client";
+  version = "4.2.0";
+
+  libregraph = callPackage ./libre-graph-api-cpp-qt-client.nix { };
+
+  src = fetchFromGitHub {
+    owner = "owncloud";
+    repo = "client";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-dPNVp5DxCI4ye8eFjHoLGDlf8Ap682o1UB0k2VNr2rs=";
+  };
+
+  nativeBuildInputs = [ pkg-config cmake extra-cmake-modules wrapQtAppsHook qttools ];
+  buildInputs = [ qtbase qtkeychain sqlite libsecret libregraph ];
+
+  cmakeFlags = [
+    "-UCMAKE_INSTALL_LIBDIR"
+    "-DNO_SHIBBOLETH=1"
+  ];
+
+  meta = with lib; {
+    description = "Synchronise your ownCloud with your computer using this desktop client";
+    homepage = "https://owncloud.org";
+    maintainers = with maintainers; [ qknight hellwolf ];
+    platforms = platforms.unix;
+    broken = stdenv.isDarwin;
+    license = licenses.gpl2Plus;
+    changelog = "https://github.com/owncloud/client/releases/tag/v${version}";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/owncloud-client/libre-graph-api-cpp-qt-client.nix b/nixpkgs/pkgs/applications/networking/owncloud-client/libre-graph-api-cpp-qt-client.nix
new file mode 100644
index 000000000000..31412e72ec98
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/owncloud-client/libre-graph-api-cpp-qt-client.nix
@@ -0,0 +1,35 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, qtbase
+, wrapQtAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "libre-graph-api-cpp-qt-client";
+  version = "1.0.4";
+
+  src = fetchFromGitHub {
+    owner = "owncloud";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-wbdamPi2XSLWeprrYZtBUDH1A2gdp6/5geFZv+ZqSWk=";
+  };
+
+  sourceRoot = "${src.name}/client";
+
+  nativeBuildInputs = [ cmake wrapQtAppsHook ];
+  buildInputs = [ qtbase ];
+
+  cmakeFlags = [  ];
+
+  meta = with lib; {
+    description = "C++ Qt API for Libre Graph, a free API for cloud collaboration inspired by the MS Graph API";
+    homepage = "https://owncloud.org";
+    maintainers = with maintainers; [ qknight hellwolf ];
+    platforms = platforms.unix;
+    license = licenses.asl20;
+    changelog = "https://github.com/owncloud/libre-graph-api-cpp-qt-client/releases/tag/v${version}";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/p2p/deluge/default.nix b/nixpkgs/pkgs/applications/networking/p2p/deluge/default.nix
new file mode 100644
index 000000000000..dee7cde6fd3f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/deluge/default.nix
@@ -0,0 +1,104 @@
+{ lib
+, fetchurl
+, intltool
+, libtorrent-rasterbar
+, python3Packages
+, gtk3
+, glib
+, gobject-introspection
+, librsvg
+, wrapGAppsHook
+}:
+
+let
+  inherit (lib) optionals;
+
+  pypkgs = python3Packages;
+
+  generic = { pname, withGUI }:
+    pypkgs.buildPythonPackage rec {
+      inherit pname;
+      version = "2.1.1";
+
+      src = fetchurl {
+        url = "http://download.deluge-torrent.org/source/${lib.versions.majorMinor version}/deluge-${version}.tar.xz";
+        hash = "sha256-do3TGYAuQkN6s3lOvnW0lxQuCO1bD7JQO61izvRC3/c=";
+      };
+
+      propagatedBuildInputs = with pypkgs; [
+        twisted
+        mako
+        chardet
+        pyxdg
+        pyopenssl
+        service-identity
+        libtorrent-rasterbar.dev
+        libtorrent-rasterbar.python
+        setuptools
+        setproctitle
+        pillow
+        rencode
+        six
+        zope_interface
+        dbus-python
+        pycairo
+        librsvg
+      ] ++ optionals withGUI [
+        gtk3
+        gobject-introspection
+        pygobject3
+      ];
+
+      nativeBuildInputs = [
+        intltool
+        glib
+      ] ++ optionals withGUI [
+        gobject-introspection
+        wrapGAppsHook
+      ];
+
+      nativeCheckInputs = with pypkgs; [
+        pytestCheckHook
+        pytest-twisted
+        pytest-cov
+        mock
+        mccabe
+        pylint
+      ];
+
+      doCheck = false; # tests are not working at all
+
+      postInstall = ''
+        install -Dm444 -t $out/lib/systemd/system packaging/systemd/*.service
+      '' + (if withGUI
+      then ''
+        mkdir -p $out/share
+        cp -R deluge/ui/data/{icons,pixmaps} $out/share/
+        install -Dm444 -t $out/share/applications deluge/ui/data/share/applications/deluge.desktop
+      '' else ''
+        rm -r $out/bin/deluge-gtk
+        rm -r $out/lib/${python3Packages.python.libPrefix}/site-packages/deluge/ui/gtk3
+        rm -r $out/share/{icons,man/man1/deluge-gtk*,pixmaps}
+      '');
+
+      postFixup = ''
+        for f in $out/lib/systemd/system/*; do
+          substituteInPlace $f --replace /usr/bin $out/bin
+        done
+      '';
+
+      meta = with lib; {
+        description = "Torrent client";
+        homepage = "https://deluge-torrent.org";
+        license = licenses.gpl3Plus;
+        maintainers = with maintainers; [ domenkozar ebzzry ];
+        platforms = platforms.all;
+      };
+    };
+
+in
+rec {
+  deluge-gtk = generic { pname = "deluge-gtk"; withGUI = true; };
+  deluged = generic { pname = "deluged"; withGUI = false; };
+  deluge = deluge-gtk;
+}
diff --git a/nixpkgs/pkgs/applications/networking/p2p/dht/default.nix b/nixpkgs/pkgs/applications/networking/p2p/dht/default.nix
new file mode 100644
index 000000000000..6765c029ffe2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/dht/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, lib, fetchFromGitHub, cmake }:
+
+stdenv.mkDerivation rec {
+  pname = "dht";
+  version = "0.27";
+
+  src = fetchFromGitHub {
+    # Use transmission fork from post-0.27-transmission branch
+    owner = "transmission";
+    repo = pname;
+    rev = "015585510e402a057ec17142711ba2b568b5fd62";
+    sha256 = "m4utcxqE3Mn5L4IQ9UfuJXj2KkXXnqKBGqh7kHHGMJQ=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  meta = with lib; {
+    description = "BitTorrent DHT library";
+    homepage = "https://github.com/transmission/dht";
+    license = licenses.mit;
+    maintainers = with maintainers; [ emilytrau ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/p2p/eiskaltdcpp/default.nix b/nixpkgs/pkgs/applications/networking/p2p/eiskaltdcpp/default.nix
new file mode 100644
index 000000000000..f86eefe668f9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/eiskaltdcpp/default.nix
@@ -0,0 +1,52 @@
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, bzip2, libX11
+, mkDerivation, qtbase, qttools, qtmultimedia, qtscript
+, libiconv, pcre-cpp, libidn, lua5, miniupnpc, aspell, gettext, perl }:
+
+mkDerivation rec {
+  pname = "eiskaltdcpp";
+  version = "2.4.2";
+
+  src = fetchFromGitHub {
+    owner = "eiskaltdcpp";
+    repo = "eiskaltdcpp";
+    rev = "v${version}";
+    sha256 = "sha256-JmAopXFS6MkxW0wDQ1bC/ibRmWgOpzU0971hcqAehLU=";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ qtbase qttools qtmultimedia qtscript bzip2 libX11 pcre-cpp libidn lua5 miniupnpc aspell gettext
+    (perl.withPackages (p: with p; [
+      GetoptLong
+      TermShellUI
+    ])) ]
+    ++ lib.optional stdenv.isDarwin libiconv;
+
+  cmakeFlags = [
+    "-DDBUS_NOTIFY=ON"
+    "-DFREE_SPACE_BAR_C=ON"
+    "-DLUA_SCRIPT=ON"
+    "-DPERL_REGEX=ON"
+    "-DUSE_ASPELL=ON"
+    "-DUSE_CLI_JSONRPC=ON"
+    "-DUSE_MINIUPNP=ON"
+    "-DUSE_JS=ON"
+    "-DWITH_LUASCRIPTS=ON"
+    "-DWITH_SOUNDS=ON"
+  ];
+
+  postInstall = ''
+    ln -s $out/bin/$pname-qt $out/bin/$pname
+  '';
+
+  preFixup = ''
+    substituteInPlace $out/bin/eiskaltdcpp-cli-jsonrpc \
+      --replace "/usr/local" "$out"
+  '';
+
+  meta = with lib; {
+    description = "A cross-platform program that uses the Direct Connect and ADC protocols";
+    homepage = "https://github.com/eiskaltdcpp/eiskaltdcpp";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/p2p/enhanced-ctorrent/default.nix b/nixpkgs/pkgs/applications/networking/p2p/enhanced-ctorrent/default.nix
new file mode 100644
index 000000000000..b83729ebc693
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/enhanced-ctorrent/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchurl, fetchpatch }:
+
+stdenv.mkDerivation {
+  version = "3.3.2";
+  pname = "enhanced-ctorrent-dhn";
+
+  src = fetchurl {
+    url = "http://www.rahul.net/dholmes/ctorrent/ctorrent-dnh3.3.2.tar.gz";
+    sha256 = "0qs8waqwllk56i3yy3zhncy7nsnhmf09a494p5siz4vm2k4ncwy8";
+  };
+
+  # These patches come from Debian and fix CVE-2009-1759.
+  patches = [
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/c/ctorrent/1.3.4.dnh3.3.2-5/debian/patches/cve-security-fix.diff";
+      sha256 = "1qkzzm8sfspbcs10azmmif4qcr7pr8r38dsa2py84lsjm1yi3kls";
+    })
+    (fetchpatch {
+      url = "https://sources.debian.org/data/main/c/ctorrent/1.3.4.dnh3.3.2-5/debian/patches/FTBFS-fix.diff";
+      sha256 = "1m3zh96xwqjjzsbg62f7kx0miams58nys1f484qhdn870b5x9p06";
+    })
+  ];
+
+  meta = {
+    broken = stdenv.isDarwin;
+    description = "BitTorrent client written in C++";
+    longDescription = ''
+      CTorrent, a BitTorrent client implemented in C++, with bugfixes and
+      performance enhancements.
+    '';
+    homepage = "http://www.rahul.net/dholmes/ctorrent/";
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.unix;
+    maintainers = [ lib.maintainers.devhell ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/p2p/flood/default.nix b/nixpkgs/pkgs/applications/networking/p2p/flood/default.nix
new file mode 100644
index 000000000000..8ee94f17e50c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/flood/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage rec {
+  pname = "flood";
+  version = "unstable-2023-06-03";
+
+  src = fetchFromGitHub {
+    owner = "jesec";
+    repo = pname;
+    rev = "2b652f8148dab7134eeeb201b9d81dd6b8bda074";
+    hash = "sha256-wI6URPGUZUbydSgNaHN2C5IA2x/HHjBWIRT6H6iZU/0=";
+  };
+
+  npmDepsHash = "sha256-XmDnvq+ni5TOf3UQFc4JvGI3LiGpjbrLAocRvrW8qgk=";
+
+  meta = with lib; {
+    description = "Modern web UI for various torrent clients with a Node.js backend and React frontend";
+    homepage = "https://flood.js.org";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ thiagokokada winter ];
+    mainProgram = "flood";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/p2p/fragments/default.nix b/nixpkgs/pkgs/applications/networking/p2p/fragments/default.nix
new file mode 100644
index 000000000000..da74fd5e60ac
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/fragments/default.nix
@@ -0,0 +1,88 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, fetchpatch
+, appstream-glib
+, cargo
+, dbus
+, desktop-file-utils
+, git
+, glib
+, gtk4
+, libadwaita
+, meson
+, ninja
+, openssl
+, pkg-config
+, rustPlatform
+, rustc
+, sqlite
+, transmission
+, wrapGAppsHook4
+}:
+
+let
+  patchedTransmission = transmission.overrideAttrs (oldAttrs: {
+    patches = (oldAttrs.patches or []) ++ [
+      (fetchpatch {
+        url = "https://raw.githubusercontent.com/flathub/de.haeckerfelix.Fragments/2aee477c8e26a24570f8dbbdbd1c49e017ae32eb/transmission_pdeathsig.patch";
+        sha256 = "sha256-/rCoA566tMmzqcIfffC082Y56TwEyyQJ0knxymtscbA=";
+      })
+    ];
+  });
+in stdenv.mkDerivation rec {
+  pname = "fragments";
+  version = "2.1";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.gnome.org";
+    owner = "World";
+    repo = "Fragments";
+    rev = version;
+    sha256 = "sha256-/KtUcj41s9WeHzIgGWhYQv6oD/Df7WOnJAPuS6yGLHk=";
+  };
+
+  # https://github.com/gtk-rs/gtk4-rs/issues/1201
+  patches = [ ./gtk4-rs.patch ];
+  cargoDeps = rustPlatform.fetchCargoTarball {
+    inherit src patches;
+    name = "${pname}-${version}";
+    hash = "sha256-bhQHXx7kZFL+qb+k0gN1NZZ6LYjBUHuNqU528f0QAg0=";
+  };
+
+  nativeBuildInputs = [
+    appstream-glib
+    desktop-file-utils
+    git
+    meson
+    ninja
+    pkg-config
+    wrapGAppsHook4
+    rustPlatform.cargoSetupHook
+    cargo
+    rustc
+  ];
+
+  buildInputs = [
+    dbus
+    glib
+    gtk4
+    libadwaita
+    openssl
+    sqlite
+  ];
+
+  preFixup =  ''
+    gappsWrapperArgs+=(
+      --prefix PATH : "${lib.makeBinPath [ patchedTransmission ]}"
+    )
+  '';
+
+  meta = with lib; {
+    homepage = "https://gitlab.gnome.org/World/Fragments";
+    description = "Easy to use BitTorrent client for the GNOME desktop environment";
+    maintainers = with maintainers; [ emilytrau ];
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/p2p/fragments/gtk4-rs.patch b/nixpkgs/pkgs/applications/networking/p2p/fragments/gtk4-rs.patch
new file mode 100644
index 000000000000..4e2a73554309
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/fragments/gtk4-rs.patch
@@ -0,0 +1,28 @@
+diff --git a/Cargo.lock b/Cargo.lock
+index c0dfa2a..2decf88 100644
+--- a/Cargo.lock
++++ b/Cargo.lock
+@@ -1158,9 +1158,9 @@ checksum = "da5bf7748fd4cd0b2490df8debcc911809dbcbee4ece9531b96c29a9c729de5a"
+ 
+ [[package]]
+ name = "gtk4"
+-version = "0.4.8"
++version = "0.4.9"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "c64f0c2a3d80e899dc3febddad5bac193ffcf74a0fd7e31037f30dd34d6f7396"
++checksum = "4e8ae5aef2793bc3551b5e5e3fa062a5de54bb1eccf10dfa4effe9e4384fbbbc"
+ dependencies = [
+  "bitflags",
+  "cairo-rs",
+@@ -1181,9 +1181,9 @@ dependencies = [
+ 
+ [[package]]
+ name = "gtk4-macros"
+-version = "0.4.8"
++version = "0.4.9"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "fafbcc920af4eb677d7d164853e7040b9de5a22379c596f570190c675d45f7a7"
++checksum = "d9a4a8077b3a392dd7d637924529e1213d2e0c8e4d531177bc3355e86c257a54"
+ dependencies = [
+  "anyhow",
+  "proc-macro-crate 1.2.1",
diff --git a/nixpkgs/pkgs/applications/networking/p2p/freenet/default.nix b/nixpkgs/pkgs/applications/networking/p2p/freenet/default.nix
new file mode 100644
index 000000000000..8a46b5a476c1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/freenet/default.nix
@@ -0,0 +1,125 @@
+{ lib, stdenv, fetchurl, fetchFromGitHub, jdk, jre, gradle, bash, coreutils
+, substituteAll, nixosTests, perl, fetchpatch, writeText }:
+
+let
+  version = "01497";
+
+  freenet_ext = fetchurl {
+    url = "https://github.com/freenet/fred/releases/download/build01495/freenet-ext.jar";
+    sha256 = "sha256-MvKz1r7t9UE36i+aPr72dmbXafCWawjNF/19tZuk158=";
+  };
+
+  seednodes = fetchurl {
+    url = "https://downloads.freenetproject.org/alpha/opennet/seednodes.fref";
+    sha256 = "08awwr8n80b4cdzzb3y8hf2fzkr1f2ly4nlq779d6pvi5jymqdvv";
+  };
+
+  patches = [
+    # gradle 7 support
+    (fetchpatch {
+      url = "https://github.com/freenet/fred/pull/827.patch";
+      sha256 = "sha256-T1zymxRTADVhhwp2TyB+BC/J4gZsT/CUuMrT4COlpTY=";
+    })
+  ];
+
+in stdenv.mkDerivation rec {
+  pname = "freenet";
+  inherit version patches;
+
+  src = fetchFromGitHub {
+    owner = "freenet";
+    repo = "fred";
+    rev = "refs/tags/build${version}";
+    hash = "sha256-pywNPekofF/QotNVF28McojqK7c1Zzucds5rWV0R7BQ=";
+  };
+
+  postPatch = ''
+    rm gradle/verification-{keyring.keys,metadata.xml}
+  '';
+
+  nativeBuildInputs = [ gradle jdk ];
+
+  wrapper = substituteAll {
+    src = ./freenetWrapper;
+    inherit bash coreutils jre seednodes;
+  };
+
+  # https://github.com/freenet/fred/blob/next/build-offline.sh
+  # fake build to pre-download deps into fixed-output derivation
+  deps = stdenv.mkDerivation {
+    pname = "${pname}-deps";
+    inherit src version patches;
+
+    nativeBuildInputs = [ gradle perl ];
+    buildPhase = ''
+      export GRADLE_USER_HOME=$(mktemp -d)
+      gradle --no-daemon build
+    '';
+    # perl code mavenizes pathes (com.squareup.okio/okio/1.13.0/a9283170b7305c8d92d25aff02a6ab7e45d06cbe/okio-1.13.0.jar -> com/squareup/okio/okio/1.13.0/okio-1.13.0.jar)
+    installPhase = ''
+      find $GRADLE_USER_HOME/caches/modules-2 -type f -regex '.*\.\(jar\|pom\)' \
+        | perl -pe 's#(.*/([^/]+)/([^/]+)/([^/]+)/[0-9a-f]{30,40}/([^/\s]+))$# ($x = $2) =~ tr|\.|/|; "install -Dm444 $1 \$out/$x/$3/$4/''${\($5 =~ s/okio-jvm/okio/r)}" #e' \
+        | sh
+    '';
+    # Don't move info to share/
+    forceShare = [ "dummy" ];
+    outputHashMode = "recursive";
+    # Downloaded jars differ by platform
+    outputHash = "sha256-CZf5M3lI7Lz9Pl8U/lNoQ6V6Jxbmkxau8L273XFFS2E=";
+    outputHashAlgo = "sha256";
+  };
+
+  # Point to our local deps repo
+  gradleInit = writeText "init.gradle" ''
+    gradle.projectsLoaded {
+      rootProject.allprojects {
+        buildscript {
+          repositories {
+            clear()
+            maven { url '${deps}/'; metadataSources {mavenPom(); artifact()} }
+          }
+        }
+        repositories {
+          clear()
+          maven { url '${deps}/'; metadataSources {mavenPom(); artifact()} }
+        }
+      }
+    }
+
+    settingsEvaluated { settings ->
+      settings.pluginManagement {
+        repositories {
+          maven { url '${deps}/'; metadataSources {mavenPom(); artifact()} }
+        }
+      }
+    }
+  '';
+
+  buildPhase = ''
+    gradle jar -Dorg.gradle.java.home=${jdk} --offline --no-daemon --info --init-script $gradleInit
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm444 build/libs/freenet.jar $out/share/freenet/freenet.jar
+    ln -s ${freenet_ext} $out/share/freenet/freenet-ext.jar
+    mkdir -p $out/bin
+    install -Dm555 ${wrapper} $out/bin/freenet
+    substituteInPlace $out/bin/freenet \
+      --subst-var-by outFreenet $out
+    ln -s ${deps} $out/deps
+    runHook postInstall
+  '';
+
+  passthru.tests = { inherit (nixosTests) freenet; };
+
+  meta = {
+    description = "Decentralised and censorship-resistant network";
+    homepage = "https://freenetproject.org/";
+    sourceProvenance = with lib.sourceTypes; [ binaryBytecode ];
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [ nagy ];
+    platforms = with lib.platforms; linux;
+    changelog = "https://github.com/freenet/fred/blob/build${version}/NEWS.md";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/p2p/freenet/freenetWrapper b/nixpkgs/pkgs/applications/networking/p2p/freenet/freenetWrapper
new file mode 100755
index 000000000000..74ff2c62961f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/freenet/freenetWrapper
@@ -0,0 +1,18 @@
+#! @bash@/bin/bash
+set -eo pipefail
+PATH=@coreutils@/bin:$PATH
+export CLASSPATH=$(find @outFreenet@/deps/ -name "*.jar"|grep -v bcprov-jdk15on-1.48.jar|tr $'\n' :)
+CLASSPATH=$CLASSPATH:@outFreenet@/share/freenet/freenet-ext.jar:@outFreenet@/share/freenet/freenet.jar
+
+export FREENET_HOME="$HOME/.local/share/freenet"
+if [ -n "$XDG_DATA_HOME" ] ; then
+  FREENET_HOME="$XDG_DATA_HOME/freenet"
+fi
+
+mkdir -p -- $FREENET_HOME
+
+cp -u -- @seednodes@ $FREENET_HOME/seednodes.fref
+chmod u+rw -- $FREENET_HOME/seednodes.fref
+
+cd -- $FREENET_HOME
+exec @jre@/bin/java -Xmx1024M freenet.node.NodeStarter "$@"
diff --git a/nixpkgs/pkgs/applications/networking/p2p/frostwire/default.nix b/nixpkgs/pkgs/applications/networking/p2p/frostwire/default.nix
new file mode 100644
index 000000000000..9f4261e07c81
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/frostwire/default.nix
@@ -0,0 +1,99 @@
+{ lib, stdenv, fetchFromGitHub, gradle_6, perl, jre, makeWrapper, makeDesktopItem, mplayer }:
+
+let
+  version = "6.6.7-build-529";
+
+  src = fetchFromGitHub {
+    owner = "frostwire";
+    repo = "frostwire";
+    rev = "frostwire-desktop-${version}";
+    sha256 = "03wdj2kr8akzx8m1scvg98132zbaxh81qjdsxn2645b3gahjwz0m";
+  };
+
+  desktopItem = makeDesktopItem {
+    name = "frostwire";
+    desktopName = "FrostWire";
+    genericName = "P2P Bittorrent client";
+    exec = "frostwire";
+    icon = "frostwire";
+    comment = "Search and explore all kinds of files on the Bittorrent network";
+    categories = [ "Network" "FileTransfer" "P2P" ];
+  };
+
+  # fake build to pre-download deps into fixed-output derivation
+  deps = stdenv.mkDerivation {
+    pname = "frostwire-desktop-deps";
+    inherit version src;
+    buildInputs = [ gradle_6 perl ];
+    buildPhase = ''
+      export GRADLE_USER_HOME=$(mktemp -d)
+      ( cd desktop
+        gradle --no-daemon build
+      )
+    '';
+    # perl code mavenizes pathes (com.squareup.okio/okio/1.13.0/a9283170b7305c8d92d25aff02a6ab7e45d06cbe/okio-1.13.0.jar -> com/squareup/okio/okio/1.13.0/okio-1.13.0.jar)
+    installPhase = ''
+      find $GRADLE_USER_HOME -type f -regex '.*\.\(jar\|pom\)' \
+        | perl -pe 's#(.*/([^/]+)/([^/]+)/([^/]+)/[0-9a-f]{30,40}/([^/\s]+))$# ($x = $2) =~ tr|\.|/|; "install -Dm444 $1 \$out/$x/$3/$4/$5" #e' \
+        | sh
+    '';
+    outputHashAlgo = "sha256";
+    outputHashMode = "recursive";
+    outputHash = "sha256-r6YSrbSJbM3063JrX4tCVKFrJxTaLN4Trc+33jzpwcE=";
+  };
+
+in stdenv.mkDerivation {
+  pname = "frostwire-desktop";
+  inherit version src;
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ gradle_6 ];
+
+  buildPhase = ''
+    export GRADLE_USER_HOME=$(mktemp -d)
+    ( cd desktop
+
+      # disable auto-update (anyway it won't update frostwire installed in nix store)
+      substituteInPlace src/com/frostwire/gui/updates/UpdateManager.java \
+        --replace 'um.checkForUpdates' '// um.checkForUpdates'
+
+      # fix path to mplayer
+      substituteInPlace src/com/frostwire/gui/player/MediaPlayerLinux.java \
+        --replace /usr/bin/mplayer ${mplayer}/bin/mplayer
+
+      substituteInPlace build.gradle \
+        --replace 'mavenCentral()' 'mavenLocal(); maven { url uri("${deps}") }'
+      gradle --offline --no-daemon build
+    )
+  '';
+
+  installPhase = ''
+    mkdir -p $out/lib $out/share/java
+
+    cp desktop/build/libs/frostwire.jar $out/share/java/frostwire.jar
+
+    cp ${ { x86_64-darwin = "desktop/lib/native/*.dylib";
+            x86_64-linux  = "desktop/lib/native/lib{jlibtorrent,SystemUtilities}.so";
+            i686-linux    = "desktop/lib/native/lib{jlibtorrent,SystemUtilities}X86.so";
+          }.${stdenv.hostPlatform.system} or (throw "unsupported system ${stdenv.hostPlatform.system}")
+        } $out/lib
+
+    cp -dpR ${desktopItem}/share $out
+
+    makeWrapper ${jre}/bin/java $out/bin/frostwire \
+      --add-flags "-Djava.library.path=$out/lib -jar $out/share/java/frostwire.jar"
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.frostwire.com/";
+    description = "BitTorrent Client and Cloud File Downloader";
+    sourceProvenance = with sourceTypes; [
+      fromSource
+      binaryBytecode  # deps
+    ];
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ gavin ];
+    platforms = [ "x86_64-darwin" "x86_64-linux" "i686-linux" ];
+    broken = true; # at 2022-09-30, errors with changing hash.
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/p2p/frostwire/frostwire-bin.nix b/nixpkgs/pkgs/applications/networking/p2p/frostwire/frostwire-bin.nix
new file mode 100644
index 000000000000..fd5424cee342
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/frostwire/frostwire-bin.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchurl, jre, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  version = "6.9.8";
+  pname = "frostwire";
+
+  src = fetchurl {
+    url = "https://dl.frostwire.com/frostwire/${version}/frostwire-${version}.amd64.tar.gz";
+    sha256 = "sha256-gslNdvxA4rGKg0bjf2KWw7w9NMp3zqrii144AfKsV4s=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/share/java
+    mv $(ls */*.jar) $out/share/java
+
+    makeWrapper $out/share/java/frostwire $out/bin/frostwire \
+      --prefix PATH : ${jre}/bin \
+      --prefix LD_LIBRARY_PATH : $out/share/java \
+      --set JAVA_HOME "${jre}"
+
+    substituteInPlace $out/share/java/frostwire \
+      --replace "export JAVA_PROGRAM_DIR=/usr/lib/frostwire/jre/bin" \
+        "export JAVA_PROGRAM_DIR=${jre}/bin/"
+
+    substituteInPlace $out/share/java/frostwire.desktop \
+      --replace "Exec=/usr/bin/frostwire %U" "Exec=${placeholder "out"}/bin/frostwire %U"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.frostwire.com/";
+    description = "BitTorrent Client and Cloud File Downloader";
+    sourceProvenance = with sourceTypes; [
+      binaryBytecode
+      binaryNativeCode
+    ];
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ gavin ];
+    platforms = [ "x86_64-linux"];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/p2p/gnunet/default.nix b/nixpkgs/pkgs/applications/networking/p2p/gnunet/default.nix
new file mode 100644
index 000000000000..2fdaf3c52f42
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/gnunet/default.nix
@@ -0,0 +1,75 @@
+{ lib, stdenv, fetchurl, adns, curl, gettext, gmp, gnutls, libextractor
+, libgcrypt, libgnurl, libidn, libmicrohttpd, libtool, libunistring
+, makeWrapper, ncurses, pkg-config, libxml2, sqlite, zlib
+, libpulseaudio, libopus, libogg, jansson, libsodium
+
+, postgresqlSupport ? true, postgresql }:
+
+stdenv.mkDerivation rec {
+  pname = "gnunet";
+  version = "0.19.4";
+
+  src = fetchurl {
+    url = "mirror://gnu/gnunet/${pname}-${version}.tar.gz";
+    sha256 = "sha256-AKY99AjVmH9bqaUEQfKncYK9n7MvHjAq5WOslOesAJs=";
+  };
+
+  enableParallelBuilding = true;
+
+  nativeBuildInputs = [ pkg-config libtool makeWrapper ];
+  buildInputs = [
+    adns curl gmp gnutls libextractor libgcrypt libgnurl libidn
+    libmicrohttpd libunistring libxml2 ncurses gettext libsodium
+    sqlite zlib libpulseaudio libopus libogg jansson
+  ] ++ lib.optional postgresqlSupport postgresql;
+
+  preConfigure = ''
+    # Brute force: since nix-worker chroots don't provide
+    # /etc/{resolv.conf,hosts}, replace all references to `localhost'
+    # by their IPv4 equivalent.
+    find . \( -name \*.c -or -name \*.conf \) | \
+      xargs sed -ie 's|\<localhost\>|127.0.0.1|g'
+
+    # Make sure the tests don't rely on `/tmp', for the sake of chroot
+    # builds.
+    find . \( -iname \*test\*.c -or -name \*.conf \) | \
+      xargs sed -ie "s|/tmp|$TMPDIR|g"
+
+    sed -ie 's|@LDFLAGS@|@LDFLAGS@ $(Z_LIBS)|g' \
+      src/regex/Makefile.in \
+      src/fs/Makefile.in
+  '';
+
+  # unfortunately, there's still a few failures with impure tests
+  doCheck = false;
+  checkPhase = ''
+    export GNUNET_PREFIX="$out"
+    export PATH="$out/bin:$PATH"
+    make -k check
+  '';
+
+  meta = with lib; {
+    description = "GNU's decentralized anonymous and censorship-resistant P2P framework";
+
+    longDescription = ''
+      GNUnet is a framework for secure peer-to-peer networking that
+      does not use any centralized or otherwise trusted services.  A
+      first service implemented on top of the networking layer
+      allows anonymous censorship-resistant file-sharing.  Anonymity
+      is provided by making messages originating from a peer
+      indistinguishable from messages that the peer is routing.  All
+      peers act as routers and use link-encrypted connections with
+      stable bandwidth utilization to communicate with each other.
+      GNUnet uses a simple, excess-based economic model to allocate
+      resources.  Peers in GNUnet monitor each others behavior with
+      respect to resource usage; peers that contribute to the
+      network are rewarded with better service.
+    '';
+
+    homepage = "https://gnunet.org/";
+    license = licenses.agpl3Plus;
+    maintainers = with maintainers; [ pstn vrthra ];
+    platforms = platforms.gnu ++ platforms.linux;
+    changelog = "https://git.gnunet.org/gnunet.git/tree/ChangeLog?h=v${version}";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/p2p/gnunet/gtk.nix b/nixpkgs/pkgs/applications/networking/p2p/gnunet/gtk.nix
new file mode 100644
index 000000000000..739c3013e526
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/gnunet/gtk.nix
@@ -0,0 +1,47 @@
+{ stdenv, fetchurl
+, glade
+, gnunet
+, gnutls
+, gtk3
+, libextractor
+, libgcrypt
+, libsodium
+, libxml2
+, pkg-config
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gnunet-gtk";
+  version = "0.19.0";
+
+  src = fetchurl {
+    url = "mirror://gnu/gnunet/${pname}-${version}.tar.gz";
+    sha256 = "sha256-MwAWs1rHXYlRUcAWX8LnCLTwEOSI68aA0s7uZGgYR3w=";
+  };
+
+  nativeBuildInputs= [
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    glade
+    gnunet
+    gnutls
+    gtk3
+    libextractor
+    libgcrypt
+    libsodium
+    libxml2
+  ];
+
+  configureFlags = [ "--with-gnunet=${gnunet}" ];
+
+  patchPhase = "patchShebangs pixmaps/icon-theme-installer";
+
+  meta = gnunet.meta // {
+    description = "GNUnet GTK User Interface";
+    homepage = "https://git.gnunet.org/gnunet-gtk.git";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/p2p/jesec-rtorrent/avoid-stack-overflow-for-lockfile-buf.patch b/nixpkgs/pkgs/applications/networking/p2p/jesec-rtorrent/avoid-stack-overflow-for-lockfile-buf.patch
new file mode 100644
index 000000000000..2a20b157a2fc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/jesec-rtorrent/avoid-stack-overflow-for-lockfile-buf.patch
@@ -0,0 +1,30 @@
+From dd4a96073d4a60ca8fff55be6ea6b17018de96a8 Mon Sep 17 00:00:00 2001
+From: Varun Madiath <git@madiathv.com>
+Date: Wed, 19 Jul 2023 15:30:57 -0400
+Subject: [PATCH] utils: lockfile: avoid stack overflow for lockfile buffer
+
+Original patch by @cyphar was submitted to rakshasa/rtorrent at
+https://github.com/rakshasa/rtorrent/pull/1169.
+
+Observed the segfault on nixos-unstable.
+---
+ src/utils/lockfile.cc | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/utils/lockfile.cc b/src/utils/lockfile.cc
+index 76e4b8f..441f5c8 100644
+--- a/src/utils/lockfile.cc
++++ b/src/utils/lockfile.cc
+@@ -75,7 +75,8 @@ Lockfile::try_lock() {
+   int  pos = ::gethostname(buf, 255);
+ 
+   if (pos == 0) {
+-    ::snprintf(buf + std::strlen(buf), 255, ":+%i\n", ::getpid());
++    ssize_t len = std::strlen(buf);
++    ::snprintf(buf + len, 255 - len, ":+%i\n", ::getpid());
+     ssize_t __attribute__((unused)) result = ::write(fd, buf, std::strlen(buf));
+   }
+ 
+-- 
+2.41.0
+
diff --git a/nixpkgs/pkgs/applications/networking/p2p/jesec-rtorrent/default.nix b/nixpkgs/pkgs/applications/networking/p2p/jesec-rtorrent/default.nix
new file mode 100644
index 000000000000..94c1994bd080
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/jesec-rtorrent/default.nix
@@ -0,0 +1,74 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, curl
+, gtest
+, libtorrent
+, ncurses
+, jsonRpcSupport ? true, nlohmann_json
+, xmlRpcSupport ? true, xmlrpc_c
+}:
+
+stdenv.mkDerivation rec {
+  pname = "jesec-rtorrent";
+  version = "0.9.8-r16";
+
+  src = fetchFromGitHub {
+    owner = "jesec";
+    repo = "rtorrent";
+    rev = "v${version}";
+    hash = "sha256-i7c1jSawHshj1kaXl8tdpelIKU24okeg9K5/+ht6t2k=";
+  };
+
+  patches = [
+    ./avoid-stack-overflow-for-lockfile-buf.patch
+  ];
+
+  passthru = {
+    inherit libtorrent;
+  };
+
+  nativeBuildInputs = [
+    cmake
+  ];
+
+  buildInputs = [
+    curl
+    libtorrent
+    ncurses
+  ]
+  ++ lib.optional jsonRpcSupport nlohmann_json
+  ++ lib.optional xmlRpcSupport xmlrpc_c;
+
+  cmakeFlags = [
+    "-DUSE_RUNTIME_CA_DETECTION=NO"
+  ]
+  ++ lib.optional (!jsonRpcSupport) "-DUSE_JSONRPC=NO"
+  ++ lib.optional (!xmlRpcSupport) "-DUSE_XMLRPC=NO";
+
+  doCheck = true;
+
+  nativeCheckInputs = [
+    gtest
+  ];
+
+  prePatch = ''
+    substituteInPlace src/main.cc \
+      --replace "/etc/rtorrent/rtorrent.rc" "${placeholder "out"}/etc/rtorrent/rtorrent.rc"
+  '';
+
+  postFixup = ''
+    mkdir -p $out/etc/rtorrent
+    cp $src/doc/rtorrent.rc $out/etc/rtorrent/rtorrent.rc
+  '';
+
+  meta = with lib; {
+    description = "An ncurses client for libtorrent, ideal for use with screen, tmux, or dtach (jesec's fork)";
+    homepage = "https://github.com/jesec/rtorrent";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ winter AndersonTorres ];
+    platforms = platforms.linux;
+    mainProgram = "rtorrent";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/p2p/jesec-rtorrent/libtorrent.nix b/nixpkgs/pkgs/applications/networking/p2p/jesec-rtorrent/libtorrent.nix
new file mode 100644
index 000000000000..7acfee3671da
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/jesec-rtorrent/libtorrent.nix
@@ -0,0 +1,48 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, gtest
+, openssl
+, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "jesec-libtorrent";
+  version = "0.13.8-r4";
+
+  src = fetchFromGitHub {
+    owner = "jesec";
+    repo = "libtorrent";
+    rev = "v${version}";
+    hash = "sha256-jC/hgGSi2qy+ToZgdxl1PhASLYbUL0O8trX0th2v5H0=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+  ];
+
+  buildInputs = [
+    openssl
+    zlib
+  ];
+
+  # Disabled because a test is flaky; see https://github.com/jesec/libtorrent/issues/4.
+  # doCheck = true;
+
+  preCheck = ''
+    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH''${LD_LIBRARY_PATH:+:}$PWD
+  '';
+
+  nativeCheckInputs = [
+    gtest
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/jesec/libtorrent";
+    description = "A BitTorrent library written in C++ for *nix, with focus on high performance and good code (jesec's fork)";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ winter AndersonTorres ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/p2p/libutp/3.4.nix b/nixpkgs/pkgs/applications/networking/p2p/libutp/3.4.nix
new file mode 100644
index 000000000000..4ea4ebbb2dc4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/libutp/3.4.nix
@@ -0,0 +1,30 @@
+{ stdenv, lib, fetchFromGitHub, cmake, unstableGitUpdater }:
+
+stdenv.mkDerivation rec {
+  pname = "libutp";
+  version = "unstable-2023-03-05";
+
+  src = fetchFromGitHub {
+    # Use transmission fork from post-3.4-transmission branch
+    owner = "transmission";
+    repo = pname;
+    rev = "9cb9f9c4f0073d78b08d6542cebaea6564ecadfe";
+    hash = "sha256-dpbX1h/gpuVIAXC4hwwuRwQDJ0pwVVEsgemOVN0Dv9Q=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  passthru = {
+    updateScript = unstableGitUpdater {
+      branch = "post-3.4-transmission";
+    };
+  };
+
+  meta = with lib; {
+    description = "uTorrent Transport Protocol library";
+    homepage = "https://github.com/transmission/libutp";
+    license = licenses.mit;
+    maintainers = with maintainers; [ emilytrau ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/p2p/libutp/default.nix b/nixpkgs/pkgs/applications/networking/p2p/libutp/default.nix
new file mode 100644
index 000000000000..a07ffdea6b69
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/libutp/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, lib, fetchFromGitHub, cmake }:
+
+stdenv.mkDerivation rec {
+  pname = "libutp";
+  version = "unstable-2017-01-02";
+
+  src = fetchFromGitHub {
+    # Use transmission fork from post-3.3-transmission branch
+    owner = "transmission";
+    repo = pname;
+    rev = "fda9f4b3db97ccb243fcbed2ce280eb4135d705b";
+    sha256 = "CvuZLOBksIl/lS6LaqOIuzNvX3ihlIPjI3Eqwo7YJH0=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  meta = with lib; {
+    description = "uTorrent Transport Protocol library";
+    homepage = "https://github.com/transmission/libutp";
+    license = licenses.mit;
+    maintainers = with maintainers; [ emilytrau ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/p2p/lokinet/default.nix b/nixpkgs/pkgs/applications/networking/p2p/lokinet/default.nix
new file mode 100644
index 000000000000..f77323d2bcf6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/lokinet/default.nix
@@ -0,0 +1,66 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, cmake
+, libevent
+, libsodium
+, libuv
+, nlohmann_json
+, pkg-config
+, spdlog
+, fmt_9
+, sqlite
+, systemd
+, unbound
+, zeromq
+}:
+let
+  # Upstream has received reports of incompatibilities with fmt, and other
+  # dependencies, see: https://github.com/oxen-io/lokinet/issues/2200.
+  spdlog' = spdlog.override {
+    fmt = fmt_9;
+  };
+
+in stdenv.mkDerivation rec {
+  pname = "lokinet";
+  version = "0.9.11";
+
+  src = fetchFromGitHub {
+    owner = "oxen-io";
+    repo = "lokinet";
+    rev = "refs/tags/v${version}";
+    fetchSubmodules = true;
+    hash = "sha256-aVFLDGTbRUOw2XWDpl+ojwHBG7c0miGeoKMLwMpqVtg=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+  ];
+
+  buildInputs = [
+    libevent
+    libuv
+    libsodium
+    nlohmann_json
+    spdlog'
+    sqlite
+    systemd
+    unbound
+    zeromq
+  ];
+
+  cmakeFlags = [
+    "-DGIT_VERSION=v${version}"
+    "-DWITH_BOOTSTRAP=OFF" # we provide bootstrap files manually
+    "-DWITH_SETCAP=OFF"
+  ];
+
+  meta = with lib; {
+    description = "Anonymous, decentralized and IP based overlay network for the internet";
+    homepage = "https://lokinet.org/";
+    changelog = "https://github.com/oxen-io/lokinet/releases/tag/v${version}";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ wyndon ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/p2p/magnetico/default.nix b/nixpkgs/pkgs/applications/networking/p2p/magnetico/default.nix
new file mode 100644
index 000000000000..a51dba890a40
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/magnetico/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, fetchFromGitHub
+, nixosTests
+, buildGoModule
+}:
+
+buildGoModule rec {
+  pname = "magnetico";
+  version = "unstable-2022-08-10";
+
+  src = fetchFromGitHub {
+    owner  = "ireun";
+    repo   = "magnetico";
+    rev    = "828e230d3b3c0759d3274e27f5a7b70400f4d6ea";
+    sha256 = "sha256-V1pBzillWTk9iuHAhFztxYaq4uLL3U3HYvedGk6ffbk=";
+  };
+
+  vendorHash = "sha256-ngYkTtBEZSyYYnfBHi0VrotwKGvMOiowbrwigJnjsuU=";
+
+  buildPhase = ''
+    runHook preBuild
+
+    make magneticow magneticod
+
+    runHook postBuild
+  '';
+
+  checkPhase = ''
+    runHook preBuild
+
+    make test
+
+    runHook postBuild
+  '';
+
+  passthru.tests = { inherit (nixosTests) magnetico; };
+
+  meta = with lib; {
+    description  = "Autonomous (self-hosted) BitTorrent DHT search engine suite";
+    homepage     = "https://github.com/boramalper/magnetico";
+    license      = licenses.agpl3;
+    badPlatforms = platforms.darwin;
+    maintainers  = with maintainers; [ rnhmjoj ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/p2p/mldonkey/default.nix b/nixpkgs/pkgs/applications/networking/p2p/mldonkey/default.nix
new file mode 100644
index 000000000000..7bc5e2f59679
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/mldonkey/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchurl, fetchpatch, ocamlPackages, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "mldonkey";
+  version = "3.1.7-2";
+
+  src = fetchurl {
+    url = "https://ygrek.org/p/release/mldonkey/mldonkey-${version}.tar.bz2";
+    sha256 = "b926e7aa3de4b4525af73c88f1724d576b4add56ef070f025941dd51cb24a794";
+  };
+
+  patches = [
+    # Fixes C++17 compat
+    (fetchpatch {
+      url = "https://github.com/ygrek/mldonkey/pull/66/commits/20ff84c185396f3d759cf4ef46b9f0bd33a51060.patch";
+      hash = "sha256-MCqx0jVfOaLkZhhv0b1cTdO6BK2/f6TxTWmx+NZjXME=";
+    })
+    # Fixes OCaml 4.12 compat
+    (fetchpatch {
+      url = "https://github.com/ygrek/mldonkey/commit/a153f0f7a4826d86d51d4bacedc0330b70fcbc34.patch";
+      hash = "sha256-/Muk3mPFjQJ48FqaozGa7o8YSPhDLXRz9K1EyfxlzC8=";
+    })
+    # Fixes OCaml 4.14 compat
+    (fetchpatch {
+      url = "https://github.com/FabioLolix/AUR-artifacts/raw/6721c2d4ef0be9a99499ecf2787e378e50b915e9/mldonkey-fix-build.patch";
+      hash = "sha256-HPW/CKfhywy+Km5/64Iok4tO9LJjAk53jVlsYzIRPfs=";
+    })
+  ];
+
+  preConfigure = ''
+    substituteInPlace Makefile --replace '+camlp4' \
+      '${ocamlPackages.camlp4}/lib/ocaml/${ocamlPackages.ocaml.version}/site-lib/camlp4'
+  '';
+
+  strictDeps = true;
+  nativeBuildInputs = with ocamlPackages; [ ocaml camlp4 ];
+  buildInputs = (with ocamlPackages; [ num ]) ++ [ zlib ];
+
+  meta = {
+    broken = stdenv.isDarwin;
+    description = "Client for many p2p networks, with multiple frontends";
+    homepage = "http://mldonkey.sourceforge.net/";
+    license = lib.licenses.gpl2Only;
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/p2p/ncdc/default.nix b/nixpkgs/pkgs/applications/networking/p2p/ncdc/default.nix
new file mode 100644
index 000000000000..558fe7e385f0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/ncdc/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchurl, fetchpatch, ncurses, zlib, bzip2, sqlite, pkg-config
+, glib, gnutls, perl, libmaxminddb }:
+
+stdenv.mkDerivation rec {
+  pname = "ncdc";
+  version = "1.23.1";
+
+  src = fetchurl {
+    url = "https://dev.yorhel.nl/download/ncdc-${version}.tar.gz";
+    hash = "sha256-lYgSFAd6Wzwk+7rwIK2g0ITuO1lqfDzB4OaKqsTJteY=";
+  };
+
+  nativeBuildInputs = [ perl pkg-config ];
+  buildInputs = [ ncurses zlib bzip2 sqlite glib gnutls libmaxminddb ];
+
+  configureFlags = [ "--with-geoip" ];
+
+  meta = with lib; {
+    description = "Modern and lightweight direct connect client with a friendly ncurses interface";
+    homepage = "https://dev.yorhel.nl/ncdc";
+    license = licenses.mit;
+    platforms = platforms.linux; # arbitrary
+    maintainers = with maintainers; [ ehmry ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/p2p/opentracker/default.nix b/nixpkgs/pkgs/applications/networking/p2p/opentracker/default.nix
new file mode 100644
index 000000000000..ebc105147d3d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/opentracker/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchgit, libowfat, zlib, nixosTests }:
+
+stdenv.mkDerivation {
+  pname = "opentracker";
+  version = "unstable-2021-08-23";
+
+  src = fetchgit {
+    url = "https://erdgeist.org/gitweb/opentracker";
+    rev = "110868ec4ebe60521d5a4ced63feca6a1cf0aa2a";
+    sha256 = "sha256-SuElfmk7zONolTiyg0pyvbfvyJRn3r9OrXwpTzLw8LI=";
+  };
+
+  buildInputs = [ libowfat zlib ];
+
+  makeFlags = [
+    "LIBOWFAT_HEADERS=${libowfat}/include/libowfat"
+    "LIBOWFAT_LIBRARY=${libowfat}/lib"
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    install -D opentracker $out/bin/opentracker
+    install -D opentracker.conf.sample $out/share/doc/opentracker.conf.sample
+    runHook postInstall
+  '';
+
+  passthru.tests = {
+    bittorrent-integration = nixosTests.bittorrent;
+  };
+
+  meta = with lib; {
+    homepage = "https://erdgeist.org/arts/software/opentracker/";
+    license = licenses.beerware;
+    platforms = platforms.linux;
+    description = "Bittorrent tracker project which aims for minimal resource usage and is intended to run at your wlan router";
+    maintainers = with maintainers; [ makefu ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/p2p/pyrosimple/default.nix b/nixpkgs/pkgs/applications/networking/p2p/pyrosimple/default.nix
new file mode 100644
index 000000000000..15e7304ef9b9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/pyrosimple/default.nix
@@ -0,0 +1,69 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, nix-update-script
+, pyrosimple
+, python3
+, testers
+, withInotify ? stdenv.isLinux
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "pyrosimple";
+  version = "2.10.2";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "kannibalox";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-3ZsRJNGbcKGU6v2uYUintMpKY8Z/DyTIDDxTsDEV6lw=";
+  };
+
+  pythonRelaxDeps = [
+    "prometheus-client"
+    "python-daemon"
+  ];
+
+  nativeBuildInputs = with python3.pkgs; [
+    poetry-core
+    pythonRelaxDepsHook
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    bencode-py
+    apscheduler
+    jinja2
+    python-daemon
+    importlib-resources
+    parsimonious
+    prometheus-client
+    prompt-toolkit
+    requests
+    shtab
+    python-box
+    tomli-w
+  ] ++ lib.optionals (pythonOlder "3.11") [
+    tomli
+  ] ++ lib.optional withInotify inotify;
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytestCheckHook
+  ];
+
+  passthru = {
+    updateScript = nix-update-script { };
+    tests = testers.testVersion {
+      package = pyrosimple;
+      command = "pyroadmin --version";
+    };
+  };
+
+  meta = with lib; {
+    description = "A rTorrent client";
+    homepage = "https://kannibalox.github.io/pyrosimple/";
+    changelog = "https://github.com/kannibalox/pyrosimple/blob/v${version}/CHANGELOG.md";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ ne9z vamega ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/p2p/qbittorrent/default.nix b/nixpkgs/pkgs/applications/networking/p2p/qbittorrent/default.nix
new file mode 100644
index 000000000000..a82adc4dc3de
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/qbittorrent/default.nix
@@ -0,0 +1,58 @@
+{ mkDerivation, lib, stdenv, fetchFromGitHub, pkg-config
+, boost, libtorrent-rasterbar, qtbase, qttools, qtsvg
+, debugSupport ? false
+, guiSupport ? true, dbus ? null # GUI (disable to run headless)
+, webuiSupport ? true # WebUI
+, trackerSearch ? true, python3 ? null
+}:
+
+assert guiSupport -> (dbus != null);
+assert trackerSearch -> (python3 != null);
+
+mkDerivation rec {
+  pname = "qbittorrent" + lib.optionalString (!guiSupport) "-nox";
+  version = "4.5.5";
+
+  src = fetchFromGitHub {
+    owner = "qbittorrent";
+    repo = "qBittorrent";
+    rev = "release-${version}";
+    hash = "sha256-rWv+KGw+3385GOKK4MvoSP0CepotUZELiDVFpyDf+9k=";
+  };
+
+  enableParallelBuilding = true;
+
+  # NOTE: 2018-05-31: CMake is working but it is not officially supported
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ boost libtorrent-rasterbar qtbase qttools qtsvg ]
+    ++ lib.optional guiSupport dbus # D(esktop)-Bus depends on GUI support
+    ++ lib.optional trackerSearch python3;
+
+  # Otherwise qm_gen.pri assumes lrelease-qt5, which does not exist.
+  QMAKE_LRELEASE = "lrelease";
+
+  configureFlags = [
+    "--with-boost-libdir=${boost.out}/lib"
+    "--with-boost=${boost.dev}" ]
+    ++ lib.optionals (!guiSupport) [ "--disable-gui" "--enable-systemd" ] # Also place qbittorrent-nox systemd service files
+    ++ lib.optional (!webuiSupport) "--disable-webui"
+    ++ lib.optional debugSupport "--enable-debug";
+
+  qtWrapperArgs = lib.optional trackerSearch "--prefix PATH : ${lib.makeBinPath [ python3 ]}";
+
+  postInstall = lib.optionalString stdenv.isDarwin ''
+    mkdir -p $out/{Applications,bin}
+    cp -R src/${pname}.app $out/Applications
+    makeWrapper $out/{Applications/${pname}.app/Contents/MacOS,bin}/${pname}
+  '';
+
+  meta = with lib; {
+    description = "Featureful free software BitTorrent client";
+    homepage    = "https://www.qbittorrent.org/";
+    changelog   = "https://github.com/qbittorrent/qBittorrent/blob/release-${version}/Changelog";
+    license     = licenses.gpl2Plus;
+    platforms   = platforms.unix;
+    maintainers = with maintainers; [ Anton-Latukha kashw2 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/p2p/rakshasa-rtorrent/default.nix b/nixpkgs/pkgs/applications/networking/p2p/rakshasa-rtorrent/default.nix
new file mode 100644
index 000000000000..c454c3ad2053
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/rakshasa-rtorrent/default.nix
@@ -0,0 +1,73 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchFromGitHub
+, autoreconfHook
+, autoconf-archive
+, cppunit
+, curl
+, libsigcxx
+, libtool
+, libtorrent
+, ncurses
+, openssl
+, pkg-config
+, xmlrpc_c
+, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "rakshasa-rtorrent";
+  version = "0.9.8+date=2022-06-20";
+
+  src = fetchFromGitHub {
+    owner = "rakshasa";
+    repo = "rtorrent";
+    rev = "92bec88d0904bfb31c808085c2fd0f22d0ec8db7";
+    hash = "sha256-er7UdIb+flhq0ye76UmomgfHV2ZSBROpXmfrNDHwTWw=";
+  };
+
+  passthru = {
+    inherit libtorrent;
+  };
+
+  nativeBuildInputs = [
+    autoconf-archive
+    autoreconfHook
+    pkg-config
+  ];
+
+  buildInputs = [
+    cppunit
+    curl
+    libsigcxx
+    libtool
+    libtorrent
+    ncurses
+    openssl
+    xmlrpc_c
+    zlib
+  ];
+
+  configureFlags = [
+    "--with-xmlrpc-c"
+    "--with-posix-fallocate"
+  ];
+
+  enableParallelBuilding = true;
+
+  postInstall = ''
+    mkdir -p $out/share/man/man1 $out/share/doc/rtorrent
+    mv doc/old/rtorrent.1 $out/share/man/man1/rtorrent.1
+    mv doc/rtorrent.rc $out/share/doc/rtorrent/rtorrent.rc
+  '';
+
+  meta = with lib; {
+    homepage = "https://rakshasa.github.io/rtorrent/";
+    description = "An ncurses client for libtorrent, ideal for use with screen, tmux, or dtach";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ ebzzry codyopel ];
+    platforms = platforms.unix;
+    mainProgram = "rtorrent";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/p2p/rakshasa-rtorrent/libtorrent.nix b/nixpkgs/pkgs/applications/networking/p2p/rakshasa-rtorrent/libtorrent.nix
new file mode 100644
index 000000000000..fff4cbb36cf6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/rakshasa-rtorrent/libtorrent.nix
@@ -0,0 +1,48 @@
+# Note: this is rakshasa's version of libtorrent, used mainly by rtorrent.
+# *Do not* mistake it by libtorrent-rasterbar, used by Deluge, qbitttorent etc.
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoconf-archive
+, autoreconfHook
+, cppunit
+, libsigcxx
+, openssl
+, pkg-config
+, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "rakshasa-libtorrent";
+  version = "0.13.8+date=2021-08-07";
+
+  src = fetchFromGitHub {
+    owner = "rakshasa";
+    repo = "libtorrent";
+    rev = "53596afc5fae275b3fb5753a4bb2a1a7f7cf6a51";
+    hash = "sha256-gyl/jfbptHz/gHkkVGWShhv1Z7o9fa9nJIz27U2A6wg=";
+  };
+
+  nativeBuildInputs = [
+    autoconf-archive
+    autoreconfHook
+    pkg-config
+  ];
+
+  buildInputs = [
+    cppunit
+    libsigcxx
+    openssl
+    zlib
+  ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    homepage = "https://github.com/rakshasa/libtorrent";
+    description = "A BitTorrent library written in C++ for *nix, with focus on high performance and good code";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ ebzzry codyopel ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/p2p/retroshare/cpp-filesystem.patch b/nixpkgs/pkgs/applications/networking/p2p/retroshare/cpp-filesystem.patch
new file mode 100644
index 000000000000..e9aa64e2871a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/retroshare/cpp-filesystem.patch
@@ -0,0 +1,12 @@
+diff --git a/libretroshare/src/util/rsdir.cc b/libretroshare/src/util/rsdir.cc
+index 8556b8198..d63699216 100644
+--- a/libretroshare/src/util/rsdir.cc
++++ b/libretroshare/src/util/rsdir.cc
+@@ -47,6 +47,7 @@
+ 
+ #include <fstream>
+ #include <stdexcept>
++#include <filesystem>
+ 
+ #if defined(WIN32) || defined(__CYGWIN__)
+ #include "util/rsstring.h"
diff --git a/nixpkgs/pkgs/applications/networking/p2p/retroshare/default.nix b/nixpkgs/pkgs/applications/networking/p2p/retroshare/default.nix
new file mode 100644
index 000000000000..680905e42bca
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/retroshare/default.nix
@@ -0,0 +1,54 @@
+{ lib, mkDerivation, fetchFromGitHub, qmake, cmake, pkg-config, miniupnpc, bzip2
+, speex, libmicrohttpd, libxml2, libxslt, sqlcipher, rapidjson, libXScrnSaver
+, qtbase, qtx11extras, qtmultimedia, libgnome-keyring3
+}:
+
+mkDerivation rec {
+  pname = "retroshare";
+  version = "0.6.6";
+
+  src = fetchFromGitHub {
+    owner = "RetroShare";
+    repo = "RetroShare";
+    rev = "v${version}";
+    sha256 = "1hsymbhsfgycj39mdkrdp2hgq8irmvxa4a6jx2gg339m1fgf2xmh";
+    fetchSubmodules = true;
+  };
+
+  patches = [
+    # The build normally tries to get git sub-modules during build
+    # but we already have them checked out
+    ./no-submodules.patch
+    ./cpp-filesystem.patch
+  ];
+
+  nativeBuildInputs = [ pkg-config qmake cmake ];
+  buildInputs = [
+    speex miniupnpc qtmultimedia qtx11extras qtbase libgnome-keyring3
+    bzip2 libXScrnSaver libxml2 libxslt sqlcipher libmicrohttpd rapidjson
+  ];
+
+  qmakeFlags = [
+    # Upnp library autodetection doesn't work
+    "RS_UPNP_LIB=miniupnpc"
+
+    # These values are normally found from the .git folder
+    "RS_MAJOR_VERSION=${lib.versions.major version}"
+    "RS_MINOR_VERSION=${lib.versions.minor version}"
+    "RS_MINI_VERSION=${lib.versions.patch version}"
+    "RS_EXTRA_VERSION="
+  ];
+
+  postInstall = ''
+    # BT DHT bootstrap
+    cp libbitdht/src/bitdht/bdboot.txt $out/share/retroshare
+  '';
+
+  meta = with lib; {
+    description = "Decentralized peer to peer chat application.";
+    homepage = "https://retroshare.cc/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ StijnDW ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/p2p/retroshare/no-submodules.patch b/nixpkgs/pkgs/applications/networking/p2p/retroshare/no-submodules.patch
new file mode 100644
index 000000000000..d47268003090
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/retroshare/no-submodules.patch
@@ -0,0 +1,62 @@
+diff --git a/libretroshare/src/libretroshare.pro b/libretroshare/src/libretroshare.pro
+index 84d18944e..71aeb67d2 100644
+--- a/libretroshare/src/libretroshare.pro
++++ b/libretroshare/src/libretroshare.pro
+@@ -870,20 +870,14 @@ rs_jsonapi {
+         genrestbedlib.variable_out = PRE_TARGETDEPS
+         win32-g++:isEmpty(QMAKE_SH) {
+             genrestbedlib.commands = \
+-                cd /D $$shell_path($${RS_SRC_PATH}) && git submodule update --init supportlibs/restbed || cd . $$escape_expand(\\n\\t) \
+-                cd /D $$shell_path($${RESTBED_SRC_PATH}) && git submodule update --init dependency/asio || cd . $$escape_expand(\\n\\t) \
+-                cd /D $$shell_path($${RESTBED_SRC_PATH}) && git submodule update --init dependency/catch || cd . $$escape_expand(\\n\\t )\
+-                cd /D $$shell_path($${RESTBED_SRC_PATH}) && git submodule update --init dependency/kashmir || cd . $$escape_expand(\\n\\t) \
++                cd /D $$shell_path($${RS_SRC_PATH}) && cd . $$escape_expand(\\n\\t) \
++                cd /D $$shell_path($${RESTBED_SRC_PATH}) && cd . $$escape_expand(\\n\\t) \
++                cd /D $$shell_path($${RESTBED_SRC_PATH}) && cd . $$escape_expand(\\n\\t )\
++                cd /D $$shell_path($${RESTBED_SRC_PATH}) && cd . $$escape_expand(\\n\\t) \
+                 $(CHK_DIR_EXISTS) $$shell_path($$UDP_DISCOVERY_BUILD_PATH) $(MKDIR) $$shell_path($${UDP_DISCOVERY_BUILD_PATH}) $$escape_expand(\\n\\t)
+         } else {
+             genrestbedlib.commands = \
+-                cd $${RS_SRC_PATH} && ( \
+-                git submodule update --init supportlibs/restbed ; \
+-                cd $${RESTBED_SRC_PATH} ; \
+-                git submodule update --init dependency/asio ; \
+-                git submodule update --init dependency/catch ; \
+-                git submodule update --init dependency/kashmir ; \
+-                true ) && \
++                cd $${RS_SRC_PATH} && \
+                 mkdir -p $${RESTBED_BUILD_PATH} &&
+         }
+         genrestbedlib.commands += \
+@@ -991,14 +985,9 @@ rs_broadcast_discovery {
+         udpdiscoverycpplib.variable_out = PRE_TARGETDEPS
+         win32-g++:isEmpty(QMAKE_SH) {
+             udpdiscoverycpplib.commands = \
+-                cd /D $$shell_path($${RS_SRC_PATH}) && git submodule update --init supportlibs/udp-discovery-cpp || cd . $$escape_expand(\\n\\t) \
+                 $(CHK_DIR_EXISTS) $$shell_path($$UDP_DISCOVERY_BUILD_PATH) $(MKDIR) $$shell_path($${UDP_DISCOVERY_BUILD_PATH}) $$escape_expand(\\n\\t)
+         } else {
+-            udpdiscoverycpplib.commands = \
+-                cd $${RS_SRC_PATH} && ( \
+-                git submodule update --init supportlibs/udp-discovery-cpp || \
+-                true ) && \
+-                mkdir -p $${UDP_DISCOVERY_BUILD_PATH} &&
++            udpdiscoverycpplib.commands = mkdir -p $${UDP_DISCOVERY_BUILD_PATH} &&
+         }
+         udpdiscoverycpplib.commands += \
+             cd $$shell_path($${UDP_DISCOVERY_BUILD_PATH}) && \
+diff --git a/retroshare-gui/src/retroshare-gui.pro b/retroshare-gui/src/retroshare-gui.pro
+index 654efd170..06cba9ba3 100644
+--- a/retroshare-gui/src/retroshare-gui.pro
++++ b/retroshare-gui/src/retroshare-gui.pro
+@@ -66,10 +66,7 @@ rs_gui_cmark {
+ 		gencmarklib.CONFIG += target_predeps combine
+ 		gencmarklib.variable_out = PRE_TARGETDEPS
+ 		gencmarklib.commands = \
+-		    cd $${RS_SRC_PATH} && ( \
+-		    git submodule update --init supportlibs/cmark ; \
+-		    cd $${CMARK_SRC_PATH} ; \
+-		    true ) && \
++		    cd $${RS_SRC_PATH} && \
+ 		    mkdir -p $${CMARK_BUILD_PATH} && cd $${CMARK_BUILD_PATH} && \
+ 		    cmake \
+ 		        -DCMAKE_CXX_COMPILER=$$QMAKE_CXX \
diff --git a/nixpkgs/pkgs/applications/networking/p2p/rqbit/default.nix b/nixpkgs/pkgs/applications/networking/p2p/rqbit/default.nix
new file mode 100644
index 000000000000..a60b3e9ddf79
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/rqbit/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub, pkg-config, openssl, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rqbit";
+  version = "2.2.1";
+
+  src = fetchFromGitHub {
+    owner = "ikatson";
+    repo = "rqbit";
+    rev = "v${version}";
+    hash = "sha256-7n+T+y60RjmZC7bE96Ljg0xVg4bSzV/LFgezTld4zfI=";
+  };
+
+  cargoHash = "sha256-hcuZ4hqGJT/O7vFefKPGZlkqhdsAl5LGAcSRQAEopnM=";
+
+  nativeBuildInputs = lib.optionals stdenv.isLinux [ pkg-config ];
+
+  buildInputs = lib.optionals stdenv.isLinux [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ Security ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A bittorrent client in Rust";
+    homepage = "https://github.com/ikatson/rqbit";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/p2p/soulseekqt/default.nix b/nixpkgs/pkgs/applications/networking/p2p/soulseekqt/default.nix
new file mode 100644
index 000000000000..9587bd0a9304
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/soulseekqt/default.nix
@@ -0,0 +1,57 @@
+{ stdenv, lib, fetchzip, mkDerivation
+, appimageTools
+, autoPatchelfHook
+, desktop-file-utils
+, imagemagick
+, qtmultimedia
+}:
+
+mkDerivation rec {
+  pname = "soulseekqt";
+  version = "2018-1-30";
+  name="${pname}-${version}";
+
+  src = fetchzip {
+      url = "https://www.slsknet.org/SoulseekQt/Linux/SoulseekQt-${version}-64bit-appimage.tgz";
+      sha256 = "16ncnvv8h33f161mgy7qc0wjvvqahsbwvby65qhgfh9pbbgb4xgg";
+  };
+
+  appextracted = appimageTools.extractType2 {
+    inherit name;
+    src="${src}/SoulseekQt-2018-1-30-64bit.AppImage";
+  };
+
+  dontBuild = true;
+  dontConfigure = true;
+
+  nativeBuildInputs = [ imagemagick autoPatchelfHook desktop-file-utils ];
+  buildInputs = [ qtmultimedia stdenv.cc.cc ];
+
+  installPhase = ''
+      binary="$(realpath ${appextracted}/AppRun)"
+      install -Dm755 $binary -t $out/bin
+
+      # fixup and install desktop file
+      desktop-file-install --dir $out/share/applications \
+        --set-key Exec --set-value $binary \
+        --set-key Comment --set-value "${meta.description}" \
+        --set-key Categories --set-value Network ${appextracted}/default.desktop
+      mv $out/share/applications/default.desktop $out/share/applications/SoulseekQt.desktop
+      #TODO: write generic code to read icon path from $binary.desktop
+      icon="$(realpath ${appextracted}/.DirIcon)"
+      for size in 16 32 48 64 72 96 128 192 256 512 1024; do
+        mkdir -p $out/share/icons/hicolor/"$size"x"$size"/apps
+        convert -resize "$size"x"$size" $icon $out/share/icons/hicolor/"$size"x"$size"/apps/$(basename $icon)
+      done
+    '';
+
+  meta = with lib; {
+    description = "Official Qt SoulSeek client";
+    homepage = "https://www.slsknet.org";
+    mainProgram = "SoulseekQt";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = [ ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/p2p/stig/default.nix b/nixpkgs/pkgs/applications/networking/p2p/stig/default.nix
new file mode 100644
index 000000000000..61d42989705f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/stig/default.nix
@@ -0,0 +1,68 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, python3Packages
+, testers
+, stig
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "stig";
+  # This project has a different concept for pre release / alpha,
+  # Read the project's README for details: https://github.com/rndusr/stig#stig
+  version = "0.12.5a0";
+
+  src = fetchFromGitHub {
+    owner = "rndusr";
+    repo = "stig";
+    rev = "v${version}";
+    sha256 = "sha256-e27DBzing38llFxPIsMGkZJXp2q7jjFlQdtfsqLXNHw=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    urwid
+    urwidtrees
+    aiohttp
+    async-timeout
+    pyxdg
+    blinker
+    natsort
+    setproctitle
+  ];
+
+  nativeCheckInputs = with python3Packages; [
+    asynctest
+    pytestCheckHook
+  ];
+
+  dontUseSetuptoolsCheck = true;
+
+  preCheck = ''
+    export LC_ALL=C
+  '';
+
+  pytestFlagsArray = [
+    "tests"
+    # TestScrollBarWithScrollable.test_wrapping_bug fails
+    "--deselect=tests/tui_test/scroll_test.py::TestScrollBarWithScrollable::test_wrapping_bug"
+    # https://github.com/rndusr/stig/issues/214
+    "--deselect=tests/completion_test/classes_test.py::TestCandidates::test_candidates_are_sorted_case_insensitively"
+  ] ++ lib.optionals stdenv.isDarwin [
+    "--deselect=tests/client_test/ttypes_test.py::TestTimestamp::test_string__month_day_hour_minute_second"
+    "--deselect=tests/client_test/aiotransmission_test/api_torrent_test.py"
+    "--deselect=tests/client_test/aiotransmission_test/rpc_test.py"
+  ];
+
+  passthru.tests = testers.testVersion {
+    package = stig;
+    command = "stig -v";
+    version = "stig version ${version}";
+  };
+
+  meta = with lib; {
+    description = "TUI and CLI for the BitTorrent client Transmission";
+    homepage = "https://github.com/rndusr/stig";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ doronbehar ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/p2p/storrent/default.nix b/nixpkgs/pkgs/applications/networking/p2p/storrent/default.nix
new file mode 100644
index 000000000000..a21a9fef3855
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/storrent/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "storrent";
+  version = "unstable-2023-01-14";
+
+  src = fetchFromGitHub {
+    owner = "jech";
+    repo = "storrent";
+    rev = "86270ee777a19a521f8898a179485e0347f90ce0";
+    hash = "sha256-JYNtuyk4hhe1jZgY/5Bz91Ropdw/U7n1VKHYkdUjZ0I=";
+  };
+
+  vendorHash = "sha256-iPKZPXsa6ya29N/u9QYd5LAm42+FtHZLGStRDxsAxe4=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/jech/storrent";
+    description = "An implementation of the BitTorrent protocol that is optimised for streaming media";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/p2p/synapse-bt/default.nix b/nixpkgs/pkgs/applications/networking/p2p/synapse-bt/default.nix
new file mode 100644
index 000000000000..9ab60d5a18f4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/synapse-bt/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, pkg-config, openssl, CoreServices, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "synapse-bt";
+  version = "unstable-2023-02-16";
+
+  src = fetchFromGitHub {
+    owner = "Luminarys";
+    repo = "synapse";
+    rev = "2165fe22589d7255e497d196c1d42b4c2ace1408";
+    hash = "sha256-2irXNgEK9BjRuNu3DUMElmf2vIpGzwoFneAEe97GRh4=";
+  };
+
+  cargoHash = "sha256-TwXouPYM7Hg1HEr2KnEPScYFkC52PcQ5kb5aGP1gj9U=";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ CoreServices Security ];
+
+  cargoBuildFlags = [ "--all" ];
+
+  meta = with lib; {
+    description = "Flexible and fast BitTorrent daemon";
+    homepage = "https://synapse-bt.org/";
+    license = licenses.isc;
+    maintainers = with maintainers; [ dywedir ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/p2p/torrential/default.nix b/nixpkgs/pkgs/applications/networking/p2p/torrential/default.nix
new file mode 100644
index 000000000000..cfc10c3f7466
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/torrential/default.nix
@@ -0,0 +1,84 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, nix-update-script
+, desktop-file-utils
+, meson
+, ninja
+, pkg-config
+, python3
+, vala
+, wrapGAppsHook4
+, curl
+, dht
+, glib
+, gtk4
+, libb64
+, libevent
+, libgee
+, libnatpmp
+, libtransmission
+, libutp
+, miniupnpc
+, openssl
+, pantheon
+}:
+
+stdenv.mkDerivation rec {
+  pname = "torrential";
+  version = "3.0.0";
+
+  src = fetchFromGitHub {
+    owner = "davidmhewitt";
+    repo = "torrential";
+    rev = version;
+    sha256 = "sha256-uHc/VNtbhetmGyuhynZH1TvxJscVX17eWO6dzX6Ft3A=";
+  };
+
+  nativeBuildInputs = [
+    desktop-file-utils
+    meson
+    ninja
+    pkg-config
+    python3
+    vala
+    wrapGAppsHook4
+  ];
+
+  buildInputs = [
+    curl
+    dht
+    glib
+    gtk4
+    libb64
+    libevent
+    libgee
+    libnatpmp
+    libtransmission
+    libutp
+    miniupnpc
+    openssl
+    pantheon.granite7
+  ];
+
+  postPatch = ''
+    chmod +x meson/post_install.py
+    patchShebangs meson/post_install.py
+
+    substituteInPlace meson/post_install.py \
+      --replace "gtk-update-icon-cache" "gtk4-update-icon-cache"
+  '';
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    description = "Download torrents in style with this speedy, minimalist torrent client for elementary OS";
+    homepage = "https://github.com/davidmhewitt/torrential";
+    maintainers = with maintainers; [ xiorcale ] ++ teams.pantheon.members;
+    platforms = platforms.linux;
+    license = licenses.gpl2Plus;
+    mainProgram = "com.github.davidmhewitt.torrential";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/p2p/transgui/default.nix b/nixpkgs/pkgs/applications/networking/p2p/transgui/default.nix
new file mode 100644
index 000000000000..a0e2388d16cc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/transgui/default.nix
@@ -0,0 +1,78 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, makeDesktopItem, fetchpatch, unzip
+, fpc, lazarus, libX11, glib, gtk2, gdk-pixbuf, pango, atk, cairo, openssl }:
+
+stdenv.mkDerivation rec {
+  pname = "transgui";
+  version = "unstable-2022-02-02";
+
+  src = fetchFromGitHub {
+    owner = "transmission-remote-gui";
+    repo = "transgui";
+    rev = "0e2c2a07c1b21b1704c0a4945a111a8aa1050a1a";
+    sha256 = "1x9wzii3q9zanpik4xc99jqsfrqch8vjmlx12jrvczxcfy51b1ba";
+  };
+
+  patches = [
+    # TDDO: remove when transgui updates for transmission-daemon v3 rpc protocol
+    (fetchpatch {
+      url = "https://github.com/transmission-remote-gui/transgui/commit/9275c3fb877dd753a1940d1b900630cdc09a0cc2.patch";
+      sha256 = "0w2x7gcxp5kqczdz7ckfqhdz9hhkm62k8gcws54d6km7x9vc1023";
+    })
+  ];
+
+  nativeBuildInputs = [ pkg-config unzip ];
+  buildInputs = [
+    fpc lazarus stdenv.cc libX11 glib gtk2 gdk-pixbuf
+    pango atk cairo openssl
+  ];
+
+  NIX_LDFLAGS = ''
+    -L${stdenv.cc.cc.lib}/lib -lX11 -lglib-2.0 -lgtk-x11-2.0
+    -lgdk-x11-2.0 -lgdk_pixbuf-2.0 -lpango-1.0 -latk-1.0 -lcairo
+    -lc -lcrypto
+  '';
+
+  postPatch = ''
+    substituteInPlace restranslator.pas --replace /usr/ $out/
+  '';
+
+  preBuild = ''
+    FPCDIR=${fpc}/lib/fpc/${fpc.version} fpcmake -w
+    lazbuild -B transgui.lpr --lazarusdir=${lazarus}/share/lazarus
+  '';
+
+  makeFlags = [ "FPC=fpc" "PP=fpc" "INSTALL_PREFIX=$(out)" ];
+
+  LCL_PLATFORM = "gtk2";
+
+  desktopItem = makeDesktopItem {
+    name = pname;
+    exec = "${pname} %U";
+    icon = pname;
+    type = "Application";
+    comment = meta.description;
+    desktopName = "Transmission Remote GUI";
+    genericName = "BitTorrent Client";
+    categories = [ "Network" "FileTransfer" "P2P" "GTK" ];
+    startupNotify = true;
+    mimeTypes = [ "application/x-bittorrent" "x-scheme-handler/magnet" ];
+  };
+
+  postInstall = ''
+    mkdir -p "$out/share/applications"
+    cp $desktopItem/share/applications/* $out/share/applications
+    mkdir -p "$out/share/icons/hicolor/48x48/apps"
+    cp transgui.png "$out/share/icons/hicolor/48x48/apps"
+    mkdir -p "$out/share/transgui"
+    cp -r "./lang" "$out/share/transgui"
+  '';
+
+  meta = {
+    description = "A cross platform front-end for the Transmission BitTorrent client";
+    homepage = "https://sourceforge.net/p/transgui";
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [ ramkromberg ];
+    mainProgram = "transgui";
+    platforms = [ "x86_64-linux" "x86_64-darwin" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/p2p/transmission-remote-gtk/default.nix b/nixpkgs/pkgs/applications/networking/p2p/transmission-remote-gtk/default.nix
new file mode 100644
index 000000000000..b85a440b0ed4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/transmission-remote-gtk/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, stdenv
+, appstream-glib
+, curl
+, desktop-file-utils
+, fetchFromGitHub
+, geoip
+, gettext
+, glib
+, gtk3
+, json-glib
+, libappindicator
+, libmrss
+, libproxy
+, libsoup_3
+, meson
+, ninja
+, pkg-config
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "transmission-remote-gtk";
+  version = "1.6.0";
+
+  src = fetchFromGitHub {
+    owner = "transmission-remote-gtk";
+    repo = "transmission-remote-gtk";
+    rev = "refs/tags/${version}";
+    hash = "sha256-/syZI/5LhuYLvXrNknnpbGHEH0z5iHeye2YRNJFWZJ0=";
+  };
+
+  nativeBuildInputs = [
+    appstream-glib
+    desktop-file-utils
+    meson
+    ninja
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    curl
+    geoip
+    gettext
+    glib
+    gtk3
+    json-glib
+    libappindicator
+    libmrss
+    libproxy
+    libsoup_3
+  ];
+
+  doCheck = false; # Requires network access
+
+  meta = with lib; {
+    description = "GTK remote control for the Transmission BitTorrent client";
+    homepage = "https://github.com/transmission-remote-gtk/transmission-remote-gtk";
+    changelog = "https://github.com/transmission-remote-gtk/transmission-remote-gtk/releases/tag/${version}";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ ehmry ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/p2p/transmission/4.nix b/nixpkgs/pkgs/applications/networking/p2p/transmission/4.nix
new file mode 100644
index 000000000000..05d757d53a2c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/transmission/4.nix
@@ -0,0 +1,164 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, cmake
+, pkg-config
+, python3
+, openssl
+, curl
+, libevent
+, inotify-tools
+, systemd
+, zlib
+, pcre
+, libb64
+, libutp
+, libdeflate
+, utf8cpp
+, fmt
+, libpsl
+, miniupnpc
+, dht
+, libnatpmp
+, libiconv
+, darwin
+  # Build options
+, enableGTK3 ? false
+, gtkmm3
+, xorg
+, wrapGAppsHook
+, enableQt ? false
+, qt5
+, nixosTests
+, enableSystemd ? lib.meta.availableOn stdenv.hostPlatform systemd
+, enableDaemon ? true
+, enableCli ? true
+, installLib ? false
+, apparmorRulesFromClosure
+}:
+
+stdenv.mkDerivation rec {
+  pname = "transmission";
+  version = "4.0.4";
+
+  src = fetchFromGitHub {
+    owner = "transmission";
+    repo = "transmission";
+    rev = version;
+    hash = "sha256-Sz3+5VvfOgET1aiormEnBOrF+yN79tiSQvjLAoGqTLw=";
+    fetchSubmodules = true;
+  };
+
+  outputs = [ "out" "apparmor" ];
+
+  cmakeFlags =
+    let
+      mkFlag = opt: if opt then "ON" else "OFF";
+    in
+    [
+      "-DENABLE_MAC=OFF" # requires xcodebuild
+      "-DENABLE_GTK=${mkFlag enableGTK3}"
+      "-DENABLE_QT=${mkFlag enableQt}"
+      "-DENABLE_DAEMON=${mkFlag enableDaemon}"
+      "-DENABLE_CLI=${mkFlag enableCli}"
+      "-DINSTALL_LIB=${mkFlag installLib}"
+    ] ++ lib.optionals stdenv.isDarwin [
+      # Transmission sets this to 10.13 if not explicitly specified, see https://github.com/transmission/transmission/blob/0be7091eb12f4eb55f6690f313ef70a66795ee72/CMakeLists.txt#L7-L16.
+      "-DCMAKE_OSX_DEPLOYMENT_TARGET=${stdenv.hostPlatform.darwinMinVersion}"
+    ];
+
+  postPatch = ''
+    # Clean third-party libraries to ensure system ones are used.
+    # Excluding gtest since it is hardcoded to vendored version. The rest of the listed libraries are not packaged.
+    pushd third-party
+    for f in *; do
+        if [[ ! $f =~ googletest|wildmat|fast_float|wide-integer|jsonsl ]]; then
+            rm -r "$f"
+        fi
+    done
+    popd
+    rm \
+      cmake/FindFmt.cmake \
+      cmake/FindUtfCpp.cmake
+    # Upstream uses different config file name.
+    substituteInPlace CMakeLists.txt --replace 'find_package(UtfCpp)' 'find_package(utf8cpp)'
+  '';
+
+  nativeBuildInputs = [
+    pkg-config
+    cmake
+    python3
+  ]
+  ++ lib.optionals enableGTK3 [ wrapGAppsHook ]
+  ++ lib.optionals enableQt [ qt5.wrapQtAppsHook ]
+  ;
+
+  buildInputs = [
+    curl
+    dht
+    fmt
+    libb64
+    libdeflate
+    libevent
+    libnatpmp
+    libpsl
+    libutp
+    miniupnpc
+    openssl
+    pcre
+    utf8cpp
+    zlib
+  ]
+  ++ lib.optionals enableQt [ qt5.qttools qt5.qtbase ]
+  ++ lib.optionals enableGTK3 [ gtkmm3 xorg.libpthreadstubs ]
+  ++ lib.optionals enableSystemd [ systemd ]
+  ++ lib.optionals stdenv.isLinux [ inotify-tools ]
+  ++ lib.optionals stdenv.isDarwin [ libiconv darwin.apple_sdk.frameworks.Foundation ];
+
+  postInstall = ''
+    mkdir $apparmor
+    cat >$apparmor/bin.transmission-daemon <<EOF
+    include <tunables/global>
+    $out/bin/transmission-daemon {
+      include <abstractions/base>
+      include <abstractions/nameservice>
+      include <abstractions/ssl_certs>
+      include "${apparmorRulesFromClosure { name = "transmission-daemon"; } ([
+        curl libevent openssl pcre zlib libdeflate libpsl libnatpmp miniupnpc
+      ] ++ lib.optionals enableSystemd [ systemd ]
+        ++ lib.optionals stdenv.isLinux [ inotify-tools ]
+      )}"
+      r @{PROC}/sys/kernel/random/uuid,
+      r @{PROC}/sys/vm/overcommit_memory,
+      r @{PROC}/@{pid}/environ,
+      r @{PROC}/@{pid}/mounts,
+      rwk /tmp/tr_session_id_*,
+
+      r $out/share/transmission/web/**,
+
+      include <local/bin.transmission-daemon>
+    }
+    EOF
+  '';
+
+  meta = {
+    description = "A fast, easy and free BitTorrent client";
+    longDescription = ''
+      Transmission is a BitTorrent client which features a simple interface
+      on top of a cross-platform back-end.
+      Feature spotlight:
+        * Uses fewer resources than other clients
+        * Native Mac, GTK and Qt GUI clients
+        * Daemon ideal for servers, embedded systems, and headless use
+        * All these can be remote controlled by Web and Terminal clients
+        * Bluetack (PeerGuardian) blocklists with automatic updates
+        * Full encryption, DHT, and PEX support
+    '';
+    homepage = "http://www.transmissionbt.com/";
+    license = with lib.licenses; [ gpl2Plus mit ];
+    maintainers = with lib.maintainers; [ astsmtl ];
+    platforms = lib.platforms.unix;
+    # Needs macOS >= 10.14.6
+    broken = stdenv.isDarwin && stdenv.isx86_64;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/p2p/transmission/default.nix b/nixpkgs/pkgs/applications/networking/p2p/transmission/default.nix
new file mode 100644
index 000000000000..cc82c5038083
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/transmission/default.nix
@@ -0,0 +1,149 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, fetchurl
+, cmake
+, pkg-config
+, openssl
+, curl
+, libevent
+, inotify-tools
+, systemd
+, zlib
+, pcre
+, libb64
+, libutp
+, miniupnpc
+, dht
+, libnatpmp
+, libiconv
+  # Build options
+, enableGTK3 ? false
+, gtk3
+, xorg
+, wrapGAppsHook
+, enableQt ? false
+, qt5
+, nixosTests
+, enableSystemd ? lib.meta.availableOn stdenv.hostPlatform systemd
+, enableDaemon ? true
+, enableCli ? true
+, installLib ? false
+, apparmorRulesFromClosure
+}:
+
+let
+  version = "3.00";
+
+in stdenv.mkDerivation {
+  pname = "transmission";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "transmission";
+    repo = "transmission";
+    rev = version;
+    sha256 = "0ccg0km54f700x9p0jsnncnwvfnxfnxf7kcm7pcx1cj0vw78924z";
+    fetchSubmodules = true;
+  };
+
+  patches = [
+    # fix build with openssl 3.0
+    (fetchurl {
+      url = "https://gitweb.gentoo.org/repo/gentoo.git/plain/net-p2p/transmission/files/transmission-3.00-openssl-3.patch";
+      hash = "sha256-peVrkGck8AfbC9uYNfv1CIu1alIewpca7A6kRXjVlVs=";
+    })
+  ];
+
+  outputs = [ "out" "apparmor" ];
+
+  cmakeFlags =
+    let
+      mkFlag = opt: if opt then "ON" else "OFF";
+    in
+    [
+      "-DENABLE_MAC=OFF" # requires xcodebuild
+      "-DENABLE_GTK=${mkFlag enableGTK3}"
+      "-DENABLE_QT=${mkFlag enableQt}"
+      "-DENABLE_DAEMON=${mkFlag enableDaemon}"
+      "-DENABLE_CLI=${mkFlag enableCli}"
+      "-DINSTALL_LIB=${mkFlag installLib}"
+    ];
+
+  nativeBuildInputs = [
+    pkg-config
+    cmake
+  ]
+  ++ lib.optionals enableGTK3 [ wrapGAppsHook ]
+  ++ lib.optionals enableQt [ qt5.wrapQtAppsHook ]
+  ;
+
+  buildInputs = [
+    openssl
+    curl
+    libevent
+    zlib
+    pcre
+    libb64
+    libutp
+    miniupnpc
+    dht
+    libnatpmp
+  ]
+  ++ lib.optionals enableQt [ qt5.qttools qt5.qtbase ]
+  ++ lib.optionals enableGTK3 [ gtk3 xorg.libpthreadstubs ]
+  ++ lib.optionals enableSystemd [ systemd ]
+  ++ lib.optionals stdenv.isLinux [ inotify-tools ]
+  ++ lib.optionals stdenv.isDarwin [ libiconv ];
+
+  postInstall = ''
+    mkdir $apparmor
+    cat >$apparmor/bin.transmission-daemon <<EOF
+    include <tunables/global>
+    $out/bin/transmission-daemon {
+      include <abstractions/base>
+      include <abstractions/nameservice>
+      include <abstractions/ssl_certs>
+      include "${apparmorRulesFromClosure { name = "transmission-daemon"; } ([
+        curl libevent openssl pcre zlib libnatpmp miniupnpc
+      ] ++ lib.optionals enableSystemd [ systemd ]
+        ++ lib.optionals stdenv.isLinux [ inotify-tools ]
+      )}"
+      r @{PROC}/sys/kernel/random/uuid,
+      r @{PROC}/sys/vm/overcommit_memory,
+      r @{PROC}/@{pid}/environ,
+      r @{PROC}/@{pid}/mounts,
+      rwk /tmp/tr_session_id_*,
+
+      r $out/share/transmission/web/**,
+
+      include <local/bin.transmission-daemon>
+    }
+    EOF
+  '';
+
+  passthru.tests = {
+    apparmor = nixosTests.transmission; # starts the service with apparmor enabled
+    smoke-test = nixosTests.bittorrent;
+  };
+
+  meta = {
+    description = "A fast, easy and free BitTorrent client";
+    longDescription = ''
+      Transmission is a BitTorrent client which features a simple interface
+      on top of a cross-platform back-end.
+      Feature spotlight:
+        * Uses fewer resources than other clients
+        * Native Mac, GTK and Qt GUI clients
+        * Daemon ideal for servers, embedded systems, and headless use
+        * All these can be remote controlled by Web and Terminal clients
+        * Bluetack (PeerGuardian) blocklists with automatic updates
+        * Full encryption, DHT, and PEX support
+    '';
+    homepage = "http://www.transmissionbt.com/";
+    license = lib.licenses.gpl2Plus; # parts are under MIT
+    maintainers = with lib.maintainers; [ astsmtl ];
+    platforms = lib.platforms.unix;
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/networking/p2p/tremc/default.nix b/nixpkgs/pkgs/applications/networking/p2p/tremc/default.nix
new file mode 100644
index 000000000000..48e6a76c29a5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/tremc/default.nix
@@ -0,0 +1,61 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, python3Packages
+, x11Support ? !stdenv.isDarwin
+, xclip ? null
+, pbcopy ? null
+, useGeoIP ? false # Require /var/lib/geoip-databases/GeoIP.dat
+}:
+let
+  wrapperPath = with lib; makeBinPath (
+    optional x11Support xclip ++
+    optional stdenv.isDarwin pbcopy
+  );
+in
+python3Packages.buildPythonApplication rec {
+  pname = "tremc";
+  version = "0.9.3";
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "tremc";
+    repo = pname;
+    rev = version;
+    hash = "sha256-219rntmetmj1JFG+4NyYMFTWmrHKJL7fnLoMIvnTP4Y=";
+  };
+
+  patches = [
+    # Remove when tremc > 0.9.3 is released
+    (fetchpatch {
+      url = "https://github.com/tremc/tremc/commit/a8aaf9a6728a9ef3d8f13b3603456b0086122891.patch";
+      hash = "sha256-+HYdWTbcpvZqjshdHLZ+Svmr6U/aKFc3sy0aka6rn/A=";
+      name = "support-transmission-4.patch";
+    })
+  ];
+
+  buildInputs = with python3Packages; [
+    python
+    wrapPython
+  ];
+
+  pythonPath = with python3Packages; [
+    ipy
+    pyperclip
+  ] ++
+  lib.optional useGeoIP geoip;
+
+  dontBuild = true;
+  doCheck = false;
+
+  makeWrapperArgs = ["--prefix PATH : ${lib.escapeShellArg wrapperPath}"];
+
+  installPhase = ''
+    make DESTDIR=$out install
+    wrapPythonPrograms
+  '';
+
+  meta = with lib; {
+    description = "Curses interface for transmission";
+    homepage = "https://github.com/tremc/tremc";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ kashw2 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/p2p/tremotesf/default.nix b/nixpkgs/pkgs/applications/networking/p2p/tremotesf/default.nix
new file mode 100644
index 000000000000..6880d8472167
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/tremotesf/default.nix
@@ -0,0 +1,52 @@
+{stdenv
+,lib
+, cmake
+, pkg-config
+, fetchFromGitHub
+, qtbase
+, qttools
+, kwidgetsaddons
+, kwindowsystem
+, fmt
+, libpsl
+, cxxopts
+, wrapQtAppsHook
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "tremotesf";
+  version = "2.4.0";
+
+  src = fetchFromGitHub {
+    owner = "equeim";
+    repo = "tremotesf2";
+    rev = finalAttrs.version;
+    hash = "sha256-TKtBgMpCWIUl1bohAKCbTcZX2uaPmzeWut/OeNs/rME=";
+    # We need this for src/libtremotesf
+    fetchSubmodules = true;
+  };
+
+  buildInputs = [
+    qtbase
+    qttools
+    fmt
+    libpsl
+    kwidgetsaddons
+    kwindowsystem
+    cxxopts
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+  ];
+
+  propagatedBuildInputs = [ wrapQtAppsHook ];
+
+  meta = with lib; {
+    description = "Remote GUI for transmission-daemon";
+    license = licenses.gpl3Plus;
+    homepage = "https://github.com/equeim/tremotesf2";
+    maintainers = with maintainers; [ sochotnicky ];
+  };
+})
diff --git a/nixpkgs/pkgs/applications/networking/p2p/tribler/default.nix b/nixpkgs/pkgs/applications/networking/p2p/tribler/default.nix
new file mode 100644
index 000000000000..5bc1cb726443
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/tribler/default.nix
@@ -0,0 +1,101 @@
+{ lib
+, stdenv
+, fetchurl
+, python3
+, makeWrapper
+, libtorrent-rasterbar-1_2_x
+, qt5
+}:
+
+let
+  libtorrent = (python3.pkgs.toPythonModule (libtorrent-rasterbar-1_2_x)).python;
+in
+stdenv.mkDerivation rec {
+  pname = "tribler";
+  version = "7.11.0";
+
+  src = fetchurl {
+    url = "https://github.com/Tribler/tribler/releases/download/v${version}/Tribler-v${version}.tar.xz";
+    sha256 = "0ffh8chb47iaar8872gvalgm84fjzyxph16nixsxknnprqdxyrkx";
+  };
+
+  nativeBuildInputs = [
+    python3.pkgs.wrapPython
+    makeWrapper
+  ];
+
+  buildInputs = [
+    python3.pkgs.python
+  ];
+
+  pythonPath = [
+    libtorrent
+  ] ++ (with python3.pkgs; [
+    aiohttp
+    aiohttp-apispec
+    asynctest
+    chardet
+    cherrypy
+    configobj
+    cryptography
+    decorator
+    faker
+    feedparser
+    libnacl
+    lz4
+    m2crypto
+    netifaces
+    networkx
+    pillow
+    pony
+    psutil
+    pyasn1
+    pycrypto
+    pyqt5
+    pyqtgraph
+    pytest-asyncio
+    pytest-timeout
+    pyyaml
+    requests
+    sentry-sdk
+    service-identity
+    twisted
+    yappi
+    pydantic
+    anyio
+  ]);
+
+  installPhase = ''
+    mkdir -pv $out
+    # Nasty hack; call wrapPythonPrograms to set program_PYTHONPATH.
+    wrapPythonPrograms
+    cp -prvd ./* $out/
+    makeWrapper ${python3.pkgs.python}/bin/python $out/bin/tribler \
+        --set QT_QPA_PLATFORM_PLUGIN_PATH ${qt5.qtbase.bin}/lib/qt-*/plugins/platforms \
+        --set QT_PLUGIN_PATH "${qt5.qtsvg.bin}/${qt5.qtbase.qtPluginPrefix}" \
+        --set _TRIBLERPATH "$out/src" \
+        --set PYTHONPATH $out/src/tribler-core:$out/src/tribler-common:$out/src/tribler-gui:$program_PYTHONPATH \
+        --set NO_AT_BRIDGE 1 \
+        --chdir "$out/src" \
+        --add-flags "-O $out/src/run_tribler.py"
+
+    mkdir -p $out/share/applications $out/share/icons
+    cp $out/build/debian/tribler/usr/share/applications/org.tribler.Tribler.desktop $out/share/applications/
+    cp $out/build/debian/tribler/usr/share/pixmaps/tribler_big.xpm $out/share/icons/tribler.xpm
+  '';
+
+  shellHook = ''
+    wrapPythonPrograms || true
+    export QT_QPA_PLATFORM_PLUGIN_PATH=$(echo ${qt5.qtbase.bin}/lib/qt-*/plugins/platforms)
+    export PYTHONPATH=./tribler-core:./tribler-common:./tribler-gui:$program_PYTHONPATH
+    export QT_PLUGIN_PATH="${qt5.qtsvg.bin}/${qt5.qtbase.qtPluginPrefix}"
+  '';
+
+  meta = with lib; {
+    description = "Decentralised P2P filesharing client based on the Bittorrent protocol";
+    homepage = "https://www.tribler.org/";
+    license = licenses.lgpl21Plus;
+    maintainers = with maintainers; [ xvapx viric ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/p2p/vuze/default.nix b/nixpkgs/pkgs/applications/networking/p2p/vuze/default.nix
new file mode 100644
index 000000000000..6dc00cba9ee0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/vuze/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchsvn, jdk, jre, ant, swt, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "vuze";
+  version = "5750";
+
+  src = fetchsvn {
+    url = "http://svn.vuze.com/public/client/tags/RELEASE_${version}";
+    sha256 = "07w6ipyiy8hi88d6yxbbf3vkv26mj7dcz9yr8141hb2ig03v0h0p";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ jdk ant ];
+
+  buildPhase = "ant";
+
+  installPhase = ''
+    install -D dist/Vuze_0000-00.jar $out/share/java/Vuze_${version}-00.jar
+    makeWrapper ${jre}/bin/java $out/bin/vuze \
+      --add-flags "-Xmx256m -Djava.library.path=${swt}/lib -cp $out/share/java/Vuze_${version}-00.jar:${swt}/jars/swt.jar org.gudy.azureus2.ui.swt.Main"
+  '';
+
+  meta = with lib; {
+    description = "Torrent client";
+    homepage = "http://www.vuze.com";
+    license = licenses.unfree;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/p2p/xd/default.nix b/nixpkgs/pkgs/applications/networking/p2p/xd/default.nix
new file mode 100644
index 000000000000..8283a2ec4bee
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/xd/default.nix
@@ -0,0 +1,29 @@
+{ pkgs, buildGoModule, fetchFromGitHub, lib, perl }:
+
+buildGoModule rec {
+  pname = "XD";
+  version = "0.4.4";
+
+  src = fetchFromGitHub {
+    owner = "majestrate";
+    repo = "XD";
+    rev = "v${version}";
+    sha256 = "sha256-YUstYGIED6ivt+p+aHIK76dLCj+xjytWnZrra49cCi8=";
+  };
+
+  vendorHash = "sha256-wO+IICtGVHhrPa1JUwlx+PuNS32FJNKYmboLd3lFl4w=";
+
+  nativeCheckInputs = [ perl ];
+
+  postInstall = ''
+    ln -s $out/bin/XD $out/bin/XD-CLI
+  '';
+
+  meta = with lib; {
+    description = "i2p bittorrent client";
+    homepage = "https://xd-torrent.github.io";
+    maintainers = with maintainers; [ nixbitcoin ];
+    license = licenses.mit;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/p2p/zeronet-conservancy/default.nix b/nixpkgs/pkgs/applications/networking/p2p/zeronet-conservancy/default.nix
new file mode 100644
index 000000000000..c8ac75683ae2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/zeronet-conservancy/default.nix
@@ -0,0 +1,60 @@
+{ lib
+, fetchFromGitHub
+, python3Packages
+, nixosTests
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "zeronet-conservancy";
+  version = "0.7.10";
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "zeronet-conservancy";
+    repo = "zeronet-conservancy";
+    rev = "v${version}";
+    sha256 = "sha256-ZQYdK0B0z0cXTx7ujFngW3wSa/j8sEuwHB+BC5Xqq8o=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    gevent msgpack base58 merkletools rsa pysocks pyasn1 websocket-client
+    gevent-websocket rencode bitcoinlib maxminddb pyopenssl rich defusedxml
+    pyaes coincurve
+  ];
+
+  buildPhase = ''
+    runHook preBuild
+    ${python3Packages.python.pythonForBuild.interpreter} -O -m compileall .
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/share
+    cp -r plugins src *.py $out/share/
+    runHook postInstall
+  '';
+
+  postFixup = ''
+    makeWrapper "$out/share/zeronet.py" "$out/bin/zeronet" \
+      --set PYTHONPATH "$PYTHONPATH" \
+      --set PATH ${python3Packages.python}/bin
+  '';
+
+  passthru.tests = {
+    nixos-test = nixosTests.zeronet-conservancy;
+  };
+
+  meta = with lib; {
+    description = "A fork/continuation of the ZeroNet project";
+    longDescription = ''
+      zeronet-conservancy is a fork/continuation of ZeroNet project (that has
+      been abandoned by its creator) that is dedicated to sustaining existing
+      p2p network and developing its values of decentralization and freedom,
+      while gradually switching to a better designed network.
+    '';
+    homepage = "https://github.com/zeronet-conservancy/zeronet-conservancy";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ fgaz ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/p2p/zeronet/default.nix b/nixpkgs/pkgs/applications/networking/p2p/zeronet/default.nix
new file mode 100644
index 000000000000..07ea1707526d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/p2p/zeronet/default.nix
@@ -0,0 +1,45 @@
+{ lib, fetchFromGitHub, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "zeronet";
+  version = "0.7.1";
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "HelloZeroNet";
+    repo = "ZeroNet";
+    rev = "v${version}";
+    sha256 = "04prgicm0yjh2klcxdgwx1mvlsxxi2bdkzfcvysvixbgq20wjvdk";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    gevent msgpack base58 merkletools rsa pysocks pyasn1 websocket-client
+    gevent-websocket rencode bitcoinlib maxminddb pyopenssl
+  ];
+
+  buildPhase = ''
+    ${python3Packages.python.pythonForBuild.interpreter} -O -m compileall .
+  '';
+
+  installPhase = ''
+    mkdir -p $out/share
+    cp -r plugins src tools *.py $out/share/
+  '';
+
+  postFixup = ''
+    makeWrapper "$out/share/zeronet.py" "$out/bin/zeronet" \
+      --set PYTHONPATH "$PYTHONPATH" \
+      --set PATH ${python3Packages.python}/bin
+  '';
+
+  meta = with lib; {
+    description = "Decentralized websites using Bitcoin crypto and BitTorrent network";
+    homepage = "https://zeronet.io/";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ fgaz ];
+    knownVulnerabilities = [ ''
+      Unmaintained. Probable XSS/code injection vulnerability.
+      Switching to the maintained zeronet-conservancy package is recommended
+    '' ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/pcloud/default.nix b/nixpkgs/pkgs/applications/networking/pcloud/default.nix
new file mode 100644
index 000000000000..ff0d808e8f12
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/pcloud/default.nix
@@ -0,0 +1,125 @@
+# Even though pCloud Drive is redistributed as a plug-n-play AppImage, it
+# requires a little bit more love because of the way Nix launches those types
+# of applications.
+#
+# What Nix does, simplifying a bit, is that it extracts an AppImage and starts
+# it via buildFHSEnv - this is totally fine for majority of apps, but makes
+# it by-design *impossible* to launch SUID wrappers [^1]; in case of pCloud,
+# it's fusermount.
+# (so pCloud starts, but silently fails to mount the FUSE drive.)
+#
+# To overcome this issue, we're manually extracting the AppImage and then treat
+# it as if it was a regular, good-ol' application requiring some standard path
+# fixes.
+#
+# ^1 https://github.com/NixOS/nixpkgs/issues/69338
+
+{
+  # Build dependencies
+  appimageTools
+, autoPatchelfHook
+, fetchzip
+, lib
+, stdenv
+
+  # Runtime dependencies;
+  # A few additional ones (e.g. Node) are already shipped together with the
+  # AppImage, so we don't have to duplicate them here.
+, alsa-lib
+, dbus-glib
+, fuse
+, gsettings-desktop-schemas
+, gtk3
+, libdbusmenu-gtk2
+, libXdamage
+, nss
+, udev
+}:
+
+let
+  pname = "pcloud";
+  version = "1.14.0";
+  code = "XZpL8AVZAqfCXz5TebJ2gcvAiHi15pYFKPey";
+
+  # Archive link's codes: https://www.pcloud.com/release-notes/linux.html
+  src = fetchzip {
+    url = "https://api.pcloud.com/getpubzip?code=${code}&filename=${pname}-${version}.zip";
+    hash = "sha256-uirj/ASOrJyE728q+SB7zq0O9O58XDNzhokvNyca+2c=";
+  };
+
+  appimageContents = appimageTools.extractType2 {
+    name = "${pname}-${version}";
+    src = "${src}/pcloud";
+  };
+
+in
+stdenv.mkDerivation {
+  inherit pname version;
+
+  src = appimageContents;
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+  ];
+
+  buildInputs = [
+    alsa-lib
+    dbus-glib
+    fuse
+    gtk3
+    libdbusmenu-gtk2
+    libXdamage
+    nss
+    udev
+  ];
+
+  installPhase = ''
+    mkdir "$out"
+    cp -ar . "$out/app"
+    cd "$out"
+
+    # Remove the AppImage runner, since users are not supposed to use it; the
+    # actual entry point is the `pcloud` binary
+    rm app/AppRun
+
+    # Adjust directory structure, so that the `.desktop` etc. files are
+    # properly detected
+    mkdir bin
+    mv app/usr/share .
+    mv app/usr/lib .
+
+    # Adjust the `.desktop` file
+    mkdir share/applications
+
+    substitute \
+      app/pcloud.desktop \
+      share/applications/pcloud.desktop \
+      --replace 'Name=pcloud' 'Name=pCloud' \
+      --replace 'Exec=AppRun' 'Exec=${pname}'
+
+    # Build the main executable
+    cat > bin/pcloud <<EOF
+    #! $SHELL -e
+
+    # This is required for the file picker dialog - otherwise pcloud just
+    # crashes
+    export XDG_DATA_DIRS="${gsettings-desktop-schemas}/share/gsettings-schemas/${gsettings-desktop-schemas.name}:${gtk3}/share/gsettings-schemas/${gtk3.name}:$XDG_DATA_DIRS"
+
+    exec "$out/app/pcloud"
+    EOF
+
+    chmod +x bin/pcloud
+  '';
+
+  meta = with lib; {
+    description = "Secure and simple to use cloud storage for your files; pCloud Drive, Electron Edition";
+    homepage = "https://www.pcloud.com/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = with maintainers; [ patryk27 ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/peroxide/default.nix b/nixpkgs/pkgs/applications/networking/peroxide/default.nix
new file mode 100644
index 000000000000..6e8537275f05
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/peroxide/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, nixosTests
+}:
+
+buildGoModule rec {
+  pname = "peroxide";
+  version = "0.5.0";
+
+  src = fetchFromGitHub {
+    owner = "ljanyst";
+    repo = "peroxide";
+    rev = "v${version}";
+    sha256 = "sha256-6Jb1i4aNjeemiQp9FF/KGyZ+Evom9PPBvARbJWyrhok=";
+  };
+
+  vendorHash = "sha256-kuFlkkMkCKO5Rrh1EoyVdaykvxTfchK2l1/THqTBeAY=";
+
+  postPatch = ''
+    # These tests connect to the internet, which does not work in sandboxed
+    # builds, so skip these.
+    rm pkg/pmapi/dialer_pinning_test.go \
+       pkg/pmapi/dialer_proxy_provider_test.go \
+       pkg/pmapi/dialer_proxy_test.go
+  '';
+
+  passthru.tests.peroxide = nixosTests.peroxide;
+
+  meta = with lib; {
+    homepage = "https://github.com/ljanyst/peroxide";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ aidalgol ];
+    description = "Unofficial ProtonMail bridge";
+    longDescription = ''
+      Peroxide is a fork of the official ProtonMail bridge that aims to be
+      similar to Hydroxide while reusing as much code from the official bridge
+      as possible.
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/pjsip/default.nix b/nixpkgs/pkgs/applications/networking/pjsip/default.nix
new file mode 100644
index 000000000000..4ed0bad26c6f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/pjsip/default.nix
@@ -0,0 +1,124 @@
+{ lib
+, testers
+, stdenv
+, fetchFromGitHub
+, openssl
+, libsamplerate
+, swig
+, alsa-lib
+, AppKit
+, CoreFoundation
+, Security
+, python3
+, pythonSupport ? true
+, runCommand
+}:
+stdenv.mkDerivation (finalAttrs: {
+  pname = "pjsip";
+  version = "2.13.1";
+
+  src = fetchFromGitHub {
+    owner = finalAttrs.pname;
+    repo = "pjproject";
+    rev = "refs/tags/${finalAttrs.version}";
+    hash = "sha256-R1iKIkWyNCRV2PjQgTqKmJYUgHAZrREanD60Jz6MY1Y=";
+  };
+
+  patches = [
+    ./fix-aarch64.patch
+  ];
+
+  nativeBuildInputs =
+    lib.optionals pythonSupport [ swig python3 ];
+
+  buildInputs = [ openssl libsamplerate ]
+    ++ lib.optional stdenv.isLinux alsa-lib
+    ++ lib.optionals stdenv.isDarwin [ AppKit CoreFoundation Security ];
+
+  preConfigure = ''
+    export LD=$CC
+  '';
+
+  NIX_CFLAGS_LINK = lib.optionalString stdenv.isDarwin "-headerpad_max_install_names";
+
+  postBuild = lib.optionalString pythonSupport ''
+    make -C pjsip-apps/src/swig/python
+  '';
+
+  configureFlags = [ "--enable-shared" ];
+
+  outputs = [ "out" ]
+    ++ lib.optional pythonSupport "py";
+
+  postInstall = ''
+    mkdir -p $out/bin
+    cp pjsip-apps/bin/pjsua-* $out/bin/pjsua
+    mkdir -p $out/share/${finalAttrs.pname}-${finalAttrs.version}/samples
+    cp pjsip-apps/bin/samples/*/* $out/share/${finalAttrs.pname}-${finalAttrs.version}/samples
+  '' + lib.optionalString pythonSupport ''
+    (cd pjsip-apps/src/swig/python && \
+      python setup.py install --prefix=$py
+    )
+  '' + lib.optionalString stdenv.isDarwin ''
+    # On MacOS relative paths are used to refer to libraries. All libraries use
+    # a relative path like ../lib/*.dylib or ../../lib/*.dylib. We need to
+    # rewrite these to use absolute ones.
+
+    # First, find all libraries (and their symlinks) in our outputs to define
+    # the install_name_tool -change arguments we should pass.
+    readarray -t libraries < <(
+      for outputName in $(getAllOutputNames); do
+        find "''${!outputName}" \( -name '*.dylib*' -o -name '*.so*' \)
+      done
+    )
+
+    # Determine the install_name_tool -change arguments that are going to be
+    # applied to all libraries.
+    change_args=()
+    for lib in "''${libraries[@]}"; do
+      lib_name="$(basename $lib)"
+      change_args+=(-change ../lib/$lib_name $lib)
+      change_args+=(-change ../../lib/$lib_name $lib)
+    done
+
+    # Rewrite id and library refences for all non-symlinked libraries.
+    for lib in "''${libraries[@]}"; do
+      if [ -f "$lib" ]; then
+        install_name_tool -id $lib "''${change_args[@]}" $lib
+      fi
+    done
+
+    # Rewrite library references for all executables.
+    find "$out" -executable -type f | while read executable; do
+      install_name_tool "''${change_args[@]}" "$executable"
+    done
+  '';
+
+  # We need the libgcc_s.so.1 loadable (for pthread_cancel to work)
+  dontPatchELF = true;
+
+  passthru.tests.version = testers.testVersion {
+    package = finalAttrs.finalPackage;
+    command = "pjsua --version";
+  };
+
+  passthru.tests.pkg-config = testers.hasPkgConfigModules {
+    package = finalAttrs.finalPackage;
+  };
+
+  passthru.tests.python-pjsua2 = runCommand "python-pjsua2" { } ''
+    ${(python3.withPackages (pkgs: [ pkgs.pjsua2 ])).interpreter} -c "import pjsua2" > $out
+  '';
+
+  meta = with lib; {
+    description = "A multimedia communication library written in C, implementing standard based protocols such as SIP, SDP, RTP, STUN, TURN, and ICE";
+    homepage = "https://pjsip.org/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ olynch ];
+    mainProgram = "pjsua";
+    platforms = platforms.linux ++ platforms.darwin;
+    pkgConfigModules = [
+      "libpjproject"
+    ];
+  };
+})
diff --git a/nixpkgs/pkgs/applications/networking/pjsip/fix-aarch64.patch b/nixpkgs/pkgs/applications/networking/pjsip/fix-aarch64.patch
new file mode 100644
index 000000000000..1680bde707ca
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/pjsip/fix-aarch64.patch
@@ -0,0 +1,13 @@
+--- a/aconfigure
++++ b/aconfigure
+@@ -9174,6 +9174,10 @@
+				 ac_webrtc_instset=neon
+				 ac_webrtc_cflags="-DWEBRTC_ARCH_ARM64"
+			    	 ;;
++                             arm64*|aarch64*)
++                                 ac_webrtc_instset=neon
++                                 ac_webrtc_cflags="-DWEBRTC_ARCH_ARM64"
++                                 ;;
+                              *)
+                                  ac_webrtc_instset=sse2
+                                  ;;
diff --git a/nixpkgs/pkgs/applications/networking/powerdns-admin/default.nix b/nixpkgs/pkgs/applications/networking/powerdns-admin/default.nix
new file mode 100644
index 000000000000..1e89c1b2cb46
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/powerdns-admin/default.nix
@@ -0,0 +1,133 @@
+{ lib, stdenv, fetchFromGitHub, fetchYarnDeps, mkYarnPackage, nixosTests, writeText, python3 }:
+
+let
+  version = "0.4.1";
+  src = fetchFromGitHub {
+    owner = "PowerDNS-Admin";
+    repo = "PowerDNS-Admin";
+    rev = "v${version}";
+    hash = "sha256-AwqEcAPD1SF1Ma3wtH03mXlTywM0Q19hciCmTtlr3gk=";
+  };
+
+  python = python3;
+
+  pythonDeps = with python.pkgs; [
+    flask flask-assets flask-login flask-sqlalchemy flask-migrate flask-seasurf flask-mail flask-session flask-session-captcha flask-sslify
+    mysqlclient psycopg2 sqlalchemy
+    certifi cffi configobj cryptography bcrypt requests python-ldap pyotp qrcode dnspython
+    gunicorn itsdangerous python3-saml pytz rcssmin rjsmin authlib bravado-core
+    lima lxml passlib pyasn1 pytimeparse pyyaml jinja2 itsdangerous webcolors werkzeug zipp zxcvbn
+  ];
+
+  assets = mkYarnPackage {
+    inherit src version;
+    packageJSON = ./package.json;
+
+    offlineCache = fetchYarnDeps {
+      yarnLock = "${src}/yarn.lock";
+      hash = "sha256-3ebT19LrbYuypdJaoB3tClVVP0Fi8tHx3Xi6ge/DpA4=";
+    };
+
+    # Copied from package.json, see also
+    # https://github.com/NixOS/nixpkgs/pull/214952
+    packageResolutions = {
+      "@fortawesome/fontawesome-free" = "6.3.0";
+    };
+
+    nativeBuildInputs = pythonDeps;
+    patchPhase = ''
+      sed -i -r -e "s|'rcssmin',\s?'cssrewrite'|'rcssmin'|g" powerdnsadmin/assets.py
+    '';
+    buildPhase = ''
+      # The build process expects the directory to be writable
+      # with node_modules at a specific path
+      # https://github.com/PowerDNS-Admin/PowerDNS-Admin/blob/master/.yarnrc
+
+      approot=deps/powerdns-admin-assets
+
+      ln -s $node_modules $approot/powerdnsadmin/static/node_modules
+      SESSION_TYPE=filesystem FLASK_APP=$approot/powerdnsadmin/__init__.py flask assets build
+    '';
+    installPhase = ''
+      # https://github.com/PowerDNS-Admin/PowerDNS-Admin/blob/54b257768f600c5548a1c7e50eac49c40df49f92/docker/Dockerfile#L43
+      mkdir $out
+      cp -r $approot/powerdnsadmin/static/{generated,assets,img} $out
+      find $node_modules -name webfonts -exec cp -r {} $out \;
+      find $node_modules -name fonts -exec cp -r {} $out \;
+      find $node_modules/icheck/skins/square -name '*.png' -exec cp {} $out/generated \;
+    '';
+    distPhase = "true";
+  };
+
+  assetsPy = writeText "assets.py" ''
+    from flask_assets import Environment
+    assets = Environment()
+    assets.register('js_login', 'generated/login.js')
+    assets.register('js_validation', 'generated/validation.js')
+    assets.register('css_login', 'generated/login.css')
+    assets.register('js_main', 'generated/main.js')
+    assets.register('css_main', 'generated/main.css')
+  '';
+in stdenv.mkDerivation {
+  pname = "powerdns-admin";
+
+  inherit src version;
+
+  nativeBuildInputs = [ python.pkgs.wrapPython ];
+
+  pythonPath = pythonDeps;
+
+  gunicornScript = ''
+    #!/bin/sh
+    if [ ! -z $CONFIG ]; then
+      exec python -m gunicorn.app.wsgiapp "powerdnsadmin:create_app(config='$CONFIG')" "$@"
+    fi
+
+    exec python -m gunicorn.app.wsgiapp "powerdnsadmin:create_app()" "$@"
+  '';
+
+  postPatch = ''
+    rm -r powerdnsadmin/static powerdnsadmin/assets.py
+    # flask-migrate 4.0 compatibility: https://github.com/PowerDNS-Admin/PowerDNS-Admin/issues/1376
+    substituteInPlace migrations/env.py --replace "render_as_batch=config.get_main_option('sqlalchemy.url').startswith('sqlite:')," ""
+    # flask-session and powerdns-admin both try to add sqlalchemy to flask.
+    # Reuse the database for flask-session
+    substituteInPlace powerdnsadmin/__init__.py --replace "sess = Session(app)" "app.config['SESSION_SQLALCHEMY'] = models.base.db; sess = Session(app)"
+    # Routes creates session database tables, so it needs a context
+    substituteInPlace powerdnsadmin/__init__.py --replace "routes.init_app(app)" "with app.app_context(): routes.init_app(app)"
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    # Nasty hack: call wrapPythonPrograms to set program_PYTHONPATH (see tribler)
+    wrapPythonPrograms
+
+    mkdir -p $out/share $out/bin
+    cp -r migrations powerdnsadmin $out/share/
+
+    ln -s ${assets} $out/share/powerdnsadmin/static
+    ln -s ${assetsPy} $out/share/powerdnsadmin/assets.py
+
+    echo "$gunicornScript" > $out/bin/powerdns-admin
+    chmod +x $out/bin/powerdns-admin
+    wrapProgram $out/bin/powerdns-admin \
+      --set PATH ${python.pkgs.python}/bin \
+      --set PYTHONPATH $out/share:$program_PYTHONPATH
+
+    runHook postInstall
+  '';
+
+  passthru = {
+    # PYTHONPATH of all dependencies used by the package
+    pythonPath = python3.pkgs.makePythonPath pythonDeps;
+    tests = nixosTests.powerdns-admin;
+  };
+
+  meta = with lib; {
+    description = "A PowerDNS web interface with advanced features";
+    homepage = "https://github.com/PowerDNS-Admin/PowerDNS-Admin";
+    license = licenses.mit;
+    maintainers = with maintainers; [ Flakebi zhaofengli ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/powerdns-admin/package.json b/nixpkgs/pkgs/applications/networking/powerdns-admin/package.json
new file mode 100644
index 000000000000..0fb58f9c544c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/powerdns-admin/package.json
@@ -0,0 +1,24 @@
+{
+  "dependencies": {
+    "@fortawesome/fontawesome-free": "6.3.0",
+    "admin-lte": "3.2.0",
+    "bootstrap": "4.6.2",
+    "bootstrap-datepicker": "^1.9.0",
+    "bootstrap-validator": "^0.11.9",
+    "datatables.net-plugins": "^1.13.1",
+    "icheck": "^1.0.2",
+    "jquery-slimscroll": "^1.3.8",
+    "jquery-sparkline": "^2.4.0",
+    "jquery-ui-dist": "^1.13.2",
+    "jquery.quicksearch": "^2.4.0",
+    "jquery-validation": "^1.19.5",
+    "jtimeout": "^3.2.0",
+    "knockout": "^3.5.1",
+    "multiselect": "^0.9.12"
+  },
+  "resolutions": {
+    "admin-lte/@fortawesome/fontawesome-free": "6.3.0"
+  },
+  "name": "powerdns-admin-assets",
+  "version": "0.4.1"
+}
diff --git a/nixpkgs/pkgs/applications/networking/protocol/default.nix b/nixpkgs/pkgs/applications/networking/protocol/default.nix
new file mode 100644
index 000000000000..535cc3aa3171
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/protocol/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "protocol";
+  version = "unstable-2019-03-28";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "luismartingarcia";
+    repo = "protocol";
+    rev = "4e8326ea6c2d288be5464c3a7d9398df468c0ada";
+    sha256 = "13l10jhf4vghanmhh3pn91b2jdciispxy0qadz4n08blp85qn9cm";
+  };
+
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace "scripts=['protocol', 'constants.py', 'specs.py']" "scripts=['protocol'], py_modules=['constants', 'specs']"
+  '';
+
+  meta = with lib; {
+    description = "ASCII Header Generator for Network Protocols";
+    homepage = "https://github.com/luismartingarcia/protocol";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ teto ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/protonmail-bridge/default.nix b/nixpkgs/pkgs/applications/networking/protonmail-bridge/default.nix
new file mode 100644
index 000000000000..1dcc539d7142
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/protonmail-bridge/default.nix
@@ -0,0 +1,56 @@
+{ lib, buildGoModule, fetchFromGitHub, pkg-config, libsecret }:
+
+buildGoModule rec {
+  pname = "protonmail-bridge";
+  version = "3.4.2";
+
+  src = fetchFromGitHub {
+    owner = "ProtonMail";
+    repo = "proton-bridge";
+    rev = "v${version}";
+    hash = "sha256-i+RD0f3WxdW0PgMNynsIXnOfEdh3vS3NufJyXpw0EU0=";
+  };
+
+  vendorHash = "sha256-lrK4L7oTR5qP34Df0UJnTJATmKUmHVZeGrD9kD+sZFw=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ libsecret ];
+
+  preBuild = ''
+    patchShebangs ./utils/
+    (cd ./utils/ && ./credits.sh bridge)
+  '';
+
+  ldflags =
+    let constants = "github.com/ProtonMail/proton-bridge/v3/internal/constants"; in
+    [
+      "-X ${constants}.Version=${version}"
+      "-X ${constants}.Revision=${src.rev}"
+      "-X ${constants}.buildTime=unknown"
+      "-X ${constants}.FullAppName=ProtonMailBridge" # Should be "Proton Mail Bridge", but quoting doesn't seems to work in nix's ldflags
+    ];
+
+  subPackages = [
+    "cmd/Desktop-Bridge"
+  ];
+
+  postInstall = ''
+    mv $out/bin/Desktop-Bridge $out/bin/protonmail-bridge # The cli is named like that in other distro packages
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/ProtonMail/proton-bridge";
+    changelog = "https://github.com/ProtonMail/proton-bridge/blob/${src.rev}/Changelog.md";
+    downloadPage = "https://github.com/ProtonMail/proton-bridge/releases";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ mrfreezeex ];
+    description = "Use your ProtonMail account with your local e-mail client";
+    longDescription = ''
+      An application that runs on your computer in the background and seamlessly encrypts
+      and decrypts your mail as it enters and leaves your computer.
+
+      To work, use secret-service freedesktop.org API (e.g. Gnome keyring) or pass.
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/protonvpn-cli/2.nix b/nixpkgs/pkgs/applications/networking/protonvpn-cli/2.nix
new file mode 100644
index 000000000000..c3e9bd2ac215
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/protonvpn-cli/2.nix
@@ -0,0 +1,51 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitHub
+, pythonOlder
+, requests
+, docopt
+, pythondialog
+, jinja2
+, distro
+, dialog
+, iptables
+, openvpn }:
+
+buildPythonApplication rec {
+  pname = "protonvpn-cli_2";
+  version = "2.2.11";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.5";
+
+  src = fetchFromGitHub {
+    owner = "Rafficer";
+    repo = "linux-cli-community";
+    # There is a tag and branch with the same name
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-CWQpisJPBXbf+d5tCGuxfSQQZBeF36WFF4b6OSUn3GY=";
+  };
+
+  propagatedBuildInputs = [
+    requests
+    docopt
+    pythondialog
+    jinja2
+    distro
+    dialog
+    openvpn
+    iptables
+  ];
+
+  # No tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Linux command-line client for ProtonVPN using Openvpn";
+    homepage = "https://github.com/Rafficer/linux-cli-community";
+    maintainers = with maintainers; [ jtcoolen jefflabonte shamilton ];
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    mainProgram = "protonvpn";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/protonvpn-cli/default.nix b/nixpkgs/pkgs/applications/networking/protonvpn-cli/default.nix
new file mode 100644
index 000000000000..e480ab5f67b1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/protonvpn-cli/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, buildPythonApplication
+, pythonOlder
+, fetchFromGitHub
+, protonvpn-nm-lib
+, pythondialog
+, dialog
+}:
+
+buildPythonApplication rec {
+  pname = "protonvpn-cli";
+  version = "3.13.0";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.5";
+
+  src = fetchFromGitHub {
+    owner = "protonvpn";
+    repo = "linux-cli";
+    rev = "refs/tags/${version}";
+    sha256 = "sha256-KhfogC23i7THe6YZJ6Sy1+q83vZupHsS69NurHCeo8I=";
+  };
+
+  propagatedBuildInputs = [
+    protonvpn-nm-lib
+    pythondialog
+    dialog
+  ];
+
+  # Project has a dummy test
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Linux command-line client for ProtonVPN";
+    homepage = "https://github.com/protonvpn/linux-cli";
+    maintainers = with maintainers; [ wolfangaukang ];
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    mainProgram = "protonvpn-cli";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/protonvpn-gui/default.nix b/nixpkgs/pkgs/applications/networking/protonvpn-gui/default.nix
new file mode 100644
index 000000000000..14844161d18e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/protonvpn-gui/default.nix
@@ -0,0 +1,74 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitHub
+, wrapGAppsHook
+, gdk-pixbuf
+, glib-networking
+, gobject-introspection
+, imagemagick
+, librsvg
+, pango
+, webkitgtk
+# Python libs
+, protonvpn-nm-lib
+, psutil
+# Optionals
+, withIndicator ? true
+, libappindicator-gtk3 }:
+
+buildPythonApplication rec {
+  pname = "protonvpn-gui";
+  version = "1.12.0";
+
+  src = fetchFromGitHub {
+    owner = "ProtonVPN";
+    repo = "linux-app";
+    rev = "refs/tags/${version}";
+    sha256 = "sha256-MPS4d/yNkccsc/j85h7/4k4xL8uSCvhj/9JWPa7ezLY=";
+  };
+
+  nativeBuildInputs = [
+    gdk-pixbuf
+    gobject-introspection
+    imagemagick
+    wrapGAppsHook
+  ];
+
+  propagatedBuildInputs = [
+    glib-networking # needed for the login captcha
+    protonvpn-nm-lib
+    psutil
+  ];
+
+  buildInputs = [
+    librsvg
+    pango
+    webkitgtk
+  ] ++ lib.optionals withIndicator [ libappindicator-gtk3 ];
+
+  postInstall = ''
+    # Setting icons
+    for size in 16 32 48 64 72 96 128 192 512 1024; do
+      mkdir -p $out/share/icons/hicolor/"$size"x"$size"/apps
+      convert -resize $size'x'$size \
+        protonvpn_gui/assets/icons/protonvpn-logo.png \
+        $out/share/icons/hicolor/$size'x'$size/apps/protonvpn.png
+    done
+
+    install -Dm644 protonvpn.desktop -t $out/share/applications/
+    substituteInPlace $out/share/applications/protonvpn.desktop \
+      --replace 'protonvpn-logo' protonvpn
+  '';
+
+  # Project has a dummy test
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Official ProtonVPN Linux app";
+    homepage = "https://github.com/ProtonVPN/linux-app";
+    maintainers = with maintainers; [ wolfangaukang ];
+    license = licenses.gpl3Plus;
+    mainProgram = "protonvpn";
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/ps2client/default.nix b/nixpkgs/pkgs/applications/networking/ps2client/default.nix
new file mode 100644
index 000000000000..87d4e75c33e3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/ps2client/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation {
+  version = "unstable-2018-10-18";
+  pname = "ps2client";
+
+  src = fetchFromGitHub {
+    owner = "ps2dev";
+    repo  = "ps2client";
+    rev = "92fcaf18aabf74daaed40bd50d428cce326a87c0";
+    sha256 = "1rlmns44pxm6dkh6d3cz9sw8v7pvi53r7r5r3kgwdzkhixjj0cdg";
+  };
+
+  patchPhase = ''
+   sed -i -e "s|-I/usr/include||g" -e "s|-I/usr/local/include||g" Makefile
+  '';
+
+  installPhase = ''
+    make PREFIX=$out install
+  '';
+
+  meta = with lib; {
+    description = "Desktop clients to interact with ps2link and ps2netfs";
+    homepage = "https://github.com/ps2dev/ps2client";
+    license = licenses.bsd3;
+    maintainers = [ ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/pyload-ng/default.nix b/nixpkgs/pkgs/applications/networking/pyload-ng/default.nix
new file mode 100644
index 000000000000..ebe4db46aba0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/pyload-ng/default.nix
@@ -0,0 +1,54 @@
+{ lib, fetchPypi, python3 }:
+
+python3.pkgs.buildPythonApplication rec {
+  version = "0.5.0b3.dev72";
+  pname = "pyload-ng";
+  format = "pyproject";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-pcbJc23Fylh/JoWRmbZmC8xUzUqh2ej6gT+B2w8DHFQ=";
+  };
+
+  postPatch = ''
+    # relax version bounds
+    sed -i 's/\([A-z0-9]*\)~=.*$/\1/' setup.cfg
+    # not sure what Flask-Session2 is but flask-session works just fine
+    sed -i '/Flask-Session2/d' setup.cfg
+  '';
+
+  propagatedBuildInputs = with python3.pkgs; [
+    bitmath
+    certifi
+    cheroot
+    cryptography
+    filetype
+    flask
+    flask-babel
+    flask-caching
+    flask-compress
+    flask-session
+    flask-themes2
+    js2py
+    pycurl
+    semver
+    setuptools
+  ];
+
+  passthru.optional-dependencies = {
+    plugins = with python3.pkgs; [
+      beautifulsoup4 # for some plugins
+      colorlog # colorful console logging
+      pillow # for some CAPTCHA plugin
+      send2trash # send some files to trash instead of deleting them
+      slixmpp # XMPP plugin
+    ];
+  };
+
+  meta = with lib; {
+    description = "Free and open-source download manager with support for 1-click-hosting sites";
+    homepage = "https://github.com/pyload/pyload";
+    license = licenses.agpl3Plus;
+    maintainers = with maintainers; [ ruby0b ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/qv2ray/default.nix b/nixpkgs/pkgs/applications/networking/qv2ray/default.nix
new file mode 100644
index 000000000000..bb9bb957f3d3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/qv2ray/default.nix
@@ -0,0 +1,84 @@
+{ lib
+, stdenv
+, mkDerivation
+, fetchFromGitHub
+, symlinkJoin
+, qttools
+, cmake
+, clang_8
+, grpc
+, protobuf
+, openssl
+, pkg-config
+, c-ares
+, libGL
+, zlib
+, curl
+, v2ray
+, v2ray-geoip, v2ray-domain-list-community
+, assets ? [ v2ray-geoip v2ray-domain-list-community ]
+}:
+
+mkDerivation rec {
+  pname = "qv2ray";
+  version = "unstable-2023-06-09";
+
+  src = fetchFromGitHub {
+    owner = "Qv2ray";
+    repo = "Qv2ray";
+    rev = "aea9981cc28fe25de55207b93d86036b30d467d2";
+    hash = "sha256-ySXAF6fkkKsafuSa3DxkOuRjSyiCDUZRevcfJRp7LPM=";
+    fetchSubmodules = true;
+  };
+
+  postPatch = lib.optionals stdenv.isDarwin ''
+    substituteInPlace cmake/platforms/macos.cmake \
+      --replace \''${QV2RAY_QtX_DIR}/../../../bin/macdeployqt macdeployqt
+  '';
+
+  assetsDrv = symlinkJoin {
+    name = "v2ray-assets";
+    paths = assets;
+  };
+
+  cmakeFlags = [
+    "-DCMAKE_BUILD_TYPE=Release"
+    "-DQV2RAY_DISABLE_AUTO_UPDATE=on"
+    "-DQV2RAY_USE_V5_CORE=on"
+    "-DQV2RAY_TRANSLATION_PATH=${placeholder "out"}/share/qv2ray/lang"
+    "-DQV2RAY_DEFAULT_VASSETS_PATH='${assetsDrv}/share/v2ray'"
+    "-DQV2RAY_DEFAULT_VCORE_PATH='${v2ray}/bin/v2ray'"
+  ];
+
+  preConfigure = ''
+    export _QV2RAY_BUILD_INFO_="Qv2ray Nixpkgs"
+    export _QV2RAY_BUILD_EXTRA_INFO_="(Nixpkgs build) nixpkgs"
+  '';
+
+  buildInputs = [
+    libGL
+    zlib
+    grpc
+    protobuf
+    openssl
+    c-ares
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    qttools
+    curl
+    # The default clang_7 will result in reproducible ICE.
+  ] ++ lib.optional (stdenv.isDarwin) clang_8;
+
+  meta = with lib; {
+    description = "An GUI frontend to v2ray";
+    homepage = "https://github.com/Qv2ray/Qv2ray";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ poscat rewine ];
+    platforms = platforms.all;
+    # never built on aarch64-darwin, x86_64-darwin since update to unstable-2022-09-25
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/r53-ddns/default.nix b/nixpkgs/pkgs/applications/networking/r53-ddns/default.nix
new file mode 100644
index 000000000000..6761741ce9ce
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/r53-ddns/default.nix
@@ -0,0 +1,22 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "r53-ddns";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "fleaz";
+    repo = "r53-ddns";
+    rev = "v${version}";
+    sha256 = "sha256-KJAPhSGaC3upWLfo2eeSD3Vit9Blmbol7s8y3f849N4=";
+  };
+
+  vendorHash = "sha256-KkyMd94cejWkgg/RJudy1lm/M3lsEJXFGqVTzGIX3qM=";
+
+  meta = with lib; {
+    license = licenses.mit;
+    homepage = "https://github.com/fleaz/r53-ddns";
+    description = "A DIY DynDNS tool based on Route53";
+    maintainers = with maintainers; [ fleaz ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/remote/anydesk/default.nix b/nixpkgs/pkgs/applications/networking/remote/anydesk/default.nix
new file mode 100644
index 000000000000..f9668a9eeaef
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/remote/anydesk/default.nix
@@ -0,0 +1,91 @@
+{ lib, stdenv, fetchurl, makeWrapper, makeDesktopItem, genericUpdater, writeShellScript
+, atk, cairo, gdk-pixbuf, glib, gnome2, gtk2, libGLU, libGL, pango, xorg, minizip
+, lsb-release, freetype, fontconfig, polkit, polkit_gnome, pciutils
+, pulseaudio }:
+
+let
+  description = "Desktop sharing application, providing remote support and online meetings";
+
+  desktopItem = makeDesktopItem {
+    name = "AnyDesk";
+    exec = "@out@/bin/anydesk %u";
+    icon = "anydesk";
+    desktopName = "AnyDesk";
+    genericName = description;
+    categories = [ "Network" ];
+    startupNotify = false;
+  };
+
+in stdenv.mkDerivation rec {
+  pname = "anydesk";
+  version = "6.2.1";
+
+  src = fetchurl {
+    urls = [
+      "https://download.anydesk.com/linux/${pname}-${version}-amd64.tar.gz"
+      "https://download.anydesk.com/linux/generic-linux/${pname}-${version}-amd64.tar.gz"
+    ];
+    hash = "sha256-lqfe0hROza/zgcNOSe7jJ1yqqsAIR+kav153g3BsmJw=";
+  };
+
+  passthru = {
+    updateScript = genericUpdater {
+      versionLister = writeShellScript "anydesk-versionLister" ''
+        curl -s https://anydesk.com/en/downloads/linux \
+          | grep "https://[a-z0-9._/-]*-amd64.tar.gz" -o \
+          | uniq \
+          | sed 's,.*/anydesk-\(.*\)-amd64.tar.gz,\1,g'
+      '';
+    };
+  };
+
+  buildInputs = [
+    atk cairo gdk-pixbuf glib gtk2 stdenv.cc.cc pango
+    gnome2.gtkglext libGLU libGL minizip freetype
+    fontconfig polkit polkit_gnome pulseaudio
+  ] ++ (with xorg; [
+    libxcb libxkbfile libX11 libXdamage libXext libXfixes libXi libXmu
+    libXrandr libXtst libXt libICE libSM libXrender
+  ]);
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $out/share/{applications,doc/anydesk,icons/hicolor}
+    install -m755 anydesk $out/bin/anydesk
+    cp copyright README $out/share/doc/anydesk
+    cp -r icons/hicolor/* $out/share/icons/hicolor/
+    cp ${desktopItem}/share/applications/*.desktop $out/share/applications
+
+    runHook postInstall
+  '';
+
+  postFixup = ''
+    patchelf \
+      --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \
+      --set-rpath "${lib.makeLibraryPath buildInputs}" \
+      $out/bin/anydesk
+
+    # pangox is not actually necessary (it was only added as a part of gtkglext)
+    patchelf \
+      --remove-needed libpangox-1.0.so.0 \
+      $out/bin/anydesk
+
+    wrapProgram $out/bin/anydesk \
+      --prefix PATH : ${lib.makeBinPath [ lsb-release pciutils ]}
+
+    substituteInPlace $out/share/applications/*.desktop \
+      --subst-var out
+  '';
+
+  meta = with lib; {
+    inherit description;
+    homepage = "https://www.anydesk.com";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ shyim cheriimoya ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/remote/aws-workspaces/default.nix b/nixpkgs/pkgs/applications/networking/remote/aws-workspaces/default.nix
new file mode 100644
index 000000000000..4cc21a2269d6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/remote/aws-workspaces/default.nix
@@ -0,0 +1,79 @@
+{ stdenv, lib
+, makeWrapper, dpkg, fetchurl, autoPatchelfHook
+, curl, libkrb5, lttng-ust, libpulseaudio, gtk3, openssl_1_1, icu70, webkitgtk, librsvg, gdk-pixbuf, libsoup, glib-networking, graphicsmagick_q16, libva, libusb1, hiredis
+}:
+
+stdenv.mkDerivation rec {
+  pname = "aws-workspaces";
+  version = "4.6.0.4187";
+
+  src = fetchurl {
+    # ref https://d3nt0h4h6pmmc4.cloudfront.net/ubuntu/dists/focal/main/binary-amd64/Packages
+    urls = [
+      "https://d3nt0h4h6pmmc4.cloudfront.net/ubuntu/dists/focal/main/binary-amd64/workspacesclient_${version}_amd64.deb"
+      "https://archive.org/download/workspacesclient_${version}_amd64/workspacesclient_${version}_amd64.deb"
+    ];
+    sha256 = "sha256-A+b79ewh4hBIf8jgK0INILFktTqRRpOgXRH0FGziV6c=";
+  };
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+    makeWrapper
+  ];
+
+  # Crashes at startup when stripping:
+  # "Failed to create CoreCLR, HRESULT: 0x80004005"
+  dontStrip = true;
+
+  buildInputs = [
+    stdenv.cc.cc.lib
+    libkrb5
+    curl
+    lttng-ust
+    libpulseaudio
+    gtk3
+    openssl_1_1.out
+    icu70
+    webkitgtk
+    librsvg
+    gdk-pixbuf
+    libsoup
+    glib-networking
+    graphicsmagick_q16
+    hiredis
+    libusb1
+    libva
+  ];
+
+  unpackPhase = ''
+    ${dpkg}/bin/dpkg -x $src $out
+  '';
+
+  preFixup = ''
+    patchelf --replace-needed liblttng-ust.so.0 liblttng-ust.so $out/lib/libcoreclrtraceptprovider.so
+    patchelf --replace-needed libGraphicsMagick++-Q16.so.12 libGraphicsMagick++.so.12 $out/usr/lib/x86_64-linux-gnu/pcoip-client/vchan_plugins/libvchan-plugin-clipboard.so
+    patchelf --replace-needed libhiredis.so.0.14 libhiredis.so $out/lib/libpcoip_core.so
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin $out/lib
+    mv $out/opt/workspacesclient/* $out/lib
+    rm -rf $out/opt
+
+    wrapProgram $out/lib/workspacesclient \
+      --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath buildInputs}" \
+      --set GDK_PIXBUF_MODULE_FILE "${librsvg.out}/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache" \
+      --set GIO_EXTRA_MODULES "${glib-networking.out}/lib/gio/modules"
+
+    mv $out/lib/workspacesclient $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Client for Amazon WorkSpaces, a managed, secure Desktop-as-a-Service (DaaS) solution";
+    homepage = "https://clients.amazonworkspaces.com";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    platforms = [ "x86_64-linux" ]; # TODO Mac support
+    maintainers = with maintainers; [ mausch dylanmtaylor ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/remote/citrix-workspace/default.nix b/nixpkgs/pkgs/applications/networking/remote/citrix-workspace/default.nix
new file mode 100644
index 000000000000..c73789ddeb7b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/remote/citrix-workspace/default.nix
@@ -0,0 +1,25 @@
+{ lib, callPackage }:
+
+# For detailed information about the Citrix source-tarball, please refer to the OEM
+# reference guide: https://developer-docs.citrix.com/projects/workspace-app-for-linux-oem-guide/en/latest/
+
+let
+  inherit (callPackage ./sources.nix { }) supportedVersions unsupportedVersions;
+  mkCitrix = callPackage ./generic.nix { };
+
+  toAttrName = x: "citrix_workspace_${builtins.replaceStrings [ "." ] [ "_" ] x}";
+
+  unsupported = lib.listToAttrs (
+    map (x: lib.nameValuePair (toAttrName x) (throw ''
+      Citrix Workspace at version ${x} is not supported anymore!
+
+      Actively supported releases are listed here:
+      https://www.citrix.com/support/product-lifecycle/milestones/receiver.html
+    '')) unsupportedVersions
+  );
+
+  supported = lib.mapAttrs' (
+    attr: versionInfo: lib.nameValuePair (toAttrName attr) (callPackage ./generic.nix versionInfo)
+  ) supportedVersions;
+in
+  supported // unsupported
diff --git a/nixpkgs/pkgs/applications/networking/remote/citrix-workspace/generic.nix b/nixpkgs/pkgs/applications/networking/remote/citrix-workspace/generic.nix
new file mode 100644
index 000000000000..052369bfcc92
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/remote/citrix-workspace/generic.nix
@@ -0,0 +1,222 @@
+{ lib, stdenv, requireFile, makeWrapper, autoPatchelfHook, wrapGAppsHook, which, more
+, file, atk, alsa-lib, cairo, fontconfig, gdk-pixbuf, glib, webkitgtk, gtk2-x11, gtk3
+, heimdal, krb5, libsoup, libvorbis, speex, openssl, zlib, xorg, pango, gtk2
+, gnome2, mesa, nss, nspr, gtk_engines, freetype, dconf, libpng12, libxml2
+, libjpeg, libredirect, tzdata, cacert, systemd, libcxxabi, libcxx, e2fsprogs, symlinkJoin
+, libpulseaudio, pcsclite, glib-networking, llvmPackages_12, opencv4
+
+, homepage, version, prefix, hash
+
+, extraCerts ? []
+}:
+
+let
+  openssl' = symlinkJoin {
+    name = "openssl-backwards-compat";
+    nativeBuildInputs = [ makeWrapper ];
+    paths = [ (lib.getLib openssl) ];
+    postBuild = ''
+      ln -sf $out/lib/libcrypto.so $out/lib/libcrypto.so.1.0.0
+      ln -sf $out/lib/libssl.so $out/lib/libssl.so.1.0.0
+    '';
+  };
+in
+
+stdenv.mkDerivation rec {
+  pname = "citrix-workspace";
+  inherit version;
+
+  src = requireFile rec {
+    name = "${prefix}-${version}.tar.gz";
+    sha256 = hash;
+
+    message = ''
+      In order to use Citrix Workspace, you need to comply with the Citrix EULA and download
+      the ${if stdenv.is64bit then "64-bit" else "32-bit"} binaries, .tar.gz from:
+
+      ${homepage}
+
+      (if you do not find version ${version} there, try at
+      https://www.citrix.com/downloads/workspace-app/
+
+      Once you have downloaded the file, please use the following command and re-run the
+      installation:
+
+      nix-prefetch-url file://\$PWD/${name}
+    '';
+  };
+
+  dontBuild = true;
+  dontConfigure = true;
+  sourceRoot = ".";
+  preferLocalBuild = true;
+  passthru.icaroot = "${placeholder "out"}/opt/citrix-icaclient";
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+    file
+    makeWrapper
+    more
+    which
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    alsa-lib
+    atk
+    cairo
+    dconf
+    fontconfig
+    freetype
+    gdk-pixbuf
+    gnome2.gtkglext
+    glib-networking
+    webkitgtk
+    gtk2
+    gtk2-x11
+    gtk3
+    gtk_engines
+    heimdal
+    krb5
+    libcxx
+    libcxxabi
+    libjpeg
+    libpng12
+    libpulseaudio
+    libsoup
+    libvorbis
+    libxml2
+    llvmPackages_12.libunwind
+    mesa
+    nspr
+    nss
+    opencv4
+    openssl'
+    pango
+    speex
+    (lib.getLib systemd)
+    stdenv.cc.cc
+    xorg.libXaw
+    xorg.libXmu
+    xorg.libXScrnSaver
+    xorg.libXtst
+    zlib
+  ];
+
+  runtimeDependencies = [
+    glib
+    glib-networking
+    pcsclite
+
+    xorg.libX11
+    xorg.libXScrnSaver
+    xorg.libXext
+    xorg.libXfixes
+    xorg.libXinerama
+    xorg.libXmu
+    xorg.libXrender
+    xorg.libXtst
+    xorg.libxcb
+  ];
+
+  installPhase = let
+    icaFlag = program:
+      if (builtins.match "selfservice(.*)" program) != null then "--icaroot"
+      else if (builtins.match "wfica(.*)" program != null) then null
+      else "-icaroot";
+    wrap = program: ''
+      wrapProgram $out/opt/citrix-icaclient/${program} \
+        ${lib.optionalString (icaFlag program != null) ''--add-flags "${icaFlag program} $ICAInstDir"''} \
+        --set ICAROOT "$ICAInstDir" \
+        --prefix LD_LIBRARY_PATH : "$ICAInstDir:$ICAInstDir/lib" \
+        --set LD_PRELOAD "${libredirect}/lib/libredirect.so" \
+        --set NIX_REDIRECTS "/usr/share/zoneinfo=${tzdata}/share/zoneinfo:/etc/zoneinfo=${tzdata}/share/zoneinfo:/etc/timezone=$ICAInstDir/timezone"
+    '';
+    wrapLink = program: ''
+      ${wrap program}
+      ln -sf $out/opt/citrix-icaclient/${program} $out/bin/${baseNameOf program}
+    '';
+
+    copyCert = path: ''
+      cp -v ${path} $out/opt/citrix-icaclient/keystore/cacerts/${baseNameOf path}
+    '';
+
+    mkWrappers = lib.concatMapStringsSep "\n";
+
+    toWrap = [ "wfica" "selfservice" "util/configmgr" "util/conncenter" "util/ctx_rehash" ];
+  in ''
+    runHook preInstall
+
+    mkdir -p $out/{bin,share/applications}
+    export ICAInstDir="$out/opt/citrix-icaclient"
+    export HOME=$(mktemp -d)
+
+    # Run upstream installer in the store-path.
+    sed -i -e 's,^ANSWER="",ANSWER="$INSTALLER_YES",g' -e 's,/bin/true,true,g' ./${prefix}/hinst
+    ${stdenv.shell} ${prefix}/hinst CDROM "$(pwd)"
+
+    if [ -f "$ICAInstDir/util/setlog" ]; then
+      chmod +x "$ICAInstDir/util/setlog"
+      ln -sf "$ICAInstDir/util/setlog" "$out/bin/citrix-setlog"
+    fi
+    ${mkWrappers wrapLink toWrap}
+    ${mkWrappers wrap [ "PrimaryAuthManager" "ServiceRecord" "AuthManagerDaemon" "util/ctxwebhelper" ]}
+
+    ln -sf $ICAInstDir/util/storebrowse $out/bin/storebrowse
+
+    # As explained in https://wiki.archlinux.org/index.php/Citrix#Security_Certificates
+    echo "Expanding certificates..."
+    pushd "$ICAInstDir/keystore/cacerts"
+    awk 'BEGIN {c=0;} /BEGIN CERT/{c++} { print > "cert." c ".pem"}' \
+      < ${cacert}/etc/ssl/certs/ca-bundle.crt
+    popd
+
+    ${mkWrappers copyCert extraCerts}
+
+    # See https://developer-docs.citrix.com/projects/workspace-app-for-linux-oem-guide/en/latest/reference-information/#library-files
+    # Those files are fallbacks to support older libwekit.so and libjpeg.so
+    rm $out/opt/citrix-icaclient/lib/ctxjpeg_fb_8.so || true
+    rm $out/opt/citrix-icaclient/lib/UIDialogLibWebKit.so || true
+
+    # We support only Gstreamer 1.0
+    rm $ICAInstDir/util/{gst_aud_{play,read},gst_*0.10,libgstflatstm0.10.so}
+    ln -sf $ICAInstDir/util/gst_play1.0 $ICAInstDir/util/gst_play
+    ln -sf $ICAInstDir/util/gst_read1.0 $ICAInstDir/util/gst_read
+
+    echo "We arbitrarily set the timezone to UTC. No known consequences at this point."
+    echo UTC > "$ICAInstDir/timezone"
+
+    echo "Copy .desktop files."
+    cp $out/opt/citrix-icaclient/desktop/* $out/share/applications/
+
+    # We introduce a dependency on the source file so that it need not be redownloaded everytime
+    echo $src >> "$out/share/workspace_dependencies.pin"
+
+    runHook postInstall
+  '';
+
+  # Make sure that `autoPatchelfHook` is executed before
+  # running `ctx_rehash`.
+  dontAutoPatchelf = true;
+  preFixup = ''
+    find $out/opt/citrix-icaclient/lib -name "libopencv_imgcodecs.so.*" | while read -r fname; do
+      # lib needs libtiff.so.5, but nixpkgs provides libtiff.so.6
+      patchelf --replace-needed libtiff.so.5 libtiff.so $fname
+      # lib needs libjpeg.so.8, but nixpkgs provides libjpeg.so.9
+      patchelf --replace-needed libjpeg.so.8 libjpeg.so $fname
+    done
+  '';
+  postFixup = ''
+    autoPatchelf -- "$out"
+    $out/opt/citrix-icaclient/util/ctx_rehash
+  '';
+
+  meta = with lib; {
+    license = licenses.unfree;
+    description = "Citrix Workspace";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ michaeladler ];
+    inherit homepage;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/remote/citrix-workspace/sources.nix b/nixpkgs/pkgs/applications/networking/remote/citrix-workspace/sources.nix
new file mode 100644
index 000000000000..2422d7eb8efb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/remote/citrix-workspace/sources.nix
@@ -0,0 +1,49 @@
+{ stdenv, lib }:
+
+let
+  mkVersionInfo = _: { major, minor, patch, x64hash, x86hash, x64suffix, x86suffix, homepage }:
+    { inherit homepage;
+      version = "${major}.${minor}.${patch}.${if stdenv.is64bit then x64suffix else x86suffix}";
+      prefix = "linuxx${if stdenv.is64bit then "64" else "86"}";
+      hash = if stdenv.is64bit then x64hash else x86hash;
+    };
+
+  # Attribute-set with all actively supported versions of the Citrix workspace app
+  # for Linux.
+  #
+  # The latest versions can be found at https://www.citrix.com/downloads/workspace-app/linux/
+  supportedVersions = lib.mapAttrs mkVersionInfo {
+
+    "23.02.0" = {
+      major     = "23";
+      minor     = "2";
+      patch     = "0";
+      x64hash   = "d0030a4782ba4b2628139635a12a7de044a4eb36906ef1eadb05b6ea77c1a7bc";
+      x86hash   = "39228fc8dd69adca4e56991c1ebc0832fec183c3ab5abd2d65c66b39b634391b";
+      x64suffix = "10";
+      x86suffix = "10";
+      homepage  = "https://www.citrix.com/downloads/workspace-app/legacy-workspace-app-for-linux/workspace-app-for-linux-latest6.html";
+    };
+
+    "23.07.0" = {
+      major     = "23";
+      minor     = "7";
+      patch     = "0";
+      x64hash   = "d4001226e79b5353fc74da4c8ed4f6295c1859fe18142cb5de345a3c7ae48168";
+      x86hash   = "4a7da238286ae28d7baf0fefa1e7e09d077c8bc56c2bf7bec00da42c331bee59";
+      x64suffix = "17";
+      x86suffix = "17";
+      homepage  = "https://www.citrix.com/downloads/workspace-app/linux/workspace-app-for-linux-latest.html";
+    };
+
+  };
+
+  # Retain attribute-names for abandoned versions of Citrix workspace to
+  # provide a meaningful error-message if it's attempted to use such an old one.
+  #
+  # The lifespans of Citrix products can be found here:
+  # https://www.citrix.com/support/product-lifecycle/milestones/receiver.html
+  unsupportedVersions = [ ];
+in {
+  inherit supportedVersions unsupportedVersions;
+}
diff --git a/nixpkgs/pkgs/applications/networking/remote/dayon/default.nix b/nixpkgs/pkgs/applications/networking/remote/dayon/default.nix
new file mode 100644
index 000000000000..8af457c7d4c2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/remote/dayon/default.nix
@@ -0,0 +1,67 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, ant
+, jdk
+, jre
+, makeWrapper
+, copyDesktopItems
+}:
+
+stdenv.mkDerivation rec {
+  pname = "dayon";
+  version = "12.0.1";
+
+  src = fetchFromGitHub {
+    owner = "RetGal";
+    repo = "dayon";
+    rev = "v${version}";
+    hash = "sha256-SCInonMTvBXtiDxWlN8QWNS+8MFB52vloonqfLcAEis=";
+  };
+
+  # https://github.com/RetGal/Dayon/pull/66
+  postPatch = ''
+    substituteInPlace resources/deb/dayon_assisted.desktop resources/deb/dayon_assistant.desktop \
+      --replace "Exec=/usr/bin/" "Exec="
+  '';
+
+  nativeBuildInputs = [
+    ant
+    jdk
+    makeWrapper
+    copyDesktopItems
+  ];
+
+  buildPhase = ''
+    runHook preBuild
+    ant
+    runHook postBuild
+  '';
+
+  desktopItems = [
+    "resources/deb/dayon_assisted.desktop"
+    "resources/deb/dayon_assistant.desktop"
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm644 build/dayon.jar $out/share/dayon/dayon.jar
+    mkdir -p $out/bin
+    makeWrapper ${jre}/bin/java $out/bin/dayon \
+      --add-flags "-jar $out/share/dayon/dayon.jar"
+    makeWrapper ${jre}/bin/java $out/bin/dayon_assisted \
+      --add-flags "-cp $out/share/dayon/dayon.jar mpo.dayon.assisted.AssistedRunner"
+    makeWrapper ${jre}/bin/java $out/bin/dayon_assistant \
+      --add-flags "-cp $out/share/dayon/dayon.jar mpo.dayon.assistant.AssistantRunner"
+    install -Dm644 resources/dayon.png $out/share/icons/hicolor/128x128/apps/dayon.png
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://retgal.github.io/Dayon/index.html";
+    description = "An easy to use, cross-platform remote desktop assistance solution";
+    license = licenses.gpl3Plus; # https://github.com/RetGal/Dayon/issues/59
+    platforms = platforms.all;
+    maintainers = with maintainers; [ fgaz ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/remote/freerdp/default.nix b/nixpkgs/pkgs/applications/networking/remote/freerdp/default.nix
new file mode 100644
index 000000000000..701b266b7309
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/remote/freerdp/default.nix
@@ -0,0 +1,210 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, cmake
+, docbook-xsl-nons
+, libxslt
+, pkg-config
+, alsa-lib
+, faac
+, faad2
+, ffmpeg
+, glib
+, openh264
+, openssl
+, pcre2
+, zlib
+, libX11
+, libXcursor
+, libXdamage
+, libXdmcp
+, libXext
+, libXi
+, libXinerama
+, libXrandr
+, libXrender
+, libXtst
+, libXv
+, libxkbcommon
+, libxkbfile
+, wayland
+, wayland-scanner
+, gstreamer
+, gst-plugins-base
+, gst-plugins-good
+, libunwind
+, orc
+, cairo
+, libusb1
+, libpulseaudio
+, cups
+, pcsclite
+, systemd
+, libjpeg_turbo
+, buildServer ? true
+, nocaps ? false
+, AudioToolbox
+, AVFoundation
+, Carbon
+, Cocoa
+, CoreMedia
+, withUnfree ? false
+
+# tries to compile and run generate_argument_docbook.c
+, withManPages ? stdenv.buildPlatform.canExecute stdenv.hostPlatform
+
+, buildPackages
+}:
+
+let
+  cmFlag = flag: if flag then "ON" else "OFF";
+  disabledTests = [
+    # this one is probably due to our sandbox
+    {
+      dir = "libfreerdp/crypto/test";
+      file = "Test_x509_cert_info.c";
+    }
+  ] ++ lib.optionals stdenv.isDarwin [
+    {
+      dir = "winpr/libwinpr/sysinfo/test";
+      file = "TestGetComputerName.c";
+    }
+  ];
+
+  inherit (lib) optionals;
+
+in
+stdenv.mkDerivation rec {
+  pname = "freerdp";
+  version = "2.11.1";
+
+  src = fetchFromGitHub {
+    owner = "FreeRDP";
+    repo = "FreeRDP";
+    rev = version;
+    sha256 = "sha256-x97I0TDPAd/zULM/FpAvYQTcArG2CwGoUUp/eEM4vdc=";
+  };
+
+  postPatch = ''
+    export HOME=$TMP
+
+    # skip NIB file generation on darwin
+    sed -z 's/NIB file generation.*//' -i client/Mac{,/cli}/CMakeLists.txt
+
+    # failing test(s)
+    ${lib.concatMapStringsSep "\n" (e: ''
+      substituteInPlace ${e.dir}/CMakeLists.txt \
+        --replace ${e.file} ""
+      rm ${e.dir}/${e.file}
+    '') disabledTests}
+
+    substituteInPlace "libfreerdp/freerdp.pc.in" \
+      --replace "Requires:" "Requires: @WINPR_PKG_CONFIG_FILENAME@"
+  '' + lib.optionalString (pcsclite != null) ''
+    substituteInPlace "winpr/libwinpr/smartcard/smartcard_pcsc.c" \
+      --replace "libpcsclite.so" "${lib.getLib pcsclite}/lib/libpcsclite.so"
+  '' + lib.optionalString nocaps ''
+    substituteInPlace "libfreerdp/locale/keyboard_xkbfile.c" \
+      --replace "RDP_SCANCODE_CAPSLOCK" "RDP_SCANCODE_LCONTROL"
+  '';
+
+  buildInputs = [
+    cairo
+    cups
+    faad2
+    ffmpeg
+    glib
+    gst-plugins-base
+    gst-plugins-good
+    gstreamer
+    libX11
+    libXcursor
+    libXdamage
+    libXdmcp
+    libXext
+    libXi
+    libXinerama
+    libXrandr
+    libXrender
+    libXtst
+    libXv
+    libjpeg_turbo
+    libpulseaudio
+    libunwind
+    libusb1
+    libxkbcommon
+    libxkbfile
+    openh264
+    openssl
+    orc
+    pcre2
+    pcsclite
+    zlib
+  ] ++ optionals stdenv.isLinux [
+    alsa-lib
+    systemd
+    wayland
+  ] ++ optionals stdenv.isDarwin [
+    AudioToolbox
+    AVFoundation
+    Carbon
+    Cocoa
+    CoreMedia
+  ]
+  ++ optionals withUnfree [
+    faac
+  ];
+
+  nativeBuildInputs = [
+    cmake libxslt docbook-xsl-nons pkg-config
+    wayland-scanner
+  ];
+
+  doCheck = true;
+
+  # https://github.com/FreeRDP/FreeRDP/issues/8526#issuecomment-1357134746
+  cmakeFlags = [
+    "-Wno-dev"
+    "-DCMAKE_INSTALL_LIBDIR=lib"
+    "-DDOCBOOKXSL_DIR=${docbook-xsl-nons}/xml/xsl/docbook"
+    "-DWAYLAND_SCANNER=${buildPackages.wayland-scanner}/bin/wayland-scanner"
+  ]
+  ++ lib.mapAttrsToList (k: v: "-D${k}=${cmFlag v}") {
+    BUILD_TESTING = false; # false is recommended by upstream
+    WITH_CAIRO = (cairo != null);
+    WITH_CUPS = (cups != null);
+    WITH_FAAC = (withUnfree && faac != null);
+    WITH_FAAD2 = (faad2 != null);
+    WITH_JPEG = (libjpeg_turbo != null);
+    WITH_OPENH264 = (openh264 != null);
+    WITH_OSS = false;
+    WITH_MANPAGES = withManPages;
+    WITH_PCSC = (pcsclite != null);
+    WITH_PULSE = (libpulseaudio != null);
+    WITH_SERVER = buildServer;
+    WITH_VAAPI = false; # false is recommended by upstream
+    WITH_X11 = true;
+  };
+
+  env.NIX_CFLAGS_COMPILE = toString (lib.optionals stdenv.isDarwin [
+    "-DTARGET_OS_IPHONE=0"
+    "-DTARGET_OS_WATCH=0"
+    "-include AudioToolbox/AudioToolbox.h"
+  ]);
+
+  NIX_LDFLAGS = lib.optionals stdenv.isDarwin [
+    "-framework AudioToolbox"
+  ];
+
+  meta = with lib; {
+    description = "A Remote Desktop Protocol Client";
+    longDescription = ''
+      FreeRDP is a client-side implementation of the Remote Desktop Protocol (RDP)
+      following the Microsoft Open Specifications.
+    '';
+    homepage = "https://www.freerdp.com/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ peterhoeg lheckemann ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/remote/nice-dcv-client/default.nix b/nixpkgs/pkgs/applications/networking/remote/nice-dcv-client/default.nix
new file mode 100644
index 000000000000..0722561cb6f3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/remote/nice-dcv-client/default.nix
@@ -0,0 +1,86 @@
+{ lib
+, stdenv
+, fetchurl
+, glib
+, libX11
+, gst_all_1
+, libepoxy
+, pango
+, cairo
+, gdk-pixbuf
+, e2fsprogs
+, libkrb5
+, libva
+, openssl
+, pcsclite
+, gtk3
+, libselinux
+, libxml2
+, libffi
+, python3Packages
+, cpio
+, autoPatchelfHook
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "nice-dcv-client";
+  version = "2021.2.3797-1";
+  src =
+    fetchurl {
+      url = "https://d1uj6qtbmh3dt5.cloudfront.net/2021.2/Clients/nice-dcv-viewer-${version}.el8.x86_64.rpm";
+      sha256 = "sha256-iLz25SB5v7ghkAZOMGPmpNaPihd8ikzCQS//r1xBNRU=";
+    };
+
+  nativeBuildInputs = [ autoPatchelfHook wrapGAppsHook python3Packages.rpm ];
+  unpackPhase = ''
+    rpm2cpio $src | ${cpio}/bin/cpio -idm
+  '';
+
+  buildInputs = [
+    libselinux
+    libkrb5
+    libxml2
+    libva
+    e2fsprogs
+    libX11
+    openssl
+    pcsclite
+    gtk3
+    cairo
+    libepoxy
+    pango
+    gdk-pixbuf
+    gst_all_1.gstreamer
+    gst_all_1.gst-plugins-base
+  ];
+
+  installPhase = ''
+    mkdir -p $out/bin/
+    mkdir -p $out/lib64/
+    mv usr/bin/dcvviewer $out/bin/dcvviewer
+    mv usr/lib64/* $out/lib64/
+    mkdir -p $out/libexec/dcvviewer
+    mv usr/libexec/dcvviewer/dcvviewer $out/libexec/dcvviewer/dcvviewer
+    patchelf \
+      --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \
+      $out/libexec/dcvviewer/dcvviewer
+    # Fix the wrapper script to have the right basedir.
+    sed -i "s#basedir=/usr#basedir=$out#" $out/bin/dcvviewer
+    mv usr/share $out/
+
+    ${glib.dev}/bin/glib-compile-schemas $out/share/glib-2.0/schemas
+
+    # we already ship libffi.so.7
+    ln -s ${lib.getLib libffi}/lib/libffi.so $out/lib64/libffi.so.6
+  '';
+
+  meta = with lib; {
+    description = "High-performance remote display protocol";
+    homepage = "https://aws.amazon.com/hpc/dcv/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ rmcgibbo ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/remote/putty/default.nix b/nixpkgs/pkgs/applications/networking/remote/putty/default.nix
new file mode 100644
index 000000000000..4d8c1ee9dc40
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/remote/putty/default.nix
@@ -0,0 +1,55 @@
+{ stdenv, lib, fetchurl, autoconf, automake, pkg-config, libtool
+, gtk2, halibut, ncurses, perl, darwin
+}:
+
+stdenv.mkDerivation rec {
+  version = "0.76";
+  pname = "putty";
+
+  src = fetchurl {
+    urls = [
+      "https://the.earth.li/~sgtatham/putty/${version}/${pname}-${version}.tar.gz"
+      "ftp://ftp.wayne.edu/putty/putty-website-mirror/${version}/${pname}-${version}.tar.gz"
+    ];
+    sha256 = "0gvi8phabszqksj2by5jrjmshm7bpirhgavz0dqyz1xaimxdjz2l";
+  };
+
+  # glib-2.62 deprecations
+  env.NIX_CFLAGS_COMPILE = "-DGLIB_DISABLE_DEPRECATION_WARNINGS";
+
+  preConfigure = lib.optionalString stdenv.hostPlatform.isUnix ''
+    perl mkfiles.pl
+    ( cd doc ; make );
+    ./mkauto.sh
+    cd unix
+  '' + lib.optionalString stdenv.hostPlatform.isWindows ''
+    cd windows
+  '';
+
+  TOOLPATH = stdenv.cc.targetPrefix;
+  makefile = if stdenv.hostPlatform.isWindows then "Makefile.mgw" else null;
+
+  installPhase = if stdenv.hostPlatform.isWindows then ''
+    for exe in *.exe; do
+       install -D $exe $out/bin/$exe
+    done
+  '' else null;
+
+  nativeBuildInputs = [ autoconf automake halibut libtool perl pkg-config ];
+  buildInputs = lib.optionals stdenv.hostPlatform.isUnix [
+    gtk2 ncurses
+  ] ++ lib.optional stdenv.isDarwin darwin.apple_sdk.libs.utmp;
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "A Free Telnet/SSH Client";
+    longDescription = ''
+      PuTTY is a free implementation of Telnet and SSH for Windows and Unix
+      platforms, along with an xterm terminal emulator.
+      It is written and maintained primarily by Simon Tatham.
+    '';
+    homepage = "https://www.chiark.greenend.org.uk/~sgtatham/putty/";
+    license = licenses.mit;
+    platforms = platforms.unix ++ platforms.windows;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/remote/rdesktop/default.nix b/nixpkgs/pkgs/applications/networking/remote/rdesktop/default.nix
new file mode 100644
index 000000000000..e2ee9428ad24
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/remote/rdesktop/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, openssl, libX11, krb5, libXcursor, libtasn1
+, nettle, gnutls, pkg-config, autoreconfHook, libiconv
+, enableCredssp ? (!stdenv.isDarwin)
+} :
+
+stdenv.mkDerivation (rec {
+  pname = "rdesktop";
+  version = "1.9.0";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1s6k1jwd28y38ymk3lfv76ch4arpfwrbdhpkbnwwy3fc4617gb78";
+  };
+
+  nativeBuildInputs = [pkg-config autoreconfHook];
+  buildInputs = [openssl libX11 libXcursor libtasn1 nettle gnutls]
+    ++ lib.optional enableCredssp krb5
+    ++ lib.optional stdenv.isDarwin libiconv;
+
+  configureFlags = [
+    "--with-ipv6"
+    "--with-openssl=${openssl.dev}"
+    "--disable-smartcard"
+  ] ++ lib.optional (!enableCredssp) "--disable-credssp";
+
+  meta = {
+    description = "Open source client for Windows Terminal Services";
+    homepage = "http://www.rdesktop.org/";
+    platforms = lib.platforms.linux ++ lib.platforms.darwin;
+    license = lib.licenses.gpl2;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/networking/remote/remmina/default.nix b/nixpkgs/pkgs/applications/networking/remote/remmina/default.nix
new file mode 100644
index 000000000000..64ebd27001f0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/remote/remmina/default.nix
@@ -0,0 +1,85 @@
+{ lib, stdenv, fetchFromGitLab, cmake, ninja, pkg-config, wrapGAppsHook
+, glib, gtk3, gettext, libxkbfile, libX11, python3
+, freerdp, libssh, libgcrypt, gnutls, vte
+, pcre2, libdbusmenu-gtk3, libappindicator-gtk3
+, libvncserver, libpthreadstubs, libXdmcp, libxkbcommon
+, libsecret, libsoup_3, spice-protocol, spice-gtk, libepoxy, at-spi2-core
+, openssl, gsettings-desktop-schemas, json-glib, libsodium, webkitgtk_4_1, harfbuzz
+# The themes here are soft dependencies; only icons are missing without them.
+, gnome
+, withKf5Wallet ? stdenv.isLinux, libsForQt5
+, withLibsecret ? stdenv.isLinux
+, withVte ? true
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "remmina";
+  version = "1.4.31";
+
+  src = fetchFromGitLab {
+    owner  = "Remmina";
+    repo   = "Remmina";
+    rev    = "v${finalAttrs.version}";
+    sha256 = "sha256-oEgpav4oQ9Sld9PY4TsutS5xEnhQgOHnpQhDesRFTeQ=";
+  };
+
+  nativeBuildInputs = [ cmake ninja pkg-config wrapGAppsHook ];
+
+  buildInputs = [
+    gsettings-desktop-schemas
+    glib gtk3 gettext libxkbfile libX11
+    freerdp libssh libgcrypt gnutls
+    pcre2
+    libvncserver libpthreadstubs libXdmcp libxkbcommon
+    libsoup_3 spice-protocol
+    spice-gtk
+    libepoxy at-spi2-core
+    openssl gnome.adwaita-icon-theme json-glib libsodium
+    harfbuzz python3
+  ] ++ lib.optionals stdenv.isLinux [ libappindicator-gtk3 libdbusmenu-gtk3 webkitgtk_4_1 ]
+    ++ lib.optionals withLibsecret [ libsecret ]
+    ++ lib.optionals withKf5Wallet [ libsForQt5.kwallet ]
+    ++ lib.optionals withVte [ vte ];
+
+  cmakeFlags = [
+    "-DWITH_VTE=${if withVte then "ON" else "OFF"}"
+    "-DWITH_TELEPATHY=OFF"
+    "-DWITH_AVAHI=OFF"
+    "-DWITH_KF5WALLET=${if withKf5Wallet then "ON" else "OFF"}"
+    "-DWITH_LIBSECRET=${if withLibsecret then "ON" else "OFF"}"
+    "-DFREERDP_LIBRARY=${freerdp}/lib/libfreerdp2${stdenv.hostPlatform.extensions.sharedLibrary}"
+    "-DFREERDP_CLIENT_LIBRARY=${freerdp}/lib/libfreerdp-client2${stdenv.hostPlatform.extensions.sharedLibrary}"
+    "-DFREERDP_WINPR_LIBRARY=${freerdp}/lib/libwinpr2${stdenv.hostPlatform.extensions.sharedLibrary}"
+    "-DWINPR_INCLUDE_DIR=${freerdp}/include/winpr2"
+  ] ++ lib.optionals stdenv.isDarwin [
+    "-DHAVE_LIBAPPINDICATOR=OFF"
+    "-DWITH_CUPS=OFF"
+    "-DWITH_ICON_CACHE=OFF"
+    "-DWITH_WEBKIT2GTK=OFF"
+  ];
+
+  env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.isDarwin (toString [
+    "-DTARGET_OS_IPHONE=0"
+    "-DTARGET_OS_WATCH=0"
+  ]);
+
+  dontWrapQtApps = true;
+
+  preFixup = ''
+    gappsWrapperArgs+=(
+      --set-default SSL_CERT_DIR "/etc/ssl/certs/"
+      --prefix LD_LIBRARY_PATH : "${libX11.out}/lib"
+      ${lib.optionalString stdenv.isDarwin ''
+        --prefix XDG_DATA_DIRS : "$XDG_ICON_DIRS"
+      ''}
+    )
+  '';
+
+  meta = with lib; {
+    license = licenses.gpl2Plus;
+    homepage = "https://gitlab.com/Remmina/Remmina";
+    description = "Remote desktop client written in GTK";
+    maintainers = with maintainers; [ melsigl ryantm ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/networking/remote/rustdesk/Cargo.lock b/nixpkgs/pkgs/applications/networking/remote/rustdesk/Cargo.lock
new file mode 100644
index 000000000000..1dc94cfdae38
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/remote/rustdesk/Cargo.lock
@@ -0,0 +1,7407 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "aes"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8"
+dependencies = [
+ "cfg-if 1.0.0",
+ "cipher",
+ "cpufeatures",
+ "opaque-debug",
+]
+
+[[package]]
+name = "ahash"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
+dependencies = [
+ "getrandom",
+ "once_cell",
+ "version_check",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67fc08ce920c31afb70f013dcce1bfc3a3195de6a228474e45e1f145b36f8d04"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "allo-isolate"
+version = "0.1.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ed55848be9f41d44c79df6045b680a74a78bc579e0813f7f196cd7928e22fb1"
+dependencies = [
+ "anyhow",
+ "atomic",
+ "chrono",
+ "uuid",
+]
+
+[[package]]
+name = "alloc-no-stdlib"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3"
+
+[[package]]
+name = "alloc-stdlib"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece"
+dependencies = [
+ "alloc-no-stdlib",
+]
+
+[[package]]
+name = "alsa"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8512c9117059663fb5606788fbca3619e2a91dac0e3fe516242eab1fa6be5e44"
+dependencies = [
+ "alsa-sys",
+ "bitflags",
+ "libc",
+ "nix 0.24.3",
+]
+
+[[package]]
+name = "alsa-sys"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db8fee663d06c4e303404ef5f40488a53e062f89ba8bfed81f42325aafad1527"
+dependencies = [
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "android_log-sys"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "27f0fc03f560e1aebde41c2398b691cb98b5ea5996a6184a7a67bbbb77448969"
+
+[[package]]
+name = "android_logger"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fa490e751f3878eb9accb9f18988eca52c2337ce000a8bf31ef50d4c723ca9e"
+dependencies = [
+ "android_log-sys",
+ "env_logger 0.10.0",
+ "log",
+ "once_cell",
+]
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "ansi_term"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "anstream"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "is-terminal",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41ed9a86bf92ae6580e0a31281f65a1b1d867c0cc68d5346e2ae128dddfa6a7d"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e765fd216e48e067936442276d1d57399e37bce53c264d6fefbe298080cb57ee"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188"
+dependencies = [
+ "anstyle",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.71"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8"
+
+[[package]]
+name = "apple-bindgen"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38f109ee76f68b4767848cb5dc93bfcc7c425deca849c4c81fa11cdce525e3d2"
+dependencies = [
+ "apple-sdk",
+ "bindgen 0.63.0",
+ "derive_more",
+ "regex",
+ "serde 1.0.163",
+ "thiserror",
+ "toml 0.6.0",
+]
+
+[[package]]
+name = "apple-sdk"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a04f192a700686ee70008ff4e4eb76fe7d11814ab93b7ee9d48c36b9a9f0bd2a"
+dependencies = [
+ "plist",
+ "serde 1.0.163",
+ "serde_json 1.0.96",
+]
+
+[[package]]
+name = "apple-sys"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12b3a1c3342678cd72676d0c1644fde496c1f65ea41f51465f54a89cad3bdf34"
+dependencies = [
+ "apple-bindgen",
+ "apple-sdk",
+ "objc",
+]
+
+[[package]]
+name = "arboard"
+version = "3.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6041616acea41d67c4a984709ddab1587fd0b10efe5cc563fee954d2f011854"
+dependencies = [
+ "clipboard-win",
+ "core-graphics",
+ "image",
+ "log",
+ "objc",
+ "objc-foundation",
+ "objc_id",
+ "once_cell",
+ "parking_lot",
+ "thiserror",
+ "winapi 0.3.9",
+ "x11rb",
+]
+
+[[package]]
+name = "async-broadcast"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c48ccdbf6ca6b121e0f586cbc0e73ae440e56c67c30fa0873b4e110d9c26d2b"
+dependencies = [
+ "event-listener",
+ "futures-core",
+]
+
+[[package]]
+name = "async-channel"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf46fee83e5ccffc220104713af3292ff9bc7c64c7de289f66dae8e38d826833"
+dependencies = [
+ "concurrent-queue",
+ "event-listener",
+ "futures-core",
+]
+
+[[package]]
+name = "async-executor"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fa3dc5f2a8564f07759c008b9109dc0d39de92a88d5588b8a5036d286383afb"
+dependencies = [
+ "async-lock",
+ "async-task",
+ "concurrent-queue",
+ "fastrand",
+ "futures-lite",
+ "slab",
+]
+
+[[package]]
+name = "async-fs"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06"
+dependencies = [
+ "async-lock",
+ "autocfg 1.1.0",
+ "blocking",
+ "futures-lite",
+]
+
+[[package]]
+name = "async-io"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af"
+dependencies = [
+ "async-lock",
+ "autocfg 1.1.0",
+ "cfg-if 1.0.0",
+ "concurrent-queue",
+ "futures-lite",
+ "log",
+ "parking",
+ "polling",
+ "rustix",
+ "slab",
+ "socket2 0.4.9",
+ "waker-fn",
+]
+
+[[package]]
+name = "async-lock"
+version = "2.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa24f727524730b077666307f2734b4a1a1c57acb79193127dcc8914d5242dd7"
+dependencies = [
+ "event-listener",
+]
+
+[[package]]
+name = "async-process"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a9d28b1d97e08915212e2e45310d47854eafa69600756fc735fb788f75199c9"
+dependencies = [
+ "async-io",
+ "async-lock",
+ "autocfg 1.1.0",
+ "blocking",
+ "cfg-if 1.0.0",
+ "event-listener",
+ "futures-lite",
+ "rustix",
+ "signal-hook",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "async-recursion"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e97ce7de6cf12de5d7226c73f5ba9811622f4db3a5b91b55c53e987e5f91cba"
+dependencies = [
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "async-task"
+version = "4.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ecc7ab41815b3c653ccd2978ec3255c81349336702dfdf62ee6f7069b12a3aae"
+
+[[package]]
+name = "async-trait"
+version = "0.1.68"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842"
+dependencies = [
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "atk"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39991bc421ddf72f70159011b323ff49b0f783cc676a7287c59453da2e2531cf"
+dependencies = [
+ "atk-sys",
+ "bitflags",
+ "glib 0.16.7",
+ "libc",
+]
+
+[[package]]
+name = "atk-sys"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "11ad703eb64dc058024f0e57ccfa069e15a413b98dbd50a1a950e743b7f11148"
+dependencies = [
+ "glib-sys 0.16.3",
+ "gobject-sys 0.16.3",
+ "libc",
+ "system-deps 6.1.0",
+]
+
+[[package]]
+name = "atomic"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b88d82667eca772c4aa12f0f1348b3ae643424c8876448f3f7bd5787032e234c"
+dependencies = [
+ "autocfg 1.1.0",
+]
+
+[[package]]
+name = "atomic-waker"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1181e1e0d1fce796a03db1ae795d67167da795f9cf4a39c37589e85ef57f26d3"
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "autocfg"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0dde43e75fd43e8a1bf86103336bc699aa8d17ad1be60c76c0bdfd4828e19b78"
+dependencies = [
+ "autocfg 1.1.0",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "backtrace"
+version = "0.3.67"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if 1.0.0",
+ "libc",
+ "miniz_oxide 0.6.2",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base64"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a"
+
+[[package]]
+name = "base64ct"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b"
+
+[[package]]
+name = "bindgen"
+version = "0.59.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bd2a9a458e8f4304c52c43ebb0cfbd520289f8379a52e329a38afda99bf8eb8"
+dependencies = [
+ "bitflags",
+ "cexpr",
+ "clang-sys",
+ "clap 2.34.0",
+ "env_logger 0.9.3",
+ "lazy_static",
+ "lazycell",
+ "log",
+ "peeking_take_while",
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+ "regex",
+ "rustc-hash",
+ "shlex",
+ "which",
+]
+
+[[package]]
+name = "bindgen"
+version = "0.63.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36d860121800b2a9a94f9b5604b332d5cffb234ce17609ea479d723dbc9d3885"
+dependencies = [
+ "bitflags",
+ "cexpr",
+ "clang-sys",
+ "lazy_static",
+ "lazycell",
+ "log",
+ "peeking_take_while",
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+ "regex",
+ "rustc-hash",
+ "shlex",
+ "syn 1.0.109",
+ "which",
+]
+
+[[package]]
+name = "bindgen"
+version = "0.64.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4243e6031260db77ede97ad86c27e501d646a27ab57b59a574f725d98ab1fb4"
+dependencies = [
+ "bitflags",
+ "cexpr",
+ "clang-sys",
+ "lazy_static",
+ "lazycell",
+ "peeking_take_while",
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+ "regex",
+ "rustc-hash",
+ "shlex",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "bindgen"
+version = "0.65.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cfdf7b466f9a4903edc73f95d6d2bcd5baf8ae620638762244d3f60143643cc5"
+dependencies = [
+ "bitflags",
+ "cexpr",
+ "clang-sys",
+ "lazy_static",
+ "lazycell",
+ "log",
+ "peeking_take_while",
+ "prettyplease",
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+ "regex",
+ "rustc-hash",
+ "shlex",
+ "syn 2.0.15",
+ "which",
+]
+
+[[package]]
+name = "bit_field"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitvec"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c"
+dependencies = [
+ "funty",
+ "radium",
+ "tap",
+ "wyz",
+]
+
+[[package]]
+name = "block"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "blocking"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77231a1c8f801696fc0123ec6150ce92cffb8e164a02afb9c8ddee0e9b65ad65"
+dependencies = [
+ "async-channel",
+ "async-lock",
+ "async-task",
+ "atomic-waker",
+ "fastrand",
+ "futures-lite",
+ "log",
+]
+
+[[package]]
+name = "brotli"
+version = "3.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68"
+dependencies = [
+ "alloc-no-stdlib",
+ "alloc-stdlib",
+ "brotli-decompressor",
+]
+
+[[package]]
+name = "brotli-decompressor"
+version = "2.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b6561fd3f895a11e8f72af2cb7d22e08366bebc2b6b57f7744c4bda27034744"
+dependencies = [
+ "alloc-no-stdlib",
+ "alloc-stdlib",
+]
+
+[[package]]
+name = "build-target"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "832133bbabbbaa9fbdba793456a2827627a7d2b8fb96032fa1e7666d7895832b"
+
+[[package]]
+name = "bumpalo"
+version = "3.12.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c6ed94e98ecff0c12dd1b04c15ec0d7d9458ca8fe806cea6f12954efe74c63b"
+
+[[package]]
+name = "bytemuck"
+version = "1.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "bytes"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
+dependencies = [
+ "serde 1.0.163",
+]
+
+[[package]]
+name = "bzip2"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8"
+dependencies = [
+ "bzip2-sys",
+ "libc",
+]
+
+[[package]]
+name = "bzip2-sys"
+version = "0.1.11+1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "cairo-rs"
+version = "0.16.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3125b15ec28b84c238f6f476c6034016a5f6cc0221cb514ca46c532139fc97d"
+dependencies = [
+ "bitflags",
+ "cairo-sys-rs",
+ "glib 0.16.7",
+ "libc",
+ "once_cell",
+ "thiserror",
+]
+
+[[package]]
+name = "cairo-sys-rs"
+version = "0.16.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c48f4af05fabdcfa9658178e1326efa061853f040ce7d72e33af6885196f421"
+dependencies = [
+ "glib-sys 0.16.3",
+ "libc",
+ "system-deps 6.1.0",
+]
+
+[[package]]
+name = "camino"
+version = "1.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c530edf18f37068ac2d977409ed5cd50d53d73bc653c7647b48eb78976ac9ae2"
+dependencies = [
+ "serde 1.0.163",
+]
+
+[[package]]
+name = "cargo-platform"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cbdb825da8a5df079a43676dbe042702f1707b1109f713a01420fbb4cc71fa27"
+dependencies = [
+ "serde 1.0.163",
+]
+
+[[package]]
+name = "cargo_metadata"
+version = "0.14.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa"
+dependencies = [
+ "camino",
+ "cargo-platform",
+ "semver",
+ "serde 1.0.163",
+ "serde_json 1.0.96",
+]
+
+[[package]]
+name = "cbindgen"
+version = "0.24.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6358dedf60f4d9b8db43ad187391afe959746101346fe51bb978126bec61dfb"
+dependencies = [
+ "clap 3.2.25",
+ "heck 0.4.1",
+ "indexmap",
+ "log",
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+ "serde 1.0.163",
+ "serde_json 1.0.96",
+ "syn 1.0.109",
+ "tempfile",
+ "toml 0.5.11",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+dependencies = [
+ "jobserver",
+]
+
+[[package]]
+name = "cesu8"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
+
+[[package]]
+name = "cexpr"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
+dependencies = [
+ "nom",
+]
+
+[[package]]
+name = "cfg-expr"
+version = "0.15.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c8790cf1286da485c72cf5fc7aeba308438800036ec67d89425924c4807268c9"
+dependencies = [
+ "smallvec",
+ "target-lexicon",
+]
+
+[[package]]
+name = "cfg-if"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chrono"
+version = "0.4.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b"
+dependencies = [
+ "iana-time-zone",
+ "js-sys",
+ "num-integer",
+ "num-traits 0.2.15",
+ "time 0.1.45",
+ "wasm-bindgen",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "cidr-utils"
+version = "0.5.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fdfa36f04861d39453affe1cf084ce2d6554021a84eb6f31ebdeafb6fb92a01c"
+dependencies = [
+ "debug-helper",
+ "num-bigint",
+ "num-traits 0.2.15",
+ "once_cell",
+ "regex",
+]
+
+[[package]]
+name = "cipher"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "clang-sys"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f"
+dependencies = [
+ "glob",
+ "libc",
+ "libloading 0.7.4",
+]
+
+[[package]]
+name = "clap"
+version = "2.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
+dependencies = [
+ "ansi_term",
+ "atty",
+ "bitflags",
+ "strsim 0.8.0",
+ "textwrap 0.11.0",
+ "unicode-width",
+ "vec_map",
+]
+
+[[package]]
+name = "clap"
+version = "3.2.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123"
+dependencies = [
+ "atty",
+ "bitflags",
+ "clap_lex 0.2.4",
+ "indexmap",
+ "strsim 0.10.0",
+ "termcolor",
+ "textwrap 0.16.0",
+]
+
+[[package]]
+name = "clap"
+version = "4.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34d21f9bf1b425d2968943631ec91202fe5e837264063503708b83013f8fc938"
+dependencies = [
+ "clap_builder",
+ "clap_derive",
+ "once_cell",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "914c8c79fb560f238ef6429439a30023c862f7a28e688c58f7203f12b29970bd"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "bitflags",
+ "clap_lex 0.4.1",
+ "strsim 0.10.0",
+]
+
+[[package]]
+name = "clap_derive"
+version = "4.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9644cd56d6b87dbe899ef8b053e331c0637664e9e21a33dfcdc36093f5c5c4"
+dependencies = [
+ "heck 0.4.1",
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5"
+dependencies = [
+ "os_str_bytes",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a2dd5a6fe8c6e3502f568a6353e5273bbb15193ad9a89e457b9970798efbea1"
+
+[[package]]
+name = "clipboard"
+version = "0.1.0"
+dependencies = [
+ "cc",
+ "hbb_common",
+ "lazy_static",
+ "serde 1.0.163",
+ "serde_derive",
+ "thiserror",
+]
+
+[[package]]
+name = "clipboard-win"
+version = "4.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7191c27c2357d9b7ef96baac1773290d4ca63b24205b82a3fd8a0637afcf0362"
+dependencies = [
+ "error-code",
+ "str-buf",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "cloudabi"
+version = "0.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "cmake"
+version = "0.1.50"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a31c789563b815f77f4250caee12365734369f942439b7defd71e18a48197130"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "cocoa"
+version = "0.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a"
+dependencies = [
+ "bitflags",
+ "block",
+ "cocoa-foundation",
+ "core-foundation",
+ "core-graphics",
+ "foreign-types",
+ "libc",
+ "objc",
+]
+
+[[package]]
+name = "cocoa-foundation"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "931d3837c286f56e3c58423ce4eba12d08db2374461a785c86f672b08b5650d6"
+dependencies = [
+ "bitflags",
+ "block",
+ "core-foundation",
+ "core-graphics-types",
+ "foreign-types",
+ "libc",
+ "objc",
+]
+
+[[package]]
+name = "codespan-reporting"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
+dependencies = [
+ "termcolor",
+ "unicode-width",
+]
+
+[[package]]
+name = "color_quant"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
+
+[[package]]
+name = "colorchoice"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
+
+[[package]]
+name = "colored"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4ffc801dacf156c5854b9df4f425a626539c3a6ef7893cc0c5084a23f0b6c59"
+dependencies = [
+ "atty",
+ "lazy_static",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "combine"
+version = "4.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4"
+dependencies = [
+ "bytes",
+ "memchr",
+]
+
+[[package]]
+name = "concurrent-queue"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62ec6771ecfa0762d24683ee5a32ad78487a3d3afdc0fb8cae19d2c5deb50b7c"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "confy"
+version = "0.4.0-2"
+source = "git+https://github.com/open-trade/confy#7855cd3c32b1a60b44e5076ee8f6b4131da10350"
+dependencies = [
+ "directories-next",
+ "serde 1.0.163",
+ "thiserror",
+ "toml 0.5.11",
+]
+
+[[package]]
+name = "console_error_panic_hook"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc"
+dependencies = [
+ "cfg-if 1.0.0",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "const_fn"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fbdcdcb6d86f71c5e97409ad45898af11cbc995b4ee8112d59095a28d376c935"
+
+[[package]]
+name = "const_format"
+version = "0.2.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c990efc7a285731f9a4378d81aff2f0e85a2c8781a05ef0f8baa8dac54d0ff48"
+dependencies = [
+ "const_format_proc_macros",
+]
+
+[[package]]
+name = "const_format_proc_macros"
+version = "0.2.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e026b6ce194a874cb9cf32cd5772d1ef9767cc8fcb5765948d74f37a9d8b2bf6"
+dependencies = [
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+ "unicode-xid 0.2.4",
+]
+
+[[package]]
+name = "constant_time_eq"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
+
+[[package]]
+name = "convert_case"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
+
+[[package]]
+name = "convert_case"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb4a24b1aaf0fd0ce8b45161144d6f42cd91677fd5940fd431183eb023b3a2b8"
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys 0.8.4",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7ca8a5221364ef15ce201e8ed2f609fc312682a8f4e0e3d4aa5879764e0fa3b"
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+
+[[package]]
+name = "core-graphics"
+version = "0.22.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "core-graphics-types",
+ "foreign-types",
+ "libc",
+]
+
+[[package]]
+name = "core-graphics-types"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "foreign-types",
+ "libc",
+]
+
+[[package]]
+name = "coreaudio-rs"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb17e2d1795b1996419648915df94bc7103c28f7b48062d7acf4652fc371b2ff"
+dependencies = [
+ "bitflags",
+ "core-foundation-sys 0.6.2",
+ "coreaudio-sys",
+]
+
+[[package]]
+name = "coreaudio-sys"
+version = "0.2.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f034b2258e6c4ade2f73bf87b21047567fb913ee9550837c2316d139b0262b24"
+dependencies = [
+ "bindgen 0.64.0",
+]
+
+[[package]]
+name = "cpal"
+version = "0.15.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d959d90e938c5493000514b446987c07aed46c668faaa7d34d6c7a67b1a578c"
+dependencies = [
+ "alsa",
+ "core-foundation-sys 0.8.4",
+ "coreaudio-rs",
+ "dasp_sample",
+ "jni 0.19.0",
+ "js-sys",
+ "libc",
+ "mach2",
+ "ndk",
+ "ndk-context",
+ "oboe",
+ "once_cell",
+ "parking_lot",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "windows 0.46.0",
+]
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+dependencies = [
+ "cfg-if 1.0.0",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+dependencies = [
+ "cfg-if 1.0.0",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695"
+dependencies = [
+ "autocfg 1.1.0",
+ "cfg-if 1.0.0",
+ "crossbeam-utils",
+ "memoffset 0.8.0",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-queue"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d1cfb3ea8a53f37c40dea2c7bedcbd88bdfae54f5e2175d6ecaff1c988353add"
+dependencies = [
+ "cfg-if 1.0.0",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "crunchy"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "ctrlc"
+version = "3.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbcf33c2a618cbe41ee43ae6e9f2e48368cd9f9db2896f10167d8d762679f639"
+dependencies = [
+ "nix 0.26.2",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "cxx"
+version = "1.0.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f61f1b6389c3fe1c316bf8a4dccc90a38208354b330925bce1f74a6c4756eb93"
+dependencies = [
+ "cc",
+ "cxxbridge-flags",
+ "cxxbridge-macro",
+ "link-cplusplus",
+]
+
+[[package]]
+name = "cxx-build"
+version = "1.0.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12cee708e8962df2aeb38f594aae5d827c022b6460ac71a7a3e2c3c2aae5a07b"
+dependencies = [
+ "cc",
+ "codespan-reporting",
+ "once_cell",
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+ "scratch",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "cxxbridge-flags"
+version = "1.0.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7944172ae7e4068c533afbb984114a56c46e9ccddda550499caa222902c7f7bb"
+
+[[package]]
+name = "cxxbridge-macro"
+version = "1.0.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5"
+dependencies = [
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "dark-light"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a62007a65515b3cd88c733dd3464431f05d2ad066999a824259d8edc3cf6f645"
+dependencies = [
+ "dconf_rs",
+ "detect-desktop-environment",
+ "dirs 4.0.0",
+ "objc",
+ "rust-ini",
+ "web-sys",
+ "winreg 0.10.1",
+ "zbus",
+ "zvariant",
+]
+
+[[package]]
+name = "dart-sys"
+version = "4.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d8b5680b5c2cc52f50acb2457d9b3a3b58adcca785db13a0e3655626f601de6"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "dasp"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7381b67da416b639690ac77c73b86a7b5e64a29e31d1f75fb3b1102301ef355a"
+dependencies = [
+ "dasp_envelope",
+ "dasp_frame",
+ "dasp_interpolate",
+ "dasp_peak",
+ "dasp_ring_buffer",
+ "dasp_rms",
+ "dasp_sample",
+ "dasp_signal",
+ "dasp_slice",
+ "dasp_window",
+]
+
+[[package]]
+name = "dasp_envelope"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ec617ce7016f101a87fe85ed44180839744265fae73bb4aa43e7ece1b7668b6"
+dependencies = [
+ "dasp_frame",
+ "dasp_peak",
+ "dasp_ring_buffer",
+ "dasp_rms",
+ "dasp_sample",
+]
+
+[[package]]
+name = "dasp_frame"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2a3937f5fe2135702897535c8d4a5553f8b116f76c1529088797f2eee7c5cd6"
+dependencies = [
+ "dasp_sample",
+]
+
+[[package]]
+name = "dasp_interpolate"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fc975a6563bb7ca7ec0a6c784ead49983a21c24835b0bc96eea11ee407c7486"
+dependencies = [
+ "dasp_frame",
+ "dasp_ring_buffer",
+ "dasp_sample",
+]
+
+[[package]]
+name = "dasp_peak"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5cf88559d79c21f3d8523d91250c397f9a15b5fc72fbb3f87fdb0a37b79915bf"
+dependencies = [
+ "dasp_frame",
+ "dasp_sample",
+]
+
+[[package]]
+name = "dasp_ring_buffer"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07d79e19b89618a543c4adec9c5a347fe378a19041699b3278e616e387511ea1"
+
+[[package]]
+name = "dasp_rms"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6c5dcb30b7e5014486e2822537ea2beae50b19722ffe2ed7549ab03774575aa"
+dependencies = [
+ "dasp_frame",
+ "dasp_ring_buffer",
+ "dasp_sample",
+]
+
+[[package]]
+name = "dasp_sample"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c87e182de0887fd5361989c677c4e8f5000cd9491d6d563161a8f3a5519fc7f"
+
+[[package]]
+name = "dasp_signal"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa1ab7d01689c6ed4eae3d38fe1cea08cba761573fbd2d592528d55b421077e7"
+dependencies = [
+ "dasp_envelope",
+ "dasp_frame",
+ "dasp_interpolate",
+ "dasp_peak",
+ "dasp_ring_buffer",
+ "dasp_rms",
+ "dasp_sample",
+ "dasp_window",
+]
+
+[[package]]
+name = "dasp_slice"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e1c7335d58e7baedafa516cb361360ff38d6f4d3f9d9d5ee2a2fc8e27178fa1"
+dependencies = [
+ "dasp_frame",
+ "dasp_sample",
+]
+
+[[package]]
+name = "dasp_window"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "99ded7b88821d2ce4e8b842c9f1c86ac911891ab89443cc1de750cae764c5076"
+dependencies = [
+ "dasp_sample",
+]
+
+[[package]]
+name = "dbus"
+version = "0.9.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bb21987b9fb1613058ba3843121dd18b163b254d8a6e797e144cbac14d96d1b"
+dependencies = [
+ "libc",
+ "libdbus-sys",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "dbus-crossroads"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a4c83437187544ba5142427746835061b330446ca8902eabd70e4afb8f76de0"
+dependencies = [
+ "dbus",
+]
+
+[[package]]
+name = "dconf_rs"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7046468a81e6a002061c01e6a7c83139daf91b11c30e66795b13217c2d885c8b"
+
+[[package]]
+name = "debug-helper"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f578e8e2c440e7297e008bb5486a3a8a194775224bbc23729b0dbdfaeebf162e"
+
+[[package]]
+name = "default-net"
+version = "0.14.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4898b43aed56499fad6b294d15b3e76a51df68079bf492e5daae38ca084e003"
+dependencies = [
+ "dlopen2",
+ "libc",
+ "memalloc",
+ "netlink-packet-core",
+ "netlink-packet-route",
+ "netlink-sys",
+ "once_cell",
+ "system-configuration",
+ "windows 0.32.0",
+]
+
+[[package]]
+name = "delegate"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "082a24a9967533dc5d743c602157637116fc1b52806d694a5a45e6f32567fcdd"
+dependencies = [
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "derivative"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
+dependencies = [
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "derive_more"
+version = "0.99.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321"
+dependencies = [
+ "convert_case 0.4.0",
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+ "rustc_version",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "detect-desktop-environment"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21d8ad60dd5b13a4ee6bd8fa2d5d88965c597c67bce32b5fc49c94f55cb50810"
+
+[[package]]
+name = "digest"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "directories-next"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "339ee130d97a610ea5a5872d2bbb130fdf68884ff09d3028b81bec8a1ac23bbc"
+dependencies = [
+ "cfg-if 1.0.0",
+ "dirs-sys-next",
+]
+
+[[package]]
+name = "dirs"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13aea89a5c93364a98e9b37b2fa237effbb694d5cfe01c5b70941f7eb087d5e3"
+dependencies = [
+ "cfg-if 0.1.10",
+ "dirs-sys 0.3.7",
+]
+
+[[package]]
+name = "dirs"
+version = "4.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059"
+dependencies = [
+ "dirs-sys 0.3.7",
+]
+
+[[package]]
+name = "dirs"
+version = "5.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225"
+dependencies = [
+ "dirs-sys 0.4.1",
+]
+
+[[package]]
+name = "dirs-next"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
+dependencies = [
+ "cfg-if 1.0.0",
+ "dirs-sys-next",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c"
+dependencies = [
+ "libc",
+ "option-ext",
+ "redox_users",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "dirs-sys-next"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "dispatch"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b"
+
+[[package]]
+name = "dlopen"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "71e80ad39f814a9abe68583cd50a2d45c8a67561c3361ab8da240587dda80937"
+dependencies = [
+ "dlopen_derive",
+ "lazy_static",
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "dlopen2"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b121caccfc363e4d9a4589528f3bef7c71b83c6ed01c8dc68cbeeb7fd29ec698"
+dependencies = [
+ "dlopen2_derive",
+ "libc",
+ "once_cell",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "dlopen2_derive"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a09ac8bb8c16a282264c379dffba707b9c998afc7506009137f3c6136888078"
+dependencies = [
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "dlopen_derive"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f236d9e1b1fbd81cea0f9cbdc8dcc7e8ebcd80e6659cd7cb2ad5f6c05946c581"
+dependencies = [
+ "libc",
+ "quote 0.6.13",
+ "syn 0.15.44",
+]
+
+[[package]]
+name = "dlv-list"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0688c2a7f92e427f44895cd63841bff7b29f8d7a1648b9e7e07a4a365b2e1257"
+
+[[package]]
+name = "docopt"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f3f119846c823f9eafcf953a8f6ffb6ed69bf6240883261a7f13b634579a51f"
+dependencies = [
+ "lazy_static",
+ "regex",
+ "serde 1.0.163",
+ "strsim 0.10.0",
+]
+
+[[package]]
+name = "dtoa"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0"
+
+[[package]]
+name = "dylib_virtual_display"
+version = "0.1.0"
+dependencies = [
+ "cc",
+ "hbb_common",
+ "lazy_static",
+ "serde 1.0.163",
+ "serde_derive",
+ "thiserror",
+]
+
+[[package]]
+name = "ed25519"
+version = "1.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7"
+dependencies = [
+ "signature",
+]
+
+[[package]]
+name = "either"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
+
+[[package]]
+name = "embed-resource"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80663502655af01a2902dff3f06869330782267924bf1788410b74edcd93770a"
+dependencies = [
+ "cc",
+ "rustc_version",
+ "toml 0.7.3",
+ "vswhom",
+ "winreg 0.11.0",
+]
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "enigo"
+version = "0.0.14"
+dependencies = [
+ "core-graphics",
+ "hbb_common",
+ "log",
+ "objc",
+ "pkg-config",
+ "rdev",
+ "serde 1.0.163",
+ "serde_derive",
+ "tfc",
+ "unicode-segmentation",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "enum-iterator"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7add3873b5dd076766ee79c8e406ad1a472c385476b9e38849f8eec24f1be689"
+dependencies = [
+ "enum-iterator-derive",
+]
+
+[[package]]
+name = "enum-iterator-derive"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eecf8589574ce9b895052fa12d69af7a233f99e6107f5cb8dd1044f2a17bfdcb"
+dependencies = [
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "enum-map"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "988f0d17a0fa38291e5f41f71ea8d46a5d5497b9054d5a759fae2cbb819f2356"
+dependencies = [
+ "enum-map-derive",
+]
+
+[[package]]
+name = "enum-map-derive"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a4da76b3b6116d758c7ba93f7ec6a35d2e2cf24feda76c6e38a375f4d5c59f2"
+dependencies = [
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "enum_dispatch"
+version = "0.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "11f36e95862220b211a6e2aa5eca09b4fa391b13cd52ceb8035a24bf65a79de2"
+dependencies = [
+ "once_cell",
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "enumflags2"
+version = "0.7.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c041f5090df68b32bcd905365fd51769c8b9d553fe87fde0b683534f10c01bd2"
+dependencies = [
+ "enumflags2_derive",
+ "serde 1.0.163",
+]
+
+[[package]]
+name = "enumflags2_derive"
+version = "0.7.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e9a1f9f7d83e59740248a6e14ecf93929ade55027844dfcea78beafccc15745"
+dependencies = [
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "env_logger"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7"
+dependencies = [
+ "atty",
+ "humantime",
+ "log",
+ "regex",
+ "termcolor",
+]
+
+[[package]]
+name = "env_logger"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0"
+dependencies = [
+ "humantime",
+ "is-terminal",
+ "log",
+ "regex",
+ "termcolor",
+]
+
+[[package]]
+name = "epoll"
+version = "4.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "20df693c700404f7e19d4d6fae6b15215d2913c27955d2b9d6f2c0f537511cd0"
+dependencies = [
+ "bitflags",
+ "libc",
+]
+
+[[package]]
+name = "errno"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "error-code"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64f18991e7bf11e7ffee451b5318b5c1a73c52d0d0ada6e5a3017c8c1ced6a21"
+dependencies = [
+ "libc",
+ "str-buf",
+]
+
+[[package]]
+name = "evdev"
+version = "0.11.5"
+source = "git+https://github.com/fufesou/evdev#cec616e37790293d2cd2aa54a96601ed6b1b35a9"
+dependencies = [
+ "bitvec",
+ "libc",
+ "nix 0.23.2",
+]
+
+[[package]]
+name = "event-listener"
+version = "2.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
+
+[[package]]
+name = "exr"
+version = "1.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bdd2162b720141a91a054640662d3edce3d50a944a50ffca5313cd951abb35b4"
+dependencies = [
+ "bit_field",
+ "flume",
+ "half",
+ "lebe",
+ "miniz_oxide 0.6.2",
+ "rayon-core",
+ "smallvec",
+ "zune-inflate",
+]
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "fdeflate"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d329bdeac514ee06249dabc27877490f17f5d371ec693360768b838e19f3ae10"
+dependencies = [
+ "simd-adler32",
+]
+
+[[package]]
+name = "fern"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9f0c14694cbd524c8720dd69b0e3179344f04ebb5f90f2e4a440c6ea3b2f1ee"
+dependencies = [
+ "chrono",
+ "colored",
+ "log",
+]
+
+[[package]]
+name = "field-offset"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3cf3a800ff6e860c863ca6d4b16fd999db8b752819c1606884047b73e468535"
+dependencies = [
+ "memoffset 0.8.0",
+ "rustc_version",
+]
+
+[[package]]
+name = "filetime"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "redox_syscall 0.2.16",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide 0.7.1",
+]
+
+[[package]]
+name = "flexi_logger"
+version = "0.25.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "611de758a8869ffffa7524aafdb48658c64dae95cdce49654d68a8442e500d89"
+dependencies = [
+ "chrono",
+ "crossbeam-channel",
+ "crossbeam-queue",
+ "glob",
+ "is-terminal",
+ "lazy_static",
+ "log",
+ "nu-ansi-term",
+ "regex",
+ "thiserror",
+]
+
+[[package]]
+name = "flume"
+version = "0.10.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+ "nanorand",
+ "pin-project",
+ "spin 0.9.8",
+]
+
+[[package]]
+name = "flutter_rust_bridge"
+version = "1.75.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "907f6624c3c6a5a1421b1c1eb9c2881104607730d5f67ce7ae50051efa7a2cf3"
+dependencies = [
+ "allo-isolate",
+ "anyhow",
+ "build-target",
+ "bytemuck",
+ "cc",
+ "chrono",
+ "console_error_panic_hook",
+ "dart-sys",
+ "flutter_rust_bridge_macros",
+ "js-sys",
+ "lazy_static",
+ "libc",
+ "log",
+ "parking_lot",
+ "threadpool",
+ "uuid",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "flutter_rust_bridge_codegen"
+version = "1.75.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49fdb2728cabeb86d1271ed4398ee1518b4a3d9f659756cf5021e5c5a91e3f25"
+dependencies = [
+ "anyhow",
+ "atty",
+ "cargo_metadata",
+ "cbindgen",
+ "chrono",
+ "clap 4.2.7",
+ "convert_case 0.5.0",
+ "delegate",
+ "enum-iterator",
+ "enum_dispatch",
+ "fern",
+ "itertools 0.10.5",
+ "lazy_static",
+ "log",
+ "pathdiff",
+ "quote 1.0.27",
+ "regex",
+ "serde 1.0.163",
+ "serde_yaml",
+ "strum_macros 0.24.3",
+ "syn 1.0.109",
+ "tempfile",
+ "thiserror",
+ "toml 0.5.11",
+ "topological-sort",
+]
+
+[[package]]
+name = "flutter_rust_bridge_macros"
+version = "1.75.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de66560e226cb4a5da7ab042a0872c0be4e165288f5bcde809a08f3f5ca22962"
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "fon"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad46a0e6c9bc688823a742aa969b5c08fdc56c2a436ee00d5c6fbcb5982c55c4"
+dependencies = [
+ "libm",
+]
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "fruitbasket"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "898289b8e0528c84fb9b88f15ac9d5109bcaf23e0e49bb6f64deee0d86b6a351"
+dependencies = [
+ "dirs 2.0.2",
+ "objc",
+ "objc-foundation",
+ "objc_id",
+ "time 0.1.45",
+]
+
+[[package]]
+name = "fuchsia-cprng"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
+
+[[package]]
+name = "funty"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c"
+
+[[package]]
+name = "futures"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
+
+[[package]]
+name = "futures-lite"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce"
+dependencies = [
+ "fastrand",
+ "futures-core",
+ "futures-io",
+ "memchr",
+ "parking",
+ "pin-project-lite",
+ "waker-fn",
+]
+
+[[package]]
+name = "futures-macro"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
+dependencies = [
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
+
+[[package]]
+name = "futures-task"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
+
+[[package]]
+name = "futures-util"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "gdk"
+version = "0.16.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa9cb33da481c6c040404a11f8212d193889e9b435db2c14fd86987f630d3ce1"
+dependencies = [
+ "bitflags",
+ "cairo-rs",
+ "gdk-pixbuf",
+ "gdk-sys",
+ "gio",
+ "glib 0.16.7",
+ "libc",
+ "pango",
+]
+
+[[package]]
+name = "gdk-pixbuf"
+version = "0.16.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3578c60dee9d029ad86593ed88cb40f35c1b83360e12498d055022385dd9a05"
+dependencies = [
+ "bitflags",
+ "gdk-pixbuf-sys",
+ "gio",
+ "glib 0.16.7",
+ "libc",
+]
+
+[[package]]
+name = "gdk-pixbuf-sys"
+version = "0.16.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3092cf797a5f1210479ea38070d9ae8a5b8e9f8f1be9f32f4643c529c7d70016"
+dependencies = [
+ "gio-sys",
+ "glib-sys 0.16.3",
+ "gobject-sys 0.16.3",
+ "libc",
+ "system-deps 6.1.0",
+]
+
+[[package]]
+name = "gdk-sys"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d76354f97a913e55b984759a997b693aa7dc71068c9e98bcce51aa167a0a5c5a"
+dependencies = [
+ "cairo-sys-rs",
+ "gdk-pixbuf-sys",
+ "gio-sys",
+ "glib-sys 0.16.3",
+ "gobject-sys 0.16.3",
+ "libc",
+ "pango-sys",
+ "pkg-config",
+ "system-deps 6.1.0",
+]
+
+[[package]]
+name = "gdkwayland-sys"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4511710212ed3020b61a8622a37aa6f0dd2a84516575da92e9b96928dcbe83ba"
+dependencies = [
+ "gdk-sys",
+ "glib-sys 0.16.3",
+ "gobject-sys 0.16.3",
+ "libc",
+ "pkg-config",
+ "system-deps 6.1.0",
+]
+
+[[package]]
+name = "gdkx11-sys"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9fa2bf8b5b8c414bc5d05e48b271896d0fd3ddb57464a3108438082da61de6af"
+dependencies = [
+ "gdk-sys",
+ "glib-sys 0.16.3",
+ "libc",
+ "system-deps 6.1.0",
+ "x11 2.21.0",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "gethostname"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e"
+dependencies = [
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4"
+dependencies = [
+ "cfg-if 1.0.0",
+ "js-sys",
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "gif"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80792593675e051cf94a4b111980da2ba60d4a83e43e0048c5693baab3977045"
+dependencies = [
+ "color_quant",
+ "weezl",
+]
+
+[[package]]
+name = "gimli"
+version = "0.27.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4"
+
+[[package]]
+name = "gio"
+version = "0.16.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a1c84b4534a290a29160ef5c6eff2a9c95833111472e824fc5cb78b513dd092"
+dependencies = [
+ "bitflags",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-util",
+ "gio-sys",
+ "glib 0.16.7",
+ "libc",
+ "once_cell",
+ "pin-project-lite",
+ "smallvec",
+ "thiserror",
+]
+
+[[package]]
+name = "gio-sys"
+version = "0.16.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e9b693b8e39d042a95547fc258a7b07349b1f0b48f4b2fa3108ba3c51c0b5229"
+dependencies = [
+ "glib-sys 0.16.3",
+ "gobject-sys 0.16.3",
+ "libc",
+ "system-deps 6.1.0",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "git2"
+version = "0.16.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccf7f68c2995f392c49fffb4f95ae2c873297830eb25c6bc4c114ce8f4562acc"
+dependencies = [
+ "bitflags",
+ "libc",
+ "libgit2-sys",
+ "log",
+ "url",
+]
+
+[[package]]
+name = "glib"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c685013b7515e668f1b57a165b009d4d28cb139a8a989bbd699c10dad29d0c5"
+dependencies = [
+ "bitflags",
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-task",
+ "futures-util",
+ "glib-macros 0.10.1",
+ "glib-sys 0.10.1",
+ "gobject-sys 0.10.0",
+ "libc",
+ "once_cell",
+]
+
+[[package]]
+name = "glib"
+version = "0.16.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ddd4df61a866ed7259d6189b8bcb1464989a77f1d85d25d002279bbe9dd38b2f"
+dependencies = [
+ "bitflags",
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-task",
+ "futures-util",
+ "gio-sys",
+ "glib-macros 0.16.8",
+ "glib-sys 0.16.3",
+ "gobject-sys 0.16.3",
+ "libc",
+ "once_cell",
+ "smallvec",
+ "thiserror",
+]
+
+[[package]]
+name = "glib-macros"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41486a26d1366a8032b160b59065a59fb528530a46a49f627e7048fb8c064039"
+dependencies = [
+ "anyhow",
+ "heck 0.3.3",
+ "itertools 0.9.0",
+ "proc-macro-crate 0.1.5",
+ "proc-macro-error",
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "glib-macros"
+version = "0.16.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb1a9325847aa46f1e96ffea37611b9d51fc4827e67f79e7de502a297560a67b"
+dependencies = [
+ "anyhow",
+ "heck 0.4.1",
+ "proc-macro-crate 1.3.1",
+ "proc-macro-error",
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "glib-sys"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7e9b997a66e9a23d073f2b1abb4dbfc3925e0b8952f67efd8d9b6e168e4cdc1"
+dependencies = [
+ "libc",
+ "system-deps 1.3.2",
+]
+
+[[package]]
+name = "glib-sys"
+version = "0.16.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61a4f46316d06bfa33a7ac22df6f0524c8be58e3db2d9ca99ccb1f357b62a65"
+dependencies = [
+ "libc",
+ "system-deps 6.1.0",
+]
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "gobject-sys"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "952133b60c318a62bf82ee75b93acc7e84028a093e06b9e27981c2b6fe68218c"
+dependencies = [
+ "glib-sys 0.10.1",
+ "libc",
+ "system-deps 1.3.2",
+]
+
+[[package]]
+name = "gobject-sys"
+version = "0.16.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3520bb9c07ae2a12c7f2fbb24d4efc11231c8146a86956413fb1a79bb760a0f1"
+dependencies = [
+ "glib-sys 0.16.3",
+ "libc",
+ "system-deps 6.1.0",
+]
+
+[[package]]
+name = "gstreamer"
+version = "0.16.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ff5d0f7ff308ae37e6eb47b6ded17785bdea06e438a708cd09e0288c1862f33"
+dependencies = [
+ "bitflags",
+ "cfg-if 1.0.0",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "glib 0.10.3",
+ "glib-sys 0.10.1",
+ "gobject-sys 0.10.0",
+ "gstreamer-sys",
+ "libc",
+ "muldiv",
+ "num-rational 0.3.2",
+ "once_cell",
+ "paste",
+ "pretty-hex",
+ "thiserror",
+]
+
+[[package]]
+name = "gstreamer-app"
+version = "0.16.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc80888271338c3ede875d8cafc452eb207476ff5539dcbe0018a8f5b827af0e"
+dependencies = [
+ "bitflags",
+ "futures-core",
+ "futures-sink",
+ "glib 0.10.3",
+ "glib-sys 0.10.1",
+ "gobject-sys 0.10.0",
+ "gstreamer",
+ "gstreamer-app-sys",
+ "gstreamer-base",
+ "gstreamer-sys",
+ "libc",
+ "once_cell",
+]
+
+[[package]]
+name = "gstreamer-app-sys"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "813f64275c9e7b33b828b9efcf9dfa64b95996766d4de996e84363ac65b87e3d"
+dependencies = [
+ "glib-sys 0.10.1",
+ "gstreamer-base-sys",
+ "gstreamer-sys",
+ "libc",
+ "system-deps 1.3.2",
+]
+
+[[package]]
+name = "gstreamer-base"
+version = "0.16.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bafd01c56f59cb10f4b5a10f97bb4bdf8c2b2784ae5b04da7e2d400cf6e6afcf"
+dependencies = [
+ "bitflags",
+ "glib 0.10.3",
+ "glib-sys 0.10.1",
+ "gobject-sys 0.10.0",
+ "gstreamer",
+ "gstreamer-base-sys",
+ "gstreamer-sys",
+ "libc",
+]
+
+[[package]]
+name = "gstreamer-base-sys"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4b7b6dc2d6e160a1ae28612f602bd500b3fa474ce90bf6bb2f08072682beef5"
+dependencies = [
+ "glib-sys 0.10.1",
+ "gobject-sys 0.10.0",
+ "gstreamer-sys",
+ "libc",
+ "system-deps 1.3.2",
+]
+
+[[package]]
+name = "gstreamer-sys"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc1f154082d01af5718c5f8a8eb4f565a4ea5586ad8833a8fc2c2aa6844b601d"
+dependencies = [
+ "glib-sys 0.10.1",
+ "gobject-sys 0.10.0",
+ "libc",
+ "system-deps 1.3.2",
+]
+
+[[package]]
+name = "gstreamer-video"
+version = "0.16.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7bbb1485d87469849ec45c08e03c2f280d3ea20ff3c439d03185be54e3ce98e"
+dependencies = [
+ "bitflags",
+ "futures-channel",
+ "futures-util",
+ "glib 0.10.3",
+ "glib-sys 0.10.1",
+ "gobject-sys 0.10.0",
+ "gstreamer",
+ "gstreamer-base",
+ "gstreamer-base-sys",
+ "gstreamer-sys",
+ "gstreamer-video-sys",
+ "libc",
+ "once_cell",
+]
+
+[[package]]
+name = "gstreamer-video-sys"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92347e46438007d6a2386302125f62cb9df6769cdacb931af5c0f12c1ee21de4"
+dependencies = [
+ "glib-sys 0.10.1",
+ "gobject-sys 0.10.0",
+ "gstreamer-base-sys",
+ "gstreamer-sys",
+ "libc",
+ "system-deps 1.3.2",
+]
+
+[[package]]
+name = "gtk"
+version = "0.16.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4d3507d43908c866c805f74c9dd593c0ce7ba5c38e576e41846639cdcd4bee6"
+dependencies = [
+ "atk",
+ "bitflags",
+ "cairo-rs",
+ "field-offset",
+ "futures-channel",
+ "gdk",
+ "gdk-pixbuf",
+ "gio",
+ "glib 0.16.7",
+ "gtk-sys",
+ "gtk3-macros",
+ "libc",
+ "once_cell",
+ "pango",
+ "pkg-config",
+]
+
+[[package]]
+name = "gtk-sys"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89b5f8946685d5fe44497007786600c2f368ff6b1e61a16251c89f72a97520a3"
+dependencies = [
+ "atk-sys",
+ "cairo-sys-rs",
+ "gdk-pixbuf-sys",
+ "gdk-sys",
+ "gio-sys",
+ "glib-sys 0.16.3",
+ "gobject-sys 0.16.3",
+ "libc",
+ "pango-sys",
+ "system-deps 6.1.0",
+]
+
+[[package]]
+name = "gtk3-macros"
+version = "0.16.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "096eb63c6fedf03bafe65e5924595785eaf1bcb7200dac0f2cbe9c9738f05ad8"
+dependencies = [
+ "anyhow",
+ "proc-macro-crate 1.3.1",
+ "proc-macro-error",
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "h2"
+version = "0.3.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17f8a914c2987b688368b5138aa05321db91f4090cf26118185672ad588bce21"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "half"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02b4af3693f1b705df946e9fe5631932443781d0aabb423b62fcd4d73f6d2fd0"
+dependencies = [
+ "crunchy",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+dependencies = [
+ "ahash",
+]
+
+[[package]]
+name = "hbb_common"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "backtrace",
+ "bytes",
+ "chrono",
+ "confy",
+ "directories-next",
+ "dirs-next",
+ "dlopen",
+ "env_logger 0.10.0",
+ "filetime",
+ "flexi_logger",
+ "futures",
+ "futures-util",
+ "lazy_static",
+ "libc",
+ "log",
+ "mac_address",
+ "machine-uid",
+ "osascript",
+ "protobuf",
+ "protobuf-codegen",
+ "quinn",
+ "rand 0.8.5",
+ "regex",
+ "serde 1.0.163",
+ "serde_derive",
+ "serde_json 1.0.96",
+ "socket2 0.3.19",
+ "sodiumoxide",
+ "sysinfo",
+ "tokio",
+ "tokio-socks",
+ "tokio-util",
+ "toml 0.7.3",
+ "uuid",
+ "winapi 0.3.9",
+ "zstd 0.12.3+zstd.1.5.2",
+]
+
+[[package]]
+name = "heck"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
+name = "hmac"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
+dependencies = [
+ "digest",
+]
+
+[[package]]
+name = "hound"
+version = "3.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d13cdbd5dbb29f9c88095bbdc2590c9cba0d0a1269b983fef6b2cdd7e9f4db1"
+
+[[package]]
+name = "http"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa 1.0.6",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
+
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[package]]
+name = "hwcodec"
+version = "0.1.1"
+source = "git+https://github.com/21pages/hwcodec?branch=stable#82cdc15457e42feaf14e1b38622506b2d54baf76"
+dependencies = [
+ "bindgen 0.59.2",
+ "cc",
+ "log",
+ "serde 1.0.163",
+ "serde_derive",
+ "serde_json 1.0.96",
+]
+
+[[package]]
+name = "hyper"
+version = "0.14.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab302d72a6f11a3b910431ff93aae7e773078c769f0a3ef15fb9ec692ed147d4"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa 1.0.6",
+ "pin-project-lite",
+ "socket2 0.4.9",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-rustls"
+version = "0.24.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0646026eb1b3eea4cd9ba47912ea5ce9cc07713d105b1a14698f4e6433d348b7"
+dependencies = [
+ "http",
+ "hyper",
+ "rustls 0.21.2",
+ "tokio",
+ "tokio-rustls",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0722cd7114b7de04316e7ea5456a0bbb20e4adb46fd27a3697adb812cff0f37c"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys 0.8.4",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "windows 0.48.0",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca"
+dependencies = [
+ "cxx",
+ "cxx-build",
+]
+
+[[package]]
+name = "idna"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "image"
+version = "0.24.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "527909aa81e20ac3a44803521443a765550f09b5130c2c2fa1ea59c2f8f50a3a"
+dependencies = [
+ "bytemuck",
+ "byteorder",
+ "color_quant",
+ "exr",
+ "gif",
+ "jpeg-decoder",
+ "num-rational 0.4.1",
+ "num-traits 0.2.15",
+ "png",
+ "qoi",
+ "tiff",
+]
+
+[[package]]
+name = "impersonate_system"
+version = "0.1.0"
+source = "git+https://github.com/21pages/impersonate-system#84b401893d5b6628c8b33b295328d13fbbe2674b"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "include_dir"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18762faeff7122e89e0857b02f7ce6fcc0d101d5e9ad2ad7846cc01d61b7f19e"
+dependencies = [
+ "include_dir_macros",
+]
+
+[[package]]
+name = "include_dir_macros"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b139284b5cf57ecfa712bcc66950bb635b31aff41c188e8a4cfc758eca374a3f"
+dependencies = [
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+dependencies = [
+ "autocfg 1.1.0",
+ "hashbrown",
+]
+
+[[package]]
+name = "inotify"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abf888f9575c290197b2c948dc9e9ff10bd1a39ad1ea8585f734585fa6b9d3f9"
+dependencies = [
+ "bitflags",
+ "inotify-sys",
+ "libc",
+]
+
+[[package]]
+name = "inotify-sys"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f"
+
+[[package]]
+name = "is-terminal"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "io-lifetimes",
+ "rustix",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "is_debug"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06d198e9919d9822d5f7083ba8530e04de87841eaf21ead9af8f2304efd57c89"
+
+[[package]]
+name = "itertools"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8324a32baf01e2ae060e9de58ed0bc2320c9a2833491ee36cd3b4c414de4db8c"
+
+[[package]]
+name = "itoa"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
+
+[[package]]
+name = "jni"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c6df18c2e3db7e453d3c6ac5b3e9d5182664d28788126d39b91f2d1e22b017ec"
+dependencies = [
+ "cesu8",
+ "combine",
+ "jni-sys",
+ "log",
+ "thiserror",
+ "walkdir",
+]
+
+[[package]]
+name = "jni"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "039022cdf4d7b1cf548d31f60ae783138e5fd42013f6271049d7df7afadef96c"
+dependencies = [
+ "cesu8",
+ "combine",
+ "jni-sys",
+ "log",
+ "thiserror",
+ "walkdir",
+]
+
+[[package]]
+name = "jni"
+version = "0.21.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97"
+dependencies = [
+ "cesu8",
+ "cfg-if 1.0.0",
+ "combine",
+ "jni-sys",
+ "log",
+ "thiserror",
+ "walkdir",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "jni-sys"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
+
+[[package]]
+name = "jobserver"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "jpeg-decoder"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e"
+dependencies = [
+ "rayon",
+]
+
+[[package]]
+name = "js-sys"
+version = "0.3.62"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68c16e1bfd491478ab155fd8b4896b86f9ede344949b641e61501e07c2b8b4d5"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "keepawake"
+version = "0.4.3"
+source = "git+https://github.com/rustdesk-org/keepawake-rs#ac395ef826b32a077bc5d2fe108cf71fde8fe2e6"
+dependencies = [
+ "anyhow",
+ "apple-sys",
+ "cfg-if 1.0.0",
+ "core-foundation",
+ "shadow-rs",
+ "windows 0.48.0",
+ "winres",
+ "zbus",
+]
+
+[[package]]
+name = "kernel32-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
+dependencies = [
+ "winapi 0.2.8",
+ "winapi-build",
+]
+
+[[package]]
+name = "keyboard-types"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7668b7cff6a51fe61cdde64cd27c8a220786f399501b57ebe36f7d8112fd68"
+dependencies = [
+ "bitflags",
+ "serde 1.0.163",
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "lazycell"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
+
+[[package]]
+name = "lebe"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8"
+
+[[package]]
+name = "libappindicator"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89e1edfdc9b0853358306c6dfb4b77c79c779174256fe93d80c0b5ebca451a2f"
+dependencies = [
+ "glib 0.16.7",
+ "gtk",
+ "gtk-sys",
+ "libappindicator-sys",
+ "log",
+]
+
+[[package]]
+name = "libappindicator-sys"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08fcb2bea89cee9613982501ec83eaa2d09256b24540ae463c52a28906163918"
+dependencies = [
+ "gtk-sys",
+ "libloading 0.7.4",
+ "once_cell",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.144"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1"
+
+[[package]]
+name = "libdbus-sys"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06085512b750d640299b79be4bad3d2fa90a9c00b1fd9e1b46364f66f0485c72"
+dependencies = [
+ "pkg-config",
+]
+
+[[package]]
+name = "libgit2-sys"
+version = "0.14.2+1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f3d95f6b51075fe9810a7ae22c7095f12b98005ab364d8544797a825ce946a4"
+dependencies = [
+ "cc",
+ "libc",
+ "libz-sys",
+ "pkg-config",
+]
+
+[[package]]
+name = "libloading"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f"
+dependencies = [
+ "cfg-if 1.0.0",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "libloading"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d580318f95776505201b28cf98eb1fa5e4be3b689633ba6a3e6cd880ff22d8cb"
+dependencies = [
+ "cfg-if 1.0.0",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "libm"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb"
+
+[[package]]
+name = "libpulse-binding"
+version = "2.27.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1745b20bfc194ac12ef828f144f0ec2d4a7fe993281fa3567a0bd4969aee6890"
+dependencies = [
+ "bitflags",
+ "libc",
+ "libpulse-sys",
+ "num-derive",
+ "num-traits 0.2.15",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "libpulse-simple-binding"
+version = "2.27.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ced94199e6e44133431374e4043f34e1f0697ebfb7b7d6c244a65bfaedf0e31"
+dependencies = [
+ "libpulse-binding",
+ "libpulse-simple-sys",
+ "libpulse-sys",
+]
+
+[[package]]
+name = "libpulse-simple-sys"
+version = "1.20.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "84e423d9c619c908ce9b4916080e65ab586ca55b8c4939379f15e6e72fb43842"
+dependencies = [
+ "libpulse-sys",
+ "pkg-config",
+]
+
+[[package]]
+name = "libpulse-sys"
+version = "1.20.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2191e6880818d1df4cf72eac8e91dce7a5a52ba0da4b2a5cdafabc22b937eadb"
+dependencies = [
+ "libc",
+ "num-derive",
+ "num-traits 0.2.15",
+ "pkg-config",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "libsamplerate-sys"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28853b399f78f8281cd88d333b54a63170c4275f6faea66726a2bea5cca72e0d"
+dependencies = [
+ "cmake",
+]
+
+[[package]]
+name = "libsodium-sys"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b779387cd56adfbc02ea4a668e704f729be8d6a6abd2c27ca5ee537849a92fd"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "walkdir",
+]
+
+[[package]]
+name = "libxdo"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00333b8756a3d28e78def82067a377de7fa61b24909000aeaa2b446a948d14db"
+dependencies = [
+ "libxdo-sys",
+]
+
+[[package]]
+name = "libxdo-sys"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db23b9e7e2b7831bbd8aac0bbeeeb7b68cbebc162b227e7052e8e55829a09212"
+dependencies = [
+ "libc",
+ "x11 2.21.0",
+]
+
+[[package]]
+name = "libz-sys"
+version = "1.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56ee889ecc9568871456d42f603d6a0ce59ff328d291063a45cbdf0036baf6db"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "line-wrap"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9"
+dependencies = [
+ "safemem",
+]
+
+[[package]]
+name = "link-cplusplus"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "linked-hash-map"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ece97ea872ece730aed82664c424eb4c8291e1ff2480247ccf7409044bc6479f"
+
+[[package]]
+name = "lock_api"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df"
+dependencies = [
+ "autocfg 1.1.0",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "mac_address"
+version = "1.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b238e3235c8382b7653c6408ed1b08dd379bdb9fdf990fb0bbae3db2cc0ae963"
+dependencies = [
+ "nix 0.23.2",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "mach2"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d0d1830bcd151a6fc4aea1369af235b36c1528fe976b8ff678683c9995eade8"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "machine-uid"
+version = "0.3.0"
+source = "git+https://github.com/21pages/machine-uid#381ff579c1dc3a6c54db9dfec47c44bcb0246542"
+dependencies = [
+ "bindgen 0.59.2",
+ "cc",
+ "winreg 0.11.0",
+]
+
+[[package]]
+name = "magnum-opus"
+version = "0.4.0"
+source = "git+https://github.com/rustdesk/magnum-opus#5cd2bf989c148662fa3a2d9d539a71d71fd1d256"
+dependencies = [
+ "bindgen 0.59.2",
+ "pkg-config",
+ "target_build_utils",
+]
+
+[[package]]
+name = "malloc_buf"
+version = "0.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "md5"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771"
+
+[[package]]
+name = "memalloc"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df39d232f5c40b0891c10216992c2f250c054105cb1e56f0fc9032db6203ecc1"
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memoffset"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
+dependencies = [
+ "autocfg 1.1.0",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4"
+dependencies = [
+ "autocfg 1.1.0",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1"
+dependencies = [
+ "autocfg 1.1.0",
+]
+
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+ "simd-adler32",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9"
+dependencies = [
+ "libc",
+ "log",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "miow"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52ffbca2f655e33c08be35d87278e5b18b89550a37dbd598c20db92f6a471123"
+dependencies = [
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "mouce"
+version = "0.2.1"
+source = "git+https://github.com/fufesou/mouce.git#ed83800d532b95d70e39915314f6052aa433e9b9"
+dependencies = [
+ "glob",
+]
+
+[[package]]
+name = "muda"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3c820db003e601413e835a33b10cf51452b6415ef34ff1d862401826431c675"
+dependencies = [
+ "cocoa",
+ "crossbeam-channel",
+ "gdk",
+ "gdk-pixbuf",
+ "gtk",
+ "keyboard-types",
+ "libxdo",
+ "objc",
+ "once_cell",
+ "png",
+ "thiserror",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "muldiv"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0419348c027fa7be448d2ae7ea0e4e04c2334c31dc4e74ab29f00a2a7ca69204"
+
+[[package]]
+name = "nanorand"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "ndk"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "451422b7e4718271c8b5b3aadf5adedba43dc76312454b387e98fae0fc951aa0"
+dependencies = [
+ "bitflags",
+ "jni-sys",
+ "ndk-sys",
+ "num_enum",
+ "raw-window-handle",
+ "thiserror",
+]
+
+[[package]]
+name = "ndk-context"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b"
+
+[[package]]
+name = "ndk-sys"
+version = "0.4.1+23.1.7779620"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3cf2aae958bd232cac5069850591667ad422d263686d75b52a065f9badeee5a3"
+dependencies = [
+ "jni-sys",
+]
+
+[[package]]
+name = "netlink-packet-core"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e5cf0b54effda4b91615c40ff0fd12d0d4c9a6e0f5116874f03941792ff535a"
+dependencies = [
+ "anyhow",
+ "byteorder",
+ "libc",
+ "netlink-packet-utils",
+]
+
+[[package]]
+name = "netlink-packet-route"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea993e32c77d87f01236c38f572ecb6c311d592e56a06262a007fd2a6e31253c"
+dependencies = [
+ "anyhow",
+ "bitflags",
+ "byteorder",
+ "libc",
+ "netlink-packet-core",
+ "netlink-packet-utils",
+]
+
+[[package]]
+name = "netlink-packet-utils"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ede8a08c71ad5a95cdd0e4e52facd37190977039a4704eb82a283f713747d34"
+dependencies = [
+ "anyhow",
+ "byteorder",
+ "paste",
+ "thiserror",
+]
+
+[[package]]
+name = "netlink-sys"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6471bf08e7ac0135876a9581bf3217ef0333c191c128d34878079f42ee150411"
+dependencies = [
+ "bytes",
+ "libc",
+ "log",
+]
+
+[[package]]
+name = "nix"
+version = "0.23.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f3790c00a0150112de0f4cd161e3d7fc4b2d8a5542ffc35f099a2562aecb35c"
+dependencies = [
+ "bitflags",
+ "cc",
+ "cfg-if 1.0.0",
+ "libc",
+ "memoffset 0.6.5",
+]
+
+[[package]]
+name = "nix"
+version = "0.24.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069"
+dependencies = [
+ "bitflags",
+ "cfg-if 1.0.0",
+ "libc",
+ "memoffset 0.6.5",
+]
+
+[[package]]
+name = "nix"
+version = "0.26.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a"
+dependencies = [
+ "bitflags",
+ "cfg-if 1.0.0",
+ "libc",
+ "memoffset 0.7.1",
+ "static_assertions",
+]
+
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "nom8"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae01545c9c7fc4486ab7debaf2aad7003ac19431791868fb2e8066df97fad2f8"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "ntapi"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "nu-ansi-term"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
+dependencies = [
+ "overload",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "num-bigint"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f"
+dependencies = [
+ "autocfg 1.1.0",
+ "num-integer",
+ "num-traits 0.2.15",
+]
+
+[[package]]
+name = "num-complex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02e0d21255c828d6f128a1e41534206671e8c3ea0c62f32291e808dc82cff17d"
+dependencies = [
+ "num-traits 0.2.15",
+]
+
+[[package]]
+name = "num-derive"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d"
+dependencies = [
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg 1.1.0",
+ "num-traits 0.2.15",
+]
+
+[[package]]
+name = "num-rational"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07"
+dependencies = [
+ "autocfg 1.1.0",
+ "num-integer",
+ "num-traits 0.2.15",
+]
+
+[[package]]
+name = "num-rational"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0"
+dependencies = [
+ "autocfg 1.1.0",
+ "num-integer",
+ "num-traits 0.2.15",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.1.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31"
+dependencies = [
+ "num-traits 0.2.15",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+dependencies = [
+ "autocfg 1.1.0",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
+dependencies = [
+ "hermit-abi 0.2.6",
+ "libc",
+]
+
+[[package]]
+name = "num_enum"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9"
+dependencies = [
+ "num_enum_derive",
+]
+
+[[package]]
+name = "num_enum_derive"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799"
+dependencies = [
+ "proc-macro-crate 1.3.1",
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "num_threads"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "objc"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
+dependencies = [
+ "malloc_buf",
+ "objc_exception",
+]
+
+[[package]]
+name = "objc-foundation"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9"
+dependencies = [
+ "block",
+ "objc",
+ "objc_id",
+]
+
+[[package]]
+name = "objc_exception"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "objc_id"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b"
+dependencies = [
+ "objc",
+]
+
+[[package]]
+name = "object"
+version = "0.30.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "oboe"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8868cc237ee02e2d9618539a23a8d228b9bb3fc2e7a5b11eed3831de77c395d0"
+dependencies = [
+ "jni 0.20.0",
+ "ndk",
+ "ndk-context",
+ "num-derive",
+ "num-traits 0.2.15",
+ "oboe-sys",
+]
+
+[[package]]
+name = "oboe-sys"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f44155e7fb718d3cfddcf70690b2b51ac4412f347cd9e4fbe511abe9cd7b5f2"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+
+[[package]]
+name = "opaque-debug"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "option-ext"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
+
+[[package]]
+name = "ordered-multimap"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccd746e37177e1711c20dd619a1620f34f5c8b569c53590a72dedd5344d8924a"
+dependencies = [
+ "dlv-list",
+ "hashbrown",
+]
+
+[[package]]
+name = "ordered-stream"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "os-version"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a8a1fed76ac765e39058ca106b6229a93c5a60292a1bd4b602ce2be11e1c020"
+dependencies = [
+ "anyhow",
+ "plist",
+ "uname",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "os_str_bytes"
+version = "6.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ceedf44fb00f2d1984b0bc98102627ce622e083e49a5bacdb3e514fa4238e267"
+
+[[package]]
+name = "osascript"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38731fa859ef679f1aec66ca9562165926b442f298467f76f5990f431efe87dc"
+dependencies = [
+ "serde 1.0.163",
+ "serde_derive",
+ "serde_json 1.0.96",
+]
+
+[[package]]
+name = "overload"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
+
+[[package]]
+name = "pam"
+version = "0.7.0"
+source = "git+https://github.com/fufesou/pam#10da2cbbabe32cbc9de22a66abe44738e7ec0ea0"
+dependencies = [
+ "libc",
+ "pam-macros",
+ "pam-sys",
+ "users 0.10.0",
+]
+
+[[package]]
+name = "pam-macros"
+version = "0.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c94f3b9b97df3c6d4e51a14916639b24e02c7d15d1dba686ce9b1118277cb811"
+dependencies = [
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "pam-sys"
+version = "1.0.0-alpha4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e9dfd42858f6a6bb1081079fd9dc259ca3e2aaece6cb689fd36b1058046c969"
+dependencies = [
+ "bindgen 0.59.2",
+ "libc",
+]
+
+[[package]]
+name = "pango"
+version = "0.16.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cdff66b271861037b89d028656184059e03b0b6ccb36003820be19f7200b1e94"
+dependencies = [
+ "bitflags",
+ "gio",
+ "glib 0.16.7",
+ "libc",
+ "once_cell",
+ "pango-sys",
+]
+
+[[package]]
+name = "pango-sys"
+version = "0.16.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e134909a9a293e04d2cc31928aa95679c5e4df954d0b85483159bd20d8f047f"
+dependencies = [
+ "glib-sys 0.16.3",
+ "gobject-sys 0.16.3",
+ "libc",
+ "system-deps 6.1.0",
+]
+
+[[package]]
+name = "parity-tokio-ipc"
+version = "0.7.3-2"
+source = "git+https://github.com/open-trade/parity-tokio-ipc#a5b7861249107cbacc856cd43507cb95f40aef6e"
+dependencies = [
+ "futures",
+ "libc",
+ "log",
+ "miow",
+ "rand 0.8.5",
+ "tokio",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "parking"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14f2252c834a40ed9bb5422029649578e63aa341ac401f74e719dd1afda8394e"
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "redox_syscall 0.2.16",
+ "smallvec",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "password-hash"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700"
+dependencies = [
+ "base64ct",
+ "rand_core 0.6.4",
+ "subtle",
+]
+
+[[package]]
+name = "paste"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79"
+
+[[package]]
+name = "pathdiff"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd"
+
+[[package]]
+name = "pbkdf2"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917"
+dependencies = [
+ "digest",
+ "hmac",
+ "password-hash",
+ "sha2",
+]
+
+[[package]]
+name = "peeking_take_while"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
+
+[[package]]
+name = "percent-encoding"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
+
+[[package]]
+name = "phf"
+version = "0.7.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b3da44b85f8e8dfaec21adae67f95d93244b2ecf6ad2a692320598dcc8e6dd18"
+dependencies = [
+ "phf_shared",
+]
+
+[[package]]
+name = "phf_codegen"
+version = "0.7.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b03e85129e324ad4166b06b2c7491ae27fe3ec353af72e72cd1654c7225d517e"
+dependencies = [
+ "phf_generator",
+ "phf_shared",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.7.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09364cc93c159b8b06b1f4dd8a4398984503483891b0c26b867cf431fb132662"
+dependencies = [
+ "phf_shared",
+ "rand 0.6.5",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.7.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "234f71a15de2288bcb7e3b6515828d22af7ec8598ee6d24c3b526fa0a80b67a0"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "pin-project"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55"
+dependencies = [
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+
+[[package]]
+name = "plist"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9bd9647b268a3d3e14ff09c23201133a62589c658db02bb7388c7246aafe0590"
+dependencies = [
+ "base64",
+ "indexmap",
+ "line-wrap",
+ "quick-xml",
+ "serde 1.0.163",
+ "time 0.3.21",
+]
+
+[[package]]
+name = "png"
+version = "0.17.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aaeebc51f9e7d2c150d3f3bfeb667f2aa985db5ef1e3d212847bdedb488beeaa"
+dependencies = [
+ "bitflags",
+ "crc32fast",
+ "fdeflate",
+ "flate2",
+ "miniz_oxide 0.7.1",
+]
+
+[[package]]
+name = "polling"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce"
+dependencies = [
+ "autocfg 1.1.0",
+ "bitflags",
+ "cfg-if 1.0.0",
+ "concurrent-queue",
+ "libc",
+ "log",
+ "pin-project-lite",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "pretty-hex"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc5c99d529f0d30937f6f4b8a86d988047327bb88d04d2c4afc356de74722131"
+
+[[package]]
+name = "prettyplease"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ceca8aaf45b5c46ec7ed39fff75f57290368c1846d33d24a122ca81416ab058"
+dependencies = [
+ "proc-macro2 1.0.63",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "primal-check"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9df7f93fd637f083201473dab4fee2db4c429d32e55e3299980ab3957ab916a0"
+dependencies = [
+ "num-integer",
+]
+
+[[package]]
+name = "proc-macro-crate"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785"
+dependencies = [
+ "toml 0.5.11",
+]
+
+[[package]]
+name = "proc-macro-crate"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919"
+dependencies = [
+ "once_cell",
+ "toml_edit 0.19.8",
+]
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+ "syn 1.0.109",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "0.4.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759"
+dependencies = [
+ "unicode-xid 0.1.0",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.63"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b368fba921b0dce7e60f5e04ec15e565b3303972b42bcfde1d0713b881959eb"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "protobuf"
+version = "3.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b55bad9126f378a853655831eb7363b7b01b81d19f8cb1218861086ca4a1a61e"
+dependencies = [
+ "bytes",
+ "once_cell",
+ "protobuf-support",
+ "thiserror",
+]
+
+[[package]]
+name = "protobuf-codegen"
+version = "3.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0dd418ac3c91caa4032d37cb80ff0d44e2ebe637b2fb243b6234bf89cdac4901"
+dependencies = [
+ "anyhow",
+ "once_cell",
+ "protobuf",
+ "protobuf-parse",
+ "regex",
+ "tempfile",
+ "thiserror",
+]
+
+[[package]]
+name = "protobuf-parse"
+version = "3.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d39b14605eaa1f6a340aec7f320b34064feb26c93aec35d6a9a2272a8ddfa49"
+dependencies = [
+ "anyhow",
+ "indexmap",
+ "log",
+ "protobuf",
+ "protobuf-support",
+ "tempfile",
+ "thiserror",
+ "which",
+]
+
+[[package]]
+name = "protobuf-support"
+version = "3.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a5d4d7b8601c814cfb36bcebb79f0e61e45e1e93640cf778837833bbed05c372"
+dependencies = [
+ "thiserror",
+]
+
+[[package]]
+name = "qoi"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001"
+dependencies = [
+ "bytemuck",
+]
+
+[[package]]
+name = "quest"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "556af5f5c953a2ee13f45753e581a38f9778e6551bc3ccc56d90b14628fe59d8"
+dependencies = [
+ "cfg-if 0.1.10",
+ "rpassword 2.1.0",
+ "tempfile",
+ "termios",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "quick-xml"
+version = "0.28.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ce5e73202a820a31f8a0ee32ada5e21029c81fd9e3ebf668a40832e4219d9d1"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "quinn"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "445cbfe2382fa023c4f2f3c7e1c95c03dcc1df2bf23cebcb2b13e1402c4394d1"
+dependencies = [
+ "bytes",
+ "pin-project-lite",
+ "quinn-proto",
+ "quinn-udp",
+ "rustc-hash",
+ "rustls 0.20.8",
+ "thiserror",
+ "tokio",
+ "tracing",
+ "webpki",
+]
+
+[[package]]
+name = "quinn-proto"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67c10f662eee9c94ddd7135043e544f3c82fa839a1e7b865911331961b53186c"
+dependencies = [
+ "bytes",
+ "rand 0.8.5",
+ "ring",
+ "rustc-hash",
+ "rustls 0.20.8",
+ "rustls-native-certs",
+ "slab",
+ "thiserror",
+ "tinyvec",
+ "tracing",
+ "webpki",
+]
+
+[[package]]
+name = "quinn-udp"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "641538578b21f5e5c8ea733b736895576d0fe329bb883b937db6f4d163dbaaf4"
+dependencies = [
+ "libc",
+ "quinn-proto",
+ "socket2 0.4.9",
+ "tracing",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "quote"
+version = "0.6.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1"
+dependencies = [
+ "proc-macro2 0.4.30",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f4f29d145265ec1c483c7c654450edde0bfe043d3938d6972630663356d9500"
+dependencies = [
+ "proc-macro2 1.0.63",
+]
+
+[[package]]
+name = "radium"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09"
+
+[[package]]
+name = "rand"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca"
+dependencies = [
+ "autocfg 0.1.8",
+ "libc",
+ "rand_chacha 0.1.1",
+ "rand_core 0.4.2",
+ "rand_hc",
+ "rand_isaac",
+ "rand_jitter",
+ "rand_os",
+ "rand_pcg",
+ "rand_xorshift",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha 0.3.1",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef"
+dependencies = [
+ "autocfg 0.1.8",
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
+dependencies = [
+ "rand_core 0.4.2",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "rand_isaac"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "rand_jitter"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b"
+dependencies = [
+ "libc",
+ "rand_core 0.4.2",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "rand_os"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071"
+dependencies = [
+ "cloudabi",
+ "fuchsia-cprng",
+ "libc",
+ "rand_core 0.4.2",
+ "rdrand",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "rand_pcg"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44"
+dependencies = [
+ "autocfg 0.1.8",
+ "rand_core 0.4.2",
+]
+
+[[package]]
+name = "rand_xorshift"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "raw-window-handle"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9"
+
+[[package]]
+name = "rayon"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-utils",
+ "num_cpus",
+]
+
+[[package]]
+name = "rdev"
+version = "0.5.0-2"
+source = "git+https://github.com/fufesou/rdev#ee3057bd97c91529e8b9daf2ca133a5c49f0c0eb"
+dependencies = [
+ "cocoa",
+ "core-foundation",
+ "core-foundation-sys 0.8.4",
+ "core-graphics",
+ "dispatch",
+ "enum-map",
+ "epoll",
+ "inotify",
+ "lazy_static",
+ "libc",
+ "log",
+ "mio",
+ "strum 0.24.1",
+ "strum_macros 0.24.3",
+ "widestring",
+ "winapi 0.3.9",
+ "x11 2.21.0",
+]
+
+[[package]]
+name = "rdrand"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "realfft"
+version = "3.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93d6b8e8f0c6d2234aa58048d7290c60bf92cd36fd2888cd8331c66ad4f2e1d2"
+dependencies = [
+ "rustfft",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
+dependencies = [
+ "getrandom",
+ "redox_syscall 0.2.16",
+ "thiserror",
+]
+
+[[package]]
+name = "regex"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af83e617f331cc6ae2da5443c602dfa5af81e517212d9d611a5b3ba1777b5370"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a5996294f19bd3aae0453a862ad728f60e6600695733dd5df01da90c54363a3c"
+
+[[package]]
+name = "repng"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0dd57cd2cb5cc699b3eb4824d654e5a32f3bc013766da4966f71fe94805abbda"
+dependencies = [
+ "byteorder",
+ "flate2",
+]
+
+[[package]]
+name = "reqwest"
+version = "0.11.18"
+source = "git+https://github.com/rustdesk-org/reqwest#4cc834539d9c44f7b6bbc5d2f8805842dc5aa328"
+dependencies = [
+ "base64",
+ "bytes",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-rustls",
+ "ipnet",
+ "js-sys",
+ "log",
+ "mime",
+ "once_cell",
+ "percent-encoding",
+ "pin-project-lite",
+ "rustls 0.21.2",
+ "rustls-pemfile",
+ "serde 1.0.163",
+ "serde_json 1.0.96",
+ "serde_urlencoded",
+ "tokio",
+ "tokio-rustls",
+ "tower-service",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "webpki-roots",
+ "winreg 0.50.0",
+]
+
+[[package]]
+name = "ring"
+version = "0.16.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
+dependencies = [
+ "cc",
+ "libc",
+ "once_cell",
+ "spin 0.5.2",
+ "untrusted",
+ "web-sys",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "ringbuf"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "79abed428d1fd2a128201cec72c5f6938e2da607c6f3745f769fabea399d950a"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "rpassword"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d37473170aedbe66ffa3ad3726939ba677d83c646ad4fd99e5b4bc38712f45ec"
+dependencies = [
+ "kernel32-sys",
+ "libc",
+ "winapi 0.2.8",
+]
+
+[[package]]
+name = "rpassword"
+version = "7.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6678cf63ab3491898c0d021b493c94c9b221d91295294a2a5746eacbe5928322"
+dependencies = [
+ "libc",
+ "rtoolbox",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "rtoolbox"
+version = "0.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "034e22c514f5c0cb8a10ff341b9b048b5ceb21591f31c8f44c43b960f9b3524a"
+dependencies = [
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "rubato"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd70209c27d5b08f5528bdc779ea3ffb418954e28987f9f9775c6eac41003f9c"
+dependencies = [
+ "num-complex",
+ "num-integer",
+ "num-traits 0.2.15",
+ "realfft",
+]
+
+[[package]]
+name = "runas"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed87390fefd18965ff20baae5aeb9913bcf82d2b59dc04c0f6d8f17f7be56ff2"
+dependencies = [
+ "cc",
+ "which",
+]
+
+[[package]]
+name = "rust-ini"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6d5f2436026b4f6e79dc829837d467cc7e9a55ee40e750d716713540715a2df"
+dependencies = [
+ "cfg-if 1.0.0",
+ "ordered-multimap",
+]
+
+[[package]]
+name = "rust-pulsectl"
+version = "0.2.12"
+source = "git+https://github.com/open-trade/pulsectl#5e68f4c2b7c644fa321984688602d71e8ad0bba3"
+dependencies = [
+ "libpulse-binding",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "rustc_version"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "rustdesk"
+version = "1.2.2"
+dependencies = [
+ "android_logger",
+ "arboard",
+ "async-process",
+ "async-trait",
+ "base64",
+ "bytes",
+ "cc",
+ "cfg-if 1.0.0",
+ "chrono",
+ "cidr-utils",
+ "clap 4.2.7",
+ "clipboard",
+ "cocoa",
+ "core-foundation",
+ "core-graphics",
+ "cpal",
+ "crossbeam-queue",
+ "ctrlc",
+ "dark-light",
+ "dasp",
+ "dbus",
+ "dbus-crossroads",
+ "default-net",
+ "dispatch",
+ "enigo",
+ "errno",
+ "evdev",
+ "flutter_rust_bridge",
+ "flutter_rust_bridge_codegen",
+ "fon",
+ "fruitbasket",
+ "hbb_common",
+ "hex",
+ "hound",
+ "image",
+ "impersonate_system",
+ "include_dir",
+ "jni 0.21.1",
+ "keepawake",
+ "lazy_static",
+ "libloading 0.8.0",
+ "libpulse-binding",
+ "libpulse-simple-binding",
+ "mac_address",
+ "magnum-opus",
+ "mouce",
+ "num_cpus",
+ "objc",
+ "objc_id",
+ "os-version",
+ "pam",
+ "parity-tokio-ipc",
+ "rdev",
+ "repng",
+ "reqwest",
+ "ringbuf",
+ "rpassword 7.2.0",
+ "rubato",
+ "runas",
+ "rust-pulsectl",
+ "samplerate",
+ "sciter-rs",
+ "scrap",
+ "serde 1.0.163",
+ "serde_derive",
+ "serde_json 1.0.96",
+ "serde_repr",
+ "sha2",
+ "shared_memory",
+ "shutdown_hooks",
+ "sys-locale",
+ "system_shutdown",
+ "tao",
+ "tray-icon",
+ "url",
+ "users 0.11.0",
+ "uuid",
+ "virtual_display",
+ "whoami",
+ "winapi 0.3.9",
+ "windows-service",
+ "winreg 0.11.0",
+ "winres",
+ "wol-rs",
+ "zip",
+]
+
+[[package]]
+name = "rustdesk-portable-packer"
+version = "0.1.0"
+dependencies = [
+ "brotli",
+ "dirs 5.0.1",
+ "embed-resource",
+ "md5",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "rustfft"
+version = "6.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e17d4f6cbdb180c9f4b2a26bbf01c4e647f1e1dea22fe8eb9db54198b32f9434"
+dependencies = [
+ "num-complex",
+ "num-integer",
+ "num-traits 0.2.15",
+ "primal-check",
+ "strength_reduce",
+ "transpose",
+ "version_check",
+]
+
+[[package]]
+name = "rustix"
+version = "0.37.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d"
+dependencies = [
+ "bitflags",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rustls"
+version = "0.20.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f"
+dependencies = [
+ "ring",
+ "sct",
+ "webpki",
+]
+
+[[package]]
+name = "rustls"
+version = "0.21.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e32ca28af694bc1bbf399c33a516dbdf1c90090b8ab23c2bc24f834aa2247f5f"
+dependencies = [
+ "log",
+ "ring",
+ "rustls-webpki",
+ "sct",
+]
+
+[[package]]
+name = "rustls-native-certs"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50"
+dependencies = [
+ "openssl-probe",
+ "rustls-pemfile",
+ "schannel",
+ "security-framework",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b"
+dependencies = [
+ "base64",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.100.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6207cd5ed3d8dca7816f8f3725513a34609c0c765bf652b8c3cb4cfd87db46b"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06"
+
+[[package]]
+name = "ryu"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
+
+[[package]]
+name = "safemem"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072"
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "samplerate"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e032b2b24715c4f982f483ea3abdb3c9ba444d9f63e87b2843d6f998f5ba2698"
+dependencies = [
+ "libsamplerate-sys",
+]
+
+[[package]]
+name = "schannel"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3"
+dependencies = [
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "sciter-rs"
+version = "0.5.57"
+source = "git+https://github.com/open-trade/rust-sciter?branch=dyn#fab913b7c2e779b05c249b0c5de5a08759b2c15d"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "objc",
+ "objc-foundation",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "scrap"
+version = "0.5.0"
+dependencies = [
+ "android_logger",
+ "bindgen 0.65.1",
+ "block",
+ "cfg-if 1.0.0",
+ "dbus",
+ "docopt",
+ "gstreamer",
+ "gstreamer-app",
+ "gstreamer-video",
+ "hbb_common",
+ "hwcodec",
+ "jni 0.21.1",
+ "lazy_static",
+ "log",
+ "ndk",
+ "num_cpus",
+ "pkg-config",
+ "quest",
+ "repng",
+ "serde 1.0.163",
+ "serde_json 1.0.96",
+ "target_build_utils",
+ "tracing",
+ "webm",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "scratch"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1"
+
+[[package]]
+name = "sct"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "security-framework"
+version = "2.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "core-foundation-sys 0.8.4",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4"
+dependencies = [
+ "core-foundation-sys 0.8.4",
+ "libc",
+]
+
+[[package]]
+name = "semver"
+version = "1.0.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed"
+dependencies = [
+ "serde 1.0.163",
+]
+
+[[package]]
+name = "serde"
+version = "0.9.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34b623917345a631dc9608d5194cc206b3fe6c3554cd1c75b937e55e285254af"
+
+[[package]]
+name = "serde"
+version = "1.0.163"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2113ab51b87a539ae008b5c6c02dc020ffa39afd2d83cffcb3f4eb2722cebec2"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.163"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c805777e3930c8883389c602315a24224bcc738b63905ef87cd1420353ea93e"
+dependencies = [
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "serde_json"
+version = "0.9.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad8bcf487be7d2e15d3d543f04312de991d631cfe1b43ea0ade69e6a8a5b16a1"
+dependencies = [
+ "dtoa",
+ "itoa 0.3.4",
+ "num-traits 0.1.43",
+ "serde 0.9.15",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.96"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1"
+dependencies = [
+ "itoa 1.0.6",
+ "ryu",
+ "serde 1.0.163",
+]
+
+[[package]]
+name = "serde_repr"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bcec881020c684085e55a25f7fd888954d56609ef363479dc5a1305eb0d40cab"
+dependencies = [
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0efd8caf556a6cebd3b285caf480045fcc1ac04f6bd786b09a6f11af30c4fcf4"
+dependencies = [
+ "serde 1.0.163",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa 1.0.6",
+ "ryu",
+ "serde 1.0.163",
+]
+
+[[package]]
+name = "serde_yaml"
+version = "0.8.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b"
+dependencies = [
+ "indexmap",
+ "ryu",
+ "serde 1.0.163",
+ "yaml-rust",
+]
+
+[[package]]
+name = "sha1"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3"
+dependencies = [
+ "cfg-if 1.0.0",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0"
+dependencies = [
+ "cfg-if 1.0.0",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "shadow-rs"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "427f07ab5f873000cf55324882e12a88c0a7ea7025df4fc1e7e35e688877a583"
+dependencies = [
+ "const_format",
+ "git2",
+ "is_debug",
+ "time 0.3.21",
+ "tzdb",
+]
+
+[[package]]
+name = "shared_memory"
+version = "0.12.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba8593196da75d9dc4f69349682bd4c2099f8cde114257d1ef7ef1b33d1aba54"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "nix 0.23.2",
+ "rand 0.8.5",
+ "win-sys",
+]
+
+[[package]]
+name = "shlex"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3"
+
+[[package]]
+name = "shutdown_hooks"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6057adedbec913419c92996f395ba69931acbd50b7d56955394cd3f7bedbfa45"
+
+[[package]]
+name = "signal-hook"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "732768f1176d21d09e076c23a93123d40bba92d50c4058da34d45c8de8e682b9"
+dependencies = [
+ "libc",
+ "signal-hook-registry",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "signature"
+version = "1.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c"
+
+[[package]]
+name = "simd-adler32"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "238abfbb77c1915110ad968465608b68e869e0772622c9656714e73e5a1a522f"
+
+[[package]]
+name = "siphasher"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b8de496cf83d4ed58b6be86c3a275b8602f6ffe98d3024a869e124147a9a3ac"
+
+[[package]]
+name = "slab"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
+dependencies = [
+ "autocfg 1.1.0",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
+
+[[package]]
+name = "socket2"
+version = "0.3.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "socket2"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
+dependencies = [
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "sodiumoxide"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e26be3acb6c2d9a7aac28482586a7856436af4cfe7100031d219de2d2ecb0028"
+dependencies = [
+ "ed25519",
+ "libc",
+ "libsodium-sys",
+ "serde 1.0.163",
+]
+
+[[package]]
+name = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[package]]
+name = "spin"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
+dependencies = [
+ "lock_api",
+]
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "str-buf"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e08d8363704e6c71fc928674353e6b7c23dcea9d82d7012c8faf2a3a025f8d0"
+
+[[package]]
+name = "strength_reduce"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe895eb47f22e2ddd4dabc02bce419d2e643c8e3b585c78158b349195bc24d82"
+
+[[package]]
+name = "strsim"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "strum"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57bd81eb48f4c437cadc685403cad539345bf703d78e63707418431cecd4522b"
+
+[[package]]
+name = "strum"
+version = "0.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f"
+
+[[package]]
+name = "strum_macros"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87c85aa3f8ea653bfd3ddf25f7ee357ee4d204731f6aa9ad04002306f6e2774c"
+dependencies = [
+ "heck 0.3.3",
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "strum_macros"
+version = "0.24.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59"
+dependencies = [
+ "heck 0.4.1",
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+ "rustversion",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "subtle"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
+
+[[package]]
+name = "syn"
+version = "0.15.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5"
+dependencies = [
+ "proc-macro2 0.4.30",
+ "quote 0.6.13",
+ "unicode-xid 0.1.0",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822"
+dependencies = [
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+ "unicode-ident",
+]
+
+[[package]]
+name = "sys-locale"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea0b9eefabb91675082b41eb94c3ecd91af7656caee3fb4961a07c0ec8c7ca6f"
+dependencies = [
+ "libc",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "sysinfo"
+version = "0.29.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7cb97a5a85a136d84e75d5c3cf89655090602efb1be0d8d5337b7e386af2908"
+dependencies = [
+ "cfg-if 1.0.0",
+ "core-foundation-sys 0.8.4",
+ "libc",
+ "ntapi",
+ "once_cell",
+ "rayon",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "system-configuration"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d75182f12f490e953596550b65ee31bda7c8e043d9386174b353bda50838c3fd"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "system-configuration-sys",
+]
+
+[[package]]
+name = "system-configuration-sys"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9"
+dependencies = [
+ "core-foundation-sys 0.8.4",
+ "libc",
+]
+
+[[package]]
+name = "system-deps"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f3ecc17269a19353b3558b313bba738b25d82993e30d62a18406a24aba4649b"
+dependencies = [
+ "heck 0.3.3",
+ "pkg-config",
+ "strum 0.18.0",
+ "strum_macros 0.18.0",
+ "thiserror",
+ "toml 0.5.11",
+ "version-compare 0.0.10",
+]
+
+[[package]]
+name = "system-deps"
+version = "6.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5fa6fb9ee296c0dc2df41a656ca7948546d061958115ddb0bcaae43ad0d17d2"
+dependencies = [
+ "cfg-expr",
+ "heck 0.4.1",
+ "pkg-config",
+ "toml 0.7.3",
+ "version-compare 0.1.1",
+]
+
+[[package]]
+name = "system_shutdown"
+version = "4.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7567f71160af5e9abfb4f5a21532cf2174cefe91ac5c336419295685a695cc66"
+dependencies = [
+ "windows 0.44.0",
+ "zbus",
+]
+
+[[package]]
+name = "tao"
+version = "0.22.2"
+source = "git+https://github.com/rustdesk-org/tao?branch=dev#1e5b97258cf42a30f80f85a6aa0b1a4aece1977e"
+dependencies = [
+ "bitflags",
+ "cairo-rs",
+ "cc",
+ "cocoa",
+ "core-foundation",
+ "core-graphics",
+ "crossbeam-channel",
+ "dispatch",
+ "gdk",
+ "gdk-pixbuf",
+ "gdk-sys",
+ "gdkwayland-sys",
+ "gdkx11-sys",
+ "gio",
+ "glib 0.16.7",
+ "glib-sys 0.16.3",
+ "gtk",
+ "image",
+ "instant",
+ "jni 0.21.1",
+ "lazy_static",
+ "libc",
+ "log",
+ "ndk",
+ "ndk-context",
+ "ndk-sys",
+ "objc",
+ "once_cell",
+ "parking_lot",
+ "png",
+ "raw-window-handle",
+ "scopeguard",
+ "tao-macros",
+ "unicode-segmentation",
+ "url",
+ "uuid",
+ "windows 0.48.0",
+ "windows-implement",
+ "x11-dl",
+ "zbus",
+]
+
+[[package]]
+name = "tao-macros"
+version = "0.1.2"
+source = "git+https://github.com/rustdesk-org/tao?branch=dev#1e5b97258cf42a30f80f85a6aa0b1a4aece1977e"
+dependencies = [
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "tap"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
+
+[[package]]
+name = "target-lexicon"
+version = "0.12.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd1ba337640d60c3e96bc6f0638a939b9c9a7f2c316a1598c279828b3d1dc8c5"
+
+[[package]]
+name = "target_build_utils"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "013d134ae4a25ee744ad6129db589018558f620ddfa44043887cdd45fa08e75c"
+dependencies = [
+ "phf",
+ "phf_codegen",
+ "serde_json 0.9.10",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998"
+dependencies = [
+ "cfg-if 1.0.0",
+ "fastrand",
+ "redox_syscall 0.3.5",
+ "rustix",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "termios"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "411c5bf740737c7918b8b1fe232dca4dc9f8e754b8ad5e20966814001ed0ac6b"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
+
+[[package]]
+name = "tfc"
+version = "0.6.1"
+source = "git+https://github.com/fufesou/The-Fat-Controller#9dd86151525fd010dc93f6bc9b6aedd1a75cc342"
+dependencies = [
+ "anyhow",
+ "core-graphics",
+ "unicode-segmentation",
+ "winapi 0.3.9",
+ "x11 2.19.0",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
+dependencies = [
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "threadpool"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa"
+dependencies = [
+ "num_cpus",
+]
+
+[[package]]
+name = "tiff"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7449334f9ff2baf290d55d73983a7d6fa15e01198faef72af07e2a8db851e471"
+dependencies = [
+ "flate2",
+ "jpeg-decoder",
+ "weezl",
+]
+
+[[package]]
+name = "time"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"
+dependencies = [
+ "libc",
+ "wasi 0.10.0+wasi-snapshot-preview1",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "time"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f3403384eaacbca9923fa06940178ac13e4edb725486d70e8e15881d0c836cc"
+dependencies = [
+ "itoa 1.0.6",
+ "libc",
+ "num_threads",
+ "serde 1.0.163",
+ "time-core",
+ "time-macros",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb"
+
+[[package]]
+name = "time-macros"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "372950940a5f07bf38dbe211d7283c9e6d7327df53794992d293e534c733d09b"
+dependencies = [
+ "time-core",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "1.28.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0aa32867d44e6f2ce3385e89dceb990188b8bb0fb25b0cf576647a6f98ac5105"
+dependencies = [
+ "autocfg 1.1.0",
+ "bytes",
+ "libc",
+ "mio",
+ "num_cpus",
+ "parking_lot",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2 0.4.9",
+ "tokio-macros",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
+dependencies = [
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081"
+dependencies = [
+ "rustls 0.21.2",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-socks"
+version = "0.5.1-2"
+source = "git+https://github.com/open-trade/tokio-socks#14a5c2564fa20a2765ea53d03c573ee2b7e20421"
+dependencies = [
+ "bytes",
+ "either",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "pin-project",
+ "thiserror",
+ "tokio",
+ "tokio-util",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-io",
+ "futures-sink",
+ "futures-util",
+ "hashbrown",
+ "pin-project-lite",
+ "slab",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+dependencies = [
+ "serde 1.0.163",
+]
+
+[[package]]
+name = "toml"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fb9d890e4dc9298b70f740f615f2e05b9db37dce531f6b24fb77ac993f9f217"
+dependencies = [
+ "serde 1.0.163",
+ "serde_spanned",
+ "toml_datetime 0.5.1",
+ "toml_edit 0.18.1",
+]
+
+[[package]]
+name = "toml"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b403acf6f2bb0859c93c7f0d967cb4a75a7ac552100f9322faf64dc047669b21"
+dependencies = [
+ "serde 1.0.163",
+ "serde_spanned",
+ "toml_datetime 0.6.1",
+ "toml_edit 0.19.8",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4553f467ac8e3d374bc9a177a26801e5d0f9b211aa1673fb137a403afd1c9cf5"
+dependencies = [
+ "serde 1.0.163",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622"
+dependencies = [
+ "serde 1.0.163",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56c59d8dd7d0dcbc6428bf7aa2f0e823e26e43b3c9aca15bbc9475d23e5fa12b"
+dependencies = [
+ "indexmap",
+ "nom8",
+ "serde 1.0.163",
+ "serde_spanned",
+ "toml_datetime 0.5.1",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.19.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "239410c8609e8125456927e6707163a3b1fdb40561e4b803bc041f466ccfdc13"
+dependencies = [
+ "indexmap",
+ "serde 1.0.163",
+ "serde_spanned",
+ "toml_datetime 0.6.1",
+ "winnow",
+]
+
+[[package]]
+name = "topological-sort"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea68304e134ecd095ac6c3574494fc62b909f416c4fca77e440530221e549d3d"
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tracing"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+dependencies = [
+ "cfg-if 1.0.0",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f57e3ca2a01450b1a921183a9c9cbfda207fd822cef4ccb00a65402cbba7a74"
+dependencies = [
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+ "syn 2.0.15",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "transpose"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6522d49d03727ffb138ae4cbc1283d3774f0d10aa7f9bf52e6784c45daf9b23"
+dependencies = [
+ "num-integer",
+ "strength_reduce",
+]
+
+[[package]]
+name = "tray-icon"
+version = "0.5.1"
+source = "git+https://github.com/rustdesk-org/tray-icon#ef98e7b98abed2e3da614277eced12a85bfb717c"
+dependencies = [
+ "cocoa",
+ "core-graphics",
+ "crossbeam-channel",
+ "dirs-next",
+ "libappindicator",
+ "muda",
+ "objc",
+ "once_cell",
+ "png",
+ "thiserror",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+
+[[package]]
+name = "typenum"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
+
+[[package]]
+name = "tz-rs"
+version = "0.6.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33851b15c848fad2cf4b105c6bb66eb9512b6f6c44a4b13f57c53c73c707e2b4"
+dependencies = [
+ "const_fn",
+]
+
+[[package]]
+name = "tzdb"
+version = "0.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec758958f2fb5069cd7fae385be95cc8eceb8cdfd270c7d14de6034f0108d99e"
+dependencies = [
+ "iana-time-zone",
+ "tz-rs",
+]
+
+[[package]]
+name = "uds_windows"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce65604324d3cce9b966701489fbd0cf318cb1f7bd9dd07ac9a4ee6fb791930d"
+dependencies = [
+ "tempfile",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "uname"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b72f89f0ca32e4db1c04e2a72f5345d59796d4866a1ee0609084569f73683dc8"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "unicode-xid"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
+
+[[package]]
+name = "untrusted"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+
+[[package]]
+name = "url"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+ "serde 1.0.163",
+]
+
+[[package]]
+name = "users"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa4227e95324a443c9fcb06e03d4d85e91aabe9a5a02aa818688b6918b6af486"
+dependencies = [
+ "libc",
+ "log",
+]
+
+[[package]]
+name = "users"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24cc0f6d6f267b73e5a2cadf007ba8f9bc39c6a6f9666f8cf25ea809a153b032"
+dependencies = [
+ "libc",
+ "log",
+]
+
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
+[[package]]
+name = "uuid"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dad5567ad0cf5b760e5665964bec1b47dfd077ba8a2544b513f3556d3d239a2"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "vec_map"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+
+[[package]]
+name = "version-compare"
+version = "0.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d63556a25bae6ea31b52e640d7c41d1ab27faba4ccb600013837a3d0b3994ca1"
+
+[[package]]
+name = "version-compare"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "virtual_display"
+version = "0.1.0"
+dependencies = [
+ "hbb_common",
+ "lazy_static",
+]
+
+[[package]]
+name = "vswhom"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b"
+dependencies = [
+ "libc",
+ "vswhom-sys",
+]
+
+[[package]]
+name = "vswhom-sys"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3b17ae1f6c8a2b28506cd96d412eebf83b4a0ff2cbefeeb952f2f9dfa44ba18"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "waker-fn"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca"
+
+[[package]]
+name = "walkdir"
+version = "2.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "want"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
+dependencies = [
+ "log",
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.10.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.85"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b6cb788c4e39112fbe1822277ef6fb3c55cd86b95cb3d3c4c1c9597e4ac74b4"
+dependencies = [
+ "cfg-if 1.0.0",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.85"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35e522ed4105a9d626d885b35d62501b30d9666283a5c8be12c14a8bdafe7822"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+ "syn 2.0.15",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "083abe15c5d88556b77bdf7aef403625be9e327ad37c62c4e4129af740168163"
+dependencies = [
+ "cfg-if 1.0.0",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.85"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "358a79a0cb89d21db8120cbfb91392335913e4890665b1a7981d9e956903b434"
+dependencies = [
+ "quote 1.0.27",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.85"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4783ce29f09b9d93134d41297aded3a712b7b979e9c6f28c32cb88c973a94869"
+dependencies = [
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+ "syn 2.0.15",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.85"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a901d592cafaa4d711bc324edfaff879ac700b19c3dfd60058d2b445be2691eb"
+
+[[package]]
+name = "web-sys"
+version = "0.3.62"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16b5f940c7edfdc6d12126d98c9ef4d1b3d470011c47c76a6581df47ad9ba721"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webm"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ecb047148a12ef1fd8ab26302bca7e82036f005c3073b48e17cc1b44ec577136"
+dependencies = [
+ "webm-sys",
+]
+
+[[package]]
+name = "webm-sys"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ded6ec82ccf51fe265b0b2b1579cac839574ed910c17baac58e807f8a9de7f3"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "webpki"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.23.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b03058f88386e5ff5310d9111d53f48b17d732b401aeb83a8d5190f2ac459338"
+dependencies = [
+ "rustls-webpki",
+]
+
+[[package]]
+name = "weezl"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb"
+
+[[package]]
+name = "which"
+version = "4.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269"
+dependencies = [
+ "either",
+ "libc",
+ "once_cell",
+]
+
+[[package]]
+name = "whoami"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c70234412ca409cc04e864e89523cb0fc37f5e1344ebed5a3ebf4192b6b9f68"
+dependencies = [
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "widestring"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "653f141f39ec16bba3c5abe400a0c60da7468261cc2cbf36805022876bc721a8"
+
+[[package]]
+name = "win-sys"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b7b128a98c1cfa201b09eb49ba285887deb3cbe7466a98850eb1adabb452be5"
+dependencies = [
+ "windows 0.34.0",
+]
+
+[[package]]
+name = "winapi"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-build"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "winapi-wsapoll"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44c17110f57155602a80dca10be03852116403c9ff3cd25b079d666f2aa3df6e"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows"
+version = "0.32.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fbedf6db9096bc2364adce0ae0aa636dcd89f3c3f2cd67947062aaf0ca2a10ec"
+dependencies = [
+ "windows_aarch64_msvc 0.32.0",
+ "windows_i686_gnu 0.32.0",
+ "windows_i686_msvc 0.32.0",
+ "windows_x86_64_gnu 0.32.0",
+ "windows_x86_64_msvc 0.32.0",
+]
+
+[[package]]
+name = "windows"
+version = "0.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45296b64204227616fdbf2614cefa4c236b98ee64dfaaaa435207ed99fe7829f"
+dependencies = [
+ "windows_aarch64_msvc 0.34.0",
+ "windows_i686_gnu 0.34.0",
+ "windows_i686_msvc 0.34.0",
+ "windows_x86_64_gnu 0.34.0",
+ "windows_x86_64_msvc 0.34.0",
+]
+
+[[package]]
+name = "windows"
+version = "0.44.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e745dab35a0c4c77aa3ce42d595e13d2003d6902d6b08c9ef5fc326d08da12b"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cdacb41e6a96a052c6cb63a144f24900236121c6f63f4f8219fef5977ecb0c25"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
+dependencies = [
+ "windows-implement",
+ "windows-interface",
+ "windows-targets 0.48.0",
+]
+
+[[package]]
+name = "windows-implement"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e2ee588991b9e7e6c8338edf3333fbe4da35dc72092643958ebb43f0ab2c49c"
+dependencies = [
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "windows-interface"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6fb8df20c9bcaa8ad6ab513f7b40104840c8867d5751126e4df3b08388d0cc7"
+dependencies = [
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "windows-service"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd9db37ecb5b13762d95468a2fc6009d4b2c62801243223aabd44fca13ad13c8"
+dependencies = [
+ "bitflags",
+ "widestring",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.0",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.0",
+ "windows_aarch64_msvc 0.48.0",
+ "windows_i686_gnu 0.48.0",
+ "windows_i686_msvc 0.48.0",
+ "windows_x86_64_gnu 0.48.0",
+ "windows_x86_64_gnullvm 0.48.0",
+ "windows_x86_64_msvc 0.48.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.32.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8e92753b1c443191654ec532f14c199742964a061be25d77d7a96f09db20bf5"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.32.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a711c68811799e017b6038e0922cb27a5e2f43a2ddb609fe0b6f3eeda9de615"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.32.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "146c11bb1a02615db74680b32a68e2d61f553cc24c4eb5b4ca10311740e44172"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.32.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c912b12f7454c6620635bbff3450962753834be2a594819bd5e945af18ec64bc"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.32.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "504a2476202769977a040c6364301a3f65d0cc9e3fb08600b2bda150a0488316"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
+
+[[package]]
+name = "winnow"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61de7bac303dc551fe038e2b3cef0f571087a47571ea6e79a87692ac99b99699"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "winreg"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "winreg"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76a1a57ff50e9b408431e8f97d5456f2807f8eb2a2cd79b06068fc87f8ecf189"
+dependencies = [
+ "cfg-if 1.0.0",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "winreg"
+version = "0.50.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1"
+dependencies = [
+ "cfg-if 1.0.0",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "winres"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b68db261ef59e9e52806f688020631e987592bd83619edccda9c47d42cde4f6c"
+dependencies = [
+ "toml 0.5.11",
+]
+
+[[package]]
+name = "wol-rs"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48dc5e486e34a31515518d370cdd8bf59ec696323fe8f92b858e43942e84a765"
+
+[[package]]
+name = "wyz"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed"
+dependencies = [
+ "tap",
+]
+
+[[package]]
+name = "x11"
+version = "2.19.0"
+source = "git+https://github.com/bjornsnoen/x11-rs#c2e9bfaa7b196938f8700245564d8ac5d447786a"
+dependencies = [
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "x11"
+version = "2.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e"
+dependencies = [
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "x11-dl"
+version = "2.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f"
+dependencies = [
+ "libc",
+ "once_cell",
+ "pkg-config",
+]
+
+[[package]]
+name = "x11rb"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "592b4883219f345e712b3209c62654ebda0bb50887f330cbd018d0f654bfd507"
+dependencies = [
+ "gethostname",
+ "nix 0.24.3",
+ "winapi 0.3.9",
+ "winapi-wsapoll",
+ "x11rb-protocol",
+]
+
+[[package]]
+name = "x11rb-protocol"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56b245751c0ac9db0e006dc812031482784e434630205a93c73cfefcaabeac67"
+dependencies = [
+ "nix 0.24.3",
+]
+
+[[package]]
+name = "xdg-home"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2769203cd13a0c6015d515be729c526d041e9cf2c0cc478d57faee85f40c6dcd"
+dependencies = [
+ "nix 0.26.2",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "yaml-rust"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
+dependencies = [
+ "linked-hash-map",
+]
+
+[[package]]
+name = "zbus"
+version = "3.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29242fa5ec5693629ae74d6eb1f69622a9511f600986d6d9779bccf36ac316e3"
+dependencies = [
+ "async-broadcast",
+ "async-executor",
+ "async-fs",
+ "async-io",
+ "async-lock",
+ "async-recursion",
+ "async-task",
+ "async-trait",
+ "byteorder",
+ "derivative",
+ "enumflags2",
+ "event-listener",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "hex",
+ "nix 0.26.2",
+ "once_cell",
+ "ordered-stream",
+ "rand 0.8.5",
+ "serde 1.0.163",
+ "serde_repr",
+ "sha1",
+ "static_assertions",
+ "tracing",
+ "uds_windows",
+ "winapi 0.3.9",
+ "xdg-home",
+ "zbus_macros",
+ "zbus_names",
+ "zvariant",
+]
+
+[[package]]
+name = "zbus_macros"
+version = "3.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "537793e26e9af85f774801dc52c6f6292352b2b517c5cf0449ffd3735732a53a"
+dependencies = [
+ "proc-macro-crate 1.3.1",
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+ "regex",
+ "syn 1.0.109",
+ "zvariant_utils",
+]
+
+[[package]]
+name = "zbus_names"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f34f314916bd89bdb9934154627fab152f4f28acdda03e7c4c68181b214fe7e3"
+dependencies = [
+ "serde 1.0.163",
+ "static_assertions",
+ "zvariant",
+]
+
+[[package]]
+name = "zip"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e92305c174683d78035cbf1b70e18db6329cc0f1b9cae0a52ca90bf5bfe7125"
+dependencies = [
+ "aes",
+ "byteorder",
+ "bzip2",
+ "constant_time_eq",
+ "crc32fast",
+ "crossbeam-utils",
+ "flate2",
+ "hmac",
+ "pbkdf2",
+ "sha1",
+ "time 0.3.21",
+ "zstd 0.11.2+zstd.1.5.2",
+]
+
+[[package]]
+name = "zstd"
+version = "0.11.2+zstd.1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4"
+dependencies = [
+ "zstd-safe 5.0.2+zstd.1.5.2",
+]
+
+[[package]]
+name = "zstd"
+version = "0.12.3+zstd.1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76eea132fb024e0e13fd9c2f5d5d595d8a967aa72382ac2f9d39fcc95afd0806"
+dependencies = [
+ "zstd-safe 6.0.5+zstd.1.5.4",
+]
+
+[[package]]
+name = "zstd-safe"
+version = "5.0.2+zstd.1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db"
+dependencies = [
+ "libc",
+ "zstd-sys",
+]
+
+[[package]]
+name = "zstd-safe"
+version = "6.0.5+zstd.1.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d56d9e60b4b1758206c238a10165fbcae3ca37b01744e394c463463f6529d23b"
+dependencies = [
+ "libc",
+ "zstd-sys",
+]
+
+[[package]]
+name = "zstd-sys"
+version = "2.0.8+zstd.1.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5556e6ee25d32df2586c098bbfa278803692a20d0ab9565e049480d52707ec8c"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "zune-inflate"
+version = "0.2.54"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02"
+dependencies = [
+ "simd-adler32",
+]
+
+[[package]]
+name = "zvariant"
+version = "3.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46fe4914a985446d6fd287019b5fceccce38303d71407d9e6e711d44954a05d8"
+dependencies = [
+ "byteorder",
+ "enumflags2",
+ "libc",
+ "serde 1.0.163",
+ "static_assertions",
+ "zvariant_derive",
+]
+
+[[package]]
+name = "zvariant_derive"
+version = "3.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34c20260af4b28b3275d6676c7e2a6be0d4332e8e0aba4616d34007fd84e462a"
+dependencies = [
+ "proc-macro-crate 1.3.1",
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+ "syn 1.0.109",
+ "zvariant_utils",
+]
+
+[[package]]
+name = "zvariant_utils"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53b22993dbc4d128a17a3b6c92f1c63872dd67198537ee728d8b5d7c40640a8b"
+dependencies = [
+ "proc-macro2 1.0.63",
+ "quote 1.0.27",
+ "syn 1.0.109",
+]
diff --git a/nixpkgs/pkgs/applications/networking/remote/rustdesk/default.nix b/nixpkgs/pkgs/applications/networking/remote/rustdesk/default.nix
new file mode 100644
index 000000000000..2a06e3f9da56
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/remote/rustdesk/default.nix
@@ -0,0 +1,160 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, wrapGAppsHook
+, atk
+, bzip2
+, cairo
+, dbus
+, gdk-pixbuf
+, glib
+, gst_all_1
+, gtk3
+, libgit2
+, libpulseaudio
+, libsodium
+, libXtst
+, libvpx
+, libyuv
+, libopus
+, libaom
+, libxkbcommon
+, libsciter
+, xdotool
+, pam
+, pango
+, zlib
+, zstd
+, stdenv
+, darwin
+, alsa-lib
+, makeDesktopItem
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rustdesk";
+  version = "1.2.2";
+
+  src = fetchFromGitHub {
+    owner = "rustdesk";
+    repo = "rustdesk";
+    rev = version;
+    hash = "sha256-fgdhPBrC8HuuEKorzG9hY4K3KVwB8hENtE3RM5agGWk=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "confy-0.4.0-2" = "sha256-r5VeggXrIq5Cwxc2WSrxQDI5Gvbw979qIUQfMKHgBUI=";
+      "evdev-0.11.5" = "sha256-aoPmjGi/PftnH6ClEWXHvIj0X3oh15ZC1q7wPC1XPr0=";
+      "hwcodec-0.1.1" = "sha256-EQGJr5kH8O48y1oSrzFF3QGGpGFKP3v4gn2JquAkdlY=";
+      "impersonate_system-0.1.0" = "sha256-qbaTw9gxMKDjX5pKdUrKlmIxCxWwb99YuWPDvD2A3kY=";
+      "keepawake-0.4.3" = "sha256-sLQf9q88dB2bkTN01UlxRWSpoF1kFsqqpYC4Sw6cbEY=";
+      "machine-uid-0.3.0" = "sha256-rEOyNThg6p5oqE9URnxSkPtzyW8D4zKzLi9pAnzTElE=";
+      "magnum-opus-0.4.0" = "sha256-T4qaYOl8lCK1h9jWa9KqGvnVfDViT9Ob5R+YgnSw2tg=";
+      "mouce-0.2.1" = "sha256-3PtNEmVMXgqKV4r3KiKTkk4oyCt4BKynniJREE+RyFk=";
+      "pam-0.7.0" = "sha256-qe2GH6sfGEUnqLiQucYLB5rD/GyAaVtm9pAxWRb1H3Q=";
+      "parity-tokio-ipc-0.7.3-2" = "sha256-WXDKcDBaJuq4K9gjzOKMozePOFiVX0EqYAFamAz/Yvw=";
+      "rdev-0.5.0-2" = "sha256-Agxx/hoV45/NGsrUZLYdm1Y9088Z9urUcDnjVjY/odk=";
+      "reqwest-0.11.18" = "sha256-3k2wcVD+DzJEdP/+8BqP9qz3tgEWcbWZj5/CjrZz5LY=";
+      "rust-pulsectl-0.2.12" = "sha256-8jXTspWvjONFcvw9/Z8C43g4BuGZ3rsG32tvLMQbtbM=";
+      "sciter-rs-0.5.57" = "sha256-NQPDlMQ0sGY8c9lBMlplT82sNjbgJy2m/+REnF3fz8M=";
+      "tao-0.22.2" = "sha256-vZx7WM6vK9UarbFQ/FMnTNEEDS+tglhWcPXt/h7YMFA=";
+      "tfc-0.6.1" = "sha256-ukxJl7Z+pUXCjvTsG5Q0RiXocPERWGsnAyh3SIWm0HU=";
+      "tokio-socks-0.5.1-2" = "sha256-x3aFJKo0XLaCGkZLtG9GYA+A/cGGedVZ8gOztWiYVUY=";
+      "tray-icon-0.5.1" = "sha256-1VyUg8V4omgdRIYyXhfn8kUvhV5ef6D2cr2Djz2uQyc=";
+      "x11-2.19.0" = "sha256-GDCeKzUtvaLeBDmPQdyr499EjEfT6y4diBMzZVEptzc=";
+    };
+  };
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "rustdesk";
+      exec = meta.mainProgram;
+      icon = "rustdesk";
+      desktopName = "RustDesk";
+      comment = meta.description;
+      genericName = "Remote Desktop";
+      categories = [ "Network" ];
+    })
+  ];
+
+  nativeBuildInputs = [
+    pkg-config
+    rustPlatform.bindgenHook
+    wrapGAppsHook
+  ];
+
+  buildFeatures = lib.optionals stdenv.isLinux [ "linux-pkg-config" ];
+
+  # Checks require an active X server
+  doCheck = false;
+
+  buildInputs = [
+    atk
+    bzip2
+    cairo
+    dbus
+    gdk-pixbuf
+    glib
+    gst_all_1.gst-plugins-base
+    gst_all_1.gstreamer
+    gtk3
+    libgit2
+    libpulseaudio
+    libsodium
+    libXtst
+    libvpx
+    libyuv
+    libopus
+    libaom
+    libxkbcommon
+    xdotool
+    pam
+    pango
+    zlib
+    zstd
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.AppKit
+    darwin.apple_sdk.frameworks.CoreAudio
+    darwin.apple_sdk.frameworks.CoreFoundation
+    darwin.apple_sdk.frameworks.CoreGraphics
+    darwin.apple_sdk.frameworks.Foundation
+    darwin.apple_sdk.frameworks.IOKit
+    darwin.apple_sdk.frameworks.Security
+    darwin.apple_sdk.frameworks.SystemConfiguration
+  ] ++ lib.optionals stdenv.isLinux [
+    alsa-lib
+  ];
+
+  # Add static ui resources and libsciter to same folder as binary so that it
+  # can find them.
+  postInstall = ''
+    mkdir -p $out/{share/src,lib/rustdesk}
+
+    # .so needs to be next to the executable
+    mv $out/bin/rustdesk $out/lib/rustdesk
+    ln -s ${libsciter}/lib/libsciter-gtk.so $out/lib/rustdesk
+
+    makeWrapper $out/lib/rustdesk/rustdesk $out/bin/rustdesk \
+      --chdir "$out/share"
+
+    cp -a $src/src/ui $out/share/src
+
+    install -Dm0644 $src/res/logo.svg $out/share/icons/hicolor/scalable/apps/rustdesk.svg
+  '';
+
+  env = {
+    SODIUM_USE_PKG_CONFIG = true;
+    ZSTD_SYS_USE_PKG_CONFIG = true;
+  };
+
+  meta = with lib; {
+    description = "Virtual / remote desktop infrastructure for everyone! Open source TeamViewer / Citrix alternative";
+    homepage = "https://rustdesk.com";
+    license = licenses.agpl3Only;
+    maintainers = with maintainers; [ ocfox leixb ];
+    mainProgram = "rustdesk";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/remote/teamviewer/default.nix b/nixpkgs/pkgs/applications/networking/remote/teamviewer/default.nix
new file mode 100644
index 000000000000..759388cbd425
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/remote/teamviewer/default.nix
@@ -0,0 +1,140 @@
+{ mkDerivation
+, lib
+, fetchurl
+, autoPatchelfHook
+, makeWrapper
+, xdg-utils
+, dbus
+, qtbase
+, qtwebengine
+, qtx11extras
+, getconf
+, glibc
+, libXrandr
+, libX11
+, libXext
+, libXdamage
+, libXtst
+, libSM
+, libXfixes
+, coreutils
+, wrapQtAppsHook
+, icu63
+}:
+
+mkDerivation rec {
+  pname = "teamviewer";
+  # teamviewer itself has not development files but the dev output removes propagated other dev outputs from runtime
+  outputs = [ "out" "dev" ];
+  version = "15.38.3";
+
+  src = fetchurl {
+    url = "https://dl.tvcdn.de/download/linux/version_${lib.versions.major version}x/teamviewer_${version}_amd64.deb";
+    sha256 = "sha256-+GGpGV8rl15VQvPRA2PWngQI4VoxCrZ0ArEm9FgdOVE=";
+  };
+
+  unpackPhase = ''
+    ar x $src
+    tar xf data.tar.*
+  '';
+
+  nativeBuildInputs = [ autoPatchelfHook makeWrapper wrapQtAppsHook ];
+  buildInputs = [ qtbase qtwebengine qtx11extras icu63 ];
+
+  installPhase = ''
+    mkdir -p $out/share/teamviewer $out/bin $out/share/applications
+    cp -a opt/teamviewer/* $out/share/teamviewer
+    rm -R \
+      $out/share/teamviewer/logfiles \
+      $out/share/teamviewer/config \
+      $out/share/teamviewer/tv_bin/xdg-utils \
+      $out/share/teamviewer/tv_bin/script/{teamviewer_setup,teamviewerd.sysv,teamviewerd.service,teamviewerd.*.conf,tv-delayed-start.sh}
+
+    # Teamviewer packages its own qt library files.
+    # Most of them can be replaced by nixpkgs libraries, but the following need to be used beginning at version 15.35.7
+    # because teamviewer will not start without them, either stalling at startup or even segfaulting. In the logfiles, some missing qt libraries
+    # can be observed, although they are present from nixpkgs. AutoPatchelfHook will automatically choose the included libraries, if present.
+    # See https://github.com/NixOS/nixpkgs/pull/202024
+
+    # delete all library files except "qt" folder
+    find $out/share/teamviewer/tv_bin/RTlib -depth  -maxdepth 1 ! -type d -execdir rm -rf {} +
+
+    # remove all other folders except "qml" and "plugins" from the qml directory
+    find $out/share/teamviewer/tv_bin/RTlib/qt -depth -maxdepth 1 -mindepth 1 -type d ! \( -name "qml" -o -name "plugins" \) -execdir rm -rf {} +
+
+    # keep "QtQuick" and "QtQuick.2" directory
+    find $out/share/teamviewer/tv_bin/RTlib/qt/qml -depth -maxdepth 1 -mindepth 1 -type d ! \( -name "QtQuick" -o -name "QtQuick.2" \) -execdir rm -rf {} +
+
+    # delete all folders except "platforms" from the plugins directory
+    # it contains libqxcb.so from qtbase which seems to be incompatible with our nixpkgs version
+    find $out/share/teamviewer/tv_bin/RTlib/qt/plugins -depth -maxdepth 1 -mindepth 1 -type d ! -name "platforms" -execdir rm -rf {} +
+
+    ln -s $out/share/teamviewer/tv_bin/script/teamviewer $out/bin
+    ln -s $out/share/teamviewer/tv_bin/teamviewerd $out/bin
+    ln -s $out/share/teamviewer/tv_bin/desktop/com.teamviewer.*.desktop $out/share/applications
+    ln -s /var/lib/teamviewer $out/share/teamviewer/config
+    ln -s /var/log/teamviewer $out/share/teamviewer/logfiles
+    ln -s ${xdg-utils}/bin $out/share/teamviewer/tv_bin/xdg-utils
+
+    declare in_script_dir="./opt/teamviewer/tv_bin/script"
+
+    install -d "$out/share/dbus-1/services"
+    install -m 644 "$in_script_dir/com.teamviewer.TeamViewer.service" "$out/share/dbus-1/services"
+    substituteInPlace "$out/share/dbus-1/services/com.teamviewer.TeamViewer.service" \
+      --replace '/opt/teamviewer/tv_bin/TeamViewer' \
+        "$out/share/teamviewer/tv_bin/TeamViewer"
+    install -m 644 "$in_script_dir/com.teamviewer.TeamViewer.Desktop.service" "$out/share/dbus-1/services"
+    substituteInPlace "$out/share/dbus-1/services/com.teamviewer.TeamViewer.Desktop.service" \
+      --replace '/opt/teamviewer/tv_bin/TeamViewer_Desktop' \
+        "$out/share/teamviewer/tv_bin/TeamViewer_Desktop"
+
+    install -d "$out/share/dbus-1/system.d"
+    install -m 644 "$in_script_dir/com.teamviewer.TeamViewer.Daemon.conf" "$out/share/dbus-1/system.d"
+
+    install -d "$out/share/polkit-1/actions"
+    install -m 644 "$in_script_dir/com.teamviewer.TeamViewer.policy" "$out/share/polkit-1/actions"
+    substituteInPlace "$out/share/polkit-1/actions/com.teamviewer.TeamViewer.policy" \
+      --replace '/opt/teamviewer/tv_bin/script/execscript' \
+        "$out/share/teamviewer/tv_bin/script/execscript"
+
+    for i in 16 20 24 32 48 256; do
+      size=$i"x"$i
+
+      mkdir -p $out/share/icons/hicolor/$size/apps
+      ln -s $out/share/teamviewer/tv_bin/desktop/teamviewer_$i.png $out/share/icons/hicolor/$size/apps/TeamViewer.png
+    done;
+
+    sed -i "s,/opt/teamviewer,$out/share/teamviewer,g" $out/share/teamviewer/tv_bin/desktop/com.teamviewer.*.desktop
+
+    substituteInPlace $out/share/teamviewer/tv_bin/script/tvw_aux \
+      --replace '/lib64/ld-linux-x86-64.so.2' '${glibc.out}/lib/ld-linux-x86-64.so.2'
+    substituteInPlace $out/share/teamviewer/tv_bin/script/tvw_config \
+      --replace '/var/run/' '/run/'
+  '';
+
+  makeWrapperArgs = [
+    "--prefix PATH : ${lib.makeBinPath [ getconf coreutils ]}"
+    "--prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ libXrandr libX11 libXext libXdamage libXtst libSM libXfixes dbus icu63 ]}"
+  ];
+
+  postFixup = ''
+    wrapProgram $out/share/teamviewer/tv_bin/teamviewerd ''${makeWrapperArgs[@]}
+    # tv_bin/script/teamviewer runs tvw_main which runs tv_bin/TeamViewer
+    wrapProgram $out/share/teamviewer/tv_bin/script/teamviewer ''${makeWrapperArgs[@]} ''${qtWrapperArgs[@]}
+    wrapProgram $out/share/teamviewer/tv_bin/teamviewer-config ''${makeWrapperArgs[@]} ''${qtWrapperArgs[@]}
+    wrapProgram $out/share/teamviewer/tv_bin/TeamViewer_Desktop ''${makeWrapperArgs[@]} ''${qtWrapperArgs[@]}
+  '';
+
+  dontStrip = true;
+  dontWrapQtApps = true;
+  preferLocalBuild = true;
+
+  meta = with lib; {
+    homepage = "https://www.teamviewer.com";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    description = "Desktop sharing application, providing remote support and online meetings";
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ jagajaga jraygauthier gador ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/remote/vmware-horizon-client/default.nix b/nixpkgs/pkgs/applications/networking/remote/vmware-horizon-client/default.nix
new file mode 100644
index 000000000000..90f155ce2852
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/remote/vmware-horizon-client/default.nix
@@ -0,0 +1,154 @@
+{ stdenv
+, lib
+, buildFHSEnvChroot
+, fetchurl
+, gsettings-desktop-schemas
+, makeDesktopItem
+, makeWrapper
+, opensc
+, writeTextDir
+, configText ? ""
+}:
+let
+  version = "2306";
+
+  sysArch =
+    if stdenv.hostPlatform.system == "x86_64-linux" then "x64"
+    else throw "Unsupported system: ${stdenv.hostPlatform.system}";
+  # The downloaded archive also contains ARM binaries, but these have not been tested.
+
+  # For USB support, ensure that /var/run/vmware/<YOUR-UID>
+  # exists and is owned by you. Then run vmware-usbarbitrator as root.
+  bins = [
+    "vmware-view"
+    "vmware-usbarbitrator"
+  ];
+
+  mainProgram = "vmware-view";
+
+  # This forces the default GTK theme (Adwaita) because Horizon is prone to
+  # UI usability issues when using non-default themes, such as Adwaita-dark.
+  wrapBinCommands = name: ''
+    makeWrapper "$out/bin/${name}" "$out/bin/${name}_wrapper" \
+    --set GTK_THEME Adwaita \
+    --suffix XDG_DATA_DIRS : "${gsettings-desktop-schemas}/share/gsettings-schemas/${gsettings-desktop-schemas.name}" \
+    --suffix LD_LIBRARY_PATH : "$out/lib/vmware/view/crtbora:$out/lib/vmware"
+  '';
+
+  vmwareHorizonClientFiles = stdenv.mkDerivation {
+    pname = "vmware-horizon-files";
+    inherit version;
+    src = fetchurl {
+      url = "https://download3.vmware.com/software/CART24FQ2_LIN_2306_TARBALL/VMware-Horizon-Client-Linux-2306-8.10.0-21964631.tar.gz";
+      sha256 = "6051f6f1617385b3c211b73ff42dad27e2d22362df6ffd2f3d9f559d0b5743ea";
+    };
+    nativeBuildInputs = [ makeWrapper ];
+    installPhase = ''
+      mkdir ext
+      find ${sysArch} -type f -print0 | xargs -0n1 tar -Cext --strip-components=1 -xf
+
+      chmod -R u+w ext/usr/lib
+      mv ext/usr $out
+      cp -r ext/bin ext/lib $out/
+
+      # Horizon includes a copy of libstdc++ which is loaded via $LD_LIBRARY_PATH
+      # when it cannot detect a new enough version already present on the system.
+      # The checks are distribution-specific and do not function correctly on NixOS.
+      # Deleting the bundled library is the simplest way to force it to use our version.
+      rm "$out/lib/vmware/gcc/libstdc++.so.6"
+
+      # This opensc library is required to support smartcard authentication during the
+      # initial connection to Horizon.
+      mkdir $out/lib/vmware/view/pkcs11
+      ln -s ${opensc}/lib/pkcs11/opensc-pkcs11.so $out/lib/vmware/view/pkcs11/libopenscpkcs11.so
+
+      ${lib.concatMapStrings wrapBinCommands bins}
+    '';
+  };
+
+  vmwareFHSUserEnv = name: buildFHSEnvChroot {
+    inherit name;
+
+    runScript = "${vmwareHorizonClientFiles}/bin/${name}_wrapper";
+
+    targetPkgs = pkgs: with pkgs; [
+      at-spi2-atk
+      atk
+      cairo
+      dbus
+      file
+      fontconfig
+      freetype
+      gdk-pixbuf
+      glib
+      gtk2
+      gtk3-x11
+      harfbuzz
+      liberation_ttf
+      libjpeg
+      libpulseaudio
+      libtiff
+      libudev0-shim
+      libuuid
+      libv4l
+      libxml2
+      pango
+      pcsclite
+      pixman
+      vmwareHorizonClientFiles
+      xorg.libX11
+      xorg.libXau
+      xorg.libXcursor
+      xorg.libXext
+      xorg.libXi
+      xorg.libXinerama
+      xorg.libxkbfile
+      xorg.libXrandr
+      xorg.libXrender
+      xorg.libXScrnSaver
+      xorg.libXtst
+      zlib
+
+      (writeTextDir "etc/vmware/config" configText)
+    ];
+  };
+
+  desktopItem = makeDesktopItem {
+    name = "vmware-view";
+    desktopName = "VMware Horizon Client";
+    icon = "${vmwareHorizonClientFiles}/share/icons/vmware-view.png";
+    exec = "${vmwareFHSUserEnv mainProgram}/bin/${mainProgram} %u";
+    mimeTypes = [ "x-scheme-handler/vmware-view" ];
+  };
+
+  binLinkCommands = lib.concatMapStringsSep
+    "\n"
+    (bin: "ln -s ${vmwareFHSUserEnv bin}/bin/${bin} $out/bin/")
+    bins;
+
+in
+stdenv.mkDerivation {
+  pname = "vmware-horizon-client";
+  inherit version;
+
+  dontUnpack = true;
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/applications
+    cp ${desktopItem}/share/applications/* $out/share/applications/
+    ${binLinkCommands}
+  '';
+
+  unwrapped = vmwareHorizonClientFiles;
+
+  passthru.updateScript = ./update.sh;
+
+  meta = with lib; {
+    inherit mainProgram;
+    description = "Allows you to connect to your VMware Horizon virtual desktop";
+    homepage = "https://www.vmware.com/go/viewclients";
+    license = licenses.unfree;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ buckley310 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/remote/vmware-horizon-client/update.sh b/nixpkgs/pkgs/applications/networking/remote/vmware-horizon-client/update.sh
new file mode 100755
index 000000000000..eec3d1de79e0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/remote/vmware-horizon-client/update.sh
@@ -0,0 +1,27 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -p curl -p jq -p common-updater-scripts -i bash
+set -e
+
+entryPointURL='https://customerconnect.vmware.com/channel/public/api/v1.0/products/getRelatedDLGList?locale=en_US&category=desktop_end_user_computing&product=vmware_horizon_clients&version=horizon_8&dlgType=PRODUCT_BINARY'
+
+function getTarballMetaUrl {
+    curl "$entryPointURL" | jq -r '
+        .dlgEditionsLists | .[] | select(.name | contains("Client for Linux")) |
+        .dlgList | .[] | select(.name | contains("tarball version")) |
+        @uri "https://customerconnect.vmware.com/channel/public/api/v1.0/dlg/details?locale=en_US&downloadGroup=\(.code)&productId=\(.productId)&rPId=\(.releasePackageId)"
+    '
+}
+
+meta="$( curl "$(getTarballMetaUrl)" | jq ".downloadFiles | .[]" )"
+
+ver="$( echo "$meta" | jq -r .version )"
+url="$( echo "$meta" | jq -r .thirdPartyDownloadUrl )"
+sum="$( echo "$meta" | jq -r .sha256checksum )"
+
+echo
+echo "version: $ver"
+echo "tar url: $url"
+echo " sha256: $sum"
+
+cd "$(dirname "$0")/../../../../.."
+update-source-version vmware-horizon-client.unwrapped "$ver" "$sum" "$url"
diff --git a/nixpkgs/pkgs/applications/networking/remote/waypipe/default.nix b/nixpkgs/pkgs/applications/networking/remote/waypipe/default.nix
new file mode 100644
index 000000000000..85862c56357a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/remote/waypipe/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchFromGitLab
+, meson, ninja, pkg-config, scdoc
+, mesa, lz4, zstd, ffmpeg, libva
+}:
+
+stdenv.mkDerivation rec {
+  pname = "waypipe";
+  version = "0.8.6";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.freedesktop.org";
+    owner = "mstoeckl";
+    repo = "waypipe";
+    rev = "v${version}";
+    hash = "sha256-1VLPnP4BmF9Zha0uVsPjA/WbF/oLfZmdDX57SzqrV5A=";
+  };
+
+  strictDeps = true;
+  depsBuildBuild = [ pkg-config ];
+  nativeBuildInputs = [ meson ninja pkg-config scdoc ];
+  buildInputs = [
+    # Optional dependencies:
+    mesa lz4 zstd ffmpeg libva
+  ];
+
+  meta = with lib; {
+    description = "A network proxy for Wayland clients (applications)";
+    longDescription = ''
+      waypipe is a proxy for Wayland clients. It forwards Wayland messages and
+      serializes changes to shared memory buffers over a single socket. This
+      makes application forwarding similar to ssh -X feasible.
+    '';
+    homepage = "https://mstoeckl.com/notes/gsoc/blog.html";
+    changelog = "https://gitlab.freedesktop.org/mstoeckl/waypipe/-/releases#v${version}";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ primeos ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/remote/wayvnc/default.nix b/nixpkgs/pkgs/applications/networking/remote/wayvnc/default.nix
new file mode 100644
index 000000000000..c5095d8fd43e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/remote/wayvnc/default.nix
@@ -0,0 +1,76 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, meson
+, ninja
+, pkg-config
+, scdoc
+, wayland-scanner
+, aml
+, jansson
+, libxkbcommon
+, mesa
+, neatvnc
+, pam
+, pixman
+, wayland
+}:
+
+stdenv.mkDerivation rec {
+  pname = "wayvnc";
+  version = "0.6.2";
+
+  src = fetchFromGitHub {
+    owner = "any1";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-yNWTTjlmMCMTed1SiRep3iUxchQya1GnTVoub1cpR14=";
+  };
+
+  strictDeps = true;
+
+  depsBuildBuild = [
+    pkg-config
+  ];
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    scdoc
+    wayland-scanner
+  ];
+
+  buildInputs = [
+    aml
+    jansson
+    libxkbcommon
+    mesa
+    neatvnc
+    pam
+    pixman
+    wayland
+  ];
+
+  mesonFlags = [
+    (lib.mesonBool "tests" true)
+  ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "A VNC server for wlroots based Wayland compositors";
+    longDescription = ''
+      This is a VNC server for wlroots based Wayland compositors. It attaches
+      to a running Wayland session, creates virtual input devices and exposes a
+      single display via the RFB protocol. The Wayland session may be a
+      headless one, so it is also possible to run wayvnc without a physical
+      display attached.
+    '';
+    inherit (src.meta) homepage;
+    changelog = "https://github.com/any1/wayvnc/releases/tag/v${version}";
+    license = licenses.isc;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ nickcao ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/remote/x2goclient/default.nix b/nixpkgs/pkgs/applications/networking/remote/x2goclient/default.nix
new file mode 100644
index 000000000000..bf9f59444aae
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/remote/x2goclient/default.nix
@@ -0,0 +1,68 @@
+{ lib
+, fetchurl
+, cups
+, libssh
+, libXpm
+, nx-libs
+, openldap
+, openssh
+, qt5
+, qtbase
+, qtsvg
+, qtx11extras
+, qttools
+, phonon
+, pkg-config
+}:
+
+qt5.mkDerivation rec {
+  pname = "x2goclient";
+  version = "4.1.2.2";
+
+  src = fetchurl {
+    url = "https://code.x2go.org/releases/source/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "yZUyZ8QPpnEZrZanO6yx8mYZbaIFnwzc0bjVGZQh0So=";
+  };
+
+  buildInputs = [
+    cups
+    libssh
+    libXpm
+    nx-libs
+    openldap
+    openssh
+    qtbase
+    qtsvg
+    qtx11extras
+    qttools
+    phonon
+  ];
+
+  nativeBuildInputs = [
+    pkg-config
+    qt5.wrapQtAppsHook
+  ];
+
+  postPatch = ''
+     substituteInPlace src/onmainwindow.cpp --replace "/usr/sbin/sshd" "${openssh}/bin/sshd"
+     substituteInPlace Makefile \
+       --replace "SHELL=/bin/bash" "SHELL=$SHELL" \
+       --replace "lrelease-qt4" "${qttools.dev}/bin/lrelease" \
+       --replace "qmake-qt4" "${qtbase.dev}/bin/qmake" \
+       --replace "-o root -g root" ""
+  '';
+
+  makeFlags = [ "PREFIX=$(out)" "ETCDIR=$(out)/etc" "build_client" "build_man" ];
+
+  installTargets = [ "install_client" "install_man" ];
+
+  qtWrapperArgs = [ "--suffix PATH : ${nx-libs}/bin:${openssh}/libexec" "--set QT_QPA_PLATFORM xcb" ];
+
+  meta = with lib; {
+    description = "Graphical NoMachine NX3 remote desktop client";
+    homepage = "http://x2go.org/";
+    maintainers = with maintainers; [ mkg20001 ];
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/remote/x2goserver/default.nix b/nixpkgs/pkgs/applications/networking/remote/x2goserver/default.nix
new file mode 100644
index 000000000000..6d7923872ec9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/remote/x2goserver/default.nix
@@ -0,0 +1,93 @@
+{ stdenv, lib, fetchurl, perlPackages, makeWrapper, perl, which, nx-libs
+, util-linux, coreutils, glibc, gawk, gnused, gnugrep, findutils, xorg
+, nettools, iproute2, bc, procps, psmisc, lsof, pwgen, openssh, sshfs, bash
+}:
+
+let
+  pname = "x2goserver";
+  version = "4.1.0.3";
+
+  src = fetchurl {
+    url = "https://code.x2go.org/releases/source/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "Z3aqo1T1pE40nws8F21JiMiKYYwu30bJijeuicBp3NA=";
+  };
+
+  x2go-perl = perlPackages.buildPerlPackage rec {
+    pname = "X2Go";
+    inherit version src;
+    makeFlags = [ "-f" "Makefile.perl" ];
+    patchPhase = ''
+      substituteInPlace X2Go/Config.pm --replace '/etc/x2go' '/var/lib/x2go/conf'
+      substituteInPlace X2Go/Server/DB.pm \
+        --replace '$x2go_lib_path/libx2go-server-db-sqlite3-wrapper' \
+                  '/run/wrappers/bin/x2gosqliteWrapper'
+      substituteInPlace X2Go/Server/DB/SQLite3.pm --replace "user='x2gouser'" "user='x2go'"
+    '';
+  };
+
+  perlEnv = perl.withPackages (p: with p; [
+    x2go-perl DBI DBDSQLite FileBaseDir TryTiny CaptureTiny ConfigSimple Switch FileWhich
+  ]);
+
+  binaryDeps = [
+    perlEnv which nx-libs util-linux coreutils glibc.bin gawk gnused gnugrep
+    findutils nettools iproute2 bc procps psmisc lsof pwgen openssh sshfs
+    xorg.xauth xorg.xinit xorg.xrandr xorg.xmodmap xorg.xwininfo xorg.fontutil
+    xorg.xkbcomp xorg.setxkbmap
+  ];
+in
+stdenv.mkDerivation rec {
+  inherit pname version src;
+
+  buildInputs = [ perlEnv bash ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  prePatch = ''
+    patchShebangs .
+    sed -i '/Makefile.PL\|Makefile.perl/d' Makefile
+    for i in */Makefile; do
+      substituteInPlace "$i" --replace "-o root -g root " ""
+    done
+    substituteInPlace libx2go-server-db-perl/Makefile --replace "chmod 2755" "chmod 755"
+    for i in x2goserver/sbin/x2godbadmin x2goserver/bin/x2go*
+    do
+      substituteInPlace $i --replace '/etc/x2go' '/var/lib/x2go/conf'
+    done
+    substituteInPlace x2goserver/sbin/x2gocleansessions \
+      --replace '/var/run/x2goserver.pid' '/var/run/x2go/x2goserver.pid'
+    substituteInPlace x2goserver/sbin/x2godbadmin --replace 'user="x2gouser"' 'user="x2go"'
+    substituteInPlace x2goserver-xsession/etc/Xsession \
+      --replace "SSH_AGENT /bin/bash -c" "SSH_AGENT ${bash}/bin/bash -c" \
+      --replace "[ -f /etc/redhat-release ]" "[ -d /etc/nix ] || [ -f /etc/redhat-release ]"
+  '';
+
+  makeFlags = [ "PREFIX=/" "NXLIBDIR=${nx-libs}/lib/nx" ];
+
+  installFlags = [ "DESTDIR=$(out)" ];
+
+  postInstall = ''
+    mv $out/etc/x2go/x2goserver.conf{,.example}
+    mv $out/etc/x2go/x2goagent.options{,.example}
+    ln -sf ${nx-libs}/bin/nxagent $out/bin/x2goagent
+    for i in $out/sbin/x2go* $(find $out/bin -type f) \
+      $(ls $out/lib/x2go/x2go* | grep -v x2gocheckport)
+    do
+      wrapProgram $i --prefix PATH : ${lib.makeBinPath binaryDeps}:$out
+    done
+    # We're patching @INC of the setgid wrapper, because we can't mix
+    # the perl wrapper (for PERL5LIB) with security.wrappers (for setgid)
+    sed -ie "s,.\+bin/perl,#!${perl}/bin/perl -I ${perlEnv}/lib/perl5/site_perl," \
+      $out/lib/x2go/libx2go-server-db-sqlite3-wrapper.pl
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Remote desktop application, server component";
+    homepage = "http://x2go.org/";
+    platforms = lib.platforms.linux;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ averelld mkg20001 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/remote/xrdp/default.nix b/nixpkgs/pkgs/applications/networking/remote/xrdp/default.nix
new file mode 100644
index 000000000000..c440b9e5a76e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/remote/xrdp/default.nix
@@ -0,0 +1,107 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, which, perl, autoconf, automake, libtool, openssl, systemd, pam, fuse, libjpeg, libopus, nasm, xorg }:
+
+let
+  xorgxrdp = stdenv.mkDerivation rec {
+    pname = "xorgxrdp";
+    version = "0.9.19";
+
+    src = fetchFromGitHub {
+      owner = "neutrinolabs";
+      repo = "xorgxrdp";
+      rev = "v${version}";
+      hash = "sha256-WI1KyJDQkmNHwweZMbNd2KUfawaieoGMDMQfeD12cZs=";
+    };
+
+    nativeBuildInputs = [ pkg-config autoconf automake which libtool nasm ];
+
+    buildInputs = [ xorg.xorgserver ];
+
+    postPatch = ''
+      # patch from Debian, allows to run xrdp daemon under unprivileged user
+      substituteInPlace module/rdpClientCon.c \
+        --replace 'g_sck_listen(dev->listen_sck);' 'g_sck_listen(dev->listen_sck); g_chmod_hex(dev->uds_data, 0x0660);'
+
+      substituteInPlace configure.ac \
+        --replace 'moduledir=`pkg-config xorg-server --variable=moduledir`' "moduledir=$out/lib/xorg/modules" \
+        --replace 'sysconfdir="/etc"' "sysconfdir=$out/etc"
+    '';
+
+    preConfigure = "./bootstrap";
+
+    configureFlags = [ "XRDP_CFLAGS=-I${xrdp.src}/common"  ];
+
+    enableParallelBuilding = true;
+  };
+
+  xrdp = stdenv.mkDerivation rec {
+    version = "0.9.23";
+    pname = "xrdp";
+
+    src = fetchFromGitHub {
+      owner = "neutrinolabs";
+      repo = "xrdp";
+      rev = "v${version}";
+      fetchSubmodules = true;
+      hash = "sha256-14qsRfLn+26rm+vyMmOtaBEs8mWfSTIsIVseSC2FjXc=";
+    };
+
+    nativeBuildInputs = [ pkg-config autoconf automake which libtool nasm perl ];
+
+    buildInputs = [ openssl systemd pam fuse libjpeg libopus xorg.libX11 xorg.libXfixes xorg.libXrandr ];
+
+    patches = [ ./dynamic_config.patch ];
+
+    postPatch = ''
+      substituteInPlace sesman/xauth.c --replace "xauth -q" "${xorg.xauth}/bin/xauth -q"
+    '';
+
+    preConfigure = ''
+      (cd librfxcodec && ./bootstrap && ./configure --prefix=$out --enable-static --disable-shared)
+      ./bootstrap
+    '';
+    dontDisableStatic = true;
+    configureFlags = [ "--with-systemdsystemunitdir=/var/empty" "--enable-ipv6" "--enable-jpeg" "--enable-fuse" "--enable-rfxcodec" "--enable-opus" "--enable-pam-config=unix" ];
+
+    installFlags = [ "DESTDIR=$(out)" "prefix=" ];
+
+    postInstall = ''
+      # remove generated keys (as non-deterministic)
+      rm $out/etc/xrdp/{rsakeys.ini,key.pem,cert.pem}
+
+      cp $src/keygen/openssl.conf $out/share/xrdp/openssl.conf
+
+      substituteInPlace $out/etc/xrdp/sesman.ini --replace /etc/xrdp/pulse $out/etc/xrdp/pulse
+
+      # remove all session types except Xorg (they are not supported by this setup)
+      perl -i -ne 'print unless /\[(X11rdp|Xvnc|console|vnc-any|sesman-any|rdp-any|neutrinordp-any)\]/ .. /^$/' $out/etc/xrdp/xrdp.ini
+
+      # remove all session types and then add Xorg
+      perl -i -ne 'print unless /\[(X11rdp|Xvnc|Xorg)\]/ .. /^$/' $out/etc/xrdp/sesman.ini
+
+      cat >> $out/etc/xrdp/sesman.ini <<EOF
+
+      [Xorg]
+      param=${xorg.xorgserver}/bin/Xorg
+      param=-modulepath
+      param=${xorgxrdp}/lib/xorg/modules,${xorg.xorgserver}/lib/xorg/modules
+      param=-config
+      param=${xorgxrdp}/etc/X11/xrdp/xorg.conf
+      param=-noreset
+      param=-nolisten
+      param=tcp
+      param=-logfile
+      param=.xorgxrdp.%s.log
+      EOF
+    '';
+
+    enableParallelBuilding = true;
+
+    meta = with lib; {
+      description = "An open source RDP server";
+      homepage = "https://github.com/neutrinolabs/xrdp";
+      license = licenses.asl20;
+      maintainers = with maintainers; [ chvp ];
+      platforms = platforms.linux;
+    };
+  };
+in xrdp
diff --git a/nixpkgs/pkgs/applications/networking/remote/xrdp/dynamic_config.patch b/nixpkgs/pkgs/applications/networking/remote/xrdp/dynamic_config.patch
new file mode 100644
index 000000000000..5c97beeb6701
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/remote/xrdp/dynamic_config.patch
@@ -0,0 +1,376 @@
+diff --git a/common/xrdp_client_info.h b/common/xrdp_client_info.h
+index f45195e8..b87ae64e 100644
+--- a/common/xrdp_client_info.h
++++ b/common/xrdp_client_info.h
+@@ -148,6 +148,9 @@ struct xrdp_client_info
+ 
+     char certificate[1024];
+     char key_file[1024];
++    char rsakeys_ini_file[256];
++    char xrdp_keyboard_ini_file[256];
++    char keymaps_path[256];
+ 
+     /* X11 keyboard layout - inferred from keyboard type/subtype */
+     char model[16];
+diff --git a/libxrdp/xrdp_rdp.c b/libxrdp/xrdp_rdp.c
+index d08f068a..cc7a173d 100644
+--- a/libxrdp/xrdp_rdp.c
++++ b/libxrdp/xrdp_rdp.c
+@@ -27,6 +27,7 @@
+ #include "log.h"
+ #include "ssl_calls.h"
+ #include "string_calls.h"
++#include <string.h>
+ 
+ #if defined(XRDP_NEUTRINORDP)
+ #include <freerdp/codec/rfx.h>
+@@ -46,10 +47,21 @@ xrdp_rdp_read_config(const char *xrdp_ini, struct xrdp_client_info *client_info)
+     struct list *values = (struct list *)NULL;
+     char *item = NULL;
+     char *value = NULL;
++    char cfg_dir[256];
+     int pos;
+     char *tmp = NULL;
+     int tmp_length = 0;
+ 
++    g_strncpy(cfg_dir, xrdp_ini, 255);
++    *(strrchr(cfg_dir, '/')) = 0;
++
++    /* default location is next to xrdp.ini */
++    g_snprintf(client_info->certificate, 1023, "%s/cert.pem", cfg_dir);
++    g_snprintf(client_info->key_file, 1023, "%s/key.pem", cfg_dir);
++    g_snprintf(client_info->xrdp_keyboard_ini_file, 255, "%s/xrdp_keyboard.ini", cfg_dir);
++    g_snprintf(client_info->rsakeys_ini_file, 255, "%s/rsakeys.ini", cfg_dir);
++    g_snprintf(client_info->keymaps_path, 255, "%s", cfg_dir);
++
+     client_info->xrdp_keyboard_overrides.type = -1;
+     client_info->xrdp_keyboard_overrides.subtype = -1;
+     client_info->xrdp_keyboard_overrides.layout = -1;
+@@ -253,14 +265,14 @@ xrdp_rdp_read_config(const char *xrdp_ini, struct xrdp_client_info *client_info)
+             if (g_strlen(value) == 0)
+             {
+                 /* default key_file path */
+-                g_snprintf(client_info->key_file, 1023, "%s/key.pem", XRDP_CFG_PATH);
++                g_snprintf(client_info->key_file, 1023, "%s/key.pem", cfg_dir);
+                 LOG(LOG_LEVEL_INFO, "Using default X.509 key file: %s",
+                     client_info->key_file);
+             }
+             else if (value[0] != '/')
+             {
+                 /* default key_file path */
+-                g_snprintf(client_info->key_file, 1023, "%s/key.pem", XRDP_CFG_PATH);
++                g_snprintf(client_info->key_file, 1023, "%s/key.pem", cfg_dir);
+                 LOG(LOG_LEVEL_WARNING,
+                     "X.509 key file should use absolute path, using "
+                     "default instead: %s", client_info->key_file);
+@@ -277,6 +289,51 @@ xrdp_rdp_read_config(const char *xrdp_ini, struct xrdp_client_info *client_info)
+                     client_info->key_file, g_get_strerror());
+             }
+         }
++        else if (g_strcasecmp(item, "rsakeys_ini") == 0)
++        {
++            if (value[0] != '/')
++            {
++                g_snprintf(client_info->rsakeys_ini_file, 255, "%s/rsakeys.ini", cfg_dir);
++                log_message(LOG_LEVEL_WARNING,
++                            "rsakeys.ini file should use absolute path, using "
++                            "default instead: %s", client_info->rsakeys_ini_file);
++            }
++            else
++            {
++                /* use user defined rsakeys.ini */
++                g_strncpy(client_info->rsakeys_ini_file, value, 255);
++            }
++        }
++        else if (g_strcasecmp(item, "xrdp_keyboard_ini") == 0)
++        {
++            if (value[0] != '/')
++            {
++                g_snprintf(client_info->xrdp_keyboard_ini_file, 255, "%s/xrdp_keyboard.ini", cfg_dir);
++                log_message(LOG_LEVEL_WARNING,
++                            "xrdp_keyboard.ini file should use absolute path, using "
++                            "default instead: %s", client_info->xrdp_keyboard_ini_file);
++            }
++            else
++            {
++                /* use user defined xrdp_keyboard.ini */
++                g_strncpy(client_info->xrdp_keyboard_ini_file, value, 255);
++            }
++        }
++        else if (g_strcasecmp(item, "keymaps_path") == 0)
++        {
++            if (value[0] != '/')
++            {
++                g_snprintf(client_info->keymaps_path, 255, "%s", cfg_dir);
++                log_message(LOG_LEVEL_WARNING,
++                            "keymaps_path should use absolute path, using "
++                            "default instead: %s", client_info->keymaps_path);
++            }
++            else
++            {
++                /* use user defined xrdp_keyboard.ini */
++                g_strncpy(client_info->keymaps_path, value, 255);
++            }
++        }
+         else if (g_strcasecmp(item, "domain_user_separator") == 0
+                  && g_strlen(value) > 0)
+         {
+diff --git a/libxrdp/xrdp_sec.c b/libxrdp/xrdp_sec.c
+index 8fa34aea..da94cf95 100644
+--- a/libxrdp/xrdp_sec.c
++++ b/libxrdp/xrdp_sec.c
+@@ -371,7 +371,6 @@ xrdp_load_keyboard_layout(struct xrdp_client_info *client_info)
+     char *item = (char *)NULL;
+     char *value = (char *)NULL;
+     char *q = (char *)NULL;
+-    char keyboard_cfg_file[256] = { 0 };
+     char rdp_layout[256] = { 0 };
+ 
+     const struct xrdp_keyboard_overrides *ko =
+@@ -419,10 +418,9 @@ xrdp_load_keyboard_layout(struct xrdp_client_info *client_info)
+         client_info->keyboard_subtype = 1;
+     }
+ 
+-    g_snprintf(keyboard_cfg_file, 255, "%s/xrdp_keyboard.ini", XRDP_CFG_PATH);
+-    LOG(LOG_LEVEL_DEBUG, "keyboard_cfg_file %s", keyboard_cfg_file);
++    LOG(LOG_LEVEL_DEBUG, "keyboard_cfg_file %s", client_info->xrdp_keyboard_ini_file);
+ 
+-    fd = g_file_open(keyboard_cfg_file);
++    fd = g_file_open(client_info->xrdp_keyboard_ini_file);
+ 
+     if (fd >= 0)
+     {
+@@ -594,7 +592,7 @@ xrdp_load_keyboard_layout(struct xrdp_client_info *client_info)
+     else
+     {
+         LOG(LOG_LEVEL_ERROR, "xrdp_load_keyboard_layout: error opening %s",
+-            keyboard_cfg_file);
++            client_info->xrdp_keyboard_ini_file);
+     }
+ }
+ 
+@@ -2759,7 +2757,6 @@ xrdp_sec_incoming(struct xrdp_sec *self)
+     int index = 0;
+     char *item = NULL;
+     char *value = NULL;
+-    char key_file[256];
+ 
+     iso = self->mcs_layer->iso_layer;
+ 
+@@ -2805,19 +2802,17 @@ xrdp_sec_incoming(struct xrdp_sec *self)
+             LOG(LOG_LEVEL_DEBUG, "Using RDP security, and "
+                 "reading the server configuration");
+ 
+-            g_memset(key_file, 0, sizeof(char) * 256);
+             g_random(self->server_random, 32);
+             items = list_create();
+             items->auto_free = 1;
+             values = list_create();
+             values->auto_free = 1;
+-            g_snprintf(key_file, 255, "%s/rsakeys.ini", XRDP_CFG_PATH);
+ 
+-            if (file_by_name_read_section(key_file, "keys", items, values) != 0)
++            if (file_by_name_read_section(self->rdp_layer->client_info.rsakeys_ini_file, "keys", items, values) != 0)
+             {
+                 /* this is a show stopper */
+                 LOG(LOG_LEVEL_ERROR, "XRDP cannot read file: %s "
+-                    "(check permissions)", key_file);
++                    "(check permissions)", self->rdp_layer->client_info.rsakeys_ini_file);
+                 list_delete(items);
+                 list_delete(values);
+                 return 1;
+diff --git a/sesman/config.c b/sesman/config.c
+index 61e9e403..0466f61a 100644
+--- a/sesman/config.c
++++ b/sesman/config.c
+@@ -34,6 +34,7 @@
+ #include "sesman.h"
+ #include "log.h"
+ #include "string_calls.h"
++#include <string.h>
+ #include "chansrv/chansrv_common.h"
+ 
+ /***************************************************************************//**
+@@ -47,11 +48,10 @@
+  *
+  */
+ static int
+-config_read_globals(int file, struct config_sesman *cf, struct list *param_n,
++config_read_globals(const char *base_dir, int file, struct config_sesman *cf, struct list *param_n,
+                     struct list *param_v)
+ {
+     int i;
+-    int length;
+     char *buf;
+ 
+     list_clear(param_v);
+@@ -127,13 +127,12 @@ config_read_globals(int file, struct config_sesman *cf, struct list *param_n,
+         g_free(cf->default_wm);
+         cf->default_wm = g_strdup("startwm.sh");
+     }
+-    /* if default_wm doesn't begin with '/', it's a relative path to XRDP_CFG_PATH */
++    /* if default_wm doesn't begin with '/', it's a relative path to base_dir */
+     if (cf->default_wm[0] != '/')
+     {
+         /* sizeof operator returns string length including null terminator  */
+-        length = sizeof(XRDP_CFG_PATH) + g_strlen(cf->default_wm) + 1; /* '/' */
+-        buf = (char *)g_malloc(length, 0);
+-        g_sprintf(buf, "%s/%s", XRDP_CFG_PATH, cf->default_wm);
++        buf = (char *)g_malloc(g_strlen(base_dir) + 1 + g_strlen(cf->default_wm) + 1, 0);
++        g_sprintf(buf, "%s/%s", base_dir, cf->default_wm);
+         g_free(cf->default_wm);
+         cf->default_wm = g_strdup(buf);
+         g_free(buf);
+@@ -151,10 +150,8 @@ config_read_globals(int file, struct config_sesman *cf, struct list *param_n,
+     /* if reconnect_sh doesn't begin with '/', it's a relative path to XRDP_CFG_PATH */
+     if (cf->reconnect_sh[0] != '/')
+     {
+-        /* sizeof operator returns string length including null terminator  */
+-        length = sizeof(XRDP_CFG_PATH) + g_strlen(cf->reconnect_sh) + 1; /* '/' */
+-        buf = (char *)g_malloc(length, 0);
+-        g_sprintf(buf, "%s/%s", XRDP_CFG_PATH, cf->reconnect_sh);
++        buf = (char *)g_malloc(g_strlen(base_dir) + 1 + g_strlen(cf->reconnect_sh) + 1, 0);
++        g_sprintf(buf, "%s/%s", base_dir, cf->reconnect_sh);     
+         g_free(cf->reconnect_sh);
+         cf->reconnect_sh = g_strdup(buf);
+         g_free(buf);
+@@ -511,6 +508,7 @@ struct config_sesman *
+ config_read(const char *sesman_ini)
+ {
+     struct config_sesman *cfg;
++    char cfg_dir[256];
+     int all_ok = 0;
+ 
+     if ((cfg = g_new0(struct config_sesman, 1)) != NULL)
+@@ -532,8 +530,10 @@ config_read(const char *sesman_ini)
+                 param_v->auto_free = 1;
+ 
+                 /* read global config */
+-                config_read_globals(fd, cfg, param_n, param_v);
+-
++                g_strcpy(cfg_dir, sesman_ini);
++                *(strrchr(cfg_dir, '/')) = 0;  // cfg_file validated to contain '/'
++            
++                config_read_globals(cfg_dir, fd, cfg, param_n, param_v);
+                 /* read Xvnc/X11rdp/Xorg parameter list */
+                 config_read_vnc_params(fd, cfg, param_n, param_v);
+                 config_read_rdp_params(fd, cfg, param_n, param_v);
+diff --git a/xrdp/lang.c b/xrdp/lang.c
+index e4c18077..06f92997 100644
+--- a/xrdp/lang.c
++++ b/xrdp/lang.c
+@@ -229,7 +229,7 @@ km_read_section(int fd, const char *section_name, struct xrdp_key_info *keymap)
+ 
+ /*****************************************************************************/
+ int
+-get_keymaps(int keylayout, struct xrdp_keymap *keymap)
++get_keymaps(const char* keymaps_path, int keylayout, struct xrdp_keymap *keymap)
+ {
+     int fd;
+     int basic_key_layout = keylayout & 0x0000ffff;
+@@ -239,21 +239,21 @@ get_keymaps(int keylayout, struct xrdp_keymap *keymap)
+     filename = (char *)g_malloc(256, 0);
+ 
+     /* check if there is a keymap file e.g. km-e00100411.ini */
+-    g_snprintf(filename, 255, "%s/km-%08x.ini", XRDP_CFG_PATH, keylayout);
++    g_snprintf(filename, 255, "%s/km-%08x.ini", keymaps_path, keylayout);
+ 
+     /* if the file does not exist, use only lower 16 bits instead */
+     if (!g_file_exist(filename))
+     {
+         LOG(LOG_LEVEL_WARNING, "Cannot find keymap file %s", filename);
+         /* e.g. km-00000411.ini */
+-        g_snprintf(filename, 255, "%s/km-%08x.ini", XRDP_CFG_PATH, basic_key_layout);
++        g_snprintf(filename, 255, "%s/km-%08x.ini", keymaps_path, basic_key_layout);
+     }
+ 
+     /* finally, use 'en-us' */
+     if (!g_file_exist(filename))
+     {
+         LOG(LOG_LEVEL_WARNING, "Cannot find keymap file %s", filename);
+-        g_snprintf(filename, 255, "%s/km-00000409.ini", XRDP_CFG_PATH);
++        g_snprintf(filename, 255, "%s/km-00000409.ini", keymaps_path);
+     }
+ 
+     if (g_file_exist(filename))
+diff --git a/xrdp/xrdp.c b/xrdp/xrdp.c
+index e91672fb..37cef0c0 100644
+--- a/xrdp/xrdp.c
++++ b/xrdp/xrdp.c
+@@ -384,7 +384,6 @@ xrdp_sanity_check(void)
+ {
+     int intval = 1;
+     int host_be;
+-    const char *key_file = XRDP_CFG_PATH "/rsakeys.ini";
+ 
+     /* check compiled endian with actual endian */
+     host_be = !((int)(*(unsigned char *)(&intval)));
+@@ -429,12 +428,6 @@ xrdp_sanity_check(void)
+         return 1;
+     }
+ 
+-    if (!g_file_exist(key_file))
+-    {
+-        g_writeln("File %s is missing, create it using xrdp-keygen", key_file);
+-        return 1;
+-    }
+-
+     return 0;
+ }
+ 
+diff --git a/xrdp/xrdp.h b/xrdp/xrdp.h
+index 36d8f87a..687b9dd5 100644
+--- a/xrdp/xrdp.h
++++ b/xrdp/xrdp.h
+@@ -380,7 +380,7 @@ get_char_from_scan_code(int device_flags, int scan_code, int *keys,
+                         int caps_lock, int num_lock, int scroll_lock,
+                         struct xrdp_keymap *keymap);
+ int
+-get_keymaps(int keylayout, struct xrdp_keymap *keymap);
++get_keymaps(const char* keymaps_path, int keylayout, struct xrdp_keymap *keymap);
+ 
+ /* xrdp_login_wnd.c */
+ int
+diff --git a/xrdp/xrdp.ini.in b/xrdp/xrdp.ini.in
+index 3b6340f8..c05e2930 100644
+--- a/xrdp/xrdp.ini.in
++++ b/xrdp/xrdp.ini.in
+@@ -52,6 +52,12 @@ crypt_level=high
+ ; openssl req -x509 -newkey rsa:2048 -nodes -keyout key.pem -out cert.pem -days 365
+ certificate=
+ key_file=
++;directory with km-*.ini files; default is the directory of xrdp.ini
++#keymaps_path=
++;location of xrdp_keyboard_ini; default next to xrdp.ini
++#xrdp_keyboard_ini=
++;location of rsakeys.ini; default next to xrdp.ini
++#rsakeys_ini=
+ 
+ ; set SSL protocols
+ ; can be comma separated list of 'SSLv3', 'TLSv1', 'TLSv1.1', 'TLSv1.2', 'TLSv1.3'
+diff --git a/xrdp/xrdp_wm.c b/xrdp/xrdp_wm.c
+index 94691582..602b3ca6 100644
+--- a/xrdp/xrdp_wm.c
++++ b/xrdp/xrdp_wm.c
+@@ -64,7 +64,7 @@ xrdp_wm_create(struct xrdp_process *owner,
+     self->mm = xrdp_mm_create(self);
+     self->default_font = xrdp_font_create(self);
+     /* this will use built in keymap or load from file */
+-    get_keymaps(self->session->client_info->keylayout, &(self->keymap));
++    get_keymaps(client_info->keymaps_path, self->session->client_info->keylayout, &(self->keymap));
+     xrdp_wm_set_login_state(self, WMLS_RESET);
+     self->target_surface = self->screen;
+     self->current_surface_index = 0xffff; /* screen */
+diff --git a/xup/xup.c b/xup/xup.c
+index e67d9477..8bc718a0 100644
+--- a/xup/xup.c
++++ b/xup/xup.c
+@@ -318,7 +318,7 @@ lib_mod_event(struct mod *mod, int msg, tbus param1, tbus param2,
+                     msg param1 param2 param3 param4
+                     15  0      65507  29     0
+                     16  0      65507  29     49152 */
+-                    init_stream(s, 8192);
++                    init_stream(s, (int)sizeof(mod->client_info) < 8192 ? 8192 : (int)sizeof(mod->client_info));
+                     s_push_layer(s, iso_hdr, 4);
+                     out_uint16_le(s, 103);
+                     out_uint32_le(s, 16); /* key up */
diff --git a/nixpkgs/pkgs/applications/networking/resilio-sync/default.nix b/nixpkgs/pkgs/applications/networking/resilio-sync/default.nix
new file mode 100644
index 000000000000..16d5f0952ebc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/resilio-sync/default.nix
@@ -0,0 +1,48 @@
+{ lib, stdenv, fetchurl, autoPatchelfHook, libxcrypt-legacy }:
+
+stdenv.mkDerivation rec {
+  pname = "resilio-sync";
+  version = "2.7.3";
+
+  src = {
+    x86_64-linux = fetchurl {
+      url = "https://download-cdn.resilio.com/${version}/linux-x64/resilio-sync_x64.tar.gz";
+      sha256 = "sha256-DYQs9KofHkvtlsRQHRLwQHoHwSZkr40Ih0RVAw2xv3M=";
+    };
+
+    i686-linux = fetchurl {
+      url = "https://download-cdn.resilio.com/${version}/linux-i386/resilio-sync_i386.tar.gz";
+      sha256 = "sha256-PFKVBs0KthG4tuvooHkAciPhNQP0K8oi2LyoRUs5V7I=";
+    };
+
+    aarch64-linux = fetchurl {
+      url = "https://download-cdn.resilio.com/${version}/linux-arm64/resilio-sync_arm64.tar.gz";
+      sha256 = "sha256-o2DlYOBTkFhQMEDJySlVSNlVqLNbBzacyv2oTwxrXto=";
+    };
+  }.${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
+
+  dontStrip = true; # Don't strip, otherwise patching the rpaths breaks
+  sourceRoot = ".";
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+  ];
+
+  buildInputs = [
+    stdenv.cc.libc
+    libxcrypt-legacy
+  ];
+
+  installPhase = ''
+    install -D rslsync "$out/bin/rslsync"
+  '';
+
+  meta = with lib; {
+    description = "Automatically sync files via secure, distributed technology";
+    homepage    = "https://www.resilio.com/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license     = licenses.unfreeRedistributable;
+    platforms   = platforms.linux;
+    maintainers = with maintainers; [ domenkozar thoughtpolice cwoac jwoudenberg ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/rofi-vpn/default.nix b/nixpkgs/pkgs/applications/networking/rofi-vpn/default.nix
new file mode 100644
index 000000000000..8ff83db294ff
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/rofi-vpn/default.nix
@@ -0,0 +1,40 @@
+{ stdenv
+, lib
+, fetchFromGitLab
+, makeWrapper
+, networkmanager
+, rofi-unwrapped
+}:
+
+stdenv.mkDerivation rec {
+  pname = "rofi-vpn";
+  version = "0.2.0";
+
+  src = fetchFromGitLab {
+    owner = "DamienCassou";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "04jcfb2jy8yyrk4mg68krwh3zb5qcyj1aq1bwk96fhybrq9k2hhp";
+  };
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D --target-directory=$out/bin/ ./rofi-vpn
+
+    wrapProgram $out/bin/rofi-vpn \
+      --prefix PATH ":" ${lib.makeBinPath [ rofi-unwrapped networkmanager ]}
+
+    runHook postInstall
+  '';
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  meta = with lib; {
+    description = "Rofi-based interface to enable VPN connections with NetworkManager";
+    homepage = "https://gitlab.com/DamienCassou/rofi-vpn";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ DamienCassou ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/rymdport/default.nix b/nixpkgs/pkgs/applications/networking/rymdport/default.nix
new file mode 100644
index 000000000000..0ad0fd09f497
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/rymdport/default.nix
@@ -0,0 +1,52 @@
+{ lib
+, stdenv
+, buildGoModule
+, fetchFromGitHub
+, pkg-config
+, libGL
+, xorg
+, Carbon
+, Cocoa
+}:
+
+buildGoModule rec {
+  pname = "rymdport";
+  version = "3.4.0";
+
+  src = fetchFromGitHub {
+    owner = "Jacalz";
+    repo = "rymdport";
+    rev = "v${version}";
+    hash = "sha256-nqB4KZdYSTiyIaslFN6ncwJnD8+7ZgHj/SXAa5YAt9k=";
+  };
+
+  vendorHash = "sha256-03qdjeU6u0mBcdWlMhs9ORaeBkPNMO4Auqy/rOFIaVM=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = with xorg; [
+    libGL
+    libX11
+    libXcursor
+    libXext
+    libXi
+    libXinerama
+    libXrandr
+    libXxf86vm
+  ] ++ lib.optionals stdenv.isDarwin [
+    Carbon
+    Cocoa
+    IOKit
+  ];
+
+  meta = {
+    description = "Easy encrypted file, folder, and text sharing between devices";
+    homepage = "https://github.com/Jacalz/rymdport";
+    changelog = "https://github.com/Jacalz/rymdport/blob/${src.rev}/CHANGELOG.md";
+    license = lib.licenses.gpl3Plus;
+    maintainers = with lib.maintainers; [ dotlambda ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/scaleft/default.nix b/nixpkgs/pkgs/applications/networking/scaleft/default.nix
new file mode 100644
index 000000000000..d31d56702ace
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/scaleft/default.nix
@@ -0,0 +1,48 @@
+{ lib, stdenv, fetchurl, rpmextract, patchelf, bash, testers, scaleft }:
+
+stdenv.mkDerivation rec {
+  pname = "scaleft";
+  version = "1.67.4";
+
+  src =
+    fetchurl {
+      url = "http://pkg.scaleft.com/rpm/scaleft-client-tools-${version}-1.x86_64.rpm";
+      sha256 = "kRCShTMKf5qKFth/8H8XHLj12YIVQ9G5f2MvVJRtyDs=";
+    };
+
+  nativeBuildInputs = [ patchelf rpmextract ];
+
+  libPath =
+    lib.makeLibraryPath
+       [ stdenv.cc stdenv.cc.cc.lib ];
+
+  buildCommand = ''
+    mkdir -p $out/bin/
+    cd $out
+    rpmextract $src
+    patchelf \
+      --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \
+      usr/bin/sft
+    patchelf \
+      --set-rpath ${libPath} \
+      usr/bin/sft
+    ln -s $out/usr/bin/sft $out/bin/sft
+    chmod +x $out/bin/sft
+    patchShebangs $out
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = scaleft;
+    command = "sft -v";
+    version = "sft version ${version}";
+  };
+
+  meta = with lib; {
+    description = "ScaleFT provides Zero Trust software which you can use to secure your internal servers and services";
+    homepage = "https://www.scaleft.com";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = with maintainers; [ jloyet ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/seafile-client/default.nix b/nixpkgs/pkgs/applications/networking/seafile-client/default.nix
new file mode 100644
index 000000000000..3b0c494bb6f3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/seafile-client/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, cmake
+, qtbase
+, qttools
+, libuuid
+, seafile-shared
+, jansson
+, libsearpc
+, withShibboleth ? true
+, qtwebengine
+, wrapQtAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "seafile-client";
+  version = "9.0.3";
+
+  src = fetchFromGitHub {
+    owner = "haiwen";
+    repo = "seafile-client";
+    rev = "v${version}";
+    sha256 = "sha256-zoo34mhNZTEwxjSy8XgmZfEjkujmWj34OtDJQSCb/zk=";
+  };
+
+  nativeBuildInputs = [
+    libuuid
+    pkg-config
+    cmake
+    wrapQtAppsHook
+    qttools
+  ];
+
+  buildInputs = [
+    seafile-shared
+    jansson
+    libsearpc
+  ] ++ lib.optional withShibboleth qtwebengine;
+
+  cmakeFlags = lib.optional withShibboleth "-DBUILD_SHIBBOLETH_SUPPORT=ON";
+
+  qtWrapperArgs = [
+    "--suffix PATH : ${lib.makeBinPath [ seafile-shared ]}"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/haiwen/seafile-client";
+    description = "Desktop client for Seafile, the Next-generation Open Source Cloud Storage";
+    license = licenses.asl20;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ schmittlauch greizgh ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/seahub/default.nix b/nixpkgs/pkgs/applications/networking/seahub/default.nix
new file mode 100644
index 000000000000..9bd90ad928c9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/seahub/default.nix
@@ -0,0 +1,98 @@
+{ lib
+, fetchFromGitHub
+, fetchpatch
+, python3
+, makeWrapper
+, nixosTests
+}:
+let
+  # Seahub 8.x.x does not support django-webpack-loader >=1.x.x
+  python = python3.override {
+    packageOverrides = self: super: {
+      django-webpack-loader = super.django-webpack-loader.overridePythonAttrs (old: rec {
+        version = "0.7.0";
+        src = old.src.override {
+          inherit version;
+          hash = "sha256-ejyIIBqlRIH5OZRlYVy+e5rs6AgUlqbQKHt8uOIy9Ec=";
+        };
+      });
+    };
+  };
+in
+python.pkgs.buildPythonApplication rec {
+  pname = "seahub";
+  version = "9.0.10";
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "haiwen";
+    repo = "seahub";
+    rev = "5971bf25fe67d94ec4d9f53b785c15a098113620"; # using a fixed revision because upstream may re-tag releases :/
+    sha256 = "sha256-7Exvm3EShb/1EqwA4wzWB9zCdv0P/ISmjKSoqtOMnqk=";
+  };
+
+  patches = [
+    (fetchpatch {
+      # PIL update fix
+      url = "https://patch-diff.githubusercontent.com/raw/haiwen/seahub/pull/5570.patch";
+      sha256 = "sha256-7V2aRlacJ7Qhdi9k4Bs+t/Emx+EAM/NNCI+K40bMwLA=";
+    })
+  ];
+
+  dontBuild = true;
+
+  doCheck = false; # disabled because it requires a ccnet environment
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  propagatedBuildInputs = with python.pkgs; [
+    django
+    future
+    django-compressor
+    django-statici18n
+    django-webpack-loader
+    django-simple-captcha
+    django-picklefield
+    django-formtools
+    mysqlclient
+    pillow
+    python-dateutil
+    djangorestframework
+    openpyxl
+    requests
+    requests-oauthlib
+    chardet
+    pyjwt
+    pycryptodome
+    qrcode
+    pysearpc
+    seaserv
+    gunicorn
+    markdown
+    bleach
+  ];
+
+  installPhase = ''
+    cp -dr --no-preserve='ownership' . $out/
+    wrapProgram $out/manage.py \
+      --prefix PYTHONPATH : "$PYTHONPATH:$out/thirdpart:"
+  '';
+
+  passthru = {
+    inherit python;
+    pythonPath = python.pkgs.makePythonPath propagatedBuildInputs;
+    tests = {
+      inherit (nixosTests) seafile;
+    };
+  };
+
+  meta = with lib; {
+    description = "The web end of seafile server";
+    homepage = "https://github.com/haiwen/seahub";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ greizgh schmittlauch ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/seaweedfs/default.nix b/nixpkgs/pkgs/applications/networking/seaweedfs/default.nix
new file mode 100644
index 000000000000..e6e97bd0abee
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/seaweedfs/default.nix
@@ -0,0 +1,61 @@
+{ lib
+, fetchFromGitHub
+, buildGoModule
+, testers
+, seaweedfs
+}:
+
+buildGoModule rec {
+  pname = "seaweedfs";
+  version = "3.55";
+
+  src = fetchFromGitHub {
+    owner = "seaweedfs";
+    repo = "seaweedfs";
+    rev = version;
+    hash = "sha256-qAyvGisj6GOjyRmqpTsxX/Zy8bx6+cAtmEId5us70+k=";
+  };
+
+  vendorHash = "sha256-F6Fqv5tUsty/uGwBnKM4r671Gh2T1+9Z2LRGAMF+M2g=";
+
+  subPackages = [ "weed" ];
+
+  ldflags = [
+    "-w"
+    "-s"
+    "-X github.com/seaweedfs/seaweedfs/weed/util.COMMIT=N/A"
+  ];
+
+  tags = [
+    "elastic"
+    "gocdk"
+    "sqlite"
+    "ydb"
+    "tikv"
+  ];
+
+  preBuild = ''
+    export GODEBUG=http2client=0
+  '';
+
+  preCheck = ''
+    # Test all targets.
+    unset subPackages
+
+    # Remove unmaintained tests ahd those that require additional services.
+    rm -rf unmaintained test/s3
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = seaweedfs;
+    command = "weed version";
+  };
+
+  meta = with lib; {
+    description = "Simple and highly scalable distributed file system";
+    homepage = "https://github.com/chrislusf/seaweedfs";
+    maintainers = with maintainers; [ azahi cmacrae wozeparrot ];
+    mainProgram = "weed";
+    license = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/shellhub-agent/default.nix b/nixpkgs/pkgs/applications/networking/shellhub-agent/default.nix
new file mode 100644
index 000000000000..cfb35e526806
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/shellhub-agent/default.nix
@@ -0,0 +1,60 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, nix-update-script
+, makeWrapper
+, openssh
+, libxcrypt
+, testers
+, shellhub-agent
+}:
+
+buildGoModule rec {
+  pname = "shellhub-agent";
+  version = "0.12.5";
+
+  src = fetchFromGitHub {
+    owner = "shellhub-io";
+    repo = "shellhub";
+    rev = "v${version}";
+    hash = "sha256-+2YYTnQDU9AkCjWvUEsddgu8GVJk0VUCMkEeWhW/u0w=";
+  };
+
+  modRoot = "./agent";
+
+  vendorHash = "sha256-lZ7W7YpigcVaLO9HoS5V379nyKHemRh9Z2NjlZbJcPg=";
+
+  ldflags = [ "-s" "-w" "-X main.AgentVersion=v${version}" ];
+
+  passthru = {
+    updateScript = nix-update-script { };
+
+    tests.version = testers.testVersion {
+      package = shellhub-agent;
+      command = "agent --version";
+      version = "v${version}";
+    };
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ libxcrypt ];
+
+  postInstall = ''
+    wrapProgram $out/bin/agent --prefix PATH : ${lib.makeBinPath [ openssh ]}
+  '';
+
+  meta = with lib; {
+    description =
+      "Enables easy access any Linux device behind firewall and NAT";
+    longDescription = ''
+      ShellHub is a modern SSH server for remotely accessing Linux devices via
+      command line (using any SSH client) or web-based user interface, designed
+      as an alternative to _sshd_. Think ShellHub as centralized SSH for the the
+      edge and cloud computing.
+    '';
+    homepage = "https://shellhub.io/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ otavio ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/sieve-connect/default.nix b/nixpkgs/pkgs/applications/networking/sieve-connect/default.nix
new file mode 100644
index 000000000000..46fc2a7ae170
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/sieve-connect/default.nix
@@ -0,0 +1,50 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, perlPackages, installShellFiles }:
+
+stdenv.mkDerivation rec {
+  pname = "sieve-connect";
+  version = "0.90";
+
+  src = fetchFromGitHub {
+    owner = "philpennock";
+    repo = "sieve-connect";
+    rev = "v${version}";
+    sha256 = "1ghvfa5ifa68b6imh85bkmy00r93c5f9hs6d039axb73gmma580p";
+  };
+
+  buildInputs = [ perlPackages.perl ];
+  nativeBuildInputs = [ makeWrapper installShellFiles ];
+
+  preBuild = ''
+    # Fixes failing build when not building in git repo
+    mkdir .git
+    touch .git/HEAD
+    echo "${version}" > versionfile
+    echo "$(date +%Y-%m-%d)" > datefile
+  '';
+
+  buildFlags = [ "PERL5LIB=${perlPackages.makePerlPath [ perlPackages.FileSlurp ]}" "bin" "man" ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    install -m 755 sieve-connect $out/bin
+    installManPage sieve-connect.1
+
+    wrapProgram $out/bin/sieve-connect \
+      --prefix PERL5LIB : "${with perlPackages; makePerlPath [
+        AuthenSASL Socket6 IOSocketINET6 IOSocketSSL NetSSLeay NetDNS
+        TermReadKey TermReadLineGnu ]}"
+  '';
+
+  meta = with lib; {
+    description = "A client for the MANAGESIEVE Protocol";
+    longDescription = ''
+      This is sieve-connect. A client for the ManageSieve protocol,
+      as specifed in RFC 5804. Historically, this was MANAGESIEVE as
+      implemented by timsieved in Cyrus IMAP.
+    '';
+    homepage = "https://github.com/philpennock/sieve-connect";
+    license = licenses.bsd3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ das_j ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/siproxd/cheaders.patch b/nixpkgs/pkgs/applications/networking/siproxd/cheaders.patch
new file mode 100644
index 000000000000..69a3e3287371
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/siproxd/cheaders.patch
@@ -0,0 +1,14 @@
+diff --git a/src/dejitter.c b/src/dejitter.c
+index 1904ab3..cb3624d 100644
+--- a/src/dejitter.c
++++ b/src/dejitter.c
+@@ -22,6 +22,8 @@
+
+ #include <errno.h>
+
++#include <string.h>
++#include <sys/time.h>
+ #include <unistd.h>
+ #include <sys/types.h>
+ #include <sys/socket.h>
+ #include <netinet/in.h>
diff --git a/nixpkgs/pkgs/applications/networking/siproxd/default.nix b/nixpkgs/pkgs/applications/networking/siproxd/default.nix
new file mode 100644
index 000000000000..1b2d3053d9be
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/siproxd/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchurl, libosip, sqlite }:
+
+stdenv.mkDerivation rec {
+  pname = "siproxd";
+  version = "0.8.3";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/siproxd/siproxd-${version}.tar.gz";
+    sha256 = "0dkpl3myxz3gvj2n2qpqrd19dip9il0vf7qybdvn5wgznrmplvcs";
+  };
+
+  patches = [ ./cheaders.patch ];
+
+  buildInputs = [ libosip sqlite ];
+
+  meta = {
+    homepage = "http://siproxd.sourceforge.net/";
+    description = "A masquerading SIP Proxy Server";
+    maintainers = with lib.maintainers; [viric];
+    platforms = with lib.platforms; linux;
+    license = lib.licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/sniffers/etherape/default.nix b/nixpkgs/pkgs/applications/networking/sniffers/etherape/default.nix
new file mode 100644
index 000000000000..067175bdb480
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/sniffers/etherape/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchurl, pkg-config, libtool, gtk3, libpcap, goocanvas2,
+popt, itstool, libxml2 }:
+
+stdenv.mkDerivation rec {
+  pname = "etherape";
+  version = "0.9.20";
+  src = fetchurl {
+    url = "mirror://sourceforge/etherape/etherape-${version}.tar.gz";
+    sha256 = "sha256-9UsQtWOXB1yYofGS4rMIF+ISWBsJKd0DBOFfqOr1n5Y=";
+  };
+
+  nativeBuildInputs = [ itstool pkg-config (lib.getBin libxml2) ];
+  buildInputs = [
+    libtool gtk3 libpcap goocanvas2 popt
+  ];
+
+  meta = with lib; {
+    homepage = "http://etherape.sourceforge.net/";
+    license = lib.licenses.gpl2Plus;
+    platforms = with platforms; linux;
+    maintainers = with maintainers; [ symphorien ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/sniffers/ettercap/default.nix b/nixpkgs/pkgs/applications/networking/sniffers/ettercap/default.nix
new file mode 100644
index 000000000000..3554592fbe12
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/sniffers/ettercap/default.nix
@@ -0,0 +1,58 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch2, cmake, libpcap, libnet, zlib, curl, pcre
+, openssl, ncurses, glib, gtk3, atk, pango, flex, bison, geoip, harfbuzz
+, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "ettercap";
+  version = "0.8.3.1";
+
+  src = fetchFromGitHub {
+    owner = "Ettercap";
+    repo = "ettercap";
+    rev = "v${version}";
+    sha256 = "1sdf1ssa81ib6k0mc5m2jzbjl4jd1yv6ahv5dwx2x9w4b2pyqg1c";
+  };
+
+  patches = [
+    (fetchpatch2 {
+      name = "curl-8.patch";
+      url = "https://github.com/Ettercap/ettercap/commit/9ec4066addc49483e40055e0738c2e0ef144702f.diff";
+      sha256 = "6D8lIxub0OS52BFr42yWRyqS2Q5CrpTLTt6rcItXFMM=";
+    })
+  ];
+
+  strictDeps = true;
+  nativeBuildInputs = [ cmake flex bison pkg-config ];
+  buildInputs = [
+    libpcap libnet zlib curl pcre openssl ncurses
+    glib gtk3 atk pango geoip harfbuzz
+  ];
+
+  preConfigure = ''
+    substituteInPlace CMakeLists.txt --replace /etc \$\{INSTALL_PREFIX\}/etc \
+                                     --replace /usr \$\{INSTALL_PREFIX\}
+  '';
+
+  cmakeFlags = [
+    "-DBUNDLED_LIBS=Off"
+    "-DGTK3_GLIBCONFIG_INCLUDE_DIR=${glib.out}/lib/glib-2.0/include"
+  ];
+
+  # TODO: Remove after the next release (0.8.4 should work without this):
+  env.NIX_CFLAGS_COMPILE = toString [ "-I${harfbuzz.dev}/include/harfbuzz" ];
+
+  meta = with lib; {
+    description = "Comprehensive suite for man in the middle attacks";
+    longDescription = ''
+      Ettercap is a comprehensive suite for man in the middle attacks. It
+      features sniffing of live connections, content filtering on the fly and
+      many other interesting tricks. It supports active and passive dissection
+      of many protocols and includes many features for network and host
+      analysis.
+    '';
+    homepage = "https://www.ettercap-project.org/";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ pSub ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/sniffers/kismet/default.nix b/nixpkgs/pkgs/applications/networking/sniffers/kismet/default.nix
new file mode 100644
index 000000000000..b0feaf38ecc4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/sniffers/kismet/default.nix
@@ -0,0 +1,106 @@
+{ lib
+, stdenv
+, binutils
+, elfutils
+, fetchurl
+, glib
+, libcap
+, libmicrohttpd
+, libnl
+, libpcap
+, libusb1
+, libwebsockets
+, lm_sensors
+, networkmanager
+, pcre
+, pkg-config
+, openssl
+, protobuf
+, protobufc
+, python3
+, sqlite
+, withNetworkManager ? false
+, withPython ? true
+, withSensors ? false
+, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "kismet";
+  version = "2022-08-R1";
+
+  src = fetchurl {
+    url = "https://www.kismetwireless.net/code/${pname}-${version}.tar.xz";
+    hash = "sha256-IUnM6sVSZQhlP00C3PemlOPaPcAAojcqHuS/mYgnl4E=";
+  };
+
+  postPatch = ''
+    substituteInPlace Makefile.in \
+      --replace "-m 4550" ""
+  '';
+
+  postConfigure = ''
+    sed -e 's/-o $(INSTUSR)//' \
+        -e 's/-g $(INSTGRP)//' \
+        -e 's/-g $(MANGRP)//' \
+        -e 's/-g $(SUIDGROUP)//' \
+        -i Makefile
+  '';
+
+  nativeBuildInputs = [
+    pkg-config
+  ] ++ lib.optionals withPython [
+    python3
+  ];
+
+  buildInputs = [
+    binutils
+    elfutils
+    libcap
+    libmicrohttpd
+    libnl
+    libpcap
+    openssl
+    libusb1
+    libwebsockets
+    pcre
+    protobuf
+    protobufc
+    sqlite
+    zlib
+  ] ++ lib.optionals withNetworkManager [
+    networkmanager
+    glib
+  ] ++ lib.optionals withSensors [
+    lm_sensors
+  ];
+
+  propagatedBuildInputs = [
+  ] ++ lib.optionals withPython [
+    (python3.withPackages (ps: [
+      ps.numpy
+      ps.protobuf
+      ps.pyserial
+      ps.setuptools
+      ps.websockets
+    ]))
+  ];
+
+  configureFlags = [
+  ] ++ lib.optionals (!withNetworkManager) [
+    "--disable-libnm"
+  ] ++ lib.optionals (!withPython) [
+    "--disable-python-tools"
+  ] ++ lib.optionals (!withSensors) [
+    "--disable-lmsensors"
+  ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Wireless network sniffer";
+    homepage = "https://www.kismetwireless.net/";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/sniffers/qtwirediff/default.nix b/nixpkgs/pkgs/applications/networking/sniffers/qtwirediff/default.nix
new file mode 100644
index 000000000000..d4fe6c8ee708
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/sniffers/qtwirediff/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, qtbase
+, qmake
+, qtwayland
+, wrapQtAppsHook
+, wireshark-cli
+}:
+
+
+stdenv.mkDerivation {
+  pname = "qtwirediff";
+  version = "unstable-2023-03-07";
+
+  src = fetchFromGitHub {
+    owner = "aaptel";
+    repo = "qtwirediff";
+    rev = "e0a38180cdf9d94b7535c441487dcefb3a8ec72e";
+    hash = "sha256-QS4PslSHe2qhxayF7IHvtFASgd4A7vVtSY8tFQ6dqXM=";
+  };
+
+  nativeBuildInputs = [
+    qmake
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    qtbase
+  ] ++ lib.optionals stdenv.isLinux [
+    qtwayland
+  ];
+
+  installPhase = ''
+    runHook preInstall
+  '' + lib.optionalString stdenv.isDarwin ''
+    mkdir -p $out/Applications
+    cp -r qtwirediff.app $out/Applications
+    makeWrapper $out/{Applications/qtwirediff.app/Contents/MacOS,bin}/qtwirediff
+  '' + lib.optionalString stdenv.isLinux ''
+    install -Dm755 -T qtwirediff $out/bin/qtwirediff
+    wrapProgram $out/bin/qtwirediff \
+      --prefix PATH : "${lib.makeBinPath [ wireshark-cli ]}"
+  '' + ''
+    runHook postInstall
+  '';
+
+  meta = {
+    description = "Debugging tool to diff network traffic leveraging Wireshark";
+    homepage = "https://github.com/aaptel/qtwirediff";
+    license = lib.licenses.gpl3Plus;
+    maintainers = with lib.maintainers; [ janik ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/sniffers/savvycan/default.nix b/nixpkgs/pkgs/applications/networking/sniffers/savvycan/default.nix
new file mode 100644
index 000000000000..aea109549221
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/sniffers/savvycan/default.nix
@@ -0,0 +1,64 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, qtbase
+, qttools
+, qmake
+, qtserialbus
+, qtserialport
+, qtdeclarative
+, wrapQtAppsHook
+}:
+
+stdenv.mkDerivation rec {
+
+  pname = "savvycan";
+  version = "213";
+
+  src = fetchFromGitHub {
+    owner = "collin80";
+    repo = "SavvyCAN";
+    rev = "V${version}";
+    hash = "sha256-duITY6s/uadeBCFuG42JbLCaq7yaYv1qB8Q3GA8UJ0A=";
+  };
+
+  buildInputs = [ qtbase qttools qtserialbus qtserialport qtdeclarative ];
+
+  nativeBuildInputs = [ qmake wrapQtAppsHook ];
+
+  meta = with lib; {
+    description = "QT based cross platform canbus tool";
+    homepage = "https://savvycan.com/";
+    changelog = "https://github.com/collin80/SavvyCAN/releases/tag/${version}";
+    maintainers = with maintainers; [ simoneruffini ];
+    platforms = platforms.all;
+    license = licenses.mit;
+    mainProgram = "SavvyCAN";
+    longDescription = ''
+      SavvyCAN is a cross platform QT based C++ program. It is a CAN bus reverse
+      engineering and capture tool. It was originally written to utilize EVTV
+      hardware such as the EVTVDue and CANDue hardware. It has since expanded to be
+      able to use any socketCAN compatible device as well as the Macchina M2 and
+      Teensy 3.x boards. SavvyCAN can use any CAN interface supported by QT's
+      SerialBus system (PeakCAN, Vector, SocketCAN, J2534, etc) It can capture and
+      send to multiple buses and CAN capture devices at once. It has many functions
+      specifically meant for reverse engineering data found on the CAN bus:
+      - Ability to capture even very highly loaded buses
+      - Ability to connect to many dongles simultaneously
+      - Scan captured traffic for data that looks coherent
+      - Show ASCII of captured data to find things like VIN numbers and traffic to
+        and from the radio
+      - Graph data found on the bus
+      - Load and Save many different file formats common to CAN capture tools (Vector
+        captures, Microchip, CANDo, PCAN, and many more)
+      - Load and Save DBC files. DBC files are used to store definitions for how data
+        are formatted on the bus. You can turn the raw data into things like a RPM,
+        odometer readings, and more.
+      - UDS scanning and decoding
+      - Scripting interface to be able to expand the scope of the software
+      - Best of all, it's free and open source. Don't like something about it? Change
+        it!
+    '';
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/networking/sniffers/sngrep/default.nix b/nixpkgs/pkgs/applications/networking/sniffers/sngrep/default.nix
new file mode 100644
index 000000000000..36084ae3acda
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/sniffers/sngrep/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, stdenv
+, autoconf
+, automake
+, fetchFromGitHub
+, fetchpatch
+, libpcap
+, ncurses
+, openssl
+, pcre
+}:
+
+stdenv.mkDerivation rec {
+  pname = "sngrep";
+  version = "1.7.0";
+
+  src = fetchFromGitHub {
+    owner = "irontec";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-gFba2wOU4GwpOZTo5A2QpBgnC6OgDJEeyaPGHbA+7tA=";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "CVE-2023-36192.patch";
+      url = "https://github.com/irontec/sngrep/commit/ad1daf15c8387bfbb48097c25197bf330d2d98fc.patch";
+      hash = "sha256-g8fxvxi3d7jmZEKTbxqw29hJbm/ShsKKxstsOUGxTug=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    autoconf
+    automake
+  ];
+
+  buildInputs = [
+    libpcap
+    ncurses
+    ncurses
+    openssl
+    pcre
+  ];
+
+  configureFlags = [
+    "--with-pcre"
+    "--enable-unicode"
+    "--enable-ipv6"
+    "--enable-eep"
+  ];
+
+  preConfigure = ''
+    ./bootstrap.sh
+  '';
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "A tool for displaying SIP calls message flows from terminal";
+    homepage = "https://github.com/irontec/sngrep";
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ jorise ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/sniffers/whsniff/default.nix b/nixpkgs/pkgs/applications/networking/sniffers/whsniff/default.nix
new file mode 100644
index 000000000000..514336e7a6b9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/sniffers/whsniff/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, libusb1 }:
+
+stdenv.mkDerivation rec {
+  pname = "whsniff";
+  version = "1.3";
+
+  src = fetchFromGitHub {
+    owner = "homewsn";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "000l5vk9c0332m35lndk8892ivdr445lgg25hmq1lajn24cash5w";
+  };
+
+  buildInputs = [ libusb1 ];
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/homewsn/whsniff";
+    description = "Packet sniffer for 802.15.4 wireless networks";
+    maintainers = with maintainers; [ snicket2100 ];
+    platforms = platforms.linux;
+    license = licenses.gpl2Only;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/sniffers/wireshark/default.nix b/nixpkgs/pkgs/applications/networking/sniffers/wireshark/default.nix
new file mode 100644
index 000000000000..99839d9c99d2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/sniffers/wireshark/default.nix
@@ -0,0 +1,183 @@
+{ lib
+, stdenv
+, buildPackages
+, fetchFromGitLab
+, pkg-config
+, pcre2
+, perl
+, flex
+, bison
+, gettext
+, libpcap
+, libnl
+, c-ares
+, gnutls
+, libgcrypt
+, libgpg-error
+, libmaxminddb
+, libopus
+, bcg729
+, spandsp3
+, libkrb5
+, speexdsp
+, libsmi
+, lz4
+, snappy
+, zstd
+, minizip
+, sbc
+, openssl
+, lua5
+, python3
+, libcap
+, glib
+, libssh
+, nghttp2
+, zlib
+, cmake
+, ninja
+, makeWrapper
+, wrapGAppsHook
+, withQt ? true
+, qt6 ? null
+, ApplicationServices
+, SystemConfiguration
+, gmp
+, asciidoctor
+}:
+
+assert withQt -> qt6 != null;
+
+let
+  version = "4.0.8";
+  variant = if withQt then "qt" else "cli";
+in
+stdenv.mkDerivation {
+  pname = "wireshark-${variant}";
+  inherit version;
+  outputs = [ "out" "dev" ];
+
+  src = fetchFromGitLab {
+    repo = "wireshark";
+    owner = "wireshark";
+    rev = "v${version}";
+    hash = "sha256-bNg0yhNb1GRsTclNWWO+Bamm2wOnUjVKU+JftJu+LTo=";
+  };
+
+  cmakeFlags = [
+    "-DBUILD_wireshark=${if withQt then "ON" else "OFF"}"
+    "-DENABLE_APPLICATION_BUNDLE=${if withQt && stdenv.isDarwin then "ON" else "OFF"}"
+    # Fix `extcap` and `plugins` paths. See https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=16444
+    "-DCMAKE_INSTALL_LIBDIR=lib"
+    "-DLEMON_C_COMPILER=cc"
+    "-DUSE_qt6=ON"
+  ] ++ lib.optionals (stdenv.buildPlatform != stdenv.hostPlatform) [
+    "-DHAVE_C99_VSNPRINTF_EXITCODE=0"
+    "-DHAVE_C99_VSNPRINTF_EXITCODE__TRYRUN_OUTPUT="
+  ];
+
+  # Avoid referencing -dev paths because of debug assertions.
+  env.NIX_CFLAGS_COMPILE = toString [ "-DQT_NO_DEBUG" ];
+
+  nativeBuildInputs = [ asciidoctor bison cmake ninja flex makeWrapper pkg-config python3 perl ]
+    ++ lib.optionals withQt [ qt6.wrapQtAppsHook wrapGAppsHook ];
+
+  depsBuildBuild = lib.optionals (stdenv.buildPlatform != stdenv.hostPlatform) [ buildPackages.stdenv.cc ];
+
+  buildInputs = [
+    gettext
+    pcre2
+    libpcap
+    lua5
+    libssh
+    nghttp2
+    openssl
+    libgcrypt
+    libgpg-error
+    gnutls
+    libmaxminddb
+    libopus
+    bcg729
+    spandsp3
+    libkrb5
+    speexdsp
+    libsmi
+    lz4
+    snappy
+    zstd
+    minizip
+    c-ares
+    glib
+    zlib
+  ] ++ lib.optionals withQt (with qt6; [ qtbase qtmultimedia qtsvg qttools qt5compat ])
+  ++ lib.optionals (withQt && stdenv.isLinux) [ qt6.qtwayland ]
+  ++ lib.optionals stdenv.isLinux [ libcap libnl sbc ]
+  ++ lib.optionals stdenv.isDarwin [ SystemConfiguration ApplicationServices gmp ];
+
+  strictDeps = true;
+
+  patches = [ ./wireshark-lookup-dumpcap-in-path.patch ];
+
+  postPatch = ''
+    sed -i -e '1i cmake_policy(SET CMP0025 NEW)' CMakeLists.txt
+  '';
+
+  postInstall = ''
+    # to remove "cycle detected in the references"
+    mkdir -p $dev/lib/wireshark
+    mv $out/lib/wireshark/cmake $dev/lib/wireshark
+  '' + (if stdenv.isDarwin && withQt then ''
+    mkdir -p $out/Applications
+    mv $out/bin/Wireshark.app $out/Applications/Wireshark.app
+
+    for f in $(find $out/Applications/Wireshark.app/Contents/PlugIns -name "*.so"); do
+        for dylib in $(otool -L $f | awk '/^\t*lib/ {print $1}'); do
+            install_name_tool -change "$dylib" "$out/lib/$dylib" "$f"
+        done
+    done
+  '' else
+    lib.optionalString withQt ''
+      pwd
+
+      mkdir -pv $dev/include/{epan/{wmem,ftypes,dfilter},wsutil/wmem,wiretap}
+
+      cp config.h $dev/include/wireshark/
+      cp ../epan/*.h $dev/include/epan/
+      cp ../epan/ftypes/*.h $dev/include/epan/ftypes/
+      cp ../epan/dfilter/*.h $dev/include/epan/dfilter/
+      cp ../include/ws_*.h $dev/include/
+      cp ../wiretap/*.h $dev/include/wiretap/
+      cp ../wsutil/*.h $dev/include/wsutil/
+      cp ../wsutil/wmem/*.h $dev/include/wsutil/wmem/
+    '');
+
+  dontFixCmake = true;
+
+  # Prevent double-wrapping, inject wrapper args manually instead.
+  dontWrapGApps = true;
+  preFixup = ''
+    qtWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  shellHook = ''
+    # to be able to run the resulting binary
+    export WIRESHARK_RUN_FROM_BUILD_DIRECTORY=1
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.wireshark.org/";
+    changelog = "https://www.wireshark.org/docs/relnotes/wireshark-${version}.html";
+    description = "Powerful network protocol analyzer";
+    license = licenses.gpl2Plus;
+
+    longDescription = ''
+      Wireshark (formerly known as "Ethereal") is a powerful network
+      protocol analyzer developed by an international team of networking
+      experts. It runs on UNIX, macOS and Windows.
+    '';
+
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ bjornfor fpletz paveloom ];
+    mainProgram = if withQt then "wireshark" else "tshark";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/sniffers/wireshark/wireshark-lookup-dumpcap-in-path.patch b/nixpkgs/pkgs/applications/networking/sniffers/wireshark/wireshark-lookup-dumpcap-in-path.patch
new file mode 100644
index 000000000000..0e523db0a32a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/sniffers/wireshark/wireshark-lookup-dumpcap-in-path.patch
@@ -0,0 +1,66 @@
+From 2f0cbc740a0fe050f4de082620296c5eea18eba3 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Bj=C3=B8rn=20Forsman?= <bjorn.forsman@gmail.com>
+Date: Thu, 27 Oct 2022 20:56:07 +0200
+Subject: [PATCH] Lookup dumpcap in PATH
+
+NixOS patch: Look for dumpcap in PATH first, because there may be a
+dumpcap wrapper that we want to use instead of the default
+non-setuid dumpcap binary.
+
+Also change execv() to execvp() because we've set argv[0] to "dumpcap"
+and have to enable PATH lookup. Wireshark is not a setuid program, so
+looking in PATH is not a security issue.
+
+ORIGINALLY by Björn Forsman
+
+EDITED by teto for wireshark 3.6
+
+EDITED by esclear for wireshark 4.0
+
+Signed-off-by: Franz Pletz <fpletz@fnordicwalking.de>
+---
+ capture/capture_sync.c | 17 ++++++++++++++---
+ 1 file changed, 14 insertions(+), 3 deletions(-)
+
+diff --git a/capture/capture_sync.c b/capture/capture_sync.c
+index fc5552f02c..a556f109af 100644
+--- a/capture/capture_sync.c
++++ b/capture/capture_sync.c
+@@ -239,7 +239,18 @@ init_pipe_args(int *argc) {
+ #ifdef _WIN32
+     exename = ws_strdup_printf("%s\\dumpcap.exe", progfile_dir);
+ #else
+-    exename = ws_strdup_printf("%s/dumpcap", progfile_dir);
++    /*
++     * NixOS patch: Look for dumpcap in PATH first, because there may be a
++     * dumpcap wrapper that we want to use instead of the default
++     * non-setuid dumpcap binary.
++     */
++    if (system("command -v dumpcap >/dev/null") == 0) {
++        /* Found working dumpcap */
++        exename = ws_strdup_printf("dumpcap");
++    } else {
++        /* take Wireshark's absolute program path and replace "Wireshark" with "dumpcap" */
++        exename = ws_strdup_printf("%s/dumpcap", progfile_dir);
++    }
+ #endif
+ 
+     /* Make that the first argument in the argument list (argv[0]). */
+@@ -690,7 +701,7 @@ sync_pipe_start(capture_options *capture_opts, GPtrArray *capture_comments,
+          */
+         dup2(sync_pipe[PIPE_WRITE], 2);
+         ws_close(sync_pipe[PIPE_READ]);
+-        execv(argv[0], argv);
++        execvp(argv[0], argv);
+         snprintf(errmsg, sizeof errmsg, "Couldn't run %s in child process: %s",
+                    argv[0], g_strerror(errno));
+         sync_pipe_errmsg_to_parent(2, errmsg, "");
+@@ -946,7 +957,7 @@ sync_pipe_open_command(char* const argv[], int *data_read_fd,
+         dup2(sync_pipe[PIPE_WRITE], 2);
+         ws_close(sync_pipe[PIPE_READ]);
+         ws_close(sync_pipe[PIPE_WRITE]);
+-        execv(argv[0], argv);
++        execvp(argv[0], argv);
+         snprintf(errmsg, sizeof errmsg, "Couldn't run %s in child process: %s",
+                    argv[0], g_strerror(errno));
+         sync_pipe_errmsg_to_parent(2, errmsg, "");
diff --git a/nixpkgs/pkgs/applications/networking/sniffnet/default.nix b/nixpkgs/pkgs/applications/networking/sniffnet/default.nix
new file mode 100644
index 000000000000..afa496f5ab61
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/sniffnet/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, libpcap
+, openssl
+, stdenv
+, alsa-lib
+, expat
+, fontconfig
+, vulkan-loader
+, xorg
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "sniffnet";
+  version = "1.2.2";
+
+  src = fetchFromGitHub {
+    owner = "gyulyvgc";
+    repo = "sniffnet";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-wIyPb1RxvjkGu3Gs69HyL1WuLZUIFWB8URJjkz3oar0=";
+  };
+
+  cargoHash = "sha256-iB8KL0ad+rI4HuZLgb7KqfrUBTQuKRWjqaa6BnHU5eg=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [
+    libpcap
+    openssl
+  ] ++ lib.optionals stdenv.isLinux [
+    alsa-lib
+    expat
+    fontconfig
+    vulkan-loader
+    xorg.libX11
+    xorg.libXcursor
+    xorg.libXi
+    xorg.libXrandr
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.AppKit
+    rustPlatform.bindgenHook
+  ];
+
+  # requires internet access
+  checkFlags = [
+    "--skip=secondary_threads::check_updates::tests::fetch_latest_release_from_github"
+  ];
+
+  postFixup = lib.optionalString stdenv.isLinux ''
+    patchelf $out/bin/sniffnet \
+      --add-rpath ${lib.makeLibraryPath [ vulkan-loader xorg.libX11 ]}
+  '';
+
+  meta = with lib; {
+    description = "Cross-platform application to monitor your network traffic with ease";
+    homepage = "https://github.com/gyulyvgc/sniffnet";
+    changelog = "https://github.com/gyulyvgc/sniffnet/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ mit /* or */ asl20 ];
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/sniproxy/default.nix b/nixpkgs/pkgs/applications/networking/sniproxy/default.nix
new file mode 100644
index 000000000000..8d2b619ab718
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/sniproxy/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, gettext, libev, pcre, pkg-config, udns }:
+
+stdenv.mkDerivation rec {
+  pname = "sniproxy";
+  version = "0.6.1";
+
+  src = fetchFromGitHub {
+    owner = "dlundquist";
+    repo = "sniproxy";
+    rev = version;
+    sha256 = "sha256-htM9CrzaGnn1dnsWQ+0V6N65Og7rsFob3BlSc4UGfFU=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ gettext libev pcre udns ];
+
+  meta = with lib; {
+    homepage = "https://github.com/dlundquist/sniproxy";
+    description = "Transparent TLS and HTTP layer 4 proxy with SNI support";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ womfoo raitobezarius ];
+    platforms = platforms.linux;
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/networking/soapui/default.nix b/nixpkgs/pkgs/applications/networking/soapui/default.nix
new file mode 100644
index 000000000000..fc515590f37a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/soapui/default.nix
@@ -0,0 +1,59 @@
+{ fetchurl, lib, stdenv, writeText, jdk, makeWrapper, nixosTests }:
+
+stdenv.mkDerivation rec {
+  pname = "soapui";
+  version = "5.7.0";
+
+  src = fetchurl {
+    url = "https://s3.amazonaws.com/downloads.eviware/soapuios/${version}/SoapUI-${version}-linux-bin.tar.gz";
+    sha256 = "sha256-qzhy4yHmOk13dFUd2KEZhXtWY86QwyjJgYxx9GGoN80=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ jdk ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/share/java
+    cp -R bin lib $out/share/java
+
+    makeWrapper $out/share/java/bin/soapui.sh $out/bin/soapui --set SOAPUI_HOME $out/share/java
+
+    runHook postInstall
+  '';
+
+  patches = [
+    # Adjust java path to point to derivation paths
+    (writeText "soapui-${version}.patch" ''
+      --- a/bin/soapui.sh
+      +++ b/bin/soapui.sh
+      @@ -50,7 +50,7 @@
+       #JAVA 16
+       JAVA_OPTS="$JAVA_OPTS --illegal-access=permit"
+
+      -JFXRTPATH=`java -cp $SOAPUI_CLASSPATH com.eviware.soapui.tools.JfxrtLocator`
+      +JFXRTPATH=`${jdk}/bin/java -cp $SOAPUI_CLASSPATH com.eviware.soapui.tools.JfxrtLocator`
+       SOAPUI_CLASSPATH=$JFXRTPATH:$SOAPUI_CLASSPATH
+
+       if $darwin
+      @@ -85,4 +85,4 @@
+       echo =
+       echo ================================
+
+      -java $JAVA_OPTS -cp $SOAPUI_CLASSPATH com.eviware.soapui.SoapUI "$@"
+      +${jdk}/bin/java $JAVA_OPTS -cp $SOAPUI_CLASSPATH com.eviware.soapui.SoapUI "$@"
+    '')
+  ];
+
+  passthru.tests = { inherit (nixosTests) soapui; };
+
+  meta = with lib; {
+    description = "The Most Advanced REST & SOAP Testing Tool in the World";
+    homepage = "https://www.soapui.org/";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = "SoapUI End User License Agreement";
+    maintainers = with maintainers; [ gerschtli ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/soju/default.nix b/nixpkgs/pkgs/applications/networking/soju/default.nix
new file mode 100644
index 000000000000..5eb262168892
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/soju/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, buildGoModule
+, fetchFromSourcehut
+, installShellFiles
+, scdoc
+}:
+
+buildGoModule rec {
+  pname = "soju";
+  version = "0.6.2";
+
+  src = fetchFromSourcehut {
+    owner = "~emersion";
+    repo = "soju";
+    rev = "v${version}";
+    hash = "sha256-Icz6oIXLnLe75zuB8Q862I1ado5GpGZBJezrH7F7EJs=";
+  };
+
+  vendorHash = "sha256-iT/QMm6RM6kvw69Az+aLTtBuaCX7ELAiYlj5wXAtBd4=";
+
+  subPackages = [
+    "cmd/soju"
+    "cmd/sojuctl"
+    "contrib/migrate-db"
+    "contrib/znc-import"
+  ];
+
+  nativeBuildInputs = [
+    installShellFiles
+    scdoc
+  ];
+
+  ldflags = [ "-s" "-w" ];
+
+  postBuild = ''
+    make doc/soju.1
+  '';
+
+  postInstall = ''
+    installManPage doc/soju.1
+  '';
+
+  preCheck = ''
+    # Test all targets.
+    unset subPackages
+
+    # Disable a test that requires an additional service.
+    rm database/postgres_test.go
+  '';
+
+  meta = with lib; {
+    description = "A user-friendly IRC bouncer";
+    longDescription = ''
+      soju is a user-friendly IRC bouncer. soju connects to upstream IRC servers
+      on behalf of the user to provide extra functionality. soju supports many
+      features such as multiple users, numerous IRCv3 extensions, chat history
+      playback and detached channels. It is well-suited for both small and large
+      deployments.
+    '';
+    homepage = "https://soju.im";
+    changelog = "https://git.sr.ht/~emersion/soju/refs/${src.rev}";
+    license = licenses.agpl3Only;
+    maintainers = with maintainers; [ azahi malte-v ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/soulseek/nicotine-plus/default.nix b/nixpkgs/pkgs/applications/networking/soulseek/nicotine-plus/default.nix
new file mode 100644
index 000000000000..6f49864f88db
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/soulseek/nicotine-plus/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, wrapGAppsHook
+, gdk-pixbuf
+, gettext
+, gobject-introspection
+, gtk3
+, python3Packages
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "nicotine-plus";
+  version = "3.2.9";
+
+  src = fetchFromGitHub {
+    owner = "nicotine-plus";
+    repo = "nicotine-plus";
+    rev = "refs/tags/${version}";
+    sha256 = "sha256-PxtHsBbrzcIAcLyQKD9DV8yqf3ljzGS7gT/ZRfJ8qL4=";
+  };
+
+  nativeBuildInputs = [ gettext wrapGAppsHook gobject-introspection ];
+
+  propagatedBuildInputs = [
+    gdk-pixbuf
+    gobject-introspection
+    gtk3
+    python3Packages.pygobject3
+  ];
+
+  postInstall = ''
+    ln -s $out/bin/nicotine $out/bin/nicotine-plus
+  '';
+
+  preFixup = ''
+    gappsWrapperArgs+=(
+      --prefix XDG_DATA_DIRS : "${gtk3}/share/gsettings-schemas/${gtk3.name}"
+    )
+  '';
+
+  doCheck = false;
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    description = "A graphical client for the SoulSeek peer-to-peer system";
+    longDescription = ''
+      Nicotine+ aims to be a pleasant, free and open source (FOSS) alternative
+      to the official Soulseek client, providing additional functionality while
+      keeping current with the Soulseek protocol.
+    '';
+    homepage = "https://www.nicotine-plus.org";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ ehmry klntsky ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/spideroak/default.nix b/nixpkgs/pkgs/applications/networking/spideroak/default.nix
new file mode 100644
index 000000000000..0bfc62ccfbb2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/spideroak/default.nix
@@ -0,0 +1,61 @@
+{ lib, stdenv, fetchurl, makeWrapper, patchelf
+, fontconfig, freetype, glib, libICE, libSM
+, libX11, libXext, libXrender, zlib
+}:
+
+let
+  sha256 = "6d6ca2b383bcc81af1217c696eb77864a2b6db7428f4b5bde5b5913ce705eec5";
+
+  ldpath = lib.makeLibraryPath [
+    fontconfig freetype glib libICE libSM
+    libX11 libXext libXrender zlib
+  ];
+
+  version = "7.5.0";
+
+in stdenv.mkDerivation {
+  pname = "spideroak";
+  inherit version;
+
+  src = fetchurl {
+    name = "SpiderOakONE-${version}-slack_tar_x64.tgz";
+    url = "https://spideroak.com/release/spideroak/slack_tar_x64";
+    inherit sha256;
+  };
+
+  sourceRoot = ".";
+
+  unpackCmd = "tar -xzf $curSrc";
+
+  installPhase = ''
+    mkdir "$out"
+    cp -r "./"* "$out"
+    mkdir "$out/bin"
+    rm "$out/usr/bin/SpiderOakONE"
+    rmdir $out/usr/bin || true
+    mv $out/usr/share $out/
+
+    rm -f $out/opt/SpiderOakONE/lib/libz*
+
+    patchelf --set-interpreter ${stdenv.cc.libc}/lib/ld-linux-x86-64.so.2 \
+      "$out/opt/SpiderOakONE/lib/SpiderOakONE"
+
+    RPATH=$out/opt/SpiderOakONE/lib:${ldpath}
+    makeWrapper $out/opt/SpiderOakONE/lib/SpiderOakONE $out/bin/spideroak --set LD_LIBRARY_PATH $RPATH \
+      --set QT_PLUGIN_PATH $out/opt/SpiderOakONE/lib/plugins/ \
+      --set SpiderOak_EXEC_SCRIPT $out/bin/spideroak
+
+    sed -i 's/^Exec=.*/Exec=spideroak/' $out/share/applications/SpiderOakONE.desktop
+  '';
+
+  nativeBuildInputs = [ patchelf makeWrapper ];
+
+  meta = {
+    homepage = "https://spideroak.com";
+    description = "Secure online backup and sychronization";
+    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+    license = lib.licenses.unfree;
+    maintainers = with lib.maintainers; [ amorsillo ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/ssb-patchwork/default.nix b/nixpkgs/pkgs/applications/networking/ssb-patchwork/default.nix
new file mode 100644
index 000000000000..3114a9b7c3ea
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/ssb-patchwork/default.nix
@@ -0,0 +1,54 @@
+{ appimageTools, symlinkJoin, lib, fetchurl, makeDesktopItem }:
+
+let
+  pname = "ssb-patchwork";
+  version = "3.18.1";
+  name = "Patchwork-${version}";
+
+  src = fetchurl {
+    url = "https://github.com/ssbc/patchwork/releases/download/v${version}/${name}.AppImage";
+    sha256 = "F8n6LLbgkg3z55lSY60T+pn2lra8aPt6Ztepw1gf2rI=";
+  };
+
+  binary = appimageTools.wrapType2 {
+    name = pname;
+    inherit src;
+  };
+  # we only use this to extract the icon
+  appimage-contents = appimageTools.extractType2 {
+    inherit name src;
+  };
+
+  desktopItem = makeDesktopItem {
+    name = "ssb-patchwork";
+    exec = "${binary}/bin/ssb-patchwork";
+    icon = "ssb-patchwork.png";
+    comment = "Client for the decentralized social network Secure Scuttlebutt";
+    desktopName = "Patchwork";
+    genericName = "Patchwork";
+    categories = [ "Network" ];
+  };
+
+in
+  symlinkJoin {
+    inherit name;
+    paths = [ binary ];
+
+    postBuild = ''
+      mkdir -p $out/share/pixmaps/ $out/share/applications
+      cp ${appimage-contents}/ssb-patchwork.png $out/share/pixmaps
+      cp ${desktopItem}/share/applications/* $out/share/applications/
+    '';
+
+    meta = with lib; {
+      description = "A decentralized messaging and sharing app built on top of Secure Scuttlebutt (SSB)";
+      longDescription = ''
+        sea-slang for gossip - a scuttlebutt is basically a watercooler on a ship.
+      '';
+      homepage = "https://www.scuttlebutt.nz/";
+      license = licenses.agpl3;
+      maintainers = with maintainers; [ asymmetric ninjatrappeur cyplo ];
+      mainProgram = "ssb-patchwork";
+      platforms = [ "x86_64-linux" ];
+    };
+  }
diff --git a/nixpkgs/pkgs/applications/networking/station/default.nix b/nixpkgs/pkgs/applications/networking/station/default.nix
new file mode 100644
index 000000000000..9160568ee483
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/station/default.nix
@@ -0,0 +1,41 @@
+{ appimageTools, fetchurl, lib }:
+
+let
+  pname = "station";
+  version = "1.52.2";
+  name = "${pname}-${version}";
+
+  src = fetchurl {
+    url = "https://github.com/getstation/desktop-app-releases/releases/download/${version}/Station-${version}-x86_64.AppImage";
+    sha256 = "0lhiwvnf94is9klvzrqv2wri53gj8nms9lg2678bs4y58pvjxwid";
+  };
+
+  appimageContents = appimageTools.extractType2 {
+    inherit name src;
+  };
+in appimageTools.wrapType2 rec {
+  inherit name src;
+
+  profile = ''
+    export LC_ALL=C.UTF-8
+  '';
+
+  multiArch = false;
+  extraPkgs = appimageTools.defaultFhsEnvArgs.multiPkgs;
+  extraInstallCommands = ''
+    mv $out/bin/{${name},${pname}}
+    install -m 444 -D ${appimageContents}/browserx.desktop $out/share/applications/browserx.desktop
+    install -m 444 -D ${appimageContents}/usr/share/icons/hicolor/512x512/apps/browserx.png \
+      $out/share/icons/hicolor/512x512/apps/browserx.png
+    substituteInPlace $out/share/applications/browserx.desktop \
+      --replace 'Exec=AppRun' 'Exec=${pname}'
+  '';
+
+  meta = with lib; {
+    description = "A single place for all of your web applications";
+    homepage = "https://getstation.com";
+    license = licenses.mit;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/stc-cli/default.nix b/nixpkgs/pkgs/applications/networking/stc-cli/default.nix
new file mode 100644
index 000000000000..bae71f82cb4e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/stc-cli/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "stc";
+  version = "1.4";
+
+  src = fetchFromGitHub {
+    owner = "tenox7";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-g1zn/CBpLv0oNhp32njeNhhli8aTCECgh92+zn5v+4U=";
+  };
+
+  vendorHash = "sha256-0OsxCGCJT5k5bHXNSIL6QiJXj72bzYCZiI03gvHQuR8=";
+
+  meta = with lib; {
+    description = "Syncthing CLI Tool";
+    homepage = "https://github.com/tenox7/stc";
+    changelog = "https://github.com/tenox7/stc/releases/tag/${version}";
+    license = licenses.asl20;
+    maintainers = [ maintainers.ivankovnatsky ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/sync/acd_cli/default.nix b/nixpkgs/pkgs/applications/networking/sync/acd_cli/default.nix
new file mode 100644
index 000000000000..95970a7b8709
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/sync/acd_cli/default.nix
@@ -0,0 +1,39 @@
+{ lib, fetchFromGitHub, buildPythonApplication, fuse
+, appdirs, colorama, python-dateutil, requests, requests-toolbelt
+, fusepy, sqlalchemy, setuptools }:
+
+buildPythonApplication rec {
+  pname = "acd_cli";
+  version = "0.3.2";
+
+  doCheck = false;
+
+  src = fetchFromGitHub {
+    owner = "yadayada";
+    repo = pname;
+    rev = version;
+    sha256 = "0a0fr632l24a3jmgla3b1vcm50ayfa9hdbp677ch1chwj5dq4zfp";
+  };
+
+  propagatedBuildInputs = [ appdirs colorama python-dateutil fusepy requests
+                            requests-toolbelt setuptools sqlalchemy ];
+
+  makeWrapperArgs = [ "--prefix LIBFUSE_PATH : ${fuse}/lib/libfuse.so" ];
+
+  postFixup = ''
+    function lnOverBin() {
+      rm -f $out/bin/{$2,.$2-wrapped}
+      ln -s $out/bin/$1 $out/bin/$2
+    }
+    lnOverBin acd_cli.py acd-cli
+    lnOverBin acd_cli.py acd_cli
+    lnOverBin acd_cli.py acdcli
+  '';
+
+  meta = with lib; {
+    description = "A command line interface and FUSE filesystem for Amazon Cloud Drive";
+    homepage = "https://github.com/yadayada/acd_cli";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ edwtjo ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/sync/backintime/common.nix b/nixpkgs/pkgs/applications/networking/sync/backintime/common.nix
new file mode 100644
index 000000000000..059716277032
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/sync/backintime/common.nix
@@ -0,0 +1,52 @@
+{stdenv, lib, fetchFromGitHub, makeWrapper, gettext,
+python3, rsync, cron, openssh, sshfs-fuse, encfs }:
+
+let
+  python' = python3.withPackages (ps: with ps; [ dbus-python keyring packaging ]);
+
+  apps = lib.makeBinPath [ openssh python' cron rsync sshfs-fuse encfs ];
+in stdenv.mkDerivation rec {
+  pname = "backintime-common";
+  version = "1.3.3";
+
+  src = fetchFromGitHub {
+    owner = "bit-team";
+    repo = "backintime";
+    rev = "v${version}";
+    sha256 = "sha256-cKmzq155/dCl5wZA2SE3XjfCocHxTh4Wa2IdfzSfQHg=";
+  };
+
+  nativeBuildInputs = [ makeWrapper gettext ];
+  buildInputs = [ python' ];
+
+  installFlags = [ "DEST=$(out)" ];
+
+  preConfigure = ''
+    cd common
+    substituteInPlace configure \
+      --replace "/.." "" \
+      --replace "share/backintime" "${python'.sitePackages}/backintime"
+    substituteInPlace "backintime" \
+      --replace "share" "${python'.sitePackages}"
+  '';
+
+  dontAddPrefix = true;
+
+  preFixup = ''
+    wrapProgram "$out/bin/backintime" \
+      --prefix PATH : ${apps}
+    '';
+
+  meta = {
+    homepage = "https://github.com/bit-team/backintime";
+    description = "Simple backup tool for Linux";
+    license = lib.licenses.gpl2;
+    maintainers = [ ];
+    platforms = lib.platforms.all;
+    longDescription = ''
+      Back In Time is a simple backup tool (on top of rsync) for Linux
+      inspired from “flyback project” and “TimeVault”. The backup is
+      done by taking snapshots of a specified set of directories.
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/sync/backintime/qt.nix b/nixpkgs/pkgs/applications/networking/sync/backintime/qt.nix
new file mode 100644
index 000000000000..419fabc9348f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/sync/backintime/qt.nix
@@ -0,0 +1,26 @@
+{ mkDerivation, backintime-common, python3 }:
+
+let
+  python' = python3.withPackages (ps: with ps; [ pyqt5 backintime-common packaging ]);
+in
+mkDerivation {
+  inherit (backintime-common)
+    version src installFlags meta dontAddPrefix nativeBuildInputs;
+
+  pname = "backintime-qt";
+
+  buildInputs = [ python' backintime-common ];
+
+  preConfigure = ''
+    cd qt
+    substituteInPlace configure \
+      --replace '"/../etc' '"/etc'
+    substituteInPlace qttools.py \
+      --replace "__file__, os.pardir, os.pardir" '"${backintime-common}/${python'.sitePackages}/backintime"'
+  '';
+
+  preFixup = ''
+    wrapQtApp "$out/bin/backintime-qt" \
+      --prefix PATH : "${backintime-common}/bin:$PATH"
+  '';
+}
diff --git a/nixpkgs/pkgs/applications/networking/sync/casync/default.nix b/nixpkgs/pkgs/applications/networking/sync/casync/default.nix
new file mode 100644
index 000000000000..7a1252f806fb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/sync/casync/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, meson
+, ninja
+, pkg-config
+, python3
+, sphinx
+, acl
+, curl
+, fuse
+, libselinux
+, udev
+, xz
+, zstd
+, fuseSupport ? true
+, selinuxSupport ? true
+, udevSupport ? true
+, glibcLocales
+, rsync
+}:
+
+stdenv.mkDerivation {
+  pname = "casync";
+  version = "2-226-gbd8898e";
+
+  src = fetchFromGitHub {
+    owner = "systemd";
+    repo = "casync";
+    rev = "bd8898ed92685e12022dd33a04c87786b5262344";
+    sha256 = "04ibglizjzyd7ih13q6m7ic78n0mzw9nfmb3zd1fcm9j62qlq11i";
+  };
+
+  buildInputs = [ acl curl xz zstd ]
+    ++ lib.optionals (fuseSupport) [ fuse ]
+    ++ lib.optionals (selinuxSupport) [ libselinux ]
+    ++ lib.optionals (udevSupport) [ udev ];
+  nativeBuildInputs = [ meson ninja pkg-config python3 sphinx ];
+  nativeCheckInputs = [ glibcLocales rsync ];
+
+  postPatch = ''
+    for f in test/test-*.sh.in; do
+      patchShebangs $f
+    done
+    patchShebangs test/http-server.py
+  '';
+
+  PKG_CONFIG_UDEV_UDEVDIR = "lib/udev";
+  mesonFlags = lib.optionals (!fuseSupport) [ "-Dfuse=false" ]
+    ++ lib.optionals (!udevSupport) [ "-Dudev=false" ]
+    ++ lib.optionals (!selinuxSupport) [ "-Dselinux=false" ];
+
+  doCheck = true;
+  preCheck = ''
+    export LC_ALL="en_US.utf-8"
+  '';
+
+  meta = with lib; {
+    description = "Content-Addressable Data Synchronizer";
+    homepage = "https://github.com/systemd/casync";
+    license = licenses.lgpl21Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ flokli ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/sync/celeste/default.nix b/nixpkgs/pkgs/applications/networking/sync/celeste/default.nix
new file mode 100644
index 000000000000..0e0b36263831
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/sync/celeste/default.nix
@@ -0,0 +1,114 @@
+{ lib
+, stdenv
+, rust
+, rustPlatform
+, fetchFromGitHub
+, substituteAll
+, fetchpatch
+, pkg-config
+, wrapGAppsHook4
+, cairo
+, gdk-pixbuf
+, glib
+, graphene
+, gtk3
+, gtk4
+, libadwaita
+, libappindicator-gtk3
+, librclone
+, pango
+, rclone
+}:
+
+let
+  # https://github.com/trevyn/librclone/pull/8
+  librclone-mismatched-types-patch = fetchpatch {
+    name = "use-c_char-to-be-platform-independent.patch";
+    url = "https://github.com/trevyn/librclone/commit/91fdf3fa5f5eea0dfd06981ba72e09034974fdad.patch";
+    hash = "sha256-8YDyUNP/ISP5jCliT6UCxZ89fdRFud+6u6P29XdPy58=";
+  };
+in rustPlatform.buildRustPackage rec {
+  pname = "celeste";
+  version = "0.5.2";
+
+  src = fetchFromGitHub {
+    owner = "hwittenborn";
+    repo = "celeste";
+    rev = "v${version}";
+    hash = "sha256-pFtyfKGPlwum/twGXi/e82BjINy6/MMvvmVfrwWHTQg=";
+  };
+
+  cargoHash = "sha256-wcgu4KApkn68Tpk3PQ9Tkxif++/8CmS4f8AOOpCA/X8=";
+
+  patches = [
+    (substituteAll {
+      src = ./target-dir.patch;
+      rustTarget = rust.toRustTarget stdenv.hostPlatform;
+    })
+  ];
+
+  postPatch = ''
+    pushd $cargoDepsCopy/librclone-sys
+    oldHash=$(sha256sum build.rs | cut -d " " -f 1)
+    patch -p2 < ${./librclone-path.patch}
+    substituteInPlace build.rs \
+      --subst-var-by librclone ${librclone}
+    substituteInPlace .cargo-checksum.json \
+      --replace $oldHash $(sha256sum build.rs | cut -d " " -f 1)
+    popd
+    pushd $cargoDepsCopy/librclone
+    oldHash=$(sha256sum src/lib.rs | cut -d " " -f 1)
+    patch -p1 < ${librclone-mismatched-types-patch}
+    substituteInPlace .cargo-checksum.json \
+      --replace $oldHash $(sha256sum src/lib.rs | cut -d " " -f 1)
+    popd
+  '';
+
+  # Cargo.lock is outdated
+  preConfigure = ''
+    cargo update --offline
+  '';
+
+  # We need to build celeste-tray first because celeste/src/launch.rs reads that file at build time.
+  # Upstream does the same: https://github.com/hwittenborn/celeste/blob/765dfa2/justfile#L1-L3
+  cargoBuildFlags = [ "--bin" "celeste-tray" ];
+  postConfigure = ''
+    cargoBuildHook
+    cargoBuildFlags=
+  '';
+
+  RUSTC_BOOTSTRAP = 1;
+
+  nativeBuildInputs = [
+    pkg-config
+    rustPlatform.bindgenHook
+    wrapGAppsHook4
+  ];
+
+  buildInputs = [
+    cairo
+    gdk-pixbuf
+    glib
+    graphene
+    gtk3
+    gtk4
+    libadwaita
+    librclone
+    pango
+  ];
+
+  preFixup = ''
+    gappsWrapperArgs+=(
+      --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ libappindicator-gtk3 ]}"
+      --prefix PATH : "${lib.makeBinPath [ rclone ]}"
+    )
+  '';
+
+  meta = {
+    changelog = "https://github.com/hwittenborn/celeste/blob/${src.rev}/CHANGELOG.md";
+    description = "GUI file synchronization client that can sync with any cloud provider";
+    homepage = "https://github.com/hwittenborn/celeste";
+    license = lib.licenses.gpl3Only;
+    maintainers = with lib.maintainers; [ dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/sync/celeste/librclone-path.patch b/nixpkgs/pkgs/applications/networking/sync/celeste/librclone-path.patch
new file mode 100644
index 000000000000..21af74dfde51
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/sync/celeste/librclone-path.patch
@@ -0,0 +1,31 @@
+diff --git a/librclone-sys/build.rs b/librclone-sys/build.rs
+index 10e45bc..7d04c08 100644
+--- a/librclone-sys/build.rs
++++ b/librclone-sys/build.rs
+@@ -16,15 +16,8 @@ fn main() {
+     println!("cargo:rerun-if-changed=go.mod");
+     println!("cargo:rerun-if-changed=go.sum");
+ 
+-    Command::new("go")
+-        .args(["build", "--buildmode=c-archive", "-o"])
+-        .arg(&format!("{}/librclone.a", out_dir))
+-        .arg("github.com/rclone/rclone/librclone")
+-        .status()
+-        .expect("`go build` failed. Is `go` installed and latest version?");
+-
+-    println!("cargo:rustc-link-search=native={}", out_dir);
+-    println!("cargo:rustc-link-lib=static=rclone");
++    println!("cargo:rustc-link-search=native={}", "@librclone@/lib");
++    println!("cargo:rustc-link-lib=dylib=rclone");
+ 
+     if target_triple.ends_with("darwin") {
+         println!("cargo:rustc-link-lib=framework=CoreFoundation");
+@@ -32,7 +25,7 @@ fn main() {
+     }
+ 
+     let bindings = bindgen::Builder::default()
+-        .header(format!("{}/librclone.h", out_dir))
++        .header(format!("{}/librclone.h", "@librclone@/include"))
+         .allowlist_function("RcloneRPC")
+         .allowlist_function("RcloneInitialize")
+         .allowlist_function("RcloneFinalize")
diff --git a/nixpkgs/pkgs/applications/networking/sync/celeste/target-dir.patch b/nixpkgs/pkgs/applications/networking/sync/celeste/target-dir.patch
new file mode 100644
index 000000000000..a8da72e77f77
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/sync/celeste/target-dir.patch
@@ -0,0 +1,16 @@
+diff --git a/celeste/src/launch.rs b/celeste/src/launch.rs
+index 5227170..e3cf189 100644
+--- a/celeste/src/launch.rs
++++ b/celeste/src/launch.rs
+@@ -172,10 +172,7 @@ impl TrayApp {
+         perms.set_mode(0o755);
+         file.set_permissions(perms).unwrap();
+ 
+-        #[cfg(debug_assertions)]
+-        let tray_file = include_bytes!("../../target/debug/celeste-tray");
+-        #[cfg(not(debug_assertions))]
+-        let tray_file = include_bytes!("../../target/release/celeste-tray");
++        let tray_file = include_bytes!(concat!("../../target/@rustTarget@/", env!("cargoBuildType"), "/celeste-tray"));
+ 
+         file.write_all(tray_file).unwrap();
+         drop(file);
diff --git a/nixpkgs/pkgs/applications/networking/sync/desync/default.nix b/nixpkgs/pkgs/applications/networking/sync/desync/default.nix
new file mode 100644
index 000000000000..8a5e3965ffd5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/sync/desync/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "desync";
+  version = "0.9.5";
+
+  src = fetchFromGitHub {
+    owner = "folbricht";
+    repo = "desync";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-FeZhLY0fUUNNqa6qZZnh2z06+NgcAI6gY8LRR4xI5sM=";
+  };
+
+  vendorHash = "sha256-1RuqlDU809mtGn0gOFH/AW6HJo1cQqt8spiLp3/FpcI=";
+
+  # nix builder doesn't have access to test data; tests fail for reasons unrelated to binary being bad.
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Content-addressed binary distribution system";
+    longDescription = "An alternate implementation of the casync protocol and storage mechanism with a focus on production-readiness";
+    homepage = "https://github.com/folbricht/desync";
+    changelog = "https://github.com/folbricht/desync/releases/tag/v${version}";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ chaduffy ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/sync/lcsync/default.nix b/nixpkgs/pkgs/applications/networking/sync/lcsync/default.nix
new file mode 100644
index 000000000000..1d06ee1e4fd6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/sync/lcsync/default.nix
@@ -0,0 +1,33 @@
+{
+  fetchFromGitea,
+  lcrq,
+  lib,
+  librecast,
+  libsodium,
+  stdenv
+}:
+stdenv.mkDerivation (finalAttrs: {
+  name = "lcsync";
+  version = "0.2.1";
+
+  src = fetchFromGitea {
+    domain = "codeberg.org";
+    owner = "librecast";
+    repo = "lcsync";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-RVfa0EmCPPT7ndy94YwD24S9pj7L11ztISaKHGcbTS8=";
+  };
+  buildInputs = [ lcrq librecast libsodium ];
+  configureFlags = [ "SETCAP_PROGRAM=true" ];
+  installFlags = [ "PREFIX=$(out)" ];
+  doCheck = true;
+
+  meta = {
+    changelog = "https://codeberg.org/librecast/lcsync/src/tag/v${finalAttrs.version}/CHANGELOG.md";
+    description = "Librecast File and Syncing Tool";
+    homepage = "https://librecast.net/lcsync.html";
+    license = [ lib.licenses.gpl2 lib.licenses.gpl3 ];
+    maintainers = with lib.maintainers; [ albertchae aynish DMills27 jasonodoom jleightcap ];
+    platforms = lib.platforms.gnu;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/networking/sync/lsyncd/default.nix b/nixpkgs/pkgs/applications/networking/sync/lsyncd/default.nix
new file mode 100644
index 000000000000..cc9663dd6fc2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/sync/lsyncd/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, cmake, lua, pkg-config, rsync,
+  asciidoc, libxml2, docbook_xml_dtd_45, docbook_xsl, libxslt, xnu }:
+
+stdenv.mkDerivation rec {
+  pname = "lsyncd";
+  version = "2.3.1";
+
+  src = fetchFromGitHub {
+    owner = "axkibe";
+    repo = "lsyncd";
+    rev = "release-${version}";
+    hash = "sha256-QBmvS1HGF3VWS+5aLgDr9AmUfEsuSz+DTFIeql2XHH4=";
+  };
+
+  postPatch = ''
+    substituteInPlace default-rsync.lua \
+      --replace "/usr/bin/rsync" "${rsync}/bin/rsync"
+  '';
+
+  # Special flags needed on Darwin:
+  # https://github.com/axkibe/lsyncd/blob/42413cabbedca429d55a5378f6e830f191f3cc86/INSTALL#L51
+  cmakeFlags = lib.optionals stdenv.isDarwin [ "-DWITH_INOTIFY=OFF" "-DWITH_FSEVENTS=ON" "-DXNU_DIR=${xnu}/include" ];
+
+  dontUseCmakeBuildDir = true;
+
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [
+    rsync
+    lua
+    asciidoc libxml2 docbook_xml_dtd_45 docbook_xsl libxslt
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/axkibe/lsyncd";
+    description = "A utility that synchronizes local directories with remote targets";
+    license = licenses.gpl2Plus;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ bobvanderlinden ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/sync/onedrive/default.nix b/nixpkgs/pkgs/applications/networking/sync/onedrive/default.nix
new file mode 100644
index 000000000000..b2c3b30d8719
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/sync/onedrive/default.nix
@@ -0,0 +1,56 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, autoreconfHook
+, ldc
+, installShellFiles
+, pkg-config
+, curl
+, sqlite
+, libnotify
+, withSystemd ? lib.meta.availableOn stdenv.hostPlatform systemd
+, systemd
+}:
+
+stdenv.mkDerivation rec {
+  pname = "onedrive";
+  version = "2.4.25";
+
+  src = fetchFromGitHub {
+    owner = "abraunegg";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-M6EOJiykmAKWIuAXdm9ebTSX1eVoO+1axgzxlAmuI8U=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ldc installShellFiles pkg-config ];
+
+  buildInputs = [
+    curl
+    sqlite
+    libnotify
+  ] ++ lib.optional withSystemd systemd;
+
+  configureFlags = [
+    "--enable-notifications"
+  ] ++ lib.optionals withSystemd [
+    "--with-systemdsystemunitdir=${placeholder "out"}/lib/systemd/system"
+    "--with-systemduserunitdir=${placeholder "out"}/lib/systemd/user"
+  ];
+
+  # we could also pass --enable-completions to configure but we would then have to
+  # figure out the paths manually and pass those along.
+  postInstall = ''
+    installShellCompletion --bash --name ${pname}  contrib/completions/complete.bash
+    installShellCompletion --zsh  --name _${pname} contrib/completions/complete.zsh
+    installShellCompletion --fish --name ${pname}  contrib/completions/complete.fish
+  '';
+
+  meta = with lib; {
+    description = "A complete tool to interact with OneDrive on Linux";
+    homepage = "https://github.com/abraunegg/onedrive";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ srgom peterhoeg bertof ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/sync/openrsync/default.nix b/nixpkgs/pkgs/applications/networking/sync/openrsync/default.nix
new file mode 100644
index 000000000000..0398ccd96094
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/sync/openrsync/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "openrsync";
+  version = "unstable-2022-05-08";
+
+  src = fetchFromGitHub {
+    owner = "kristapsdz";
+    repo = "openrsync";
+    rev = "f50d0f8204ea18306a0c29c6ae850292ea826995";
+    hash = "sha256-4tygoCQGIM0wqLfdWp55/oOPhD3lPUuTd9/LXQAASXU=";
+  };
+
+  # Uses oconfigure
+  prefixKey = "PREFIX=";
+
+  meta = with lib; {
+    homepage = "https://www.openrsync.org/";
+    description = "BSD-licensed implementation of rsync";
+    license = licenses.isc;
+    maintainers = with maintainers; [ fgaz ];
+    # https://github.com/kristapsdz/openrsync#portability
+    # https://github.com/kristapsdz/oconfigure#readme
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/sync/rclone/browser.nix b/nixpkgs/pkgs/applications/networking/sync/rclone/browser.nix
new file mode 100644
index 000000000000..1917fc40c0ee
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/sync/rclone/browser.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, cmake, wrapQtAppsHook, qtbase }:
+
+stdenv.mkDerivation rec {
+  pname = "rclone-browser";
+  version = "1.8.0";
+
+  src = fetchFromGitHub {
+    owner = "kapitainsky";
+    repo = "RcloneBrowser";
+    rev = version;
+    sha256 = "14ckkdypkfyiqpnz0y2b73wh1py554iyc3gnymj4smy0kg70ai33";
+  };
+
+  patches = [
+    # patch for Qt 5.15, https://github.com/kapitainsky/RcloneBrowser/pull/126
+    (fetchpatch {
+      url = "https://github.com/kapitainsky/RcloneBrowser/commit/ce9cf52e9c584a2cc85a5fa814b0fd7fa9cf0152.patch";
+      sha256 = "0nm42flmaq7mva9j4dpp18i1xcv8gr08zfyb9apz1zwn79h1w0c8";
+    })
+  ];
+
+  nativeBuildInputs = [ cmake wrapQtAppsHook ];
+
+  buildInputs = [ qtbase ];
+
+  meta = with lib; {
+    inherit (src.meta) homepage;
+    description = "Graphical Frontend to Rclone written in Qt";
+    license = licenses.unlicense;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/sync/rclone/default.nix b/nixpkgs/pkgs/applications/networking/sync/rclone/default.nix
new file mode 100644
index 000000000000..d82981f2f086
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/sync/rclone/default.nix
@@ -0,0 +1,64 @@
+{ lib, stdenv, buildGoModule, fetchFromGitHub, buildPackages, installShellFiles
+, makeWrapper
+, enableCmount ? true, fuse, macfuse-stubs
+, librclone
+}:
+
+buildGoModule rec {
+  pname = "rclone";
+  version = "1.64.0";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-miXYBKUTmsqAvVLmxcVCpjgEO3HeKQpUZKSvzaxhqdU=";
+  };
+
+  vendorHash = "sha256-rpF44yd8ElOkXTT1lSW0l3ZwTqeNdGS1OxrvNY8atzA=";
+
+  subPackages = [ "." ];
+
+  outputs = [ "out" "man" ];
+
+  buildInputs = lib.optional enableCmount (if stdenv.isDarwin then macfuse-stubs else fuse);
+  nativeBuildInputs = [ installShellFiles makeWrapper ];
+
+  tags = lib.optionals enableCmount [ "cmount" ];
+
+  ldflags = [ "-s" "-w" "-X github.com/rclone/rclone/fs.Version=${version}" ];
+
+  postInstall =
+    let
+      rcloneBin =
+        if stdenv.buildPlatform.canExecute stdenv.hostPlatform
+        then "$out"
+        else lib.getBin buildPackages.rclone;
+    in
+    ''
+      installManPage rclone.1
+      for shell in bash zsh fish; do
+        ${rcloneBin}/bin/rclone genautocomplete $shell rclone.$shell
+        installShellCompletion rclone.$shell
+      done
+    '' + lib.optionalString (enableCmount && !stdenv.isDarwin)
+      # use --suffix here to ensure we don't shadow /run/wrappers/bin/fusermount,
+      # as the setuid wrapper is required as non-root on NixOS.
+      ''
+      wrapProgram $out/bin/rclone \
+        --suffix PATH : "${lib.makeBinPath [ fuse ] }" \
+        --prefix LD_LIBRARY_PATH : "${fuse}/lib"
+    '';
+
+  passthru.tests = {
+    inherit librclone;
+  };
+
+  meta = with lib; {
+    description = "Command line program to sync files and directories to and from major cloud storage";
+    homepage = "https://rclone.org";
+    changelog = "https://github.com/rclone/rclone/blob/v${version}/docs/content/changelog.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ marsam SuperSandro2000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/sync/rsync/default.nix b/nixpkgs/pkgs/applications/networking/sync/rsync/default.nix
new file mode 100644
index 000000000000..9df26b6bb845
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/sync/rsync/default.nix
@@ -0,0 +1,63 @@
+{ lib
+, stdenv
+, fetchurl
+, perl
+, libiconv
+, zlib
+, popt
+, enableACLs ? lib.meta.availableOn stdenv.hostPlatform acl
+, acl
+, enableLZ4 ? true
+, lz4
+, enableOpenSSL ? true
+, openssl
+, enableXXHash ? true
+, xxHash
+, enableZstd ? true
+, zstd
+, nixosTests
+}:
+
+stdenv.mkDerivation rec {
+  pname = "rsync";
+  version = "3.2.7";
+
+  src = fetchurl {
+    # signed with key 0048 C8B0 26D4 C96F 0E58  9C2F 6C85 9FB1 4B96 A8C5
+    url = "mirror://samba/rsync/src/rsync-${version}.tar.gz";
+    sha256 = "sha256-Tn2dP27RCHjFjF+3JKZ9rPS2qsc0CxPkiPstxBNG8rs=";
+  };
+
+  nativeBuildInputs = [ perl ];
+
+  buildInputs = [ libiconv zlib popt ]
+    ++ lib.optional enableACLs acl
+    ++ lib.optional enableZstd zstd
+    ++ lib.optional enableLZ4 lz4
+    ++ lib.optional enableOpenSSL openssl
+    ++ lib.optional enableXXHash xxHash;
+
+  configureFlags = [
+    "--with-nobody-group=nogroup"
+
+    # disable the included zlib explicitly as it otherwise still compiles and
+    # links them even.
+    "--with-included-zlib=no"
+  ] ++ lib.optionals (stdenv.hostPlatform.isMusl && stdenv.hostPlatform.isx86_64) [
+    # fix `multiversioning needs 'ifunc' which is not supported on this target` error
+    "--disable-roll-simd"
+  ];
+
+  enableParallelBuilding = true;
+
+  passthru.tests = { inherit (nixosTests) rsyncd; };
+
+  meta = with lib; {
+    description = "Fast incremental file transfer utility";
+    homepage = "https://rsync.samba.org/";
+    license = licenses.gpl3Plus;
+    mainProgram = "rsync";
+    maintainers = with lib.maintainers; [ ehmry kampfschlaefer ivan ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/sync/rsync/rrsync.nix b/nixpkgs/pkgs/applications/networking/sync/rsync/rrsync.nix
new file mode 100644
index 000000000000..09f9ab22f335
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/sync/rsync/rrsync.nix
@@ -0,0 +1,31 @@
+{ stdenv, python3, rsync }:
+
+stdenv.mkDerivation {
+  pname = "rrsync";
+  inherit (rsync) version src;
+
+  buildInputs = [
+    rsync
+    (python3.withPackages (pythonPackages: with pythonPackages; [ braceexpand ]))
+  ];
+  # Skip configure and build phases.
+  # We just want something from the support directory
+  dontConfigure = true;
+  dontBuild = true;
+
+  inherit (rsync) patches;
+
+  postPatch = ''
+    substituteInPlace support/rrsync --replace /usr/bin/rsync ${rsync}/bin/rsync
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp support/rrsync $out/bin
+    chmod a+x $out/bin/rrsync
+  '';
+
+  meta = rsync.meta // {
+    description = "A helper to run rsync-only environments from ssh-logins";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/sync/storj-uplink/default.nix b/nixpkgs/pkgs/applications/networking/sync/storj-uplink/default.nix
new file mode 100644
index 000000000000..65b9630fd5a0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/sync/storj-uplink/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "storj-uplink";
+  version = "1.87.3";
+
+  src = fetchFromGitHub {
+    owner = "storj";
+    repo = "storj";
+    rev = "v${version}";
+    hash = "sha256-16h7PzZVFnaHMyODLk9tSrW8OiXQlcuDobANG1ZQVxs=";
+  };
+
+  subPackages = [ "cmd/uplink" ];
+
+  vendorHash = "sha256-gskOhLdrRzbvZwuOlm04fjeSXhNr/cqVGejEPZVtuBk=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Command-line tool for Storj";
+    homepage = "https://storj.io";
+    license = licenses.agpl3Only;
+    mainProgram = "uplink";
+    maintainers = with maintainers; [ felipeqq2 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/sync/unison/default.nix b/nixpkgs/pkgs/applications/networking/sync/unison/default.nix
new file mode 100644
index 000000000000..3612892548fc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/sync/unison/default.nix
@@ -0,0 +1,75 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, ocamlPackages
+, ncurses
+, copyDesktopItems
+, makeDesktopItem
+, wrapGAppsHook
+, glib
+, gsettings-desktop-schemas
+, zlib
+, enableX11 ? true
+, Cocoa
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "unison";
+  version = "2.53.2";
+
+  src = fetchFromGitHub {
+    owner = "bcpierce00";
+    repo = "unison";
+    rev = "v${finalAttrs.version}";
+    sha256 = "sha256-H+70NZZP0cUsxetFcsjWEx2kENsgMdo/41wBwwaX6zg=";
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = [ glib wrapGAppsHook ocamlPackages.ocaml ]
+    ++ lib.optional enableX11 copyDesktopItems;
+  buildInputs = [ gsettings-desktop-schemas ncurses zlib ]
+    ++ lib.optional stdenv.isDarwin Cocoa;
+
+  preBuild = lib.optionalString enableX11 ''
+    sed -i "s|\(OCAMLOPT=.*\)$|\1 -I $(echo "${ocamlPackages.lablgtk3}"/lib/ocaml/*/site-lib/lablgtk3)|" src/Makefile.OCaml
+    sed -i "s|\(OCAMLOPT=.*\)$|\1 -I $(echo "${ocamlPackages.cairo2}"/lib/ocaml/*/site-lib/cairo2)|" src/Makefile.OCaml
+  '' + ''
+    echo -e '\ninstall:\n\tcp $(FSMONITOR)$(EXEC_EXT) $(INSTALLDIR)' >> src/fsmonitor/linux/Makefile
+  '';
+
+  makeFlags = [
+    "INSTALLDIR=$(out)/bin/"
+    "UISTYLE=${if enableX11 then "gtk3" else "text"}"
+  ] ++ lib.optional (!ocamlPackages.ocaml.nativeCompilers) "NATIVE=false";
+
+  preInstall = ''
+    mkdir -p $out/bin
+  '';
+
+  postInstall = lib.optionalString enableX11 ''
+    install -D $src/icons/U.svg $out/share/icons/hicolor/scalable/apps/unison.svg
+  '';
+
+  dontStrip = !ocamlPackages.ocaml.nativeCompilers;
+
+  desktopItems = lib.optional enableX11 (makeDesktopItem {
+    name = finalAttrs.pname;
+    desktopName = "Unison";
+    comment = "Bidirectional file synchronizer";
+    genericName = "File synchronization tool";
+    exec = "unison";
+    icon = "unison";
+    categories = [ "Utility" "FileTools" "GTK" ];
+    startupNotify = true;
+    startupWMClass = "Unison";
+  });
+
+  meta = with lib; {
+    homepage = "https://www.cis.upenn.edu/~bcpierce/unison/";
+    description = "Bidirectional file synchronizer";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ viric ];
+    platforms = platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/networking/sync/wdt/default.nix b/nixpkgs/pkgs/applications/networking/sync/wdt/default.nix
new file mode 100644
index 000000000000..6c6dddee1735
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/sync/wdt/default.nix
@@ -0,0 +1,50 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, cmake
+, folly
+, boost
+, gflags
+, glog
+, openssl
+, double-conversion
+, fmt
+, unstableGitUpdater
+}:
+
+stdenv.mkDerivation {
+  pname = "wdt";
+  version = "unstable-2022-12-19";
+
+  src = fetchFromGitHub {
+    owner = "facebook";
+    repo = "wdt";
+    rev = "6a122f24deb4f2ff6c6f97b6a803301a7f7b666c";
+    sha256 = "sha256-fH4Inqy7DfMJbW1FYWanScLATu8cZA1n+Vas8ee3xwA=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ folly boost gflags glog openssl double-conversion fmt ];
+
+  # source is expected to be named wdt
+  # https://github.com/facebook/wdt/blob/43319e59d0c77092468367cdadab37d12d7a2383/CMakeLists.txt#L238
+  postUnpack = ''
+    ln -s $sourceRoot wdt
+  '';
+
+  cmakeFlags = [
+    "-DWDT_USE_SYSTEM_FOLLY=ON"
+  ];
+
+  passthru = {
+    updateScript = unstableGitUpdater { };
+  };
+
+  meta = with lib; {
+    description = "Warp speed Data Transfer";
+    homepage = "https://github.com/facebook/wdt";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ nickcao ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/syncplay/default.nix b/nixpkgs/pkgs/applications/networking/syncplay/default.nix
new file mode 100644
index 000000000000..36b6b5c14339
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/syncplay/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, buildPythonApplication
+, fetchpatch
+, pem
+, pyside6
+, twisted
+, certifi
+, qt6
+, appnope
+, enableGUI ? true
+}:
+
+buildPythonApplication rec {
+  pname = "syncplay";
+  version = "1.7.0";
+
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "Syncplay";
+    repo = "syncplay";
+    rev = "v${version}";
+    sha256 = "sha256-Te81yOv3D6M6aMfC5XrM6/I6BlMdlY1yRk1RRJa9Mxg=";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "fix-typeerror.patch";
+      url = "https://github.com/Syncplay/syncplay/commit/b62b038cdf58c54205987dfc52ebf228505ad03b.patch";
+      hash = "sha256-pSP33Qn1I+nJBW8T1E1tSJKRh5OnZMRsbU+jr5z4u7c=";
+    })
+    ./trusted_certificates.patch
+  ];
+
+  buildInputs = lib.optionals enableGUI [ (if stdenv.isLinux then qt6.qtwayland else qt6.qtbase) ];
+  propagatedBuildInputs = [ certifi pem twisted ]
+    ++ twisted.optional-dependencies.tls
+    ++ lib.optional enableGUI pyside6
+    ++ lib.optional (stdenv.isDarwin && enableGUI) appnope;
+  nativeBuildInputs = lib.optionals enableGUI [ qt6.wrapQtAppsHook ];
+
+  makeFlags = [ "DESTDIR=" "PREFIX=$(out)" ];
+
+  postFixup = lib.optionalString enableGUI ''
+    wrapQtApp $out/bin/syncplay
+  '';
+
+  meta = with lib; {
+    homepage = "https://syncplay.pl/";
+    description = "Free software that synchronises media players";
+    license = licenses.asl20;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ Enzime ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/syncplay/trusted_certificates.patch b/nixpkgs/pkgs/applications/networking/syncplay/trusted_certificates.patch
new file mode 100644
index 000000000000..4cf613080024
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/syncplay/trusted_certificates.patch
@@ -0,0 +1,12 @@
+diff --git a/syncplay/client.py b/syncplay/client.py
+index b7cb245..be72d94 100755
+--- a/syncplay/client.py
++++ b/syncplay/client.py
+@@ -848,6 +848,7 @@ class SyncplayClient(object):
+         self._endpoint = HostnameEndpoint(reactor, host, port)
+         try:
+             certs = pem.parse_file(SSL_CERT_FILE)
++            certs = [cert for cert in certs if type(cert) is pem.Certificate]
+             trustRoot = trustRootFromCertificates([Certificate.loadPEM(str(cert)) for cert in certs])
+             self.protocolFactory.options = optionsForClientTLS(hostname=host, trustRoot=trustRoot)
+             self._clientSupportsTLS = True
diff --git a/nixpkgs/pkgs/applications/networking/syncthing/default.nix b/nixpkgs/pkgs/applications/networking/syncthing/default.nix
new file mode 100644
index 000000000000..965c3d5e6155
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/syncthing/default.nix
@@ -0,0 +1,124 @@
+{ pkgsBuildBuild
+, go
+, buildGoModule
+, stdenv
+, lib
+, procps
+, fetchFromGitHub
+, nixosTests
+, autoSignDarwinBinariesHook
+}:
+
+let
+  common = { stname, target, postInstall ? "" }:
+    buildGoModule rec {
+      pname = stname;
+      version = "1.23.7";
+
+      src = fetchFromGitHub {
+        owner = "syncthing";
+        repo = "syncthing";
+        rev = "v${version}";
+        hash = "sha256-LwjqMEfCdMvNoxn88H3+VyX31G5IlRohpfp++oNCfEc=";
+      };
+
+      vendorHash = "sha256-nk80Y5RBoUCp+xYNYYnVWVBkCLCgvgKZFpV5CfS2p/s=";
+
+      nativeBuildInputs = lib.optionals stdenv.isDarwin [
+        # Recent versions of macOS seem to require binaries to be signed when
+        # run from Launch Agents/Daemons, even on x86 devices where it has a
+        # more lax code signing policy compared to Apple Silicon. So just sign
+        # the binaries on both architectures to make it possible for launchd to
+        # auto-start Syncthing at login.
+        autoSignDarwinBinariesHook
+      ];
+
+      doCheck = false;
+
+      BUILD_USER = "nix";
+      BUILD_HOST = "nix";
+
+      buildPhase = ''
+        runHook preBuild
+        (
+          export GOOS="${pkgsBuildBuild.go.GOOS}" GOARCH="${pkgsBuildBuild.go.GOARCH}" CC=$CC_FOR_BUILD
+          go build build.go
+          go generate github.com/syncthing/syncthing/lib/api/auto github.com/syncthing/syncthing/cmd/strelaypoolsrv/auto
+        )
+        ./build -goos ${go.GOOS} -goarch ${go.GOARCH} -no-upgrade -version v${version} build ${target}
+        runHook postBuild
+      '';
+
+      installPhase = ''
+        runHook preInstall
+        install -Dm755 ${target} $out/bin/${target}
+        runHook postInstall
+      '';
+
+      inherit postInstall;
+
+      passthru.tests = {
+        inherit (nixosTests) syncthing syncthing-init syncthing-relay;
+      };
+
+      meta = with lib; {
+        homepage = "https://syncthing.net/";
+        description = "Open Source Continuous File Synchronization";
+        changelog = "https://github.com/syncthing/syncthing/releases/tag/v${version}";
+        license = licenses.mpl20;
+        maintainers = with maintainers; [ joko peterhoeg andrew-d ];
+        mainProgram = target;
+        platforms = platforms.unix;
+      };
+    };
+
+in
+{
+  syncthing = common {
+    stname = "syncthing";
+    target = "syncthing";
+
+    postInstall = ''
+      # This installs man pages in the correct directory according to the suffix
+      # on the filename
+      for mf in man/*.[1-9]; do
+        mantype="$(echo "$mf" | awk -F"." '{print $NF}')"
+        mandir="$out/share/man/man$mantype"
+        install -Dm644 "$mf" "$mandir/$(basename "$mf")"
+      done
+
+    '' + lib.optionalString (stdenv.isLinux) ''
+      mkdir -p $out/lib/systemd/{system,user}
+
+      substitute etc/linux-systemd/system/syncthing-resume.service \
+                 $out/lib/systemd/system/syncthing-resume.service \
+                 --replace /usr/bin/pkill ${procps}/bin/pkill
+
+      substitute etc/linux-systemd/system/syncthing@.service \
+                 $out/lib/systemd/system/syncthing@.service \
+                 --replace /usr/bin/syncthing $out/bin/syncthing
+
+      substitute etc/linux-systemd/user/syncthing.service \
+                 $out/lib/systemd/user/syncthing.service \
+                 --replace /usr/bin/syncthing $out/bin/syncthing
+    '';
+  };
+
+  syncthing-discovery = common {
+    stname = "syncthing-discovery";
+    target = "stdiscosrv";
+  };
+
+  syncthing-relay = common {
+    stname = "syncthing-relay";
+    target = "strelaysrv";
+
+    postInstall = lib.optionalString (stdenv.isLinux) ''
+      mkdir -p $out/lib/systemd/system
+
+      substitute cmd/strelaysrv/etc/linux-systemd/strelaysrv.service \
+                 $out/lib/systemd/system/strelaysrv.service \
+                 --replace /usr/bin/strelaysrv $out/bin/strelaysrv
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/synology-cloud-sync-decryption-tool/default.nix b/nixpkgs/pkgs/applications/networking/synology-cloud-sync-decryption-tool/default.nix
new file mode 100644
index 000000000000..3ceb5c0e1afd
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/synology-cloud-sync-decryption-tool/default.nix
@@ -0,0 +1,43 @@
+{ lib, writeScript, qt5, fetchurl, autoPatchelfHook }:
+
+qt5.mkDerivation rec {
+  pname = "synology-cloud-sync-decryption-tool";
+  version = "027";
+
+  src = fetchurl {
+    url = "https://global.download.synology.com/download/Utility/SynologyCloudSyncDecryptionTool/${version}/Linux/x86_64/SynologyCloudSyncDecryptionTool-${version}_x64.tar.gz";
+    sha256 = "sha256-EWxADvkfhnMwHIauJj3pH6SvSkkrc4cwAhsf1pWOOWQ=";
+  };
+
+  nativeBuildInputs = [ autoPatchelfHook ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp $NIX_BUILD_TOP/SynologyCloudSyncDecryptionTool $out/bin
+
+    runHook postInstall
+  '';
+
+  passthru.updateScript = writeScript "update-synology-cloud-sync-decryption-tool" ''
+    #!/usr/bin/env nix-shell
+    #!nix-shell -i bash -p curl common-updater-scripts
+
+    set -euo pipefail
+
+    version="$(curl -s https://www.synology.com/en-uk/releaseNote/SynologyCloudSyncDecryptionTool \
+             | grep -oP '(?<=data-version=")\d+' \
+             | head -1)"
+    update-source-version synology-cloud-sync-decryption-tool "$version"
+  '';
+
+  meta = with lib; {
+    description = "A desktop tool to decrypt data encrypted by Cloud Sync.";
+    homepage = "https://kb.synology.com/en-global/DSM/help/SynologyCloudSyncDecryptionTool/synologycloudsyncdecryptiontool";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = with maintainers; [ kalbasit ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/synology-drive-client/default.nix b/nixpkgs/pkgs/applications/networking/synology-drive-client/default.nix
new file mode 100644
index 000000000000..34d33e326ab4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/synology-drive-client/default.nix
@@ -0,0 +1,80 @@
+{ stdenv, lib, writeScript, qt5, fetchurl, autoPatchelfHook, dpkg, glibc, cpio, xar, undmg, gtk3, pango, libxcb }:
+let
+  pname = "synology-drive-client";
+  baseUrl = "https://global.download.synology.com/download/Utility/SynologyDriveClient";
+  version = "3.3.0-15082";
+  buildNumber = with lib; last (splitString "-" version);
+  meta = with lib; {
+    description = "Desktop application to synchronize files and folders between the computer and the Synology Drive server.";
+    homepage = "https://www.synology.com/en-global/dsm/feature/drive";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = with maintainers; [ jcouyang MoritzBoehme ];
+    platforms = [ "x86_64-linux" "x86_64-darwin" ];
+  };
+  passthru.updateScript = writeScript "update-synology-drive-client" ''
+    #!/usr/bin/env nix-shell
+    #!nix-shell -i bash -p curl common-updater-scripts
+
+    set -eu -o pipefail
+
+    version="$(curl -s https://www.synology.com/en-uk/releaseNote/SynologyDriveClient \
+             | grep -oP '(?<=data-version=")(\d.){2}\d-\d{5}' \
+             | head -1)"
+    update-source-version synology-drive-client "$version"
+  '';
+
+  linux = qt5.mkDerivation {
+    inherit pname version meta passthru;
+
+    src = fetchurl {
+      url = "${baseUrl}/${version}/Ubuntu/Installer/x86_64/synology-drive-client-${buildNumber}.x86_64.deb";
+      sha256 = "sha256-ha3KRpEIT7w6pUVUwZV011W1F/v/hNq9f3ArfzU0ZGc=";
+    };
+
+    nativeBuildInputs = [ autoPatchelfHook dpkg ];
+
+    buildInputs = [ glibc gtk3 pango libxcb ];
+
+    unpackPhase = ''
+      mkdir -p $out
+      dpkg -x $src $out
+      rm -rf $out/usr/lib/nautilus
+      rm -rf $out/opt/Synology/SynologyDrive/package/cloudstation/icon-overlay
+    '';
+
+    installPhase = ''
+      cp -av $out/usr/* $out
+      rm -rf $out/usr
+      runHook postInstall
+    '';
+
+    postInstall = ''
+      substituteInPlace $out/bin/synology-drive --replace /opt $out/opt
+    '';
+  };
+
+  darwin = stdenv.mkDerivation {
+    inherit pname version meta passthru;
+
+    src = fetchurl {
+      url = "${baseUrl}/${version}/Mac/Installer/synology-drive-client-${buildNumber}.dmg";
+      sha256 = "sha256-dxmpB31ZjO1uAnAbY13OjVR81CCDLf9vJC20iZaPZJ4=";
+    };
+
+    nativeBuildInputs = [ cpio xar undmg ];
+
+    postUnpack = ''
+      xar -xf 'Install Synology Drive Client.pkg'
+      cd synology-drive.installer.pkg
+      gunzip -dc Payload | cpio -i
+    '';
+
+    sourceRoot = ".";
+
+    installPhase = ''
+      mkdir -p $out/Applications/
+      cp -R 'Synology Drive Client.app' $out/Applications/
+    '';
+  };
+in if stdenv.isDarwin then darwin else linux
diff --git a/nixpkgs/pkgs/applications/networking/taler/default.nix b/nixpkgs/pkgs/applications/networking/taler/default.nix
new file mode 100644
index 000000000000..748c97b51b62
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/taler/default.nix
@@ -0,0 +1,122 @@
+{ lib, stdenv, fetchgit, curl, gnunet, jansson, libgcrypt, libmicrohttpd_0_9_72
+, qrencode, libsodium, libtool, libunistring, pkg-config, postgresql
+, autoreconfHook, python39, recutils, wget, jq, gettext, texinfo
+}:
+
+let
+  version = "0.9.2";
+
+  taler-wallet-core = fetchgit {
+    url = "https://git.taler.net/wallet-core.git";
+    rev = "v${version}";
+    sha256 = "sha256-DTnwj/pkowR1b1+N94pnuLykD2O37Nh8AKhUIzY7NaU=";
+  };
+
+in rec {
+  taler-exchange = stdenv.mkDerivation rec {
+    pname = "taler-exchange";
+    inherit version;
+
+    src = fetchgit {
+      url = "https://git.taler.net/exchange.git";
+      rev = "v${version}";
+      fetchSubmodules = true;
+      sha256 = "sha256-c0cX38hDIZGVhHrD9LgDU70dF2AYuZmsakC8yDyZE54=";
+    };
+
+    nativeBuildInputs = [
+      autoreconfHook
+      pkg-config
+    ];
+    buildInputs = [
+      libgcrypt
+      libmicrohttpd_0_9_72
+      jansson
+      libsodium
+      postgresql
+      curl
+      recutils
+      gettext
+      texinfo # Fix 'makeinfo' is missing on your system.
+      libunistring
+      python39.pkgs.jinja2
+    ];
+    propagatedBuildInputs = [ gnunet ];
+
+    preConfigure = ''
+      ./contrib/gana-update.sh
+    '';
+
+    enableParallelBuilding = true;
+
+    nativeCheckInputs = [ wget curl ];
+    doInstallCheck = true;
+    checkTarget = "check";
+
+    meta = with lib; {
+      description = ''
+        Taler is an electronic payment system providing the ability to pay
+        anonymously using digital cash.  Taler consists of a network protocol
+        definition (using a RESTful API over HTTP), a Exchange (which creates
+        digital coins), a Wallet (which allows customers to manage, store and
+        spend digital coins), and a Merchant website which allows customers to
+        spend their digital coins.  Naturally, each Merchant is different, but
+        Taler includes code examples to help Merchants integrate Taler as a
+        payment system.
+      '';
+      homepage = "https://taler.net/";
+      license = licenses.agpl3Plus;
+      maintainers = with maintainers; [ astro ];
+      platforms = platforms.linux;
+    };
+  };
+
+  taler-merchant = stdenv.mkDerivation rec {
+    pname = "taler-merchant";
+    inherit version;
+
+    src = fetchgit {
+      url = "https://git.taler.net/merchant.git";
+      rev = "v${version}";
+      sha256 = "sha256-NPK8yhuTtZZiWE7OsUMdlb2aycegPzRFud41xHE9IL8=";
+    };
+    postUnpack = ''
+      ln -s ${taler-wallet-core}/spa.html $sourceRoot/contrib/
+    '';
+
+    nativeBuildInputs = [ pkg-config autoreconfHook ];
+    buildInputs = taler-exchange.buildInputs ++ [
+      qrencode
+      taler-exchange
+      # for ltdl.h
+      libtool
+    ];
+    propagatedBuildInputs = [ gnunet ];
+
+    configureFlags = [
+      "--with-gnunet=${gnunet}"
+      "--with-exchange=${taler-exchange}"
+    ];
+
+    enableParallelBuilding = true;
+
+    nativeCheckInputs = [ jq ];
+    doInstallCheck = true;
+    checkTarget = "check";
+
+    meta = with lib; {
+      description = ''
+        This is the GNU Taler merchant backend. It provides the logic that should run
+        at every GNU Taler merchant.  The GNU Taler merchant is a RESTful backend that
+        can be used to setup orders and process payments.  This component allows
+        merchants to receive payments without invading the customers' privacy. Of
+        course, this applies mostly for digital goods, as the merchant does not need
+        to know the customer's physical address.
+      '';
+      homepage = "https://taler.net/";
+      license = licenses.agpl3Plus;
+      maintainers = with maintainers; [ astro ];
+      platforms = platforms.linux;
+    };
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/tcping-go/default.nix b/nixpkgs/pkgs/applications/networking/tcping-go/default.nix
new file mode 100644
index 000000000000..1502f8a16aef
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/tcping-go/default.nix
@@ -0,0 +1,22 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule {
+  pname = "tcping-go";
+  version = "unstable-2022-05-28";
+
+  src = fetchFromGitHub {
+    owner = "cloverstd";
+    repo = "tcping";
+    rev = "83f644c761819f7c4386f0645cd0a337eccfc62e";
+    sha256 = "sha256-GSkNfaGMJbBqDg8DKhDtLAuUg1yF3FbBdxcf4oG50rI=";
+  };
+
+  vendorHash = "sha256-Q+aFgi7GCAn3AxDuGtRG4DdPhI7gQKEo7A9iu1YcTsQ=";
+
+  meta = with lib; {
+    description = "Ping over TCP instead of ICMP, written in Go";
+    homepage = "https://github.com/cloverstd/tcping";
+    license = licenses.mit;
+    maintainers = with maintainers; [ bcdarwin ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/tcpkali/default.nix b/nixpkgs/pkgs/applications/networking/tcpkali/default.nix
new file mode 100644
index 000000000000..fa0236dcd8c2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/tcpkali/default.nix
@@ -0,0 +1,26 @@
+{lib, stdenv, autoreconfHook, fetchFromGitHub, bison}:
+
+let version = "1.1.1"; in
+
+stdenv.mkDerivation rec {
+  pname = "tcpkali";
+  inherit version;
+  src = fetchFromGitHub {
+    owner = "machinezone";
+    repo = "tcpkali";
+    rev = "v${version}";
+    sha256 = "09ky3cccaphcqc6nhfs00pps99lasmzc2pf5vk0gi8hlqbbhilxf";
+  };
+  postPatch = ''
+    sed -ie '/sys\/sysctl\.h/d' src/tcpkali_syslimits.c
+  '';
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ bison];
+  meta = {
+    description = "High performance TCP and WebSocket load generator and sink";
+    license = lib.licenses.bsd2;
+    inherit (src.meta) homepage;
+    platforms = lib.platforms.linux;
+    maintainers = with lib.maintainers; [ ethercrow ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/termius/default.nix b/nixpkgs/pkgs/applications/networking/termius/default.nix
new file mode 100644
index 000000000000..dd37e32b36e4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/termius/default.nix
@@ -0,0 +1,83 @@
+{ atomEnv
+, autoPatchelfHook
+, squashfsTools
+, fetchurl
+, makeDesktopItem
+, makeWrapper
+, stdenv
+, lib
+, udev
+, wrapGAppsHook
+, libxshmfence
+}:
+
+stdenv.mkDerivation rec {
+  pname = "termius";
+  version = "7.56.1";
+
+  src = fetchurl {
+    # find the latest version with
+    # curl -H 'X-Ubuntu-Series: 16' https://api.snapcraft.io/api/v1/snaps/details/termius-app | jq '.version'
+    # and the url with
+    # curl -H 'X-Ubuntu-Series: 16' https://api.snapcraft.io/api/v1/snaps/details/termius-app | jq '.download_url' -r
+    # and the sha512 with
+    # curl -H 'X-Ubuntu-Series: 16' https://api.snapcraft.io/api/v1/snaps/details/termius-app | jq '.download_sha512' -r
+    url = "https://api.snapcraft.io/api/v1/snaps/download/WkTBXwoX81rBe3s3OTt3EiiLKBx2QhuS_144.snap";
+    sha512 = "aad9ab72ad3dcbb897fa99139b83993770c243f49e8784c34ac38603f0d76578374723e756c4f51ea2d0a39f6b9c7738e7ce070a8ddfa11f8cf831260563f6d9";
+  };
+
+  desktopItem = makeDesktopItem {
+    categories = [ "Network" ];
+    comment = "The SSH client that works on Desktop and Mobile";
+    desktopName = "Termius";
+    exec = "termius-app";
+    genericName = "Cross-platform SSH client";
+    icon = "termius-app";
+    name = "termius-app";
+  };
+
+  dontBuild = true;
+  dontConfigure = true;
+  dontPatchELF = true;
+  dontWrapGApps = true;
+
+  nativeBuildInputs = [ autoPatchelfHook squashfsTools makeWrapper wrapGAppsHook ];
+
+  buildInputs = atomEnv.packages ++ [ libxshmfence ];
+
+  unpackPhase = ''
+    runHook preUnpack
+    unsquashfs "$src"
+    runHook postUnpack
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    cd squashfs-root
+    mkdir -p $out/opt/termius
+    cp -r ./ $out/opt/termius
+
+    mkdir -p "$out/share/applications" "$out/share/pixmaps/termius-app.png"
+    cp "${desktopItem}/share/applications/"* "$out/share/applications"
+    cp meta/gui/icon.png $out/share/pixmaps/termius-app.png
+
+    runHook postInstall
+  '';
+
+  runtimeDependencies = [ (lib.getLib udev) ];
+
+  postFixup = ''
+    makeWrapper $out/opt/termius/termius-app $out/bin/termius-app \
+      "''${gappsWrapperArgs[@]}"
+  '';
+
+  meta = with lib; {
+    description = "A cross-platform SSH client with cloud data sync and more";
+    homepage = "https://termius.com/";
+    downloadPage = "https://termius.com/linux/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = with maintainers; [ Br1ght0ne th0rgal ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/testssl/default.nix b/nixpkgs/pkgs/applications/networking/testssl/default.nix
new file mode 100644
index 000000000000..b5f8285087a7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/testssl/default.nix
@@ -0,0 +1,48 @@
+{ stdenv, fetchFromGitHub, makeWrapper, lib
+, dnsutils, coreutils, openssl, nettools, util-linux, procps }:
+
+stdenv.mkDerivation rec {
+  pname = "testssl.sh";
+  version = "3.0.8";
+
+  src = fetchFromGitHub {
+    owner = "drwetter";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-gkDtJlAC7woM2HyYDXntD1+bEuqHTEipqrn2EZjxnH8=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [
+    coreutils # for printf
+    dnsutils  # for dig
+    nettools  # for hostname
+    openssl   # for openssl
+    procps    # for ps
+    util-linux # for hexdump
+  ];
+
+  postPatch = ''
+    substituteInPlace testssl.sh                                               \
+      --replace TESTSSL_INSTALL_DIR:-\"\"   TESTSSL_INSTALL_DIR:-\"$out\"      \
+      --replace PROG_NAME=\"\$\(basename\ \"\$0\"\)\" PROG_NAME=\"testssl.sh\"
+  '';
+
+  installPhase = ''
+    install -D testssl.sh $out/bin/testssl.sh
+    cp -r etc $out
+
+    wrapProgram $out/bin/testssl.sh --prefix PATH ':' ${lib.makeBinPath buildInputs}
+  '';
+
+  meta = with lib; {
+    description = "CLI tool to check a server's TLS/SSL capabilities";
+    longDescription = ''
+      CLI tool which checks a server's service on any port for the support of
+      TLS/SSL ciphers, protocols as well as recent cryptographic flaws and more.
+    '';
+    homepage = "https://testssl.sh/";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ etu ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/tetrd/default.nix b/nixpkgs/pkgs/applications/networking/tetrd/default.nix
new file mode 100644
index 000000000000..a9ccf1d2774f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/tetrd/default.nix
@@ -0,0 +1,86 @@
+{ stdenv
+, lib
+, fetchurl
+, autoPatchelfHook
+, makeWrapper
+, c-ares
+, ffmpeg
+, libevent
+, libvpx
+, libxslt
+, xorg
+, minizip
+, nss
+, re2
+, snappy
+, libnotify
+, libappindicator-gtk3
+, libappindicator
+, udev
+, mesa # required for libgbm
+}:
+
+stdenv.mkDerivation rec {
+  pname = "tetrd";
+  version = "1.0.4";
+
+  src = fetchurl {
+    url = "https://web.archive.org/web/20211130190525/https://download.tetrd.app/files/tetrd.linux_amd64.pkg.tar.xz";
+    sha256 = "1bxp7rg2dm9nnvkgg48xd156d0jgdf35flaw0bwzkkh3zz9ysry2";
+  };
+
+  sourceRoot = ".";
+  dontConfigure = true;
+  dontBuild = true;
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+    makeWrapper
+  ];
+
+  buildInputs = [
+    c-ares
+    ffmpeg
+    libevent
+    libvpx
+    libxslt
+    xorg.libXScrnSaver
+    xorg.libXdamage
+    xorg.libXtst
+    minizip
+    nss
+    re2
+    snappy
+    libnotify
+    libappindicator-gtk3
+    libappindicator
+    udev
+    mesa
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/opt
+    cp -r $sourceRoot/opt/Tetrd $out/opt
+    cp -r $sourceRoot/usr/share $out
+
+    wrapProgram $out/opt/Tetrd/tetrd \
+      --prefix LD_LIBRARY_PATH ":" ${lib.makeLibraryPath buildInputs}
+
+    runHook postInstall
+  '';
+
+  postFixup = ''
+    substituteInPlace $out/share/applications/tetrd.desktop --replace /opt $out/opt
+  '';
+
+  meta = with lib; {
+    description = "Share your internet connection from your device to your PC and vice versa through a USB cable";
+    homepage = "https://tetrd.app";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ Madouura ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/tmpmail/default.nix b/nixpkgs/pkgs/applications/networking/tmpmail/default.nix
new file mode 100644
index 000000000000..d29d5816f449
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/tmpmail/default.nix
@@ -0,0 +1,33 @@
+{ lib, fetchFromGitHub, stdenvNoCC, w3m, curl, jq, makeWrapper, installShellFiles, xclip }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "tmpmail";
+  version = "1.2.3";
+
+   src = fetchFromGitHub {
+    owner = "sdushantha";
+    repo = "tmpmail";
+    rev = "v${version}";
+    sha256 = "sha256-s4c1M4YHK/CNpH7nPt7rRqlkLUZrpBXvAVS/qxCai9c=";
+  };
+
+  dontConfigure = true;
+
+  dontBuild = true;
+
+  nativeBuildInputs = [ makeWrapper installShellFiles ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    install -Dm755 -t $out/bin tmpmail
+    installManPage tmpmail.1
+    wrapProgram $out/bin/tmpmail --prefix PATH : ${lib.makeBinPath [ w3m curl jq xclip ]}
+  '';
+
+   meta = with lib; {
+    homepage = "https://github.com/sdushantha/tmpmail";
+    description = "A temporary email right from your terminal written in POSIX sh ";
+    license = licenses.mit;
+    maintainers = [ maintainers.lom ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/trayscale/default.nix b/nixpkgs/pkgs/applications/networking/trayscale/default.nix
new file mode 100644
index 000000000000..01c79a1153ea
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/trayscale/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, pkg-config
+, wrapGAppsHook4
+, tailscale
+, gtk4
+, gobject-introspection
+, libadwaita
+}:
+
+buildGoModule rec {
+  pname = "trayscale";
+  version = "0.9.7";
+
+  src = fetchFromGitHub {
+    owner = "DeedleFake";
+    repo = "trayscale";
+    rev = "v${version}";
+    hash = "sha256-PMcpVBJVJNX+5vICubBUqlyHC0CEZC9EGUfw6O3pCeA=";
+  };
+
+  vendorHash = "sha256-K1Za2j4kUtsktFi9DjZYXrtfsWF1r6vIbyocLUrj5IU=";
+
+  subPackages = [ "cmd/trayscale" ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=deedles.dev/trayscale/internal/version.version=${version}"
+  ];
+
+  nativeBuildInputs = [ pkg-config gobject-introspection wrapGAppsHook4 ];
+  buildInputs = [ gtk4 libadwaita ];
+
+  # there are no actual tests, and it takes 20 minutes to rebuild
+  doCheck = false;
+
+  postInstall = ''
+    sh ./dist.sh install $out
+    glib-compile-schemas $out/share/glib-2.0/schemas
+  '';
+
+  preFixup = ''
+    gappsWrapperArgs+=(--prefix PATH : "${tailscale}/bin")
+  '';
+
+  meta = with lib; {
+    description = "An unofficial GUI wrapper around the Tailscale CLI client";
+    homepage = "https://github.com/DeedleFake/trayscale";
+    license = licenses.mit;
+    maintainers = with maintainers; [ k900 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/tsung/default.nix b/nixpkgs/pkgs/applications/networking/tsung/default.nix
new file mode 100644
index 000000000000..ab66d6a09dc2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/tsung/default.nix
@@ -0,0 +1,60 @@
+{ lib
+, stdenv
+, fetchurl
+, makeWrapper
+, erlang
+, python3
+, python3Packages
+, perlPackages
+, gnuplot
+}:
+
+stdenv.mkDerivation rec {
+  pname = "tsung";
+  version = "1.8.0";
+
+  src = fetchurl {
+    url = "http://tsung.erlang-projects.org/dist/tsung-${version}.tar.gz";
+    hash = "sha256-kehkMCYBfj0AiKZxD7EcT2F0d+gm6+TF/lhqpjFH/JI=";
+  };
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  propagatedBuildInputs = [
+    erlang
+    gnuplot
+    perlPackages.perl
+    perlPackages.TemplateToolkit
+    python3
+    python3Packages.matplotlib
+  ];
+
+
+  postFixup = ''
+    # Make tsung_stats.pl accessible
+    # Leaving .pl at the end since all of tsung documentation is refering to it
+    # as tsung_stats.pl
+    ln -s $out/lib/tsung/bin/tsung_stats.pl $out/bin/tsung_stats.pl
+
+    # Add Template Toolkit and gnuplot to tsung_stats.pl
+    wrapProgram $out/bin/tsung_stats.pl \
+        --prefix PATH : ${lib.makeBinPath [ gnuplot ]} \
+        --set PERL5LIB "${perlPackages.makePerlPath [ perlPackages.TemplateToolkit ]}"
+  '';
+
+  meta = with lib; {
+    homepage = "http://tsung.erlang-projects.org/";
+    changelog = "https://github.com/processone/tsung/blob/v${version}/CHANGELOG.md";
+    description = "A high-performance benchmark framework for various protocols including HTTP, XMPP, LDAP, etc";
+    longDescription = ''
+      Tsung is a distributed load testing tool. It is protocol-independent and
+      can currently be used to stress HTTP, WebDAV, SOAP, PostgreSQL, MySQL,
+      AMQP, MQTT, LDAP and Jabber/XMPP servers.
+    '';
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ uskudnik ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/twingate/default.nix b/nixpkgs/pkgs/applications/networking/twingate/default.nix
new file mode 100644
index 000000000000..09b3000c875d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/twingate/default.nix
@@ -0,0 +1,62 @@
+{ autoPatchelfHook
+, curl
+, dpkg
+, dbus
+, fetchurl
+, lib
+, libnl
+, udev
+, cryptsetup
+, stdenv
+, nixosTests
+}:
+
+stdenv.mkDerivation rec {
+  pname = "twingate";
+  version = "2023.227.93197";
+
+  src = fetchurl {
+    url = "https://binaries.twingate.com/client/linux/DEB/x86_64/${version}/twingate-amd64.deb";
+    hash = "sha256-YV56U+RXpTOJvyufVKtTY1c460//ZJcifq2XroTQLXU=";
+  };
+
+  buildInputs = [
+    dbus
+    curl
+    libnl
+    udev
+    cryptsetup
+  ];
+
+  nativeBuildInputs = [
+    dpkg
+    autoPatchelfHook
+  ];
+
+  postPatch = ''
+    while read file; do
+      substituteInPlace "$file" \
+        --replace "/usr/bin" "$out/bin" \
+        --replace "/usr/sbin" "$out/bin"
+    done < <(find etc usr/lib usr/share -type f)
+  '';
+
+  installPhase = ''
+    mkdir $out
+    mv etc $out/
+    mv usr/bin $out/bin
+    mv usr/sbin/* $out/bin
+    mv usr/lib $out/lib
+    mv usr/share $out/share
+  '';
+
+  passthru.tests = { inherit (nixosTests) twingate; };
+
+  meta = with lib; {
+    description = "Twingate Client";
+    homepage = "https://twingate.com";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ tonyshkurenko ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/twtxt/default.nix b/nixpkgs/pkgs/applications/networking/twtxt/default.nix
new file mode 100644
index 000000000000..7d703d2db4ff
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/twtxt/default.nix
@@ -0,0 +1,37 @@
+{ lib, fetchFromGitHub, buildPythonApplication, aiohttp, python-dateutil, humanize, click, pytestCheckHook, tox }:
+
+buildPythonApplication rec {
+  pname = "twtxt";
+  version = "1.3.1";
+
+  src = fetchFromGitHub {
+    owner = "buckket";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-CbFh1o2Ijinfb8X+h1GP3Tp+8D0D3/Czt/Uatd1B4cw=";
+  };
+
+  # Relax some dependencies
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace 'aiohttp>=2.2.5,<3' 'aiohttp' \
+      --replace 'click>=6.7,<7' 'click' \
+      --replace 'humanize>=0.5.1,<1' 'humanize'
+  '';
+
+  propagatedBuildInputs = [ aiohttp python-dateutil humanize click ];
+
+  nativeCheckInputs = [ pytestCheckHook tox ];
+
+  disabledTests = [
+     # Disable test using relative date and time
+     "test_tweet_relative_datetime"
+  ];
+
+  meta = with lib; {
+    description = "Decentralised, minimalist microblogging service for hackers";
+    homepage = "https://github.com/buckket/twtxt";
+    license = licenses.mit;
+    maintainers = with maintainers; [ siraben ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/umurmur/default.nix b/nixpkgs/pkgs/applications/networking/umurmur/default.nix
new file mode 100644
index 000000000000..9af0fb7b73ca
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/umurmur/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, openssl, protobufc, libconfig }:
+
+stdenv.mkDerivation rec {
+  pname = "umurmur";
+  version = "0.2.20";
+
+  src = fetchFromGitHub {
+    owner = "umurmur";
+    repo = "umurmur";
+    rev = version;
+    sha256 = "sha256-jp5+NbGmT90ksffvpLYIX2q5cPeVidDCYMPvLHCiP68=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ openssl protobufc libconfig ];
+
+  # https://github.com/umurmur/umurmur/issues/176
+  postPatch = ''
+    sed -i '/CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON);/d' src/ssli_openssl.c
+  '';
+
+  configureFlags = [
+    "--with-ssl=openssl"
+    "--enable-shmapi"
+  ];
+
+  meta = with lib; {
+    description = "Minimalistic Murmur (Mumble server)";
+    license = licenses.bsd3;
+    homepage = "https://github.com/umurmur/umurmur";
+    platforms = platforms.all;
+    # never built on aarch64-darwin since first introduction in nixpkgs
+    broken = stdenv.isDarwin && stdenv.isAarch64;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/upnp-router-control/default.nix b/nixpkgs/pkgs/applications/networking/upnp-router-control/default.nix
new file mode 100644
index 000000000000..4e9bb7f82068
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/upnp-router-control/default.nix
@@ -0,0 +1,52 @@
+{ lib
+, stdenv
+, fetchzip
+, desktop-file-utils
+, intltool
+, meson
+, ninja
+, pkg-config
+, wrapGAppsHook
+, gssdp_1_6
+, gtk3
+, gupnp_1_6
+}:
+
+stdenv.mkDerivation rec {
+  pname = "upnp-router-control";
+  version = "0.3.3";
+
+  src = fetchzip {
+    url = "https://launchpad.net/upnp-router-control/trunk/${version}/+download/upnp-router-control-${version}.tar.xz";
+    hash = "sha256-d5NmA1tOQtYPjGXYfH0p9CCnWM+aVTX2KuV36QCDxd8=";
+  };
+
+  nativeBuildInputs = [
+    desktop-file-utils
+    intltool
+    meson
+    ninja
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gssdp_1_6
+    gtk3
+    gupnp_1_6
+  ];
+
+  meta = with lib; {
+    # also https://gitlab.gnome.org/DnaX/upnp-router-control
+    homepage = "https://launchpad.net/upnp-router-control";
+    description = "Access some parameters of the router and manage port forwarding";
+    longDescription = ''
+      A GTK application to access some parameters of the router like:
+      the network speed, the external IP and the model name.
+      It can manage port forwarding through a simple GUI interface.
+    '';
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ fgaz ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/utahfs/default.nix b/nixpkgs/pkgs/applications/networking/utahfs/default.nix
new file mode 100644
index 000000000000..e867ff46e7de
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/utahfs/default.nix
@@ -0,0 +1,25 @@
+{ buildGoPackage, lib, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "utahfs";
+  version = "1.0";
+  src = fetchFromGitHub {
+    owner = "cloudflare";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1hpwch5fsqlxwpk5afawa1k5s0bx5c1cw0hvdllp7257lgly19fb";
+  };
+
+  goPackagePath = "github.com/cloudflare/utahfs";
+
+  meta = with lib; {
+    homepage = "https://github.com/cloudflare/utahfs";
+    description =
+      "Encrypted storage system that provides a user-friendly FUSE drive backed by cloud storage";
+    license = licenses.bsd3;
+    maintainers = [ maintainers.snglth ];
+    platforms = platforms.unix;
+    # does not build with go 1.17: https://github.com/cloudflare/utahfs/issues/46
+    broken = true;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/versus/default.nix b/nixpkgs/pkgs/applications/networking/versus/default.nix
new file mode 100644
index 000000000000..1e3dd2113269
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/versus/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "versus";
+  version = "1.0";
+
+  src = fetchFromGitHub {
+    owner = "INFURA";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0j5mj9gwwvgx7r1svlg14dpcqlj8mhwlf7sampkkih6bv92qfzcd";
+  };
+
+  vendorSha256 = "1d12jcd8crxcgp5m8ga691wivim4cg8cbz4pzgxp0jhzg9jplpbv";
+
+  meta = with lib; {
+    description = "Benchmark multiple API endpoints against each other";
+    homepage = "https://github.com/INFURA/versus";
+    license = licenses.mit;
+    maintainers = with maintainers; [ mmahut ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/vnstat/default.nix b/nixpkgs/pkgs/applications/networking/vnstat/default.nix
new file mode 100644
index 000000000000..6eb7271d8f30
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/vnstat/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv
+, fetchFromGitHub
+, pkg-config
+, gd, ncurses
+, sqlite
+, check
+}:
+
+stdenv.mkDerivation rec {
+  pname = "vnstat";
+  version = "2.11";
+
+  src = fetchFromGitHub {
+    owner = "vergoh";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-IO5B+jyY6izPpam3Qt4Hu8BOGwfO10ER/GFEbsQORK0=";
+  };
+
+  postPatch = ''
+    substituteInPlace src/cfg.c --replace /usr/local $out
+  '';
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ gd ncurses sqlite ];
+
+  nativeCheckInputs = [ check ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Console-based network statistics utility for Linux";
+    longDescription = ''
+      vnStat is a console-based network traffic monitor for Linux and BSD that
+      keeps a log of network traffic for the selected interface(s). It uses the
+      network interface statistics provided by the kernel as information source.
+      This means that vnStat won't actually be sniffing any traffic and also
+      ensures light use of system resources.
+    '';
+    homepage = "https://humdi.net/vnstat/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ evils ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/warp/default.nix b/nixpkgs/pkgs/applications/networking/warp/default.nix
new file mode 100644
index 000000000000..f30b10e99c7b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/warp/default.nix
@@ -0,0 +1,69 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, appstream-glib
+, cargo
+, desktop-file-utils
+, itstool
+, meson
+, ninja
+, pkg-config
+, python3
+, rustPlatform
+, rustc
+, wrapGAppsHook4
+, glib
+, gtk4
+, libadwaita
+}:
+
+stdenv.mkDerivation rec {
+  pname = "warp";
+  version = "0.5.4";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.gnome.org";
+    owner = "World";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-twK0C2BvD3GLmJ9H05sas0bce/dIMIWeCoFRU/f+1eg=";
+  };
+
+  postPatch = ''
+    patchShebangs build-aux
+  '';
+
+  cargoDeps = rustPlatform.fetchCargoTarball {
+    inherit src;
+    name = "${pname}-${version}";
+    hash = "sha256-mxM+V4gWGfW8M56+kV/Ljtzde7oRPH0twJtEImkUIF4=";
+  };
+
+  nativeBuildInputs = [
+    appstream-glib
+    desktop-file-utils
+    itstool
+    meson
+    ninja
+    pkg-config
+    python3
+    wrapGAppsHook4
+    rustPlatform.cargoSetupHook
+    cargo
+    rustc
+  ];
+
+  buildInputs = [
+    glib
+    gtk4
+    libadwaita
+  ];
+
+  meta = {
+    description = "Fast and secure file transfer";
+    homepage = "https://apps.gnome.org/app/app.drey.Warp";
+    license = lib.licenses.gpl3Only;
+    maintainers = with lib.maintainers; [ dotlambda foo-dogsquared ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/wayback_machine_downloader/Gemfile b/nixpkgs/pkgs/applications/networking/wayback_machine_downloader/Gemfile
new file mode 100644
index 000000000000..3625511551d3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/wayback_machine_downloader/Gemfile
@@ -0,0 +1,4 @@
+# frozen_string_literal: true
+
+source 'https://rubygems.org'
+gem 'wayback_machine_downloader'
diff --git a/nixpkgs/pkgs/applications/networking/wayback_machine_downloader/Gemfile.lock b/nixpkgs/pkgs/applications/networking/wayback_machine_downloader/Gemfile.lock
new file mode 100644
index 000000000000..936e10996fb3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/wayback_machine_downloader/Gemfile.lock
@@ -0,0 +1,13 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    wayback_machine_downloader (2.3.1)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  wayback_machine_downloader
+
+BUNDLED WITH
+   2.3.6
diff --git a/nixpkgs/pkgs/applications/networking/wayback_machine_downloader/default.nix b/nixpkgs/pkgs/applications/networking/wayback_machine_downloader/default.nix
new file mode 100644
index 000000000000..49471ebf7e39
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/wayback_machine_downloader/default.nix
@@ -0,0 +1,16 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+bundlerApp {
+  pname = "wayback_machine_downloader";
+  exes = [ "wayback_machine_downloader" ];
+  gemdir = ./.;
+
+  passthru.updateScript = bundlerUpdateScript "wayback_machine_downloader";
+
+  meta = with lib; {
+    description = "Download websites from the Internet Archive Wayback Machine";
+    homepage = "https://github.com/hartator/wayback-machine-downloader";
+    license = licenses.mit;
+    maintainers = [ maintainers.manveru ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/wayback_machine_downloader/gemset.nix b/nixpkgs/pkgs/applications/networking/wayback_machine_downloader/gemset.nix
new file mode 100644
index 000000000000..87cb3019d0a5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/wayback_machine_downloader/gemset.nix
@@ -0,0 +1,12 @@
+{
+  wayback_machine_downloader = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "170426sashqc2k2angg8d0bhs7spi1x1isv6cyk2hif0l6xxm3cm";
+      type = "gem";
+    };
+    version = "2.3.1";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/weather/meteo/default.nix b/nixpkgs/pkgs/applications/networking/weather/meteo/default.nix
new file mode 100644
index 000000000000..45da18f8f7be
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/weather/meteo/default.nix
@@ -0,0 +1,69 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, nix-update-script
+, appstream
+, desktop-file-utils
+, meson
+, ninja
+, pkg-config
+, python3
+, vala
+, wrapGAppsHook
+, glib
+, gtk3
+, json-glib
+, libappindicator
+, libsoup
+, webkitgtk
+}:
+
+stdenv.mkDerivation rec {
+  pname = "meteo";
+  version = "0.9.9.2";
+
+  src = fetchFromGitLab {
+    owner = "bitseater";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-9+FNpLjiX0zdsUnbBnNSLt/Ma/cqtclP25tl+faPlpU=";
+  };
+
+  nativeBuildInputs = [
+    appstream
+    desktop-file-utils
+    meson
+    ninja
+    pkg-config
+    python3
+    vala
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    glib
+    gtk3
+    json-glib
+    libappindicator
+    libsoup
+    webkitgtk
+  ];
+
+  postPatch = ''
+    chmod +x meson/post_install.py
+    patchShebangs meson/post_install.py
+  '';
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    description = "Know the forecast of the next hours & days";
+    homepage = "https://gitlab.com/bitseater/meteo";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ bobby285271 ];
+    platforms = platforms.linux;
+    mainProgram = "com.gitlab.bitseater.meteo";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/websocketd/default.nix b/nixpkgs/pkgs/applications/networking/websocketd/default.nix
new file mode 100644
index 000000000000..212850dcc7f5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/websocketd/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "websocketd";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = "joewalnes";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-cp4iBSQ6Cd0+NPZ2i79Mulg1z17u//OCm3yoArbZEHs=";
+  };
+
+  vendorHash = "sha256-i5IPJ3srUXL7WWjBW9w803VSoyjwA5JgPWKsAckPYxY=";
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Turn any program that uses STDIN/STDOUT into a WebSocket server";
+    homepage = "http://websocketd.com/";
+    maintainers = [ maintainers.bjornfor ];
+    license = licenses.bsd2;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/wg-bond/default.nix b/nixpkgs/pkgs/applications/networking/wg-bond/default.nix
new file mode 100644
index 000000000000..0c8c629208af
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/wg-bond/default.nix
@@ -0,0 +1,29 @@
+{ pkgs, lib, rustPlatform, fetchFromGitLab, wireguard-tools, makeWrapper }:
+rustPlatform.buildRustPackage rec {
+  pname = "wg-bond";
+  version = "0.2.0";
+
+  src = fetchFromGitLab {
+    owner = "cab404";
+    repo = "wg-bond";
+    rev = "v${version}";
+    hash = "sha256:04k0maxy39k7qzcsqsv1byddsmjszmnyjffrf22nzbvml83p3l0y";
+  };
+
+  cargoSha256 = "1nlzhkhk1y0jhj6n3wn4dm783ldsxn7dk0d2xjx6ylczf9z3gp12";
+
+  nativeBuildInputs = [ makeWrapper ];
+  postInstall = ''
+    wrapProgram $out/bin/wg-bond --set PATH ${
+      lib.makeBinPath [ wireguard-tools ]
+    }
+  '';
+
+  meta = with lib; {
+    description = "Wireguard configuration manager";
+    homepage = "https://gitlab.com/cab404/wg-bond";
+    changelog = "https://gitlab.com/cab404/wg-bond/-/releases#v${version}";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ cab404 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/wgcf/default.nix b/nixpkgs/pkgs/applications/networking/wgcf/default.nix
new file mode 100644
index 000000000000..9b6db44f437e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/wgcf/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "wgcf";
+  version = "2.2.19";
+
+  src = fetchFromGitHub {
+    owner = "ViRb3";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-wEBPaqqpiQdFohlzpVDVMwYq8+NjSQrh58yWl/W+n8M=";
+  };
+
+  subPackages = ".";
+
+  vendorHash = "sha256-i1CM0rG2DmgYMa+Na0In4fVJSGZlMTRajjLEZUvrmE8=";
+
+  meta = with lib; {
+    description = "Cross-platform, unofficial CLI for Cloudflare Warp";
+    homepage = "https://github.com/ViRb3/wgcf";
+    license = licenses.mit;
+    maintainers = with maintainers; [ yureien ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/wgnord/default.nix b/nixpkgs/pkgs/applications/networking/wgnord/default.nix
new file mode 100644
index 000000000000..a85c318c65d7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/wgnord/default.nix
@@ -0,0 +1,65 @@
+{ bash
+, coreutils
+, curl
+, fetchFromGitHub
+, gnugrep
+, gnused
+, iproute2
+, jq
+, lib
+, resholve
+, wireguard-tools
+}:
+
+resholve.mkDerivation rec {
+  pname = "wgnord";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "phirecc";
+    repo = pname;
+    rev = version;
+    hash = "sha256-00513jr3Sk8YahqI14pQ7pU4P7MBUlsqXXfrACu35RQ=";
+  };
+
+  postPatch = ''
+    substituteInPlace wgnord \
+      --replace '$conf_dir/countries.txt' "$out/share/countries.txt" \
+      --replace '$conf_dir/countries_iso31662.txt' "$out/share/countries_iso31662.txt"
+  '';
+
+  dontBuild = true;
+
+  installPhase = ''
+    install -Dm 755 wgnord -t $out/bin/
+    install -Dm 644 countries.txt -t $out/share/
+    install -Dm 644 countries_iso31662.txt -t $out/share/
+  '';
+
+  solutions.default = {
+    scripts = [ "bin/wgnord" ];
+    interpreter = "${bash}/bin/sh";
+    inputs = [
+      coreutils
+      curl
+      gnugrep
+      gnused
+      iproute2
+      jq
+      wireguard-tools
+    ];
+    fix.aliases = true; # curl command in an alias
+    execer = [
+      "cannot:${iproute2}/bin/ip"
+      "cannot:${wireguard-tools}/bin/wg-quick"
+    ];
+  };
+
+  meta = with lib; {
+    description = "A NordVPN Wireguard (NordLynx) client in POSIX shell";
+    homepage = "https://github.com/phirecc/wgnord";
+    changelog = "https://github.com/phirecc/wgnord/releases/tag/v${version}";
+    maintainers = with lib.maintainers; [ urandom ];
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/yaup/default.nix b/nixpkgs/pkgs/applications/networking/yaup/default.nix
new file mode 100644
index 000000000000..5894e758e9d9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/yaup/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, intltool
+, pkg-config
+, wrapGAppsHook
+, gtk3
+, miniupnpc
+}:
+
+stdenv.mkDerivation rec {
+  pname = "yaup";
+  version = "unstable-2019-10-16";
+
+  src = fetchFromGitHub {
+    owner = "Holarse-Linuxgaming";
+    repo = "yaup";
+    rev = "7ee3fdbd8c1ecf0a0e6469c47560e26082808250";
+    hash = "sha256-RWnNjpgXRYncz9ID8zirENffy1UsfHD1H6Mmd8DKN4k=";
+  };
+
+  nativeBuildInputs = [
+    intltool
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gtk3
+    miniupnpc
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/Holarse-Linuxgaming/yaup";
+    description = "Yet Another UPnP Portmapper";
+    longDescription = ''
+      Portmapping made easy.
+      Portforward your incoming traffic to a specified local ip.
+      Mostly used for IPv4.
+    '';
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ fgaz ];
+    platforms = platforms.all;
+    # ld: unknown option: --export-dynamic
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/zerobin/default.nix b/nixpkgs/pkgs/applications/networking/zerobin/default.nix
new file mode 100644
index 000000000000..ca55085d8085
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/zerobin/default.nix
@@ -0,0 +1,68 @@
+{ lib
+, python3Packages
+, fetchFromGitHub
+, nodePackages
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "zerobin";
+  version = "1.0.5";
+
+  src = fetchFromGitHub {
+    owner = "Tygs";
+    repo = "0bin";
+    rev = "v${version}";
+    sha256 = "1dfy3h823ylz4w2vv3mrmnmiyvf6rvyvsp4j3llr074w9id0zy16";
+  };
+
+  disabled = python3Packages.pythonOlder "3.7";
+
+  nativeBuildInputs = [
+    python3Packages.doit
+    python3Packages.pyscss
+    nodePackages.uglify-js
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    appdirs
+    beaker
+    bleach
+    bottle
+    clize
+    lockfile
+    paste
+  ];
+
+  prePatch = ''
+    # replace /bin/bash in compress.sh
+    patchShebangs .
+
+    # relax version constraints of some dependencies
+    substituteInPlace setup.cfg \
+      --replace "clize==4.1.1" "clize" \
+      --replace "bleach==3.1.5" "bleach>=3.1.5,<6" \
+      --replace "bottle==0.12.18" "bottle>=0.12.18,<1" \
+      --replace "Paste==3.4.3" "Paste>=3.4.3,<4"
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+    doit build
+    runHook postBuild
+  '';
+
+  # zerobin has no check, but checking would fail with:
+  # nix_run_setup runserver: Received extra arguments: test
+  # See https://github.com/NixOS/nixpkgs/pull/98734#discussion_r495823510
+  doCheck = false;
+
+  pythonImportsCheck = [ "zerobin" ];
+
+  meta = with lib; {
+    description = "A client side encrypted pastebin";
+    homepage = "https://0bin.net/";
+    license = licenses.wtfpl;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ julm ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/znc/default.nix b/nixpkgs/pkgs/applications/networking/znc/default.nix
new file mode 100644
index 000000000000..667533871993
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/znc/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv, fetchurl, openssl, pkg-config
+, withPerl ? false, perl
+, withPython ? false, python3
+, withTcl ? false, tcl
+, withCyrus ? true, cyrus_sasl
+, withUnicode ? true, icu
+, withZlib ? true, zlib
+, withIPv6 ? true
+, withDebug ? false
+}:
+
+stdenv.mkDerivation rec {
+  pname = "znc";
+  version = "1.8.2";
+
+  src = fetchurl {
+    url = "https://znc.in/releases/archive/${pname}-${version}.tar.gz";
+    sha256 = "03fyi0j44zcanj1rsdx93hkdskwfvhbywjiwd17f9q1a7yp8l8zz";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl ]
+    ++ lib.optional withPerl perl
+    ++ lib.optional withPython python3
+    ++ lib.optional withTcl tcl
+    ++ lib.optional withCyrus cyrus_sasl
+    ++ lib.optional withUnicode icu
+    ++ lib.optional withZlib zlib;
+
+  configureFlags = [
+    (lib.enableFeature withPerl "perl")
+    (lib.enableFeature withPython "python")
+    (lib.enableFeature withTcl "tcl")
+    (lib.withFeatureAs withTcl "tcl" "${tcl}/lib")
+    (lib.enableFeature withCyrus "cyrus")
+  ] ++ lib.optionals (!withIPv6) [ "--disable-ipv6" ]
+    ++ lib.optionals withDebug [ "--enable-debug" ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Advanced IRC bouncer";
+    homepage = "https://wiki.znc.in/ZNC";
+    maintainers = with maintainers; [ schneefux lnl7 ];
+    license = licenses.asl20;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/znc/modules.nix b/nixpkgs/pkgs/applications/networking/znc/modules.nix
new file mode 100644
index 000000000000..1620c2878eea
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/znc/modules.nix
@@ -0,0 +1,202 @@
+{ lib, stdenv, fetchFromGitHub, znc }:
+
+let
+  zncDerivation =
+    a@{ pname
+    , src
+    , module_name
+    , buildPhase ? "${znc}/bin/znc-buildmod ${module_name}.cpp"
+    , installPhase ? "install -D ${module_name}.so $out/lib/znc/${module_name}.so"
+    , ...
+    }: stdenv.mkDerivation (a // {
+      inherit buildPhase;
+      inherit installPhase;
+
+      buildInputs = znc.buildInputs;
+
+      meta = a.meta // { platforms = lib.platforms.unix; };
+      passthru.module_name = module_name;
+    });
+
+in
+{
+
+  backlog = zncDerivation rec {
+    pname = "znc-backlog";
+    version = "unstable-2017-06-13";
+    module_name = "backlog";
+
+    src = fetchFromGitHub {
+      owner = "FruitieX";
+      repo = "znc-backlog";
+      rev = "42e8f439808882d2dae60f2a161eabead14e4b0d";
+      sha256 = "1k7ifpqqzzf2j7w795q4mx1nvmics2higzjqr3mid3lp43sqg5s6";
+    };
+
+    meta = with lib; {
+      description = "Request backlog for IRC channels.";
+      homepage = "https://github.com/fruitiex/znc-backlog/";
+      license = licenses.asl20;
+      maintainers = with maintainers; [ infinisil ];
+    };
+  };
+
+  clientbuffer = zncDerivation rec {
+    pname = "znc-clientbuffer";
+    version = "unstable-2021-05-30";
+    module_name = "clientbuffer";
+
+    src = fetchFromGitHub {
+      owner = "CyberShadow";
+      repo = "znc-clientbuffer";
+      rev = "9a7465b413b53408f5d7af86e84b1d08efb6bec0";
+      sha256 = "0a3f4j6s5j7p53y42zrgpqyl2zm0jxb69lp24j6mni3licigh254";
+    };
+
+    meta = with lib; {
+      description = "ZNC module for client specific buffers";
+      homepage = "https://github.com/CyberShadow/znc-clientbuffer";
+      license = licenses.asl20;
+      maintainers = with maintainers; [ hrdinka szlend ];
+    };
+  };
+
+  clientaway = zncDerivation rec {
+    pname = "znc-clientaway";
+    version = "unstable-2017-04-28";
+    module_name = "clientaway";
+
+    src = fetchFromGitHub {
+      owner = "kylef";
+      repo = "znc-contrib";
+      rev = "f6724a4a3b16b050088adde0cbeed74f189e5044";
+      sha256 = "0ikd3dzjjlr0gs0ikqfk50msm6mij99ln2rjzqavh58iwzr7n5r8";
+    };
+
+    meta = with lib; {
+      description = "ZNC clientaway module";
+      homepage = "https://github.com/kylef/znc-contrib";
+      license = licenses.gpl2;
+      maintainers = with maintainers; [ kiwi ];
+    };
+  };
+
+  fish = zncDerivation rec {
+    pname = "znc-fish";
+    version = "unstable-2017-06-26";
+    module_name = "fish";
+
+    src = fetchFromGitHub {
+      # this fork works with ZNC 1.7
+      owner = "oilslump";
+      repo = "znc-fish";
+      rev = "7d91467dbb195f7b591567911210523c6087662e";
+      sha256 = "1ky5xg17k5f393whrv5iv8zsmdvdyk2f7z5qdsmxcwy3pdxy6vsm";
+    };
+
+    meta = {
+      description = "ZNC FiSH module";
+      homepage = "https://github.com/dctrwatson/znc-fish";
+      maintainers = [ lib.maintainers.offline ];
+    };
+  };
+
+  ignore = zncDerivation rec {
+    pname = "znc-ignore";
+    version = "unstable-2017-04-28";
+    module_name = "ignore";
+
+    src = fetchFromGitHub {
+      owner = "kylef";
+      repo = "znc-contrib";
+      rev = "f6724a4a3b16b050088adde0cbeed74f189e5044";
+      sha256 = "0ikd3dzjjlr0gs0ikqfk50msm6mij99ln2rjzqavh58iwzr7n5r8";
+    };
+
+    meta = with lib; {
+      description = "ZNC ignore module";
+      homepage = "https://github.com/kylef/znc-contrib";
+      license = licenses.gpl2;
+      maintainers = with maintainers; [ kiwi ];
+    };
+  };
+
+  palaver = zncDerivation rec {
+    pname = "znc-palaver";
+    version = "2020-07-18";
+    module_name = "palaver";
+
+    src = fetchFromGitHub {
+      owner = "cocodelabs";
+      repo = "znc-palaver";
+      rev = "825cb6814d64006ca0f85fec23fa0a8a3a2d14ca";
+      sha256 = "zXWPIxhO5Z2L6f+Hf3vIpEh6V4kjUONWAaKexKLECc8=";
+    };
+
+    meta = with lib; {
+      description = "Palaver ZNC module";
+      homepage = "https://github.com/cocodelabs/znc-palaver";
+      license = licenses.mit;
+      maintainers = with maintainers; [ kiwi szlend ];
+    };
+  };
+
+  playback = zncDerivation rec {
+    pname = "znc-playback";
+    version = "unstable-2015-08-04";
+    module_name = "playback";
+
+    src = fetchFromGitHub {
+      owner = "jpnurmi";
+      repo = "znc-playback";
+      rev = "8691abf75becc1f3d7b5bb5ad68dad17cd21863b";
+      sha256 = "0mgfajljy035051b2sx70i8xrb51zw9q2z64kf85zw1lynihzyh4";
+    };
+
+    meta = with lib; {
+      description = "An advanced playback module for ZNC";
+      homepage = "https://github.com/jpnurmi/znc-playback";
+      license = licenses.asl20;
+      maintainers = with maintainers; [ hrdinka ];
+    };
+  };
+
+  privmsg = zncDerivation rec {
+    pname = "znc-privmsg";
+    version = "unstable-2015-02-22";
+    module_name = "privmsg";
+
+    src = fetchFromGitHub {
+      owner = "kylef";
+      repo = "znc-contrib";
+      rev = "9f1f98db56cbbea96d83e6628f657e0d62cd9517";
+      sha256 = "0n82z87gdxxragcaixjc80z8bw4bmfwbk0jrf9zs8kk42phlkkc2";
+    };
+
+    meta = {
+      description = "ZNC privmsg module";
+      homepage = "https://github.com/kylef/znc-contrib";
+    };
+  };
+
+  push = zncDerivation rec {
+    pname = "znc-push";
+    version = "unstable-2016-10-12";
+    module_name = "push";
+
+    src = fetchFromGitHub {
+      owner = "jreese";
+      repo = "znc-push";
+      rev = "cf08b9e0f483f03c28d72dd78df932cbef141f10";
+      sha256 = "0xpwjw8csyrg736g1jc1n8d6804x6kbdkrvldzhk9ldj4iwqz7ay";
+    };
+
+    meta = {
+      description = "Push notification service module for ZNC";
+      homepage = "https://github.com/jreese/znc-push";
+      license = lib.licenses.mit;
+      maintainers = with lib.maintainers; [ offline schneefux ];
+    };
+  };
+
+}