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 (53)

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.AzureServiceBus

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 312 1/12/2026
12.0.0 59,713 8/20/2025
11.1.0 39,815 5/9/2025
11.0.8 90,117 1/31/2025
11.0.7 6,946 1/31/2025
11.0.6 44,647 11/26/2024
11.0.5 27,641 9/27/2024
11.0.4 7,195 9/27/2024
11.0.3 11,624 9/16/2024
11.0.2 36,456 8/31/2024
11.0.1 6,843 8/31/2024
11.0.0 7,260 8/30/2024
10.7.1 3,638,727 3/27/2024
10.7.0 190,847 1/5/2024
10.6.1 386,041 6/23/2023
10.6.0 434,614 1/1/2023
10.5.0 168,782 5/18/2022
10.4.0 46,046 3/7/2022
10.3.1 40,966 1/20/2022
10.3.0 11,029 1/20/2022
10.2.5 167,276 12/7/2021
10.2.4 11,445 12/3/2021
10.2.3 15,217 11/22/2021
10.2.2 214,441 9/23/2021
10.2.1 39,754 7/19/2021
10.2.0 108,783 7/8/2021
10.1.4 27,590 6/16/2021
10.1.3 37,611 4/23/2021
10.1.2 9,909 4/23/2021
10.1.1 12,965 4/15/2021
10.1.0 10,725 4/13/2021
10.0.2 98,262 1/20/2021
10.0.1 45,888 11/2/2020
10.0.0 53,934 9/16/2020
10.0.0-beta9 7,067 8/25/2020
10.0.0-beta8 6,227 8/3/2020
10.0.0-beta7 5,249 7/29/2020
10.0.0-beta6 6,551 7/7/2020
10.0.0-beta5 5,962 6/20/2020
10.0.0-beta3 5,572 6/14/2020
10.0.0-beta2 5,560 6/6/2020
10.0.0-beta10 5,141 9/15/2020
10.0.0-beta1 6,296 5/26/2020
10.0.0-alpha3 3,402 5/5/2020
10.0.0-alpha2 3,414 4/27/2020
10.0.0-alpha1 3,271 4/25/2020
9.1.1 159,218 4/28/2020
9.1.0 10,977 4/28/2020
9.0.0 154,928 1/16/2020
8.1.2126 395,873 8/30/2019
8.1.2058 104,488 5/14/2019
8.1.2027 25,500 4/16/2019
8.0.1965 71,021 2/24/2019
8.0.1948 16,852 2/22/2019
7.1.1845 269,779 11/3/2018
7.1.1841 12,457 11/3/2018
7.1.1837 12,467 11/1/2018
7.1.1833 33,810 11/1/2018
7.0.1831 12,500 11/1/2018
7.0.1818 13,085 10/30/2018
7.0.1738 84,800 9/7/2018
7.0.1706 107,186 5/9/2018
6.0.1586 63,835 11/30/2017
5.1.1562 17,562 10/30/2017
5.1.1521 18,947 9/27/2017
5.1.1515 12,692 9/26/2017
5.1.1501 18,826 9/14/2017
5.1.1498 13,062 8/28/2017
5.1.1492 12,733 8/28/2017
5.1.1490 20,942 8/16/2017
5.1.1474 32,095 8/1/2017
5.1.1470 12,079 7/31/2017
5.1.1457 34,458 6/23/2017
5.1.1448 19,622 5/5/2017
5.1.1443 13,733 5/5/2017
5.0.1336 16,798 3/14/2017
5.0.1334 12,858 3/13/2017
5.0.1331 13,804 3/12/2017
5.0.1329-pre 5,502 3/12/2017
5.0.1328-pre 5,475 3/12/2017
5.0.1327-pre 5,457 3/12/2017
5.0.1326-pre 5,527 3/12/2017
5.0.1324-pre 5,516 3/12/2017
4.3.1323-pre 5,548 3/11/2017
4.3.1319 14,382 3/1/2017
4.3.1317 15,348 2/23/2017
4.3.1316 12,913 2/22/2017
4.3.1315 12,882 2/22/2017
4.3.1314 19,295 2/20/2017
4.3.1312 12,625 2/20/2017
4.3.1311-pre 5,366 2/20/2017
4.3.1307 17,800 2/16/2017
4.3.1306 12,684 2/15/2017
4.3.1305 13,758 2/15/2017
4.3.1304-pre 5,387 2/15/2017
4.3.1303-pre 5,259 2/14/2017
4.3.1301 13,150 2/14/2017
4.3.1299 13,278 2/14/2017
4.3.1297 10,729 2/14/2017
4.3.1293 12,690 2/12/2017
4.3.1292 12,657 2/10/2017
4.3.1291 12,613 2/10/2017
4.3.1290 12,757 2/10/2017
4.3.1289 12,756 2/9/2017
4.3.1288 12,688 2/9/2017
4.3.1286 12,821 2/8/2017
4.3.1282 14,416 2/5/2017
4.3.1281 10,794 2/5/2017
4.3.1280 10,865 2/5/2017
4.3.1276-pre 4,329 2/5/2017
4.3.1177-pre 8,696 9/2/2016
4.3.1164-pre 9,785 8/21/2016
4.2.1205-pre 4,461 9/19/2016
4.2.1183 66,648 9/9/2016
4.2.1179 10,665 9/8/2016
4.2.1176 16,015 9/2/2016
4.2.1172 10,581 9/1/2016
4.2.1171-pre 4,118 9/1/2016
4.2.1169 25,451 8/22/2016
4.2.1167-pre 4,124 8/22/2016
4.2.1166-pre 4,183 8/22/2016
4.2.1161 17,248 8/10/2016
4.2.1156-pre 4,102 8/2/2016
4.2.1155 12,125 8/1/2016
4.2.1150 14,085 7/20/2016
4.2.1149-pre 4,664 7/19/2016
4.2.1148-pre 4,619 7/19/2016
4.2.1147-pre 4,648 7/19/2016
4.2.1146-pre 4,646 7/19/2016
4.2.1137 10,644 7/19/2016
4.2.1129-pre 4,121 7/19/2016
4.2.1128-pre 4,134 7/19/2016
4.2.1127-pre 4,148 7/19/2016
4.2.1126-pre 4,159 7/19/2016
4.2.1125-pre 4,118 7/19/2016
4.2.1123-pre 4,115 7/19/2016
4.2.1119-pre 4,148 7/18/2016
4.2.1113-pre 4,689 7/16/2016
4.2.1108-pre 4,643 7/15/2016
4.2.1107-pre 4,704 7/15/2016
4.2.1104-pre 4,820 7/13/2016
4.2.1099-pre 8,094 7/12/2016
4.2.1098-pre 4,681 7/12/2016
4.2.1093-pre 4,565 7/8/2016
4.2.1091-pre 4,599 7/8/2016
4.2.1090-pre 4,708 7/8/2016
4.2.1089-pre 4,651 7/7/2016
4.2.1087-pre 4,585 7/7/2016
4.2.1083-pre 4,629 7/6/2016
4.2.1082-pre 4,642 7/6/2016
4.2.1081-pre 4,549 7/6/2016
4.2.1079-pre 4,708 7/6/2016
4.2.1078-pre 4,616 7/6/2016
4.2.1073-pre 4,523 7/5/2016
4.2.1070-pre 4,652 7/5/2016
4.2.1069-pre 4,600 7/1/2016
4.2.1059-pre 4,617 7/1/2016
4.2.1046-pre 4,484 6/24/2016
4.2.1031-pre 4,135 6/24/2016
4.2.1028-pre 4,139 6/24/2016
4.2.1027-pre 4,159 6/24/2016
4.1.1009 20,021 6/15/2016
4.1.1002-pre 5,614 6/14/2016
4.1.995-pre 5,834 6/13/2016
4.1.989-pre 5,644 5/26/2016
4.1.983-pre 5,283 5/25/2016
4.1.982-pre 5,259 5/25/2016
4.1.978-pre 5,459 5/6/2016
4.1.977-pre 5,375 5/5/2016
4.1.975-pre 5,870 5/5/2016
4.0.958 15,074 5/1/2016
4.0.957 13,177 4/29/2016
4.0.956 13,192 4/29/2016
4.0.955 13,150 4/28/2016
4.0.941 13,100 4/27/2016
4.0.940 13,174 4/27/2016
4.0.925 13,053 4/27/2016
4.0.922 12,891 4/27/2016
4.0.909 13,087 4/20/2016
4.0.880 13,538 4/7/2016
4.0.869 13,050 3/30/2016
4.0.864 12,873 3/29/2016
4.0.861 13,001 3/29/2016
4.0.860 13,031 3/29/2016
4.0.857 12,909 3/29/2016
4.0.855 12,968 3/29/2016
4.0.846 12,743 3/22/2016
4.0.842 12,864 3/21/2016
4.0.836 12,766 3/18/2016
4.0.835 12,863 3/18/2016
4.0.834 12,845 3/17/2016
4.0.832 12,665 3/17/2016
4.0.831 12,761 3/16/2016
4.0.829 12,687 3/16/2016
4.0.828 12,662 3/15/2016
4.0.827 12,748 3/15/2016
4.0.826 12,483 3/15/2016
4.0.825 12,854 3/13/2016
4.0.821 12,933 3/11/2016
4.0.819 12,715 3/11/2016
4.0.818 12,781 3/11/2016
4.0.816 12,915 3/11/2016
4.0.815 12,557 3/11/2016
4.0.814 12,894 3/11/2016
4.0.813 12,705 3/10/2016
4.0.812 12,950 3/10/2016
4.0.811 12,584 3/10/2016
4.0.810 12,692 3/10/2016
4.0.809 12,734 3/10/2016
4.0.805 12,734 3/9/2016
4.0.797 12,706 3/9/2016
4.0.796 12,676 3/9/2016
4.0.794 12,752 3/9/2016
4.0.793 12,658 3/9/2016
4.0.792 12,650 3/8/2016
4.0.791 18,210 3/8/2016
4.0.790 12,654 3/8/2016
4.0.788 12,708 3/8/2016
4.0.774 12,961 3/2/2016
4.0.773 12,807 3/1/2016
4.0.772 12,855 3/1/2016
4.0.770 12,707 3/1/2016
4.0.769 12,773 3/1/2016
4.0.762 12,734 3/1/2016
4.0.761 13,034 3/1/2016
4.0.760 14,139 2/29/2016
4.0.759 12,739 2/29/2016
4.0.758 12,952 2/29/2016
4.0.757 12,538 2/29/2016
4.0.756 13,071 2/27/2016
4.0.755 13,169 2/27/2016
4.0.754 13,053 2/27/2016
4.0.753 13,040 2/27/2016
4.0.752 12,862 2/27/2016
4.0.750 13,140 2/27/2016
4.0.749 13,077 2/27/2016
4.0.747 13,158 2/26/2016
4.0.746 13,114 2/26/2016
4.0.744 13,029 2/26/2016
4.0.743 13,136 2/26/2016
4.0.742 13,100 2/26/2016
4.0.741 12,969 2/26/2016
4.0.739 12,741 2/25/2016
4.0.738 12,815 2/25/2016
4.0.734 12,564 2/25/2016
4.0.733-beta 5,247 2/25/2016
4.0.672 13,205 2/16/2016
4.0.669 12,666 2/11/2016
4.0.668 43,704 2/11/2016
3.0.654 13,751 2/10/2016
3.0.646 12,361 2/5/2016
3.0.645 12,358 2/5/2016
3.0.644 12,207 2/5/2016
3.0.639 12,230 2/3/2016
3.0.638 12,374 2/2/2016
3.0.637 12,213 2/1/2016
3.0.635 12,244 2/1/2016
3.0.633 16,463 1/27/2016
3.0.632 12,259 1/27/2016
3.0.629 12,420 1/18/2016
3.0.626 12,153 1/18/2016
3.0.625 12,107 1/18/2016
3.0.624 22,588 12/17/2015
3.0.623 12,444 12/9/2015
3.0.622 12,301 12/9/2015
3.0.621 12,382 12/9/2015
3.0.620 12,261 12/8/2015
3.0.613 12,866 12/4/2015
3.0.611 12,408 12/3/2015
3.0.610 12,633 11/30/2015
3.0.606 12,583 11/30/2015
3.0.605 12,573 11/25/2015
3.0.603 12,512 11/23/2015
3.0.601 12,324 11/23/2015
3.0.600 12,290 11/19/2015
3.0.599 12,281 11/19/2015
3.0.598 12,277 11/17/2015
3.0.592 12,206 11/12/2015
3.0.589 12,382 11/10/2015
3.0.588 12,344 11/10/2015
3.0.586 12,349 11/10/2015
3.0.584 12,324 11/10/2015
3.0.583 12,341 11/10/2015
3.0.581 12,614 11/6/2015
3.0.579 12,206 11/6/2015
3.0.576 12,283 11/5/2015
3.0.575 12,248 11/4/2015
3.0.574 12,165 11/4/2015
3.0.569 12,283 11/3/2015
3.0.568 12,310 11/3/2015
3.0.566 12,281 11/3/2015
3.0.548 10,629 11/3/2015
3.0.545 12,490 10/28/2015
3.0.538 12,410 10/22/2015
3.0.537 12,331 10/21/2015
3.0.536 12,351 10/21/2015
3.0.534 12,311 10/21/2015
3.0.532 12,241 10/21/2015
3.0.531 12,343 10/21/2015
3.0.524 12,288 10/15/2015
3.0.523 12,515 10/10/2015
3.0.522 12,258 10/10/2015
3.0.520 12,329 10/9/2015
3.0.519 12,608 10/9/2015
3.0.518 12,458 10/9/2015
3.0.517 12,557 10/9/2015
3.0.516 12,469 10/7/2015
3.0.514 12,557 10/6/2015
3.0.513 12,361 10/6/2015
3.0.512 12,385 10/6/2015
3.0.509 12,525 10/1/2015
3.0.507 12,398 10/1/2015
3.0.505 12,327 9/30/2015
3.0.503 12,419 9/30/2015
3.0.502 12,380 9/30/2015
3.0.479 12,411 9/25/2015
3.0.476 12,319 9/24/2015
3.0.471 12,366 9/24/2015
3.0.470 12,409 9/24/2015
3.0.469 12,337 9/24/2015
3.0.468 12,303 9/24/2015
3.0.467 12,329 9/24/2015
3.0.465 12,338 9/24/2015
3.0.459 12,304 9/23/2015
3.0.456 12,385 9/23/2015
3.0.455 12,355 9/22/2015
3.0.454 12,518 9/19/2015
3.0.453 12,332 9/19/2015
3.0.452 12,239 9/18/2015
3.0.451 12,278 9/18/2015
3.0.450 12,284 9/18/2015
3.0.447 13,677 9/18/2015
2.0.378 12,404 9/5/2015
2.0.372 12,291 9/4/2015
2.0.370 12,350 9/4/2015
2.0.368 12,261 9/4/2015
2.0.365 13,232 9/3/2015
2.0.363 12,227 9/3/2015
2.0.361 12,280 9/3/2015
1.0.360 12,352 9/1/2015
1.0.359 12,258 9/1/2015
1.0.358 12,318 9/1/2015
1.0.356 12,304 8/31/2015
1.0.355 12,338 8/31/2015
1.0.354 12,289 8/29/2015
1.0.305 12,336 8/19/2015
1.0.299 12,769 8/8/2015
1.0.293 12,387 7/20/2015
1.0.292 12,391 7/20/2015
1.0.289 12,485 7/10/2015
1.0.288 12,396 7/10/2015
1.0.286 12,370 7/7/2015
1.0.285 12,443 7/7/2015
1.0.284 12,348 7/7/2015
1.0.282 12,335 7/6/2015
1.0.281 12,346 7/6/2015
1.0.279 12,316 7/6/2015
1.0.277 12,421 6/18/2015
1.0.276 12,399 6/8/2015
1.0.275 12,334 6/8/2015
1.0.274 12,144 6/8/2015
1.0.272 13,024 6/1/2015
1.0.269 12,286 5/25/2015
1.0.268 12,294 5/24/2015
1.0.266 12,227 5/24/2015
1.0.263 12,319 5/21/2015
1.0.258 12,318 5/19/2015
1.0.257 12,345 5/18/2015
1.0.256 12,631 5/17/2015
1.0.254 12,396 5/13/2015
1.0.253 12,282 5/13/2015
1.0.250 12,253 5/13/2015
1.0.249 12,389 5/12/2015
1.0.248 12,291 5/12/2015
1.0.245 12,251 5/12/2015
1.0.241 12,284 5/12/2015
1.0.240 12,078 5/12/2015
1.0.237 12,097 5/11/2015
1.0.234 12,066 5/9/2015
1.0.233 11,937 5/9/2015
1.0.231 12,029 5/7/2015
1.0.230 12,157 5/7/2015
1.0.229 12,028 5/7/2015
1.0.226 12,019 5/7/2015
1.0.217 12,274 4/28/2015
1.0.215 12,168 4/27/2015
1.0.213 12,260 4/23/2015
1.0.210 12,033 4/23/2015
1.0.209 12,029 4/15/2015
1.0.202 12,115 4/15/2015
1.0.201 12,084 4/15/2015
1.0.198 11,998 4/15/2015
1.0.197 12,058 4/15/2015
1.0.196 12,151 4/15/2015
1.0.195 12,109 4/15/2015
1.0.194 12,107 4/15/2015
1.0.193 12,081 4/15/2015
1.0.192 12,030 4/15/2015
1.0.191 12,184 4/14/2015
1.0.189 12,024 4/10/2015
1.0.187 12,111 4/9/2015
1.0.186 12,165 4/8/2015
1.0.185 12,243 4/6/2015
1.0.183 11,943 4/3/2015
1.0.181 12,095 4/3/2015
1.0.180 12,132 4/2/2015
1.0.178 12,056 4/1/2015
1.0.177 12,106 4/1/2015
1.0.175 11,977 4/1/2015
1.0.171 11,989 3/31/2015
1.0.170 11,932 3/31/2015
1.0.168 11,999 3/31/2015
1.0.164 12,311 3/30/2015
1.0.162 12,245 3/28/2015
1.0.160 12,267 3/27/2015
1.0.159 12,276 3/26/2015
1.0.157 11,816 3/24/2015
1.0.156 12,229 3/24/2015
1.0.154 12,181 3/24/2015
1.0.152 12,409 3/24/2015
1.0.151 12,213 3/23/2015
1.0.150 12,267 3/23/2015
1.0.149 12,297 3/23/2015
1.0.148 12,256 3/23/2015
1.0.147 12,164 3/21/2015
1.0.146 12,270 3/20/2015
1.0.145 12,256 3/19/2015
1.0.143 12,398 3/18/2015
1.0.142 12,395 3/12/2015
1.0.141 12,229 3/12/2015
1.0.140 12,198 3/5/2015
1.0.139 12,249 3/5/2015
1.0.138 12,235 3/4/2015
1.0.137 12,169 3/3/2015
1.0.134 12,596 3/3/2015
1.0.129 12,412 3/3/2015
1.0.128 12,318 3/3/2015
1.0.125 12,295 2/28/2015
1.0.124 12,574 2/28/2015
1.0.122 12,327 2/28/2015
1.0.119 12,609 2/25/2015
1.0.117 12,903 2/24/2015
1.0.115 12,657 2/24/2015
1.0.114 12,467 2/23/2015
1.0.113 12,439 2/23/2015
1.0.112 12,558 2/23/2015
1.0.111 12,638 2/23/2015
1.0.110 12,638 2/23/2015
1.0.109 12,541 2/22/2015
1.0.108 12,452 2/22/2015
1.0.103 12,661 2/22/2015
1.0.37 11,300 2/18/2015
1.0.36 11,405 2/18/2015
1.0.35 11,474 2/17/2015
1.0.34 11,425 2/17/2015
1.0.33 11,486 2/17/2015
1.0.32 11,442 2/15/2015
1.0.31 11,440 2/15/2015
1.0.30 10,817 2/15/2015
1.0.28 11,022 2/15/2015
1.0.27 10,879 2/15/2015
1.0.26 10,948 2/13/2015
1.0.25 10,919 2/13/2015
1.0.24 10,850 2/12/2015
1.0.23 10,894 2/12/2015
1.0.0 13,029 2/21/2015