Foundatio.AzureStorage 10.5.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
Install-Package Foundatio.AzureStorage -Version 10.5.0
dotnet add package Foundatio.AzureStorage --version 10.5.0
<PackageReference Include="Foundatio.AzureStorage" Version="10.5.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Foundatio.AzureStorage --version 10.5.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: Foundatio.AzureStorage, 10.5.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.AzureStorage as a Cake Addin
#addin nuget:?package=Foundatio.AzureStorage&version=10.5.0

// Install Foundatio.AzureStorage as a Cake Tool
#tool nuget:?package=Foundatio.AzureStorage&version=10.5.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.

FoundatioFoundatio

Build status NuGet Version feedz.io Discord

Pluggable foundation blocks for building loosely coupled distributed apps.

Includes implementations in Redis, Azure, AWS, RabbitMQ 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 the InMemoryCacheClient and uses the IMessageBus to keep the cache in sync across processes.
  3. RedisCacheClient: A Redis cache client implementation.
  4. RedisHybridCacheClient: This cache implementation uses both the RedisCacheClient and InMemoryCacheClient implementations and uses the RedisMessageBus to keep the in memory cache in sync across processes. This can lead to huge wins in performance as you are saving a serialization operation and call to Redis if the item exists in the local cache.
  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 lock = await locker.AcquireAsync("test");
// ...
await lock.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. 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.

Roadmap

This is a list of high level things that we are planning to do:

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
.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
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 (2)

Showing the top 2 NuGet packages that depend on Foundatio.AzureStorage:

Package Downloads
SoftwarePioniere.Fx.Hosting

Package Description

ReCloud.Business.Lgm

ReCloud Business Class Library

GitHub repositories (1)

Showing the top 1 popular GitHub repositories that depend on Foundatio.AzureStorage:

