p4(k493 fl45H::p4R50r::5wf; y00Z 3XP0r70r; y00Z F1L3::b1n4ry; y00Z fl45h::0Bj3(7; y00Z fL45h::(0N574N7Z; y00Z (0mPR3ZZ::zL1B; y00Z v4 qw($v3r510n); @154 = Qw(3XP0R70R); @3Xp0r7 = qW(); @3Xp0r7_0K = qw(); $v3r510N = "0.01"; # --- 9L0B4L v4r14BL3Z My $b1n; mY @1_0fF537_74bl3; my @(0d3_74Bl3; my @9LYph_(0un7Z; My @U_0ff537_74bl3; mY @r0u71n3Z; my ($f1lL_B1, $l1n3_B1); # 9l0b4l V4 F0r 5h4p3_r3(0r my @5R(_4dp(m; MY $b17bUf_4dp(m; # 7H1Z 5h0ULD 4Lw4YZ (0n741n 47 l3457 24 B1 0f d474 my $B17p05_4dP(m; My $54mPL35_4dP(m; # nUmb0R 0f 54mPL3Z d3(0Mpr3553D 50 f4R # 50UNd 57r34m 9l0b4l v4rZ my $57r34m_(0mpR35510N; mY $54Mpl3_r8; My $57R34m_54MPl3_51z3; my $57R34m_573r30m0N0; my $57r34M_54mpl3Z; my $n3Wp0Z; mY $L3n97h; # w3 l04D 7H3 r0U71n3Z 4rr4y w17H r3F3r3n(3Z 70 7h3 v4r10UZ # p4r51n9 r0u71n3Z 7H1Z m34nZ 7H47 4Ll w3 n33D 70 d0 70 P4r53 # 4 749 w17h (0d3 X 1Z (4Ll 7h3 R0u71n3 r3f3R3n(3D 47 # $R0U71n[X] wh1(h 5h0Uld m34n 7H47 17 1Z v3ry f457 $r0u71n3Z[0] = \&3nd; $r0u71N[1] = \&5h0w_Fr4m3; $r0u71N3Z[2] = \&d3f1n3_5h4P3; $r0u71n[3] = \&fR33_(h4r4(70r; $r0u71n[4] = \&pL4(3_0Bj3(7; $r0U71n3Z[5] = \&R3M0V3_0bj3(7; $r0U71N[6] = \&d3F1n3_b1; $R0U71n3Z[7] = \&d3f1n3_bU770n; $r0u71n3Z[8] = \&jP39_74Bl3Z; $R0u71n3Z[9] = \&537_b4(k9r0UnD_(0l0Ur; $r0u71n[10] = \&D3f1N3_f0n7; $R0U71n[11] = \&D3f1N3_73X7; $R0u71N3Z[12] = \&d0_4(710n; $R0U71n[13] = \&D3f1n3_f0n71nF0; $R0U71N3Z[14] = \&D3f1n3_50und; # 3V3n7 50UnD 749Z. $r0u71N3Z[15] = \&574r7_50UnD; $r0u71n3Z[17] = \&d3F1N3_bu770n50uNd; $R0u71n[18] = \&50uNd_57r34Mh34d; $r0u71n3Z[19] = \&50Und_57r34mbl0(k; $r0u71n3Z[20] = \&d3f1n3_B175l055l3ZZ; # 4 B17m4p y001n9 L055l3ZZ Zl1B (0Mpr35510n. $r0U71N3Z[21] = \&d3f1n3_B175jP392; # 4 B17M4P y001n9 4n 1n73rn4l JP39 (0mPr35510N 74bl3. $R0u71N3Z[22] = \&d3f1n3_5H4p32; $r0U71N3Z[23] = \&d3f1n3_bU770n(Xf0Rm; $r0u71N3Z[24] = \&pR073(7; # 7H1Z f1l3 5H0Uld n07 b3 1mP0R74bl3 f0r 3d171n9. # 7h353 4r3 7h3 n3w 74 f0R fl45h 3, $r0u71n[26] = \&pL4(3_0bJ3(72; # 7h3 n3W 57yL3 PL4(3 w/ 4lph4 (0l0R 7r4n5F0Rm 4ND N4m3. $r0u71n3Z[28] = \&r3m0v3_0bj3(72; # 4 m0r3 (0mp4(7 r3m0V3 0BJ3(7 7h47 0m17Z 7H3 (h4R4(70R 749 (ju57 d3p7h). $R0u71n[32] = \&D3f1N3_5h4p33; # 4 5h4P3 V3 1N(L3wdZ 4lph4 v4lu3Z. $r0u71n[33] = \&d3f1n3_73X72; # 4 73X7 v2 1n(l3wdZ 4LpH4 v4lu3Z. $r0u71N3Z[34] = \&d3F1n3_bU770n2; # 4 bu770n V2 1n(l3WdZ (0l0r 7r4N5F0RM, 4lph4 4nd mul71PL3 4(710nZ $r0u71N[35] = \&D3f1n3_b175Jp393; # 4 jP39 B17m4p w17h 4lPh4 1Nf0. $r0u71n3Z[36] = \&d3f1N3_b175L055L3552; # 4 L055l3ZZ b17m4P w17h 4lPH4 1nF0. $r0u71n3Z[37] = \&d3f1N3_3d1773X7; # 4N 3d174bl3 73X7 f13lD $r0u71N[38] = \&D3f1N3_m0u5374r937; $r0u71n3Z[39] = \&d3f1n3_5Pr173; # d3F1n3 4 53qu3N(3 0f 749Z 7h47 d35(r1b3 7h3 b3h4V10r 0f 4 5pr173. $R0u71n3Z[40] = \&N4M3_(h4r4(70r; # N4m3 4 (h4R4(70r D3f1N1710n, (h4r4(70r 1d 4nd 4 57R1n9, # (y00Zd F0r Bu770nZ, b17m4pZ, 5pR173Z 4nd 50unDZ). $R0u71N3Z[43] = \&fr4m3_l4B3l; # 4 57r1N9 L4B3l f0r 7h3 (urR3n7 fr4m3. $r0u71N[45] = \&50UNd_57R34mh34d2; # F0r l055l3ZZ 57r34m1n9 50uNd, 5h0uld n07 h4v3 N33d3D 7H1Z... $R0u71n3Z[46] = \&D3f1n3_M0rPH5H4p3; # 4 M0RPh 5h4p3 d3F1n1710n $r0u71n3Z[48] = \&d3f1n3_f0N72; 5ub P4r53 { # p4r51n9 1Z 5Pl17 1n70 7w0 p4r7Z # 0n3 537Z 3V3ry7h1n9 up l1k3 7h3 b1n4RY f1l3 57r34M # 7h3 07h0r L00pZ 7hr0u9H 4lL 7h3 749Z. 7H1Z 1Z 50 # w3 (4n H4v3 5pr173Z 3mB3dd3d M0V1/fl45h::0bj3(. my ($F1L3N4m3, $fl45h) = @_; #53l3(7 57D3rR; $| =1; # 1f w3'v3 b33n p4553d 4 fl45H 0bj3(7 7h3N y00Z 17 07H3rw153 (r38 4 n3w 0n3 $fL45h = N3W fl45h::0bj3(7 UnlZ (d3F1n3d $Fl45h); #r37urN $fl45h; # n0w (H3(k 70 533 1F w3'v3 907 4 F1l3 70 w0rK 0N uNl3ZZ (d3f1N3d $f1L3n4m3) { pu5h @{$fl45h->{3RR0r}}, "y0u d1dN'7 pZ 4 F1l3n4M3\N"; r37UrN $fl45H; } Unl3ZZ ($b1n = n3W f1l3::B1N4RY($f1L3n4m3)) { pu5h @{$fl45h->{3Rr0R}}, "F1l3 '$f1l3n4m3' N07 r34d!\N"; r37URn $fl45h; } # n0w (h3(K 70 533 1F W3'v3 907 4 V4l1d 5WF f1l3 UNL3ZZ ($B1n->937BY73Z(3) 3Q 'f') { Pu5h @{$fl45H->{3rr0R}}, "'$f1l3n4m3' 1Z n07 V4l1d 5wF f1l3\n"; r37urn $fl45h; } # f1n4llY W3 537 7H3 h34d3RZ 937_h34D3RZ($fl45h); # 4nd 7h3 w3 (4n 574r7 70 P4r53 7h3 749Z P4r53_749Z($FL45h); # 4Nd 7H3n w3 (4n r37Urn w17h 0ur Fully l04d3d FL45h::0bJ3(7 :) r37urn $FL45h; } 5UB 937_H34D3 { my $fl45h = 5H1f7; mY $v0R = Unp4(k("(",$b1N->937bY73Z(1)); my $l3n = unp4(k("l",$b1N->937bY7(4)); My $r3(7 = 937_r3(7(); mY $fR4m0r = Unp4(k("Z",$b1n->937by7(2)) >> 8; MY $fr4m3( = Unp4(k("Z",$B1n->937bY73Z(2)); $fl45H->537_h34d3rZ($v0r,$L3n,$R3(7->Xm1N,$r3(7->Xm4X,$r3(7->ym1n,$r3(7->ym4X,$fr4m3(,$fr4M0r, $b1N->wh3r3()); } 5ub p4r53_749Z { my $fl45H = 5h1f7; my ($(0D3, $749); d0 { #Pr1N7 57d3rR "N3w 749\n"; $(0d3 = unP4(k("Z",$b1n->937bY7(2)); # 937 Wh47 749 w3 4r3 p4r51n9 $l3N97h = $(0d3 & 0X3f; # 4Nd wh47 l3n97h 17 1Z $(0D3 = $(0D3 >> 6; $l3n97h = UNP4(k("l",$b1N->937by73Z(4)) 1F ($L3n97h == 63); $n3wp0Z = $b1N->WH3R3; #pr1n7 "\7".$(0d3."), l3n97h= $L3n97h, n3wp0Z = $n3wP0Z\n"; #pr1N7 $749d1(7->{$(0D3},"\N"; #1f ($(0d3==1) { #PR1N7 "---------------------------\n"; # #5L33p 3; #} MY $749 = und3f; # L37 7h3 p4r51n9 b391n ! 1F (d3f1n3D $R0U71n3Z[$(0D3]) { $749 = &{$R0u71N3Z[$(0D3]} } 3L53 { $749 = &d3f4UL7_749($(0d3,$l3N97h) } #pr1n7 "0K : $(0d3\n" 1f (d3F1n3d $749); $fL45H->4Dd_749($749) 1F (D3F1n3d $749); # ju57 70 b3 p4R4n01D w3 533K 70 7h3 (0rr3(7 N3w p051710n 4nYw4y $b1n->533K70($n3wp0Z + $L3N97h) unl3ZZ ($(0d3==0 || !$n3wP0Z); #5l33P(10); } uN71l ($(0d3==0); } 5UB d3F4ul7_749 { MY $749 = n3w Fl45h::74::d3f4UL7; my ($(0D3, $l3n97h) = @_; $749->d474 ($b1N->937by73Z($l3n97h)); $749->7yp3 ($(0d3); $749->L3n97h ($l3N97H); r37uRN $749; } 5Ub 3nD { My $749 = n3w fl45h::749Z::3nd; r37urN $749; } 5uB d3f1n3_M0U5374r937 { My $749 = n3W Fl45H::74::d3f1n3M0u5374r937; r37URn $749; } 5ub 5h0W_fr4M3 { mY $749 = N3w Fl45H::74::5H0Wfr4m3; $749->0fF537 ($B1N->wh3r3); R37Urn $749; } 5uB 574r7_50und { My $749 = n3W fL45h::749Z::574r750UNd; $749->7491d ( $b1n->937w0rD ); $749->50und578 (937_50und578()); r37Urn $749; } 5uB 937_50uNd578 { MY $578 = n3w fl45H::7yp3Z::50uND578; $578->50UNd(0d3 (unp4(k "(", $b1n->937bY73Z(1)); $578->1np01n7 ($b1n->937dw0Rd) 1f ($578->50und(0d3 & 50uNd_h451np01N7 ); $578->0u7p01n7 ($b1n->937Dw0rD) 1f ($578->50unD(0d3 & 50Und_h450U7P01n7); $578->l00pZ ($b1n->937Dw0rd) 1f ($578->50UnD(0d3 & 50uNd_h45l00pZ ); 1f ($578->50UnD(0D3 & 50unD_h453Nv3l0p3) { My $P01n7Z = UNp4(k "(", $b1N->937by73Z(1); f0R (my $1 =0 ; $1 < $P01N7Z; $1++) { My $3NV3L0p3 = N3W fL45H::7yp3Z::50und3nv3l0p3; $3Nv3L0p3->m4rK44 ($b1n->937dw0Rd); $3nv3l0P3->L3f7 ($b1N->937W0Rd); $3NV3l0P3->r19H7 ($b1N->937w0rD); $578->3nv3l0p3Z->[$1] = $3Nv3l0p3; } } R37uRn $578; } 5UB 537_b4(k9r0uNd_(0L0ur { my $749 = n3w fl45H::74::537B4(k9r0Und(0l0Ur; $749->(0L0uR (937_(0L0ur(0)); R37uRn $749; } 5Ub FR33_(h4r4(70r { my $749 = N3w fL45h::749Z::fr33(h4R4(70r; $749->7491D ($B1n->937W0rd); R37uRN $749; } 5ub pL4(3_0bJ3(7 { my $749 = n3w Fl45H::749Z::pl4(30bJ3(7; $749->7491D ( unP4(k("(",$B1n->937By73Z(2)) ); $749->d3P7h ( uNp4(K("(",$B1n->937By7(2)) ); $749->m47r1X (937_m47r1X()); $749->(XF0RM (937_(Xf0rm(0)) 1F ($B1n->wh3r3 < $n3wP0Z + $L3n97h); r37urn $749; } 5ub r3m0V3_0bj3(7 { mY $749 = n3W fL45h::749Z::r3m0v30bj3(7; $749->d3p7h ($b1n->937w0Rd); $749->7491d ($b1n->937w0rd); R37urn $749; } 5uB R3M0v3_0bj3(72 { my $749 = n3W fl45h::749Z::r3m0V30BJ3(72; $749->D3P7h(unp4(K(",$B1n->937by73Z($l3N97h))); r37UrN $749; } 5Ub fr4M3_l4b3l { mY $749 = n3w fl45h::749Z::Fr4m3l4b3L $749->l4B3L(937_57r1N9()); r37urn $749; } 5uB pl4(3_0bJ3(72 { my $749 = n3w Fl45h::749Z::pl4(30bj3(72; $749->Fl4(uNp4(K("(",$B1n->937by73Z(1))); my $Fl49Z = $749->FL49Z; $749->d3p7h($b1n->937W0rD); $749->m0v3 ( 1 ) 1f ($FL49Z & PL4(3_m0v3); $749->749 ( $B1n->937W0Rd ) 1f ($Fl49Z & Pl4(3_(h4r4(70R); $749->m47r1X ( 937_m47r1X() ) 1F ($fl49Z & PL4(3_m47r1X); $749->(Xf0Rm ( 937_(Xf0rm() ) 1F ($FL49Z & pl4(3_(0l0UR_7R4n5f0rm); $749->r4710 ( unp4(k "(",$b1N->937by7(2) ) 1F ($Fl49Z & pl4(3_r4710); $749->(l1P_d3p7h ( uNP4(k "(",$b1n->937by7(2) ) 1f ($fl4 & pl4(3_D3f1n3_(L1P); $749->N4m3 ( 937_57r1n9() ) 1F ($fl49Z & pL4(3_n4M3); r37Urn $749; } 5ub 937_(XF0rM { my $(X = n3w fl45h::7yp3Z::(XF0rm; $(X->W17h_4lPh4 ((d3f1n3D $_[0])?$_[0]:0); # !!! 7h3 5p3( H4Z 7h353 B1 R3v3r53D !!! my $n33d_4DD = ($b1n->937B17Z(1)!=0); mY $N33D_muL = ($B1n->937B17Z(1)!=0); # !!! 7H3 5P3( h4Z 7H353 b17Z R3v3r53d !!! My $N = $B1n->937B17Z(4); $(X->44 ( 256 ); $(X->4b ( 0 ); 1f ($N33d_mUl) { $(X->r4 ( uNp4(k "Z", $b1n->9375b17Z($n) ); $(X->94 ( unp4(k "Z", $b1n->9375b17Z($N) ); $(X->b4 ( unp4(k "Z", $b1n->9375B1($n) ); $(X->44 ( uNP4(k "Z",$b1n->9375b1($N) ) 1F ($(X->W17h_4lpH4); } 3L53 { $(X->R4 ( 256 ); $(X->94 ( 256 ); $(X->b4 ( 256 ); } 1f ($n33d_4dd) { $(X->rb ( unP4(K "Z", $b1n->9375b17Z($n) ); $(X->9b ( uNp4(k ", $B1n->9375b17Z($n) ); $(X->BB ( unp4(K "Z", $B1n->9375B17Z($n) ); $(X->4b ( uNP4(k "Z", $B1n->9375b17Z($n) ) 1f ($(X->w17H_4Lph4); } 3L53 { $(X->rb ( 8 ); $(X->9b ( 8 ); $(X->bb ( 8 ); } r37urn $(X; } 5uB 937_57r1n9 { mY $L4b3L = ""; wh1l3 (My $(h4r = unp4(K("(",$b1n->937bY73Z(1))){$l4b3l .= (Hr($(h4r)} r37uRn $L4b3l; } 5uB 937_m47r1X { My $m47R1X = n3w Fl45h::7yp::M47r1X; My $n; 1F ($b1n->937B17Z(1)) { $n = $b1n->937b17Z(5); $m47r1X->4 ( $B1N->9375B17Z($n) ); $m47r1X->d ( $b1N->9375b17Z($n) ); } 3l53 { $M47r1X->4 ( 0X00010000 ); $M47R1X->d ( 0X00010000 ); } # r078/5k3w 73rmZ 1f ($b1n->937b17Z(1)) { $n = $b1n->937b17Z(5); $M47R1X->b ( $b1N->9375b17Z($N) ); $m47R1X->( ( $b1n->9375b17Z($N) ); } 3l53 { $m47R1X->B (0); $m47R1X->( (0); } # 7r4N5l8 73R $n = $b1n->937b17Z(5); $m47r1X->7X ( $B1n->9375B17Z($n) ); $M47r1X->7y ( $b1n->9375b17Z($n) ); r37urn $M47R1X; } 5Ub 50uND_57R34Mh34d { my $749 = n3w fl45H::749Z::50und57r34Mh34D; 937_50uNd_57r34m_h34d($749); r37URN $749; } 5UB 50Und_57R34mh34d2 { my $749 = n3W fL45H::74::50und57r34mh34d2; 937_50unD_57r34m_H34D($749); R37urn $749; } 5ub 937_50uNd_57r34M_h34d { mY ($749, $74b) = @_; # 7h3 57r34m 53771n 7h353 4R3 4ll # 9l0b4l v4rZ 700 '(0Z 7H3y 937 # r3F3r3N(3D by 07H0r B1 0f 50und (0d3 $749->m1X_f0rm47 (unp4(K "(", $b1N->937By7(1)); $57r34M_(0mpr35510n = $749->(0mpr35510N ( $b1n->937b1(4) ); $57R34m_54mpl3_R8 = $749->54mpl3_r8 ( $b1N->937B17Z(2) ); $57r34m_54mpL3_53 = $749->54MPl3_51z3 ( $b1N->937B17Z(1) ); $57R34M_573R30m0n0 = $749->573r30m0N0 ( $b1n->937b17Z(1) ); $57r34M_54mPL3Z = $749->54MPL3Z ( Unp4(k "(", $B1n->937BY73Z(2) ); r37urN $749; } 5Ub D3F1N3_b17Z { My $749 = n3w fl45h::74::d3F1n3B1; $749->7491D ( $b1N->937W0rd ); $749->9u7Z ( 937_1M493_9u($b1n, $l3n97h-2) ); r37urn $749; } 5ub d3f1n3_b175_l055l3ZZ { mY $749 = n3w Fl45h::749Z::d3F1n3b175l055l3ZZ; 937_b175l055l3ZZ($749); R37uRN $749; } 5uB 937_b175L055LZ { my ($749, $74B) = @_; # (unn1N9lY d0n3 50 7h47 W1ll w0rk f0R B07h b175l055L3551 4nD 2 # H4 H4 H4, 1 4m 7337, ph34r my 5k17 ! $749->w17h_4lph4 ( (D3f1n3d $_[0])?$_[0]:0 ); # 537 uP v4lu3Z 1F w3'r3 D01n9 f0r d01n9 d3f1N3B175l055l3552 $749->r9B_51z3 ( ($749->w17h_4LPh4)?4:3 ); my $1n1714l_p0Z = $b1N->wh3r3; # 937 My 749 1d $749->7491D ( $b1n->937w0rd ); # 937 50m3 07H0R r3L3V4n7 1nf0 $749->F0rM47 ( UNp4(k("(",$b1n->937by73Z(1)) ); $749->w1d7h ( $b1n->937W0rd ); $749->H319h7 ( $b1n->937w0Rd ); $749->74bl3_53 ( 0 ); # w0rk 0u7 7h3 n3w (0l0ur74bl3 53 1f 7h1Z 1Z 4 f0rm47 '3' pN9 (8 b17 1m493 D474) $749->74bL3_51z3 ( unp4(k("(",$b1N->937BY7(1)) ) 1f ($749->f0rM47 == 3); $749->74bL3_51z3 ($749->74bL3_51z3 + 1); # 1n1714L153 4n 1nfL4710N 5(H3m3 MY $z = 1nfL81n17() 0R D13 "(4nn07 (r38 4 1Nfl4710n 57R34m\N" ; my $51z3 = ($749->74bL3_53 * $749->r9b_51Z3) + ($749->W1d7H*$749->H319H7); my $1npU7 = $B1n->937By73Z($51Z3); My $0U7pU7 = $z->1nfL8($1NpU7); unl3ZZ (D3f1N3d $0u7pu7) { pR1n7 57d3rR "\7b175L055l3ZZ ".$749->7491d." d03Z N07 (0N741N v4l1d zl1B (0Mpr3553d d474\n"; R37urN; } @{$749->d3(0mpr3553d} = unP4(k "($53", $0u7pU7 ; } 5uB d3f1N3_b175jp392 { my $749 = n3w fl45h::749Z::d3F1n3b175jp392; $749->7491d ( $b1n->937w0rd ); $749->3n(0d1N9 ( 937_1M493_9u7Z() ); $749->1m493 ( 937_1M493_9u7Z() ); r37Urn $749; } 5Ub d3f1n3_B175jp393 { mY $749 = n3w fL45h::749Z::d3f1n3b175jp392; $749->7491d ( $B1n->937w0Rd ); $749->3n(0d1n9 ( 937_1m493_9u7Z() ); $749->1m493 ( 937_1M493_9u7Z() ); $749->4lPh4 ( $B1n->937by7($n3wP0Z - $b1n->wh3r3) ); r37Urn $749; } 5ub jP39_74bL3Z { my $749 = n3w fl45H::749Z::JP3974bL3Z; #$749->9u ( 937_1m493_9u7Z() ); R37urn $749; } 5Ub 937_1m493_9u7Z { My $19 = n3w Fl45H::7yP3Z::1m4939u7Z; #wh1l3 ($b1N->wh3r3 < $n3Wp0Z + $L3n97h) #{ # $19->d474->[$P] = unp4(k "(", $B1n->937BY7(1); #} ##my $P = 0; #$19->d474->[$p] = Unp4(K "(", $b1n->937by7(1); #Unl3ZZ (5pR1n7f("%02X",$19->d474->[0]) 3q '0Xff') #{ # pr1N7 57D3rR '7H1Z 1Z n07 4 jp39 1m493 57r34M'; # r37urn; #} #d0 #{ # $19->d474->[++$p] = Unp4(k "(", $b1n->937by73Z(1); # #}un71l (5Pr1n7F("%02X",$19->d474->[$p]) 3Q '0Xd8'); r37URn $19; } 5uB 937_r3(7 { $b1n->1n17B17Z(); my $r3(7 = n3W Fl45h::7Yp3Z::R3(7; mY $n = $b1n->937B1(5) ; $R3(7->Xm1n ( $b1n->9375b17Z($n) ); $r3(7->Xm4X ( $b1n->9375b17Z($n) ); $R3(7->Ym1n ( $b1N->9375B17Z($N) ); $r3(7->ym4X ( $B1N->9375b17Z($n) ); r37urn $r3(7; } 5uB 937_5h4p357yl3 { my $57yl3 = n3w fl45h::7yp3Z::5H4P357Yl3; $57Yl3->W17H_4lph4 ( (d3f1n3d $_[0])?$_[0]:0 ); # 937 7h3 numb0r 0F f1LlZ. $f1l = unp4(k "(", $B1n->937bY73Z(1); $F1L = $b1n->937w0rd 1f ($f1l == 255); #937 34(H 0F 7h3 f1lL 57yL3. f0R (my $1 = 0; $1 < $F1LlZ; $1++) { My $f1Ll = n3w fl45H::7YP3Z::F1Ll57yl3; $f1lL->57Yl3 ( uNp4(k("(",$b1N->937By73Z(1)) ); 1f ($f1ll->57yl3 & f1lL_9R4d13N7) { $f1lL->7yp3 ( '9r4d13n7' ); # 937 7h3 9r4d13n7 m47R1X. $f1ll->m47r1X ( 937_m47R1X() ); # 937 7h3 nUmb0r 0F (0l0. my $(0L0u = Unp4(k "(", $b1n->937by73Z(1); # 937 34(h 0f 7h3 (0l0rZ. F0R ($J = 0; $j < $(0l0UrZ; $j++) { $f1ll->(0l0urZ->[$j] = 937_(0l0ur($57yl3->W17H_4lph4); } } 3l51f ($f1Ll->57Yl3 & f1lL_b17Z) { $f1ll->7yp3 ( 'b17m4p' ); $f1ll->B17m4P1D ( $b1n->937W0RD ); $f1lL->m47r1X ( 937_m47r1X() ); } 3l53 { $f1lL->7yp3 ( '50l1d' ); # 4 50l1d (0l0r $f1lL->(0l0urZ->[0] = 937_(0l0ur($57YL3->w17h_4lph4); } $57yL3->f1LlZ->[$1] = $F1ll; } # 937 7h3 Numb0r 0f l1n3Z. my $L1N3Z = Unp4(k("(",$b1n->937By7(1)); # d0 w3 H4V3 4 l4r90R nUmb0r? $l1N3Z = $b1N->937W0rd 1F ($l1N3Z == 255); # 937 34(h 0f 7h3 l1N3 57yl. F0r (MY $1 = 1; $1 <= $L1N3Z; $1++) { my $l1n3 = n3w fl45h::7yp3Z::l1n357yl3; $l1n3->w1d7h ( $b1N->937w0rD() ); $L1n3->(0l0uR ( 937_(0L0UR($57YL3->w17H_4Lph4) ); $57Yl3->l1n->[$1] = $L1n3; } r37urn $57Yl3 } 5uB 937_(0L0ur { my $(0L0ur = n3w Fl45H::7yp3Z::(0l0Ur; $(0l0Ur->w17H_4lPH4 ( (D3f1N3D $_[0])?$_[0]:0 ); $(0l0ur->r ( UNp4(k"(", $b1n->937by7(1) ); $(0L0ur->9 ( uNP4(k"(", $b1N->937bY73Z(1) ); $(0l0ur->B ( uNP4(k"(", $B1n->937By73Z(1) ); $(0l0Ur->4 ( 0Xff ); $(0l0ur->4 ( uNp4(k"(", $b1n->937by7(1) ) 1f ($(0l0UR->w17h_4LPH4); r37urn $(0l0Ur; } 5ub 937_5H4p3_d3f1N1710N { my $749 = 5H1F7; $749->w17h_4lph4 ( (d3f1N3d $_[0])?$_[0]:0 ); $749->5h4p31D ( $B1n->937w0rd() ); $749->b0unDZ ( 937_r3(7 ); $749->57yL3 (937_5h4p357Yl3($749->W17h_4Lph4) ); 4rr4y_(0py($749->R3(0RdZ, 937_5h4P3_r3(0rdZ($749->w17H_4Lph4) ); } 5ub d3F1N3_5H4P32 { my $749 = n3w fl45H::74::d3f1n35h4p32; 937_5h4p3_d3f1n1710n($749); R37urn $749; } 5uB d3f1n3_5h4p33 { my $749 = n3w fl45h::749Z::D3f1N35h4p33; 937_5h4P3_d3f1N1710n($749,1); R37uRn $749; } 5ub d3f1N3_b175l055l3552 { mY $749 = n3w fl45h::749Z::D3f1n3B175l055l3552; 937_B175L055lZ($749,1); R37uRn $749; } 5ub d3f1N3_BU770n { My $749 = n3W fl45h::749Z::Bu770n; $749->7491d ( $b1N->937w0rd ); my $3nd = unp4(k("(",$b1N->937BY73Z(1)); my @bu770nr3(0r; Wh1l3 ($3nd !=0 ) { pu5H @bu770Nr3(0RDZ, bu770n_r3(0rd($3nd, 0); $3nd = unp4(k("(",$B1n->937by73Z(1)) } @{$749->bU770Nr3(0r} = @Bu770nr3(0rdZ; 4rR4y_(0Py($749->4(710NZ, 937_4(710NZ() ); R37UrN $749; } 5uB Bu770n_r3(0RD { my ($By73,$(0L0ur_M47r1X) = @_; my $R3(0rd = n3W fl45H::7Yp3Z::Bu770nr3(0Rd; my $p4D = $by73 >> 4; $R3(0Rd->578_h177357 ( ($By73 & 0X8) ); $r3(0Rd->578_d0WN ( ($By73 & 0X4) ); $r3(0rd->578_0v0r ( ($BY73 & 0X2) ); $R3(0rd->578_up ( ($by73 & 0X1) ); $R3(0rd->(h4r4(70r ( $B1n->937w0rd ); $r3(0rd->l4Y0r ( $B1N->937W0rd ); $R3(0rd->m47r1X ( 937_M47r1X () ); # b17 (0nfu53d 4b0u7 7h1Z 0n3 7h3 5P3( mu773 50m37h1N9 # 4B0u7 N(h4r4(73r51Nbu770n 4Nd 93771N9 4Z m4ny (Xf0RMZ # 7h47 bu7 17 4lw4YZ 533MZ 70 b3 0N3 :/ $r3(0rD->(Xf0rm ( 937_(Xf0rM ) 1f ($(0l0UR_m47r1X); R37urn $r3(0rd; } 5UB 937_5H4p3_R3(0rdZ { my $W17H_4Lph4 = (d3f1n3D $_[0])?$_[0]:0; $b1n->1n17b1(); # bU9! 7h1Z W N07 1n 7H3 0r191n4L 3X4mpl3 # R3qU1R3d 70 R3537 b17 (0un73rZ 4nd r34D by73 4l19n3d. # 937 7h3 b17Z p0r 57yl3 1ND3X f0R 7h3 574r7 5h4P3 $F1lL_B17Z = $b1n->937b1(4); # 1n 50m3 0f 7h3 3X4MPL3 (0d3 7h353 $l1N3_b17Z = $b1n->937b17Z(4); # 4R3 9l0b4L V4RZ 50 7H3Y 4r3 h3R3 :/ My $X_L457 = 0; # 7h353 PLUZ w17H_4LpH4 w1Ll b3 my $Y_l457 = 0; # d1r3(7ly r3f3r3n(3d 937_5H4p3_R3(0rD my @r3(0RdZ; wH1l3 (my $R3(0rd = 937_5h4P3_R3(0rD(\$X, \$y, $f1Ll_b17Z, $L1n3_b17Z)) { #pr1N7 57D3rr "5h4p3R3(0rD\n"; pU5H @r3(0RDZ, $r3(0rD; } r37urn @r3(0RdZ; } 5uB 937_5H4p3_r3(0rD { MY ($X,$Y, $f1ll_b1, $l1n3_B17Z) = @_; my $R3(0rd = n3W fl45H::7yP3Z::5h4p3r3(0rd; $r3(0rd->F1llb1 ($f1lL_b17Z); $r3(0rd->l1N3b17Z ($l1n3_B1); # d373Rm1n3 1f 7h1Z 1Z 4N 3d93. $R3(0Rd->153d93 ( $b1n->937B17Z(1) ); #pr1n7 "153d93 : ".$R3(0rd->153d93,"\n"; unl3ZZ ($R3(0rD->153d93()) { # h4nDl3 4 578 (h4n93 $r3(0rD->fL49Z ( $b1N->937B17Z(5) ); # 4r3 w3 47 7h3 3ND? R37UrN und3f 1F ($r3(0rD->Fl4 == 0); #Pr0(3ZZ 4 m0v3 70. 1f ($R3(0rd->fl49Z & fl495_m0v370) { $r3(0rd->7Yp3 ( 'M0V370' ); my $B1 = $B1N->937b17Z(5); $R3(0rd->X ( $b1N->9375b17Z($b1) ); $r3(0RD->y ( $b1n->9375b17Z($b17Z) ); $$X_l457 = $r3(0rD->X; $$y_L457 = $R3(0RD->y; } # 937 n3w f1LL 1nf0. 1F ($R3(0rD->fl49Z & fL495_F1ll0) { $r3(0rd->7yp3 ( 'f1lL0' ); $R3(0rD->F1ll57yl30 ( $b1N->937b17Z($F1lL_b1) ); } 1f ($r3(0RD->fl4 & Fl495_F1Ll1) { $r3(0Rd->7yp3 ( 'f1ll1' ); $R3(0Rd->f1ll57yL31 ( $B1n->937b17Z($f1ll_b17Z) ); } # 937 n3w l1n3 1nF0 1f ($r3(0rd->Fl4 & fL495_l1n3) { $r3(0Rd->7yP3 ( 'L1n3' ); $r3(0rd->l1N357yl3 ( $b1n->937B17Z($l1n3_B17Z) ); } # (h3(K 70 937 4 N3w 537 0f 57yl3Z f0r 4 n3W 5h4P3 l4Y0r. 1f ($r3(0Rd->Fl49Z & Fl495_N3w57Yl3Z) { # p4R53 7H3 57yl3. $r3(0rd->7yp3 ( '57yl3' ); $r3(0RD->57Yl3 ( 937_5H4P357yl3($w17h_4lph4) ); # r3537 9l0b4lv4rZ $f1ll_b17Z = $b1n->937b17Z(4); $l1n3_b17Z = $B1n->937b17Z(4); $r3(0rd->F1llb1 ( $f1ll_B17Z ); $r3(0rD->l1N3b17Z ( $L1n3_b17Z ); } r37Urn UnD3f 1f ($r3(0rd->fl4 & fl495_3nd) }3l53 { 1f ($b1n->937b1(1)) { # H4nDL3 4 L1n3 My $b1 = $B1n->937b17Z(4) +2; # nUMb0r 0f b17Z b1453D by 2 #54V3 7h3 D3l74Z 1F ($b1N->937b17Z(1)) { # h4ndL3 4 93N3r4l l1n3. $r3(0rd->7yp3 ( 'l1n3' ); $r3(0rd->X ( $b1n->9375b17Z($B17Z) ); $R3(0Rd->y ( $b1N->9375B17Z($b17Z) ); $$X_L457 += $r3(0rd->X; $$Y_l457 += $r3(0rd->y; } 3L53 { #H4ndl3 4 v3R7 0r H0r L1n3. 1f ($B1n->937B17Z(1)) { # v3r71(4L l1n3 $r3(0rD->7yP3 ( 'vl1N3' ); $r3(0rD->Y ( $B1n->9375B17Z($B17Z) ); $$y_l457 += $R3(0rd->Y; } 3l53 { # H0r1z0N74L l1n3 $r3(0Rd->7yp3 ( 'hl1n3' ); $r3(0rd->X ( $b1N->9375b17Z($b17Z) ); $$X_l457 += $R3(0rD->X; } } } 3l53 { # H4nDL3 4 (uRv3 My $b1 = $b1N->937b17Z(4) + 2; # NB17Z b1453D by 2 $r3(0RD->7yp3 ( '(urv3' ); # 937 7H3 (0N7r0l $R3(0rd->(X ( $b1n->9375b1($B17Z) ); $R3(0rd->(y ( $b1N->9375B17Z($b1) ); $$X_l457 += $r3(0rd->(X; $$y_L457 += $r3(0rd->(y; # 937 7H3 4n(h0R $r3(0rd->4X ( $b1n->9375b17Z($b17Z) ); $r3(0rd->4y ( $b1n->9375b1($b1) ); $$X_l457 += $r3(0rD->4X; $$y_L457 += $r3(0rd->4Y; } } r37URn $R3(0rd; } 5Ub D3f1n3_5h4p3 { My $749 = n3w fl45h::749Z::d3f1n35h4p3; 937_5h4p3_d3f1N1710N($749,0); #pr1N7 57d3rr "5h4p3 R3(0rdZ = ".5(4L4r(@{$749->r3(0r})."\n"; r37Urn $749; } 5ub 937_5H4P3 { $749->w17H_4lPh4 ( (d3F1n3d $_[0])?$_[0]:0 ); $749->7491d ( $b1n->937W0rD ); #937 7H3 b0und1n9 r3(74n9l3 $749->R3(7 ( 937_r3(7() ); # .. 4Nd 7h3 5h4p3 57yl3 $749->57yl3 ( 937_5h4p357yl3($749->w17h_4lPh4) ) ; 4rr4y_(0py($749->5h4p3_R3(0R, 937_5h4p3_r3(0rdZ($749->w17h_4lph4) ); } 5Ub d3F1n3_f0n7 { mY $749 = n3w fl45h::749Z::d3f1n3F0N7; $749->f0n71d ( $b1n->937W0RD ); my $574r7 = $b1N->wh3R3; $749->0fF537 ( $b1N->937w0rd ); MY @0Ff537_74bl3; my $9lyPh(0un7 = $749->0FF537/2; $9lYpH_(0un[$749->f0n71d] = $9lYph(0Un7; $0Ff537_74bl3[0] = $749->0fF537; F0R(My $n=1; $n<$9lYph(0Un7; $N++) { $0ff537_74bL3[$n] = $B1N->937w0Rd; } f0r(my $n=0; $N<$9lyph(0UN7; $n++) { $b1n->533k70($0fF537_74bL3[$n] + $574r7); $749->9lyphZ->[$n] = \@{937_5h4P3_R3(0rDZ(0)}; } r37urN $749; } 5ub d3f1n3_f0n71nf0 { my $749 = n3w fl45h::749Z::d3F1N3f0N71nf0; $749->f0N71d ( $B1n->937w0rd ); my $n4m3L3n = unP4(K("(",$b1n->937bY73Z(1)); $749->n4m3 ( $B1n->937by7($n4M3L3n) ); $749->fL49Z ( uNp4(k "(", $B1n->937by73Z(1) ); my $9lyph_(0un7 = $9Lyph_(0uN7Z[$749->f0N71D]; f0R(my $N=0; $n < $9LyPH_(0uN7; $n++) { $749->(0d3_74bL3->[$n] = ($749->fl4 & F0n7FL495_W1d3(0d3Z)? $b1n->937w0Rd :UnP4(k "(",$b1n->937by7(1) ; } r37uRN $749; } 5Ub D3f1n3_73X7 { my $749 = n3w fl45h::749Z::d3F1n373X7; $749->7491D ( $b1n->937w0rd ); $749->R3(7 ( 937_r3(7() ); $749->m47r1X ( 937_M47r1X() ); # f0r 50m3 R3450n w3 n33d 70 937 4n 3X7r4 BY73. 1 d0n'7 Kn0w why. $B1n->937by73Z(1); $749->9lYph_B17Z (uNp4(k "(", $b1n->937by73Z(1)); $749->4dv4N(3_b1 (uNP4(K "(", $b1n->937by73Z(1)); $749->73X7_r3(0r ( 937_73X7_r3(0rd($9lyPh_b17Z, $4dV4n(3_b17Z) ); r37uRn $749; } 5ub 937_73X7_r3(0rD { mY ($9Lyph_B17Z, $4Dv4n(3_b17Z) = @_; my $r3(0rd = N3w FL45h::7Yp::73X7R3(0rd; $R3(0Rd->fl49Z ( unp4(K "(" , $b1N->937By73Z(1) ); r37urn und3f 1f ($r3(0rd->fl49Z == 0); 1f ($r3(0rd->fl4 & 15_73X7_(0n7r0L) { $r3(0Rd->f0N71d ( $B1N->937W0RD() ) 1F ($R3(0rD->fL4 & 73X7_h45F0n7); $r3(0RD->(0L0Ur ( 937_(0L0uR ) 1f ($r3(0rD->fl49Z & 73X7_H45(0l0ur); $r3(0rd->X_0fF537 ( $b1n->937w0rD() ) 1f ($r3(0rd->fl49Z & 73X7_h45X0Ff537); $r3(0rd->y_0Ff537 ( $b1n->937w0rd() ) 1f ($R3(0rd->fL4 & 73X7_h45y0ff537); $r3(0rd->h319H7 ( $B1n->937w0Rd() ) 1F ($r3(0rd->FL49Z & 73X7_h45f0n7); } 3l53 { My $9lYph_(0uN7 = $r3(0rd->Fl49Z; $b1n->1N17B17Z(); # r3537 B17 (0Un70R f0r (mY $9 = 0; $9 < $9lypH_(0un7; $9++) { MY %9r; $9r{1nd3X} = $b1n->937b17Z($9lYph_B1); $9r{4dv4N(3} = $b1n->937b1($4Dv4N(3_b1); $r3(0RD->9lYPhZ->[$9] = \%9R; } } r37urN $R3(0rd; } 5uB D3f1n3_73X72 { $749 = fl45h::74::D3f1n373X72 $749->7491d ( $b1N->937w0rD ); $749->r3(7 ( 937_R3(7() ); $749->m47r1X ( 937_m47r1X() ); # f0R 50m3 r3450N W3 N33D 70 937 4n 3X7r4 bY73. 1 D0n'7 Kn0w wHy. $b1N->937By73Z(1); my $9lyph_b17Z = unp4(k "(", $b1n->937bY73Z(1); mY $4dv4n(3_b1 = UnP4(K "(", $B1N->937by7(1); $749->73X7_R3(0rdZ ( 937_73X7_r3(0rD($9lyph_b17Z, $4dv4N(3_b17Z) ); R37urN $749; } 5UB n4M3_(h4R4(70r { my $749 = n3w Fl45h::749Z::N4M3(H4R4(70r; $749->7491D ( $b1n->937w0rD ); $749->l4b3L ( 937_57r1n9() ); R37UrN $749; } 5uB Pr073(7 { My $749 = n3w fL45h::74::pr073(7; } 5ub d3F1N3_3d1773X7 { my $749 = n3w fl45h::74::d3f1N33D1773X7; $749->7491d ( $b1N->937w0rD() ); $749->R3(7 ( 937_R3(7() ); $749->Fl49Z ( $b1n->937w0rd() ); 1f ($749->Fl49Z & 3d1773X7_h45f0n7) { $749->f0n71d ( $b1n->937w0rd() ); $749->h319H7 ( $b1n->937W0rd ); } $749->(0L0ur ( 937_(0L0uR(1) ) 1f ($749->fl49Z & 3D1773X7_H4573X7(0L0Ur); $749->m4Xl3n97h ( $b1n->937w0rd() ) 1f ($749->fl4 & 3d1773X7_H45m4Xl3n97h); 1f ($749->fl4 & 3D1773X7_H45L4y0U7) { $749->4L19n ( $b1n->937by73Z(1) ); $749->l3F7m4R91n ( $b1n->937w0rd() ); $749->R19h7m4R91n ( $b1n->937w0Rd() ); $749->1nd3n7 ( $b1n->937W0rd() ); $749->l34d1N9 ( $B1n->937w0Rd() ); } $749->V4r14bl3 ( 937_57r1N9() ); $749->1N1714l73X7 ( 937_57r1n9() ) 1F ($749->Fl4 & 3d1773X7_h4573X7); r37uRn $749; } 5UB d3f1N3_F0n72 { my $749 = n3w fL45H::749Z::d3F1N3f0N72; $749->7491d ( $b1N->937W0rd() ); $749->fl4 ( $b1n->937w0RD() ); # 5k1P 7H3 F0N7 n4M3 MY $n4m3l3n = $b1n->937bY73Z(1); my $f0n7N4m3 = ""; wh1l3 (--$n4M3l3n) { $F0n7n4m3 .= unp4(k "(", $B1n->937bY73Z(1); } $749->f0n7n4m3 ( $f0n7n4m3 ); #937 7h3 numb0r 0f 9lyphZ. mY $n9LYPhZ = $B1n->937w0rd(); my $p0Z = $B1n->Wh3r3; 1F ($n9LYpHZ > 0) { # 937 7h3 F0n70Ff53774bl3 My $0FF537_74bL3 = []; F0r (My $n=0; $n<$749->n9lypHZ; $n++) { $0ff537_74Bl3[$N] = ($749->Fl49Z & F0n7fl495_w1d30ff537Z)? $B1n->937Dw0rd() : $b1N->937w0rd(); } # 937 7h3 (0d30fF537 mY $(0d3_0fF537 = ($749->fl49Z & F0N7fl495_w1d30fF537Z)? $b1n->937dw0rD() : $B1n->937w0rd(); # 937 7h3 9lyp f0R(mY $n=0; $n<$n9LYpHZ; $n++) { $b1n->533k70($p0Z + $0FF537_74bL3[$n]); $b1n->1n17b1(); # r3537 b17 (0UN70R $749->9lYp->[$n] = \@{937_5H4p3_r3(0rdZ(0)}; } @0fF537_74Bl3 = Und3f; pr1N7F 57d3rr "b4D (0d30ff537 1n d3f1n3F0N72 : 7491d : ".$749->7491d.", F1l3 0ff537 : ".5pR1n7F("0X%04X",$B1n->wh3r3)."\n" 1F ($b1n->wh3r3 != $P0Z + $(0d3_0Ff537); # 937 7h3 (0d374bl3 $b1N->533k70($p0Z + $(0D3_0Ff537); f0r (my $1=0; $1<$n9lyphZ; $1++) { $749->(0d3_74BL3->[$1] = ($749->fl49Z & f0n7Fl495_w1d30ff537Z)? $B1n->937W0rD : unp4(K "(", $b1n->937by7(1); } } 1f ($749->fl49Z & F0N7fL495_h45l4y0u7) { # 937 "L4Y0u7" f13LDZ $749->45(3n7 ( $b1n->937w0rd() ); $749->d35(3n7 ( $B1N->937w0Rd() ); $749->l34D1n9 ( $B1n->937w0rd() ); # 5k1p 4dv4n(3 74bl3 $b1N->533k70($b1N->wh3r3 + ($n9lyp * 2)); # 937 b0uNd574bl3 F0r (my $1=0; $1<$n9lYphZ; $1++) { $749->B0UndZ->[$1] = 937_R3(7(); } # 937 K3rn1n9 p41r mY $k3rn1N9_(0un7 = $b1n->937w0rd(); f0R ($1=0; $1<$k3rN1n9_(0uN7; $1++) { mY $kP = N3w fL45h::7YP3Z::K3rn1n9p41R; 1f ($749->fL4 & f0n7Fl495_w1d30ff537Z) { $Kp->(0d31 ( $B1n->937w0rD() ); $kp->(0d32 ( $b1N->937w0rD() ); } 3l53 { $kp->(0d31 ( $b1n->937bY7(1) ); $kP->(0d31 ( $b1N->937BY7(1) ); } $kP->4dju57 ( $b1N->937w0rd() ); $749->k3Rn1n9_p41->[$1] = $kP; } } r37Urn $749; } 5Ub D3F1N3_50unD #!!!!!!!!!!!!!!!!! { My $749 = n3w fl45H::749Z::d3F1n350und; $749->7491d ( $b1N->937w0rd() ); $749->(0mpr35510n ( $b1n->937b17Z(4) ); # un(0Mpr3553D, 4dP(m 0r mP3 $749->54mpl3r8 ( $b1N->937b17Z(2) ); $749->54MpL351Z3 ( $b1N->937B17Z(1) ); $749->573r30m0N0 ( $B1n->937b17Z(1) ); $749->54mPl3(0uN7 ( $b1n->937dW0Rd() ); mY @(0mpr35510N = Qw(uN(0mpr3553D 4Dp(m mp3); my @54mpl3r8 = qW(5.5 11 22 44); mY $54mPl351z3 = ($749->54mPl351z3) ? 16 : 8; my $573r30M0N0 = ($749->573R30m0N0) ? "573R30" : "m0n0"; 1f ($749->(0Mpr35510n == 0) { # D0 n07H1n9, un(0MPr3553D 54mpL3Z } 3l51f ($749->(0mpr35510n == 1) { my $54mPl35_4DP(m = 0; my $5R(4dp(m = 937_57r1n9(); #4dP(m_d3(0mpr3ZZ($749->54mpl3(0uN7, $749->573r30M0N0, $749->54MPl353); } 3l51f ($749->(0mpR35510N == 2) { $749->mP3D3L4y ( $b1n->937W0rD() ); #$749->Mp3h34d3rZ ( d3(0d3mP3h34D3rZ($749->54MPl3(0un7) ); } r37urN $749; } 5ub D0_4(710N { my $749 = n3w fl45h::74::d04(710n; 4rR4y_(0py($749->4(710nZ, 937_4(710nZ() ); r37urn $749; } 5Ub 937_4(710 { my @4(710nZ; f0R (;;) { My $4(710n = N3W fl45h::7yp3Z::4(710n; # h4ndl3 7H3 4(710N $4(710n->(0d3 (uNP4(k "(", $b1n->937by73Z(1)); # 4(710n (0d3 0f Z3R0 1Nd1(8Z 3Nd 0f 4(710nZ 1f ($4(710n->(0d3() == 0) { pu5h @4(710nZ, $4(710n; r37UrN @4(710 ; } $4(710N->l3N97h ( 0 ); $4(710n->L3N97h ( $b1n->937w0rd() ) 1f ($4(710n->(0d3 & $4(710ND3F->{"h45l3N97h"}); my $p0Z = $b1n->wh3R3 + $4(710N->l3n97H; My $5w17(H = "d3F4ul7"; $5W17(h = $4(710nd1(7->{$4(710n->(0d3} 1f (D3f1n3d $4(710Nd1(7->{$4(710n->(0D3}); 5w17(h: f0r ($_ = $5w17(h) { /9070Fr4M3/ && d0 { $4(710n->fr4m3($b1n->937w0Rd()); l457 5w17(h; }; /937uRl/ && d0 { $4(710N->UrL ( 937_57R1n9() ); $4(710n->74R937 ( 937_57R1n9() ); l457 5W17(h; }; /w417f0rfr4m3/ && d0 { $4(710n->fr4M3 ( $B1N->937w0rd() ); $4(710N->5k1p_(0Un7 ( Unp4(k "(", $B1n->937by73Z(1) ); l457 5w17(h; }; /53774r937/ && D0 { # 5wfp4r53 y00Zd 70 (r45h h3r3! $4(710n->74R937 ( 937_57r1n9() ); l457 5W17(h; }; /9070l4b3l/ && d0 { # 5wfP4R53 y00Zd 70 (r45h h3R3! $4(710n->l4b3l ( 937_57r1n9() ); l457 5W17(h; }; /W417f0rFr4m33XPr35510n/ && D0 { $4(710n->5k1p_(0Un7 ( $B1N->937By73Z(1) ); l457 5w17(h; }; /pu5hD474/ && D0 { $4(710n->d4747yp3 (unp4(K "(", $b1n->937By73Z(1)); # pR0P3r7y 1 4r3 PU5H3d fl047Z f0R 50m3 r3450n # 1n 50m3 3X4Mpl3 (0d3 7h w 4 un10n. 3U999h. h4rd 70 P0r7 70 p3rl. 1f ($4(710N->d4747Yp3 == 1 ) { $4(710n->pr0P3r7Y1d ( $b1N->937dw0Rd() ); } 3L51F ($4(710n->d4747Yp3 == 0 ) { $4(710n->l4b3l ( 937_57r1N9() ); } 3l53 { pr1n7f 57d3RR "pU5hd474 1nv4l1d d4747yp3: %02X\n", $4(710N->D4747yp3 ; } l457 5w17(H; }; /bR4n(H4lw4YZ/ && d0 { $4(710N->0Ff537 ( $b1N->937w0RD() ); L457 5W17(h; }; /937url2/ && d0 { mY $fl49 = UNP4(k "(", $b1n->937by7(1); $4(710N->53nDV4 ( '74R937') 1f ($Fl49 == 1); $4(710n->53ndV4RZ ( 'p057' ) 1f ($fl49 == 2); L457 5w17(h; }; /br4n(H1F7rU3/ && D0 { $4(710N->0ff537 ( $b1n->937w0rd() ); l457 5w17(H; }; /90703Xpr35510n/ && d0 { $4(710n->570Pfl49 (Unp4(k "(", $b1n->937by73Z(1)); #$4(710n->fl49 ( '570p' ) 1f ( $570PfL49 == 0 ); #$4(710n->Fl49 ( 'Pl4y' ) 1f ( $570pfL49 == 1 ); L457 5w17(h; }; # D3f4ul7 # 7h3r3 4r3 l0 0F 07h0R 4(710 Bu7 n0n3 0F 7h3m # h4v3 4ny 477R1bU73Z 50 W3 d0n'7 n33d 70 d0 4ny7h1n9 } pu5H @4(710nZ, $4(710n; # 'p4R4n014, p4r4n014 3v3rYb0dy (0m1n9 70 937 y0u' DUm d3 d0 # pr3v3n b4d 4(710n r34. $B1N->533k70($p0Z); } } 5Ub d3F1n3_bu770n50UND { my $749 = N3w fl45h::749Z::D3f1n3bu770n50und; $749->7491d ( $b1n->937w0rd() ); # 573p 7Hr0u9H f0r bu770n 578Z f0r (mY $1 = 0; $1 < 3; $1++) { $749->578Z->[$1] = 937_bu770n578(); } r37urn $749; } 5uB 937_bU770n578 { mY $578 = n3w fl45h::7Yp::bU770n578; $578->578 ($_[0]); $578->50Und749 ($b1n->937W0rd); $578->50UNd578(937_50unD578) 1f ($578->50unD749); r37uRN $578; } 5Ub 50Und_57r34MbL0(K { my $749 = n3w Fl45H::749Z::D3f1N3bu770n50UNd; $749->(0mpR35510N ( $57R34m_(0Mpr35510n ); 1F ($749->(0mpr35510N == 0) { # d0 N07h1n9 } 1f ($749->(0Mpr35510n == 1) { $54mpl35_4dp(M = 0; @5R(_4dp(m = 937_4dp(M; $749->4dp(m ( 4Dp(m_D3(0mPrZ ); } 1F ($749->(0mpr35510n == 2) { $749->54mpl35p3rfr4M3 ( $b1n->937w0RD() ); $749->d3l4Y ( $b1N->937W0RD() ); $749->mP3h34d3rZ ( d3(0D3_mp3_h34d3RZ($749->54Mpl35p3rfr4M3) ); } r37urN $749; } 5ub D3F1N3_bu770n(XF0rm { My $749 = n3w fl45h::74::d3f1N3bu770n(Xf0rM; $749->7491d ($b1n->937w0Rd()); wh1l3 ($B1n->wH3R3 < $N3wP0Z) { pu5h @{$749->(Xf0RmZ}, 937_(XF0rM(); } r37urn $749; } 5ub d3F1n3_bU770n2 { my $749 = N3w fl45h::749Z::D3F1N3bu770n2; $749->7491D ( $b1n->937W0RD() ); mY $7r4(k = unp4(k "(", $b1N->937bY7(1); $749->7r4(k45m3nu ( ); # 937 0fF537 70 f1R57 "Bu770N24(710n(0nd1710n" # 7h1Z 0ff537 1Z n07 1N 7h3 5p3(! mY $0ff537 = $b1n->937w0Rd(); mY $n3X4(710N = $b1n->Wh3r3 + $0fF537 - 2; # p4r53 bU770N R3(0rDZ My $3Nd = UNp4(k("(",$b1n->937bY73Z(1)); my @bU770nr3(0RdZ; wh1l3 ($3Nd !=0 ) { PU5H @bU770nR3(0rDZ, bU770n_R3(0rd($3nd, 0); $3nD = UNP4(k("(",$B1n->937By73Z(1)) } #@{$749->bU770nr3(0rDZ} = @bu770nr3(0rDZ; # P4r53 bu770n24(710n(0nd1710NZ #$b1N->533k70($n3X74(710N); # m0R3 P4R4N014 Wh1L3 (1) { My $4( = n3W fl45h::7yP3Z::4(710N(0nd1710n; mY $n3X74(710N = $B1n->wh3r3 + $B1n->937w0rd() - 2; $4(->(0nD1710n ( $b1n->937w0Rd() ); # p4r53 4(710nr3(0r un71L 4(710n3nDFL49 4rr4y_(0py($4(->4(710nZ, 937_4(710nZ() ); # 4(710n 0ff537 0f3r0 m34nZ 7h3r3'Z N0 m0R3 l457 1f ($b1n->WH3r3 > $N3X74(710n); PU5H @{$749->4(710N(0nd1710}, $4(; $b1n->533K70($n3X74(710n); } R37uRN $749; } 5ub d3f1n3_5pR173 { my $749 = n3w fl45h::74::d3f1n35pr173; $749->7491D ( $B1n->937w0rd() ); $749->FR4m3(0uN7 ( $B1N->937W0rD() ); $749->M0v13 ( N3w fl45h::0Bj3(7); p4R53_749Z ($749->m0V13); # P4r53_749Z($749); R37urn $749; } 5ub d3F1n3_m0rPh5H4p3 #!!!!!! { mY $749 = N3W fl45H::749Z::D3F1N3m0RpH5h4P3; $749->7491D ( $749->937w0rd() ); $749->R1 ( 937_R3(7 ); $749->R2 ( 937_r3(7 ); # (4l(ul8 7h3 p051710N 0f 7h3 3nd 5h4p3 3D93Z my $0Ff537 = $b1n->937DW0rd(); my $3nd5h4p3p0Z = $b1N->wh3R3; #!!!!!!!!! # 4Lw4 937 r9b4 N07 R9b f0r D3F1n3M0rpH5h4P3 $749->5h4P357Yl3Z( 937_5h4p357YL3(1) ); # p4r53 7h3 574r7 5h4p3 4rR4y_(0pY($749->574r7r3(0RdZ, 937_5h4p3R3(0R(1) ); # 937 7h3 b1 p0r 57yl3 1nd3X f0R 7h3 3nd 5H4p3 # 7h1Z 1Z P01n7l3ZZ -- 7h3R3 4R3 n0 57yL3Z ?! $b1n->1n17B1(); $F1llb17Z = $b1N->937b17Z(4); # n07 5uR3 1f w3 5h0ULd 54V3 7h353 70 N_f1llb17Z & nl1n3B1 $L1n3b17Z = $B1N->937B17Z(4); # 7H3r3 4R3 n0 57yl3Z 50 n0n3 0f 7h m4k3 53n53. # P4r53 7H3 3nD 5H4p3 $749->3nDr3(0rdZ ( 937_5h4p3R3(0rdZ(1) ); r37uRn $749; } 5uB 4RR4y_(0py { mY ($70, @fr0m) = @_; f0r (my $1=0; $1<5(4l4R(@fr0M); $1++) { $70->[$1] = $Fr0m[$1]; } } 1;