Foundatio 12.0.0

Prefix Reserved
There is a newer prerelease version of this package available.
See the version list below for details.
dotnet add package Foundatio --version 12.0.0
                    
NuGet\Install-Package Foundatio -Version 12.0.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Foundatio" Version="12.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Foundatio" Version="12.0.0" />
                    
Directory.Packages.props
<PackageReference Include="Foundatio" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Foundatio --version 12.0.0
                    
#r "nuget: Foundatio, 12.0.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Foundatio@12.0.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Foundatio&version=12.0.0
                    
Install as a Cake Addin
#tool nuget:?package=Foundatio&version=12.0.0
                    
Install as a Cake Tool

FoundatioFoundatio

Build status NuGet Version feedz.io Discord

Pluggable foundation blocks for building loosely coupled distributed apps.

Includes implementations in Redis, Azure, AWS, RabbitMQ, Kafka and in memory (for development).

Why Foundatio?

When building several big cloud applications we found a lack of great solutions (that's not to say there isn't solutions out there) for many key pieces to building scalable distributed applications while keeping the development experience simple. Here are a few examples of why we built and use Foundatio:

  • Wanted to build against abstract interfaces so that we could easily change implementations.
  • Wanted the blocks to be dependency injection friendly.
  • Caching: We were initially using an open source Redis cache client but then it turned into a commercial product with high licensing costs. Not only that, but there weren't any in memory implementations so every developer was required to set up and configure Redis.
  • Message Bus: We initially looked at NServiceBus (great product) but it had high licensing costs (they have to eat too) but was not OSS friendly. We also looked into MassTransit (another great product) but found Azure support lacking at the time and local set up a pain (for in memory). We wanted a simple message bus that just worked locally or in the cloud.
  • Storage: We couldn't find any existing project that was decoupled and supported in memory, file storage or Azure Blob Storage.

To summarize, if you want pain free development and testing while allowing your app to scale, use Foundatio!

Implementations

Getting Started (Development)

Foundatio can be installed via the NuGet package manager. If you need help, please open an issue or join our Discord chat room. We’re always here to help if you have any questions!

This section is for development purposes only! If you are trying to use the Foundatio libraries, please get them from NuGet.

  1. You will need to have Visual Studio Code installed.
  2. Open the Foundatio.slnx Visual Studio solution file.

Using Foundatio

The sections below contain a small subset of what's possible with Foundatio. We recommend taking a peek at the source code for more information. Please let us know if you have any questions or need assistance!

Caching

Caching allows you to store and access data lightning fast, saving you exspensive operations to create or get data. We provide four different cache implementations that derive from the ICacheClient interface:

  1. InMemoryCacheClient: An in memory cache client implementation. This cache implementation is only valid for the lifetime of the process. It's worth noting that the in memory cache client has the ability to cache the last X items via the MaxItems property. We use this in Exceptionless to only keep the last 250 resolved geoip results.
  2. HybridCacheClient: This cache implementation uses both an ICacheClient and the InMemoryCacheClient and uses an IMessageBus to keep the cache in sync across processes. This can lead to huge wins in performance as you are saving a serialization operation and a call to the remote cache if the item exists in the local cache.
  3. RedisCacheClient: A Redis cache client implementation.
  4. RedisHybridCacheClient: An implementation of HybridCacheClient that uses the RedisCacheClient as ICacheClient and the RedisMessageBus as IMessageBus.
  5. ScopedCacheClient: This cache implementation takes an instance of ICacheClient and a string scope. The scope is prefixed onto every cache key. This makes it really easy to scope all cache keys and remove them with ease.
Sample
using Foundatio.Caching;

ICacheClient cache = new InMemoryCacheClient();
await cache.SetAsync("test", 1);
var value = await cache.GetAsync<int>("test");

Queues

Queues offer First In, First Out (FIFO) message delivery. We provide four different queue implementations that derive from the IQueue interface:

  1. InMemoryQueue: An in memory queue implementation. This queue implementation is only valid for the lifetime of the process.
  2. RedisQueue: An Redis queue implementation.
  3. AzureServiceBusQueue: An Azure Service Bus Queue implementation.
  4. AzureStorageQueue: An Azure Storage Queue implementation.
  5. SQSQueue: An AWS SQS implementation.
Sample
using Foundatio.Queues;

IQueue<SimpleWorkItem> queue = new InMemoryQueue<SimpleWorkItem>();

await queue.EnqueueAsync(new SimpleWorkItem {
    Data = "Hello"
});

var workItem = await queue.DequeueAsync();

Locks