Repository Stars
exceptionless/Exceptionless
Exceptionless server and jobs
Version Downloads Last updated
10.5.0 60 5/18/2022
10.4.0 1,081 3/8/2022
10.3.0 397 1/20/2022
10.2.0 4,703 7/8/2021
10.1.0 530 6/16/2021
10.0.2 9,182 1/20/2021
10.0.0 4,069 9/16/2020
10.0.0-beta9 366 8/25/2020
10.0.0-beta8 254 8/3/2020
10.0.0-beta7 263 7/29/2020
10.0.0-beta6 343 7/8/2020
10.0.0-beta3 371 6/14/2020
10.0.0-beta2 334 6/6/2020
10.0.0-beta10 298 9/15/2020
10.0.0-beta1 297 5/26/2020
9.0.0 19,298 1/16/2020
8.1.1537 59,664 8/30/2019
8.0.1530 8,946 5/14/2019
8.0.1528 556 4/16/2019
8.0.1525 1,125 2/24/2019
8.0.1523 440 2/22/2019
7.0.1507 11,370 9/7/2018
7.0.1505 1,391 5/9/2018
6.0.1479 8,360 11/30/2017
5.1.1460 2,652 7/4/2017
5.1.1456 801 5/5/2017
5.0.1336 1,044 3/14/2017
5.0.1334 732 3/13/2017
5.0.1331 693 3/12/2017
5.0.1329-pre 654 3/12/2017
5.0.1328-pre 678 3/12/2017
5.0.1327-pre 657 3/12/2017
5.0.1326-pre 673 3/12/2017
5.0.1324-pre 677 3/12/2017
4.3.1323-pre 660 3/11/2017
4.3.1319 727 3/1/2017
4.3.1317 720 2/23/2017
4.3.1316 753 2/22/2017
4.3.1315 810 2/22/2017
4.3.1314 758 2/20/2017
4.3.1312 694 2/20/2017
4.3.1311-pre 683 2/20/2017
4.3.1307 753 2/16/2017
4.3.1306 732 2/15/2017
4.3.1305 718 2/15/2017
4.3.1304-pre 668 2/15/2017
4.3.1303-pre 686 2/14/2017
4.3.1301 742 2/14/2017
4.3.1299 715 2/14/2017
4.3.1293 737 2/12/2017
4.3.1292 739 2/10/2017
4.3.1291 749 2/10/2017
4.3.1290 757 2/10/2017
4.3.1289 739 2/9/2017
4.3.1288 728 2/9/2017
4.3.1286 741 2/8/2017
4.3.1282 747 2/5/2017
4.3.1281 720 2/5/2017
4.3.1280 732 2/5/2017
4.3.1276-pre 653 2/5/2017
4.3.1177-pre 771 9/2/2016
4.3.1164-pre 698 8/21/2016
4.2.1205-pre 1,080 9/19/2016
4.2.1183 1,586 9/9/2016
4.2.1179 767 9/8/2016
4.2.1176 758 9/2/2016
4.2.1172 749 9/1/2016
4.2.1171-pre 697 9/1/2016
4.2.1169 803 8/22/2016
4.2.1167-pre 714 8/22/2016
4.2.1166-pre 700 8/22/2016
4.2.1161 757 8/10/2016
4.2.1156-pre 705 8/2/2016
4.2.1155 753 8/1/2016
4.2.1150 947 7/20/2016
4.2.1149-pre 688 7/19/2016
4.2.1148-pre 701 7/19/2016
4.2.1147-pre 702 7/19/2016
4.2.1146-pre 682 7/19/2016
4.2.1137 747 7/19/2016
4.2.1129-pre 707 7/19/2016
4.2.1128-pre 698 7/19/2016
4.2.1127-pre 665 7/19/2016
4.2.1126-pre 685 7/19/2016
4.2.1125-pre 717 7/19/2016
4.2.1123-pre 708 7/19/2016
4.2.1119-pre 696 7/18/2016
4.2.1113-pre 691 7/16/2016
4.2.1108-pre 702 7/15/2016
4.2.1107-pre 712 7/15/2016
4.2.1104-pre 876 7/13/2016
4.2.1099-pre 866 7/12/2016
4.2.1098-pre 864 7/12/2016
4.2.1093-pre 731 7/8/2016
4.2.1091-pre 699 7/8/2016
4.2.1090-pre 738 7/8/2016
4.2.1089-pre 749 7/7/2016
4.2.1087-pre 708 7/7/2016
4.2.1083-pre 752 7/6/2016
4.2.1082-pre 733 7/6/2016
4.2.1081-pre 698 7/6/2016
4.2.1079-pre 713 7/6/2016
4.2.1078-pre 718 7/6/2016
4.2.1073-pre 725 7/5/2016
4.2.1070-pre 685 7/5/2016
4.2.1069-pre 690 7/1/2016
4.2.1059-pre 699 7/1/2016
4.2.1046-pre 703 6/24/2016
4.2.1031-pre 670 6/24/2016
4.2.1028-pre 718 6/24/2016
4.2.1027-pre 688 6/24/2016
4.1.1009 1,183 6/15/2016
4.1.1002-pre 1,001 6/14/2016
4.1.995-pre 907 6/13/2016
4.1.989-pre 1,011 5/26/2016
4.1.983-pre 684 5/25/2016
4.1.982-pre 703 5/25/2016
4.1.978-pre 789 5/6/2016
4.1.977-pre 694 5/5/2016
4.1.975-pre 684 5/5/2016
4.0.958 870 5/1/2016
4.0.957 904 4/29/2016
4.0.956 906 4/29/2016
4.0.955 779 4/28/2016
4.0.941 1,001 4/27/2016
4.0.940 981 4/27/2016
4.0.925 858 4/27/2016
4.0.922 826 4/27/2016
4.0.909 953 4/20/2016
4.0.880 843 4/7/2016
4.0.869 806 3/30/2016
4.0.864 740 3/29/2016
4.0.861 760 3/29/2016
4.0.860 727 3/29/2016
4.0.857 755 3/29/2016
4.0.855 746 3/29/2016
4.0.846 851 3/22/2016
4.0.842 1,033 3/21/2016
4.0.836 804 3/18/2016
4.0.835 742 3/18/2016
4.0.834 756 3/17/2016
4.0.832 728 3/17/2016
4.0.831 728 3/16/2016
4.0.829 737 3/16/2016
4.0.828 741 3/15/2016
4.0.827 750 3/15/2016
4.0.826 762 3/15/2016
4.0.825 821 3/13/2016
4.0.821 805 3/11/2016
4.0.819 738 3/11/2016
4.0.818 740 3/11/2016
4.0.816 825 3/11/2016
4.0.815 813 3/11/2016
4.0.814 829 3/11/2016
4.0.813 819 3/10/2016
4.0.812 839 3/10/2016
4.0.811 819 3/10/2016
4.0.810 798 3/10/2016
4.0.809 766 3/10/2016
4.0.805 757 3/9/2016
4.0.797 741 3/9/2016
4.0.796 739 3/9/2016
4.0.794 755 3/9/2016
4.0.793 777 3/9/2016
4.0.792 749 3/8/2016
4.0.791 741 3/8/2016
4.0.790 736 3/8/2016
4.0.788 749 3/8/2016
4.0.774 778 3/2/2016
4.0.773 784 3/1/2016
4.0.772 750 3/1/2016
4.0.770 870 3/1/2016
4.0.769 817 3/1/2016
4.0.762 775 3/1/2016
4.0.761 910 3/1/2016
4.0.760 751 2/29/2016
4.0.759 804 2/29/2016
4.0.758 828 2/29/2016
4.0.757 758 2/29/2016
4.0.756 938 2/27/2016
4.0.755 947 2/27/2016
4.0.754 794 2/27/2016
4.0.753 1,233 2/27/2016
4.0.752 1,133 2/27/2016
4.0.750 990 2/27/2016
4.0.749 801 2/27/2016
4.0.747 866 2/26/2016
4.0.746 1,032 2/26/2016
4.0.744 1,064 2/26/2016
4.0.743 858 2/26/2016
4.0.742 909 2/26/2016
4.0.741 1,160 2/26/2016
4.0.739 1,095 2/25/2016
4.0.738 1,171 2/25/2016
4.0.734 1,112 2/25/2016
4.0.733-beta 879 2/25/2016
4.0.672 903 2/16/2016
4.0.669 917 2/11/2016
4.0.668 843 2/11/2016
3.0.654 782 2/10/2016
3.0.646 794 2/5/2016
3.0.645 740 2/5/2016
3.0.644 732 2/5/2016
3.0.639 771 2/3/2016
3.0.638 772 2/2/2016
3.0.637 797 2/1/2016
3.0.635 762 2/1/2016
3.0.633 828 1/27/2016
3.0.632 750 1/27/2016
3.0.629 904 1/18/2016
3.0.626 763 1/18/2016
3.0.625 929 1/18/2016
3.0.624 977 12/17/2015
3.0.623 794 12/9/2015
3.0.622 762 12/9/2015
3.0.621 796 12/9/2015
3.0.620 785 12/8/2015
3.0.613 886 12/4/2015
3.0.611 1,024 12/3/2015
3.0.610 957 11/30/2015
3.0.606 1,003 11/30/2015
3.0.605 849 11/25/2015
3.0.603 840 11/23/2015
3.0.601 851 11/23/2015
3.0.600 881 11/19/2015
3.0.599 831 11/19/2015
3.0.598 810 11/17/2015
3.0.592 797 11/12/2015
3.0.589 799 11/10/2015
3.0.588 810 11/10/2015
3.0.586 816 11/10/2015
3.0.584 778 11/10/2015
3.0.583 792 11/10/2015
3.0.581 794 11/6/2015
3.0.579 767 11/6/2015
3.0.576 790 11/5/2015
3.0.575 786 11/4/2015
3.0.574 799 11/4/2015
3.0.569 763 11/3/2015
3.0.568 764 11/3/2015
3.0.566 763 11/3/2015
3.0.545 921 10/28/2015
3.0.538 843 10/22/2015
3.0.537 772 10/21/2015
3.0.536 809 10/21/2015
3.0.534 801 10/21/2015
3.0.532 814 10/21/2015
3.0.531 841 10/21/2015
3.0.524 756 10/15/2015
3.0.523 914 10/10/2015
3.0.522 751 10/10/2015
3.0.520 821 10/9/2015
3.0.519 1,036 10/9/2015
3.0.518 944 10/9/2015
3.0.517 1,016 10/9/2015
3.0.516 1,005 10/7/2015
3.0.514 968 10/6/2015
3.0.513 1,111 10/6/2015
3.0.512 929 10/6/2015
3.0.509 950 10/1/2015
3.0.507 864 10/1/2015
3.0.505 950 9/30/2015
3.0.503 921 9/30/2015
3.0.502 879 9/30/2015
3.0.479 872 9/25/2015
3.0.476 823 9/24/2015
3.0.471 833 9/24/2015
3.0.470 900 9/24/2015
3.0.469 828 9/24/2015
3.0.468 846 9/24/2015
3.0.467 833 9/24/2015
3.0.465 861 9/24/2015
3.0.459 796 9/23/2015
3.0.456 811 9/23/2015
3.0.455 868 9/22/2015
3.0.454 847 9/19/2015
3.0.453 846 9/19/2015
3.0.452 832 9/18/2015
3.0.451 818 9/18/2015
3.0.450 842 9/18/2015
3.0.447 821 9/18/2015
2.0.378 855 9/5/2015
2.0.372 812 9/4/2015
2.0.370 803 9/4/2015
2.0.368 801 9/4/2015
2.0.365 809 9/3/2015
2.0.363 786 9/3/2015
2.0.361 800 9/3/2015
1.0.360 795 9/1/2015
1.0.359 786 9/1/2015
1.0.358 815 9/1/2015
1.0.356 815 8/31/2015
1.0.355 793 8/31/2015
1.0.354 818 8/29/2015
1.0.305 822 8/19/2015
1.0.299 1,154 8/8/2015
1.0.293 842 7/20/2015
1.0.292 925 7/20/2015
1.0.289 1,021 7/10/2015
1.0.288 778 7/10/2015
1.0.286 919 7/7/2015
1.0.285 820 7/7/2015
1.0.284 814 7/7/2015
1.0.282 820 7/6/2015
1.0.281 802 7/6/2015
1.0.279 800 7/6/2015
1.0.277 842 6/18/2015
1.0.276 816 6/8/2015
1.0.275 764 6/8/2015
1.0.274 791 6/8/2015
1.0.272 1,189 6/1/2015
1.0.269 847 5/25/2015
1.0.268 778 5/24/2015
1.0.266 806 5/24/2015
1.0.263 809 5/21/2015
1.0.258 793 5/19/2015
1.0.257 811 5/18/2015
1.0.256 900 5/17/2015
1.0.254 753 5/13/2015
1.0.253 769 5/13/2015
1.0.250 767 5/13/2015
1.0.249 789 5/12/2015
1.0.248 780 5/12/2015
1.0.245 803 5/12/2015
1.0.241 779 5/12/2015
1.0.240 789 5/12/2015
1.0.237 785 5/11/2015
1.0.234 805 5/9/2015
1.0.233 799 5/9/2015
1.0.231 773 5/7/2015
1.0.230 782 5/7/2015
1.0.229 767 5/7/2015
1.0.226 791 5/7/2015
1.0.217 982 4/28/2015
1.0.215 926 4/27/2015
1.0.213 997 4/23/2015
1.0.210 927 4/23/2015
1.0.209 903 4/15/2015
1.0.202 852 4/15/2015
1.0.201 879 4/15/2015
1.0.198 842 4/15/2015
1.0.197 834 4/15/2015
1.0.196 834 4/15/2015
1.0.195 826 4/15/2015
1.0.194 839 4/15/2015
1.0.193 831 4/15/2015
1.0.192 837 4/15/2015
1.0.191 875 4/14/2015
1.0.189 868 4/10/2015
1.0.187 846 4/9/2015
1.0.186 836 4/8/2015
1.0.185 958 4/6/2015
1.0.183 810 4/3/2015
1.0.181 832 4/3/2015
1.0.180 793 4/2/2015
1.0.178 843 4/1/2015
1.0.177 808 4/1/2015
1.0.175 812 4/1/2015
1.0.171 792 3/31/2015
1.0.170 816 3/31/2015
1.0.168 801 3/31/2015
1.0.164 833 3/30/2015
1.0.162 813 3/28/2015
1.0.160 825 3/27/2015
1.0.159 807 3/26/2015
1.0.156 1,038 3/24/2015
1.0.154 788 3/24/2015
1.0.152 817 3/24/2015
1.0.151 782 3/24/2015
1.0.150 788 3/23/2015
1.0.149 799 3/23/2015
1.0.148 820 3/23/2015
1.0.147 801 3/21/2015
1.0.146 786 3/20/2015
1.0.145 784 3/19/2015
1.0.143 804 3/18/2015
1.0.142 942 3/12/2015
1.0.141 783 3/12/2015
1.0.140 830 3/5/2015
1.0.139 860 3/5/2015
1.0.138 816 3/4/2015
1.0.137 1,141 3/3/2015
1.0.134 808 3/3/2015
1.0.129 1,033 3/3/2015
1.0.128 925 3/3/2015
1.0.125 953 2/28/2015
1.0.124 910 2/28/2015
1.0.122 779 2/28/2015
1.0.119 1,310 2/25/2015
1.0.117 1,378 2/24/2015
1.0.115 988 2/24/2015
1.0.114 1,132 2/23/2015
1.0.113 1,284 2/23/2015
1.0.112 1,267 2/23/2015
1.0.111 1,252 2/23/2015
1.0.110 1,043 2/23/2015
1.0.109 1,295 2/22/2015
1.0.108 1,043 2/22/2015
1.0.103 1,250 2/22/2015
1.0.0 1,328 2/21/2015