;**************************************************************************************
;PremaNhybrid (November 27, 2010)
;mIRC Clone War Revenge Kick with Single and/or Shifting Socket
;
;Main features:
; + mIRC v6.21 or later is required
; + Double hash table, separate enemy list, auto-reopen on died socket, one clone join
; + Anti-deop, anti-ban, auto-revenge, fishing mode
; + Multi server, multi port, multi spoof (designed to run on AllNetwork IRC Servers)
;
;Notes:
; > Combo kick is activated while master nick is on war channel
; > Clone's anti-ban is activated while master nick is on base channel
; > Recommended to change shift/single.nick, iden, serv, port, pass, base, chan
;
;irc.allnetwork.org 6667, #war
;Right to copy by PremaN
;**************************************************************************************
alias -l shift.nick { return Pr3maNshift Prem4Nshift PremaN5hift PremaNsh1ft Pr3m4Nshift Pr3maN5hift Pr3maNsh1ft Prem4N5hift Prem4Nsh1ft PremaN5h1ft }
alias -l shift.iden { return 01 02 03 04 05 06 07 08 09 10 }
alias -l shift.serv { return irc.velo.net.id irc.velo.net.id irc.velo.net.id irc.velo.net.id irc.velo.net.id irc.velo.net.id irc.velo.net.id irc.velo.net.id irc.velo.net.id irc.velo.net.id }
alias -l shift.port { return 6667 6667 6667 6667 6667 6667 6667 6667 6667 6667 }
alias -l shift.pass { return amboy08 amboy08 amboy08 amboy08 amboy08 amboy08 amboy08 amboy08 amboy08 amboy08 }
alias -l shift.base { return #viruses }
alias -l shift.chan { return #gowar }
alias -l single.nick { return PremaNsingle }
alias -l single.iden { return lagi }
alias -l single.serv { return irc.indowebster.com }
alias -l single.port { return 6667 }
alias -l single.pass { return idws52 }
alias -l single.base { return #shift }
alias -l single.chan { return #war }
on *:start:{
.fullname $+ $chr(32) $+ 4,1 «®¤0[PLANETWORK]4¤®» $+ $chr(32) $+
hfree -w enemy.*
unset %shift.* %single.* %activemode
}
on *:connect:{ raw -q join $shift.base }
on *:exit:{
hfree -w enemy.*
unset %shift.* %single.* %activemode
}
ctcp *:version:*:{
ctcpreply $nick version $+ $chr(32) $+ 4,1 «®¤0[PLANETWORK]4¤®» 14http://15www.hawkee.com14/snippet/4404/ $+ $chr(32) $+
}
on !*:deop:#:{
if ($opnick == $me) {
ChanServ op $chan $opnick
if (((%activemode == shift) || (%activemode == hybrid)) && ($var(%shift.m*,0))) {
if (($chan == $shift.chan) && ($nick != ChanServ) && ($nick != $single.nick) && (!$findtok($shift.nick,$nick,32))) {
if ((!$sock(%single.a)) || ($shift.chan != $single.chan)) {
set %shift.r $nick
if (!$hfind(enemy.nick.shift,$nick,0,W)) { hadd -m enemy.nick.shift $nick }
if (!$sock($gettok($shift.nick,%shift.d,32))) {
var %shift.q = 1
while (%shift.q <= $numtok($shift.nick,32)) {
if ($sock($gettok($shift.nick,%shift.q,32))) {
sockwrite -nt $gettok($shift.nick,%shift.q,32) join $shift.chan
sockwrite -nt $gettok($shift.nick,%shift.q,32) mode $shift.chan +o $opnick
set %shift.d %shift.q
break
}
inc %shift.q
}
}
else { sockwrite -nt $gettok($shift.nick,%shift.d,32) kick $shift.chan $nick : $+ $chr(32) $+ 4,1 «®¤0[PLANETWORK]4¤®» $+ $chr(32) $+ }
}
}
}
if (((%activemode == single) || (%activemode == hybrid)) && ($sock($single.nick))) {
if (($chan == $single.chan) && ($nick != ChanServ) && (!$findtok($shift.nick,$nick,32)) && ($nick != $single.nick)) {
if ((!$sock($gettok($shift.nick,%shift.d,32))) || ($single.chan != $shift.chan)) {
set %single.f $nick
if (!$hfind(enemy.nick.single,$nick,0,W)) { hadd -m enemy.nick.single $nick }
if (!$sock(%single.a)) {
sockwrite -nt $single.nick join $single.chan
sockwrite -nt $single.nick mode $single.chan +o $opnick
set %single.a $single.nick
}
else { sockwrite -nt $single.nick kick $single.chan $nick : $+ $chr(32) $+ 4,1 «®¤0[PLANETWORK]4¤®» $+ $chr(32) $+ }
}
}
}
}
}
on !*:ban:#:{
if ($banmask iswm $address($me,5)) {
if ($me !isop $chan) { ChanServ op $chan $me }
raw -q mode $chan -b $banmask
if (((%activemode == shift) || (%activemode == hybrid)) && ($var(%shift.m*,0))) {
if (($chan == $shift.chan) && ($nick != ChanServ) && ($nick != $single.nick) && (!$findtok($shift.nick,$nick,32))) {
if ((!$sock(%single.a)) || ($shift.chan != $single.chan)) {
set %shift.r $nick
if (!$hfind(enemy.nick.shift,$nick,0,W)) { hadd -m enemy.nick.shift $nick }
if (!$sock($gettok($shift.nick,%shift.d,32))) {
var %shift.p = 1
while (%shift.p <= $numtok($shift.nick,32)) {
if ($sock($gettok($shift.nick,%shift.p,32))) {
sockwrite -nt $gettok($shift.nick,%shift.p,32) join $shift.chan
sockwrite -nt $gettok($shift.nick,%shift.p,32) mode $shift.chan -b $banmask
set %shift.d %shift.p
break
}
inc %shift.p
}
}
else { sockwrite -nt $gettok($shift.nick,%shift.d,32) kick $shift.chan $nick : $+ $chr(32) $+ 4,1 «®¤0[PLANETWORK]4¤®» $+ $chr(32) $+ }
}
}
}
if (((%activemode == single) || (%activemode == hybrid)) && ($sock($single.nick))) {
if (($chan == $single.chan) && ($nick != ChanServ) && (!$findtok($shift.nick,$nick,32)) && ($nick != $single.nick)) {
if ((!$sock($gettok($shift.nick,%shift.d,32))) || ($single.chan != $shift.chan)) {
set %single.f $nick
if (!$hfind(enemy.nick.single,$nick,0,W)) { hadd -m enemy.nick.single $nick }
if (!$sock(%single.a)) {
sockwrite -nt $single.nick join $single.chan
sockwrite -nt $single.nick mode $single.chan -b $banmask
set %single.a $single.nick
}
else { sockwrite -nt $single.nick kick $single.chan $nick : $+ $chr(32) $+ 4,1 «®¤0[PLANETWORK]4¤®» $+ $chr(32) $+ }
}
}
}
}
else {
if (((%activemode == shift) || (%activemode == hybrid)) && ($var(%shift.m*,0))) {
if (($findtok($shift.nick,$ial($banmask).nick,32))) {
if ($me !isop $chan) { ChanServ op $chan $me }
raw -q mode $chan -b $banmask
if (($chan == $shift.chan) && ($nick != ChanServ) && ($nick != $single.nick) && (!$findtok($shift.nick,$nick,32))) {
if ((!$sock(%single.a)) || ($shift.chan != $single.chan)) {
set %shift.r $nick
if (!$hfind(enemy.nick.shift,$nick,0,W)) { hadd -m enemy.nick.shift $nick }
if (!$sock($gettok($shift.nick,%shift.d,32))) {
var %shift.o = 1
while (%shift.o <= $numtok($shift.nick,32)) {
if ($sock($gettok($shift.nick,%shift.o,32))) {
sockwrite -nt $gettok($shift.nick,%shift.o,32) join $shift.chan
sockwrite -nt $gettok($shift.nick,%shift.o,32) mode $shift.chan -b $banmask
set %shift.d %shift.o
break
}
inc %shift.o
}
}
else { sockwrite -nt $gettok($shift.nick,%shift.d,32) kick $shift.chan $nick : $+ $chr(32) $+ 4,1 «®¤0[PLANETWORK]4¤®» $+ $chr(32) $+ }
}
}
}
}
if (((%activemode == single) || (%activemode == hybrid)) && ($sock($single.nick))) {
if ($banmask iswm $address($single.nick,5)) {
if ($me !isop $chan) { ChanServ op $chan $me }
raw -q mode $chan -b $banmask
if (($chan == $single.chan) && ($nick != ChanServ) && (!$findtok($shift.nick,$nick,32)) && ($nick != $single.nick)) {
if ((!$sock($gettok($shift.nick,%shift.d,32))) || ($single.chan != $shift.chan)) {
set %single.f $nick
if (!$hfind(enemy.nick.single,$nick,0,W)) { hadd -m enemy.nick.single $nick }
if (!$sock(%single.a)) {
sockwrite -nt $single.nick join $single.chan
sockwrite -nt $single.nick mode $single.chan -b $banmask
set %single.a $single.nick
}
else { sockwrite -nt $single.nick kick $single.chan $nick : $+ $chr(32) $+ 4,1 «®¤0[PLANETWORK]4¤®» $+ $chr(32) $+ }
}
}
}
}
}
}
on !*:kick:#:{
if ($knick == $me) {
if (((%activemode == shift) || (%activemode == hybrid)) && ($var(%shift.m*,0))) {
if ($chan == $shift.chan) {
raw -q join $shift.chan
if (($nick != ChanServ) && ($nick != $single.nick) && (!$findtok($shift.nick,$nick,32))) {
if ((!$sock(%single.a)) || ($shift.chan != $single.chan)) {
set %shift.r $nick
if (!$hfind(enemy.nick.shift,$nick,0,W)) { hadd -m enemy.nick.shift $nick }
if (!$sock($gettok($shift.nick,%shift.d,32))) {
var %shift.n = 1
while (%shift.n <= $numtok($shift.nick,32)) {
if ($sock($gettok($shift.nick,%shift.n,32))) {
sockwrite -nt $gettok($shift.nick,%shift.n,32) join $shift.chan
set %shift.d %shift.n
break
}
inc %shift.n
}
}
else { sockwrite -nt $gettok($shift.nick,%shift.d,32) kick $shift.chan $nick : $+ $chr(32) $+ 4,1 «®¤0[PLANETWORK]4¤®» $+ $chr(32) $+ }
}
}
}
}
if (((%activemode == single) || (%activemode == hybrid)) && ($sock($single.nick))) {
if ($chan == $single.chan) {
raw -q join $single.chan
if (($nick != ChanServ) && (!$findtok($shift.nick,$nick,32)) && ($nick != $single.nick)) {
if ((!$sock($gettok($shift.nick,%shift.d,32))) || ($single.chan != $shift.chan)) {
set %single.f $nick
if (!$hfind(enemy.nick.single,$nick,0,W)) { hadd -m enemy.nick.single $nick }
if (!$sock(%single.a)) {
sockwrite -nt $single.nick join $single.chan
set %single.a $single.nick
}
else { sockwrite -nt $single.nick kick $single.chan $nick : $+ $chr(32) $+ 4,1 «®¤0[PLANETWORK]4¤®» $+ $chr(32) $+ }
}
}
}
}
}
}
on *:quit:{
if (((%activemode == shift) || (%activemode == hybrid)) && ($var(%shift.m*,0))) {
if (($findtok($shift.nick,$nick,32)) && (timeout isin $1-)) {
sockclose $nick
unset %shift.m [ $+ [ $findtok($shift.nick,$nick,32) ] ]
echo -s $chr(35) $+ $findtok($shift.nick,$nick,32) disconnected
var %shift.k = $findtok($shift.nick,$nick,32)
.timershift $+ %shift.k 1 $calc(%shift.k * 5) sockopen $gettok($shift.nick,%shift.k,32) $gettok($shift.serv,%shift.k,32) $gettok($shift.port,%shift.k,32)
if ($sock($gettok($shift.nick,%shift.d,32))) { sockwrite -nt $gettok($shift.nick,%shift.d,32) part $shift.chan : $+ $chr(32) $+ 4,1 «®¤0[PLANETWORK]4¤®» $+ $chr(32) $+ }
while (%shift.d <= $numtok($shift.nick,32)) {
if (%shift.d == $numtok($shift.nick,32)) { set %shift.d 0 }
if ($sock($gettok($shift.nick,$calc(%shift.d + 1),32))) {
sockwrite -nt $gettok($shift.nick,$calc(%shift.d + 1),32) join $shift.chan
set %shift.d $calc(%shift.d + 1)
break
}
inc %shift.d
}
}
}
if (((%activemode == single) || (%activemode == hybrid)) && ($sock($single.nick))) {
if (($nick == $single.nick) && (timeout isin $1-)) {
sockclose $nick
echo -s socket disconnected
.timersingleopen 1 5 sockopen $single.nick $single.serv $single.port
}
}
}
on *:sockopen:*:{
if (((%activemode == shift) || (%activemode == hybrid)) && ($findtok($shift.nick,$sockname,32))) {
set %shift.m [ $+ [ $findtok($shift.nick,$sockname,32) ] ] $sockname
if ($sockerr > 0) {
sockclose $sockname
unset %shift.m [ $+ [ $findtok($shift.nick,$sockname,32) ] ]
return
}
echo -s $chr(35) $+ $findtok($shift.nick,$sockname,32) connected: $sockname
sockwrite -nt $sockname $1- nick $sockname
sockwrite -nt $sockname user $gettok($shift.iden,$findtok($shift.nick,$sockname,32),32) x x :0,1 Pr4e0maNhybrid
sockwrite -nt $sockname pass $gettok($shift.pass,$findtok($shift.nick,$sockname,32),32)
}
if (((%activemode == single) || (%activemode == hybrid)) && ($sockname == $single.nick)) {
if ($sockerr > 0) {
sockclose $sockname
return
}
echo -s socket connected: $sockname
sockwrite -nt $sockname $1- nick $sockname
sockwrite -nt $sockname user $single.iden x x :0,1 Pr4e0maNhybrid
sockwrite -nt $sockname pass $single.pass
}
}
on *:sockclose:*:{
if (((%activemode == shift) || (%activemode == hybrid)) && ($findtok($shift.nick,$sockname,32))) {
unset %shift.m [ $+ [ $findtok($shift.nick,$sockname,32) ] ]
echo -s $chr(35) $+ $findtok($shift.nick,$sockname,32) disconnected
var %shift.l = $findtok($shift.nick,$sockname,32)
.timershift $+ %shift.l 1 $calc(%shift.l * 5) sockopen $gettok($shift.nick,%shift.l,32) $gettok($shift.serv,%shift.l,32) $gettok($shift.port,%shift.l,32)
if ($sock($gettok($shift.nick,%shift.d,32))) { sockwrite -nt $gettok($shift.nick,%shift.d,32) part $shift.chan : $+ $chr(32) $+ 4,1 «®¤0[PLANETWORK]4¤®» $+ $chr(32) $+ }
while (%shift.d <= $numtok($shift.nick,32)) {
if (%shift.d == $numtok($shift.nick,32)) { set %shift.d 0 }
if ($sock($gettok($shift.nick,$calc(%shift.d + 1),32))) {
sockwrite -nt $gettok($shift.nick,$calc(%shift.d + 1),32) join $shift.chan
set %shift.d $calc(%shift.d + 1)
break
}
inc %shift.d
}
}
if (((%activemode == single) || (%activemode == hybrid)) && ($sockname == $single.nick)) {
echo -s socket disconnected
.timersingleopen 1 5 sockopen $single.nick $single.serv $single.port
}
}
on *:sockread:*:{
if (((%activemode == shift) || (%activemode == hybrid)) && ($findtok($shift.nick,$sockname,32))) {
if ($sockerr > 0) {
sockclose $sockname
unset %shift.m [ $+ [ $findtok($shift.nick,$sockname,32) ] ]
return
}
:shift
sockread -f %shift.i
if ($sockbr == 0) { return }
tokenize 32 %shift.i
if (($2 == mode) && ($3 == $shift.chan)) {
if (+o isin $4) {
if (($5 == $sockname) || ($6 == $sockname) || ($7 == $sockname) || ($8 == $sockname)) {
if ($me ison $shift.chan) {
unset %shift.r
var %shift.j = $nick($shift.chan,0)
while %shift.j {
if ((!$findtok($shift.nick,$nick($shift.chan,%shift.j),32)) && ($nick($shift.chan,%shift.j) != $single.nick) && ($hfind(enemy.nick.shift,$nick($shift.chan,%shift.j),0,W))) { sockwrite -nt $sockname kick $shift.chan $nick($shift.chan,%shift.j) : $+ $chr(32) $+ 4,1 «®¤0[PLANETWORK]4¤®» $+ $chr(32) $+ }
dec %shift.j
}
}
else {
if ((!$findtok($shift.nick,%shift.r,32)) && (%shift.r != $single.nick)) { sockwrite -nt $sockname kick $shift.chan %shift.r : $+ $chr(32) $+ 4,1 «®¤0[PLANETWORK]4¤®» $+ $chr(32) $+ }
unset %shift.r
}
}
}
elseif (-o isin $4) {
if (($gettok($mid($1,2,$len($1)),1,33) != $sockname) && ($gettok($mid($1,2,$len($1)),1,33) != $single.nick) && ($gettok($mid($1,2,$len($1)),1,33) != $me)) {
if (($5 == $sockname) || ($6 == $sockname) || ($7 == $sockname) || ($8 == $sockname)) {
sockwrite -nt $sockname ChanServ op $shift.chan $sockname
if ($gettok($mid($1,2,$len($1)),1,33) != ChanServ) {
if ($me !ison $shift.chan) { set %shift.r $gettok($mid($1,2,$len($1)),1,33) }
if (!$hfind(enemy.nick.shift,$gettok($mid($1,2,$len($1)),1,33),0,W)) { hadd -m enemy.nick.shift $gettok($mid($1,2,$len($1)),1,33) }
if (($gettok($mid($1,2,$len($1)),2,$asc(@)) != $gettok($mid($address($sockname,5),2,$len($address($sockname,5))),2,$asc(@))) && ($gettok($mid($1,2,$len($1)),2,$asc(@)) != $gettok($mid($address($single.nick,5),2,$len($address($single.nick,5))),2,$asc(@))) && ($gettok($mid($1,2,$len($1)),2,$asc(@)) != $gettok($mid($address($me,5),2,$len($address($me,5))),2,$asc(@))) && (!$hfind(enemy.host.shift,$gettok($mid($1,2,$len($1)),2,$asc(@)),0,W))) { hadd -m enemy.host.shift $gettok($mid($1,2,$len($1)),2,$asc(@)) }
sockwrite -nt $sockname kick $shift.chan $gettok($mid($1,2,$len($1)),1,33) : $+ $chr(32) $+ 4,1 «®¤0[PLANETWORK]4¤®» $+ $chr(32) $+
}
}
if (($5 == $me) || ($6 == $me) || ($7 == $me) || ($8 == $me)) {
sockwrite -nt $sockname ChanServ op $shift.chan $me
if ($gettok($mid($1,2,$len($1)),1,33) != ChanServ) {
if ($me !ison $shift.chan) { set %shift.r $gettok($mid($1,2,$len($1)),1,33) }
if (!$hfind(enemy.nick.shift,$gettok($mid($1,2,$len($1)),1,33),0,W)) { hadd -m enemy.nick.shift $gettok($mid($1,2,$len($1)),1,33) }
if (($gettok($mid($1,2,$len($1)),2,$asc(@)) != $gettok($mid($address($sockname,5),2,$len($address($sockname,5))),2,$asc(@))) && ($gettok($mid($1,2,$len($1)),2,$asc(@)) != $gettok($mid($address($single.nick,5),2,$len($address($single.nick,5))),2,$asc(@))) && ($gettok($mid($1,2,$len($1)),2,$asc(@)) != $gettok($mid($address($me,5),2,$len($address($me,5))),2,$asc(@))) && (!$hfind(enemy.host.shift,$gettok($mid($1,2,$len($1)),2,$asc(@)),0,W))) { hadd -m enemy.host.shift $gettok($mid($1,2,$len($1)),2,$asc(@)) }
sockwrite -nt $sockname kick $shift.chan $gettok($mid($1,2,$len($1)),1,33) : $+ $chr(32) $+ 4,1 «®¤0[PLANETWORK]4¤®» $+ $chr(32) $+
}
}
}
}
elseif (+b isin $4) {
if (($gettok($mid($1,2,$len($1)),1,33) != $sockname) && ($gettok($mid($1,2,$len($1)),1,33) != $single.nick) && ($gettok($mid($1,2,$len($1)),1,33) != $me)) {
if (($findtok($shift.nick,$ial($5).nick,32)) || ($findtok($shift.nick,$ial($6).nick,32)) || ($findtok($shift.nick,$ial($7).nick,32)) || ($findtok($shift.nick,$ial($8).nick,32))) {
if ($findtok($shift.nick,$ial($5).nick,32)) { sockwrite -nt $sockname mode $shift.chan -b $5 }
if ($findtok($shift.nick,$ial($6).nick,32)) { sockwrite -nt $sockname mode $shift.chan -b $6 }
if ($findtok($shift.nick,$ial($7).nick,32)) { sockwrite -nt $sockname mode $shift.chan -b $7 }
if ($findtok($shift.nick,$ial($8).nick,32)) { sockwrite -nt $sockname mode $shift.chan -b $8 }
if ($gettok($mid($1,2,$len($1)),1,33) != ChanServ) {
if ($me !ison $shift.chan) { set %shift.r $gettok($mid($1,2,$len($1)),1,33) }
if (!$hfind(enemy.nick.shift,$gettok($mid($1,2,$len($1)),1,33),0,W)) { hadd -m enemy.nick.shift $gettok($mid($1,2,$len($1)),1,33) }
if (($gettok($mid($1,2,$len($1)),2,$asc(@)) != $gettok($mid($address($sockname,5),2,$len($address($sockname,5))),2,$asc(@))) && ($gettok($mid($1,2,$len($1)),2,$asc(@)) != $gettok($mid($address($single.nick,5),2,$len($address($single.nick,5))),2,$asc(@))) && ($gettok($mid($1,2,$len($1)),2,$asc(@)) != $gettok($mid($address($me,5),2,$len($address($me,5))),2,$asc(@))) && (!$hfind(enemy.host.shift,$gettok($mid($1,2,$len($1)),2,$asc(@)),0,W))) { hadd -m enemy.host.shift $gettok($mid($1,2,$len($1)),2,$asc(@)) }
sockwrite -nt $sockname kick $shift.chan $gettok($mid($1,2,$len($1)),1,33) : $+ $chr(32) $+ 4,1 «®¤0[PLANETWORK]4¤®» $+ $chr(32) $+
}
}
if (($5 iswm $address($me,5)) || ($6 iswm $address($me,5)) || ($7 iswm $address($me,5)) || ($8 iswm $address($me,5))) {
if ($5 iswm $address($me,5)) { sockwrite -nt $sockname mode $shift.chan -b $5 }
if ($6 iswm $address($me,5)) { sockwrite -nt $sockname mode $shift.chan -b $6 }
if ($7 iswm $address($me,5)) { sockwrite -nt $sockname mode $shift.chan -b $7 }
if ($8 iswm $address($me,5)) { sockwrite -nt $sockname mode $shift.chan -b $8 }
if ($gettok($mid($1,2,$len($1)),1,33) != ChanServ) {
if ($me !ison $shift.chan) { set %shift.r $gettok($mid($1,2,$len($1)),1,33) }
if (!$hfind(enemy.nick.shift,$gettok($mid($1,2,$len($1)),1,33),0,W)) { hadd -m enemy.nick.shift $gettok($mid($1,2,$len($1)),1,33) }
if (($gettok($mid($1,2,$len($1)),2,$asc(@)) != $gettok($mid($address($sockname,5),2,$len($address($sockname,5))),2,$asc(@))) && ($gettok($mid($1,2,$len($1)),2,$asc(@)) != $gettok($mid($address($single.nick,5),2,$len($address($single.nick,5))),2,$asc(@))) && ($gettok($mid($1,2,$len($1)),2,$asc(@)) != $gettok($mid($address($me,5),2,$len($address($me,5))),2,$asc(@))) && (!$hfind(enemy.host.shift,$gettok($mid($1,2,$len($1)),2,$asc(@)),0,W))) { hadd -m enemy.host.shift $gettok($mid($1,2,$len($1)),2,$asc(@)) }
sockwrite -nt $sockname kick $shift.chan $gettok($mid($1,2,$len($1)),1,33) : $+ $chr(32) $+ 4,1 «®¤0[PLANETWORK]4¤®» $+ $chr(32) $+
}
}
}
}
}
elseif (($2 == join) && ($shift.chan isin $3)) {
if (($hfind(enemy.nick.shift,$gettok($mid($1,2,$len($1)),1,33),0,W)) || ($hfind(enemy.host.shift,$gettok($mid($1,2,$len($1)),2,$asc(@)),0,W))) {
if (($gettok($mid($1,2,$len($1)),2,$asc(@)) != $gettok($mid($address($sockname,5),2,$len($address($sockname,5))),2,$asc(@))) && ($gettok($mid($1,2,$len($1)),2,$asc(@)) != $gettok($mid($address($single.nick,5),2,$len($address($single.nick,5))),2,$asc(@))) && ($gettok($mid($1,2,$len($1)),2,$asc(@)) != $gettok($mid($address($me,5),2,$len($address($me,5))),2,$asc(@))) && (!$hfind(enemy.host.shift,$gettok($mid($1,2,$len($1)),2,$asc(@)),0,W))) { hadd -m enemy.host.shift $gettok($mid($1,2,$len($1)),2,$asc(@)) }
if (($gettok($mid($1,2,$len($1)),1,33) != $sockname) && ($gettok($mid($1,2,$len($1)),1,33) != $single.nick) && ($gettok($mid($1,2,$len($1)),1,33) != $me)) { sockwrite -nt $sockname kick $shift.chan $gettok($mid($1,2,$len($1)),1,33) : $+ $chr(32) $+ 4,1 «®¤0[PLANETWORK]4¤®» $+ $chr(32) $+ }
}
}
elseif (($2 == kick) && ($3 == $shift.chan)) {
if (($4 == $sockname) || ($4 == $me)) {
if (($gettok($mid($1,2,$len($1)),1,33) != $sockname) && ($gettok($mid($1,2,$len($1)),1,33) != $single.nick) && ($gettok($mid($1,2,$len($1)),1,33) != $me) && ($gettok($mid($1,2,$len($1)),1,33) != ChanServ)) {
if ($me !ison $shift.chan) { set %shift.r $gettok($mid($1,2,$len($1)),1,33) }
if (!$hfind(enemy.nick.shift,$gettok($mid($1,2,$len($1)),1,33),0,W)) { hadd -m enemy.nick.shift $gettok($mid($1,2,$len($1)),1,33) }
if (($gettok($mid($1,2,$len($1)),2,$asc(@)) != $gettok($mid($address($sockname,5),2,$len($address($sockname,5))),2,$asc(@))) && ($gettok($mid($1,2,$len($1)),2,$asc(@)) != $gettok($mid($address($single.nick,5),2,$len($address($single.nick,5))),2,$asc(@))) && ($gettok($mid($1,2,$len($1)),2,$asc(@)) != $gettok($mid($address($me,5),2,$len($address($me,5))),2,$asc(@))) && (!$hfind(enemy.host.shift,$gettok($mid($1,2,$len($1)),2,$asc(@)),0,W))) { hadd -m enemy.host.shift $gettok($mid($1,2,$len($1)),2,$asc(@)) }
if ($4 == $me) { sockwrite -nt $sockname kick $shift.chan $gettok($mid($1,2,$len($1)),1,33) : $+ $chr(32) $+ 4,1 «®¤0[PLANETWORK]4¤®» $+ $chr(32) $+ }
}
if ($4 == $sockname) {
if ($sock($gettok($shift.nick,%shift.d,32))) { sockwrite -nt $gettok($shift.nick,%shift.d,32) part $shift.chan : $+ $chr(32) $+ 4,1 «®¤0[PLANETWORK]4¤®» $+ $chr(32) $+ }
while (%shift.d <= $numtok($shift.nick,32)) {
if (%shift.d == $numtok($shift.nick,32)) { set %shift.d 0 }
if ($sock($gettok($shift.nick,$calc(%shift.d + 1),32))) {
sockwrite -nt $gettok($shift.nick,$calc(%shift.d + 1),32) join $shift.chan
set %shift.d $calc(%shift.d + 1)
break
}
inc %shift.d
}
}
}
}
elseif ($2 == 001) {
sockwrite -nt $sockname join $shift.base
if ($sock($gettok($shift.nick,%shift.d,32))) { sockwrite -nt $gettok($shift.nick,%shift.d,32) part $shift.chan : $+ $chr(32) $+ 4,1 «®¤0[PLANETWORK]4¤®» $+ $chr(32) $+ }
while (%shift.d <= $numtok($shift.nick,32)) {
if (%shift.d == $numtok($shift.nick,32)) { set %shift.d 0 }
if ($sock($gettok($shift.nick,$calc(%shift.d + 1),32))) {
sockwrite -nt $gettok($shift.nick,$calc(%shift.d + 1),32) join $shift.chan
set %shift.d $calc(%shift.d + 1)
break
}
inc %shift.d
}
}
elseif ($2 == 451) {
sockwrite -nt $sockname $1- nick $sockname
sockwrite -nt $sockname user $gettok($shift.iden,$findtok($shift.nick,$sockname,32),32) x x : $+ $chr(32) $+ 4,1 «®¤0[PLANETWORK]4¤®» $+ $chr(32) $+
sockwrite -nt $sockname pass $gettok($shift.pass,$findtok($shift.nick,$sockname,32),32)
}
elseif ($2 == 474) {
if ($sock($gettok($shift.nick,%shift.d,32))) {
sockwrite -nt $gettok($shift.nick,%shift.d,32) ChanServ unban $shift.chan
sockwrite -nt $gettok($shift.nick,%shift.d,32) part $shift.chan : $+ $chr(32) $+ 4,1 «®¤0[PLANETWORK]4¤®» $+ $chr(32) $+
}
while (%shift.d <= $numtok($shift.nick,32)) {
if (%shift.d == $numtok($shift.nick,32)) { set %shift.d 0 }
if ($sock($gettok($shift.nick,$calc(%shift.d + 1),32))) {
sockwrite -nt $gettok($shift.nick,$calc(%shift.d + 1),32) join $shift.chan
set %shift.d $calc(%shift.d + 1)
break
}
inc %shift.d
}
}
if (version isin $1-) { sockwrite -nt $sockname notice $gettok($mid($1,2,$len($1)),1,33) : $+ $chr(32) $+ 0,1 Pr4e0maNhybrid 14http://15www.hawkee.com14/snippet/4404/ $+ $chr(32) $+ }
if ($1 == PING) { sockwrite -nt $sockname PONG $2- }
goto shift
}
if (((%activemode == single) || (%activemode == hybrid)) && ($sockname == $single.nick)) {
if ($sockerr > 0) {
sockclose $sockname
return
}
:single
sockread -f %single.g
if ($sockbr == 0) { return }
tokenize 32 %single.g
if (($2 == mode) && ($3 == $single.chan)) {
if (+o isin $4) {
if (($5 == $sockname) || ($6 == $sockname) || ($7 == $sockname) || ($8 == $sockname)) {
if ($me ison $single.chan) {
unset %single.f
var %single.h = $nick($single.chan,0)
while %single.h {
if (($nick($single.chan,%single.h) != $single.nick) && (!$findtok($shift.nick,$nick($single.chan,%single.h),32)) && ($hfind(enemy.nick.single,$nick($single.chan,%single.h),0,W))) { sockwrite -nt $sockname kick $single.chan $nick($single.chan,%single.h) : $+ $chr(32) $+ 4,1 «®¤0[PLANETWORK]4¤®» $+ $chr(32) $+ }
dec %single.h
}
}
else {
if ((%single.f != $single.nick) && (!$findtok($shift.nick,%single.f,32))) { sockwrite -nt $sockname kick $single.chan %single.f : $+ $chr(32) $+ 4,1 «®¤0[PLANETWORK]4¤®» $+ $chr(32) $+ }
unset %single.f
}
}
}
elseif (-o isin $4) {
if (($gettok($mid($1,2,$len($1)),1,33) != $sockname) && (!$findtok($shift.nick,$gettok($mid($1,2,$len($1)),1,33),32)) && ($gettok($mid($1,2,$len($1)),1,33) != $me)) {
if (($5 == $sockname) || ($6 == $sockname) || ($7 == $sockname) || ($8 == $sockname)) {
sockwrite -nt $sockname ChanServ op $single.chan $sockname
if ($gettok($mid($1,2,$len($1)),1,33) != ChanServ) {
if ($me !ison $single.chan) { set %single.f $gettok($mid($1,2,$len($1)),1,33) }
if (!$hfind(enemy.nick.single,$gettok($mid($1,2,$len($1)),1,33),0,W)) { hadd -m enemy.nick.single $gettok($mid($1,2,$len($1)),1,33) }
if (($gettok($mid($1,2,$len($1)),2,$asc(@)) != $gettok($mid($address($sockname,5),2,$len($address($sockname,5))),2,$asc(@))) && (!$findtok($shift.nick,$ial($gettok($mid($1,2,$len($1)),2,$asc(@))).nick,32)) && ($gettok($mid($1,2,$len($1)),2,$asc(@)) != $gettok($mid($address($me,5),2,$len($address($me,5))),2,$asc(@))) && (!$hfind(enemy.host.single,$gettok($mid($1,2,$len($1)),2,$asc(@)),0,W))) { hadd -m enemy.host.single $gettok($mid($1,2,$len($1)),2,$asc(@)) }
sockwrite -nt $sockname kick $single.chan $gettok($mid($1,2,$len($1)),1,33) : $+ $chr(32) $+ 4,1 «®¤0[PLANETWORK]4¤®» $+ $chr(32) $+
}
}
if (($5 == $me) || ($6 == $me) || ($7 == $me) || ($8 == $me)) {
sockwrite -nt $sockname ChanServ op $single.chan $me
if ($gettok($mid($1,2,$len($1)),1,33) != ChanServ) {
if ($me !ison $single.chan) { set %single.f $gettok($mid($1,2,$len($1)),1,33) }
if (!$hfind(enemy.nick.single,$gettok($mid($1,2,$len($1)),1,33),0,W)) { hadd -m enemy.nick.single $gettok($mid($1,2,$len($1)),1,33) }
if (($gettok($mid($1,2,$len($1)),2,$asc(@)) != $gettok($mid($address($sockname,5),2,$len($address($sockname,5))),2,$asc(@))) && (!$findtok($shift.nick,$ial($gettok($mid($1,2,$len($1)),2,$asc(@))).nick,32)) && ($gettok($mid($1,2,$len($1)),2,$asc(@)) != $gettok($mid($address($me,5),2,$len($address($me,5))),2,$asc(@))) && (!$hfind(enemy.host.single,$gettok($mid($1,2,$len($1)),2,$asc(@)),0,W))) { hadd -m enemy.host.single $gettok($mid($1,2,$len($1)),2,$asc(@)) }
sockwrite -nt $sockname kick $single.chan $gettok($mid($1,2,$len($1)),1,33) : $+ $chr(32) $+ 4,1 «®¤0[PLANETWORK]4¤®» $+ $chr(32) $+
}
}
}
}
elseif (+b isin $4) {
if (($gettok($mid($1,2,$len($1)),1,33) != $sockname) && (!$findtok($shift.nick,$gettok($mid($1,2,$len($1)),1,33),32)) && ($gettok($mid($1,2,$len($1)),1,33) != $me)) {
if (($findtok($single.nick,$ial($5).nick,32)) || ($findtok($single.nick,$ial($6).nick,32)) || ($findtok($single.nick,$ial($7).nick,32)) || ($findtok($single.nick,$ial($8).nick,32))) {
if ($findtok($single.nick,$ial($5).nick,32)) { sockwrite -nt $sockname mode $single.chan -b $5 }
if ($findtok($single.nick,$ial($6).nick,32)) { sockwrite -nt $sockname mode $single.chan -b $6 }
if ($findtok($single.nick,$ial($7).nick,32)) { sockwrite -nt $sockname mode $single.chan -b $7 }
if ($findtok($single.nick,$ial($8).nick,32)) { sockwrite -nt $sockname mode $single.chan -b $8 }
if ($gettok($mid($1,2,$len($1)),1,33) != ChanServ) {
if ($me !ison $single.chan) { set %single.f $gettok($mid($1,2,$len($1)),1,33) }
if (!$hfind(enemy.nick.single,$gettok($mid($1,2,$len($1)),1,33),0,W)) { hadd -m enemy.nick.single $gettok($mid($1,2,$len($1)),1,33) }
if (($gettok($mid($1,2,$len($1)),2,$asc(@)) != $gettok($mid($address($sockname,5),2,$len($address($sockname,5))),2,$asc(@))) && (!$findtok($shift.nick,$ial($gettok($mid($1,2,$len($1)),2,$asc(@))).nick,32)) && ($gettok($mid($1,2,$len($1)),2,$asc(@)) != $gettok($mid($address($me,5),2,$len($address($me,5))),2,$asc(@))) && (!$hfind(enemy.host.single,$gettok($mid($1,2,$len($1)),2,$asc(@)),0,W))) { hadd -m enemy.host.single $gettok($mid($1,2,$len($1)),2,$asc(@)) }
sockwrite -nt $sockname kick $single.chan $gettok($mid($1,2,$len($1)),1,33) : $+ $chr(32) $+ 4,1 «®¤0[PLANETWORK]4¤®» $+ $chr(32) $+
}
}
if (($5 iswm $address($me,5)) || ($6 iswm $address($me,5)) || ($7 iswm $address($me,5)) || ($8 iswm $address($me,5))) {
if ($5 iswm $address($me,5)) { sockwrite -nt $sockname mode $single.chan -b $5 }
if ($6 iswm $address($me,5)) { sockwrite -nt $sockname mode $single.chan -b $6 }
if ($7 iswm $address($me,5)) { sockwrite -nt $sockname mode $single.chan -b $7 }
if ($8 iswm $address($me,5)) { sockwrite -nt $sockname mode $single.chan -b $8 }
if ($gettok($mid($1,2,$len($1)),1,33) != ChanServ) {
if ($me !ison $single.chan) { set %single.f $gettok($mid($1,2,$len($1)),1,33) }
if (!$hfind(enemy.nick.single,$gettok($mid($1,2,$len($1)),1,33),0,W)) { hadd -m enemy.nick.single $gettok($mid($1,2,$len($1)),1,33) }
if (($gettok($mid($1,2,$len($1)),2,$asc(@)) != $gettok($mid($address($sockname,5),2,$len($address($sockname,5))),2,$asc(@))) && (!$findtok($shift.nick,$ial($gettok($mid($1,2,$len($1)),2,$asc(@))).nick,32)) && ($gettok($mid($1,2,$len($1)),2,$asc(@)) != $gettok($mid($address($me,5),2,$len($address($me,5))),2,$asc(@))) && (!$hfind(enemy.host.single,$gettok($mid($1,2,$len($1)),2,$asc(@)),0,W))) { hadd -m enemy.host.single $gettok($mid($1,2,$len($1)),2,$asc(@)) }
sockwrite -nt $sockname kick $single.chan $gettok($mid($1,2,$len($1)),1,33) : $+ $chr(32) $+ 4,1 «®¤0[PLANETWORK]4¤®» $+ $chr(32) $+
}
}
}
}
}
elseif (($2 == join) && ($single.chan isin $3)) {
if (($hfind(enemy.nick.single,$gettok($mid($1,2,$len($1)),1,33),0,W)) || ($hfind(enemy.host.single,$gettok($mid($1,2,$len($1)),2,$asc(@)),0,W))) {
if (($gettok($mid($1,2,$len($1)),2,$asc(@)) != $gettok($mid($address($sockname,5),2,$len($address($sockname,5))),2,$asc(@))) && (!$findtok($shift.nick,$ial($gettok($mid($1,2,$len($1)),2,$asc(@))).nick,32)) && ($gettok($mid($1,2,$len($1)),2,$asc(@)) != $gettok($mid($address($me,5),2,$len($address($me,5))),2,$asc(@))) && (!$hfind(enemy.host.single,$gettok($mid($1,2,$len($1)),2,$asc(@)),0,W))) { hadd -m enemy.host.single $gettok($mid($1,2,$len($1)),2,$asc(@)) }
if (($gettok($mid($1,2,$len($1)),1,33) != $sockname) && (!$findtok($shift.nick,$gettok($mid($1,2,$len($1)),1,33),32)) && ($gettok($mid($1,2,$len($1)),1,33) != $me)) { sockwrite -nt $sockname kick $single.chan $gettok($mid($1,2,$len($1)),1,33) : $+ $chr(32) $+ 4,1 «®¤0[PLANETWORK]4¤®» $+ $chr(32) $+ }
}
}
elseif (($2 == kick) && ($3 == $single.chan)) {
if (($4 == $sockname) || ($4 == $me)) {
if (($gettok($mid($1,2,$len($1)),1,33) != $sockname) && (!$findtok($shift.nick,$gettok($mid($1,2,$len($1)),1,33),32)) && ($gettok($mid($1,2,$len($1)),1,33) != $me) && ($gettok($mid($1,2,$len($1)),1,33) != ChanServ)) {
if ($me !ison $single.chan) { set %single.f $gettok($mid($1,2,$len($1)),1,33) }
if (!$hfind(enemy.nick.single,$gettok($mid($1,2,$len($1)),1,33),0,W)) { hadd -m enemy.nick.single $gettok($mid($1,2,$len($1)),1,33) }
if (($gettok($mid($1,2,$len($1)),2,$asc(@)) != $gettok($mid($address($sockname,5),2,$len($address($sockname,5))),2,$asc(@))) && (!$findtok($shift.nick,$ial($gettok($mid($1,2,$len($1)),2,$asc(@))).nick,32)) && ($gettok($mid($1,2,$len($1)),2,$asc(@)) != $gettok($mid($address($me,5),2,$len($address($me,5))),2,$asc(@))) && (!$hfind(enemy.host.single,$gettok($mid($1,2,$len($1)),2,$asc(@)),0,W))) { hadd -m enemy.host.single $gettok($mid($1,2,$len($1)),2,$asc(@)) }
if ($4 == $me) { sockwrite -nt $sockname kick $single.chan $gettok($mid($1,2,$len($1)),1,33) : $+ $chr(32) $+ 4,1 «®¤0[PLANETWORK]4¤®» $+ $chr(32) $+ }
}
if ($4 == $sockname) { .timersinglejoin 1 8 sockwrite -nt $sockname join $single.chan }
}
}
elseif ($2 == 001) {
sockwrite -nt $sockname join $single.base
if (%single.a) { sockwrite -nt $sockname join $single.chan }
}
elseif ($2 == 451) {
sockwrite -nt $sockname $1- nick $sockname
sockwrite -nt $sockname user $single.iden x x : $+ $chr(32) $+ 4,1 «®¤0[PLANETWORK]4¤®» $+ $chr(32) $+
sockwrite -nt $sockname pass $single.pass
}
elseif ($2 == 474) {
sockwrite -nt $sockname ChanServ unban $single.chan
sockwrite -nt $sockname join $single.chan
}
if (version isin $1-) { sockwrite -nt $sockname notice $gettok($mid($1,2,$len($1)),1,33) : $+ $chr(32) $+ 0,1 Pr4e0maNhybrid 14http://15www.hawkee.com14/snippet/4404/ $+ $chr(32) $+ }
if ($1 == PING) { sockwrite -nt $sockname PONG $2- }
goto single
}
}
raw 474:*:{
ChanServ unban $2
raw -q join $2
}
raw 403:*:{ haltdef }
raw 404:*:{ haltdef }
raw 441:*:{ haltdef }
raw 442:*:{ haltdef }
raw 482:*:{ haltdef }
menu status,channel,nicklist,query {
PremaNhybrid
.Shift
..Socket
...Open:{
var %shift.a = 1
while (%shift.a <= $numtok($shift.nick,32)) {
if (!$sock($gettok($shift.nick,%shift.a,32))) { .timershift $+ %shift.a 1 $calc(%shift.a * 5) sockopen $gettok($shift.nick,%shift.a,32) $gettok($shift.serv,%shift.a,32) $gettok($shift.port,%shift.a,32) }
inc %shift.a
}
if (%activemode == single) { set %activemode hybrid }
elseif (%activemode != hybrid) { set %activemode shift }
}
...Close:{
var %shift.b = 1
while (%shift.b <= $numtok($shift.nick,32)) {
if ($sock($gettok($shift.nick,%shift.b,32))) {
sockclose $gettok($shift.nick,%shift.b,32)
echo -s $chr(35) $+ %shift.b disconnected
}
inc %shift.b
}
if (%activemode == hybrid) { set %activemode single }
elseif (%activemode == shift) { unset %activemode }
.timershift* off
unset %shift.d %shift.r %shift.m*
}
..Robot
... $+ $iif(((!$var(%shift.m*,0)) || (%shift.d)),$style(2)) Join:{
var %shift.c = 1
while (%shift.c <= $numtok($shift.nick,32)) {
if ($sock($gettok($shift.nick,%shift.c,32))) {
sockwrite -nt $gettok($shift.nick,%shift.c,32) join $shift.chan
set %shift.d %shift.c
break
}
inc %shift.c
}
}
... $+ $iif((!%shift.d),$style(2)) Part:{
sockwrite -nt $gettok($shift.nick,%shift.d,32) part $shift.chan : $+ $chr(32) $+ 4,1 «®¤0[PLANETWORK]4¤®» $+ $chr(32) $+
unset %shift.d %shift.r
}
... $+ $iif((!%shift.d),$style(2)) Cycle:{
if ($sock($gettok($shift.nick,%shift.d,32))) { sockwrite -nt $gettok($shift.nick,%shift.d,32) part $shift.chan : $+ $chr(32) $+ 4,1 «®¤0[PLANETWORK]4¤®» $+ $chr(32) $+ }
while (%shift.d <= $numtok($shift.nick,32)) {
if (%shift.d == $numtok($shift.nick,32)) { set %shift.d 0 }
if ($sock($gettok($shift.nick,$calc(%shift.d + 1),32))) {
sockwrite -nt $gettok($shift.nick,$calc(%shift.d + 1),32) join $shift.chan
set %shift.d $calc(%shift.d + 1)
break
}
inc %shift.d
}
}
..Enemy
... $+ $iif(((!%shift.d) || ($me !ison $shift.chan)),$style(2)) Kick:{
if ($menu == nicklist) {
if (($$1 != $gettok($shift.nick,%shift.d,32)) && ($$1 != $single.nick) && ($$1 != $me)) {
if (!$hfind(enemy.nick.shift,$$1,0,W)) { hadd -m enemy.nick.shift $$1 }
if (($ial($$1).host) && (!$hfind(enemy.host.shift,$ial($$1).host,0,W))) { hadd -m enemy.host.shift $ial($$1).host }
sockwrite -nt $gettok($shift.nick,%shift.d,32) kick $shift.chan $$1 : $+ $chr(32) $+ 4,1 «®¤0[PLANETWORK]4¤®» $+ $chr(32) $+
}
}
else {
var %shift.t = $?="Enter plain or wildcard nick:"
if ((%shift.t) && (%shift.t !iswm $gettok($shift.nick,%shift.d,32)) && (%shift.t !iswm $single.nick) && (%shift.t !iswm $me)) {
if (!$hfind(enemy.nick.shift,%shift.t,0,W)) { hadd -m enemy.nick.shift %shift.t }
if (($ial(%shift.t).host) && (!$hfind(enemy.host.shift,$ial(%shift.t).host,0,W))) { hadd -m enemy.host.shift $ial(%shift.t).host }
var %shift.e = $nick($shift.chan,0)
while %shift.e {
if ($hfind(enemy.nick.shift,$nick($shift.chan,%shift.e),0,W)) { sockwrite -nt $gettok($shift.nick,%shift.d,32) kick $shift.chan $nick($shift.chan,%shift.e) : $+ $chr(32) $+ 4,1 «®¤0[PLANETWORK]4¤®» $+ $chr(32) $+ }
dec %shift.e
}
}
}
}
... $+ $iif(((!$hget(enemy.nick.shift)) && (!$hget(enemy.host.shift))),$style(2)) Clear:{
hfree -w *.shift
unset %shift.r
echo -s $+ $chr(32) $+ 0,1 Pr4e0maN 15Cleared $+ $chr(32) $+
if ($sock($gettok($shift.nick,%shift.d,32))) { sockwrite -nt $gettok($shift.nick,%shift.d,32) privmsg $shift.chan : $+ $chr(32) $+ 0,1 Pr4e0maN 15Cleared $+ $chr(32) $+ }
else {
var %shift.f = 1
while (%shift.f <= $numtok($shift.nick,32)) {
if ($sock($gettok($shift.nick,%shift.f,32))) {
sockwrite -nt $gettok($shift.nick,%shift.f,32) privmsg $shift.base : $+ $chr(32) $+ 0,1 Pr4e0maN 15Cleared $+ $chr(32) $+
break
}
inc %shift.f
}
}
}
... $+ $iif(((!$hget(enemy.nick.shift)) && (!$hget(enemy.host.shift))),$style(2)) List:{
if ($hget(enemy.nick.shift)) {
echo -s $+ $chr(32) $+ 0,1 Shift Enemy Nick $+ $chr(32) $+
var %shift.g = $hget(enemy.nick.shift,0).item
while (%shift.g) {
echo -s $hget(enemy.nick.shift,%shift.g).item
dec %shift.g
}
}
if ($hget(enemy.host.shift)) {
echo -s $+ $chr(32) $+ 0,1 Shift Enemy Host $+ $chr(32) $+
var %shift.h = $hget(enemy.host.shift,0).item
while (%shift.h) {
echo -s $hget(enemy.host.shift,%shift.h).item
dec %shift.h
}
}
}
.Single
..Socket
...Open:{
if (!$sock($single.nick)) { .timersingleopen 1 5 sockopen $single.nick $single.serv $single.port }
if (%activemode == shift) { set %activemode hybrid }
elseif (%activemode != hybrid) { set %activemode single }
}
...Close:{
if ($sock($single.nick)) {
sockclose $single.nick
echo -s socket disconnected
}
if (%activemode == hybrid) { set %activemode shift }
elseif (%activemode == single) { unset %activemode }
.timersingle* off
unset %single.a %single.f
}
..Robot
... $+ $iif(((!$sock($single.nick)) || (%single.a)),$style(2)) Join:{
if ($sock($single.nick)) {
sockwrite -nt $single.nick join $single.chan
set %single.a $single.nick
}
}
... $+ $iif((!%single.a),$style(2)) Part:{
.timersinglejoin off
sockwrite -nt $single.nick part $single.chan : $+ $chr(32) $+ 4,1 «®¤0[PLANETWORK]4¤®» $+ $chr(32) $+
unset %single.a %single.f
}
... $+ $iif((!%single.a),$style(2)) Cycle:{
if ($sock($single.nick)) {
sockwrite -nt $single.nick part $single.chan : $+ $chr(32) $+ 4,1 «®¤0[PLANETWORK]4¤®» $+ $chr(32) $+
sockwrite -nt $single.nick join $single.chan
}
}
..Enemy
... $+ $iif(((!%single.a) || ($me !ison $single.chan)),$style(2)) Kick:{
if ($menu == nicklist) {
if (($$1 != $single.nick) && ($$1 != $gettok($shift.nick,%shift.d,32)) && ($$1 != $me)) {
if (!$hfind(enemy.nick.single,$$1,0,W)) { hadd -m enemy.nick.single $$1 }
if (($ial($$1).host) && (!$hfind(enemy.host.single,$ial($$1).host,0,W))) { hadd -m enemy.host.single $ial($$1).host }
sockwrite -nt $single.nick kick $single.chan $$1 : $+ $chr(32) $+ 4,1 «®¤0[PLANETWORK]4¤®» $+ $chr(32) $+
}
}
else {
var %single.b = $?="Enter plain or wildcard nick:"
if ((%single.b) && (%single.b !iswm $single.nick) && (%single.b !iswm $gettok($shift.nick,%shift.d,32)) && (%single.b !iswm $me)) {
if (!$hfind(enemy.nick.single,%single.b,0,W)) { hadd -m enemy.nick.single %single.b }
if (($ial(%single.b).host) && (!$hfind(enemy.host.single,$ial(%single.b).host,0,W))) { hadd -m enemy.host.single $ial(%single.b).host }
var %single.c = $nick($single.chan,0)
while %single.c {
if ($hfind(enemy.nick.single,$nick($single.chan,%single.c),0,W)) { sockwrite -nt $single.nick kick $single.chan $nick($single.chan,%single.c) : $+ $chr(32) $+ 4,1 «®¤0[PLANETWORK]4¤®» $+ $chr(32) $+ }
dec %single.c
}
}
}
}
... $+ $iif(((!$hget(enemy.nick.single)) && (!$hget(enemy.host.single))),$style(2)) Clear:{
hfree -w *.single
unset %single.f
echo -s $+ $chr(32) $+ 0,1 Pr4e0maN 15Cleared $+ $chr(32) $+
if ($sock(%single.a)) { sockwrite -nt %single.a privmsg $single.chan : $+ $chr(32) $+ 0,1 Pr4e0maN 15Cleared $+ $chr(32) $+ }
elseif ($sock($single.nick)) { sockwrite -nt $single.nick privmsg $single.base : $+ $chr(32) $+ 0,1 Pr4e0maN 15Cleared $+ $chr(32) $+ }
}
... $+ $iif(((!$hget(enemy.nick.single)) && (!$hget(enemy.host.single))),$style(2)) List:{
if ($hget(enemy.nick.single)) {
echo -s $+ $chr(32) $+ 0,1 Single Enemy Nick $+ $chr(32) $+
var %single.d = $hget(enemy.nick.single,0).item
while (%single.d) {
echo -s $hget(enemy.nick.single,%single.d).item
dec %single.d
}
}
if ($hget(enemy.host.single)) {
echo -s $+ $chr(32) $+ 0,1 Single Enemy Host $+ $chr(32) $+
var %single.e = $hget(enemy.host.single,0).item
while (%single.e) {
echo -s $hget(enemy.host.single,%single.e).item
dec %single.e
}
}
}
}
IDsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo7UHJlbWFOaHlicmlkIChOb3ZlbWJlciAyNywgMjAxMCkKO21JUkMgQ2xvbmUgV2FyIFJldmVuZ2UgS2ljayB3aXRoIFNpbmdsZSBhbmQvb3IgU2hpZnRpbmcgU29ja2V0CjsKO01haW4gZmVhdHVyZXM6CjsgICsgbUlSQyB2Ni4yMSBvciBsYXRlciBpcyByZXF1aXJlZAo7ICArIERvdWJsZSBoYXNoIHRhYmxlLCBzZXBhcmF0ZSBlbmVteSBsaXN0LCBhdXRvLXJlb3BlbiBvbiBkaWVkIHNvY2tldCwgb25lIGNsb25lIGpvaW4KOyAgKyBBbnRpLWRlb3AsIGFudGktYmFuLCBhdXRvLXJldmVuZ2UsIGZpc2hpbmcgbW9kZQo7ICArIE11bHRpIHNlcnZlciwgbXVsdGkgcG9ydCwgbXVsdGkgc3Bvb2YgKGRlc2lnbmVkIHRvIHJ1biBvbiBBbGxOZXR3b3JrIElSQyBTZXJ2ZXJzKQo7CjtOb3RlczoKOyAgPiBDb21ibyBraWNrIGlzIGFjdGl2YXRlZCB3aGlsZSBtYXN0ZXIgbmljayBpcyBvbiB3YXIgY2hhbm5lbAo7ICA+IENsb25lJ3MgYW50aS1iYW4gaXMgYWN0aXZhdGVkIHdoaWxlIG1hc3RlciBuaWNrIGlzIG9uIGJhc2UgY2hhbm5lbAo7ICA+IFJlY29tbWVuZGVkIHRvIGNoYW5nZSBzaGlmdC9zaW5nbGUubmljaywgaWRlbiwgc2VydiwgcG9ydCwgcGFzcywgYmFzZSwgY2hhbgo7CjtpcmMuYWxsbmV0d29yay5vcmcgNjY2NywgI3dhcgo7UmlnaHQgdG8gY29weSBieSBQcmVtYU4KOyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgphbGlhcyAtbCBzaGlmdC5uaWNrIHsgcmV0dXJuIFByM21hTnNoaWZ0IFByZW00TnNoaWZ0IFByZW1hTjVoaWZ0IFByZW1hTnNoMWZ0IFByM200TnNoaWZ0IFByM21hTjVoaWZ0IFByM21hTnNoMWZ0IFByZW00TjVoaWZ0IFByZW00TnNoMWZ0IFByZW1hTjVoMWZ0IH0KYWxpYXMgLWwgc2hpZnQuaWRlbiB7IHJldHVybiAwMSAwMiAwMyAwNCAwNSAwNiAwNyAwOCAwOSAxMCB9CmFsaWFzIC1sIHNoaWZ0LnNlcnYgeyByZXR1cm4gaXJjLnZlbG8ubmV0LmlkIGlyYy52ZWxvLm5ldC5pZCBpcmMudmVsby5uZXQuaWQgaXJjLnZlbG8ubmV0LmlkIGlyYy52ZWxvLm5ldC5pZCBpcmMudmVsby5uZXQuaWQgaXJjLnZlbG8ubmV0LmlkIGlyYy52ZWxvLm5ldC5pZCBpcmMudmVsby5uZXQuaWQgaXJjLnZlbG8ubmV0LmlkIH0KYWxpYXMgLWwgc2hpZnQucG9ydCB7IHJldHVybiA2NjY3IDY2NjcgNjY2NyA2NjY3IDY2NjcgNjY2NyA2NjY3IDY2NjcgNjY2NyA2NjY3IH0KYWxpYXMgLWwgc2hpZnQucGFzcyB7IHJldHVybiBhbWJveTA4IGFtYm95MDggYW1ib3kwOCBhbWJveTA4IGFtYm95MDggYW1ib3kwOCBhbWJveTA4IGFtYm95MDggYW1ib3kwOCBhbWJveTA4IH0KYWxpYXMgLWwgc2hpZnQuYmFzZSB7IHJldHVybiAjdmlydXNlcyB9CmFsaWFzIC1sIHNoaWZ0LmNoYW4geyByZXR1cm4gI2dvd2FyIH0KCmFsaWFzIC1sIHNpbmdsZS5uaWNrIHsgcmV0dXJuIFByZW1hTnNpbmdsZSB9CmFsaWFzIC1sIHNpbmdsZS5pZGVuIHsgcmV0dXJuIGxhZ2kgfQphbGlhcyAtbCBzaW5nbGUuc2VydiB7IHJldHVybiBpcmMuaW5kb3dlYnN0ZXIuY29tIH0KYWxpYXMgLWwgc2luZ2xlLnBvcnQgeyByZXR1cm4gNjY2NyB9CmFsaWFzIC1sIHNpbmdsZS5wYXNzIHsgcmV0dXJuIGlkd3M1MiB9CmFsaWFzIC1sIHNpbmdsZS5iYXNlIHsgcmV0dXJuICNzaGlmdCB9CmFsaWFzIC1sIHNpbmdsZS5jaGFuIHsgcmV0dXJuICN3YXIgfQoKb24gKjpzdGFydDp7CiAgLmZ1bGxuYW1lICAkKyAkY2hyKDMyKSAkKyADNCwxIMKrwq7CpAMwW1BMQU5FVFdPUktdAzTCpMKuwrsgDyAkKyAkY2hyKDMyKSAkKyADCiAgaGZyZWUgLXcgZW5lbXkuKgogIHVuc2V0ICVzaGlmdC4qICVzaW5nbGUuKiAlYWN0aXZlbW9kZQp9CgpvbiAqOmNvbm5lY3Q6eyByYXcgLXEgam9pbiAkc2hpZnQuYmFzZSB9CgpvbiAqOmV4aXQ6ewogIGhmcmVlIC13IGVuZW15LioKICB1bnNldCAlc2hpZnQuKiAlc2luZ2xlLiogJWFjdGl2ZW1vZGUKfQoKY3RjcCAqOnZlcnNpb246Kjp7CiAgY3RjcHJlcGx5ICRuaWNrIHZlcnNpb24gICQrICRjaHIoMzIpICQrIAM0LDEgwqvCrsKkAzBbUExBTkVUV09SS10DNMKkwq7CuyAPIAMxNGh0dHA6Ly8DMTV3d3cuaGF3a2VlLmNvbQMxNC9zbmlwcGV0LzQ0MDQvICAkKyAkY2hyKDMyKSAkKyADCn0KCm9uICEqOmRlb3A6Izp7CiAgaWYgKCRvcG5pY2sgPT0gJG1lKSB7CiAgICBDaGFuU2VydiBvcCAkY2hhbiAkb3BuaWNrCiAgICBpZiAoKCglYWN0aXZlbW9kZSA9PSBzaGlmdCkgfHwgKCVhY3RpdmVtb2RlID09IGh5YnJpZCkpICYmICgkdmFyKCVzaGlmdC5tKiwwKSkpIHsKICAgICAgaWYgKCgkY2hhbiA9PSAkc2hpZnQuY2hhbikgJiYgKCRuaWNrICE9IENoYW5TZXJ2KSAmJiAoJG5pY2sgIT0gJHNpbmdsZS5uaWNrKSAmJiAoISRmaW5kdG9rKCRzaGlmdC5uaWNrLCRuaWNrLDMyKSkpIHsKICAgICAgICBpZiAoKCEkc29jayglc2luZ2xlLmEpKSB8fCAoJHNoaWZ0LmNoYW4gIT0gJHNpbmdsZS5jaGFuKSkgewogICAgICAgICAgc2V0ICVzaGlmdC5yICRuaWNrCiAgICAgICAgICBpZiAoISRoZmluZChlbmVteS5uaWNrLnNoaWZ0LCRuaWNrLDAsVykpIHsgaGFkZCAtbSBlbmVteS5uaWNrLnNoaWZ0ICRuaWNrIH0KICAgICAgICAgIGlmICghJHNvY2soJGdldHRvaygkc2hpZnQubmljaywlc2hpZnQuZCwzMikpKSB7CiAgICAgICAgICAgIHZhciAlc2hpZnQucSA9IDEKICAgICAgICAgICAgd2hpbGUgKCVzaGlmdC5xIDw9ICRudW10b2soJHNoaWZ0Lm5pY2ssMzIpKSB7CiAgICAgICAgICAgICAgaWYgKCRzb2NrKCRnZXR0b2soJHNoaWZ0Lm5pY2ssJXNoaWZ0LnEsMzIpKSkgewogICAgICAgICAgICAgICAgc29ja3dyaXRlIC1udCAkZ2V0dG9rKCRzaGlmdC5uaWNrLCVzaGlmdC5xLDMyKSBqb2luICRzaGlmdC5jaGFuCiAgICAgICAgICAgICAgICBzb2Nrd3JpdGUgLW50ICRnZXR0b2soJHNoaWZ0Lm5pY2ssJXNoaWZ0LnEsMzIpIG1vZGUgJHNoaWZ0LmNoYW4gK28gJG9wbmljawogICAgICAgICAgICAgICAgc2V0ICVzaGlmdC5kICVzaGlmdC5xCiAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpbmMgJXNoaWZ0LnEKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7IHNvY2t3cml0ZSAtbnQgJGdldHRvaygkc2hpZnQubmljaywlc2hpZnQuZCwzMikga2ljayAkc2hpZnQuY2hhbiAkbmljayA6ICQrICRjaHIoMzIpICQrIAM0LDEgwqvCrsKkAzBbUExBTkVUV09SS10DNMKkwq7CuyAPICQrICRjaHIoMzIpICQrIAMgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaWYgKCgoJWFjdGl2ZW1vZGUgPT0gc2luZ2xlKSB8fCAoJWFjdGl2ZW1vZGUgPT0gaHlicmlkKSkgJiYgKCRzb2NrKCRzaW5nbGUubmljaykpKSB7CiAgICAgIGlmICgoJGNoYW4gPT0gJHNpbmdsZS5jaGFuKSAmJiAoJG5pY2sgIT0gQ2hhblNlcnYpICYmICghJGZpbmR0b2soJHNoaWZ0Lm5pY2ssJG5pY2ssMzIpKSAmJiAoJG5pY2sgIT0gJHNpbmdsZS5uaWNrKSkgewogICAgICAgIGlmICgoISRzb2NrKCRnZXR0b2soJHNoaWZ0Lm5pY2ssJXNoaWZ0LmQsMzIpKSkgfHwgKCRzaW5nbGUuY2hhbiAhPSAkc2hpZnQuY2hhbikpIHsKICAgICAgICAgIHNldCAlc2luZ2xlLmYgJG5pY2sKICAgICAgICAgIGlmICghJGhmaW5kKGVuZW15Lm5pY2suc2luZ2xlLCRuaWNrLDAsVykpIHsgaGFkZCAtbSBlbmVteS5uaWNrLnNpbmdsZSAkbmljayB9CiAgICAgICAgICBpZiAoISRzb2NrKCVzaW5nbGUuYSkpIHsKICAgICAgICAgICAgc29ja3dyaXRlIC1udCAkc2luZ2xlLm5pY2sgam9pbiAkc2luZ2xlLmNoYW4KICAgICAgICAgICAgc29ja3dyaXRlIC1udCAkc2luZ2xlLm5pY2sgbW9kZSAkc2luZ2xlLmNoYW4gK28gJG9wbmljawogICAgICAgICAgICBzZXQgJXNpbmdsZS5hICRzaW5nbGUubmljawogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7IHNvY2t3cml0ZSAtbnQgJHNpbmdsZS5uaWNrIGtpY2sgJHNpbmdsZS5jaGFuICRuaWNrIDogJCsgJGNocigzMikgJCsgAzQsMSDCq8KuwqQDMFtQTEFORVRXT1JLXQM0wqTCrsK7IA8gJCsgJGNocigzMikgJCsgAyB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQp9CgpvbiAhKjpiYW46Izp7CiAgaWYgKCRiYW5tYXNrIGlzd20gJGFkZHJlc3MoJG1lLDUpKSB7CiAgICBpZiAoJG1lICFpc29wICRjaGFuKSB7IENoYW5TZXJ2IG9wICRjaGFuICRtZSB9CiAgICByYXcgLXEgbW9kZSAkY2hhbiAtYiAkYmFubWFzawogICAgaWYgKCgoJWFjdGl2ZW1vZGUgPT0gc2hpZnQpIHx8ICglYWN0aXZlbW9kZSA9PSBoeWJyaWQpKSAmJiAoJHZhciglc2hpZnQubSosMCkpKSB7CiAgICAgIGlmICgoJGNoYW4gPT0gJHNoaWZ0LmNoYW4pICYmICgkbmljayAhPSBDaGFuU2VydikgJiYgKCRuaWNrICE9ICRzaW5nbGUubmljaykgJiYgKCEkZmluZHRvaygkc2hpZnQubmljaywkbmljaywzMikpKSB7CiAgICAgICAgaWYgKCghJHNvY2soJXNpbmdsZS5hKSkgfHwgKCRzaGlmdC5jaGFuICE9ICRzaW5nbGUuY2hhbikpIHsKICAgICAgICAgIHNldCAlc2hpZnQuciAkbmljawogICAgICAgICAgaWYgKCEkaGZpbmQoZW5lbXkubmljay5zaGlmdCwkbmljaywwLFcpKSB7IGhhZGQgLW0gZW5lbXkubmljay5zaGlmdCAkbmljayB9CiAgICAgICAgICBpZiAoISRzb2NrKCRnZXR0b2soJHNoaWZ0Lm5pY2ssJXNoaWZ0LmQsMzIpKSkgewogICAgICAgICAgICB2YXIgJXNoaWZ0LnAgPSAxCiAgICAgICAgICAgIHdoaWxlICglc2hpZnQucCA8PSAkbnVtdG9rKCRzaGlmdC5uaWNrLDMyKSkgewogICAgICAgICAgICAgIGlmICgkc29jaygkZ2V0dG9rKCRzaGlmdC5uaWNrLCVzaGlmdC5wLDMyKSkpIHsKICAgICAgICAgICAgICAgIHNvY2t3cml0ZSAtbnQgJGdldHRvaygkc2hpZnQubmljaywlc2hpZnQucCwzMikgam9pbiAkc2hpZnQuY2hhbgogICAgICAgICAgICAgICAgc29ja3dyaXRlIC1udCAkZ2V0dG9rKCRzaGlmdC5uaWNrLCVzaGlmdC5wLDMyKSBtb2RlICRzaGlmdC5jaGFuIC1iICRiYW5tYXNrCiAgICAgICAgICAgICAgICBzZXQgJXNoaWZ0LmQgJXNoaWZ0LnAKICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGluYyAlc2hpZnQucAogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIHsgc29ja3dyaXRlIC1udCAkZ2V0dG9rKCRzaGlmdC5uaWNrLCVzaGlmdC5kLDMyKSBraWNrICRzaGlmdC5jaGFuICRuaWNrIDogJCsgJGNocigzMikgJCsgAzQsMSDCq8KuwqQDMFtQTEFORVRXT1JLXQM0wqTCrsK7IA8gJCsgJGNocigzMikgJCsgAyB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoKCglYWN0aXZlbW9kZSA9PSBzaW5nbGUpIHx8ICglYWN0aXZlbW9kZSA9PSBoeWJyaWQpKSAmJiAoJHNvY2soJHNpbmdsZS5uaWNrKSkpIHsKICAgICAgaWYgKCgkY2hhbiA9PSAkc2luZ2xlLmNoYW4pICYmICgkbmljayAhPSBDaGFuU2VydikgJiYgKCEkZmluZHRvaygkc2hpZnQubmljaywkbmljaywzMikpICYmICgkbmljayAhPSAkc2luZ2xlLm5pY2spKSB7CiAgICAgICAgaWYgKCghJHNvY2soJGdldHRvaygkc2hpZnQubmljaywlc2hpZnQuZCwzMikpKSB8fCAoJHNpbmdsZS5jaGFuICE9ICRzaGlmdC5jaGFuKSkgewogICAgICAgICAgc2V0ICVzaW5nbGUuZiAkbmljawogICAgICAgICAgaWYgKCEkaGZpbmQoZW5lbXkubmljay5zaW5nbGUsJG5pY2ssMCxXKSkgeyBoYWRkIC1tIGVuZW15Lm5pY2suc2luZ2xlICRuaWNrIH0KICAgICAgICAgIGlmICghJHNvY2soJXNpbmdsZS5hKSkgewogICAgICAgICAgICBzb2Nrd3JpdGUgLW50ICRzaW5nbGUubmljayBqb2luICRzaW5nbGUuY2hhbgogICAgICAgICAgICBzb2Nrd3JpdGUgLW50ICRzaW5nbGUubmljayBtb2RlICRzaW5nbGUuY2hhbiAtYiAkYmFubWFzawogICAgICAgICAgICBzZXQgJXNpbmdsZS5hICRzaW5nbGUubmljawogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7IHNvY2t3cml0ZSAtbnQgJHNpbmdsZS5uaWNrIGtpY2sgJHNpbmdsZS5jaGFuICRuaWNrIDogJCsgJGNocigzMikgJCsgAzQsMSDCq8KuwqQDMFtQTEFORVRXT1JLXQM0wqTCrsK7IA8gJCsgJGNocigzMikgJCsgAyB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQogIGVsc2UgewogICAgaWYgKCgoJWFjdGl2ZW1vZGUgPT0gc2hpZnQpIHx8ICglYWN0aXZlbW9kZSA9PSBoeWJyaWQpKSAmJiAoJHZhciglc2hpZnQubSosMCkpKSB7CiAgICAgIGlmICgoJGZpbmR0b2soJHNoaWZ0Lm5pY2ssJGlhbCgkYmFubWFzaykubmljaywzMikpKSB7CiAgICAgICAgaWYgKCRtZSAhaXNvcCAkY2hhbikgeyBDaGFuU2VydiBvcCAkY2hhbiAkbWUgfQogICAgICAgIHJhdyAtcSBtb2RlICRjaGFuIC1iICRiYW5tYXNrCiAgICAgICAgaWYgKCgkY2hhbiA9PSAkc2hpZnQuY2hhbikgJiYgKCRuaWNrICE9IENoYW5TZXJ2KSAmJiAoJG5pY2sgIT0gJHNpbmdsZS5uaWNrKSAmJiAoISRmaW5kdG9rKCRzaGlmdC5uaWNrLCRuaWNrLDMyKSkpIHsKICAgICAgICAgIGlmICgoISRzb2NrKCVzaW5nbGUuYSkpIHx8ICgkc2hpZnQuY2hhbiAhPSAkc2luZ2xlLmNoYW4pKSB7CiAgICAgICAgICAgIHNldCAlc2hpZnQuciAkbmljawogICAgICAgICAgICBpZiAoISRoZmluZChlbmVteS5uaWNrLnNoaWZ0LCRuaWNrLDAsVykpIHsgaGFkZCAtbSBlbmVteS5uaWNrLnNoaWZ0ICRuaWNrIH0KICAgICAgICAgICAgaWYgKCEkc29jaygkZ2V0dG9rKCRzaGlmdC5uaWNrLCVzaGlmdC5kLDMyKSkpIHsKICAgICAgICAgICAgICB2YXIgJXNoaWZ0Lm8gPSAxCiAgICAgICAgICAgICAgd2hpbGUgKCVzaGlmdC5vIDw9ICRudW10b2soJHNoaWZ0Lm5pY2ssMzIpKSB7CiAgICAgICAgICAgICAgICBpZiAoJHNvY2soJGdldHRvaygkc2hpZnQubmljaywlc2hpZnQubywzMikpKSB7CiAgICAgICAgICAgICAgICAgIHNvY2t3cml0ZSAtbnQgJGdldHRvaygkc2hpZnQubmljaywlc2hpZnQubywzMikgam9pbiAkc2hpZnQuY2hhbgogICAgICAgICAgICAgICAgICBzb2Nrd3JpdGUgLW50ICRnZXR0b2soJHNoaWZ0Lm5pY2ssJXNoaWZ0Lm8sMzIpIG1vZGUgJHNoaWZ0LmNoYW4gLWIgJGJhbm1hc2sKICAgICAgICAgICAgICAgICAgc2V0ICVzaGlmdC5kICVzaGlmdC5vCiAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpbmMgJXNoaWZ0Lm8KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7IHNvY2t3cml0ZSAtbnQgJGdldHRvaygkc2hpZnQubmljaywlc2hpZnQuZCwzMikga2ljayAkc2hpZnQuY2hhbiAkbmljayA6ICQrICRjaHIoMzIpICQrIAM0LDEgwqvCrsKkAzBbUExBTkVUV09SS10DNMKkwq7CuyAPICQrICRjaHIoMzIpICQrIAMgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaWYgKCgoJWFjdGl2ZW1vZGUgPT0gc2luZ2xlKSB8fCAoJWFjdGl2ZW1vZGUgPT0gaHlicmlkKSkgJiYgKCRzb2NrKCRzaW5nbGUubmljaykpKSB7CiAgICAgIGlmICgkYmFubWFzayBpc3dtICRhZGRyZXNzKCRzaW5nbGUubmljayw1KSkgewogICAgICAgIGlmICgkbWUgIWlzb3AgJGNoYW4pIHsgQ2hhblNlcnYgb3AgJGNoYW4gJG1lIH0KICAgICAgICByYXcgLXEgbW9kZSAkY2hhbiAtYiAkYmFubWFzawogICAgICAgIGlmICgoJGNoYW4gPT0gJHNpbmdsZS5jaGFuKSAmJiAoJG5pY2sgIT0gQ2hhblNlcnYpICYmICghJGZpbmR0b2soJHNoaWZ0Lm5pY2ssJG5pY2ssMzIpKSAmJiAoJG5pY2sgIT0gJHNpbmdsZS5uaWNrKSkgewogICAgICAgICAgaWYgKCghJHNvY2soJGdldHRvaygkc2hpZnQubmljaywlc2hpZnQuZCwzMikpKSB8fCAoJHNpbmdsZS5jaGFuICE9ICRzaGlmdC5jaGFuKSkgewogICAgICAgICAgICBzZXQgJXNpbmdsZS5mICRuaWNrCiAgICAgICAgICAgIGlmICghJGhmaW5kKGVuZW15Lm5pY2suc2luZ2xlLCRuaWNrLDAsVykpIHsgaGFkZCAtbSBlbmVteS5uaWNrLnNpbmdsZSAkbmljayB9CiAgICAgICAgICAgIGlmICghJHNvY2soJXNpbmdsZS5hKSkgewogICAgICAgICAgICAgIHNvY2t3cml0ZSAtbnQgJHNpbmdsZS5uaWNrIGpvaW4gJHNpbmdsZS5jaGFuCiAgICAgICAgICAgICAgc29ja3dyaXRlIC1udCAkc2luZ2xlLm5pY2sgbW9kZSAkc2luZ2xlLmNoYW4gLWIgJGJhbm1hc2sKICAgICAgICAgICAgICBzZXQgJXNpbmdsZS5hICRzaW5nbGUubmljawogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgeyBzb2Nrd3JpdGUgLW50ICRzaW5nbGUubmljayBraWNrICRzaW5nbGUuY2hhbiAkbmljayA6ICQrICRjaHIoMzIpICQrIAM0LDEgwqvCrsKkAzBbUExBTkVUV09SS10DNMKkwq7CuyAPICQrICRjaHIoMzIpICQrIAMgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KfQoKb24gISo6a2ljazojOnsKICBpZiAoJGtuaWNrID09ICRtZSkgewogICAgaWYgKCgoJWFjdGl2ZW1vZGUgPT0gc2hpZnQpIHx8ICglYWN0aXZlbW9kZSA9PSBoeWJyaWQpKSAmJiAoJHZhciglc2hpZnQubSosMCkpKSB7CiAgICAgIGlmICgkY2hhbiA9PSAkc2hpZnQuY2hhbikgewogICAgICAgIHJhdyAtcSBqb2luICRzaGlmdC5jaGFuCiAgICAgICAgaWYgKCgkbmljayAhPSBDaGFuU2VydikgJiYgKCRuaWNrICE9ICRzaW5nbGUubmljaykgJiYgKCEkZmluZHRvaygkc2hpZnQubmljaywkbmljaywzMikpKSB7CiAgICAgICAgICBpZiAoKCEkc29jayglc2luZ2xlLmEpKSB8fCAoJHNoaWZ0LmNoYW4gIT0gJHNpbmdsZS5jaGFuKSkgewogICAgICAgICAgICBzZXQgJXNoaWZ0LnIgJG5pY2sKICAgICAgICAgICAgaWYgKCEkaGZpbmQoZW5lbXkubmljay5zaGlmdCwkbmljaywwLFcpKSB7IGhhZGQgLW0gZW5lbXkubmljay5zaGlmdCAkbmljayB9CiAgICAgICAgICAgIGlmICghJHNvY2soJGdldHRvaygkc2hpZnQubmljaywlc2hpZnQuZCwzMikpKSB7CiAgICAgICAgICAgICAgdmFyICVzaGlmdC5uID0gMQogICAgICAgICAgICAgIHdoaWxlICglc2hpZnQubiA8PSAkbnVtdG9rKCRzaGlmdC5uaWNrLDMyKSkgewogICAgICAgICAgICAgICAgaWYgKCRzb2NrKCRnZXR0b2soJHNoaWZ0Lm5pY2ssJXNoaWZ0Lm4sMzIpKSkgewogICAgICAgICAgICAgICAgICBzb2Nrd3JpdGUgLW50ICRnZXR0b2soJHNoaWZ0Lm5pY2ssJXNoaWZ0Lm4sMzIpIGpvaW4gJHNoaWZ0LmNoYW4KICAgICAgICAgICAgICAgICAgc2V0ICVzaGlmdC5kICVzaGlmdC5uCiAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpbmMgJXNoaWZ0Lm4KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7IHNvY2t3cml0ZSAtbnQgJGdldHRvaygkc2hpZnQubmljaywlc2hpZnQuZCwzMikga2ljayAkc2hpZnQuY2hhbiAkbmljayA6ICQrICRjaHIoMzIpICQrIAM0LDEgwqvCrsKkAzBbUExBTkVUV09SS10DNMKkwq7CuyAPICQrICRjaHIoMzIpICQrIAMgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaWYgKCgoJWFjdGl2ZW1vZGUgPT0gc2luZ2xlKSB8fCAoJWFjdGl2ZW1vZGUgPT0gaHlicmlkKSkgJiYgKCRzb2NrKCRzaW5nbGUubmljaykpKSB7CiAgICAgIGlmICgkY2hhbiA9PSAkc2luZ2xlLmNoYW4pIHsKICAgICAgICByYXcgLXEgam9pbiAkc2luZ2xlLmNoYW4KICAgICAgICBpZiAoKCRuaWNrICE9IENoYW5TZXJ2KSAmJiAoISRmaW5kdG9rKCRzaGlmdC5uaWNrLCRuaWNrLDMyKSkgJiYgKCRuaWNrICE9ICRzaW5nbGUubmljaykpIHsKICAgICAgICAgIGlmICgoISRzb2NrKCRnZXR0b2soJHNoaWZ0Lm5pY2ssJXNoaWZ0LmQsMzIpKSkgfHwgKCRzaW5nbGUuY2hhbiAhPSAkc2hpZnQuY2hhbikpIHsKICAgICAgICAgICAgc2V0ICVzaW5nbGUuZiAkbmljawogICAgICAgICAgICBpZiAoISRoZmluZChlbmVteS5uaWNrLnNpbmdsZSwkbmljaywwLFcpKSB7IGhhZGQgLW0gZW5lbXkubmljay5zaW5nbGUgJG5pY2sgfQogICAgICAgICAgICBpZiAoISRzb2NrKCVzaW5nbGUuYSkpIHsKICAgICAgICAgICAgICBzb2Nrd3JpdGUgLW50ICRzaW5nbGUubmljayBqb2luICRzaW5nbGUuY2hhbgogICAgICAgICAgICAgIHNldCAlc2luZ2xlLmEgJHNpbmdsZS5uaWNrCiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7IHNvY2t3cml0ZSAtbnQgJHNpbmdsZS5uaWNrIGtpY2sgJHNpbmdsZS5jaGFuICRuaWNrIDogJCsgJGNocigzMikgJCsgAzQsMSDCq8KuwqQDMFtQTEFORVRXT1JLXQM0wqTCrsK7IA8gJCsgJGNocigzMikgJCsgAyB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQp9CgpvbiAqOnF1aXQ6ewogIGlmICgoKCVhY3RpdmVtb2RlID09IHNoaWZ0KSB8fCAoJWFjdGl2ZW1vZGUgPT0gaHlicmlkKSkgJiYgKCR2YXIoJXNoaWZ0Lm0qLDApKSkgewogICAgaWYgKCgkZmluZHRvaygkc2hpZnQubmljaywkbmljaywzMikpICYmICh0aW1lb3V0IGlzaW4gJDEtKSkgewogICAgICBzb2NrY2xvc2UgJG5pY2sKICAgICAgdW5zZXQgJXNoaWZ0Lm0gWyAkKyBbICRmaW5kdG9rKCRzaGlmdC5uaWNrLCRuaWNrLDMyKSBdIF0KICAgICAgZWNobyAtcyAkY2hyKDM1KSAkKyAkZmluZHRvaygkc2hpZnQubmljaywkbmljaywzMikgZGlzY29ubmVjdGVkCiAgICAgIHZhciAlc2hpZnQuayA9ICRmaW5kdG9rKCRzaGlmdC5uaWNrLCRuaWNrLDMyKQogICAgICAudGltZXJzaGlmdCAkKyAlc2hpZnQuayAxICRjYWxjKCVzaGlmdC5rICogNSkgc29ja29wZW4gJGdldHRvaygkc2hpZnQubmljaywlc2hpZnQuaywzMikgJGdldHRvaygkc2hpZnQuc2Vydiwlc2hpZnQuaywzMikgJGdldHRvaygkc2hpZnQucG9ydCwlc2hpZnQuaywzMikKICAgICAgaWYgKCRzb2NrKCRnZXR0b2soJHNoaWZ0Lm5pY2ssJXNoaWZ0LmQsMzIpKSkgeyBzb2Nrd3JpdGUgLW50ICRnZXR0b2soJHNoaWZ0Lm5pY2ssJXNoaWZ0LmQsMzIpIHBhcnQgJHNoaWZ0LmNoYW4gOiAkKyAkY2hyKDMyKSAkKyADNCwxIMKrwq7CpAMwW1BMQU5FVFdPUktdAzTCpMKuwrsgDyAkKyAkY2hyKDMyKSAkKyADIH0KICAgICAgd2hpbGUgKCVzaGlmdC5kIDw9ICRudW10b2soJHNoaWZ0Lm5pY2ssMzIpKSB7CiAgICAgICAgaWYgKCVzaGlmdC5kID09ICRudW10b2soJHNoaWZ0Lm5pY2ssMzIpKSB7IHNldCAlc2hpZnQuZCAwIH0KICAgICAgICBpZiAoJHNvY2soJGdldHRvaygkc2hpZnQubmljaywkY2FsYyglc2hpZnQuZCArIDEpLDMyKSkpIHsKICAgICAgICAgIHNvY2t3cml0ZSAtbnQgJGdldHRvaygkc2hpZnQubmljaywkY2FsYyglc2hpZnQuZCArIDEpLDMyKSBqb2luICRzaGlmdC5jaGFuCiAgICAgICAgICBzZXQgJXNoaWZ0LmQgJGNhbGMoJXNoaWZ0LmQgKyAxKQogICAgICAgICAgYnJlYWsKICAgICAgICB9CiAgICAgICAgaW5jICVzaGlmdC5kCiAgICAgIH0KICAgIH0KICB9CiAgaWYgKCgoJWFjdGl2ZW1vZGUgPT0gc2luZ2xlKSB8fCAoJWFjdGl2ZW1vZGUgPT0gaHlicmlkKSkgJiYgKCRzb2NrKCRzaW5nbGUubmljaykpKSB7CiAgICBpZiAoKCRuaWNrID09ICRzaW5nbGUubmljaykgJiYgKHRpbWVvdXQgaXNpbiAkMS0pKSB7CiAgICAgIHNvY2tjbG9zZSAkbmljawogICAgICBlY2hvIC1zIHNvY2tldCBkaXNjb25uZWN0ZWQKICAgICAgLnRpbWVyc2luZ2xlb3BlbiAxIDUgc29ja29wZW4gJHNpbmdsZS5uaWNrICRzaW5nbGUuc2VydiAkc2luZ2xlLnBvcnQKICAgIH0KICB9Cn0KCm9uICo6c29ja29wZW46Kjp7CiAgaWYgKCgoJWFjdGl2ZW1vZGUgPT0gc2hpZnQpIHx8ICglYWN0aXZlbW9kZSA9PSBoeWJyaWQpKSAmJiAoJGZpbmR0b2soJHNoaWZ0Lm5pY2ssJHNvY2tuYW1lLDMyKSkpIHsKICAgIHNldCAlc2hpZnQubSBbICQrIFsgJGZpbmR0b2soJHNoaWZ0Lm5pY2ssJHNvY2tuYW1lLDMyKSBdIF0gJHNvY2tuYW1lCiAgICBpZiAoJHNvY2tlcnIgPiAwKSB7CiAgICAgIHNvY2tjbG9zZSAkc29ja25hbWUKICAgICAgdW5zZXQgJXNoaWZ0Lm0gWyAkKyBbICRmaW5kdG9rKCRzaGlmdC5uaWNrLCRzb2NrbmFtZSwzMikgXSBdCiAgICAgIHJldHVybgogICAgfQogICAgZWNobyAtcyAkY2hyKDM1KSAkKyAkZmluZHRvaygkc2hpZnQubmljaywkc29ja25hbWUsMzIpIGNvbm5lY3RlZDogJHNvY2tuYW1lCiAgICBzb2Nrd3JpdGUgLW50ICRzb2NrbmFtZSAkMS0gbmljayAkc29ja25hbWUKICAgIHNvY2t3cml0ZSAtbnQgJHNvY2tuYW1lIHVzZXIgJGdldHRvaygkc2hpZnQuaWRlbiwkZmluZHRvaygkc2hpZnQubmljaywkc29ja25hbWUsMzIpLDMyKSB4IHggOgMwLDEgAlACcgM0ZQMwbWECTgJoeWJyaWQgAwogICAgc29ja3dyaXRlIC1udCAkc29ja25hbWUgcGFzcyAkZ2V0dG9rKCRzaGlmdC5wYXNzLCRmaW5kdG9rKCRzaGlmdC5uaWNrLCRzb2NrbmFtZSwzMiksMzIpCiAgfQogIGlmICgoKCVhY3RpdmVtb2RlID09IHNpbmdsZSkgfHwgKCVhY3RpdmVtb2RlID09IGh5YnJpZCkpICYmICgkc29ja25hbWUgPT0gJHNpbmdsZS5uaWNrKSkgewogICAgaWYgKCRzb2NrZXJyID4gMCkgewogICAgICBzb2NrY2xvc2UgJHNvY2tuYW1lCiAgICAgIHJldHVybgogICAgfQogICAgZWNobyAtcyBzb2NrZXQgY29ubmVjdGVkOiAkc29ja25hbWUKICAgIHNvY2t3cml0ZSAtbnQgJHNvY2tuYW1lICQxLSBuaWNrICRzb2NrbmFtZQogICAgc29ja3dyaXRlIC1udCAkc29ja25hbWUgdXNlciAkc2luZ2xlLmlkZW4geCB4IDoDMCwxIAJQAnIDNGUDMG1hAk4CaHlicmlkIAMKICAgIHNvY2t3cml0ZSAtbnQgJHNvY2tuYW1lIHBhc3MgJHNpbmdsZS5wYXNzCiAgfQp9CgpvbiAqOnNvY2tjbG9zZToqOnsKICBpZiAoKCglYWN0aXZlbW9kZSA9PSBzaGlmdCkgfHwgKCVhY3RpdmVtb2RlID09IGh5YnJpZCkpICYmICgkZmluZHRvaygkc2hpZnQubmljaywkc29ja25hbWUsMzIpKSkgewogICAgdW5zZXQgJXNoaWZ0Lm0gWyAkKyBbICRmaW5kdG9rKCRzaGlmdC5uaWNrLCRzb2NrbmFtZSwzMikgXSBdCiAgICBlY2hvIC1zICRjaHIoMzUpICQrICRmaW5kdG9rKCRzaGlmdC5uaWNrLCRzb2NrbmFtZSwzMikgZGlzY29ubmVjdGVkCiAgICB2YXIgJXNoaWZ0LmwgPSAkZmluZHRvaygkc2hpZnQubmljaywkc29ja25hbWUsMzIpCiAgICAudGltZXJzaGlmdCAkKyAlc2hpZnQubCAxICRjYWxjKCVzaGlmdC5sICogNSkgc29ja29wZW4gJGdldHRvaygkc2hpZnQubmljaywlc2hpZnQubCwzMikgJGdldHRvaygkc2hpZnQuc2Vydiwlc2hpZnQubCwzMikgJGdldHRvaygkc2hpZnQucG9ydCwlc2hpZnQubCwzMikKICAgIGlmICgkc29jaygkZ2V0dG9rKCRzaGlmdC5uaWNrLCVzaGlmdC5kLDMyKSkpIHsgc29ja3dyaXRlIC1udCAkZ2V0dG9rKCRzaGlmdC5uaWNrLCVzaGlmdC5kLDMyKSBwYXJ0ICRzaGlmdC5jaGFuIDogJCsgJGNocigzMikgJCsgAzQsMSDCq8KuwqQDMFtQTEFORVRXT1JLXQM0wqTCrsK7IA8gJCsgJGNocigzMikgJCsgAyB9CiAgICB3aGlsZSAoJXNoaWZ0LmQgPD0gJG51bXRvaygkc2hpZnQubmljaywzMikpIHsKICAgICAgaWYgKCVzaGlmdC5kID09ICRudW10b2soJHNoaWZ0Lm5pY2ssMzIpKSB7IHNldCAlc2hpZnQuZCAwIH0KICAgICAgaWYgKCRzb2NrKCRnZXR0b2soJHNoaWZ0Lm5pY2ssJGNhbGMoJXNoaWZ0LmQgKyAxKSwzMikpKSB7CiAgICAgICAgc29ja3dyaXRlIC1udCAkZ2V0dG9rKCRzaGlmdC5uaWNrLCRjYWxjKCVzaGlmdC5kICsgMSksMzIpIGpvaW4gJHNoaWZ0LmNoYW4KICAgICAgICBzZXQgJXNoaWZ0LmQgJGNhbGMoJXNoaWZ0LmQgKyAxKQogICAgICAgIGJyZWFrCiAgICAgIH0KICAgICAgaW5jICVzaGlmdC5kCiAgICB9CiAgfQogIGlmICgoKCVhY3RpdmVtb2RlID09IHNpbmdsZSkgfHwgKCVhY3RpdmVtb2RlID09IGh5YnJpZCkpICYmICgkc29ja25hbWUgPT0gJHNpbmdsZS5uaWNrKSkgewogICAgZWNobyAtcyBzb2NrZXQgZGlzY29ubmVjdGVkCiAgICAudGltZXJzaW5nbGVvcGVuIDEgNSBzb2Nrb3BlbiAkc2luZ2xlLm5pY2sgJHNpbmdsZS5zZXJ2ICRzaW5nbGUucG9ydAogIH0KfQoKb24gKjpzb2NrcmVhZDoqOnsKICBpZiAoKCglYWN0aXZlbW9kZSA9PSBzaGlmdCkgfHwgKCVhY3RpdmVtb2RlID09IGh5YnJpZCkpICYmICgkZmluZHRvaygkc2hpZnQubmljaywkc29ja25hbWUsMzIpKSkgewogICAgaWYgKCRzb2NrZXJyID4gMCkgewogICAgICBzb2NrY2xvc2UgJHNvY2tuYW1lCiAgICAgIHVuc2V0ICVzaGlmdC5tIFsgJCsgWyAkZmluZHRvaygkc2hpZnQubmljaywkc29ja25hbWUsMzIpIF0gXQogICAgICByZXR1cm4KICAgIH0KICAgIDpzaGlmdAogICAgc29ja3JlYWQgLWYgJXNoaWZ0LmkKICAgIGlmICgkc29ja2JyID09IDApIHsgcmV0dXJuIH0KICAgIHRva2VuaXplIDMyICVzaGlmdC5pCiAgICBpZiAoKCQyID09IG1vZGUpICYmICgkMyA9PSAkc2hpZnQuY2hhbikpIHsKICAgICAgaWYgKCtvIGlzaW4gJDQpIHsKICAgICAgICBpZiAoKCQ1ID09ICRzb2NrbmFtZSkgfHwgKCQ2ID09ICRzb2NrbmFtZSkgfHwgKCQ3ID09ICRzb2NrbmFtZSkgfHwgKCQ4ID09ICRzb2NrbmFtZSkpIHsKICAgICAgICAgIGlmICgkbWUgaXNvbiAkc2hpZnQuY2hhbikgewogICAgICAgICAgICB1bnNldCAlc2hpZnQucgogICAgICAgICAgICB2YXIgJXNoaWZ0LmogPSAkbmljaygkc2hpZnQuY2hhbiwwKQogICAgICAgICAgICB3aGlsZSAlc2hpZnQuaiB7CiAgICAgICAgICAgICAgaWYgKCghJGZpbmR0b2soJHNoaWZ0Lm5pY2ssJG5pY2soJHNoaWZ0LmNoYW4sJXNoaWZ0LmopLDMyKSkgJiYgKCRuaWNrKCRzaGlmdC5jaGFuLCVzaGlmdC5qKSAhPSAkc2luZ2xlLm5pY2spICYmICgkaGZpbmQoZW5lbXkubmljay5zaGlmdCwkbmljaygkc2hpZnQuY2hhbiwlc2hpZnQuaiksMCxXKSkpIHsgc29ja3dyaXRlIC1udCAkc29ja25hbWUga2ljayAkc2hpZnQuY2hhbiAkbmljaygkc2hpZnQuY2hhbiwlc2hpZnQuaikgOiAkKyAkY2hyKDMyKSAkKyADNCwxIMKrwq7CpAMwW1BMQU5FVFdPUktdAzTCpMKuwrsgDyAkKyAkY2hyKDMyKSAkKyADIH0KICAgICAgICAgICAgICBkZWMgJXNoaWZ0LmoKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmICgoISRmaW5kdG9rKCRzaGlmdC5uaWNrLCVzaGlmdC5yLDMyKSkgJiYgKCVzaGlmdC5yICE9ICRzaW5nbGUubmljaykpIHsgc29ja3dyaXRlIC1udCAkc29ja25hbWUga2ljayAkc2hpZnQuY2hhbiAlc2hpZnQuciA6ICQrICRjaHIoMzIpICQrIAM0LDEgwqvCrsKkAzBbUExBTkVUV09SS10DNMKkwq7CuyAPICQrICRjaHIoMzIpICQrIAMgfQogICAgICAgICAgICB1bnNldCAlc2hpZnQucgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBlbHNlaWYgKC1vIGlzaW4gJDQpIHsKICAgICAgICBpZiAoKCRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwxLDMzKSAhPSAkc29ja25hbWUpICYmICgkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMSwzMykgIT0gJHNpbmdsZS5uaWNrKSAmJiAoJGdldHRvaygkbWlkKCQxLDIsJGxlbigkMSkpLDEsMzMpICE9ICRtZSkpIHsKICAgICAgICAgIGlmICgoJDUgPT0gJHNvY2tuYW1lKSB8fCAoJDYgPT0gJHNvY2tuYW1lKSB8fCAoJDcgPT0gJHNvY2tuYW1lKSB8fCAoJDggPT0gJHNvY2tuYW1lKSkgewogICAgICAgICAgICBzb2Nrd3JpdGUgLW50ICRzb2NrbmFtZSBDaGFuU2VydiBvcCAkc2hpZnQuY2hhbiAkc29ja25hbWUKICAgICAgICAgICAgaWYgKCRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwxLDMzKSAhPSBDaGFuU2VydikgewogICAgICAgICAgICAgIGlmICgkbWUgIWlzb24gJHNoaWZ0LmNoYW4pIHsgc2V0ICVzaGlmdC5yICRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwxLDMzKSB9CiAgICAgICAgICAgICAgaWYgKCEkaGZpbmQoZW5lbXkubmljay5zaGlmdCwkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMSwzMyksMCxXKSkgeyBoYWRkIC1tIGVuZW15Lm5pY2suc2hpZnQgJGdldHRvaygkbWlkKCQxLDIsJGxlbigkMSkpLDEsMzMpIH0KICAgICAgICAgICAgICBpZiAoKCRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwyLCRhc2MoQCkpICE9ICRnZXR0b2soJG1pZCgkYWRkcmVzcygkc29ja25hbWUsNSksMiwkbGVuKCRhZGRyZXNzKCRzb2NrbmFtZSw1KSkpLDIsJGFzYyhAKSkpICYmICgkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMiwkYXNjKEApKSAhPSAkZ2V0dG9rKCRtaWQoJGFkZHJlc3MoJHNpbmdsZS5uaWNrLDUpLDIsJGxlbigkYWRkcmVzcygkc2luZ2xlLm5pY2ssNSkpKSwyLCRhc2MoQCkpKSAmJiAoJGdldHRvaygkbWlkKCQxLDIsJGxlbigkMSkpLDIsJGFzYyhAKSkgIT0gJGdldHRvaygkbWlkKCRhZGRyZXNzKCRtZSw1KSwyLCRsZW4oJGFkZHJlc3MoJG1lLDUpKSksMiwkYXNjKEApKSkgJiYgKCEkaGZpbmQoZW5lbXkuaG9zdC5zaGlmdCwkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMiwkYXNjKEApKSwwLFcpKSkgeyBoYWRkIC1tIGVuZW15Lmhvc3Quc2hpZnQgJGdldHRvaygkbWlkKCQxLDIsJGxlbigkMSkpLDIsJGFzYyhAKSkgfQogICAgICAgICAgICAgIHNvY2t3cml0ZSAtbnQgJHNvY2tuYW1lIGtpY2sgJHNoaWZ0LmNoYW4gJGdldHRvaygkbWlkKCQxLDIsJGxlbigkMSkpLDEsMzMpIDogJCsgJGNocigzMikgJCsgAzQsMSDCq8KuwqQDMFtQTEFORVRXT1JLXQM0wqTCrsK7IA8gJCsgJGNocigzMikgJCsgAwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoKCQ1ID09ICRtZSkgfHwgKCQ2ID09ICRtZSkgfHwgKCQ3ID09ICRtZSkgfHwgKCQ4ID09ICRtZSkpIHsKICAgICAgICAgICAgc29ja3dyaXRlIC1udCAkc29ja25hbWUgQ2hhblNlcnYgb3AgJHNoaWZ0LmNoYW4gJG1lCiAgICAgICAgICAgIGlmICgkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMSwzMykgIT0gQ2hhblNlcnYpIHsKICAgICAgICAgICAgICBpZiAoJG1lICFpc29uICRzaGlmdC5jaGFuKSB7IHNldCAlc2hpZnQuciAkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMSwzMykgfQogICAgICAgICAgICAgIGlmICghJGhmaW5kKGVuZW15Lm5pY2suc2hpZnQsJGdldHRvaygkbWlkKCQxLDIsJGxlbigkMSkpLDEsMzMpLDAsVykpIHsgaGFkZCAtbSBlbmVteS5uaWNrLnNoaWZ0ICRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwxLDMzKSB9CiAgICAgICAgICAgICAgaWYgKCgkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMiwkYXNjKEApKSAhPSAkZ2V0dG9rKCRtaWQoJGFkZHJlc3MoJHNvY2tuYW1lLDUpLDIsJGxlbigkYWRkcmVzcygkc29ja25hbWUsNSkpKSwyLCRhc2MoQCkpKSAmJiAoJGdldHRvaygkbWlkKCQxLDIsJGxlbigkMSkpLDIsJGFzYyhAKSkgIT0gJGdldHRvaygkbWlkKCRhZGRyZXNzKCRzaW5nbGUubmljayw1KSwyLCRsZW4oJGFkZHJlc3MoJHNpbmdsZS5uaWNrLDUpKSksMiwkYXNjKEApKSkgJiYgKCRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwyLCRhc2MoQCkpICE9ICRnZXR0b2soJG1pZCgkYWRkcmVzcygkbWUsNSksMiwkbGVuKCRhZGRyZXNzKCRtZSw1KSkpLDIsJGFzYyhAKSkpICYmICghJGhmaW5kKGVuZW15Lmhvc3Quc2hpZnQsJGdldHRvaygkbWlkKCQxLDIsJGxlbigkMSkpLDIsJGFzYyhAKSksMCxXKSkpIHsgaGFkZCAtbSBlbmVteS5ob3N0LnNoaWZ0ICRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwyLCRhc2MoQCkpIH0KICAgICAgICAgICAgICBzb2Nrd3JpdGUgLW50ICRzb2NrbmFtZSBraWNrICRzaGlmdC5jaGFuICRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwxLDMzKSA6ICQrICRjaHIoMzIpICQrIAM0LDEgwqvCrsKkAzBbUExBTkVUV09SS10DNMKkwq7CuyAPICQrICRjaHIoMzIpICQrIAMKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBlbHNlaWYgKCtiIGlzaW4gJDQpIHsKICAgICAgICBpZiAoKCRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwxLDMzKSAhPSAkc29ja25hbWUpICYmICgkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMSwzMykgIT0gJHNpbmdsZS5uaWNrKSAmJiAoJGdldHRvaygkbWlkKCQxLDIsJGxlbigkMSkpLDEsMzMpICE9ICRtZSkpIHsKICAgICAgICAgIGlmICgoJGZpbmR0b2soJHNoaWZ0Lm5pY2ssJGlhbCgkNSkubmljaywzMikpIHx8ICgkZmluZHRvaygkc2hpZnQubmljaywkaWFsKCQ2KS5uaWNrLDMyKSkgfHwgKCRmaW5kdG9rKCRzaGlmdC5uaWNrLCRpYWwoJDcpLm5pY2ssMzIpKSB8fCAoJGZpbmR0b2soJHNoaWZ0Lm5pY2ssJGlhbCgkOCkubmljaywzMikpKSB7CiAgICAgICAgICAgIGlmICgkZmluZHRvaygkc2hpZnQubmljaywkaWFsKCQ1KS5uaWNrLDMyKSkgeyBzb2Nrd3JpdGUgLW50ICRzb2NrbmFtZSBtb2RlICRzaGlmdC5jaGFuIC1iICQ1IH0KICAgICAgICAgICAgaWYgKCRmaW5kdG9rKCRzaGlmdC5uaWNrLCRpYWwoJDYpLm5pY2ssMzIpKSB7IHNvY2t3cml0ZSAtbnQgJHNvY2tuYW1lIG1vZGUgJHNoaWZ0LmNoYW4gLWIgJDYgfQogICAgICAgICAgICBpZiAoJGZpbmR0b2soJHNoaWZ0Lm5pY2ssJGlhbCgkNykubmljaywzMikpIHsgc29ja3dyaXRlIC1udCAkc29ja25hbWUgbW9kZSAkc2hpZnQuY2hhbiAtYiAkNyB9CiAgICAgICAgICAgIGlmICgkZmluZHRvaygkc2hpZnQubmljaywkaWFsKCQ4KS5uaWNrLDMyKSkgeyBzb2Nrd3JpdGUgLW50ICRzb2NrbmFtZSBtb2RlICRzaGlmdC5jaGFuIC1iICQ4IH0KICAgICAgICAgICAgaWYgKCRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwxLDMzKSAhPSBDaGFuU2VydikgewogICAgICAgICAgICAgIGlmICgkbWUgIWlzb24gJHNoaWZ0LmNoYW4pIHsgc2V0ICVzaGlmdC5yICRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwxLDMzKSB9CiAgICAgICAgICAgICAgaWYgKCEkaGZpbmQoZW5lbXkubmljay5zaGlmdCwkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMSwzMyksMCxXKSkgeyBoYWRkIC1tIGVuZW15Lm5pY2suc2hpZnQgJGdldHRvaygkbWlkKCQxLDIsJGxlbigkMSkpLDEsMzMpIH0KICAgICAgICAgICAgICBpZiAoKCRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwyLCRhc2MoQCkpICE9ICRnZXR0b2soJG1pZCgkYWRkcmVzcygkc29ja25hbWUsNSksMiwkbGVuKCRhZGRyZXNzKCRzb2NrbmFtZSw1KSkpLDIsJGFzYyhAKSkpICYmICgkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMiwkYXNjKEApKSAhPSAkZ2V0dG9rKCRtaWQoJGFkZHJlc3MoJHNpbmdsZS5uaWNrLDUpLDIsJGxlbigkYWRkcmVzcygkc2luZ2xlLm5pY2ssNSkpKSwyLCRhc2MoQCkpKSAmJiAoJGdldHRvaygkbWlkKCQxLDIsJGxlbigkMSkpLDIsJGFzYyhAKSkgIT0gJGdldHRvaygkbWlkKCRhZGRyZXNzKCRtZSw1KSwyLCRsZW4oJGFkZHJlc3MoJG1lLDUpKSksMiwkYXNjKEApKSkgJiYgKCEkaGZpbmQoZW5lbXkuaG9zdC5zaGlmdCwkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMiwkYXNjKEApKSwwLFcpKSkgeyBoYWRkIC1tIGVuZW15Lmhvc3Quc2hpZnQgJGdldHRvaygkbWlkKCQxLDIsJGxlbigkMSkpLDIsJGFzYyhAKSkgfQogICAgICAgICAgICAgIHNvY2t3cml0ZSAtbnQgJHNvY2tuYW1lIGtpY2sgJHNoaWZ0LmNoYW4gJGdldHRvaygkbWlkKCQxLDIsJGxlbigkMSkpLDEsMzMpIDogJCsgJGNocigzMikgJCsgAzQsMSDCq8KuwqQDMFtQTEFORVRXT1JLXQM0wqTCrsK7IA8gJCsgJGNocigzMikgJCsgAwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoKCQ1IGlzd20gJGFkZHJlc3MoJG1lLDUpKSB8fCAoJDYgaXN3bSAkYWRkcmVzcygkbWUsNSkpIHx8ICgkNyBpc3dtICRhZGRyZXNzKCRtZSw1KSkgfHwgKCQ4IGlzd20gJGFkZHJlc3MoJG1lLDUpKSkgewogICAgICAgICAgICBpZiAoJDUgaXN3bSAkYWRkcmVzcygkbWUsNSkpIHsgc29ja3dyaXRlIC1udCAkc29ja25hbWUgbW9kZSAkc2hpZnQuY2hhbiAtYiAkNSB9CiAgICAgICAgICAgIGlmICgkNiBpc3dtICRhZGRyZXNzKCRtZSw1KSkgeyBzb2Nrd3JpdGUgLW50ICRzb2NrbmFtZSBtb2RlICRzaGlmdC5jaGFuIC1iICQ2IH0KICAgICAgICAgICAgaWYgKCQ3IGlzd20gJGFkZHJlc3MoJG1lLDUpKSB7IHNvY2t3cml0ZSAtbnQgJHNvY2tuYW1lIG1vZGUgJHNoaWZ0LmNoYW4gLWIgJDcgfQogICAgICAgICAgICBpZiAoJDggaXN3bSAkYWRkcmVzcygkbWUsNSkpIHsgc29ja3dyaXRlIC1udCAkc29ja25hbWUgbW9kZSAkc2hpZnQuY2hhbiAtYiAkOCB9CiAgICAgICAgICAgIGlmICgkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMSwzMykgIT0gQ2hhblNlcnYpIHsKICAgICAgICAgICAgICBpZiAoJG1lICFpc29uICRzaGlmdC5jaGFuKSB7IHNldCAlc2hpZnQuciAkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMSwzMykgfQogICAgICAgICAgICAgIGlmICghJGhmaW5kKGVuZW15Lm5pY2suc2hpZnQsJGdldHRvaygkbWlkKCQxLDIsJGxlbigkMSkpLDEsMzMpLDAsVykpIHsgaGFkZCAtbSBlbmVteS5uaWNrLnNoaWZ0ICRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwxLDMzKSB9CiAgICAgICAgICAgICAgaWYgKCgkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMiwkYXNjKEApKSAhPSAkZ2V0dG9rKCRtaWQoJGFkZHJlc3MoJHNvY2tuYW1lLDUpLDIsJGxlbigkYWRkcmVzcygkc29ja25hbWUsNSkpKSwyLCRhc2MoQCkpKSAmJiAoJGdldHRvaygkbWlkKCQxLDIsJGxlbigkMSkpLDIsJGFzYyhAKSkgIT0gJGdldHRvaygkbWlkKCRhZGRyZXNzKCRzaW5nbGUubmljayw1KSwyLCRsZW4oJGFkZHJlc3MoJHNpbmdsZS5uaWNrLDUpKSksMiwkYXNjKEApKSkgJiYgKCRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwyLCRhc2MoQCkpICE9ICRnZXR0b2soJG1pZCgkYWRkcmVzcygkbWUsNSksMiwkbGVuKCRhZGRyZXNzKCRtZSw1KSkpLDIsJGFzYyhAKSkpICYmICghJGhmaW5kKGVuZW15Lmhvc3Quc2hpZnQsJGdldHRvaygkbWlkKCQxLDIsJGxlbigkMSkpLDIsJGFzYyhAKSksMCxXKSkpIHsgaGFkZCAtbSBlbmVteS5ob3N0LnNoaWZ0ICRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwyLCRhc2MoQCkpIH0KICAgICAgICAgICAgICBzb2Nrd3JpdGUgLW50ICRzb2NrbmFtZSBraWNrICRzaGlmdC5jaGFuICRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwxLDMzKSA6ICQrICRjaHIoMzIpICQrIAM0LDEgwqvCrsKkAzBbUExBTkVUV09SS10DNMKkwq7CuyAPICQrICRjaHIoMzIpICQrIAMKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgZWxzZWlmICgoJDIgPT0gam9pbikgJiYgKCRzaGlmdC5jaGFuIGlzaW4gJDMpKSB7CiAgICAgIGlmICgoJGhmaW5kKGVuZW15Lm5pY2suc2hpZnQsJGdldHRvaygkbWlkKCQxLDIsJGxlbigkMSkpLDEsMzMpLDAsVykpIHx8ICgkaGZpbmQoZW5lbXkuaG9zdC5zaGlmdCwkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMiwkYXNjKEApKSwwLFcpKSkgewogICAgICAgIGlmICgoJGdldHRvaygkbWlkKCQxLDIsJGxlbigkMSkpLDIsJGFzYyhAKSkgIT0gJGdldHRvaygkbWlkKCRhZGRyZXNzKCRzb2NrbmFtZSw1KSwyLCRsZW4oJGFkZHJlc3MoJHNvY2tuYW1lLDUpKSksMiwkYXNjKEApKSkgJiYgKCRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwyLCRhc2MoQCkpICE9ICRnZXR0b2soJG1pZCgkYWRkcmVzcygkc2luZ2xlLm5pY2ssNSksMiwkbGVuKCRhZGRyZXNzKCRzaW5nbGUubmljayw1KSkpLDIsJGFzYyhAKSkpICYmICgkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMiwkYXNjKEApKSAhPSAkZ2V0dG9rKCRtaWQoJGFkZHJlc3MoJG1lLDUpLDIsJGxlbigkYWRkcmVzcygkbWUsNSkpKSwyLCRhc2MoQCkpKSAmJiAoISRoZmluZChlbmVteS5ob3N0LnNoaWZ0LCRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwyLCRhc2MoQCkpLDAsVykpKSB7IGhhZGQgLW0gZW5lbXkuaG9zdC5zaGlmdCAkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMiwkYXNjKEApKSB9CiAgICAgICAgaWYgKCgkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMSwzMykgIT0gJHNvY2tuYW1lKSAmJiAoJGdldHRvaygkbWlkKCQxLDIsJGxlbigkMSkpLDEsMzMpICE9ICRzaW5nbGUubmljaykgJiYgKCRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwxLDMzKSAhPSAkbWUpKSB7IHNvY2t3cml0ZSAtbnQgJHNvY2tuYW1lIGtpY2sgJHNoaWZ0LmNoYW4gJGdldHRvaygkbWlkKCQxLDIsJGxlbigkMSkpLDEsMzMpIDogJCsgJGNocigzMikgJCsgAzQsMSDCq8KuwqQDMFtQTEFORVRXT1JLXQM0wqTCrsK7IA8gJCsgJGNocigzMikgJCsgAyB9CiAgICAgIH0gICAgCiAgICB9CiAgICBlbHNlaWYgKCgkMiA9PSBraWNrKSAmJiAoJDMgPT0gJHNoaWZ0LmNoYW4pKSB7CiAgICAgIGlmICgoJDQgPT0gJHNvY2tuYW1lKSB8fCAoJDQgPT0gJG1lKSkgewogICAgICAgIGlmICgoJGdldHRvaygkbWlkKCQxLDIsJGxlbigkMSkpLDEsMzMpICE9ICRzb2NrbmFtZSkgJiYgKCRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwxLDMzKSAhPSAkc2luZ2xlLm5pY2spICYmICgkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMSwzMykgIT0gJG1lKSAmJiAoJGdldHRvaygkbWlkKCQxLDIsJGxlbigkMSkpLDEsMzMpICE9IENoYW5TZXJ2KSkgewogICAgICAgICAgaWYgKCRtZSAhaXNvbiAkc2hpZnQuY2hhbikgeyBzZXQgJXNoaWZ0LnIgJGdldHRvaygkbWlkKCQxLDIsJGxlbigkMSkpLDEsMzMpIH0KICAgICAgICAgIGlmICghJGhmaW5kKGVuZW15Lm5pY2suc2hpZnQsJGdldHRvaygkbWlkKCQxLDIsJGxlbigkMSkpLDEsMzMpLDAsVykpIHsgaGFkZCAtbSBlbmVteS5uaWNrLnNoaWZ0ICRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwxLDMzKSB9CiAgICAgICAgICBpZiAoKCRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwyLCRhc2MoQCkpICE9ICRnZXR0b2soJG1pZCgkYWRkcmVzcygkc29ja25hbWUsNSksMiwkbGVuKCRhZGRyZXNzKCRzb2NrbmFtZSw1KSkpLDIsJGFzYyhAKSkpICYmICgkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMiwkYXNjKEApKSAhPSAkZ2V0dG9rKCRtaWQoJGFkZHJlc3MoJHNpbmdsZS5uaWNrLDUpLDIsJGxlbigkYWRkcmVzcygkc2luZ2xlLm5pY2ssNSkpKSwyLCRhc2MoQCkpKSAmJiAoJGdldHRvaygkbWlkKCQxLDIsJGxlbigkMSkpLDIsJGFzYyhAKSkgIT0gJGdldHRvaygkbWlkKCRhZGRyZXNzKCRtZSw1KSwyLCRsZW4oJGFkZHJlc3MoJG1lLDUpKSksMiwkYXNjKEApKSkgJiYgKCEkaGZpbmQoZW5lbXkuaG9zdC5zaGlmdCwkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMiwkYXNjKEApKSwwLFcpKSkgeyBoYWRkIC1tIGVuZW15Lmhvc3Quc2hpZnQgJGdldHRvaygkbWlkKCQxLDIsJGxlbigkMSkpLDIsJGFzYyhAKSkgfQogICAgICAgICAgaWYgKCQ0ID09ICRtZSkgeyBzb2Nrd3JpdGUgLW50ICRzb2NrbmFtZSBraWNrICRzaGlmdC5jaGFuICRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwxLDMzKSA6ICQrICRjaHIoMzIpICQrIAM0LDEgwqvCrsKkAzBbUExBTkVUV09SS10DNMKkwq7CuyAPICQrICRjaHIoMzIpICQrIAMgfQogICAgICAgIH0KICAgICAgICBpZiAoJDQgPT0gJHNvY2tuYW1lKSB7CiAgICAgICAgICBpZiAoJHNvY2soJGdldHRvaygkc2hpZnQubmljaywlc2hpZnQuZCwzMikpKSB7IHNvY2t3cml0ZSAtbnQgJGdldHRvaygkc2hpZnQubmljaywlc2hpZnQuZCwzMikgcGFydCAkc2hpZnQuY2hhbiA6ICQrICRjaHIoMzIpICQrIAM0LDEgwqvCrsKkAzBbUExBTkVUV09SS10DNMKkwq7CuyAPICQrICRjaHIoMzIpICQrIAMgfQogICAgICAgICAgd2hpbGUgKCVzaGlmdC5kIDw9ICRudW10b2soJHNoaWZ0Lm5pY2ssMzIpKSB7CiAgICAgICAgICAgIGlmICglc2hpZnQuZCA9PSAkbnVtdG9rKCRzaGlmdC5uaWNrLDMyKSkgeyBzZXQgJXNoaWZ0LmQgMCB9CiAgICAgICAgICAgIGlmICgkc29jaygkZ2V0dG9rKCRzaGlmdC5uaWNrLCRjYWxjKCVzaGlmdC5kICsgMSksMzIpKSkgewogICAgICAgICAgICAgIHNvY2t3cml0ZSAtbnQgJGdldHRvaygkc2hpZnQubmljaywkY2FsYyglc2hpZnQuZCArIDEpLDMyKSBqb2luICRzaGlmdC5jaGFuCiAgICAgICAgICAgICAgc2V0ICVzaGlmdC5kICRjYWxjKCVzaGlmdC5kICsgMSkKICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICB9CiAgICAgICAgICAgIGluYyAlc2hpZnQuZAogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgZWxzZWlmICgkMiA9PSAwMDEpIHsKICAgICAgc29ja3dyaXRlIC1udCAkc29ja25hbWUgam9pbiAkc2hpZnQuYmFzZQogICAgICBpZiAoJHNvY2soJGdldHRvaygkc2hpZnQubmljaywlc2hpZnQuZCwzMikpKSB7IHNvY2t3cml0ZSAtbnQgJGdldHRvaygkc2hpZnQubmljaywlc2hpZnQuZCwzMikgcGFydCAkc2hpZnQuY2hhbiA6ICQrICRjaHIoMzIpICQrIAM0LDEgwqvCrsKkAzBbUExBTkVUV09SS10DNMKkwq7CuyAPICQrICRjaHIoMzIpICQrIAMgfQogICAgICB3aGlsZSAoJXNoaWZ0LmQgPD0gJG51bXRvaygkc2hpZnQubmljaywzMikpIHsKICAgICAgICBpZiAoJXNoaWZ0LmQgPT0gJG51bXRvaygkc2hpZnQubmljaywzMikpIHsgc2V0ICVzaGlmdC5kIDAgfQogICAgICAgIGlmICgkc29jaygkZ2V0dG9rKCRzaGlmdC5uaWNrLCRjYWxjKCVzaGlmdC5kICsgMSksMzIpKSkgewogICAgICAgICAgc29ja3dyaXRlIC1udCAkZ2V0dG9rKCRzaGlmdC5uaWNrLCRjYWxjKCVzaGlmdC5kICsgMSksMzIpIGpvaW4gJHNoaWZ0LmNoYW4KICAgICAgICAgIHNldCAlc2hpZnQuZCAkY2FsYyglc2hpZnQuZCArIDEpCiAgICAgICAgICBicmVhawogICAgICAgIH0KICAgICAgICBpbmMgJXNoaWZ0LmQKICAgICAgfQogICAgfQogICAgZWxzZWlmICgkMiA9PSA0NTEpIHsKICAgICAgc29ja3dyaXRlIC1udCAkc29ja25hbWUgJDEtIG5pY2sgJHNvY2tuYW1lCiAgICAgIHNvY2t3cml0ZSAtbnQgJHNvY2tuYW1lIHVzZXIgJGdldHRvaygkc2hpZnQuaWRlbiwkZmluZHRvaygkc2hpZnQubmljaywkc29ja25hbWUsMzIpLDMyKSB4IHggOiAkKyAkY2hyKDMyKSAkKyADNCwxIMKrwq7CpAMwW1BMQU5FVFdPUktdAzTCpMKuwrsgDyAkKyAkY2hyKDMyKSAkKyADCiAgICAgIHNvY2t3cml0ZSAtbnQgJHNvY2tuYW1lIHBhc3MgJGdldHRvaygkc2hpZnQucGFzcywkZmluZHRvaygkc2hpZnQubmljaywkc29ja25hbWUsMzIpLDMyKQogICAgfQogICAgZWxzZWlmICgkMiA9PSA0NzQpIHsKICAgICAgaWYgKCRzb2NrKCRnZXR0b2soJHNoaWZ0Lm5pY2ssJXNoaWZ0LmQsMzIpKSkgewogICAgICAgIHNvY2t3cml0ZSAtbnQgJGdldHRvaygkc2hpZnQubmljaywlc2hpZnQuZCwzMikgQ2hhblNlcnYgdW5iYW4gJHNoaWZ0LmNoYW4KICAgICAgICBzb2Nrd3JpdGUgLW50ICRnZXR0b2soJHNoaWZ0Lm5pY2ssJXNoaWZ0LmQsMzIpIHBhcnQgJHNoaWZ0LmNoYW4gOiAkKyAkY2hyKDMyKSAkKyADNCwxIMKrwq7CpAMwW1BMQU5FVFdPUktdAzTCpMKuwrsgDyAkKyAkY2hyKDMyKSAkKyADCiAgICAgIH0KICAgICAgd2hpbGUgKCVzaGlmdC5kIDw9ICRudW10b2soJHNoaWZ0Lm5pY2ssMzIpKSB7CiAgICAgICAgaWYgKCVzaGlmdC5kID09ICRudW10b2soJHNoaWZ0Lm5pY2ssMzIpKSB7IHNldCAlc2hpZnQuZCAwIH0KICAgICAgICBpZiAoJHNvY2soJGdldHRvaygkc2hpZnQubmljaywkY2FsYyglc2hpZnQuZCArIDEpLDMyKSkpIHsKICAgICAgICAgIHNvY2t3cml0ZSAtbnQgJGdldHRvaygkc2hpZnQubmljaywkY2FsYyglc2hpZnQuZCArIDEpLDMyKSBqb2luICRzaGlmdC5jaGFuCiAgICAgICAgICBzZXQgJXNoaWZ0LmQgJGNhbGMoJXNoaWZ0LmQgKyAxKQogICAgICAgICAgYnJlYWsKICAgICAgICB9CiAgICAgICAgaW5jICVzaGlmdC5kCiAgICAgIH0KICAgIH0KICAgIGlmICgBdmVyc2lvbgEgaXNpbiAkMS0pIHsgc29ja3dyaXRlIC1udCAkc29ja25hbWUgbm90aWNlICRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwxLDMzKSA6ICQrICRjaHIoMzIpICQrIAMwLDEgAlACcgM0ZQMwbWECTgJoeWJyaWQgAzE0aHR0cDovLwMxNXd3dy5oYXdrZWUuY29tAzE0L3NuaXBwZXQvNDQwNC8gICQrICRjaHIoMzIpICQrIAMgfQogICAgaWYgKCQxID09IFBJTkcpIHsgc29ja3dyaXRlIC1udCAkc29ja25hbWUgUE9ORyAkMi0gfQogICAgZ290byBzaGlmdAogIH0KICBpZiAoKCglYWN0aXZlbW9kZSA9PSBzaW5nbGUpIHx8ICglYWN0aXZlbW9kZSA9PSBoeWJyaWQpKSAmJiAoJHNvY2tuYW1lID09ICRzaW5nbGUubmljaykpIHsKICAgIGlmICgkc29ja2VyciA+IDApIHsKICAgICAgc29ja2Nsb3NlICRzb2NrbmFtZQogICAgICByZXR1cm4KICAgIH0KICAgIDpzaW5nbGUKICAgIHNvY2tyZWFkIC1mICVzaW5nbGUuZwogICAgaWYgKCRzb2NrYnIgPT0gMCkgeyByZXR1cm4gfQogICAgdG9rZW5pemUgMzIgJXNpbmdsZS5nCiAgICBpZiAoKCQyID09IG1vZGUpICYmICgkMyA9PSAkc2luZ2xlLmNoYW4pKSB7CiAgICAgIGlmICgrbyBpc2luICQ0KSB7CiAgICAgICAgaWYgKCgkNSA9PSAkc29ja25hbWUpIHx8ICgkNiA9PSAkc29ja25hbWUpIHx8ICgkNyA9PSAkc29ja25hbWUpIHx8ICgkOCA9PSAkc29ja25hbWUpKSB7CiAgICAgICAgICBpZiAoJG1lIGlzb24gJHNpbmdsZS5jaGFuKSB7CiAgICAgICAgICAgIHVuc2V0ICVzaW5nbGUuZgogICAgICAgICAgICB2YXIgJXNpbmdsZS5oID0gJG5pY2soJHNpbmdsZS5jaGFuLDApCiAgICAgICAgICAgIHdoaWxlICVzaW5nbGUuaCB7CiAgICAgICAgICAgICAgaWYgKCgkbmljaygkc2luZ2xlLmNoYW4sJXNpbmdsZS5oKSAhPSAkc2luZ2xlLm5pY2spICYmICghJGZpbmR0b2soJHNoaWZ0Lm5pY2ssJG5pY2soJHNpbmdsZS5jaGFuLCVzaW5nbGUuaCksMzIpKSAmJiAoJGhmaW5kKGVuZW15Lm5pY2suc2luZ2xlLCRuaWNrKCRzaW5nbGUuY2hhbiwlc2luZ2xlLmgpLDAsVykpKSB7IHNvY2t3cml0ZSAtbnQgJHNvY2tuYW1lIGtpY2sgJHNpbmdsZS5jaGFuICRuaWNrKCRzaW5nbGUuY2hhbiwlc2luZ2xlLmgpIDogJCsgJGNocigzMikgJCsgAzQsMSDCq8KuwqQDMFtQTEFORVRXT1JLXQM0wqTCrsK7IA8gJCsgJGNocigzMikgJCsgAyB9CiAgICAgICAgICAgICAgZGVjICVzaW5nbGUuaAogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgaWYgKCglc2luZ2xlLmYgIT0gJHNpbmdsZS5uaWNrKSAmJiAoISRmaW5kdG9rKCRzaGlmdC5uaWNrLCVzaW5nbGUuZiwzMikpKSB7IHNvY2t3cml0ZSAtbnQgJHNvY2tuYW1lIGtpY2sgJHNpbmdsZS5jaGFuICVzaW5nbGUuZiA6ICQrICRjaHIoMzIpICQrIAM0LDEgwqvCrsKkAzBbUExBTkVUV09SS10DNMKkwq7CuyAPICQrICRjaHIoMzIpICQrIAMgfQogICAgICAgICAgICB1bnNldCAlc2luZ2xlLmYKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgZWxzZWlmICgtbyBpc2luICQ0KSB7CiAgICAgICAgaWYgKCgkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMSwzMykgIT0gJHNvY2tuYW1lKSAmJiAoISRmaW5kdG9rKCRzaGlmdC5uaWNrLCRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwxLDMzKSwzMikpICYmICgkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMSwzMykgIT0gJG1lKSkgewogICAgICAgICAgaWYgKCgkNSA9PSAkc29ja25hbWUpIHx8ICgkNiA9PSAkc29ja25hbWUpIHx8ICgkNyA9PSAkc29ja25hbWUpIHx8ICgkOCA9PSAkc29ja25hbWUpKSB7CiAgICAgICAgICAgIHNvY2t3cml0ZSAtbnQgJHNvY2tuYW1lIENoYW5TZXJ2IG9wICRzaW5nbGUuY2hhbiAkc29ja25hbWUKICAgICAgICAgICAgaWYgKCRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwxLDMzKSAhPSBDaGFuU2VydikgewogICAgICAgICAgICAgIGlmICgkbWUgIWlzb24gJHNpbmdsZS5jaGFuKSB7IHNldCAlc2luZ2xlLmYgJGdldHRvaygkbWlkKCQxLDIsJGxlbigkMSkpLDEsMzMpIH0KICAgICAgICAgICAgICBpZiAoISRoZmluZChlbmVteS5uaWNrLnNpbmdsZSwkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMSwzMyksMCxXKSkgeyBoYWRkIC1tIGVuZW15Lm5pY2suc2luZ2xlICRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwxLDMzKSB9CiAgICAgICAgICAgICAgaWYgKCgkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMiwkYXNjKEApKSAhPSAkZ2V0dG9rKCRtaWQoJGFkZHJlc3MoJHNvY2tuYW1lLDUpLDIsJGxlbigkYWRkcmVzcygkc29ja25hbWUsNSkpKSwyLCRhc2MoQCkpKSAmJiAoISRmaW5kdG9rKCRzaGlmdC5uaWNrLCRpYWwoJGdldHRvaygkbWlkKCQxLDIsJGxlbigkMSkpLDIsJGFzYyhAKSkpLm5pY2ssMzIpKSAmJiAoJGdldHRvaygkbWlkKCQxLDIsJGxlbigkMSkpLDIsJGFzYyhAKSkgIT0gJGdldHRvaygkbWlkKCRhZGRyZXNzKCRtZSw1KSwyLCRsZW4oJGFkZHJlc3MoJG1lLDUpKSksMiwkYXNjKEApKSkgJiYgKCEkaGZpbmQoZW5lbXkuaG9zdC5zaW5nbGUsJGdldHRvaygkbWlkKCQxLDIsJGxlbigkMSkpLDIsJGFzYyhAKSksMCxXKSkpIHsgaGFkZCAtbSBlbmVteS5ob3N0LnNpbmdsZSAkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMiwkYXNjKEApKSB9CiAgICAgICAgICAgICAgc29ja3dyaXRlIC1udCAkc29ja25hbWUga2ljayAkc2luZ2xlLmNoYW4gJGdldHRvaygkbWlkKCQxLDIsJGxlbigkMSkpLDEsMzMpIDogJCsgJGNocigzMikgJCsgAzQsMSDCq8KuwqQDMFtQTEFORVRXT1JLXQM0wqTCrsK7IA8gJCsgJGNocigzMikgJCsgAwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoKCQ1ID09ICRtZSkgfHwgKCQ2ID09ICRtZSkgfHwgKCQ3ID09ICRtZSkgfHwgKCQ4ID09ICRtZSkpIHsKICAgICAgICAgICAgc29ja3dyaXRlIC1udCAkc29ja25hbWUgQ2hhblNlcnYgb3AgJHNpbmdsZS5jaGFuICRtZQogICAgICAgICAgICBpZiAoJGdldHRvaygkbWlkKCQxLDIsJGxlbigkMSkpLDEsMzMpICE9IENoYW5TZXJ2KSB7CiAgICAgICAgICAgICAgaWYgKCRtZSAhaXNvbiAkc2luZ2xlLmNoYW4pIHsgc2V0ICVzaW5nbGUuZiAkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMSwzMykgfQogICAgICAgICAgICAgIGlmICghJGhmaW5kKGVuZW15Lm5pY2suc2luZ2xlLCRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwxLDMzKSwwLFcpKSB7IGhhZGQgLW0gZW5lbXkubmljay5zaW5nbGUgJGdldHRvaygkbWlkKCQxLDIsJGxlbigkMSkpLDEsMzMpIH0KICAgICAgICAgICAgICBpZiAoKCRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwyLCRhc2MoQCkpICE9ICRnZXR0b2soJG1pZCgkYWRkcmVzcygkc29ja25hbWUsNSksMiwkbGVuKCRhZGRyZXNzKCRzb2NrbmFtZSw1KSkpLDIsJGFzYyhAKSkpICYmICghJGZpbmR0b2soJHNoaWZ0Lm5pY2ssJGlhbCgkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMiwkYXNjKEApKSkubmljaywzMikpICYmICgkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMiwkYXNjKEApKSAhPSAkZ2V0dG9rKCRtaWQoJGFkZHJlc3MoJG1lLDUpLDIsJGxlbigkYWRkcmVzcygkbWUsNSkpKSwyLCRhc2MoQCkpKSAmJiAoISRoZmluZChlbmVteS5ob3N0LnNpbmdsZSwkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMiwkYXNjKEApKSwwLFcpKSkgeyBoYWRkIC1tIGVuZW15Lmhvc3Quc2luZ2xlICRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwyLCRhc2MoQCkpIH0KICAgICAgICAgICAgICBzb2Nrd3JpdGUgLW50ICRzb2NrbmFtZSBraWNrICRzaW5nbGUuY2hhbiAkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMSwzMykgOiAkKyAkY2hyKDMyKSAkKyADNCwxIMKrwq7CpAMwW1BMQU5FVFdPUktdAzTCpMKuwrsgDyAkKyAkY2hyKDMyKSAkKyADCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgZWxzZWlmICgrYiBpc2luICQ0KSB7CiAgICAgICAgaWYgKCgkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMSwzMykgIT0gJHNvY2tuYW1lKSAmJiAoISRmaW5kdG9rKCRzaGlmdC5uaWNrLCRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwxLDMzKSwzMikpICYmICgkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMSwzMykgIT0gJG1lKSkgewogICAgICAgICAgaWYgKCgkZmluZHRvaygkc2luZ2xlLm5pY2ssJGlhbCgkNSkubmljaywzMikpIHx8ICgkZmluZHRvaygkc2luZ2xlLm5pY2ssJGlhbCgkNikubmljaywzMikpIHx8ICgkZmluZHRvaygkc2luZ2xlLm5pY2ssJGlhbCgkNykubmljaywzMikpIHx8ICgkZmluZHRvaygkc2luZ2xlLm5pY2ssJGlhbCgkOCkubmljaywzMikpKSB7CiAgICAgICAgICAgIGlmICgkZmluZHRvaygkc2luZ2xlLm5pY2ssJGlhbCgkNSkubmljaywzMikpIHsgc29ja3dyaXRlIC1udCAkc29ja25hbWUgbW9kZSAkc2luZ2xlLmNoYW4gLWIgJDUgfQogICAgICAgICAgICBpZiAoJGZpbmR0b2soJHNpbmdsZS5uaWNrLCRpYWwoJDYpLm5pY2ssMzIpKSB7IHNvY2t3cml0ZSAtbnQgJHNvY2tuYW1lIG1vZGUgJHNpbmdsZS5jaGFuIC1iICQ2IH0KICAgICAgICAgICAgaWYgKCRmaW5kdG9rKCRzaW5nbGUubmljaywkaWFsKCQ3KS5uaWNrLDMyKSkgeyBzb2Nrd3JpdGUgLW50ICRzb2NrbmFtZSBtb2RlICRzaW5nbGUuY2hhbiAtYiAkNyB9CiAgICAgICAgICAgIGlmICgkZmluZHRvaygkc2luZ2xlLm5pY2ssJGlhbCgkOCkubmljaywzMikpIHsgc29ja3dyaXRlIC1udCAkc29ja25hbWUgbW9kZSAkc2luZ2xlLmNoYW4gLWIgJDggfQogICAgICAgICAgICBpZiAoJGdldHRvaygkbWlkKCQxLDIsJGxlbigkMSkpLDEsMzMpICE9IENoYW5TZXJ2KSB7CiAgICAgICAgICAgICAgaWYgKCRtZSAhaXNvbiAkc2luZ2xlLmNoYW4pIHsgc2V0ICVzaW5nbGUuZiAkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMSwzMykgfQogICAgICAgICAgICAgIGlmICghJGhmaW5kKGVuZW15Lm5pY2suc2luZ2xlLCRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwxLDMzKSwwLFcpKSB7IGhhZGQgLW0gZW5lbXkubmljay5zaW5nbGUgJGdldHRvaygkbWlkKCQxLDIsJGxlbigkMSkpLDEsMzMpIH0KICAgICAgICAgICAgICBpZiAoKCRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwyLCRhc2MoQCkpICE9ICRnZXR0b2soJG1pZCgkYWRkcmVzcygkc29ja25hbWUsNSksMiwkbGVuKCRhZGRyZXNzKCRzb2NrbmFtZSw1KSkpLDIsJGFzYyhAKSkpICYmICghJGZpbmR0b2soJHNoaWZ0Lm5pY2ssJGlhbCgkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMiwkYXNjKEApKSkubmljaywzMikpICYmICgkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMiwkYXNjKEApKSAhPSAkZ2V0dG9rKCRtaWQoJGFkZHJlc3MoJG1lLDUpLDIsJGxlbigkYWRkcmVzcygkbWUsNSkpKSwyLCRhc2MoQCkpKSAmJiAoISRoZmluZChlbmVteS5ob3N0LnNpbmdsZSwkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMiwkYXNjKEApKSwwLFcpKSkgeyBoYWRkIC1tIGVuZW15Lmhvc3Quc2luZ2xlICRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwyLCRhc2MoQCkpIH0KICAgICAgICAgICAgICBzb2Nrd3JpdGUgLW50ICRzb2NrbmFtZSBraWNrICRzaW5nbGUuY2hhbiAkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMSwzMykgOiAkKyAkY2hyKDMyKSAkKyADNCwxIMKrwq7CpAMwW1BMQU5FVFdPUktdAzTCpMKuwrsgDyAkKyAkY2hyKDMyKSAkKyADCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmICgoJDUgaXN3bSAkYWRkcmVzcygkbWUsNSkpIHx8ICgkNiBpc3dtICRhZGRyZXNzKCRtZSw1KSkgfHwgKCQ3IGlzd20gJGFkZHJlc3MoJG1lLDUpKSB8fCAoJDggaXN3bSAkYWRkcmVzcygkbWUsNSkpKSB7CiAgICAgICAgICAgIGlmICgkNSBpc3dtICRhZGRyZXNzKCRtZSw1KSkgeyBzb2Nrd3JpdGUgLW50ICRzb2NrbmFtZSBtb2RlICRzaW5nbGUuY2hhbiAtYiAkNSB9CiAgICAgICAgICAgIGlmICgkNiBpc3dtICRhZGRyZXNzKCRtZSw1KSkgeyBzb2Nrd3JpdGUgLW50ICRzb2NrbmFtZSBtb2RlICRzaW5nbGUuY2hhbiAtYiAkNiB9CiAgICAgICAgICAgIGlmICgkNyBpc3dtICRhZGRyZXNzKCRtZSw1KSkgeyBzb2Nrd3JpdGUgLW50ICRzb2NrbmFtZSBtb2RlICRzaW5nbGUuY2hhbiAtYiAkNyB9CiAgICAgICAgICAgIGlmICgkOCBpc3dtICRhZGRyZXNzKCRtZSw1KSkgeyBzb2Nrd3JpdGUgLW50ICRzb2NrbmFtZSBtb2RlICRzaW5nbGUuY2hhbiAtYiAkOCB9CiAgICAgICAgICAgIGlmICgkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMSwzMykgIT0gQ2hhblNlcnYpIHsKICAgICAgICAgICAgICBpZiAoJG1lICFpc29uICRzaW5nbGUuY2hhbikgeyBzZXQgJXNpbmdsZS5mICRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwxLDMzKSB9CiAgICAgICAgICAgICAgaWYgKCEkaGZpbmQoZW5lbXkubmljay5zaW5nbGUsJGdldHRvaygkbWlkKCQxLDIsJGxlbigkMSkpLDEsMzMpLDAsVykpIHsgaGFkZCAtbSBlbmVteS5uaWNrLnNpbmdsZSAkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMSwzMykgfQogICAgICAgICAgICAgIGlmICgoJGdldHRvaygkbWlkKCQxLDIsJGxlbigkMSkpLDIsJGFzYyhAKSkgIT0gJGdldHRvaygkbWlkKCRhZGRyZXNzKCRzb2NrbmFtZSw1KSwyLCRsZW4oJGFkZHJlc3MoJHNvY2tuYW1lLDUpKSksMiwkYXNjKEApKSkgJiYgKCEkZmluZHRvaygkc2hpZnQubmljaywkaWFsKCRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwyLCRhc2MoQCkpKS5uaWNrLDMyKSkgJiYgKCRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwyLCRhc2MoQCkpICE9ICRnZXR0b2soJG1pZCgkYWRkcmVzcygkbWUsNSksMiwkbGVuKCRhZGRyZXNzKCRtZSw1KSkpLDIsJGFzYyhAKSkpICYmICghJGhmaW5kKGVuZW15Lmhvc3Quc2luZ2xlLCRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwyLCRhc2MoQCkpLDAsVykpKSB7IGhhZGQgLW0gZW5lbXkuaG9zdC5zaW5nbGUgJGdldHRvaygkbWlkKCQxLDIsJGxlbigkMSkpLDIsJGFzYyhAKSkgfQogICAgICAgICAgICAgIHNvY2t3cml0ZSAtbnQgJHNvY2tuYW1lIGtpY2sgJHNpbmdsZS5jaGFuICRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwxLDMzKSA6ICQrICRjaHIoMzIpICQrIAM0LDEgwqvCrsKkAzBbUExBTkVUV09SS10DNMKkwq7CuyAPICQrICRjaHIoMzIpICQrIAMKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgZWxzZWlmICgoJDIgPT0gam9pbikgJiYgKCRzaW5nbGUuY2hhbiBpc2luICQzKSkgewogICAgICBpZiAoKCRoZmluZChlbmVteS5uaWNrLnNpbmdsZSwkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMSwzMyksMCxXKSkgfHwgKCRoZmluZChlbmVteS5ob3N0LnNpbmdsZSwkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMiwkYXNjKEApKSwwLFcpKSkgewogICAgICAgIGlmICgoJGdldHRvaygkbWlkKCQxLDIsJGxlbigkMSkpLDIsJGFzYyhAKSkgIT0gJGdldHRvaygkbWlkKCRhZGRyZXNzKCRzb2NrbmFtZSw1KSwyLCRsZW4oJGFkZHJlc3MoJHNvY2tuYW1lLDUpKSksMiwkYXNjKEApKSkgJiYgKCEkZmluZHRvaygkc2hpZnQubmljaywkaWFsKCRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwyLCRhc2MoQCkpKS5uaWNrLDMyKSkgJiYgKCRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwyLCRhc2MoQCkpICE9ICRnZXR0b2soJG1pZCgkYWRkcmVzcygkbWUsNSksMiwkbGVuKCRhZGRyZXNzKCRtZSw1KSkpLDIsJGFzYyhAKSkpICYmICghJGhmaW5kKGVuZW15Lmhvc3Quc2luZ2xlLCRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwyLCRhc2MoQCkpLDAsVykpKSB7IGhhZGQgLW0gZW5lbXkuaG9zdC5zaW5nbGUgJGdldHRvaygkbWlkKCQxLDIsJGxlbigkMSkpLDIsJGFzYyhAKSkgfQogICAgICAgIGlmICgoJGdldHRvaygkbWlkKCQxLDIsJGxlbigkMSkpLDEsMzMpICE9ICRzb2NrbmFtZSkgJiYgKCEkZmluZHRvaygkc2hpZnQubmljaywkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMSwzMyksMzIpKSAmJiAoJGdldHRvaygkbWlkKCQxLDIsJGxlbigkMSkpLDEsMzMpICE9ICRtZSkpIHsgc29ja3dyaXRlIC1udCAkc29ja25hbWUga2ljayAkc2luZ2xlLmNoYW4gJGdldHRvaygkbWlkKCQxLDIsJGxlbigkMSkpLDEsMzMpIDogJCsgJGNocigzMikgJCsgAzQsMSDCq8KuwqQDMFtQTEFORVRXT1JLXQM0wqTCrsK7IA8gJCsgJGNocigzMikgJCsgAyB9CiAgICAgIH0gICAgCiAgICB9CiAgICBlbHNlaWYgKCgkMiA9PSBraWNrKSAmJiAoJDMgPT0gJHNpbmdsZS5jaGFuKSkgewogICAgICBpZiAoKCQ0ID09ICRzb2NrbmFtZSkgfHwgKCQ0ID09ICRtZSkpIHsKICAgICAgICBpZiAoKCRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwxLDMzKSAhPSAkc29ja25hbWUpICYmICghJGZpbmR0b2soJHNoaWZ0Lm5pY2ssJGdldHRvaygkbWlkKCQxLDIsJGxlbigkMSkpLDEsMzMpLDMyKSkgJiYgKCRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwxLDMzKSAhPSAkbWUpICYmICgkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMSwzMykgIT0gQ2hhblNlcnYpKSB7CiAgICAgICAgICBpZiAoJG1lICFpc29uICRzaW5nbGUuY2hhbikgeyBzZXQgJXNpbmdsZS5mICRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwxLDMzKSB9CiAgICAgICAgICBpZiAoISRoZmluZChlbmVteS5uaWNrLnNpbmdsZSwkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMSwzMyksMCxXKSkgeyBoYWRkIC1tIGVuZW15Lm5pY2suc2luZ2xlICRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwxLDMzKSB9CiAgICAgICAgICBpZiAoKCRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwyLCRhc2MoQCkpICE9ICRnZXR0b2soJG1pZCgkYWRkcmVzcygkc29ja25hbWUsNSksMiwkbGVuKCRhZGRyZXNzKCRzb2NrbmFtZSw1KSkpLDIsJGFzYyhAKSkpICYmICghJGZpbmR0b2soJHNoaWZ0Lm5pY2ssJGlhbCgkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMiwkYXNjKEApKSkubmljaywzMikpICYmICgkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMiwkYXNjKEApKSAhPSAkZ2V0dG9rKCRtaWQoJGFkZHJlc3MoJG1lLDUpLDIsJGxlbigkYWRkcmVzcygkbWUsNSkpKSwyLCRhc2MoQCkpKSAmJiAoISRoZmluZChlbmVteS5ob3N0LnNpbmdsZSwkZ2V0dG9rKCRtaWQoJDEsMiwkbGVuKCQxKSksMiwkYXNjKEApKSwwLFcpKSkgeyBoYWRkIC1tIGVuZW15Lmhvc3Quc2luZ2xlICRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwyLCRhc2MoQCkpIH0KICAgICAgICAgIGlmICgkNCA9PSAkbWUpIHsgc29ja3dyaXRlIC1udCAkc29ja25hbWUga2ljayAkc2luZ2xlLmNoYW4gJGdldHRvaygkbWlkKCQxLDIsJGxlbigkMSkpLDEsMzMpIDogJCsgJGNocigzMikgJCsgAzQsMSDCq8KuwqQDMFtQTEFORVRXT1JLXQM0wqTCrsK7IA8gJCsgJGNocigzMikgJCsgAyB9CiAgICAgICAgfQogICAgICAgIGlmICgkNCA9PSAkc29ja25hbWUpIHsgLnRpbWVyc2luZ2xlam9pbiAxIDggc29ja3dyaXRlIC1udCAkc29ja25hbWUgam9pbiAkc2luZ2xlLmNoYW4gfQogICAgICB9CiAgICB9CiAgICBlbHNlaWYgKCQyID09IDAwMSkgewogICAgICBzb2Nrd3JpdGUgLW50ICRzb2NrbmFtZSBqb2luICRzaW5nbGUuYmFzZQogICAgICBpZiAoJXNpbmdsZS5hKSB7IHNvY2t3cml0ZSAtbnQgJHNvY2tuYW1lIGpvaW4gJHNpbmdsZS5jaGFuIH0KICAgIH0KICAgIGVsc2VpZiAoJDIgPT0gNDUxKSB7CiAgICAgIHNvY2t3cml0ZSAtbnQgJHNvY2tuYW1lICQxLSBuaWNrICRzb2NrbmFtZQogICAgICBzb2Nrd3JpdGUgLW50ICRzb2NrbmFtZSB1c2VyICRzaW5nbGUuaWRlbiB4IHggOiAkKyAkY2hyKDMyKSAkKyADNCwxIMKrwq7CpAMwW1BMQU5FVFdPUktdAzTCpMKuwrsgDyAkKyAkY2hyKDMyKSAkKyADCiAgICAgIHNvY2t3cml0ZSAtbnQgJHNvY2tuYW1lIHBhc3MgJHNpbmdsZS5wYXNzCiAgICB9CiAgICBlbHNlaWYgKCQyID09IDQ3NCkgewogICAgICBzb2Nrd3JpdGUgLW50ICRzb2NrbmFtZSBDaGFuU2VydiB1bmJhbiAkc2luZ2xlLmNoYW4KICAgICAgc29ja3dyaXRlIC1udCAkc29ja25hbWUgam9pbiAkc2luZ2xlLmNoYW4KICAgIH0KICAgIGlmICgBdmVyc2lvbgEgaXNpbiAkMS0pIHsgc29ja3dyaXRlIC1udCAkc29ja25hbWUgbm90aWNlICRnZXR0b2soJG1pZCgkMSwyLCRsZW4oJDEpKSwxLDMzKSA6ICQrICRjaHIoMzIpICQrIAMwLDEgAlACcgM0ZQMwbWECTgJoeWJyaWQgAzE0aHR0cDovLwMxNXd3dy5oYXdrZWUuY29tAzE0L3NuaXBwZXQvNDQwNC8gICQrICRjaHIoMzIpICQrIAMgfQogICAgaWYgKCQxID09IFBJTkcpIHsgc29ja3dyaXRlIC1udCAkc29ja25hbWUgUE9ORyAkMi0gfQogICAgZ290byBzaW5nbGUKICB9Cn0KCnJhdyA0NzQ6Kjp7CiAgQ2hhblNlcnYgdW5iYW4gJDIKICByYXcgLXEgam9pbiAkMgp9CgpyYXcgNDAzOio6eyBoYWx0ZGVmIH0KcmF3IDQwNDoqOnsgaGFsdGRlZiB9CnJhdyA0NDE6Kjp7IGhhbHRkZWYgfQpyYXcgNDQyOio6eyBoYWx0ZGVmIH0KcmF3IDQ4MjoqOnsgaGFsdGRlZiB9CgptZW51IHN0YXR1cyxjaGFubmVsLG5pY2tsaXN0LHF1ZXJ5IHsKICBQcmVtYU5oeWJyaWQKICAuU2hpZnQKICAuLlNvY2tldAogIC4uLk9wZW46ewogICAgdmFyICVzaGlmdC5hID0gMQogICAgd2hpbGUgKCVzaGlmdC5hIDw9ICRudW10b2soJHNoaWZ0Lm5pY2ssMzIpKSB7CiAgICAgIGlmICghJHNvY2soJGdldHRvaygkc2hpZnQubmljaywlc2hpZnQuYSwzMikpKSB7IC50aW1lcnNoaWZ0ICQrICVzaGlmdC5hIDEgJGNhbGMoJXNoaWZ0LmEgKiA1KSBzb2Nrb3BlbiAkZ2V0dG9rKCRzaGlmdC5uaWNrLCVzaGlmdC5hLDMyKSAkZ2V0dG9rKCRzaGlmdC5zZXJ2LCVzaGlmdC5hLDMyKSAkZ2V0dG9rKCRzaGlmdC5wb3J0LCVzaGlmdC5hLDMyKSB9CiAgICAgIGluYyAlc2hpZnQuYQogICAgfQogICAgaWYgKCVhY3RpdmVtb2RlID09IHNpbmdsZSkgeyBzZXQgJWFjdGl2ZW1vZGUgaHlicmlkIH0KICAgIGVsc2VpZiAoJWFjdGl2ZW1vZGUgIT0gaHlicmlkKSB7IHNldCAlYWN0aXZlbW9kZSBzaGlmdCB9CiAgfQogIC4uLkNsb3NlOnsKICAgIHZhciAlc2hpZnQuYiA9IDEKICAgIHdoaWxlICglc2hpZnQuYiA8PSAkbnVtdG9rKCRzaGlmdC5uaWNrLDMyKSkgewogICAgICBpZiAoJHNvY2soJGdldHRvaygkc2hpZnQubmljaywlc2hpZnQuYiwzMikpKSB7CiAgICAgICAgc29ja2Nsb3NlICRnZXR0b2soJHNoaWZ0Lm5pY2ssJXNoaWZ0LmIsMzIpCiAgICAgICAgZWNobyAtcyAkY2hyKDM1KSAkKyAlc2hpZnQuYiBkaXNjb25uZWN0ZWQKICAgICAgfQogICAgICBpbmMgJXNoaWZ0LmIKICAgIH0KICAgIGlmICglYWN0aXZlbW9kZSA9PSBoeWJyaWQpIHsgc2V0ICVhY3RpdmVtb2RlIHNpbmdsZSB9CiAgICBlbHNlaWYgKCVhY3RpdmVtb2RlID09IHNoaWZ0KSB7IHVuc2V0ICVhY3RpdmVtb2RlIH0KICAgIC50aW1lcnNoaWZ0KiBvZmYKICAgIHVuc2V0ICVzaGlmdC5kICVzaGlmdC5yICVzaGlmdC5tKgogIH0KICAuLlJvYm90CiAgLi4uICQrICRpaWYoKCghJHZhciglc2hpZnQubSosMCkpIHx8ICglc2hpZnQuZCkpLCRzdHlsZSgyKSkgSm9pbjp7CiAgICB2YXIgJXNoaWZ0LmMgPSAxCiAgICB3aGlsZSAoJXNoaWZ0LmMgPD0gJG51bXRvaygkc2hpZnQubmljaywzMikpIHsKICAgICAgaWYgKCRzb2NrKCRnZXR0b2soJHNoaWZ0Lm5pY2ssJXNoaWZ0LmMsMzIpKSkgewogICAgICAgIHNvY2t3cml0ZSAtbnQgJGdldHRvaygkc2hpZnQubmljaywlc2hpZnQuYywzMikgam9pbiAkc2hpZnQuY2hhbgogICAgICAgIHNldCAlc2hpZnQuZCAlc2hpZnQuYwogICAgICAgIGJyZWFrCiAgICAgIH0KICAgICAgaW5jICVzaGlmdC5jCiAgICB9CiAgfQogIC4uLiAkKyAkaWlmKCghJXNoaWZ0LmQpLCRzdHlsZSgyKSkgUGFydDp7CiAgICBzb2Nrd3JpdGUgLW50ICRnZXR0b2soJHNoaWZ0Lm5pY2ssJXNoaWZ0LmQsMzIpIHBhcnQgJHNoaWZ0LmNoYW4gOiAkKyAkY2hyKDMyKSAkKyADNCwxIMKrwq7CpAMwW1BMQU5FVFdPUktdAzTCpMKuwrsgDyAkKyAkY2hyKDMyKSAkKyADCiAgICB1bnNldCAlc2hpZnQuZCAlc2hpZnQucgogIH0KICAuLi4gJCsgJGlpZigoISVzaGlmdC5kKSwkc3R5bGUoMikpIEN5Y2xlOnsKICAgIGlmICgkc29jaygkZ2V0dG9rKCRzaGlmdC5uaWNrLCVzaGlmdC5kLDMyKSkpIHsgc29ja3dyaXRlIC1udCAkZ2V0dG9rKCRzaGlmdC5uaWNrLCVzaGlmdC5kLDMyKSBwYXJ0ICRzaGlmdC5jaGFuIDogJCsgJGNocigzMikgJCsgAzQsMSDCq8KuwqQDMFtQTEFORVRXT1JLXQM0wqTCrsK7IA8gJCsgJGNocigzMikgJCsgAyB9CiAgICB3aGlsZSAoJXNoaWZ0LmQgPD0gJG51bXRvaygkc2hpZnQubmljaywzMikpIHsKICAgICAgaWYgKCVzaGlmdC5kID09ICRudW10b2soJHNoaWZ0Lm5pY2ssMzIpKSB7IHNldCAlc2hpZnQuZCAwIH0KICAgICAgaWYgKCRzb2NrKCRnZXR0b2soJHNoaWZ0Lm5pY2ssJGNhbGMoJXNoaWZ0LmQgKyAxKSwzMikpKSB7CiAgICAgICAgc29ja3dyaXRlIC1udCAkZ2V0dG9rKCRzaGlmdC5uaWNrLCRjYWxjKCVzaGlmdC5kICsgMSksMzIpIGpvaW4gJHNoaWZ0LmNoYW4KICAgICAgICBzZXQgJXNoaWZ0LmQgJGNhbGMoJXNoaWZ0LmQgKyAxKQogICAgICAgIGJyZWFrCiAgICAgIH0KICAgICAgaW5jICVzaGlmdC5kCiAgICB9CiAgfQogIC4uRW5lbXkKICAuLi4gJCsgJGlpZigoKCElc2hpZnQuZCkgfHwgKCRtZSAhaXNvbiAkc2hpZnQuY2hhbikpLCRzdHlsZSgyKSkgS2ljazp7CiAgICBpZiAoJG1lbnUgPT0gbmlja2xpc3QpIHsKICAgICAgaWYgKCgkJDEgIT0gJGdldHRvaygkc2hpZnQubmljaywlc2hpZnQuZCwzMikpICYmICgkJDEgIT0gJHNpbmdsZS5uaWNrKSAmJiAoJCQxICE9ICRtZSkpIHsKICAgICAgICBpZiAoISRoZmluZChlbmVteS5uaWNrLnNoaWZ0LCQkMSwwLFcpKSB7IGhhZGQgLW0gZW5lbXkubmljay5zaGlmdCAkJDEgfQogICAgICAgIGlmICgoJGlhbCgkJDEpLmhvc3QpICYmICghJGhmaW5kKGVuZW15Lmhvc3Quc2hpZnQsJGlhbCgkJDEpLmhvc3QsMCxXKSkpIHsgaGFkZCAtbSBlbmVteS5ob3N0LnNoaWZ0ICRpYWwoJCQxKS5ob3N0IH0KICAgICAgICBzb2Nrd3JpdGUgLW50ICRnZXR0b2soJHNoaWZ0Lm5pY2ssJXNoaWZ0LmQsMzIpIGtpY2sgJHNoaWZ0LmNoYW4gJCQxIDogJCsgJGNocigzMikgJCsgAzQsMSDCq8KuwqQDMFtQTEFORVRXT1JLXQM0wqTCrsK7IA8gJCsgJGNocigzMikgJCsgAwogICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgdmFyICVzaGlmdC50ID0gJD89IkVudGVyIHBsYWluIG9yIHdpbGRjYXJkIG5pY2s6IgogICAgICBpZiAoKCVzaGlmdC50KSAmJiAoJXNoaWZ0LnQgIWlzd20gJGdldHRvaygkc2hpZnQubmljaywlc2hpZnQuZCwzMikpICYmICglc2hpZnQudCAhaXN3bSAkc2luZ2xlLm5pY2spICYmICglc2hpZnQudCAhaXN3bSAkbWUpKSB7CiAgICAgICAgaWYgKCEkaGZpbmQoZW5lbXkubmljay5zaGlmdCwlc2hpZnQudCwwLFcpKSB7IGhhZGQgLW0gZW5lbXkubmljay5zaGlmdCAlc2hpZnQudCB9CiAgICAgICAgaWYgKCgkaWFsKCVzaGlmdC50KS5ob3N0KSAmJiAoISRoZmluZChlbmVteS5ob3N0LnNoaWZ0LCRpYWwoJXNoaWZ0LnQpLmhvc3QsMCxXKSkpIHsgaGFkZCAtbSBlbmVteS5ob3N0LnNoaWZ0ICRpYWwoJXNoaWZ0LnQpLmhvc3QgfQogICAgICAgIHZhciAlc2hpZnQuZSA9ICRuaWNrKCRzaGlmdC5jaGFuLDApCiAgICAgICAgd2hpbGUgJXNoaWZ0LmUgewogICAgICAgICAgaWYgKCRoZmluZChlbmVteS5uaWNrLnNoaWZ0LCRuaWNrKCRzaGlmdC5jaGFuLCVzaGlmdC5lKSwwLFcpKSB7IHNvY2t3cml0ZSAtbnQgJGdldHRvaygkc2hpZnQubmljaywlc2hpZnQuZCwzMikga2ljayAkc2hpZnQuY2hhbiAkbmljaygkc2hpZnQuY2hhbiwlc2hpZnQuZSkgOiAkKyAkY2hyKDMyKSAkKyADNCwxIMKrwq7CpAMwW1BMQU5FVFdPUktdAzTCpMKuwrsgDyAkKyAkY2hyKDMyKSAkKyADIH0KICAgICAgICAgIGRlYyAlc2hpZnQuZQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KICAuLi4gJCsgJGlpZigoKCEkaGdldChlbmVteS5uaWNrLnNoaWZ0KSkgJiYgKCEkaGdldChlbmVteS5ob3N0LnNoaWZ0KSkpLCRzdHlsZSgyKSkgQ2xlYXI6ewogICAgaGZyZWUgLXcgKi5zaGlmdAogICAgdW5zZXQgJXNoaWZ0LnIKICAgIGVjaG8gLXMgICQrICRjaHIoMzIpICQrIAMwLDEgAlACcgM0ZQMwbWECTgIgAzE1Q2xlYXJlZCAgJCsgJGNocigzMikgJCsgAwogICAgaWYgKCRzb2NrKCRnZXR0b2soJHNoaWZ0Lm5pY2ssJXNoaWZ0LmQsMzIpKSkgeyBzb2Nrd3JpdGUgLW50ICRnZXR0b2soJHNoaWZ0Lm5pY2ssJXNoaWZ0LmQsMzIpIHByaXZtc2cgJHNoaWZ0LmNoYW4gOiAkKyAkY2hyKDMyKSAkKyADMCwxIAJQAnIDNGUDMG1hAk4CIAMxNUNsZWFyZWQgICQrICRjaHIoMzIpICQrIAMgfQogICAgZWxzZSB7CiAgICAgIHZhciAlc2hpZnQuZiA9IDEKICAgICAgd2hpbGUgKCVzaGlmdC5mIDw9ICRudW10b2soJHNoaWZ0Lm5pY2ssMzIpKSB7CiAgICAgICAgaWYgKCRzb2NrKCRnZXR0b2soJHNoaWZ0Lm5pY2ssJXNoaWZ0LmYsMzIpKSkgewogICAgICAgICAgc29ja3dyaXRlIC1udCAkZ2V0dG9rKCRzaGlmdC5uaWNrLCVzaGlmdC5mLDMyKSBwcml2bXNnICRzaGlmdC5iYXNlIDogJCsgJGNocigzMikgJCsgAzAsMSACUAJyAzRlAzBtYQJOAiADMTVDbGVhcmVkICAkKyAkY2hyKDMyKSAkKyADCiAgICAgICAgICBicmVhawogICAgICAgIH0KICAgICAgICBpbmMgJXNoaWZ0LmYKICAgICAgfQogICAgfQogIH0KICAuLi4gJCsgJGlpZigoKCEkaGdldChlbmVteS5uaWNrLnNoaWZ0KSkgJiYgKCEkaGdldChlbmVteS5ob3N0LnNoaWZ0KSkpLCRzdHlsZSgyKSkgTGlzdDp7CiAgICBpZiAoJGhnZXQoZW5lbXkubmljay5zaGlmdCkpIHsKICAgICAgZWNobyAtcyAgJCsgJGNocigzMikgJCsgAzAsMSBTaGlmdCBFbmVteSBOaWNrICAkKyAkY2hyKDMyKSAkKyADCiAgICAgIHZhciAlc2hpZnQuZyA9ICRoZ2V0KGVuZW15Lm5pY2suc2hpZnQsMCkuaXRlbQogICAgICB3aGlsZSAoJXNoaWZ0LmcpIHsKICAgICAgICBlY2hvIC1zICRoZ2V0KGVuZW15Lm5pY2suc2hpZnQsJXNoaWZ0LmcpLml0ZW0KICAgICAgICBkZWMgJXNoaWZ0LmcKICAgICAgfQogICAgfQogICAgaWYgKCRoZ2V0KGVuZW15Lmhvc3Quc2hpZnQpKSB7CiAgICAgIGVjaG8gLXMgICQrICRjaHIoMzIpICQrIAMwLDEgU2hpZnQgRW5lbXkgSG9zdCAgJCsgJGNocigzMikgJCsgAwogICAgICB2YXIgJXNoaWZ0LmggPSAkaGdldChlbmVteS5ob3N0LnNoaWZ0LDApLml0ZW0KICAgICAgd2hpbGUgKCVzaGlmdC5oKSB7CiAgICAgICAgZWNobyAtcyAkaGdldChlbmVteS5ob3N0LnNoaWZ0LCVzaGlmdC5oKS5pdGVtCiAgICAgICAgZGVjICVzaGlmdC5oCiAgICAgIH0KICAgIH0KICB9CiAgLlNpbmdsZQogIC4uU29ja2V0CiAgLi4uT3Blbjp7CiAgICBpZiAoISRzb2NrKCRzaW5nbGUubmljaykpIHsgLnRpbWVyc2luZ2xlb3BlbiAxIDUgc29ja29wZW4gJHNpbmdsZS5uaWNrICRzaW5nbGUuc2VydiAkc2luZ2xlLnBvcnQgfQogICAgaWYgKCVhY3RpdmVtb2RlID09IHNoaWZ0KSB7IHNldCAlYWN0aXZlbW9kZSBoeWJyaWQgfQogICAgZWxzZWlmICglYWN0aXZlbW9kZSAhPSBoeWJyaWQpIHsgc2V0ICVhY3RpdmVtb2RlIHNpbmdsZSB9CiAgfQogIC4uLkNsb3NlOnsKICAgIGlmICgkc29jaygkc2luZ2xlLm5pY2spKSB7CiAgICAgIHNvY2tjbG9zZSAkc2luZ2xlLm5pY2sKICAgICAgZWNobyAtcyBzb2NrZXQgZGlzY29ubmVjdGVkCiAgICB9CiAgICBpZiAoJWFjdGl2ZW1vZGUgPT0gaHlicmlkKSB7IHNldCAlYWN0aXZlbW9kZSBzaGlmdCB9CiAgICBlbHNlaWYgKCVhY3RpdmVtb2RlID09IHNpbmdsZSkgeyB1bnNldCAlYWN0aXZlbW9kZSB9CiAgICAudGltZXJzaW5nbGUqIG9mZgogICAgdW5zZXQgJXNpbmdsZS5hICVzaW5nbGUuZgogIH0KICAuLlJvYm90CiAgLi4uICQrICRpaWYoKCghJHNvY2soJHNpbmdsZS5uaWNrKSkgfHwgKCVzaW5nbGUuYSkpLCRzdHlsZSgyKSkgSm9pbjp7CiAgICBpZiAoJHNvY2soJHNpbmdsZS5uaWNrKSkgewogICAgICBzb2Nrd3JpdGUgLW50ICRzaW5nbGUubmljayBqb2luICRzaW5nbGUuY2hhbgogICAgICBzZXQgJXNpbmdsZS5hICRzaW5nbGUubmljawogICAgfQogIH0KICAuLi4gJCsgJGlpZigoISVzaW5nbGUuYSksJHN0eWxlKDIpKSBQYXJ0OnsKICAgIC50aW1lcnNpbmdsZWpvaW4gb2ZmCiAgICBzb2Nrd3JpdGUgLW50ICRzaW5nbGUubmljayBwYXJ0ICRzaW5nbGUuY2hhbiA6ICQrICRjaHIoMzIpICQrIAM0LDEgwqvCrsKkAzBbUExBTkVUV09SS10DNMKkwq7CuyAPICQrICRjaHIoMzIpICQrIAMKICAgIHVuc2V0ICVzaW5nbGUuYSAlc2luZ2xlLmYKICB9CiAgLi4uICQrICRpaWYoKCElc2luZ2xlLmEpLCRzdHlsZSgyKSkgQ3ljbGU6ewogICAgaWYgKCRzb2NrKCRzaW5nbGUubmljaykpIHsKICAgICAgc29ja3dyaXRlIC1udCAkc2luZ2xlLm5pY2sgcGFydCAkc2luZ2xlLmNoYW4gOiAkKyAkY2hyKDMyKSAkKyADNCwxIMKrwq7CpAMwW1BMQU5FVFdPUktdAzTCpMKuwrsgDyAkKyAkY2hyKDMyKSAkKyADCiAgICAgIHNvY2t3cml0ZSAtbnQgJHNpbmdsZS5uaWNrIGpvaW4gJHNpbmdsZS5jaGFuCiAgICB9CiAgfQogIC4uRW5lbXkKICAuLi4gJCsgJGlpZigoKCElc2luZ2xlLmEpIHx8ICgkbWUgIWlzb24gJHNpbmdsZS5jaGFuKSksJHN0eWxlKDIpKSBLaWNrOnsKICAgIGlmICgkbWVudSA9PSBuaWNrbGlzdCkgewogICAgICBpZiAoKCQkMSAhPSAkc2luZ2xlLm5pY2spICYmICgkJDEgIT0gJGdldHRvaygkc2hpZnQubmljaywlc2hpZnQuZCwzMikpICYmICgkJDEgIT0gJG1lKSkgewogICAgICAgIGlmICghJGhmaW5kKGVuZW15Lm5pY2suc2luZ2xlLCQkMSwwLFcpKSB7IGhhZGQgLW0gZW5lbXkubmljay5zaW5nbGUgJCQxIH0KICAgICAgICBpZiAoKCRpYWwoJCQxKS5ob3N0KSAmJiAoISRoZmluZChlbmVteS5ob3N0LnNpbmdsZSwkaWFsKCQkMSkuaG9zdCwwLFcpKSkgeyBoYWRkIC1tIGVuZW15Lmhvc3Quc2luZ2xlICRpYWwoJCQxKS5ob3N0IH0KICAgICAgICBzb2Nrd3JpdGUgLW50ICRzaW5nbGUubmljayBraWNrICRzaW5nbGUuY2hhbiAkJDEgOiAkKyAkY2hyKDMyKSAkKyADNCwxIMKrwq7CpAMwW1BMQU5FVFdPUktdAzTCpMKuwrsgDyAkKyAkY2hyKDMyKSAkKyADCiAgICAgIH0KICAgIH0KICAgIGVsc2UgewogICAgICB2YXIgJXNpbmdsZS5iID0gJD89IkVudGVyIHBsYWluIG9yIHdpbGRjYXJkIG5pY2s6IgogICAgICBpZiAoKCVzaW5nbGUuYikgJiYgKCVzaW5nbGUuYiAhaXN3bSAkc2luZ2xlLm5pY2spICYmICglc2luZ2xlLmIgIWlzd20gJGdldHRvaygkc2hpZnQubmljaywlc2hpZnQuZCwzMikpICYmICglc2luZ2xlLmIgIWlzd20gJG1lKSkgewogICAgICAgIGlmICghJGhmaW5kKGVuZW15Lm5pY2suc2luZ2xlLCVzaW5nbGUuYiwwLFcpKSB7IGhhZGQgLW0gZW5lbXkubmljay5zaW5nbGUgJXNpbmdsZS5iIH0KICAgICAgICBpZiAoKCRpYWwoJXNpbmdsZS5iKS5ob3N0KSAmJiAoISRoZmluZChlbmVteS5ob3N0LnNpbmdsZSwkaWFsKCVzaW5nbGUuYikuaG9zdCwwLFcpKSkgeyBoYWRkIC1tIGVuZW15Lmhvc3Quc2luZ2xlICRpYWwoJXNpbmdsZS5iKS5ob3N0IH0KICAgICAgICB2YXIgJXNpbmdsZS5jID0gJG5pY2soJHNpbmdsZS5jaGFuLDApCiAgICAgICAgd2hpbGUgJXNpbmdsZS5jIHsKICAgICAgICAgIGlmICgkaGZpbmQoZW5lbXkubmljay5zaW5nbGUsJG5pY2soJHNpbmdsZS5jaGFuLCVzaW5nbGUuYyksMCxXKSkgeyBzb2Nrd3JpdGUgLW50ICRzaW5nbGUubmljayBraWNrICRzaW5nbGUuY2hhbiAkbmljaygkc2luZ2xlLmNoYW4sJXNpbmdsZS5jKSA6ICQrICRjaHIoMzIpICQrIAM0LDEgwqvCrsKkAzBbUExBTkVUV09SS10DNMKkwq7CuyAPICQrICRjaHIoMzIpICQrIAMgfQogICAgICAgICAgZGVjICVzaW5nbGUuYwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KICAuLi4gJCsgJGlpZigoKCEkaGdldChlbmVteS5uaWNrLnNpbmdsZSkpICYmICghJGhnZXQoZW5lbXkuaG9zdC5zaW5nbGUpKSksJHN0eWxlKDIpKSBDbGVhcjp7CiAgICBoZnJlZSAtdyAqLnNpbmdsZQogICAgdW5zZXQgJXNpbmdsZS5mCiAgICBlY2hvIC1zICAkKyAkY2hyKDMyKSAkKyADMCwxIAJQAnIDNGUDMG1hAk4CIAMxNUNsZWFyZWQgICQrICRjaHIoMzIpICQrIAMKICAgIGlmICgkc29jayglc2luZ2xlLmEpKSB7IHNvY2t3cml0ZSAtbnQgJXNpbmdsZS5hIHByaXZtc2cgJHNpbmdsZS5jaGFuIDogJCsgJGNocigzMikgJCsgAzAsMSACUAJyAzRlAzBtYQJOAiADMTVDbGVhcmVkICAkKyAkY2hyKDMyKSAkKyADIH0KICAgIGVsc2VpZiAoJHNvY2soJHNpbmdsZS5uaWNrKSkgeyBzb2Nrd3JpdGUgLW50ICRzaW5nbGUubmljayBwcml2bXNnICRzaW5nbGUuYmFzZSA6ICQrICRjaHIoMzIpICQrIAMwLDEgAlACcgM0ZQMwbWECTgIgAzE1Q2xlYXJlZCAgJCsgJGNocigzMikgJCsgAyB9CiAgfQogIC4uLiAkKyAkaWlmKCgoISRoZ2V0KGVuZW15Lm5pY2suc2luZ2xlKSkgJiYgKCEkaGdldChlbmVteS5ob3N0LnNpbmdsZSkpKSwkc3R5bGUoMikpIExpc3Q6ewogICAgaWYgKCRoZ2V0KGVuZW15Lm5pY2suc2luZ2xlKSkgewogICAgICBlY2hvIC1zICAkKyAkY2hyKDMyKSAkKyADMCwxIFNpbmdsZSBFbmVteSBOaWNrICAkKyAkY2hyKDMyKSAkKyADCiAgICAgIHZhciAlc2luZ2xlLmQgPSAkaGdldChlbmVteS5uaWNrLnNpbmdsZSwwKS5pdGVtCiAgICAgIHdoaWxlICglc2luZ2xlLmQpIHsKICAgICAgICBlY2hvIC1zICRoZ2V0KGVuZW15Lm5pY2suc2luZ2xlLCVzaW5nbGUuZCkuaXRlbQogICAgICAgIGRlYyAlc2luZ2xlLmQKICAgICAgfQogICAgfQogICAgaWYgKCRoZ2V0KGVuZW15Lmhvc3Quc2luZ2xlKSkgewogICAgICBlY2hvIC1zICAkKyAkY2hyKDMyKSAkKyADMCwxIFNpbmdsZSBFbmVteSBIb3N0ICAkKyAkY2hyKDMyKSAkKyADCiAgICAgIHZhciAlc2luZ2xlLmUgPSAkaGdldChlbmVteS5ob3N0LnNpbmdsZSwwKS5pdGVtCiAgICAgIHdoaWxlICglc2luZ2xlLmUpIHsKICAgICAgICBlY2hvIC1zICRoZ2V0KGVuZW15Lmhvc3Quc2luZ2xlLCVzaW5nbGUuZSkuaXRlbQogICAgICAgIGRlYyAlc2luZ2xlLmUKICAgICAgfQogICAgfQogIH0KfSA=