Foundatio.AzureServiceBus 10.6.0

The ID prefix of this package has been reserved for one of the owners of this package by NuGet.org. Prefix Reserved
.NET Standard 2.0
dotnet add package Foundatio.AzureServiceBus --version 10.6.0
NuGet\Install-Package Foundatio.AzureServiceBus -Version 10.6.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.AzureServiceBus" Version="10.6.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Foundatio.AzureServiceBus --version 10.6.0
#r "nuget: Foundatio.AzureServiceBus, 10.6.0"
#r directive can be used in F# Interactive, C# scripting and .NET Interactive. Copy this into the interactive tool or source code of the script to reference the package.
// Install Foundatio.AzureServiceBus as a Cake Addin
#addin nuget:?package=Foundatio.AzureServiceBus&version=10.6.0

// Install Foundatio.AzureServiceBus as a Cake Tool
#tool nuget:?package=Foundatio.AzureServiceBus&version=10.6.0

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 but found Azure support lacking and local set up a pain. 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.sln 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")

Metrics

We provide five implementations that derive from the IMetricsClient interface:

  1. InMemoryMetricsClient: An in memory metrics implementation.
  2. RedisMetricsClient: An Redis metrics implementation.
  3. StatsDMetricsClient: An statsd metrics implementation.
  4. MetricsNETClient: An Metrics.NET implementation.
  5. AppMetricsClient: An AppMetrics implementation.
  6. CloudWatchMetricsClient: An AWS CloudWatch implementation.

We recommend using all of the IMetricsClient implementations as singletons.

Sample
IMetricsClient metrics = new InMemoryMetricsClient();
metrics.Counter("c1");
metrics.Gauge("g1", 2.534);
metrics.Timer("t1", 50788);

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 Versions
.NET net5.0 net5.0-windows net6.0 net6.0-android net6.0-ios net6.0-maccatalyst net6.0-macos net6.0-tvos net6.0-windows net7.0 net7.0-android net7.0-ios net7.0-maccatalyst net7.0-macos net7.0-tvos net7.0-windows
.NET Core netcoreapp2.0 netcoreapp2.1 netcoreapp2.2 netcoreapp3.0 netcoreapp3.1
.NET Standard netstandard2.0 netstandard2.1
.NET Framework net461 net462 net463 net47 net471 net472 net48 net481
MonoAndroid monoandroid
MonoMac monomac
MonoTouch monotouch
Tizen tizen40 tizen60
Xamarin.iOS xamarinios
Xamarin.Mac xamarinmac
Xamarin.TVOS xamarintvos
Xamarin.WatchOS xamarinwatchos
Compatible target framework(s)
Additional computed target framework(s)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Foundatio.AzureServiceBus:

Package Downloads
SoftwarePioniere.Fx.Hosting

