!function(e){if("object"==typeofexports)module.exports=e();elseif("function"==typeofdefine&&define.amd)define(e);else{varf;"undefined"!=typeofwindow?f=window:"undefined"!=typeofglobal?f=global:"undefined"!=typeofself&&(f=self),f.Minimart=e()}}(function(){vardefine,module,exports;returnfunctione(t,n,r){functions(o,u){if(!n[o]){if(!t[o]){vara=typeofrequire=="function"&&require;if(!u&&a)returna(o,!0);if(i)returni(o,!0);thrownewError("Cannot find module '"+o+"'")}varf=n[o]={exports:{}};t[o][0].call(f.exports,function(e){varn=t[o][1][e];returns(n?n:e)},f,f.exports,e,t,n,r)}returnn[o].exports}vari=typeofrequire=="function"&&require;for(varo=0;o<r.length;o++)s(r[o]);returns}({1:[function(_dereq_,module,exports){varReflect=_dereq_("./reflect.js");varMinimart=_dereq_("./minimart.js");varWorld=Minimart.World;varRoute=Minimart.Route;Actor._chunks=null;functionActor(ctor){varoldChunks=Actor._chunks;try{Actor._chunks=[];varbehavior=newctor;returnfinalizeActor(behavior,Actor._chunks)}catch(e){Actor._chunks=oldChunks;throwe}}functioncheckChunks(type){if(!Actor._chunks){thrownewError("Call to Actor."+type+" outside of Actor constructor")}}functionextractChunk(type,defaultOptions,args){varrawProjectionFn=args[0];varoptions=null;varhandler=null;if(typeofrawProjectionFn!=="function"){thrownewError("Actor."+type+" expects a function producing a pattern as first argument")}for(vari=1;i<args.length;i++){if(typeofargs[i]==="function"){if(handler!==null){thrownewError("Too many handler functions in Actor."+type)}handler=args[i]}elseif(typeofargs[i]==="object"){if(options!==null){thrownewError("Too many options arguments in Actor."+type)}options=args[i]}else{thrownewError("Unrecognised argument in Actor."+type)}}options=options||{};for(varkinoptions){if(!(kindefaultOptions)){thrownewError("Unrecognised option '"+k+"' in Actor."+type)}}for(varkindefaultOptions){if(!(kinoptions)){options[k]=defaultOptions[k]}}return{type:type,rawProjectionFn:rawProjectionFn,options:options,handler:handler}}functionrecordChunk(chunk){Actor._chunks.push(chunk)}functionchunkExtractor(type,defaultOptions){returnfunction(){checkChunks(type);recordChunk(extractChunk(type,defaultOptions,Array.prototype.slice.call(arguments)))}}varparticipatorDefaults={metaLevel:0,when:function(){returntrue}};varobserverDefaults={metaLevel:0,level:0,when:function(){returntrue},presence:null,name:null,set:null,added:null,removed:null};Actor.advertise=chunkExtractor("advertise",participatorDefaults);Actor.subscribe=chunkExtractor("subscribe",participatorDefaults);Actor.observeAdvertisers=chunkExtractor("observeAdvertisers",observerDefaults);Actor.observeSubscribers=chunkExtractor("observeSubscribers",observerDefaults);Actor.observeGestalt=function(gestaltFn,eventHandlerFn){checkChunks("observeGestalt");recordChunk({type:"observeGestalt",gestaltFn:gestaltFn,options:{when:function(){returntrue}},eventHandlerFn:eventHandlerFn})};functionfinalizeActor(behavior,chunks){varoldBoot=behavior.boot;varoldHandleEvent=behavior.handleEvent;varprojections={};varcompiledProjections={};varpreviousObjs={};behavior.boot=function(){if(oldBoot){oldBoot.call(this)}this.updateRoutes()};behavior.updateRoutes=function(){varnewRoutes=Route.emptyGestalt;for(vari=0;i<chunks.length;i++){varchunk=chunks[i];if(chunk.options.when.call(this)){switch(chunk.type){case"observeGestalt":newRoutes=newRoutes.union(chunk.gestaltFn.call(this));break;case"advertise":case"subscribe":varproj=chunk.rawProjectionFn.call(this);projections[i]=proj;varg=Route.simpleGestalt(chunk.type==="advertise",Route.projectionToPattern(proj),chunk.options.metaLevel,0);newRoutes=newRoutes.union(g);break;case"observeSubscribers":case"observeAdvertisers":varproj=chunk.rawProjectionFn.call(this);projections[i]=proj;compiledProjections[i]=Route.compileProjection(proj);varg=Route.simpleGestalt(chunk.type==="observeSubscribers",Route.projectionToPattern(proj),chunk.options.metaLevel,chunk.options.level+1);newRoutes=newRoutes.union(g);if(chunk.options.added||chunk.options
}else{rupdateInplace(target,key,walk(k1,k2))}}}}if(is_emptyMatcher(w1)){if(is_emptyMatcher(w2)){for(varkeyin(r1.length<r2.length?r1:r2).entries)examineKey(key)}else{for(varkeyinr1.entries)examineKey(key)}}else{if(is_emptyMatcher(w2)){for(varkeyinr2.entries)examineKey(key)}else{rupdateInplace(target,__,w);for(varkeyinr1.entries)examineKey(key);for(varkeyinr2.entries)examineKey(key)}}returntarget.emptyGuard()}functionwalkWild(walker,w,key,k){if(is_emptyMatcher(w))returnemptyMatcher;if(is_keyOpen(key))returnwalker(rwildseq(w),k);if(is_keyClose(key)){if(winstanceof$WildcardSequence)returnwalker(w.matcher,k);returnemptyMatcher}returnwalker(w,k)}}functionerasePath(o1,o2){returnwalk(o1,o2);functionwalk(r1,r2){if(is_emptyMatcher(r1)){returnemptyMatcher}else{if(is_emptyMatcher(r2)){returnr1}}if(r1instanceof$WildcardSequence){if(r2instanceof$WildcardSequence){returnrwildseq(walk(r1.matcher,r2.matcher))}r1=expandWildseq(r1.matcher)}elseif(r2instanceof$WildcardSequence){r2=expandWildseq(r2.matcher)}if(r1instanceof$Success&&r2instanceof$Success){returnrsuccess(erasePathSuccesses(r1.value,r2.value))}varw1=r1.get(__);varw2=r2.get(__);varw=walk(w1,w2);vartarget;functionexamineKey(key){if(key!==__){vark1=r1.get(key);vark2=r2.get(key);varupdatedK;if(is_emptyMatcher(k2)){updatedK=walkWild(key,k1,w2)}else{updatedK=walk(k1,k2)}if(is_keyOpen(key)){rupdateInplace(target,key,updatedKinstanceof$WildcardSequence&&matcherEquals(updatedK.matcher,w)?emptyMatcher:updatedK)}elseif(is_keyClose(key)){rupdateInplace(target,key,updatedK)}else{rupdateInplace(target,key,matcherEquals(updatedK,w)?emptyMatcher:updatedK)}}}if(is_emptyMatcher(w2)){target=r1.copy();for(varkeyinr2.entries)examineKey(key)}else{target=new$Dict;rupdateInplace(target,__,w);for(varkeyinr1.entries)examineKey(key);for(varkeyinr2.entries)examineKey(key)}if(target.length===2){varfinalW=target.get(__);if(finalWinstanceof$WildcardSequence){for(varkeyintarget.entries){if(key!==__&&is_keyClose(key)){vark=target.get(key);if(matcherEquals(k,finalW.matcher)){returnfinalW}}}}}returntarget.emptyGuard()}functionwalkWild(key,k,w){if(is_emptyMatcher(w))returnk;if(is_keyOpen(key))returnwalk(k,rwildseq(w));if(is_keyClose(key)){if(winstanceof$WildcardSequence)returnwalk(k,w.matcher);returnk}returnwalk(k,w)}}functionmatchValue(r,v){varfailureResult=null;varvs=[v];varstack=[[]];while(!is_emptyMatcher(r)){if(rinstanceof$WildcardSequence){if(stack.length===0)returnfailureResult;vs=stack.pop();r=r.matcher;continue}if(rinstanceof$Success){if(vs.length===0&&stack.length===0)returnr.value;returnfailureResult}if(vs.length===0){if(stack.length===0)returnfailureResult;vs=stack.pop();r=r.get(EOA);continue}varv=vs.shift();if(typeofv==="string"&&v.substring(0,2)==="__"){die("Cannot match special string starting with __")}if(Array.isArray(v)){if(SOAinr.entries){r=r.get(SOA);stack.push(vs);vs=shallowCopyArray(v)}else{r=r.get(__)}}else{varkey;try{key=JSON.stringify(v)}catch(exn){key=null}if(keyinr.entries){r=r.get(key)}else{r=r.get(__)}}}returnfailureResult}functionmatchMatcher(o1,o2,seed){varacc=typeofseed==="undefined"?{}:seed;walk(o1,o2);returnacc;functionwalkFlipped(r2,r1){returnwalk(r1,r2)}functionwalk(r1,r2){if(is_emptyMatcher(r1)||is_emptyMatcher(r2))return;if(r1instanceof$WildcardSequence){if(r2instanceof$WildcardSequence){walk(r1.matcher,r2.matcher);return}r1=expandWildseq(r1.matcher)}elseif(r2instanceof$WildcardSequence){r2=expandWildseq(r2.matcher)}if(r1instanceof$Success&&r2instanceof$Success){matchMatcherSuccesses(r1.value,r2.value,acc);return}varw1=r1.get(__);varw2=r2.get(__);walk(w1,w2);functionexamineKey(key){if(key!==__){vark1=r1.get(key);vark2=r2.get(key);if(is_emptyMatcher(k1)){if(is_emptyMatcher(k2)){return}else{walkWild(walk,w1,key,k2)}}else{if(is_emptyMatcher(k2)){walkWild(walkFlipped,w2,key,k1)}else{walk(k1,k2)}}}}if(is_emptyMatcher(w1)){if(is_emptyMatcher(w2)){for(varkeyin(r1.length<r2.length?r1:r2).entries)examineKey(key)}else{for(varkeyinr1.entries)examineKey(key)}}els