rm syncthing

This commit is contained in:
2025-12-30 11:30:50 +01:00
parent e2e246b52b
commit b95fac6927
19 changed files with 8 additions and 788 deletions

View File

@@ -7,13 +7,10 @@
}: {
imports = [
./secrets.nix
./syncthing.nix
../../modules/syncthing.nix
../../profiles/core.nix
../../profiles/darwin.nix
../../profiles/dock.nix
../../profiles/homebrew.nix
../../profiles/syncthing.nix
../../profiles/tailscale.nix
inputs.sops-nix.darwinModules.sops
];

View File

@@ -1,17 +1,5 @@
{
user,
hostname,
...
}: let
secrets = import ../../lib/secrets.nix;
in {
{user, ...}: {
sops.age.keyFile = "/Users/${user}/.config/sops/age/keys.txt";
sops.age.sshKeyPaths = [];
sops.gnupg.sshKeyPaths = [];
sops.secrets =
secrets.mkSyncthingSecrets {
inherit hostname user;
isDarwin = true;
};
}

View File

@@ -1,8 +0,0 @@
{user, ...}: {
services.syncthing.settings.folders = {
"Projects/Work" = {
path = "/Users/${user}/Projects/Work";
devices = ["tahani" "chidi"];
};
};
}

View File

@@ -6,13 +6,10 @@
}: {
imports = [
./secrets.nix
./syncthing.nix
../../modules/syncthing.nix
../../profiles/core.nix
../../profiles/darwin.nix
../../profiles/dock.nix
../../profiles/homebrew.nix
../../profiles/syncthing.nix
../../profiles/tailscale.nix
inputs.sops-nix.darwinModules.sops
];

View File

@@ -1,17 +1,5 @@
{
user,
hostname,
...
}: let
secrets = import ../../lib/secrets.nix;
in {
{user, ...}: {
sops.age.keyFile = "/Users/${user}/.config/sops/age/keys.txt";
sops.age.sshKeyPaths = [];
sops.gnupg.sshKeyPaths = [];
sops.secrets =
secrets.mkSyncthingSecrets {
inherit hostname user;
isDarwin = true;
};
}

View File

@@ -1,8 +0,0 @@
{user, ...}: {
services.syncthing.settings.folders = {
"Projects/Personal" = {
path = "/Users/${user}/Projects/Personal";
devices = ["tahani" "jason"];
};
};
}

View File

@@ -10,11 +10,9 @@
./networking.nix
./paperless.nix
./secrets.nix
./syncthing.nix
../../profiles/core.nix
../../profiles/openssh.nix
../../profiles/nixos.nix
../../profiles/syncthing.nix
../../profiles/tailscale.nix
inputs.sops-nix.nixosModules.sops
];

View File

@@ -1,19 +1,8 @@
{
user,
hostname,
...
}: let
secrets = import ../../lib/secrets.nix;
in {
sops.secrets =
secrets.mkSyncthingSecrets {
inherit hostname user;
isDarwin = false;
}
// {
tahani-paperless-password = {
sopsFile = ../../secrets/tahani-paperless-password;
format = "binary";
};
{...}: {
sops.secrets = {
tahani-paperless-password = {
sopsFile = ../../secrets/tahani-paperless-password;
format = "binary";
};
};
}

View File

@@ -1,12 +0,0 @@
{user, ...}: {
services.syncthing.settings.folders = {
"Projects/Personal" = {
path = "/home/${user}/Projects/Personal";
devices = ["tahani" "jason"];
};
"Projects/Work" = {
path = "/home/${user}/Projects/Work";
devices = ["tahani" "chidi"];
};
};
}

View File

@@ -11,10 +11,4 @@
nixos = "25.11";
homeManager = "25.11";
};
syncthingDeviceIds = {
tahani = "6B7OZZF-TEAMUGO-FBOELXP-Z4OY7EU-5ZHLB5T-V6Z3UDB-Q2DYR43-QBYW6QM";
jason = "42II2VO-QYPJG26-ZS3MB2I-AOPVZ67-JJNSE76-U54CO5Y-634A5OG-ECU4YQA";
chidi = "N7W6SUT-QO6J4BE-T3Y65SM-OFGYGNV-TGYBJPX-JVN4Z72-AENZ247-KWXOQA6";
};
}

View File

@@ -1,25 +0,0 @@
{
mkSyncthingSecrets = {
hostname,
user,
isDarwin,
}: let
homeDir =
if isDarwin
then "/Users/${user}"
else "/home/${user}";
in {
"${hostname}-syncthing-cert" = {
sopsFile = ../secrets/${hostname}-syncthing-cert;
format = "binary";
owner = user;
path = "${homeDir}/.config/syncthing/cert.pem";
};
"${hostname}-syncthing-key" = {
sopsFile = ../secrets/${hostname}-syncthing-key;
format = "binary";
owner = user;
path = "${homeDir}/.config/syncthing/key.pem";
};
};
}

View File

@@ -1,437 +0,0 @@
{
config,
lib,
pkgs,
...
}:
with lib; let
cfg = config.services.syncthing;
settingsFormat = pkgs.formats.json {};
cleanedConfig = converge (filterAttrsRecursive (_: v: v != null && v != {})) cfg.settings;
isUnixGui = (builtins.substring 0 1 cfg.guiAddress) == "/";
curlAddressArgs = path:
if isUnixGui
then "--unix-socket ${cfg.guiAddress} http://.${path}"
else "${cfg.guiAddress}${path}";
devices = mapAttrsToList (_: device: device // {deviceID = device.id;}) cfg.settings.devices;
anyAutoAccept = builtins.any (dev: dev.autoAcceptFolders) devices;
folders =
mapAttrsToList (_: folder:
folder
// {
devices = let
folderDevices = folder.devices;
in
map (
device:
if builtins.isString device
then {deviceId = cfg.settings.devices.${device}.id;}
else if builtins.isAttrs device
then {deviceId = cfg.settings.devices.${device.name}.id;} // device
else throw "Invalid type for devices in folder; expected list or attrset."
)
folderDevices;
}) (filterAttrs (_: folder: folder.enable) cfg.settings.folders);
jq = "${pkgs.jq}/bin/jq";
updateConfig =
pkgs.writers.writeBash "merge-syncthing-config" (
''
set -efu
umask 0077
curl() {
while
! ${pkgs.libxml2}/bin/xmllint \
--xpath 'string(configuration/gui/apikey)' \
${cfg.configDir}/config.xml \
>"$TMPDIR/api_key"
do sleep 1; done
(printf "X-API-Key: "; cat "$TMPDIR/api_key") >"$TMPDIR/headers"
${pkgs.curl}/bin/curl -sSLk -H "@$TMPDIR/headers" \
--retry 1000 --retry-delay 1 --retry-all-errors \
"$@"
}
''
+ (lib.pipe {
devs = {
new_conf_IDs = map (v: v.id) devices;
GET_IdAttrName = "deviceID";
override = cfg.overrideDevices;
conf = devices;
baseAddress = curlAddressArgs "/rest/config/devices";
};
dirs = {
new_conf_IDs = map (v: v.id) folders;
GET_IdAttrName = "id";
override = cfg.overrideFolders;
conf = folders;
baseAddress = curlAddressArgs "/rest/config/folders";
};
} [
(mapAttrs (
conf_type: s:
lib.pipe s.conf [
(map (
new_cfg: let
jsonPreSecretsFile =
pkgs.writeTextFile {
name = "${conf_type}-${new_cfg.id}-conf-pre-secrets.json";
text = builtins.toJSON new_cfg;
};
injectSecretsJqCmd =
{
"devs" = "${jq} .";
"dirs" = let
folder = new_cfg;
devicesWithSecrets =
lib.pipe folder.devices [
(lib.filter (device: (builtins.isAttrs device) && device ? encryptionPasswordFile))
(map (device: {
deviceId = device.deviceId;
variableName = "secret_${builtins.hashString "sha256" device.encryptionPasswordFile}";
secretPath = device.encryptionPasswordFile;
}))
];
jqUpdates =
map (device: ''
.devices[] |= (
if .deviceId == "${device.deviceId}" then
del(.encryptionPasswordFile) |
.encryptionPassword = ''$${device.variableName}
else
.
end
)
'')
devicesWithSecrets;
jqRawFiles = map (device: "--rawfile ${device.variableName} ${lib.escapeShellArg device.secretPath}") devicesWithSecrets;
in "${jq} ${lib.concatStringsSep " " jqRawFiles} ${lib.escapeShellArg (lib.concatStringsSep "|" (["."] ++ jqUpdates))}";
}.${
conf_type
};
in ''
${injectSecretsJqCmd} ${jsonPreSecretsFile} | curl --json @- -X POST ${s.baseAddress}
''
))
(lib.concatStringsSep "\n")
]
+ lib.optionalString s.override ''
stale_${conf_type}_ids="$(curl -X GET ${s.baseAddress} | ${jq} \
--argjson new_ids ${lib.escapeShellArg (builtins.toJSON s.new_conf_IDs)} \
--raw-output \
'[.[].${s.GET_IdAttrName}] - $new_ids | .[]'
)"
for id in ''${stale_${conf_type}_ids}; do
>&2 echo "Deleting stale device: $id"
curl -X DELETE ${s.baseAddress}/$id
done
''
))
builtins.attrValues
(lib.concatStringsSep "\n")
])
+ (lib.pipe cleanedConfig [
builtins.attrNames
(lib.subtractLists ["folders" "devices"])
(map (subOption: ''
curl -X PUT -d ${lib.escapeShellArg (builtins.toJSON cleanedConfig.${subOption})} ${curlAddressArgs "/rest/config/${subOption}"}
''))
(lib.concatStringsSep "\n")
])
+ ''
if curl ${curlAddressArgs "/rest/config/restart-required"} |
${jq} -e .requiresRestart > /dev/null; then
curl -X POST ${curlAddressArgs "/rest/system/restart"}
fi
''
);
in {
options = {
services.syncthing = {
enable = mkEnableOption "Syncthing, a self-hosted open-source alternative to Dropbox and Bittorrent Sync";
cert =
mkOption {
type = types.nullOr types.str;
default = null;
description = "Path to the cert.pem file, which will be copied into Syncthing's configDir.";
};
key =
mkOption {
type = types.nullOr types.str;
default = null;
description = "Path to the key.pem file, which will be copied into Syncthing's configDir.";
};
overrideDevices =
mkOption {
type = types.bool;
default = true;
description = "Whether to delete the devices which are not configured via the devices option.";
};
overrideFolders =
mkOption {
type = types.bool;
default = !anyAutoAccept;
description = "Whether to delete the folders which are not configured via the folders option.";
};
settings =
mkOption {
type =
types.submodule {
freeformType = settingsFormat.type;
options = {
options =
mkOption {
default = {};
description = "The options element contains all other global configuration options";
type =
types.submodule {
freeformType = settingsFormat.type;
options = {
localAnnounceEnabled =
mkOption {
type = types.nullOr types.bool;
default = null;
description = "Whether to send announcements to the local LAN.";
};
globalAnnounceEnabled =
mkOption {
type = types.nullOr types.bool;
default = null;
description = "Whether to send announcements to the global discovery servers.";
};
relaysEnabled =
mkOption {
type = types.nullOr types.bool;
default = null;
description = "When true, relays will be connected to and potentially used for device to device connections.";
};
urAccepted =
mkOption {
type = types.nullOr types.int;
default = null;
description = "Whether the user has accepted to submit anonymous usage data.";
};
};
};
};
devices =
mkOption {
default = {};
description = "Peers/devices which Syncthing should communicate with.";
type =
types.attrsOf (types.submodule ({name, ...}: {
freeformType = settingsFormat.type;
options = {
name =
mkOption {
type = types.str;
default = name;
description = "The name of the device.";
};
id =
mkOption {
type = types.str;
description = "The device ID.";
};
autoAcceptFolders =
mkOption {
type = types.bool;
default = false;
description = "Automatically create or share folders that this device advertises at the default path.";
};
};
}));
};
folders =
mkOption {
default = {};
description = "Folders which should be shared by Syncthing.";
type =
types.attrsOf (types.submodule ({name, ...}: {
freeformType = settingsFormat.type;
options = {
enable =
mkOption {
type = types.bool;
default = true;
description = "Whether to share this folder.";
};
path =
mkOption {
type = types.str;
default = name;
description = "The path to the folder which should be shared.";
};
id =
mkOption {
type = types.str;
default = name;
description = "The ID of the folder. Must be the same on all devices.";
};
label =
mkOption {
type = types.str;
default = name;
description = "The label of the folder.";
};
type =
mkOption {
type = types.enum ["sendreceive" "sendonly" "receiveonly" "receiveencrypted"];
default = "sendreceive";
description = "Controls how the folder is handled by Syncthing.";
};
devices =
mkOption {
type =
types.listOf (types.oneOf [
types.str
(types.submodule {
freeformType = settingsFormat.type;
options = {
name =
mkOption {
type = types.str;
description = "The name of a device defined in the devices option.";
};
encryptionPasswordFile =
mkOption {
type = types.nullOr types.path;
default = null;
description = "Path to encryption password file.";
};
};
})
]);
default = [];
description = "The devices this folder should be shared with.";
};
};
}));
};
};
};
default = {};
description = "Extra configuration options for Syncthing.";
};
guiAddress =
mkOption {
type = types.str;
default = "127.0.0.1:8384";
description = "The address to serve the web interface at.";
};
user =
mkOption {
type = types.str;
default = "syncthing";
description = "The user to run Syncthing as.";
};
group =
mkOption {
type = types.str;
default = "syncthing";
description = "The group to run Syncthing under.";
};
dataDir =
mkOption {
type = types.path;
default = "/var/lib/syncthing";
description = "The path where synchronised directories will exist.";
};
configDir =
mkOption {
type = types.path;
default = cfg.dataDir + "/.config/syncthing";
description = "The path where the settings and keys will exist.";
};
openDefaultPorts =
mkOption {
type = types.bool;
default = false;
description = "Whether to open the default ports in the firewall (not applicable on Darwin).";
};
package = mkPackageOption pkgs "syncthing" {};
};
};
config =
mkIf cfg.enable {
assertions = [
{
assertion = !(cfg.overrideFolders && anyAutoAccept);
message = "services.syncthing.overrideFolders will delete auto-accepted folders from the configuration, creating path conflicts.";
}
];
environment.systemPackages = [cfg.package];
launchd.user.agents.syncthing = {
serviceConfig = {
ProgramArguments = [
"${cfg.package}/bin/syncthing"
"--no-browser"
"--gui-address=${
if isUnixGui
then "unix://"
else ""
}${cfg.guiAddress}"
"--config=${cfg.configDir}"
"--data=${cfg.configDir}"
];
EnvironmentVariables = {
STNORESTART = "yes";
STNOUPGRADE = "yes";
};
KeepAlive = true;
RunAtLoad = true;
ProcessType = "Background";
StandardOutPath = "${cfg.configDir}/syncthing.log";
StandardErrorPath = "${cfg.configDir}/syncthing.log";
};
};
launchd.user.agents.syncthing-init =
mkIf (cleanedConfig != {}) {
serviceConfig = {
ProgramArguments = ["${updateConfig}"];
RunAtLoad = true;
KeepAlive = false;
ProcessType = "Background";
StandardOutPath = "${cfg.configDir}/syncthing-init.log";
StandardErrorPath = "${cfg.configDir}/syncthing-init.log";
};
};
system.activationScripts.syncthing =
mkIf (cfg.cert != null || cfg.key != null) ''
echo "Setting up Syncthing certificates..."
mkdir -p ${cfg.configDir}
${optionalString (cfg.cert != null) ''
cp ${toString cfg.cert} ${cfg.configDir}/cert.pem
chmod 644 ${cfg.configDir}/cert.pem
''}
${optionalString (cfg.key != null) ''
cp ${toString cfg.key} ${cfg.configDir}/key.pem
chmod 600 ${cfg.configDir}/key.pem
''}
'';
};
}

