---input---
# Server: ruby p2p.rb password server server-uri merge-servers
# Sample: ruby p2p.rb foobar server druby://localhost:1337 druby://foo.bar:1337
# Client: ruby p2p.rb password client server-uri download-pattern
# Sample: ruby p2p.rb foobar client druby://localhost:1337 *.rb
require'drb';F,D,C,P,M,U,*O=File,Class,Dir,*ARGV;def s(p)F.split(p[/[^|].*/])[-1
]end;def c(u);DRbObject.new((),u)end;def x(u)[P,u].hash;end;M=="client"&&c(U).f(
x(U)).each{|n|p,c=x(n),c(n);(c.f(p,O[0],0).map{|f|s f}-D["*"]).each{|f|F.open(f,
"w"){|o|o<<c.f(p,f,1)}}}||(DRb.start_service U,C.new{def f(c,a=[],t=2)c==x(U)&&(
t==0&&D[s(a)]||t==1&&F.read(s(a))||p(a))end;def y()(p(U)+p).each{|u|c(u).f(x(u),
p(U))rescue()};self;end;private;def p(x=[]);O.push(*x).uniq!;O;end}.new.y;sleep)

---tokens---
'# Server: ruby p2p.rb password server server-uri merge-servers' Comment.Single
'\n'          Text

'# Sample: ruby p2p.rb foobar server druby://localhost:1337 druby://foo.bar:1337' Comment.Single
'\n'          Text

'# Client: ruby p2p.rb password client server-uri download-pattern' Comment.Single
'\n'          Text

'# Sample: ruby p2p.rb foobar client druby://localhost:1337 *.rb' Comment.Single
'\n'          Text

'require'     Name.Builtin
"'"           Literal.String.Single
'drb'         Literal.String.Single
"'"           Literal.String.Single
';'           Punctuation
'F'           Name
','           Punctuation
'D'           Name
','           Punctuation
'C'           Name
','           Punctuation
'P'           Name
','           Punctuation
'M'           Name
','           Punctuation
'U'           Name
','           Punctuation
'*'           Operator
'O'           Name
'='           Operator
'File'        Name.Constant
','           Punctuation
'Class'       Name.Constant
','           Punctuation
'Dir'         Name.Constant
','           Punctuation
'*'           Operator
'ARGV'        Name.Constant
';'           Punctuation
'def'         Keyword
' '           Text
's'           Name.Function
'('           Punctuation
'p'           Name.Builtin
')'           Punctuation
'F'           Name
'.'           Operator
'split'       Name
'('           Punctuation
'p'           Name.Builtin
'['           Operator
'/'           Literal.String.Regex
'[^|].*'      Literal.String.Regex
'/'           Literal.String.Regex
']'           Operator
')'           Punctuation
'['           Operator
'-'           Operator
'1'           Literal.Number.Integer
'\n'          Text

']'           Operator
'end'         Keyword
';'           Punctuation
'def'         Keyword
' '           Text
'c'           Name.Function
'('           Punctuation
'u'           Name
')'           Punctuation
';'           Punctuation
'DRbObject'   Name.Constant
'.'           Operator
'new'         Name
'('           Punctuation
'('           Punctuation
')'           Punctuation
','           Punctuation
'u'           Name
')'           Punctuation
'end'         Keyword
';'           Punctuation
'def'         Keyword
' '           Text
'x'           Name.Function
'('           Punctuation
'u'           Name
')'           Punctuation
'['           Operator
'P'           Name
','           Punctuation
'u'           Name
']'           Operator
'.'           Operator
'hash'        Name
';'           Punctuation
'end'         Keyword
';'           Punctuation
'M'           Name
'=='          Operator
'"'           Literal.String.Double
'client'      Literal.String.Double
'"'           Literal.String.Double
'&&'          Operator
'c'           Name
'('           Punctuation
'U'           Name
')'           Punctuation
'.'           Operator
'f'           Name
'('           Punctuation
'\n'          Text