Package Description

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
10.6.0 256 1/1/2023
10.5.0 10,409 5/18/2022
10.4.0 1,133 3/8/2022
10.3.0 836 1/20/2022
10.2.2 1,157 9/23/2021
10.2.0 24,531 7/8/2021
10.1.0 549 6/16/2021
10.0.2 1,887 1/20/2021
10.0.0 1,734 9/16/2020
10.0.0-beta9 357 8/25/2020
10.0.0-beta8 324 8/3/2020
10.0.0-beta7 335 7/29/2020
10.0.0-beta6 379 7/8/2020
10.0.0-beta5 500 6/20/2020
10.0.0-beta3 432 6/14/2020
10.0.0-beta2 421 6/6/2020
10.0.0-beta10 350 9/15/2020
10.0.0-beta1 391 5/26/2020
9.0.0 39,163 1/16/2020
8.1.1518 61,729 8/30/2019
8.0.1512 8,891 5/14/2019
8.0.1510 639 4/16/2019
8.0.1507 702 2/24/2019
8.0.1505 634 2/22/2019
7.0.1490 909 5/9/2018
6.0.1467 1,032 11/30/2017
5.1.1454 953 5/5/2017
5.0.1336 990 3/14/2017
5.0.1334 843 3/13/2017
5.0.1331 864 3/12/2017
5.0.1329-pre 707 3/12/2017
5.0.1328-pre 724 3/12/2017
5.0.1327-pre 726 3/12/2017
5.0.1326-pre 719 3/12/2017
5.0.1324-pre 724 3/12/2017
4.3.1323-pre 724 3/11/2017
4.3.1319 873 3/1/2017
4.3.1317 840 2/23/2017
4.3.1316 884 2/22/2017
4.3.1315 882 2/22/2017
4.3.1314 870 2/20/2017
4.3.1312 871 2/20/2017
4.3.1311-pre 779 2/20/2017
4.3.1307 892 2/16/2017
4.3.1306 878 2/15/2017
4.3.1305 869 2/15/2017
4.3.1304-pre 720 2/15/2017
4.3.1303-pre 739 2/14/2017
4.3.1301 861 2/14/2017
4.3.1299 851 2/14/2017
4.3.1293 887 2/12/2017
4.3.1292 848 2/10/2017
4.3.1291 908 2/10/2017
4.3.1290 870 2/10/2017
4.3.1289 876 2/9/2017
4.3.1288 851 2/9/2017
4.3.1286 867 2/8/2017
4.3.1282 855 2/5/2017
4.3.1281 864 2/5/2017
4.3.1280 851 2/5/2017
4.3.1276-pre 695 2/5/2017
4.3.1177-pre 748 9/2/2016
4.3.1164-pre 758 8/21/2016
4.2.1205-pre 1,070 9/19/2016
4.2.1183 1,006 9/9/2016
4.2.1179 886 9/8/2016
4.2.1176 877 9/2/2016
4.2.1172 852 9/1/2016
4.2.1171-pre 748 9/1/2016
4.2.1169 868 8/22/2016
4.2.1167-pre 709 8/22/2016
4.2.1166-pre 718 8/22/2016
4.2.1161 874 8/10/2016
4.2.1156-pre 752 8/2/2016
4.2.1155 872 8/1/2016
4.2.1150 911 7/20/2016
4.2.1149-pre 737 7/19/2016
4.2.1148-pre 737 7/19/2016
4.2.1147-pre 757 7/19/2016
4.2.1146-pre 723 7/19/2016
4.2.1137 928 7/19/2016
4.2.1129-pre 731 7/19/2016
4.2.1128-pre 763 7/19/2016
4.2.1127-pre 714 7/19/2016
4.2.1126-pre 739 7/19/2016
4.2.1125-pre 728 7/19/2016
4.2.1123-pre 748 7/19/2016
4.2.1119-pre 746 7/18/2016
4.2.1113-pre 775 7/16/2016
4.2.1108-pre 748 7/15/2016
4.2.1107-pre 766 7/15/2016
4.2.1104-pre 904 7/13/2016
4.2.1099-pre 921 7/12/2016
4.2.1098-pre 927 7/12/2016
4.2.1093-pre 798 7/8/2016
4.2.1091-pre 780 7/8/2016
4.2.1090-pre 787 7/8/2016
4.2.1089-pre 773 7/7/2016
4.2.1087-pre 793 7/7/2016
4.2.1083-pre 790 7/6/2016
4.2.1082-pre 775 7/6/2016
4.2.1081-pre 777 7/6/2016
4.2.1079-pre 795 7/6/2016
4.2.1078-pre 791 7/6/2016
4.2.1073-pre 793 7/5/2016
4.2.1070-pre 753 7/5/2016
4.2.1069-pre 753 7/1/2016
4.2.1059-pre 759 7/1/2016
4.2.1046-pre 724 6/24/2016
4.2.1031-pre 736 6/24/2016
4.2.1028-pre 736 6/24/2016
4.2.1027-pre 766 6/24/2016
4.1.1009 1,233 6/15/2016
4.1.1002-pre 1,047 6/14/2016
4.1.995-pre 1,133 6/13/2016
4.1.989-pre 754 5/26/2016
4.1.983-pre 759 5/25/2016
4.1.982-pre 771 5/25/2016
4.1.978-pre 756 5/6/2016
4.1.977-pre 756 5/5/2016
4.1.975-pre 736 5/5/2016
4.0.958 898 5/1/2016
4.0.957 1,090 4/29/2016
4.0.956 1,070 4/29/2016
4.0.955 907 4/28/2016
4.0.941 1,162 4/27/2016
4.0.940 1,120 4/27/2016
4.0.925 1,043 4/27/2016
4.0.922 1,032 4/27/2016
4.0.909 1,060 4/20/2016
4.0.880 921 4/7/2016
4.0.869 889 3/30/2016
4.0.864 909 3/29/2016
4.0.861 890 3/29/2016
4.0.860 890 3/29/2016
4.0.857 890 3/29/2016
4.0.855 880 3/29/2016
4.0.846 912 3/22/2016
4.0.842 1,100 3/21/2016
4.0.836 894 3/18/2016
4.0.835 900 3/18/2016
4.0.834 872 3/17/2016
4.0.832 907 3/17/2016
4.0.831 880 3/16/2016
4.0.829 872 3/16/2016
4.0.828 904 3/15/2016
4.0.827 910 3/15/2016
4.0.826 888 3/15/2016
4.0.825 961 3/13/2016
4.0.821 992 3/11/2016
4.0.819 915 3/11/2016
4.0.818 936 3/11/2016
4.0.816 966 3/11/2016
4.0.815 949 3/11/2016
4.0.814 970 3/11/2016
4.0.813 893 3/10/2016
4.0.812 1,000 3/10/2016
4.0.811 950 3/10/2016
4.0.810 903 3/10/2016
4.0.809 914 3/10/2016
4.0.805 863 3/9/2016
4.0.797 875 3/9/2016
4.0.796 895 3/9/2016
4.0.794 913 3/9/2016
4.0.793 868 3/9/2016
4.0.792 889 3/8/2016
4.0.791 866 3/8/2016
4.0.790 862 3/8/2016
4.0.788 910 3/8/2016
4.0.774 899 3/2/2016
4.0.773 1,051 3/1/2016
4.0.772 1,084 3/1/2016
4.0.770 886 3/1/2016
4.0.769 970 3/1/2016
4.0.762 915 3/1/2016
4.0.761 916 3/1/2016
4.0.760 934 2/29/2016
4.0.759 893 2/29/2016
4.0.758 891 2/29/2016
4.0.757 1,179 2/29/2016
4.0.756 1,211 2/27/2016
4.0.755 1,250 2/27/2016
4.0.754 1,221 2/27/2016
4.0.753 1,292 2/27/2016
4.0.752 985 2/27/2016
4.0.750 1,333 2/27/2016
4.0.749 1,361 2/27/2016
4.0.747 1,281 2/26/2016
4.0.746 1,300 2/26/2016
4.0.744 1,306 2/26/2016
4.0.743 996 2/26/2016
4.0.742 1,274 2/26/2016
4.0.741 1,149 2/26/2016
4.0.739 1,290 2/25/2016
4.0.738 1,140 2/25/2016
4.0.734 1,275 2/25/2016
4.0.733-beta 1,083 2/25/2016
4.0.672 927 2/16/2016
4.0.669 976 2/11/2016
4.0.668 978 2/11/2016
3.0.654 915 2/10/2016
3.0.646 916 2/5/2016
3.0.645 911 2/5/2016
3.0.644 862 2/5/2016
3.0.639 919 2/3/2016
3.0.638 903 2/2/2016
3.0.637 921 2/1/2016
3.0.635 876 2/1/2016
3.0.633 881 1/27/2016
3.0.632 913 1/27/2016
3.0.629 989 1/18/2016
3.0.626 951 1/18/2016
3.0.625 1,076 1/18/2016
3.0.624 911 12/17/2015
3.0.623 1,039 12/9/2015
3.0.622 905 12/9/2015
3.0.621 882 12/9/2015
3.0.620 888 12/8/2015
3.0.613 1,209 12/4/2015
3.0.611 1,169 12/3/2015
3.0.610 1,218 11/30/2015
3.0.606 1,179 11/30/2015
3.0.605 1,056 11/25/2015
3.0.603 997 11/23/2015
3.0.601 1,004 11/23/2015
3.0.600 993 11/19/2015
3.0.599 974 11/19/2015
3.0.598 962 11/17/2015
3.0.592 968 11/12/2015
3.0.589 946 11/10/2015
3.0.588 925 11/10/2015
3.0.586 969 11/10/2015
3.0.584 926 11/10/2015
3.0.583 938 11/10/2015
3.0.581 912 11/6/2015
3.0.579 925 11/6/2015
3.0.576 933 11/5/2015
3.0.575 917 11/4/2015
3.0.574 948 11/4/2015
3.0.569 939 11/3/2015
3.0.568 935 11/3/2015
3.0.566 928 11/3/2015
3.0.545 923 10/28/2015
3.0.538 955 10/22/2015
3.0.537 911 10/21/2015
3.0.536 899 10/21/2015
3.0.534 885 10/21/2015
3.0.532 949 10/21/2015
3.0.531 897 10/21/2015
3.0.524 927 10/15/2015
3.0.523 1,008 10/10/2015
3.0.522 929 10/10/2015
3.0.520 951 10/9/2015
3.0.519 1,000 10/9/2015
3.0.518 980 10/9/2015
3.0.517 935 10/9/2015
3.0.516 1,272 10/7/2015
3.0.514 1,061 10/6/2015
3.0.513 1,267 10/6/2015
3.0.512 1,147 10/6/2015
3.0.509 1,014 10/1/2015
3.0.507 1,034 10/1/2015
3.0.505 1,038 9/30/2015
3.0.503 1,062 9/30/2015
3.0.502 1,040 9/30/2015
3.0.479 1,012 9/25/2015
3.0.476 983 9/24/2015
3.0.471 996 9/24/2015
3.0.470 993 9/24/2015
3.0.469 981 9/24/2015
3.0.468 985 9/24/2015
3.0.467 971 9/24/2015
3.0.465 996 9/24/2015
3.0.459 999 9/23/2015
3.0.456 1,005 9/23/2015
3.0.455 985 9/22/2015
3.0.454 1,021 9/19/2015
3.0.453 1,039 9/19/2015
3.0.452 971 9/18/2015
3.0.451 995 9/18/2015
3.0.450 1,002 9/18/2015
3.0.447 956 9/18/2015
2.0.378 994 9/5/2015
2.0.372 966 9/4/2015
2.0.370 1,007 9/4/2015
2.0.368 951 9/4/2015
2.0.365 955 9/3/2015
2.0.363 946 9/3/2015
2.0.361 944 9/3/2015
1.0.360 928 9/1/2015
1.0.359 956 9/1/2015
1.0.358 944 9/1/2015
1.0.356 936 8/31/2015
1.0.355 1,009 8/31/2015
1.0.354 947 8/29/2015
1.0.305 969 8/19/2015
1.0.299 1,287 8/8/2015
1.0.293 984 7/20/2015
1.0.292 993 7/20/2015
1.0.289 958 7/10/2015
1.0.288 956 7/10/2015
1.0.286 974 7/7/2015
1.0.285 981 7/7/2015
1.0.284 963 7/7/2015
1.0.282 969 7/6/2015
1.0.281 951 7/6/2015
1.0.279 952 7/6/2015
1.0.277 908 6/18/2015
1.0.276 962 6/8/2015
1.0.275 948 6/8/2015
1.0.274 892 6/8/2015
1.0.272 977 6/1/2015
1.0.269 941 5/25/2015
1.0.268 953 5/24/2015
1.0.266 930 5/24/2015
1.0.263 954 5/21/2015
1.0.258 950 5/19/2015
1.0.257 940 5/18/2015
1.0.256 1,111 5/17/2015
1.0.254 915 5/13/2015
1.0.253 928 5/13/2015
1.0.250 934 5/13/2015
1.0.249 949 5/12/2015
1.0.248 929 5/12/2015
1.0.245 934 5/12/2015
1.0.241 959 5/12/2015
1.0.240 945 5/12/2015
1.0.237 949 5/11/2015
1.0.234 941 5/9/2015
1.0.233 919 5/9/2015
1.0.231 915 5/7/2015
1.0.230 969 5/7/2015
1.0.229 944 5/7/2015
1.0.226 942 5/7/2015
1.0.217 1,187 4/28/2015
1.0.215 1,085 4/27/2015
1.0.213 1,133 4/23/2015
1.0.210 1,094 4/23/2015
1.0.209 1,019 4/15/2015
1.0.202 1,028 4/15/2015
1.0.201 1,004 4/15/2015
1.0.198 1,017 4/15/2015
1.0.197 994 4/15/2015
1.0.196 991 4/15/2015
1.0.195 1,003 4/15/2015
1.0.194 1,005 4/15/2015
1.0.193 994 4/15/2015
1.0.192 1,025 4/15/2015
1.0.191 1,030 4/14/2015
1.0.189 1,006 4/10/2015
1.0.187 980 4/9/2015
1.0.186 1,004 4/8/2015
1.0.185 1,002 4/6/2015
1.0.183 983 4/3/2015
1.0.181 1,038 4/3/2015
1.0.180 1,012 4/2/2015
1.0.178 990 4/1/2015
1.0.177 995 4/1/2015
1.0.175 1,047 4/1/2015
1.0.171 986 3/31/2015
1.0.170 959 3/31/2015
1.0.168 968 3/31/2015
1.0.164 998 3/30/2015
1.0.162 960 3/28/2015
1.0.160 979 3/27/2015
1.0.159 954 3/26/2015
1.0.157 947 3/24/2015
1.0.156 993 3/24/2015
1.0.154 952 3/24/2015
1.0.152 936 3/24/2015
1.0.151 955 3/24/2015
1.0.150 995 3/23/2015
1.0.149 967 3/23/2015
1.0.148 941 3/23/2015
1.0.147 955 3/21/2015
1.0.146 952 3/20/2015
1.0.145 944 3/19/2015
1.0.143 1,031 3/18/2015
1.0.142 969 3/12/2015
1.0.141 930 3/12/2015
1.0.140 1,185 3/5/2015
1.0.139 991 3/5/2015
1.0.138 1,072 3/4/2015
1.0.137 929 3/3/2015
1.0.134 931 3/3/2015
1.0.129 1,187 3/3/2015
1.0.128 1,334 3/3/2015
1.0.125 1,244 2/28/2015
1.0.124 978 2/28/2015
1.0.122 1,427 2/28/2015
1.0.119 1,374 2/25/2015
1.0.117 1,311 2/24/2015
1.0.115 1,167 2/24/2015
1.0.114 1,299 2/23/2015
1.0.113 1,345 2/23/2015
1.0.112 1,352 2/23/2015
1.0.111 1,368 2/23/2015
1.0.110 1,389 2/23/2015
1.0.109 1,285 2/22/2015
1.0.108 1,295 2/22/2015
1.0.103 1,359 2/22/2015