View File

@@ -1,55 +0,0 @@
{
user,
pkgs,
constants,
...
}: let
isDarwin = pkgs.stdenv.isDarwin;
homeDir =
if isDarwin
then "/Users/${user}"
else "/home/${user}";
group =
if isDarwin
then "staff"
else "users";
deviceIds = constants.syncthingDeviceIds;
in {
services.syncthing = {
enable = true;
openDefaultPorts = !isDarwin;
dataDir = "${homeDir}/.local/share/syncthing";
configDir = "${homeDir}/.config/syncthing";
user = user;
inherit group;
guiAddress = "0.0.0.0:8384";
overrideFolders = true;
overrideDevices = true;
settings = {
devices = {
tahani = {
id = deviceIds.tahani;
addresses = ["tcp://tahani:22000"];
};
jason = {
id = deviceIds.jason;
addresses = ["tcp://jason:22000"];
};
chidi = {
id = deviceIds.chidi;
addresses = ["tcp://chidi:22000"];
};
};
folders = {
nixos-config = {
path = "${homeDir}/nixos-config";
devices = ["tahani" "jason" "chidi"];
};
};
options.globalAnnounceEnabled = false;
};
};
}

View File

@@ -1,31 +0,0 @@
{
"data": "ENC[AES256_GCM,data:O3rroBu1m+r7CMgXQ1kFKGrE03Hfl5VI1YVnV9SrJlulutS2NcO2+aN/BQ3TAKKyF7l8RC1xLz9R1Lqp1n26oSfKJRHMfx9dEG7rCD8TWphfI8x0lU0GGF3+JJ3zlipra+CLKESjW3KfYvQLH2QsyiiGjqNGzsx/C8L0TzTY8tIUGGcENF0Z/0tTi+c15a3VoioSP7t2qyKX/NGsKWpTv2MECIKNkAu8PPYOS5Zpiem9FdOH0Lq18uNfRpmyhTFZa5TPwXuHZ0jOcDxVWTKzniXqIR/4p4RPk0NySFJe2MirzMCzvLfuN0aPshXd7kbsQSt1pHYgOcDOTGye08CVMuGiUK5h0PCciRDKYfyF8XVvoDDu5N6Q5eSSUdWQ1/y7OdItcEDSZEXNRucOTtwXDoHRbb6UZY5V/t2K9P0uuD4Gt8GjDAu7m55BkMvLAcdM5UZdn1Hhy8hIgk3yPOJFXtUSC0zLh+5vDSz+gQIkHWGKVsTfZNWWLZJE6//fYaKUXqJT+QW591RWmS92gt8VKjeTxGLa9LA6gUOZd07YaTXSIB6rYtbwAZk1rs1hmbucCsQAIZXbLdzC5fWDhFsPyp7hrQxiQ+fUpRESGiDscCSPtNdqCc6SkChz78NP8MBZ6g8Cn7q8ulrYE6KunhWHi37r/NJGSNndq5WHgkLVnCy7DnTEGl6Y9G/0uTw6MqSgCmX6Bt3iqDQGh0+viZ/KtFj+X6qg26jSDFSi7+6fF6I3qLCvzYLcyy/pWQw5J2TH4N3W0BSwUtiJYXn/7nu/LoapimCazJq6tX5NH/kLUTVNbIdF/q+2JIBeKxOe17Jptwx1oDLRkPRiPfMQvWWXQSJQLmbIythsoZOsxWGIel7Jp1w575a5h6fnN2zQ0dz/fnYrw+fNMDlgPNjUGZBOu0ph2JdSNrbPMCw4gGGLZzc0XNyzWAJTTgJHhGHdNMMLKSZnT5b6brdlfeIJYBteWVtrGZ+GqeWOJaf6XzBj5IbATrnKqHEqRHjY/sdLTM+48gJtWS4YO55NCIo2cMXcEYKsw2CSWYHw9kk=,iv:xtsQp6M0J99w0t/P2+2O3s0gEZ0ZpDwXABRBksLyrGo=,tag:ydK61E1tk3r2guo+N6fW4g==,type:str]",
"sops": {
"age": [
{
"recipient": "age1njjegjjdqzfnrr54f536yl4lduqgna3wuv7ef6vtl9jw5cju0grsgy62tm",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBxYzNhOWtXbFRjT2tZMk5H\nTFNZVUlnYnFMYXBQVS9IY0RWZGgwVk9odkZjClpyOWxxT01wMC9Mckp1NXJnSmp0\nQUZPTk5uYjZCYWJ0eE5KTWNzY1E4V3MKLS0tIE9hWnBCRlRVaFhGZHBsOEtmemFZ\nRnU0WmRXYUloRUhyTVhuYjF4VkoyNkUKrTAfyo7HZbKSLXVOnQvWFmW3ocxSZ35Q\ny6nbRAirQkF5VrIacXl/DAltpsFgNZ7SFqtSPVQ0mM1CkuYKO2ooXQ==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age187jl7e4k9n4guygkmpuqzeh0wenefwrfkpvuyhvwjrjwxqpzassqq3x67j",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBCdUpGQnpaT3FoekxmMXhV\nTWtBZ3FaTUlBUzJac0ZreUN6SnFCUFZTQzBvCk00ZGtDSGdXVnQvMm5WS0tFNW9L\naWErY0ZlbkpiNVBUZVdWcXliTzBBTEUKLS0tIEw0SHdsbXJDczFDV2JWQ3Z4MUlD\nWkFVNjYxbU1CampSNzNUYXgwZGV1dVkKFAftGCqYiNzDuP51iSMVf/hrW/+WB+ia\ng5KFwj1kGSRPcbEf0ZIqgoNJ4N/g2gYNgj+mrRvWUh8ofzme6KB9nQ==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1dqt3znmzcgghsjjzzax0pf0eyu95h0p7kaf5v988ysjv7fl7lumsatl048",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBnWDgvVzVjQTdIRGN3VENZ\nZzJUUjNyOXVSa3NDRi9xR3F4QTdpZE9zMDNZCjlyc2pxU0ZHRUp0QUZIS2VrQVlT\nM2NRTEhueXc1YUxtbmhpZDFzUVE1MXMKLS0tIHlJUW1VamdnS05sUVF1NkVTSzcz\nUDNJd3hSbWtwMlNaT3dtMm1GS1JNbEkK1I+YnF0gMi6fuicYkdXp0CdBJi77UuSx\nj4hXimndq37LM9FPGzB1zD4wb4p7TrnFt/7PobCZh7Ua7Wkpu0lZXQ==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1ez6j3r5wdp0tjy7n5qzv5vfakdc2nh2zeu388zu7a80l0thv052syxq5e2",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBSTDUwSys2djA3eHRZbHZm\neUcxREt6Z0xEYjEwd1c5bDIrVm1wMEw4K0ZBClA4cm50bGVkYkYzWUNlOUg0aFpi\nSHVJbWt4SlMvZ2xTdWdRQ2g0Tm9QazAKLS0tIHVlRTJrbkRqNGxLaFFQanZBOHlS\nNk5TOXRuNXZWSkdRcGt3SUxiQ1gxZkUK74YFjWh4vUU0to3BOU4vaWo1I31X8GzK\n7zmA9oPfqztYJeq6QK4HWHoEnUcX+eZbMfzhs6lZcC5UvLwg3MjzBw==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1tlymdmaukhwupzrhszspp26lgd8s64rw4vu9lwc7gsgrjm78095s9fe9l3",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBJYVI0ai9ONlhJWldnT1NE\ncHYvT3RCY0NsQjJDMGdEd2xWWm1IVVczUUJZCmUwWG1seWp3N0dMTTNOWGZ1OHc0\nZ1pqWkk0TkZ0bDZYbHFkRDFvcEZXRmsKLS0tIEszSXc4WnN1UUFoV2xJSmhLQWxD\nNXZJTm91Ry9LSXByNCtPcHlUc1dlODAK+jYnhdsOvU2AB0CHIob2b4KbGk8ccVa3\nR0R33bFCBG6g2+dNLr9Mi8o5zLj5K7ef4V1CscGa+L+Kvd9T0TIEzQ==\n-----END AGE ENCRYPTED FILE-----\n"
}
],
"lastmodified": "2025-12-18T17:18:17Z",
"mac": "ENC[AES256_GCM,data:9ihbLJ6n7cp8fFueLyQ1K2acrGS0gq4sv2sDojYP+hb8ZZYOVJZJF5QRtD6sf0tYKqOPXV0njRgK0fI3cSTAJchR68jaNEM2nDO4dbvg7MeAQg91Y0A+P1nt8nCXqGeeFiT1rihjYJ1JcLwf3TghK6vP4nxpBV6zwQGMO6V20rU=,iv:Vz/nxm1N+9UPM85XetyikZUGo8wqvHxILqvasz9Lm6I=,tag:lUVowr+zE6GT1vfJm4R5lw==,type:str]",
"unencrypted_suffix": "_unencrypted",
"version": "3.11.0"
}
}

