GithubHelp home page GithubHelp logo

scuttlebutt's Introduction

scuttlebutt

A base-class for real-time replication.

travis

browser support

This seems like a silly name, but I assure you, this is real science. Read this: http://www.cs.cornell.edu/home/rvr/papers/flowgossip.pdf

Or, if you're lazy: http://en.wikipedia.org/wiki/Scuttlebutt (laziness will get you nowhere, btw)

secure-scuttlebutt

Creating this module eventually lead me to secure-scuttlebutt it is based on a similar replication protocol as scuttlebutt, but puts security at the forefront.

Subclasses

Scuttlebutt is intended to be subclassed into a variety of data-models.

Two implementations are provided as examples scuttlebutt/model and scuttlebutt/events

subclasses:

Replication

Any Scuttlebutt subclass is replicated with createStream. Create a server and then connect a client to it:

var Model = require('scuttlebutt/model')
var net   = require('net')

var s = new Model()
var z = new Model()

net.createServer(function (stream) {

  stream.pipe(s.createStream()).pipe(stream)

}).listen(8000, function () {

  //then connect the client!
  var stream = net.connect(8000)
  stream.pipe(z.createStream()).pipe(stream)  

})

Gotchas

Scuttlebutt is always duplex. Scuttlebutt does a handshake on connecting to another scuttlebutt, and this won't work unless both sides are connected.

Right

stream.pipe(model.createStream()).pipe(stream)

WRONG!

wrongStream.pipe(model2.createStream())

Also, when creating a server, scuttlebutt needs a stream for EACH connection.

Right

net.createServer(function (stream) {
  stream.pipe(model.createStream()).pipe(stream)
}).listen(port)

WRONG!

this will use one stream for many connections!

var wrongStream = model.createStream()
net.createServer(function (stream) {
  stream.pipe(wrongStream).pipe(stream)
}).listen(port)

Errors and use in PRODUCTION

If have are using scuttlebutt in production, you must register on 'error' listener in case someone sends invalid data to it.

** Any stream that gets parsed should have an error listener! **

net.createServer(function (stream) {
  var ms = m.createStream()
  stream.pipe(ms).pipe(stream)
  ms.on('error', function () {
    stream.destroy()
  })
  stream.on('error', function () {
    ms.destroy()
  })
}).listen(9999)

Otherwise, if someone tries to connect to port 9999 with a different protocol (say, HTTP) this will emit an error. You must handle this and close the connection / log the error.

Also, you should handle errors on stream, stream may error if the client responsible for it crashes.

Persistence

Persist by saving to at least one writable stream.

var Model = require('scuttlebutt/model') //or some other subclass...
var fs = require('fs')
var m = new Model()

//stream FROM disk.
fs.createReadStream(file).pipe(m.createWriteStream())

//stream TO disk.
m.on('sync', function () {
  m.createReadStream().pipe(fs.createWriteStream(file))
})

Use on('sync',... to wait until the persisted state is in the file before writing to disk. (Make sure you rotate files, else there is an edge case where if the process crashes before the history has been written some data will be lost /this is where link to module for that will go/)

You may use kv to get streams to local storage.

read only mode.

Sometimes you want to use scuttlebutt to send data one way, from a master instance to a slave instance.

var s1 = master.createStream({writable: false, sendClock: true})
var s2 = slave.createStream({readable: false, sendClock: true})

master will emit updates, but not accept them, over this stream. This checking is per stream - so it's possible to attach master to another master node and have master nodes replicate each way.

Implementing Custom Scuttlebutts

A custom Scuttlebutt is a data model that inherits from Scuttlebutt. It must provide an implementation of history() and applyUpdate().

See r-value for a demonstration of the simplest possible Scuttlebutt, one that replicates a a single value.

Scuttlebutt#history(sources)

sources is a hash of source_ids: timestamps. History must return an array of all known events from all sources That occur after the given timestamps for each source.

The array MUST be in order by timestamp.

Scuttlebutt#applyUpdate (update)

Each update is of the form [change, timestamp, source] (see Protocol below).

Possibly apply a given update to the subclasses model. Return 'true' if the update was applied. (See scuttlebutt/model.js for an example of a subclass that does not apply every update.)

Scuttlebutt#createStream (opts)

Create a duplex stream to replicate with a remote endpoint.

The stream returned here emits a special 'header' event with the id of the local and remote nodes and the vector clock. You can set metadata on the header object using opts.meta.

Examples

Connect two Model scuttlebutts locally.

var Model = require('scuttlebutt/model')

var a = new Model()
var b = new Model()

a.set(key, value)

b.on('update', console.log)

var s = a.createStream()
s.pipe(b.createStream()).pipe(s)

scuttlebutt/events

A reliable event emmitter. Multiple instances of an emitter may be connected to each other and will remember events, so that they may be present after a disconnection or crash.

With this approach it is also possible to persist events to disk, making them durable over crashes.

var Emitter = require('scuttlebutt/events')
var emitter = new Emitter()

emit (event, data)

Emit an event. Only one argument is permitted.

on (event, listener)

Add an event listener.

scuttlebutt/model

A replicateable Model object, a simple key-value store.

var Model = require('scuttlebutt/model')
var model = new Model()

get (key)

Get a property.

set (key, value)

Set a property.

on('update', function ([key, value], source, updateId))

Emmitted when a property changes. If source !== this.id then it was a remote update.

Protocol

Messages are sent in this format:

[change, timestamp, source]

source is the id of the node which originated this message. Timestamp is the time when the message was created. This message is created using Scuttlebutt#localUpdate(key, value).

When two Scuttlebutts are piped together, they both exchange their current list of sources. This is an object of {source_id: latest_timestamp_for_source_id} After receiving this message, Scuttlebutt sends any messages not yet known by the other end. This is the heart of Scuttlebutt Reconciliation.

Security

Scuttlebutt has an (optional) heavy duty security model using public keys. This enables a high level of security even in peer-to-peer applications. You can be sure that a given message is from the node that sent it, even if you did not receive the messasge from them directly.

Enabling Security

var model = require('scuttlebutt/model')
var security = require('scuttlebutt/security')
var keys = {}
var m = new Model(security(keys, PRIVATE, PUBLIC))

Security API

When security is enabled, each scuttlebutt message is signed with a private key. It is then possible for any scuttlebutt instance to be confident about the authenticity of the message by verifying it against the source's public key.

This is possible even if the verifying node received the message from an intermediate node.

Security is activated by passing in a security object to the contructor of a scuttlebutt subclass.

Use the included implementation:

var security = require('scuttlebutt/security')(keys, PRIVATE, PUBLIC)
var Model = require('scuttlebutt/model')

var m = new Model(security)

See scuttlebutt/security.js for a simple example implementation.

sign(update) should sign the update with the instance's private key. verify(update, cb) should verify the update, using public key associated with the source field in the update. Verification may be asynchronous. verify must callback cb(err, boolean) where boolean indicates whether or not the signature is valid. Only callback in error in the most extreme circumstances. If there was no known key for the required source then that should be treated as a verification failure. If it is not possible to reach the key database (or whatever) then the request should be retried until it is available.

Note: although the API supports asynchronous verification, it's probably a good idea to load keys into memory so that messages can be verified and signed synchronously.

createId() returns a new id for the current node. This is used in the example security implementation to return a id that is a hash of the public key. This makes it impossible for rogue nodes to attempt to associate a old node id with a new public key.

Generating Keys.

Generate an ssh private key, and a PEM encoded public key.

ssh-keygen -f $KEYNAME -b $LENGTH -N $PASSWORD -q
ssh-keygen -e -f $KEYNAME.pub -m PEM > $KEYNAME.pem

$LENGTH must be >= 786, shorter is faster but less secure. password may be empty ''.

$KEYNAME is the private key, and $KEYNAME.pem is the public key to use with Scuttlebutt.

scuttlebutt's People

Contributors

adamsanderson avatar aeosynth avatar allain avatar artskydj avatar dminkovsky avatar dominictarr avatar emattson avatar feytek avatar floby avatar juliangruber avatar jure avatar pkrumins avatar raynos avatar thoward avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

scuttlebutt's Issues

Documentation , dosnt include client side code for connecting to a tcp server

When i first i looked at readme , i couldnt find the peace of code for the clients, to connect to the the tcp server ,

var Model = require('scuttlebutt/model');
var net = require('net');

var m = new Model;
var s = m.createStream();

s.pipe(net.connect(8888, 'localhost')).pipe(s);

m.on('update', function cb (key) {
    // wait until we've gotten at least one count value from the network
    if (key !== 'count') return;
    m.removeListener('update', cb);

    setInterval(function () {
        m.set('count', Number(m.get('count')) + 1);
    }, 100);
});

m.on('update', function (key, value) {
    console.log(key + ' = ' + value);
});

Scuttlebutt#clone requires your scuttlebutts use constructor functions, don't take arguments or require modification on an instance

Here's the important code in Scuttlebutt#clone, which actually creates and sets up the cloned object:

var A = this
var B = new (A.constructor)
B.setId(A.id) //same id. think this will work...

To explain why this is restrictive, I'm going to show a few examples (sketches, really) and use them to illustrate how Scuttlebutt#clone breaks. They're based on a number of refactors I tried with expiry-model to get it to play nice with level-scuttlebutt which appears to call Scuttlebutt#clone internally.

So, first, expiry-model doesn't use constructors, because Jake likes to fuck with me and write things that break expectations:

var createSomeModel = function (opts) {
  var scuttlebutt = new Scuttlebutt(),
      coolThing = thing(opts);

  // ( Define some more functions and variables which use
  // our scuttlebutt and our coolThing )

  // Implements all the methods required of a scuttlebutt
  return {
    get: get,
    set: set,
    /* . . . */
  };
};

This breaks because the constructor for the object we're returning is, well, Object. Note that returning scuttlebutt does give you the Scuttlebutt constructor, but that it still won't have the same methods as the object returned by our factory thing.

So what happens if you refactor it to use a constructor? Let's see:

var SomeModel = function (opts) {
  this.coolThing = coolThing(opts);
};
util.inherits(SomeModel, Scuttlebutt);

SomeModel.prototype.get = get;
SomeModel.prototype.set = set;
/* . . . */

This breaks because Scuttlebutt#clone has no way of knowing what arguments were passed into the original. In the second instance, this.coolThing gets nothing passed to it, so your copies have different properties. Oops?

What if you refactor so that you have to set properties on SomeModel by-hand? Like, someModel = new SomeModel(); someModel.coolThing = coolThing(opts); Still breaks, for similar reasons as the case where we don't use a constructor: Scuttlebutt#clone has no way of knowing what modifications you made to the original object after being instantiated, so the clone doesn't have them applied to it.

Back to expiry-model: expiry-model uses lru-cache to manage data storage and expiration, and scuttlebutt to handle events and streaming. That means that you have to be able to configure it somehow, since every case of using a lru cache needs different parameters. Since passing options and setting properties both break, all you can really do is use .get() and .set() on your scuttlebutt, hope you don't have weird collisions, and beat the crap out of your libraries until they're smart enough to reconfigure lru-cache properly each time you do a .set(). But, in the case of expiry-model, the configs would, well, expire, without extra special handling. Oops. XD

"But Josh what if you just don't use clone? Jake never used clone so he never ran into that issue!", you say, in the hypothetical situation where I get to be my own Mary Sue. The thing is, you might not be using clone, but other libraries which apply to general Scuttlebutt instances may use clone, and in fact given that it's a core method it's not really realistic to expect people NOT to. Plus, the ability to do it is pretty handy.

For my use case, I realized that level-replicate was the library I actually wanted. But hey, food for thought.

Integrate scuttlebutt with Meteor

Mostly a note for myself. But I think it would be really great to integrate scuttlebutt with Meteor. So porting its DDP over the scuttlebutt and thus use a distributed MongoDB-like data storage for storing data.

Even better would be if it would be client-side only. :-)

Prevent tampering

I'm trying to wrap my head around the concept, I have the understanding about bitcoin blockchain technology (or others that followed) but I don't seem to understand how scuttlebut can ensure consistency and prevent someone meddling with the intermediate data.

