PROC HPNEW(DAT,lambda);

local u1, u, l, ff, t, v11, v22, v12, x, z, v, tt, d, i, m1, m2, de,
      i1, ib, e1, e2, b11, b12, b22, jj, hu;
l=lambda;
u1 = dat;
ff=rows(dat');
t = rows(dat);
 

v11 = 1;
v22 = 1;
v12 = 0;
i=3; v=zeros(t,3); tt =zeros(t,ff); d = zeros(t,ff);
do until i>t;
 x=v11;
 z=v12;
 v11=(1/L)+4*(x-z)+v22;
 v12 = 2*x -z;
 v22=x;
 de = v11*v22-v12*v12;
 v[i,1] = v22/de;
 v[i,3] = v11/de;
 v[i,2] = -v12/de;
 x = v11+1;
 z=v11;
 v11 = v11-(v11*v11)/x;
 v22 = v22-(v12*v12)/x;
 v12 = v12-(z*v12)/x;
 i=i+1;
endo;

u=u1;
m1=u[2,.]; m2 = u[1,.];
i=3;
do until i>t;
 x = m1;
 m1=2*m1-m2;
 m2=x;
 tt[i-1,.] = v[i,1]*m1+v[i,2]*m2;
 d[i-1,.] = v[i,2]*m1+v[i,3]*m2;
 de = v[i,1]*v[i,3]-v[i,2]*v[i,2];
 v11 = v[i,3]/de;
 v12 = -v[i,2]/de;
 z = (u[i,.]-m1)/(v11+1);
 m1=m1+v11*z;
 m2=m2+v12*z;
 i=i+1;
endo;
tt[t,.] = m1;
tt[t-1,.] = m2;
m1 = u[t-1,.];
m2 = u[t,.];
i=t-2;
do until i<1;
 i1=i+1;
 ib=t-i+1;
 x=m1;
 m1=2*m1-m2;
 m2=x;
  if i>2;
   e1 = v[ib,3]*m2+v[ib,2]*m1+tt[i,.];
   e2 = v[ib,2]*m2+v[ib,1]*m1+d[i,.];
   b11 = v[ib,3]+v[i1,1];
   b12 = v[ib,2]+v[i1,2];
   b22 = v[ib,1]+v[i1,3];
   de = b11*b22-b12*b12;
   tt[i,.] = (-b12*e1+b11*e2)/de;
  endif;
 de = v[ib,1]*v[ib,3]-v[ib,2]*v[ib,2];
 v11 = v[ib,3]/de;
 v12 = -v[ib,2]/de;
 z = (u[i,.]-m1)/(v11+1);
 m1 = m1 +v11*z;
 m2 = m2 +v12*z;
 i=i-1;
endo;
tt[1,.] = m1;
tt[2,.] = m2;
i=1;
do until i>t;
 d[i,.] = u[i,.]-tt[i,.];
 i=i+1;
endo;
hu=tt;
uU = d-ones(t,ff)*MEANC(D);
retp(uu);
endp;