View File

@@ -1,31 +0,0 @@
{
"data": "ENC[AES256_GCM,data:1az0ByaqxOhYKG5mmLfEg+iZG3fbdkdtfI60mCfgPwurVYjva/IRbjEHnVJjnl+KA7jyAiWJ0wvehcg0Ylukn5WoFZ3aA4Mb7Swn/0EoH+8P/U2ftCR/G3W0S67w8lQFnIli42AZJ6LWcqVab5DHVmy1/XtP1PAveOMvrEVmjmBipF4JMLbyymGPQ8moT8P9GXXWK5MvX/FzEBjsoECwTyjFpSQM7pX2IDRL+zr2gyMB7+INdeecSr0R6ebhj+TRItjDxfts/sSAMOuY/eFYUItZncd9OMXKwU3X75AgtdPu8JvqKYjAtllvsocP68lcRYda5X6rJNybAJc/Yr17WX8i+fWsBTXbrqPo1thGdDoicK9Uy9sIX+/CVfqmmnGs5A==,iv:XZuOgGL8retOonsTLE59H1Y6ZH3SMdxD7tmSEop4ONM=,tag:Cmdri/crMdRTaCNGM74W8Q==,type:str]",
"sops": {
"age": [
{
"recipient": "age1njjegjjdqzfnrr54f536yl4lduqgna3wuv7ef6vtl9jw5cju0grsgy62tm",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBQRGd6aXp5TXRuKzhsMEtU\nTlRrcG0rYU5nZjZjdm5RaG9XWlRlSldKeGtBClFSVWE4UE9zek5XUHVUUk5YV3g4\nbjVkMmdYR0dtYjdUYXpOeVJ0dkhqYU0KLS0tIGNId1JaWEl1RHcxeitHZlRtL09K\nbVdtcXBIeWxKbUhKV005bVhQbTY4MDAKUVsSqP4Gir99xit0i7bx5S3CSbbyIzrq\n6+/wMFRFxFecKavfGtp+khhBh17waGgfr6cerNlvDsdqO4ZHIEGCDg==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age187jl7e4k9n4guygkmpuqzeh0wenefwrfkpvuyhvwjrjwxqpzassqq3x67j",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBlcDJiQVZpQ3RyTGFvNVVY\ncmROYjYrREczUm4yWjVJcEl4V0RkMmQyQzBVCmd4L2hXT2U3bXRWSGZOSXY5RmVs\nWWhBSGhkSklBTk42VHFpbWFjamxiNDQKLS0tIEFuU2ovNEhNZVdpRXd5WS85MnFW\nWXNXeElQSGtxajkxUjdjU0tvUnBGZU0KSJWBawKKWPxU5s8F21qBwbVJe5P+kKrn\nluJtNFEt+c+iPPCoo6Hv27jgM8iL2kjMAiz6R0luMSH/pT3TjXh4/Q==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1dqt3znmzcgghsjjzzax0pf0eyu95h0p7kaf5v988ysjv7fl7lumsatl048",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBJY09LcGpXOU9manNCNTFs\nNnUya2dQVStVY2IvWHNuNlVQeWFieTJXOVdZClhOajh4YXkyK2E3SDNPQW9LQlFz\nSksvSnFXOVFhTDBOUzdsVVZ0U1ZQM2cKLS0tIFh5aXhFYU9KczFPbmY2L2ZncDBH\nNzhJWUxHN2FqSDBSMGF3Vkhjc3ZlbFEK77erm9YYQtY2UAv0m19NZe6Gx+cItSSw\npTUjjFcMCK9QqFLndMdpGENeXMsPwOkPle6jiEMnIlMuGgbsqFMCXg==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1ez6j3r5wdp0tjy7n5qzv5vfakdc2nh2zeu388zu7a80l0thv052syxq5e2",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAxQ2gwN09LdloyUjJqbndL\ncnJGTHJtOFBqelJqd3BUOG5nVStzNmNocGhVCkZ3YTNQVWVmYkRnRkN5RGhIa09k\nNEg1RVFUdUFYNEJpNlFHUXlseWZLakkKLS0tIEpIdExYeVhYb0JkUFg2UTZxNmo5\nNkpqSGtyUDVlM0JwbTgvM3dYYmo1a1EKRUpQ9lXnhFeLbRtFbVIClryfLbRSZMPS\npMO7ANS5ZrLmcsDVl/tjybyQ5tJS+EKgr1XOg/3hhnvccd9qKOy1WQ==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1tlymdmaukhwupzrhszspp26lgd8s64rw4vu9lwc7gsgrjm78095s9fe9l3",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBIdTZ0WDJOR3pjZzNGNXkz\neWF3cDJlVVV3QlBmWmtVTWRXMXJ5amRyZEVVCmF6U3VuT3M2Z1BiSmJrMWROSzJ6\nejRFeG1Nd0lFSWFTdURMZGozbVlGM2cKLS0tIDZXQmtaQXFqcGZvd0J6QnNIdXU3\nS3NKL2Z2TVJEWFRGcGcyNWxCV0Q5bWcKZXoK17q1Pe7UGbsxSHlseg/+I/3A6gHr\napXffpKTKMMdpNQqSx2Pmq1Swr3miri1sgDfYxFjUFGro0kGLOtqAw==\n-----END AGE ENCRYPTED FILE-----\n"
}
],
"lastmodified": "2025-12-18T17:18:20Z",
"mac": "ENC[AES256_GCM,data:hbo44/HRswuBDgc59mqsP7LGyiQbsAgC78nAfH3N9p7IXK2A3Rh0jDO6gU3C9Yv7A5ca9I5dwT1ploX2yJHI9ObChcgHU8am+qJDmu2dhPhFxKoW7GZfWnV1RlnoqePUYY24A3nF66H1FXynzVQC18W+XW06fqvj2Hz49v8YPyc=,iv:V5IUy3qCQjVl5su1X0qwkhlOXw3uAHkzX4u2wLb1U7A=,tag:rRZz37UTPWxhN6P9IarRVw==,type:str]",
"unencrypted_suffix": "_unencrypted",
"version": "3.11.0"
}
}