At the first initial sync phase, that are 2-3 nodes, so later it can receive more clients, how can it ensure that node 2 didn't create a copycat of the open source project that it's sole purpose is to wreak havoc on the data that is being communicated between them?

Support safari 5.1

Usage of Function.prototype.bind breaks in safari.

It's upto you whether you want to fix that.

Sharding

Hi Dominic, first of all thank you for the amazing library, which we successfully could integrate to our project, using streams on webrtc.

We are trying to implement a system where every browser becomes a node, eg. 1000 browsers, every 10 of them become a cluster, every peer in the cluster holds the same data (1/100th of the total), thus 100 clusters contain the full dataset. This is a network of browsers, therefore, each of them can appear/disappear at random (this example assumes not all 10 at the same cluster would disappear at once). We want to make sure when a browser joins the network, it holds only 100th of the dataset (numbers are figurative) so that they don't have to download/keep a lot of data. Peers in the cluster replicate, clusters will do the sharding.

Maybe a consistent hashring is the way to go, maybe finger table, I was wondering if you have given this a thought, if so, what would you advise?

Encrypted message to all friends

Hi! I'm new to Scuttlebutt and fascinated by the idea. I wonder how it can solve my concern: I like to post content to "all of my friends" because it's hard for me to guess who might be interested in what I share upfront, so I don't want to tideously create a whitelist. At the same time, I wouldn't like the intermediate nodes (say, evil spying profiling company running a pub) to see the plaintext.
I've read this protocol description https://ssbc.github.io/scuttlebutt-protocol-guide/ and I guess that what I'd like to achieve can be done with it by:

  1. Me spending some time within my client to define something like google+ circles: set of people, like "family" or "boardgame geeks" or "all my followers" or "all my friends"
  2. Add 49*NumberOfRecipients bytes with decryption keys to each of my messages.

This is a nice MVP but has some problems:

  1. If I have 300 friends, this can mean kilobytes of keys per message (also the length of tgis header becomes a side channel to guess how many recipients, so how, private it is, and using same circle will produce same length, so one can corellate..)
  2. If I gain a new friend in future which I consider part of a circle they will not see my past messages directed to that circle

How about this improvement:

  1. Define a pair of keys for each circle
  2. Encrypt message with private key for that circle
  3. Distribute the public key for a circle to the circle members

I'm not good at crypto, so perhaps there should be some additional salting, nonces, etc. This is just a sketch.

Once again, I'm completely new, so sorry if it is already done, discussed or if this is bad place to talk about. I was searching and couldn't find anything about it, so please point me to relevant place if I missed it.
The closest thing I found were groups, but I guess that they represent cliques in the graph (all parties of group agree that they consider them all part of that group), while circles despite their name, are rather assymetric as members do not have to know in what circle they are from my perspective and don't have to consider me a part of circle of same name etc.

Does scuttlebutt/events omit events?

If I am reading the paper (Efficient Reconciliation and Flow Control for Anti-Entropy Protocols) right, the history of a certain key is not guaranteed to sync completely, i.e., in some edge-cases some old values/versions are omitted.

E.g. Paper p. 3 figure 1 and

A remarkable property of Scuttlebutt is that the gossip ex- change between two participants is not designed to eliminate all differences between the two participants, even if there is sufficient room in the gossip messages.

Have you made some adjustments to the scuttlebutt approach to guarantee full-history sync, does the scuttlebutt/events omit events, or do I get the paper wrong?

Just want to now, what to expect from scuttlebutt/events ๐Ÿ˜‰

Thanks

Pub/Sub broker on top of Scuttlebutt

I'm thinking about building a distributed pub/sub broker on top of scuttlebutt.
Do you think it's a silly idea or it's feasible?
Have you got some gut feeling about the performance of such a system?

Another question: it is possible to have sublevel-style gossiping? E.g. limiting the sharing only to a subpart of a model.

idea: just use one type of stream

I want to adjust the protocol so that I only need one type of stream.
you will still replicate with duplex streams...

stream.pipe(scuttlebutt.createStream()).pipe(stream)

but I want to make that work with fs streams also,

var rs = fs.createReadStream(file)
var ss = scuttlebutt.createStream()

rs.pipe(ss)
ss.pause()
rs.on('close', function () {
  ss.pipe(fs.createWriteStream(file, {flags: 'a'}))
})

or, use make a duplex fs stream that works like that...

Prevent incorrect changes

Not an issue, more of a general question โ€”ย assume that my app have following scuttlebutted graph

client (browser) <-> network of app servers <-> network of storage nodes

Then, client performs an incorrect assignment to the data on it's node โ€”ย what is proper way to prevent those malformed data to propagate across the system? Should I implement my own scuttlebutt that refuses incorrect changes in appyUpdates function and place it on app server?

Sorry, if it's stupid question, but I am just starting to use scuttlebutt.

Very large messages getting clipped?

I'm in a world of hurt this morning. I'm seeing some strange behavior that is causing the stream-serializer to emit errors on JSON parse because it's trying to parse a clipped JSON object with other data (that partial as well) appended.

