Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Pygments / examplefiles / output / test.erl
Size: Mime:
€]q(cpygments.token
_TokenType
qXPunctuationq…q…qq}q(Xsubtypesqcbuiltins
set
q]q	hhX	Indicatorq
†q…qq
}q(hh]q…qRqXparentqhuba…qRqhh)…qq}q(hh]q(hXEscapeq…q…qq}q(hh]q…qRq hhubhXOperatorq!…q"…q#q$}q%(hh]q&(hh!XDBSq'†q(…q)q*}q+(hh]q,…q-Rq.hh$ubhh!XWordq/†q0…q1q2}q3(hh]q4…q5Rq6hh$ube…q7Rq8hhh/h2h'h*ubhXNameq9…q:…q;q<}q=(hh]q>(hh9XTagq?†q@…qAqB}qC(hh]qD…qERqFhh<ubhh9XEntityqG†qH…qIqJ}qK(hh]qLhh9hGh'‡qM…qNqO}qP(hh]qQ…qRRqShhJuba…qTRqUhh<h'hOubhh9X	ExceptionqV†qW…qXqY}qZ(hh]q[…q\Rq]hh<ubhh9X	Decoratorq^†q_…q`qa}qb(hh]qc…qdRqehh<ubhh9XClassqf†qg…qhqi}qj(hh]qk(hh9hfh'‡ql…qmqn}qo(hh]qp…qqRqrhhiubhh9hfXStartqs‡qt…quqv}qw(hh]qx…qyRqzhhiube…q{Rq|hh<hshvh'hnubhh9XVariableq}†q~…qq€}q(hh]q‚(hh9h}X	Anonymousqƒ‡q„…q…q†}q‡(hh]qˆ…q‰RqŠhh€ubhh9h}hf‡q‹…qŒq}qŽ(hh]q…qRq‘hh€ubhh9h}XMagicq’‡q“…q”q•}q–(hh]q—…q˜Rq™hh€ubhh9h}XGlobalqš‡q›…qœq}qž(hh]qŸ…q Rq¡hh€ubhh9h}XInstanceq¢‡q£…q¤q¥}q¦(hh]q§…q¨Rq©hh€ube…qªRq«hh<hfhhšhh¢h¥h’h•hƒh†ubhh9X	Attributeq¬†q­…q®q¯}q°(hh]q±hh9h¬h}‡q²…q³q´}qµ(hh]q¶…q·Rq¸hh¯uba…q¹Rqºhh<h}h´ubhh9X	Namespaceq»†q¼…q½q¾}q¿(hh]qqÁRqÂhh<ubhh9XPropertyqÆqąqŁqÆ}qÇ(hh]qȅqÉRqÊhh<ubhh9XSymbolqˆq̅q́qÎ}qÏ(hh]qЅqÑRqÒhh<ubhh9XClassesqӆqԅqՁqÖ}q×(hh]q؅qÙRqÚhh<ubhh9XPseudoqۆq܅q݁qÞ}qß(hh]qà…qáRqâhh<ubhh9XLabelqã†qä…qåqæ}qç(hh]qè…qéRqêhh<ubhh9h!†që…qìqí}qî(hh]qï…qðRqñhh<ubhh9XBuiltinqò†qó…qôqõ}qö(hh]q÷(hh9hòhۇqø…qùqú}qû(hh]qü…qýRqþhhõubhh9hòXTypeqÿ‡r…rr}r(hh]r…rRrhhõube…rRrhh<hÛhúhÿjubhh9XFieldr	†r
…rr}r
(hh]r…rRrhh<ubhh9XOtherr†r…rr}r(hh]rhh9jXMemberr‡r…rr}r(hh]r…rRrhjuba…rRr hh<jjubhh9XFunctionr!†r"…r#r$}r%(hh]r&hh9j!h’‡r'…r(r)}r*(hh]r+…r,Rr-hj$uba…r.Rr/hh<h’j)ubhh9hÿ†r0…r1r2}r3(hh]r4…r5Rr6hh<ubhh9XConstantr7†r8…r9r:}r;(hh]r<…r=Rr>hh<ube…r?Rr@hhh¬h¯hòhõhfhij7j:h^hahGhJhVhYj!j$hÃhÆhãhæh»h¾jjh?hBh}h€j	jhËhÎhÛhÞh!híhÓhÖhÿj2ubhXLiteralrA…rB…rCrD}rE(hh]rF(hjAj†rG…rHrI}rJ(hh]rK…rLRrMhjDubhjAXCharrN†rO…rPrQ}rR(hh]rS…rTRrUhjDubhjAXDaterV†rW…rXrY}rZ(hh]r[…r\Rr]hjDubhjAXScalarr^†r_…r`ra}rb(hh]rchjAj^XPlainrd‡re…rfrg}rh(hh]ri…rjRrkhjauba…rlRrmhjDjdjgubhjAXStringrn†ro…rprq}rr(hh]rs(hjAjnXInterpolrt‡ru…rvrw}rx(hh]ry…rzRr{hjqubhjAjnX	Delimeterr|‡r}…r~r}r€(hh]r…r‚RrƒhjqubhjAjnjN‡r„…r…r†}r‡(hh]rˆ…r‰RrŠhjqubhjAjnhˇr‹…rŒr}rŽ(hh]r…rRr‘hjqubhjAjnXSingler’‡r“…r”r•}r–(hh]r—…r˜Rr™hjqubhjAjnj‡rš…r›rœ}r(hh]rž…rŸRr hjqubhjAjnXBacktickr¡‡r¢…r£r¤}r¥(hh]r¦…r§Rr¨hjqubhjAjnh‡r©…rªr«}r¬(hh]r­…r®Rr¯hjqubhjAjnXRegexr°‡r±…r²r³}r´(hh]rµ…r¶Rr·hjqubhjAjnXMomentr¸‡r¹…rºr»}r¼(hh]r½…r¾Rr¿hjqubhjAjnXBooleanrÀ‡rÁ…rrÃ}rÄ(hh]rÅ…rÆRrÇhjqubhjAjnX	CharacterrȇrÉ…rʁrË}rÌ(hh]rÍ…rÎRrÏhjqubhjAjnX	DelimiterrЇrÑ…rҁrÓ}rÔ(hh]rÕ…rÖRr×hjqubhjAjnXDocr؇rÙ…rځrÛ}rÜ(hh]rÝ…rÞRrßhjqubhjAjnh9‡rà…rárâ}rã(hh]rä…råRræhjqubhjAjnXAffixrç‡rè…rérê}rë(hh]rì…ríRrîhjqubhjAjnXHeredocrï‡rð…rñrò}ró(hh]rô…rõRröhjqubhjAjnXDoubler÷‡rø…rùrú}rû(hh]rü…rýRrþhjqubhjAjnXInterprÿ‡r…rr}r(hh]r…rRrhjqubhjAjnXAtomr‡r…r	r
}r(hh]r…r
Rrhjqube…rRrhjDjçjêj¡j¤jNj†jÐjÓjØjÛj÷júhj«jïjòjtjwjjœj°j³j’j•hËjjÈjËj¸j»jÿjjÀjÃj|jjj
h9jâubhjAXNumberr†r…rr}r(hh]r(hjAjXFloatr‡r…rr}r(hh]r…rRrhjubhjAjXDecr‡r …r!r"}r#(hh]r$…r%Rr&hjubhjAjXRadixr'‡r(…r)r*}r+(hh]r,…r-Rr.hjubhjAjXOctr/‡r0…r1r2}r3(hh]r4…r5Rr6hjubhjAjXBinr7‡r8…r9r:}r;(hh]r<…r=Rr>hjubhjAjh¬‡r?…r@rA}rB(hh]rC…rDRrEhjubhjAjXHexrF‡rG…rHrI}rJ(hh]rK…rLRrMhjubhjAjXIntegerrN‡rO…rPrQ}rR(hh]rSh(jAjjNXLongrTtrU…rVrW}rX(hh]rY…rZRr[hjQuba…r\Rr]hjjTjWubhjAjXDecimalr^‡r_…r`ra}rb(hh]rc…rdRrehjube…rfRrghjDj7j:jjjFjIjNjQj/j2j'j*h¬jAj^jajj"ube…rhRrihhjnjqjjjVjYj^jajjIjNjQubhXGenericrj…rk…rlrm}rn(hh]ro(hjjXErrorrp†rq…rrrs}rt(hh]ru…rvRrwhjmubhjjX
Subheadingrx†ry…rzr{}r|(hh]r}…r~RrhjmubhjjX	Tracebackr€†r…r‚rƒ}r„(hh]r……r†Rr‡hjmubhjjXOutputrˆ†r‰…rЁr‹}rŒ(hh]r…rŽRrhjmubhjjXPromptr†r‘…r’r“}r”(hh]r•…r–Rr—hjmubhjjXDeletedr˜†r™…ršr›}rœ(hh]r…ržRrŸhjmubhjjXInsertedr †r¡…r¢r£}r¤(hh]r¥…r¦Rr§hjmubhjjXHeadingr¨†r©…rªr«}r¬(hh]r­…r®Rr¯hjmubhjjXStrongr°†r±…r²r³}r´(hh]rµ…r¶Rr·hjmubhjjXEmphr¸†r¹…rºr»}r¼(hh]r½…r¾Rr¿hjmube…rÀRrÁhhj˜j›j¸j»jpjsj¨j«j j£jˆj‹jj“j°j³jxj{j€jƒubhjp…rÂ…rÁrÄ}rÅ(hh]rÆ…rÇRrÈhhubhXKeywordrÉ…rÊ…rˁrÌ}rÍ(hh]rÎ(hjÉh/†rÏ…rЁrÑ}rÒ(hh]rÓ…rÔRrÕhjÌubhjÉjɆrÖ…rׁrØ}rÙ(hh]rÚ…rÛRrÜhjÌubhjÉhÿ†rÝ…rށrß}rà(hh]rá…râRrãhjÌubhjÉXPreProcrä†rå…rærç}rè(hh]ré…rêRrëhjÌubhjÉXControlrì†rí…rîrï}rð(hh]rñ…ròRróhjÌubhjÉj7†rô…rõrö}r÷(hh]rø…rùRrúhjÌubhjÉh»†rû…rürý}rþ(hh]rÿ…rRrhjÌubhjÉhۆr…rr}r(hh]r…rRrhjÌubhjÉXDeclarationr	†r
…rr}r
(hh]r…rRrhjÌubhjÉXReservedr†r…rr}r(hh]r…rRrhjÌube…rRrhhj7jöj	jh»jýhÛjjjhÿjßjìjïjÉjØjäjçh/jÑubhj…r…rr}r(hh]r…r Rr!hhubhXTextr"…r#…r$r%}r&(hh]r'(hj"XRootr(†r)…r*r+}r,(hh]r-…r.Rr/hj%ubhj"hˆr0…r1r2}r3(hh]r4…r5Rr6hj%ubhj"XRagr7†r8…r9r:}r;(hh]r<…r=Rr>hj%ubhj"X
Whitespacer?†r@…rArB}rC(hh]rD…rERrFhj%ubhj"XBeerrG†rH…rIrJ}rK(hh]rL…rMRrNhj%ubhj"h†rO…rPrQ}rR(hh]rS…rTRrUhj%ube…rVRrWhhj?jBhËj2hjQj(j+jGjJj7j:ubhXCommentrX…rY…rZr[}r\(hh]r](hjXXPreprocr^†r_…r`ra}rb(hh]rc…rdRrehj[ubhjXXMultirf†rg…rhri}rj(hh]rk…rlRrmhj[ubhjXXHashbangrn†ro…rprq}rr(hh]rs…rtRruhj[ubhjXj’†rv…rwrx}ry(hh]rz…r{Rr|hj[ubhjXX
SingleLiner}†r~…rr€}r(hh]r‚…rƒRr„hj[ubhjXj؆r……r†r‡}rˆ(hh]r‰…rŠRr‹hj[ubhjXX	DirectiverŒ†r…rށr}r(hh]r‘…r’Rr“hj[ubhjXX	Multiliner”†r•…r–r—}r˜(hh]r™…ršRr›hj[ubhjXX
Singlelinerœ†r…ržrŸ}r (hh]r¡…r¢Rr£hj[ubhjXXPreprocFiler¤†r¥…r¦r§}r¨(hh]r©…rªRr«hj[ubhjXXSpecialr¬†r­…r®r¯}r°(hh]r±…r²Rr³hj[ube…r´Rrµhhjnjqj”j—j^jaj¤j§j’jxj¬j¯jŒjj}j€jØj‡jfjijœjŸubhe…r¶Rr·j"j%hhjpjÄjjjÉjÌh9h<jAjDhhh!h$jXj[jjjmXTokenr¸hjnjqjjubh
h
ubX-r¹†rºhJXmoduler»†r¼hX(r½†r¾h<Xtestr¿†rÀhX)rÁ†rÂhX.rÆrÄj%X
rņrÆhj¹†rÇhJXexportrȆrÉhj½†rÊhX[rˆrÌh<Xlistenr͆rÎh$X/rφrÐjQX1rцrÒhX,rÓ†rÔj%X

         rÕ†rÖh<X
handle_clientr׆rØh$jφrÙjQjцrÚhjÓ†rÛj%X

         r܆rÝh<Xmaintain_clientsrÞ†rßh$jφràjQjцráhjÓ†râj%X

         rã†räh<Xstartrå†ræh$jφrçjQjцrèhjÓ†réj%X

         rê†rëh<Xstoprì†ríh$jφrîjQX0rï†rðhjÓ†rñj%X

         rò†róh<X
controllerrô†rõh$jφröjQjцr÷hX]rø†rùhjÁ†rúhjÆrûj%X

rü†rýhj¹†rþhJXauthorrÿ†rhj½†rjqX"r†rjqXjerithr†rjqj†rhjÁ†rhjÆrj%X

r	†r
hj¹†rhJXdefiner†r
hj½†rj:XTCP_OPTIONSr†rhjÓ†rhjˆrh<Xlistr†rhjÓ†rj%X r†rhX{r†rh<Xpacketr†rhjÓ†rj%j†rjQjï†rhX}r†r hjÓ†r!j%j†r"hj†r#h<Xactiver$†r%hjÓ†r&j%j†r'h<Xfalser(†r)hj†r*hjÓ†r+j%j†r,hj†r-h<X	reuseaddrr.†r/hjÓ†r0j%j†r1h<Xtruer2†r3hj†r4hjø†r5hjÁ†r6hjÆr7j%X

r8†r9hj¹†r:hJXrecordr;†r<hj½†r=hæXplayerr>†r?hjÓ†r@j%j†rAhj†rBh<XnamerC†rDh$X=rE†rFh<XnonerG†rHhjÓ†rIj%j†rJh<XsocketrK†rLhjÓ†rMj%j†rNh<XmoderO†rPhj†rQhjÁ†rRhjÆrSj%X

rT†rUj[XC%% To allow incoming connections, we need to listen on a TCP port.
rV†rWj[XA%% This is also the entry point for our server as a whole, so it
rX†rYj[XE%% starts the client_manager process and gives it a name so the rest
rZ†r[j[X%%% of the code can get to it easily.
r\†r]j%jņr^j$Xlistenr_†r`hj½†rah€XPortrb†rchjÁ†rdj%j†reh$j¹†rfh$X>rg†rhj%X
    ri†rjhj†rkh<Xokrl†rmhjÓ†rnj%j†roh€XLSocketrp†rqhj†rrj%j†rsh$jE†rtj%j†ruh¾Xgen_tcprv†rwhX:rx†ryj$Xlistenrz†r{hj½†r|h€XPortr}†r~hjÓ†rj%j†r€h$X?r†r‚h€XTCP_OPTIONSrƒ†r„hjÁ†r…hjÓ†r†j%X
    r‡†rˆhõXregisterr‰†rŠhj½†r‹h<Xclient_managerrŒ†rhjÓ†rŽj%j†rhõXspawnr†r‘hj½†r’h$j†r“h€XMODULEr”†r•hjÓ†r–j%j†r—h<Xmaintain_clientsr˜†r™hjÓ†ršj%j†r›hjˆrœhjˆrhjø†ržhjø†rŸhjÁ†r hjÁ†r¡hjÓ†r¢j%X
    r£†r¤h<X	do_acceptr¥†r¦hj½†r§h€XLSocketr¨†r©hjÁ†rªhjÆr«j%X

r¬†r­j[X@%% Accepting a connection gives us a connection socket with the
r®†r¯j[XE%% newly-connected client on the other end.  Since we want to accept
r°†r±j[XG%% more than one client, we spawn a new process for each and then wait
r²†r³j[X3%% for another connection on our listening socket.
r´†rµj%jņr¶j$X	do_acceptr·†r¸hj½†r¹h€XLSocketrº†r»hjÁ†r¼j%j†r½h$j¹†r¾h$jg†r¿j%X
    rÀ†rÁjÌXcaser†rÃj%j†rÄh¾Xgen_tcprņrÆhjx†rÇj$XacceptrȆrÉhj½†rÊh€XLSocketrˆrÌhjÁ†rÍj%j†rÎjÌXofrφrÐj%X	
        rцrÒhj†rÓh<XokrÔ†rÕhjÓ†rÖj%j†r×h€XSocketr؆rÙhj†rÚj%j†rÛh$j¹†rÜh$jg†rÝj%X

            rÞ†rßhõXspawnrà†ráhj½†râh$j†rãh€XMODULErä†råhjÓ†ræj%j†rçh<X
handle_clientrè†réhjÓ†rêj%j†rëhjˆrìh€XSocketrí†rîhjø†rïhjÁ†rðhjÓ†rñj%X

            rò†róh<Xclient_managerrô†rõj%j†röh$X!r÷†røj%j†rùhj†rúh<Xconnectrû†rühjÓ†rýj%j†rþh€XSocketrÿ†rhj†rhX;r†rj%X	
        r†rhj†rh<Xerrorr†rhjÓ†r	j%j†r
h€XReasonr†rhj†r
j%j†rh$j¹†rh$jg†rj%X

            r†rh¾Xior†rhjx†rj$Xformatr†rhj½†rjqj†rjqXSocket accept error: r†rjwX~sr†rjwX~nr†rjqj†r hjÓ†r!j%j†r"hjˆr#h€XReasonr$†r%hjø†r&hjÁ†r'j%X
    r(†r)jÌXendr*†r+hjÓ†r,j%X
    r-†r.h<X	do_acceptr/†r0hj½†r1h€XLSocketr2†r3hjÁ†r4hjÆr5j%X

r6†r7j[XB%% All the client-socket process needs to do is wait for data and
r8†r9j[XE%% forward it to the client_manager process which decides what to do
r:†r;j[XG%% with it.  If the client disconnects, we let client_manager know and
r<†r=j[X%% then quietly go away.
r>†r?j%jņr@j$X
handle_clientrA†rBhj½†rCh€XSocketrD†rEhjÁ†rFj%j†rGh$j¹†rHh$jg†rIj%X
    rJ†rKjÌXcaserL†rMj%j†rNh¾Xgen_tcprO†rPhjx†rQj$XrecvrR†rShj½†rTh€XSocketrU†rVhjÓ†rWj%j†rXjQjï†rYhjÁ†rZj%j†r[jÌXofr\†r]j%X	
        r^†r_hj†r`h<Xokra†rbhjÓ†rcj%j†rdh€XDatare†rfhj†rgj%j†rhh$j¹†rih$jg†rjj%X

            rk†rlh<Xclient_managerrm†rnj%j†roh$j÷†rpj%j†rqhj†rrh<Xdatars†rthjÓ†ruj%j†rvh€XSocketrw†rxhjÓ†ryj%j†rzh€XDatar{†r|hj†r}hjÓ†r~j%X

            r†r€h<X
handle_clientr†r‚hj½†rƒh€XSocketr„†r…hjÁ†r†hj†r‡j%X	
        rˆ†r‰hj†rŠh<Xerrorr‹†rŒhjÓ†rj%j†rŽh<Xclosedr†rhj†r‘j%j†r’h$j¹†r“h$jg†r”j%X

            r•†r–h<Xclient_managerr—†r˜j%j†r™h$j÷†ršj%j†r›hj†rœh<X
disconnectr†ržhjÓ†rŸj%j†r h€XSocketr¡†r¢hj†r£j%X
    r¤†r¥jÌXendr¦†r§hjÆr¨j%X

r©†rªj[XF%% This is the main loop of the client_manager process.  It maintains
r«†r¬j[XA%% the list of "players" and calls the handler for client input.
r­†r®j%jņr¯j$Xmaintain_clientsr°†r±hj½†r²h€XPlayersr³†r´hjÁ†rµj%j†r¶h$j¹†r·h$jg†r¸j%X
    r¹†rºh¾Xior»†r¼hjx†r½j$Xformatr¾†r¿hj½†rÀjqj†rÁjqXPlayers:r†rÃjwX~nrĆrÅjqj†rÆhjÓ†rÇj%j†rÈhjˆrÉhjø†rÊhjÁ†rËhjÓ†rÌj%X
    r͆rÎh¾XlistsrφrÐhjx†rÑj$XforeachrÒ†rÓhj½†rÔjÌXfunrÕ†rÖhj½†r×h€XPr؆rÙhjÁ†rÚj%j†rÛh$j¹†rÜh$jg†rÝj%j†rÞh¾Xior߆ràhjx†ráj$Xformatrâ†rãhj½†räjqj†råjqX>>> ræ†rçjwX~wrè†réjwX~nrê†rëjqj†rìhjÓ†ríj%j†rîhjˆrïh€j؆rðhjø†rñhjÁ†ròj%j†rójÌXendrô†rõhjÓ†röj%j†r÷h€XPlayersrø†rùhjÁ†rúhjÓ†rûj%X
    rü†rýjÌXreceiverþ†rÿj%X	
        r†rhj†rh<Xconnectr†rhjÓ†rj%j†rh€XSocketr†rhj†r	j%j†r
h$j¹†rh$jg†rj%X

            r
†rh€XPlayerr†rj%j†rh$jE†rj%j†rhæX#playerr†rhj†rh<Xsocketr†rh$jE†rh€XSocketr†rhjÓ†rj%j†rh<Xmoder†rh$jE†r h<Xconnectr!†r"hj†r#hjÓ†r$j%X

            r%†r&h<Xsend_promptr'†r(hj½†r)h€XPlayerr*†r+hjÁ†r,hjÓ†r-j%X

            r.†r/h¾Xior0†r1hjx†r2j$Xformatr3†r4hj½†r5jqj†r6jqXclient connected: r7†r8jwX~wr9†r:jwX~nr;†r<jqj†r=hjÓ†r>j%j†r?hjˆr@h€XPlayerrA†rBhjø†rChjÁ†rDhjÓ†rEj%X

            rF†rGh€X
NewPlayersrH†rIj%j†rJh$jE†rKj%X  rL†rMhjˆrNh€XPlayerrO†rPj%j†rQhX|rR†rSj%j†rTh€XPlayersrU†rVhjø†rWhj†rXj%X	
        rY†rZhj†r[h<X
disconnectr\†r]hjÓ†r^j%j†r_h€XSocketr`†rahj†rbj%j†rch$j¹†rdh$jg†rej%X

            rf†rgh€XPlayerrh†rij%j†rjh$jE†rkj%j†rlh<Xfind_playerrm†rnhj½†roh€XSocketrp†rqhjÓ†rrj%j†rsh€XPlayersrt†ruhjÁ†rvhjÓ†rwj%X

            rx†ryh¾Xiorz†r{hjx†r|j$Xformatr}†r~hj½†rjqj†r€jqXclient disconnected: r†r‚jwX~wrƒ†r„jwX~nr…†r†jqj†r‡hjÓ†rˆj%j†r‰hjˆrŠh€XPlayerr‹†rŒhjø†rhjÁ†rŽhjÓ†rj%X

            r†r‘h€X
NewPlayersr’†r“j%j†r”h$jE†r•j%j†r–h¾Xlistsr—†r˜hjx†r™j$Xdeleterš†r›hj½†rœh€XPlayerr†ržhjÓ†rŸj%j†r h€XPlayersr¡†r¢hjÁ†r£hj†r¤j%X	
        r¥†r¦hj†r§h<Xdatar¨†r©hjÓ†rªj%j†r«h€XSocketr¬†r­hjÓ†r®j%j†r¯h€XDatar°†r±hj†r²j%j†r³h$j¹†r´h$jg†rµj%X

            r¶†r·h€XPlayerr¸†r¹j%j†rºh$jE†r»j%j†r¼h<Xfind_playerr½†r¾hj½†r¿h€XSocketrÀ†rÁhjÓ†rÂj%j†rÃh€XPlayersrĆrÅhjÁ†rÆhjÓ†rÇj%X

            rȆrÉh€X
NewPlayersrʆrËj%j†rÌh$jE†rÍj%j†rÎh<X
parse_datarφrÐhj½†rÑh€XPlayerrÒ†rÓhjÓ†rÔj%j†rÕh€XPlayersrÖ†r×hjÓ†rØj%j†rÙh€XDatarÚ†rÛhjÁ†rÜhjÓ†rÝj%X

            rÞ†rßh€X	NewPlayerrà†ráj%j†râh$jE†rãj%j†räh<Xfind_playerrå†ræhj½†rçh€XSocketrè†réhjÓ†rêj%j†rëh€X
NewPlayersrì†ríhjÁ†rîhjÓ†rïj%X

            rð†rñh<Xsend_promptrò†róhj½†rôh€X	NewPlayerrõ†röhjÁ†r÷j%X
    rø†rùjÌXendrú†rûhjÓ†rüj%X
    rý†rþh<Xmaintain_clientsrÿ†rhj½†rh€X
NewPlayersr†rhjÁ†rhjÆrj%X

r†rj[XG%% find_player is a utility function to get a player record associated
r†r	j[X4%% with a particular socket out of the player list.
r
†rj%jņrj$Xfind_playerr
†rhj½†rh€XSocketr†rhjÓ†rj%j†rh€XPlayersr†rhjÁ†rj%j†rh$j¹†rh$jg†rj%X
    r†rhj†rh<Xvaluer†rhjÓ†rj%j†r h€XPlayerr!†r"hj†r#j%j†r$h$jE†r%j%j†r&h¾Xlistsr'†r(hjx†r)j$X	keysearchr*†r+hj½†r,h€XSocketr-†r.hjÓ†r/j%j†r0hæX#player.socketr1†r2hjÓ†r3j%j†r4h€XPlayersr5†r6hjÁ†r7hjÓ†r8j%X
    r9†r:h€XPlayerr;†r<hjÆr=j%X

r>†r?j[XG%% delete_player returns the player list without the given player.  It
r@†rAj[XD%% deletes the player from the list based on the socket rather than
rB†rCj[XE%% the whole record because the list might hold a different version.
rD†rEj%jņrFj$X
delete_playerrG†rHhj½†rIh€XPlayerrJ†rKhjÓ†rLj%j†rMh€XPlayersrN†rOhjÁ†rPj%j†rQh$j¹†rRh$jg†rSj%X
    rT†rUh¾XlistsrV†rWhjx†rXj$X	keydeleterY†rZhj½†r[h€XPlayerr\†r]hæX#player.socketr^†r_hjÓ†r`j%j†rahæX#player.socketrb†rchjÓ†rdj%j†reh€XPlayersrf†rghjÁ†rhhjÆrij%X

rj†rkj[XB%% Sends an appropriate prompt to the player.  Currently the only
rl†rmj[XD%% prompt we send is the initial "Name: " when the player connects.
rn†roj%jņrpj$Xsend_promptrq†rrhj½†rsh€XPlayerrt†ruhjÁ†rvj%j†rwh$j¹†rxh$jg†ryj%X
    rz†r{jÌXcaser|†r}j%j†r~h€XPlayerr†r€hæX#player.moder†r‚j%j†rƒjÌXofr„†r…j%X	
        r††r‡h<Xconnectrˆ†r‰j%j†rŠh$j¹†r‹h$jg†rŒj%X

            r†rŽh¾Xgen_tcpr†rhjx†r‘hõXsendr’†r“hj½†r”h€XPlayerr•†r–hæX#player.socketr—†r˜hjÓ†r™j%j†ršjqj†r›jqXName: rœ†rjqj†ržhjÁ†rŸhj†r j%X	
        r¡†r¢h<Xactiver£†r¤j%j†r¥h$j¹†r¦h$jg†r§j%X

            r¨†r©h<Xokrª†r«j%X
    r¬†r­jÌXendr®†r¯hjÆr°j%X

r±†r²j[X7%% Sends the given data to all players in active mode.
r³†r´j%jņrµj$Xsend_to_activer¶†r·hj½†r¸h€XPrefixr¹†rºhjÓ†r»j%j†r¼h€XPlayersr½†r¾hjÓ†r¿j%j†rÀh€XDatarÁ†rÂhjÁ†rÃj%j†rÄh$j¹†rÅh$jg†rÆj%X
    rdžrÈh€X
ActivePlayersrɆrÊj%j†rËh$jE†rÌj%j†rÍh¾XlistsrΆrÏhjx†rÐj$XfilterrцrÒhj½†rÓjÌXfunrÔ†rÕhj½†rÖh€j؆r×hjÁ†rØj%j†rÙh$j¹†rÚh$jg†rÛj%j†rÜh€j؆rÝhæX#player.moderÞ†rßj%j†ràh$X==rá†râj%j†rãh<Xactiverä†råj%j†ræjÌXendrç†rèhjÓ†réj%X"
                                 rê†rëh€XPlayersrì†ríhjÁ†rîhjÓ†rïj%X
    rð†rñh¾Xlistsrò†róhjx†rôj$Xforeachrõ†röhj½†r÷jÌXfunrø†rùhj½†rúh€j؆rûhjÁ†rüj%j†rýh$j¹†rþh$jg†rÿj%j†rh¾Xgen_tcpr†rhjx†rhõXsendr†rhj½†rh€j؆rhæX#player.socketr†r	hjÓ†r
j%j†rh€XPrefixr†r
j%j†rh$X++r†rj%j†rh€XDatar†rhjÁ†rj%j†rjÌXendr†rhjÓ†rj%X
                  r†rh€X
ActivePlayersr†rhjÁ†rhjÓ†rj%X
    r†r h<Xokr!†r"hjÆr#j%X

r$†r%j[XE%% We don't really do much parsing, but that will probably change as
r&†r'j[XF%% more features are added.  Currently this handles naming the player
r(†r)j[XE%% when he first connects and treats everything else as a message to
r*†r+j[X	%% send.
r,†r-j%jņr.j$X
parse_datar/†r0hj½†r1h€XPlayerr2†r3hjÓ†r4j%j†r5h€XPlayersr6†r7hjÓ†r8j%j†r9h€XDatar:†r;hjÁ†r<j%j†r=h$j¹†r>h$jg†r?j%X
    r@†rAjÌXcaserB†rCj%j†rDh€XPlayerrE†rFhæX#player.moderG†rHj%j†rIjÌXofrJ†rKj%X	
        rL†rMh<XactiverN†rOj%j†rPh$j¹†rQh$jg†rRj%X

            rS†rTh<Xsend_to_activerU†rVhj½†rWh€XPlayerrX†rYhæX#player.namerZ†r[j%j†r\h$X++r]†r^j%j†r_jqj†r`jqX: ra†rbjqj†rchjÓ†rdj%X
              re†rfh<X
delete_playerrg†rhhj½†rih€XPlayerrj†rkhjÓ†rlj%j†rmh€XPlayersrn†rohjÁ†rphjÓ†rqj%j†rrh€XDatars†rthjÁ†ruhjÓ†rvj%X

            rw†rxh€XPlayersry†rzhj†r{j%X	
        r|†r}h<Xconnectr~†rj%j†r€h$j¹†rh$jg†r‚j%X

            rƒ†r„h€XUPlayerr…†r†j%j†r‡h$jE†rˆj%j†r‰h€XPlayerrІr‹hæX#playerrŒ†rhj†rŽh<Xnamer†rh$jE†r‘h<X	bogostripr’†r“hj½†r”h€XDatar•†r–hjÁ†r—hjÓ†r˜j%j†r™h<Xmoderš†r›h$jE†rœh<Xactiver†ržhj†rŸhjÓ†r j%X

            r¡†r¢hjˆr£h€XUPlayerr¤†r¥j%j†r¦hjR†r§j%j†r¨h<X
delete_playerr©†rªhj½†r«h€XPlayerr¬†r­hjÓ†r®j%j†r¯h€XPlayersr°†r±hjÁ†r²hjø†r³j%X
    r´†rµjÌXendr¶†r·hjÆr¸j%X

r¹†rºj[XD%% Utility methods to clean up the name before we apply it.  Called
r»†r¼j[XG%% bogostrip rather than strip because it returns the first continuous
r½†r¾j[X>%% block of non-matching characters rather stripping matching
r¿†rÀj[X&%% characters off the front and back.
rÁ†rÂj%jņrÃj$X	bogostriprĆrÅhj½†rÆh€XStringrdžrÈhjÁ†rÉj%j†rÊh$j¹†rËh$jg†rÌj%X
    r͆rÎh<X	bogostriprφrÐhj½†rÑh€XStringrÒ†rÓhjÓ†rÔj%j†rÕjqj†rÖj«X\rr׆rØj«X\nrÙ†rÚj«X\trÛ†rÜjqj†rÝjqj†rÞhjÁ†rßhjÆràj%X

rá†râj$X	bogostriprã†rähj½†råh€XStringræ†rçhjÓ†rèj%j†réh€XCharsrê†rëhjÁ†rìj%j†ríh$j¹†rîh$jg†rïj%X
    rð†rñh€X	LStrippedrò†rój%j†rôh$jE†rõj%j†röh¾Xstringr÷†røhjx†rùj$Xsubstrrú†rûhj½†rüh€XStringrý†rþhjÓ†rÿj%j†r	h¾Xstringr	†r	hjx†r	j$Xspanr	†r	hj½†r	h€XStringr	†r	hjÓ†r		j%j†r
	h€XCharsr	†r	hjÁ†r
	h$X+r	†r	jQjцr	hjÁ†r	hjÓ†r	j%X
    r	†r	h¾Xstringr	†r	hjx†r	j$Xsubstrr	†r	hj½†r	h€X	LStrippedr	†r	hjÓ†r	j%j†r	jQjцr	hjÓ†r 	j%j†r!	h¾Xstringr"	†r#	hjx†r$	j$Xcspanr%	†r&	hj½†r'	h€X	LStrippedr(	†r)	hjÓ†r*	j%j†r+	h€XCharsr,	†r-	hjÁ†r.	hjÁ†r/	hjÆr0	j%X

r1	†r2	j[XG%% Here we have some extra code to test other bits of pygments' Erlang
r3	†r4	j[X
%% lexer.
r5	†r6	j%jņr7	j$X
get_timestampr8	†r9	hj½†r:	hjÁ†r;	j%j†r<	h$j¹†r=	h$jg†r>	j%X
    r?	†r@	hj†rA	hj†rB	h€XYearrC	†rD	hjÓ†rE	h€XMonthrF	†rG	hjÓ†rH	e(h€XDayrI	†rJ	hj†rK	hjÓ†rL	hj†rM	h€XHourrN	†rO	hjÓ†rP	h€XMinrQ	†rR	hjÓ†rS	h€XSecrT	†rU	hj†rV	hj†rW	j%j†rX	h$jE†rY	j%j†rZ	h¾Xerlangr[	†r\	hjx†r]	j$X
universaltimer^	†r_	hj½†r`	hjÁ†ra	hjÓ†rb	j%X
    rc	†rd	h¾Xlistsre	†rf	hjx†rg	j$Xflattenrh	†ri	hj½†rj	h¾Xio_librk	†rl	hjx†rm	j$Xformatrn	†ro	hj½†rp	j%X
                    rq	†rr	jqj†rs	jwX~4.10.0Brt	†ru	jqj¹†rv	jwX~2.10.0Brw	†rx	jqj¹†ry	jwX~2.10.0Brz	†r{	jqXTr|	†r}	jwX~2.10.0Br~	†r	jqjx†r€	jwX~2.10.0Br	†r‚	jqjx†rƒ	jwX~2.10.0Br„	†r…	jqXZr†	†r‡	jqj†rˆ	hjÓ†r‰	j%X
                    rŠ	†r‹	hjˆrŒ	h€XYearr	†rŽ	hjÓ†r	j%j†r	h€XMonthr‘	†r’	hjÓ†r“	j%j†r”	h€XDayr•	†r–	hjÓ†r—	j%j†r˜	h€XHourr™	†rš	hjÓ†r›	j%j†rœ	h€XMinr	†rž	hjÓ†rŸ	j%j†r 	h€XSecr¡	†r¢	hjø†r£	hjÁ†r¤	hjÁ†r¥	hjÆr¦	j%X

r§	†r¨	j$Xa_binaryr©	†rª	hj½†r«	hjÁ†r¬	j%j†r­	h$j¹†r®	h$jg†r¯	j%X
    r°	†r±	h$X<r²	†r³	h$j²	†r´	j%j†rµ	jQX100r¶	†r·	hjx†r¸	jQX16r¹	†rº	h$jφr»	h<Xintegerr¼	†r½	hjÓ†r¾	j%j†r¿	jQX16#7frÀ	†rÁ	j%j†rÂ	h$jg†rÃ	h$jg†rÄ	hjÆrÅ	j%X

rÆ	†rÇ	j$Xa_list_comprehensionrÈ	†rÉ	hj½†rÊ	hjÁ†rË	j%j†rÌ	h$j¹†rÍ	h$jg†rÎ	j%X
    rÏ	†rÐ	hjˆrÑ	h€XXrÒ	†rÓ	h$X*rÔ	†rÕ	jQX2rÖ	†r×	j%j†rØ	hjR†rÙ	hjR†rÚ	j%j†rÛ	h€jÒ	†rÜ	j%j†rÝ	h$j²	†rÞ	h$j¹†rß	j%j†rà	hjˆrá	jQjцrâ	hjÓ†rã	jQjÖ	†rä	hjÓ†rå	jQX3ræ	†rç	hjø†rè	hjø†ré	hjÆrê	j%X

rë	†rì	j$Xa_maprí	†rî	hj½†rï	hjÁ†rð	j%j†rñ	h$j¹†rò	h$jg†ró	j%X
    rô	†rõ	h€XM0rö	†r÷	j%j†rø	h$jE†rù	j%j†rú	hX#{rû	†rü	j%j†rý	h<Xarþ	†rÿ	j%j†r
h$jE†r
h$jg†r
j%j†r
jQjцr
hjÓ†r
j%j†r
h<Xbr
†r
j%j†r	
h$jE†r

h$jg†r
j%j†r
jQjÖ	†r
j%j†r
hj†r
hjÓ†r
j%X
    r
†r
h€XM1r
†r
j%j†r
h$jE†r
j%j†r
h€XM0r
†r
hX#{r
†r
j%j†r
h<j
†r
j%j†r
hjx†r
h$jE†r 
j%j†r!
jQX200r"
†r#
j%j†r$
hj†r%
hjÆr&
j%X

r'
†r(
j$Xescape_sequencesr)
†r*
hj½†r+
hjÁ†r,
j%j†r-
h$j¹†r.
h$jg†r/
j%X
    r0
†r1
hjˆr2
j%j†r3
jqj†r4
j«X\br5
†r6
j«X\dr7
†r8
j«X\er9
†r:
j«X\fr;
†r<
j«X\nr=
†r>
j«X\rr?
†r@
j«X\srA
†rB
j«X\trC
†rD
j«X\vrE
†rF
j«X\'rG
†rH
j«X\"rI
†rJ
j«X\\rK
†rL
jqj†rM
j%X
    rN
†rO
hjÓ†rP
j%j†rQ
jqj†rR
j«X\1rS
†rT
j«X\12rU
†rV
j«X\123rW
†rX
jqj†rY
j%j†rZ
j[X% octal
r[
†r\
j%X    r]
†r^
hjÓ†r_
j%j†r`
jqj†ra
j«X\x01rb
†rc
jqj†rd
j%X      re
†rf
j[X% short hex
rg
†rh
j%X    ri
†rj
hjÓ†rk
j%j†rl
jqj†rm
j«X\x{fff}rn
†ro
jqj†rp
j%X   rq
†rr
j[X% long hex
rs
†rt
j%X    ru
†rv
hjÓ†rw
j%j†rx
jqj†ry
j«X\^arz
†r{
j«X\^Ar|
†r}
jqj†r~
j%X    r
†r€
j[X% control characters
r
†r‚
j%X    rƒ
†r„
hjø†r…
hjÆr†
j%X

r‡
†rˆ
j$Xmapr‰
†rŠ
hj½†r‹
h€XFunrŒ
†r
hjÓ†rŽ
j%j†r
hjˆr
h€XHr‘
†r’
hjR†r“
h€j|	†r”
hjø†r•
hjÁ†r–
j%j†r—
h$j¹†r˜
h$jg†r™
j%X
    rš
†r›
hjˆrœ
h€XFunr
†rž
hj½†rŸ
h€j‘
†r 
hjÁ†r¡
j%j†r¢
hjR†r£
j%j†r¤
h<Xmapr¥
†r¦
hj½†r§
h€XFunr¨
†r©
hjÓ†rª
j%j†r«
h€j|	†r¬
hjÁ†r­
hjø†r®
hj†r¯
j%X

r°
†r±
j$Xmapr²
†r³
hj½†r´
h€XFunrµ
†r¶
hjÓ†r·
j%j†r¸
hjˆr¹
hjø†rº
hjÁ†r»
j%j†r¼
h$j¹†r½
h$jg†r¾
j%X
    r¿
†rÀ
hjˆrÁ
hjø†rÂ
hjÆrÃ
j%X

rÄ
†rÅ
j[X!%% pmap, just because it's cool.
rÆ
†rÇ
j%jņrÈ
j$XpmaprÉ
†rÊ
hj½†rË
h€XFrÌ
†rÍ
hjÓ†rÎ
j%j†rÏ
h€XLrÐ
†rÑ
hjÁ†rÒ
j%j†rÓ
h$j¹†rÔ
h$jg†rÕ
j%X
    rÖ
†r×
h€XParentrØ
†rÙ
j%j†rÚ
h$jE†rÛ
j%j†rÜ
h<XselfrÝ
†rÞ
hj½†rß
hjÁ†rà
hjÓ†rá
j%X
    râ
†rã
hjˆrä
jÌXreceiverå
†ræ
j%j†rç
hj†rè
h€XPidré
†rê
hjÓ†rë
j%j†rì
h€XResultrí
†rî
hj†rï
j%j†rð
h$j¹†rñ
h$jg†rò
j%X
             ró
†rô
h€XResultrõ
†rö
j%X
     r÷
†rø
jÌXendrù
†rú
j%j†rû
hjR†rü
hjR†rý
j%j†rþ
h€XPidrÿ
†rj%j†rh$j²	†rh$j¹†rj%j†rhjˆrhõXspawnr†rhj½†rjÌXfunr	†r
hj½†rhjÁ†rj%j†r
h$j¹†rh$jg†rj%X#
                                  r†rh€XParentr†rj%j†rh$j÷†rj%j†rhj†rh<Xselfr†rhj½†rhjÁ†rhjÓ†rj%j†rh€jÌ
†rhj½†rh€jÒ	†r hjÁ†r!hj†r"j%X 
                          r#†r$jÌXendr%†r&hjÁ†r'j%j†r(hjR†r)hjR†r*j%j†r+h€jÒ	†r,j%j†r-h$j²	†r.h$j¹†r/j%j†r0h€jÐ
†r1hjø†r2hjø†r3hjÆr4j%jņr5e.