View File

@@ -1,31 +0,0 @@
{
"data": "ENC[AES256_GCM,data:IrIsUn1YZAYvDbuivV6Sm557Ej+N/WaFTRUg1PrX0bsaZwW4mDrTaeQagWGkxJl0uUkTuozfNQJ1E5s0g6QDZKS4dOVEWeCJ+XUvFomtLneoDNyc1YG5+mmSWdudq3T/6Nf9rE9yn3kgeMoQM8AjmEOR5S4mqoObQD0d4s8IAoHd7V2QXmeCt9QOafaDenb7XRoAm9McnGKM7BPBRbkW4DavithMCi80TwjcbenArMAIl9b5kHmXaJtwZAO604DGCCf32xqq7SMYOkhBWHUsuuAuBNn/IPvLdpA3FshASxlIP/NwW2kEFYZBV28NQLguawmXGOGvg9fKKnHpGl0xQmQnTHro+HoWSIG+TBG12slABXJDBQHwW8ALqME2912AN2nbYv8AwDt3F873t/A9HREQOiFNMiNx/CamO/c8L8pH3NZIvrhNB3opQmjv0CtwfppsKRYwlPv0U3Gw2er+v5i0clXtNAqcbqmDWLwThLHfUVqH+iI66virAQEijW8MRzjISzdq7qLx2HVU+arA+Cx1rvRZB/hZJPjcwX+ZtNLEh7UTT8YWXrsajnMe51tCAYsEZ5YbQuy6WDzyJ8iXqgvtXCinY7bQyPV8lGlylMSASn71ipc2QqWo5CHmaWygtKqFiozNMVtSh4ztwLBIdtYQAAGqqtarnT/eJb8/aYVV7Q+/ydDAk0DzyMFdbLpMLHMu9Vo/WqLumOYmI9JU+wa/M3iuLERyd2itxNiSwg04M+6Up4M0+SNhzYDrvbTUo700osi7ScRAwIHtTMIJiEplhsQpCFFWH+6/bOF3+UNG3c2tQ31Cr6YeEwHHkCf6vm6ivSzBq3YhuQ+7KreywX3QhHUU1SyNvA8iEwN/m629YKtI2CUGJGobRQCqBKEC7X6ZV2MPhmWWeJTEOImsBTRU+NNI9FMBk69vNH4izNbM3Ld/xRJfHo1ASYTDSdWNPo6dWY/RLKRYeddeRK/z8lzACQPMMKRmkdIjYzaf9HTHtL4gT6termsj6JlBfAoux0M6k2eFbsLIOFuEnhjKt5L305fcoB7Cutc=,iv:sibVoH3jTpYzhdG6XCh9UmjRyBcwxBD0KzTvXjqjNTI=,tag:rgNyZK8cFZk2ZgWgLbzz7w==,type:str]",
"sops": {
"age": [
{
"recipient": "age1njjegjjdqzfnrr54f536yl4lduqgna3wuv7ef6vtl9jw5cju0grsgy62tm",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBCbFhBZzFjU3pXdHZXZjZ3\nN0VGN01SSW5XVHBpVzFudEt2cFFVR2ZqSmxnCm40QmZEMWZzbjhMZjFmVEpCUWMv\nWVlFWkhQZURTQlhUQ3IvdmFzMEhsUVUKLS0tIHBVL1lRTXlHc05TL0ptaDB6R1pa\nZmJkdzUyOTZXRnZnNDhjL1F3TkRTRzgKzWlSKTcfbYs+CKjjekrwY3du+ggEI507\ndylDiUIeO5K3s+gEIDkiMEtsSr+ScKTbd7ZyyN6eNyYmJcHx3smJ9w==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age187jl7e4k9n4guygkmpuqzeh0wenefwrfkpvuyhvwjrjwxqpzassqq3x67j",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAySzhQL3BKTzJSTmV2emU2\namJvK0RSbU9sNGhOKzJDcjFaRkFTVEZTNkhNCldNR3NwM0xQSDR4MWdEYlNOZkxS\nWVRDV0xIMUhIaTJVeTBjdHhTQ1dyVTAKLS0tIHlnM040dHhWdjNabkFGM2UwL09P\nUUtOMWFWZytpVlphaFcyK2NENE1xYTgK713GSWS+Wg7kQjgTTfOnSYBQRRAZrrQB\nqzpePJb29foqSCehCDzx0psmr5Xdje/dzCe3fGw9DwYvtkC1A3TS6Q==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1dqt3znmzcgghsjjzzax0pf0eyu95h0p7kaf5v988ysjv7fl7lumsatl048",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBXVEVTNk8xQ0drc3d0LzY1\nTHp2MzVIOHhhU3c2Uyt6L21uMVlXdktUd1dNCkVtQzdrYTVydGZpdGY4VGtVL1dP\nTFVwaUFXRTZKZ1V6MjljcmtUR1BUOVkKLS0tIDJjaXd4RlgxRURINVZxYWdod1VB\nN0p4bmhhVTNYRGZPdE11aWxWRmZFSVkK6qw6/pjiYh56ANhgXJyy5cgWHMwLq/gy\nSk017c8kg/tErc+sQGSjhxrvtYYxhDd4df+sO7gM60L4xjZTYPAoDw==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1ez6j3r5wdp0tjy7n5qzv5vfakdc2nh2zeu388zu7a80l0thv052syxq5e2",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBzWjZxOE42ZE15bHI3QjRZ\ndGZteFQ5anl2bnhDK1RWNW1EU2hMQTJjOXd3CkZIOVFzcEt2YkN2NnRqT3JlNjZw\ncnVXRHptVHV2WHcrdWQvM2tmNVhVSmMKLS0tIGVvc0JuZUlmMjhxT2szUW1qV29I\nZU05c3ByaXk0Ylc5aWQ2TVZOM3dTZ2sKJrPr+y+VKf47xAJWJETyItIkp+yN/Vnb\npkaQkcODj6qfYa0bYF1uFW/RljvA9Fah0rw3XpUmfzHJb9efFSTBwg==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1tlymdmaukhwupzrhszspp26lgd8s64rw4vu9lwc7gsgrjm78095s9fe9l3",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBPTWxPdDhKR3A0QVU1YWRD\nK1I4a3BmcVp1K3g5RU1DZVM4WTlUU2U0bHdvCjZpbWtXdGkxYUpWQUw1M0V1TE1r\nV0hnektxYk5LdUN3MXh3SEFEc3RqMW8KLS0tIG9Ea0NrTCszMXU2UmNzNmxHc1c4\nanlXSVpnSVlxWUdYY2wySkYyVWRYM3MK5k6VCGjGB+cf3jV71okTTMmxSpfuitJ3\nyhx76IN8mFuSP9DP8lcYJ38HEXKO3TG2UO4sr0VsuONDbekm016OoQ==\n-----END AGE ENCRYPTED FILE-----\n"
}
],
"lastmodified": "2025-10-31T10:15:38Z",
"mac": "ENC[AES256_GCM,data:0G2sHFPmGeN6284+PbNT/ddyMWbA3iRedlI6e5wyrQSNDj7tiBQ8aeOgsG0oNADCqly34upSKO7CEBX5jK8eCh8aFTP4mBU9UidO4B6jPoQRLZrlSF3nzav6IvslxREjtI06dg9q0i75HiJfOU67QSwbr9lHUhV1z0mV/i6zBc8=,iv:AiyudM4sRRRe3xv9H+4DRBMe4eRMmuZ22kCrwA3XOns=,tag:FU4jhXCC/sBI2pJfxsO7fQ==,type:str]",
"unencrypted_suffix": "_unencrypted",
"version": "3.11.0"
}
}

