Compare commits
5 Commits
e340b42223
...
7e360749b9
| Author | SHA1 | Date | |
|---|---|---|---|
| 7e360749b9 | |||
| 5009f6e688 | |||
| a27febdd55 | |||
| 80050cbedb | |||
| deb160cdbc |
@@ -369,3 +369,7 @@ ClientAssets/
|
||||
infra/vault/data/
|
||||
infra/vault/data/init.json
|
||||
opc_export.sql
|
||||
|
||||
# TLS certs & keys generated locally — never commit private keys
|
||||
infra/nginx/*.key
|
||||
infra/nginx/*.crt
|
||||
@@ -226,9 +226,14 @@ public static class InfraEndpoints
|
||||
|
||||
private static string ResolveInfraPath(IConfiguration config)
|
||||
{
|
||||
var configured = config["Infra:Path"];
|
||||
if (!string.IsNullOrWhiteSpace(configured))
|
||||
return Path.GetFullPath(configured);
|
||||
|
||||
// Docker:RepoRoot is ClarityStack/ root — infra lives under OPC/
|
||||
var repoRoot = config["Docker:RepoRoot"]
|
||||
?? Path.GetFullPath(Path.Combine(AppContext.BaseDirectory, "..", "..", "..", ".."));
|
||||
return Path.GetFullPath(Path.Combine(repoRoot, "infra"));
|
||||
return Path.GetFullPath(Path.Combine(repoRoot, "OPC", "infra"));
|
||||
}
|
||||
|
||||
private static Task<(int Code, string? Output)> DockerAsync(string args) =>
|
||||
|
||||
@@ -32,9 +32,10 @@ builder.Services.AddSingleton<PromotionService>();
|
||||
// OPC persistence (raw Npgsql)
|
||||
var opcConnStr = builder.Configuration.GetConnectionString("opcdb");
|
||||
if (!string.IsNullOrWhiteSpace(opcConnStr))
|
||||
builder.Services.AddSingleton(NpgsqlDataSource.Create(opcConnStr));
|
||||
// Replace 'localhost' with '127.0.0.1' to avoid Npgsql trying [::1] first on Windows
|
||||
builder.Services.AddSingleton(NpgsqlDataSource.Create(opcConnStr.Replace("localhost", "127.0.0.1")));
|
||||
else
|
||||
builder.Services.AddSingleton(NpgsqlDataSource.Create("Host=localhost;Database=opcdb;Username=postgres;Password=controlplane-dev"));
|
||||
builder.Services.AddSingleton(NpgsqlDataSource.Create("Host=127.0.0.1;Port=5433;Database=opcdb;Username=postgres;Password=controlplane-dev"));
|
||||
builder.Services.AddScoped<OpcService>();
|
||||
|
||||
// Named HttpClient for OpenRouter AI assist proxy
|
||||
|
||||
@@ -55,7 +55,7 @@ public class ImageBuildService(
|
||||
using var docker = new DockerClientConfiguration(new Uri(socketUri)).CreateClient();
|
||||
|
||||
var (repo, tag) = SplitImageTag(ImageName);
|
||||
var dockerfilePath = "Clarity.Server/Dockerfile";
|
||||
var dockerfilePath = "Clarity/Clarity.Server/Dockerfile";
|
||||
|
||||
void Log(string line) { onLine(line); record.Log.Add(line); }
|
||||
|
||||
|
||||
@@ -13,6 +13,8 @@ internal static class TarHelper
|
||||
[
|
||||
".git", ".vs", ".vscode", "node_modules", "bin", "obj",
|
||||
"VaultData", "*.user", "*.suo",
|
||||
// Exclude sibling repos — build context is ClarityStack/ root but only Clarity/ is needed
|
||||
"OPC", "gateway", "ClientAssets",
|
||||
];
|
||||
|
||||
public static void Pack(string root, Stream destination)
|
||||
|
||||
@@ -31,27 +31,6 @@ var cpPostgres = builder.AddPostgres("opc-postgres", password: cpPostgresPass
|
||||
.WithPgAdmin();
|
||||
|
||||
var controlPlaneDb = cpPostgres.AddDatabase("opcdb");
|
||||
var giteaDb = cpPostgres.AddDatabase("giteadb");
|
||||
#endregion
|
||||
|
||||
#region GITEA
|
||||
// Gitea is ControlPlane's code management component — owns its own DB on opc-postgres.
|
||||
var gitea = builder.AddContainer("gitea", "gitea/gitea", "latest")
|
||||
.WithHttpEndpoint(port: 3000, targetPort: 3000, name: "http")
|
||||
.WithEndpoint(port: 2222, targetPort: 22, name: "ssh")
|
||||
.WithVolume("clarity-gitea-data", "/data")
|
||||
.WithEnvironment("GITEA__database__DB_TYPE", "postgres")
|
||||
.WithEnvironment("GITEA__database__HOST", "host.docker.internal:5433")
|
||||
.WithEnvironment("GITEA__database__NAME", "giteadb")
|
||||
.WithEnvironment("GITEA__database__USER", "postgres")
|
||||
.WithEnvironment("GITEA__database__PASSWD", "controlplane-dev")
|
||||
.WithEnvironment("GITEA__server__DOMAIN", "opc.clarity.test")
|
||||
.WithEnvironment("GITEA__server__ROOT_URL", "http://opc.clarity.test")
|
||||
.WithEnvironment("GITEA__server__SSH_DOMAIN", "opc.clarity.test")
|
||||
.WithEnvironment("GITEA__server__SSH_PORT", "2222")
|
||||
.WithEnvironment("GITEA__service__DISABLE_REGISTRATION", "true")
|
||||
.WaitFor(giteaDb)
|
||||
.WithLifetime(ContainerLifetime.Persistent);
|
||||
#endregion
|
||||
|
||||
#region RABBITMQ
|
||||
@@ -67,9 +46,8 @@ var api = builder.AddProject<Projects.ControlPlane_Api>("controlplane-api")
|
||||
.WaitFor(rabbit)
|
||||
.WithReference(controlPlaneDb)
|
||||
.WaitFor(controlPlaneDb)
|
||||
.WithEnvironment("Gitea__BaseUrl", gitea.GetEndpoint("http"))
|
||||
.WithEnvironment("ClientAssets__Folder", clientAssetsPath)
|
||||
.WithEnvironment("Docker__RepoRoot", builder.AppHostDirectory.Replace("ControlPlane.AppHost", "").TrimEnd('\\', '/'))
|
||||
.WithEnvironment("Docker__RepoRoot", Path.GetFullPath(Path.Combine(builder.AppHostDirectory, "..", ".."))) // ClarityStack/ root — needed for Directory.*.props
|
||||
.WithExternalHttpEndpoints();
|
||||
#endregion
|
||||
|
||||
|
||||
@@ -20,10 +20,10 @@ public class MigrationStep(
|
||||
var job = context.Job;
|
||||
var dbName = TenantDbName(job.Subdomain);
|
||||
|
||||
var adminConnStr = config.GetConnectionString("postgres")
|
||||
var adminConnStr = config.GetConnectionString("platformdb")
|
||||
?? throw new InvalidOperationException(
|
||||
"ConnectionStrings:postgres is missing. " +
|
||||
"Ensure ControlPlane.Worker has .WithReference(postgres) in AppHost.");
|
||||
"ConnectionStrings:platformdb is missing. " +
|
||||
"Ensure ControlPlane.Worker appsettings.json has a platformdb connection string.");
|
||||
|
||||
logger.LogInformation("[{JobId}] Provisioning database '{Db}'.", job.Id, dbName);
|
||||
await CreateDatabaseIfNotExistsAsync(adminConnStr, dbName, cancellationToken);
|
||||
@@ -44,7 +44,7 @@ public class MigrationStep(
|
||||
if (string.IsNullOrWhiteSpace(context.TenantConnectionString)) return;
|
||||
|
||||
var dbName = TenantDbName(context.Job.Subdomain);
|
||||
var adminConnStr = config.GetConnectionString("postgres");
|
||||
var adminConnStr = config.GetConnectionString("platformdb");
|
||||
if (string.IsNullOrWhiteSpace(adminConnStr)) return;
|
||||
|
||||
logger.LogWarning("[{JobId}] Compensating: dropping database '{Db}'.", context.Job.Id, dbName);
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
# Resolve *.clarity.test -> 127.0.0.1 so browser hits nginx on the host
|
||||
address=/.clarity.test/127.0.0.1
|
||||
|
||||
# Don't read /etc/resolv.conf or /etc/hosts
|
||||
no-resolv
|
||||
no-hosts
|
||||
|
||||
# Forward everything else to Cloudflare
|
||||
server=1.1.1.1
|
||||
server=1.0.0.1
|
||||
@@ -20,6 +20,8 @@ networks:
|
||||
volumes:
|
||||
postgres-data:
|
||||
minio-data:
|
||||
clarity-gitea-data:
|
||||
external: true
|
||||
|
||||
services:
|
||||
|
||||
@@ -154,6 +156,37 @@ services:
|
||||
aliases:
|
||||
- nginx
|
||||
|
||||
# ── Gitea ─────────────────────────────────────────────────────────────────
|
||||
# Platform source control. Hosts OPC, Clarity, and Gateway repos.
|
||||
# Accessible at https://opc.clarity.test (nginx terminates TLS).
|
||||
gitea:
|
||||
image: gitea/gitea:latest
|
||||
container_name: clarity-gitea
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "3000:3000"
|
||||
- "2222:22"
|
||||
environment:
|
||||
GITEA__database__DB_TYPE: postgres
|
||||
GITEA__database__HOST: postgres:5432
|
||||
GITEA__database__NAME: giteadb
|
||||
GITEA__database__USER: postgres
|
||||
GITEA__database__PASSWD: postgres
|
||||
GITEA__server__DOMAIN: opc.clarity.test
|
||||
GITEA__server__ROOT_URL: https://opc.clarity.test
|
||||
GITEA__server__SSH_DOMAIN: opc.clarity.test
|
||||
GITEA__server__SSH_PORT: "2222"
|
||||
GITEA__service__DISABLE_REGISTRATION: "true"
|
||||
volumes:
|
||||
- clarity-gitea-data:/data
|
||||
depends_on:
|
||||
postgres:
|
||||
condition: service_healthy
|
||||
networks:
|
||||
clarity-net:
|
||||
aliases:
|
||||
- gitea
|
||||
|
||||
# ── Dnsmasq ───────────────────────────────────────────────────────────────
|
||||
# Resolves *.clarity.test → 127.0.0.1 so browser requests hit nginx on the host.
|
||||
dnsmasq:
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
server {
|
||||
listen 443 ssl;
|
||||
server_name opc.clarity.test;
|
||||
|
||||
ssl_certificate /etc/nginx/certs/clarity.test.crt;
|
||||
ssl_certificate_key /etc/nginx/certs/clarity.test.key;
|
||||
|
||||
location / {
|
||||
proxy_pass http://gitea:3000;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
events {
|
||||
worker_connections 1024;
|
||||
}
|
||||
|
||||
http {
|
||||
resolver 127.0.0.11 valid=5s ipv6=off;
|
||||
|
||||
log_format main '$remote_addr - $remote_user [$time_local] "$request"'
|
||||
'$status $body_bytes_sent "$http_referer"'
|
||||
'"$http_user_agent"';
|
||||
|
||||
access_log /var/log/nginx/access.log main;
|
||||
error_log /var/log/nginx/error.log warn;
|
||||
|
||||
server {
|
||||
listen 80 default_server;
|
||||
return 301 https://$host$request_uri;
|
||||
}
|
||||
|
||||
include /etc/nginx/conf.d/*.conf;
|
||||
}
|
||||
@@ -7,3 +7,4 @@
|
||||
-- clarity_{tenant} → Created at provisioning time by ControlPlane.Worker.
|
||||
|
||||
SELECT 'CREATE DATABASE keycloakdb' WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'keycloakdb')\gexec
|
||||
SELECT 'CREATE DATABASE giteadb' WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'giteadb')\gexec
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
{"Value":"AAAAAQKD0fec8IBFILcD9soLfKyeSeb8XQPsZE63naCPPgsEMNad1uWm5AdivoE7aI74pWxn7VHRnjNzgZ1PoM05c37HcP9EM221rVw/xBmLc9go4h7iScu0"}
|
||||
@@ -1 +0,0 @@
|
||||
{"Value":"AAAAAQL0hTOPrrWZBzY868/phzE5mKIH9g+Wu0zNC2N1493O4sBin4lJsoN8TP0DMTvyF3X0bvLCiO/hVSQmgyZk/YuEyh1L2DkLtzFNwiCEB4JTUlP0zfrcjH1eew1cj/APRVIVXFvZ1fL11xaYfZ536kf+jvkfsFamElXSLIEFXubfN0QfIGxHRTsb0fU/ZnNRXfwbOi1u+Zwu+GVpXoKKch57wvm9rDVcErKzVFdmkjAFx1Vv7UEv7ScoIr3YA5uogs/w5XoxvT+NxENepZ8bSO7e/4Ook3ITFCV5oJDTVzm9JlKU9vCMvE2kH95l/P86kSmkyOBqqftzzAODhY+OqQoi02pHzIkqghkORnc5hbGCiI3O0InRWe8="}
|
||||
@@ -1 +0,0 @@
|
||||
{"Value":"AAAAAQJuSCPrV0/c92Lxj7EijLdwfOiqDEsbKYo3FSxHknoDZ4x6TFWMdSFYLynodU35Zb/F2EgrrG+JVC+NjJGO8LXK"}
|
||||
@@ -1 +0,0 @@
|
||||
{"Value":"AAAAAQJ0tHJeOe3hB/Y/v/s6tAr0Yk5f4xPweqX3/NqZ3vhGfFPjqkFRaFh7Zb7vDOrvi+LDzQbZXFVozsNv9qrm2wT7w49db21zQqNJxcKWC559HbdnUh6zPaqJrEMvB1B+absTOQM/Ry/44WU4ksjS+FyLl7PPhirAlBio64Xg3k6/f9mf6Owk7Mppa0THnMjQgxjiN/qdPupZjpoMBjX2NN6lSLVtl72GIAIlykoUP1ilCKVBWRf5eCEfFFbTt7Fppar/QPr38nO2tuwn6datmPe7sCliv2AljfX11/LmGufdRrE+3nbMpavXwU0J57SgSaYdyyEoIUoM9uUc+jBE2J9UJG+p+tbUB5txDXaSnlfTx+4aGlEg9ENIkkhFjG3PttVF3PQwayKG82LT8RBrkXMr8Xxhi0MOtmPjh0Yw"}
|
||||
@@ -1 +0,0 @@
|
||||
{"Value":"AAAAAQK+nRD7vrobbyLyrIrj2jy2b5AMK2TCLMLXxZCMnCLMFzuucTUZUnGMC9ZSDxGDuji9FNU6WJLEaVYYWAvUSooWGETCLwqYDzy7O97FX0rOhpButpbQ"}
|
||||
@@ -1 +0,0 @@
|
||||
{"Value":"AAAAAQJYHbyPrPgmU/V8OFsoR0WXPA4eEW5g/pCrtrOUpZyfedqc302GnuckUktoS9UvrVR3kDWxkWsF2RuC9GX9N6ILyBtgYAwBPSnZpR+DlXEn/tvbNug="}
|
||||
@@ -1 +0,0 @@
|
||||
{"Value":"AAAAAQL7v5kWu26J5/ZHsooCc1PxIeoa3vDQlekxxEDQ884Ez33ihan6K51IeRda1Bmnr22mPiT/mO1jnp9Mj782yUsKtYPVDcLoK3rSTi+T2f6NIZFKWn2OdkPP1G9wNajeOGywgKBIOBknJ41kiu+hvRHy0+P974sOmg8Gy2zeVHjU4jmkp4kojapimD/vF3k4FIwXdCLIOv/5yUzk/j3QD1kPmd0lO6MXHTK5HEmEqmmHsKtybyuHybJPG9y7sHVQY0yIrpnajzK+/rSvIhFAK7w8+7vRnUWb4cytuvdXejCWMiDOEl5Rd1+JDF3zVEJYs8GpMiL1qkuMjeEI9RfzpupTSq6iWCTYa8z96n9ttARjI7ZQabTux7vpoRQtOkbISt8fFEVZB8Ax2P/faG7Y0G/Gn5XcNrP+ShnRMTlq7k3MrdsXGLyWA6Q2"}
|
||||
@@ -1 +0,0 @@
|
||||
{"Value":"AAAAAQKAysqDoP86hKhBN25gnwy1oJFNXfStAz9AxR6BEBbABCJ0/Mc3baOeDCDNjWXfkilFN0mX7SFqO9qjsrFJi7Nckx352WfNmnIqBhIVxL4m3DBg4qZB+SGzS8//dqsh64rM5X0dvr8KMTzAjWKXSpGAuRb+CE6G0qiKmOGgJeXY+cg4WNE6qD6n6aDSXD3O"}
|
||||
@@ -1 +0,0 @@
|
||||
{"Value":"AAAAAQJ+SDrSC2oJcjhivUOgkb7f0fQjBlmH8Np8FK3/YCvsFm1JDdkHdp2PnsXvLgWjy2JXb65afoI5M7Hig7w+RELQnZZ938EYBDgqZuupK2mLkvBvxwF40NslJZpdSfB7rYGaY4SOUb0Z3xNbm8nBJvO3lVGfhcYgRpOJrAo9l5OI7hQG3/hCmKpJ7+dOhU0x6skKn2lOEzA3HJgU0BXd3lXpWJRGAgeAjTS00T8wEO0Osl3YeE8pWkZJUpAER7FYX/uv4dcC2VTINt87kM5DBXAdXTJ1Ku9F6PPP4fxV4wDHkdK0+EAxFxXE+qefXPkaNHQdpfh1vYb1sm5WNYP0HYLDyNwz9zipmJn2t+VcK9PB4csleA6gmROrSWscLqj9A6ZNdDuT9XiSqO5FuX4xoS5PTcnGSozlv1a+FEs9geBS9nmSbBPQXWcDq7TxhLFMKurwYMK0zoX0HzLqGa/V1Ev9AfrKHQflmCPlgA3xyjFbfirkq6BLEFSEPDTcEcjeh/7s/fimW4VBaWdDZ2htKS/gOG3lsQIAiftcokN/GQOrZLmd5Bx5iPQvkzqqy7p1nX0qSaCB3MUzbPbciuZ4E4uS6NWmSUBEP0HRi4Q6V39QlfR40TiokArfLmQ/6YfARZeo4FdSwKEC41RE3sTx2aPEvAl58KGORHIW++MDQITyq6xY+sdZm0faZRUuW81FGYQul4xa4Ji6DhEnjdqW8VaqMdE45ARm70JUzs8G1xOkE2tp9HmX7VdHrmvKMNn0S6bASYMXZ4Q19RO9fq7P6TmUoiRNIjBGJDlkflXX0EQQQBMyrn8aknicm/vpQggnqllNUAvZHaLTHWxafEXXy4Trfelbrm66JxzoYCxyKuaYUNlO8HTWHe1cMgln9PA="}
|
||||
@@ -1 +0,0 @@
|
||||
{"Value":"eyJ0eXBlIjoic2hhbWlyIiwic2VjcmV0X3NoYXJlcyI6MSwic2VjcmV0X3RocmVzaG9sZCI6MSwicGdwX2tleXMiOm51bGwsIm5vbmNlIjoiIiwiYmFja3VwIjpmYWxzZSwic3RvcmVkX3NoYXJlcyI6MSwibmFtZSI6IiJ9"}
|
||||
@@ -1 +0,0 @@
|
||||
{"Value":"AAAAAQJofIgTQJifNHQxphLayMBOChaYJlvFJHcc4zNPMBVvDr8uFy1XQzXLAysR6sgZjAZ4jhCWi2Pa0cVmTYI="}
|
||||
@@ -1 +0,0 @@
|
||||
{"Value":"AAAAAQLFETk9NejhTi3zbGl5M2UBwmLsnNdsVx1Qj3IEMyuYRa6hcfprmAJq78f9DSsiqD9XwYdKAw9+hhwDHXriG0yX"}
|
||||
@@ -1 +0,0 @@
|
||||
{"Value":"AAAAAQKdBPgKRn3+fSLmFoRgmwvnRG8A7VobciPCQ3E4PGOUOqFoqlCA1ClehtDoOEoCzqj378OA2T7C1UcJBFe48EawcsmGWIXzAKW0Dl+npXiU/htSJoI5kiYODIwnGAqmL1d+iG6d1AzFtaM="}
|
||||
@@ -1 +0,0 @@
|
||||
{"Value":"eyJuYW1lIjoidmF1bHQtY2x1c3Rlci0xOGE4YTBkYiIsImlkIjoiIn0="}
|
||||
@@ -1 +0,0 @@
|
||||
{"Value":"CkyIT1Q8Bh7F49lcdfgUokFwvgfeGgpTBw3VxRMlaD//Xtu/wBP0ELS+hudexNadGr+/WhirNmuo6OI7wpujIRWMKCgmWO6BDCydAsFxKgA="}
|
||||
@@ -1 +0,0 @@
|
||||
{"Value":"AAAAAQI4IKlJtz2l7Xc1Yk4lOILn9ms2vTL8//cXd1cVLwZMlGjngu4PyQfHeJHyBuaGJUaCmeTKqpxWKV0YAgr+lWzLAZeJrxEZ8e20f8D/iBC9QMoIWmPdGo6HDkyq02O6ZEjjyFVcWTtUbwfn14ck2UD3aXyesWWZsRjrgC3MZjbh6MlOG2ZFNEgz"}
|
||||
@@ -1 +0,0 @@
|
||||
{"Value":"AAAAAQLHOajWUXAr2Y2W+33Q4ewbnAnIJ2/NGfak+XUE02QyJ+htVjlkxZlDVW6ZzqSuvCgAnpApDm/GQRgEXi7qP2j70QBMq8akyPa97eanit20sQq/urbsvA3ts8jdyZ07nG6loQEPLgbdVzv0+QfhnH2tZsowdkn2eSn3k7P3B4OUEk08WHWp9vXrVoWMbpxAPMliP+eOF883gkULsnjMC2e1pCV4UnqF+ygbV50fGqs9FMoUoAIh16JpL9QfSQol7RBirTSBdCKTb6YP0B0hcYiwHdWAaI/ESa9ypBSxROjNdR8+6Iozb/H/KasdrvfQXDQts/28hhdxGsgWlXoWURNQ73ODB8R3odXavZvgtuVth0c/ug0Ti+PQgZ1gi9LLfWoYmSZGResfCeWwKCLsryOSRHABd420f3lq2ueTVRK2VVWRYpxe3lA2oNtzxAseANHcZ1MaVzqJceB94pSWAxfjLG/CJXTAebxJQ6B+D8I2v4SDdIk7Uv+FrxgZfUBfCrn6J/gQVeoYwbzFaG4dSUHdVB7IO9F8eAt0DBHWKJuLUjUNjubUIv5i5J7drogWcd3gdNV4wJC9Bo5KuJfxz2P8/2w4jU0UPOKZjVnGsKsaguOc4YBTuZwnNR8XLtM7V+q+U4bDfPpsuRQFR4E6eWNUj6Uuw8gpr4G4wLrHjbYB5mMeIk/opK2CozXISvIaodqQug=="}
|
||||
@@ -1,15 +0,0 @@
|
||||
{
|
||||
"unseal_keys_b64": [
|
||||
"5mIIQ/WPHpVbsriMGAZn5ImI56L07C5bJKd1UU6p5ks="
|
||||
],
|
||||
"unseal_keys_hex": [
|
||||
"e6620843f58f1e955bb2b88c180667e48988e7a2f4ec2e5b24a775514ea9e64b"
|
||||
],
|
||||
"unseal_shares": 1,
|
||||
"unseal_threshold": 1,
|
||||
"recovery_keys_b64": [],
|
||||
"recovery_keys_hex": [],
|
||||
"recovery_keys_shares": 0,
|
||||
"recovery_keys_threshold": 0,
|
||||
"root_token": "hvs.YLYBCUXgeJM3Gq4C10tWBWjw"
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
{"Value":"AAAAAQIfWee0pQLTtQuDDqy8ytv7UNTWBvdFDvtUCPUQKTo/huln/bpaEZ5iJ6nTZ2brU9KR/GJqSSIN0oI/kdEcvP5SQOwXTaV8jG6stYxylbRj5NVfPRTADOcYj7fKs1JThTm5W/f+riRufiFqtuVlLCGkJFxbfuIlQJ3Z6X3lGD8TVwa1D9zfleqYGAwlPDp9gAdTNvq+WCOFaBWzEWMFtP+KQGxOm9/9joJnafGMjVt7JpQccJAwjzt37maIEwA518C/RueqTjX7so1x5YxqWpJGDRYGMxAy6Jtbtuio8HVLyj72kN/zwffO9uvww5a7S2bJTgsdLRVIqeUNFGHGKi39779kooQdi803zwQ0TCKqXe3hMi2qgYTHPfb75wBFnhtY2K5zPac="}
|
||||
@@ -1 +0,0 @@
|
||||
{"Value":"AAAAAQK+IKss4D02NfjwAaN0qOZRgCBhPhQbHr9KTlXiQDvEXYUvoSd6/lqjLXaXwCn+V4wGHClEQF8wBAhPUnPCqKU8bew9kg3dkuEe3Vz9NhkeWChUiozVjsBSlShD1FLvPfLhNYZ8ZaZRkNkyiQGa0Gx2HwBiklkM1LML0lZLj9uywRR4+XWmxXXB4oVuunKzMVpr+wlc+65vpZW3yAkz5pZIxQxmMIMKkCI+ixep8Mr0X8YKgPdmZZaQhq7LNtoqGLWjgGek60FfQLkf5ZQ+eOSesz3pUTWom7dPHvIuw2eb/lMdk/eEvFuyyH6VWp0feFejY+J2RvnHFZtMeniWXQfaze3hCMSmy84Bs9PbEbhYtOYtoFIjGH++8RHvW0rrM/S8iql5jmSQL+jQQvIbpCP9VMD1YmNzfYaMGfheYSV8UriOs3qlNuH19F0lc+MH1/jWbD/uMyiySzvQ0GIg8iAx55o+ItB1o05Zx4Z3I01+nZPqIap/G+TElI3HODudde9WiLjoe2ltonVRGj1cd5hQt+ThuU0UxmHCOIOCIPzGtlT9jTJFaTF8X68F5Io4hAGr66xmRJ7iCmEvc3WGPGjLxa82XmLp0mR5dwCSDoxBWyoQi85UZ0ajgbZJwvbu1U4EbcEkXCvugX+wQkOLojsluSvA4OK1AjRv6IjX0yIkZjXe+VphxDrVa5j3hIfQ3s2sQqdsezEOvkvrCoTdK1zLHfuK9cpu7XJsegwA7vuup+RuPhrvBPZuaqTn3vppfdGJHIw6eLNrdhEddUjVkRY/PVAp7up2dyYuKQNGqF1Cd3oEfdVgZIKJxvAUxnDItq48ETxPQewwxoBJjlDJDQSyIoesFCIBbckTN8wxmIfeMtPtUTDObgnFkbR9pU6votcwmPFT5UUuE0gvWiH4fDoQHKUyqQd1ovgGD3WjYDxM7KpIHM8US0l+wbZpkQCvqnc4rQQUCmNb+RIkfw3s+ZygL6kjhykR5fAvy1VvIf4u7chO9nVaazVaNSRp"}
|
||||
-1
@@ -1 +0,0 @@
|
||||
{"Value":"AAAAAQI+hY0O2nJzXRYJgPvTsTUSYQLALdyKMtZrzTVj4308UVDuIu9uKVbsjFR0x/4D8zmicpkmO08z8M4nXVKzgyvbDjTR"}
|
||||
-1
@@ -1 +0,0 @@
|
||||
{"Value":"AAAAAQKyEH7X6VXpjmJmfx48nMGWltuY98lh4M8W0Xdnfd+qdswry0HKdR0KCy1OPLjJRlECPGCGCtg9TYVaVSL30CwK/M2bzPRnAnTtvrAqguxOEGbpFtlQQ672/vRG"}
|
||||
-1
File diff suppressed because one or more lines are too long
-1
@@ -1 +0,0 @@
|
||||
{"Value":"AAAAAQKxfQFcpYjED242EUw3zOu9MqYyj5tcZrzogOixhZcBguLydso0Bpmg0pO8dAJDWtSQ4BTWKxZiNPuDmliAGKo2+90Z5Nqm81l1VdqGmTFsgRGvRes9GtFtyvEwkw/dPhDdDqHwVoiRfYCgIoa3ZU8Nc7KyjDnRncAmfNo+BYrhx3hzTpqrNLG1jWhmiG4Thi4mAT1wxOC/Ces8EiH6N8gKxbVVsBlbN659/5bj3QSHtHTEFwi1twBNKkvWTVam63Bc6d85Cd5Tk7YqkxwLquyObBnyWVLGimgwn8VMCTP/k6UdN8cZPol9FiSmV7101Ubdj3bFTRsRTfwSiN0e+SA2DZVXMIQjOSG4F0lFFrd/T8oJXwuyXeohwpzHGaXvdiY4mmLfvJugS4tHjTfKjYq1BGwqkayMdT6KWef5E8w1KNizKFfIyDrlLvrehRo8325JdH5aEVJ9MWctGlHc0es2tHskVoMIB6oEPG3SVM7MViUNuOyL0arN+0ouopnpAieiSfbsFKjXMPWbwhPXn2LaZaMVAvWzu8cWY5FuNP5R4Ks3mZBHid3xHx4PTJpmWs8KbtUNbTv8LcqMFNeJpIWwveEWrANH7WIj+jPCICcXkqoyZNSnS7TWGA=="}
|
||||
-1
@@ -1 +0,0 @@
|
||||
{"Value":"AAAAAQI4psbF6rPEbsOtxr9SQPkVMmkpxNHuLeXiL25zN4w/ljg8mW3eLF9xRsuCPrDa4LEfASEms3KxrwSviel0u8VEF5RaDioKhg7q1rhlt5tdFrU4R+tTqIAmYGGJQ4YAiHIDWDSJ9Z6YesngudEdg+A1hrvj9gGM3ZqRce40k4hBPEY+VBJyQKxZP03JSO+aS1u6XNNMp4I3s/nxj/qLnHJ1YmdD03qe/8CT2EhA98LWDnHxpogNDIZk9StpZUTWecTJhljbW8WZTbR6Tyde18aCCshMnDIKE7dk3R17gOltEEn6eE39+lREnzCpwMncbm33h6Ynv2d/eeNkw/QoMwpY/eL1Dvwg34mJuv0RmZC3ASw3P3l9xEmpPyxiCVm9MMDL08wj4Azfqmalh8pBGeAPmiHBWM3xRrtcCK6KlsCN5IP8c7BsmLTQdiP8ZqJvJLH23HBqJQ/aN3o25EXfsHoGIBtCg0HZBTVYOTwT5thTZKvPiv8P9mIPJvTNySCxdpqB+r0A+W3pIaotVX6XZt3bq5csi7T5nkP6MDF8Hi5XoR8Bc3FzF+w94roXiS72JgKarjqOW+bYGbcsO4jpjT+Ys0rLffLuZuzHP6/wGU9QypXL/gVcCQokYw=="}
|
||||
@@ -1 +0,0 @@
|
||||
{"Value":"AAAAAQLLuumPS+6rqyf/5rBi6Af6FibA+r9IP9uJF2gFpQ=="}
|
||||
@@ -1 +0,0 @@
|
||||
{"Value":"AAAAAQKluxV2V0Gu7EA54QJPkgqgasCEE9IUZ1NuNH3jzq2Yjua4IQTyDOACKUktyShjzY+X1RjVCIxWWz35RESuyS83fN6mnIiU7vNHJkdgJ8/XMf30eJDSdJM4PZx+zkGHoodbDWF102bQqPdOHNxw4eBQMpxxgsJ08RWnIYUq/3dTc67qKkEN2Lovv6Ov44JDnkoLN8kXo0BB/HRcHUS2Vi3FgLrq6iRJGizAlC9dyR2L3nDSWwUSFzeVnU1wV4LH37I7bosQ0JqIw2bZrrQQT743a+SzktVYPU6ZcNnBNkBhUVDEuB+hin8N4vLf9CABZjTTNJ3jgj+rK4miNxFCiOZabj/+1d5RV65zXdRgWGsgyPWVBZETuNZP7cwGcHE+TwQsm3n7MR1UP9NVxg6NLBeOYK57XxMNecRgdPqyaiIMd/aK05gxlqbvr57RxrdiuE9HCdKeJbxSVdxxh/dImOwS6k7+kTQf9AKuDzUSNPshyAcT0lN+0bbP1q+ath5dB42Ki2hemDmxLMcUa83Own/iwRviHzxxxBUML8fG/5fhiyktIBG720taic2A+noj6ZrBe/Pkaz+EFojc4vmGmYPPDCGPLCOnMT/pGK8t+783kLvMS0hJ4e6R6I5F04n+rxyHaVmppwmznQtxbcfPbbrSDN+8DxVHkfI3jDPgQZv2fwl7VDhpgZzUXSg+2tl0Li3rDHyU047AB62QgQ=="}
|
||||
@@ -1 +0,0 @@
|
||||
{"Value":"AAAAAQLLBUYnOkTKLbah0IzcgfzXZsKjVCz8k9Ui7u4MXA=="}
|
||||
@@ -1 +0,0 @@
|
||||
{"Value":"AAAAAQKxO0xOXslpRcRsOHd4gN35dAcW0sZSytFGzhvAAcCeSIDC061RamWxhUo6fsZvTz4="}
|
||||
@@ -1 +0,0 @@
|
||||
{"Value":"AAAAAQKUSY1mdYq8ms6WtjI9mtP34KbTunps2WO09LRBig=="}
|
||||
@@ -1 +0,0 @@
|
||||
{"Value":"AAAAAQJNwfjNdXJVausmf1RtWb57MLRw6vKMlzDiLwac4A=="}
|
||||
@@ -1 +0,0 @@
|
||||
{"Value":"AAAAAQLFDgHKNRgP4hzPyA0dJ5sD67Kwl4797lFPUtirEQ=="}
|
||||
@@ -1 +0,0 @@
|
||||
{"Value":"AAAAAQLfl24m7T5OMeHVDK/+e0gqmfN01gIs47KB73sXJl5/AjxRh7tFzN8qTOuW5LYhWiClA9BRiKnhZp2Nl9VwjM8UScgkqwXkX1jyKdmva73SqjkfOUuk5HJK5s8/6BzhhpmBkXroLQq0tLFtuwBihXay+pFG6hkmIFZ2tvlkzp0BaOgZePdFO4wsKMAiLBIe8jS2j1HEIsdGAPCJFydnSMnH3q2ylXVIU63nPhGzgD5QqM7Z+lp1CGEPqu24K55bJKd8Pa64RNlk3xg2xyeTYYySuWfmqARWiKMSSF8nsUIy+nInT+ZDUEysfFY3f/zUItf9UhK9zDFU/oh9H/cXAQoCs4kf5ISCJkc5OR55kCjDiksIGNRTn7ZVG7WQmD5lHp/yuZ1Ynsg2AP1obWxrTsBnLqZd0nZc3QU+LbBE5a9l8DVAVcghyyZIyPgHb7fnUCTn8QPkNEmJQreWT5nWPydp6NwLu6KrJn0gMOzcnKV0wwfEeFZvh3mrPYUUCUKu+l3ymyZeJzpmvEXa3Ruly5jeF7h66+FPQnYyidleIDX+5IIlLFD21gFJSYNAdYPMb5XCu/e+9xC1wJaxlLCNwKzu5KOkAgXN7gt0PJs4e8sxGlxUVxBOVGFiwhLMFhdhPxg4bMNkf0rfqLwizmlCqxRh79Q4KQcJ8jpy6VyT3ZPfv2VPrsVPdU9NCM6gIuu+ZhW8VkvdUvYuvx7oLQ=="}
|
||||
@@ -1 +0,0 @@
|
||||
{"Value":"AAAAAQK7XXTAHOgHyncRqiva4dCWEi93A2jzJMmlipyWgQ=="}
|
||||
@@ -1 +0,0 @@
|
||||
{"Value":"AAAAAQKkkgjIVViD29CtIh/CoqM8fspIkpsOvifO1pfg/LdZtm0="}
|
||||
@@ -1 +0,0 @@
|
||||
{"Value":"AAAAAQIfP6MnaRP2pH8kCvUC0ZdV1D4QYaAMiguZUr/7jpTYkiWqzlNx20xqJs+NeOUS0C3gb3nd/cSdjrJtfRfJRR+xOvlRQnHyipJwuuwG8DFubl7pdx2Deg7XBkcwH9T1ViMe3t+siFCTQ85JPeLDzWQ7ne87O6UVMsB09aX9t/SjCfYvqh8/CYnb2tUgBLeH6ZjsJw/VLyufYmEeM32TTWAITXNBX+5RDSHRyuLHYwJ77pfdFi1bzK6tMI6/VRmMmS/Enah+iiDqTtqQWgf017dI9U8pCstlO5IAklLGXTGzLPCYgK51umMDyW0RUSWVyAcgBKIF"}
|
||||
@@ -1 +0,0 @@
|
||||
{"Value":"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"}
|
||||
@@ -1 +0,0 @@
|
||||
{"Value":"AAAAAQKXMKfcpQ12dOqQAcfvL15E4sP1Rwr1OgsddOy2axQdG5+3zdzNLK0J98sSs67NRPLVihR0bs3pZL0TxbLf9xRS5qGQRq1U5sKct0MtaQyvr7pNas9PKr5DgDXowFu7ZcldZsGq1GCQlk1k5fZbg50LC6VeRSDYacHpcevXGjD4qqSfJdTdSqLEy8pNwY1LkaN4sY1YfXoW64gg22HbsuaZQueuuj7eBTCoX4Ij772Ry/YIF0xho7aHZ67NGWRPCamqppQkyaKGTxDmJiTbTSJm3fy2ZXGfrPLIHsX+AuIsfZ7N/Q=="}
|
||||
@@ -1 +0,0 @@
|
||||
{"Value":"AAAAAQLpUupiJoVcOOso6vA1jimAjtg0JXTg4cqC2LBn17oVLNvLbZqmzIAm8ZgSdUoZlhwcmTjVdvJXwviwmB+tkONW"}
|
||||
@@ -1 +0,0 @@
|
||||
{"Value":"AAAAAQIA33jLcgykM33s61MoH+VzeBG/M2LEduJqNQPFKRS26ilP4rAfLa563Xo2zTtACLpqbX5YJLLYdhEkrgn0I/DZLign/gJhcThACf8MnZ5jNRKKSFrx8iReiRDRMQK3LMaLEW4QdTadCUG3rt4NRayjZSkA9Y1WEFVtv3aP/JVwJ8kyWH5Qe3I="}
|
||||
-1
@@ -1 +0,0 @@
|
||||
{"Value":"AAAAAQLflMIdKEh8gmm1sOjYBQvPCWQKwolA/br3tSohw4x1gMz5xaLA/3HI9oAQ5/EAKE5ye8IAe3+fE+8IJQpMva+sdThsm0PAbkVCnbKhgVdZH5O7HSoHmlHQrVjMok6G6ibgxYewauE0RBYJdikTeVke2xvxDlcG2LDsxi8uRzgtq0WzeCFXGQH7rgvduUinPgC98Mk92AvlgyojP/T/hg3A3lV26b42y2I+dCax0G7qHTYpP0q9mD3jLmBkGXVmVKnN5uMZCx9laQlufd9ycHgvg/IZvDJf3o54zoUoe4poHqlr2V276xTNDOSOkt3YN9XPuvVPUNxKTEwzJ3X/ZVpj4xmbDGqEeeQI5N5daT1Vrw8hSANd6x1ALlHqnEL1/sIiXwqpjJWrZIRaZgGxcP9t81yp47RfE8se8Wm9/LeVE9yqiFDCuhE2Nzm1dsqLJmHba4k9q2Vp5AKOd5JLtkpoxIYOAmaRgtaPCyAlCAtsTu6RDmc/fk3rq0cgb28oKRKT8E7kELUworfw8lxtOtRphaoHJb3kZ1+fOGG+UivrZsZXvFK1IqFLmB6Lbi6+w4zRZkLycc0dpUcPNPBnDgJSqHW/Cz8CPtFZ7UdfuNpetAo6kNnsDcQAiFV2H73oxsJAwitc7By0j7Xp5ypxTyeB3Rp1GhkJJXEUvP/CixsWnkUXKIYgI46tVSP6Byo="}
|
||||
Reference in New Issue
Block a user