Locks ensure a resource is only accessed by one consumer at any given time. We provide two different locking implementations that derive from the ILockProvider interface:

  1. CacheLockProvider: A lock implementation that uses cache to communicate between processes.
  2. ThrottlingLockProvider: A lock implementation that only allows a certain amount of locks through. You could use this to throttle api calls to some external service and it will throttle them across all processes asking for that lock.
  3. ScopedLockProvider: This lock implementation takes an instance of ILockProvider and a string scope. The scope is prefixed onto every lock key. This makes it really easy to scope all locks and release them with ease.

It's worth noting that all lock providers take a ICacheClient. This allows you to ensure your code locks properly across machines.

Sample
using Foundatio.Lock;

ILockProvider locker = new CacheLockProvider(new InMemoryCacheClient(), new InMemoryMessageBus());
var testLock = await locker.AcquireAsync("test");
// ...
await testLock.ReleaseAsync();

ILockProvider throttledLocker = new ThrottlingLockProvider(new InMemoryCacheClient(), 1, TimeSpan.FromMinutes(1));
var throttledLock = await throttledLocker.AcquireAsync("test");
// ...
await throttledLock.ReleaseAsync();

Messaging

Allows you to publish and subscribe to messages flowing through your application. We provide four different message bus implementations that derive from the IMessageBus interface:

  1. InMemoryMessageBus: An in memory message bus implementation. This message bus implementation is only valid for the lifetime of the process.
  2. RedisMessageBus: A Redis message bus implementation.
  3. RabbitMQMessageBus: A RabbitMQ implementation.
  4. KafkaMessageBus: A Kafka implementation.
  5. AzureServiceBusMessageBus: An Azure Service Bus implementation.
Sample
using Foundatio.Messaging;

IMessageBus messageBus = new InMemoryMessageBus();
await messageBus.SubscribeAsync<SimpleMessageA>(msg => {
  // Got message
});

await messageBus.PublishAsync(new SimpleMessageA { Data = "Hello" });

Jobs

Allows you to run a long running process (in process or out of process) without worrying about it being terminated prematurely. We provide three different ways of defining a job, based on your use case:

  1. Jobs: All jobs must derive from the IJob interface. We also have a JobBase base class you can derive from which provides a JobContext and logging. You can then run jobs by calling RunAsync() on the job or by creating a instance of the JobRunner class and calling one of the Run methods. The JobRunner can be used to easily run your jobs as Azure Web Jobs.
Sample
using Foundatio.Jobs;

public class HelloWorldJob : JobBase {
  public int RunCount { get; set; }

  protected override Task<JobResult> RunInternalAsync(JobContext context) {
     RunCount++;
     return Task.FromResult(JobResult.Success);
  }
}
var job = new HelloWorldJob();
await job.RunAsync(); // job.RunCount = 1;
await job.RunContinuousAsync(iterationLimit: 2); // job.RunCount = 3;
await job.RunContinuousAsync(cancellationToken: new CancellationTokenSource(10).Token); // job.RunCount > 10;
  1. Queue Processor Jobs: A queue processor job works great for working with jobs that will be driven from queued data. Queue Processor jobs must derive from QueueJobBase<T> class. You can then run jobs by calling RunAsync() on the job or passing it to the JobRunner class. The JobRunner can be used to easily run your jobs as Azure Web Jobs.
Sample
using Foundatio.Jobs;

public class HelloWorldQueueJob : QueueJobBase<HelloWorldQueueItem> {
  public int RunCount { get; set; }

  public HelloWorldQueueJob(IQueue<HelloWorldQueueItem> queue) : base(queue) {}

  protected override Task<JobResult> ProcessQueueEntryAsync(QueueEntryContext<HelloWorldQueueItem> context) {
     RunCount++;

     return Task.FromResult(JobResult.Success);
  }
}

public class HelloWorldQueueItem {
  public string Message { get; set; }
}
 // Register the queue for HelloWorldQueueItem.
container.AddSingleton<IQueue<HelloWorldQueueItem>>(s => new InMemoryQueue<HelloWorldQueueItem>());

// To trigger the job we need to queue the HelloWorldWorkItem message.
// This assumes that we injected an instance of IQueue<HelloWorldWorkItem> queue

IJob job = new HelloWorldQueueJob();
await job.RunAsync(); // job.RunCount = 0; The RunCount wasn't incremented because we didn't enqueue any data.

await queue.EnqueueAsync(new HelloWorldWorkItem { Message = "Hello World" });
await job.RunAsync(); // job.RunCount = 1;

await queue.EnqueueAsync(new HelloWorldWorkItem { Message = "Hello World" });
await queue.EnqueueAsync(new HelloWorldWorkItem { Message = "Hello World" });
await job.RunUntilEmptyAsync(); // job.RunCount = 3;
  1. Work Item Jobs: A work item job will run in a job pool among other work item jobs. This type of job works great for things that don't happen often but should be in a job (Example: Deleting an entity that has many children.). It will be triggered when you publish a message on the message bus. The job must derive from the WorkItemHandlerBase class. You can then run all shared jobs via JobRunner class. The JobRunner can be used to easily run your jobs as Azure Web Jobs.