View File

@@ -1,31 +0,0 @@
{
"data": "ENC[AES256_GCM,data:0g5ml8S2kLxtJnBxgl/Ecvo45TxXuGz/3ojQaQ3foKJ4D9+6PyXLrRwvdC1gxGlK10GQzFso4KudbjPljeeQAVf//q5XUuXfKwU1Z+eHlkXnqUhoisDL0TwXQiydqswSxjaeHmbckcVgfyq0za4Tknga5M+Jcs8ktUSM8Z74LrA7hfJJr7oiPuMSaDZbojRCuWcBySlbYfu1+UjiTJKTB4/dT1QFIcZyfvCT6fozEr2YroHTAZXovMKBpwmD3Iek+aIAncvXzUUa/TZF8HrCdwuBoDHZJoT+ALw8wSUddZpm29L4V5JHR4H1ZZe8JIjizQVfqeLmfM3fLpdkS3xCp/BcQXkVZww4etqrdeI2RDy5FOY6cbUIToigS1acU8+/,iv:VKl0hjg10tKLLKZp5QpL/dTPN8XpLT7v4d36pi7h2ww=,tag:NMMvHlsuZYR/3s2+T/vOiw==,type:str]",
"sops": {
"age": [
{
"recipient": "age1njjegjjdqzfnrr54f536yl4lduqgna3wuv7ef6vtl9jw5cju0grsgy62tm",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB1K1AvZkg5YnpmQ3pRLzly\nZi9iWDl2bkQyTE9aWkxiNmoyVGxSZFpiWWhNCm14RWVZcWFFQ1FqQ2l1UnNRcmwy\nSTRid0JGWFVzS21GNDNWMGNtQXlveEkKLS0tIHlrVFZyeE80WFAwMDhGRWVjS0g2\nV29nRnl0UXRlQ0lzdWE0TUYzSmUyNHcKylZpvo3/MTi91YANzXcmlXi1r6m6CtzV\nBHlK1fnFmeJS94rzFL6uxzPGanlQtOjKWpl95dJsYbq+0YSbqIFBpA==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age187jl7e4k9n4guygkmpuqzeh0wenefwrfkpvuyhvwjrjwxqpzassqq3x67j",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBJUTYzbkVFTXpCSmdNbGY0\nZTVuZGRsUVVkTHRIWHhWeXJkck5YZHFlV1JBCjh2K3F0MURxS3ZoOXNpekdLQjcz\nMWNTRzRnSjZTZkxoUWwxUjFRdXZWcW8KLS0tIFB4a3dTRTgvNVZ0NDR6K29kYzhX\nNGg1amlBeENiV2N6ZTR6T0NUcy9nS00KFUctwvrLgKbfROd6MS1uFrIpFz6R5VLm\nPkmDK+bj6APrv4nRdz8dsgDdNAjWLFZ5pOW4/QjVjswihtm7zwrdMA==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1dqt3znmzcgghsjjzzax0pf0eyu95h0p7kaf5v988ysjv7fl7lumsatl048",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBQcUFuVGszd3psTGNCbStp\nQkhtUC9rdzF0UDUrL29GdkxJSVRKeHdzQ1dvClMvM09Takl6ZzRUQzVGaTlhR3p5\nNTJPVGhSNlBBWUpLVStBcWw1Nk5OYWMKLS0tIHN1QWQwNGd2M25EVkhRMUs3RkRB\nMlk2YjNjbWl4bTZXTVZVTUVRNGZtVUkKaFR+wKSWubZlZSQlVtWA8bl5tyJZRQhB\n0bUiahUkg7uPeis0MnQLsZNuCwBDAOmJd8/i4I4PZkqQGoXleiKXzA==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1ez6j3r5wdp0tjy7n5qzv5vfakdc2nh2zeu388zu7a80l0thv052syxq5e2",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBRNEpQaXhPakJFQnFncVFy\nb3ppbVpjYVV4WHpNSUxvaWZwenVQY0JFd1VNCjU2Vk9LWnEzaGllWFBVSlVpMWEv\nR2grcEVXRUlhRitWc0ZFSUp2dHlzaEEKLS0tIGVTUGdJd0RERGFtRENpbHZYL1pu\nRHAwQVZWMWZDWXN1cEtJVkJCUGhmbU0K4d6O+EQn9tU+o+mOrklJARxktgmklFyZ\nv5qbytEpB5egtf6nR+QN+KCoUpoB8AJ+JSoilo05chnKHCwNXgmblg==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1tlymdmaukhwupzrhszspp26lgd8s64rw4vu9lwc7gsgrjm78095s9fe9l3",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB3Yk9JeDlsZU15c3BESjRT\nSGFIVU9hZTVMSi92WEQ5bWZCS0xtWDg0aVJFCmZGeFNVNE9peXlMRUFPcnZOdU54\nMTE1N0N2aEU0OEJZL3NjNm5VcFVvZTQKLS0tIHhXR3U2cjFtZEk2WFg0cEZ4enpX\nclJCSzBob09SdGs2Ymo1K2tNSmNhaWsKH7E0S3ae5P8FfXH3AezcTNWCN5uTbJFN\nvxZb22uwkcBJ6qq5mkxu9+1o+mKGfvW5Z6N7bz5yBW+zjtkkTrSckA==\n-----END AGE ENCRYPTED FILE-----\n"
}
],
"lastmodified": "2025-10-31T10:15:42Z",
"mac": "ENC[AES256_GCM,data:jL3PHJi0FData84vNfhCtEECkOGF+rNQUc6CQmgI5+iyTPYNBqG3I5x500BA83/XHWrR3Nq6leQHsir/V7pMmkUnr2Mb7A9v3zZLBq6veti8M88WTxkL78Y1BYMf0hQmAn7wwtye1+Jbv+uuRbsCw2pCpFt6ho1Hah3QM7zQ9tU=,iv:OlM/PlHiZHqZS2V8ZkR8IoFkrmw7KcXHH0gY6VEvEUM=,tag:8TO5GAghGK76ZmtKhzd+iA==,type:str]",
"unencrypted_suffix": "_unencrypted",
"version": "3.11.0"
}
}

