Compare commits
9 Commits
73e850bd2f
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 9c68e7a83f | |||
| 00b2c5db85 | |||
| 46a1e82cfa | |||
| 701fb58fba | |||
| 3fd5c6fbd2 | |||
| 1477c30c67 | |||
| 67b41e7bdb | |||
| 92e67d0769 | |||
| ea1705d3b0 |
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"enabledPlugins": {
|
||||
"expo@claude-plugins-official": true
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
# Valeurs de développement local UNIQUEMENT
|
||||
# NE JAMAIS committer .env avec de vraies valeurs
|
||||
# En production, tous les secrets transitent par expo-secure-store (Android Keystore)
|
||||
|
||||
# URL de l'instance n8n — doit utiliser HTTPS en production
|
||||
N8N_BASE_URL=https://n8n.votre-domaine.com
|
||||
|
||||
# Clé API n8n (Settings > API Keys dans l'interface n8n)
|
||||
# Scope minimal recommandé : lecture workflows + exécutions uniquement
|
||||
N8N_API_KEY=votre-cle-api-n8n
|
||||
|
||||
# Token custom injecté par HAProxy (header X-App-Token)
|
||||
# Tourner régulièrement selon la procédure dans docs/HAPROXY.md
|
||||
N8N_APP_TOKEN=votre-token-haproxy
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
# Learn more https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files
|
||||
|
||||
# dependencies
|
||||
node_modules/
|
||||
|
||||
# Expo
|
||||
.expo/
|
||||
dist/
|
||||
web-build/
|
||||
expo-env.d.ts
|
||||
|
||||
# Native
|
||||
.kotlin/
|
||||
*.orig.*
|
||||
*.jks
|
||||
*.p8
|
||||
*.p12
|
||||
*.key
|
||||
*.mobileprovision
|
||||
|
||||
# Metro
|
||||
.metro-health-check*
|
||||
|
||||
# debug
|
||||
npm-debug.*
|
||||
yarn-debug.*
|
||||
yarn-error.*
|
||||
|
||||
# macOS
|
||||
.DS_Store
|
||||
*.pem
|
||||
|
||||
# local env files — NE JAMAIS committer les vraies valeurs
|
||||
.env
|
||||
.env.local
|
||||
.env*.local
|
||||
|
||||
# EAS credentials — keystore critique, sauvegarder hors git
|
||||
credentials.json
|
||||
|
||||
# typescript
|
||||
*.tsbuildinfo
|
||||
|
||||
# generated native folders
|
||||
/ios
|
||||
/android
|
||||
@@ -0,0 +1,3 @@
|
||||
# Expo HAS CHANGED
|
||||
|
||||
Read the exact versioned docs at https://docs.expo.dev/versions/v54.0.0/ before writing any code.
|
||||
@@ -0,0 +1,52 @@
|
||||
{
|
||||
"expo": {
|
||||
"name": "n8n Pilot",
|
||||
"slug": "n8n-pilot",
|
||||
"scheme": "n8npilot",
|
||||
"version": "1.0.0",
|
||||
"orientation": "portrait",
|
||||
"icon": "./assets/icon.png",
|
||||
"userInterfaceStyle": "dark",
|
||||
"newArchEnabled": true,
|
||||
"splash": {
|
||||
"image": "./assets/splash-icon.png",
|
||||
"resizeMode": "contain",
|
||||
"backgroundColor": "#121212"
|
||||
},
|
||||
"ios": {
|
||||
"supportsTablet": false
|
||||
},
|
||||
"android": {
|
||||
"adaptiveIcon": {
|
||||
"foregroundImage": "./assets/adaptive-icon.png",
|
||||
"backgroundColor": "#121212"
|
||||
},
|
||||
"edgeToEdgeEnabled": true,
|
||||
"package": "com.n8npilot.app",
|
||||
"permissions": [
|
||||
"android.permission.USE_BIOMETRIC",
|
||||
"android.permission.USE_FINGERPRINT"
|
||||
]
|
||||
},
|
||||
"web": {
|
||||
"favicon": "./assets/favicon.png"
|
||||
},
|
||||
"plugins": [
|
||||
"expo-router",
|
||||
"expo-secure-store",
|
||||
[
|
||||
"expo-local-authentication",
|
||||
{
|
||||
"faceIDPermission": "Autoriser n8n Pilot à utiliser Face ID"
|
||||
}
|
||||
]
|
||||
],
|
||||
"extra": {
|
||||
"router": {},
|
||||
"eas": {
|
||||
"projectId": "4d160555-ded1-4a82-87a7-718d02a52e69"
|
||||
}
|
||||
},
|
||||
"owner": "billisdead"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
import React from 'react';
|
||||
import { Tabs } from 'expo-router';
|
||||
import { useTheme } from 'react-native-paper';
|
||||
import { MaterialCommunityIcons } from '@expo/vector-icons';
|
||||
|
||||
/**
|
||||
* Props pour les icônes de tab — typage strict MaterialCommunityIcons.
|
||||
*/
|
||||
interface TabIconProps {
|
||||
name: React.ComponentProps<typeof MaterialCommunityIcons>['name'];
|
||||
color: string;
|
||||
size: number;
|
||||
}
|
||||
|
||||
/** Composant d'icône de tab — évite la répétition du rendu inline */
|
||||
const TabIcon: React.FC<TabIconProps> = ({ name, color, size }) => (
|
||||
<MaterialCommunityIcons name={name} size={size} color={color} />
|
||||
);
|
||||
|
||||
/**
|
||||
* Layout de navigation par onglets (4 tabs principaux).
|
||||
* Les logs d'exécution sont accessibles via le Stack navigator (pas de tab dédié)
|
||||
* pour garder la nav propre et hiérarchiquement correcte.
|
||||
*/
|
||||
export default function TabsLayout() {
|
||||
const theme = useTheme();
|
||||
|
||||
return (
|
||||
<Tabs
|
||||
screenOptions={{
|
||||
tabBarStyle: {
|
||||
backgroundColor: theme.colors.surface,
|
||||
borderTopColor: theme.colors.surfaceVariant,
|
||||
borderTopWidth: 1,
|
||||
},
|
||||
tabBarActiveTintColor: theme.colors.primary,
|
||||
tabBarInactiveTintColor: theme.colors.onSurfaceVariant,
|
||||
headerStyle: { backgroundColor: theme.colors.surface },
|
||||
headerTintColor: theme.colors.onSurface,
|
||||
headerTitleStyle: { color: theme.colors.onSurface },
|
||||
}}
|
||||
>
|
||||
<Tabs.Screen
|
||||
name="index"
|
||||
options={{
|
||||
title: 'Dashboard',
|
||||
tabBarIcon: ({ color, size }) => (
|
||||
<TabIcon name="view-dashboard-outline" color={color} size={size} />
|
||||
),
|
||||
}}
|
||||
/>
|
||||
<Tabs.Screen
|
||||
name="workflows"
|
||||
options={{
|
||||
title: 'Workflows',
|
||||
tabBarIcon: ({ color, size }) => (
|
||||
<TabIcon name="sitemap-outline" color={color} size={size} />
|
||||
),
|
||||
}}
|
||||
/>
|
||||
<Tabs.Screen
|
||||
name="executions"
|
||||
options={{
|
||||
title: 'Exécutions',
|
||||
tabBarIcon: ({ color, size }) => (
|
||||
<TabIcon name="history" color={color} size={size} />
|
||||
),
|
||||
}}
|
||||
/>
|
||||
<Tabs.Screen
|
||||
name="settings"
|
||||
options={{
|
||||
title: 'Paramètres',
|
||||
tabBarIcon: ({ color, size }) => (
|
||||
<TabIcon name="cog-outline" color={color} size={size} />
|
||||
),
|
||||
}}
|
||||
/>
|
||||
</Tabs>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
import ExecutionsScreen from '../../src/screens/ExecutionsScreen';
|
||||
|
||||
export default ExecutionsScreen;
|
||||
@@ -0,0 +1,3 @@
|
||||
import DashboardScreen from '../../src/screens/DashboardScreen';
|
||||
|
||||
export default DashboardScreen;
|
||||
@@ -0,0 +1,3 @@
|
||||
import SettingsScreen from '../../src/screens/SettingsScreen';
|
||||
|
||||
export default SettingsScreen;
|
||||
@@ -0,0 +1,3 @@
|
||||
import WorkflowsScreen from '../../src/screens/WorkflowsScreen';
|
||||
|
||||
export default WorkflowsScreen;
|
||||
+165
@@ -0,0 +1,165 @@
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import { View } from 'react-native';
|
||||
import { Stack, useRouter, useSegments } from 'expo-router';
|
||||
import { PaperProvider, MD3DarkTheme, ActivityIndicator, Snackbar, Button, Text } from 'react-native-paper';
|
||||
import { SafeAreaProvider } from 'react-native-safe-area-context';
|
||||
import { GestureHandlerRootView } from 'react-native-gesture-handler';
|
||||
import * as LocalAuthentication from 'expo-local-authentication';
|
||||
import { useAppStore } from '../src/store/appStore';
|
||||
import { registerToastCallback } from '../src/utils/errorHandler';
|
||||
|
||||
/**
|
||||
* Thème Material Design 3 sombre personnalisé pour n8n Pilot.
|
||||
* L'orange (#FF6D3E) est la couleur d'accent principale — cohérente avec l'identité n8n.
|
||||
*/
|
||||
const APP_THEME = {
|
||||
...MD3DarkTheme,
|
||||
colors: {
|
||||
...MD3DarkTheme.colors,
|
||||
primary: '#FF6D3E',
|
||||
primaryContainer: '#5C1C00',
|
||||
secondary: '#FF9E7D',
|
||||
background: '#121212',
|
||||
surface: '#1E1E1E',
|
||||
surfaceVariant: '#2C2C2C',
|
||||
},
|
||||
};
|
||||
|
||||
/**
|
||||
* Layout racine de l'application.
|
||||
* Responsabilités :
|
||||
* 1. Fournit les providers globaux (GestureHandler, SafeArea, Paper)
|
||||
* 2. Charge la configuration au démarrage depuis le secure store
|
||||
* 3. Redirige vers /setup si aucune configuration n'existe
|
||||
* 4. Enregistre le callback de toast pour l'errorHandler global
|
||||
* 5. Affiche le toast d'erreur global en overlay
|
||||
*/
|
||||
export default function RootLayout() {
|
||||
const router = useRouter();
|
||||
const segments = useSegments();
|
||||
const { config, preferences, isAuthenticated, loadConfig, setAuthenticated } = useAppStore();
|
||||
const [isReady, setIsReady] = useState(false);
|
||||
const [toastMessage, setToastMessage] = useState('');
|
||||
const [toastVisible, setToastVisible] = useState(false);
|
||||
|
||||
/**
|
||||
* Enregistre le callback de toast dans l'errorHandler au premier montage.
|
||||
* Permet à toute la couche API de remonter des erreurs vers l'UI sans couplage direct.
|
||||
*/
|
||||
useEffect(() => {
|
||||
registerToastCallback((message) => {
|
||||
setToastMessage(message);
|
||||
setToastVisible(true);
|
||||
});
|
||||
}, []);
|
||||
|
||||
const runBiometricAuth = async (): Promise<boolean> => {
|
||||
const result = await LocalAuthentication.authenticateAsync({
|
||||
promptMessage: 'Authentifiez-vous pour accéder à n8n Pilot',
|
||||
cancelLabel: 'Annuler',
|
||||
});
|
||||
return result.success;
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
const init = async () => {
|
||||
await loadConfig();
|
||||
const { preferences: prefs } = useAppStore.getState();
|
||||
if (prefs.biometricEnabled) {
|
||||
const success = await runBiometricAuth();
|
||||
setAuthenticated(success);
|
||||
} else {
|
||||
setAuthenticated(true);
|
||||
}
|
||||
setIsReady(true);
|
||||
};
|
||||
init();
|
||||
}, []);
|
||||
|
||||
const handleUnlock = async (): Promise<void> => {
|
||||
const success = await runBiometricAuth();
|
||||
if (success) setAuthenticated(true);
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
if (!isReady) return;
|
||||
if (preferences.biometricEnabled && !isAuthenticated) return;
|
||||
const inSetup = segments[0] === 'setup';
|
||||
if (!config.isConfigured && !inSetup) {
|
||||
router.replace('/setup');
|
||||
} else if (config.isConfigured && inSetup) {
|
||||
router.replace('/(tabs)');
|
||||
}
|
||||
}, [isReady, config.isConfigured, isAuthenticated, preferences.biometricEnabled, segments]);
|
||||
|
||||
if (!isReady) {
|
||||
return (
|
||||
<View style={{ flex: 1, alignItems: 'center', justifyContent: 'center', backgroundColor: '#121212' }}>
|
||||
<ActivityIndicator color="#FF6D3E" size="large" />
|
||||
</View>
|
||||
);
|
||||
}
|
||||
|
||||
if (preferences.biometricEnabled && !isAuthenticated) {
|
||||
return (
|
||||
<GestureHandlerRootView style={{ flex: 1 }}>
|
||||
<SafeAreaProvider>
|
||||
<PaperProvider theme={APP_THEME}>
|
||||
<View style={{ flex: 1, alignItems: 'center', justifyContent: 'center', backgroundColor: '#121212', paddingHorizontal: 32 }}>
|
||||
<Text variant="headlineMedium" style={{ color: '#FF6D3E', marginBottom: 12 }}>
|
||||
n8n Pilot
|
||||
</Text>
|
||||
<Text variant="bodyMedium" style={{ color: '#FFFFFF', marginBottom: 32, textAlign: 'center' }}>
|
||||
Authentification biométrique requise
|
||||
</Text>
|
||||
<Button mode="contained" onPress={handleUnlock} icon="fingerprint">
|
||||
Déverrouiller
|
||||
</Button>
|
||||
</View>
|
||||
</PaperProvider>
|
||||
</SafeAreaProvider>
|
||||
</GestureHandlerRootView>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<GestureHandlerRootView style={{ flex: 1 }}>
|
||||
<SafeAreaProvider>
|
||||
<PaperProvider theme={APP_THEME}>
|
||||
<Stack screenOptions={{ headerShown: false }}>
|
||||
<Stack.Screen name="(tabs)" />
|
||||
<Stack.Screen
|
||||
name="setup"
|
||||
options={{
|
||||
headerShown: true,
|
||||
headerTitle: 'Configuration',
|
||||
headerStyle: { backgroundColor: '#1E1E1E' },
|
||||
headerTintColor: '#FF6D3E',
|
||||
}}
|
||||
/>
|
||||
<Stack.Screen
|
||||
name="execution/[id]"
|
||||
options={{
|
||||
headerShown: true,
|
||||
headerTitle: "Logs d'exécution",
|
||||
headerStyle: { backgroundColor: '#1E1E1E' },
|
||||
headerTintColor: '#FF6D3E',
|
||||
presentation: 'card',
|
||||
}}
|
||||
/>
|
||||
</Stack>
|
||||
|
||||
{/* Toast global pour toutes les erreurs remontées par l'errorHandler */}
|
||||
<Snackbar
|
||||
visible={toastVisible}
|
||||
onDismiss={() => setToastVisible(false)}
|
||||
duration={4000}
|
||||
style={{ backgroundColor: '#4A0000' }}
|
||||
>
|
||||
{toastMessage}
|
||||
</Snackbar>
|
||||
</PaperProvider>
|
||||
</SafeAreaProvider>
|
||||
</GestureHandlerRootView>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
import LogsScreen from '../../src/screens/LogsScreen';
|
||||
|
||||
export default LogsScreen;
|
||||
@@ -0,0 +1,49 @@
|
||||
import React from 'react';
|
||||
import { View, StyleSheet } from 'react-native';
|
||||
import { Text, useTheme } from 'react-native-paper';
|
||||
import SettingsScreen from '../src/screens/SettingsScreen';
|
||||
|
||||
/**
|
||||
* Écran d'installation initiale — affiché au premier lancement.
|
||||
* Partage le composant SettingsScreen avec un en-tête de bienvenue.
|
||||
* Après sauvegarde, le root layout redirige automatiquement vers les tabs.
|
||||
*/
|
||||
export default function SetupScreen() {
|
||||
const theme = useTheme();
|
||||
|
||||
return (
|
||||
<View style={[styles.container, { backgroundColor: theme.colors.background }]}>
|
||||
<View style={styles.header}>
|
||||
<Text
|
||||
variant="headlineMedium"
|
||||
style={[styles.title, { color: theme.colors.primary }]}
|
||||
>
|
||||
n8n Pilot
|
||||
</Text>
|
||||
<Text
|
||||
variant="bodyMedium"
|
||||
style={{ color: theme.colors.onSurfaceVariant, textAlign: 'center' }}
|
||||
>
|
||||
Configurez votre instance n8n pour commencer
|
||||
</Text>
|
||||
</View>
|
||||
<SettingsScreen />
|
||||
</View>
|
||||
);
|
||||
}
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
container: {
|
||||
flex: 1,
|
||||
},
|
||||
header: {
|
||||
paddingHorizontal: 24,
|
||||
paddingTop: 24,
|
||||
paddingBottom: 8,
|
||||
alignItems: 'center',
|
||||
gap: 4,
|
||||
},
|
||||
title: {
|
||||
fontWeight: '700',
|
||||
},
|
||||
});
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 17 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.4 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 22 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 17 KiB |
@@ -0,0 +1,7 @@
|
||||
module.exports = function (api) {
|
||||
api.cache(true);
|
||||
return {
|
||||
presets: ['babel-preset-expo'],
|
||||
plugins: ['react-native-reanimated/plugin'],
|
||||
};
|
||||
};
|
||||
@@ -1,31 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Chemin vers le fichier de valeurs
|
||||
RULES_FILE="firewall_rules.txt"
|
||||
|
||||
# Vérifier si le fichier de valeurs existe
|
||||
if [[ ! -f "$RULES_FILE" ]]; then
|
||||
echo "Le fichier de valeurs $RULES_FILE n'existe pas."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Sauvegarder la configuration actuelle de firewalld
|
||||
TIMESTAMP=$(date +%Y%m%d%H%M%S)
|
||||
BACKUP_DIR="/etc/firewalld/backup"
|
||||
BACKUP_FILE="$BACKUP_DIR/firewalld_backup_$TIMESTAMP"
|
||||
|
||||
mkdir -p "$BACKUP_DIR"
|
||||
cp -r /etc/firewalld/* "$BACKUP_FILE"
|
||||
|
||||
echo "Configuration actuelle sauvegardée dans $BACKUP_FILE"
|
||||
|
||||
# Lire le fichier de valeurs et ajouter les règles
|
||||
while IFS=: read -r IP PORT; do
|
||||
# Ajouter la règle sans supprimer les règles existantes
|
||||
firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='$IP' port port='$PORT' protocol='tcp' accept"
|
||||
done < "$RULES_FILE"
|
||||
|
||||
# Recharger la configuration de firewalld pour appliquer les changements
|
||||
firewall-cmd --reload
|
||||
|
||||
echo "Les nouvelles règles ont été ajoutées et la configuration a été rechargée."
|
||||
-247
@@ -1,247 +0,0 @@
|
||||
--
|
||||
-- Cross-origin Request Sharing (CORS) implementation for HAProxy Lua host
|
||||
--
|
||||
-- CORS RFC:
|
||||
-- https://www.w3.org/TR/cors/
|
||||
--
|
||||
-- Copyright (c) 2019. Nick Ramirez <nramirez@haproxy.com>
|
||||
-- Copyright (c) 2019. HAProxy Technologies, LLC.
|
||||
|
||||
local M={}
|
||||
|
||||
-- Loops through array to find the given string.
|
||||
-- items: array of strings
|
||||
-- test_str: string to search for
|
||||
function contains(items, test_str)
|
||||
for _,item in pairs(items) do
|
||||
if item == test_str then
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
M.wildcard_origin_allowed = function(allowed_origins)
|
||||
if contains(allowed_origins, "*") then
|
||||
return "*"
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
M.specifies_scheme = function(s)
|
||||
return string.find(s, "^%a+://") ~= nil
|
||||
end
|
||||
|
||||
M.specifies_generic_scheme = function(s)
|
||||
return string.find(s, "^//") ~= nil
|
||||
end
|
||||
|
||||
M.begins_with_dot = function(s)
|
||||
return string.find(s, "^%.") ~= nil
|
||||
end
|
||||
|
||||
M.trim = function(s)
|
||||
return s:gsub("%s+", "")
|
||||
end
|
||||
|
||||
M.build_pattern = function(pattern)
|
||||
-- remove spaces
|
||||
pattern = M.trim(pattern)
|
||||
|
||||
if pattern ~= nil and pattern ~= '' then
|
||||
-- if there is no scheme and the pattern does not begin with a dot,
|
||||
-- add the generic scheme to the beginning of the pattern
|
||||
if M.specifies_scheme(pattern) == false and M.specifies_generic_scheme(pattern) == false and M.begins_with_dot(pattern) == false then
|
||||
pattern = "//" .. pattern
|
||||
end
|
||||
|
||||
-- escape dots and dashes in pattern
|
||||
pattern = pattern:gsub("([%.%-])", "%%%1")
|
||||
|
||||
-- an asterisk for the port means allow all ports
|
||||
if string.find(pattern, "[:]+%*$") ~= nil then
|
||||
pattern = pattern:gsub("[:]+%*$", "[:]+[0-9]+")
|
||||
end
|
||||
|
||||
-- append end character
|
||||
pattern = pattern .. "$"
|
||||
return pattern
|
||||
end
|
||||
|
||||
return nil
|
||||
end
|
||||
|
||||
-- If the given origin is found within the allowed_origins string, it is returned. Otherwise, nil is returned.
|
||||
-- origin: The value from the 'origin' request header
|
||||
-- allowed_origins: Comma-delimited list of allowed origins. (e.g. localhost,https://localhost:8080,//test.com)
|
||||
-- e.g. localhost : allow http(s)://localhost
|
||||
-- e.g. //localhost : allow http(s)://localhost
|
||||
-- e.g. https://mydomain.com : allow only HTTPS of mydomain.com
|
||||
-- e.g. http://mydomain.com : allow only HTTP of mydomain.com
|
||||
-- e.g. http://mydomain.com:8080 : allow only HTTP of mydomain.com from port 8080
|
||||
-- e.g. //mydomain.com : allow only http(s)://mydomain.com
|
||||
-- e.g. .mydomain.com : allow ALL subdomains of mydomain.com from ALL source ports
|
||||
-- e.g. .mydomain.com:443 : allow ALL subdomains of mydomain.com from default HTTPS source port
|
||||
--
|
||||
-- e.g. ".mydomain.com:443, //mydomain.com:443, //localhost"
|
||||
-- allows all subdomains and main domain of mydomain.com only for HTTPS from default HTTPS port and allows
|
||||
-- all HTTP and HTTPS connections from ALL source port for localhost
|
||||
--
|
||||
M.get_allowed_origin = function(origin, allowed_origins)
|
||||
if origin ~= nil then
|
||||
-- if wildcard (*) is allowed, return it, which allows all origins
|
||||
wildcard_origin = M.wildcard_origin_allowed(allowed_origins)
|
||||
if wildcard_origin ~= nil then
|
||||
return wildcard_origin
|
||||
end
|
||||
|
||||
for index, allowed_origin in ipairs(allowed_origins) do
|
||||
pattern = M.build_pattern(allowed_origin)
|
||||
|
||||
if pattern ~= nil then
|
||||
if origin:match(pattern) then
|
||||
core.Debug("Test: " .. pattern .. ", Origin: " .. origin .. ", Match: yes")
|
||||
return origin
|
||||
else
|
||||
core.Debug("Test: " .. pattern .. ", Origin: " .. origin .. ", Match: no")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return nil
|
||||
end
|
||||
|
||||
-- Adds headers for CORS preflight request and then attaches them to the response
|
||||
-- after it comes back from the server. This works with versions of HAProxy prior to 2.2.
|
||||
-- The downside is that the OPTIONS request must be sent to the backend server first and can't
|
||||
-- be intercepted and returned immediately.
|
||||
-- txn: The current transaction object that gives access to response properties
|
||||
-- allowed_methods: Comma-delimited list of allowed HTTP methods. (e.g. GET,POST,PUT,DELETE)
|
||||
-- allowed_headers: Comma-delimited list of allowed headers. (e.g. X-Header1,X-Header2)
|
||||
function preflight_request_ver1(txn, allowed_methods, allowed_headers)
|
||||
core.Debug("CORS: preflight request received")
|
||||
txn.http:res_set_header("Access-Control-Allow-Methods", allowed_methods)
|
||||
txn.http:res_set_header("Access-Control-Allow-Headers", allowed_headers)
|
||||
txn.http:res_set_header("Access-Control-Max-Age", 600)
|
||||
core.Debug("CORS: attaching allowed methods to response")
|
||||
end
|
||||
|
||||
-- Add headers for CORS preflight request and then returns a 204 response.
|
||||
-- The 'reply' function used here is available in HAProxy 2.2+. It allows HAProxy to return
|
||||
-- a reply without contacting the server.
|
||||
-- txn: The current transaction object that gives access to response properties
|
||||
-- origin: The value from the 'origin' request header
|
||||
-- allowed_methods: Comma-delimited list of allowed HTTP methods. (e.g. GET,POST,PUT,DELETE)
|
||||
-- allowed_origins: Comma-delimited list of allowed origins. (e.g. localhost,localhost:8080,test.com)
|
||||
-- allowed_headers: Comma-delimited list of allowed headers. (e.g. X-Header1,X-Header2)
|
||||
function preflight_request_ver2(txn, origin, allowed_methods, allowed_origins, allowed_headers)
|
||||
core.Debug("CORS: preflight request received")
|
||||
|
||||
local reply = txn:reply()
|
||||
reply:set_status(204, "No Content")
|
||||
reply:add_header("Content-Type", "text/html")
|
||||
reply:add_header("Access-Control-Allow-Methods", allowed_methods)
|
||||
reply:add_header("Access-Control-Allow-Headers", allowed_headers)
|
||||
reply:add_header("Access-Control-Max-Age", 600)
|
||||
|
||||
local allowed_origin = M.get_allowed_origin(origin, allowed_origins)
|
||||
|
||||
if allowed_origin == nil then
|
||||
core.Debug("CORS: " .. origin .. " not allowed")
|
||||
else
|
||||
core.Debug("CORS: " .. origin .. " allowed")
|
||||
reply:add_header("Access-Control-Allow-Origin", allowed_origin)
|
||||
|
||||
if allowed_origin ~= "*" then
|
||||
reply:add_header("Vary", "Accept-Encoding,Origin")
|
||||
end
|
||||
end
|
||||
|
||||
core.Debug("CORS: Returning reply to preflight request")
|
||||
txn:done(reply)
|
||||
end
|
||||
|
||||
-- When invoked during a request, captures the origin header if present and stores it in a private variable.
|
||||
-- If the request is OPTIONS and it is a supported version of HAProxy, returns a preflight request reply.
|
||||
-- Otherwise, the preflight request header is added to the response after it has returned from the server.
|
||||
-- txn: The current transaction object that gives access to response properties
|
||||
-- allowed_methods: Comma-delimited list of allowed HTTP methods. (e.g. GET,POST,PUT,DELETE)
|
||||
-- allowed_origins: Comma-delimited list of allowed origins. (e.g. localhost,localhost:8080,test.com)
|
||||
-- allowed_headers: Comma-delimited list of allowed headers. (e.g. X-Header1,X-Header2)
|
||||
function cors_request(txn, allowed_methods, allowed_origins, allowed_headers)
|
||||
local headers = txn.http:req_get_headers()
|
||||
local transaction_data = {}
|
||||
local origin = nil
|
||||
local allowed_origins = core.tokenize(allowed_origins, ",")
|
||||
|
||||
if headers["origin"] ~= nil and headers["origin"][0] ~= nil then
|
||||
core.Debug("CORS: Got 'Origin' header: " .. headers["origin"][0])
|
||||
origin = headers["origin"][0]
|
||||
end
|
||||
|
||||
-- Bail if client did not send an Origin
|
||||
-- for example, it may be a regular OPTIONS request that is not a CORS preflight request
|
||||
if origin == nil or origin == '' then
|
||||
return
|
||||
end
|
||||
|
||||
transaction_data["origin"] = origin
|
||||
transaction_data["allowed_methods"] = allowed_methods
|
||||
transaction_data["allowed_origins"] = allowed_origins
|
||||
transaction_data["allowed_headers"] = allowed_headers
|
||||
|
||||
txn:set_priv(transaction_data)
|
||||
|
||||
local method = txn.sf:method()
|
||||
transaction_data["method"] = method
|
||||
|
||||
if method == "OPTIONS" and txn.reply ~= nil then
|
||||
preflight_request_ver2(txn, origin, allowed_methods, allowed_origins, allowed_headers)
|
||||
end
|
||||
end
|
||||
|
||||
-- When invoked during a response, sets CORS headers so that the browser can read the response from permitted domains.
|
||||
-- txn: The current transaction object that gives access to response properties.
|
||||
function cors_response(txn)
|
||||
local transaction_data = txn:get_priv()
|
||||
|
||||
if transaction_data == nil then
|
||||
return
|
||||
end
|
||||
|
||||
local origin = transaction_data["origin"]
|
||||
local allowed_origins = transaction_data["allowed_origins"]
|
||||
local allowed_methods = transaction_data["allowed_methods"]
|
||||
local allowed_headers = transaction_data["allowed_headers"]
|
||||
local method = transaction_data["method"]
|
||||
|
||||
-- Bail if client did not send an Origin
|
||||
if origin == nil or origin == '' then
|
||||
return
|
||||
end
|
||||
|
||||
local allowed_origin = M.get_allowed_origin(origin, allowed_origins)
|
||||
|
||||
if allowed_origin == nil then
|
||||
core.Debug("CORS: " .. origin .. " not allowed")
|
||||
else
|
||||
if method == "OPTIONS" and txn.reply == nil then
|
||||
preflight_request_ver1(txn, allowed_methods, allowed_headers)
|
||||
end
|
||||
|
||||
core.Debug("CORS: " .. origin .. " allowed")
|
||||
txn.http:res_set_header("Access-Control-Allow-Origin", allowed_origin)
|
||||
|
||||
if allowed_origin ~= "*" then
|
||||
txn.http:res_add_header("Vary", "Accept-Encoding,Origin")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Register the actions with HAProxy
|
||||
core.register_action("cors", {"http-req"}, cors_request, 3)
|
||||
core.register_action("cors", {"http-res"}, cors_response, 0)
|
||||
|
||||
return M
|
||||
@@ -0,0 +1,89 @@
|
||||
# Sauvegarde de n8n Pilot
|
||||
|
||||
## Ce qu'il faut sauvegarder
|
||||
|
||||
### 1. Credentials de signature EAS (`credentials.json`)
|
||||
|
||||
**Où** : généré par EAS lors du premier build dans `~/.eas/` ou téléchargeable depuis le dashboard Expo.
|
||||
|
||||
**Pourquoi** : sans le keystore de signature, il est **impossible** de mettre à jour l'APK sur un appareil
|
||||
qui a déjà la version signée avec ce keystore. Android refuse les mises à jour avec un keystore différent.
|
||||
|
||||
**Comment sauvegarder** :
|
||||
|
||||
```bash
|
||||
# Télécharger les credentials depuis EAS
|
||||
eas credentials
|
||||
|
||||
# Choisir : Android > Keystore > Download
|
||||
# Sauvegarder le fichier .jks et les mots de passe associés
|
||||
```
|
||||
|
||||
> **Criticalité : MAXIMALE** — perte du keystore = obligation de désinstaller l'app sur tous les appareils
|
||||
> avant de pouvoir installer une nouvelle version.
|
||||
|
||||
---
|
||||
|
||||
### 2. Fichier `.env` de développement
|
||||
|
||||
**Où** : racine du projet (jamais dans git)
|
||||
|
||||
**Pourquoi** : contient l'URL de l'instance, la clé API et le token HAProxy pour l'environnement de dev.
|
||||
Sans ce fichier, les développeurs doivent reconfigurer manuellement l'environnement.
|
||||
|
||||
**Comment sauvegarder** : gestionnaire de mots de passe (Bitwarden, 1Password, Vault) avec les champs :
|
||||
- `N8N_BASE_URL`
|
||||
- `N8N_API_KEY`
|
||||
- `N8N_APP_TOKEN`
|
||||
|
||||
---
|
||||
|
||||
### 3. Configuration EAS (`eas.json`)
|
||||
|
||||
**Où** : racine du projet, **committé dans git**
|
||||
|
||||
**Pourquoi** : définit les profils de build (development, preview, production).
|
||||
|
||||
**Statut** : déjà sauvegardé via git — aucune action supplémentaire requise.
|
||||
|
||||
---
|
||||
|
||||
### 4. Données utilisateur sur l'appareil
|
||||
|
||||
Les credentials (URL, clé API, token) sont chiffrés dans l'**Android Keystore** de l'appareil.
|
||||
Ils ne sont **pas** sauvegardés dans les sauvegardes Android standard (par conception de sécurité).
|
||||
|
||||
**Conséquence** : après réinitialisation usine ou changement d'appareil, l'utilisateur doit
|
||||
reconfigurer l'app depuis l'écran Paramètres.
|
||||
|
||||
---
|
||||
|
||||
## Fréquence recommandée
|
||||
|
||||
| Élément | Fréquence | Stockage |
|
||||
|---------|-----------|----------|
|
||||
| Keystore EAS | À chaque rotation + après génération | Coffre chiffré hors-ligne |
|
||||
| `.env` dev | À chaque rotation des tokens | Gestionnaire de mots de passe |
|
||||
| Code source | En continu via git push | Gitea self-hosted |
|
||||
|
||||
---
|
||||
|
||||
## Procédure de restauration
|
||||
|
||||
### Restaurer le keystore
|
||||
|
||||
```bash
|
||||
# Uploader le keystore sauvegardé vers EAS
|
||||
eas credentials
|
||||
# Choisir : Android > Keystore > Upload existing keystore
|
||||
```
|
||||
|
||||
### Restaurer l'environnement de développement
|
||||
|
||||
```bash
|
||||
git clone https://homegit.gyozamancave.fr/billisdead/n8n-mobile.git
|
||||
cd n8n-mobile
|
||||
cp .env.example .env
|
||||
# Remplir .env depuis le gestionnaire de mots de passe
|
||||
npm install --legacy-peer-deps
|
||||
```
|
||||
@@ -0,0 +1,96 @@
|
||||
# Configuration HAProxy pour n8n Pilot
|
||||
|
||||
## Contexte
|
||||
|
||||
n8n est déjà exposé via HAProxy à `https://n8n.gyozamancave.fr`.
|
||||
Il suffit d'ajouter la validation du `X-App-Token` dans le backend existant **sans toucher au frontend**.
|
||||
|
||||
---
|
||||
|
||||
## Modification à apporter — backend n8n uniquement
|
||||
|
||||
Remplacer le backend `n8n-backend` actuel par :
|
||||
|
||||
```haproxy
|
||||
backend n8n-backend
|
||||
mode http
|
||||
balance source
|
||||
|
||||
# IPs qui ne nécessitent pas le X-App-Token (LAN + IP fixe perso)
|
||||
acl is_local src 192.168.1.0/24 192.168.2.0/24 82.67.3.126/32
|
||||
|
||||
# Validation du token pour les accès extérieurs (mobile app)
|
||||
acl valid_app_token req.hdr(X-App-Token) -m str "VOTRE_TOKEN_ICI"
|
||||
http-request deny deny_status 403 if !is_local !valid_app_token
|
||||
|
||||
# Supprimer le token avant de forwarder à n8n (n8n ne doit pas le voir)
|
||||
http-request del-header X-App-Token
|
||||
|
||||
http-request set-header X-Forwarded-Proto https if { ssl_fc }
|
||||
http-request set-header X-Real-IP %[src]
|
||||
http-request set-header X-Forwarded-For %[src]
|
||||
http-request set-header Host %[req.hdr(host)]
|
||||
option forwardfor
|
||||
server n8n 192.168.1.56:5678
|
||||
```
|
||||
|
||||
**Logique** :
|
||||
- Depuis le LAN (`192.168.1/2.x`) ou ton IP fixe → accès direct, pas de token requis (navigation normale dans n8n)
|
||||
- Depuis l'extérieur (mobile app 4G/5G) → `X-App-Token` obligatoire, sinon 403
|
||||
|
||||
---
|
||||
|
||||
## Appliquer la modification
|
||||
|
||||
```bash
|
||||
# Valider la syntaxe avant rechargement
|
||||
haproxy -f /etc/haproxy/haproxy.cfg -c
|
||||
|
||||
# Rechargement gracieux (sans coupure)
|
||||
systemctl reload haproxy
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Générer un token solide
|
||||
|
||||
```bash
|
||||
openssl rand -hex 32
|
||||
```
|
||||
|
||||
Copier la valeur générée dans :
|
||||
1. La config HAProxy (`VOTRE_TOKEN_ICI` ci-dessus)
|
||||
2. L'app Android : Paramètres > Token HAProxy > Sauvegarder
|
||||
|
||||
---
|
||||
|
||||
## Rotation du token
|
||||
|
||||
1. Générer un nouveau token (`openssl rand -hex 32`)
|
||||
2. Ajouter temporairement les **deux** ACLs dans HAProxy pour éviter les coupures :
|
||||
|
||||
```haproxy
|
||||
acl valid_app_token req.hdr(X-App-Token) -m str "ANCIEN_TOKEN"
|
||||
acl valid_app_token_new req.hdr(X-App-Token) -m str "NOUVEAU_TOKEN"
|
||||
http-request deny deny_status 403 if !is_local !valid_app_token !valid_app_token_new
|
||||
```
|
||||
|
||||
3. Mettre à jour le token dans l'app (Paramètres > Token HAProxy)
|
||||
4. Retirer l'ancien token de la config HAProxy
|
||||
5. `systemctl reload haproxy`
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
**403 depuis l'app** → token absent ou incorrect. Tester :
|
||||
```bash
|
||||
curl -v -H "X-App-Token: VOTRE_TOKEN" https://n8n.gyozamancave.fr/api/v1/workflows
|
||||
```
|
||||
|
||||
**403 depuis le navigateur** → vérifier que l'IP source est bien dans `is_local`. Depuis un VPN ou tethering, l'IP peut ne pas matcher.
|
||||
|
||||
**Logs HAProxy en direct** :
|
||||
```bash
|
||||
journalctl -u haproxy -f
|
||||
```
|
||||
+136
@@ -0,0 +1,136 @@
|
||||
# Installation de n8n Pilot
|
||||
|
||||
## Prérequis
|
||||
|
||||
| Outil | Version minimale | Rôle |
|
||||
|-------|-----------------|------|
|
||||
| Node.js | 20 LTS | Runtime JS |
|
||||
| npm | 10+ | Gestionnaire de paquets |
|
||||
| EAS CLI | 3.0+ | Build cloud Expo |
|
||||
| Android | 8.0 (API 26) | Cible minimum |
|
||||
| Compte Expo | gratuit | Build EAS |
|
||||
|
||||
```bash
|
||||
# Vérifier les prérequis
|
||||
node --version # >= 20
|
||||
npm --version # >= 10
|
||||
eas --version # >= 3.0 (après install)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 1. Cloner le dépôt
|
||||
|
||||
```bash
|
||||
git clone https://homegit.gyozamancave.fr/billisdead/n8n-mobile.git
|
||||
cd n8n-mobile
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2. Installer les dépendances
|
||||
|
||||
```bash
|
||||
npm install --legacy-peer-deps
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. Configurer l'environnement de développement
|
||||
|
||||
Copiez le fichier exemple et remplissez vos valeurs **localement uniquement** :
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
# Éditez .env avec votre URL, clé API et token HAProxy
|
||||
```
|
||||
|
||||
> ⚠️ Le fichier `.env` est dans `.gitignore` — ne jamais le committer.
|
||||
> En production, les secrets transitent **uniquement** par `expo-secure-store`.
|
||||
|
||||
---
|
||||
|
||||
## 4. Lancer en développement
|
||||
|
||||
```bash
|
||||
# Démarrer le serveur Metro
|
||||
npm start
|
||||
|
||||
# Sur appareil Android (USB ou WiFi) ou émulateur
|
||||
npm run android
|
||||
```
|
||||
|
||||
Pour le développement, l'app vous demandera de saisir l'URL et la clé API
|
||||
directement dans l'écran Paramètres — elles seront stockées dans le Keystore Android.
|
||||
|
||||
---
|
||||
|
||||
## 5. Installer EAS CLI
|
||||
|
||||
```bash
|
||||
npm install -g eas-cli
|
||||
eas login # Connectez-vous avec votre compte Expo
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6. Configurer le projet EAS
|
||||
|
||||
```bash
|
||||
# Initialise l'ID de projet Expo (première fois uniquement)
|
||||
eas init
|
||||
|
||||
# Vérifie la configuration
|
||||
eas build:configure
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 7. Builder l'APK (profil preview)
|
||||
|
||||
```bash
|
||||
# Build Android APK — exécuté dans le cloud Expo
|
||||
eas build --platform android --profile preview
|
||||
```
|
||||
|
||||
Le build prend environ 10–15 minutes. EAS envoie un email avec le lien de téléchargement.
|
||||
|
||||
Pour un build local (nécessite Android Studio + JDK 17) :
|
||||
|
||||
```bash
|
||||
eas build --platform android --profile preview --local
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 8. Sideloader l'APK sur Android
|
||||
|
||||
### Via ADB
|
||||
|
||||
```bash
|
||||
# Connecter l'appareil en USB avec le débogage USB activé
|
||||
adb devices
|
||||
|
||||
# Installer l'APK
|
||||
adb install chemin/vers/n8n-pilot.apk
|
||||
```
|
||||
|
||||
### Manuellement
|
||||
|
||||
1. Transférez l'APK sur l'appareil (câble, Google Drive, etc.)
|
||||
2. Ouvrez l'APK depuis le gestionnaire de fichiers
|
||||
3. Autorisez l'installation depuis des sources inconnues si demandé
|
||||
4. Suivez l'assistant d'installation
|
||||
|
||||
---
|
||||
|
||||
## 9. Premier lancement
|
||||
|
||||
Au premier démarrage, l'écran de configuration apparaît automatiquement :
|
||||
|
||||
1. Saisissez l'URL HTTPS de votre instance n8n
|
||||
2. Collez votre clé API n8n (Settings > API Keys dans n8n)
|
||||
3. Saisissez le token HAProxy si applicable
|
||||
4. Appuyez sur **Sauvegarder**
|
||||
|
||||
Les credentials sont chiffrés dans l'Android Keystore — ils ne quittent jamais l'appareil.
|
||||
@@ -0,0 +1,147 @@
|
||||
# Sécurité — n8n Pilot
|
||||
|
||||
## Modèle de menaces
|
||||
|
||||
### Acteurs et vecteurs
|
||||
|
||||
| Menace | Impact | Probabilité | Mitigation |
|
||||
|--------|--------|-------------|-----------|
|
||||
| Vol de l'appareil Android | Accès aux credentials n8n | Moyen | Android Keystore chiffré, biométrie optionnelle |
|
||||
| Interception réseau (MITM) | Exposition de la clé API | Faible (TLS) | TLS obligatoire, refus HTTP |
|
||||
| Fuite du token HAProxy | Accès non autorisé à n8n | Moyen | Rotation régulière, token hors bundle |
|
||||
| Compromission du build APK | Backdoor dans l'app | Faible | Keystore signé, builds EAS reproductibles |
|
||||
| Brute force API | Épuisement quotas n8n | Faible | Rate limiting HAProxy (429) |
|
||||
| Logs applicatifs exposés | Fuite de secrets | Faible | Jamais de log de secrets, même en dev |
|
||||
|
||||
---
|
||||
|
||||
## Principes appliqués
|
||||
|
||||
### Least Privilege (moindre privilège)
|
||||
|
||||
La clé API n8n doit être créée avec le **scope minimal** nécessaire :
|
||||
|
||||
```
|
||||
Recommandé :
|
||||
✓ workflows:list — lister les workflows
|
||||
✓ workflows:read — lire les détails
|
||||
✓ workflows:update — activer/désactiver (toggle)
|
||||
✓ executions:list — voir l'historique
|
||||
✓ executions:read — lire les logs
|
||||
✓ executions:delete — supprimer des exécutions
|
||||
✓ workflows:run — déclencher manuellement
|
||||
|
||||
Non recommandé :
|
||||
✗ credentials:* — inutile pour cette app
|
||||
✗ users:* — inutile pour cette app
|
||||
✗ admin:* — jamais
|
||||
```
|
||||
|
||||
**Comment créer la clé** dans n8n :
|
||||
1. Settings > n8n API
|
||||
2. Create API Key
|
||||
3. Nommer la clé "n8n-pilot-mobile"
|
||||
4. Définir les scopes minimaux ci-dessus
|
||||
5. Copier la clé — elle n'est affichée qu'une seule fois
|
||||
|
||||
---
|
||||
|
||||
### Defense in Depth (défense en profondeur)
|
||||
|
||||
L'accès à l'API n8n passe par **deux barrières indépendantes** :
|
||||
|
||||
```
|
||||
Requête → [TLS] → [X-App-Token HAProxy] → [X-N8N-API-KEY n8n] → Données
|
||||
```
|
||||
|
||||
Si un token est compromis :
|
||||
- Compromission du `X-App-Token` seul → HAProxy bloque, n8n jamais atteint
|
||||
- Compromission de la clé API seul → sans le `X-App-Token`, HAProxy bloque à 403
|
||||
- Les deux compromis → rotation immédiate des deux (procédures dans HAPROXY.md et BACKUP.md)
|
||||
|
||||
---
|
||||
|
||||
### Zero Trust (réseau local inclus)
|
||||
|
||||
n8n ne doit **pas** être accessible directement sur le réseau, même en local.
|
||||
Toutes les requêtes passent par HAProxy qui valide le token.
|
||||
|
||||
```
|
||||
# Bloquer l'accès direct au port n8n (iptables)
|
||||
iptables -A INPUT -p tcp --dport 5678 -s 127.0.0.1 -j ACCEPT
|
||||
iptables -A INPUT -p tcp --dport 5678 -j DROP
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Gestion des secrets — cycle de vie
|
||||
|
||||
### Stockage
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────┐
|
||||
│ Appareil Android │
|
||||
│ ┌─────────────────────────────────────────────┐ │
|
||||
│ │ Android Keystore (expo-secure-store) │ │
|
||||
│ │ n8n_base_url → https://n8n.example.com │ │
|
||||
│ │ n8n_api_key → clé API (chiffrée) │ │
|
||||
│ │ n8n_app_token → token HAProxy (chiffré) │ │
|
||||
│ └─────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ État React (Zustand) — en mémoire uniquement : │
|
||||
│ config.baseUrl → copie non sensible │
|
||||
│ config.isConfigured → booléen │
|
||||
│ JAMAIS : apiKey, appToken en mémoire JS │
|
||||
└─────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### Transit
|
||||
|
||||
- Les secrets sont lus depuis le Keystore **à chaque requête** HTTP dans `client.ts`
|
||||
- Ils sont injectés dans les headers HTTP et **ne sont pas loggués**
|
||||
- Ils ne sont **jamais** :
|
||||
- Sérialisés dans AsyncStorage
|
||||
- Inclus dans des logs (même en dev)
|
||||
- Embarqués dans le bundle JS (`app.json`, `package.json`, code source)
|
||||
- Envoyés à des services tiers (analytics, crash reporters)
|
||||
|
||||
### Rotation
|
||||
|
||||
| Secret | Fréquence recommandée | Procédure |
|
||||
|--------|-----------------------|-----------|
|
||||
| Clé API n8n | Tous les 180 jours, ou en cas de compromission | Créer nouvelle clé dans n8n, mettre à jour dans l'app |
|
||||
| X-App-Token | Tous les 90 jours | Voir docs/HAPROXY.md |
|
||||
| Keystore EAS | Jamais (sauf compromission) | Voir docs/BACKUP.md |
|
||||
|
||||
---
|
||||
|
||||
## Checklist avant mise en production
|
||||
|
||||
### Application
|
||||
|
||||
- [ ] `app.json` : `userInterfaceStyle` = `"dark"` (pas d'info sensible en clair)
|
||||
- [ ] `.env` non commité dans git (`git status` ne montre pas `.env`)
|
||||
- [ ] Aucun `console.log` de valeurs sensibles dans le code
|
||||
- [ ] `__DEV__` gate sur tous les logs dans `errorHandler.ts`
|
||||
- [ ] Expo SDK à jour — vérifier les CVE : `npx expo-doctor`
|
||||
- [ ] Dépendances à jour : `npm audit`
|
||||
|
||||
### Infrastructure
|
||||
|
||||
- [ ] HAProxy : TLS 1.2 minimum, TLS 1.0/1.1 désactivés
|
||||
- [ ] Certificat TLS valide et non expiré
|
||||
- [ ] n8n inaccessible directement sur le port 5678 depuis l'extérieur
|
||||
- [ ] Rate limiting HAProxy activé (429 configuré)
|
||||
- [ ] Logs HAProxy ne contiennent pas les valeurs des headers secrets
|
||||
|
||||
### n8n
|
||||
|
||||
- [ ] Clé API avec scope minimal (voir § Least Privilege ci-dessus)
|
||||
- [ ] n8n mis à jour vers la dernière version stable
|
||||
- [ ] Sauvegardes n8n actives (workflows, credentials n8n)
|
||||
|
||||
### Appareil
|
||||
|
||||
- [ ] Verrouillage d'écran activé (PIN, pattern ou biométrie)
|
||||
- [ ] Biométrie configurée dans l'app si disponible
|
||||
- [ ] Appareil Android 8+ (API 26+) pour garantir la robustesse du Keystore
|
||||
@@ -0,0 +1,78 @@
|
||||
# Mise à jour de n8n Pilot
|
||||
|
||||
## Processus de mise à jour
|
||||
|
||||
### 1. Récupérer les changements
|
||||
|
||||
```bash
|
||||
git pull origin main
|
||||
npm install --legacy-peer-deps
|
||||
```
|
||||
|
||||
### 2. Bumper la version
|
||||
|
||||
Éditez `app.json` et incrémentez `version` :
|
||||
|
||||
```json
|
||||
{
|
||||
"expo": {
|
||||
"version": "1.1.0",
|
||||
"android": {
|
||||
"versionCode": 2
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
> **Règle** : `versionCode` doit être strictement supérieur à la version précédente.
|
||||
> `version` suit [semver](https://semver.org/) : MAJEUR.MINEUR.CORRECTIF
|
||||
|
||||
### 3. Rebuilder l'APK
|
||||
|
||||
```bash
|
||||
eas build --platform android --profile preview
|
||||
```
|
||||
|
||||
### 4. Distribuer la mise à jour
|
||||
|
||||
#### Option A — Sideload manuel
|
||||
|
||||
Répétez la procédure de sideload (voir INSTALL.md § 8) avec le nouvel APK.
|
||||
L'Android Package Manager gère la mise à jour en place si le `versionCode` est supérieur.
|
||||
|
||||
#### Option B — OTA (Over The Air) via Expo Updates
|
||||
|
||||
Pour les mises à jour mineures (JS uniquement, pas de changements natifs) :
|
||||
|
||||
```bash
|
||||
eas update --branch production --message "Fix: correction du polling"
|
||||
```
|
||||
|
||||
L'app télécharge la mise à jour au prochain démarrage si elle est connectée.
|
||||
|
||||
> **Important** : les changements dans `app.json`, l'ajout de plugins natifs
|
||||
> ou la modification des permissions nécessitent un rebuild APK complet.
|
||||
|
||||
---
|
||||
|
||||
## Vérifications avant release
|
||||
|
||||
- [ ] Tests sur appareil physique (pas seulement émulateur)
|
||||
- [ ] Vérifier que la connexion à l8n fonctionne avec les nouvelles données
|
||||
- [ ] Valider le polling sur WiFi et données mobiles
|
||||
- [ ] Vérifier que les secrets restent dans le Keystore après mise à jour
|
||||
- [ ] Contrôler les logs Android (`adb logcat`) pour des erreurs inattendues
|
||||
|
||||
---
|
||||
|
||||
## Rollback
|
||||
|
||||
En cas de régression critique :
|
||||
|
||||
```bash
|
||||
# Revenir au commit précédent
|
||||
git revert HEAD
|
||||
|
||||
# Rebuilder et redéployer la version précédente
|
||||
eas build --platform android --profile preview
|
||||
```
|
||||
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"cli": {
|
||||
"version": ">= 3.0.0"
|
||||
},
|
||||
"build": {
|
||||
"development": {
|
||||
"developmentClient": true,
|
||||
"distribution": "internal",
|
||||
"android": {
|
||||
"buildType": "apk"
|
||||
}
|
||||
},
|
||||
"preview": {
|
||||
"distribution": "internal",
|
||||
"android": {
|
||||
"buildType": "apk",
|
||||
"gradleCommand": ":app:assembleRelease"
|
||||
}
|
||||
},
|
||||
"production": {
|
||||
"android": {
|
||||
"buildType": "apk"
|
||||
}
|
||||
}
|
||||
},
|
||||
"submit": {
|
||||
"production": {}
|
||||
}
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
192.168.1.130:8123
|
||||
192.168.1.250:2369
|
||||
192.168.1.112:8065
|
||||
127.0.0.1:9080
|
||||
127.0.0.1:22
|
||||
192.168.1.18:32149
|
||||
192.168.1.18:32133
|
||||
192.168.1.13:5080
|
||||
192.168.1.18:32120
|
||||
192.168.1.108:5002
|
||||
|
||||
|
||||
-374
@@ -1,374 +0,0 @@
|
||||
global
|
||||
lua-load /etc/haproxy/cors/cors.lua
|
||||
log /dev/log local0
|
||||
log /dev/log local1 notice
|
||||
log 127.0.0.1 local2
|
||||
log-send-hostname
|
||||
chroot /var/lib/haproxy
|
||||
pidfile /var/run/haproxy.pid
|
||||
stats socket /var/run/haproxy.sock mode 660 level admin expose-fd listeners
|
||||
stats timeout 30s
|
||||
maxconn 30000
|
||||
user haproxy
|
||||
group haproxy
|
||||
daemon
|
||||
|
||||
# Default SSL material locations
|
||||
ca-base /etc/ssl/certs
|
||||
crt-base /etc/ssl/private
|
||||
|
||||
# Default ciphers to use on SSL-enabled listening sockets.
|
||||
# For more information, see ciphers(1SSL). This list is from:
|
||||
# https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
|
||||
# An alternative list with additional directives can be obtained from
|
||||
# https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=haproxy
|
||||
#ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
|
||||
#ssl-default-bind-options no-sslv3
|
||||
tune.ssl.default-dh-param 2048
|
||||
# intermediate configuration
|
||||
ssl-default-bind-curves X25519:prime256v1:secp384r1
|
||||
ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305
|
||||
ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
|
||||
ssl-default-bind-options prefer-client-ciphers ssl-min-ver TLSv1.2 no-tls-tickets
|
||||
|
||||
ssl-default-server-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305
|
||||
ssl-default-server-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
|
||||
ssl-default-server-options ssl-min-ver TLSv1.2 no-tls-tickets
|
||||
|
||||
|
||||
defaults
|
||||
log global
|
||||
mode http
|
||||
option httplog
|
||||
option dontlognull
|
||||
timeout connect 5000
|
||||
timeout client 600s
|
||||
timeout server 600s
|
||||
timeout http-request 5s
|
||||
option http-buffer-request
|
||||
|
||||
|
||||
http-errors kitties
|
||||
errorfile 400 /etc/haproxy/http-cat-errors/400.http
|
||||
errorfile 403 /etc/haproxy/http-cat-errors/403.http
|
||||
errorfile 408 /etc/haproxy/http-cat-errors/408.http
|
||||
errorfile 500 /etc/haproxy/http-cat-errors/500.http
|
||||
errorfile 502 /etc/haproxy/http-cat-errors/502.http
|
||||
errorfile 503 /etc/haproxy/http-cat-errors/503.http
|
||||
errorfile 504 /etc/haproxy/http-cat-errors/504.http
|
||||
|
||||
userlist admin-ghost
|
||||
group is-admin
|
||||
user admin password $5$ITvxQNSy4YoUQdNm$p/2D8ey05ZI3KC2gpRun4OKNsomFS8xJnNd0M4P0zeB # $5$... (générez avec: printf "votrepassword" | mkpasswd --method=sha-256 --stdout)
|
||||
|
||||
#frontend http_in
|
||||
# bind *:80
|
||||
# maxconn 500
|
||||
# http-request track-sc0 src table per_ip_rates
|
||||
# http-request deny deny_status 429 if { sc_http_req_rate(0) gt 100 }
|
||||
# http-request silent-drop if { sc_http_req_rate(0) gt 100 }
|
||||
# acl acl_letsencrypt path_beg /.well-known/acme-challenge/
|
||||
#
|
||||
# redirect scheme https if !acl_letsencrypt !{ ssl_fc }
|
||||
# use_backend be_letsencrypt if acl_letsencrypt
|
||||
#frontend smtp_front
|
||||
# bind *:587
|
||||
# mode tcp
|
||||
# option tcplog
|
||||
# default_backend smtp_back
|
||||
|
||||
#backend smtp_back
|
||||
# mode tcp
|
||||
# server postfix_server 192.168.1.17:587 check
|
||||
|
||||
|
||||
frontend https
|
||||
bind *:443,[::]:443 ssl crt /etc/haproxy/ssl/ strict-sni alpn http/1.1
|
||||
#bind *:443,[::]:443 ssl crt /etc/haproxy/ssl/ strict-sni alpn h2,http/1.1
|
||||
# headers
|
||||
#http-request set-header Host homegit.gyozamancave.fr
|
||||
#http-request set-header Host %[req.hdr(Host)]
|
||||
#http-request set-header X-Real-IP %[src]
|
||||
http-request set-header X-Forwarded-Proto https if { ssl_fc }
|
||||
http-request set-header X-Forwarded-Proto http if !{ ssl_fc }
|
||||
http-request set-header X-Forwarded-For %[src]
|
||||
http-request track-sc0 src table per_ip_rates
|
||||
http-request silent-drop if { sc_http_req_rate(0) gt 100 }
|
||||
|
||||
# config httpcats
|
||||
errorfiles kitties
|
||||
http-response return status 400 default-errorfiles if { status 400 }
|
||||
http-response return status 401 default-errorfiles if { status 401 }
|
||||
http-response return status 403 default-errorfiles if { status 403 }
|
||||
http-response return status 404 default-errorfiles if { status 404 }
|
||||
http-response return status 408 default-errorfiles if { status 408 }
|
||||
http-response return status 500 default-errorfiles if { status 500 }
|
||||
http-response return status 502 default-errorfiles if { status 502 }
|
||||
http-response return status 503 default-errorfiles if { status 503 }
|
||||
http-response return status 504 default-errorfiles if { status 504 }
|
||||
|
||||
# Redirection 301 pour links.billisdead.com
|
||||
acl is_billisdead hdr(host) -i links.billisdead.com
|
||||
http-request redirect code 301 location https://links.mrteddybear.fr/@billisdead.com if is_billisdead
|
||||
|
||||
|
||||
|
||||
## config antiDDOS
|
||||
acl homegit-host hdr(host) -i homegit.gyozamancave.fr
|
||||
# Suivi du taux de requêtes par IP
|
||||
stick-table type ip size 1m expire 10m store http_req_rate(10s)
|
||||
http-request track-sc0 src unless homegit-host
|
||||
|
||||
# ACL pour whitelister ton domaine n8n
|
||||
acl n8n_domain hdr_end(host) -i gyozamancave.fr
|
||||
|
||||
# Whitelist IP perso (optionnel)
|
||||
acl my_ip src 82.67.3.126
|
||||
acl my_lan1 src 192.168.1.0/24
|
||||
acl my_lan2 src 192.168.2.0/24
|
||||
|
||||
# Autoriser ton domaine (ou ton IP) à passer sans rate-limit
|
||||
http-request allow if n8n_domain
|
||||
http-request allow if my_ip
|
||||
http-request allow if my_lan1
|
||||
http-request allow if my_lan2
|
||||
|
||||
# Appliquer la rate-limit globale pour le reste
|
||||
http-request deny deny_status 429 if { sc0_http_req_rate gt 100 }
|
||||
|
||||
# BEGIN CORS
|
||||
#capture request header origin len 128
|
||||
#http-response set-header Access-Control-Allow-Origin "*"
|
||||
#http-response set-header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept, Authorization, JSNLog-RequestId, activityId, applicationId, applicationUserId, channelId, senderId, sessionId"
|
||||
#http-response set-header Access-Control-Max-Age 3628800
|
||||
#http-response set-header Access-Control-Allow-Methods "GET, DELETE, OPTIONS, POST, PUT"
|
||||
# END CORS
|
||||
|
||||
|
||||
acl cms-host hdr(host) -i mrteddybear.fr
|
||||
acl links-host hdr(host) -i links.mrteddybear.fr
|
||||
acl cms2-host hdr(host) -i billisdead.com
|
||||
acl mattermost-host hdr(host) -i mattermost.gyozamancave.fr
|
||||
acl nextcloud-host hdr(host) -i nextcloud.gyozamancave.fr
|
||||
acl funkwhale-host hdr(host) -i funkwhale.gyozamancave.fr
|
||||
acl wiki-host hdr(host) -i wiki.gyozamancave.fr
|
||||
acl hass-host hdr(host) -i hass.gyozamancave.fr
|
||||
acl postiz-host hdr(host) -i postiz.gyozamancave.fr
|
||||
acl stats-host hdr(host) -i stats.gyozamancave.fr
|
||||
acl stats-api hdr(host) -i api.stats.gyozamancave.fr
|
||||
acl n8n-host hdr(host) -i n8n.gyozamancave.fr
|
||||
#acl homegit-host hdr(host) -i homegit.gyozamancave.fr
|
||||
#acl boudoir-assets path_beg /assets/
|
||||
#acl path_og path_beg /og/
|
||||
acl boudoir-host hdr(host) -i ledigitalboudoir.com
|
||||
|
||||
#acl is_api path -m beg -i /api
|
||||
|
||||
use_backend cms if cms-host
|
||||
use_backend links-mtb if links-host
|
||||
use_backend cms2 if cms2-host
|
||||
use_backend mattermost if mattermost-host
|
||||
use_backend nextcloud if nextcloud-host
|
||||
use_backend funkwhale if funkwhale-host
|
||||
use_backend wiki if wiki-host
|
||||
use_backend hass-backend if hass-host
|
||||
use_backend postiz-backend if postiz-host
|
||||
use_backend stats-backend-api if stats-api
|
||||
use_backend stats-backend if stats-host
|
||||
use_backend n8n-backend if n8n-host
|
||||
use_backend homegit-backend if homegit-host
|
||||
#use_backend boudoir-assets-backend if path_og
|
||||
#use_backend boudoir-assets-backend if boudoir-assets
|
||||
use_backend boudoir-backend if boudoir-host
|
||||
|
||||
#backend boudoir-assets-backend
|
||||
# mode http
|
||||
|
||||
# En-têtes HTTPS corrects pour Directus
|
||||
# http-request set-header X-Forwarded-Proto https
|
||||
# http-request set-header X-Forwarded-Host ledigitalboudoir.com
|
||||
# http-request set-header X-Forwarded-For %[src]
|
||||
|
||||
# Route principale OG :
|
||||
# https://ledigitalboudoir.com/og/<id>.jpg
|
||||
# → /assets/<id>?format=jpg&width=1200&height=630&fit=contain&bg=black
|
||||
# http-request replace-path ^/og/(.*)\.jpg$ /assets/\1?format=jpg&width=1200&height=630&fit=contain&bg=black
|
||||
|
||||
# Variante cache-busting (ex: .../og/<id>-v2.jpg)
|
||||
# http-request replace-path ^/og/(.*)-v[0-9]+\.jpg$ /assets/\1?format=jpg&width=1200&height=630&fit=contain&bg=black
|
||||
|
||||
# Cache long (1 semaine)
|
||||
# http-response set-header Cache-Control public,max-age=604800,immutable
|
||||
|
||||
# Autoriser uniquement assets/uploads
|
||||
# acl allowed_assets path_beg /assets/ /uploads/
|
||||
# http-request deny unless allowed_assets
|
||||
|
||||
# Serveur Directus interne
|
||||
# server directus 192.168.1.107:8055 check
|
||||
|
||||
#backend boudoir-backend
|
||||
# server boudoir 192.168.1.57:2368
|
||||
backend boudoir-backend
|
||||
acl ghost_path path_beg /ghost/
|
||||
acl is_whitelisted src 82.67.3.126/32
|
||||
acl is_lan src 192.168.1.0/24 # Plage LAN (adaptez 192.168.1.0/24 si précis)
|
||||
acl is_lan2 src 192.168.2.0/24 # Plage LAN (adaptez 192.168.1.0/24 si précis)
|
||||
acl is_whitelisted_full src 82.67.3.126/32 192.168.1.0/24 192.168.2.0/24 # Combine
|
||||
acl admin_auth http_auth_group(admin-ghost) is-admin
|
||||
|
||||
# Deny /ghost/ hors IP white
|
||||
http-request deny if ghost_path !is_whitelisted_full
|
||||
server boudoir 192.168.1.57:2368 check
|
||||
|
||||
|
||||
#backend boudoir-backend
|
||||
# server boudoir 192.168.1.107:31723 check
|
||||
|
||||
backend homegit-backend
|
||||
mode http
|
||||
# S'assurer que le header n'est pas supprimé
|
||||
http-response add-header WWW-Authenticate Basic\ realm="Gitea"
|
||||
server homegit 192.168.1.70:3000 check
|
||||
|
||||
backend stats-backend-api
|
||||
server api_stats 192.168.1.58:8080
|
||||
|
||||
backend stats-backend
|
||||
#option forwardfor
|
||||
server stats 192.168.1.58:8081
|
||||
|
||||
|
||||
backend n8n-backend
|
||||
mode http
|
||||
option forwardfor
|
||||
server n8n 192.168.1.56:5678
|
||||
|
||||
backend links-mtb
|
||||
#http-request set-header X-Forwarded-Proto https if { ssl_fc }
|
||||
#http-request set-header X-Forwarded-Proto http if !{ ssl_fc }
|
||||
#http-request set-header X-Forwarded-For %[src]
|
||||
mode http
|
||||
#option forwardfor
|
||||
server links 192.168.1.18:32508 check ssl verify none
|
||||
|
||||
backend hass-backend
|
||||
server hass 192.168.1.18:30250
|
||||
mode http
|
||||
# option forwardfor
|
||||
# http-request add-header X-Forwarded-Proto https
|
||||
# http-request add-header X-Forwarded-Port 443
|
||||
|
||||
backend cms
|
||||
#server cms 192.168.1.101:80
|
||||
acl ghost_path path_beg /ghost/
|
||||
acl is_whitelisted src 82.67.3.126/32
|
||||
acl is_lan src 192.168.1.0/24 # Plage LAN (adaptez 192.168.1.0/24 si précis)
|
||||
acl is_lan2 src 192.168.2.0/24 # Plage LAN (adaptez 192.168.1.0/24 si précis)
|
||||
acl is_whitelisted_full src 82.67.3.126/32 192.168.1.0/24 192.168.2.0/24 # Combine
|
||||
acl admin_auth http_auth_group(admin-ghost) is-admin
|
||||
|
||||
# Deny /ghost/ hors IP white
|
||||
http-request deny if ghost_path !is_whitelisted_full
|
||||
server cms 192.168.1.250:2369
|
||||
|
||||
backend cms2
|
||||
#mode http
|
||||
acl ghost_path path_beg /ghost/
|
||||
acl is_whitelisted src 82.67.3.126/32
|
||||
acl is_lan src 192.168.1.0/24 # Plage LAN (adaptez 192.168.1.0/24 si précis)
|
||||
acl is_lan2 src 192.168.2.0/24 # Plage LAN (adaptez 192.168.1.0/24 si précis)
|
||||
acl is_whitelisted_full src 82.67.3.126/32 192.168.1.0/24 192.168.2.0/24 # Combine
|
||||
acl admin_auth http_auth_group(admin-ghost) is-admin
|
||||
|
||||
# Deny /ghost/ hors IP white
|
||||
http-request deny if ghost_path !is_whitelisted_full
|
||||
|
||||
server ghost_server 192.168.1.55:2368
|
||||
|
||||
backend mattermost
|
||||
server mattermost 192.168.1.112:8065
|
||||
|
||||
|
||||
backend be_letsencrypt
|
||||
server letsencrypt 127.0.0.1:9080
|
||||
#server letsencrypt 127.0.0.1:10001
|
||||
|
||||
backend wiki
|
||||
server wiki 192.168.1.18:32149
|
||||
|
||||
backend postiz-backend
|
||||
mode http
|
||||
balance source
|
||||
http-request add-header X-Forwarded-Proto https if { ssl_fc }
|
||||
# stickiness
|
||||
stick-table type ip size 50k expire 30m
|
||||
stick on src
|
||||
http-reuse safe
|
||||
cookie SERVERID insert indirect nocache
|
||||
default-server inter 10s fastinter 500 fall 2 rise 2
|
||||
# force https
|
||||
acl http ssl_fc,not
|
||||
http-request redirect scheme https if http
|
||||
http-response set-header Strict-Transport-Security max-age=15552000
|
||||
option ssl-hello-chk
|
||||
server postiz 192.168.1.18:32133
|
||||
|
||||
|
||||
backend nextcloud
|
||||
# health checking is DISABLED
|
||||
mode http
|
||||
balance source
|
||||
http-request set-header X-Forwarded-Proto https if { ssl_fc }
|
||||
http-request set-header X-Real-IP %[src]
|
||||
http-request set-header X-Forwarded-For %[src]
|
||||
http-request set-header Host %[req.hdr(host)]
|
||||
# stickiness
|
||||
stick-table type ip size 50k expire 30m
|
||||
stick on src
|
||||
http-reuse safe
|
||||
cookie SERVERID insert indirect nocache
|
||||
default-server inter 10s fastinter 500 fall 2 rise 2
|
||||
# force https
|
||||
acl http ssl_fc,not
|
||||
http-request redirect scheme https if http
|
||||
http-response set-header Strict-Transport-Security max-age=15552000
|
||||
option ssl-hello-chk
|
||||
server nextcloud 192.168.1.13:5080 #ssl verify none
|
||||
option http-server-close
|
||||
option httpclose
|
||||
option forwardfor
|
||||
http-request set-header Connection "upgrade" if { hdr(Upgrade) -i WebSocket }
|
||||
|
||||
backend funkwhale
|
||||
http-request set-header X-Forwarded-Proto https if { ssl_fc }
|
||||
http-request set-header X-Forwarded-Proto http if !{ ssl_fc }
|
||||
http-request set-header X-Forwarded-For %[src]
|
||||
option forwardfor
|
||||
#http-request set-header X-Forwarded-Port %[dst_port]
|
||||
#http-request add-header X-Forwarded-Proto https if { ssl_fc }
|
||||
#http-response add-header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline': img-src 'self' data:; font-src 'self' data:; object-src 'none'; media-src 'self' data:; worker-src 'self';"
|
||||
#http-response add-header Referrer-Policy strict-origin-when-cross-origin
|
||||
#http-response add-header X-Frame-Options SAMEORIGIN
|
||||
#server funkwhale 192.168.1.12:5002
|
||||
server funkwhale 192.168.1.108:5002
|
||||
|
||||
backend per_ip_rates
|
||||
#stick-table type ip size 1m expire 10m store http_req_rate(10s)
|
||||
# Define a stick-table to track request rates per IP
|
||||
stick-table type ip size 1m expire 10m store http_req_rate(10s)
|
||||
|
||||
# Track all requests by source IP
|
||||
http-request track-sc0 src
|
||||
|
||||
# Whitelist IP: 82.67.3.126 (bypass rate limiting)
|
||||
acl is_whitelisted_ip src 82.67.3.126
|
||||
acl is_whitelisted_lan1 src 192.168.1.0/24
|
||||
acl is_whitelisted_lan2 src 192.168.2.0/24
|
||||
|
||||
# Whitelist domain: *.gyozamancave.fr (bypass rate limiting)
|
||||
acl is_whitelisted_domain hdr_end(host) -i gyozamancave.fr
|
||||
|
||||
# Apply rate limiting (10 req/10s) unless whitelisted
|
||||
#http-request deny deny_status 429 if !is_whitelisted_ip !is_whitelisted_domain { sc0_http_req_rate(per_ip_rates) gt 10 }
|
||||
http-request deny deny_status 429 if !is_whitelisted_ip !is_whitelisted_lan1 !is_whitelisted_lan2 !is_whitelisted_domain { sc0_http_req_rate gt 10 }
|
||||
-214
@@ -1,214 +0,0 @@
|
||||
global
|
||||
lua-load /etc/haproxy/cors/lua/lib/cors.lua
|
||||
#log /dev/log local0
|
||||
#log /dev/log local1 notice
|
||||
log 127.0.0.1 local2
|
||||
log-send-hostname
|
||||
chroot /var/lib/haproxy
|
||||
pidfile /var/run/haproxy.pid
|
||||
stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
|
||||
stats timeout 30s
|
||||
maxconn 30000
|
||||
user haproxy
|
||||
group haproxy
|
||||
daemon
|
||||
|
||||
# Default SSL material locations
|
||||
ca-base /etc/ssl/certs
|
||||
crt-base /etc/ssl/private
|
||||
|
||||
# Default ciphers to use on SSL-enabled listening sockets.
|
||||
# For more information, see ciphers(1SSL). This list is from:
|
||||
# https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
|
||||
# An alternative list with additional directives can be obtained from
|
||||
# https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=haproxy
|
||||
#ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
|
||||
#ssl-default-bind-options no-sslv3
|
||||
tune.ssl.default-dh-param 2048
|
||||
# intermediate configuration
|
||||
ssl-default-bind-curves X25519:prime256v1:secp384r1
|
||||
ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305
|
||||
ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
|
||||
ssl-default-bind-options prefer-client-ciphers ssl-min-ver TLSv1.2 no-tls-tickets
|
||||
|
||||
ssl-default-server-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305
|
||||
ssl-default-server-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
|
||||
ssl-default-server-options ssl-min-ver TLSv1.2 no-tls-tickets
|
||||
|
||||
#ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
|
||||
#ssl-default-bind-options prefer-client-ciphers no-sslv3 no-tlsv10 no-tlsv11 no-tls-tickets
|
||||
|
||||
#ssl-default-server-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
|
||||
#ssl-default-server-options no-sslv3 no-tlsv10 no-tlsv11 no-tls-tickets
|
||||
|
||||
|
||||
defaults
|
||||
log global
|
||||
mode http
|
||||
option httplog
|
||||
option dontlognull
|
||||
timeout connect 5000
|
||||
timeout client 600s
|
||||
timeout server 600s
|
||||
errorfile 400 /etc/haproxy/errors/400.http
|
||||
errorfile 403 /etc/haproxy/errors/403.http
|
||||
errorfile 408 /etc/haproxy/errors/408.http
|
||||
errorfile 500 /etc/haproxy/errors/500.http
|
||||
errorfile 502 /etc/haproxy/errors/502.http
|
||||
errorfile 503 /etc/haproxy/errors/503.http
|
||||
errorfile 504 /etc/haproxy/errors/504.http
|
||||
|
||||
|
||||
frontend http_in
|
||||
bind *:80
|
||||
maxconn 500
|
||||
|
||||
acl acl_letsencrypt path_beg /.well-known/acme-challenge/
|
||||
|
||||
redirect scheme https if !acl_letsencrypt !{ ssl_fc }
|
||||
use_backend be_letsencrypt if acl_letsencrypt
|
||||
|
||||
frontend https
|
||||
bind *:443,[::]:443 ssl crt /etc/haproxy/ssl/ strict-sni alpn h2,http/1.1
|
||||
http-request set-header X-Forwarded-Proto https if { ssl_fc }
|
||||
http-request set-header X-Forwarded-Proto http if !{ ssl_fc }
|
||||
http-request set-header X-Forwarded-For %[src]
|
||||
http-request set-header X-Forwarded-For %[src]
|
||||
|
||||
# BEGIN CORS
|
||||
#capture request header origin len 128
|
||||
#chttp-response set-header Access-Control-Allow-Origin "*"
|
||||
#chttp-response set-header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept, Authorization, JSNLog-RequestId, activityId, applicationId, applicationUserId, channelId, senderId, sessionId"
|
||||
#chttp-response set-header Access-Control-Max-Age 3628800
|
||||
#chttp-response set-header Access-Control-Allow-Methods "GET, DELETE, OPTIONS, POST, PUT"
|
||||
# END CORS
|
||||
|
||||
acl cms-host hdr(host) -i mrteddybear.fr
|
||||
acl bunkerweb-host hdr(host) -i bunkerweb.gyozamancave.fr
|
||||
acl rss-host hdr(host) -i rss.gyozamancave.fr
|
||||
acl mattermost-host hdr(host) -i mattermost.gyozamancave.fr
|
||||
acl jellyfin-host hdr(host) -i jellyfin.gyozamancave.fr
|
||||
acl nextcloud-host hdr(host) -i nextcloud.gyozamancave.fr
|
||||
acl funkwhale-host hdr(host) -i funkwhale.gyozamancave.fr
|
||||
acl wiki-host hdr(host) -i wiki.gyozamancave.fr
|
||||
acl hass-host hdr(host) -i hass.gyozamancave.fr
|
||||
acl postiz-host hdr(host) -i postiz.gyozamancave.fr
|
||||
acl n8n-host hdr(host) -i n8n.gyozamancave.fr
|
||||
|
||||
use_backend cms if cms-host
|
||||
use_backend bunkerweb if bunkerweb-host
|
||||
use_backend rss if rss-host
|
||||
use_backend mattermost if mattermost-host
|
||||
use_backend jellyfin if jellyfin-host
|
||||
use_backend nextcloud if nextcloud-host
|
||||
use_backend funkwhale if funkwhale-host
|
||||
use_backend wiki if wiki-host
|
||||
use_backend hass-backend if hass-host
|
||||
use_backend postiz-backend if postiz-host
|
||||
use_backend n8n-backend if n8n-host
|
||||
|
||||
|
||||
backend hass-backend
|
||||
server hass 192.168.1.130:8123
|
||||
mode http
|
||||
#option forwardfor
|
||||
#http-request add-header X-Forwarded-Proto https
|
||||
#http-request add-header X-Forwarded-Port 443
|
||||
|
||||
backend cms
|
||||
#server cms 192.168.1.101:80
|
||||
server cms 192.168.1.250:2369
|
||||
|
||||
backend bunkerweb
|
||||
http-request set-header X-Forwarded-Proto https if { ssl_fc }
|
||||
http-request set-header X-Forwarded-Proto http if !{ ssl_fc }
|
||||
http-request set-header X-Forwarded-For %[src]
|
||||
option forwardfor
|
||||
server waf 192.168.1.18:32287
|
||||
#server waf 192.168.1.18:30761
|
||||
|
||||
backend mattermost
|
||||
server mattermost 192.168.1.112:8065
|
||||
|
||||
|
||||
backend be_letsencrypt
|
||||
server letsencrypt 127.0.0.1:9080
|
||||
#server letsencrypt 127.0.0.1:10001
|
||||
|
||||
backend jellyfin
|
||||
server jellyfin 192.168.1.103:8096
|
||||
|
||||
|
||||
backend wiki
|
||||
server wiki 192.168.1.18:32149
|
||||
|
||||
backend postiz-backend
|
||||
#mode http
|
||||
#balance source
|
||||
#http-request add-header X-Forwarded-Proto https if { ssl_fc }
|
||||
#option forwardfor except 192.168.1.18/24
|
||||
# # stickiness
|
||||
#stick-table type ip size 50k expire 30m
|
||||
#stick on src
|
||||
#http-reuse safe
|
||||
#cookie SERVERID insert indirect nocache
|
||||
#default-server inter 10s fastinter 500 fall 2 rise 2
|
||||
# # force https
|
||||
#acl http ssl_fc,not
|
||||
#http-request redirect scheme https if http
|
||||
mode http
|
||||
balance source
|
||||
http-request add-header X-Forwarded-Proto https if { ssl_fc }
|
||||
# stickiness
|
||||
stick-table type ip size 50k expire 30m
|
||||
stick on src
|
||||
http-reuse safe
|
||||
cookie SERVERID insert indirect nocache
|
||||
default-server inter 10s fastinter 500 fall 2 rise 2
|
||||
# force https
|
||||
acl http ssl_fc,not
|
||||
http-request redirect scheme https if http
|
||||
http-response set-header Strict-Transport-Security max-age=15552000
|
||||
option ssl-hello-chk
|
||||
server postiz 192.168.1.18:32133
|
||||
|
||||
|
||||
backend nextcloud
|
||||
# health checking is DISABLED
|
||||
mode http
|
||||
balance source
|
||||
http-request add-header X-Forwarded-Proto https if { ssl_fc }
|
||||
# stickiness
|
||||
stick-table type ip size 50k expire 30m
|
||||
stick on src
|
||||
http-reuse safe
|
||||
cookie SERVERID insert indirect nocache
|
||||
default-server inter 10s fastinter 500 fall 2 rise 2
|
||||
# force https
|
||||
acl http ssl_fc,not
|
||||
http-request redirect scheme https if http
|
||||
http-response set-header Strict-Transport-Security max-age=15552000
|
||||
option ssl-hello-chk
|
||||
server nextcloud 192.168.1.13:5080 #check ssl #verify none
|
||||
|
||||
backend rss
|
||||
mode http
|
||||
enabled
|
||||
server rss 192.168.1.8:8080
|
||||
|
||||
backend n8n-backend
|
||||
server n8n 192.168.1.18:32120
|
||||
|
||||
|
||||
backend funkwhale
|
||||
http-request set-header X-Forwarded-Proto https if { ssl_fc }
|
||||
http-request set-header X-Forwarded-Proto http if !{ ssl_fc }
|
||||
http-request set-header X-Forwarded-For %[src]
|
||||
option forwardfor
|
||||
#http-request set-header X-Forwarded-Port %[dst_port]
|
||||
#http-request add-header X-Forwarded-Proto https if { ssl_fc }
|
||||
#http-response add-header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline': img-src 'self' data:; font-src 'self' data:; object-src 'none'; media-src 'self' data:; worker-src 'self';"
|
||||
#http-response add-header Referrer-Policy strict-origin-when-cross-origin
|
||||
#http-response add-header X-Frame-Options SAMEORIGIN
|
||||
#server funkwhale 192.168.1.12:5002
|
||||
server funkwhale 192.168.1.108:5002
|
||||
@@ -1,90 +0,0 @@
|
||||
#---------------------------------------------------------------------
|
||||
# Example configuration for a possible web application. See the
|
||||
# full configuration options online.
|
||||
#
|
||||
# https://www.haproxy.org/download/1.8/doc/configuration.txt
|
||||
#
|
||||
#---------------------------------------------------------------------
|
||||
|
||||
#---------------------------------------------------------------------
|
||||
# Global settings
|
||||
#---------------------------------------------------------------------
|
||||
global
|
||||
# to have these messages end up in /var/log/haproxy.log you will
|
||||
# need to:
|
||||
#
|
||||
# 1) configure syslog to accept network log events. This is done
|
||||
# by adding the '-r' option to the SYSLOGD_OPTIONS in
|
||||
# /etc/sysconfig/syslog
|
||||
#
|
||||
# 2) configure local2 events to go to the /var/log/haproxy.log
|
||||
# file. A line like the following can be added to
|
||||
# /etc/sysconfig/syslog
|
||||
#
|
||||
# local2.* /var/log/haproxy.log
|
||||
#
|
||||
log 127.0.0.1 local2
|
||||
|
||||
chroot /var/lib/haproxy
|
||||
pidfile /var/run/haproxy.pid
|
||||
maxconn 4000
|
||||
user haproxy
|
||||
group haproxy
|
||||
daemon
|
||||
|
||||
# turn on stats unix socket
|
||||
stats socket /var/lib/haproxy/stats
|
||||
|
||||
# utilize system-wide crypto-policies
|
||||
ssl-default-bind-ciphers PROFILE=SYSTEM
|
||||
ssl-default-server-ciphers PROFILE=SYSTEM
|
||||
|
||||
#---------------------------------------------------------------------
|
||||
# common defaults that all the 'listen' and 'backend' sections will
|
||||
# use if not designated in their block
|
||||
#---------------------------------------------------------------------
|
||||
defaults
|
||||
mode http
|
||||
log global
|
||||
option httplog
|
||||
option dontlognull
|
||||
option http-server-close
|
||||
option forwardfor except 127.0.0.0/8
|
||||
option redispatch
|
||||
retries 3
|
||||
timeout http-request 10s
|
||||
timeout queue 1m
|
||||
timeout connect 10s
|
||||
timeout client 1m
|
||||
timeout server 1m
|
||||
timeout http-keep-alive 10s
|
||||
timeout check 10s
|
||||
maxconn 3000
|
||||
|
||||
#---------------------------------------------------------------------
|
||||
# main frontend which proxys to the backends
|
||||
#---------------------------------------------------------------------
|
||||
frontend main
|
||||
bind *:5000
|
||||
acl url_static path_beg -i /static /images /javascript /stylesheets
|
||||
acl url_static path_end -i .jpg .gif .png .css .js
|
||||
|
||||
use_backend static if url_static
|
||||
default_backend app
|
||||
|
||||
#---------------------------------------------------------------------
|
||||
# static backend for serving up images, stylesheets and such
|
||||
#---------------------------------------------------------------------
|
||||
backend static
|
||||
balance roundrobin
|
||||
server static 127.0.0.1:4331 check
|
||||
|
||||
#---------------------------------------------------------------------
|
||||
# round robin balancing between the various backends
|
||||
#---------------------------------------------------------------------
|
||||
backend app
|
||||
balance roundrobin
|
||||
server app1 127.0.0.1:5001 check
|
||||
server app2 127.0.0.1:5002 check
|
||||
server app3 127.0.0.1:5003 check
|
||||
server app4 127.0.0.1:5004 check
|
||||
@@ -1,20 +0,0 @@
|
||||
HTTP/1.0 400 Bad request
|
||||
Cache-Control: no-cache
|
||||
Connection: close
|
||||
Content-Type: text/html
|
||||
|
||||
<html>
|
||||
<body>
|
||||
<style>
|
||||
html {
|
||||
background-color: black;
|
||||
}
|
||||
|
||||
img {
|
||||
display: block;
|
||||
margin: 0px auto;
|
||||
}
|
||||
</style>
|
||||
<img src="https://http.cat/400.jpg">
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,20 +0,0 @@
|
||||
HTTP/1.0 401 Unauthorized
|
||||
Cache-Control: no-cache
|
||||
Connection: close
|
||||
Content-Type: text/html
|
||||
|
||||
<html>
|
||||
<body>
|
||||
<style>
|
||||
html {
|
||||
background-color: black;
|
||||
}
|
||||
|
||||
img {
|
||||
display: block;
|
||||
margin: 0px auto;
|
||||
}
|
||||
</style>
|
||||
<img src="https://http.cat/401.jpg">
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,20 +0,0 @@
|
||||
HTTP/1.0 403 Forbidden
|
||||
Cache-Control: no-cache
|
||||
Connection: close
|
||||
Content-Type: text/html
|
||||
|
||||
<html>
|
||||
<body>
|
||||
<style>
|
||||
html {
|
||||
background-color: black;
|
||||
}
|
||||
|
||||
img {
|
||||
display: block;
|
||||
margin: 0px auto;
|
||||
}
|
||||
</style>
|
||||
<img src="https://http.cat/403.jpg">
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,20 +0,0 @@
|
||||
HTTP/1.1 404 Not Found
|
||||
Cache-Control: no-cache
|
||||
Connection: close
|
||||
Content-Type: text/html
|
||||
|
||||
<html>
|
||||
<body>
|
||||
<style>
|
||||
html {
|
||||
background-color: black;
|
||||
}
|
||||
|
||||
img {
|
||||
display: block;
|
||||
margin: 0px auto;
|
||||
}
|
||||
</style>
|
||||
<img src="https://http.cat/404.jpg">
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,20 +0,0 @@
|
||||
HTTP/1.0 408 Request Time-out
|
||||
Cache-Control: no-cache
|
||||
Connection: close
|
||||
Content-Type: text/html
|
||||
|
||||
<html>
|
||||
<body>
|
||||
<style>
|
||||
html {
|
||||
background-color: black;
|
||||
}
|
||||
|
||||
img {
|
||||
display: block;
|
||||
margin: 0px auto;
|
||||
}
|
||||
</style>
|
||||
<img src="https://http.cat/408.jpg">
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,20 +0,0 @@
|
||||
HTTP/1.0 500 Server Error
|
||||
Cache-Control: no-cache
|
||||
Connection: close
|
||||
Content-Type: text/html
|
||||
|
||||
<html>
|
||||
<body>
|
||||
<style>
|
||||
html {
|
||||
background-color: black;
|
||||
}
|
||||
|
||||
img {
|
||||
display: block;
|
||||
margin: 0px auto;
|
||||
}
|
||||
</style>
|
||||
<img src="https://http.cat/500.jpg">
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,20 +0,0 @@
|
||||
HTTP/1.0 502 Bad Gateway
|
||||
Cache-Control: no-cache
|
||||
Connection: close
|
||||
Content-Type: text/html
|
||||
|
||||
<html>
|
||||
<body>
|
||||
<style>
|
||||
html {
|
||||
background-color: black;
|
||||
}
|
||||
|
||||
img {
|
||||
display: block;
|
||||
margin: 0px auto;
|
||||
}
|
||||
</style>
|
||||
<img src="https://http.cat/502.jpg">
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,20 +0,0 @@
|
||||
HTTP/1.0 503 Service Unavailable
|
||||
Cache-Control: no-cache
|
||||
Connection: close
|
||||
Content-Type: text/html
|
||||
|
||||
<html>
|
||||
<body>
|
||||
<style>
|
||||
html {
|
||||
background-color: black;
|
||||
}
|
||||
|
||||
img {
|
||||
display: block;
|
||||
margin: 0px auto;
|
||||
}
|
||||
</style>
|
||||
<img src="https://http.cat/503.jpg">
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,20 +0,0 @@
|
||||
HTTP/1.0 504 Gateway Time-out
|
||||
Cache-Control: no-cache
|
||||
Connection: close
|
||||
Content-Type: text/html
|
||||
|
||||
<html>
|
||||
<body>
|
||||
<style>
|
||||
html {
|
||||
background-color: black;
|
||||
}
|
||||
|
||||
img {
|
||||
display: block;
|
||||
margin: 0px auto;
|
||||
}
|
||||
</style>
|
||||
<img src="https://http.cat/504.jpg">
|
||||
</body>
|
||||
</html>
|
||||
Generated
+10468
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"name": "n8n-pilot",
|
||||
"version": "1.0.0",
|
||||
"main": "expo-router/entry",
|
||||
"scripts": {
|
||||
"start": "expo start",
|
||||
"android": "expo start --android",
|
||||
"ios": "expo start --ios",
|
||||
"web": "expo start --web"
|
||||
},
|
||||
"dependencies": {
|
||||
"axios": "^1.16.1",
|
||||
"date-fns": "^4.2.1",
|
||||
"expo": "~54.0.33",
|
||||
"expo-constants": "~18.0.13",
|
||||
"expo-linking": "~8.0.12",
|
||||
"expo-local-authentication": "~17.0.8",
|
||||
"expo-router": "~6.0.23",
|
||||
"expo-secure-store": "~15.0.8",
|
||||
"expo-splash-screen": "~31.0.13",
|
||||
"expo-status-bar": "~3.0.9",
|
||||
"react": "19.1.0",
|
||||
"react-dom": "19.1.0",
|
||||
"react-native": "0.81.5",
|
||||
"react-native-gesture-handler": "~2.28.0",
|
||||
"react-native-paper": "^5.15.2",
|
||||
"react-native-reanimated": "~4.1.1",
|
||||
"react-native-safe-area-context": "~5.6.0",
|
||||
"react-native-screens": "~4.16.0",
|
||||
"react-native-web": "^0.21.0",
|
||||
"react-native-worklets": "0.5.1",
|
||||
"zustand": "^5.0.13"
|
||||
},
|
||||
"private": true,
|
||||
"devDependencies": {
|
||||
"@types/react": "~19.1.10",
|
||||
"@types/react-native": "^0.72.8",
|
||||
"babel-preset-expo": "~54.0.10",
|
||||
"typescript": "~5.9.2"
|
||||
}
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
#!/bin/bash
|
||||
# Loop through all Let's Encrypt certificates
|
||||
for CERTIFICATE in `find /etc/letsencrypt/live/* -type d`; do
|
||||
CERTIFICATE=`basename $CERTIFICATE`
|
||||
# Combine certificate and private key to single file
|
||||
cat /etc/letsencrypt/live/$CERTIFICATE/fullchain.pem /etc/letsencrypt/live/$CERTIFICATE/privkey.pem > /etc/haproxy/ssl/$CERTIFICATE.pem
|
||||
done
|
||||
@@ -1,6 +0,0 @@
|
||||
#!/bin/bash
|
||||
#certbot renew --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 --post-hook "/etc/haproxy/prepareLetsEncryptCertificates.sh && systemctl reload haproxy.service" --quiet
|
||||
certbot renew --dns-ovh --dns-ovh-credentials "/etc/letsencrypt/ovh/ovh.ini" --quiet --post-hook "/etc/haproxy/prepareLetsEncryptCertificates.sh && systemctl reload haproxy.service" -vvv
|
||||
#certbot renew --dns-ovh --dns-ovh-credentials "/etc/letsencrypt/ovh/ovh.ini" --post-hook "/etc/haproxy/prepareLetsEncryptCertificates.sh && systemctl reload haproxy.service" --force-renewal
|
||||
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
import axios, {
|
||||
AxiosInstance,
|
||||
InternalAxiosRequestConfig,
|
||||
AxiosResponse,
|
||||
AxiosError,
|
||||
} from 'axios';
|
||||
import * as SecureStore from 'expo-secure-store';
|
||||
import { handleError } from '../utils/errorHandler';
|
||||
|
||||
/**
|
||||
* Clés de stockage sécurisé Android Keystore via expo-secure-store.
|
||||
* Ces constantes sont les seuls points de référence aux secrets dans toute l'app.
|
||||
*/
|
||||
export const SECURE_STORE_KEYS = {
|
||||
BASE_URL: 'n8n_base_url',
|
||||
API_KEY: 'n8n_api_key',
|
||||
APP_TOKEN: 'n8n_app_token',
|
||||
BIOMETRIC_ENABLED: 'n8n_biometric_enabled',
|
||||
} as const;
|
||||
|
||||
/**
|
||||
* Crée et configure l'instance Axios centrale de l'application.
|
||||
*
|
||||
* Architecture de sécurité :
|
||||
* - Les credentials (API key, app token) ne sont JAMAIS embarqués dans le bundle.
|
||||
* - Ils sont récupérés dynamiquement depuis le secure store à chaque requête.
|
||||
* - La base URL est également stockée dans le secure store, pas en dur.
|
||||
*/
|
||||
const createApiClient = (): AxiosInstance => {
|
||||
const client = axios.create({
|
||||
timeout: 15_000,
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
});
|
||||
|
||||
/**
|
||||
* Intercepteur de requête sortante.
|
||||
* Lit baseURL, X-N8N-API-KEY et X-App-Token depuis le secure store
|
||||
* et les injecte dans chaque requête avant envoi.
|
||||
* Aucune valeur sensible ne transite par les variables d'environnement du bundle.
|
||||
*/
|
||||
client.interceptors.request.use(
|
||||
async (config: InternalAxiosRequestConfig): Promise<InternalAxiosRequestConfig> => {
|
||||
const [baseUrl, apiKey, appToken] = await Promise.all([
|
||||
SecureStore.getItemAsync(SECURE_STORE_KEYS.BASE_URL),
|
||||
SecureStore.getItemAsync(SECURE_STORE_KEYS.API_KEY),
|
||||
SecureStore.getItemAsync(SECURE_STORE_KEYS.APP_TOKEN),
|
||||
]);
|
||||
|
||||
if (baseUrl) config.baseURL = baseUrl;
|
||||
if (apiKey) config.headers.set('X-N8N-API-KEY', apiKey);
|
||||
if (appToken) config.headers.set('X-App-Token', appToken);
|
||||
|
||||
return config;
|
||||
},
|
||||
(error: AxiosError) => Promise.reject(error)
|
||||
);
|
||||
|
||||
/**
|
||||
* Intercepteur de réponse.
|
||||
* Les erreurs HTTP sont transmises à errorHandler qui affiche un toast.
|
||||
* L'erreur est re-rejetée pour que les appelants puissent aussi réagir si besoin.
|
||||
* Aucun secret n'est loggué ici.
|
||||
*/
|
||||
client.interceptors.response.use(
|
||||
(response: AxiosResponse) => response,
|
||||
(error: AxiosError) => {
|
||||
handleError(error);
|
||||
return Promise.reject(error);
|
||||
}
|
||||
);
|
||||
|
||||
return client;
|
||||
};
|
||||
|
||||
/** Instance Axios unique partagée dans toute l'application */
|
||||
export const apiClient = createApiClient();
|
||||
@@ -0,0 +1,109 @@
|
||||
import { apiClient } from './client';
|
||||
import { ApiListResponse } from './workflows';
|
||||
|
||||
/** Ensemble des statuts possibles pour une exécution n8n */
|
||||
export type ExecutionStatus = 'success' | 'error' | 'waiting' | 'running' | 'canceled';
|
||||
|
||||
/** Modes de déclenchement d'une exécution */
|
||||
export type ExecutionMode = 'manual' | 'trigger' | 'webhook' | 'internal' | 'retry';
|
||||
|
||||
/**
|
||||
* Données d'exécution d'un nœud individuel.
|
||||
* Disponibles uniquement dans la réponse détaillée (GET /executions/:id).
|
||||
*/
|
||||
export interface NodeExecutionData {
|
||||
startTime: number;
|
||||
executionTime: number;
|
||||
source: unknown[];
|
||||
data?: Record<string, unknown>;
|
||||
error?: {
|
||||
message: string;
|
||||
name?: string;
|
||||
stack?: string;
|
||||
};
|
||||
}
|
||||
|
||||
/** Données complètes d'un résultat d'exécution */
|
||||
export interface ExecutionResultData {
|
||||
resultData: {
|
||||
/** Map nœud → tableau des runs de ce nœud */
|
||||
runData: Record<string, NodeExecutionData[]>;
|
||||
lastNodeExecuted?: string;
|
||||
/** Erreur globale de l'exécution (distinct des erreurs par nœud) */
|
||||
error?: {
|
||||
message: string;
|
||||
name: string;
|
||||
stack?: string;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Représente une exécution telle que retournée par l'API n8n v1.
|
||||
* Le champ `data` n'est disponible que dans la réponse de GET /executions/:id.
|
||||
*/
|
||||
export interface Execution {
|
||||
id: string;
|
||||
finished: boolean;
|
||||
mode: ExecutionMode;
|
||||
/** ID de l'exécution originale si c'est un retry */
|
||||
retryOf?: string;
|
||||
retrySuccessId?: string;
|
||||
startedAt: string;
|
||||
stoppedAt?: string;
|
||||
workflowId: string;
|
||||
workflowName?: string;
|
||||
status: ExecutionStatus;
|
||||
/** Présent uniquement via GET /executions/:id */
|
||||
data?: ExecutionResultData;
|
||||
}
|
||||
|
||||
/** Paramètres de filtrage acceptés par l'endpoint GET /executions */
|
||||
export interface FetchExecutionsParams {
|
||||
/** Nombre max de résultats à retourner */
|
||||
limit?: number;
|
||||
/** Filtre par statut d'exécution */
|
||||
status?: ExecutionStatus;
|
||||
/** Filtre par identifiant de workflow */
|
||||
workflowId?: string;
|
||||
/** Curseur opaque de pagination (valeur nextCursor de la réponse précédente) */
|
||||
cursor?: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* Récupère l'historique des exécutions avec filtres optionnels.
|
||||
*
|
||||
* @param params - Filtres : limit, status, workflowId, cursor
|
||||
* @returns Réponse paginée avec les exécutions et le curseur suivant
|
||||
*/
|
||||
export const fetchExecutions = async (
|
||||
params: FetchExecutionsParams = {}
|
||||
): Promise<ApiListResponse<Execution>> => {
|
||||
const response = await apiClient.get<ApiListResponse<Execution>>('/api/v1/executions', {
|
||||
params,
|
||||
});
|
||||
return response.data;
|
||||
};
|
||||
|
||||
/**
|
||||
* Récupère les logs complets d'une exécution spécifique.
|
||||
* Inclut les données de chaque nœud (champ `data`), absent dans la liste.
|
||||
*
|
||||
* @param id - Identifiant de l'exécution
|
||||
* @returns Exécution complète avec données de nœuds
|
||||
*/
|
||||
export const fetchExecutionById = async (id: string): Promise<Execution> => {
|
||||
const response = await apiClient.get<Execution>(`/api/v1/executions/${id}`, {
|
||||
params: { includeData: true },
|
||||
});
|
||||
return response.data;
|
||||
};
|
||||
|
||||
/**
|
||||
* Supprime une exécution de l'historique n8n.
|
||||
*
|
||||
* @param id - Identifiant de l'exécution à supprimer
|
||||
*/
|
||||
export const deleteExecution = async (id: string): Promise<void> => {
|
||||
await apiClient.delete(`/api/v1/executions/${id}`);
|
||||
};
|
||||
@@ -0,0 +1,112 @@
|
||||
import { apiClient } from './client';
|
||||
|
||||
/** Représente un nœud dans un workflow n8n */
|
||||
export interface WorkflowNode {
|
||||
id: string;
|
||||
name: string;
|
||||
type: string;
|
||||
position: [number, number];
|
||||
parameters: Record<string, unknown>;
|
||||
typeVersion?: number;
|
||||
}
|
||||
|
||||
/** Tag associé à un workflow */
|
||||
export interface WorkflowTag {
|
||||
id: string;
|
||||
name: string;
|
||||
createdAt: string;
|
||||
updatedAt: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* Représente un workflow complet tel que retourné par l'API n8n v1.
|
||||
* Les champs `nodes` et `connections` sont présents dans les réponses détaillées.
|
||||
*/
|
||||
export interface Workflow {
|
||||
id: string;
|
||||
name: string;
|
||||
active: boolean;
|
||||
createdAt: string;
|
||||
updatedAt: string;
|
||||
nodes: WorkflowNode[];
|
||||
connections: Record<string, unknown>;
|
||||
settings?: Record<string, unknown>;
|
||||
tags?: WorkflowTag[];
|
||||
}
|
||||
|
||||
/**
|
||||
* Réponse paginée standard de l'API n8n.
|
||||
* nextCursor est null si on est sur la dernière page.
|
||||
*/
|
||||
export interface ApiListResponse<T> {
|
||||
data: T[];
|
||||
nextCursor: string | null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Récupère la liste complète des workflows de l'instance n8n.
|
||||
*
|
||||
* @returns Tableau de tous les workflows (actifs et inactifs)
|
||||
* @throws AxiosError — géré par l'intercepteur, remonte via errorHandler
|
||||
*/
|
||||
export const fetchWorkflows = async (): Promise<Workflow[]> => {
|
||||
const response = await apiClient.get<ApiListResponse<Workflow>>('/api/v1/workflows');
|
||||
return response.data.data;
|
||||
};
|
||||
|
||||
/**
|
||||
* Récupère le détail complet d'un workflow, incluant ses nœuds et connexions.
|
||||
*
|
||||
* @param id - Identifiant du workflow
|
||||
* @returns Workflow avec tous ses détails
|
||||
*/
|
||||
export const fetchWorkflowById = async (id: string): Promise<Workflow> => {
|
||||
const response = await apiClient.get<Workflow>(`/api/v1/workflows/${id}`);
|
||||
return response.data;
|
||||
};
|
||||
|
||||
/**
|
||||
* Active un workflow : il répondra désormais à ses déclencheurs.
|
||||
*
|
||||
* @param id - Identifiant du workflow à activer
|
||||
* @returns Workflow mis à jour avec active = true
|
||||
*/
|
||||
export const activateWorkflow = async (id: string): Promise<Workflow> => {
|
||||
const response = await apiClient.post<Workflow>(`/api/v1/workflows/${id}/activate`);
|
||||
return response.data;
|
||||
};
|
||||
|
||||
/**
|
||||
* Désactive un workflow : ses déclencheurs sont mis en veille.
|
||||
*
|
||||
* @param id - Identifiant du workflow à désactiver
|
||||
* @returns Workflow mis à jour avec active = false
|
||||
*/
|
||||
export const deactivateWorkflow = async (id: string): Promise<Workflow> => {
|
||||
const response = await apiClient.post<Workflow>(`/api/v1/workflows/${id}/deactivate`);
|
||||
return response.data;
|
||||
};
|
||||
|
||||
/** Paramètres optionnels pour le déclenchement manuel d'un workflow */
|
||||
export interface RunWorkflowParams {
|
||||
/** Données injectées dans le nœud de démarrage manuel */
|
||||
workflowData?: Record<string, unknown>;
|
||||
}
|
||||
|
||||
/**
|
||||
* Déclenche manuellement l'exécution d'un workflow.
|
||||
*
|
||||
* @param id - Identifiant du workflow à déclencher
|
||||
* @param params - Données optionnelles d'entrée
|
||||
* @returns Identifiant de l'exécution créée
|
||||
*/
|
||||
export const runWorkflow = async (
|
||||
id: string,
|
||||
params?: RunWorkflowParams
|
||||
): Promise<{ executionId: string }> => {
|
||||
const response = await apiClient.post<{ executionId: string }>(
|
||||
`/api/v1/workflows/${id}/run`,
|
||||
params ?? {}
|
||||
);
|
||||
return response.data;
|
||||
};
|
||||
@@ -0,0 +1,107 @@
|
||||
import React from 'react';
|
||||
import { View, StyleSheet } from 'react-native';
|
||||
import { Card, Text, IconButton, useTheme } from 'react-native-paper';
|
||||
import { Execution } from '../api/executions';
|
||||
import StatusBadge from './StatusBadge';
|
||||
import { formatShortDate, formatDuration, formatMode } from '../utils/formatters';
|
||||
|
||||
interface ExecutionCardProps {
|
||||
execution: Execution;
|
||||
/**
|
||||
* Navigue vers les logs complets de cette exécution.
|
||||
* Déclenche router.push('/execution/:id') dans ExecutionsScreen.
|
||||
*/
|
||||
onViewLogs: (id: string) => void;
|
||||
/**
|
||||
* Supprime l'exécution via le hook useExecutions.
|
||||
*/
|
||||
onDelete: (id: string) => void;
|
||||
}
|
||||
|
||||
/**
|
||||
* Carte représentant une exécution dans la liste historique.
|
||||
* Affiche : nom du workflow, badge de statut, mode de déclenchement, durée et date.
|
||||
* Les actions (logs, suppression) sont déléguées aux callbacks.
|
||||
*/
|
||||
const ExecutionCard: React.FC<ExecutionCardProps> = ({ execution, onViewLogs, onDelete }) => {
|
||||
const theme = useTheme();
|
||||
|
||||
return (
|
||||
<Card style={[styles.card, { backgroundColor: theme.colors.surface }]}>
|
||||
<Card.Content>
|
||||
{/* En-tête : nom du workflow et badge de statut */}
|
||||
<View style={styles.header}>
|
||||
<Text
|
||||
variant="titleSmall"
|
||||
numberOfLines={1}
|
||||
style={[styles.workflowName, { color: theme.colors.onSurface }]}
|
||||
>
|
||||
{execution.workflowName ?? `Workflow ${execution.workflowId}`}
|
||||
</Text>
|
||||
<StatusBadge status={execution.status} size="small" />
|
||||
</View>
|
||||
|
||||
{/* Métadonnées : mode de déclenchement, durée, date */}
|
||||
<View style={styles.meta}>
|
||||
<Text variant="bodySmall" style={{ color: theme.colors.onSurfaceVariant }}>
|
||||
{formatMode(execution.mode)}
|
||||
</Text>
|
||||
<Text variant="bodySmall" style={{ color: theme.colors.onSurfaceVariant }}>
|
||||
{formatDuration(execution.startedAt, execution.stoppedAt)}
|
||||
</Text>
|
||||
<Text variant="bodySmall" style={{ color: theme.colors.onSurfaceVariant }}>
|
||||
{formatShortDate(execution.startedAt)}
|
||||
</Text>
|
||||
</View>
|
||||
</Card.Content>
|
||||
|
||||
{/* Actions : consulter les logs et supprimer */}
|
||||
<Card.Actions style={styles.actions}>
|
||||
<IconButton
|
||||
icon="text-box-outline"
|
||||
size={20}
|
||||
iconColor={theme.colors.primary}
|
||||
onPress={() => onViewLogs(execution.id)}
|
||||
accessibilityLabel="Voir les logs de cette exécution"
|
||||
/>
|
||||
<IconButton
|
||||
icon="delete-outline"
|
||||
size={20}
|
||||
iconColor={theme.colors.error}
|
||||
onPress={() => onDelete(execution.id)}
|
||||
accessibilityLabel="Supprimer cette exécution"
|
||||
/>
|
||||
</Card.Actions>
|
||||
</Card>
|
||||
);
|
||||
};
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
card: {
|
||||
marginHorizontal: 16,
|
||||
marginVertical: 5,
|
||||
elevation: 1,
|
||||
},
|
||||
header: {
|
||||
flexDirection: 'row',
|
||||
alignItems: 'center',
|
||||
justifyContent: 'space-between',
|
||||
marginBottom: 6,
|
||||
},
|
||||
workflowName: {
|
||||
flex: 1,
|
||||
marginRight: 8,
|
||||
fontWeight: '500',
|
||||
},
|
||||
meta: {
|
||||
flexDirection: 'row',
|
||||
justifyContent: 'space-between',
|
||||
},
|
||||
actions: {
|
||||
justifyContent: 'flex-end',
|
||||
paddingRight: 4,
|
||||
paddingBottom: 2,
|
||||
},
|
||||
});
|
||||
|
||||
export default ExecutionCard;
|
||||
@@ -0,0 +1,91 @@
|
||||
import React, { useEffect, useRef } from 'react';
|
||||
import { View, Animated, StyleSheet, ViewStyle } from 'react-native';
|
||||
|
||||
interface SkeletonItemProps {
|
||||
width?: number | `${number}%`;
|
||||
height?: number;
|
||||
borderRadius?: number;
|
||||
style?: ViewStyle;
|
||||
}
|
||||
|
||||
/**
|
||||
* Bloc de squelette animé avec effet de pulsation (shimmer).
|
||||
* Composant interne utilisé par SkeletonLoader pour construire les cartes placeholder.
|
||||
*/
|
||||
const SkeletonItem: React.FC<SkeletonItemProps> = ({
|
||||
width = '100%',
|
||||
height = 16,
|
||||
borderRadius = 4,
|
||||
style,
|
||||
}) => {
|
||||
const opacity = useRef(new Animated.Value(0.3)).current;
|
||||
|
||||
useEffect(() => {
|
||||
/** Boucle d'animation : alterne entre 30% et 70% d'opacité */
|
||||
const animation = Animated.loop(
|
||||
Animated.sequence([
|
||||
Animated.timing(opacity, {
|
||||
toValue: 0.7,
|
||||
duration: 800,
|
||||
useNativeDriver: true,
|
||||
}),
|
||||
Animated.timing(opacity, {
|
||||
toValue: 0.3,
|
||||
duration: 800,
|
||||
useNativeDriver: true,
|
||||
}),
|
||||
])
|
||||
);
|
||||
animation.start();
|
||||
return () => animation.stop();
|
||||
}, [opacity]);
|
||||
|
||||
return (
|
||||
<Animated.View
|
||||
style={[
|
||||
styles.skeleton,
|
||||
{ width: width as number, height, borderRadius, opacity },
|
||||
style,
|
||||
]}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
interface SkeletonLoaderProps {
|
||||
/** Nombre de cartes placeholder à afficher pendant le chargement initial */
|
||||
count?: number;
|
||||
}
|
||||
|
||||
/**
|
||||
* Affiche des cartes placeholder animées pendant le chargement des données.
|
||||
* Simule la structure d'une WorkflowCard/ExecutionCard pour éviter le layout shift
|
||||
* et indiquer à l'utilisateur que du contenu arrive.
|
||||
*/
|
||||
const SkeletonLoader: React.FC<SkeletonLoaderProps> = ({ count = 5 }) => {
|
||||
return (
|
||||
<>
|
||||
{Array.from({ length: count }).map((_, index) => (
|
||||
<View key={index} style={styles.card}>
|
||||
<SkeletonItem width="60%" height={18} style={{ marginBottom: 8 }} />
|
||||
<SkeletonItem width="85%" height={12} style={{ marginBottom: 6 }} />
|
||||
<SkeletonItem width="40%" height={12} />
|
||||
</View>
|
||||
))}
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
card: {
|
||||
backgroundColor: '#1E1E1E',
|
||||
marginHorizontal: 16,
|
||||
marginVertical: 6,
|
||||
padding: 16,
|
||||
borderRadius: 12,
|
||||
},
|
||||
skeleton: {
|
||||
backgroundColor: '#2C2C2C',
|
||||
},
|
||||
});
|
||||
|
||||
export default SkeletonLoader;
|
||||
@@ -0,0 +1,69 @@
|
||||
import React from 'react';
|
||||
import { View, StyleSheet } from 'react-native';
|
||||
import { Text } from 'react-native-paper';
|
||||
import { ExecutionStatus } from '../api/executions';
|
||||
import { formatStatus } from '../utils/formatters';
|
||||
|
||||
/**
|
||||
* Couleurs de fond des badges — optimisées pour le thème sombre MD3.
|
||||
* Les teintes foncées gardent le contraste sans agresser l'œil.
|
||||
*/
|
||||
const STATUS_BG_COLORS: Record<ExecutionStatus, string> = {
|
||||
success: '#1B5E20',
|
||||
error: '#7F0000',
|
||||
waiting: '#E65100',
|
||||
running: '#0D47A1',
|
||||
canceled: '#424242',
|
||||
};
|
||||
|
||||
/** Couleurs de texte assorties à chaque fond */
|
||||
const STATUS_TEXT_COLORS: Record<ExecutionStatus, string> = {
|
||||
success: '#A5D6A7',
|
||||
error: '#EF9A9A',
|
||||
waiting: '#FFCC80',
|
||||
running: '#90CAF9',
|
||||
canceled: '#BDBDBD',
|
||||
};
|
||||
|
||||
interface StatusBadgeProps {
|
||||
status: ExecutionStatus;
|
||||
/**
|
||||
* Taille du badge :
|
||||
* - small : listes denses (ExecutionCard)
|
||||
* - default : vue détail (LogsScreen)
|
||||
*/
|
||||
size?: 'small' | 'default';
|
||||
}
|
||||
|
||||
/**
|
||||
* Badge coloré représentant le statut d'une exécution n8n.
|
||||
* Utilise les couleurs MD3 dark pour rester lisible sur les surfaces sombres.
|
||||
*/
|
||||
const StatusBadge: React.FC<StatusBadgeProps> = ({ status, size = 'default' }) => {
|
||||
const backgroundColor = STATUS_BG_COLORS[status] ?? '#424242';
|
||||
const textColor = STATUS_TEXT_COLORS[status] ?? '#BDBDBD';
|
||||
const fontSize = size === 'small' ? 10 : 12;
|
||||
|
||||
return (
|
||||
<View style={[styles.badge, { backgroundColor }]}>
|
||||
<Text style={[styles.text, { color: textColor, fontSize }]}>
|
||||
{formatStatus(status)}
|
||||
</Text>
|
||||
</View>
|
||||
);
|
||||
};
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
badge: {
|
||||
paddingHorizontal: 8,
|
||||
paddingVertical: 3,
|
||||
borderRadius: 12,
|
||||
alignSelf: 'flex-start',
|
||||
},
|
||||
text: {
|
||||
fontWeight: '600',
|
||||
letterSpacing: 0.3,
|
||||
},
|
||||
});
|
||||
|
||||
export default StatusBadge;
|
||||
@@ -0,0 +1,124 @@
|
||||
import React from 'react';
|
||||
import { View, StyleSheet } from 'react-native';
|
||||
import { Card, Text, Switch, IconButton, useTheme } from 'react-native-paper';
|
||||
import { Workflow } from '../api/workflows';
|
||||
import { formatRelativeDate } from '../utils/formatters';
|
||||
|
||||
interface WorkflowCardProps {
|
||||
workflow: Workflow;
|
||||
/**
|
||||
* Appelé quand l'utilisateur bascule le switch actif/inactif.
|
||||
* Le hook useWorkflows gère l'appel API et la mise à jour d'état.
|
||||
*/
|
||||
onToggle: (workflow: Workflow) => void;
|
||||
/**
|
||||
* Appelé quand l'utilisateur appuie sur le bouton lecture.
|
||||
* Déclenche une exécution manuelle du workflow.
|
||||
*/
|
||||
onRun: (id: string) => void;
|
||||
}
|
||||
|
||||
/**
|
||||
* Carte représentant un workflow dans la liste WorkflowsScreen.
|
||||
* Affiche : nom, statut actif (switch), date de modification, tags et bouton run.
|
||||
* Le toggle et le run déclenchent des callbacks — la carte n'appelle jamais l'API directement.
|
||||
*/
|
||||
const WorkflowCard: React.FC<WorkflowCardProps> = ({ workflow, onToggle, onRun }) => {
|
||||
const theme = useTheme();
|
||||
|
||||
return (
|
||||
<Card style={[styles.card, { backgroundColor: theme.colors.surface }]}>
|
||||
<Card.Content style={styles.content}>
|
||||
{/* En-tête : nom du workflow et switch actif/inactif */}
|
||||
<View style={styles.header}>
|
||||
<Text
|
||||
variant="titleMedium"
|
||||
numberOfLines={2}
|
||||
style={[styles.name, { color: theme.colors.onSurface }]}
|
||||
>
|
||||
{workflow.name}
|
||||
</Text>
|
||||
<Switch
|
||||
value={workflow.active}
|
||||
onValueChange={() => onToggle(workflow)}
|
||||
color={theme.colors.primary}
|
||||
/>
|
||||
</View>
|
||||
|
||||
{/* Date de dernière modification */}
|
||||
<Text
|
||||
variant="bodySmall"
|
||||
style={{ color: theme.colors.onSurfaceVariant, marginTop: 4 }}
|
||||
>
|
||||
Modifié {formatRelativeDate(workflow.updatedAt)}
|
||||
</Text>
|
||||
|
||||
{/* Tags optionnels */}
|
||||
{workflow.tags && workflow.tags.length > 0 && (
|
||||
<View style={styles.tags}>
|
||||
{workflow.tags.map((tag) => (
|
||||
<View
|
||||
key={tag.id}
|
||||
style={[styles.tag, { backgroundColor: theme.colors.surfaceVariant }]}
|
||||
>
|
||||
<Text variant="labelSmall" style={{ color: theme.colors.onSurfaceVariant }}>
|
||||
{tag.name}
|
||||
</Text>
|
||||
</View>
|
||||
))}
|
||||
</View>
|
||||
)}
|
||||
</Card.Content>
|
||||
|
||||
{/* Bouton de déclenchement manuel */}
|
||||
<Card.Actions style={styles.actions}>
|
||||
<IconButton
|
||||
icon="play-circle-outline"
|
||||
size={22}
|
||||
iconColor={theme.colors.primary}
|
||||
onPress={() => onRun(workflow.id)}
|
||||
accessibilityLabel="Déclencher manuellement ce workflow"
|
||||
/>
|
||||
</Card.Actions>
|
||||
</Card>
|
||||
);
|
||||
};
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
card: {
|
||||
marginHorizontal: 16,
|
||||
marginVertical: 6,
|
||||
elevation: 2,
|
||||
},
|
||||
content: {
|
||||
paddingBottom: 4,
|
||||
},
|
||||
header: {
|
||||
flexDirection: 'row',
|
||||
alignItems: 'center',
|
||||
justifyContent: 'space-between',
|
||||
},
|
||||
name: {
|
||||
flex: 1,
|
||||
marginRight: 8,
|
||||
fontWeight: '600',
|
||||
},
|
||||
tags: {
|
||||
flexDirection: 'row',
|
||||
flexWrap: 'wrap',
|
||||
marginTop: 8,
|
||||
gap: 6,
|
||||
},
|
||||
tag: {
|
||||
paddingHorizontal: 8,
|
||||
paddingVertical: 2,
|
||||
borderRadius: 8,
|
||||
},
|
||||
actions: {
|
||||
justifyContent: 'flex-end',
|
||||
paddingRight: 8,
|
||||
paddingBottom: 4,
|
||||
},
|
||||
});
|
||||
|
||||
export default WorkflowCard;
|
||||
@@ -0,0 +1,137 @@
|
||||
import { useState, useCallback } from 'react';
|
||||
import { useAppStore } from '../store/appStore';
|
||||
import {
|
||||
fetchExecutions,
|
||||
fetchExecutionById,
|
||||
deleteExecution,
|
||||
Execution,
|
||||
ExecutionStatus,
|
||||
FetchExecutionsParams,
|
||||
} from '../api/executions';
|
||||
import { usePolling } from './usePolling';
|
||||
|
||||
/** Options de filtrage passées au hook à l'initialisation */
|
||||
interface UseExecutionsOptions {
|
||||
/** Nombre max d'exécutions à charger */
|
||||
limit?: number;
|
||||
/** Filtre de statut initial */
|
||||
statusFilter?: ExecutionStatus;
|
||||
/** Restreindre aux exécutions d'un workflow spécifique */
|
||||
workflowId?: string;
|
||||
}
|
||||
|
||||
/** Interface des valeurs et actions exposées par le hook */
|
||||
interface UseExecutionsResult {
|
||||
executions: Execution[];
|
||||
isLoading: boolean;
|
||||
isRefreshing: boolean;
|
||||
/** Exécution chargée en détail (avec logs de nœuds) */
|
||||
selectedExecution: Execution | null;
|
||||
/** Recharge la liste (pull-to-refresh) */
|
||||
refresh: () => Promise<void>;
|
||||
/**
|
||||
* Charge les logs complets d'une exécution pour l'écran de détail.
|
||||
* Peuple selectedExecution.
|
||||
*
|
||||
* @param id - Identifiant de l'exécution
|
||||
*/
|
||||
loadExecutionDetail: (id: string) => Promise<void>;
|
||||
/**
|
||||
* Supprime une exécution de l'historique et la retire de l'état local.
|
||||
*
|
||||
* @param id - Identifiant de l'exécution à supprimer
|
||||
*/
|
||||
removeExecution: (id: string) => Promise<void>;
|
||||
/**
|
||||
* Change le filtre de statut actif et relance le chargement.
|
||||
*
|
||||
* @param status - Statut cible ou undefined pour tout afficher
|
||||
*/
|
||||
setStatusFilter: (status: ExecutionStatus | undefined) => void;
|
||||
}
|
||||
|
||||
/**
|
||||
* Hook de gestion des exécutions : listing avec filtres, polling, détail et suppression.
|
||||
* Sépare clairement la liste (vue Executions) du détail (vue Logs).
|
||||
*/
|
||||
export const useExecutions = (options: UseExecutionsOptions = {}): UseExecutionsResult => {
|
||||
const { preferences, config } = useAppStore();
|
||||
const [executions, setExecutions] = useState<Execution[]>([]);
|
||||
const [isLoading, setIsLoading] = useState(true);
|
||||
const [isRefreshing, setIsRefreshing] = useState(false);
|
||||
const [selectedExecution, setSelectedExecution] = useState<Execution | null>(null);
|
||||
const [statusFilter, setStatusFilter] = useState<ExecutionStatus | undefined>(
|
||||
options.statusFilter
|
||||
);
|
||||
|
||||
/** Charge la liste avec les filtres courants */
|
||||
const loadExecutions = useCallback(async (): Promise<void> => {
|
||||
const params: FetchExecutionsParams = {
|
||||
limit: options.limit ?? 50,
|
||||
...(statusFilter !== undefined && { status: statusFilter }),
|
||||
...(options.workflowId && { workflowId: options.workflowId }),
|
||||
};
|
||||
|
||||
try {
|
||||
const result = await fetchExecutions(params);
|
||||
setExecutions(result.data);
|
||||
} catch {
|
||||
// Géré par l'intercepteur Axios
|
||||
} finally {
|
||||
setIsLoading(false);
|
||||
}
|
||||
}, [options.limit, options.workflowId, statusFilter]);
|
||||
|
||||
/** Polling automatique — désactivé si l'app n'est pas encore configurée */
|
||||
usePolling({
|
||||
callback: loadExecutions,
|
||||
interval: preferences.pollingInterval,
|
||||
enabled: config.isConfigured,
|
||||
immediate: true,
|
||||
});
|
||||
|
||||
const refresh = useCallback(async (): Promise<void> => {
|
||||
setIsRefreshing(true);
|
||||
try {
|
||||
await loadExecutions();
|
||||
} finally {
|
||||
setIsRefreshing(false);
|
||||
}
|
||||
}, [loadExecutions]);
|
||||
|
||||
/**
|
||||
* Charge les logs détaillés d'une exécution.
|
||||
* Appelle GET /executions/:id qui inclut le champ `data` avec les nœuds.
|
||||
*/
|
||||
const loadExecutionDetail = useCallback(async (id: string): Promise<void> => {
|
||||
try {
|
||||
const detail = await fetchExecutionById(id);
|
||||
setSelectedExecution(detail);
|
||||
} catch {
|
||||
// Géré par l'intercepteur Axios
|
||||
}
|
||||
}, []);
|
||||
|
||||
/**
|
||||
* Supprime une exécution côté serveur et la retire optimistiquement de l'état local.
|
||||
*/
|
||||
const removeExecution = useCallback(async (id: string): Promise<void> => {
|
||||
try {
|
||||
await deleteExecution(id);
|
||||
setExecutions((prev) => prev.filter((e) => e.id !== id));
|
||||
} catch {
|
||||
// Géré par l'intercepteur Axios
|
||||
}
|
||||
}, []);
|
||||
|
||||
return {
|
||||
executions,
|
||||
isLoading,
|
||||
isRefreshing,
|
||||
selectedExecution,
|
||||
refresh,
|
||||
loadExecutionDetail,
|
||||
removeExecution,
|
||||
setStatusFilter,
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,66 @@
|
||||
import { useEffect, useRef, useCallback } from 'react';
|
||||
|
||||
/** Options de configuration du hook de polling générique */
|
||||
interface UsePollingOptions {
|
||||
/** Callback exécuté à chaque intervalle (peut être async) */
|
||||
callback: () => void | Promise<void>;
|
||||
/** Intervalle entre chaque appel en millisecondes */
|
||||
interval: number;
|
||||
/** Si false, le polling est suspendu sans démonter le hook */
|
||||
enabled?: boolean;
|
||||
/** Si true, déclenche le callback immédiatement au montage sans attendre le premier intervalle */
|
||||
immediate?: boolean;
|
||||
}
|
||||
|
||||
/**
|
||||
* Hook générique de polling configurable.
|
||||
* Gère automatiquement le nettoyage de l'intervalle au démontage du composant.
|
||||
* Le callback est mémorisé par ref pour éviter de redémarrer le polling à chaque render.
|
||||
*
|
||||
* @returns stopPolling - Fonction pour arrêter manuellement le polling
|
||||
*/
|
||||
export const usePolling = ({
|
||||
callback,
|
||||
interval,
|
||||
enabled = true,
|
||||
immediate = true,
|
||||
}: UsePollingOptions): { stopPolling: () => void } => {
|
||||
/** Ref sur le callback pour éviter de re-créer l'intervalle si la fonction change */
|
||||
const callbackRef = useRef(callback);
|
||||
const intervalRef = useRef<ReturnType<typeof setInterval> | null>(null);
|
||||
|
||||
/** Synchronise la ref à chaque render sans déclencher d'effet */
|
||||
useEffect(() => {
|
||||
callbackRef.current = callback;
|
||||
}, [callback]);
|
||||
|
||||
/** Arrête proprement l'intervalle actif */
|
||||
const stopPolling = useCallback(() => {
|
||||
if (intervalRef.current) {
|
||||
clearInterval(intervalRef.current);
|
||||
intervalRef.current = null;
|
||||
}
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
if (!enabled) {
|
||||
stopPolling();
|
||||
return;
|
||||
}
|
||||
|
||||
// Appel immédiat au montage si demandé (évite l'attente du premier intervalle)
|
||||
if (immediate) {
|
||||
void callbackRef.current();
|
||||
}
|
||||
|
||||
// Mise en place du polling régulier
|
||||
intervalRef.current = setInterval(() => {
|
||||
void callbackRef.current();
|
||||
}, interval);
|
||||
|
||||
// Nettoyage automatique au démontage
|
||||
return stopPolling;
|
||||
}, [enabled, interval, immediate, stopPolling]);
|
||||
|
||||
return { stopPolling };
|
||||
};
|
||||
@@ -0,0 +1,110 @@
|
||||
import { useState, useCallback } from 'react';
|
||||
import { useAppStore } from '../store/appStore';
|
||||
import {
|
||||
fetchWorkflows,
|
||||
activateWorkflow,
|
||||
deactivateWorkflow,
|
||||
runWorkflow,
|
||||
Workflow,
|
||||
} from '../api/workflows';
|
||||
import { usePolling } from './usePolling';
|
||||
|
||||
/** Interface des valeurs et actions exposées par le hook */
|
||||
interface UseWorkflowsResult {
|
||||
workflows: Workflow[];
|
||||
isLoading: boolean;
|
||||
isRefreshing: boolean;
|
||||
/**
|
||||
* Recharge manuellement la liste des workflows.
|
||||
* Utilisé pour le pull-to-refresh.
|
||||
*/
|
||||
refresh: () => Promise<void>;
|
||||
/**
|
||||
* Bascule le statut actif/inactif d'un workflow.
|
||||
* Met à jour l'état local après confirmation serveur.
|
||||
*
|
||||
* @param workflow - Workflow à basculer
|
||||
*/
|
||||
toggleWorkflow: (workflow: Workflow) => Promise<void>;
|
||||
/**
|
||||
* Déclenche manuellement l'exécution d'un workflow.
|
||||
*
|
||||
* @param id - Identifiant du workflow à déclencher
|
||||
*/
|
||||
triggerWorkflow: (id: string) => Promise<void>;
|
||||
}
|
||||
|
||||
/**
|
||||
* Hook de gestion des workflows : chargement, polling automatique et actions.
|
||||
* Délègue la gestion des erreurs à l'intercepteur Axios (errorHandler).
|
||||
* Les screens ne font pas d'appels API directs — tout passe par ce hook.
|
||||
*/
|
||||
export const useWorkflows = (): UseWorkflowsResult => {
|
||||
const { preferences, config } = useAppStore();
|
||||
const [workflows, setWorkflows] = useState<Workflow[]>([]);
|
||||
const [isLoading, setIsLoading] = useState(true);
|
||||
const [isRefreshing, setIsRefreshing] = useState(false);
|
||||
|
||||
/** Charge la liste des workflows depuis la couche API */
|
||||
const loadWorkflows = useCallback(async (): Promise<void> => {
|
||||
try {
|
||||
const data = await fetchWorkflows();
|
||||
setWorkflows(data);
|
||||
} catch {
|
||||
// Erreur déjà remontée via l'intercepteur Axios → toast affiché
|
||||
} finally {
|
||||
setIsLoading(false);
|
||||
}
|
||||
}, []);
|
||||
|
||||
/**
|
||||
* Polling automatique déclenché uniquement si l'app est configurée.
|
||||
* L'intervalle est lu depuis les préférences utilisateur (configurable dans Settings).
|
||||
*/
|
||||
usePolling({
|
||||
callback: loadWorkflows,
|
||||
interval: preferences.pollingInterval,
|
||||
enabled: config.isConfigured,
|
||||
immediate: true,
|
||||
});
|
||||
|
||||
/** Pull-to-refresh : indicateur distinct du chargement initial */
|
||||
const refresh = useCallback(async (): Promise<void> => {
|
||||
setIsRefreshing(true);
|
||||
try {
|
||||
await loadWorkflows();
|
||||
} finally {
|
||||
setIsRefreshing(false);
|
||||
}
|
||||
}, [loadWorkflows]);
|
||||
|
||||
/**
|
||||
* Bascule actif/inactif d'un workflow.
|
||||
* Met à jour l'entrée correspondante dans l'état local après retour serveur.
|
||||
*/
|
||||
const toggleWorkflow = useCallback(async (workflow: Workflow): Promise<void> => {
|
||||
try {
|
||||
const updated = workflow.active
|
||||
? await deactivateWorkflow(workflow.id)
|
||||
: await activateWorkflow(workflow.id);
|
||||
|
||||
// Mise à jour ciblée sans recharger toute la liste
|
||||
setWorkflows((prev) => prev.map((w) => (w.id === updated.id ? updated : w)));
|
||||
} catch {
|
||||
// Géré par l'intercepteur Axios
|
||||
}
|
||||
}, []);
|
||||
|
||||
const triggerWorkflow = useCallback(async (id: string): Promise<void> => {
|
||||
await runWorkflow(id);
|
||||
}, []);
|
||||
|
||||
return {
|
||||
workflows,
|
||||
isLoading,
|
||||
isRefreshing,
|
||||
refresh,
|
||||
toggleWorkflow,
|
||||
triggerWorkflow,
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,204 @@
|
||||
import React, { useMemo } from 'react';
|
||||
import { ScrollView, View, StyleSheet, RefreshControl } from 'react-native';
|
||||
import { Text, Card, ActivityIndicator, useTheme } from 'react-native-paper';
|
||||
import { useWorkflows } from '../hooks/useWorkflows';
|
||||
import { useExecutions } from '../hooks/useExecutions';
|
||||
import StatusBadge from '../components/StatusBadge';
|
||||
import { formatShortDate } from '../utils/formatters';
|
||||
|
||||
/**
|
||||
* Carte de métrique simple pour le tableau de bord.
|
||||
* Affiche un chiffre clé avec un label et un sous-titre coloré.
|
||||
*/
|
||||
interface MetricCardProps {
|
||||
label: string;
|
||||
value: string | number;
|
||||
subtitle: string;
|
||||
valueColor: string;
|
||||
}
|
||||
|
||||
const MetricCard: React.FC<MetricCardProps> = ({ label, value, subtitle, valueColor }) => {
|
||||
const theme = useTheme();
|
||||
return (
|
||||
<Card style={[styles.metricCard, { backgroundColor: theme.colors.surface }]}>
|
||||
<Card.Content>
|
||||
<Text variant="bodySmall" style={{ color: theme.colors.onSurfaceVariant }}>
|
||||
{label}
|
||||
</Text>
|
||||
<Text variant="headlineMedium" style={{ color: valueColor, fontWeight: '700' }}>
|
||||
{value}
|
||||
</Text>
|
||||
<Text variant="bodySmall" style={{ color: theme.colors.onSurfaceVariant }}>
|
||||
{subtitle}
|
||||
</Text>
|
||||
</Card.Content>
|
||||
</Card>
|
||||
);
|
||||
};
|
||||
|
||||
/**
|
||||
* Écran principal — tableau de bord.
|
||||
* Affiche les métriques clés (total workflows, taux de succès)
|
||||
* et les 5 dernières exécutions avec leur statut.
|
||||
* Supporte le pull-to-refresh via useWorkflows.
|
||||
*/
|
||||
const DashboardScreen: React.FC = () => {
|
||||
const theme = useTheme();
|
||||
const { workflows, isLoading: wLoading, isRefreshing, refresh } = useWorkflows();
|
||||
const { executions, isLoading: eLoading } = useExecutions({ limit: 5 });
|
||||
|
||||
/** Métriques calculées localement depuis l'état des hooks */
|
||||
const metrics = useMemo(() => {
|
||||
const successCount = executions.filter((e) => e.status === 'success').length;
|
||||
return {
|
||||
total: workflows.length,
|
||||
active: workflows.filter((w) => w.active).length,
|
||||
successRate:
|
||||
executions.length > 0
|
||||
? Math.round((successCount / executions.length) * 100)
|
||||
: 0,
|
||||
};
|
||||
}, [workflows, executions]);
|
||||
|
||||
/**
|
||||
* Couleur du taux de succès : vert > 80%, orange > 50%, rouge sinon.
|
||||
* Donne un indicateur visuel immédiat de la santé des workflows.
|
||||
*/
|
||||
const successRateColor =
|
||||
metrics.successRate >= 80
|
||||
? '#A5D6A7'
|
||||
: metrics.successRate >= 50
|
||||
? '#FFCC80'
|
||||
: '#EF9A9A';
|
||||
|
||||
const isLoading = wLoading || eLoading;
|
||||
|
||||
return (
|
||||
<ScrollView
|
||||
style={[styles.container, { backgroundColor: theme.colors.background }]}
|
||||
refreshControl={
|
||||
<RefreshControl
|
||||
refreshing={isRefreshing}
|
||||
onRefresh={refresh}
|
||||
tintColor={theme.colors.primary}
|
||||
/>
|
||||
}
|
||||
>
|
||||
<Text
|
||||
variant="headlineSmall"
|
||||
style={[styles.title, { color: theme.colors.onBackground }]}
|
||||
>
|
||||
Tableau de bord
|
||||
</Text>
|
||||
|
||||
{isLoading ? (
|
||||
<ActivityIndicator style={styles.loader} color={theme.colors.primary} />
|
||||
) : (
|
||||
<>
|
||||
{/* Métriques rapides */}
|
||||
<View style={styles.metricsRow}>
|
||||
<MetricCard
|
||||
label="Workflows"
|
||||
value={metrics.total}
|
||||
subtitle={`${metrics.active} actifs`}
|
||||
valueColor={theme.colors.primary}
|
||||
/>
|
||||
<MetricCard
|
||||
label="Taux de succès"
|
||||
value={`${metrics.successRate}%`}
|
||||
subtitle="5 dernières exec."
|
||||
valueColor={successRateColor}
|
||||
/>
|
||||
</View>
|
||||
|
||||
{/* Section dernières exécutions */}
|
||||
<Text
|
||||
variant="titleMedium"
|
||||
style={[styles.sectionTitle, { color: theme.colors.onBackground }]}
|
||||
>
|
||||
Exécutions récentes
|
||||
</Text>
|
||||
|
||||
{executions.length === 0 ? (
|
||||
<Text style={[styles.empty, { color: theme.colors.onSurfaceVariant }]}>
|
||||
Aucune exécution récente.
|
||||
</Text>
|
||||
) : (
|
||||
executions.slice(0, 5).map((exec) => (
|
||||
<Card
|
||||
key={exec.id}
|
||||
style={[styles.execCard, { backgroundColor: theme.colors.surface }]}
|
||||
>
|
||||
<Card.Content style={styles.execHeader}>
|
||||
<Text
|
||||
variant="bodyMedium"
|
||||
numberOfLines={1}
|
||||
style={{ color: theme.colors.onSurface, flex: 1, marginRight: 8 }}
|
||||
>
|
||||
{exec.workflowName ?? `Workflow ${exec.workflowId}`}
|
||||
</Text>
|
||||
<StatusBadge status={exec.status} size="small" />
|
||||
</Card.Content>
|
||||
<Card.Content style={styles.execMeta}>
|
||||
<Text variant="bodySmall" style={{ color: theme.colors.onSurfaceVariant }}>
|
||||
{formatShortDate(exec.startedAt)}
|
||||
</Text>
|
||||
</Card.Content>
|
||||
</Card>
|
||||
))
|
||||
)}
|
||||
</>
|
||||
)}
|
||||
</ScrollView>
|
||||
);
|
||||
};
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
container: {
|
||||
flex: 1,
|
||||
},
|
||||
title: {
|
||||
margin: 16,
|
||||
fontWeight: '700',
|
||||
},
|
||||
loader: {
|
||||
marginTop: 48,
|
||||
},
|
||||
metricsRow: {
|
||||
flexDirection: 'row',
|
||||
marginHorizontal: 16,
|
||||
gap: 12,
|
||||
marginBottom: 8,
|
||||
},
|
||||
metricCard: {
|
||||
flex: 1,
|
||||
elevation: 2,
|
||||
},
|
||||
sectionTitle: {
|
||||
marginHorizontal: 16,
|
||||
marginTop: 20,
|
||||
marginBottom: 8,
|
||||
fontWeight: '600',
|
||||
},
|
||||
execCard: {
|
||||
marginHorizontal: 16,
|
||||
marginVertical: 4,
|
||||
elevation: 1,
|
||||
},
|
||||
execHeader: {
|
||||
flexDirection: 'row',
|
||||
alignItems: 'center',
|
||||
justifyContent: 'space-between',
|
||||
paddingBottom: 4,
|
||||
},
|
||||
execMeta: {
|
||||
paddingTop: 0,
|
||||
},
|
||||
empty: {
|
||||
textAlign: 'center',
|
||||
marginTop: 24,
|
||||
fontStyle: 'italic',
|
||||
},
|
||||
});
|
||||
|
||||
export default DashboardScreen;
|
||||
@@ -0,0 +1,134 @@
|
||||
import React, { useState } from 'react';
|
||||
import { FlatList, StyleSheet, View } from 'react-native';
|
||||
import { Text, Chip, Snackbar, useTheme } from 'react-native-paper';
|
||||
import { useRouter } from 'expo-router';
|
||||
import { useExecutions } from '../hooks/useExecutions';
|
||||
import ExecutionCard from '../components/ExecutionCard';
|
||||
import SkeletonLoader from '../components/SkeletonLoader';
|
||||
import { ExecutionStatus } from '../api/executions';
|
||||
|
||||
/** Filtres de statut disponibles dans l'interface */
|
||||
const STATUS_FILTERS: Array<{ label: string; value: ExecutionStatus | undefined }> = [
|
||||
{ label: 'Tous', value: undefined },
|
||||
{ label: 'Succès', value: 'success' },
|
||||
{ label: 'Erreur', value: 'error' },
|
||||
{ label: 'En cours', value: 'running' },
|
||||
];
|
||||
|
||||
/**
|
||||
* Écran d'historique des exécutions.
|
||||
* Permet de filtrer par statut via des chips et de naviguer vers
|
||||
* les logs détaillés d'une exécution via Expo Router.
|
||||
*/
|
||||
const ExecutionsScreen: React.FC = () => {
|
||||
const theme = useTheme();
|
||||
const router = useRouter();
|
||||
const [activeFilter, setActiveFilter] = useState<ExecutionStatus | undefined>(undefined);
|
||||
const [snackMessage, setSnackMessage] = useState('');
|
||||
|
||||
const {
|
||||
executions,
|
||||
isLoading,
|
||||
isRefreshing,
|
||||
refresh,
|
||||
removeExecution,
|
||||
setStatusFilter,
|
||||
} = useExecutions({ limit: 50 });
|
||||
|
||||
/**
|
||||
* Change le filtre actif et notifie le hook pour relancer le fetch.
|
||||
*
|
||||
* @param value - Nouveau statut filtré, ou undefined pour tout afficher
|
||||
*/
|
||||
const handleFilterChange = (value: ExecutionStatus | undefined): void => {
|
||||
setActiveFilter(value);
|
||||
setStatusFilter(value);
|
||||
};
|
||||
|
||||
/**
|
||||
* Supprime une exécution et affiche une confirmation.
|
||||
*
|
||||
* @param id - Identifiant de l'exécution à supprimer
|
||||
*/
|
||||
const handleDelete = async (id: string): Promise<void> => {
|
||||
await removeExecution(id);
|
||||
setSnackMessage('Exécution supprimée');
|
||||
};
|
||||
|
||||
return (
|
||||
<View style={[styles.container, { backgroundColor: theme.colors.background }]}>
|
||||
{/* Barre de filtres de statut horizontale */}
|
||||
<View style={styles.filterBar}>
|
||||
{STATUS_FILTERS.map((filter) => (
|
||||
<Chip
|
||||
key={filter.label}
|
||||
selected={activeFilter === filter.value}
|
||||
onPress={() => handleFilterChange(filter.value)}
|
||||
style={styles.chip}
|
||||
compact
|
||||
>
|
||||
{filter.label}
|
||||
</Chip>
|
||||
))}
|
||||
</View>
|
||||
|
||||
{isLoading ? (
|
||||
<SkeletonLoader count={8} />
|
||||
) : (
|
||||
<FlatList
|
||||
data={executions}
|
||||
keyExtractor={(item) => item.id}
|
||||
renderItem={({ item }) => (
|
||||
<ExecutionCard
|
||||
execution={item}
|
||||
onViewLogs={(id) => router.push(`/execution/${id}` as `/${string}`)}
|
||||
onDelete={handleDelete}
|
||||
/>
|
||||
)}
|
||||
refreshing={isRefreshing}
|
||||
onRefresh={refresh}
|
||||
contentContainerStyle={styles.list}
|
||||
ListEmptyComponent={
|
||||
<Text style={[styles.empty, { color: theme.colors.onSurfaceVariant }]}>
|
||||
Aucune exécution trouvée.
|
||||
</Text>
|
||||
}
|
||||
/>
|
||||
)}
|
||||
|
||||
<Snackbar
|
||||
visible={!!snackMessage}
|
||||
onDismiss={() => setSnackMessage('')}
|
||||
duration={2500}
|
||||
>
|
||||
{snackMessage}
|
||||
</Snackbar>
|
||||
</View>
|
||||
);
|
||||
};
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
container: {
|
||||
flex: 1,
|
||||
},
|
||||
filterBar: {
|
||||
flexDirection: 'row',
|
||||
paddingHorizontal: 16,
|
||||
paddingVertical: 8,
|
||||
gap: 8,
|
||||
},
|
||||
chip: {
|
||||
height: 32,
|
||||
},
|
||||
list: {
|
||||
paddingVertical: 4,
|
||||
paddingBottom: 24,
|
||||
},
|
||||
empty: {
|
||||
textAlign: 'center',
|
||||
marginTop: 48,
|
||||
fontStyle: 'italic',
|
||||
},
|
||||
});
|
||||
|
||||
export default ExecutionsScreen;
|
||||
@@ -0,0 +1,207 @@
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import { ScrollView, StyleSheet, View, ActivityIndicator } from 'react-native';
|
||||
import { Text, Card, Divider, useTheme } from 'react-native-paper';
|
||||
import { useLocalSearchParams } from 'expo-router';
|
||||
import { useExecutions } from '../hooks/useExecutions';
|
||||
import StatusBadge from '../components/StatusBadge';
|
||||
import { formatShortDate, formatDuration, formatMode } from '../utils/formatters';
|
||||
import { NodeExecutionData } from '../api/executions';
|
||||
|
||||
/**
|
||||
* Écran de logs détaillés d'une exécution n8n.
|
||||
* Reçoit l'identifiant de l'exécution via les paramètres de route Expo Router (/execution/:id).
|
||||
* Charge puis affiche les données de chaque nœud exécuté, avec les erreurs éventuelles.
|
||||
*/
|
||||
const LogsScreen: React.FC = () => {
|
||||
const theme = useTheme();
|
||||
const { id } = useLocalSearchParams<{ id: string }>();
|
||||
const { selectedExecution, loadExecutionDetail } = useExecutions();
|
||||
const [isLoading, setIsLoading] = useState(true);
|
||||
|
||||
/** Charge les logs détaillés dès que l'ID de route est disponible */
|
||||
useEffect(() => {
|
||||
if (id) {
|
||||
loadExecutionDetail(id).finally(() => setIsLoading(false));
|
||||
}
|
||||
}, [id]);
|
||||
|
||||
if (isLoading) {
|
||||
return (
|
||||
<View style={[styles.centered, { backgroundColor: theme.colors.background }]}>
|
||||
<ActivityIndicator color={theme.colors.primary} />
|
||||
</View>
|
||||
);
|
||||
}
|
||||
|
||||
if (!selectedExecution) {
|
||||
return (
|
||||
<View style={[styles.centered, { backgroundColor: theme.colors.background }]}>
|
||||
<Text style={{ color: theme.colors.onSurfaceVariant }}>
|
||||
Exécution introuvable ou données indisponibles.
|
||||
</Text>
|
||||
</View>
|
||||
);
|
||||
}
|
||||
|
||||
const runData = selectedExecution.data?.resultData?.runData ?? {};
|
||||
const globalError = selectedExecution.data?.resultData?.error;
|
||||
const nodeNames = Object.keys(runData);
|
||||
|
||||
return (
|
||||
<ScrollView
|
||||
style={[styles.container, { backgroundColor: theme.colors.background }]}
|
||||
contentContainerStyle={styles.content}
|
||||
>
|
||||
{/* En-tête : résumé de l'exécution */}
|
||||
<Card style={[styles.headerCard, { backgroundColor: theme.colors.surface }]}>
|
||||
<Card.Content>
|
||||
<View style={styles.headerRow}>
|
||||
<Text
|
||||
variant="titleMedium"
|
||||
style={{ color: theme.colors.onSurface, flex: 1, marginRight: 8 }}
|
||||
numberOfLines={2}
|
||||
>
|
||||
{selectedExecution.workflowName ?? `Workflow ${selectedExecution.workflowId}`}
|
||||
</Text>
|
||||
<StatusBadge status={selectedExecution.status} />
|
||||
</View>
|
||||
<Text
|
||||
variant="bodySmall"
|
||||
style={{ color: theme.colors.onSurfaceVariant, marginTop: 6 }}
|
||||
>
|
||||
{formatMode(selectedExecution.mode)} ·{' '}
|
||||
{formatShortDate(selectedExecution.startedAt)} ·{' '}
|
||||
{formatDuration(selectedExecution.startedAt, selectedExecution.stoppedAt)}
|
||||
</Text>
|
||||
</Card.Content>
|
||||
</Card>
|
||||
|
||||
{/* Erreur globale de l'exécution (niveau workflow) */}
|
||||
{globalError && (
|
||||
<Card style={[styles.errorCard, { backgroundColor: '#2C0000' }]}>
|
||||
<Card.Content>
|
||||
<Text variant="labelMedium" style={{ color: '#EF9A9A', marginBottom: 4 }}>
|
||||
Erreur workflow
|
||||
</Text>
|
||||
<Text
|
||||
variant="bodySmall"
|
||||
style={{ color: '#FFCDD2', fontFamily: 'monospace' }}
|
||||
selectable
|
||||
>
|
||||
{globalError.message}
|
||||
</Text>
|
||||
</Card.Content>
|
||||
</Card>
|
||||
)}
|
||||
|
||||
{/* Liste des nœuds exécutés */}
|
||||
<Text
|
||||
variant="titleSmall"
|
||||
style={[styles.sectionTitle, { color: theme.colors.onBackground }]}
|
||||
>
|
||||
Nœuds exécutés ({nodeNames.length})
|
||||
</Text>
|
||||
|
||||
{nodeNames.map((nodeName, index) => {
|
||||
const nodeRuns: NodeExecutionData[] = runData[nodeName] ?? [];
|
||||
const firstRun = nodeRuns[0];
|
||||
const hasError = !!firstRun?.error;
|
||||
|
||||
return (
|
||||
<Card
|
||||
key={nodeName}
|
||||
style={[
|
||||
styles.nodeCard,
|
||||
{ backgroundColor: hasError ? '#1C0000' : theme.colors.surface },
|
||||
]}
|
||||
>
|
||||
<Card.Content>
|
||||
{/* Nom du nœud et durée d'exécution */}
|
||||
<View style={styles.nodeHeader}>
|
||||
<Text
|
||||
variant="bodyMedium"
|
||||
style={{ color: theme.colors.onSurface, fontWeight: '600', flex: 1 }}
|
||||
>
|
||||
{index + 1}. {nodeName}
|
||||
</Text>
|
||||
{firstRun && (
|
||||
<Text variant="bodySmall" style={{ color: theme.colors.onSurfaceVariant }}>
|
||||
{firstRun.executionTime}ms
|
||||
</Text>
|
||||
)}
|
||||
</View>
|
||||
|
||||
{/* Erreur spécifique à ce nœud */}
|
||||
{firstRun?.error && (
|
||||
<>
|
||||
<Divider style={{ marginVertical: 6 }} />
|
||||
<Text
|
||||
variant="bodySmall"
|
||||
style={{ color: '#EF9A9A', fontFamily: 'monospace' }}
|
||||
selectable
|
||||
>
|
||||
{firstRun.error.message}
|
||||
</Text>
|
||||
</>
|
||||
)}
|
||||
</Card.Content>
|
||||
</Card>
|
||||
);
|
||||
})}
|
||||
|
||||
{nodeNames.length === 0 && (
|
||||
<Text style={[styles.empty, { color: theme.colors.onSurfaceVariant }]}>
|
||||
Aucune donnée de nœud disponible pour cette exécution.
|
||||
</Text>
|
||||
)}
|
||||
</ScrollView>
|
||||
);
|
||||
};
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
container: {
|
||||
flex: 1,
|
||||
},
|
||||
content: {
|
||||
padding: 16,
|
||||
paddingBottom: 40,
|
||||
},
|
||||
centered: {
|
||||
flex: 1,
|
||||
alignItems: 'center',
|
||||
justifyContent: 'center',
|
||||
},
|
||||
headerCard: {
|
||||
marginBottom: 12,
|
||||
elevation: 2,
|
||||
},
|
||||
headerRow: {
|
||||
flexDirection: 'row',
|
||||
alignItems: 'flex-start',
|
||||
justifyContent: 'space-between',
|
||||
},
|
||||
errorCard: {
|
||||
marginBottom: 12,
|
||||
elevation: 2,
|
||||
},
|
||||
sectionTitle: {
|
||||
marginBottom: 8,
|
||||
fontWeight: '600',
|
||||
},
|
||||
nodeCard: {
|
||||
marginBottom: 8,
|
||||
elevation: 1,
|
||||
},
|
||||
nodeHeader: {
|
||||
flexDirection: 'row',
|
||||
alignItems: 'center',
|
||||
justifyContent: 'space-between',
|
||||
},
|
||||
empty: {
|
||||
textAlign: 'center',
|
||||
marginTop: 24,
|
||||
fontStyle: 'italic',
|
||||
},
|
||||
});
|
||||
|
||||
export default LogsScreen;
|
||||
@@ -0,0 +1,330 @@
|
||||
import React, { useState, useEffect } from 'react';
|
||||
import { ScrollView, StyleSheet, View, Alert } from 'react-native';
|
||||
import {
|
||||
Text,
|
||||
TextInput,
|
||||
Button,
|
||||
Switch,
|
||||
Divider,
|
||||
useTheme,
|
||||
Snackbar,
|
||||
} from 'react-native-paper';
|
||||
import * as SecureStore from 'expo-secure-store';
|
||||
import * as LocalAuthentication from 'expo-local-authentication';
|
||||
import { useAppStore } from '../store/appStore';
|
||||
import { SECURE_STORE_KEYS } from '../api/client';
|
||||
|
||||
/**
|
||||
* Intervalles de polling proposés à l'utilisateur.
|
||||
* Le choix 30s est le défaut — bon compromis batterie/fraîcheur.
|
||||
*/
|
||||
const POLLING_INTERVALS: Array<{ label: string; value: number }> = [
|
||||
{ label: '15s', value: 15_000 },
|
||||
{ label: '30s', value: 30_000 },
|
||||
{ label: '1 min', value: 60_000 },
|
||||
{ label: '5 min', value: 300_000 },
|
||||
];
|
||||
|
||||
/**
|
||||
* Écran de configuration de l'application.
|
||||
* Gère :
|
||||
* - La connexion à l'instance n8n (URL + clé API + token HAProxy)
|
||||
* - L'activation de l'authentification biométrique
|
||||
* - L'intervalle de polling automatique
|
||||
*
|
||||
* SÉCURITÉ : aucune valeur sensible n'est stockée dans l'état React au-delà de la saisie.
|
||||
* Après sauvegarde, apiKey et appToken sont vidés des champs et ne vivent que dans le secure store.
|
||||
*/
|
||||
const SettingsScreen: React.FC = () => {
|
||||
const theme = useTheme();
|
||||
const { config, preferences, setConfig, setPreferences } = useAppStore();
|
||||
|
||||
const [baseUrl, setBaseUrl] = useState('');
|
||||
const [apiKey, setApiKey] = useState('');
|
||||
const [appToken, setAppToken] = useState('');
|
||||
const [urlError, setUrlError] = useState('');
|
||||
const [isBiometricAvailable, setIsBiometricAvailable] = useState(false);
|
||||
const [snackMessage, setSnackMessage] = useState('');
|
||||
const [isSaving, setIsSaving] = useState(false);
|
||||
|
||||
/** Vérifie la disponibilité du hardware biométrique sur cet appareil */
|
||||
useEffect(() => {
|
||||
LocalAuthentication.hasHardwareAsync().then(setIsBiometricAvailable);
|
||||
}, []);
|
||||
|
||||
/** Pré-remplit l'URL depuis le store (jamais la clé API ni le token) */
|
||||
useEffect(() => {
|
||||
setBaseUrl(config.baseUrl);
|
||||
}, [config.baseUrl]);
|
||||
|
||||
/**
|
||||
* Valide que l'URL est bien en HTTPS (TLS obligatoire).
|
||||
* L'app refuse toute URL HTTP pour protéger les secrets en transit.
|
||||
*
|
||||
* @param url - URL saisie par l'utilisateur
|
||||
* @returns true si l'URL est valide et en HTTPS
|
||||
*/
|
||||
const validateUrl = (url: string): boolean => {
|
||||
if (!url.startsWith('https://')) {
|
||||
setUrlError("L'URL doit commencer par https:// (TLS obligatoire)");
|
||||
return false;
|
||||
}
|
||||
try {
|
||||
new URL(url);
|
||||
setUrlError('');
|
||||
return true;
|
||||
} catch {
|
||||
setUrlError('URL invalide — vérifiez le format');
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Sauvegarde la configuration dans le secure store Android Keystore.
|
||||
* Vide les champs sensibles de l'état React immédiatement après sauvegarde.
|
||||
*/
|
||||
const handleSave = async (): Promise<void> => {
|
||||
if (!validateUrl(baseUrl)) return;
|
||||
if (!apiKey.trim()) {
|
||||
setSnackMessage('La clé API n8n est obligatoire');
|
||||
return;
|
||||
}
|
||||
|
||||
setIsSaving(true);
|
||||
try {
|
||||
await setConfig(baseUrl.trim(), apiKey.trim(), appToken.trim());
|
||||
// Nettoyage immédiat des champs sensibles de l'état React
|
||||
setApiKey('');
|
||||
setAppToken('');
|
||||
setSnackMessage('Configuration sauvegardée avec succès');
|
||||
} catch {
|
||||
setSnackMessage('Erreur lors de la sauvegarde');
|
||||
} finally {
|
||||
setIsSaving(false);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Réinitialise complètement la configuration après confirmation explicite.
|
||||
* Supprime toutes les entrées du secure store.
|
||||
*/
|
||||
const handleReset = (): void => {
|
||||
Alert.alert(
|
||||
'Réinitialiser la configuration',
|
||||
'Toutes les données de connexion seront supprimées. Cette action est irréversible.',
|
||||
[
|
||||
{ text: 'Annuler', style: 'cancel' },
|
||||
{
|
||||
text: 'Réinitialiser',
|
||||
style: 'destructive',
|
||||
onPress: async () => {
|
||||
await Promise.all([
|
||||
SecureStore.deleteItemAsync(SECURE_STORE_KEYS.BASE_URL),
|
||||
SecureStore.deleteItemAsync(SECURE_STORE_KEYS.API_KEY),
|
||||
SecureStore.deleteItemAsync(SECURE_STORE_KEYS.APP_TOKEN),
|
||||
SecureStore.deleteItemAsync(SECURE_STORE_KEYS.BIOMETRIC_ENABLED),
|
||||
]);
|
||||
setBaseUrl('');
|
||||
setApiKey('');
|
||||
setAppToken('');
|
||||
setSnackMessage('Configuration réinitialisée');
|
||||
},
|
||||
},
|
||||
]
|
||||
);
|
||||
};
|
||||
|
||||
return (
|
||||
<ScrollView
|
||||
style={[styles.container, { backgroundColor: theme.colors.background }]}
|
||||
contentContainerStyle={styles.content}
|
||||
keyboardShouldPersistTaps="handled"
|
||||
>
|
||||
{/* Section : connexion à l'instance n8n */}
|
||||
<Text
|
||||
variant="titleMedium"
|
||||
style={[styles.sectionTitle, { color: theme.colors.onBackground }]}
|
||||
>
|
||||
Connexion n8n
|
||||
</Text>
|
||||
|
||||
<TextInput
|
||||
label="URL de l'instance (https://…)"
|
||||
value={baseUrl}
|
||||
onChangeText={(v) => {
|
||||
setBaseUrl(v);
|
||||
if (urlError) validateUrl(v);
|
||||
}}
|
||||
onBlur={() => baseUrl && validateUrl(baseUrl)}
|
||||
error={!!urlError}
|
||||
mode="outlined"
|
||||
style={styles.input}
|
||||
autoCapitalize="none"
|
||||
autoCorrect={false}
|
||||
keyboardType="url"
|
||||
left={<TextInput.Icon icon="server" />}
|
||||
/>
|
||||
{!!urlError && (
|
||||
<Text
|
||||
variant="bodySmall"
|
||||
style={{ color: theme.colors.error, marginBottom: 8, marginLeft: 4 }}
|
||||
>
|
||||
{urlError}
|
||||
</Text>
|
||||
)}
|
||||
|
||||
<TextInput
|
||||
label="Clé API n8n"
|
||||
value={apiKey}
|
||||
onChangeText={setApiKey}
|
||||
secureTextEntry
|
||||
mode="outlined"
|
||||
style={styles.input}
|
||||
autoCapitalize="none"
|
||||
autoCorrect={false}
|
||||
left={<TextInput.Icon icon="key" />}
|
||||
placeholder={config.isConfigured ? '••••••••••••••••' : undefined}
|
||||
/>
|
||||
|
||||
<TextInput
|
||||
label="Token HAProxy (X-App-Token)"
|
||||
value={appToken}
|
||||
onChangeText={setAppToken}
|
||||
secureTextEntry
|
||||
mode="outlined"
|
||||
style={styles.input}
|
||||
autoCapitalize="none"
|
||||
autoCorrect={false}
|
||||
left={<TextInput.Icon icon="shield-key" />}
|
||||
placeholder={config.isConfigured ? '••••••••••••••••' : undefined}
|
||||
/>
|
||||
|
||||
<Button
|
||||
mode="contained"
|
||||
onPress={handleSave}
|
||||
loading={isSaving}
|
||||
disabled={isSaving}
|
||||
style={styles.saveButton}
|
||||
>
|
||||
Sauvegarder
|
||||
</Button>
|
||||
|
||||
<Divider style={styles.divider} />
|
||||
|
||||
{/* Section : préférences utilisateur */}
|
||||
<Text
|
||||
variant="titleMedium"
|
||||
style={[styles.sectionTitle, { color: theme.colors.onBackground }]}
|
||||
>
|
||||
Préférences
|
||||
</Text>
|
||||
|
||||
{/* Biométrie — affichée uniquement si le hardware est disponible */}
|
||||
{isBiometricAvailable && (
|
||||
<View style={styles.row}>
|
||||
<Text
|
||||
variant="bodyMedium"
|
||||
style={{ color: theme.colors.onBackground, flex: 1 }}
|
||||
>
|
||||
Déverrouillage biométrique
|
||||
</Text>
|
||||
<Switch
|
||||
value={preferences.biometricEnabled}
|
||||
onValueChange={(v) => setPreferences({ biometricEnabled: v })}
|
||||
color={theme.colors.primary}
|
||||
/>
|
||||
</View>
|
||||
)}
|
||||
|
||||
{/* Intervalle de rafraîchissement automatique */}
|
||||
<Text
|
||||
variant="bodyMedium"
|
||||
style={{ color: theme.colors.onBackground, marginBottom: 10, marginTop: 8 }}
|
||||
>
|
||||
Intervalle de rafraîchissement
|
||||
</Text>
|
||||
<View style={styles.intervalRow}>
|
||||
{POLLING_INTERVALS.map((item) => (
|
||||
<Button
|
||||
key={item.value}
|
||||
mode={preferences.pollingInterval === item.value ? 'contained' : 'outlined'}
|
||||
onPress={() => setPreferences({ pollingInterval: item.value })}
|
||||
style={styles.intervalButton}
|
||||
compact
|
||||
>
|
||||
{item.label}
|
||||
</Button>
|
||||
))}
|
||||
</View>
|
||||
|
||||
<Divider style={styles.divider} />
|
||||
|
||||
{/* Zone de danger — réinitialisation */}
|
||||
<Text
|
||||
variant="titleMedium"
|
||||
style={[styles.sectionTitle, { color: theme.colors.error }]}
|
||||
>
|
||||
Zone de danger
|
||||
</Text>
|
||||
<Button
|
||||
mode="outlined"
|
||||
onPress={handleReset}
|
||||
textColor={theme.colors.error}
|
||||
style={[styles.resetButton, { borderColor: theme.colors.error }]}
|
||||
>
|
||||
Réinitialiser la configuration
|
||||
</Button>
|
||||
|
||||
<Snackbar
|
||||
visible={!!snackMessage}
|
||||
onDismiss={() => setSnackMessage('')}
|
||||
duration={3000}
|
||||
>
|
||||
{snackMessage}
|
||||
</Snackbar>
|
||||
</ScrollView>
|
||||
);
|
||||
};
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
container: {
|
||||
flex: 1,
|
||||
},
|
||||
content: {
|
||||
padding: 16,
|
||||
paddingBottom: 40,
|
||||
},
|
||||
sectionTitle: {
|
||||
fontWeight: '600',
|
||||
marginBottom: 12,
|
||||
},
|
||||
input: {
|
||||
marginBottom: 12,
|
||||
},
|
||||
saveButton: {
|
||||
marginTop: 4,
|
||||
marginBottom: 8,
|
||||
},
|
||||
divider: {
|
||||
marginVertical: 20,
|
||||
},
|
||||
row: {
|
||||
flexDirection: 'row',
|
||||
alignItems: 'center',
|
||||
marginBottom: 16,
|
||||
},
|
||||
intervalRow: {
|
||||
flexDirection: 'row',
|
||||
gap: 8,
|
||||
flexWrap: 'wrap',
|
||||
},
|
||||
intervalButton: {
|
||||
flex: 1,
|
||||
minWidth: 60,
|
||||
},
|
||||
resetButton: {
|
||||
marginTop: 4,
|
||||
},
|
||||
});
|
||||
|
||||
export default SettingsScreen;
|
||||
@@ -0,0 +1,99 @@
|
||||
import React, { useState } from 'react';
|
||||
import { FlatList, StyleSheet, View } from 'react-native';
|
||||
import { Text, Snackbar, useTheme } from 'react-native-paper';
|
||||
import { useWorkflows } from '../hooks/useWorkflows';
|
||||
import WorkflowCard from '../components/WorkflowCard';
|
||||
import SkeletonLoader from '../components/SkeletonLoader';
|
||||
import { Workflow } from '../api/workflows';
|
||||
|
||||
/**
|
||||
* Écran de liste de tous les workflows de l'instance n8n.
|
||||
* Supporte le pull-to-refresh et affiche un squelette au premier chargement.
|
||||
* Les actions (toggle, run) sont déléguées à useWorkflows — aucun appel API direct ici.
|
||||
*/
|
||||
const WorkflowsScreen: React.FC = () => {
|
||||
const theme = useTheme();
|
||||
const [snackMessage, setSnackMessage] = useState('');
|
||||
const { workflows, isLoading, isRefreshing, refresh, toggleWorkflow, triggerWorkflow } =
|
||||
useWorkflows();
|
||||
|
||||
/**
|
||||
* Déclenche l'exécution d'un workflow et affiche une confirmation à l'utilisateur.
|
||||
*
|
||||
* @param id - Identifiant du workflow à lancer
|
||||
*/
|
||||
const handleRun = async (id: string): Promise<void> => {
|
||||
try {
|
||||
await triggerWorkflow(id);
|
||||
setSnackMessage('Exécution déclenchée');
|
||||
} catch {
|
||||
// L'intercepteur Axios a déjà affiché le toast d'erreur
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Bascule le statut actif/inactif avec retour visuel.
|
||||
* L'état local est mis à jour par le hook après confirmation serveur.
|
||||
*
|
||||
* @param workflow - Workflow à basculer
|
||||
*/
|
||||
const handleToggle = async (workflow: Workflow): Promise<void> => {
|
||||
await toggleWorkflow(workflow);
|
||||
setSnackMessage(workflow.active ? 'Workflow désactivé' : 'Workflow activé');
|
||||
};
|
||||
|
||||
return (
|
||||
<View style={[styles.container, { backgroundColor: theme.colors.background }]}>
|
||||
{isLoading ? (
|
||||
<SkeletonLoader count={6} />
|
||||
) : (
|
||||
<FlatList
|
||||
data={workflows}
|
||||
keyExtractor={(item) => item.id}
|
||||
renderItem={({ item }) => (
|
||||
<WorkflowCard
|
||||
workflow={item}
|
||||
onToggle={handleToggle}
|
||||
onRun={handleRun}
|
||||
/>
|
||||
)}
|
||||
refreshing={isRefreshing}
|
||||
onRefresh={refresh}
|
||||
contentContainerStyle={styles.list}
|
||||
ListEmptyComponent={
|
||||
<Text style={[styles.empty, { color: theme.colors.onSurfaceVariant }]}>
|
||||
Aucun workflow trouvé. Vérifiez la connexion à l'instance n8n.
|
||||
</Text>
|
||||
}
|
||||
/>
|
||||
)}
|
||||
|
||||
{/* Confirmation d'action non destructive */}
|
||||
<Snackbar
|
||||
visible={!!snackMessage}
|
||||
onDismiss={() => setSnackMessage('')}
|
||||
duration={2500}
|
||||
>
|
||||
{snackMessage}
|
||||
</Snackbar>
|
||||
</View>
|
||||
);
|
||||
};
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
container: {
|
||||
flex: 1,
|
||||
},
|
||||
list: {
|
||||
paddingVertical: 8,
|
||||
paddingBottom: 80,
|
||||
},
|
||||
empty: {
|
||||
textAlign: 'center',
|
||||
marginTop: 48,
|
||||
marginHorizontal: 32,
|
||||
fontStyle: 'italic',
|
||||
},
|
||||
});
|
||||
|
||||
export default WorkflowsScreen;
|
||||
@@ -0,0 +1,118 @@
|
||||
import { create } from 'zustand';
|
||||
import * as SecureStore from 'expo-secure-store';
|
||||
import { SECURE_STORE_KEYS } from '../api/client';
|
||||
|
||||
/** Configuration de connexion à l'instance n8n auto-hébergée */
|
||||
interface AppConfig {
|
||||
/** URL de base de l'instance (ex: https://n8n.example.com) */
|
||||
baseUrl: string;
|
||||
/** Vrai si une configuration complète a déjà été sauvegardée dans le secure store */
|
||||
isConfigured: boolean;
|
||||
}
|
||||
|
||||
/** Préférences utilisateur persistées localement */
|
||||
interface AppPreferences {
|
||||
/** Intervalle de polling automatique en millisecondes */
|
||||
pollingInterval: number;
|
||||
/** Active l'authentification biométrique au démarrage de l'app */
|
||||
biometricEnabled: boolean;
|
||||
}
|
||||
|
||||
/** Interface complète de l'état global Zustand */
|
||||
interface AppState {
|
||||
config: AppConfig;
|
||||
preferences: AppPreferences;
|
||||
/** Vrai si l'authentification biométrique a été validée pour la session courante */
|
||||
isAuthenticated: boolean;
|
||||
isLoading: boolean;
|
||||
|
||||
/**
|
||||
* Sauvegarde baseUrl, apiKey et appToken dans le secure store Android Keystore.
|
||||
* N'appeler qu'avec des valeurs non vides et validées (HTTPS obligatoire pour baseUrl).
|
||||
*
|
||||
* @param baseUrl - URL de l'instance n8n en HTTPS
|
||||
* @param apiKey - Clé API n8n (scope minimal recommandé)
|
||||
* @param appToken - Token personnalisé HAProxy (X-App-Token)
|
||||
*/
|
||||
setConfig: (baseUrl: string, apiKey: string, appToken: string) => Promise<void>;
|
||||
|
||||
/**
|
||||
* Charge la configuration au démarrage depuis le secure store.
|
||||
* Appelé une seule fois par le root layout (_layout.tsx).
|
||||
*/
|
||||
loadConfig: () => Promise<void>;
|
||||
|
||||
/**
|
||||
* Met à jour les préférences utilisateur de manière partielle.
|
||||
*
|
||||
* @param prefs - Sous-ensemble des préférences à modifier
|
||||
*/
|
||||
setPreferences: (prefs: Partial<AppPreferences>) => void;
|
||||
|
||||
/**
|
||||
* Marque la session comme authentifiée (biométrie validée).
|
||||
*
|
||||
* @param auth - true si la biométrie a été acceptée
|
||||
*/
|
||||
setAuthenticated: (auth: boolean) => void;
|
||||
}
|
||||
|
||||
export const useAppStore = create<AppState>((set) => ({
|
||||
config: {
|
||||
baseUrl: '',
|
||||
isConfigured: false,
|
||||
},
|
||||
preferences: {
|
||||
pollingInterval: 30_000, // 30 secondes — bon compromis entre fraîcheur et batterie
|
||||
biometricEnabled: false,
|
||||
},
|
||||
isAuthenticated: false,
|
||||
isLoading: false,
|
||||
|
||||
setConfig: async (baseUrl, apiKey, appToken) => {
|
||||
// Écriture parallèle dans le secure store pour minimiser la latence
|
||||
await Promise.all([
|
||||
SecureStore.setItemAsync(SECURE_STORE_KEYS.BASE_URL, baseUrl),
|
||||
SecureStore.setItemAsync(SECURE_STORE_KEYS.API_KEY, apiKey),
|
||||
SecureStore.setItemAsync(SECURE_STORE_KEYS.APP_TOKEN, appToken),
|
||||
]);
|
||||
// On ne stocke que l'URL dans l'état React ; jamais la clé API ni le token
|
||||
set({ config: { baseUrl, isConfigured: true } });
|
||||
},
|
||||
|
||||
loadConfig: async () => {
|
||||
set({ isLoading: true });
|
||||
try {
|
||||
const [baseUrl, biometricRaw] = await Promise.all([
|
||||
SecureStore.getItemAsync(SECURE_STORE_KEYS.BASE_URL),
|
||||
SecureStore.getItemAsync(SECURE_STORE_KEYS.BIOMETRIC_ENABLED),
|
||||
]);
|
||||
set({
|
||||
config: {
|
||||
baseUrl: baseUrl ?? '',
|
||||
isConfigured: !!baseUrl,
|
||||
},
|
||||
preferences: {
|
||||
pollingInterval: 30_000,
|
||||
biometricEnabled: biometricRaw === 'true',
|
||||
},
|
||||
});
|
||||
} finally {
|
||||
set({ isLoading: false });
|
||||
}
|
||||
},
|
||||
|
||||
setPreferences: (prefs) => {
|
||||
if ('biometricEnabled' in prefs) {
|
||||
SecureStore.setItemAsync(
|
||||
SECURE_STORE_KEYS.BIOMETRIC_ENABLED,
|
||||
prefs.biometricEnabled ? 'true' : 'false'
|
||||
).catch(() => {});
|
||||
}
|
||||
set((state) => ({
|
||||
preferences: { ...state.preferences, ...prefs },
|
||||
}));
|
||||
},
|
||||
|
||||
setAuthenticated: (auth) => set({ isAuthenticated: auth }),
|
||||
}));
|
||||
@@ -0,0 +1,73 @@
|
||||
import { AxiosError } from 'axios';
|
||||
|
||||
/** Signature du callback de toast enregistré depuis le root layout */
|
||||
type ToastCallback = (message: string, type: 'error' | 'warning' | 'info') => void;
|
||||
|
||||
/** Référence au callback toast, initialisée au montage du root layout */
|
||||
let toastCallback: ToastCallback | null = null;
|
||||
|
||||
/**
|
||||
* Enregistre le callback de toast depuis le root layout (_layout.tsx).
|
||||
* Doit être appelé une seule fois au démarrage de l'application.
|
||||
*
|
||||
* @param callback - Fonction qui affiche un toast dans l'UI
|
||||
*/
|
||||
export const registerToastCallback = (callback: ToastCallback): void => {
|
||||
toastCallback = callback;
|
||||
};
|
||||
|
||||
/**
|
||||
* Affiche un toast via le callback enregistré.
|
||||
* Ne fait rien si le callback n'a pas encore été enregistré.
|
||||
*/
|
||||
const showToast = (message: string, type: 'error' | 'warning' | 'info' = 'error'): void => {
|
||||
if (toastCallback) {
|
||||
toastCallback(message, type);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Extrait un message d'erreur lisible depuis une erreur Axios ou générique.
|
||||
* Ne logue jamais les détails de la requête (qui pourraient contenir des headers secrets).
|
||||
*
|
||||
* @param error - Erreur Axios ou Error générique
|
||||
* @returns Message d'erreur lisible en français
|
||||
*/
|
||||
const extractMessage = (error: unknown): string => {
|
||||
if (error instanceof AxiosError) {
|
||||
if (error.response) {
|
||||
// Erreur HTTP avec réponse du serveur (4xx, 5xx)
|
||||
const data = error.response.data as { message?: string; error?: string } | null;
|
||||
return data?.message ?? data?.error ?? `Erreur ${error.response.status}`;
|
||||
}
|
||||
if (error.request) {
|
||||
// Requête émise mais pas de réponse : timeout ou serveur inaccessible
|
||||
return 'Serveur inaccessible. Vérifiez votre connexion ou l\'URL n8n.';
|
||||
}
|
||||
return error.message;
|
||||
}
|
||||
if (error instanceof Error) {
|
||||
return error.message;
|
||||
}
|
||||
return 'Une erreur inattendue est survenue.';
|
||||
};
|
||||
|
||||
/**
|
||||
* Point d'entrée unifié pour la gestion des erreurs applicatives.
|
||||
* Affiche un toast et émet un warning console en développement UNIQUEMENT.
|
||||
* Jamais de log en production, jamais de log des valeurs de headers ou tokens.
|
||||
*
|
||||
* @param error - Erreur à traiter
|
||||
* @param context - Contexte optionnel (nom de la fonction appelante)
|
||||
*/
|
||||
export const handleError = (error: unknown, context?: string): void => {
|
||||
const message = extractMessage(error);
|
||||
const fullMessage = context ? `[${context}] ${message}` : message;
|
||||
|
||||
if (__DEV__) {
|
||||
// En développement : log du message uniquement, jamais des headers/tokens
|
||||
console.warn(`[ErrorHandler] ${fullMessage}`);
|
||||
}
|
||||
|
||||
showToast(fullMessage, 'error');
|
||||
};
|
||||
@@ -0,0 +1,87 @@
|
||||
import { formatDistanceToNow, format, differenceInSeconds } from 'date-fns';
|
||||
import { fr } from 'date-fns/locale';
|
||||
|
||||
/**
|
||||
* Formate une date ISO en temps relatif lisible en français.
|
||||
* Ex : "il y a 3 minutes", "dans 2 heures"
|
||||
*
|
||||
* @param dateString - Date au format ISO 8601
|
||||
* @returns Chaîne relative en français, ou "date inconnue" si parsing impossible
|
||||
*/
|
||||
export const formatRelativeDate = (dateString: string): string => {
|
||||
try {
|
||||
return formatDistanceToNow(new Date(dateString), { addSuffix: true, locale: fr });
|
||||
} catch {
|
||||
return 'date inconnue';
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Formate une date ISO en format court DD/MM/YYYY HH:mm.
|
||||
*
|
||||
* @param dateString - Date au format ISO 8601
|
||||
* @returns Chaîne formatée, ou "date inconnue" si parsing impossible
|
||||
*/
|
||||
export const formatShortDate = (dateString: string): string => {
|
||||
try {
|
||||
return format(new Date(dateString), 'dd/MM/yyyy HH:mm', { locale: fr });
|
||||
} catch {
|
||||
return 'date inconnue';
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Calcule et formate la durée entre deux dates.
|
||||
* Si stoppedAt est absent, calcule jusqu'à maintenant (exécution en cours).
|
||||
*
|
||||
* @param startedAt - Date de début ISO 8601
|
||||
* @param stoppedAt - Date de fin ISO 8601 (optionnelle)
|
||||
* @returns Durée formatée ex : "2m 34s", "45s"
|
||||
*/
|
||||
export const formatDuration = (startedAt: string, stoppedAt?: string): string => {
|
||||
try {
|
||||
const start = new Date(startedAt);
|
||||
const end = stoppedAt ? new Date(stoppedAt) : new Date();
|
||||
const seconds = differenceInSeconds(end, start);
|
||||
if (seconds < 60) return `${seconds}s`;
|
||||
const minutes = Math.floor(seconds / 60);
|
||||
const remainingSeconds = seconds % 60;
|
||||
return remainingSeconds > 0 ? `${minutes}m ${remainingSeconds}s` : `${minutes}m`;
|
||||
} catch {
|
||||
return 'durée inconnue';
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Traduit le statut d'une exécution n8n en libellé français.
|
||||
*
|
||||
* @param status - Statut brut de l'API n8n
|
||||
* @returns Libellé français correspondant
|
||||
*/
|
||||
export const formatStatus = (status: string): string => {
|
||||
const statusMap: Record<string, string> = {
|
||||
success: 'Succès',
|
||||
error: 'Erreur',
|
||||
waiting: 'En attente',
|
||||
running: 'En cours',
|
||||
canceled: 'Annulé',
|
||||
};
|
||||
return statusMap[status] ?? status;
|
||||
};
|
||||
|
||||
/**
|
||||
* Traduit le mode de déclenchement d'une exécution n8n.
|
||||
*
|
||||
* @param mode - Mode brut retourné par l'API
|
||||
* @returns Libellé français correspondant
|
||||
*/
|
||||
export const formatMode = (mode: string): string => {
|
||||
const modeMap: Record<string, string> = {
|
||||
manual: 'Manuel',
|
||||
trigger: 'Déclencheur',
|
||||
webhook: 'Webhook',
|
||||
internal: 'Interne',
|
||||
retry: 'Réessai',
|
||||
};
|
||||
return modeMap[mode] ?? mode;
|
||||
};
|
||||
@@ -1,53 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDkjCCAxmgAwIBAgISBT2qlP2wn24Guv5h7k0ByET9MAoGCCqGSM49BAMDMDIx
|
||||
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
|
||||
ODAeFw0yNTEwMTIwNTU0NTBaFw0yNjAxMTAwNTU0NDlaMB0xGzAZBgNVBAMTEmFw
|
||||
Lmd5b3phbWFuY2F2ZS5mcjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABP0WBe5j
|
||||
0Ja8iQL1Xc7b80y6XHigavSCo1Jf+iikBfqaj1YidtH9+4V88WCRZJgTETSLAm8f
|
||||
J5KWy8rrdS4UJnajggIiMIICHjAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0lBBYwFAYI
|
||||
KwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFOEVwQXt
|
||||
gObUsls8MpDoLtpYxokFMB8GA1UdIwQYMBaAFI8NE6L2Ln7RUGwzGDhdWY4jcpHK
|
||||
MDIGCCsGAQUFBwEBBCYwJDAiBggrBgEFBQcwAoYWaHR0cDovL2U4LmkubGVuY3Iu
|
||||
b3JnLzAdBgNVHREEFjAUghJhcC5neW96YW1hbmNhdmUuZnIwEwYDVR0gBAwwCjAI
|
||||
BgZngQwBAgEwLgYDVR0fBCcwJTAjoCGgH4YdaHR0cDovL2U4LmMubGVuY3Iub3Jn
|
||||
LzEyNi5jcmwwggEFBgorBgEEAdZ5AgQCBIH2BIHzAPEAdwBkEcRspBLsp4kcogIu
|
||||
ALyrTygH1B41J6vq/tUDyX3N8AAAAZnXMftkAAAEAwBIMEYCIQDmqN+cv9fksyTo
|
||||
HCEc9ugPveDSNC3XCd3i2nFc/JZ4nAIhAJ5FiFRej8HnayMmzH4IU6hjxd4D1d/Q
|
||||
ssaTcikUQRnsAHYAGYbUxyiqb/66A294Kk0BkarOLXIxD67OXXBBLSVMx9QAAAGZ
|
||||
1zH7cAAABAMARzBFAiAFfXId1W2bAS1rdkGkwdQ0iQErKLGUZRWAUbnq242OPgIh
|
||||
ANBX0RmYwnMIyjuhpuwtELLL9HijywXBVZqO1MLOLVhMMAoGCCqGSM49BAMDA2cA
|
||||
MGQCMGXIxwyc3QsDmbr9BODRL039ig55ge/DB8QkpXu1+qJXmsqKOE8lHz+VwQqp
|
||||
RFezugIwJ/GgAmVLODa4txKcvADgb71fUAsfrwXjbZ7PKOLOVScD2UbHGZ9HEeQX
|
||||
ZmxCj5LR
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIEVjCCAj6gAwIBAgIQY5WTY8JOcIJxWRi/w9ftVjANBgkqhkiG9w0BAQsFADBP
|
||||
MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy
|
||||
Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNDAzMTMwMDAwMDBa
|
||||
Fw0yNzAzMTIyMzU5NTlaMDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBF
|
||||
bmNyeXB0MQswCQYDVQQDEwJFODB2MBAGByqGSM49AgEGBSuBBAAiA2IABNFl8l7c
|
||||
S7QMApzSsvru6WyrOq44ofTUOTIzxULUzDMMNMchIJBwXOhiLxxxs0LXeb5GDcHb
|
||||
R6EToMffgSZjO9SNHfY9gjMy9vQr5/WWOrQTZxh7az6NSNnq3u2ubT6HTKOB+DCB
|
||||
9TAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMB
|
||||
MBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFI8NE6L2Ln7RUGwzGDhdWY4j
|
||||
cpHKMB8GA1UdIwQYMBaAFHm0WeZ7tuXkAXOACIjIGlj26ZtuMDIGCCsGAQUFBwEB
|
||||
BCYwJDAiBggrBgEFBQcwAoYWaHR0cDovL3gxLmkubGVuY3Iub3JnLzATBgNVHSAE
|
||||
DDAKMAgGBmeBDAECATAnBgNVHR8EIDAeMBygGqAYhhZodHRwOi8veDEuYy5sZW5j
|
||||
ci5vcmcvMA0GCSqGSIb3DQEBCwUAA4ICAQBnE0hGINKsCYWi0Xx1ygxD5qihEjZ0
|
||||
RI3tTZz1wuATH3ZwYPIp97kWEayanD1j0cDhIYzy4CkDo2jB8D5t0a6zZWzlr98d
|
||||
AQFNh8uKJkIHdLShy+nUyeZxc5bNeMp1Lu0gSzE4McqfmNMvIpeiwWSYO9w82Ob8
|
||||
otvXcO2JUYi3svHIWRm3+707DUbL51XMcY2iZdlCq4Wa9nbuk3WTU4gr6LY8MzVA
|
||||
aDQG2+4U3eJ6qUF10bBnR1uuVyDYs9RhrwucRVnfuDj29CMLTsplM5f5wSV5hUpm
|
||||
Uwp/vV7M4w4aGunt74koX71n4EdagCsL/Yk5+mAQU0+tue0JOfAV/R6t1k+Xk9s2
|
||||
HMQFeoxppfzAVC04FdG9M+AC2JWxmFSt6BCuh3CEey3fE52Qrj9YM75rtvIjsm/1
|
||||
Hl+u//Wqxnu1ZQ4jpa+VpuZiGOlWrqSP9eogdOhCGisnyewWJwRQOqK16wiGyZeR
|
||||
xs/Bekw65vwSIaVkBruPiTfMOo0Zh4gVa8/qJgMbJbyrwwG97z/PRgmLKCDl8z3d
|
||||
tA0Z7qq7fta0Gl24uyuB05dqI5J1LvAzKuWdIjT1tP8qCoxSE/xpix8hX2dt3h+/
|
||||
jujUgFPFZ0EVZ0xSyBNRF3MboGZnYXFUxpNjTWPKpagDHJQmqrAcDmWJnMsFY3jS
|
||||
u1igv3OefnWjSQ==
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN EC PRIVATE KEY-----
|
||||
MHcCAQEEIC9RwJ6hf/zTwJbX2ECrYxhrqlGBnn5lDYOQbkptuEL5oAoGCCqGSM49
|
||||
AwEHoUQDQgAE/RYF7mPQlryJAvVdztvzTLpceKBq9IKjUl/6KKQF+pqPViJ20f37
|
||||
hXzxYJFkmBMRNIsCbx8nkpbLyut1LhQmdg==
|
||||
-----END EC PRIVATE KEY-----
|
||||
@@ -1,52 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDiDCCAw+gAwIBAgISBjEPeB90yypu/yMo3ERBZxu/MAoGCCqGSM49BAMDMDIx
|
||||
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
|
||||
ODAeFw0yNTEyMTgwODI4NDFaFw0yNjAzMTgwODI4NDBaMBkxFzAVBgNVBAMTDmJp
|
||||
bGxpc2RlYWQuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWicem9Ap+KeX
|
||||
UhptU9fmrNVw9gjjJ/I/UQZ+is09ge7d50kBkd7ow8KvlNMxZtUXHF9opN02uF5x
|
||||
BBE1cjdgOKOCAhwwggIYMA4GA1UdDwEB/wQEAwIHgDAdBgNVHSUEFjAUBggrBgEF
|
||||
BQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUY9iEdJH8Wy6P
|
||||
vI2UsPNCGO2oNTowHwYDVR0jBBgwFoAUjw0TovYuftFQbDMYOF1ZjiNykcowMgYI
|
||||
KwYBBQUHAQEEJjAkMCIGCCsGAQUFBzAChhZodHRwOi8vZTguaS5sZW5jci5vcmcv
|
||||
MBkGA1UdEQQSMBCCDmJpbGxpc2RlYWQuY29tMBMGA1UdIAQMMAowCAYGZ4EMAQIB
|
||||
MC0GA1UdHwQmMCQwIqAgoB6GHGh0dHA6Ly9lOC5jLmxlbmNyLm9yZy82NC5jcmww
|
||||
ggEEBgorBgEEAdZ5AgQCBIH1BIHyAPAAdQBJnJtp3h187Pw23s2HZKa4W68Kh4AZ
|
||||
0VVS++nrKd34wwAAAZswyOllAAAEAwBGMEQCIDrTTWZoGb7rHC4psDleICdxEAaZ
|
||||
lzTEcopW+93mVJtnAiBgPY32qCDjcauGf3JLjvtzFYcuOkiOEGBUHU6wa2riEQB3
|
||||
AA5XlLzzrqk+MxssmQez95Dfm8I9cTIl3SGpJaxhxU4hAAABmzDI6WIAAAQDAEgw
|
||||
RgIhAPILQ0gVGB+nKdbo6pVUD7gcy0qVkIxJqFVMrF/UcL+JAiEAzFw+AFQF/f+d
|
||||
6d7gAbDAiLZiLVDrj8XbzQZaARzr+oIwCgYIKoZIzj0EAwMDZwAwZAIwT7lz+2+X
|
||||
Rz17JLVsAXXhG6EzBhl25lVFhnfps89nC7ki+C2cctJgMaj3N/8HJ1MKAjBnaOs3
|
||||
9Ax+9JrmIxpqtDhJmewSpT5n8kfhlqHNWoF843imflgJ8L8jnOC/hXVrh1w=
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIEVjCCAj6gAwIBAgIQY5WTY8JOcIJxWRi/w9ftVjANBgkqhkiG9w0BAQsFADBP
|
||||
MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy
|
||||
Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNDAzMTMwMDAwMDBa
|
||||
Fw0yNzAzMTIyMzU5NTlaMDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBF
|
||||
bmNyeXB0MQswCQYDVQQDEwJFODB2MBAGByqGSM49AgEGBSuBBAAiA2IABNFl8l7c
|
||||
S7QMApzSsvru6WyrOq44ofTUOTIzxULUzDMMNMchIJBwXOhiLxxxs0LXeb5GDcHb
|
||||
R6EToMffgSZjO9SNHfY9gjMy9vQr5/WWOrQTZxh7az6NSNnq3u2ubT6HTKOB+DCB
|
||||
9TAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMB
|
||||
MBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFI8NE6L2Ln7RUGwzGDhdWY4j
|
||||
cpHKMB8GA1UdIwQYMBaAFHm0WeZ7tuXkAXOACIjIGlj26ZtuMDIGCCsGAQUFBwEB
|
||||
BCYwJDAiBggrBgEFBQcwAoYWaHR0cDovL3gxLmkubGVuY3Iub3JnLzATBgNVHSAE
|
||||
DDAKMAgGBmeBDAECATAnBgNVHR8EIDAeMBygGqAYhhZodHRwOi8veDEuYy5sZW5j
|
||||
ci5vcmcvMA0GCSqGSIb3DQEBCwUAA4ICAQBnE0hGINKsCYWi0Xx1ygxD5qihEjZ0
|
||||
RI3tTZz1wuATH3ZwYPIp97kWEayanD1j0cDhIYzy4CkDo2jB8D5t0a6zZWzlr98d
|
||||
AQFNh8uKJkIHdLShy+nUyeZxc5bNeMp1Lu0gSzE4McqfmNMvIpeiwWSYO9w82Ob8
|
||||
otvXcO2JUYi3svHIWRm3+707DUbL51XMcY2iZdlCq4Wa9nbuk3WTU4gr6LY8MzVA
|
||||
aDQG2+4U3eJ6qUF10bBnR1uuVyDYs9RhrwucRVnfuDj29CMLTsplM5f5wSV5hUpm
|
||||
Uwp/vV7M4w4aGunt74koX71n4EdagCsL/Yk5+mAQU0+tue0JOfAV/R6t1k+Xk9s2
|
||||
HMQFeoxppfzAVC04FdG9M+AC2JWxmFSt6BCuh3CEey3fE52Qrj9YM75rtvIjsm/1
|
||||
Hl+u//Wqxnu1ZQ4jpa+VpuZiGOlWrqSP9eogdOhCGisnyewWJwRQOqK16wiGyZeR
|
||||
xs/Bekw65vwSIaVkBruPiTfMOo0Zh4gVa8/qJgMbJbyrwwG97z/PRgmLKCDl8z3d
|
||||
tA0Z7qq7fta0Gl24uyuB05dqI5J1LvAzKuWdIjT1tP8qCoxSE/xpix8hX2dt3h+/
|
||||
jujUgFPFZ0EVZ0xSyBNRF3MboGZnYXFUxpNjTWPKpagDHJQmqrAcDmWJnMsFY3jS
|
||||
u1igv3OefnWjSQ==
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN EC PRIVATE KEY-----
|
||||
MHcCAQEEIHXVZ8Pj4mFbk0T9X84qAECixUcAKWrLUYpoe2V9TtejoAoGCCqGSM49
|
||||
AwEHoUQDQgAEWicem9Ap+KeXUhptU9fmrNVw9gjjJ/I/UQZ+is09ge7d50kBkd7o
|
||||
w8KvlNMxZtUXHF9opN02uF5xBBE1cjdgOA==
|
||||
-----END EC PRIVATE KEY-----
|
||||
@@ -1,86 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFDjCCA/agAwIBAgISBTirsfL94yH52jQYywbrM4oLMA0GCSqGSIb3DQEBCwUA
|
||||
MDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQwwCgYDVQQD
|
||||
EwNSMTIwHhcNMjUxMDEyMDU1OTEzWhcNMjYwMTEwMDU1OTEyWjAkMSIwIAYDVQQD
|
||||
Exlib29rbWFya3MuZ3lvemFtYW5jYXZlLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOC
|
||||
AQ8AMIIBCgKCAQEAuGEQDPITA3hzriRzhNiaU1KOpu14msclOHX9wWcG/v7QE0EN
|
||||
GPK7bGPqjzrutI09QoFigX4XLIzn0xrRpqKe+fNbgZWoWuOsCeayzKZmc3H+yoek
|
||||
SysRTR9IDI2y3xkU7CZ3EkY7+aDl/9/rv/NBOyQQpDXRFO8SUSIyJ2UyegPaQJuj
|
||||
tsp5p5fG/fkPkMlozPdVwSRUQOQkNqR8M8UcMnmpKc+eG8N/NS/vZ1sMmxWXx00q
|
||||
VbqOUfQEcSDWGt9UdKPwLYZY6w5LmmRTYiE+wUmONbJv0ft3lzGGHzSdsWfp4+mE
|
||||
U3FDOPsRGRRMM0b52R1uRTyaTYXdMtQxe4yi2QIDAQABo4ICKTCCAiUwDgYDVR0P
|
||||
AQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMB
|
||||
Af8EAjAAMB0GA1UdDgQWBBSkCB9fI7DXtbDuy7fU5fSJP7WPQTAfBgNVHSMEGDAW
|
||||
gBQAtSnyLY5vMeibTK14Pvrc6QzR0jAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUH
|
||||
MAKGF2h0dHA6Ly9yMTIuaS5sZW5jci5vcmcvMCQGA1UdEQQdMBuCGWJvb2ttYXJr
|
||||
cy5neW96YW1hbmNhdmUuZnIwEwYDVR0gBAwwCjAIBgZngQwBAgEwLgYDVR0fBCcw
|
||||
JTAjoCGgH4YdaHR0cDovL3IxMi5jLmxlbmNyLm9yZy8xMi5jcmwwggEEBgorBgEE
|
||||
AdZ5AgQCBIH1BIHyAPAAdgCWl2S/VViXrfdDh2g3CEJ36fA61fak8zZuRqQ/D8qp
|
||||
xgAAAZnXNf7BAAAEAwBHMEUCIQCFtgFu/TuVxAd7nax9T2v0zoViH65Ia2mqQeJR
|
||||
iG24bgIgZaHDX1JLnjVvhbprooLvnCcZBxZw0xTrQFud27h8pfkAdgBJnJtp3h18
|
||||
7Pw23s2HZKa4W68Kh4AZ0VVS++nrKd34wwAAAZnXNgZTAAAEAwBHMEUCIQCV37aO
|
||||
2vvowzIZbpNJ/J9UA68bzzR09Y44uGXYCmkDXAIgY7QEtJnXsak5l/xmmbctT67z
|
||||
fz+EH48PANqT8vPgR6wwDQYJKoZIhvcNAQELBQADggEBAG5DIrvRpkdr0BiKBNNi
|
||||
wzJjKPKkPEDnSacBI+ztUrcY4Y4f+f5zUKsjN57/LfoCYtHdn/TPaVBP3gk4U8wJ
|
||||
l32/oAOkP64wa9gx+00j1xG+YUc89/dXtVr/Z5ncIsbgxYvCDW7e0YYiHb3iNABM
|
||||
2w6E8u3vzSAA7b+7WbkZi5RoQoXWve57HGB0jW+Y/eO6PpTapUJVaRZt+p974zJB
|
||||
TlGU4b6HRWs1bRRNdoqoNfPtiaobu4RGVcY/RWtX9uKPCMp8EWVPwi9Ex1pSte/1
|
||||
+5G3x0vkaLGrjH7l5kmm0ac2q0eojdZBQChk+iLI/jwGrW7knSEEBimS2+4iSLy6
|
||||
nTA=
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFBjCCAu6gAwIBAgIRAMISMktwqbSRcdxA9+KFJjwwDQYJKoZIhvcNAQELBQAw
|
||||
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
|
||||
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw
|
||||
WhcNMjcwMzEyMjM1OTU5WjAzMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
|
||||
RW5jcnlwdDEMMAoGA1UEAxMDUjEyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
||||
CgKCAQEA2pgodK2+lP474B7i5Ut1qywSf+2nAzJ+Npfs6DGPpRONC5kuHs0BUT1M
|
||||
5ShuCVUxqqUiXXL0LQfCTUA83wEjuXg39RplMjTmhnGdBO+ECFu9AhqZ66YBAJpz
|
||||
kG2Pogeg0JfT2kVhgTU9FPnEwF9q3AuWGrCf4yrqvSrWmMebcas7dA8827JgvlpL
|
||||
Thjp2ypzXIlhZZ7+7Tymy05v5J75AEaz/xlNKmOzjmbGGIVwx1Blbzt05UiDDwhY
|
||||
XS0jnV6j/ujbAKHS9OMZTfLuevYnnuXNnC2i8n+cF63vEzc50bTILEHWhsDp7CH4
|
||||
WRt/uTp8n1wBnWIEwii9Cq08yhDsGwIDAQABo4H4MIH1MA4GA1UdDwEB/wQEAwIB
|
||||
hjAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwEgYDVR0TAQH/BAgwBgEB
|
||||
/wIBADAdBgNVHQ4EFgQUALUp8i2ObzHom0yteD763OkM0dIwHwYDVR0jBBgwFoAU
|
||||
ebRZ5nu25eQBc4AIiMgaWPbpm24wMgYIKwYBBQUHAQEEJjAkMCIGCCsGAQUFBzAC
|
||||
hhZodHRwOi8veDEuaS5sZW5jci5vcmcvMBMGA1UdIAQMMAowCAYGZ4EMAQIBMCcG
|
||||
A1UdHwQgMB4wHKAaoBiGFmh0dHA6Ly94MS5jLmxlbmNyLm9yZy8wDQYJKoZIhvcN
|
||||
AQELBQADggIBAI910AnPanZIZTKS3rVEyIV29BWEjAK/duuz8eL5boSoVpHhkkv3
|
||||
4eoAeEiPdZLj5EZ7G2ArIK+gzhTlRQ1q4FKGpPPaFBSpqV/xbUb5UlAXQOnkHn3m
|
||||
FVj+qYv87/WeY+Bm4sN3Ox8BhyaU7UAQ3LeZ7N1X01xxQe4wIAAE3JVLUCiHmZL+
|
||||
qoCUtgYIFPgcg350QMUIWgxPXNGEncT921ne7nluI02V8pLUmClqXOsCwULw+PVO
|
||||
ZCB7qOMxxMBoCUeL2Ll4oMpOSr5pJCpLN3tRA2s6P1KLs9TSrVhOk+7LX28NMUlI
|
||||
usQ/nxLJID0RhAeFtPjyOCOscQBA53+NRjSCak7P4A5jX7ppmkcJECL+S0i3kXVU
|
||||
y5Me5BbrU8973jZNv/ax6+ZK6TM8jWmimL6of6OrX7ZU6E2WqazzsFrLG3o2kySb
|
||||
zlhSgJ81Cl4tv3SbYiYXnJExKQvzf83DYotox3f0fwv7xln1A2ZLplCb0O+l/AK0
|
||||
YE0DS2FPxSAHi0iwMfW2nNHJrXcY3LLHD77gRgje4Eveubi2xxa+Nmk/hmhLdIET
|
||||
iVDFanoCrMVIpQ59XWHkzdFmoHXHBV7oibVjGSO7ULSQ7MJ1Nz51phuDJSgAIU7A
|
||||
0zrLnOrAj/dfrlEWRhCvAgbuwLZX1A2sjNjXoPOHbsPiy+lO1KF8/XY7
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
MIIEowIBAAKCAQEAuGEQDPITA3hzriRzhNiaU1KOpu14msclOHX9wWcG/v7QE0EN
|
||||
GPK7bGPqjzrutI09QoFigX4XLIzn0xrRpqKe+fNbgZWoWuOsCeayzKZmc3H+yoek
|
||||
SysRTR9IDI2y3xkU7CZ3EkY7+aDl/9/rv/NBOyQQpDXRFO8SUSIyJ2UyegPaQJuj
|
||||
tsp5p5fG/fkPkMlozPdVwSRUQOQkNqR8M8UcMnmpKc+eG8N/NS/vZ1sMmxWXx00q
|
||||
VbqOUfQEcSDWGt9UdKPwLYZY6w5LmmRTYiE+wUmONbJv0ft3lzGGHzSdsWfp4+mE
|
||||
U3FDOPsRGRRMM0b52R1uRTyaTYXdMtQxe4yi2QIDAQABAoIBABW8D2XPRXGDyfMt
|
||||
xdZTqEGJOlqwJKbuMdOJiSu6xubZR9L1OKOHvZNF5fkTY98xxRZpZSDJqdatF4jZ
|
||||
oPwpMF9bkh5g83MfYoDaSpp4RRx3xCbAvZvEzGnQdbBRJdRJwx8hW6jyUZCYKHS0
|
||||
wzgh5z8e/b01wNtcYUbiJpJhSgV66jjWbnGWuhFcRVMyGsTnbVAozRL8qniWPkJU
|
||||
/2j8WzVZRB7a69632e2UZ97LemK5r/H1TbvtLPjKZQby521lgRqLKphdf/MA2MHA
|
||||
q75IbM/jZ8M9Uojqvzv3xjflm8BUNrqFOHmDyhRd1d8HcFx1o95ao8xrfNaiaVD2
|
||||
xRDtU3kCgYEA86uqWyZ5Ljy5xN4uR/wE3b1/gk7OgSgMy+wuzmaw25tAbZaHFc9b
|
||||
dUeoQhgnA5RezRIAEvefOm+y5PwrK++Li/EKyI/661gFRH4YC7tHZUAJXyd59PIb
|
||||
wsfie9R01CNO0ixuVMGEVhKPXfRxcKT0DMmOPAfjlBYuXKNgUxR0EM0CgYEAwbVg
|
||||
6aieLxDbGkg8+I6uPBvOzYnnfw2eAaKUPWJiuxuoD3uFz9Yuyiytll82pah8jEG2
|
||||
A2UaBao9ncwDScOC4zRPGwF3Vim3TaOuf4W1WJdtwj7QME7sV9H52vd3C/J4n+9r
|
||||
DFqpKHXNoNsgw+7Aqjk+1Xy2eooklruwC2mvKj0CgYAvMX9UGhZ8SwybwYBrNrdm
|
||||
ju4kOckrIKuhz0OdfCwizGXlE7NkGP4Yr+E5s93Shqj5xNO42LbBJaMbUG+4GbQI
|
||||
TY4OHDy32htjEZzsoMAKLyXhhQ7MzxtrVTVbUGG0OIZqlGpmBfjwhrW3t8FE1N3j
|
||||
oCHpJIoCQ22FSas9TAfSvQKBgHUmT6UgYAJQ7GF5vL4J9F/P5YMy2rlhL+UHQSXa
|
||||
oaFNOZebebLXcta8rILbtH39Zs2gVAa7l0BD1B3hqz9qKXdlRE4t1dFbS0t+KWNg
|
||||
JuucMTofqOL+aDs4dyYxMWMdUkxPjGsdTV512FVnEOrOMuD/2/tbADUd5MDwY6iT
|
||||
Uud1AoGBAMdL6+rK9mbmvLhhN/xDHmWQoe3317NInQCkHJqs41OSUq8/qggxUnMA
|
||||
69yqe5tH5YAqS70bpQ2VgRot+TbP904moftHduHbnNjUTMbYIXCH4eEVX1TKo6Ed
|
||||
FPbxOVDaIuMHCGAiwF7IpSdWrfngG8fatoqBy/KgipUaWLvefUoN
|
||||
-----END RSA PRIVATE KEY-----
|
||||
@@ -1,86 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFFTCCA/2gAwIBAgISBj56ngBbd9ilYIH2IjAHGKbsMA0GCSqGSIb3DQEBCwUA
|
||||
MDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQwwCgYDVQQD
|
||||
EwNSMTIwHhcNMjUxMjE4MDc1NzUwWhcNMjYwMzE4MDc1NzQ5WjAkMSIwIAYDVQQD
|
||||
ExlidW5rZXJ3ZWIuZ3lvemFtYW5jYXZlLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOC
|
||||
AQ8AMIIBCgKCAQEAsOA/5iRK/NIeyZl4IfzKvV9pRCQWpEpbS+vpp/S0dERTfD01
|
||||
VeYIcvGMDQucrkACCFEEtKmDcwgbfS6B1RWX5yxs8mVcfgOuf1e+GO17OOn03XDw
|
||||
BrnRG9JoAmihCbEF2cOhfah3pSD5krPTxhk38uyk8EQIbVdjV41u7NZnSMCI9rdh
|
||||
ewCFbP+cZ4rREkxQzDiKe6ktPjmyChGvNggjnwaVEDRC1DgbUb9l/EC0gYj5Z+9V
|
||||
npbgqNantzwQvQ+XNuqMQeZFzJAHG2PLLc1qyZFaPgwLvVFLp3yrbRnlGKRXp3kf
|
||||
UgsiZHJ77vRxkGCUiZiJe1lwsY0Iqqu3a8BBGwIDAQABo4ICMDCCAiwwDgYDVR0P
|
||||
AQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMB
|
||||
Af8EAjAAMB0GA1UdDgQWBBSUjnSf91RZGSbgA3U8bhIHE4HlZjAfBgNVHSMEGDAW
|
||||
gBQAtSnyLY5vMeibTK14Pvrc6QzR0jAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUH
|
||||
MAKGF2h0dHA6Ly9yMTIuaS5sZW5jci5vcmcvMCQGA1UdEQQdMBuCGWJ1bmtlcndl
|
||||
Yi5neW96YW1hbmNhdmUuZnIwEwYDVR0gBAwwCjAIBgZngQwBAgEwLwYDVR0fBCgw
|
||||
JjAkoCKgIIYeaHR0cDovL3IxMi5jLmxlbmNyLm9yZy8xMDkuY3JsMIIBCgYKKwYB
|
||||
BAHWeQIEAgSB+wSB+AD2AH0Apcl4kl1XRheChw3YiWYLXFVki30AQPLsB2hR0Yhp
|
||||
GfcAAAGbMKyqXgAIAAAFACwEIpIEAwBGMEQCIHbBpTdHt5vi9S2Ua8UMzTsWhKLY
|
||||
/suTkTG3mFqGx3BtAiAb+Yf8LhtP/ba/1yQmQka1rIL9N1R69Wx5RgjPJCOfdwB1
|
||||
ANFuqaVoB35mNaA/N6XdvAOlPEESFNSIGPXpMbMjy5UEAAABmzCsstkAAAQDAEYw
|
||||
RAIgQgWc7vLkyVRGBi5b6aBupeUwMKUu6pKWIf/kbVYzZ70CIHxsHmTa4pMb9XTi
|
||||
8ZNzhSSIttpHY+RR3XcAZfyUNLbOMA0GCSqGSIb3DQEBCwUAA4IBAQBxj+EwrRkM
|
||||
pQjVEZdUmzA5bl0/Arb2Dr1/zse1MzosBYdS452fhJhdA0VAwG7HBu7lQP62sAxD
|
||||
anwcyb0n86epgbYv1WKWoFa7ndtqRn/otU+RlgTjz+gR0tQg0WcZEE71QoH6OcDb
|
||||
jmGpHc9JipuBJHgp80++TGC1s60TDgF41int3DeEHw28ULB7NlZDjMGN2NQ98CCc
|
||||
ACrkLSUM9PkX/6isqhaAdO9q95Yaq0pOUV4w7+4PgRcVYDZKDEoYOorgtj8Guamb
|
||||
minnelS4+ZX5jf8YTvVOuhi1pQxUwwaP4hmCgkNm94C2Xl/2ZymcrN0TTSHE7WSz
|
||||
5SloiFYkYjDE
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFBjCCAu6gAwIBAgIRAMISMktwqbSRcdxA9+KFJjwwDQYJKoZIhvcNAQELBQAw
|
||||
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
|
||||
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw
|
||||
WhcNMjcwMzEyMjM1OTU5WjAzMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
|
||||
RW5jcnlwdDEMMAoGA1UEAxMDUjEyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
||||
CgKCAQEA2pgodK2+lP474B7i5Ut1qywSf+2nAzJ+Npfs6DGPpRONC5kuHs0BUT1M
|
||||
5ShuCVUxqqUiXXL0LQfCTUA83wEjuXg39RplMjTmhnGdBO+ECFu9AhqZ66YBAJpz
|
||||
kG2Pogeg0JfT2kVhgTU9FPnEwF9q3AuWGrCf4yrqvSrWmMebcas7dA8827JgvlpL
|
||||
Thjp2ypzXIlhZZ7+7Tymy05v5J75AEaz/xlNKmOzjmbGGIVwx1Blbzt05UiDDwhY
|
||||
XS0jnV6j/ujbAKHS9OMZTfLuevYnnuXNnC2i8n+cF63vEzc50bTILEHWhsDp7CH4
|
||||
WRt/uTp8n1wBnWIEwii9Cq08yhDsGwIDAQABo4H4MIH1MA4GA1UdDwEB/wQEAwIB
|
||||
hjAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwEgYDVR0TAQH/BAgwBgEB
|
||||
/wIBADAdBgNVHQ4EFgQUALUp8i2ObzHom0yteD763OkM0dIwHwYDVR0jBBgwFoAU
|
||||
ebRZ5nu25eQBc4AIiMgaWPbpm24wMgYIKwYBBQUHAQEEJjAkMCIGCCsGAQUFBzAC
|
||||
hhZodHRwOi8veDEuaS5sZW5jci5vcmcvMBMGA1UdIAQMMAowCAYGZ4EMAQIBMCcG
|
||||
A1UdHwQgMB4wHKAaoBiGFmh0dHA6Ly94MS5jLmxlbmNyLm9yZy8wDQYJKoZIhvcN
|
||||
AQELBQADggIBAI910AnPanZIZTKS3rVEyIV29BWEjAK/duuz8eL5boSoVpHhkkv3
|
||||
4eoAeEiPdZLj5EZ7G2ArIK+gzhTlRQ1q4FKGpPPaFBSpqV/xbUb5UlAXQOnkHn3m
|
||||
FVj+qYv87/WeY+Bm4sN3Ox8BhyaU7UAQ3LeZ7N1X01xxQe4wIAAE3JVLUCiHmZL+
|
||||
qoCUtgYIFPgcg350QMUIWgxPXNGEncT921ne7nluI02V8pLUmClqXOsCwULw+PVO
|
||||
ZCB7qOMxxMBoCUeL2Ll4oMpOSr5pJCpLN3tRA2s6P1KLs9TSrVhOk+7LX28NMUlI
|
||||
usQ/nxLJID0RhAeFtPjyOCOscQBA53+NRjSCak7P4A5jX7ppmkcJECL+S0i3kXVU
|
||||
y5Me5BbrU8973jZNv/ax6+ZK6TM8jWmimL6of6OrX7ZU6E2WqazzsFrLG3o2kySb
|
||||
zlhSgJ81Cl4tv3SbYiYXnJExKQvzf83DYotox3f0fwv7xln1A2ZLplCb0O+l/AK0
|
||||
YE0DS2FPxSAHi0iwMfW2nNHJrXcY3LLHD77gRgje4Eveubi2xxa+Nmk/hmhLdIET
|
||||
iVDFanoCrMVIpQ59XWHkzdFmoHXHBV7oibVjGSO7ULSQ7MJ1Nz51phuDJSgAIU7A
|
||||
0zrLnOrAj/dfrlEWRhCvAgbuwLZX1A2sjNjXoPOHbsPiy+lO1KF8/XY7
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
MIIEogIBAAKCAQEAsOA/5iRK/NIeyZl4IfzKvV9pRCQWpEpbS+vpp/S0dERTfD01
|
||||
VeYIcvGMDQucrkACCFEEtKmDcwgbfS6B1RWX5yxs8mVcfgOuf1e+GO17OOn03XDw
|
||||
BrnRG9JoAmihCbEF2cOhfah3pSD5krPTxhk38uyk8EQIbVdjV41u7NZnSMCI9rdh
|
||||
ewCFbP+cZ4rREkxQzDiKe6ktPjmyChGvNggjnwaVEDRC1DgbUb9l/EC0gYj5Z+9V
|
||||
npbgqNantzwQvQ+XNuqMQeZFzJAHG2PLLc1qyZFaPgwLvVFLp3yrbRnlGKRXp3kf
|
||||
UgsiZHJ77vRxkGCUiZiJe1lwsY0Iqqu3a8BBGwIDAQABAoIBAAM41TZ83cLU6bZU
|
||||
GIdMor19YfOu+/Hv4CbgvB0Q95fl8LwNeg2/sX1f32Roxui5BhsfArNvImkI3PCp
|
||||
qrgg0Gdn0e+Tyhy04Mu1Y6NHnDGGuC0FKXzYi1xy4kMnoxtZQVkyAkdBjOBnWonX
|
||||
bcRTjEcyvrRua4A2ZyWz+rEkx1/gs41GiLseRJ3twdKZv7cjZh0HuiGB0C4aCKHe
|
||||
WrmZt/mqYRCkrcr/6r18i841U0afhJ7NCNJy0irhblOUVHVOHVEMTybzq73kZbtN
|
||||
Sz3/RbABjTdAUVBBx6ENVSUCtVwZq2juDFWcxd8+CcPJsmeuck1/qEpjmenNWm94
|
||||
JysSXd0CgYEA5RZB5BWst82Yr+Y4ORRIDLbCt65sYaXyakkwMf0kNm+Y1NLKb768
|
||||
c+6cwxmTxc1tTUH2SlUGArhWVNrSxUnr06k+5H+WLkqbpvHR6+VvPa2iPtMIQTuV
|
||||
tLknLOw1MV3syaGtDRpgDri1sR8Yw5ca3QeRAIWw/qUFKGRPH0r3XUUCgYEAxafC
|
||||
E9xpH/WYp5hAekgLN4TSde/PLcDCx9P36c7Bx4FWplL7uccrS+E7u+t5nUPS7TuG
|
||||
sB7KhnE/oIUjap8DCVE1YxVxycLmDatVWzMZlrr1Pg5M0/9WCwxKqKNOVtkyPs2f
|
||||
xPNY/LkWY5AbijmQM2RNjr1I4q8WSBl9cd/pGt8CgYAYJ3afE+H4J0dYFJANBKRs
|
||||
IsD5GPz4dsTOjBT20FgHHVEh72/ExHmeR6Rjtcis7HH/2Vqcj8ZodwMzQzdB8f9Z
|
||||
e9jTwtgU3Wz39ztJAhHukOYwdZPDPQMV4QfOZsFdCSg0QkW6wfMq2jLeEAdOaBo+
|
||||
/9M8GNyGnOOkVJ87D25xeQKBgG2k8PlZhItxDxyxTdtHicljiehYfmJQEv0M7fKq
|
||||
ej501h9v2yokfTUbnapSJuWBkUl+gunCOvC3c+dU09+6k9GgVfBAHh4hWsLsb24m
|
||||
+6Ps1Ex3XFEhzJZWXDgOV0/ALqo+IMn9gDi5Z90VPOHBqueHVaq//+WX4NFgKoF4
|
||||
B3SbAoGAUJ7kvZb2d8Yhppdx+OjFa227UGVwOgc8P4hWpClLwQqmHttKhpqCB+yX
|
||||
8D7OK333aBvN3NthSNUJoPHEM4rdbFsKcbLQvrBlIBRy5aa84VD94CWvuoNjfPxw
|
||||
alUOB38x8qUVH6gzi3NUs/9PMgjMMwID3NLQ8z5seGHfnd/DUVc=
|
||||
-----END RSA PRIVATE KEY-----
|
||||
@@ -1,85 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFBDCCA+ygAwIBAgISBn9gA26D86mezvSQtA1Y3nwOMA0GCSqGSIb3DQEBCwUA
|
||||
MDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQwwCgYDVQQD
|
||||
EwNSMTEwHhcNMjUwODAxMjEwMjI3WhcNMjUxMDMwMjEwMjI2WjAfMR0wGwYDVQQD
|
||||
ExRjaGF0Lmd5b3phbWFuY2F2ZS5mcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
|
||||
AQoCggEBALBB1huo7OZHlWlSy4VLUjf8AkFva/uIV5KMQeXc7s74NSEGh5iOrEKu
|
||||
3An4uihUw2ZDDXp1mqdqr+eP/n6NTmBJC/1x9/G9S9i2Yqdc2+j5/+dcPCxg5c2u
|
||||
qrFVSG0xnPpKpt5pAGDG2p7GK23y3G7Udx3ijbMj/NfcIiVA2FJSAe6d68X/HAtL
|
||||
IndEThevNmVcKF/L4jkL1vqbY8LS6I/mBpzQ6tlENuLjkwpfCp8nicbcamahXd5L
|
||||
15DS2kwuGyr1eHDIwDuDzGmmP4IeL/dZYU+yn+h+E502Sc4b9fH//jPHxwEIEUZL
|
||||
GVxRBmfyjAWl+D7lEVuoTeaYnXJfpQMCAwEAAaOCAiQwggIgMA4GA1UdDwEB/wQE
|
||||
AwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIw
|
||||
ADAdBgNVHQ4EFgQUrNmO5KamFrHN2+qyvPMhnxiP6XMwHwYDVR0jBBgwFoAUxc9G
|
||||
pOr0w8B6bJXELbBeki8m47kwMwYIKwYBBQUHAQEEJzAlMCMGCCsGAQUFBzAChhdo
|
||||
dHRwOi8vcjExLmkubGVuY3Iub3JnLzAfBgNVHREEGDAWghRjaGF0Lmd5b3phbWFu
|
||||
Y2F2ZS5mcjATBgNVHSAEDDAKMAgGBmeBDAECATAuBgNVHR8EJzAlMCOgIaAfhh1o
|
||||
dHRwOi8vcjExLmMubGVuY3Iub3JnLzE1LmNybDCCAQQGCisGAQQB1nkCBAIEgfUE
|
||||
gfIA8AB1AKRCxQZJYGFUjw/U6pz7ei0mRU2HqX8v30VZ9idPOoRUAAABmGenChMA
|
||||
AAQDAEYwRAIgbTVAM8ZZRtCtlpwpVWRV/xJvcd2QroAAnRx3hf2EVU0CIBCTidig
|
||||
GGL9QM5JbLNoNrFPYFszn+LwxPcuhpSKRzIXAHcADeHyMCvTDcFAYhIJ6lUu/Ed0
|
||||
fLHX6TDvDkIetH5OqjQAAAGYZ6cR4gAABAMASDBGAiEAvlfdVVOX5K/4hvgK9Hit
|
||||
hGmRlXdnKzJuc3qoRqSHWcECIQDrS/pP+Mln4Aq2H3hYcQh8BlSUMLCp4VzWwdrY
|
||||
Dv991jANBgkqhkiG9w0BAQsFAAOCAQEAnwk6hmlht3PkJwoyp2HMgRVb8zUXitxi
|
||||
0D+nsaDKEDZEhfmbDkV+BCKQuRrnVCiNxbRX9lxlgOm/GvnwQkoiH0zv3Ec7y8ei
|
||||
QjZy8snvkJX9L0fV+2aOkgp+xQTk6yQQTlO2SXg7CQuUqg9di33/76d+olPc4uVJ
|
||||
0tRgg5FqrvZmJYtqkGAF5dZEBXk+usZkXCKlZGKUky4qeKtw3+p1iA7cF8tAiikB
|
||||
x8H0cnWSzZUzFxkZl+0q6ReUlIcpucdsNu2o03ksNH6Go4V+bsF+zHRjLOMUgKjD
|
||||
YV3sisgMn+naBG/Lpt0McAT7F34CGUJQWMI+tJg+tOvPcjQL3UNtvg==
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFBjCCAu6gAwIBAgIRAIp9PhPWLzDvI4a9KQdrNPgwDQYJKoZIhvcNAQELBQAw
|
||||
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
|
||||
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw
|
||||
WhcNMjcwMzEyMjM1OTU5WjAzMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
|
||||
RW5jcnlwdDEMMAoGA1UEAxMDUjExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
||||
CgKCAQEAuoe8XBsAOcvKCs3UZxD5ATylTqVhyybKUvsVAbe5KPUoHu0nsyQYOWcJ
|
||||
DAjs4DqwO3cOvfPlOVRBDE6uQdaZdN5R2+97/1i9qLcT9t4x1fJyyXJqC4N0lZxG
|
||||
AGQUmfOx2SLZzaiSqhwmej/+71gFewiVgdtxD4774zEJuwm+UE1fj5F2PVqdnoPy
|
||||
6cRms+EGZkNIGIBloDcYmpuEMpexsr3E+BUAnSeI++JjF5ZsmydnS8TbKF5pwnnw
|
||||
SVzgJFDhxLyhBax7QG0AtMJBP6dYuC/FXJuluwme8f7rsIU5/agK70XEeOtlKsLP
|
||||
Xzze41xNG/cLJyuqC0J3U095ah2H2QIDAQABo4H4MIH1MA4GA1UdDwEB/wQEAwIB
|
||||
hjAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwEgYDVR0TAQH/BAgwBgEB
|
||||
/wIBADAdBgNVHQ4EFgQUxc9GpOr0w8B6bJXELbBeki8m47kwHwYDVR0jBBgwFoAU
|
||||
ebRZ5nu25eQBc4AIiMgaWPbpm24wMgYIKwYBBQUHAQEEJjAkMCIGCCsGAQUFBzAC
|
||||
hhZodHRwOi8veDEuaS5sZW5jci5vcmcvMBMGA1UdIAQMMAowCAYGZ4EMAQIBMCcG
|
||||
A1UdHwQgMB4wHKAaoBiGFmh0dHA6Ly94MS5jLmxlbmNyLm9yZy8wDQYJKoZIhvcN
|
||||
AQELBQADggIBAE7iiV0KAxyQOND1H/lxXPjDj7I3iHpvsCUf7b632IYGjukJhM1y
|
||||
v4Hz/MrPU0jtvfZpQtSlET41yBOykh0FX+ou1Nj4ScOt9ZmWnO8m2OG0JAtIIE38
|
||||
01S0qcYhyOE2G/93ZCkXufBL713qzXnQv5C/viOykNpKqUgxdKlEC+Hi9i2DcaR1
|
||||
e9KUwQUZRhy5j/PEdEglKg3l9dtD4tuTm7kZtB8v32oOjzHTYw+7KdzdZiw/sBtn
|
||||
UfhBPORNuay4pJxmY/WrhSMdzFO2q3Gu3MUBcdo27goYKjL9CTF8j/Zz55yctUoV
|
||||
aneCWs/ajUX+HypkBTA+c8LGDLnWO2NKq0YD/pnARkAnYGPfUDoHR9gVSp/qRx+Z
|
||||
WghiDLZsMwhN1zjtSC0uBWiugF3vTNzYIEFfaPG7Ws3jDrAMMYebQ95JQ+HIBD/R
|
||||
PBuHRTBpqKlyDnkSHDHYPiNX3adPoPAcgdF3H2/W0rmoswMWgTlLn1Wu0mrks7/q
|
||||
pdWfS6PJ1jty80r2VKsM/Dj3YIDfbjXKdaFU5C+8bhfJGqU3taKauuz0wHVGT3eo
|
||||
6FlWkWYtbt4pgdamlwVeZEW+LM7qZEJEsMNPrfC03APKmZsJgpWCDWOKZvkZcvjV
|
||||
uYkQ4omYCTX5ohy+knMjdOmdH9c7SpqEWBDC86fiNex+O0XOMEZSa8DA
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
MIIEowIBAAKCAQEAsEHWG6js5keVaVLLhUtSN/wCQW9r+4hXkoxB5dzuzvg1IQaH
|
||||
mI6sQq7cCfi6KFTDZkMNenWap2qv54/+fo1OYEkL/XH38b1L2LZip1zb6Pn/51w8
|
||||
LGDlza6qsVVIbTGc+kqm3mkAYMbansYrbfLcbtR3HeKNsyP819wiJUDYUlIB7p3r
|
||||
xf8cC0sid0ROF682ZVwoX8viOQvW+ptjwtLoj+YGnNDq2UQ24uOTCl8KnyeJxtxq
|
||||
ZqFd3kvXkNLaTC4bKvV4cMjAO4PMaaY/gh4v91lhT7Kf6H4TnTZJzhv18f/+M8fH
|
||||
AQgRRksZXFEGZ/KMBaX4PuURW6hN5pidcl+lAwIDAQABAoIBAAIAlXaV+i75hDSA
|
||||
mMhIXUQ+jCYDJoZie6AyELOUSXA3eJ8J7HNqt4FAbEZ+uVqo79lTDK2l9V5Og3YN
|
||||
eDYm08ubONQlvcvUuy5YkBFXqDXi1SnjLdnRNfsar1y5W8vFwwNC4tdm+Page65P
|
||||
EQI8Po3RwxKnVrXAxGgNW6PxsyNoPzZ8mQUn5jIynhDQNeg5cU0lyvIIzmWEBzsc
|
||||
tNheBekfwOpwHXsnq320yMDbFKliKSq1915KBC6vbpfEsxsvD18U5uZ9o+N1nMGs
|
||||
nMnKfwE8fqn+urjgPtCPWGTMUwum9XUdHhn04MrJzBsITRzx839nDO+VGQL5GRkU
|
||||
UoQZl/UCgYEA9K34SOOfaJVCCLaRqhj4Si6+Mdg3ByUBJsqySJoCW9BkcRPak8uQ
|
||||
jmWEBUqe3RxzfbKfujurMiQ2IX9l/lkiAR58p2OLV4VUTr48j33u0NSdVEkY4b2l
|
||||
a+48EvvIcbcn0ttUJQeYwDW8Xmt3DIvsP3292DAYcJeTsN6xOToVDy8CgYEAuGl1
|
||||
foU3hVnnT+8F8xqeVAbJ8cZrne7uaEXwV3sKkNLgpXVaFfjYvooAUd7BNA5elPo6
|
||||
8RGOVh+nlP01iqrz10rJoPLryPTwUbrCaj869gIRiHkkEdwdXEY387h2TLSRTCih
|
||||
SpwV1DApVFvSiHl88tXF95vws09N10DW2ohfMm0CgYBhJAyVy6EHIXL1CJ6uPHme
|
||||
4g3qth+qu3tIjmLXxiU3lHW8GxjFYqVCk3UlsKl/uYL0nY0in/vozU2cYPr6TyLb
|
||||
9OGihzfUCIAfPxHGGkZNLIxF4Tt6rBNX1V6OXt4Gn6O06BTxGqH/dZYSmnHKTmb+
|
||||
EgrkILwjP1qIdvE/ehrQSwKBgQCR5sYR2r5JoA61nEvdwiKgIlrmEfGVG7O+Bg+Y
|
||||
dv2uBVm9LrKejaqWXcLRA2dikzfbsHqvvg8aLqM86nTRCF4x6LbLw0YvUTNNxnAI
|
||||
9YvllU9f5VBXXQpRtjCQgFIAcCBA3Ch4SjOvFIeueZOBbHUh/2ZIeDUg+M6CTodu
|
||||
kNSYpQKBgG+ye9k/stD7Ce2ptZbk50n/iRRdlzbyljHENyBk2DjSviDrxkYbC5Rw
|
||||
EQrmMa4fKRFAAojmtdAqU/QkJZFWwuTpg4j8Fo6FhQvB0MKb2eYMSJkAdOCqSdPY
|
||||
ijbLRw+lIspKjlKY8WsLKLAnQhco9NC//EhQDx7A1KhXcDrZudf5
|
||||
-----END RSA PRIVATE KEY-----
|
||||
@@ -1,86 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFFjCCA/6gAwIBAgISBmF16UkC3PMpXIfv3RnBTerJMA0GCSqGSIb3DQEBCwUA
|
||||
MDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQwwCgYDVQQD
|
||||
EwNSMTIwHhcNMjUxMjE4MDc1NzU3WhcNMjYwMzE4MDc1NzU2WjAkMSIwIAYDVQQD
|
||||
ExlmdW5rd2hhbGUuZ3lvemFtYW5jYXZlLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOC
|
||||
AQ8AMIIBCgKCAQEAyyICyuDbPPAAyDzIHp/sAXHfcBmbQ2zNYJxYtSywwckcq/a7
|
||||
d1EKPf4Ay15BHTv49HVjP6vVmA3zGKKYIBkvvrfxrMwvxUtZxyCQzAER++npG5za
|
||||
pRCOgnXiM41jDezxMJxsrT1vXkx1LLaMMkTvQ6W1mzIYqVojB7JOqLeXH88F35y0
|
||||
Yj6rdUwchZhenjKW0tVWFXI4i5y4+pKo0xPG3seUvNAAT85cdx/IjBTSPKTnkUYA
|
||||
zzBtY5gDoNOq10I2FUg1fgiVLNGs7TxK22uRUQj25e8f/68GfiBp9DGXN6avHhra
|
||||
vDfn95PCvlBwHjYPq31abTUA6OpR/2WJKEGiawIDAQABo4ICMTCCAi0wDgYDVR0P
|
||||
AQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMB
|
||||
Af8EAjAAMB0GA1UdDgQWBBTaJt+qYqv4kOu9G+ywhZaOk4epaDAfBgNVHSMEGDAW
|
||||
gBQAtSnyLY5vMeibTK14Pvrc6QzR0jAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUH
|
||||
MAKGF2h0dHA6Ly9yMTIuaS5sZW5jci5vcmcvMCQGA1UdEQQdMBuCGWZ1bmt3aGFs
|
||||
ZS5neW96YW1hbmNhdmUuZnIwEwYDVR0gBAwwCjAIBgZngQwBAgEwLgYDVR0fBCcw
|
||||
JTAjoCGgH4YdaHR0cDovL3IxMi5jLmxlbmNyLm9yZy83NC5jcmwwggEMBgorBgEE
|
||||
AdZ5AgQCBIH9BIH6APgAfgClyXiSXVdGF4KHDdiJZgtcVWSLfQBA8uwHaFHRiGkZ
|
||||
9wAAAZswrMW2AAgAAAUALAQi+AQDAEcwRQIgb4npA09q1nqCAG/EaCgHTseZPjxk
|
||||
rIBjQ8BZajxiuGQCIQCD/Zg395UkUuULwLE1rzmudM7a+PHIwBO4C0IPN7VuUwB2
|
||||
AMs49xWJfIShRF9bwd37yW7ymlnNRwppBYWwyxTDFFjnAAABmzCsy8cAAAQDAEcw
|
||||
RQIhAMOPYw1L2nEpYI1F9KB9f4Mg8M25fTJu1hDwK36rUac5AiBbiCTGXJfjo2KF
|
||||
8Z84L6xEG3f5jvHFlFGifpVrHfuWDzANBgkqhkiG9w0BAQsFAAOCAQEAlOhA4PZZ
|
||||
KEhPezLduNp/02+v7K4+sKjD+p5t+hfkK9BRLISII0s9wBvtM5tbjiU/29X/i5xa
|
||||
WhftBHV0aVd3UCmx8oSqnG20H2UrtsGpqpNtEfhQ0LaDFbSQNClIyuX0MrP7OcsS
|
||||
bBUNWavZodEpBycrZCrIVIURMRsbAqFSFVRd6ZYep0E0U3/bj4rwQ7r1zdXampVa
|
||||
HiTogc6gWVEIIU6M6JwGHK496UrkDBJoArHgJU1oAvkJ0mQfnvF+/BQLzP6QkWlR
|
||||
K7MqyUQ44XoeUE4/vq4SztBfekxLeizzcTtDBS0w6Gw8J4TxSbZtW7uvsgbcNtJW
|
||||
MlxZonNBkyDHkQ==
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFBjCCAu6gAwIBAgIRAMISMktwqbSRcdxA9+KFJjwwDQYJKoZIhvcNAQELBQAw
|
||||
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
|
||||
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw
|
||||
WhcNMjcwMzEyMjM1OTU5WjAzMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
|
||||
RW5jcnlwdDEMMAoGA1UEAxMDUjEyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
||||
CgKCAQEA2pgodK2+lP474B7i5Ut1qywSf+2nAzJ+Npfs6DGPpRONC5kuHs0BUT1M
|
||||
5ShuCVUxqqUiXXL0LQfCTUA83wEjuXg39RplMjTmhnGdBO+ECFu9AhqZ66YBAJpz
|
||||
kG2Pogeg0JfT2kVhgTU9FPnEwF9q3AuWGrCf4yrqvSrWmMebcas7dA8827JgvlpL
|
||||
Thjp2ypzXIlhZZ7+7Tymy05v5J75AEaz/xlNKmOzjmbGGIVwx1Blbzt05UiDDwhY
|
||||
XS0jnV6j/ujbAKHS9OMZTfLuevYnnuXNnC2i8n+cF63vEzc50bTILEHWhsDp7CH4
|
||||
WRt/uTp8n1wBnWIEwii9Cq08yhDsGwIDAQABo4H4MIH1MA4GA1UdDwEB/wQEAwIB
|
||||
hjAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwEgYDVR0TAQH/BAgwBgEB
|
||||
/wIBADAdBgNVHQ4EFgQUALUp8i2ObzHom0yteD763OkM0dIwHwYDVR0jBBgwFoAU
|
||||
ebRZ5nu25eQBc4AIiMgaWPbpm24wMgYIKwYBBQUHAQEEJjAkMCIGCCsGAQUFBzAC
|
||||
hhZodHRwOi8veDEuaS5sZW5jci5vcmcvMBMGA1UdIAQMMAowCAYGZ4EMAQIBMCcG
|
||||
A1UdHwQgMB4wHKAaoBiGFmh0dHA6Ly94MS5jLmxlbmNyLm9yZy8wDQYJKoZIhvcN
|
||||
AQELBQADggIBAI910AnPanZIZTKS3rVEyIV29BWEjAK/duuz8eL5boSoVpHhkkv3
|
||||
4eoAeEiPdZLj5EZ7G2ArIK+gzhTlRQ1q4FKGpPPaFBSpqV/xbUb5UlAXQOnkHn3m
|
||||
FVj+qYv87/WeY+Bm4sN3Ox8BhyaU7UAQ3LeZ7N1X01xxQe4wIAAE3JVLUCiHmZL+
|
||||
qoCUtgYIFPgcg350QMUIWgxPXNGEncT921ne7nluI02V8pLUmClqXOsCwULw+PVO
|
||||
ZCB7qOMxxMBoCUeL2Ll4oMpOSr5pJCpLN3tRA2s6P1KLs9TSrVhOk+7LX28NMUlI
|
||||
usQ/nxLJID0RhAeFtPjyOCOscQBA53+NRjSCak7P4A5jX7ppmkcJECL+S0i3kXVU
|
||||
y5Me5BbrU8973jZNv/ax6+ZK6TM8jWmimL6of6OrX7ZU6E2WqazzsFrLG3o2kySb
|
||||
zlhSgJ81Cl4tv3SbYiYXnJExKQvzf83DYotox3f0fwv7xln1A2ZLplCb0O+l/AK0
|
||||
YE0DS2FPxSAHi0iwMfW2nNHJrXcY3LLHD77gRgje4Eveubi2xxa+Nmk/hmhLdIET
|
||||
iVDFanoCrMVIpQ59XWHkzdFmoHXHBV7oibVjGSO7ULSQ7MJ1Nz51phuDJSgAIU7A
|
||||
0zrLnOrAj/dfrlEWRhCvAgbuwLZX1A2sjNjXoPOHbsPiy+lO1KF8/XY7
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
MIIEowIBAAKCAQEAyyICyuDbPPAAyDzIHp/sAXHfcBmbQ2zNYJxYtSywwckcq/a7
|
||||
d1EKPf4Ay15BHTv49HVjP6vVmA3zGKKYIBkvvrfxrMwvxUtZxyCQzAER++npG5za
|
||||
pRCOgnXiM41jDezxMJxsrT1vXkx1LLaMMkTvQ6W1mzIYqVojB7JOqLeXH88F35y0
|
||||
Yj6rdUwchZhenjKW0tVWFXI4i5y4+pKo0xPG3seUvNAAT85cdx/IjBTSPKTnkUYA
|
||||
zzBtY5gDoNOq10I2FUg1fgiVLNGs7TxK22uRUQj25e8f/68GfiBp9DGXN6avHhra
|
||||
vDfn95PCvlBwHjYPq31abTUA6OpR/2WJKEGiawIDAQABAoIBAC/jmEnxIe6nXF/Y
|
||||
qItDw5WBnZ4lg0utimu04FryKse83JQUCpUyF1qPF+vaEDrOqT4ksJ3Rqnz7CO0t
|
||||
Y/TpSy7I2eKVjsuSHJvL6ycVN4Ku3iSC4a8ZjKdoGEh0FD6zthbyQdLD0Y4nM1az
|
||||
wLCXPNszZXGtqU+/rtOBL3cqNSgrr7fgy7j/0ppvyNZbIodSIY79D00zpX74l0ov
|
||||
L6JQ9YJBoM8RHljc7bRTVpf6RVlqlGJSpSqEPy3PsKfMihWCIAyqgspgP6Yao580
|
||||
j0RS1nGydiP2TAb7wx7K0sXM+bJN+KeUTPhCO3tFvYPRgk8RcjaRbl4aOijN5ndu
|
||||
A22+ox0CgYEA/ojX+b+pMbUsLMNraTdLJHqtlMMqaA/ctEf0N+OACaduWU7EVs7l
|
||||
oEva9U9u9exTHJ2QSlfSZKzd7XdkWvUr2E1QvyekMtvj9/tfnR5TE9R/E2pJ22GW
|
||||
IMeAq+GfkgeYeGm30M7v4e9R5WrJh2Jll0qn+duw1Y9gxUNXS1YsKr8CgYEAzE1o
|
||||
H3xods4goL8m+Ial0ZTLyKx5l8Hgif/Y/ao77zORjJtOGvw4O3CeLM/skEZ6ihPY
|
||||
UUBoxH1iNHViUuf9otYIY2SEPvOys2Gu+TIt1966dIV42LtclqL/t7MezJdtT/i6
|
||||
BGRPXBNBZVcwN8AJBAWcOS7pjytf/XcDRE+5z1UCgYEA41QMsL4Auqh4v7H5KIt9
|
||||
zSLUDN0R7sbb8xeggpnpLLYg1BqJOI6ofzXAZP+AtptOz2vaBsvQ2KGbxA6xzprR
|
||||
genriA47lEDXpg8YIheHU1qh9BElzY2mq7gCr4BfJ+kov8KLrS5lCIDZv/BT9Vpo
|
||||
KWtAAuO3V8UqRIQUXvCjmbkCgYA6uyXrp0AAp1EJ5Om3GD4i+bt7fNmXnsyF317p
|
||||
zT5djV2SJjNV3pvrunw+Naez8g7YEsxkzzdPBRxuKDCT1M09Ono+2G6MClKc7r/2
|
||||
M06qeATx6kzLQVFknIcWsA9ykTWDf+U5zfxiY8aw81eRL0toNJSse6f42GdH3ia6
|
||||
RJEN4QKBgAvpe6N6+2ieCxK5L2U+et0CUhZ9IsNFqmR0mR1YbfqTaZlV2l83YFuH
|
||||
zRvq1jFmJQIpJwhPaO8S80t6H9sVa1+9YKqDDd3i0cULNW21TdFOYI4bPHYVvmTB
|
||||
GQzwksjL1AEfskk9fG2Bu2sMhgKvsY9waTIWU2W8p76UFgiFav4p
|
||||
-----END RSA PRIVATE KEY-----
|
||||
@@ -1,121 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFPTCCBCWgAwIBAgISA3n4pfdSt98YUI67b5HEF9l/MA0GCSqGSIb3DQEBCwUA
|
||||
MDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQD
|
||||
EwJSMzAeFw0yMjA3MjgwNjM3MjZaFw0yMjEwMjYwNjM3MjVaMCYxJDAiBgNVBAMT
|
||||
G2d1ZXN0LmppdHNpLmd5b3phbWFuY2F2ZS5mcjCCASIwDQYJKoZIhvcNAQEBBQAD
|
||||
ggEPADCCAQoCggEBANHZi83LzLFhuHSQIqNzmkhceUfmsa5w36+rVRmUl3HSQQNx
|
||||
zeQOh3iyUL7joUgl+OKdR97tsYtQCpSdROeB3iwKAkpuI0GVR9MQJsg9sK+p/9oE
|
||||
uZCXPpsvy6yjwDD+oC9KnWOBT9ihEmJuFMhjPwMZXVhZmuR5UNisVLuwHI+e+2Sm
|
||||
JDGDmJBrhRZyAOUJR5mh/PTJi9tg80bvDT/zqGUY8rZ7qV0gemHBxRZNnsjxDtyC
|
||||
K9hVPza88ecD5Pt8FGRe/7/OA/imBa34FHFX0Jv/s3Slq2+S1iNsR24dhZGL2GcW
|
||||
lKUpfvwDK8SsZn/rOB8uzmhppyvEZCHY2MJQDPsCAwEAAaOCAlcwggJTMA4GA1Ud
|
||||
DwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0T
|
||||
AQH/BAIwADAdBgNVHQ4EFgQUOf81ELdC9vLolr59L4FZOWWnsJgwHwYDVR0jBBgw
|
||||
FoAUFC6zF7dYVsuuUAlA5h+vnYsUwsYwVQYIKwYBBQUHAQEESTBHMCEGCCsGAQUF
|
||||
BzABhhVodHRwOi8vcjMuby5sZW5jci5vcmcwIgYIKwYBBQUHMAKGFmh0dHA6Ly9y
|
||||
My5pLmxlbmNyLm9yZy8wJgYDVR0RBB8wHYIbZ3Vlc3Quaml0c2kuZ3lvemFtYW5j
|
||||
YXZlLmZyMEwGA1UdIARFMEMwCAYGZ4EMAQIBMDcGCysGAQQBgt8TAQEBMCgwJgYI
|
||||
KwYBBQUHAgEWGmh0dHA6Ly9jcHMubGV0c2VuY3J5cHQub3JnMIIBBQYKKwYBBAHW
|
||||
eQIEAgSB9gSB8wDxAHcAQcjKsd8iRkoQxqE6CUKHXk4xixsD6+tLx2jwkGKWBvYA
|
||||
AAGCQ70onwAABAMASDBGAiEAyn2jlcHx+pKxf8v8KHM9iRPTgiBRuk+MP3/8bmZA
|
||||
KqACIQC48cjCluldCVjCGTKu6vQFtG5ajyiJpQ862+S+qCBDsAB2AEalVet1+pEg
|
||||
MLWiiWn0830RLEF0vv1JuIWr8vxw/m1HAAABgkO9KJwAAAQDAEcwRQIgKBLPJPq6
|
||||
dIFMUBIibNCdBGDohGx1QI4OpNxH8ACEeCwCIQDKgsZOlNr1SDTI53Vy4vpKdq+Z
|
||||
1ettm4FPGzLQ/Lxn7TANBgkqhkiG9w0BAQsFAAOCAQEAnSiOVN2Ei4EkG2P4aO36
|
||||
gsiqicKUK9InGgLogCxbHF8Obt+acjz2JKOsqJK90eZ8Vex4fwQ+5B6HiGGACVTi
|
||||
W/S4CeNvi6Stf35iUVB+X1ZicejfE5AgZsPWyh79optrrcQeRedYGdgtGDMOCvhV
|
||||
C8Y59itDYqCn0ibFysCAtCti6QEAtFPFaNKq76bW6g4jx00RLixHLmRon7Xzk6sn
|
||||
Sf4HrWj1XgGf1DUuWnPIAUj/y2p5WpROBtWs1lTlxsKda9GcjzeCyjGvnN2/9FV3
|
||||
2U2Da6PjafPywLH66MpF4d3UbU9WncWflPmu5s0dMM0dxCeyvK9hLizx6WseGg7E
|
||||
jg==
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFFjCCAv6gAwIBAgIRAJErCErPDBinU/bWLiWnX1owDQYJKoZIhvcNAQELBQAw
|
||||
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
|
||||
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjAwOTA0MDAwMDAw
|
||||
WhcNMjUwOTE1MTYwMDAwWjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
|
||||
RW5jcnlwdDELMAkGA1UEAxMCUjMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
|
||||
AoIBAQC7AhUozPaglNMPEuyNVZLD+ILxmaZ6QoinXSaqtSu5xUyxr45r+XXIo9cP
|
||||
R5QUVTVXjJ6oojkZ9YI8QqlObvU7wy7bjcCwXPNZOOftz2nwWgsbvsCUJCWH+jdx
|
||||
sxPnHKzhm+/b5DtFUkWWqcFTzjTIUu61ru2P3mBw4qVUq7ZtDpelQDRrK9O8Zutm
|
||||
NHz6a4uPVymZ+DAXXbpyb/uBxa3Shlg9F8fnCbvxK/eG3MHacV3URuPMrSXBiLxg
|
||||
Z3Vms/EY96Jc5lP/Ooi2R6X/ExjqmAl3P51T+c8B5fWmcBcUr2Ok/5mzk53cU6cG
|
||||
/kiFHaFpriV1uxPMUgP17VGhi9sVAgMBAAGjggEIMIIBBDAOBgNVHQ8BAf8EBAMC
|
||||
AYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMBMBIGA1UdEwEB/wQIMAYB
|
||||
Af8CAQAwHQYDVR0OBBYEFBQusxe3WFbLrlAJQOYfr52LFMLGMB8GA1UdIwQYMBaA
|
||||
FHm0WeZ7tuXkAXOACIjIGlj26ZtuMDIGCCsGAQUFBwEBBCYwJDAiBggrBgEFBQcw
|
||||
AoYWaHR0cDovL3gxLmkubGVuY3Iub3JnLzAnBgNVHR8EIDAeMBygGqAYhhZodHRw
|
||||
Oi8veDEuYy5sZW5jci5vcmcvMCIGA1UdIAQbMBkwCAYGZ4EMAQIBMA0GCysGAQQB
|
||||
gt8TAQEBMA0GCSqGSIb3DQEBCwUAA4ICAQCFyk5HPqP3hUSFvNVneLKYY611TR6W
|
||||
PTNlclQtgaDqw+34IL9fzLdwALduO/ZelN7kIJ+m74uyA+eitRY8kc607TkC53wl
|
||||
ikfmZW4/RvTZ8M6UK+5UzhK8jCdLuMGYL6KvzXGRSgi3yLgjewQtCPkIVz6D2QQz
|
||||
CkcheAmCJ8MqyJu5zlzyZMjAvnnAT45tRAxekrsu94sQ4egdRCnbWSDtY7kh+BIm
|
||||
lJNXoB1lBMEKIq4QDUOXoRgffuDghje1WrG9ML+Hbisq/yFOGwXD9RiX8F6sw6W4
|
||||
avAuvDszue5L3sz85K+EC4Y/wFVDNvZo4TYXao6Z0f+lQKc0t8DQYzk1OXVu8rp2
|
||||
yJMC6alLbBfODALZvYH7n7do1AZls4I9d1P4jnkDrQoxB3UqQ9hVl3LEKQ73xF1O
|
||||
yK5GhDDX8oVfGKF5u+decIsH4YaTw7mP3GFxJSqv3+0lUFJoi5Lc5da149p90Ids
|
||||
hCExroL1+7mryIkXPeFM5TgO9r0rvZaBFOvV2z0gp35Z0+L4WPlbuEjN/lxPFin+
|
||||
HlUjr8gRsI3qfJOQFy/9rKIJR0Y/8Omwt/8oTWgy1mdeHmmjk7j1nYsvC9JSQ6Zv
|
||||
MldlTTKB3zhThV1+XWYp6rjd5JW1zbVWEkLNxE7GJThEUG3szgBVGP7pSWTUTsqX
|
||||
nLRbwHOoq7hHwg==
|
||||
-----END CERTIFICATE-----
|
||||
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFYDCCBEigAwIBAgIQQAF3ITfU6UK47naqPGQKtzANBgkqhkiG9w0BAQsFADA/
|
||||
MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
|
||||
DkRTVCBSb290IENBIFgzMB4XDTIxMDEyMDE5MTQwM1oXDTI0MDkzMDE4MTQwM1ow
|
||||
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
|
||||
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwggIiMA0GCSqGSIb3DQEB
|
||||
AQUAA4ICDwAwggIKAoICAQCt6CRz9BQ385ueK1coHIe+3LffOJCMbjzmV6B493XC
|
||||
ov71am72AE8o295ohmxEk7axY/0UEmu/H9LqMZshftEzPLpI9d1537O4/xLxIZpL
|
||||
wYqGcWlKZmZsj348cL+tKSIG8+TA5oCu4kuPt5l+lAOf00eXfJlII1PoOK5PCm+D
|
||||
LtFJV4yAdLbaL9A4jXsDcCEbdfIwPPqPrt3aY6vrFk/CjhFLfs8L6P+1dy70sntK
|
||||
4EwSJQxwjQMpoOFTJOwT2e4ZvxCzSow/iaNhUd6shweU9GNx7C7ib1uYgeGJXDR5
|
||||
bHbvO5BieebbpJovJsXQEOEO3tkQjhb7t/eo98flAgeYjzYIlefiN5YNNnWe+w5y
|
||||
sR2bvAP5SQXYgd0FtCrWQemsAXaVCg/Y39W9Eh81LygXbNKYwagJZHduRze6zqxZ
|
||||
Xmidf3LWicUGQSk+WT7dJvUkyRGnWqNMQB9GoZm1pzpRboY7nn1ypxIFeFntPlF4
|
||||
FQsDj43QLwWyPntKHEtzBRL8xurgUBN8Q5N0s8p0544fAQjQMNRbcTa0B7rBMDBc
|
||||
SLeCO5imfWCKoqMpgsy6vYMEG6KDA0Gh1gXxG8K28Kh8hjtGqEgqiNx2mna/H2ql
|
||||
PRmP6zjzZN7IKw0KKP/32+IVQtQi0Cdd4Xn+GOdwiK1O5tmLOsbdJ1Fu/7xk9TND
|
||||
TwIDAQABo4IBRjCCAUIwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw
|
||||
SwYIKwYBBQUHAQEEPzA9MDsGCCsGAQUFBzAChi9odHRwOi8vYXBwcy5pZGVudHJ1
|
||||
c3QuY29tL3Jvb3RzL2RzdHJvb3RjYXgzLnA3YzAfBgNVHSMEGDAWgBTEp7Gkeyxx
|
||||
+tvhS5B1/8QVYIWJEDBUBgNVHSAETTBLMAgGBmeBDAECATA/BgsrBgEEAYLfEwEB
|
||||
ATAwMC4GCCsGAQUFBwIBFiJodHRwOi8vY3BzLnJvb3QteDEubGV0c2VuY3J5cHQu
|
||||
b3JnMDwGA1UdHwQ1MDMwMaAvoC2GK2h0dHA6Ly9jcmwuaWRlbnRydXN0LmNvbS9E
|
||||
U1RST09UQ0FYM0NSTC5jcmwwHQYDVR0OBBYEFHm0WeZ7tuXkAXOACIjIGlj26Ztu
|
||||
MA0GCSqGSIb3DQEBCwUAA4IBAQAKcwBslm7/DlLQrt2M51oGrS+o44+/yQoDFVDC
|
||||
5WxCu2+b9LRPwkSICHXM6webFGJueN7sJ7o5XPWioW5WlHAQU7G75K/QosMrAdSW
|
||||
9MUgNTP52GE24HGNtLi1qoJFlcDyqSMo59ahy2cI2qBDLKobkx/J3vWraV0T9VuG
|
||||
WCLKTVXkcGdtwlfFRjlBz4pYg1htmf5X6DYO8A4jqv2Il9DjXA6USbW1FzXSLr9O
|
||||
he8Y4IWS6wY7bCkjCWDcRQJMEhg76fsO3txE+FiYruq9RUWhiF1myv4Q6W+CyBFC
|
||||
Dfvp7OOGAN6dEOM4+qR9sdjoSYKEBpsr6GtPAQw4dy753ec5
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDR2YvNy8yxYbh0
|
||||
kCKjc5pIXHlH5rGucN+vq1UZlJdx0kEDcc3kDod4slC+46FIJfjinUfe7bGLUAqU
|
||||
nUTngd4sCgJKbiNBlUfTECbIPbCvqf/aBLmQlz6bL8uso8Aw/qAvSp1jgU/YoRJi
|
||||
bhTIYz8DGV1YWZrkeVDYrFS7sByPnvtkpiQxg5iQa4UWcgDlCUeZofz0yYvbYPNG
|
||||
7w0/86hlGPK2e6ldIHphwcUWTZ7I8Q7cgivYVT82vPHnA+T7fBRkXv+/zgP4pgWt
|
||||
+BRxV9Cb/7N0patvktYjbEduHYWRi9hnFpSlKX78AyvErGZ/6zgfLs5oaacrxGQh
|
||||
2NjCUAz7AgMBAAECggEBAJqWHYzuss2A5TbI7xtlj6P6q0UyRnXwpHduSXRcp+ur
|
||||
LUVyUm/L3DQnd6AHY8oYXu3hWw54HzA3OHQeHqJEYvwiK2nVFJe9dnmfDlK4Ty44
|
||||
l0dt75z6LZ54aRu2TWBKUopD9wlUOxOkJDzqRtkPc12/E6p/58CjNdFHsevJYmDR
|
||||
MW6TwVdAaJVSsDdaVBVU0AJ3LE9lmI6qJ8mUlDWe3un4kV+5HpSu8G5eLKkbfOIF
|
||||
5ylvWMhsq2rhpExy34CdI2C4zDMMKRxlnukwzWnrCk0u5mcr492Xo8QIOskGa6tJ
|
||||
YRNycp1Cfcqg6INxLXVRjaM5qHs0CfAD4CZV9SaPtnECgYEA6xu/X3Dge4DHRSRJ
|
||||
UTjXqP0QkaD25zZ8PQLQ48TapGm43EHFhYyf47blZiVRJzxAwAlBh9K6wUlBLeZC
|
||||
N0qBjJYXvIUiJYzyvQCvRGHdDvvc5i6qiO/2ETiEPMUmR2gch/yXmeQLoUqGTgwA
|
||||
S/Bj0U37LcSEkPG760QFbTuvulcCgYEA5H83F9bYiyqKVUBsOTFRFAath5ZfCR3n
|
||||
9GzBUyiNJpfOMeEoeTLF5gUAj6T6RZHT/P+najwxC3e3mtKC8Cg4ecwHdOI+METe
|
||||
4r7ek6jnNwutZ2uTNV4yqBK1OkKj1ukmn7UAGRj28yRL4pDs6xFXpCHxcRTsPUOp
|
||||
5MjLiwVNI/0CgYBvP9L/c2cVqashQXlb8JzDvvOvJU6Pu81wBTwY+xZGhCxQNOMl
|
||||
PZSO6QWFnxTWjwFInVifz4xFV8d606DzjtLcVk1nDExLHnXiD0fgALrckztExEI3
|
||||
x+xU27xfER763P3bLyABVtJWAPCqT614QYjKCq9XSc081NYKDkbPGFYfwwKBgC1n
|
||||
tivvjoJBBtIgBiFrUmA3X35E/EeUgMZKYjRDJ6FWoyu4QVGsLDUkI1NoBi+S5dwt
|
||||
dTggE+LifEKwuEI+y9IwH/8zAgaXeO733MTc2G1QzblyYANH36sUZJzaJzKKjBlK
|
||||
X2WdV11DhizUfa/Md2zvLco5zSPzcSw8Vm4etJCFAoGBAM1NS02sZ9FxREjvT3gi
|
||||
AaLZfpVb5QPcMp6ac/WByKeTWFgKcchbxENQ6Ciiehog8qOkXubKsKFWnl2fjDPI
|
||||
tXmo71hUhyVnumU3pm4aaFFraeEGUWeVD8vE0nBRZ9sh8Xrm+2IG41ihbEWGobn/
|
||||
eC0cwEOiWNLj4ZO3Sn8Ri8Ma
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -1,85 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIE+zCCA+OgAwIBAgISBetu8WjxDfsMlJLuX/tLrgyUMA0GCSqGSIb3DQEBCwUA
|
||||
MDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQwwCgYDVQQD
|
||||
EwNSMTAwHhcNMjUwNzMxMjEwMzA2WhcNMjUxMDI5MjEwMzA1WjAaMRgwFgYDVQQD
|
||||
Ew9neW96YW1hbmNhdmUuZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
|
||||
AQCd8nzBsYDVj3cFPThpqdz83kXWcvg7HNm4O79Q4iFiJr0GgV77aXt0gaca3+J7
|
||||
BmMWtsSM0qg3f/H5aObJ/5Col2K5XxIoRdxrWYFyVcnlyzd+3oeUMVdLv4elN2SM
|
||||
2VI4+lLBaXGWRnNhhJDPLdFXRbOpGZfmlwQzMMQVoeCaoIwr39v3CNTfwnvJgUFu
|
||||
y3XAU801oifkL+oLLONdJc1kGMZCQhCuc5DOE9i7jFQoqLf+LyrfkMezG7K3hzhr
|
||||
26d5t248DR7QgSTm/XCtvan35lARHCsD73WjQzMLmUpimgW4t0MxlCdcd7zMULVO
|
||||
N2jhd7UcbmR3ihUIstY1sBjnAgMBAAGjggIgMIICHDAOBgNVHQ8BAf8EBAMCBaAw
|
||||
HQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYD
|
||||
VR0OBBYEFHdI3NtpZUPrNnYJ0KIPsS0JgFxFMB8GA1UdIwQYMBaAFLu8w0el5Lyp
|
||||
xsOkcgwQjaI14cjoMDMGCCsGAQUFBwEBBCcwJTAjBggrBgEFBQcwAoYXaHR0cDov
|
||||
L3IxMC5pLmxlbmNyLm9yZy8wGgYDVR0RBBMwEYIPZ3lvemFtYW5jYXZlLmZyMBMG
|
||||
A1UdIAQMMAowCAYGZ4EMAQIBMC4GA1UdHwQnMCUwI6AhoB+GHWh0dHA6Ly9yMTAu
|
||||
Yy5sZW5jci5vcmcvMjEuY3JsMIIBBQYKKwYBBAHWeQIEAgSB9gSB8wDxAHYAzPsP
|
||||
aoVxCWX+lZtTzumyfCLphVwNl422qX5UwP5MDbAAAAGYYoFJ4gAABAMARzBFAiBF
|
||||
HpgQAZ6i3KYxOAcE0B60ZIPInztjLdyfOdJn86NRdwIhALUZvFe8GOmgIqv7rc5T
|
||||
JL9Lyqzg6AeaJ6W9/Jh0RQYCAHcA3dzKNJXX4RYF55Uy+sef+D0cUN/bADoUEnYK
|
||||
LKy7yCoAAAGYYoFKGwAABAMASDBGAiEArQ7w8GC+TmLOzcCWjvNp1SLMQiNGh11Y
|
||||
oN/13ivn364CIQCrQwZiZAHcIE8vFpoUH8GOAm0B8fb2TWCwXXKmhuid6zANBgkq
|
||||
hkiG9w0BAQsFAAOCAQEAcVNScUP0wRgO1DCxSSq+QqIkr8fZmmIjR5DX+VU9bbeg
|
||||
KXYBc7MZ+M16fyyxTDkxJCHXo2j2+z4c5JeOXUMltYAq19nS9VOE8toZqbr9CdoW
|
||||
TGWJuVvlJ72JzUrdguwQz6SMaExAzbcolSe+o1CuooM92mbrHV37uYS3IE8ZR7/7
|
||||
dy3UAoIMFrV3mQHTExJXpU/t+nb/xrocaMwNPTsUVjGguw6ObZlhamE4uMFu71Er
|
||||
rcWYg32btwcHF5XJ+iNTfd4rTDxnGm70YHC6bMRuR6Pflg+BmDqQ1F7X43LGWdD/
|
||||
R14Q3N+P2OFifA+nbAH2sZEWJID6oZzhHHa6SZGZhg==
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFBTCCAu2gAwIBAgIQS6hSk/eaL6JzBkuoBI110DANBgkqhkiG9w0BAQsFADBP
|
||||
MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy
|
||||
Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNDAzMTMwMDAwMDBa
|
||||
Fw0yNzAzMTIyMzU5NTlaMDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBF
|
||||
bmNyeXB0MQwwCgYDVQQDEwNSMTAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
|
||||
AoIBAQDPV+XmxFQS7bRH/sknWHZGUCiMHT6I3wWd1bUYKb3dtVq/+vbOo76vACFL
|
||||
YlpaPAEvxVgD9on/jhFD68G14BQHlo9vH9fnuoE5CXVlt8KvGFs3Jijno/QHK20a
|
||||
/6tYvJWuQP/py1fEtVt/eA0YYbwX51TGu0mRzW4Y0YCF7qZlNrx06rxQTOr8IfM4
|
||||
FpOUurDTazgGzRYSespSdcitdrLCnF2YRVxvYXvGLe48E1KGAdlX5jgc3421H5KR
|
||||
mudKHMxFqHJV8LDmowfs/acbZp4/SItxhHFYyTr6717yW0QrPHTnj7JHwQdqzZq3
|
||||
DZb3EoEmUVQK7GH29/Xi8orIlQ2NAgMBAAGjgfgwgfUwDgYDVR0PAQH/BAQDAgGG
|
||||
MB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATASBgNVHRMBAf8ECDAGAQH/
|
||||
AgEAMB0GA1UdDgQWBBS7vMNHpeS8qcbDpHIMEI2iNeHI6DAfBgNVHSMEGDAWgBR5
|
||||
tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAKG
|
||||
Fmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0gBAwwCjAIBgZngQwBAgEwJwYD
|
||||
VR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVuY3Iub3JnLzANBgkqhkiG9w0B
|
||||
AQsFAAOCAgEAkrHnQTfreZ2B5s3iJeE6IOmQRJWjgVzPw139vaBw1bGWKCIL0vIo
|
||||
zwzn1OZDjCQiHcFCktEJr59L9MhwTyAWsVrdAfYf+B9haxQnsHKNY67u4s5Lzzfd
|
||||
u6PUzeetUK29v+PsPmI2cJkxp+iN3epi4hKu9ZzUPSwMqtCceb7qPVxEbpYxY1p9
|
||||
1n5PJKBLBX9eb9LU6l8zSxPWV7bK3lG4XaMJgnT9x3ies7msFtpKK5bDtotij/l0
|
||||
GaKeA97pb5uwD9KgWvaFXMIEt8jVTjLEvwRdvCn294GPDF08U8lAkIv7tghluaQh
|
||||
1QnlE4SEN4LOECj8dsIGJXpGUk3aU3KkJz9icKy+aUgA+2cP21uh6NcDIS3XyfaZ
|
||||
QjmDQ993ChII8SXWupQZVBiIpcWO4RqZk3lr7Bz5MUCwzDIA359e57SSq5CCkY0N
|
||||
4B6Vulk7LktfwrdGNVI5BsC9qqxSwSKgRJeZ9wygIaehbHFHFhcBaMDKpiZlBHyz
|
||||
rsnnlFXCb5s8HKn5LsUgGvB24L7sGNZP2CX7dhHov+YhD+jozLW2p9W4959Bz2Ei
|
||||
RmqDtmiXLnzqTpXbI+suyCsohKRg6Un0RC47+cpiVwHiXZAW+cn8eiNIjqbVgXLx
|
||||
KPpdzvvtTnOPlC7SQZSYmdunr3Bf9b77AiC/ZidstK36dRILKz7OA54=
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
MIIEowIBAAKCAQEAnfJ8wbGA1Y93BT04aanc/N5F1nL4OxzZuDu/UOIhYia9BoFe
|
||||
+2l7dIGnGt/iewZjFrbEjNKoN3/x+Wjmyf+QqJdiuV8SKEXca1mBclXJ5cs3ft6H
|
||||
lDFXS7+HpTdkjNlSOPpSwWlxlkZzYYSQzy3RV0WzqRmX5pcEMzDEFaHgmqCMK9/b
|
||||
9wjU38J7yYFBbst1wFPNNaIn5C/qCyzjXSXNZBjGQkIQrnOQzhPYu4xUKKi3/i8q
|
||||
35DHsxuyt4c4a9unebduPA0e0IEk5v1wrb2p9+ZQERwrA+91o0MzC5lKYpoFuLdD
|
||||
MZQnXHe8zFC1Tjdo4Xe1HG5kd4oVCLLWNbAY5wIDAQABAoIBAAvC0qdZoE5GsIYj
|
||||
WOAFVf8+TdT6GqHMNCoTyNss+29jkw+48mmmIRs7zEWkBilDAH3gfiI+TWhUjqAT
|
||||
v5uq/AqRuzgybBeznAYiVBE/chk6WJeJ2m6effGWAXO7/DDAve6gNSlRwLN/63eH
|
||||
d4D12HC3L/mXfkgdVqK5LuCtfRwGWnRewNi6sLvrcgx+alJ28W4kAyuP61Yg1/A7
|
||||
xxuZUkS6gP39yLxz16UbuaBt9BxHhNSQI3Bk408nm+BaPGaYpPwa1rXN/jEa+Arm
|
||||
7BY+3qb/ImWTAqlKz7CVdUD1sirFLNOg1t+EpDsZmoZRuisqDRlErPheH9QZE9zT
|
||||
FljxZgECgYEAzsgT7j25uia6Aehi+kJZTtr1iShB94hdrR+jBWTLKA+M3hHms6+B
|
||||
alMKdo+wOatdZi3ZoxwtmrFS9iKQ9LCrz/3MFzuo63DyXy5tONuv3VIt5mhOD9aX
|
||||
sTtPIamVN59lVyumuXzWVHF5rl2vUPNyuvG9Rb5Sp7umZNz8nmlr9PcCgYEAw4rD
|
||||
QvHHeTjQWLp77VFPiNUimobrKHzBjXDMoSZ+2XjOwSIm+JOwd21uK9DQHU9cDFqQ
|
||||
tDh1cnXhVpqESLk+V6eTD5+evsBw6lgX0z9u6Am364LAPp+gUahQFuvu7PezBjhp
|
||||
y/7WzrwaTIw0QG0DMmDyWAVlK2kqnWVDD7e3L5ECgYBo9eI4AhjuRo4QPddP1LHk
|
||||
dvw/PLIPZaa3I+Hp8Pm2Qf5tEoUaHDICuFgNSm5XN4bXQNrCEqGLbgsAaRdPPQZZ
|
||||
MyiPencJ23ELo1NJkym3m+k0lSlanMCu8739Bkl5zGzyTHP6n0Vj452yRlehLZHF
|
||||
FsPOTQdDoNqbRBjuh/CGjQKBgG/9YwNOMa4NidWnSB6MuP5nAuB5cOjJOpjlB20r
|
||||
/O5UMCWQh71J6IEdnUFe4DJJJzC0FbgBtdIODTZqXGTCIyBUivchtesNkB3Gwi5s
|
||||
X/poxnsNcUjsZwcdXHEkQrxYyKFBYeZBV4kjVfSNP8e+J1yNBX6/6EdKfeuS+Sth
|
||||
TnrhAoGBAI8zVMbobWeIPVb5RYuXB2y0JxZbDrp4pIKRCotA5aLOB7J7n9qkELyG
|
||||
AjXxirj3RSzFvwhKBRLQecJVKM+thormbDN2NZrFRliwsEXKn0sD/8GYF1lZlpQs
|
||||
BeGatEURKl784kZvkU++a0LHGUljCdb1WoZ4iQs4Z3wLXwINw+jZ
|
||||
-----END RSA PRIVATE KEY-----
|
||||
@@ -1,87 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFZTCCBE2gAwIBAgISBUK1p5GM8Hsq7Ixqy8fCQ5DTMA0GCSqGSIb3DQEBCwUA
|
||||
MDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQwwCgYDVQQD
|
||||
EwNSMTMwHhcNMjUxMjE4MDc1ODA0WhcNMjYwMzE4MDc1ODAzWjAfMR0wGwYDVQQD
|
||||
ExRjaGF0Lmd5b3phbWFuY2F2ZS5mcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
|
||||
AQoCggEBAKMePawbIfTEqfddGXvm+b1vSTW4pFnSCSsDfKgZIRmocFN5bg4tG9qY
|
||||
fnPj4tjFpxITBOsHjTFlJ64GthvPV3r+wF1zXv3bx+IBiFLT7CUVwXeZXTj1Oi1k
|
||||
M5itB1moZNK377yTuKFwpCi4kCXln8XrLA26kuDJaEXWqwUBA228IT2n7h0Z02uD
|
||||
haLe8I3QbihUyKsLOYBUyTrseapH08nmHJNAAr6mchk697mObJEllbXT3MFdVFDc
|
||||
TxPE96ZHdgFs4G3fecmk5YDaMuzIFnHQOCSaIbGzmqknzfZSjQ/8E9bDF64hk19F
|
||||
ZIDtJVvJB+qCh01ech+kNj3zHJRdUhMCAwEAAaOCAoUwggKBMA4GA1UdDwEB/wQE
|
||||
AwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIw
|
||||
ADAdBgNVHQ4EFgQU6TNu2UvVaeGvoN5f9cu9/H2PPOowHwYDVR0jBBgwFoAU56uf
|
||||
DywzoFPTXk94yLKEDjvWkjMwMwYIKwYBBQUHAQEEJzAlMCMGCCsGAQUFBzAChhdo
|
||||
dHRwOi8vcjEzLmkubGVuY3Iub3JnLzB5BgNVHREEcjBwghRjaGF0Lmd5b3phbWFu
|
||||
Y2F2ZS5mcoIPZ3lvemFtYW5jYXZlLmZyghhqZWxseWZpbi5neW96YW1hbmNhdmUu
|
||||
ZnKCFWppdHNpLmd5b3phbWFuY2F2ZS5mcoIWbWF0cml4Lmd5b3phbWFuY2F2ZS5m
|
||||
cjATBgNVHSAEDDAKMAgGBmeBDAECATAuBgNVHR8EJzAlMCOgIaAfhh1odHRwOi8v
|
||||
cjEzLmMubGVuY3Iub3JnLzg0LmNybDCCAQsGCisGAQQB1nkCBAIEgfwEgfkA9wB2
|
||||
AMs49xWJfIShRF9bwd37yW7ymlnNRwppBYWwyxTDFFjnAAABmzCs3qIAAAQDAEcw
|
||||
RQIgU5kNBmET09bpgcmZ6HgXK6tyk5S2ihuszUYxq2GrOPsCIQCLLeHQ4hJY8dTs
|
||||
lNlAfJCRJ1YX0kWBqW475QDSGqQ6/gB9AHF+lfPCOIptseOEST0x4VqpYgh2LUIA
|
||||
4AUM0Ge1pmHiAAABmzCs3wQACAAABQAEexqBBAMARjBEAiBVH3AQ66BZqnBv4P8F
|
||||
b+9Jrnzu46KdxBnplmZ+tK0+iwIgODj+R9yIup8SeD/LM/W92y9iaodD9iIHVDDI
|
||||
dt34fW8wDQYJKoZIhvcNAQELBQADggEBAJeaeC+7/bcD30GsO//3gJAZxFYH/5xQ
|
||||
O1jsXfb+saBAXiNzg7ps8I+sMYJbC7E/arDgyKeu30bEkgD8JZF+9I/SFXWlyLUC
|
||||
8nCKE/XBNTQNCn/5o464AwLV2L9eZWpszyIrmFFuCFEfOuc0dLznzr7dIz9vBDpd
|
||||
Mi84S0wDasV/zWrtEcQ51PzZnqcF6cEWJM/N6G53sc2fbn0/xecTJ9kaOMxttyGV
|
||||
2TRwZO1ab72G0GWp+LoIasApu7CdbgyUDzoVxAvTFSFQoNujwZwYYjuzNsMJbe7i
|
||||
FU1lSrfeSCIi3DtvwRdBq0JxHE2A8WTGgzh6VaiXbNx+ii9gT533jh0=
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFBTCCAu2gAwIBAgIQWgDyEtjUtIDzkkFX6imDBTANBgkqhkiG9w0BAQsFADBP
|
||||
MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy
|
||||
Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNDAzMTMwMDAwMDBa
|
||||
Fw0yNzAzMTIyMzU5NTlaMDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBF
|
||||
bmNyeXB0MQwwCgYDVQQDEwNSMTMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
|
||||
AoIBAQClZ3CN0FaBZBUXYc25BtStGZCMJlA3mBZjklTb2cyEBZPs0+wIG6BgUUNI
|
||||
fSvHSJaetC3ancgnO1ehn6vw1g7UDjDKb5ux0daknTI+WE41b0VYaHEX/D7YXYKg
|
||||
L7JRbLAaXbhZzjVlyIuhrxA3/+OcXcJJFzT/jCuLjfC8cSyTDB0FxLrHzarJXnzR
|
||||
yQH3nAP2/Apd9Np75tt2QnDr9E0i2gB3b9bJXxf92nUupVcM9upctuBzpWjPoXTi
|
||||
dYJ+EJ/B9aLrAek4sQpEzNPCifVJNYIKNLMc6YjCR06CDgo28EdPivEpBHXazeGa
|
||||
XP9enZiVuppD0EqiFwUBBDDTMrOPAgMBAAGjgfgwgfUwDgYDVR0PAQH/BAQDAgGG
|
||||
MB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATASBgNVHRMBAf8ECDAGAQH/
|
||||
AgEAMB0GA1UdDgQWBBTnq58PLDOgU9NeT3jIsoQOO9aSMzAfBgNVHSMEGDAWgBR5
|
||||
tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAKG
|
||||
Fmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0gBAwwCjAIBgZngQwBAgEwJwYD
|
||||
VR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVuY3Iub3JnLzANBgkqhkiG9w0B
|
||||
AQsFAAOCAgEAUTdYUqEimzW7TbrOypLqCfL7VOwYf/Q79OH5cHLCZeggfQhDconl
|
||||
k7Kgh8b0vi+/XuWu7CN8n/UPeg1vo3G+taXirrytthQinAHGwc/UdbOygJa9zuBc
|
||||
VyqoH3CXTXDInT+8a+c3aEVMJ2St+pSn4ed+WkDp8ijsijvEyFwE47hulW0Ltzjg
|
||||
9fOV5Pmrg/zxWbRuL+k0DBDHEJennCsAen7c35Pmx7jpmJ/HtgRhcnz0yjSBvyIw
|
||||
6L1QIupkCv2SBODT/xDD3gfQQyKv6roV4G2EhfEyAsWpmojxjCUCGiyg97FvDtm/
|
||||
NK2LSc9lybKxB73I2+P2G3CaWpvvpAiHCVu30jW8GCxKdfhsXtnIy2imskQqVZ2m
|
||||
0Pmxobb28Tucr7xBK7CtwvPrb79os7u2XP3O5f9b/H66GNyRrglRXlrYjI1oGYL/
|
||||
f4I1n/Sgusda6WvA6C190kxjU15Y12mHU4+BxyR9cx2hhGS9fAjMZKJss28qxvz6
|
||||
Axu4CaDmRNZpK/pQrXF17yXCXkmEWgvSOEZy6Z9pcbLIVEGckV/iVeq0AOo2pkg9
|
||||
p4QRIy0tK2diRENLSF2KysFwbY6B26BFeFs3v1sYVRhFW9nLkOrQVporCS0KyZmf
|
||||
wVD89qSTlnctLcZnIavjKsKUu1nA1iU0yYMdYepKR7lWbnwhdx3ewok=
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
MIIEoQIBAAKCAQEAox49rBsh9MSp910Ze+b5vW9JNbikWdIJKwN8qBkhGahwU3lu
|
||||
Di0b2ph+c+Pi2MWnEhME6weNMWUnrga2G89Xev7AXXNe/dvH4gGIUtPsJRXBd5ld
|
||||
OPU6LWQzmK0HWahk0rfvvJO4oXCkKLiQJeWfxessDbqS4MloRdarBQEDbbwhPafu
|
||||
HRnTa4OFot7wjdBuKFTIqws5gFTJOux5qkfTyeYck0ACvqZyGTr3uY5skSWVtdPc
|
||||
wV1UUNxPE8T3pkd2AWzgbd95yaTlgNoy7MgWcdA4JJohsbOaqSfN9lKND/wT1sMX
|
||||
riGTX0VkgO0lW8kH6oKHTV5yH6Q2PfMclF1SEwIDAQABAoH/IUKi6kHRRErVkJrR
|
||||
l3IbE+vQaCPXxawOMoPp5yme/Jxb5Kl3lDk4DlqjbjE8qcOjs9iTW1ku130vM7Nd
|
||||
1RqlVW8C/aS77Qd9IMuVmhrPcln9TDKTAtb+Bd0CQew5YEH15ps0ej8+ZnmRZe9v
|
||||
dReQfJeqlyINnchAesnke7pSxXN2xTegoNvNZWceb3eYruMp05m+ZdAwg78sPvBI
|
||||
9GRSuwRWFt0o4qmzrPJOH11rveFa2xJvjMMXv52hTqOMtDzubrpvM0qhU0/EFyuY
|
||||
woyQZvrudKjjGXMLp3Ahpn/5yHT//W92SPuthqAlr+e1k89V9vyjYq9CUq/jHryH
|
||||
tUHZAoGBAND3Hp11FmdvKU1YToTzNdVVjWxbtJHvaGuDgR+Pm5ojrpeyDBXQwb8g
|
||||
0p1b3v5omI3D5JnA7f6n3v6iVVGphlauDqi2G7xVJHvNbgPDKrEIPhL6+ctyGiv6
|
||||
lNmeXLjAZBa+AoqblEtnchT3lCmLbCGcb0dr2p91sENoR/ROxJ+3AoGBAMfVV019
|
||||
akKFpS5LnQPg0FCpwpoci67JJNN0LOrPwHD0+mEMW+ZP3eVLisbmqNeRAUcIXKrd
|
||||
Ip6uV6gduenyBpakfEuvTOiHbFkEKgo7iSvIAU4ukuK1nKUaDpydckSzeqWSNAkM
|
||||
cf/U/SDiWQBQRM3ocmBiYkF2O4AKhKiLTGiFAoGAGqwAJ17jji49Glc0JnoYm/NA
|
||||
it0lrh7duCNf3tRoqwL07P3X1wz/PdMFrvoj+1sEZcvkKM/cUM3Cg8PamgLGV9f9
|
||||
nQEphx9i+b5d1XMaxt/jdG6+ZX5Z4tUoHKK++QHthI2aK3DyO7GneQ+kxKy8D4o1
|
||||
FeupSwMtjV0JGiDXrf8CgYEAtXP2Kynnc/IQ1GHaeGwKHESZrQCgoZyJsOw74Re2
|
||||
QZthQwBK7m21KoEWyZcm118XDt377zaPOhFLDR+48kJPUziWmM7cAgT+EDJkzhfT
|
||||
bYrWDJzjybJpQ83OWM3qtZFXm8KPN2wyk8Bd/R8q+8rnPyWDvht35sMqMhDa9oRO
|
||||
ZFUCgYAswzGZTIBvw30K6Gv32lMMiBL/75J4Ob9pfAT00yPvGvtezv4Hwa2KSoW3
|
||||
CMLvmAEeA5J0Ec3M9VtZuHHDkKDXp3KbvKiItNAZHX7PiW3xnoUA1sLB78iICyem
|
||||
SVG0Sw93EIPsMVBCrBMeOQhdvC2FGeQN6CHcGgdM3BwK6koKJg==
|
||||
-----END RSA PRIVATE KEY-----
|
||||
@@ -1,85 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFBTCCA+2gAwIBAgISBjCoPymR7fahLUz38HfH7cO1MA0GCSqGSIb3DQEBCwUA
|
||||
MDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQwwCgYDVQQD
|
||||
EwNSMTMwHhcNMjUxMjE4MDc1ODA4WhcNMjYwMzE4MDc1ODA3WjAfMR0wGwYDVQQD
|
||||
ExRoYXNzLmd5b3phbWFuY2F2ZS5mcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
|
||||
AQoCggEBAKkd2rf0WMzNIIEDin8w4Wd1kCKWx+6K9XFBRugnATbL6SscN10O89ts
|
||||
kFSU1NrWLZbv7rDuiG0hlExCImROLchpHgWSoptXCDmHRnccGxv62jm/Tzw1Tw0X
|
||||
c0pdmNFPlcQCM+jyA/R2dygsEmTz+CcQw+ldcDmK2rImvZlH8RvkpU9mUdFWldUq
|
||||
AcE3WOkljroP/dAhDbzrHbSNx0259B+CUqX+58g5JJjlwLTq3yPJlT6hVmJR4ouy
|
||||
zjaiN1H9jMH2PQ6eabRRxI2vQ7a9f7FEWb61hTAYptmlNsWBkHyrFyyWLZ9CeAE/
|
||||
yNz6/TPOIIhP2zbbSUJYTThP6d8EuSECAwEAAaOCAiUwggIhMA4GA1UdDwEB/wQE
|
||||
AwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIw
|
||||
ADAdBgNVHQ4EFgQULYZdSx6h1ci2h15MvNA18PjDj64wHwYDVR0jBBgwFoAU56uf
|
||||
DywzoFPTXk94yLKEDjvWkjMwMwYIKwYBBQUHAQEEJzAlMCMGCCsGAQUFBzAChhdo
|
||||
dHRwOi8vcjEzLmkubGVuY3Iub3JnLzAfBgNVHREEGDAWghRoYXNzLmd5b3phbWFu
|
||||
Y2F2ZS5mcjATBgNVHSAEDDAKMAgGBmeBDAECATAuBgNVHR8EJzAlMCOgIaAfhh1o
|
||||
dHRwOi8vcjEzLmMubGVuY3Iub3JnLzU0LmNybDCCAQUGCisGAQQB1nkCBAIEgfYE
|
||||
gfMA8QB2AGQRxGykEuyniRyiAi4AvKtPKAfUHjUnq+r+1QPJfc3wAAABmzCs8bcA
|
||||
AAQDAEcwRQIhAM/jZOPRYtYy6cNr5kcT9N1PsAY0WQgb/u5dlLJZnDY7AiBrAIAZ
|
||||
k0d427f8cNH2g9cPITbJL8WiW1u02kEzxfXMxQB3AA5XlLzzrqk+MxssmQez95Df
|
||||
m8I9cTIl3SGpJaxhxU4hAAABmzCs8cIAAAQDAEgwRgIhAKuj8yo00ERo7lX2cs4x
|
||||
vQTVs9lOyNSXysxXEBNrZQ4lAiEA2Lp5qqEKT6GKd4DR7R6+CKOn/E7Hwtg+m+ei
|
||||
QlDztVkwDQYJKoZIhvcNAQELBQADggEBAGSUIrjuLkeQ5PS2UACA3RBQFPXtcCZc
|
||||
9LTkc23L9NSxdcVV616DdlFCUEz/oDjWndhuAHWcn60vNkeRog42mj0wZXGdGAbI
|
||||
5xVlY5NyRrHfMtjXQn5yOlMbGAouSdWuwmUXwcz1nrilnZ3IMHvoJy5GjVUhrFlD
|
||||
9vpdsxHfu0yvZwc6ISdv/p2sujoUBel2j9JSl3isJRgVJPyiVuIECIs4sbRP12/q
|
||||
iTVfZegUqadr1Z+FErvSBDtM9z3V8vZaMH+fTBuz37Gzm9csaHTg+uG8PauuZC9t
|
||||
WNAcwhGnUi0znLbBdPULJs8M+ETi8dxIONKV56ysPjFNndsvNC3NlT8=
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFBTCCAu2gAwIBAgIQWgDyEtjUtIDzkkFX6imDBTANBgkqhkiG9w0BAQsFADBP
|
||||
MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy
|
||||
Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNDAzMTMwMDAwMDBa
|
||||
Fw0yNzAzMTIyMzU5NTlaMDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBF
|
||||
bmNyeXB0MQwwCgYDVQQDEwNSMTMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
|
||||
AoIBAQClZ3CN0FaBZBUXYc25BtStGZCMJlA3mBZjklTb2cyEBZPs0+wIG6BgUUNI
|
||||
fSvHSJaetC3ancgnO1ehn6vw1g7UDjDKb5ux0daknTI+WE41b0VYaHEX/D7YXYKg
|
||||
L7JRbLAaXbhZzjVlyIuhrxA3/+OcXcJJFzT/jCuLjfC8cSyTDB0FxLrHzarJXnzR
|
||||
yQH3nAP2/Apd9Np75tt2QnDr9E0i2gB3b9bJXxf92nUupVcM9upctuBzpWjPoXTi
|
||||
dYJ+EJ/B9aLrAek4sQpEzNPCifVJNYIKNLMc6YjCR06CDgo28EdPivEpBHXazeGa
|
||||
XP9enZiVuppD0EqiFwUBBDDTMrOPAgMBAAGjgfgwgfUwDgYDVR0PAQH/BAQDAgGG
|
||||
MB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATASBgNVHRMBAf8ECDAGAQH/
|
||||
AgEAMB0GA1UdDgQWBBTnq58PLDOgU9NeT3jIsoQOO9aSMzAfBgNVHSMEGDAWgBR5
|
||||
tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAKG
|
||||
Fmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0gBAwwCjAIBgZngQwBAgEwJwYD
|
||||
VR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVuY3Iub3JnLzANBgkqhkiG9w0B
|
||||
AQsFAAOCAgEAUTdYUqEimzW7TbrOypLqCfL7VOwYf/Q79OH5cHLCZeggfQhDconl
|
||||
k7Kgh8b0vi+/XuWu7CN8n/UPeg1vo3G+taXirrytthQinAHGwc/UdbOygJa9zuBc
|
||||
VyqoH3CXTXDInT+8a+c3aEVMJ2St+pSn4ed+WkDp8ijsijvEyFwE47hulW0Ltzjg
|
||||
9fOV5Pmrg/zxWbRuL+k0DBDHEJennCsAen7c35Pmx7jpmJ/HtgRhcnz0yjSBvyIw
|
||||
6L1QIupkCv2SBODT/xDD3gfQQyKv6roV4G2EhfEyAsWpmojxjCUCGiyg97FvDtm/
|
||||
NK2LSc9lybKxB73I2+P2G3CaWpvvpAiHCVu30jW8GCxKdfhsXtnIy2imskQqVZ2m
|
||||
0Pmxobb28Tucr7xBK7CtwvPrb79os7u2XP3O5f9b/H66GNyRrglRXlrYjI1oGYL/
|
||||
f4I1n/Sgusda6WvA6C190kxjU15Y12mHU4+BxyR9cx2hhGS9fAjMZKJss28qxvz6
|
||||
Axu4CaDmRNZpK/pQrXF17yXCXkmEWgvSOEZy6Z9pcbLIVEGckV/iVeq0AOo2pkg9
|
||||
p4QRIy0tK2diRENLSF2KysFwbY6B26BFeFs3v1sYVRhFW9nLkOrQVporCS0KyZmf
|
||||
wVD89qSTlnctLcZnIavjKsKUu1nA1iU0yYMdYepKR7lWbnwhdx3ewok=
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
MIIEpAIBAAKCAQEAqR3at/RYzM0ggQOKfzDhZ3WQIpbH7or1cUFG6CcBNsvpKxw3
|
||||
XQ7z22yQVJTU2tYtlu/usO6IbSGUTEIiZE4tyGkeBZKim1cIOYdGdxwbG/raOb9P
|
||||
PDVPDRdzSl2Y0U+VxAIz6PID9HZ3KCwSZPP4JxDD6V1wOYrasia9mUfxG+SlT2ZR
|
||||
0VaV1SoBwTdY6SWOug/90CENvOsdtI3HTbn0H4JSpf7nyDkkmOXAtOrfI8mVPqFW
|
||||
YlHii7LONqI3Uf2MwfY9Dp5ptFHEja9Dtr1/sURZvrWFMBim2aU2xYGQfKsXLJYt
|
||||
n0J4AT/I3Pr9M84giE/bNttJQlhNOE/p3wS5IQIDAQABAoIBADiXU2nsO8zotYBG
|
||||
mZFfX4YZ6o4Qi73QxTpNYDduWfMmwBNbgVFEICkkhpWvKh1Cv4W7K1IMuB1gt7nf
|
||||
BZgwKxTdzByMSZqWwJtTn6pa/t1Zj630TUT2B8p3Nu7DLFCag6DQJePFHLqw68XH
|
||||
Ha6njzovW4eba2LuCqnD2f1RfCbbTFCtZkF0xrsYOf+ld+bsBX8VyVd4jy2Pqn3k
|
||||
zAgNKa/PRY5P/H4s/QPitIctSjq3CUJt3nqXRgtIRufxupUY+GGrzUYiJMsIC50Z
|
||||
4/Eh5y/Za0kfpIusKXAjs2vsLbrMASw7lBxiCSvQah9hczP48rc/TQ+IyUkMErLM
|
||||
QiNczcsCgYEA3Llkc4wMN7eyMjVJU42SxBfAR3/ynxEXHXCDkpf2fI1ZryYRs6u3
|
||||
jhjjUEu2ZsxiWC9W/zE4YOCRtimbOeOBkARSyrtyQWbc94t0sQaeU2eXE6nC9pEl
|
||||
ADlJ49u4lgU5FC2CJ0A/19h8w9uc4wM+4Jwlpd85Hr46hKzJQQKrOg8CgYEAxCUD
|
||||
f1h2ot87jWhSKMUPPawthCl2X2yu/YuTcXcU8YoC5RK6j70SZGfiWzC833xx+Oxl
|
||||
x5UMfr/f7QbNy+7oKFgyJBL2/JcO09j2vsESuEI45VPidS5lXU2h+DjtsF74PJ/Z
|
||||
z/Bzh1CCF/6Ht2fiFLA6ei5sQVzQbwHGxRFVyc8CgYEAwoWMdpx9A/mbTM5TUhRZ
|
||||
vQFljl2/V9o68dH/0oikTP5RhJ9bSGnUOaHLay9ej9gd77PAyuP42L/xCoY+a9UJ
|
||||
kP+Oa2ao+eSKZor7iyvXCpAnv8eDr8MYxcq3SN2SHnx54kN9CdSAr1v2ELIR4Ksy
|
||||
lcZnE3jXoTVq4xRXxThx6JcCgYA0ydllHoPfVcELT7Y87rwpVvtxBE+tYuy9pCDs
|
||||
eqYSU5hv2liHctVOXH8ZF8bdRvrNiaHi0wRn4G/9tMUSS5wDr6je+JOsa2M8NLpD
|
||||
oGbPXFM/tRHPg8sYD1q2GWwu+YBJoKPYSNhu5IX+uyv/el/oPX2fgHr2JGqcVZgP
|
||||
VZkHFQKBgQCA/UrDvMd3qgUD8DeaZukLe+PbiWg1VfxN8qklMepx1jMA7POxTmyO
|
||||
3luJiFQWdGkmkLOD4B051OZGLRhasNA5wtshF+3SicqX3TZuG4FQ4K2IvdYG/GvY
|
||||
gzEq3XdRzbDCHSI61Z7GsjP5You+PGI7IXPPTAOmlzH8kR2ulVYQ9Q==
|
||||
-----END RSA PRIVATE KEY-----
|
||||
@@ -1,53 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDpTCCAyqgAwIBAgISBscRFyoH6PXCsyzkawYjMT+SMAoGCCqGSM49BAMDMDIx
|
||||
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
|
||||
ODAeFw0yNTEyMTgwNzU4MTJaFw0yNjAzMTgwNzU4MTFaMCIxIDAeBgNVBAMTF2hv
|
||||
bWVnaXQuZ3lvemFtYW5jYXZlLmZyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
|
||||
V1Zjgua+dFubwUo5Woi8MjvwDN240fVWIW5oj/uiwSUyRIesDVOmu1FO7ujNicXZ
|
||||
bORnxVWyshG08TgD6emjHqOCAi4wggIqMA4GA1UdDwEB/wQEAwIHgDAdBgNVHSUE
|
||||
FjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQU
|
||||
87cxJX8uKWah46zpIn+xdVLQ46AwHwYDVR0jBBgwFoAUjw0TovYuftFQbDMYOF1Z
|
||||
jiNykcowMgYIKwYBBQUHAQEEJjAkMCIGCCsGAQUFBzAChhZodHRwOi8vZTguaS5s
|
||||
ZW5jci5vcmcvMCIGA1UdEQQbMBmCF2hvbWVnaXQuZ3lvemFtYW5jYXZlLmZyMBMG
|
||||
A1UdIAQMMAowCAYGZ4EMAQIBMC0GA1UdHwQmMCQwIqAgoB6GHGh0dHA6Ly9lOC5j
|
||||
LmxlbmNyLm9yZy8xOS5jcmwwggENBgorBgEEAdZ5AgQCBIH+BIH7APkAdgBkEcRs
|
||||
pBLsp4kcogIuALyrTygH1B41J6vq/tUDyX3N8AAAAZswrQEUAAAEAwBHMEUCIQCY
|
||||
O86tkfJQof1N3jFoT6MS56WYkuy900f8jAxO+eT/GAIgKHm9E/gu+s+GdVRFySSX
|
||||
pn66/Ixvj3F5kyOBxCG2TxEAfwBxfpXzwjiKbbHjhEk9MeFaqWIIdi1CAOAFDNBn
|
||||
taZh4gAAAZswrQFkAAgAAAUABHsbGwQDAEgwRgIhAJLsVtu3H+yizmZlmmc5aq2K
|
||||
2XMB7DFGsjDfZhbyRfflAiEAq5kDKwd95liW7GmJrkzQQFlx7dOsJwVobxALUw39
|
||||
I/owCgYIKoZIzj0EAwMDaQAwZgIxAKiZ/geOalEht6Si0gI9V1jL0f+o27Wlkd0U
|
||||
GW4zubvQlEp7fi6bIGYXP8K0+47eJwIxAO6Ox6Kj202b/Sek2EJrBKrhxlOlQQdE
|
||||
jQ9DD74s6wswdyxPcitvQRy9/Yt83IL6Nw==
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIEVjCCAj6gAwIBAgIQY5WTY8JOcIJxWRi/w9ftVjANBgkqhkiG9w0BAQsFADBP
|
||||
MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy
|
||||
Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNDAzMTMwMDAwMDBa
|
||||
Fw0yNzAzMTIyMzU5NTlaMDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBF
|
||||
bmNyeXB0MQswCQYDVQQDEwJFODB2MBAGByqGSM49AgEGBSuBBAAiA2IABNFl8l7c
|
||||
S7QMApzSsvru6WyrOq44ofTUOTIzxULUzDMMNMchIJBwXOhiLxxxs0LXeb5GDcHb
|
||||
R6EToMffgSZjO9SNHfY9gjMy9vQr5/WWOrQTZxh7az6NSNnq3u2ubT6HTKOB+DCB
|
||||
9TAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMB
|
||||
MBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFI8NE6L2Ln7RUGwzGDhdWY4j
|
||||
cpHKMB8GA1UdIwQYMBaAFHm0WeZ7tuXkAXOACIjIGlj26ZtuMDIGCCsGAQUFBwEB
|
||||
BCYwJDAiBggrBgEFBQcwAoYWaHR0cDovL3gxLmkubGVuY3Iub3JnLzATBgNVHSAE
|
||||
DDAKMAgGBmeBDAECATAnBgNVHR8EIDAeMBygGqAYhhZodHRwOi8veDEuYy5sZW5j
|
||||
ci5vcmcvMA0GCSqGSIb3DQEBCwUAA4ICAQBnE0hGINKsCYWi0Xx1ygxD5qihEjZ0
|
||||
RI3tTZz1wuATH3ZwYPIp97kWEayanD1j0cDhIYzy4CkDo2jB8D5t0a6zZWzlr98d
|
||||
AQFNh8uKJkIHdLShy+nUyeZxc5bNeMp1Lu0gSzE4McqfmNMvIpeiwWSYO9w82Ob8
|
||||
otvXcO2JUYi3svHIWRm3+707DUbL51XMcY2iZdlCq4Wa9nbuk3WTU4gr6LY8MzVA
|
||||
aDQG2+4U3eJ6qUF10bBnR1uuVyDYs9RhrwucRVnfuDj29CMLTsplM5f5wSV5hUpm
|
||||
Uwp/vV7M4w4aGunt74koX71n4EdagCsL/Yk5+mAQU0+tue0JOfAV/R6t1k+Xk9s2
|
||||
HMQFeoxppfzAVC04FdG9M+AC2JWxmFSt6BCuh3CEey3fE52Qrj9YM75rtvIjsm/1
|
||||
Hl+u//Wqxnu1ZQ4jpa+VpuZiGOlWrqSP9eogdOhCGisnyewWJwRQOqK16wiGyZeR
|
||||
xs/Bekw65vwSIaVkBruPiTfMOo0Zh4gVa8/qJgMbJbyrwwG97z/PRgmLKCDl8z3d
|
||||
tA0Z7qq7fta0Gl24uyuB05dqI5J1LvAzKuWdIjT1tP8qCoxSE/xpix8hX2dt3h+/
|
||||
jujUgFPFZ0EVZ0xSyBNRF3MboGZnYXFUxpNjTWPKpagDHJQmqrAcDmWJnMsFY3jS
|
||||
u1igv3OefnWjSQ==
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN EC PRIVATE KEY-----
|
||||
MHcCAQEEIEG//C40B5uQNl7megYj6Sh/ugIcxql01dz1aSmytnICoAoGCCqGSM49
|
||||
AwEHoUQDQgAEV1Zjgua+dFubwUo5Woi8MjvwDN240fVWIW5oj/uiwSUyRIesDVOm
|
||||
u1FO7ujNicXZbORnxVWyshG08TgD6emjHg==
|
||||
-----END EC PRIVATE KEY-----
|
||||
@@ -1,85 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFBTCCA+2gAwIBAgISBaTjb8NGpzSq3h1l7ejarlE2MA0GCSqGSIb3DQEBCwUA
|
||||
MDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQwwCgYDVQQD
|
||||
EwNSMTAwHhcNMjUwNzMxMjEwMzExWhcNMjUxMDI5MjEwMzEwWjAgMR4wHAYDVQQD
|
||||
ExVqaXRzaS5neW96YW1hbmNhdmUuZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
|
||||
ggEKAoIBAQDXwpPVFxtiAwuiJtKUS97LztMN8DxV2FVuoTsmAVhnAUbAMyaTucue
|
||||
zDOhn6GM4YOXS7zOW4XRGjl5ZOoKmh3WFrB1+1wtAfsX3YOKzFAKU25W5QORSSu/
|
||||
CfT3u9lLMN3nGSZ7sPC+G3HRfvjyuY/qyO1kpcx58IaZBaBpn55ZI1XJrXCEzeP9
|
||||
OPkKYo9wjZbp3YloMCQFOGohJw9kCY/am/q7LcfJx+Sl0fOdkNTHAbWo/sgsmWDj
|
||||
uWA/M0pW0jhgD6ayEW2daLJ8zSj7J/SNBecyj7Mgeap0m3iD1LjUoFXVngGCPSPV
|
||||
MJvuyGIqr8zUdU7WylNixz3jsj1Lz3ZDAgMBAAGjggIkMIICIDAOBgNVHQ8BAf8E
|
||||
BAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQC
|
||||
MAAwHQYDVR0OBBYEFHWPASx4C8OD5/Qnq6hl+0qXTF20MB8GA1UdIwQYMBaAFLu8
|
||||
w0el5LypxsOkcgwQjaI14cjoMDMGCCsGAQUFBwEBBCcwJTAjBggrBgEFBQcwAoYX
|
||||
aHR0cDovL3IxMC5pLmxlbmNyLm9yZy8wIAYDVR0RBBkwF4IVaml0c2kuZ3lvemFt
|
||||
YW5jYXZlLmZyMBMGA1UdIAQMMAowCAYGZ4EMAQIBMC4GA1UdHwQnMCUwI6AhoB+G
|
||||
HWh0dHA6Ly9yMTAuYy5sZW5jci5vcmcvNTUuY3JsMIIBAwYKKwYBBAHWeQIEAgSB
|
||||
9ASB8QDvAHUApELFBklgYVSPD9TqnPt6LSZFTYepfy/fRVn2J086hFQAAAGYYoFc
|
||||
CgAABAMARjBEAiANBPT9v7V1M+JJjorsYcZSP8Me5YgbMYlNrHEbzL4MIwIgXKGl
|
||||
pe/fsLk0/NlJtcNPajxliYpek3L5po/xhWImhkwAdgAS8U40vVNyTIQGGcOPP3oT
|
||||
+Oe1YoeInG0wBYTr5YYmOgAAAZhigWPcAAAEAwBHMEUCIC7wfsE9idaj2AadMB7p
|
||||
acy5XpUgJ9mYIXTPQVBLBZsyAiEAueg7eMvDlWP9IfRQR0bfn+1ZDibTHfEbe4Kl
|
||||
dLnU1WswDQYJKoZIhvcNAQELBQADggEBAIBR3NYiWAUFpYDueQCFCpttWVbFDev+
|
||||
Sgmg3fyBDMhxDRCL+4eePYJ734wcP/cqVFIvCFZfSaV05LXX9S/SEc0n9L+Z+xnt
|
||||
ftCgnGxRheqBs1tOb9nxrK2JQqifoy5W4pGzAK23GwNDaDEUcA4n0boViyXbyo0K
|
||||
xquIuNE4nHGrTTWunsf/La7HUohTr3YpZmlV5sELnzC9Mj89X8l5KOSRSi81S0nY
|
||||
YSFCX78WUODrxG6fX07YW5fjyx+IMHC7i5OzUbjF4Aiuf1P2nWkJI9zT5Gl3q+0e
|
||||
EGX8ED71E+FytwCuyeGCOQcWzbBC5Sc4U93WTlR1LXqmdM/SBWYyC8c=
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFBTCCAu2gAwIBAgIQS6hSk/eaL6JzBkuoBI110DANBgkqhkiG9w0BAQsFADBP
|
||||
MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy
|
||||
Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNDAzMTMwMDAwMDBa
|
||||
Fw0yNzAzMTIyMzU5NTlaMDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBF
|
||||
bmNyeXB0MQwwCgYDVQQDEwNSMTAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
|
||||
AoIBAQDPV+XmxFQS7bRH/sknWHZGUCiMHT6I3wWd1bUYKb3dtVq/+vbOo76vACFL
|
||||
YlpaPAEvxVgD9on/jhFD68G14BQHlo9vH9fnuoE5CXVlt8KvGFs3Jijno/QHK20a
|
||||
/6tYvJWuQP/py1fEtVt/eA0YYbwX51TGu0mRzW4Y0YCF7qZlNrx06rxQTOr8IfM4
|
||||
FpOUurDTazgGzRYSespSdcitdrLCnF2YRVxvYXvGLe48E1KGAdlX5jgc3421H5KR
|
||||
mudKHMxFqHJV8LDmowfs/acbZp4/SItxhHFYyTr6717yW0QrPHTnj7JHwQdqzZq3
|
||||
DZb3EoEmUVQK7GH29/Xi8orIlQ2NAgMBAAGjgfgwgfUwDgYDVR0PAQH/BAQDAgGG
|
||||
MB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATASBgNVHRMBAf8ECDAGAQH/
|
||||
AgEAMB0GA1UdDgQWBBS7vMNHpeS8qcbDpHIMEI2iNeHI6DAfBgNVHSMEGDAWgBR5
|
||||
tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAKG
|
||||
Fmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0gBAwwCjAIBgZngQwBAgEwJwYD
|
||||
VR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVuY3Iub3JnLzANBgkqhkiG9w0B
|
||||
AQsFAAOCAgEAkrHnQTfreZ2B5s3iJeE6IOmQRJWjgVzPw139vaBw1bGWKCIL0vIo
|
||||
zwzn1OZDjCQiHcFCktEJr59L9MhwTyAWsVrdAfYf+B9haxQnsHKNY67u4s5Lzzfd
|
||||
u6PUzeetUK29v+PsPmI2cJkxp+iN3epi4hKu9ZzUPSwMqtCceb7qPVxEbpYxY1p9
|
||||
1n5PJKBLBX9eb9LU6l8zSxPWV7bK3lG4XaMJgnT9x3ies7msFtpKK5bDtotij/l0
|
||||
GaKeA97pb5uwD9KgWvaFXMIEt8jVTjLEvwRdvCn294GPDF08U8lAkIv7tghluaQh
|
||||
1QnlE4SEN4LOECj8dsIGJXpGUk3aU3KkJz9icKy+aUgA+2cP21uh6NcDIS3XyfaZ
|
||||
QjmDQ993ChII8SXWupQZVBiIpcWO4RqZk3lr7Bz5MUCwzDIA359e57SSq5CCkY0N
|
||||
4B6Vulk7LktfwrdGNVI5BsC9qqxSwSKgRJeZ9wygIaehbHFHFhcBaMDKpiZlBHyz
|
||||
rsnnlFXCb5s8HKn5LsUgGvB24L7sGNZP2CX7dhHov+YhD+jozLW2p9W4959Bz2Ei
|
||||
RmqDtmiXLnzqTpXbI+suyCsohKRg6Un0RC47+cpiVwHiXZAW+cn8eiNIjqbVgXLx
|
||||
KPpdzvvtTnOPlC7SQZSYmdunr3Bf9b77AiC/ZidstK36dRILKz7OA54=
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
MIIEowIBAAKCAQEA18KT1RcbYgMLoibSlEvey87TDfA8VdhVbqE7JgFYZwFGwDMm
|
||||
k7nLnswzoZ+hjOGDl0u8zluF0Ro5eWTqCpod1hawdftcLQH7F92DisxQClNuVuUD
|
||||
kUkrvwn097vZSzDd5xkme7Dwvhtx0X748rmP6sjtZKXMefCGmQWgaZ+eWSNVya1w
|
||||
hM3j/Tj5CmKPcI2W6d2JaDAkBThqIScPZAmP2pv6uy3HycfkpdHznZDUxwG1qP7I
|
||||
LJlg47lgPzNKVtI4YA+mshFtnWiyfM0o+yf0jQXnMo+zIHmqdJt4g9S41KBV1Z4B
|
||||
gj0j1TCb7shiKq/M1HVO1spTYsc947I9S892QwIDAQABAoIBAF10I7k4PX2aCRdu
|
||||
jmZ6aGHJz2PpqxCZ2ANHpcmD6qkPBfipDywMXVSGaVS3wm81nNxTC1Asl00neT6K
|
||||
Bc+aypKZGEy6F8ZM5dgD8/6SGZcnZRMRNhbfZSnlo6wMOwXVAEChhagsz1HgrE+M
|
||||
GkN0OZB+AElIgUVN99be94jYgOtlVWYWOiAsfzsaAQRTTzNIbdfza//4dwPINGSi
|
||||
ymr4EjiN6Lp9gNTw9FbDL/YOwr8+Eh1THfj8vVBKoyUM0bJqXcruQck6zHnPeGUf
|
||||
K7qJWyQLZNgrVE9bKvG99cqNSmkl1OL1O7swK4CLQ7b7/GC02W/PVKyCFB2pmUjI
|
||||
cKPaJCkCgYEA9plM5yELaHux4rRLptwz6CPCpV+bXO6eX+Fv3gq2r69lxnkOLqos
|
||||
auGlIaE58WLIkT7aglt/9qUVAf+5ZU5ze4cEZ5B704/IyLS5DrTc1r/xh1ZNmZae
|
||||
iGmSyLJOPxvQHBVlnIRVZMeikSD82+frx9xnn3itWFiCenMuTrujKMsCgYEA3/xN
|
||||
y2oA+eJPi+ozI+o/x+L3SDus0Phewr04/TviI8mT4mm4lBCNlt8DdcHSWyRUZsy/
|
||||
GPHn/LPojDC7P6I2weLsUO7+vHB1HVtWw2YT8eaK6t1OqZwdJ11ghVr4E2LygQ1Q
|
||||
EOaVqxtdNJRJnbYapzHKifTUmRpZ1wBdiXAC0WkCgYEAvKYaRtbou02lkCENnuDm
|
||||
dLimt4ykdju1vPPheKQJje1IlsUVLG3S/RESGuAUS62ecj77Oq50/mLb52OSmQWj
|
||||
IuTvYasOj5J3r9NRnwaNy1ubkkVbqBupvAHH4PFHGtBULKfRzCMQkMCIhS4PQsvx
|
||||
fDwIqd7P/b34U2S6EFFLSHECgYANoFjPPjSu/xCdz3KrBa45p9opX9AEqoeBS2ez
|
||||
KDh6uuGvTYU4JMWoXwrj2BXHC6/CzUP27YiSfBNyq+hIV8MDCp4b0l5W8nR9g7gE
|
||||
jSo7di4PWcVWVjQD2A9uLXmYHFXqeffb/1stnK2P7FGKMbDvaP0MZYOliM/cX55R
|
||||
JSpWuQKBgDuTDABQA8tmBkwo2X2NQZdEG6Q1xhxuZrug6zRDzCC4nqJq4k7JaNSX
|
||||
uvBq8Uyau9luLu7T2soUaWmQObFrpBZuIcKf/UByhbHA8eBdHAHNdUaUa9pVGk8W
|
||||
nkboRwh2nwdFLjDcvKqhIdJAAm4vMSc/HnKWpxjIqj02KyHL5mB0
|
||||
-----END RSA PRIVATE KEY-----
|
||||
@@ -1,53 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDljCCAxygAwIBAgISBg5gkRbRh2upyVvpO2kjDk7+MAoGCCqGSM49BAMDMDIx
|
||||
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
|
||||
ODAeFw0yNTEyMTgwODAwMjNaFw0yNjAzMTgwODAwMjJaMB8xHTAbBgNVBAMTFGxl
|
||||
ZGlnaXRhbGJvdWRvaXIuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEfaMs
|
||||
qRR076hLhhWOSI6z3cT7qXGT7CwbPCuz2y0uVNBHDE7PAinkKU+xvu8RnXBNbhl2
|
||||
mvLwIantblFil2UTZqOCAiMwggIfMA4GA1UdDwEB/wQEAwIHgDAdBgNVHSUEFjAU
|
||||
BggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQU7vv9
|
||||
pRBO1Mx0E0ypZQMqHPwNI8swHwYDVR0jBBgwFoAUjw0TovYuftFQbDMYOF1ZjiNy
|
||||
kcowMgYIKwYBBQUHAQEEJjAkMCIGCCsGAQUFBzAChhZodHRwOi8vZTguaS5sZW5j
|
||||
ci5vcmcvMB8GA1UdEQQYMBaCFGxlZGlnaXRhbGJvdWRvaXIuY29tMBMGA1UdIAQM
|
||||
MAowCAYGZ4EMAQIBMC4GA1UdHwQnMCUwI6AhoB+GHWh0dHA6Ly9lOC5jLmxlbmNy
|
||||
Lm9yZy8xMjcuY3JsMIIBBAYKKwYBBAHWeQIEAgSB9QSB8gDwAHcAyzj3FYl8hKFE
|
||||
X1vB3fvJbvKaWc1HCmkFhbDLFMMUWOcAAAGbMK796wAABAMASDBGAiEAsaQMMstO
|
||||
I9ca8zyRHt8Da+iR8bYIDGqRJYNcSALyDkcCIQC+lF2tB/ucgyQTO2SfTU1jl8et
|
||||
vkQ+ifLXcOIVKZdGmwB1AEmcm2neHXzs/DbezYdkprhbrwqHgBnRVVL76esp3fjD
|
||||
AAABmzCu/eIAAAQDAEYwRAIgNOKTbC8GpISH94uHQGwA6yDdfF4qfqlRE+9CtGhq
|
||||
AysCIAcX6hh/foBly+p4NEBDK80QeR/r4f6QBGnV36w5fNTfMAoGCCqGSM49BAMD
|
||||
A2gAMGUCMCsycSTcC9UMaE7GDLhHQt1npTQuci4/qBArML3mrkf3OU76BIi/WWcM
|
||||
jso3jo3G7QIxANfTAhh4TPgp3rIwzBPdWectXEvh2fcvZXlMLOEBKp47ZoWF2lCC
|
||||
aRwrk2UQJfP4mQ==
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIEVjCCAj6gAwIBAgIQY5WTY8JOcIJxWRi/w9ftVjANBgkqhkiG9w0BAQsFADBP
|
||||
MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy
|
||||
Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNDAzMTMwMDAwMDBa
|
||||
Fw0yNzAzMTIyMzU5NTlaMDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBF
|
||||
bmNyeXB0MQswCQYDVQQDEwJFODB2MBAGByqGSM49AgEGBSuBBAAiA2IABNFl8l7c
|
||||
S7QMApzSsvru6WyrOq44ofTUOTIzxULUzDMMNMchIJBwXOhiLxxxs0LXeb5GDcHb
|
||||
R6EToMffgSZjO9SNHfY9gjMy9vQr5/WWOrQTZxh7az6NSNnq3u2ubT6HTKOB+DCB
|
||||
9TAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMB
|
||||
MBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFI8NE6L2Ln7RUGwzGDhdWY4j
|
||||
cpHKMB8GA1UdIwQYMBaAFHm0WeZ7tuXkAXOACIjIGlj26ZtuMDIGCCsGAQUFBwEB
|
||||
BCYwJDAiBggrBgEFBQcwAoYWaHR0cDovL3gxLmkubGVuY3Iub3JnLzATBgNVHSAE
|
||||
DDAKMAgGBmeBDAECATAnBgNVHR8EIDAeMBygGqAYhhZodHRwOi8veDEuYy5sZW5j
|
||||
ci5vcmcvMA0GCSqGSIb3DQEBCwUAA4ICAQBnE0hGINKsCYWi0Xx1ygxD5qihEjZ0
|
||||
RI3tTZz1wuATH3ZwYPIp97kWEayanD1j0cDhIYzy4CkDo2jB8D5t0a6zZWzlr98d
|
||||
AQFNh8uKJkIHdLShy+nUyeZxc5bNeMp1Lu0gSzE4McqfmNMvIpeiwWSYO9w82Ob8
|
||||
otvXcO2JUYi3svHIWRm3+707DUbL51XMcY2iZdlCq4Wa9nbuk3WTU4gr6LY8MzVA
|
||||
aDQG2+4U3eJ6qUF10bBnR1uuVyDYs9RhrwucRVnfuDj29CMLTsplM5f5wSV5hUpm
|
||||
Uwp/vV7M4w4aGunt74koX71n4EdagCsL/Yk5+mAQU0+tue0JOfAV/R6t1k+Xk9s2
|
||||
HMQFeoxppfzAVC04FdG9M+AC2JWxmFSt6BCuh3CEey3fE52Qrj9YM75rtvIjsm/1
|
||||
Hl+u//Wqxnu1ZQ4jpa+VpuZiGOlWrqSP9eogdOhCGisnyewWJwRQOqK16wiGyZeR
|
||||
xs/Bekw65vwSIaVkBruPiTfMOo0Zh4gVa8/qJgMbJbyrwwG97z/PRgmLKCDl8z3d
|
||||
tA0Z7qq7fta0Gl24uyuB05dqI5J1LvAzKuWdIjT1tP8qCoxSE/xpix8hX2dt3h+/
|
||||
jujUgFPFZ0EVZ0xSyBNRF3MboGZnYXFUxpNjTWPKpagDHJQmqrAcDmWJnMsFY3jS
|
||||
u1igv3OefnWjSQ==
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN EC PRIVATE KEY-----
|
||||
MHcCAQEEIDO0mpnl161QMCcwpZM00Ycx3+xngaAC7fadPBTAJ/e3oAoGCCqGSM49
|
||||
AwEHoUQDQgAEfaMsqRR076hLhhWOSI6z3cT7qXGT7CwbPCuz2y0uVNBHDE7PAink
|
||||
KU+xvu8RnXBNbhl2mvLwIantblFil2UTZg==
|
||||
-----END EC PRIVATE KEY-----
|
||||
@@ -1,53 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDnTCCAyOgAwIBAgISBuso8tMXwQVN/kIpLBeNPH3IMAoGCCqGSM49BAMDMDIx
|
||||
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
|
||||
ODAeFw0yNTEyMTgwODMwNDlaFw0yNjAzMTgwODMwNDhaMB8xHTAbBgNVBAMTFGxp
|
||||
bmtzLmJpbGxpc2RlYWQuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEyetv
|
||||
quQNLip3jUa5J/9q+xhQsuAni6FD0D5ohBo1qjRgs8DWnR4hYs+LzOkI+JuS78WL
|
||||
RYVXAqevCdxuWGXBN6OCAiowggImMA4GA1UdDwEB/wQEAwIHgDAdBgNVHSUEFjAU
|
||||
BggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUd/AM
|
||||
c6qZd8IHyNLrRk/EQJMXifMwHwYDVR0jBBgwFoAUjw0TovYuftFQbDMYOF1ZjiNy
|
||||
kcowMgYIKwYBBQUHAQEEJjAkMCIGCCsGAQUFBzAChhZodHRwOi8vZTguaS5sZW5j
|
||||
ci5vcmcvMB8GA1UdEQQYMBaCFGxpbmtzLmJpbGxpc2RlYWQuY29tMBMGA1UdIAQM
|
||||
MAowCAYGZ4EMAQIBMC0GA1UdHwQmMCQwIqAgoB6GHGh0dHA6Ly9lOC5jLmxlbmNy
|
||||
Lm9yZy83My5jcmwwggEMBgorBgEEAdZ5AgQCBIH9BIH6APgAdQBkEcRspBLsp4kc
|
||||
ogIuALyrTygH1B41J6vq/tUDyX3N8AAAAZswytzAAAAEAwBGMEQCIA0MquqeJRBQ
|
||||
tV0Yn1GAGl74ly8MTUaeAjq5x+n//5TKAiB4LOIalyRFRAPnp4ST5ULKdP5N/zf3
|
||||
9YMjRho7wVrR9wB/ABqLnWlKV5jImaDKiL30j8C0VmDMw2ANH3H0af/H0ayjAAAB
|
||||
mzDK3WIACAAABQAmYvgsBAMASDBGAiEApSyJp0N19h8H5Rnu71Xp7Hx0+A3VXlD5
|
||||
mb3p0xv0PtUCIQC+pjkgv8F15nfIr42+j2w2Io3/hSHC7fCsZMFZP/NfiDAKBggq
|
||||
hkjOPQQDAwNoADBlAjEAz0Lpa7RmJr5fBTxYNBp0xsw6zudsie+6mqqJjG8v6VKp
|
||||
1Eof9hRo+euLdIGkfYqkAjB4+qlKiZ2NY4wV8Bt85T/1m119QgGHJuWmpFkiMETw
|
||||
EQUkRySH1qoDqwg6LD4UOuE=
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIEVjCCAj6gAwIBAgIQY5WTY8JOcIJxWRi/w9ftVjANBgkqhkiG9w0BAQsFADBP
|
||||
MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy
|
||||
Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNDAzMTMwMDAwMDBa
|
||||
Fw0yNzAzMTIyMzU5NTlaMDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBF
|
||||
bmNyeXB0MQswCQYDVQQDEwJFODB2MBAGByqGSM49AgEGBSuBBAAiA2IABNFl8l7c
|
||||
S7QMApzSsvru6WyrOq44ofTUOTIzxULUzDMMNMchIJBwXOhiLxxxs0LXeb5GDcHb
|
||||
R6EToMffgSZjO9SNHfY9gjMy9vQr5/WWOrQTZxh7az6NSNnq3u2ubT6HTKOB+DCB
|
||||
9TAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMB
|
||||
MBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFI8NE6L2Ln7RUGwzGDhdWY4j
|
||||
cpHKMB8GA1UdIwQYMBaAFHm0WeZ7tuXkAXOACIjIGlj26ZtuMDIGCCsGAQUFBwEB
|
||||
BCYwJDAiBggrBgEFBQcwAoYWaHR0cDovL3gxLmkubGVuY3Iub3JnLzATBgNVHSAE
|
||||
DDAKMAgGBmeBDAECATAnBgNVHR8EIDAeMBygGqAYhhZodHRwOi8veDEuYy5sZW5j
|
||||
ci5vcmcvMA0GCSqGSIb3DQEBCwUAA4ICAQBnE0hGINKsCYWi0Xx1ygxD5qihEjZ0
|
||||
RI3tTZz1wuATH3ZwYPIp97kWEayanD1j0cDhIYzy4CkDo2jB8D5t0a6zZWzlr98d
|
||||
AQFNh8uKJkIHdLShy+nUyeZxc5bNeMp1Lu0gSzE4McqfmNMvIpeiwWSYO9w82Ob8
|
||||
otvXcO2JUYi3svHIWRm3+707DUbL51XMcY2iZdlCq4Wa9nbuk3WTU4gr6LY8MzVA
|
||||
aDQG2+4U3eJ6qUF10bBnR1uuVyDYs9RhrwucRVnfuDj29CMLTsplM5f5wSV5hUpm
|
||||
Uwp/vV7M4w4aGunt74koX71n4EdagCsL/Yk5+mAQU0+tue0JOfAV/R6t1k+Xk9s2
|
||||
HMQFeoxppfzAVC04FdG9M+AC2JWxmFSt6BCuh3CEey3fE52Qrj9YM75rtvIjsm/1
|
||||
Hl+u//Wqxnu1ZQ4jpa+VpuZiGOlWrqSP9eogdOhCGisnyewWJwRQOqK16wiGyZeR
|
||||
xs/Bekw65vwSIaVkBruPiTfMOo0Zh4gVa8/qJgMbJbyrwwG97z/PRgmLKCDl8z3d
|
||||
tA0Z7qq7fta0Gl24uyuB05dqI5J1LvAzKuWdIjT1tP8qCoxSE/xpix8hX2dt3h+/
|
||||
jujUgFPFZ0EVZ0xSyBNRF3MboGZnYXFUxpNjTWPKpagDHJQmqrAcDmWJnMsFY3jS
|
||||
u1igv3OefnWjSQ==
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN EC PRIVATE KEY-----
|
||||
MHcCAQEEIEUtUhuJNYtkeV71bGha45PIQhSYgNHtXWEs6Nty2QIMoAoGCCqGSM49
|
||||
AwEHoUQDQgAEyetvquQNLip3jUa5J/9q+xhQsuAni6FD0D5ohBo1qjRgs8DWnR4h
|
||||
Ys+LzOkI+JuS78WLRYVXAqevCdxuWGXBNw==
|
||||
-----END EC PRIVATE KEY-----
|
||||
@@ -1,53 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDlTCCAxugAwIBAgISBXqsA+V5LsdvKafDbLpl7zFRMAoGCCqGSM49BAMDMDIx
|
||||
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
|
||||
ODAeFw0yNTEyMTgwODMzMDBaFw0yNjAzMTgwODMyNTlaMB8xHTAbBgNVBAMTFGxp
|
||||
bmtzLm1ydGVkZHliZWFyLmZyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEnHtU
|
||||
VN+K3pQ3PYlriUGRC6i5IFcasUeq6NE42VWJBbdcaHBVlSBuYwGti4c4/1latfxn
|
||||
XY21XaSUnMsk6pb9u6OCAiIwggIeMA4GA1UdDwEB/wQEAwIHgDAdBgNVHSUEFjAU
|
||||
BggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQU8K21
|
||||
fluE+3YLlS//C9pJknvzRNMwHwYDVR0jBBgwFoAUjw0TovYuftFQbDMYOF1ZjiNy
|
||||
kcowMgYIKwYBBQUHAQEEJjAkMCIGCCsGAQUFBzAChhZodHRwOi8vZTguaS5sZW5j
|
||||
ci5vcmcvMB8GA1UdEQQYMBaCFGxpbmtzLm1ydGVkZHliZWFyLmZyMBMGA1UdIAQM
|
||||
MAowCAYGZ4EMAQIBMC0GA1UdHwQmMCQwIqAgoB6GHGh0dHA6Ly9lOC5jLmxlbmNy
|
||||
Lm9yZy84Mi5jcmwwggEEBgorBgEEAdZ5AgQCBIH1BIHyAPAAdgBkEcRspBLsp4kc
|
||||
ogIuALyrTygH1B41J6vq/tUDyX3N8AAAAZswzNuqAAAEAwBHMEUCIHDtj08Loupj
|
||||
JDnH0R3wwHaDeJFEaRKighAbCLXdfH21AiEAyf9CNHFm9GcGwbD2KsLgpTiGCbxx
|
||||
wSzlndCUeYjJlzAAdgDLOPcViXyEoURfW8Hd+8lu8ppZzUcKaQWFsMsUwxRY5wAA
|
||||
AZswzNvDAAAEAwBHMEUCIQCm/WC5xAbF3o/8jikh15IDV84FZGSxSzQWU/HEqgkK
|
||||
lQIgdfpT5ILZJSdnjUd5UFcXouE7+07+63cMzUtehgda3DcwCgYIKoZIzj0EAwMD
|
||||
aAAwZQIxAN6r+dF7vO/7myCFoB4849oswjPjl/cSi2+7B3M3HolxZLBQ7or+NYhC
|
||||
ZM6g00wGgAIwG5uZJ2FX3jarYQMwBwdymaGCXCu6ukANWUXdUMQik9LB7i0T2eDC
|
||||
JDCzCpv5l980
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIEVjCCAj6gAwIBAgIQY5WTY8JOcIJxWRi/w9ftVjANBgkqhkiG9w0BAQsFADBP
|
||||
MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy
|
||||
Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNDAzMTMwMDAwMDBa
|
||||
Fw0yNzAzMTIyMzU5NTlaMDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBF
|
||||
bmNyeXB0MQswCQYDVQQDEwJFODB2MBAGByqGSM49AgEGBSuBBAAiA2IABNFl8l7c
|
||||
S7QMApzSsvru6WyrOq44ofTUOTIzxULUzDMMNMchIJBwXOhiLxxxs0LXeb5GDcHb
|
||||
R6EToMffgSZjO9SNHfY9gjMy9vQr5/WWOrQTZxh7az6NSNnq3u2ubT6HTKOB+DCB
|
||||
9TAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMB
|
||||
MBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFI8NE6L2Ln7RUGwzGDhdWY4j
|
||||
cpHKMB8GA1UdIwQYMBaAFHm0WeZ7tuXkAXOACIjIGlj26ZtuMDIGCCsGAQUFBwEB
|
||||
BCYwJDAiBggrBgEFBQcwAoYWaHR0cDovL3gxLmkubGVuY3Iub3JnLzATBgNVHSAE
|
||||
DDAKMAgGBmeBDAECATAnBgNVHR8EIDAeMBygGqAYhhZodHRwOi8veDEuYy5sZW5j
|
||||
ci5vcmcvMA0GCSqGSIb3DQEBCwUAA4ICAQBnE0hGINKsCYWi0Xx1ygxD5qihEjZ0
|
||||
RI3tTZz1wuATH3ZwYPIp97kWEayanD1j0cDhIYzy4CkDo2jB8D5t0a6zZWzlr98d
|
||||
AQFNh8uKJkIHdLShy+nUyeZxc5bNeMp1Lu0gSzE4McqfmNMvIpeiwWSYO9w82Ob8
|
||||
otvXcO2JUYi3svHIWRm3+707DUbL51XMcY2iZdlCq4Wa9nbuk3WTU4gr6LY8MzVA
|
||||
aDQG2+4U3eJ6qUF10bBnR1uuVyDYs9RhrwucRVnfuDj29CMLTsplM5f5wSV5hUpm
|
||||
Uwp/vV7M4w4aGunt74koX71n4EdagCsL/Yk5+mAQU0+tue0JOfAV/R6t1k+Xk9s2
|
||||
HMQFeoxppfzAVC04FdG9M+AC2JWxmFSt6BCuh3CEey3fE52Qrj9YM75rtvIjsm/1
|
||||
Hl+u//Wqxnu1ZQ4jpa+VpuZiGOlWrqSP9eogdOhCGisnyewWJwRQOqK16wiGyZeR
|
||||
xs/Bekw65vwSIaVkBruPiTfMOo0Zh4gVa8/qJgMbJbyrwwG97z/PRgmLKCDl8z3d
|
||||
tA0Z7qq7fta0Gl24uyuB05dqI5J1LvAzKuWdIjT1tP8qCoxSE/xpix8hX2dt3h+/
|
||||
jujUgFPFZ0EVZ0xSyBNRF3MboGZnYXFUxpNjTWPKpagDHJQmqrAcDmWJnMsFY3jS
|
||||
u1igv3OefnWjSQ==
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN EC PRIVATE KEY-----
|
||||
MHcCAQEEIOigTECO5sqpAqSQU9Uk/OHqi6nSPcyQm/f2VAfd3lW4oAoGCCqGSM49
|
||||
AwEHoUQDQgAEnHtUVN+K3pQ3PYlriUGRC6i5IFcasUeq6NE42VWJBbdcaHBVlSBu
|
||||
YwGti4c4/1latfxnXY21XaSUnMsk6pb9uw==
|
||||
-----END EC PRIVATE KEY-----
|
||||
@@ -1,53 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDnDCCAyOgAwIBAgISBZDuBGg2iwqW52uQK7NVaH9RMAoGCCqGSM49BAMDMDIx
|
||||
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
|
||||
ODAeFw0yNTEyMTgwODAwMjZaFw0yNjAzMTgwODAwMjVaMB8xHTAbBgNVBAMTFG1h
|
||||
aWwuZ3lvemFtYW5jYXZlLmZyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEipnX
|
||||
219JWWn7xs31vJiqd5wYtMpEFapf8VIlaJf5s62uxpXas5+jj0wAZIqOffnVaWj9
|
||||
ib9SGXpLnBHdWQ7fuKOCAiowggImMA4GA1UdDwEB/wQEAwIHgDAdBgNVHSUEFjAU
|
||||
BggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUr+uq
|
||||
8L9kTGKzB2gQRc1hssPKQt8wHwYDVR0jBBgwFoAUjw0TovYuftFQbDMYOF1ZjiNy
|
||||
kcowMgYIKwYBBQUHAQEEJjAkMCIGCCsGAQUFBzAChhZodHRwOi8vZTguaS5sZW5j
|
||||
ci5vcmcvMB8GA1UdEQQYMBaCFG1haWwuZ3lvemFtYW5jYXZlLmZyMBMGA1UdIAQM
|
||||
MAowCAYGZ4EMAQIBMC0GA1UdHwQmMCQwIqAgoB6GHGh0dHA6Ly9lOC5jLmxlbmNy
|
||||
Lm9yZy84Mi5jcmwwggEMBgorBgEEAdZ5AgQCBIH9BIH6APgAdgCWl2S/VViXrfdD
|
||||
h2g3CEJ36fA61fak8zZuRqQ/D8qpxgAAAZswrwyeAAAEAwBHMEUCIQCJm8eUpnno
|
||||
MZh02vKnC/FUUprLVeiU2mnw7Djt06jxsQIgET+1lPkeGENnoPjwGQT8o4pZ7p3g
|
||||
UG3fhyCPUvanOL8AfgClyXiSXVdGF4KHDdiJZgtcVWSLfQBA8uwHaFHRiGkZ9wAA
|
||||
AZswrw+mAAgAAAUALAQufgQDAEcwRQIgBS4iUbQzeLr26DFZPXA8vtVvSyFCiE5M
|
||||
+zdwVwyFz+sCIQCf0azsNViCP5LpMANNfMQRmrawLqiyB0kFkhTo/jMYmjAKBggq
|
||||
hkjOPQQDAwNnADBkAjAlQHEhwD2tMGUjZIzx+W1DQbDB4ZL76z/w9N803A4llM3B
|
||||
cWtbS9DUQ8muAWWsb6YCMBdfm0LMgZqR5jnVed5VhStJLtUbhuFlAEa53PR6Kvrt
|
||||
IUfYeaewwC122fdpArS3cQ==
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIEVjCCAj6gAwIBAgIQY5WTY8JOcIJxWRi/w9ftVjANBgkqhkiG9w0BAQsFADBP
|
||||
MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy
|
||||
Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNDAzMTMwMDAwMDBa
|
||||
Fw0yNzAzMTIyMzU5NTlaMDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBF
|
||||
bmNyeXB0MQswCQYDVQQDEwJFODB2MBAGByqGSM49AgEGBSuBBAAiA2IABNFl8l7c
|
||||
S7QMApzSsvru6WyrOq44ofTUOTIzxULUzDMMNMchIJBwXOhiLxxxs0LXeb5GDcHb
|
||||
R6EToMffgSZjO9SNHfY9gjMy9vQr5/WWOrQTZxh7az6NSNnq3u2ubT6HTKOB+DCB
|
||||
9TAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMB
|
||||
MBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFI8NE6L2Ln7RUGwzGDhdWY4j
|
||||
cpHKMB8GA1UdIwQYMBaAFHm0WeZ7tuXkAXOACIjIGlj26ZtuMDIGCCsGAQUFBwEB
|
||||
BCYwJDAiBggrBgEFBQcwAoYWaHR0cDovL3gxLmkubGVuY3Iub3JnLzATBgNVHSAE
|
||||
DDAKMAgGBmeBDAECATAnBgNVHR8EIDAeMBygGqAYhhZodHRwOi8veDEuYy5sZW5j
|
||||
ci5vcmcvMA0GCSqGSIb3DQEBCwUAA4ICAQBnE0hGINKsCYWi0Xx1ygxD5qihEjZ0
|
||||
RI3tTZz1wuATH3ZwYPIp97kWEayanD1j0cDhIYzy4CkDo2jB8D5t0a6zZWzlr98d
|
||||
AQFNh8uKJkIHdLShy+nUyeZxc5bNeMp1Lu0gSzE4McqfmNMvIpeiwWSYO9w82Ob8
|
||||
otvXcO2JUYi3svHIWRm3+707DUbL51XMcY2iZdlCq4Wa9nbuk3WTU4gr6LY8MzVA
|
||||
aDQG2+4U3eJ6qUF10bBnR1uuVyDYs9RhrwucRVnfuDj29CMLTsplM5f5wSV5hUpm
|
||||
Uwp/vV7M4w4aGunt74koX71n4EdagCsL/Yk5+mAQU0+tue0JOfAV/R6t1k+Xk9s2
|
||||
HMQFeoxppfzAVC04FdG9M+AC2JWxmFSt6BCuh3CEey3fE52Qrj9YM75rtvIjsm/1
|
||||
Hl+u//Wqxnu1ZQ4jpa+VpuZiGOlWrqSP9eogdOhCGisnyewWJwRQOqK16wiGyZeR
|
||||
xs/Bekw65vwSIaVkBruPiTfMOo0Zh4gVa8/qJgMbJbyrwwG97z/PRgmLKCDl8z3d
|
||||
tA0Z7qq7fta0Gl24uyuB05dqI5J1LvAzKuWdIjT1tP8qCoxSE/xpix8hX2dt3h+/
|
||||
jujUgFPFZ0EVZ0xSyBNRF3MboGZnYXFUxpNjTWPKpagDHJQmqrAcDmWJnMsFY3jS
|
||||
u1igv3OefnWjSQ==
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN EC PRIVATE KEY-----
|
||||
MHcCAQEEIOQBYJeXUJ3rvIYx0VqyELxGMdCVGP7iIjaNbgFwHc0GoAoGCCqGSM49
|
||||
AwEHoUQDQgAEipnX219JWWn7xs31vJiqd5wYtMpEFapf8VIlaJf5s62uxpXas5+j
|
||||
j0wAZIqOffnVaWj9ib9SGXpLnBHdWQ7fuA==
|
||||
-----END EC PRIVATE KEY-----
|
||||
@@ -1,86 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFEjCCA/qgAwIBAgISBm1LSIccMU8FlOV3W9x8P9JHMA0GCSqGSIb3DQEBCwUA
|
||||
MDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQwwCgYDVQQD
|
||||
EwNSMTMwHhcNMjUxMjE4MDgwMDMxWhcNMjYwMzE4MDgwMDMwWjAhMR8wHQYDVQQD
|
||||
ExZtYXNobnUuZ3lvemFtYW5jYXZlLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
|
||||
MIIBCgKCAQEApw1Iur3HOU5pU65JI40FzMrDrcI3qVHCVLJzKF880Elubau66UsC
|
||||
fLl4H5CNdATihGVWmtAvhrp/nq/FM01iWNcIWqDSLG2s7PpdhPLTm5HiM5QfOToS
|
||||
OIMWJ5mz++MiALZiTNGuMIC+3Op8ofbmZL1xpuN+dfXSVWRA18pa+bWU30BVQvbY
|
||||
ZHg2V3N97mDUqB3hrYvXkPeeZq5vmZIYlMsgaKIjJ52mU4PLWHil4V7cJ4fejeen
|
||||
O3HBj54n+kdjRsrmBCz5Zd5f7j2uj+5n9DWJeURIK/mj5hGvLUfOuqhVnnbIxx2f
|
||||
/AHVB1OHvsPaoAlL+fGwmc+ZOtaMh6TgKwIDAQABo4ICMDCCAiwwDgYDVR0PAQH/
|
||||
BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8E
|
||||
AjAAMB0GA1UdDgQWBBT2dVNUZPbFx/YVM5xjCBQfEy7VmTAfBgNVHSMEGDAWgBTn
|
||||
q58PLDOgU9NeT3jIsoQOO9aSMzAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAKG
|
||||
F2h0dHA6Ly9yMTMuaS5sZW5jci5vcmcvMCEGA1UdEQQaMBiCFm1hc2hudS5neW96
|
||||
YW1hbmNhdmUuZnIwEwYDVR0gBAwwCjAIBgZngQwBAgEwLgYDVR0fBCcwJTAjoCGg
|
||||
H4YdaHR0cDovL3IxMy5jLmxlbmNyLm9yZy83Mi5jcmwwggEOBgorBgEEAdZ5AgQC
|
||||
BIH/BIH8APoAdwCWl2S/VViXrfdDh2g3CEJ36fA61fak8zZuRqQ/D8qpxgAAAZsw
|
||||
rx/KAAAEAwBIMEYCIQDnKUYXIv624M+3hsIQYLGm8Fj8VRHLP7SON81TNYp35wIh
|
||||
ALwvSqxwFQMKCu0l7AqDmY+ZEYDdIbNJDXYfN1DCd49xAH8Apcl4kl1XRheChw3Y
|
||||
iWYLXFVki30AQPLsB2hR0YhpGfcAAAGbMK8jLgAIAAAFACwELtkEAwBIMEYCIQCz
|
||||
b225POXHHxLgCqk99RRf+vZ0l1q2feIZQcDoPmYUqQIhALmx/NjHERdt3FcacztE
|
||||
XXP8l+xJr46lTdEXOfwb/dvvMA0GCSqGSIb3DQEBCwUAA4IBAQAokKKi66QuWf9V
|
||||
AMsWGGr6FHGmp1Z5bIx0ybByoLED+Y3FtIFDCJcxJHcJZIGGA4X4EAsxUgLpOTH4
|
||||
LQvqPpL2KQqLGPkJ1CRZyRQ4z/R2IPJHdAodRg4QfsNW0LAnV/QPKQMPcqqIuZY1
|
||||
SkwzwA3uC5VxhXfvkFJo3QE00vZZxOQWT8GAh3I4bAtkkO3+hJ6ms079YvFrAPe3
|
||||
8RJ0vFgfZhJol1peo6qOg0EPyeFc+L0cxnAPs1JB4idY66NYpFaxONMZBXwjOjDz
|
||||
oTdEX6DDy7lDCJazUwEja8Nsnyrubhe8XWPYYUrR7oNrXEBCh82RnlCFbOQWT5Xq
|
||||
ydEUVWRA
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFBTCCAu2gAwIBAgIQWgDyEtjUtIDzkkFX6imDBTANBgkqhkiG9w0BAQsFADBP
|
||||
MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy
|
||||
Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNDAzMTMwMDAwMDBa
|
||||
Fw0yNzAzMTIyMzU5NTlaMDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBF
|
||||
bmNyeXB0MQwwCgYDVQQDEwNSMTMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
|
||||
AoIBAQClZ3CN0FaBZBUXYc25BtStGZCMJlA3mBZjklTb2cyEBZPs0+wIG6BgUUNI
|
||||
fSvHSJaetC3ancgnO1ehn6vw1g7UDjDKb5ux0daknTI+WE41b0VYaHEX/D7YXYKg
|
||||
L7JRbLAaXbhZzjVlyIuhrxA3/+OcXcJJFzT/jCuLjfC8cSyTDB0FxLrHzarJXnzR
|
||||
yQH3nAP2/Apd9Np75tt2QnDr9E0i2gB3b9bJXxf92nUupVcM9upctuBzpWjPoXTi
|
||||
dYJ+EJ/B9aLrAek4sQpEzNPCifVJNYIKNLMc6YjCR06CDgo28EdPivEpBHXazeGa
|
||||
XP9enZiVuppD0EqiFwUBBDDTMrOPAgMBAAGjgfgwgfUwDgYDVR0PAQH/BAQDAgGG
|
||||
MB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATASBgNVHRMBAf8ECDAGAQH/
|
||||
AgEAMB0GA1UdDgQWBBTnq58PLDOgU9NeT3jIsoQOO9aSMzAfBgNVHSMEGDAWgBR5
|
||||
tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAKG
|
||||
Fmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0gBAwwCjAIBgZngQwBAgEwJwYD
|
||||
VR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVuY3Iub3JnLzANBgkqhkiG9w0B
|
||||
AQsFAAOCAgEAUTdYUqEimzW7TbrOypLqCfL7VOwYf/Q79OH5cHLCZeggfQhDconl
|
||||
k7Kgh8b0vi+/XuWu7CN8n/UPeg1vo3G+taXirrytthQinAHGwc/UdbOygJa9zuBc
|
||||
VyqoH3CXTXDInT+8a+c3aEVMJ2St+pSn4ed+WkDp8ijsijvEyFwE47hulW0Ltzjg
|
||||
9fOV5Pmrg/zxWbRuL+k0DBDHEJennCsAen7c35Pmx7jpmJ/HtgRhcnz0yjSBvyIw
|
||||
6L1QIupkCv2SBODT/xDD3gfQQyKv6roV4G2EhfEyAsWpmojxjCUCGiyg97FvDtm/
|
||||
NK2LSc9lybKxB73I2+P2G3CaWpvvpAiHCVu30jW8GCxKdfhsXtnIy2imskQqVZ2m
|
||||
0Pmxobb28Tucr7xBK7CtwvPrb79os7u2XP3O5f9b/H66GNyRrglRXlrYjI1oGYL/
|
||||
f4I1n/Sgusda6WvA6C190kxjU15Y12mHU4+BxyR9cx2hhGS9fAjMZKJss28qxvz6
|
||||
Axu4CaDmRNZpK/pQrXF17yXCXkmEWgvSOEZy6Z9pcbLIVEGckV/iVeq0AOo2pkg9
|
||||
p4QRIy0tK2diRENLSF2KysFwbY6B26BFeFs3v1sYVRhFW9nLkOrQVporCS0KyZmf
|
||||
wVD89qSTlnctLcZnIavjKsKUu1nA1iU0yYMdYepKR7lWbnwhdx3ewok=
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
MIIEogIBAAKCAQEApw1Iur3HOU5pU65JI40FzMrDrcI3qVHCVLJzKF880Elubau6
|
||||
6UsCfLl4H5CNdATihGVWmtAvhrp/nq/FM01iWNcIWqDSLG2s7PpdhPLTm5HiM5Qf
|
||||
OToSOIMWJ5mz++MiALZiTNGuMIC+3Op8ofbmZL1xpuN+dfXSVWRA18pa+bWU30BV
|
||||
QvbYZHg2V3N97mDUqB3hrYvXkPeeZq5vmZIYlMsgaKIjJ52mU4PLWHil4V7cJ4fe
|
||||
jeenO3HBj54n+kdjRsrmBCz5Zd5f7j2uj+5n9DWJeURIK/mj5hGvLUfOuqhVnnbI
|
||||
xx2f/AHVB1OHvsPaoAlL+fGwmc+ZOtaMh6TgKwIDAQABAoIBABP+K4Op/eN2ZnWs
|
||||
6LT4Bkctx0CO+4FotxTS7KRazZjyCOTYRjzwjMInomBIuR03DnMg+734h4+c13RC
|
||||
/ht3Oft+9NF/6NeHYshT6IhmVXwLeCKLKjd7oz2fNrITm65cTy/9pAMkny/P4Mfo
|
||||
ynTJ62YIJEeAd5yfiIZOwtHwtnWnG7XELX56Mav+xh2KVPZPr3ZxEhX7XPmc4XMT
|
||||
IBJXQUxy4XGgKVayELtI/2yU4dzFgyfkckPw1V53O4IzfIRGp4pl+cFY6mefNMVU
|
||||
DZqJ3Mbqwou3J+/n2IuI8XB8SdQzH2P62fnNwuUmePr5V0I6fV89Rbw8qoUeB0sh
|
||||
KMwWuQUCgYEA2LJf/77jT9YQfpfD3E5N9bzOoRFikFfUh4QIpjQ/WL4jswapyswn
|
||||
z+LwFdvfpqGcu+7OO3SP6/d+95XO3cjAHNj31dTaUWyGCiJ4V2DkFok9KBhujUai
|
||||
Lh1vwCFBnOfcbZ7AWe9v9vXnXF7NK67SqaAQfwQ6xJo5UBx9Gwki2m8CgYEAxVnO
|
||||
jcvCtzTx33WlublhSskFkfGDNwkIWz+Emtq6w4DwgiP8dXFdJiXX+1jIgRR3qdx4
|
||||
GAeyyGSErxFLFJvb6acBrqq1BTRibIcOZ29KT9NlWF7vbYpmzUI+c9bIi+wgJKuk
|
||||
8LCNqwSGVlc2PahCBHDdG5G+/dN5fC0i25wxJAUCgYAu32aki0XgHw2yVGGpZca3
|
||||
QP/xFzGax2TRa13zlZmeOILAVtCjbUWvUgdcsxLNmGeuvxkdAzmecQqlw2Hb13C2
|
||||
zLfPKRuQQUk9J/ef7vVnaogwBBjltkGed/+UL51hs0Wa8Jvq2D//y3EgKeF3cXlf
|
||||
95+Z2fBcVn/PNFpbXr6LQQKBgGr2xxZhpzLndmVYfa+RQ6NmGyfEEAuHUMksPzIz
|
||||
dWC7hR/0Y0RAYm1nu42WzG3x6v3c6haULZmhqay9ocUUyPf2Ndo22hBtGR+bf/od
|
||||
/tgPSvG/2uOzTQ7ZZcIhWudD3xQhGDAAcXiM5kbr1BFNHiMMDTuBHlSzBzh/ulHv
|
||||
cU8FAoGAfS9knvPcFdFaD5X3uMjhbxrfynM5KJCaTKxLPUXm9pZPnah3wpIFpseA
|
||||
YSvuFyK7zpVxhI2853QphYJqB/u0pXjm1VupUVUpSYZNJC5IE6aSnCXeKodBgyjx
|
||||
YIzoaYCtBfCTZhRKtzvDQSmtjZk3Nf3lL7RKFg3YXTFcHeiDTw0=
|
||||
-----END RSA PRIVATE KEY-----
|
||||
@@ -1,85 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFCjCCA/KgAwIBAgISBttfSBIlARew5psc11NPxSHlMA0GCSqGSIb3DQEBCwUA
|
||||
MDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQwwCgYDVQQD
|
||||
EwNSMTEwHhcNMjUwNzMxMjEwMzE4WhcNMjUxMDI5MjEwMzE3WjAhMR8wHQYDVQQD
|
||||
ExZtYXRyaXguZ3lvemFtYW5jYXZlLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
|
||||
MIIBCgKCAQEAuE+xCGBSEJ9SMZCGTawqCKupoAOukBR3I/i3hjwy5fc/9jm70jzC
|
||||
KW5Y0WJzAesSI3SVoTEg19wzskn25G46Fr/fe1b2V9qfCuckHWIavCF8Y48qYKXo
|
||||
iMunTFyGtrr2waY1B6gU3eAqp1lLr0bmPtwQwL5iE/ZG4fhAKkxznPaoJJ/XGE2O
|
||||
YuYuWequlijC0474shT4e8CTmYjrrdj+AkHpMWnAe9FUzfPxGKsPA8qs0i5Cyq5H
|
||||
CNp7snc7KK32DBvLV20fgMTiuOfurCXYDY7LqOqw5KlWXPmSjw/kfzRsMonEouDU
|
||||
KlWylXOoe2lrXF2OTB2YIYNy3rNDHXAC5QIDAQABo4ICKDCCAiQwDgYDVR0PAQH/
|
||||
BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8E
|
||||
AjAAMB0GA1UdDgQWBBSYZYIH+oXatqWd3NxLTGPa8SCaazAfBgNVHSMEGDAWgBTF
|
||||
z0ak6vTDwHpslcQtsF6SLybjuTAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAKG
|
||||
F2h0dHA6Ly9yMTEuaS5sZW5jci5vcmcvMCEGA1UdEQQaMBiCFm1hdHJpeC5neW96
|
||||
YW1hbmNhdmUuZnIwEwYDVR0gBAwwCjAIBgZngQwBAgEwLwYDVR0fBCgwJjAkoCKg
|
||||
IIYeaHR0cDovL3IxMS5jLmxlbmNyLm9yZy8xMDIuY3JsMIIBBQYKKwYBBAHWeQIE
|
||||
AgSB9gSB8wDxAHcA3dzKNJXX4RYF55Uy+sef+D0cUN/bADoUEnYKLKy7yCoAAAGY
|
||||
YoF1swAABAMASDBGAiEA29Fnvoh91i6fWfrRarMui7AtBcH79hfM6ZspdjDpGrQC
|
||||
IQC4oJiwrk20SiLPzQYdzxV46nmpaL2nSTFzlrzZewunYAB2AA3h8jAr0w3BQGIS
|
||||
CepVLvxHdHyx1+kw7w5CHrR+Tqo0AAABmGKBfTgAAAQDAEcwRQIhALT3PTyPJIqP
|
||||
IgaIacp8HCNVv8x0VhwauNw5vTuqtYI2AiARtqNIxyt0ZEYl1SU2RsywIv6vDBXb
|
||||
govlnMmJCX0fDzANBgkqhkiG9w0BAQsFAAOCAQEAt5cl04pXlC7GfnqWmbIE4sNy
|
||||
aWzdMzgRfSBUwXSupVN+FPNBKFU18VFEQNOQ+oqi0wT5xW9tyKUi9e/OZE2P07mt
|
||||
dFNrI6b7XFjoRm5V9r3jMULG/jaWDl7izgfHq40qzmoM8kScA5kFTk86foamITl/
|
||||
BLTH0O2F6EQ03wwWq5uFBTMdEz8KDV7RXi4sVZ8QOld/TQaY9hrpRqte242gLTB/
|
||||
F793P04mPqcFTzOHpCc8OK1jA6jjFOceG9J6MZAOSLsta3yz6XlaF8M2SjP7y061
|
||||
UANRgaz9hs/ryEu8S9bEQUjnNdUm5V+B7xm06RS4ED3pYTaFx7TycMuv4g20EQ==
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFBjCCAu6gAwIBAgIRAIp9PhPWLzDvI4a9KQdrNPgwDQYJKoZIhvcNAQELBQAw
|
||||
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
|
||||
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw
|
||||
WhcNMjcwMzEyMjM1OTU5WjAzMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
|
||||
RW5jcnlwdDEMMAoGA1UEAxMDUjExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
||||
CgKCAQEAuoe8XBsAOcvKCs3UZxD5ATylTqVhyybKUvsVAbe5KPUoHu0nsyQYOWcJ
|
||||
DAjs4DqwO3cOvfPlOVRBDE6uQdaZdN5R2+97/1i9qLcT9t4x1fJyyXJqC4N0lZxG
|
||||
AGQUmfOx2SLZzaiSqhwmej/+71gFewiVgdtxD4774zEJuwm+UE1fj5F2PVqdnoPy
|
||||
6cRms+EGZkNIGIBloDcYmpuEMpexsr3E+BUAnSeI++JjF5ZsmydnS8TbKF5pwnnw
|
||||
SVzgJFDhxLyhBax7QG0AtMJBP6dYuC/FXJuluwme8f7rsIU5/agK70XEeOtlKsLP
|
||||
Xzze41xNG/cLJyuqC0J3U095ah2H2QIDAQABo4H4MIH1MA4GA1UdDwEB/wQEAwIB
|
||||
hjAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwEgYDVR0TAQH/BAgwBgEB
|
||||
/wIBADAdBgNVHQ4EFgQUxc9GpOr0w8B6bJXELbBeki8m47kwHwYDVR0jBBgwFoAU
|
||||
ebRZ5nu25eQBc4AIiMgaWPbpm24wMgYIKwYBBQUHAQEEJjAkMCIGCCsGAQUFBzAC
|
||||
hhZodHRwOi8veDEuaS5sZW5jci5vcmcvMBMGA1UdIAQMMAowCAYGZ4EMAQIBMCcG
|
||||
A1UdHwQgMB4wHKAaoBiGFmh0dHA6Ly94MS5jLmxlbmNyLm9yZy8wDQYJKoZIhvcN
|
||||
AQELBQADggIBAE7iiV0KAxyQOND1H/lxXPjDj7I3iHpvsCUf7b632IYGjukJhM1y
|
||||
v4Hz/MrPU0jtvfZpQtSlET41yBOykh0FX+ou1Nj4ScOt9ZmWnO8m2OG0JAtIIE38
|
||||
01S0qcYhyOE2G/93ZCkXufBL713qzXnQv5C/viOykNpKqUgxdKlEC+Hi9i2DcaR1
|
||||
e9KUwQUZRhy5j/PEdEglKg3l9dtD4tuTm7kZtB8v32oOjzHTYw+7KdzdZiw/sBtn
|
||||
UfhBPORNuay4pJxmY/WrhSMdzFO2q3Gu3MUBcdo27goYKjL9CTF8j/Zz55yctUoV
|
||||
aneCWs/ajUX+HypkBTA+c8LGDLnWO2NKq0YD/pnARkAnYGPfUDoHR9gVSp/qRx+Z
|
||||
WghiDLZsMwhN1zjtSC0uBWiugF3vTNzYIEFfaPG7Ws3jDrAMMYebQ95JQ+HIBD/R
|
||||
PBuHRTBpqKlyDnkSHDHYPiNX3adPoPAcgdF3H2/W0rmoswMWgTlLn1Wu0mrks7/q
|
||||
pdWfS6PJ1jty80r2VKsM/Dj3YIDfbjXKdaFU5C+8bhfJGqU3taKauuz0wHVGT3eo
|
||||
6FlWkWYtbt4pgdamlwVeZEW+LM7qZEJEsMNPrfC03APKmZsJgpWCDWOKZvkZcvjV
|
||||
uYkQ4omYCTX5ohy+knMjdOmdH9c7SpqEWBDC86fiNex+O0XOMEZSa8DA
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
MIIEowIBAAKCAQEAuE+xCGBSEJ9SMZCGTawqCKupoAOukBR3I/i3hjwy5fc/9jm7
|
||||
0jzCKW5Y0WJzAesSI3SVoTEg19wzskn25G46Fr/fe1b2V9qfCuckHWIavCF8Y48q
|
||||
YKXoiMunTFyGtrr2waY1B6gU3eAqp1lLr0bmPtwQwL5iE/ZG4fhAKkxznPaoJJ/X
|
||||
GE2OYuYuWequlijC0474shT4e8CTmYjrrdj+AkHpMWnAe9FUzfPxGKsPA8qs0i5C
|
||||
yq5HCNp7snc7KK32DBvLV20fgMTiuOfurCXYDY7LqOqw5KlWXPmSjw/kfzRsMonE
|
||||
ouDUKlWylXOoe2lrXF2OTB2YIYNy3rNDHXAC5QIDAQABAoIBAAQNIZW1TLOxIm5u
|
||||
YC4rZPlWHdWjikeZx4+kTmADPG9gURXbHLhV93YCxxPp9dManp/l/P1maTPArM5t
|
||||
s64l1R2KzKfQ2GJDrv/5AJerwFPKNnCxMcWFLnh5TFCQbrHSdMBhCqSqZDQ6hfCy
|
||||
Dm8uuaEAMQpHjqJxMdgsOIU/Gah4z7OCSuzeJ731DOBnG0Qk38hE5MrdJLbywUOQ
|
||||
c/NfENf16t6DfTkzvJu8CEEg6SLEazFOUssDQVoDgyOqmJRf1d0VXulfVvm50N8o
|
||||
Fwgc79dfsdNMHI9IbcTfJD9xPzpwfhwcYAnKgdMXDzjU7a8ibYGdiUaQPlBmLdUh
|
||||
jyEAo0ECgYEA8Rj5uAw9aJxgDrdUFqNfDWFtnj6KHA0eBQFYQmmZHW4OWcke3Xcj
|
||||
V5GBw6Oy/nJWFIpQa4v1NMvufW6JsLVokhglEEkDAXABpSNSVZ92MZdBhZGh4DUx
|
||||
T2aWalhgr53A8+6h8/VyozCmY34D5K6u4izemZ68NXu4tcIvE1rE0sECgYEAw7Qn
|
||||
jyB8Q7empbm/Mmekjcg8KKfaleaM1rSsikUJk0nGR/QfQJ6gv3pn/yuiY2KKCu0G
|
||||
/V3CoSYeg/7vQ+wn0lfQGPEQw+kU4YSH8WN8OGC4sxc7wtoITPZZkzcxGZY7S7sE
|
||||
rObODdw//4qQ3EktQhXDzVvn6m2ee7rpIgV5zSUCgYEAm43tsJ3VESWzpEsMaf7G
|
||||
WS+/NhZLrYWZFMmlVFQlgiN8BtoInAM+PkWXX87CsgC7IU2MTZdjgckB+tPS6rxg
|
||||
18HUSAmTct39cbq0aKIV9DEPCUrJEou/YOdjrQGQgD5cPAZ/X5PBfyDoedDYWjeK
|
||||
hktE5ADSlf9ZUYwUK3yo+QECgYAee5Et2gGBCroKVkRRtZMMAoRcUMjbUG3fg4Tc
|
||||
hKRZLMSVsJCtoAepy4cnV8STdmXKDeFo1ZHbR/S42pyqF76cJNFlESdrXILEHcCO
|
||||
+NAAeBBM1PGaCBwC4NxS8eXT9nKF+TthMxIlVokhZJPru/owsPMuqYIWIbztyM9H
|
||||
XVL7gQKBgG9ff1FvX+vRLGN1ro3kHqD9BRmo0Tnt/tjz8l9cKJn/ELrabp1cblqI
|
||||
yrMy2hQAIepvZbrurw4e9ZXKBqUUT+pL0Kf2/+alwn9elqZbDYSttw01xWwoKpRW
|
||||
w+tYPoiydYbTinN6hXv5r99H3s1yk6bmkUyL+Y4UptBpRFf9nwd4
|
||||
-----END RSA PRIVATE KEY-----
|
||||
@@ -1,86 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFETCCA/mgAwIBAgISBeV2VmIadbH7M1xjYxFehqgpMA0GCSqGSIb3DQEBCwUA
|
||||
MDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQwwCgYDVQQD
|
||||
EwNSMTMwHhcNMjUxMjE4MDgwMDM3WhcNMjYwMzE4MDgwMDM2WjAlMSMwIQYDVQQD
|
||||
ExptYXR0ZXJtb3N0Lmd5b3phbWFuY2F2ZS5mcjCCASIwDQYJKoZIhvcNAQEBBQAD
|
||||
ggEPADCCAQoCggEBALsinN0ZSLZINdRF4onC5c3JzBd0f+4wL/J1G3UnxMI385qO
|
||||
ltibSOS2R9zzoz4zvTnZCNKHDWjU6w1syUDWvAjkJYgGx9/1AMEXeFH4lu07Xgpk
|
||||
Z0Opsj6v5uwVa0gWd3ZNW7v4PfyzV5H6K4p5pB3K4HVJyNX/CwHzSIKsmV/AtBSu
|
||||
knk4CgR2EdzVUufX8w6jaSlJWALsU3A71IKyvkpfxhI7+DSRLljC9h7RvC/BCdZR
|
||||
IqTK+6gQ9eBTn+J3Jyod/l+ogCVqaaw3gBUqaFUlQRq+EX4tKtKcCUmTTqaGh62o
|
||||
cbwHqJsnJLbHVQ3shSj/DDja+nw9VTFRKyUuIe8CAwEAAaOCAiswggInMA4GA1Ud
|
||||
DwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0T
|
||||
AQH/BAIwADAdBgNVHQ4EFgQUBU6fkb0yHSv6+kgIMxrMQaNvCmowHwYDVR0jBBgw
|
||||
FoAU56ufDywzoFPTXk94yLKEDjvWkjMwMwYIKwYBBQUHAQEEJzAlMCMGCCsGAQUF
|
||||
BzAChhdodHRwOi8vcjEzLmkubGVuY3Iub3JnLzAlBgNVHREEHjAcghptYXR0ZXJt
|
||||
b3N0Lmd5b3phbWFuY2F2ZS5mcjATBgNVHSAEDDAKMAgGBmeBDAECATAuBgNVHR8E
|
||||
JzAlMCOgIaAfhh1odHRwOi8vcjEzLmMubGVuY3Iub3JnLzQyLmNybDCCAQUGCisG
|
||||
AQQB1nkCBAIEgfYEgfMA8QB2AMs49xWJfIShRF9bwd37yW7ymlnNRwppBYWwyxTD
|
||||
FFjnAAABmzCvNUcAAAQDAEcwRQIgGD5PSJfTld3h/t+L7wMhjrE8levLLzEEeHy8
|
||||
8IyoTpsCIQC/fFdsAhJEfqFumLTfGlvrICXRoIIlkRdFQzBZYPPRbgB3AJaXZL9V
|
||||
WJet90OHaDcIQnfp8DrV9qTzNm5GpD8PyqnGAAABmzCvNYkAAAQDAEgwRgIhALf2
|
||||
GrLdKeb7kU0RYuA4mBFlHFyGXNsAuQbJLkH74e4UAiEAloOCGFdFEn9Fp+uYRw+6
|
||||
APFH8LIH9hbYYkP0Ayo2W7IwDQYJKoZIhvcNAQELBQADggEBAAI5i39fx/wlYBTz
|
||||
M2Iahjil/3MNWDDRip3PS2w4ldNQ74QgsDDdZdKVG5yCxiQrhFoMCfml5S4fXWb4
|
||||
cyxNmTo6f4Ecf0oS7dDxTQt1ejWnRp4zdncvwvAWVuqjF1L1VgMhd7ZGXvTNHrG6
|
||||
zPce2XJrIAjzu50uGzxp+qBkJRa5r5GxLp9Mzd2c6rx4t9KGVysE6Pj/LXFARr0+
|
||||
dCr+HZlHfMF9UJlH5hRE3ALMQN4bVRJR1Gpprbh1cDZ1cA8wVd7IqnV2+8YVedI6
|
||||
hUdGu6ml1On8JzcFUr2IFJahDZ9bYmI7EYarwTz5KlQYGbljCcMfCOFITZyZJvQa
|
||||
AzSHouY=
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFBTCCAu2gAwIBAgIQWgDyEtjUtIDzkkFX6imDBTANBgkqhkiG9w0BAQsFADBP
|
||||
MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy
|
||||
Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNDAzMTMwMDAwMDBa
|
||||
Fw0yNzAzMTIyMzU5NTlaMDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBF
|
||||
bmNyeXB0MQwwCgYDVQQDEwNSMTMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
|
||||
AoIBAQClZ3CN0FaBZBUXYc25BtStGZCMJlA3mBZjklTb2cyEBZPs0+wIG6BgUUNI
|
||||
fSvHSJaetC3ancgnO1ehn6vw1g7UDjDKb5ux0daknTI+WE41b0VYaHEX/D7YXYKg
|
||||
L7JRbLAaXbhZzjVlyIuhrxA3/+OcXcJJFzT/jCuLjfC8cSyTDB0FxLrHzarJXnzR
|
||||
yQH3nAP2/Apd9Np75tt2QnDr9E0i2gB3b9bJXxf92nUupVcM9upctuBzpWjPoXTi
|
||||
dYJ+EJ/B9aLrAek4sQpEzNPCifVJNYIKNLMc6YjCR06CDgo28EdPivEpBHXazeGa
|
||||
XP9enZiVuppD0EqiFwUBBDDTMrOPAgMBAAGjgfgwgfUwDgYDVR0PAQH/BAQDAgGG
|
||||
MB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATASBgNVHRMBAf8ECDAGAQH/
|
||||
AgEAMB0GA1UdDgQWBBTnq58PLDOgU9NeT3jIsoQOO9aSMzAfBgNVHSMEGDAWgBR5
|
||||
tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAKG
|
||||
Fmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0gBAwwCjAIBgZngQwBAgEwJwYD
|
||||
VR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVuY3Iub3JnLzANBgkqhkiG9w0B
|
||||
AQsFAAOCAgEAUTdYUqEimzW7TbrOypLqCfL7VOwYf/Q79OH5cHLCZeggfQhDconl
|
||||
k7Kgh8b0vi+/XuWu7CN8n/UPeg1vo3G+taXirrytthQinAHGwc/UdbOygJa9zuBc
|
||||
VyqoH3CXTXDInT+8a+c3aEVMJ2St+pSn4ed+WkDp8ijsijvEyFwE47hulW0Ltzjg
|
||||
9fOV5Pmrg/zxWbRuL+k0DBDHEJennCsAen7c35Pmx7jpmJ/HtgRhcnz0yjSBvyIw
|
||||
6L1QIupkCv2SBODT/xDD3gfQQyKv6roV4G2EhfEyAsWpmojxjCUCGiyg97FvDtm/
|
||||
NK2LSc9lybKxB73I2+P2G3CaWpvvpAiHCVu30jW8GCxKdfhsXtnIy2imskQqVZ2m
|
||||
0Pmxobb28Tucr7xBK7CtwvPrb79os7u2XP3O5f9b/H66GNyRrglRXlrYjI1oGYL/
|
||||
f4I1n/Sgusda6WvA6C190kxjU15Y12mHU4+BxyR9cx2hhGS9fAjMZKJss28qxvz6
|
||||
Axu4CaDmRNZpK/pQrXF17yXCXkmEWgvSOEZy6Z9pcbLIVEGckV/iVeq0AOo2pkg9
|
||||
p4QRIy0tK2diRENLSF2KysFwbY6B26BFeFs3v1sYVRhFW9nLkOrQVporCS0KyZmf
|
||||
wVD89qSTlnctLcZnIavjKsKUu1nA1iU0yYMdYepKR7lWbnwhdx3ewok=
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
MIIEogIBAAKCAQEAuyKc3RlItkg11EXiicLlzcnMF3R/7jAv8nUbdSfEwjfzmo6W
|
||||
2JtI5LZH3POjPjO9OdkI0ocNaNTrDWzJQNa8COQliAbH3/UAwRd4UfiW7TteCmRn
|
||||
Q6myPq/m7BVrSBZ3dk1bu/g9/LNXkforinmkHcrgdUnI1f8LAfNIgqyZX8C0FK6S
|
||||
eTgKBHYR3NVS59fzDqNpKUlYAuxTcDvUgrK+Sl/GEjv4NJEuWML2HtG8L8EJ1lEi
|
||||
pMr7qBD14FOf4ncnKh3+X6iAJWpprDeAFSpoVSVBGr4Rfi0q0pwJSZNOpoaHrahx
|
||||
vAeomycktsdVDeyFKP8MONr6fD1VMVErJS4h7wIDAQABAoIBADgSXfgt3EiqCF8L
|
||||
dZ6bpGnt/lZE1RRUofk/N7P5743WYAq+kNpkZQoKyCufYRmBPUC5FFiomM8BhVCn
|
||||
eQIRlZQAcHJ6vacQbWJuGuJM30REFqB8hyiSD1OTN1kj7dpSyQbMlSEUd9ZhEmsu
|
||||
D5/VZOR8ZpcePaxJWE4ETITDHM3Al7XhlsMYjXUEINySCpEX7v4P3hIsYbSWq3xV
|
||||
TIWGv1R7rCAL+DKbI2NnJKOfIC+snRwfh4E0GYCwvgSq8FZ9e7hDGsXQeC3kwHVj
|
||||
8Aay6/3zT4eFBXOV8bn6GGYmxPpIUS/XH75B+aO810upAkdQWEILRvwfWXPoL4TV
|
||||
XC13y+ECgYEA4qHsU1nA53ecVWw0uw+/KZoQomjTDXpyEHleJ8dKJoLhpvrUGIpx
|
||||
Aes4zrvsMDCxPEtSZgYeyFdg/vZ7d4vBHMiyhdPfgPORSga1kF78VMml09QHeqgH
|
||||
JA8irJA8CPJsesvQftnGhGtjL1N8Pkg+663nlI79MN0bIkWpSYnjp78CgYEA02Jy
|
||||
MYD2TMgKy2JDIcG4Lzt2Nh+BkcP8HkrTE+6jkokZcd1Tjziciv0KL5bjxsFFUi5P
|
||||
N3eiFn50qiyyWe/8Irx7nBkSpAm46yjEoFLKHZkJ8pqYv69zYbHqg96mRcFHJqCh
|
||||
XrEO1ZsJmYZ8+xqx3jsZ2k5vrD8tAC6JAqtxkdECgYAzEoyAaByZzRG1CnKDqVPK
|
||||
G0ceYoMVaX+lCMTYMAgcz6fsimAbu68l4I1nwV/DqGV4kfzaswxi15YrPv6p/Rui
|
||||
0fOxRwL6O2mFhieKhm1U6jBtoT2iPZWGYcbNnp944LDjp2SwAYHEO7MZajX4jy1m
|
||||
zUT/7I1QYrOHsK0qvmFIXwKBgFJSjaxvz/wZD/MjQoe7/PIQEzqCzKArFl3pwAiM
|
||||
MJHZ6NnqWyd04apTX4snFXALRub5eApfAfYGq4K2w4K5LpWMmAszzImr66NRjjnt
|
||||
5B7gwfoEcSZ9us66Tl2q8VBLNF17wzywcdmIdpWexb+5JroohCn70Avh0rG2bc9n
|
||||
W2RxAoGAEZCqPSiJfrUEJBit9XVW/kaeKn4rC0s4/UhNyugfdxDfNGyeDvge9a+q
|
||||
KzwrAyG4rwRMBTvcjnAQ1BW1Pb0ZCp6jqUIH6lDB/sr4n45sMeXAvue6pDK0+tB6
|
||||
IMg5xLYCaO/dRG9JhOdN/ICr0ickaIQM7km2I28i/ZKWwtqOoZw=
|
||||
-----END RSA PRIVATE KEY-----
|
||||
@@ -1,53 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDmzCCAyKgAwIBAgISBmRPC6KGb7rrw0FG5XAxnbieMAoGCCqGSM49BAMDMDIx
|
||||
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
|
||||
NzAeFw0yNTA5MjExMjU0MDFaFw0yNTEyMjAxMjU0MDBaMCIxIDAeBgNVBAMTF21p
|
||||
eHBvc3QuZ3lvemFtYW5jYXZlLmZyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
|
||||
SsfEQjkc4mQcl8T57zJSFoB9qUbda1vJqLYIAiRSxeoz4LlIhbEtz8XkHwH7szW6
|
||||
H0HFJe6pC1k2TCufP4tjf6OCAiYwggIiMA4GA1UdDwEB/wQEAwIHgDAdBgNVHSUE
|
||||
FjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQU
|
||||
fyCFQih3NwcSgBk68SoZCnjFZ5swHwYDVR0jBBgwFoAUrkie3IcdRKBv2qLlYHQE
|
||||
eMKcAIAwMgYIKwYBBQUHAQEEJjAkMCIGCCsGAQUFBzAChhZodHRwOi8vZTcuaS5s
|
||||
ZW5jci5vcmcvMCIGA1UdEQQbMBmCF21peHBvc3QuZ3lvemFtYW5jYXZlLmZyMBMG
|
||||
A1UdIAQMMAowCAYGZ4EMAQIBMC0GA1UdHwQmMCQwIqAgoB6GHGh0dHA6Ly9lNy5j
|
||||
LmxlbmNyLm9yZy8zMS5jcmwwggEFBgorBgEEAdZ5AgQCBIH2BIHzAPEAdwCkQsUG
|
||||
SWBhVI8P1Oqc+3otJkVNh6l/L99FWfYnTzqEVAAAAZlsjDJCAAAEAwBIMEYCIQDv
|
||||
j7pnXllaqandpPIwijJ0wFjI0K4t/67Wr8ryovNzdAIhAOXvoGQKlB4TxfG9ERjr
|
||||
e+7rKSdpCe2YK9Xhrq2r5JaEAHYA3dzKNJXX4RYF55Uy+sef+D0cUN/bADoUEnYK
|
||||
LKy7yCoAAAGZbIw6RgAABAMARzBFAiEApmZDFJt4b3VyU7NoYxfwExWfoQVSOOHz
|
||||
tVknfroOLD4CIFYEUxvAiW+evBoo7Dk34tKV8jABkSxFzVwFAZuXirIDMAoGCCqG
|
||||
SM49BAMDA2cAMGQCMF2o0w47tze7uqEAWOtIkoDRZSszwmNbBU3gGl0YshbOV1yU
|
||||
7lEd9IzK9coGl7xdoQIwCs3KThdJjkUftWp1Xrmeo0IM00yIZIsK/7TPveUQOoNu
|
||||
CXmX+8UkgYUSVFlQ2mY4
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIEVzCCAj+gAwIBAgIRAKp18eYrjwoiCWbTi7/UuqEwDQYJKoZIhvcNAQELBQAw
|
||||
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
|
||||
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw
|
||||
WhcNMjcwMzEyMjM1OTU5WjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
|
||||
RW5jcnlwdDELMAkGA1UEAxMCRTcwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAARB6AST
|
||||
CFh/vjcwDMCgQer+VtqEkz7JANurZxLP+U9TCeioL6sp5Z8VRvRbYk4P1INBmbef
|
||||
QHJFHCxcSjKmwtvGBWpl/9ra8HW0QDsUaJW2qOJqceJ0ZVFT3hbUHifBM/2jgfgw
|
||||
gfUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD
|
||||
ATASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSuSJ7chx1EoG/aouVgdAR4
|
||||
wpwAgDAfBgNVHSMEGDAWgBR5tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcB
|
||||
AQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0g
|
||||
BAwwCjAIBgZngQwBAgEwJwYDVR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVu
|
||||
Y3Iub3JnLzANBgkqhkiG9w0BAQsFAAOCAgEAjx66fDdLk5ywFn3CzA1w1qfylHUD
|
||||
aEf0QZpXcJseddJGSfbUUOvbNR9N/QQ16K1lXl4VFyhmGXDT5Kdfcr0RvIIVrNxF
|
||||
h4lqHtRRCP6RBRstqbZ2zURgqakn/Xip0iaQL0IdfHBZr396FgknniRYFckKORPG
|
||||
yM3QKnd66gtMst8I5nkRQlAg/Jb+Gc3egIvuGKWboE1G89NTsN9LTDD3PLj0dUMr
|
||||
OIuqVjLB8pEC6yk9enrlrqjXQgkLEYhXzq7dLafv5Vkig6Gl0nuuqjqfp0Q1bi1o
|
||||
yVNAlXe6aUXw92CcghC9bNsKEO1+M52YY5+ofIXlS/SEQbvVYYBLZ5yeiglV6t3S
|
||||
M6H+vTG0aP9YHzLn/KVOHzGQfXDP7qM5tkf+7diZe7o2fw6O7IvN6fsQXEQQj8TJ
|
||||
UXJxv2/uJhcuy/tSDgXwHM8Uk34WNbRT7zGTGkQRX0gsbjAea/jYAoWv0ZvQRwpq
|
||||
Pe79D/i7Cep8qWnA+7AE/3B3S/3dEEYmc0lpe1366A/6GEgk3ktr9PEoQrLChs6I
|
||||
tu3wnNLB2euC8IKGLQFpGtOO/2/hiAKjyajaBP25w1jF0Wl8Bbqne3uZ2q1GyPFJ
|
||||
YRmT7/OXpmOH/FVLtwS+8ng1cAmpCujPwteJZNcDG0sF2n/sc0+SQf49fdyUK0ty
|
||||
+VUwFj9tmWxyR/M=
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN EC PRIVATE KEY-----
|
||||
MHcCAQEEIDZziRuoBQkofhTQAe5nBz34C5Tlwitw+buoh+ckpGhyoAoGCCqGSM49
|
||||
AwEHoUQDQgAESsfEQjkc4mQcl8T57zJSFoB9qUbda1vJqLYIAiRSxeoz4LlIhbEt
|
||||
z8XkHwH7szW6H0HFJe6pC1k2TCufP4tjfw==
|
||||
-----END EC PRIVATE KEY-----
|
||||
@@ -1,85 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFATCCA+mgAwIBAgISBglnyhlxLScBktHwUrhNzi5iMA0GCSqGSIb3DQEBCwUA
|
||||
MDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQwwCgYDVQQD
|
||||
EwNSMTMwHhcNMjUxMjE4MDgwMDQxWhcNMjYwMzE4MDgwMDQwWjAZMRcwFQYDVQQD
|
||||
Ew5tcnRlZGR5YmVhci5mcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
|
||||
AMNc+PjtWutOUhO92Nfq3o4yRIthcNKqzvnf4uZ9CLwD/xi939fY9o48JoaD5K9F
|
||||
8/shIGEiLfaCcGBe5ezm2IPTEQFHX3I/UkO1qzXTkaxaPKuoV6Uo7ZNo7jOZP0ph
|
||||
/EitFcWo3kc5bPs9d6PaiZ8XplcRwvfVUrKNctKpGdypFBeUccodIKHfQHrKEim0
|
||||
1yHBRaR+XRiTN0t1rUee6r212yFvu+LNdYlun7tYRHVxi4mwE1sOt7rUd/tHwMf/
|
||||
5PW3gYR7F6LxtSCTd6uB2E54BufpA41yJePaNXxBPaCv871zTgk7C/bOWO/hMBWB
|
||||
eiM2tWgkDTmDIrkvYuilLFcCAwEAAaOCAicwggIjMA4GA1UdDwEB/wQEAwIFoDAd
|
||||
BgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNV
|
||||
HQ4EFgQUcl7mIPwmShOgbJbCze50urqk/sIwHwYDVR0jBBgwFoAU56ufDywzoFPT
|
||||
Xk94yLKEDjvWkjMwMwYIKwYBBQUHAQEEJzAlMCMGCCsGAQUFBzAChhdodHRwOi8v
|
||||
cjEzLmkubGVuY3Iub3JnLzAZBgNVHREEEjAQgg5tcnRlZGR5YmVhci5mcjATBgNV
|
||||
HSAEDDAKMAgGBmeBDAECATAuBgNVHR8EJzAlMCOgIaAfhh1odHRwOi8vcjEzLmMu
|
||||
bGVuY3Iub3JnLzk5LmNybDCCAQ0GCisGAQQB1nkCBAIEgf4EgfsA+QB2AA5XlLzz
|
||||
rqk+MxssmQez95Dfm8I9cTIl3SGpJaxhxU4hAAABmzCvRb4AAAQDAEcwRQIgSMg0
|
||||
Ze+Ewc+3xEyi+r1R5S1sMhcFeWcTWPeulE4eMesCIQC1DgJ47fFKuV1zGnlk40m+
|
||||
pAXGAw0/8rBUG7YvF69XOQB/AHF+lfPCOIptseOEST0x4VqpYgh2LUIA4AUM0Ge1
|
||||
pmHiAAABmzCvRqQACAAABQAEeyciBAMASDBGAiEApYkxw2VjijbBmQMqudrfMVrP
|
||||
2nGVrf8fQz9PtlnSz6wCIQDkEz/oDwR0sWcQavNIm6jRLm8cURR4UY1nCvAdFHGF
|
||||
vjANBgkqhkiG9w0BAQsFAAOCAQEAVXuuKBtmWiTjh28Xhqt6iHBW2/ehgfLQVcsm
|
||||
k5aS4K1PVp+V+qJyBcrC2GA8u4uTXmW6DFSD19wbgxacM087MONjbKX0H0e3fHDZ
|
||||
qJTaI39yov9h4YiUsBamrcmDM0RrL9uTs/9hDbpkraoBBsXxMAiHNJSuYcIcCHDm
|
||||
zdMPyLTrc1ilXQ+xL43DZsLzXlz6zP44XiPxm/1RHfmckehyvNmAUp5uEGFb3Hw/
|
||||
F8PlyyXm5AZLEJCIHD21tlsMIm4Mc9yEsKAatFvXBBLaJx+rzbvIVM7r8Py2bJAT
|
||||
71pX41FjGS6UmqmIxjih8eOsnC5busMcpTlBcxMbgy2KCBez1w==
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFBTCCAu2gAwIBAgIQWgDyEtjUtIDzkkFX6imDBTANBgkqhkiG9w0BAQsFADBP
|
||||
MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy
|
||||
Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNDAzMTMwMDAwMDBa
|
||||
Fw0yNzAzMTIyMzU5NTlaMDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBF
|
||||
bmNyeXB0MQwwCgYDVQQDEwNSMTMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
|
||||
AoIBAQClZ3CN0FaBZBUXYc25BtStGZCMJlA3mBZjklTb2cyEBZPs0+wIG6BgUUNI
|
||||
fSvHSJaetC3ancgnO1ehn6vw1g7UDjDKb5ux0daknTI+WE41b0VYaHEX/D7YXYKg
|
||||
L7JRbLAaXbhZzjVlyIuhrxA3/+OcXcJJFzT/jCuLjfC8cSyTDB0FxLrHzarJXnzR
|
||||
yQH3nAP2/Apd9Np75tt2QnDr9E0i2gB3b9bJXxf92nUupVcM9upctuBzpWjPoXTi
|
||||
dYJ+EJ/B9aLrAek4sQpEzNPCifVJNYIKNLMc6YjCR06CDgo28EdPivEpBHXazeGa
|
||||
XP9enZiVuppD0EqiFwUBBDDTMrOPAgMBAAGjgfgwgfUwDgYDVR0PAQH/BAQDAgGG
|
||||
MB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATASBgNVHRMBAf8ECDAGAQH/
|
||||
AgEAMB0GA1UdDgQWBBTnq58PLDOgU9NeT3jIsoQOO9aSMzAfBgNVHSMEGDAWgBR5
|
||||
tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAKG
|
||||
Fmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0gBAwwCjAIBgZngQwBAgEwJwYD
|
||||
VR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVuY3Iub3JnLzANBgkqhkiG9w0B
|
||||
AQsFAAOCAgEAUTdYUqEimzW7TbrOypLqCfL7VOwYf/Q79OH5cHLCZeggfQhDconl
|
||||
k7Kgh8b0vi+/XuWu7CN8n/UPeg1vo3G+taXirrytthQinAHGwc/UdbOygJa9zuBc
|
||||
VyqoH3CXTXDInT+8a+c3aEVMJ2St+pSn4ed+WkDp8ijsijvEyFwE47hulW0Ltzjg
|
||||
9fOV5Pmrg/zxWbRuL+k0DBDHEJennCsAen7c35Pmx7jpmJ/HtgRhcnz0yjSBvyIw
|
||||
6L1QIupkCv2SBODT/xDD3gfQQyKv6roV4G2EhfEyAsWpmojxjCUCGiyg97FvDtm/
|
||||
NK2LSc9lybKxB73I2+P2G3CaWpvvpAiHCVu30jW8GCxKdfhsXtnIy2imskQqVZ2m
|
||||
0Pmxobb28Tucr7xBK7CtwvPrb79os7u2XP3O5f9b/H66GNyRrglRXlrYjI1oGYL/
|
||||
f4I1n/Sgusda6WvA6C190kxjU15Y12mHU4+BxyR9cx2hhGS9fAjMZKJss28qxvz6
|
||||
Axu4CaDmRNZpK/pQrXF17yXCXkmEWgvSOEZy6Z9pcbLIVEGckV/iVeq0AOo2pkg9
|
||||
p4QRIy0tK2diRENLSF2KysFwbY6B26BFeFs3v1sYVRhFW9nLkOrQVporCS0KyZmf
|
||||
wVD89qSTlnctLcZnIavjKsKUu1nA1iU0yYMdYepKR7lWbnwhdx3ewok=
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
MIIEowIBAAKCAQEAw1z4+O1a605SE73Y1+rejjJEi2Fw0qrO+d/i5n0IvAP/GL3f
|
||||
19j2jjwmhoPkr0Xz+yEgYSIt9oJwYF7l7ObYg9MRAUdfcj9SQ7WrNdORrFo8q6hX
|
||||
pSjtk2juM5k/SmH8SK0VxajeRzls+z13o9qJnxemVxHC99VSso1y0qkZ3KkUF5Rx
|
||||
yh0god9AesoSKbTXIcFFpH5dGJM3S3WtR57qvbXbIW+74s11iW6fu1hEdXGLibAT
|
||||
Ww63utR3+0fAx//k9beBhHsXovG1IJN3q4HYTngG5+kDjXIl49o1fEE9oK/zvXNO
|
||||
CTsL9s5Y7+EwFYF6Iza1aCQNOYMiuS9i6KUsVwIDAQABAoIBABQ+YxIwTjaJ1Bl1
|
||||
l62wCcXEUbP7sdwylOXxnCp0FF6fL2TZ8AMG2W2dsARKUH0VC5YfNaK7DvY3R/vE
|
||||
eaDVvuPSEDYItkw5YYXgolAejz7Dzvueow5bMlsPCXfRTmyfwKurO9FSkU3iFnfm
|
||||
Q6p378DLi5IEJibWNQ6Jd7d6jFKACEMvYoqmTmtJonBkPpXOFhl4aHHsdgouE3yM
|
||||
sGk+i+zC4+E9pvT8OFG+flXukXGB5Vs9/4fbUATUGuWT1xM76GuNfd4BPpxm5wxb
|
||||
dy6mbkXkrvBniPMA4SNvXxRYK5fxXhqNewX6qL7eaMezqO90+nQeRPAEMNN9bOu7
|
||||
0mIB3qECgYEA7kVL0jvoW26FMgc5eR98ZPd+kO4oL9TswEVHB/FWyVCMNWzDDwvm
|
||||
iKIK847qQG5H7KUczMLFyj/PsGfy2n2X6TqCFZjGBaNGqNA7yobpe9Ze4bAQOJlU
|
||||
hQcHSKnz18CCrpaEXrYUmz6IrSo70Rd/a/Q4YIayMW8VtQomjPph5ucCgYEA0eZa
|
||||
DK/WaYlzGPfHrIcCgVYB8huraTdIAkpx3Gov9d/09eHaZOPAArtUI25Ak6aIUg+v
|
||||
7xsPvv6wf+NL+n5QxmkSAh/WhaDqlpOTEP9wyEUr2XGn9j9AkW7EbhhVd6oVSwkr
|
||||
HXx6XTXpBm3VTC1SKjBSxUg9UKAo4UGvc6lEkRECgYAoK6Sp0BHPgGWSVqd45TcK
|
||||
qrM66fv6fHJhxAxCqYyRKjRJOYn1OnNma7Ne9qRFspILspaVauz/uRxhyFSoQ25e
|
||||
EtAlpfkUsD9UbK736SDqEO00LYO+lxMpzlKLDKQgpsMhfhzY/uegeL2APFOTX9vK
|
||||
roTmuS7HqMvHFuwC7p+c1wKBgQCE69kOu7OONcq7fv3llcHSYcLtrPQJt0ZUnQwp
|
||||
xt0EWYToyNPinA+WK0cHAOTIG+er/98sDfkUvHjNJAWTZbaFTzhmO/8/tD2aiW3S
|
||||
j9C+In+4Pa9d04RyFLEz/xjwpLbDQ9UX4SIkMOWWeqteiDzGFr/zyuF5U1NQAqa3
|
||||
GfQf4QKBgDu55IGR5VFvO0irfBwE0RKQn2kt5G4CPBdUBgxws5hC9L4BoSHYq3OW
|
||||
lfck/7iTvVt4lb2h8w2MRZCw5zieAN9zdMA3qr3CwW5bOPt/XXmNYP5LeWFDVqyu
|
||||
g4POJV6ajI4TcRyXdfL9gIu6qAFaibsDEXkURndXtjYsrU0KtWI8
|
||||
-----END RSA PRIVATE KEY-----
|
||||
@@ -1,85 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFBzCCA++gAwIBAgISBr5Nye5GuxS4aGkFjfci6Z67MA0GCSqGSIb3DQEBCwUA
|
||||
MDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQwwCgYDVQQD
|
||||
EwNSMTMwHhcNMjUxMjE4MDgwMDQ2WhcNMjYwMzE4MDgwMDQ1WjAgMR4wHAYDVQQD
|
||||
ExVtdXNpYy5neW96YW1hbmNhdmUuZnIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
|
||||
ggEKAoIBAQDRH3pl4MkYEfx3DVLTHWKnu1osXCJthiEwRIYt+7X7aL1qv4UouS3F
|
||||
wBZhhlxTL++z7h5EAb2czgsWHDcf16DljKID/7yI8PsxqCoNgAWH7+vhUCpj/jxf
|
||||
E+jL3NkUnmAenSBU72c7OCEOTkD1VTO9iouV3tVZzqEn29T2eg+X3/bXt2ExE9KT
|
||||
oR7pwacgPNocO+KkoLgJy1a1L8xbJh/hVOyZGpT/c6ByAaCPqkJ/on1sBMmSf338
|
||||
LFdXUcq0EPKgP8eFCuZs1fthnHqRp3bZ7y9maAsc/6DLa6DcX9Iy4oQNo+vZve7O
|
||||
EeH8YNfqAMtyfOmHZxXQvagvyeK86YK/AgMBAAGjggImMIICIjAOBgNVHQ8BAf8E
|
||||
BAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQC
|
||||
MAAwHQYDVR0OBBYEFCQsPGoB/5hKIgw1pd+eYiUS8aX7MB8GA1UdIwQYMBaAFOer
|
||||
nw8sM6BT015PeMiyhA471pIzMDMGCCsGAQUFBwEBBCcwJTAjBggrBgEFBQcwAoYX
|
||||
aHR0cDovL3IxMy5pLmxlbmNyLm9yZy8wIAYDVR0RBBkwF4IVbXVzaWMuZ3lvemFt
|
||||
YW5jYXZlLmZyMBMGA1UdIAQMMAowCAYGZ4EMAQIBMC4GA1UdHwQnMCUwI6AhoB+G
|
||||
HWh0dHA6Ly9yMTMuYy5sZW5jci5vcmcvNjAuY3JsMIIBBQYKKwYBBAHWeQIEAgSB
|
||||
9gSB8wDxAHcAZBHEbKQS7KeJHKICLgC8q08oB9QeNSer6v7VA8l9zfAAAAGbMK9X
|
||||
cgAABAMASDBGAiEArRkvrqWJvhcrGC5Oy46j/tNusfx9NghLC++jr5FhFrMCIQC0
|
||||
PD/ulZHTFIs0udM1DHrM6sMhiyuSlekH4coTH7ewugB2AMs49xWJfIShRF9bwd37
|
||||
yW7ymlnNRwppBYWwyxTDFFjnAAABmzCvV5MAAAQDAEcwRQIgXs5VZ4tBBvX+Sj2c
|
||||
jH6t6rrJPpVR5JEDPtYLSFsziZICIQD1+9DuKucLSQNAClMq3kn5y2e7i2WB7AnK
|
||||
bQ508JAMOTANBgkqhkiG9w0BAQsFAAOCAQEAkUnWNAhLYDIXGUJweCSwsHcSgsS1
|
||||
LkutOrTK18jpO3Je+MMO/FxfhvK8BS2++QTOtmY6GfeJ+d3bBJtoCa34XWbeLddo
|
||||
QsDpjUqQJprj3Nz8xpLtXXXolnfyBns0JnCZJAQOZapS0Z6G0N97gKCiu0qw/Lem
|
||||
2KVIRSvv7GBxewkUXgfuDyjK+IzlxamQP3If6ah5gsBG2Ey7kW+k4VV5wDfwOt4H
|
||||
0kCJOdnCle6yd8P9KLAowOc0JmLJo5qiluITVR02KpjUGZjNwjNAFUYkxCXKP9N6
|
||||
fQtCMOhCNuOXu/6cV2/sCBT8MtUprieIoo8LBgOC+BhTp0Lpi/e7HbBi8Q==
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFBTCCAu2gAwIBAgIQWgDyEtjUtIDzkkFX6imDBTANBgkqhkiG9w0BAQsFADBP
|
||||
MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy
|
||||
Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNDAzMTMwMDAwMDBa
|
||||
Fw0yNzAzMTIyMzU5NTlaMDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBF
|
||||
bmNyeXB0MQwwCgYDVQQDEwNSMTMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
|
||||
AoIBAQClZ3CN0FaBZBUXYc25BtStGZCMJlA3mBZjklTb2cyEBZPs0+wIG6BgUUNI
|
||||
fSvHSJaetC3ancgnO1ehn6vw1g7UDjDKb5ux0daknTI+WE41b0VYaHEX/D7YXYKg
|
||||
L7JRbLAaXbhZzjVlyIuhrxA3/+OcXcJJFzT/jCuLjfC8cSyTDB0FxLrHzarJXnzR
|
||||
yQH3nAP2/Apd9Np75tt2QnDr9E0i2gB3b9bJXxf92nUupVcM9upctuBzpWjPoXTi
|
||||
dYJ+EJ/B9aLrAek4sQpEzNPCifVJNYIKNLMc6YjCR06CDgo28EdPivEpBHXazeGa
|
||||
XP9enZiVuppD0EqiFwUBBDDTMrOPAgMBAAGjgfgwgfUwDgYDVR0PAQH/BAQDAgGG
|
||||
MB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATASBgNVHRMBAf8ECDAGAQH/
|
||||
AgEAMB0GA1UdDgQWBBTnq58PLDOgU9NeT3jIsoQOO9aSMzAfBgNVHSMEGDAWgBR5
|
||||
tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAKG
|
||||
Fmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0gBAwwCjAIBgZngQwBAgEwJwYD
|
||||
VR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVuY3Iub3JnLzANBgkqhkiG9w0B
|
||||
AQsFAAOCAgEAUTdYUqEimzW7TbrOypLqCfL7VOwYf/Q79OH5cHLCZeggfQhDconl
|
||||
k7Kgh8b0vi+/XuWu7CN8n/UPeg1vo3G+taXirrytthQinAHGwc/UdbOygJa9zuBc
|
||||
VyqoH3CXTXDInT+8a+c3aEVMJ2St+pSn4ed+WkDp8ijsijvEyFwE47hulW0Ltzjg
|
||||
9fOV5Pmrg/zxWbRuL+k0DBDHEJennCsAen7c35Pmx7jpmJ/HtgRhcnz0yjSBvyIw
|
||||
6L1QIupkCv2SBODT/xDD3gfQQyKv6roV4G2EhfEyAsWpmojxjCUCGiyg97FvDtm/
|
||||
NK2LSc9lybKxB73I2+P2G3CaWpvvpAiHCVu30jW8GCxKdfhsXtnIy2imskQqVZ2m
|
||||
0Pmxobb28Tucr7xBK7CtwvPrb79os7u2XP3O5f9b/H66GNyRrglRXlrYjI1oGYL/
|
||||
f4I1n/Sgusda6WvA6C190kxjU15Y12mHU4+BxyR9cx2hhGS9fAjMZKJss28qxvz6
|
||||
Axu4CaDmRNZpK/pQrXF17yXCXkmEWgvSOEZy6Z9pcbLIVEGckV/iVeq0AOo2pkg9
|
||||
p4QRIy0tK2diRENLSF2KysFwbY6B26BFeFs3v1sYVRhFW9nLkOrQVporCS0KyZmf
|
||||
wVD89qSTlnctLcZnIavjKsKUu1nA1iU0yYMdYepKR7lWbnwhdx3ewok=
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
MIIEpAIBAAKCAQEA0R96ZeDJGBH8dw1S0x1ip7taLFwibYYhMESGLfu1+2i9ar+F
|
||||
KLktxcAWYYZcUy/vs+4eRAG9nM4LFhw3H9eg5YyiA/+8iPD7MagqDYAFh+/r4VAq
|
||||
Y/48XxPoy9zZFJ5gHp0gVO9nOzghDk5A9VUzvYqLld7VWc6hJ9vU9noPl9/217dh
|
||||
MRPSk6Ee6cGnIDzaHDvipKC4CctWtS/MWyYf4VTsmRqU/3OgcgGgj6pCf6J9bATJ
|
||||
kn99/CxXV1HKtBDyoD/HhQrmbNX7YZx6kad22e8vZmgLHP+gy2ug3F/SMuKEDaPr
|
||||
2b3uzhHh/GDX6gDLcnzph2cV0L2oL8nivOmCvwIDAQABAoIBAD1n7Nz1gJcc0PF0
|
||||
bBmpy0pNbVERTNq0RBKUTII8I1fLjbNGwacPmS00Fl5Uwc97h/thtGlryW294ut/
|
||||
JYCoJIrDHN/nvEjJ2jjelFqaeQVNognrLEdoY/nXMsiJ9QRk7PyQTuoh0kJFXQ+C
|
||||
Uvi3KBZEFHDRmfxg/Flj58joVqPVjBBjpeimNKAN0A86SvLwyMZLdWiMu7NTiXvL
|
||||
0digWgR55lPQJtZ1bMZLsk+mYl/WDNPfapFtlnjdbSj5RCqkznVC8h5ao0Acf0TN
|
||||
Az24j6Xl2eGumc12FUTfDfGcem9N0/dhtN5ON8GfhV/NvoE+F7zErw99L3YLHh3Y
|
||||
smeUv6ECgYEA7D+Pc+ol+vnAH8Dt4AqOf9LQrHO89v2p5lonb0vATqiU5HzjBXj5
|
||||
daXcbgecRUkEOi/R5Hon1lDxOh6NWjl1NcaIMrWQVaDHEh59acEyDvdnnVFp28mb
|
||||
zr990VFSRoXIMeEChngxODMDLCH+vL0++ke6oOFbgwINnxUbT++j9o0CgYEA4pta
|
||||
O/kGrMoAtY3lyZG4adY2iU6bOUBJtYoN4CrFuOSfv49wnwc+yyCIRNhJxZPyAi9s
|
||||
waUjPjl3YC7Wdn42ulJvYbXSIVX8S6H+VxH253P9VJNqsJNMXwR5nOCICaFkj4LP
|
||||
hudxEbSpaMI8qvcqT6poTjvHXtSBr7I+Zoa5gXsCgYEA5S3jo7cJkSam0ib+m9Ch
|
||||
3C5OcHz2W0RIhUX/61+49pVjmyPrt2tb1F1KMRMA7dWfXDL3koVOEAIFgTQSO+xx
|
||||
X/FwPoETu310oIcjcmwQe6RVx68q2iQCGdZ534zcG728L2bwZDJEzRfvg+iWjdGo
|
||||
PnNHALqdY8GiJSj8jdcTYCECgYEAnwpBbk38rVCo5sNMPwgS0dUSOZP9xVSlZtAZ
|
||||
pPbgBkAPDjbx5+sB2zZd7VOPkyeedoIqZk4sSgOzEMJOqqMybdplacJeVB8xDzQG
|
||||
eb2V+COj7LP58SuwMg/F+qBrWbb4CPDaDehppu+Q5oFMawFFpNwIkL/L0XZ7/n+u
|
||||
4+4yS/kCgYANx3HYHS27Kwy9TpUXM+isVHv/VoH1LMA+qd8VjdxL1RTpQlurUGVt
|
||||
bxIWxn9qyRuT5Ys0bsedUJFZepZ6UIcNvTCpg/09Nq1hagPTjo6fQ8re1sRbNLId
|
||||
0Xdk8Vrkf0g4TQ4+UDVgm2A+GTklHkjxAoDwCWAinIXUVXKZkvwdxw==
|
||||
-----END RSA PRIVATE KEY-----
|
||||
@@ -1,85 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFAzCCA+ugAwIBAgISBZFlqLLV8kL89bfKTaNkdVWvMA0GCSqGSIb3DQEBCwUA
|
||||
MDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQwwCgYDVQQD
|
||||
EwNSMTIwHhcNMjUxMjE4MDgwMDUwWhcNMjYwMzE4MDgwMDQ5WjAeMRwwGgYDVQQD
|
||||
ExNuOG4uZ3lvemFtYW5jYXZlLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
||||
CgKCAQEAsJWM9MDKLrx0Qih1XprBNQmobqaPoP/LJ90lsQRcx8t1NjGcPE9/pr7o
|
||||
u/2US5SdF0cyKuWO4DPokUltS2Vlo0iai6KhCtMSflAiacCd1uDsTN2oFzSSiikd
|
||||
reL6tcLuCIFg0a5tV5PUi4by/jpPqtFcBT/tcKiZVPhrVr+C+RUMULNkBcEQTXyP
|
||||
+ixABxLyq8xG6z5edn/igzzLGRd8c5Y7eq6yJowxq+P8QBAOugRmI1D2uwO0pYVT
|
||||
tLRY15HXXqJGB9lABSSnrWFIgPEuygS46uWxjHMOXslQJUI66bJDpTjAFYwDdHSV
|
||||
8IdApz2P0FBO+nyh5KCTpDWmt7dTkwIDAQABo4ICJDCCAiAwDgYDVR0PAQH/BAQD
|
||||
AgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAA
|
||||
MB0GA1UdDgQWBBRX8hFz6PFmRbY6mO+FWTH0AbnOHjAfBgNVHSMEGDAWgBQAtSny
|
||||
LY5vMeibTK14Pvrc6QzR0jAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAKGF2h0
|
||||
dHA6Ly9yMTIuaS5sZW5jci5vcmcvMB4GA1UdEQQXMBWCE244bi5neW96YW1hbmNh
|
||||
dmUuZnIwEwYDVR0gBAwwCjAIBgZngQwBAgEwLgYDVR0fBCcwJTAjoCGgH4YdaHR0
|
||||
cDovL3IxMi5jLmxlbmNyLm9yZy80OC5jcmwwggEFBgorBgEEAdZ5AgQCBIH2BIHz
|
||||
APEAdwBJnJtp3h187Pw23s2HZKa4W68Kh4AZ0VVS++nrKd34wwAAAZswr2hQAAAE
|
||||
AwBIMEYCIQCLTWZf7e64uLNNRk2m15TzK6aXlSdvf3HksU5IJ94rQwIhAOKo5Ir2
|
||||
uuZFfnb2DxnUk2dMDYVCBbCYiovRXa5YEx8VAHYAyzj3FYl8hKFEX1vB3fvJbvKa
|
||||
Wc1HCmkFhbDLFMMUWOcAAAGbMK9oaQAABAMARzBFAiEAgzlEh3CUKmHLkvCZ02aC
|
||||
We+WP5PFD5M90Q8CMeZevHkCIAXKwZyoL35XJvokK2zAHO0QY2q19Sq8Zuy0UJW2
|
||||
EDfWMA0GCSqGSIb3DQEBCwUAA4IBAQChYiKo7Op69ArbjmQ5fk1+J0MIKNNIPtcn
|
||||
PO2eEGzPus6VSS3nYy5su5yEOcqHVFhz8YqdWRyTF2ahMxs27czKfQZcKdt5DQll
|
||||
ji8HW3XCaxGTfddoXaN9Kh03y9lP39q6xaHxjCW7XwHiDO1NbztVxT9rI7PXQDCd
|
||||
wRHFeN0lmDXyvYiKs8UpZuzyA3jN3jcJJENAodgCh58xpT60yzbQmUZU7o9/bmi1
|
||||
QZ6kJJ6zu+Z1gPL/jZ2TtNNfyjJSREpSENAyHNemXvwyuthStu9taTRNOI522wZV
|
||||
PBBpyNad0j7MsmcFVBvzrNf43mKSlsnlxGZxQDsqTk/JOW3NTMYM
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFBjCCAu6gAwIBAgIRAMISMktwqbSRcdxA9+KFJjwwDQYJKoZIhvcNAQELBQAw
|
||||
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
|
||||
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw
|
||||
WhcNMjcwMzEyMjM1OTU5WjAzMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
|
||||
RW5jcnlwdDEMMAoGA1UEAxMDUjEyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
||||
CgKCAQEA2pgodK2+lP474B7i5Ut1qywSf+2nAzJ+Npfs6DGPpRONC5kuHs0BUT1M
|
||||
5ShuCVUxqqUiXXL0LQfCTUA83wEjuXg39RplMjTmhnGdBO+ECFu9AhqZ66YBAJpz
|
||||
kG2Pogeg0JfT2kVhgTU9FPnEwF9q3AuWGrCf4yrqvSrWmMebcas7dA8827JgvlpL
|
||||
Thjp2ypzXIlhZZ7+7Tymy05v5J75AEaz/xlNKmOzjmbGGIVwx1Blbzt05UiDDwhY
|
||||
XS0jnV6j/ujbAKHS9OMZTfLuevYnnuXNnC2i8n+cF63vEzc50bTILEHWhsDp7CH4
|
||||
WRt/uTp8n1wBnWIEwii9Cq08yhDsGwIDAQABo4H4MIH1MA4GA1UdDwEB/wQEAwIB
|
||||
hjAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwEgYDVR0TAQH/BAgwBgEB
|
||||
/wIBADAdBgNVHQ4EFgQUALUp8i2ObzHom0yteD763OkM0dIwHwYDVR0jBBgwFoAU
|
||||
ebRZ5nu25eQBc4AIiMgaWPbpm24wMgYIKwYBBQUHAQEEJjAkMCIGCCsGAQUFBzAC
|
||||
hhZodHRwOi8veDEuaS5sZW5jci5vcmcvMBMGA1UdIAQMMAowCAYGZ4EMAQIBMCcG
|
||||
A1UdHwQgMB4wHKAaoBiGFmh0dHA6Ly94MS5jLmxlbmNyLm9yZy8wDQYJKoZIhvcN
|
||||
AQELBQADggIBAI910AnPanZIZTKS3rVEyIV29BWEjAK/duuz8eL5boSoVpHhkkv3
|
||||
4eoAeEiPdZLj5EZ7G2ArIK+gzhTlRQ1q4FKGpPPaFBSpqV/xbUb5UlAXQOnkHn3m
|
||||
FVj+qYv87/WeY+Bm4sN3Ox8BhyaU7UAQ3LeZ7N1X01xxQe4wIAAE3JVLUCiHmZL+
|
||||
qoCUtgYIFPgcg350QMUIWgxPXNGEncT921ne7nluI02V8pLUmClqXOsCwULw+PVO
|
||||
ZCB7qOMxxMBoCUeL2Ll4oMpOSr5pJCpLN3tRA2s6P1KLs9TSrVhOk+7LX28NMUlI
|
||||
usQ/nxLJID0RhAeFtPjyOCOscQBA53+NRjSCak7P4A5jX7ppmkcJECL+S0i3kXVU
|
||||
y5Me5BbrU8973jZNv/ax6+ZK6TM8jWmimL6of6OrX7ZU6E2WqazzsFrLG3o2kySb
|
||||
zlhSgJ81Cl4tv3SbYiYXnJExKQvzf83DYotox3f0fwv7xln1A2ZLplCb0O+l/AK0
|
||||
YE0DS2FPxSAHi0iwMfW2nNHJrXcY3LLHD77gRgje4Eveubi2xxa+Nmk/hmhLdIET
|
||||
iVDFanoCrMVIpQ59XWHkzdFmoHXHBV7oibVjGSO7ULSQ7MJ1Nz51phuDJSgAIU7A
|
||||
0zrLnOrAj/dfrlEWRhCvAgbuwLZX1A2sjNjXoPOHbsPiy+lO1KF8/XY7
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
MIIEowIBAAKCAQEAsJWM9MDKLrx0Qih1XprBNQmobqaPoP/LJ90lsQRcx8t1NjGc
|
||||
PE9/pr7ou/2US5SdF0cyKuWO4DPokUltS2Vlo0iai6KhCtMSflAiacCd1uDsTN2o
|
||||
FzSSiikdreL6tcLuCIFg0a5tV5PUi4by/jpPqtFcBT/tcKiZVPhrVr+C+RUMULNk
|
||||
BcEQTXyP+ixABxLyq8xG6z5edn/igzzLGRd8c5Y7eq6yJowxq+P8QBAOugRmI1D2
|
||||
uwO0pYVTtLRY15HXXqJGB9lABSSnrWFIgPEuygS46uWxjHMOXslQJUI66bJDpTjA
|
||||
FYwDdHSV8IdApz2P0FBO+nyh5KCTpDWmt7dTkwIDAQABAoIBAB8e3C6uY3OFJwAZ
|
||||
3UWFBJPyVcrac+mt6wHliaT+3dMgWlHowF4orJiYgK/Q6ve/A0h89ax1tI5y14Pz
|
||||
at2kyxrRytrdGICt3k6AlPAKUEb0cPDDB8K/MyxCPsbMf97Usdqx4nxRv1d16DmG
|
||||
2QBRCoVSTGNodtIqBIvjFBe/vLdk4Uo/IycszW0lfYPQRO6zFYv628CU7JI0FWoa
|
||||
Bo/LPWBLw6+EidFBSW16dx8QjLJT4ThA2tDhljju+ifv/T0eJ4wHKVISVYGsrZov
|
||||
8RrRiQc2FCp3ZJpdkMx2Ubj8d31NyUC60wXJNiCv/6/eHbQqTejGOz1ovjMT9OxZ
|
||||
Kvii4IECgYEA1wpMlqGdUpqR0zddUpXJIrbg7Kkn4vmokzyR0uBVnhxGJ4cVKaqI
|
||||
VPeJZ7bTFfOm01fmdbEfkFezgwynodozuv2bJpUMqoLA4SAovDYNP1R6SVauAN0G
|
||||
wZUrJ9Qw3bytv7gG6hl+XR1zwL592Ny+HhQe99nB/4tX+33GumvP+vMCgYEA0jgS
|
||||
5puB7UPaO3f8WSP6aeNEdbXQ3DueWvmMPCNDGyBdJ8hUZQabfxvopDHUI5PF+m7P
|
||||
o58BSSyXMB7v1J8Mh99wPclWR313EyILIGD/EXFkxR8y4QJb31axNwFFe/1V73UP
|
||||
tUGZr99x8724x80oSrOiVaxG8bOfY/fXa+yOLOECgYBEdzD/XKF8ZV48g4og+zO4
|
||||
68UdVJYwfBCiIEzFeUuJNbNYbnfcdkFF3DJRZTI78QGSlI/5tNU53dJ3zRWqQJDr
|
||||
3kcBt776ovrKMrUFh6gcG8d7hi+MctLt25KL8dFFKAeh3PPGoStMdk4edggXfeDC
|
||||
LuHVQ+2ycSkoF1mojR8A5QKBgQCTK3CIA4x1R9BrW7fNzDNOmC3gXnYnCJH3TMdR
|
||||
frpHLmQpKsVyqKqJ1UcMVFoYwiaTCarR+MpUqSP7K11ptCN4qAOTLfX6PKr1ORsj
|
||||
AuTvGDydCBd9kUIyXCXaxUgY4qWb648grRlkGAFVy5emQUmY6qOWaPKN2duXh/ZH
|
||||
dyed4QKBgBa7WHA1b9PS/1Yee6tFtNXo9eND3pqr/EUbBbpGtHvoTjVTpNLaRTg3
|
||||
WErBo3RAFY0ewnFf64yUfEXn8Be9Nee/kd9zueGasBy8q9lTeLWHpmfF3QBRjw4d
|
||||
CIRTmpfD8jVrkGkC/2nHl4/XsEWnR3xU4zxSzo/xOBcn+fy30LjL
|
||||
-----END RSA PRIVATE KEY-----
|
||||
@@ -1,86 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFFTCCA/2gAwIBAgISBl4Zv5KpCW3fXoiaYEmV+l25MA0GCSqGSIb3DQEBCwUA
|
||||
MDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQwwCgYDVQQD
|
||||
EwNSMTMwHhcNMjUxMjE4MDgwMDU0WhcNMjYwMzE4MDgwMDUzWjAkMSIwIAYDVQQD
|
||||
ExluZXh0Y2xvdWQuZ3lvemFtYW5jYXZlLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOC
|
||||
AQ8AMIIBCgKCAQEAvhIVrARcKIV2NlLJ7sb8bniyuQz3P3yy9vctQ+efBM2Mwi4Q
|
||||
DVRi7UwhsbXp8WuudHwjTaINhrnkOSumq+jV7MmT6Hdg62Twl1K0Ujj/oqsuda5I
|
||||
RwPW5Uzvxk14Muy8qp57dm8Z+7Ak9VOihKraGxXnfSy6+W2UHZd+RdLDpdnvK9vo
|
||||
onW5o/vcqb/XvAqzpL07bnjB8ZzkfekwD5YIfeqh135ckoDwslzJz4eypJind0WR
|
||||
CpESnpi23QcfiFLjYWfq3TlNit3R9f80cjtWUr6hmS3pQ3m1FrxxQfQMod1X5nbR
|
||||
0V2SotOC37/RIHIWqodL9ZY5Ose970tvc/Vq2wIDAQABo4ICMDCCAiwwDgYDVR0P
|
||||
AQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMB
|
||||
Af8EAjAAMB0GA1UdDgQWBBSShwO3Esa0LiavwOdo4QfpbneHaTAfBgNVHSMEGDAW
|
||||
gBTnq58PLDOgU9NeT3jIsoQOO9aSMzAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUH
|
||||
MAKGF2h0dHA6Ly9yMTMuaS5sZW5jci5vcmcvMCQGA1UdEQQdMBuCGW5leHRjbG91
|
||||
ZC5neW96YW1hbmNhdmUuZnIwEwYDVR0gBAwwCjAIBgZngQwBAgEwLgYDVR0fBCcw
|
||||
JTAjoCGgH4YdaHR0cDovL3IxMy5jLmxlbmNyLm9yZy81OC5jcmwwggELBgorBgEE
|
||||
AdZ5AgQCBIH8BIH5APcAfgAai51pSleYyJmgyoi99I/AtFZgzMNgDR9x9Gn/x9Gs
|
||||
owAAAZswr3mqAAgAAAUAJl9HdAQDAEcwRQIgdNs/tZWBjTuKprUvzmwh2zOAqJzY
|
||||
DqF/rpX+Ww4ne08CIQDMkSjdUQfBRXYqT/JiJL5fSmhhff/tonIlg+RwbTancQB1
|
||||
AGQRxGykEuyniRyiAi4AvKtPKAfUHjUnq+r+1QPJfc3wAAABmzCvgK0AAAQDAEYw
|
||||
RAIgMhF3ECu6NOMw6WH1YZJutj64MVfH9m5tTDBeR6W9/hACIFfHcZdUDw1y3328
|
||||
rx291s56EUCzmoB9R4rt/jVddkudMA0GCSqGSIb3DQEBCwUAA4IBAQAeCaYSTDEG
|
||||
nOfYg2ZVajMTaTX1g0lUrOrBWL2JOCpv7bdZJtaTSP4z54OiW00F9MuTwHw8tnEc
|
||||
dpnwC1E5e14Y3diBMV6D8vgayH/KOV3A/Yt8Zg/hr4wkg7qMVA86eUKXfz+63f8y
|
||||
bsu1neYYPY5tF+3BxM4IbV+F3YdjCXff+tIkKXRZYI2Vb8MZSBQWNNgZUebmn4ri
|
||||
TWff58Zi6r3VqqmPLCPwZluLphmguKKwEtKbd4HZd6BRQudCgc3rkGDmj8Ex9Wr6
|
||||
7qLu/H2dZgp7btmRsuMghEGlA/f+nAEQNinJSPJzg3hkQKmZmcUHXRhWdhCsjSZ0
|
||||
O1w9RT6GYQCz
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFBTCCAu2gAwIBAgIQWgDyEtjUtIDzkkFX6imDBTANBgkqhkiG9w0BAQsFADBP
|
||||
MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy
|
||||
Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNDAzMTMwMDAwMDBa
|
||||
Fw0yNzAzMTIyMzU5NTlaMDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBF
|
||||
bmNyeXB0MQwwCgYDVQQDEwNSMTMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
|
||||
AoIBAQClZ3CN0FaBZBUXYc25BtStGZCMJlA3mBZjklTb2cyEBZPs0+wIG6BgUUNI
|
||||
fSvHSJaetC3ancgnO1ehn6vw1g7UDjDKb5ux0daknTI+WE41b0VYaHEX/D7YXYKg
|
||||
L7JRbLAaXbhZzjVlyIuhrxA3/+OcXcJJFzT/jCuLjfC8cSyTDB0FxLrHzarJXnzR
|
||||
yQH3nAP2/Apd9Np75tt2QnDr9E0i2gB3b9bJXxf92nUupVcM9upctuBzpWjPoXTi
|
||||
dYJ+EJ/B9aLrAek4sQpEzNPCifVJNYIKNLMc6YjCR06CDgo28EdPivEpBHXazeGa
|
||||
XP9enZiVuppD0EqiFwUBBDDTMrOPAgMBAAGjgfgwgfUwDgYDVR0PAQH/BAQDAgGG
|
||||
MB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATASBgNVHRMBAf8ECDAGAQH/
|
||||
AgEAMB0GA1UdDgQWBBTnq58PLDOgU9NeT3jIsoQOO9aSMzAfBgNVHSMEGDAWgBR5
|
||||
tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAKG
|
||||
Fmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0gBAwwCjAIBgZngQwBAgEwJwYD
|
||||
VR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVuY3Iub3JnLzANBgkqhkiG9w0B
|
||||
AQsFAAOCAgEAUTdYUqEimzW7TbrOypLqCfL7VOwYf/Q79OH5cHLCZeggfQhDconl
|
||||
k7Kgh8b0vi+/XuWu7CN8n/UPeg1vo3G+taXirrytthQinAHGwc/UdbOygJa9zuBc
|
||||
VyqoH3CXTXDInT+8a+c3aEVMJ2St+pSn4ed+WkDp8ijsijvEyFwE47hulW0Ltzjg
|
||||
9fOV5Pmrg/zxWbRuL+k0DBDHEJennCsAen7c35Pmx7jpmJ/HtgRhcnz0yjSBvyIw
|
||||
6L1QIupkCv2SBODT/xDD3gfQQyKv6roV4G2EhfEyAsWpmojxjCUCGiyg97FvDtm/
|
||||
NK2LSc9lybKxB73I2+P2G3CaWpvvpAiHCVu30jW8GCxKdfhsXtnIy2imskQqVZ2m
|
||||
0Pmxobb28Tucr7xBK7CtwvPrb79os7u2XP3O5f9b/H66GNyRrglRXlrYjI1oGYL/
|
||||
f4I1n/Sgusda6WvA6C190kxjU15Y12mHU4+BxyR9cx2hhGS9fAjMZKJss28qxvz6
|
||||
Axu4CaDmRNZpK/pQrXF17yXCXkmEWgvSOEZy6Z9pcbLIVEGckV/iVeq0AOo2pkg9
|
||||
p4QRIy0tK2diRENLSF2KysFwbY6B26BFeFs3v1sYVRhFW9nLkOrQVporCS0KyZmf
|
||||
wVD89qSTlnctLcZnIavjKsKUu1nA1iU0yYMdYepKR7lWbnwhdx3ewok=
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
MIIEowIBAAKCAQEAvhIVrARcKIV2NlLJ7sb8bniyuQz3P3yy9vctQ+efBM2Mwi4Q
|
||||
DVRi7UwhsbXp8WuudHwjTaINhrnkOSumq+jV7MmT6Hdg62Twl1K0Ujj/oqsuda5I
|
||||
RwPW5Uzvxk14Muy8qp57dm8Z+7Ak9VOihKraGxXnfSy6+W2UHZd+RdLDpdnvK9vo
|
||||
onW5o/vcqb/XvAqzpL07bnjB8ZzkfekwD5YIfeqh135ckoDwslzJz4eypJind0WR
|
||||
CpESnpi23QcfiFLjYWfq3TlNit3R9f80cjtWUr6hmS3pQ3m1FrxxQfQMod1X5nbR
|
||||
0V2SotOC37/RIHIWqodL9ZY5Ose970tvc/Vq2wIDAQABAoIBAA1mIPj7ZbPFlMvH
|
||||
kkyu4mS3RYIeE9/53nPigOJklaU1CFM4BBGsfTzVPRrWBCPsv2OezK5QWjvBJwGQ
|
||||
vjMoOsxyeWbN45s0hnFkdynEsuC4yJGrM5UuBBwuDEkidPLCFZrBiVqUAnTnufNB
|
||||
bheEI9P8+1CrspKa0vIzF8e8T+aFE2ZHhTKQP612apuQ5fzvPK1hCy5xO0JPHsKr
|
||||
e8UWCiV7ykPkH+k4M06L1GQFpI9wY0wFc49SFwjbFcBQA+G3bGp6dRS2HfHwGQsS
|
||||
UoV+FtUyXIbxz2yFyuXUpZJ6l4D+lXLQEoNS0+mSPS3jB6Bbm3avcLcZIzzv3vJu
|
||||
MlUMsqECgYEA4uahtD0YEG2bFPTbTEqdGIkhkiIFvCr/KzxlUJK1cGAU6qqQ0Yjq
|
||||
cPmhUjqSnD39i2MuSZwfM+wnZ1nPR759qltlmKKDD4ubuzEl/M0pWFAh0VSclW4d
|
||||
RrvT2xaCt/Zz6RPiIeHHwM5wHqJ5UQKfuGtpfNHPhr5le84a3NKiaGUCgYEA1nJH
|
||||
+cQmWOHQtPqEQ8ALU+z3nOo82M6vZV/6UWG8gjM6IngnoATtWsa+aEvsaTxw2HQ+
|
||||
T8+n0h8nIv7MVZY6ZXf/PhsPo7qoGiO/axOjJtUb8Th4Jn0UNPhNPxyVWVjYHrs5
|
||||
S8kqlfafv4zVmWr/JnySpjdmX7KDu69sJyySMj8CgYBjf+WbR0s9MQNXvkRIgVPA
|
||||
haoODhNbv7Mj/5kiKyObgtbJTUCyUgsUvbMrfvn5wAlmTXjn2KmqOD3TSYPnHza2
|
||||
NNwpgeJdN8hz3wqcgE9IJeOeiy8bLC10bjtqEMYD6/RKWmjImNzixORP2sm+Z5so
|
||||
4RliHhOWL/oKv4fyHAASLQKBgEtIPUpKeOfVBm6yT4J1RcTFuLuGY6v9Cwf8pKSz
|
||||
Ofk/QJZfNhHwCN9ITAnTNYBQLpFeZY2hKZoTQ6r+Zf9ZyNBcSuejml7xJRhgGk/d
|
||||
yfXU9IU/PLbOTCy4Sm3we+Gs1docAeZADcotlTEqoMXGESKSsuzVIARSZ/qYf9BU
|
||||
zlIDAoGBAIVUU5DufsC0esdxhhDY5mAY2GBdyuqG70JFIRm2vRQpFoUfDR7y8l79
|
||||
22/Qd0DgTVjQ1kWmgOUz/5T5oT4ju6zt1ODzPpvrPHcwruAmNaqYWMv2jw3c1njI
|
||||
azSxkkueORLGCVpxIixcVctjPigfZBfvuNrCxJLKmF9Dwd9DqO5x
|
||||
-----END RSA PRIVATE KEY-----
|
||||
@@ -1,53 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDnzCCAyagAwIBAgISBt22Sh8i6Gam9yW1bpg0FqSLMAoGCCqGSM49BAMDMDIx
|
||||
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
|
||||
NjAeFw0yNTA4MTgyMjUzMTdaFw0yNTExMTYyMjUzMTZaMCQxIjAgBgNVBAMTGXBs
|
||||
YXVzaWJsZS5neW96YW1hbmNhdmUuZnIwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNC
|
||||
AARfPnh9MtauhJr78C7Srfyz3hhh6tMJaTEbaXPw8fmPPcD1NWFQsiVljV7AO9tD
|
||||
Xkl6tZgWxkzlZ4YTG3hdB28Jo4ICKDCCAiQwDgYDVR0PAQH/BAQDAgeAMB0GA1Ud
|
||||
JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQW
|
||||
BBRjuoW/PybowuNTIysjd9HwTPwKXjAfBgNVHSMEGDAWgBSTJ0aYA6lRaI6Y1sRC
|
||||
SNsjv1iU0jAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly9lNi5p
|
||||
LmxlbmNyLm9yZy8wJAYDVR0RBB0wG4IZcGxhdXNpYmxlLmd5b3phbWFuY2F2ZS5m
|
||||
cjATBgNVHSAEDDAKMAgGBmeBDAECATAtBgNVHR8EJjAkMCKgIKAehhxodHRwOi8v
|
||||
ZTYuYy5sZW5jci5vcmcvMTIuY3JsMIIBBQYKKwYBBAHWeQIEAgSB9gSB8wDxAHcA
|
||||
DeHyMCvTDcFAYhIJ6lUu/Ed0fLHX6TDvDkIetH5OqjQAAAGYv5ih/gAABAMASDBG
|
||||
AiEA8II4kvBrbJTNJJS3jB6zVfXzCsJmdvV02LVFwPzsDwQCIQCAFlmdkkdS/zaS
|
||||
8ckrSA99y+fXkIPR9TwjY2FxrZxsqQB2AMz7D2qFcQll/pWbU87psnwi6YVcDZeN
|
||||
tql+VMD+TA2wAAABmL+YoiIAAAQDAEcwRQIhAO9AitWJLl5mKEFzK/7PuA7sUN3H
|
||||
1UfytoQ9cUQ77zj9AiBs4nkVvllaut3/oFMLBg69RI/HYs37hTnppOCpPOQ/JTAK
|
||||
BggqhkjOPQQDAwNnADBkAjAgkQkgEuh8NOv1Zvmitg8d4Ccex6X2GARTEnQEy4AQ
|
||||
H9lCmJrZrf8ad8iY4C0ULtwCMHJn3ND5cUs+ZCN1qw6dxbl2WFdkyRuCQeJ+vKIK
|
||||
EUu9Yru4R8VQjUqwiWf4qBhbYg==
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIEVzCCAj+gAwIBAgIRALBXPpFzlydw27SHyzpFKzgwDQYJKoZIhvcNAQELBQAw
|
||||
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
|
||||
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw
|
||||
WhcNMjcwMzEyMjM1OTU5WjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
|
||||
RW5jcnlwdDELMAkGA1UEAxMCRTYwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATZ8Z5G
|
||||
h/ghcWCoJuuj+rnq2h25EqfUJtlRFLFhfHWWvyILOR/VvtEKRqotPEoJhC6+QJVV
|
||||
6RlAN2Z17TJOdwRJ+HB7wxjnzvdxEP6sdNgA1O1tHHMWMxCcOrLqbGL0vbijgfgw
|
||||
gfUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD
|
||||
ATASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSTJ0aYA6lRaI6Y1sRCSNsj
|
||||
v1iU0jAfBgNVHSMEGDAWgBR5tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcB
|
||||
AQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0g
|
||||
BAwwCjAIBgZngQwBAgEwJwYDVR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVu
|
||||
Y3Iub3JnLzANBgkqhkiG9w0BAQsFAAOCAgEAfYt7SiA1sgWGCIpunk46r4AExIRc
|
||||
MxkKgUhNlrrv1B21hOaXN/5miE+LOTbrcmU/M9yvC6MVY730GNFoL8IhJ8j8vrOL
|
||||
pMY22OP6baS1k9YMrtDTlwJHoGby04ThTUeBDksS9RiuHvicZqBedQdIF65pZuhp
|
||||
eDcGBcLiYasQr/EO5gxxtLyTmgsHSOVSBcFOn9lgv7LECPq9i7mfH3mpxgrRKSxH
|
||||
pOoZ0KXMcB+hHuvlklHntvcI0mMMQ0mhYj6qtMFStkF1RpCG3IPdIwpVCQqu8GV7
|
||||
s8ubknRzs+3C/Bm19RFOoiPpDkwvyNfvmQ14XkyqqKK5oZ8zhD32kFRQkxa8uZSu
|
||||
h4aTImFxknu39waBxIRXE4jKxlAmQc4QjFZoq1KmQqQg0J/1JF8RlFvJas1VcjLv
|
||||
YlvUB2t6npO6oQjB3l+PNf0DpQH7iUx3Wz5AjQCi6L25FjyE06q6BZ/QlmtYdl/8
|
||||
ZYao4SRqPEs/6cAiF+Qf5zg2UkaWtDphl1LKMuTNLotvsX99HP69V2faNyegodQ0
|
||||
LyTApr/vT01YPE46vNsDLgK+4cL6TrzC/a4WcmF5SRJ938zrv/duJHLXQIku5v0+
|
||||
EwOy59Hdm0PT/Er/84dDV0CSjdR/2XuZM3kpysSKLgD1cKiDA+IRguODCxfO9cyY
|
||||
Ig46v9mFmBvyH04=
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN EC PRIVATE KEY-----
|
||||
MHcCAQEEIEkSxLTZjOYdt4jCC2x1ZU62bHdODKe3joNRQJoHMjI8oAoGCCqGSM49
|
||||
AwEHoUQDQgAEXz54fTLWroSa+/Au0q38s94YYerTCWkxG2lz8PH5jz3A9TVhULIl
|
||||
ZY1ewDvbQ15JerWYFsZM5WeGExt4XQdvCQ==
|
||||
-----END EC PRIVATE KEY-----
|
||||
@@ -1,86 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFDzCCA/egAwIBAgISBtZ5wu4XNsa042op5FYwBbDfMA0GCSqGSIb3DQEBCwUA
|
||||
MDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQwwCgYDVQQD
|
||||
EwNSMTMwHhcNMjUxMjE4MDgwMTAxWhcNMjYwMzE4MDgwMTAwWjAhMR8wHQYDVQQD
|
||||
ExZwb3N0aXouZ3lvemFtYW5jYXZlLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
|
||||
MIIBCgKCAQEArJ4ANv6XVESnXFW3xfqKtPNN8D6tsZ/2rxx30gVkmsUx25qB3wc1
|
||||
U1pOn3JHoZGM1T5n0czapBUWTnCZXW69PCLIQFNUMaJcOXknLjAqyHPJTuAEM+cX
|
||||
DI4xdm/xGxh2M/6tYSL/SHKaz+/kLNVm4XUcCAIPW1S7a9Ie8wPcAmf+1m67jIjv
|
||||
1lEXkTkXBGeA+o4J+YfWDoTG+wwiraRixGXizdbfewW3C0vC/BQG+Cz/OUwbWGfk
|
||||
TshKpKdpmu9dOl19uGn84QJKXVN1Byl+i6kNvtOwdTRxlRPaIpXgKHc4nEKW+Iba
|
||||
4WTtgof99n58U5ef32n9pqbVflvNJy7rbQIDAQABo4ICLTCCAikwDgYDVR0PAQH/
|
||||
BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8E
|
||||
AjAAMB0GA1UdDgQWBBQ7PdOF8+uGN7IB3y1WNXcVRhwbiDAfBgNVHSMEGDAWgBTn
|
||||
q58PLDOgU9NeT3jIsoQOO9aSMzAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAKG
|
||||
F2h0dHA6Ly9yMTMuaS5sZW5jci5vcmcvMCEGA1UdEQQaMBiCFnBvc3Rpei5neW96
|
||||
YW1hbmNhdmUuZnIwEwYDVR0gBAwwCjAIBgZngQwBAgEwLgYDVR0fBCcwJTAjoCGg
|
||||
H4YdaHR0cDovL3IxMy5jLmxlbmNyLm9yZy85Ni5jcmwwggELBgorBgEEAdZ5AgQC
|
||||
BIH8BIH5APcAdgCWl2S/VViXrfdDh2g3CEJ36fA61fak8zZuRqQ/D8qpxgAAAZsw
|
||||
r5LOAAAEAwBHMEUCIE9mG9J2uEWAcCkhdTFpk0+DPwy2gwNE24YfPZvfW/52AiEA
|
||||
lfXtQkQA9c/TBiPoZLzpPj0SU5ZjocG58EKwJSIR9J0AfQDjI43yjaKI4KrgrPD6
|
||||
kMmF8La/9dKlJ7AB/BxEWMS26AAAAZswr5NEAAgAAAUALHlCWgQDAEYwRAIgA9bW
|
||||
f0EDovPgt9k/btsnfqHifQUGgNRW+JFHpZEdb/kCIGpFm/vs4056XLQv+vHdF6Oh
|
||||
Sjdz8BmCLqHTg1bme9teMA0GCSqGSIb3DQEBCwUAA4IBAQAedjykzPLujZSZWL2g
|
||||
uSYF2zHsETr5ZLMiuo6W+HBvREWzjPgDIDcWmTVKEENsEtCyC0a7MBvq8xtfiDqv
|
||||
P+l7r0yVoq7r9yJYS3OUH+ttPxP2P2ZpYOMT4nYYSa03Xzaoegwj3G5cWqsd9Ven
|
||||
oTpw4T7d3yJG3ZfRQdd5yV3zALvzES39bc5GdCaK1J2EMFQfrg1luSjosimDL7UA
|
||||
wO7rny9Cfw0Nmq4yEdjKNWAL2kIi/TWBBZN8Nf9KWVOdGlWmzQhYAPhJ3rU1i818
|
||||
4OIAwH2PYnld54JiJmij5U7hvP8Nkk/D1BGijaJQjpTEhJueHb5nCwPBV9Yj3JLa
|
||||
X58Z
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFBTCCAu2gAwIBAgIQWgDyEtjUtIDzkkFX6imDBTANBgkqhkiG9w0BAQsFADBP
|
||||
MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy
|
||||
Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNDAzMTMwMDAwMDBa
|
||||
Fw0yNzAzMTIyMzU5NTlaMDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBF
|
||||
bmNyeXB0MQwwCgYDVQQDEwNSMTMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
|
||||
AoIBAQClZ3CN0FaBZBUXYc25BtStGZCMJlA3mBZjklTb2cyEBZPs0+wIG6BgUUNI
|
||||
fSvHSJaetC3ancgnO1ehn6vw1g7UDjDKb5ux0daknTI+WE41b0VYaHEX/D7YXYKg
|
||||
L7JRbLAaXbhZzjVlyIuhrxA3/+OcXcJJFzT/jCuLjfC8cSyTDB0FxLrHzarJXnzR
|
||||
yQH3nAP2/Apd9Np75tt2QnDr9E0i2gB3b9bJXxf92nUupVcM9upctuBzpWjPoXTi
|
||||
dYJ+EJ/B9aLrAek4sQpEzNPCifVJNYIKNLMc6YjCR06CDgo28EdPivEpBHXazeGa
|
||||
XP9enZiVuppD0EqiFwUBBDDTMrOPAgMBAAGjgfgwgfUwDgYDVR0PAQH/BAQDAgGG
|
||||
MB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATASBgNVHRMBAf8ECDAGAQH/
|
||||
AgEAMB0GA1UdDgQWBBTnq58PLDOgU9NeT3jIsoQOO9aSMzAfBgNVHSMEGDAWgBR5
|
||||
tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAKG
|
||||
Fmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0gBAwwCjAIBgZngQwBAgEwJwYD
|
||||
VR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVuY3Iub3JnLzANBgkqhkiG9w0B
|
||||
AQsFAAOCAgEAUTdYUqEimzW7TbrOypLqCfL7VOwYf/Q79OH5cHLCZeggfQhDconl
|
||||
k7Kgh8b0vi+/XuWu7CN8n/UPeg1vo3G+taXirrytthQinAHGwc/UdbOygJa9zuBc
|
||||
VyqoH3CXTXDInT+8a+c3aEVMJ2St+pSn4ed+WkDp8ijsijvEyFwE47hulW0Ltzjg
|
||||
9fOV5Pmrg/zxWbRuL+k0DBDHEJennCsAen7c35Pmx7jpmJ/HtgRhcnz0yjSBvyIw
|
||||
6L1QIupkCv2SBODT/xDD3gfQQyKv6roV4G2EhfEyAsWpmojxjCUCGiyg97FvDtm/
|
||||
NK2LSc9lybKxB73I2+P2G3CaWpvvpAiHCVu30jW8GCxKdfhsXtnIy2imskQqVZ2m
|
||||
0Pmxobb28Tucr7xBK7CtwvPrb79os7u2XP3O5f9b/H66GNyRrglRXlrYjI1oGYL/
|
||||
f4I1n/Sgusda6WvA6C190kxjU15Y12mHU4+BxyR9cx2hhGS9fAjMZKJss28qxvz6
|
||||
Axu4CaDmRNZpK/pQrXF17yXCXkmEWgvSOEZy6Z9pcbLIVEGckV/iVeq0AOo2pkg9
|
||||
p4QRIy0tK2diRENLSF2KysFwbY6B26BFeFs3v1sYVRhFW9nLkOrQVporCS0KyZmf
|
||||
wVD89qSTlnctLcZnIavjKsKUu1nA1iU0yYMdYepKR7lWbnwhdx3ewok=
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
MIIEpAIBAAKCAQEArJ4ANv6XVESnXFW3xfqKtPNN8D6tsZ/2rxx30gVkmsUx25qB
|
||||
3wc1U1pOn3JHoZGM1T5n0czapBUWTnCZXW69PCLIQFNUMaJcOXknLjAqyHPJTuAE
|
||||
M+cXDI4xdm/xGxh2M/6tYSL/SHKaz+/kLNVm4XUcCAIPW1S7a9Ie8wPcAmf+1m67
|
||||
jIjv1lEXkTkXBGeA+o4J+YfWDoTG+wwiraRixGXizdbfewW3C0vC/BQG+Cz/OUwb
|
||||
WGfkTshKpKdpmu9dOl19uGn84QJKXVN1Byl+i6kNvtOwdTRxlRPaIpXgKHc4nEKW
|
||||
+Iba4WTtgof99n58U5ef32n9pqbVflvNJy7rbQIDAQABAoIBAE8qXW3bYDrpC5p4
|
||||
w4I8T+4CIe37SPzMIL4Zv8gl6ghjROTy3PoU27uBEMrmhfyO/Lh12PZqzaFv/F14
|
||||
HZYwqgAQ8acysEvdKw++xR3VQGHTXHFcowDMzJDZC81GNJ0ZIGjjNc/1VX/7841G
|
||||
924qZvcilvsDOtjHqPcflEseq4G8P1+b/eRPoNrInfaCadGg7yZahyoq7j+rdPzW
|
||||
1AM5txFdZ/mWeuz+2AXoO8npGQv0vNLppQH97eB6EtA9kl7Ia229+NkYhiX16DHn
|
||||
A1MpEvlSoyk6sa0r9PqC+O3txaetosXMCEk+70s1GgnBByuAvrx4VWR4wpMrdWJc
|
||||
ZpecKB8CgYEA6KVJsk0NxDfQDOYpjrn7T5bDcmkL/td+YQCR0WLDdRJrmbXqyUwT
|
||||
Ud7CgcutEACU144Kus7E2lyHNF7Y0IAUcgRz+5xIkLB2dzpQ4u/ksdDBxXhEK1Wl
|
||||
mzign0qEsSFnxxscWbLBNEQAA98jfbXGQCApSNsDC0aGKXuGYgCvAusCgYEAvfIN
|
||||
0WbaJkm/rP1cLTx6SEyDGQV0hmkYrevl1A3D3oeNotPSlN2UMIWuIgKisDarxsMf
|
||||
AIId2/zgMAN2adBaF8sBAbYMMgigCyGNQ6qcOW28X1H/DxvbJqh+MBd+YhkCDxIa
|
||||
QlIomaM0MQ+tNrkG8y9AsDqeHxRARC/S5u+1xQcCgYEAuToYcgidZFOXpx19ivCS
|
||||
oayEkkwGy/Eg4vSEJLTAsC5pUyme9IRIgY+dR6A1ex8rYm/qJQ/JdZ3j3BOEBoVj
|
||||
QeA/w92LfP+yYn0gt36Ok/CExsdZZzM6tlogsJKxESJqsQDp0pTa9NULOgnoBQe7
|
||||
/4RbunD9fHW7Db4WoWKv9N8CgYEAqGNUkqX+kODiVsaJF+U8dqm1stHeOmYjJdQx
|
||||
/Cpz0OwUyRvF3IkOnXF1LNtvRI5C/ELwUfAH7oUgbhAzwpydsegarVypNRXmY9fL
|
||||
twgh1NuOmmZDmi5UutG2hIXfWbHX3Gps8wyIx6MiWrgOE6w2GBJ044YjtWOrkYdg
|
||||
DbDGULMCgYAE+URU+e2i06NaKo2HiVR0QYEDb6m88bjJS+Q+5pYHhmWUTBG4ChaX
|
||||
WedsQj7TRrNTLP8wTWxqHULfHjO4FuseCF0nsPjSm4m812S3262LFbeAoyXrP/rd
|
||||
u93mblgvsdrfaoO2ZU6+KmwOQBpkj0EHWlEcX0DyceBcGxItJ981Vw==
|
||||
-----END RSA PRIVATE KEY-----
|
||||
@@ -1,85 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFBDCCA+ygAwIBAgISBlWRK7Pj2H5i4ZcTfiZicmSTMA0GCSqGSIb3DQEBCwUA
|
||||
MDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQwwCgYDVQQD
|
||||
EwNSMTMwHhcNMjUxMjE4MDgwMTA2WhcNMjYwMzE4MDgwMTA1WjAeMRwwGgYDVQQD
|
||||
ExNyc3MuZ3lvemFtYW5jYXZlLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
||||
CgKCAQEAqgEHsYHNPzD/gS4BlX6Rmskm5eH61UtOiA5vet5HKJR/g/uPcrpi3KeV
|
||||
2ikMyN+RJ/pDFeKKqYynP/viP4qpSU/gzlmhPJBLi8dMiwyqhpuQtfooEAnXz6Tf
|
||||
I58YPkHqMxG5xMgpXjDKj/c+9cfhfe6TFwIBJthOHK5JGiUnmEWI66OFET95adl/
|
||||
W6xWbCVzXwVamYrf2g4M+Do89Hd8amUzBdosVic/usHim75VKcjdHBPRaSPil+tH
|
||||
5LWfY7KQg0Ln72A79upfgZlKWOPdYIHWxa0TAsBcA01q8wMB4ydosz6HwtG3L97N
|
||||
k5mYioxYtj6hyEHcHtyPIogY89HEUwIDAQABo4ICJTCCAiEwDgYDVR0PAQH/BAQD
|
||||
AgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAA
|
||||
MB0GA1UdDgQWBBRBUDDkWxeGCHRWPX1uCj5z1GyPZTAfBgNVHSMEGDAWgBTnq58P
|
||||
LDOgU9NeT3jIsoQOO9aSMzAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAKGF2h0
|
||||
dHA6Ly9yMTMuaS5sZW5jci5vcmcvMB4GA1UdEQQXMBWCE3Jzcy5neW96YW1hbmNh
|
||||
dmUuZnIwEwYDVR0gBAwwCjAIBgZngQwBAgEwLgYDVR0fBCcwJTAjoCGgH4YdaHR0
|
||||
cDovL3IxMy5jLmxlbmNyLm9yZy8yMC5jcmwwggEGBgorBgEEAdZ5AgQCBIH3BIH0
|
||||
APIAdwAWgy2r8KklDw/wOqVF/8i/yCPQh0v2BCkn+OcfMxP1+gAAAZswr6XfAAAE
|
||||
AwBIMEYCIQCQhE2bfbwdBGaA3PW9A4PZn8nx9uuUs7WZczz/Gp0oygIhAOb9PfB9
|
||||
S/hp/DEOyMtaKHaf09SrQhSMgCmKXGHqaBcNAHcAlpdkv1VYl633Q4doNwhCd+nw
|
||||
OtX2pPM2bkakPw/KqcYAAAGbMK+mCQAABAMASDBGAiEA9dmF0lOWq5WEx62Xcc7Y
|
||||
xJKB/RQArlhxAyaHwBOe5Z0CIQDnxD9IT9qIpruvXdlDCxGJzCLYMSOQbtCQLk8K
|
||||
3kpmnTANBgkqhkiG9w0BAQsFAAOCAQEAjgcsHNBZUTj6zYkLT/EzSUqizyos6xQI
|
||||
INm+935O3ODZ9cF3SHcqsrizkSY7feH6t8hRhRFCsmGkWmefaiprqQ8+3L6gxvwj
|
||||
qPFqte4i8w0y/Zjv6pSdmunyi6RUZeeglkxqdHnFTJ088fKmRcmOuDkWmuk3hTKP
|
||||
emVDrwA4fXN+VwT8ekvrU9GrReZTgUp1tZl5pdlcr261QDkjT2PCLpy8SNKkdy1s
|
||||
HjRUsfcB8XlqDUnwoM9uMWjY2iYptVMpRCZKd8MP9tiv796Xnu8m00dPVcTt21js
|
||||
yn1iEW6TCF/tUp1o1tGoOgoGs4r4RSBwBIfF/tw3XLRpeL09BnsSlQ==
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFBTCCAu2gAwIBAgIQWgDyEtjUtIDzkkFX6imDBTANBgkqhkiG9w0BAQsFADBP
|
||||
MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy
|
||||
Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNDAzMTMwMDAwMDBa
|
||||
Fw0yNzAzMTIyMzU5NTlaMDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBF
|
||||
bmNyeXB0MQwwCgYDVQQDEwNSMTMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
|
||||
AoIBAQClZ3CN0FaBZBUXYc25BtStGZCMJlA3mBZjklTb2cyEBZPs0+wIG6BgUUNI
|
||||
fSvHSJaetC3ancgnO1ehn6vw1g7UDjDKb5ux0daknTI+WE41b0VYaHEX/D7YXYKg
|
||||
L7JRbLAaXbhZzjVlyIuhrxA3/+OcXcJJFzT/jCuLjfC8cSyTDB0FxLrHzarJXnzR
|
||||
yQH3nAP2/Apd9Np75tt2QnDr9E0i2gB3b9bJXxf92nUupVcM9upctuBzpWjPoXTi
|
||||
dYJ+EJ/B9aLrAek4sQpEzNPCifVJNYIKNLMc6YjCR06CDgo28EdPivEpBHXazeGa
|
||||
XP9enZiVuppD0EqiFwUBBDDTMrOPAgMBAAGjgfgwgfUwDgYDVR0PAQH/BAQDAgGG
|
||||
MB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATASBgNVHRMBAf8ECDAGAQH/
|
||||
AgEAMB0GA1UdDgQWBBTnq58PLDOgU9NeT3jIsoQOO9aSMzAfBgNVHSMEGDAWgBR5
|
||||
tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAKG
|
||||
Fmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0gBAwwCjAIBgZngQwBAgEwJwYD
|
||||
VR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVuY3Iub3JnLzANBgkqhkiG9w0B
|
||||
AQsFAAOCAgEAUTdYUqEimzW7TbrOypLqCfL7VOwYf/Q79OH5cHLCZeggfQhDconl
|
||||
k7Kgh8b0vi+/XuWu7CN8n/UPeg1vo3G+taXirrytthQinAHGwc/UdbOygJa9zuBc
|
||||
VyqoH3CXTXDInT+8a+c3aEVMJ2St+pSn4ed+WkDp8ijsijvEyFwE47hulW0Ltzjg
|
||||
9fOV5Pmrg/zxWbRuL+k0DBDHEJennCsAen7c35Pmx7jpmJ/HtgRhcnz0yjSBvyIw
|
||||
6L1QIupkCv2SBODT/xDD3gfQQyKv6roV4G2EhfEyAsWpmojxjCUCGiyg97FvDtm/
|
||||
NK2LSc9lybKxB73I2+P2G3CaWpvvpAiHCVu30jW8GCxKdfhsXtnIy2imskQqVZ2m
|
||||
0Pmxobb28Tucr7xBK7CtwvPrb79os7u2XP3O5f9b/H66GNyRrglRXlrYjI1oGYL/
|
||||
f4I1n/Sgusda6WvA6C190kxjU15Y12mHU4+BxyR9cx2hhGS9fAjMZKJss28qxvz6
|
||||
Axu4CaDmRNZpK/pQrXF17yXCXkmEWgvSOEZy6Z9pcbLIVEGckV/iVeq0AOo2pkg9
|
||||
p4QRIy0tK2diRENLSF2KysFwbY6B26BFeFs3v1sYVRhFW9nLkOrQVporCS0KyZmf
|
||||
wVD89qSTlnctLcZnIavjKsKUu1nA1iU0yYMdYepKR7lWbnwhdx3ewok=
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
MIIEogIBAAKCAQEAqgEHsYHNPzD/gS4BlX6Rmskm5eH61UtOiA5vet5HKJR/g/uP
|
||||
crpi3KeV2ikMyN+RJ/pDFeKKqYynP/viP4qpSU/gzlmhPJBLi8dMiwyqhpuQtfoo
|
||||
EAnXz6TfI58YPkHqMxG5xMgpXjDKj/c+9cfhfe6TFwIBJthOHK5JGiUnmEWI66OF
|
||||
ET95adl/W6xWbCVzXwVamYrf2g4M+Do89Hd8amUzBdosVic/usHim75VKcjdHBPR
|
||||
aSPil+tH5LWfY7KQg0Ln72A79upfgZlKWOPdYIHWxa0TAsBcA01q8wMB4ydosz6H
|
||||
wtG3L97Nk5mYioxYtj6hyEHcHtyPIogY89HEUwIDAQABAoIBAEvd/8/wrGb599xv
|
||||
apeLj3EzOZ+3lJghbl97ibacgccTVkDRP/gkQ8BTLaXZUfJHC2F65vtaSSVXNsBw
|
||||
KUzQFbI46otMJo9/mac8fuVC9srxm8gKZlyZ9+ybmFUuR8Ro6Bp4W5388bEuNwe+
|
||||
gCNxWyk3Ef9fjqIGP/2+rbL0R9JE41BX/8CFhNSYHTLAHVCnbvxj7ejpqAT8J8tR
|
||||
rTaO0eLuQ4axXsCMs4lSESVTUjC5LPsWIYd6QG7juMTcS+Lu70tqQiV7cwH38gb3
|
||||
/hXD8Un9wF36N9GRrzbqZQUXIkEsSZQiKfwi8wGbh3dZpJAriBfCEw3CEGwZgEi8
|
||||
9sk+rgECgYEA3NIgsBLGB9m1Q6KzqujDH09JD156wKhy2t+wVzXDV97HiOzlJ0Vl
|
||||
/53fN7wDo0dsgqk6r49LGQuJyzWWy/yKbIutSVzmGtkbN6oQi45g643Illnz9oce
|
||||
usQl709o25QPGfFRnOqKZD2C5AVA8v4oYuptqq3a9UR+KdTBDYcdwQECgYEAxRZo
|
||||
5VuPf4grAoyFTe2ET5Be8KxW/KzJQY7tlwAmW3JTuTtbgVMArJbInUbsaFdBG5LC
|
||||
wQu7dyVkKOLb6TsjrKkDKuB4W2G5crmShZ5MuBa1Rk4h+XJHWlv/t+86HfkwG/x6
|
||||
DN2BNx/sMlsoVuUwbcEDeM6bwEJqrn6eBfg7MVMCgYAo0SZ9pVq5hMJ+uAph4xh+
|
||||
JxeoIZyrE/f3ATYFSMjM6z8SzkclVSyfbT0ffj9l5QPnuwRAA0qsXHeh+kvfdNTZ
|
||||
b5AeaW+XMt5XEbZxNWYw5EpZkFMKFLvXZf5lF9aYD+wirXqaeLgQA1a4c0goIlaw
|
||||
wgh3bh91Cq4PaWYt6/XSAQKBgANDTLdHXcfRvEyNgQN6RC+BB2FaqRID1k0kjaBr
|
||||
Wzc2XFZ7uhcZBbDVyjp4Wx+bGjPXqSvDAvaFAvR+VP+2f++y2J+UGcoBgy14Dwnx
|
||||
RfniPlwMnRlhH/dKAKDN8Btg7b/43RhrbmE4QRPQWImfv76BbIpKeV+kedmrtPgK
|
||||
VQiLAoGAECq3GR7e0wRebgf4uyWNvHmICkt8CucRQvwzDJczEJjP6UuR7Y3zwupL
|
||||
T9px3WZUtkRG3OFQDX5vG3wjhX17UJ/xeiXJbfXLLUbmMjWKr5C1ffs8ekSTVT/H
|
||||
BG1Zz8ArJKBLj2hoE+2MwcsCgwaJS+a3dEbBPTxJ+6cFpj10qCk=
|
||||
-----END RSA PRIVATE KEY-----
|
||||
@@ -1,53 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDnzCCAySgAwIBAgISBfaUuUkyN5RMJCH7spqDn/TGMAoGCCqGSM49BAMDMDIx
|
||||
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
|
||||
NzAeFw0yNTEyMTgwODM1MTFaFw0yNjAzMTgwODM1MTBaMCAxHjAcBgNVBAMTFXN0
|
||||
YXRzLmd5b3phbWFuY2F2ZS5mcjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFLU
|
||||
rEZ4GFJPhxQqFxmC1zP6zwIVGQShQHBqNOLvwDeVyC1a8WvmavGzP0yaosfDD8I0
|
||||
DHAQFCw/CdeO7XQbPNqjggIqMIICJjAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0lBBYw
|
||||
FAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFF3u
|
||||
+mnY7uQKid7XhZVZmFJCLANoMB8GA1UdIwQYMBaAFK5IntyHHUSgb9qi5WB0BHjC
|
||||
nACAMDIGCCsGAQUFBwEBBCYwJDAiBggrBgEFBQcwAoYWaHR0cDovL2U3LmkubGVu
|
||||
Y3Iub3JnLzAgBgNVHREEGTAXghVzdGF0cy5neW96YW1hbmNhdmUuZnIwEwYDVR0g
|
||||
BAwwCjAIBgZngQwBAgEwLQYDVR0fBCYwJDAioCCgHoYcaHR0cDovL2U3LmMubGVu
|
||||
Y3Iub3JnLzcxLmNybDCCAQsGCisGAQQB1nkCBAIEgfwEgfkA9wB1AGQRxGykEuyn
|
||||
iRyiAi4AvKtPKAfUHjUnq+r+1QPJfc3wAAABmzDO2ZoAAAQDAEYwRAIgQU5ghWBS
|
||||
0VVQpRkoGibtX/CoiuarA3XNoL3/Cj6WiRsCIDu/ZLDYk2j44lFGenzQkz/A8lVj
|
||||
7LhKdaK/ieMwRDZ9AH4Apcl4kl1XRheChw3YiWYLXFVki30AQPLsB2hR0YhpGfcA
|
||||
AAGbMM7kFgAIAAAFACwEsFoEAwBHMEUCIGL1HKKw6XLGXtmjKSPwN6v5FCqv3afY
|
||||
p7X+fLY+QtlvAiEAx/QDgRdBp+cZaINi+M3yjef+5/qUh1jEgTw3TDhEcUcwCgYI
|
||||
KoZIzj0EAwMDaQAwZgIxAJban5a9yE53vPKyOkYL8SmrKTzYCb23y2JTkC64ojKI
|
||||
JhkW/yfZcFqhXMCcWb1vhAIxANAOvjkt2Mb1TpZRpI+oaZ6YS1NDeFBf1ea7TVEB
|
||||
CS2LVEe+Qp25DhXbewzFklD44w==
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIEVzCCAj+gAwIBAgIRAKp18eYrjwoiCWbTi7/UuqEwDQYJKoZIhvcNAQELBQAw
|
||||
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
|
||||
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw
|
||||
WhcNMjcwMzEyMjM1OTU5WjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
|
||||
RW5jcnlwdDELMAkGA1UEAxMCRTcwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAARB6AST
|
||||
CFh/vjcwDMCgQer+VtqEkz7JANurZxLP+U9TCeioL6sp5Z8VRvRbYk4P1INBmbef
|
||||
QHJFHCxcSjKmwtvGBWpl/9ra8HW0QDsUaJW2qOJqceJ0ZVFT3hbUHifBM/2jgfgw
|
||||
gfUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD
|
||||
ATASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSuSJ7chx1EoG/aouVgdAR4
|
||||
wpwAgDAfBgNVHSMEGDAWgBR5tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcB
|
||||
AQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0g
|
||||
BAwwCjAIBgZngQwBAgEwJwYDVR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVu
|
||||
Y3Iub3JnLzANBgkqhkiG9w0BAQsFAAOCAgEAjx66fDdLk5ywFn3CzA1w1qfylHUD
|
||||
aEf0QZpXcJseddJGSfbUUOvbNR9N/QQ16K1lXl4VFyhmGXDT5Kdfcr0RvIIVrNxF
|
||||
h4lqHtRRCP6RBRstqbZ2zURgqakn/Xip0iaQL0IdfHBZr396FgknniRYFckKORPG
|
||||
yM3QKnd66gtMst8I5nkRQlAg/Jb+Gc3egIvuGKWboE1G89NTsN9LTDD3PLj0dUMr
|
||||
OIuqVjLB8pEC6yk9enrlrqjXQgkLEYhXzq7dLafv5Vkig6Gl0nuuqjqfp0Q1bi1o
|
||||
yVNAlXe6aUXw92CcghC9bNsKEO1+M52YY5+ofIXlS/SEQbvVYYBLZ5yeiglV6t3S
|
||||
M6H+vTG0aP9YHzLn/KVOHzGQfXDP7qM5tkf+7diZe7o2fw6O7IvN6fsQXEQQj8TJ
|
||||
UXJxv2/uJhcuy/tSDgXwHM8Uk34WNbRT7zGTGkQRX0gsbjAea/jYAoWv0ZvQRwpq
|
||||
Pe79D/i7Cep8qWnA+7AE/3B3S/3dEEYmc0lpe1366A/6GEgk3ktr9PEoQrLChs6I
|
||||
tu3wnNLB2euC8IKGLQFpGtOO/2/hiAKjyajaBP25w1jF0Wl8Bbqne3uZ2q1GyPFJ
|
||||
YRmT7/OXpmOH/FVLtwS+8ng1cAmpCujPwteJZNcDG0sF2n/sc0+SQf49fdyUK0ty
|
||||
+VUwFj9tmWxyR/M=
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN EC PRIVATE KEY-----
|
||||
MHcCAQEEIGTcWqNYGCSV6aqK3NyPk3r9cd8AX+o8IfPlpQ01irqroAoGCCqGSM49
|
||||
AwEHoUQDQgAEUtSsRngYUk+HFCoXGYLXM/rPAhUZBKFAcGo04u/AN5XILVrxa+Zq
|
||||
8bM/TJqix8MPwjQMcBAULD8J147tdBs82g==
|
||||
-----END EC PRIVATE KEY-----
|
||||
@@ -1,86 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFATCCA+mgAwIBAgISBRGEB/9zYGIh1R4ULnX4aPgIMA0GCSqGSIb3DQEBCwUA
|
||||
MDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQwwCgYDVQQD
|
||||
EwNSMTAwHhcNMjUwNzEzMjEwMTM5WhcNMjUxMDExMjEwMTM4WjAfMR0wGwYDVQQD
|
||||
ExR0dXJuLmd5b3phbWFuY2F2ZS5mcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
|
||||
AQoCggEBAMpCTP/vpe+MS6u9w4Ph9IxJst/reJcIFtxNi9saqmRDEGzQxKM7E9pb
|
||||
956SdgDH5VKyTxNmGRvRSbBfik0AF2pUCIysJSVX3a1kR5gZX0epgpSGJdwiQdjh
|
||||
t0W06EHzzK2nYFV38+uQ9n5K1jN7GlAeR9KEgMnWD8dKk3qDU237s7/H8gveCgpd
|
||||
FL5y7M2VMS1UHeARUP9JYx+BoT28a5+sLKW6ybIvAJgo6emwCn7rMpgk0jXf+P6Y
|
||||
uolOX3i12IQqzFqqrfhYQN7n/abhAWr6UbBPnL4AHmwbWEAdhz706RTFEl17+2MK
|
||||
e4Mlec5vmgmWsrXAT9czpd6/FEFwoPsCAwEAAaOCAiEwggIdMA4GA1UdDwEB/wQE
|
||||
AwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIw
|
||||
ADAdBgNVHQ4EFgQUhlQEwJlTsPCMjh8CYmGydmguSUMwHwYDVR0jBBgwFoAUu7zD
|
||||
R6XkvKnGw6RyDBCNojXhyOgwMwYIKwYBBQUHAQEEJzAlMCMGCCsGAQUFBzAChhdo
|
||||
dHRwOi8vcjEwLmkubGVuY3Iub3JnLzAfBgNVHREEGDAWghR0dXJuLmd5b3phbWFu
|
||||
Y2F2ZS5mcjATBgNVHSAEDDAKMAgGBmeBDAECATAtBgNVHR8EJjAkMCKgIKAehhxo
|
||||
dHRwOi8vcjEwLmMubGVuY3Iub3JnLzkuY3JsMIIBAgYKKwYBBAHWeQIEAgSB8wSB
|
||||
8ADuAHUApELFBklgYVSPD9TqnPt6LSZFTYepfy/fRVn2J086hFQAAAGYBc1+oAAA
|
||||
BAMARjBEAiA+gzq10/Z5j8bDFXNpWgALYpiy77/spjnFqdApjFGYQgIgfUen7a9F
|
||||
/bFzYTRW5a83AUM1M51KD1Wg1BNBUYHwYrcAdQAS8U40vVNyTIQGGcOPP3oT+Oe1
|
||||
YoeInG0wBYTr5YYmOgAAAZgFzY5AAAAEAwBGMEQCIDGnRlsv3YUYK/wN4RZMSbc0
|
||||
ts5sLTljCZ60OX+iX7fTAiA4KIV29bT6tXVO4Jtzkt4G3Uqm8FNrGQqUQnfbFYNw
|
||||
GzANBgkqhkiG9w0BAQsFAAOCAQEAe6GuvziT6Yv03LjAx0ylb4BoufelXnzqmCdP
|
||||
mBDvcp1Kxb+ICJbpRj9GMvb2l4GpDWANOt2Q6rThxtahoCjkVBp28NjPa5yQPXSF
|
||||
3QFgNd/QXalgW59lmYQzYF10ijckM/+2s774swGwuvOa6MJJkDESvIMP48WTRUP7
|
||||
VyDlqqh9SMC3HQPHD9xQQKNMzwHczPtZg87T7p9LvkBOx0k7o6JEkoSFO7fq3sPB
|
||||
xD3C4RMJRzWS/LDurFVUDPtTh2xNu2XbVsNF5+g4jT4fi66/He1MsSTCio2/swm6
|
||||
mJ0zXOqoXX5a4MQycyecNJHZ+BA0+oF7EKeIiycVoU+HpkkNhw==
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFBTCCAu2gAwIBAgIQS6hSk/eaL6JzBkuoBI110DANBgkqhkiG9w0BAQsFADBP
|
||||
MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy
|
||||
Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNDAzMTMwMDAwMDBa
|
||||
Fw0yNzAzMTIyMzU5NTlaMDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBF
|
||||
bmNyeXB0MQwwCgYDVQQDEwNSMTAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
|
||||
AoIBAQDPV+XmxFQS7bRH/sknWHZGUCiMHT6I3wWd1bUYKb3dtVq/+vbOo76vACFL
|
||||
YlpaPAEvxVgD9on/jhFD68G14BQHlo9vH9fnuoE5CXVlt8KvGFs3Jijno/QHK20a
|
||||
/6tYvJWuQP/py1fEtVt/eA0YYbwX51TGu0mRzW4Y0YCF7qZlNrx06rxQTOr8IfM4
|
||||
FpOUurDTazgGzRYSespSdcitdrLCnF2YRVxvYXvGLe48E1KGAdlX5jgc3421H5KR
|
||||
mudKHMxFqHJV8LDmowfs/acbZp4/SItxhHFYyTr6717yW0QrPHTnj7JHwQdqzZq3
|
||||
DZb3EoEmUVQK7GH29/Xi8orIlQ2NAgMBAAGjgfgwgfUwDgYDVR0PAQH/BAQDAgGG
|
||||
MB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATASBgNVHRMBAf8ECDAGAQH/
|
||||
AgEAMB0GA1UdDgQWBBS7vMNHpeS8qcbDpHIMEI2iNeHI6DAfBgNVHSMEGDAWgBR5
|
||||
tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAKG
|
||||
Fmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0gBAwwCjAIBgZngQwBAgEwJwYD
|
||||
VR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVuY3Iub3JnLzANBgkqhkiG9w0B
|
||||
AQsFAAOCAgEAkrHnQTfreZ2B5s3iJeE6IOmQRJWjgVzPw139vaBw1bGWKCIL0vIo
|
||||
zwzn1OZDjCQiHcFCktEJr59L9MhwTyAWsVrdAfYf+B9haxQnsHKNY67u4s5Lzzfd
|
||||
u6PUzeetUK29v+PsPmI2cJkxp+iN3epi4hKu9ZzUPSwMqtCceb7qPVxEbpYxY1p9
|
||||
1n5PJKBLBX9eb9LU6l8zSxPWV7bK3lG4XaMJgnT9x3ies7msFtpKK5bDtotij/l0
|
||||
GaKeA97pb5uwD9KgWvaFXMIEt8jVTjLEvwRdvCn294GPDF08U8lAkIv7tghluaQh
|
||||
1QnlE4SEN4LOECj8dsIGJXpGUk3aU3KkJz9icKy+aUgA+2cP21uh6NcDIS3XyfaZ
|
||||
QjmDQ993ChII8SXWupQZVBiIpcWO4RqZk3lr7Bz5MUCwzDIA359e57SSq5CCkY0N
|
||||
4B6Vulk7LktfwrdGNVI5BsC9qqxSwSKgRJeZ9wygIaehbHFHFhcBaMDKpiZlBHyz
|
||||
rsnnlFXCb5s8HKn5LsUgGvB24L7sGNZP2CX7dhHov+YhD+jozLW2p9W4959Bz2Ei
|
||||
RmqDtmiXLnzqTpXbI+suyCsohKRg6Un0RC47+cpiVwHiXZAW+cn8eiNIjqbVgXLx
|
||||
KPpdzvvtTnOPlC7SQZSYmdunr3Bf9b77AiC/ZidstK36dRILKz7OA54=
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDKQkz/76XvjEur
|
||||
vcOD4fSMSbLf63iXCBbcTYvbGqpkQxBs0MSjOxPaW/eeknYAx+VSsk8TZhkb0Umw
|
||||
X4pNABdqVAiMrCUlV92tZEeYGV9HqYKUhiXcIkHY4bdFtOhB88ytp2BVd/PrkPZ+
|
||||
StYzexpQHkfShIDJ1g/HSpN6g1Nt+7O/x/IL3goKXRS+cuzNlTEtVB3gEVD/SWMf
|
||||
gaE9vGufrCylusmyLwCYKOnpsAp+6zKYJNI13/j+mLqJTl94tdiEKsxaqq34WEDe
|
||||
5/2m4QFq+lGwT5y+AB5sG1hAHYc+9OkUxRJde/tjCnuDJXnOb5oJlrK1wE/XM6Xe
|
||||
vxRBcKD7AgMBAAECggEBAKyOvjTI19A06MZgQvM8jrA1nFdwBNUOALr5qe1HpcGe
|
||||
ed/siSceGwT725m9KNHnuV3BZLePLrLN7sl76XliL5f2k8i4gYSHn0f0OySn2ONB
|
||||
2ncusBRMYdNQV1UwT8sc3i31k7m3ejIq3jHHVVJcn4llHC+d/ma0q4eCt6oZas90
|
||||
HxGi3lU5KMhlSwQaH5YtT8Syx7N2uD6GfmMUtInr1tGxQysvu2Dwu4lVAKc3/qdB
|
||||
FA+MylCgKUs/FcEep9+sNnzpc5I2YvTZCMS3dkRHZIv4bBJ+lh9roVZPWvB1gQoC
|
||||
I9XGSSvz+1RwyCyJ62Qr/5u1frhV1m1hSPE6T2YH/YECgYEA74LJM0zfCFA143Rb
|
||||
TLinoPsncdK+6lz0W3NaPH34yVJSdo6S/Pqn+sLC1hWRHabemdPn50E6/ma4aY1p
|
||||
sACVJVAvafX1qmH0NPbBalA7xNzhuCoFPHJTZKKSrj+zJZ2nvQDcHh/Rs7JAX6OX
|
||||
UVQMxrWXDgRduiQ3imXRwoumR8ECgYEA2C750/CSADRc+Ys7BgDXpo67Vm14JdLg
|
||||
AxKvcSwgnJOYE4SjVKoaRpG9ObljaDF7q7SBu+COY4NlCgLT8kFDPo8/DrxeN8Nx
|
||||
lkatnqThbBn/hwS7rIYSEE7nUde4LXuT+bgCSZHv5T2oLwPB5V2KGL6mkzL25NtI
|
||||
J8lLAvd/97sCgYEA3atO6dLYjQonhdcX9N7mDgDE1fy1w5S6d7VAK8JvMmylc6Kq
|
||||
+cZHF7ePubIGN8pMNVTBSe++WNvbC53c1g8D+p/G8iu47bNw4GAMTIfreVzw75C8
|
||||
feBVvEsWtHyyIjtSloOoNZ0/aS+tkpaGorfGh1Zjco6p7HA+kzF/PK4g/EECgYAo
|
||||
6OraEqJua3pUtuZagnpMyKHm/xxHfBpsOnL85a7eMogK2YTXFsGWLSoz7ENFimeu
|
||||
3J/YX+xSJKFQPazCIVuKUS1LqpXh05iBKardZLJL9LeIY3rocQ6mC2h28m2mHcao
|
||||
8QttxLIzHXHgQ8PDlen2OM3o+TIDqQOEk/EgBJow1QKBgC52SDq16yvNvXFx2vV+
|
||||
aGYqvs0WDrmehBac5KLtqm4MnKlgI07lDNmCgX5nRIQU/n1o9EFdh70fjbCMrP6l
|
||||
TegzxB1Gcs+8UC5fXf8GQIn1LwxU9Vj+QAgAu2gfo6napXguKmIcHQgERihEZ4mO
|
||||
5l7+s6Ojdjfi3BK6rDg55J9Z
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -1,87 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFDjCCA/agAwIBAgISBvXqmV6Yo20cqoicnC24QiS9MA0GCSqGSIb3DQEBCwUA
|
||||
MDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQwwCgYDVQQD
|
||||
EwNSMTAwHhcNMjUwNzEzMjEwMTUyWhcNMjUxMDExMjEwMTUxWjAkMSIwIAYDVQQD
|
||||
Exl2b2ljZWNoYXQuZ3lvemFtYW5jYXZlLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOC
|
||||
AQ8AMIIBCgKCAQEAz7nF1NdS9EcSNmzwXHpLCN/qGC9qvRUkrKkzOj5q1EXpSO/p
|
||||
5poIoJXud5cD1b979uCndW3sksk3iHHh5+NsgdX4Zj493ex0ANJLRqsxaTdp6+bv
|
||||
u0fwX+JzgWjHv34Xj024Y2BAFLEHdAyKGm+Y2qoT1Q50zCt0vZMhzdgGOBq3RxBE
|
||||
OZA+V9E0ni3KangUm9BIS41gtz8oZ9VIeJnix/nZ/rQla+ybmTNVAeiTYSlc8EmF
|
||||
ErsOSQ48vfzfs6+Wy3vfyVUX3kOEVFoUpxB4emQvou3RrQDY00oC2E4Y5Or+TcYF
|
||||
N/WGVrNSGz6/pVnnnV+Q1FNnI0SBtL4MqhwsqQIDAQABo4ICKTCCAiUwDgYDVR0P
|
||||
AQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMB
|
||||
Af8EAjAAMB0GA1UdDgQWBBSAVoRznHEv4Oa09LYaNFZ+5MsoVTAfBgNVHSMEGDAW
|
||||
gBS7vMNHpeS8qcbDpHIMEI2iNeHI6DAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUH
|
||||
MAKGF2h0dHA6Ly9yMTAuaS5sZW5jci5vcmcvMCQGA1UdEQQdMBuCGXZvaWNlY2hh
|
||||
dC5neW96YW1hbmNhdmUuZnIwEwYDVR0gBAwwCjAIBgZngQwBAgEwLgYDVR0fBCcw
|
||||
JTAjoCGgH4YdaHR0cDovL3IxMC5jLmxlbmNyLm9yZy82Mi5jcmwwggEEBgorBgEE
|
||||
AdZ5AgQCBIH1BIHyAPAAdgAN4fIwK9MNwUBiEgnqVS78R3R8sdfpMO8OQh60fk6q
|
||||
NAAAAZgFza5qAAAEAwBHMEUCIFESO+P2EFHDKu58Ar43tlAvfE0budnfR1nvEFwo
|
||||
Mm7pAiEAsoiU9VcglbJlLVr8Sa5xcULfgjD/VYM3An07w11+JWIAdgAS8U40vVNy
|
||||
TIQGGcOPP3oT+Oe1YoeInG0wBYTr5YYmOgAAAZgFza58AAAEAwBHMEUCIQDjZ6+M
|
||||
/iItF+ZJO6kudVhSzOcG2D3qdOiYh9Rl1inDxwIgLc2Fz7q8sP3A0Giv6vUQnUME
|
||||
ADI3eTywT606bhRFKWswDQYJKoZIhvcNAQELBQADggEBABSpS/Npc/26FjrQADNO
|
||||
7fv/xO3CVbHrnkLJQlT4+dq+GCQ8PEFFG7Kjsdok0V2NGSDZCAHOEW7RFE5FAJQA
|
||||
3yb+3Zi32fUpfgDLdIXIAOIg9xa2rD2fgB5JTS7teKXqkdkVrgpO3I7QDnIFhhsa
|
||||
HaINxS7zLR7NH1Zf/LLPU6u7pjtslHLWbvxcHi+PcZrfnLVmPPau06PU65M+hel0
|
||||
AvHsNMKrb76M8yA0D4UVvLWN7EOxNGCluVaA0qEdmmhGPFlEt+KkF66ZfQnPqT8v
|
||||
L7X/dwxCCSGFx/j9tk0oPsLzixSOgM/PDV1Mw3O6gDRA8VgHrBH89LMb+gZ9A3fj
|
||||
2so=
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFBTCCAu2gAwIBAgIQS6hSk/eaL6JzBkuoBI110DANBgkqhkiG9w0BAQsFADBP
|
||||
MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy
|
||||
Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNDAzMTMwMDAwMDBa
|
||||
Fw0yNzAzMTIyMzU5NTlaMDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBF
|
||||
bmNyeXB0MQwwCgYDVQQDEwNSMTAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
|
||||
AoIBAQDPV+XmxFQS7bRH/sknWHZGUCiMHT6I3wWd1bUYKb3dtVq/+vbOo76vACFL
|
||||
YlpaPAEvxVgD9on/jhFD68G14BQHlo9vH9fnuoE5CXVlt8KvGFs3Jijno/QHK20a
|
||||
/6tYvJWuQP/py1fEtVt/eA0YYbwX51TGu0mRzW4Y0YCF7qZlNrx06rxQTOr8IfM4
|
||||
FpOUurDTazgGzRYSespSdcitdrLCnF2YRVxvYXvGLe48E1KGAdlX5jgc3421H5KR
|
||||
mudKHMxFqHJV8LDmowfs/acbZp4/SItxhHFYyTr6717yW0QrPHTnj7JHwQdqzZq3
|
||||
DZb3EoEmUVQK7GH29/Xi8orIlQ2NAgMBAAGjgfgwgfUwDgYDVR0PAQH/BAQDAgGG
|
||||
MB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATASBgNVHRMBAf8ECDAGAQH/
|
||||
AgEAMB0GA1UdDgQWBBS7vMNHpeS8qcbDpHIMEI2iNeHI6DAfBgNVHSMEGDAWgBR5
|
||||
tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAKG
|
||||
Fmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0gBAwwCjAIBgZngQwBAgEwJwYD
|
||||
VR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVuY3Iub3JnLzANBgkqhkiG9w0B
|
||||
AQsFAAOCAgEAkrHnQTfreZ2B5s3iJeE6IOmQRJWjgVzPw139vaBw1bGWKCIL0vIo
|
||||
zwzn1OZDjCQiHcFCktEJr59L9MhwTyAWsVrdAfYf+B9haxQnsHKNY67u4s5Lzzfd
|
||||
u6PUzeetUK29v+PsPmI2cJkxp+iN3epi4hKu9ZzUPSwMqtCceb7qPVxEbpYxY1p9
|
||||
1n5PJKBLBX9eb9LU6l8zSxPWV7bK3lG4XaMJgnT9x3ies7msFtpKK5bDtotij/l0
|
||||
GaKeA97pb5uwD9KgWvaFXMIEt8jVTjLEvwRdvCn294GPDF08U8lAkIv7tghluaQh
|
||||
1QnlE4SEN4LOECj8dsIGJXpGUk3aU3KkJz9icKy+aUgA+2cP21uh6NcDIS3XyfaZ
|
||||
QjmDQ993ChII8SXWupQZVBiIpcWO4RqZk3lr7Bz5MUCwzDIA359e57SSq5CCkY0N
|
||||
4B6Vulk7LktfwrdGNVI5BsC9qqxSwSKgRJeZ9wygIaehbHFHFhcBaMDKpiZlBHyz
|
||||
rsnnlFXCb5s8HKn5LsUgGvB24L7sGNZP2CX7dhHov+YhD+jozLW2p9W4959Bz2Ei
|
||||
RmqDtmiXLnzqTpXbI+suyCsohKRg6Un0RC47+cpiVwHiXZAW+cn8eiNIjqbVgXLx
|
||||
KPpdzvvtTnOPlC7SQZSYmdunr3Bf9b77AiC/ZidstK36dRILKz7OA54=
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDPucXU11L0RxI2
|
||||
bPBceksI3+oYL2q9FSSsqTM6PmrURelI7+nmmgigle53lwPVv3v24Kd1beySyTeI
|
||||
ceHn42yB1fhmPj3d7HQA0ktGqzFpN2nr5u+7R/Bf4nOBaMe/fhePTbhjYEAUsQd0
|
||||
DIoab5jaqhPVDnTMK3S9kyHN2AY4GrdHEEQ5kD5X0TSeLcpqeBSb0EhLjWC3Pyhn
|
||||
1Uh4meLH+dn+tCVr7JuZM1UB6JNhKVzwSYUSuw5JDjy9/N+zr5bLe9/JVRfeQ4RU
|
||||
WhSnEHh6ZC+i7dGtANjTSgLYThjk6v5NxgU39YZWs1IbPr+lWeedX5DUU2cjRIG0
|
||||
vgyqHCypAgMBAAECggEBAKxDpnEc5FlZ+xuRej9m14UTlCHcaMtHlnNtmeMKUjOZ
|
||||
ip4G/9VSFid+TxVz8iU3uAkDQzxaHZ+ZKOmJb8uLSbfehzHbGhlJduYbf3uqir5z
|
||||
yu5sRJDuVsRdmmZOS6BdZBJeZLRc5KeEK+csYvcLZxqnguzkIS4UN6rjMlxvcrDg
|
||||
zqeJfRgk/ubYNoYIuUPOxMlnHZjSEPRdGnKaWDV/K78E6mPjeuPP0s5ELkWtBDtj
|
||||
ChQipYujUbW4w9pITYzieQEkelJM+esUGtwabraf+VOF5GQ0InTN1NFURUCKcmzr
|
||||
anErwgHmPLfaE2MgKSufAh+KpEU6ZkjJ8mckckcTtkUCgYEA/hkXW7IT5mYpiPkM
|
||||
pg5UtK678KRyPr6s73M9PF8iEshXS9KinWcO5RW3M9G2xaFS0iUYgMwBjY2YrhSl
|
||||
+m9ST3p87iU0m1rN61CawgX1SoDMd9u2K9W11rJT+onZ4jAOC9U0Bg1VhZjv2n2T
|
||||
dreCDziWbpkIWEyCHiflf/DK0lcCgYEA0UfSXZ1m/dT+BJfYYqau5n5pVcOkfteH
|
||||
NfAB0C0CXpZ731mwNoBPaXPk096QT8LYvpBUAtHHKTz/5WHvb0XwAAvzNoyS8hKo
|
||||
M2OTtgL6bKXaGIb7Be5tus3+UxVVZiptm65T90rhRnoQOte5w1Albz0IKIx6C6T5
|
||||
oClwwtG3mP8CgYAQVaKXxXHcDNM8t+3lOuSdHOJ+DMQ/XliVqA3WtLLnDDP4btj/
|
||||
T2G4vlWhoiiiucUuNy5FEVhENkcLYc5ts/xRmakwUfn4xrSYHP1l3aYwHOmIBvrG
|
||||
BJ4E6D/XykbUcIxmnFUU0oSd6v/4RrxVFGTq/5NEFthffMOclqn9OIiBTwKBgQCS
|
||||
f/l2CPqQ0+nh4z3ZiR9EQNeR7vuWw19mVZWfWfKfri4Wot0kudtdUYCtA8731skN
|
||||
VVFKC/mkF4x20YDf3xBrp/HgjLVM+dx+5MUBE8KkDdHHe637b/WmYA8ZsARxGWBT
|
||||
K8yhfuyF/mqgFmV2oQMjhJDSecvxnNIV2QyThGVGlwKBgQCX3cnkVryXs8bcAnhs
|
||||
Ez3wZRfNszVHmuyft+q2Pw4yhoYNhh7fT7mBXYOrerFhhKKy2sCFvTA6HvE7d6iy
|
||||
hPY7mxGTJ1i1hAFGuJAETtJTWyPlsDPVkh5OPYUMxFgWxNxb6hekwObVg1/lm/AR
|
||||
vULSW3E1BDCdBDNjBnLpXdeFUw==
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -1,85 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFDDCCA/SgAwIBAgISBfhx6S4ttzFvAvm/oByFPOmNMA0GCSqGSIb3DQEBCwUA
|
||||
MDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQwwCgYDVQQD
|
||||
EwNSMTMwHhcNMjUxMjE4MDgwMTEwWhcNMjYwMzE4MDgwMTA5WjAfMR0wGwYDVQQD
|
||||
ExR3aWtpLmd5b3phbWFuY2F2ZS5mcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
|
||||
AQoCggEBAM48MuYB/2F0xQ2zk1K8/XNpLEOVPYXJTJ0qtoAwOxLTp3vkgc2OOPJr
|
||||
zlm86L+vnVJknwLpHCVKDStWMsJ29O9w72gYPeUeAe/6Ne3xEsTtoXMMtqe3duCs
|
||||
+TW3VtVPw2a6pLDl1WzIN2kR1Nmm+OXv9CY3dZYHB8JNTKNpS+DSe0EqIBcay+Bh
|
||||
pnfjgiPtlyZyjxT9vGZ0YSAv0xWEm7pdckSduPdWcqKZIJpac9J1UN2namYuhbbp
|
||||
+XEntjqMbSDiW6+kO/1Ouwn0aMUPu+6k6QnFBqaDVm/RodD1ukOQZJ7HcIa9XCuy
|
||||
ts7ERjCRfbPRtHYkuJH13ayUup2/fS8CAwEAAaOCAiwwggIoMA4GA1UdDwEB/wQE
|
||||
AwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIw
|
||||
ADAdBgNVHQ4EFgQU3iGZPIfS2eqOmtYOroH44z7RCxIwHwYDVR0jBBgwFoAU56uf
|
||||
DywzoFPTXk94yLKEDjvWkjMwMwYIKwYBBQUHAQEEJzAlMCMGCCsGAQUFBzAChhdo
|
||||
dHRwOi8vcjEzLmkubGVuY3Iub3JnLzAfBgNVHREEGDAWghR3aWtpLmd5b3phbWFu
|
||||
Y2F2ZS5mcjATBgNVHSAEDDAKMAgGBmeBDAECATAuBgNVHR8EJzAlMCOgIaAfhh1o
|
||||
dHRwOi8vcjEzLmMubGVuY3Iub3JnLzE0LmNybDCCAQwGCisGAQQB1nkCBAIEgf0E
|
||||
gfoA+AB2AA5XlLzzrqk+MxssmQez95Dfm8I9cTIl3SGpJaxhxU4hAAABmzCvt28A
|
||||
AAQDAEcwRQIgBpmygYk4Z1fCtUVqjBz7ldtvif+EdJvvrSpwgYN23H4CIQCLN0sR
|
||||
Eu3HJ9PFRc+FUm/X/uq5toOcMNvt1IihEC5rVAB+AOMjjfKNoojgquCs8PqQyYXw
|
||||
tr/10qUnsAH8HERYxLboAAABmzCvulMACAAABQAseUL2BAMARzBFAiEAmJSN3NLq
|
||||
xZnob4WyX4rRUcU/kQQXe3a0VGap3xFp2coCIAfjLE/gcsPZwkqnNcqfuNDYwGt3
|
||||
cbkkhuXT8uHNvF9XMA0GCSqGSIb3DQEBCwUAA4IBAQA0CWA2b2RntCB2q1v6gOHz
|
||||
c0uDLf5r/wc9WycoQJ29NWrcM1tzg4oOhri6YOWK8EXbimAS65IXoKn+gl5Ek9UP
|
||||
0DfXh6gbkB2gJ8CaQ3YpcW93++gnlhHfYE39JuehacdmRLhmFao4FjhFTsrvelXu
|
||||
oJuk5CFkA4Y8q5y2AWm4K1jgDdk3zxvH2vHxggK02AosZdDH8O8f2t+tsCBnmvSu
|
||||
JvZsggV/V2HFqAU7JQspL83PmbNLwFh85S+yyhE1FTaQQJ1deSA4LQ7hUSLeN0Vs
|
||||
jV3uRcAdqMo0F5SlvFdBZHQqY49ZJo5kStaOsKYhRnehq0rovo4z6QKLTgKzU8fx
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFBTCCAu2gAwIBAgIQWgDyEtjUtIDzkkFX6imDBTANBgkqhkiG9w0BAQsFADBP
|
||||
MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy
|
||||
Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNDAzMTMwMDAwMDBa
|
||||
Fw0yNzAzMTIyMzU5NTlaMDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBF
|
||||
bmNyeXB0MQwwCgYDVQQDEwNSMTMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
|
||||
AoIBAQClZ3CN0FaBZBUXYc25BtStGZCMJlA3mBZjklTb2cyEBZPs0+wIG6BgUUNI
|
||||
fSvHSJaetC3ancgnO1ehn6vw1g7UDjDKb5ux0daknTI+WE41b0VYaHEX/D7YXYKg
|
||||
L7JRbLAaXbhZzjVlyIuhrxA3/+OcXcJJFzT/jCuLjfC8cSyTDB0FxLrHzarJXnzR
|
||||
yQH3nAP2/Apd9Np75tt2QnDr9E0i2gB3b9bJXxf92nUupVcM9upctuBzpWjPoXTi
|
||||
dYJ+EJ/B9aLrAek4sQpEzNPCifVJNYIKNLMc6YjCR06CDgo28EdPivEpBHXazeGa
|
||||
XP9enZiVuppD0EqiFwUBBDDTMrOPAgMBAAGjgfgwgfUwDgYDVR0PAQH/BAQDAgGG
|
||||
MB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATASBgNVHRMBAf8ECDAGAQH/
|
||||
AgEAMB0GA1UdDgQWBBTnq58PLDOgU9NeT3jIsoQOO9aSMzAfBgNVHSMEGDAWgBR5
|
||||
tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAKG
|
||||
Fmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0gBAwwCjAIBgZngQwBAgEwJwYD
|
||||
VR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVuY3Iub3JnLzANBgkqhkiG9w0B
|
||||
AQsFAAOCAgEAUTdYUqEimzW7TbrOypLqCfL7VOwYf/Q79OH5cHLCZeggfQhDconl
|
||||
k7Kgh8b0vi+/XuWu7CN8n/UPeg1vo3G+taXirrytthQinAHGwc/UdbOygJa9zuBc
|
||||
VyqoH3CXTXDInT+8a+c3aEVMJ2St+pSn4ed+WkDp8ijsijvEyFwE47hulW0Ltzjg
|
||||
9fOV5Pmrg/zxWbRuL+k0DBDHEJennCsAen7c35Pmx7jpmJ/HtgRhcnz0yjSBvyIw
|
||||
6L1QIupkCv2SBODT/xDD3gfQQyKv6roV4G2EhfEyAsWpmojxjCUCGiyg97FvDtm/
|
||||
NK2LSc9lybKxB73I2+P2G3CaWpvvpAiHCVu30jW8GCxKdfhsXtnIy2imskQqVZ2m
|
||||
0Pmxobb28Tucr7xBK7CtwvPrb79os7u2XP3O5f9b/H66GNyRrglRXlrYjI1oGYL/
|
||||
f4I1n/Sgusda6WvA6C190kxjU15Y12mHU4+BxyR9cx2hhGS9fAjMZKJss28qxvz6
|
||||
Axu4CaDmRNZpK/pQrXF17yXCXkmEWgvSOEZy6Z9pcbLIVEGckV/iVeq0AOo2pkg9
|
||||
p4QRIy0tK2diRENLSF2KysFwbY6B26BFeFs3v1sYVRhFW9nLkOrQVporCS0KyZmf
|
||||
wVD89qSTlnctLcZnIavjKsKUu1nA1iU0yYMdYepKR7lWbnwhdx3ewok=
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
MIIEowIBAAKCAQEAzjwy5gH/YXTFDbOTUrz9c2ksQ5U9hclMnSq2gDA7EtOne+SB
|
||||
zY448mvOWbzov6+dUmSfAukcJUoNK1Yywnb073DvaBg95R4B7/o17fESxO2hcwy2
|
||||
p7d24Kz5NbdW1U/DZrqksOXVbMg3aRHU2ab45e/0Jjd1lgcHwk1Mo2lL4NJ7QSog
|
||||
FxrL4GGmd+OCI+2XJnKPFP28ZnRhIC/TFYSbul1yRJ2491Zyopkgmlpz0nVQ3adq
|
||||
Zi6Ftun5cSe2OoxtIOJbr6Q7/U67CfRoxQ+77qTpCcUGpoNWb9Gh0PW6Q5Bknsdw
|
||||
hr1cK7K2zsRGMJF9s9G0diS4kfXdrJS6nb99LwIDAQABAoIBAC/aqhjS59ZOSRcn
|
||||
zwyIy+rGwb2g2Ji9n+hsK9LM3jg9IoTN/gybbr1ZpJUQD5XDAydGL9t2CdDhQPMI
|
||||
WljjT2xr8TFfRqVudBaiIXdn0+ocFbVjgtKh8JSrrlv3gc+XZYjl0Cc3/XDzeGAK
|
||||
AjDK3MBGEIn5nnBEi1lbpGfam/+7jIb4TiApckJZO2Kep1Z5UZSQZHhlAqWE+oau
|
||||
F28Nyj3/lyu7rNXT2vrwiZmxA5ehuYn06B61NJtk8rPevTOPx+cRQs1mLee8ACnu
|
||||
rtkrQZ8Q/0+tCMgN9esEp7ucmn/QxGH9081PJ506Irt5BVViB3yCetfQBo+2WyhZ
|
||||
FG0uqUECgYEA9DsuEcXSYtEfeCFN27c11+4FmHaDW+1waLACPVEn4KclFALtsyj0
|
||||
Ae9RyQvMms5j5iK9TDgCE9lNBTO6jekl6lDNb+qNo1Bk5YMi/Hli7SxFe2PH+TTN
|
||||
OTtMAdgldzQeF9MGvU3pyb00sI6/6it38430gVN8LyyP/hT3l8xE/qECgYEA2CxN
|
||||
aiy50PtEk3Klk3vf3L/1n8HjsR3/nA6Yg9G1RkPbgc4n8OgC+dHOtvyoQYvdjCKF
|
||||
wAyVZtQ+bXNJ9KX1relL/QOT46yHHoEyrcRTOACQtoNSG9pXWp4DYbbIlWgtBfYF
|
||||
L4qXdTNkHfWdBEFx3yb+FpAEOiT1Gi5G+0lr+c8CgYEAn5Hm+L+6RMwDdpaz6wEa
|
||||
Edm3GDUegDpzPkL5Q5y5pEMwq5F6QptYScdWNTgbV23PwXYjHiBd4yAP/X0dv0h8
|
||||
eEqQ3zVtky2croPuoOyiYPmS8BpydnU0PNdsQqw5Vlfb7Y74EUlNnXycZ1rtMw9x
|
||||
kNTH0pN8SMohzk1es3RIA+ECgYBUJdKwvN5MKjNEjkFDytmWjaaoXIosfPfuIIRf
|
||||
87bztiBxQ/WqQjY+Vtx3wJwif7ZrAVk9K+jQUVhHtLQaJqwe2Yy53bWoz5T9W9+F
|
||||
YsHeL+IlGbNRokmUvaOlWshz2EyGYIEeQ323opybSOupJ2yTKBOKZt8uXwqF+XOq
|
||||
B6efYwKBgGzTwn55LqQbH8KdURONlzz5f9u9T3R9MI9Gw1/IjdHWIRYcAIZUXERm
|
||||
3WdSSeMZhXKtp4ZGa2TZ14aYXLl1CeKa+10JK9ouwnyeiNq1KWEejTQM+j03ebkx
|
||||
SAg+H+rc65KKW6zoZQMX4idb+a4IohOkTo9uGnXKQlteCzr37FW3
|
||||
-----END RSA PRIVATE KEY-----
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"extends": "expo/tsconfig.base",
|
||||
"compilerOptions": {
|
||||
"strict": true,
|
||||
"paths": {
|
||||
"@/*": [
|
||||
"./src/*"
|
||||
]
|
||||
}
|
||||
},
|
||||
"include": [
|
||||
"**/*.ts",
|
||||
"**/*.tsx",
|
||||
".expo/types/**/*.d.ts"
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user