Sample
using System.Threading.Tasks;
using Foundatio.Jobs;

public class HelloWorldWorkItemHandler : WorkItemHandlerBase {
  public override async Task HandleItemAsync(WorkItemContext ctx) {
    var workItem = ctx.GetData<HelloWorldWorkItem>();

    // We can report the progress over the message bus easily.
    // To receive these messages just inject IMessageSubscriber
    // and Subscribe to messages of type WorkItemStatus
    await ctx.ReportProgressAsync(0, "Starting Hello World Job");
    await Task.Delay(TimeSpan.FromSeconds(2.5));
    await ctx.ReportProgressAsync(50, "Reading value");
    await Task.Delay(TimeSpan.FromSeconds(.5));
    await ctx.ReportProgressAsync(70, "Reading value");
    await Task.Delay(TimeSpan.FromSeconds(.5));
    await ctx.ReportProgressAsync(90, "Reading value.");
    await Task.Delay(TimeSpan.FromSeconds(.5));

    await ctx.ReportProgressAsync(100, workItem.Message);
  }
}

public class HelloWorldWorkItem {
  public string Message { get; set; }
}
// Register the shared job.
var handlers = new WorkItemHandlers();
handlers.Register<HelloWorldWorkItem, HelloWorldWorkItemHandler>();

// Register the handlers with dependency injection.
container.AddSingleton(handlers);

// Register the queue for WorkItemData.
container.AddSingleton<IQueue<WorkItemData>>(s => new InMemoryQueue<WorkItemData>());

// The job runner will automatically look for and run all registered WorkItemHandlers.
new JobRunner(container.GetRequiredService<WorkItemJob>(), instanceCount: 2).RunInBackground();
 // To trigger the job we need to queue the HelloWorldWorkItem message.
 // This assumes that we injected an instance of IQueue<WorkItemData> queue

 // NOTE: You may have noticed that HelloWorldWorkItem doesn't derive from WorkItemData.
 // Foundatio has an extension method that takes the model you post and serializes it to the
 // WorkItemData.Data property.
 await queue.EnqueueAsync(new HelloWorldWorkItem { Message = "Hello World" });

File Storage

We provide different file storage implementations that derive from the IFileStorage interface:

  1. InMemoryFileStorage: An in memory file implementation. This file storage implementation is only valid for the lifetime of the process.
  2. FolderFileStorage: An file storage implementation that uses the hard drive for storage.
  3. AzureFileStorage: An Azure Blob storage implementation.
  4. S3FileStorage: An AWS S3 file storage implementation.
  5. RedisFileStorage: An Redis file storage implementation.
  6. MinioFileStorage An Minio file storage implementation.
  7. AliyunFileStorage: An Aliyun file storage implementation.
  8. SshNetFileStorage: An SFTP file storage implementation.

We recommend using all of the IFileStorage implementations as singletons.

Sample
using Foundatio.Storage;

IFileStorage storage = new InMemoryFileStorage();
await storage.SaveFileAsync("test.txt", "test");
string content = await storage.GetFileContentsAsync("test.txt")

Resilience

Resilience policies provide a powerful way to handle transient failures and make your applications more robust by implementing retry logic, circuit breakers, and timeouts. The resilience system allows you to configure policies globally or per-operation, giving you fine-grained control over how Foundatio components handle failures.

The resilience system is built around the IResiliencePolicy interface and provides:

  1. Retry Logic: Automatically retry failed operations with configurable delays and maximum attempts
  2. Circuit Breaker: Temporarily stop calling failing services to prevent cascading failures
  3. Timeout: Set maximum execution time for operations
  4. Exponential Backoff: Gradually increase delays between retries with optional jitter
  5. Exception Filtering: Configure which exceptions should trigger retries

You can customize resilience behavior throughout Foundatio by implementing IResiliencePolicyProvider and passing it via options. This allows you to replace the default retry behavior in caching, queues, storage, and other Foundatio components.

Resilience Policy Sample
using Foundatio.Resilience;

// Create a basic resilience policy
var policy = new ResiliencePolicyBuilder()
    .WithMaxAttempts(5)
    .WithExponentialDelay(TimeSpan.FromSeconds(1))
    .WithTimeout(TimeSpan.FromMinutes(5))
    .WithJitter()
    .Build();

// Execute an operation with resilience
await policy.ExecuteAsync(async ct => {
    // Your operation that might fail
    await SomeUnreliableOperationAsync(ct);
});
Circuit Breaker Sample
using Foundatio.Resilience;