View File

@@ -1,31 +0,0 @@
{
"data": "ENC[AES256_GCM,data:GQmaXRUykTZzEFvS3mdFqfNZW8MQavGNJMUqP+vbeXvmihqva16QGmneI9vaXa8HSGi3iFCoMLp6RqazbzL4gW3c6vgmdKkNuU5PogBqsR+wOqkI+SgUm8uS/wXJw0+Q2yUpD0Br/VJhsxcRKi6oVn4qhhWmebo2XOuVshUrlSXo2MtNfZTev0OF/JMkpfZjDi90iRRMPpzjN5oTxSO/rzoFnYkOb4cvMNFrS1h/Fz5zVR+WiPxNMuKLPEnwcNAHE77q5bJ1SVV6YdMTLNeiwze7jxpjY9vDD77l1mIkPgNiZzkhWJ6hP/Otp37sUU3pQCT2Ch0RLWXY9qOAwsl/LC889G8WH5+DsienV08vaMV4YBagb8NzvOBb3jKuxBRwIVkBIrc5Kjkok4iihAzrbWdM/Yb5ga5XOcKB4z6xavrhgLrCVDDiLiTcDG49GKWda3LivaJkqQNyUnc1xJFj1TojwyDEvwDUrseKwH9UFzBKm+bKXBqgW0ehjeAKzuroTMAWgGK+X2WJIAK9C0r0+B9YReEra+hTEcPcOoo81BXY7CiesjHBXa8JpdSjjdiG1WRKOg0w8JEWMQL5XZLrCJ/oniuaqMjmSFB4eYEJeBbCRB7rZ3luHPijnSTAqPEbnCWH7XvNn5Y/rzul/QTtSgh1FrdDPPBLz57gRshRR5gbb/Dcjt4nL9bUbf+ZgP57g09BgLHphkR4pj6IwfepaZig+1H0DDfB4l1AhP6Tt4HtdJ3Ks5UOYTQ2htF6Dt/gb1xmaJ5//H51TcAX5ithEviRGxoX+znm7SQ6BQluKI5kvwuj8QQ7lkD7845u3tDTkWlfyioNmRubUD7PSXwQFWWqbuqrMry+ZpwZ1Dj9rJ7YqvRxoehKGW8lGsRIKzMoD8bnP+GtDW1IKkSMqXnDLQZobKDAVsrf6dmaZiTGvMZt+cEBs+C9Lw6tLEsepQVLlKzTttnhUqnRtcwWJJHJA5A1uBmv4qvbikm+T5+he7Di3Fx1wBYJizqRD3nCt6fGNHwKYjRVPXmjEcjAm5riBSM5fbs4SL+1vmo=,iv:xXiyY0eT/6MwMc9BRGaT/vMSGNN6C++pwQGEMc01z8U=,tag:fMBzOz+hKuSfCM3FRgCamA==,type:str]",
"sops": {
"age": [
{
"recipient": "age1njjegjjdqzfnrr54f536yl4lduqgna3wuv7ef6vtl9jw5cju0grsgy62tm",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBmYlBlKzg2dHY0UmV6c2hL\nRVJBNDZmK1ZGWmxDWXM2bERCc2RIQVc4ajJJCitwa0hOZStkOXRKV2NCMFc0RzVw\nN3UrNjlIemp2Zk82N05BMnB2Mmx1MW8KLS0tIDVKUDBRVXkwZjhWaVc2eS9HRFl1\nOTRuUzRNVFVIb1pxU3YxSk94NHJ6YlkKTk479afEuhbZxcv6kOw9KbTDMFw3p5ZD\nhnLocL8S9T+QYlRbyO2hITL01h/FDQtccXYJIdP4lcEi9PcEn/cfRQ==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age187jl7e4k9n4guygkmpuqzeh0wenefwrfkpvuyhvwjrjwxqpzassqq3x67j",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBLK0hDZlpNd3pHUDYvS1Fx\nKzB2R1BTYUJ1NHh5ZHhGa2lLeGNZTzZNTFQ0ClhEd3dDY0doWXRON1Q3a0NBVTZZ\nNmZZMlVPZTJoWWZJSGRnMy95OTFha0EKLS0tIGVvUkp6bms5eHlPTEJCbFkweXpZ\nVlVsdC9xUTVTUVlIZHFwa1QvRExvMzQKoNDrTSMUWkEmRuy6qhp8JcZD1Jfj6nqF\nrOxUj7daEMmFdAh14rVN0SMFAeiaF14n201NF53wb/OWHpR0zP2Nzg==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1dqt3znmzcgghsjjzzax0pf0eyu95h0p7kaf5v988ysjv7fl7lumsatl048",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBSMEhIdDdnR1IyS0EzSHo3\nQzhINStsM2FQTjNneUxvMk9lclVCUXRoSFFjCmxmaGFGZEpKa3I1QjkzTHNDZjZh\ndGlMbVdZd3czY0xFNlR5TnU3dGVaUkEKLS0tIGptWmVMR1VUdE5BeUN3Y3FPZHU5\nYUZiRGJHUjBobUJmM2ExcEwyek14UmcKJBMzpOuZJt4VqYaorOkL+/fJWtTN1cT7\nBeB1KWDNBsijyCTA+8IEbFvPHdfs5L3NaNlb4Dst+bZfhVU/U7aKtQ==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1ez6j3r5wdp0tjy7n5qzv5vfakdc2nh2zeu388zu7a80l0thv052syxq5e2",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBQOEdvMlVHWkhOaWVGTDRZ\nZFBKTHFISW1VUnlpYjZpS0tReGFXUFhKaFg0CnZRaEszTFBmcjVHUUJkbk85MXVC\ncDFBVXpoS1UwdTc5cmNiTW1SY0lVZTgKLS0tIEF1Mi94R29YaVVqek1zTmRoZ0Vk\nSThGYW4zRkgyMjBKMGgwWWVlY0toWUkKP3AwJig+dGgdmoyWWodxFnSFRDh3+r0H\nXL7XMvdmgMVs3Dy3+x3HeDLBGqmu3WaFsFlE7dBUpSGX/4D1nMQkTw==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1tlymdmaukhwupzrhszspp26lgd8s64rw4vu9lwc7gsgrjm78095s9fe9l3",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBRTy9JcWpSdmw0OFl6c2FE\nNjNObUJEZDhUVjVzVlFNWWdIaWRrM29FZXlJCklLN2lUT1lPZnZlWklxeU9qMUI5\neWlPN3FhQUxEQ2VSWlBwWXo3UEcwaFkKLS0tIFBVaG5rMHNZR1NLaHo2TUFiMEo0\nL2FoV1NPOEZUWjU2MVoxZmYxQk1rNFkKqB7C5DWy9zBgdtSALvHE9kqdmuVl3BdY\nTklK4UM7nwc5xrvbkaUo10+tyiTl4FODrZy68C/pl6xe8on5USzPyg==\n-----END AGE ENCRYPTED FILE-----\n"
}
],
"lastmodified": "2025-08-12T18:39:30Z",
"mac": "ENC[AES256_GCM,data:FAmt5iGVsLmKdKX/PXCIF7ysl5ijTiEI0S7nl9NjuW8et/ksJKdNHDeyeWbfFN/bMRR12N/3TcV+lVHyoDagX6Yfj1ynjhi3xHRyOp472pTPZbJX2gEt1kJ4ZkQkNPEnMIc9WoZ6duaq4py22VWtpzODc0NDSBZXeuPyHoVTP9c=,iv:JQ00ax4F6u7kDGtjYG3KY5oOP8M4ZlNkBhfxBt+84H8=,tag:xEMZDeuulGIueB75REkW2g==,type:str]",
"unencrypted_suffix": "_unencrypted",
"version": "3.10.2"
}
}