The message in particular looks like the sync of the vector clocks (which contains 1192 entries before it's clipped) that is clipped and then has another update message appended to it.

I'm looking for any help in pinpointing where to look for the root cause of this issue.

Thanks in advance!
Mike

hehe... here's one of the offending message. Go to the bottom and you'll see the clipping and appended extraneous message.
{"id":"E60D7E450F34C7087504B1B7","clock":{"60EEBDE5232DFD2AD83B0572":1377215673925,"200E6B28CF9B7C3160EB7C8B":1377212100389,"BF52AD682C057DE634678942":1377212184833,"145A3572E605754941D00917":1377213611477,"4875F77C0662CCD3FAE2F5F2":1377213988090,"6E232AD8252CE0F3EB777825":1377230281646,"601B92640711AEBADEA2C0F8":1377230284928,"C23249E83CF2D646A78F484C":1377230288447,"58781C238EDCA7E7E7E45D9E":1377230291556,"BD411AC636F6F57D0C717BAE":1377230294673,"36DF8C23C0C3B82FA9E8E63A":1377230297704,"11DBC2FFC262AF62E4941917":1377230300172,"C01974C005B1A5B29F98963":1377230304173,"36A3203E529E73E4E82FD2A":1377230306512,"D98EA1C3458ED527BFA6B00A":1377230310308,"A4C1656D601695E17672CAB4":1377230313612,"3ED82A8F053D6689C31AA282":1377230316695,"0A9301529D782742F881271F":1377230319809,"9B4AD55503DFFEE3D6B90F2":1377230322205,"1CC1D99A262EE4CF6B51C3A6":1377230326142,"8A86228EBC3C0C43A38A932E":1377230329460,"BBFCDEB70AF140DE1EE38C62":1377230332740,"615C6407478A774B78287215":1377230335831,"6E3E05D4FE4A641E09401FE6":1377230338002,"A1FB4D0F8D89ED962963C632":1377230340886,"ADD677D255464003864DBD07":1377230344086,"511300126C2EB2CF84322B0B":1377230347369,"12B50AE97611B7D6284AA77":1377230350574,"C453373224188B6A99C91C7":1377230353762,"54F72844F6CC2495F2161422":1377230357066,"8E90EA1AB3EF6FBE0C794CAE":1377230360303,"827B38BFC8D77AA48B62BA2":1377230363544,"604361BD4426086B611C1B05":1377230366864,"2EE5AC3A8CD1D01DA9BE68F2":1377230369920,"ADE993A87BC7E95631C4A791":1377230373459,"88F0DC330A65F0CFE3EB8D04":1377230376589,"5B19823CBBFAD2E8BF4A919":1377230378745,"B03B51CB4A08A0E8127B358":1377230381651,"4A2622EAB9667716BDFB176":1377230385085,"6A996FECCD0CFCE3D483683D":1377230388218,"487668F80557F56BBBE315D":1377230394873,"8DC25147A83A1EFCC9106B6A":1377230397908,"CE6FEB1D4088AC1E847FD0A":1377368962436,"4CAB2A830584691B4B7DD05C":1377460752573.001,"ECDBE7F7F28CFACB551BE3CE":1377529701317,"8DC4CF0DD3641458781FE8CA":1377460942503,"344466CBAC3A78BFE68DB053":1377266040928,"9E1B946480E20DC6C4A691B7":1377267488295,"3776226EFFB56D2A1C101DB":1377268422276,"89CE6933E1EEB9B2DFE98D8E":1377270015966,"1A7186114B01795AE10C7BD":1377271511763,"8C2FE1021C7B539C7FF189E9":1377529700240,"1ECE21827FF915D3FBB81A8C":1377529694085,"747875899FCE14CBC0C6799":1377529697079,"9867A0270A9553C2626ED4E9":1377292088672,"8C56704EAF1CC171B2E4CACD":1377460947798,"B12FAEE2E55385A584B9C354":1377528252043,"903DAB31291755DD0F44C41C":1377463663791,"04AFE1F1C22A52F3793AF51F":1377460756650,"EDD0F215D2D533DE5A806E9D":1377460756969,"8C83464D85A7D550FEA1F7D":1377463213957,"971297423112DB14E9CE7087":1377463217010,"E30E0ABF71AE20054890A46C":1377463216249.001,"E60D7E450F34C7087504B1B7":1377529696609,"A5FC8EC2F5499EBFFD58C0F9":1377142554383,"952CAA929FD598F4ABB40066":1377230245217,"35280B4ADD7C5E73EC5B7BBD":1377143537308,"FCB0D265295B4BA351E331B":1377529694098,"8C837F32C4EACE9B493F196D":1377210807780,"23CFACFCB5B6EC01DDF33DFD":1377211274150,"3DAC8969C1D7A3460B708953":1377463220369,"42458344FE41A83E8CED19":1377463219597,"E7BE5C3DCA2D47F14F4D05E1":1377463099521,"90DFC5DA610297AABB3D603B":1377463223723,"7A73E1E8BAB6E84EC944BB1E":1377463226756,"BCB1E259E31D87DA581173FE":1377463226030.001,"3CCAFE0BB711C0A5DAED76AD":1377463230194,"94270D7D0F15E3EA8F946ACA":1377463233229,"AFE96D6B5F90CD2AB8CE80D":1377463232471.001,"FB86F95A1A6D1D299C76262B":1377463236655,"9040B04AF030CC162BAA3878":1377463235838.001,"372B509D248EE123E0217D09":1377463242107,"23C25A45059A58623EB9B738":1377463246035,"0BB35B821C91E8E15AC2901C":1377463249274,"59DB1D4C020D906EA4DA2DA5":1377463252325,"A8E3360BDCB160913D2F2E1":1377463251550.001,"B6271E419316ED4799FA3F7F":1377460769179,"D97CA01F9A31128D434DA20E":1377460786093,"D9CAF4357F6424AFCE42D93A":1377460790618,"9505F46BB31D1F5A6EDC3D96":1377460792871,"C8B86E2CE860E58833A7E":1377460797338,"F2797783A719867BA9DB3FF8":1377460799556,"A3E34062E9E0B753E80EF82":1377460799489.001,"B9CAA124948E3CA90664F051":1377463258799,"8D06AFC41D6B10192D0F0A7":1377463257961,"58EEE671B3DCB149DB2E5CA":1377463262031,"B1D221A1F0A0577DF289718C":1377463261178,"DED1F57D2FFB9A2FEC24DF":1377463265181,"A1B7D41394B54097A9EA659":1377463264379,"ADDA4FD8F381D1436982959F":1377463268681,"8F406028CE87C4CF2BF1FB0B":1377463267833,"6CFE0E557B60FE584F9C867C":1377463271836,"E57470218B2BBD820E378C":1377463271012,"E5B67082D134261E133F81C5":1377463275366,"37A45B52BDD0F3615532164C":1377463278476,"44BBAE769BEB832EC25CB462":1377463277613,"033C0E3F86DB4A4C6EE9E54F":1377463282013,"A2E70B6A33EB2BBA9B67DDEF":1377463281125,"DAD4304A15BC6F356DE2AC14":1377463284171,"3A629B2400B5FAA12EA5D7A7":1377463284234,"B043B5778F4FEC0CFF1A9B63":1377463290596,"C9E68CA830AC6CAA39C838DE":1377463289654,"39F931066A65ACD4CA35A2B5":1377460817019,"F4C7DD8C768BDC0F70414B06":1377463293235,"E24BAA63DB7C907B7E55929":1377463295401,"6144BE586334125DE4013B5":1377463298501,"667042465140F02B53FA3B1F":1377463297720,"F5E3525B191EF49D38E7D85":1377463310701,"C455615844EE9B48882CA771":1377463313124,"BF4A390B5FA273F76D4828B1":1377463313220,"53F360C967496597F1B01188":1377463315504,"8AF385FCAAC88674103E0D0E":1377463315517,"81FC75B3AF47CD5E54142627":1377463317780,"C9B349D8B6D3E752E295CE64":1377463317783,"55C65D5CBE255C32DB458111":1377463324324,"FAB8BC2FAEB9A815A866CEDF":1377463324058,"D75868E24A3D63810E572348":1377463327794,"99010C8FCA8E72C2DA0440DC":1377463326929,"93F0CF2A57773B01C6F67845":1377463331365,"8A8A4DCA93CA6FCCF9B88EC2":1377463330926,"44A784F361B5C6F2D6312027":1377463334656,"AFBF0804AB7F3FE132AD9003":1377463333764,"4376ACDFAA79DF45DD5BFC9D":1377463338179,"A409BE08E7395BAD03361527":1377463337296,"791763DFD0EBAB8CC9A6F0A8":1377463343836,"F5CA3561D733B4774BDFF706":1377463346896,"70D10F0EC710B3FC8A13A30E":1377463346068,"5E33B1744FF57F117486A0B":1377463350391,"0B11AFC85AF4B8FAE58A21B2":1377463353479,"51461A5AB89E2E3BCDC7B51":1377463352653,"725D952CA53591515D38FE5F":1377463357334,"040032D6B6035CF505DE8D2A":1377463356794,"1B638B9FB685D98C27F980FA":1377463360945,"6D6AB90D5EF0BF16914F6869":1377463360110.001,"5CADD9F9D5CF2CA6DE4E7EBD":1377463363574,"66F08090BCD0DF647D6A3":1377463368680,"6E48EC86C5F41C0A6B9AF938":1377463368638.001,"26DB7977AEF55186103EB59":1377463375071,"796A07810CAE44910E17FBE9":1377463374197.001,"249B21AAE5089FBDDF2DEFB7":1377463378638,"911813F654A87305BDFB484F":1377463377773.001,"462E1728AE7F57F9C701FA65":1377463385878,"7E6F99272BA26A2452431F29":1377463384510,"E84C64E5351718AA89F4D28A":1377463388959,"38E08883D358247F61252CE4":1377463388121.001,"0EFE93D274AAC5C9B3877A9F":1377463392395,"24A7CFDA7D1669CDCCA4463B":1377463395784,"337DD5C7B3FB0E71E08C50D6":1377463394918,"09E57858F9350C7909A1559E":1377463398831,"632128F15580135956129ECE":1377463397946,"8E675DFEC00B0023AA1DB36":1377463402948,"11D95AA8A4BFEFFD91219603":1377463402032,"732EBD7CB59FF85254D6C06B":1377463411528,"77E99FC20FCD531DC3959CE9":1377463411384.001,"00C0DEEAB1E7534E474CC088":1377463415192,"0A59DB880D09112E9C2967B5":1377460979258,"C6C9E2EE7CB5EE1EB890021C":1377460979217,"7A5018DBB0AB2959EE0FB7A1":1377460986748,"DE3B04EFE64BB8822251D84F":1377460999242,"507117B8B95BB4F726EDDACA":1377461036905,"671CC2EFEE05D73E84930E3":1377461036865,"E4115B6F78A3BF676D70C0B8":1377461039497,"C3786CD8753969F01DA28C":1377461044514,"EF23792C788B48184285DE67":1377461049562,"9C0EC5A7EE21A346BB2B1AE6":1377461054865,"4EB345875D9CE4A6F175B368":1377463120779.001,"AAEE9E6D202ED38234F01596":1377463120808,"E33E17FFA47E96AE52A8831C":1377463133826,"7E0CC5FCAE6D5ECDBFEBFDA9":1377463134628,"C972E377A9E0048D9B7562":1377463406002,"DB07FB5BFCE96EA4BAD3CAF4":1377463405568,"D900FEB19BC2508DCAB94567":1377463425609,"432854AF88DDDB22F52B8C9D":1377463425455,"DFF20F166F035C250D70E3AF":1377463428708,"348B2ADB796B444335D207A8":1377463428038,"D78DBC0A370289D1CBB880CB":1377463433985,"7637351B640BA4D46B10811D":1377463433540,"6A9606FA3BB4F298D2CB0447":1377463439252,"B845D5DD7A61F65D392314C9":1377463438974,"F4F44E542DAE3D1634A1BE4F":1377463444610,"39ADE91179284B1FAC8CBAFB":1377463444343,"855EA4764E6F6261D77F868E":1377463450291,"3C2B4FF154C6C9DAB61D1FB7":1377463449693,"A52FBCD9B8F2130BE5EEA1D6":1377463455371,"05FE8B8444E88C3A000A8E63":1377463455080,"F2D0EDF96B589AAED99D4BE":1377460764175,"4CDA9188A470CF7B1790D357":1377460795655,"CDC0F6FB98DD821FBA95B5EF":1377460819297,"D9F1D86EBBA8838A994B8DB":1377460819204.001,"F3E01066B1C23B4E81730472":1377460822130,"97780085F757AD29C649426A":1377460821997,"8B5C9B6CBAF543C54D022B45":1377460824307,"D9C0F587F389C4FC2207698E":1377460824311,"8040575BFC87B4462AB26617":1377460827883,"1EB0E5B5E0A00A5C6BF6D501":1377460827971,"C19D98C531B26F21D9AE7AB6":1377460832705,"6A31D77E84A0643EDD432CE":1377460832706,"94FD6D26B122D9384746317":1377460835185,"1891822CC6F69863F5E715EF":1377460841146,"54033C410D00C0CE995B5EB":1377460843367,"CA4256A449EDE2C83949D0CD":1377460843369.001,"25083121E42ACC9EB1CAF0B9":1377460846218,"66DBD5A870E976255BFC9164":1377460850537,"569764A90CF3C73A4186D7C7":1377460850112.001,"41A9CE054AFC067AA2E0D827":1377460852662,"8F7863DB400BB273BC423564":1377460852663,"D2E775EB6B40680A16AECE9E":1377460854838,"573CFD9830AF37E584E24BFA":1377460854840,"5A4B22A8A6AE318C980AEE2D":1377460857604,"34C7FFB587E821EB32CACEA":1377460863192,"6ABD7F31DA9C2BE63A907AD":1377460864670,"A73F78E1781CFCF894A3EA02":1377460867692,"274D5466569D3F1903C1A911":1377460872792,"E79853C5D06E6F46CCE61711":1377460872794.001,"EEDE0BFEE936C98BB661E8FB":1377460875793,"EC88D87A9C038652255831BF":1377460882751,"8A7E473631DD9D85D9716F9E":1377460882753,"55D7C40F2F991A56CBA077C4":1377460889401,"22F4893404339EFBDE16D672":1377460892318,"25276B89B5D655360629EBB5":1377460892665,"251241CE421644491889771":1377460896024,"6AE5EF5369808E65339EB639":1377460896118,"9B6CBE38A5CFAB87883F88C":1377460898867,"EBB24DF96A7E3C3706160E8B":1377460901047,"B21AE98D7DEDC7B42DECC879":1377460903143,"1E70DECD4FC3CF1F4BEBB517":1377460909190,"DF507EF64C57990DD6B379D9":1377460908849,"0E78A132889773CF977DCAD5":1377460913134,"53BBA187B2CBB38A3832D683":1377460915427,"0196351C37D5DD634CFE07DF":1377460915298,"CA5827A1835A1BD8560381F3":1377460921719,"37815872B90D81E224B65FCB":1377460926414,"DAB537BD66E6187811AE30DD":1377460931510,"DC16D4C19F96F6EED560D76D":1377460930943,"DCBA9846A296B5C963A07556":1377460935754,"1FB059FACE95B346FA52FE91":1377460939274,"58C37293067E08D974D3CD88":1377460945776,"79FFFC42A2125DDF683B9275":1377460948521,"9AD9DC0CAA62815344A16EF7":1377460948861,"7ECF54CE61684E45CDA05A24":1377460971998,"8FAC86BB9D24FA438E1B4595":1377460977054,"3CC3432F5A8649A25991953E":1377460976534,"1B616095849EA75863FAB579":1377460983088,"86186316CAA10A17C7BBE73A":1377460983784,"A06D936CFC7DD2C67BB7E65F":1377460989508,"B75DE9464E92D400E9937D":1377460992767,"CB1993CF43712DDBD1C86E1A":1377461002025,"B8D4A28811EAC3C90D10B92":1377461002022,"36D21C9708651A1BF92EF534":1377461007550,"7A3AAB2C4B85586CB00A5CA6":1377461014692,"26E03611EE70F13CD6F6D85":1377461012085,"18FEF84904C86FDD1937999A":1377461020250,"E207BB2A186656C50362AC47":1377461020108.001,"77494F834C93D002981F01C6":1377461029815,"F35CEFC5B1A745D37D29EE7D":1377461057031,"1926894A2AA827E6BCFFE6AD":1377461059257,"7BD3CCF472BC0DB37418DDEE":1377461068779,"AE0AA096DA862AE8B4D9EB8A":1377463107659,"893C5C3BA7F6EDE54EF3F2DA":1377463112745,"C5AB469D53540E3BDAB10CF":1377463117478,"301BF98192E4137E3C46C752":1377463117061,"921841EF22AA2DA8BEB4A74E":1377463130481,"7D35C18FF373302F68F96076":1377463143864,"6531F6B9F15CF9988FCB066B":1377463155414,"94AEB5276AF6EE9EB0D91CC9":1377463302373,"F8E7E50BE3AF5E0FB31ED90C":1377463301197,"3135293339DA00D3BCE365FD":1377463309811,"8A3AEB3B3E9C434617FB584D":1377463340868,"6B57D1A23A6FB15C6A6288AE":1377463340870.001,"AD915155C399CF53815D197":1377463366039,"6184EF92F394D0E8D5F62E18":1377463366041.001,"6A73C577CD8C7D5C96D43605":1377463371579,"6A6F06F8D194268798BB289":1377463371028,"E78824FA77C4170F76713A03":1377463408618,"075EEC57B6470068384A8BDF":1377463408619.001,"56F72EFA2AF69125D529DEFC":1377463414035,"A2AF5121D2ED67CC7391648A":1377463431019.001,"F017330DE3CF390B31B5DE9E":1377463431046,"BE45A112E3E70B3ABCE50D72":1377463452559,"46922A1700A19F1EC226A75B":1377463452424,"EF8515D2F7290EED471E83B8":1377463465318,"84FE3B32DB5331CF78DF2B9A":1377463464398,"AC4FBD233955EA65B7F73A04":1377463477788,"750AAB26717F5BC89DD9A179":1377463480021,"D8E98FA90F0F33C9C0F3C295":1377463490324,"12D6C488B911415797678772":1377463489872,"1814C9D630E7B0EC69B79E8D":1377463495650,"D8B0D788CB3FDC1ED49A19AE":1377463495653.001,"5FC60DDD3BDACB9F08C56858":1377230281326,"DE12AF28BE4A7147AB8200B9":1377463499606,"89C9F7AD03618A771FA5226B":1377463498685,"3391A549A2C14ECA9CD385E2":1377463506380,"EBE3FE5832FBDD9EC4D00D13":1377463505522,"5070AD2476A90FE8B1A65F9F":1377463513211,"1300554A1D27D14ABE65EFAB":1377463512192,"894D934EE0CC20323F998BB4":1377463523581,"91200B4C98BC30FB8E2FCD52":1377463522971,"491CB2B53FF6A5F1B47704A8":1377463530441,"77052269628DDC6BA2B383":1377463529479,"5FD031B3E1BDBE16665A5729":1377463536344,"F372E1D646C621E253D97CE2":1377463539860,"BC4C181D0A59428C76033D21":1377463538978,"E9724111CA210A2BF7394057":1377463542283,"17F37EC9F748881BA9970A98":1377230356192,"B6BD6E4C441DCC872C5775B1":1377230359419,"93E3D2D2A4219D0EDD0CF976":1377230362665,"9E53961BEB169885B1829754":1377230365949,"9E96FC8D06F0C52227A0654F":1377230369100,"5FF385E47C1BED2404C43365":1377230372599,"844A710C533CB51BCB3DF7D8":1377230378747.001,"EADF4C44E720D261E8F1A0B4":1377230381171,"9A58D0AA4BE3F5BB7D5D6733":1377230384224,"D6E63B9223A589AF27392E7C":1377230387343,"0DB49F2E0A2E45B7EECD99A5":1377230393579,"37D47FF407B63FE69DE56F3":1377230397042,"AB39B15385F31C5EDBFD1E61":1377460954849,"DFC0C65F88228D6FAF70F61F":1377463460413,"3593EA4AB3DC4334E3D4AA5":1377463460416,"AFFFE2E2D43721CFF73B45AF":1377463467679,"AF64D7D99C9B636A52301808":1377463467681.001,"A300C3EA9DF3A83DF1B4F754":1377463470803,"171AD05B168FE8A3BEB76C49":1377463470805.001,"7932A8A967ED9EC603C6D625":1377463474126,"D46622D7BE5572FC4EEC7D03":1377463474129,"D3961A854ADCFD3B26D2C877":1377463492798,"C113B7A8F3BEE0E37726F09A":1377463492654,"5491995A8E37ECACF72184F3":1377463502044,"C71934F8C6E044B7C30A210A":1377463502046,"B1CEDA24440CBB12628084F":1377463508794,"94751DD21A4A2806AB9B237D":1377463508725,"B2C10C18897458CD1CA842E7":1377463517829,"764BDB0B20076D434A54AD":1377463517831,"478B741749F5F68BA91818B4":1377463526050,"F58100991E851CBBE060CBA":1377463526052,"643275A5E01C8848464043CB":1377463532853,"390F42EFCF9BE62A8B93353":1377463532801,"B3E653DF7CD49EC30A7F3D4B":1377463554164,"A37C651D7FAF8F92C60EA006":1377463553193,"8B5CC84839CC92638F4FBF47":1377230284170,"C2F5BB2EF8FDB96746C9DCA1":1377463557692,"8AEA9284D50554994B1AB14D":1377463557113,"701965338E857A5970CE1BB1":1377463564572,"806D709D89EE58388FC49299":1377463563602,"4CCE54687164873E40ECC80B":1377463568052,"FEE5A4B3700E260E76643CC":1377463567084,"E10A600B32227D4BF9321225":1377230287367.001,"E9EEBA45162D61A805C2F6FB":1377463571381,"F0D7D824599CC5C89AA9ECA6":1377463570513,"2BB8D83F7CB367B83477A32":1377463580497,"104D257277409C965A9512BF":1377463579952.001,"A3679FAA44C0DF2176078A8":1377463583019,"94D7200F5FFE64478538CF83":1377463583060,"EA6590DBA2207191D9F1D215":1377463586253,"D886FAAD467B0F4209B30B6":1377463585857,"F203356A7666BF73184AB867":1377463589695,"289EB60954AA45D65226D1A":1377463588763,"4BB1406A2521A4639B2A8925":1377230290739,"05E77A84BF81D116D887E722":1377463594071,"62CC22E44D3A09B1B79C4996":1377463593113,"461ADD15C240F804BFA7124":1377463597726,"643E3FF35EA3A145937D7D7A":1377463597032,"241A34490863AB949ABAE14C":1377463603146,"EE5A2D158074E5889D367D2":1377463603070.001,"62FDD195C61A87FC36657461":1377230296890,"59FDF86A7FD6D9E712099B5":1377230312624,"2EC89D0FEB4512B84DD24611":1377230315920,"263FBE2B2A5269CF66AAF8F8":1377230318922,"5679DB6CCABF752A11A67DB2":1377230322208,"5C956028B69E9EC6AF86115A":1377230325292,"1BA3C4C9704BD142D9C1A313":1377230328396,"7689B4AF349DF6DD1EA0D277":1377230331712,"BC38F0884113CF612F3F1E43":1377230340166,"D5F71BFBED60B07A250CF5ED":1377230343747,"045CBC68B6EC7F67EAD7244":1377230346574.001,"D0F1827F997EF226B15132FE":1377230349740,"FFD2ABD7FB43A185D3CE0C62":1377230352844,"429659A3E9E0DE5DECC0BEEA":1377463608974,"1CBDBF1B2591B59B6AABFC3":1377463608970.001,"4E80EA3779D542FD3C748DE4":1377463612575,"47C574343A703129DD62C392":1377463612466,"93B3194DAA3F98266E86C22A":1377463616166,"59A4FD281C6DDED5AE3A7BF7":1377463615391.001,"8B497B74C574DE73E6E0CEB5":1377463619900,"B8B6696A84E388ECCFABB3C":1377463618982,"7C0165E7F3FA024B89B63E59":1377463622730,"A8FC5E056CA2F101BF21DE72":1377463627903,"7E591C812ACC92152A3F37":1377463627798,"42D58D92F77375F37D4CFC6C":1377463640250,"27BB1309498148FB00E6B1E4":1377463639389,"96530863462508B7FCA53419":1377463644283,"77DD57469EAB8919D3FF2096":1377463643330,"B1EFC77E08678C072D5CAB4D":1377463648169,"CE3805ACE6065848AB2C9CD5":1377463647215,"38615F3881C99FCF8DBC8D83":1377463654227,"70C270C6CE6F552454D70747":1377463654233.001,"375064E570CE8418C15302A8":1377463662177,"27FD7D5164163FED0D33EACB":1377463662159.001,"BB42D11FDD872C2F5876A124":1377463664579,"5480D4CBF21AC9F5A8CF7137":1377463664585.001,"43FF31223BB9B2F986250027":1377463668678,"3C9C9CCAE10930AF4F7C786":1377463667736,"63180B7C06FDC18F3A0C2256":1377460764146.001,"649C9B37C10F56C9F94C77CB":1377463685649,"17A4675192F77C013A460297":1377463685207,"98713808C7F120D3E64E0626":1377463691476,"F23E004E70092FC5AE92A7F9":1377463691423.001,"C3499BF9A171FF3D3F718FCC":1377463694961,"584B268C014444A41629A11D":1377463694026,"C63531D7DFE9EAE14AB7592":1377463700350,"B27A6A3EA25741C13907F7D":1377463700077,"303B4275448D7F9A76D1A3DB":1377463703482,"D57B350208851E5B3B68C13A":1377463702511,"61AB82FC0014EB31794A2CE2":1377463710512,"413E052919DFCF57D0B621B2":1377463709553.001,"8DA23271B435FF0A7EE41FC2":1377463714360,"6C82F675C31AE0F0A9C32DC":1377463713417,"01D8E36B0C8FC4292451051A":1377463723634,"3D322652D0B2DA837B242558":1377463723573.001,"BF973468FECCF18894BA6E58":1377463729587,"BDB28223B263AA7FD96F4B9A":1377463729584.001,"36EC1ACD57E7703C7C645FEE":1377463735343,"92B500225A6F082AD876394D":1377463734913,"5D96BA3D02AE365889E53326":1377463739286,"7F3A658CB4852F9504E6318":1377463738342,"6D0DAA827B0C8ABF9C6AD46C":1377463741927,"702A665CB8510741E14B1F4C":1377463741931,"49FCC6F105F1CCE08442FE5":1377463745740,"17737C329462ECE02387CA6":1377463744858,"20CF77C4D503727C7B12DC85":1377463752794,"B33BE73CC4FC4BCD58DB3D37":1377463751829.001,"BEF4B205FA5BAAFF8EB9B703":1377463755608,"BDD8587CBA58CDFEA66F3332":1377463755612.001,"3F1273881BBAEC7352EDEC56":1377463545143,"3F72ECB8B707B65DC57CC58":1377528260351,"110076F435FF3816F35CEE6":1377528260356,"08490C45E2AE612F683F1333":1377528276263,"21F306BD77294274079EC561":1377528276022.001,"3773DDA83F3ADD2BF6C11B78":1377528283728,"A552B8C62D0C00E916BBB3B2":1377528283642.001,"890B5E1E47F327CB115FD34":1377528291205,"F038DFCC4350C1D6DE289F05":1377528291112,"7A46C0A9FD408A1388967E79":1377528293701,"956B5EC791ACBE08B9B426BF":1377529701182,"A488996AB59F53D2E5AD0F78":1377528293646,"C281AE33DA665D6669A62EE":1377528296322,"D8CAED1F863335ED96E132E":1377528296228.001,"2C52CBFDC54F60C51050479":1377528303745,"3C1CB4CDCB793534809FACD":1377528303699,"A26870E858C1A2D2CE0867D3":1377528298745,"7E1A192FC7F162F2916ACBAB":1377528298657.001,"46045C75C4B547C76E8178E1":1377528301202,"0DF98CC6D88F858B3B5D0E9":1377528301111.001,"3C405BB3E7A6A2616E4065B8":1377529696434,"618CFB1F92493827007B05A7":1377528309458,"3EDECD7BC3A89EBE6B96C388":1377528309332,"E2F749E2A2EA36DEAD8252EF":1377528313314,"B7A0F573B758167E87E10009":1377528316463,"AE63C47B4040B2C720E78626":1377528315581,"0BDA06EDF7EC8874E37167CB":1377528323187,"FE45AB22B3314B7E141CDB51":1377528322372,"81D828CD3D6ED9EEC934A1D6":1377528326852,"23B4FBB5D52C6888A3074176":1377528326016,"BF1FF7E3EAE5562211135379":1377528339573,"C92A591D94EBCBFB0AC28C38":1377528339582,"1BEDD16A1E25E3B3F2836672":1377528341829,"92E2411AE3B8E95A724D3AA3":1377528341786.001,"78EE12A30029DFB1370A7E36":1377528358358,"CAB4A2557ACC6C0F3DB05DB9":1377528358305,"2F648A9BFB09957A6DB8D92":1377528365756,"950D7E57DD63BC2AFCC9B064":1377528365561.001,"645A9816EA2D7F0ADF9588B":1377528376810,"79EA3BF41C2E1BFA5BE3A7AA":1377528375977.001,"2805D573C3F36FEB9602E37C":1377528382490,"098EF118782F9AF6557AB6E6":1377528382337.001,"14E28C42301C8FECBEB7B31":1377528369407,"FDF6E237A56C4753B652395":1377529428114,"6E5D2049629A24F9BED9498":1377529447407,"D595FFEBD66E2E56D22B696E":1377529455494,"6ED31E6DCCB3741E5E31BDC6":1377529455686,"99AE340ADD7C9DFEC101D2BD":1377534004300,"9363B9184C36422634CD29FF":1377529436828,"86DE171C52DEF647F5BF6442":1377529436709.001,"442329CC18869C98C37C3E3B":1377529446890,"13FD478F37BF02598F322EDF":1377529463448,"D95A2ACA71A9074AAB723DB1":1377529462867,"B35A930A10498728319AFA25":1377529476030,"3E86B56A1279959511869073":1377529475880.001,"E2C14073FF70F77A2321E14A":1377529486371,"2EFB92F48BEE98DBAC4BD8D2":1377529486163,"9FC411BF3F48609FA1ED8788":1377529494113,"BF78F163E103A22956FCB6E1":1377529493900.001,"97118D45A53F8258789EC5C9":1377529501411,"C18070C3A4611F8D2169DC57":1377529501146.001,"F987F275C274660753DCED8A":1377529513830,"31D18728DCBC0918865F4716":1377529513632,"7C2F4FFA2614EBB8B123A3CA":1377529531113,"04AA668333D43C3AF3B66983":1377529530984,"09809A8E71075D59D4DAA87B":1377529547833,"586D874F5E70B28CB7463F8B":1377529547678,"BF24913F92A797183E5A6EE1":1377529559645,"42163B6A5520A1252F29BBE":1377529559586.001,"B6A2B624C52EE15F92202AD":1377529565343,"BF946A5875B0B63EF20A639F":1377529565277,"63C8D9471086C737413A202":1377529571102,"CD4CB966B312A94425FF4D45":1377529571100.001,"C35B1653927900EB7DF31CFB":1377529580845,"60C8750D56E6E35FBBFF33FE":1377529583196,"57510F56160D4FCF3825348E":1377529583031.001,"62A983FC1CBB24385E768151":1377529593055,"9A4836DC552BC0FA0B784996":1377529592900,"8EC8DA4440FDD113B2AC2BEB":1377529601871.001,"F4C3F0C152D899C8D33036BD":1377529602062,"1B0EB529F646C04E3DC6C215":1377529607717,"612AB2FD72006740D16FE38":1377529607022,"594085B9EF0A91DBFF3AC60D":1377529617390,"F466C1B64822BB2ABB5BED65":1377529616978.001,"F70912B9D907ECAFB1884E57":1377529622445,"5FD3AAE35A637B8007947E6":1377529622382,"1607A213706D808376C2B8F4":1377529646410,"41CC5C5D7B6FFE94D1A61ECE":1377529644975,"CAF675B30593E73AF385D49":1377529473702,"F1B23588ABA261EF00D68B":1377529478835,"EAEF31FF774410BFA334F2BF":1377529478836,"BFB4137F65390431FB5CDB4D":1377529489176,"D6B704F296C33EDD1A9D9B6F":1377529489142.001,"FFB2BE1EA4C2A39A505E5D34":1377529496738,"E9C610BD2C6B54395C31A19":1377529508948,"F6314A6B5E89F99AA005460A":1377529528764,"5E87441974A8BF8F17416811":1377529544927,"C19F86ED990AEA1E55186A36":1377529544868,"A670633EA5E52C7D11BB778":1377529562539,"80296B27C80FE491A7FB941F":1377529568163,"DD5F31A64F9BF4BEEEEF0A3E":1377529568369,"07D10DBAAE3D66B3E38B5729":1377529585956,"282F811D6704A3C9CC0B7E12":1377529599663,"EDD6847864E122B54958BB11":1377529604804,"EAC8E5C1B06619C9C49AA50C":1377529604810,"BBB862A86727D1C49B91053":1377529619883,"0612E89EF44F9A38636797E1":1377529619555.001,"503CA54BB336455C0CC5C7C5":1377529626974,"9A0E4A54ABDFB514F1027756":1377529633207,"11A6FBCF6A563DC1904845E6":1377529639391,"2F17D246D230C6241DA1732D":1377529638596,"A78FA64993E7DAC6A68FB0CE":1377529658304,"270B5FE7E2EC614772EDCC38":1377529658117,"D655C013EBD4893438086A79":1377529664382,"A920E4ECAE9E60DBD4E5EAF5":1377529664212,"6173E6AEE61942DD55F5B691":1377529668167,"E462FB4B32CC208B2AFEAA75":1377529667387,"379B569A158E50760D90914":1377529671948,"4372C0A319D944CA36E34385":1377529671038,"E68972BE6256EF4B8E1CD67D":1377529677898,"3F87A6D2A71CB93E3C437054":1377529678121,"C0036F1C2C64DBBB585ED694":1377528262949,"83DEFEA74B9E5B8A281AD726":1377528262871,"AD51FCEE3B0F6EEC4EF28545":1377528268214,"4968F7DF370AA5A47FB897FD":1377528268158.001,"EF2B3968C81D37AFE3C39378":1377528270569,"4AEEDBA1C5155C53B12B81BB":1377528270511,"A771440C5E4DAF38CF55A04":1377528273278,"234901310157677F0C3307DD":1377528273211.001,"2A892CBBD51BDBBC2EDEDD72":1377528278670,"36520367ADB089F552872F9D":1377528278611.001,"4198F68D5B4CBE3B8443B912":1377528281475,"F2A017CBDD5E1AA90B3314F1":1377528281216,"FAABFC2CFC286B7F055C8D23":1377528286225.001,"32C9CAA785314925D86F9E64":1377528286288,"BA6BCF544434D7EA37ADE3EE":1377528288976,"4A428E362EB3086A838F87CD":1377528288779,"B5667F49CE0E17D45C38E9A7":1377528312369,"E4E041871112C95F5C6D5108":1377528319931,"0B3E25ABDBD2190D2B198FAF":1377528319052,"637918E54B28C267F0FB6699":1377528329549,"683DDB35CD57822752354572":1377528332312,"31BC4947A8166D8465EB6F":1377528331674,"EEE9A2B8F9F1709ED868087E":1377528334597,"73E4BD6762A8394DBC757B6C":1377528336993,"F9EC6BED7748E209A1384293":1377528336829,"B67088633E088CF56EFDC952":1377528344111,"B333C839CD0FB1C965AEC014":1377528344146,"644F6B04B98F7B83E1B65D4D":1377528346396,"E6445CAFB7BB5FDDCFFE9E22":1377528348747,"3790CDEB96F422B14A43768D":1377528348675.001,"92C205B4B9E26A9C01446982":1377529702585,"A1999CC755921F9FB3B2B873":1377529648659,"E4486BC8293CCF9E3C04449B":1377529655818,"0A8705BD71030D885E66BC53":1377529661958,"AB9669B8C4A4B20114C5B226":1377529675649,"99A720C640736ECDF40A1491":1377529686475,"FCFCDEAE400B25366FBBF474":1377529686893,"90856EE73418479F6FE30EC6":1377460830576,"390A46D204B080B7CA4B2B37":1377460861080,"E0FD0F01302DED2E7DE19CA3":1377460905775,"FF77771909220CF18A844622":1377460845987,"B70AC08295A6F79317B7BB94":1377460857172,"BAE769F62FDFB67B24F2201E":1377460860801,"354A0667C1C6925FA4E33C93":1377460919255,"964A5ADC856BCA822028BE79":1377460918900,"A3D7D5C978FC98C8E4E0BE86":1377460954844.001,"D8DA0081A55B9EDE59908956":1377460957684,"36BB6C9B7D3629BB170B132B":1377460996105,"F1436C62A536831CB62167BA":1377460995448,"F39D6C61DBB03DCE741C36A1":1377460998802,"E9B02FD61CA2FD4C088DBF28":1377461016915,"EB5A1D03CFB7D9C5E5211645":1377461023716,"3139E4FF1315F4E00EC3823":1377461023718,"5D0958C3083B8FB9A72610D9":1377461032037,"AF4081DF6ACB862CDEA8514F":1377461031971,"C58730DDEFF77E0FFCAF23D1":1377461041942,"5F28900920F0E43425782A94":1377461041943.001,"DDA71005C0AE5EE32FBB2E9":1377461061874,"E0BDE5AA52D71EAC2CFD161A":1377461071153,"3C20E612DE8889D95A4DDBC9":1377461070992,"9CFEFCD82089D5FADE1685DC":1377463127968,"D1B3FA47BE4E6FF648A9ECC5":1377463140024,"6B2AFECDEBDEF215230AC09":1377463140105,"95EE0E9B57371B26011E3722":1377463147180,"EEB5F05D9E85C53EDFD1CE05":1377463147183.001,"75C5487BA9053F8414EA3E3B":1377463151654,"19CFFE2100BB5AF2F587D883":1377463150863,"4B03967AAC5107F7FD642D4C":1377463155249.001,"9CFB06225C0D6DF7D8F04DC4":1377463157832,"8029685185873991E89BC337":1377463158116,"E3E80921B7826BCA7FAA5B":1377463161871,"66BEF3E8BF4DD96308C29AFD":1377463161157,"C42EFFE4B49B31BBB75C5DD7":1377463167124,"56EA0618FC285E5E5ACC7C18":1377463170021,"E418DB13CDCEB4E555473D81":1377463169461,"B8F78B4A97BF594455D1AB76":1377463174287,"6BAD6DF558198A36F8F86A13":1377463173538,"D58C0344E72AC5E94C532EC":1377463176915,"4353AAA485BD05F774DB1E77":1377463179203,"36D5FA61242952F85D8AF0DB":1377463179206,"B3289352A9BB6D3908ACAF7B":1377463181916,"E87CE15374450721476AB3B":1377463182808,"511FE73B50985FCE8836EDEE":1377463185485,"31387B634AF7BCBFC82B3BD7":1377463189473,"55E9818D71A81CCBBC53643D":1377463189476,"FB4C0415997EBC25520D7D7A":1377463192343,"8AE2E546679A0C647302CE25":1377463192262,"4A81FFFBBCE8FAEC98B64EE3":1377463196540,"EE1E18A68AE3B0CB39E4412A":1377463195778,"D337C21CBB815D577042262E":1377463200069,"2AAF219F9F12BC0FF36A6D53":1377463199481,"BF9E52F2CEACAD0AC627D018":1377463203481,"1805FB75A24CFC113D2FB89D":1377463202699,"7C8CFC87EFE41A4A669CB6CD":1377463206431,"882C30EE9BD3BB0883791A16":1377463207119,"9A43CA3DD0D6C3A421CF8C3F":1377463210500,"D20EF7E5E66D43D5526DA5FF":1377463209777.001,"E8CAC92C0210811EFC1022AF":1377463213233,"6651A1DBE886091C363D4F95":1377463223005,"0A7B3EAD32107C5811C4C78D":1377463239858,"84A19314CC5C1776B73F3677":1377463239005.001,"BB6FFBED4DB5AFAAF83F0E88":1377463245211.001,"163B4368D4E726A75048F8B9":1377463274518,"CB1AFD09FE27F677D21D3171":1377463287093,"E77B22616536A9C7E8F22E38":1377463286636,"3254D91FBC63E64AF97CC6A":1377463304514,"66B271532F80DB16B428A00D":1377463304516,"A262EC6DF6C322C22C06A6F":1377463307131,"7963D440A418851D5F1CCDA":1377463307133.001,"EE58DF822CBF1165A1137082":1377463320448,"3913F33CB8E5E72D5D66069":1377463320364,"C8790D78F16829DF398B641":1377463343787,"B44D3E91450005376AAA815":1377463381354,"E69167477D54ED1812AA62C":1377463418366,"FB2764FDA4E37F839471D9CC":1377463420539,"43D19F081B5A71D1542ABC89":1377463423017,"644F304D40718152A3F6CE15":1377463436510,"A72814A776866DD8477C245":1377463545145,"66FD3C5CF368005F6374E552":1377463560163,"2C60B70C0F32312E41422AEB":1377463560165.001,"853B60E7200E96C89DB38EB2":1377463573820,"83B333DC85598D8693110937":1377463573722.001,"883AA8E82223809DD06C2778":1377463576244,"EF12B8C5F06B6F1EEFCD9E4":1377463576092.001,"A498D464664014DF12EB4AF7":1377463600192,"3F072763257B4A193E7DD2AD":1377463600194.001,"4E7A23CCD804F5F15D3DB059":1377463622734,"273E21CABA87B54F4FDF849":1377463633622,"B7492971CB05360657EFA80B":1377463633628,"8F6BE3A9F91C7AEB483ADACF":1377463672257,"7F9BFC723CB942167ADBC139":1377463671444,"2EC6DBA9037253FC58A441F6":1377463682713,"327F01661FFD9B19F189F6":1377463682739,"2FC5A872D2C1A58EEB29C229":1377463697870,"7764AC1A2455E4390841CDF":1377463697874,"1CAAC7F56EECDC7C31927359":1377463717174,"0C076F92461823F3FA75ED9B":1377463717176.001,"07B503CE4269A51F72B9D56":1377463732494,"CC89FF521BDB157D8A306817":1377463732378.001,"8FB2A163BAAED78D9427B7F9":1377528306225,"110A64FD3259133D26DF9117":1377528306659,"29D5EF5545B509ACFD2E3659":1377528351272,"98CE682AE6AD1BFCD3557D53":1377528351275,"83E716D48D00995F061D5126":1377528353498,"CAB6FD430D9FA9C56F18DC9":1377528353532,"80A932FDDBFBFADA84D8602D":1377528356107,"901E87C2CE2060B87A545C27":1377528355772,"A625BF2E9C4436339C698E8F":1377528360578,"71656EE8C07BA0446B3AFA74":1377528363221,"2FBB6FE110C30091B7E7E67B":1377528362810.001,"F682246B894CCC47971D0E9":1377528368580.001,"2BDE3242E7383ECF5E9B335B":1377528379600,"7CFAC7DB676CCE662AC26E":1377528379566,"C539A94AE98C308D286E7D6E":1377528545366.003,"F11EB5B6355BCA4DF36C8BFB":1377529415475.001,"948B6AA1D77AE01B55E51739":1377529426994,"8C971B16529438C39CB06B5C":1377529431410,"BA0AD50FCBC8D7EB22A7F793":1377529430336,"B4E3090F7972DE8194A41805":1377529434496,"76305F5C19A64E63AD50E84B":1377529433616,"41349CE820717D277E777967":1377529439115,"CEAF009E27483ECD61755AA2":1377529441647,"3D231C2E36267DE4B4603A9D":1377529441401,"55F2F4A5546E951A33F64976":1377529452707,"6126F99C27E48A6CE5BC131A":1377529452712,"87CB98E24F80C4EEF69D3BDC":1377529458338,"A037341ED2A1062CE8DC6DA7":1377529458101,"E37D9CB5BBA2D78B5ABE2834":1377529460625,"F16EEFD12F78F8322E91077B":1377529468517,"7E1C85435E933AD7D0084EB":1377529468268.001,"E8F17658D107EB2616DAD558":1377529481711,"70E7196F7B364EAB1DE20AB":1377529481120,"99533EB3BD16568E10DD27B7":1377529483986,"CEEA0CDAD2ED054C14D31FBB":1377529491707,"83337FFD750EAFEC7A8CF2D":1377529498979,"E6FB76EA78766265F40DF6B6":1377529506055,"B13B640D4E951C4C4694AF82":1377529505986,"BF1E6AC9A0C0651FF60ECA0E":1377529511205,"C559E62E23C99575E4973287":1377529516919,"15BF75790B0BA356C5527C7":1377529516484,"80B2A9C8C304BCC3528E5FDB":1377529520645,"234707344FCB6A668E78B435":1377529519651,"C33CCA33EE72A3FED9AC996":1377529526111,"EB352E8F5A837229DDEEA963":1377529525955,"AD8A915B3DF08CC8DF19B421":1377529533455,"329E439DE54B98FDD8D83E1E":1377529535671,"736E073CFEA22B03BDE4849E":1377529538083,"D2B3254672DC906B2AE4E504":1377529537981.001,"E811D4AE33E54CB90268B7A6":1377529550528,"CA4552EDDDB38B1EA150B9FB":1377529557425,"27BDD304017AEBEEF364F78C":1377529562156,"762959B8EF86029FE1A6BE08":1377529576216,"D4CF5BA933498EA97DF10F3A":1377529578392,"4576D334ED9F3CAF8B6F0A9":1377529588347,"B52A4945EC98D7758206A5F":1377529590740,"C92EA6640DA17B0544CF7ECF":1377529590490,"8C618DF92ACCF2E7044ABCBB":1377529595551,"915FB569DD5886A19D081279":1377529595553,"9259781C54F9E08D422D11B":1377529629296,"B2FE364CD2A7880F291D64FC":1377529629446,"C0ED786BA590DF6955B151E4":1377529632364,"15CB7833A15C1BB72244EDC2":1377529635656,"CF38208343EEDF8B5FBD5674":1377529635540,"46161EBD7E0A6AE86180F2B3":1377529641917.001,"42CBDBD3771DA2733B54E912":1377529641920,"41BFA918AE8D4A1CFA9F04DF":1377529651852,"0FCF73CBD95F2F916BA613CB":1377529651944,"A8EC7E4625F501F9666B265C":1377529681785,"DB0E050D1B2B802D63880969":1377529680894.001,"DF3CA7B674B26AE2F319B967":1377529683989,"DA8056C5BB204DE8ADE9251A":1377529684139,"2D2ECAE3DE5AF7CB83E63E4":1377529689760,"D783D7F605F33473C4A6ACFE":1377529689595,"335631F2ACF7EFCC7536FF0D":1377529693535,"2FFF6B6509506C4D0068D41":1377529692915.001,"E9FFC69260F487AA066A5F2":1377529697100,"D54BA1B1F8CD19F42EDE2C":1377463441903,"7C33AC74C65CC91D9295CA13":1377463447244,"4ECE83170FFF6D562C283A04":1377463457991,"B1FE954504DCB57F132AED16":1377463482226,"02EB26DFA0977F85CFF8FBAE":1377463484983,"8C5703F957B785D205D305D":1377463487490,"308B189C11A0D81B50B2050F":1377463515371,"A1962A3142B09CC919C5DA58":1377463520639,"AA7A15FFF37A80FF3F6525":1377463551055,"7C865AE28352CB582303B2E":1377463625158,"08D665DFD47341564DD149D7":1377463630746,"BD7B961F21FBC4DBCCB8AF":1377463636446,"3ED7072F73BC751788613A7C":1377463650590,"B692F35BDC01C2ED0473202D":1377463657174,"FF909CBD3FA7D004E065EA0F":1377463674576,"2CE7F8FE664577618BF90B09":1377463677512,"731214D47C5866CBC4D2C91D":1377463679862,"7DEFADD1DF4FF534C4182E3":1377463705989,"B53DC685DA0FFB923B387EDE":1377463726552,"F7518495F4454F170092471F":1377463749650,"1184B36D6B15317454B52DCB":1377526754907,"9AB1542840050A8BDD963AB1":1377528257577,"1AED8C4B7DC767E9310004":1377529745687.001,"4DCA29EB2756C57F6C36D0F1":1377529705557,"017F6FD9C787069DAAF92997":1377463381393,"915824CEDC5DF35AB8F28CE1":1377463420541.001,"518CE46502C227C7BAB69D5B":1377463423019.001,"92F443AAC0CA54FA57D6A8EA":1377463436357,"69BC9796429C2855AC26A82B":1377463441680,"E2543B096B0A5494248A761B":1377463447213,"EFA26D6BF4DC15B71ED0F9E2":1377463457962,"A2E50467325AC3FD3786B541":1377463482228,"07EC6A811FA8CCE2F84388E1":1377463484564,"8578B23F637E271F42962043":1377463487393,"5D23D0CC3EC05B47BA4CC95":1377463515373.001,"B4F4426F1132627DE1F622F3":1377463520642,"0AF52D8FAE99A0D49D203CF6":1377463549809.001,"016F188E7E8A5BD569EEC837":1377463625026.001,"CDD2C224B3F612A830124D5":1377463630738,"4977162321F12454BC239F3F":1377463635886,"C641CC5D81C9EF6D683C626":1377463657072,"912CA23DCADD8559CCEFB8EB":1377463676916,"343DC6E1B7756FA184E64939":1377463679688,"A1976D79A9E99E4C4244B321":1377534472400,"CE404A7D644E04889165A1B3":1377532903767,"4A118A0C87052B9C7FF394F6":1377529439040.001,"74947C67B5EABD2CCD4B2D":1377529449706,"FBBC6BF83220D73A83B647CC":1377529449708.001,"3CA2FE8887FE5F2666762DF6":1377529470840,"0790F7C7A2C3AA8C7EB69B17":1377529470842.001,"B1254891673F00230C5B033":1377529498906,"BF2EC155EB2DD7FC3639836B":1377529523025,"E9B84885F7B07495669365EB":1377529522923,"DB9A16C7FFBE37A3E0B2BB03":1377529535668,"5087E288E836B7FC293D2DF":1377529542650,"9C826353344E4F297B80080D":1377529542576.001,"95AFB29A1594797968FDFF2C":1377529555030,"7180ED911765D06ACA627D63":1377529555032.001,"C010A9919D1E47B1961A8F0C":1377529598817,"2C6F055CC9F768317810EBA":1377529610496,"37CE7BE353C0D49B3C8FE975":1377529613925,"01A2ACB4F6A84556AD8515CC":1377529614805,"B8A2A1FC83E2D263B981FA15":1377529661116,"ACCFB1E5DA78AB6BF0E6A33D":1377529674829,"4A2B7068C79EF03C98F8318":1377463417836,"492D3939306CC69413ACF88":1377463674579.001,"ECA57EE89E03DA741CE7C545":1377463650533,"A226C2D3A7B0867A30C5B5F1":1377463705992,"C9F62EC34C71C1713A77AE08":1377463726554.001,"6AACC854CD7EF6AD8BE441A7":1377463748143,"B37756DD0D9093A3C8B24AC":1377529576007.001,"11CBED24FFA2B02D6EC16BEB":1377529610453,"6568BCDD385A2BBDD9D55B9":1377530425370,"E50C7DD51E70389EBACB5FC9":1377529762333.001,"AAAD840C76A8D18B598D644B":1377530512618.001,"EA8408F7541571C8B685B84B":1377530452830,"189720E63B3100B6354BBD35":1377530449575,"C1BAAEAA8821682DF49AC8E2":1377530988299,"CA4F7F76AA119083AA519987":1377530948397,"10DD1D3F58E4CBF855DE9D52":1377531055437.001,"E210ED62E14195F1B5EA13E":1377530995534,"4ED316BE241DC0990BAC87E4":1377531461483.001,"069020F5760158FC561153B":1377531401611,"08D15EA7FCF948A443D324C3":1377531618957.001,"E543510F5B3ACC18950EC7AC":1377531559066,"530BA3DA2EA75377AA604008":1377532357984,"D3679677C150AF0825F73B0E":1377532356994,"8D53DA9F539CA133C7AC1CEF":1377532364162,"7DF644DBF210065A0E45FDA7":1377532363237,"4903C777DCE629F9ADD42F71":1377532371113,"3792C12C2F699172152E76":1377532370328,"D52323194510A65A8AD49B05":1377532377619,"237242E4FD5FE2DC4AA9D612":1377532376865,"EC5C54BCD3C19B9AFDA761F6":1377532384420,"8F1BC9C6832121AD48DFEDAD":1377532383487,"8E9F226BDF40428D421ADB8E":1377532390884,"E6E176E3C9A066C5E074BEA":1377532390056.001,"1628E50372C6CB541B5EFA55":1377532395803,"A8A5834A265E276AB8B0C7":1377532395067,"7BD5A4A89E9768B52FAF56EA":1377532401125,"DE8CA5253ED0591AF69564B8":1377532400655,"3A4E13598428226985E12449":1377532409939,"9093F1A9916CE6E3C8134753":1377532409013,"770411BED005B15A608E943B":1377532416715,"F7FE580AB87FAB9D33D1AD43":1377532415921,"B9C7B698C7692931399DC033":1377532424807,"8B6A0876C93BC4D2747A9EE8":1377532424328,"4FE903792E584126D81786DA":1377532431210,"6AF41C5F7C4556D40B4E9943":1377532430234.001,"357E21EED9F43C8B6CB1205B":1377532438164,"01A51FAE752A5CEDD18B0748":1377532437357,"8EF6A8436E594D25310EEEFD":1377532443936,"F678A563F924CC6BE75E252F":1377532442948,"744C48E2096D8AD105C0CCF":1377532450465,"E1A15CBE90791D897D02E182":1377532449625,"41DBA50E127F1FA53A90D87":1377532455707,"FDFAF2501124E8B6541EFB3":1377532454939,"F233EC8F49AC4C47960BDA76":1377532463320,"A593A56DAEA200D69833B931":1377532462487,"929D800315C520C93565CAA7":1377532468380,"91E46932EE99EF9E45D66B59":1377532467338,"89104D17FAED20464D0BAC4C":1377532474182,"387729AFECD1E9F88506BA8A":1377532473360,"DB8EAB0E2AD73AE5673F1036":1377532481387,"5824D3AD5044D7694208D945":1377532480376.001,"7B1AE2C79CA26707A25431CC":1377532496960,"43F8C2B1D025A61692CEB81":1377532494893,"79F18C1E41ECBFD4C1AD7CFE":1377532500141,"A4452C491D5348A78AF741C9":1377532499125,"3EB8BC43F06D6EBFF358BE55":1377532506345,"B44F278AC9419EDE2C26DF5C":1377532505340,"5A4845BBF36B3533B2F6694":1377532513721,"502E3591F7D003D8C87B3A04":1377532512876,"910308CBF8F0A5CC3986A9BC":1377532519229,"05A997883DF306870985F2DA":1377532518271,"C61F0BA719BEFD5AD41B907D":1377532525881,"3A7075E4039CE7B4272AB26":1377532524905,"4FEF73ED749B88581A0A1197":1377532535090,"358D73D8A86779D32AAC44CA":1377532534279,"371F49C596BF348BEC15637":1377532541011,"66500E47B3F717A73C494FA7":1377532540079.001,"58A349C437EC27E9D52ABC48":1377532549124,"E45F900BCDAF6EB8C8A11ED3":1377532548161,"0EF71DF99C705E6F3A04E089":1377532556744,"5B29819F56ABE9FCE6F8433":1377532555877,"1FDF76D4B7267AF1FB629BC7":1377532562415,"D588B5DE8607B4087B5CF5AB":1377532561423,"6FBB31B614A2427585505222":1377532569635,"F1B0756F817D88DB84EE5C46":1377532568749,"BD86D723DC84AA5245A3C8AF":1377532577125,"18563BCDEA2F2F4CBE33417":1377532576195,"3FC8F53E0CA164C2B1BC32D":1377532583934,"704E8E23D7E3624B6441439":1377532582983,"9C0B36A52FDCEC0F7BBB60FA":1377532591120,"6882E37E6612ED972EBEB6F4":1377532590195,"5EF9AE573387B45571094D4F":1377532595576,"9304CB21700B8C255E7DD9A8":1377532594609.001,"A4C4146B4D3E537E58C5D681":1377532603054,"33331E1C5CB4927C162F9227":1377532602105.001,"535F071CB34D5750C4B53D3":1377532609923,"E3211EB191F539FC182F3DC6":1377532608973,"F6C71C48EDC35B9BA505FED6":1377532617987,"64D09973303A039DFB2DFDDA":1377532617128,"8D8A939E848B42655B4B02CD":1377532623047,"8517B76FC7925235F2ABAF36":1377532622244,"83BC5FC20A48320CBAA57CF":1377532628484,"049222DF73884C263FCDEF42":1377532627646.001,"4B8AAF96D239D73AEF5BC1A2":1377532633908,"C880588C48CAF6725CE9829A":1377532633057,"92A8AC1EE1976809A696DCC8":1377532639950,"540C10EC9E17493D3E8C07AB":1377532639082.001,"6D89646147CE402D359A1B15":1377532644729,"9C78EBB66DF9E521F387074B":1377532643857,"2219C9D6226968A5FCC3096E":1377532636852,"A791950B45E54323CFF9CD6E":1377532636218.001,"7955EC0678B79992665B99D1":1377532651093,"FF286174DB534F599AEE6E6":1377532650121,"827C222FD53A6239FDFB2CA9":1377532658430,"E97DA0ED74A896B5AF403B04":1377532657898,"BC949EC42D53FCDB395C2AA":1377532663980,"EB178656E6CCA7168F07AB99":1377532663062,"7CFACEDD91599D11A048CC9":1377532669484,"F0BD7775C7F0026193DDD56":1377532668648,"AC432CACBBCAA5AA84595007":1377532675935,"0C2E7C389C59C43781F70C87":1377532675063,"7187AACF8387391A345BA3D":1377532682490,"265074A46030DEE1B27F44D":1377532681565,"CDBFCA17CB2B9D1967D5690C":1377532688211,"2DD34A77027C33258447565":1377532687431,"22040C75D93F33F996719476":1377532699260,"DEDE4E06508C743533822DF5":1377532698390.001,"8BD88AA1AEADF8D49C03F90D":1377532705933,"02401663BA1746FE7C5DAEE9":1377532704990,"6078213E0BFB2CFCFAA2461C":1377532710923,"6470C72B60082415E8484CF6":1377532709970,"D8A72CAA79C5B9028D85C752":1377532695379,"EB2DC035CCC8E126F0C178B4":1377532715952,"CE28B8A182C22A053CDCF433":1377532714984,"29B8A332A853166B228C19D7":1377532721767,"E474022364FE8309CDF734":1377532720832,"DCF9C8FFB3E7ECED112A0248":1377532694525,"C743139D59F86C2D8F29F985":1377532726761,"4EA508ACE8AE1B4D56CA8FAE":1377532725789,"833F8B4DD43862ED9185CDAF":1377532731708,"AFBAA8AF219E4B99A25A70E8":1377532730717,"70CED7CDAD7F6F599594B53D":1377532738777,"EC8D40BA3E2776A122D43872":1377532737818,"137BD983BE5C103EF4C16006":1377532745003,"83ACF7EE03346AE3CD9ACAC2":1377532744031,"C98E155322B14B86D3AB8A17":1377532753121,"3805C63E6CD9351FBFEFC57":1377532752249.001,"A2B13944D561C7857BABCE0F":1377532758932,"FCEAA4B47C8B95C27CCF297A":1377532757957,"A052EFA26E9B583843AC7625":1377532767592,"1355FF251119DCEC277EECB9":1377532766735.001,"165729817255C579BD4AD259":1377532773326,"1AA021CC87B6CB26D63E33":1377532772353,"CE1652C524A1A236D97C3AF1":1377532781810,"F281902502D618A1EC69D73F":1377532781000.001,"580923D89243B01CF854B3CE":1377532786256,"CC9CC2D6E54A26FF1BCF7865":1377532785310,"49772892AD30256D89DA88CC":1377532793780,"79E894E339D12A2B1934F3BA":1377532792912,"047E367CA6D1A893E927DF56":1377532799725,"1A60F544862AEA919834879F":1377532798807,"BCDB1D6673B6F23F5EA34086":1377532806235,"BB7F7B822C11B4ECFD1E5E92":1377532805371,"0FC7A742E532C633B2F91944":1377532813211,"C9208CB29F0EC75DD2B7C068":1377532812289,"CC1355B9165E12E4479A0BC5":1377532822639,"9D99EE75E3CE24A62182809":1377532821869.001,"0344CAC4BAB69A42962E0F3F":1377532789618.001,"6E10455B280508662EABD4DB":1377532790607,"EE53764E4C7E7123A8D09A17":1377532828410,"2A4C075B027F8B3F8477D932":1377532827491,"BEC03D8F0C925F7640F8166E":1377532834899,"17A2AD129B474D23C62034FC":1377532833921,"45B9780DB1E2373460B3A80C":1377532840778,"7623785EB2A1017420CE9C7A":1377532839763,"A32C4A08BFE3BE93815E840E":1377532851604,"A86FAD0AB05F6398B846F2C":1377532850696,"BD964CC4D0AD4328CEF93EEA":1377532861716,"1F6853DCC8C36CD3BD318A0D":1377532860818.001,"1911FCE81DFD635923CC15F6":1377532870625,"32D4E2253BFFE5C55F1B452A":1377532869707.001,"DC3083DB448C52EEBEC449E5":1377532487404,"8093C25F5CB0BB7E31F00804":1377532490016,"E6557B59B00CD4CA5DB5F4A3":1377532492673,"7107D68320BC50AD3FAE97C2":1377532879609,"5A37B02EE85FDC93AC4F6FC7":1377532878703.001,"AC99A397B8B9E1E15C9F35AB":1377532888287,"A7D6CE747A12AFF49EDD1F8A":1377532887335,"19B10299B5789129B554637D":1377532875641,"A7B8C8D76F409175400EF67":1377532895373,"F0DFD2AE989C483639AB88AF":1377532894418,"8F8111950F72AC7F46FB5E1C":1377532900702,"5841D6B5D465F2CE7B139F2":1377532899715,"7405DBD4DC2DE87269B64B":1377532911882,"3C9F45F7E9C609245205C321":1377532911011,"5116297C87FC426CA7DEB9CD":1377532922484,"D30B2A8D7926A4724DCC9F":1377532921554.001,"F71D22761DC8A425BE4F369D":1377532937273,"ECA3B717FA9B0B58AF6D2A46":1377532936456,"B646DBAFE03F5594C0034D6C":1377532907850,"158208A76AC5D26A9644325B":1377532945118,"DAC9CE044AC4085B540DE53B":1377532944306,"3D0BF5B2B31323CEBEE903E":1377532954780,"5C3249E77581F53702E63574":1377532953901,"5A4D7DA34A47F09355DD0744":1377532876514,"F249ABAA2F57CBF3E9756F4C":1377532963217,"B8A0751E516D83FCC169646D":1377532962963.001,"1BAA9962A76158064BB950FC":1377532984868,"D14369033AAEF81ED04D03A5":1377532983944.001,"2D4A318AAC417F7EC66AEABA":1377532989684,"AAFB124F11C1D2B670CCD6FA":1377532988810,"C3D223F87AAB59ED0841867F":1377532998164,"37FEF0EB1CCC4C41B6C55E9":1377532997357,"59932A47D450E94E45C9289":1377533005327,"7FA25EB9DEFD3456D6ECA89A":1377533004402,"526C2F44F46D56DA08875FA":1377533014759,"8B649068F2467D353252F3FE":1377533013905,"BD6D344C200C37BD424C923A":1377533026955,"B45AF93BDE973BAF2D981344":1377533025962,"64082687A550235C51B0D677":1377533031740,"7C3EA710A6DD23C099258D9":1377533030769,"58E93661CF1223E6853DF802":1377533040704,"5C91D9658F6F4471693938A":1377533039732,"C3FB97B770C1FEFA131781EA":1377533051937,"F7DD54B5575F4F510E09D036":1377533051075.001,"A612BB6B4087C75C0E2D0A5B":1377533059300,"0412737AB6A202E1A2877F6D":1377533058589.001,"C0CD1E742E12C133730A6B67":1377533067226,"B25C347816B3E58FD37F7E1":1377533068296,"C313B805AAC25CEC61C3C49A":1377532908792,"172C06E46DEF5F56E0E4BE29":1377533011600,"FAEA04986BB56983EB093952":1377533010677,"63557CFD2C4546887617B44A":1377533064173,"725B0FB456A45B2F6BBB8B71":1377533065025,"BCC560E2E901703DCF7C2B91":1377533076957,"9AF891E3162266E37F2E114C":1377533075900,"B93103251F1DCC95562D0317":1377533081187,"EABBE7D79721C8EDAF0997E2":1377533080278.001,"5C8B0184A41385F28D18FD6C":1377533090816,"196534A6823A870A18BFE902":1377533089907,"E3BEE90A2EC659AFFA8E4FED":1377533087674,"A5075344AF004B47C9997B":1377533086830.001,"B7A023D51A8C5756BD076A97":1377533100028,"9B26351943D16F47F3DC162D":1377533098979,"CEBC4F7D0751BA737C849E36":1377533111238,"C7C3C939F3138D8624765544":1377533110081,"6BCDB015D850605FE3C53E65":1377533120209,"DE335DCA7C9C1F260DFFE3B2":1377533119014.001,"7FC9F023821ECD89D7F01C73":1377533127325,"DE3F22CD1F69D27B5006392":1377533126603.001,"3CF440598623975619441692":1377533132142,"BE07B749C64FE30070E0DA":1377533131179,"4A8A3711B5D07CFB289A1203":1377533141035,"86C435A10F9D3D4CB3172686":1377533139953.001,"A8E76847226B981DB11ACA9D":1377533146338,"C89B644E17E5C9FB04691C6D":1377533145387,"F32A35942F112F03A0E23A8E":1377533154852,"C5AFC6F7B97AB48B8CFA2D3F":1377533153894,"F9A4416EE80CEDB801DCC146":1377533158205,"B1AE2BCF039AE89F330F1607":1377533157058.001,"25B613BDD5C2D40188474F8B":1377533169539,"F1FDC79AE8A48F23615471D9":1377533168714.001,"19D0DABB7B256743DD14C5DE":1377533136696,"CFDEC336E19D8E1D4BEBA3E9":1377533137693,"3B8DC27662F7334E93946A3":1377533174662,"A135A9DE41BB33E658966D42":1377533173642,"8393D06DD98CC772D09A2355":1377533184025,"8A90362AADD1D777EB13EE5D":1377533182818,"FC4F1B2119A4D4EFC70E1D89":1377533166094,"6B3D2FCCE68BB1F99322324B":1377533188364,"BED0D942AC0420A528972E3B":1377533187390,"2B8FB2432169E057C2187C58":1377532866536,"78A768C972DF692AA08B617":1377532867410,"C508F7D5E27E9566ABECF2A3":1377532974840,"6AB536654054B7158FC28E8":1377533198246,"7F3A7DE15CEEC1AB69356E5A":1377533196972,"CC68D74B9979775398B69A7D":1377533202876,"612994AF0E72DED2D910FC1B":1377533201877,"B73726A2234CA36129F714E2":1377533212963,"5F9830F68BB1E4C88DE215C":1377533211625,"E8EA405AC06B3128640AD5E9":1377533226961,"2689949ADEAC0BD5E1039A16":1377533225673.001,"89C841342EBEFB4C8E69F6F4":1377533164959,"F7983EA99FC492ABC2511F96":1377533234383,"608D1F0E17DBEE8F414E7E45":1377533233486,"5049907FDAFA7F814BE41186":1377533244215,"6BB117E36101EA189F09D151":1377533243085,"065EFB476A235339C34802":1377533253717,"51536027EADEE8457BBC52BF":1377533252430,"7B90EF5A4447347B2AFB7D77":1377533260723,"7C3DEFB817A7A173FEDA273":1377533259758,"F25743D96D3410AFA2537E6":1377533267584,"817C3AD1F2594F41D4FE16F1":1377533266740,"8BCB529B9D8F18C4F77FF2E3":1377533271183,"CB73412D03AB305EC226DB52":1377533269827,"38FD8E4113C775C80CD8D712":1377533281247,"A7ACE10754B2ECFD6A61FA8":1377533279851,"C65B664E5092B4FFEAC94A67":1377533295164,"A0915224E76EBED6ED02DC5":1377533294410,"8D06277F9C6E53C2AAB67D28":1377533124043,"CE8C258B14FB99743AF245C1":1377533239770.001,"C47370129A242AE6D30AB78E":1377533240727,"67044EF7E92ECD9FA307B2C2":1377533305324,"6C0141754AB34DD365DF48AC":1377533303898,"E899A6C359313E212DE28581":1377533314844,"298174F55826EFB2F7ADCDE1":1377533313378,"70B2B8D9EF372C78326C0998":1377533335332,"4D555468947FF26C88ECD":1377533342581,"AF78059F439E6AAA9D810F34":1377533341441.001,"9DDC1E512A79E7959D544986":1377533350365,"62D71E4AD0F999ED635EAF9A":1377533349524,"90298329400779B2D47A93FE":1377533360385,"F7A3E008E4669ADE36035B3A":1377533358891,"9B6D648BB24C1B9E2A7134BA":1377532968902,"B3F817523BA91E5F870D82E":1377533371833,"FF7C79181BABD68AE95F3F2":1377533370345,"E0E19662E7DBF13ACE4EA59F":1377533379565,"F4FB39FC7E8F5D946BF66EB8":1377533378695,"1A9FAF5759F7478A17A49A83":1377533115911,"6FD606A47B2B7BE8A15995E7":1377533391601,"AFC80D8AC5F3B9F500F3DD2":1377533390101.001,"9368DA5AB733C9FCBB846F6E":1377533329933,"BB7F19C7B7E2A8157CC7189":1377533329476.001,"58F98F63B88C379FA76AC8E5":1377533332164,"7B7F886EEA323EA1EB887119":1377533334470,"4033BADD7D09A708ED048797":1377533383643.001,"B795920E0205A8D86043CAC7":1377533384538,"4988574D31F1B629DDFE4044":1377533400938,"CB54E6CECC0AD1BBAFE2A09":1377533400305,"633EB486C0F7040D6B801F2A":1377533406244,"FBC516D21F3F4DB6D1C9B8D4":1377533405413,"E24D7426ACA7E58410506CDD":1377533387926,"CA2C54032B3F46BE2C42376C":1377533386719,"D3936F417F28618B4751F8FA":1377533416710,"71FF11760C0F0DA4C8A10638":1377533415165,"6D98EF35A82F92A50825904E":1377533423409,"408B62B71181B641810DD08C":1377533422528,"6AA9376C064CC0DC3B531D99":1377533427174,"AB13A08C18FB2A1EFC6F80DE":1377533425582,"E387DC23A25CC4BC398A6D4A":1377533451268,"2EB676064EDAE202EE1B314B":1377533450350.001,"113101DFA1B329A7CC4C61":1377533461899,"9F45C8D9191840319236314B":1377533460319,"FE2AE06568F1E41859CDCC6D":1377533431968,"AD187D118FC3CF4A79DB47CD":1377533431875,"404CA5494BB57FC1F0396F4B":1377533472310,"BEA52608DA84FC2AB97E2AE2":1377533470680,"93E0FAD2D599EEAEA383CAA6":1377533485230,"053384BAAA51164C4B9D[["4623E53E52C18D59F167A6B8",{"type":"address","node":"322F34C3A95D807CA8ED58D4","host":"127.0.0.1"}],1377534668775,"DEEAF9CC09EE72931B5BCEE5"]

Ability to forget history?

Hi All,

After mucking around with a few different streaming implementations, I've decided to use a CRDT based (and thus scuttlebutt) as a way of implementing a chat room. The project is definitely a work in progress, with modules chat and iceman each doing part of the work.

Using CRDT documents, with the sequence abstraction for room messages and sets for room users works really, really well. The only downside is that when users are removed from the room their history records are still communicated when new clients come on board. Over time I can see this (and the message backlog) history taking a while to get in sync.

As such, I did something a little radical and removed the history records manually:

https://github.com/DamonOehlman/iceman/commit/723e43eade1a8dfe0478ae8437046b7b0e89afcf#L2R40

I'm wondering whether this is acceptable practice, or there is a better way to deal with this when using scuttlebutt / crdt.

Cheers,
Damon.

There is no `sync` event on SB or Model?

in the chapter Persistence of readme.markdown, the example is following:

var m = new Model()

//stream TO disk.
m.on('sync', function () {
  m.createReadStream().pipe(fs.createWriteStream(file))
})

I've not found sync event neither in 'index.js' nor 'model.js'

Data sync issue

I've following network setup

screen shot 2018-01-24 at 3 57 18 pm

1. If i update model A & E at same time than only changes of model A are propagated in network
check following image

screen shot 2018-01-24 at 4 01 16 pm

2. If u update model E after few seconds than the changes are propagated in network; check following image.

screen shot 2018-01-24 at 4 03 41 pm

is this normal behaviour or a bug?

Security

I'm currently planning on adding a 5th field, signature, in order to implement a security model.

Ideas: from best to worst.

  1. Each node will have a private key and use it to sign each update it creates.
    Public keys will be replicated between the nodes (& each source will sign it's public key)

This will make it easy for every node to validate an update from any other node.
(note that only node's that will be creating updates need to replicate their public key)

  1. An alternative could be to sign it with a secret shared between the client and the server,
    but then, all validation must be performed by the server.
    However, it will still be enough to prevent nodes from impersonating each other.

  2. Another approach would be to associate each connection with the user,
    and apply the permissions as changes came in... this is the most traditional approach,
    but completely ruins the ability to have a random network topology, because you can
    only validate an update as it's coming in the door...
    ... but once it's inside there is no way to know "who's crashed the party".

  3. for 'behind the firewall' use, have no security. -- not suitable for end-user applications, of course.

I'm expecting the sort of validation that will be needed will mostly be:
a given source is allowed to update a given key, or keys
or apply certain updates to certain keys..

the protocol may need to be extended to allow for reverts.
This should probably be a part of the model.

Most validation errors will probably be due to bugs. run the validation on the client and the server,
maybe just reinitializing the whole client model will be the simplest way to revert a validation error.

Normalize data protocol

Why have [key, value, source, timestamp] in scuttlebutt and [id(key), changes(value), timestamp, from(source] in crdt

Should I model my thing as source, timestamp or timestamp, source ?

  • crdt: [id, changes, ts, source]
  • scuttlebutt: [key, value, source, ts]
  • splice-stream: [spliceArgs, ts, source]
  • delta-stream: [changes, ts, source]

All four of these very similar libraries have different protocols. We should normalize that

Automatic network setup

Scuttlebutt is all about streams, but I have to setup the network in a way where everybody 'knows' everybody else ip/port combination. Should a network be fully connected, or connected just to N/2 + 1 nodes?

This seems a very common setup. Do you know if this is already implemented somewhere?

App Crashes When Open -MACOS

I am thinking it was because I had left my computer die last night m1 mac book.
I say that because It had stir issues with Apache servers in the past.

But the crash logs says Service exited due to SIGKILL | sent by mds[304] everytime I try to run the application [patchwork]

Building a singleton P2P network for syncing Scuttlebutts?

I am interested in building a singleton (e.g. Bitcoin, BitTorrent) P2P network that allows Scuttlebutts from different computers to be easily connected. This is in contrast to scuttlebot, which provides a very decentralized network that is explicitly designed not to be a singleton.

In order to build this network, a transport layer is necessary. BitTorrent seems like a good candidate for this because it's flexible, well-supported, already established, and takes care of some pesky details like NAT. If there's already something that does this, though, I would be happy to use that instead!

My idea is to build a BitTorrent extension that facilitates Scuttlebutt exchange between two nodes. bittorrent-protocol has an extension API that I believe could be used for this.

I am curious if anyone has ideas about better ways to implement this singleton P2P network

Syncing trees

Hello there,

are there any efforts to build a tree-like commutatively replicated data type?
Do you think this is feasible?

Will time stamp precision be an issue?

Currently the filter function is doing it's comparison based on ts, I was wondering if some of the connected clients has their system clock misconfigured (or intentionally tampered), will those incorrect ts break the comparison hence making the final results inconsistent across all clients?

I see swarm is using lamport timestamp to somehow guarantee the the ts is correct, does that help?

Thanks!

Documentation , dosnt include client side code for connecting to a tcp server

When i first i looked at readme , i couldnt find the peace of code for the clients, to connect to the the tcp server . I think it would be easier for developers , to see booth server and client example.
Client side example

var Model = require('scuttlebutt/model');
var net = require('net');

var m = new Model;
var s = m.createStream();

s.pipe(net.connect(8888, 'localhost')).pipe(s);

m.on('update', function cb (key) {
    // wait until we've gotten at least one count value from the network
    if (key !== 'count') return;
    m.removeListener('update', cb);

    setInterval(function () {
        m.set('count', Number(m.get('count')) + 1);
    }, 100);
});

m.on('update', function (key, value) {
    console.log(key + ' = ' + value);
});
// source http://documentup.com/substack/stream-handbook

Doesn't use source

Model only stores the most recent update per key. Doesn't store multiple updates per source nor does it do any kind of merging.

Handling object references

I'm looking to do something like this:

// on one machine
var syncedObjectStore = new SyncedObjectStore(duplexStream) 
var objA = new syncedObjectStore.Object()
var objB = new syncedObjectStore.Object()
var objC = new syncedObjectStore.Object()

objA.set('b',objB)
objB.set('c',objC)

// on another machine
var syncedObjectStore = new SyncedObjectStore(duplexStream)

// later we have a reference to these objects created remotely and
// we can see their references have been kept
atSomePointLater(function(objA,objB,objC){
  objB.get('c') === objC //=> true
})

Notice how object references are maintained. I think this would go a long way to making a distributed system feel like a single machine.

This might require automatically registering normal objects into the SyncedObjectStore

// on one machine
var objD = {greeting: 'hello!'}
objA.set('d',objD)
objB.set('d',objD)

// on another machine
objA.get('d') === objB.get('d')

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.