// Create a policy with circuit breaker
var policy = new ResiliencePolicyBuilder()
    .WithMaxAttempts(3)
    .WithCircuitBreaker(cb => cb
        .WithFailureRatio(0.5) // Open circuit at 50% failure rate
        .WithMinimumCalls(10)  // Need at least 10 calls before opening
        .WithBreakDuration(TimeSpan.FromMinutes(1)))
    .Build();

await policy.ExecuteAsync(async ct => {
    // This will be protected by the circuit breaker
    await CallExternalServiceAsync(ct);
});
Custom Resilience Provider Sample
using Foundatio.Resilience;

// Create a custom resilience provider for your application
var resilienceProvider = new ResiliencePolicyProvider()
    .WithDefaultPolicy(builder => builder
        .WithMaxAttempts(3)
        .WithExponentialDelay(TimeSpan.FromSeconds(1))
        .WithTimeout(TimeSpan.FromMinutes(2)))
    .WithPolicy("external-api", builder => builder
        .WithMaxAttempts(5)
        .WithCircuitBreaker()
        .WithTimeout(TimeSpan.FromSeconds(30)))
    .WithPolicy<MyService>(builder => builder
        .WithMaxAttempts(3)
        .WithLinearDelay()
        .WithTimeout(TimeSpan.FromSeconds(30)));

// Use named policies
var apiPolicy = resilienceProvider.GetPolicy("external-api");
await apiPolicy.ExecuteAsync(async ct => {
    await CallExternalApiAsync(ct);
});

// Use class based policies
var apiPolicy = resilienceProvider.GetPolicy<MyService>();
await apiPolicy.ExecuteAsync(async ct => {
    await CallMyServiceAsync(ct);
});

Sample Application

We have both slides and a sample application that shows off how to use Foundatio.

Thanks to all the people who have contributed

contributors

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (54)

Showing the top 5 NuGet packages that depend on Foundatio:

Package Downloads
Foundatio.Redis

Pluggable foundation blocks for building distributed apps.

Foundatio.JsonNet

Pluggable foundation blocks for building distributed apps.

Foundatio.MetricsNET

Pluggable foundation blocks for building distributed apps.

Foundatio.AzureStorage

Pluggable foundation blocks for building distributed apps.

Foundatio.AWS

Pluggable foundation blocks for building distributed apps.

GitHub repositories (2)

Showing the top 2 popular GitHub repositories that depend on Foundatio:

Repository Stars
Kaioru/Edelstein
A v.95.1 Mushroom game server emulator written in C# .NET
FoundatioFx/Foundatio.Redis
Foundatio Redis
Version Downloads Last Updated
13.0.0-beta1 657 1/12/2026
12.0.0 69,098 8/20/2025
11.1.0 41,251 5/9/2025
11.0.8 92,310 1/31/2025
11.0.7 7,771 1/31/2025
11.0.6 46,118 11/26/2024
11.0.5 28,593 9/27/2024
11.0.4 8,021 9/27/2024
11.0.3 12,494 9/16/2024
11.0.2 37,629 8/31/2024
11.0.1 7,669 8/31/2024
11.0.0 8,085 8/30/2024
10.7.1 3,720,309 3/27/2024
10.7.0 192,044 1/5/2024
10.6.1 389,195 6/23/2023
10.6.0 437,071 1/1/2023
10.5.0 169,921 5/18/2022
10.4.0 46,928 3/7/2022
10.3.1 42,007 1/20/2022
10.3.0 11,857 1/20/2022
10.2.5 168,144 12/7/2021
10.2.4 12,273 12/3/2021
10.2.3 16,043 11/22/2021
10.2.2 215,312 9/23/2021
10.2.1 40,648 7/19/2021
10.2.0 109,896 7/8/2021
10.1.4 28,415 6/16/2021
10.1.3 38,441 4/23/2021
10.1.2 10,737 4/23/2021
10.1.1 13,800 4/15/2021
10.1.0 11,550 4/13/2021
10.0.2 99,370 1/20/2021
10.0.1 46,714 11/2/2020
10.0.0 54,781 9/16/2020
10.0.0-beta9 7,073 8/25/2020
10.0.0-beta8 6,231 8/3/2020
10.0.0-beta7 5,251 7/29/2020
10.0.0-beta6 6,563 7/7/2020
10.0.0-beta5 5,963 6/20/2020
10.0.0-beta3 5,577 6/14/2020
10.0.0-beta2 5,573 6/6/2020
10.0.0-beta10 5,147 9/15/2020
10.0.0-beta1 6,296 5/26/2020
10.0.0-alpha3 3,404 5/5/2020
10.0.0-alpha2 3,416 4/27/2020
10.0.0-alpha1 3,274 4/25/2020
9.1.1 160,093 4/28/2020
9.1.0 11,802 4/28/2020
9.0.0 155,839 1/16/2020
8.1.2126 396,954 8/30/2019
8.1.2058 105,320 5/14/2019
8.1.2027 26,328 4/16/2019
8.0.1965 71,849 2/24/2019
8.0.1948 17,682 2/22/2019
7.1.1845 270,683 11/3/2018
7.1.1841 13,285 11/3/2018
7.1.1837 13,296 11/1/2018
7.1.1833 34,643 11/1/2018
7.0.1831 13,328 11/1/2018
7.0.1818 13,910 10/30/2018
7.0.1738 85,799 9/7/2018
7.0.1706 108,021 5/9/2018
6.0.1586 64,792 11/30/2017
5.1.1562 18,403 10/30/2017
5.1.1521 19,775 9/27/2017
5.1.1515 13,524 9/26/2017
5.1.1501 19,658 9/14/2017
5.1.1498 13,892 8/28/2017
5.1.1492 13,563 8/28/2017
5.1.1490 21,774 8/16/2017
5.1.1474 32,924 8/1/2017
5.1.1470 12,910 7/31/2017
5.1.1457 35,293 6/23/2017
5.1.1448 20,451 5/5/2017
5.1.1443 14,564 5/5/2017
5.0.1336 17,629 3/14/2017
5.0.1334 13,690 3/13/2017
5.0.1331 14,634 3/12/2017
5.0.1329-pre 5,510 3/12/2017
5.0.1328-pre 5,481 3/12/2017
5.0.1327-pre 5,465 3/12/2017
5.0.1326-pre 5,536 3/12/2017
5.0.1324-pre 5,525 3/12/2017
4.3.1323-pre 5,559 3/11/2017
4.3.1319 15,224 3/1/2017
4.3.1317 16,183 2/23/2017
4.3.1316 13,745 2/22/2017
4.3.1315 13,714 2/22/2017
4.3.1314 20,127 2/20/2017
4.3.1312 13,453 2/20/2017
4.3.1311-pre 5,376 2/20/2017
4.3.1307 18,629 2/16/2017
4.3.1306 13,515 2/15/2017
4.3.1305 14,589 2/15/2017
4.3.1304-pre 5,397 2/15/2017
4.3.1303-pre 5,266 2/14/2017
4.3.1301 13,978 2/14/2017
4.3.1299 14,105 2/14/2017
4.3.1297 11,556 2/14/2017
4.3.1293 13,518 2/12/2017
4.3.1292 13,487 2/10/2017
4.3.1291 13,442 2/10/2017
4.3.1290 13,587 2/10/2017
4.3.1289 13,584 2/9/2017
4.3.1288 13,516 2/9/2017
4.3.1286 13,650 2/8/2017
4.3.1282 15,244 2/5/2017
4.3.1281 11,621 2/5/2017
4.3.1280 11,691 2/5/2017
4.3.1276-pre 4,337 2/5/2017
4.3.1177-pre 8,703 9/2/2016
4.3.1164-pre 9,803 8/21/2016
4.2.1205-pre 4,469 9/19/2016
4.2.1183 67,477 9/9/2016
4.2.1179 11,498 9/8/2016
4.2.1176 16,845 9/2/2016
4.2.1172 11,414 9/1/2016
4.2.1171-pre 4,124 9/1/2016
4.2.1169 26,278 8/22/2016
4.2.1167-pre 4,133 8/22/2016
4.2.1166-pre 4,188 8/22/2016
4.2.1161 18,081 8/10/2016
4.2.1156-pre 4,108 8/2/2016
4.2.1155 12,955 8/1/2016
4.2.1150 14,915 7/20/2016
4.2.1149-pre 4,670 7/19/2016
4.2.1148-pre 4,630 7/19/2016
4.2.1147-pre 4,659 7/19/2016
4.2.1146-pre 4,653 7/19/2016
4.2.1137 11,477 7/19/2016
4.2.1129-pre 4,132 7/19/2016
4.2.1128-pre 4,140 7/19/2016
4.2.1127-pre 4,158 7/19/2016
4.2.1126-pre 4,173 7/19/2016
4.2.1125-pre 4,124 7/19/2016
4.2.1123-pre 4,122 7/19/2016
4.2.1119-pre 4,156 7/18/2016
4.2.1113-pre 4,697 7/16/2016
4.2.1108-pre 4,649 7/15/2016
4.2.1107-pre 4,711 7/15/2016
4.2.1104-pre 4,826 7/13/2016
4.2.1099-pre 8,102 7/12/2016
4.2.1098-pre 4,686 7/12/2016
4.2.1093-pre 4,574 7/8/2016
4.2.1091-pre 4,606 7/8/2016
4.2.1090-pre 4,714 7/8/2016
4.2.1089-pre 4,657 7/7/2016
4.2.1087-pre 4,593 7/7/2016
4.2.1083-pre 4,637 7/6/2016
4.2.1082-pre 4,648 7/6/2016
4.2.1081-pre 4,555 7/6/2016
4.2.1079-pre 4,713 7/6/2016
4.2.1078-pre 4,621 7/6/2016
4.2.1073-pre 4,533 7/5/2016
4.2.1070-pre 4,660 7/5/2016
4.2.1069-pre 4,608 7/1/2016
4.2.1059-pre 4,627 7/1/2016
4.2.1046-pre 4,491 6/24/2016
4.2.1031-pre 4,144 6/24/2016
4.2.1028-pre 4,148 6/24/2016
4.2.1027-pre 4,168 6/24/2016
4.1.1009 20,860 6/15/2016
4.1.1002-pre 5,621 6/14/2016
4.1.995-pre 5,842 6/13/2016
4.1.989-pre 5,652 5/26/2016
4.1.983-pre 5,291 5/25/2016
4.1.982-pre 5,268 5/25/2016
4.1.978-pre 5,469 5/6/2016
4.1.977-pre 5,380 5/5/2016
4.1.975-pre 5,878 5/5/2016
4.0.958 15,906 5/1/2016
4.0.957 14,010 4/29/2016
4.0.956 14,024 4/29/2016
4.0.955 13,978 4/28/2016
4.0.941 13,930 4/27/2016
4.0.940 14,005 4/27/2016
4.0.925 13,884 4/27/2016
4.0.922 13,721 4/27/2016
4.0.909 13,917 4/20/2016
4.0.880 14,366 4/7/2016
4.0.869 13,881 3/30/2016
4.0.864 13,708 3/29/2016
4.0.861 13,832 3/29/2016
4.0.860 13,860 3/29/2016
4.0.857 13,740 3/29/2016
4.0.855 13,799 3/29/2016
4.0.846 13,572 3/22/2016
4.0.842 13,695 3/21/2016
4.0.836 13,594 3/18/2016
4.0.835 13,689 3/18/2016
4.0.834 13,674 3/17/2016
4.0.832 13,494 3/17/2016
4.0.831 13,589 3/16/2016
4.0.829 13,517 3/16/2016
4.0.828 13,490 3/15/2016
4.0.827 13,576 3/15/2016
4.0.826 13,331 3/15/2016
4.0.825 13,685 3/13/2016
4.0.821 13,767 3/11/2016
4.0.819 13,545 3/11/2016
4.0.818 13,609 3/11/2016
4.0.816 13,746 3/11/2016
4.0.815 13,384 3/11/2016
4.0.814 13,726 3/11/2016
4.0.813 13,534 3/10/2016
4.0.812 13,786 3/10/2016
4.0.811 13,413 3/10/2016
4.0.810 13,524 3/10/2016
4.0.809 13,565 3/10/2016
4.0.805 13,569 3/9/2016
4.0.797 13,534 3/9/2016
4.0.796 13,505 3/9/2016
4.0.794 13,581 3/9/2016
4.0.793 13,488 3/9/2016
4.0.792 13,481 3/8/2016
4.0.791 19,042 3/8/2016
4.0.790 13,485 3/8/2016
4.0.788 13,540 3/8/2016
4.0.774 13,794 3/2/2016
4.0.773 13,635 3/1/2016
4.0.772 13,684 3/1/2016
4.0.770 13,535 3/1/2016
4.0.769 13,600 3/1/2016
4.0.762 13,562 3/1/2016
4.0.761 13,865 3/1/2016
4.0.760 14,966 2/29/2016
4.0.759 13,574 2/29/2016
4.0.758 13,780 2/29/2016
4.0.757 13,369 2/29/2016
4.0.756 13,899 2/27/2016
4.0.755 13,998 2/27/2016
4.0.754 13,886 2/27/2016
4.0.753 13,869 2/27/2016
4.0.752 13,691 2/27/2016
4.0.750 13,969 2/27/2016
4.0.749 13,904 2/27/2016
4.0.747 13,988 2/26/2016
4.0.746 13,943 2/26/2016
4.0.744 13,859 2/26/2016
4.0.743 13,964 2/26/2016
4.0.742 13,931 2/26/2016
4.0.741 13,799 2/26/2016
4.0.739 13,570 2/25/2016
4.0.738 13,646 2/25/2016
4.0.734 13,394 2/25/2016
4.0.733-beta 5,254 2/25/2016
4.0.672 14,032 2/16/2016
4.0.669 13,507 2/11/2016
4.0.668 44,537 2/11/2016
3.0.654 14,583 2/10/2016
3.0.646 13,200 2/5/2016
3.0.645 13,191 2/5/2016
3.0.644 13,040 2/5/2016
3.0.639 13,059 2/3/2016
3.0.638 13,207 2/2/2016
3.0.637 13,042 2/1/2016
3.0.635 13,072 2/1/2016
3.0.633 17,296 1/27/2016
3.0.632 13,090 1/27/2016
3.0.629 13,246 1/18/2016
3.0.626 12,982 1/18/2016
3.0.625 12,936 1/18/2016
3.0.624 23,417 12/17/2015
3.0.623 13,275 12/9/2015
3.0.622 13,131 12/9/2015
3.0.621 13,215 12/9/2015
3.0.620 13,090 12/8/2015
3.0.613 13,695 12/4/2015
3.0.611 13,236 12/3/2015
3.0.610 13,460 11/30/2015
3.0.606 13,414 11/30/2015
3.0.605 13,402 11/25/2015
3.0.603 13,343 11/23/2015
3.0.601 13,153 11/23/2015
3.0.600 13,120 11/19/2015
3.0.599 13,111 11/19/2015
3.0.598 13,106 11/17/2015
3.0.592 13,037 11/12/2015
3.0.589 13,215 11/10/2015
3.0.588 13,174 11/10/2015
3.0.586 13,182 11/10/2015
3.0.584 13,152 11/10/2015
3.0.583 13,171 11/10/2015
3.0.581 13,443 11/6/2015
3.0.579 13,037 11/6/2015
3.0.576 13,114 11/5/2015
3.0.575 13,077 11/4/2015
3.0.574 12,996 11/4/2015
3.0.569 13,113 11/3/2015
3.0.568 13,142 11/3/2015
3.0.566 13,109 11/3/2015
3.0.548 11,456 11/3/2015
3.0.545 13,321 10/28/2015
3.0.538 13,243 10/22/2015
3.0.537 13,161 10/21/2015
3.0.536 13,179 10/21/2015
3.0.534 13,141 10/21/2015
3.0.532 13,074 10/21/2015
3.0.531 13,173 10/21/2015
3.0.524 13,117 10/15/2015
3.0.523 13,345 10/10/2015
3.0.522 13,089 10/10/2015
3.0.520 13,159 10/9/2015
3.0.519 13,441 10/9/2015
3.0.518 13,289 10/9/2015
3.0.517 13,385 10/9/2015
3.0.516 13,298 10/7/2015
3.0.514 13,387 10/6/2015
3.0.513 13,190 10/6/2015
3.0.512 13,214 10/6/2015
3.0.509 13,355 10/1/2015
3.0.507 13,228 10/1/2015
3.0.505 13,155 9/30/2015
3.0.503 13,248 9/30/2015
3.0.502 13,208 9/30/2015
3.0.479 13,241 9/25/2015
3.0.476 13,151 9/24/2015
3.0.471 13,198 9/24/2015
3.0.470 13,238 9/24/2015
3.0.469 13,167 9/24/2015
3.0.468 13,134 9/24/2015
3.0.467 13,158 9/24/2015
3.0.465 13,168 9/24/2015
3.0.459 13,132 9/23/2015
3.0.456 13,212 9/23/2015
3.0.455 13,186 9/22/2015
3.0.454 13,347 9/19/2015
3.0.453 13,166 9/19/2015
3.0.452 13,071 9/18/2015
3.0.451 13,107 9/18/2015
3.0.450 13,115 9/18/2015
3.0.447 14,506 9/18/2015
2.0.378 13,235 9/5/2015
2.0.372 13,125 9/4/2015
2.0.370 13,182 9/4/2015
2.0.368 13,094 9/4/2015
2.0.365 14,065 9/3/2015
2.0.363 13,058 9/3/2015
2.0.361 13,110 9/3/2015
1.0.360 13,185 9/1/2015
1.0.359 13,090 9/1/2015
1.0.358 13,147 9/1/2015
1.0.356 13,132 8/31/2015
1.0.355 13,172 8/31/2015
1.0.354 13,117 8/29/2015
1.0.305 13,167 8/19/2015
1.0.299 13,595 8/8/2015
1.0.293 13,218 7/20/2015
1.0.292 13,219 7/20/2015
1.0.289 13,315 7/10/2015
1.0.288 13,228 7/10/2015
1.0.286 13,200 7/7/2015
1.0.285 13,276 7/7/2015
1.0.284 13,176 7/7/2015
1.0.282 13,166 7/6/2015
1.0.281 13,175 7/6/2015
1.0.279 13,144 7/6/2015
1.0.277 13,252 6/18/2015
1.0.276 13,230 6/8/2015
1.0.275 13,163 6/8/2015
1.0.274 12,978 6/8/2015
1.0.272 13,857 6/1/2015
1.0.269 13,127 5/25/2015
1.0.268 13,123 5/24/2015
1.0.266 13,066 5/24/2015
1.0.263 13,154 5/21/2015
1.0.258 13,148 5/19/2015
1.0.257 13,174 5/18/2015
1.0.256 13,473 5/17/2015
1.0.254 13,227 5/13/2015
1.0.253 13,113 5/13/2015
1.0.250 13,083 5/13/2015
1.0.249 13,219 5/12/2015
1.0.248 13,122 5/12/2015
1.0.245 13,078 5/12/2015
1.0.241 13,115 5/12/2015
1.0.240 12,909 5/12/2015
1.0.237 12,932 5/11/2015
1.0.234 12,895 5/9/2015
1.0.233 12,767 5/9/2015
1.0.231 12,859 5/7/2015
1.0.230 12,987 5/7/2015
1.0.229 12,855 5/7/2015
1.0.226 12,848 5/7/2015
1.0.217 13,104 4/28/2015
1.0.215 12,998 4/27/2015
1.0.213 13,088 4/23/2015
1.0.210 12,865 4/23/2015
1.0.209 12,860 4/15/2015
1.0.202 12,946 4/15/2015
1.0.201 12,914 4/15/2015
1.0.198 12,827 4/15/2015
1.0.197 12,887 4/15/2015
1.0.196 12,983 4/15/2015
1.0.195 12,943 4/15/2015
1.0.194 12,940 4/15/2015
1.0.193 12,913 4/15/2015
1.0.192 12,861 4/15/2015
1.0.191 13,020 4/14/2015
1.0.189 12,852 4/10/2015
1.0.187 12,941 4/9/2015
1.0.186 12,995 4/8/2015
1.0.185 13,074 4/6/2015
1.0.183 12,773 4/3/2015
1.0.181 12,924 4/3/2015
1.0.180 12,962 4/2/2015
1.0.178 12,885 4/1/2015
1.0.177 12,934 4/1/2015
1.0.175 12,808 4/1/2015
1.0.171 12,819 3/31/2015
1.0.170 12,760 3/31/2015
1.0.168 12,826 3/31/2015
1.0.164 13,141 3/30/2015
1.0.162 13,078 3/28/2015
1.0.160 13,095 3/27/2015
1.0.159 13,106 3/26/2015
1.0.157 12,645 3/24/2015
1.0.156 13,059 3/24/2015
1.0.154 13,009 3/24/2015
1.0.152 13,240 3/24/2015
1.0.151 13,041 3/23/2015
1.0.150 13,095 3/23/2015
1.0.149 13,129 3/23/2015
1.0.148 13,087 3/23/2015
1.0.147 12,996 3/21/2015
1.0.146 13,099 3/20/2015
1.0.145 13,089 3/19/2015
1.0.143 13,229 3/18/2015
1.0.142 13,227 3/12/2015
1.0.141 13,058 3/12/2015
1.0.140 13,034 3/5/2015
1.0.139 13,080 3/5/2015
1.0.138 13,064 3/4/2015
1.0.137 12,997 3/3/2015
1.0.134 13,428 3/3/2015
1.0.129 13,244 3/3/2015
1.0.128 13,150 3/3/2015
1.0.125 13,123 2/28/2015
1.0.124 13,404 2/28/2015
1.0.122 13,162 2/28/2015
1.0.119 13,440 2/25/2015
1.0.117 13,739 2/24/2015
1.0.115 13,487 2/24/2015
1.0.114 13,296 2/23/2015
1.0.113 13,267 2/23/2015
1.0.112 13,387 2/23/2015
1.0.111 13,465 2/23/2015
1.0.110 13,468 2/23/2015
1.0.109 13,371 2/22/2015
1.0.108 13,283 2/22/2015
1.0.103 13,492 2/22/2015
1.0.37 12,131 2/18/2015
1.0.36 12,235 2/18/2015
1.0.35 12,301 2/17/2015
1.0.34 12,252 2/17/2015
1.0.33 12,318 2/17/2015
1.0.32 12,274 2/15/2015
1.0.31 12,267 2/15/2015
1.0.30 11,641 2/15/2015
1.0.28 11,850 2/15/2015
1.0.27 11,710 2/15/2015
1.0.26 11,776 2/13/2015
1.0.25 11,747 2/13/2015
1.0.24 11,677 2/12/2015
1.0.23 11,723 2/12/2015
1.0.0 13,863 2/21/2015