View File

@@ -1,31 +0,0 @@
{
"data": "ENC[AES256_GCM,data:EvYPgzUceBP/KlMG3tvWu7+Bw2Opnj9qoIDWQxGGgpvwQBIDxH4V6iGB3o1sZ2AuvsLBflPlZJLiAYk9Ffqm3wM52nXjWlGlgJcEvIlojQNnx/H09xuEbQk+ULpsMG33RdjDFNwngqKWRs9PAz09nJz9bMhFNCPikikynQun4/It54h4TddHQtey9hT+JovJBEVboUda7Wt4BGIyaENC0i0FfNhPzoaSXFhjhcujSPl2u9xvFQjBb9tleoznqxeVq8d3OB2O3IA/lCTGEj1PJsj/cATXLBC7eQdPiX5zDZ9gpI3ae+PvLt7+/c+g4p0FfR89yiLKF+oxjYEdEXSkBHV7JaO6IOX4pR5eOCjMLe8u1EyVG/e7beflloK5hUGV,iv:iF7eIyJn+FaGoM/OzuPgmPk1HW+aKvIuqDXKLTkc074=,tag:X4lkvzFwDpHGlXPUOZg/1g==,type:str]",
"sops": {
"age": [
{
"recipient": "age1njjegjjdqzfnrr54f536yl4lduqgna3wuv7ef6vtl9jw5cju0grsgy62tm",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB3Y2NlU1BReVJGdmJRWXJG\nTFAreHY2NnBMTUhoN3ZiTkZ0WUVkWWtVQ0hNCm8xUWsyYTlEdUlqd1NQM2ltNTY4\nMmZON1NwTTVvcXVTZGtsRHpucjIvc00KLS0tIDdQZy9WWjExL3BBcXVKZTlhNTh6\ndHowc1I4cFNyakRCUXoza04vNldXYWsKqsf0C9bE17aTvN/vxYDN90MhA73fU/mv\nDYzOqQN5TM7iDWQKbr2YVTqRTRYags0moPzGk95olDt8TU31ohdIoA==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age187jl7e4k9n4guygkmpuqzeh0wenefwrfkpvuyhvwjrjwxqpzassqq3x67j",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA2amxvdmpKWXJrSU9Ya0Ex\nNUVBN1FqVnNaWHdRY0FQRFR6TStzamUxbzNNCnlyYldJd3BENDRUNm5vWi92M0h1\nN21WR1pMODdNMVRsSzZndUNVNGNkWk0KLS0tIFNxWDRsbEcxdlZwSFp3UmJTWFIv\nMU1uTG9SWjl2NzM5Mjh2eDBkdjFmeGsKtZS+NpKtYZGn3E71Hr5GXoql9+o0WDcz\nS740/zmU2eah8jM3bKuuJoPVjHfvhMbbADQ7L71ct9Zji5EeSIH5rA==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1dqt3znmzcgghsjjzzax0pf0eyu95h0p7kaf5v988ysjv7fl7lumsatl048",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBXRmtEcmFIVE5Semxrbi9l\neEhFTC9XWDJwWGZiQlpacVVZUnpobTE4SkVvCkIxd0RIQ1owSGRsenJaMkhFK3Yx\nNVg1ZkErckRNM1JacXBBMjlPU2srNmcKLS0tIHhDZTFrU1RqUkhuWENGL2Q5aUFM\nbW9WMElnUitRZS9jVU5FVVJ6NlZDTjQKfJIMTfQq+6JOHMhJSwY+OCBMPYFzFhfV\nhhjpScHk6T/Hqbr9xklxJ9ol6d93K8+8u/TIyFmIrWwREnVnR/EP3A==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1ez6j3r5wdp0tjy7n5qzv5vfakdc2nh2zeu388zu7a80l0thv052syxq5e2",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBXNjN6Vlp1UjA0T3ZTOTBi\nQ0pqMzY5Sit3bjNjcGlrMzlLM1A1NkZvUFdJClo0WXFzZ1NKMTFVOUhvTmpIeHRN\nZVBUK3A0a2hvU0M1emN1N3pHR1c4Tk0KLS0tIHYvL255azlETmltUk1KT3dLYUp1\nMUNmUWZ6WFpySzFWeUdQaW9uT3dnUEUKwE5AIqpecw/KtZKmOvvU6gMoJYp54exN\nujzJDP4CGpBsIjOdHkpfeujkpY+y2SUOUwTTV9f3kJduzWO921aKwA==\n-----END AGE ENCRYPTED FILE-----\n"
},
{
"recipient": "age1tlymdmaukhwupzrhszspp26lgd8s64rw4vu9lwc7gsgrjm78095s9fe9l3",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB5QXZqUUxKanY4cEsrKzhV\nRTM1K0xkS1dHdWV4K3dGNjZYck5HVUY3TGs4CnV5WE5uTkYwbUQwVFZ3THo2dkdQ\nZ1RzaVlXNWt4NlVKcDJpN3JNVEJMTDgKLS0tIElkdTJlK29SVnprZDM1OG4zU1Fj\nNzlWd2ttNjZIVWtiS3VqS3p6LzZKd3cKlhq6rS9kAdf6cQgwBPJvN4tRRxDYAln7\nmrh6W/RJ1Hp3c7v1BSpj1NDY3zYXKDTjrf99o83lWsNKdmKv0qNm6w==\n-----END AGE ENCRYPTED FILE-----\n"
}
],
"lastmodified": "2025-08-12T18:39:37Z",
"mac": "ENC[AES256_GCM,data:KpPsY88w0y5bJ0+l/0KaqAD5Rd9F6n5M7tZLfKCk9PP+/I2HcQ8GB5oa23TjdXpM0ubYhAnAwGt9EPeC55jT9KFS9EGZkRhmRk6ppI4dTD6ZdXyfjyZMIL6oGCfwTuzyNRhibVzKu8xgKXr6HI7/WXgaTSRihw/o7Ih69vCbNa4=,iv:h0HrGEIRbOaYbFL/lGc3Qwu7znUSIos/JhfkFIFqem0=,tag:W6IEPW6pvhDdZLcCqJKlEw==,type:str]",
"unencrypted_suffix": "_unencrypted",
"version": "3.10.2"
}
}