'x'           Name
'('           Punctuation
'U'           Name
')'           Punctuation
')'           Punctuation
'.'           Operator
'each'        Name
'{'           Punctuation
'|'           Operator
'n'           Name
'|'           Operator
'p'           Name.Builtin
','           Punctuation
'c'           Name
'='           Operator
'x'           Name
'('           Punctuation
'n'           Name
')'           Punctuation
','           Punctuation
'c'           Name
'('           Punctuation
'n'           Name
')'           Punctuation
';'           Punctuation
'('           Punctuation
'c'           Name
'.'           Operator
'f'           Name
'('           Punctuation
'p'           Name.Builtin
','           Punctuation
'O'           Name
'['           Operator
'0'           Literal.Number.Integer
']'           Operator
','           Punctuation
'0'           Literal.Number.Integer
')'           Punctuation
'.'           Operator
'map'         Name
'{'           Punctuation
'|'           Operator
'f'           Name
'|'           Operator
's'           Name
' '           Text
'f'           Name
'}'           Punctuation
'-'           Operator
'D'           Name
'['           Operator
'"'           Literal.String.Double
'*'           Literal.String.Double
'"'           Literal.String.Double
']'           Operator
')'           Punctuation
'.'           Operator
'each'        Name
'{'           Punctuation
'|'           Operator
'f'           Name
'|'           Operator
'F'           Name
'.'           Operator
'open'        Name
'('           Punctuation
'f'           Name
','           Punctuation
'\n'          Text

'"'           Literal.String.Double
'w'           Literal.String.Double
'"'           Literal.String.Double
')'           Punctuation
'{'           Punctuation
'|'           Operator
'o'           Name
'|'           Operator
'o'           Name
'<<'          Operator
'c'           Name
'.'           Operator
'f'           Name
'('           Punctuation
'p'           Name.Builtin
','           Punctuation
'f'           Name
','           Punctuation
'1'           Literal.Number.Integer
')'           Punctuation
'}'           Punctuation
'}'           Punctuation
'}'           Punctuation
'||'          Operator
'('           Punctuation
'DRb'         Name.Constant
'.'           Operator
'start_service' Name
' '           Text
'U'           Name
','           Punctuation
'C'           Name
'.'           Operator
'new'         Name
'{'           Punctuation
'def'         Keyword
' '           Text
'f'           Name.Function
'('           Punctuation
'c'           Name
','           Punctuation
'a'           Name
'='           Operator
'['           Operator
']'           Operator
','           Punctuation
't'           Name
'='           Operator
'2'           Literal.Number.Integer
')'           Punctuation
'c'           Name
'=='          Operator
'x'           Name
'('           Punctuation
'U'           Name
')'           Punctuation
'&&'          Operator
'('           Punctuation
'\n'          Text

't'           Name
'=='          Operator
'0'           Literal.Number.Integer
'&&'          Operator
'D'           Name
'['           Operator
's'           Name
'('           Punctuation
'a'           Name
')'           Punctuation
']'           Operator
'||'          Operator
't'           Name
'=='          Operator
'1'           Literal.Number.Integer
'&&'          Operator
'F'           Name
'.'           Operator
'read'        Name
'('           Punctuation
's'           Name
'('           Punctuation
'a'           Name
')'           Punctuation
')'           Punctuation
'||'          Operator
'p'           Name.Builtin
'('           Punctuation
'a'           Name
')'           Punctuation
')'           Punctuation
'end'         Keyword
';'           Punctuation
'def'         Keyword
' '           Text
'y'           Name.Function
'('           Punctuation
')'           Punctuation
'('           Punctuation
'p'           Name.Builtin
'('           Punctuation
'U'           Name
')'           Punctuation
'+'           Operator
'p'           Name.Builtin
')'           Punctuation
'.'           Operator
'each'        Name
'{'           Punctuation
'|'           Operator
'u'           Name
'|'           Operator
'c'           Name
'('           Punctuation
'u'           Name
')'           Punctuation
'.'           Operator
'f'           Name
'('           Punctuation
'x'           Name
'('           Punctuation
'u'           Name
')'           Punctuation
','           Punctuation
'\n'          Text

'p'           Name.Builtin
'('           Punctuation
'U'           Name
')'           Punctuation
')'           Punctuation
'rescue'      Keyword
'('           Punctuation
')'           Punctuation
'}'           Punctuation
';'           Punctuation
'self'        Name.Builtin
';'           Punctuation
'end'         Keyword
';'           Punctuation
'private'     Keyword.Pseudo
';'           Punctuation
'def'         Keyword
' '           Text
'p'           Name.Function
'('           Punctuation
'x'           Name
'='           Operator
'['           Operator
']'           Operator
')'           Punctuation
';'           Punctuation
'O'           Name
'.'           Operator
'push'        Name
'('           Punctuation
'*'           Operator
'x'           Name
')'           Punctuation
'.'           Operator
'uniq!'       Name
';'           Punctuation
'O'           Name
';'           Punctuation
'end'         Keyword
'}'           Punctuation
'.'           Operator
'new'         Name
'.'           Operator
'y'           Name
';'           Punctuation
'sleep'       Name.Builtin
')'           Punctuation
'\n'          Text
