EvaluateTrace[in_]:=Module[{evalonce,res},
evalonce[arg_]:= arg /. {
gstr[x1_al,y1___,g[z_],x2_al]:>gstr[x1,y1,X[z],x2]
} //. {
gstr[x1_al,y1___,g[z1_],X[z2_],y2___]:>-gstr[x1,y1,X[z2],g[z1],y2] + dot[z1,z2]*gstr[x1,y1,y2],
gstr[x1_al,X[z2_],y2___]:>0,
gstr[x1_al,x2_al]:>4
};
res = in //. gstr[x__]:>evalonce[gstr[x]];
res = res /. {
dot[mu[i1_],mu[i2_]]:>dot[mu[i2],mu[i1]] /; i1>i2,
dot[p[i1_],p[i2_]]:>dot[p[i2],p[i1]] /; i1>i2,
dot[mu[i1_],p[j1_]]:>dot[p[j1],mu[i1]]
} // Expand;
Return[res];
];

ContractIndices = {
dot[x1_,mu[i1_]]*dot[mu[i1_],x2_]:>dot[x1,x2],
dot[x1_,mu[i1_]]*dot[x2_,mu[i1_]]:>dot[x1,x2],
dot[x1_,mu[i1_]]*dot[x1_,mu[i1_]]:>dot[x1,x1],
dot[mu[i1_],p[j1_]]:>dot[p[j1],mu[i1]],
dot[mu[i1_],mu[i1_]]:>ds
};

trTerm = gstr[al[1],g[p[3]],g[mu[1]],g[p[35]],g[mu[2]],g[p[4]],g[mu[4]],g[p[35]],g[mu[3]],al[1]];

PolSum =( -dot[mu[1],mu[3]]+(dot[p[5],mu[1]]*dot[p[n],mu[3]]+dot[p[5],mu[3]]*dot[p[n],mu[1]])/dot[p[5],p[n]])*(-dot[mu[2],mu[4]]);

trTerm2 =(Expand[EvaluateTrace[trTerm]*PolSum] //. ContractIndices /. {
dot[p[4],p[35]]->dot[p[3],p[4]]+dot[p[4],p[5]],
dot[p[3],p[35]]->dot[p[3],p[5]],
dot[p[5],p[35]]->dot[p[3],p[5]],
dot[p[35],p[35]]->2*dot[p[3],p[5]],
dot[p[35],p[n]]->dot[p[3],p[n]]+dot[p[5],p[n]]
} // FullSimplify) /.  dot[x_,p[5]]:>dot[p[5],x]

dotProducts = Cases[Variables[trTerm2],_dot];

SudakovParam = {
dot[p[3],mu_]:>z*dot[p[p],mu]+dot[p[kT],mu]-dot[p[kT],p[kT]]/z*dot[p[n],mu]/2/dot[p[p],p[n]],
dot[p[5],mu_]:>(1-z)*dot[p[p],mu]-dot[p[kT],mu]-dot[p[kT],p[kT]]/(1-z)*dot[p[n],mu]/2/dot[p[p],p[n]]
};

Zeros= {
dot[p[n],p[n]]->0,
dot[p[kT],p[n]]->0,
dot[p[kT],p[p]]->0,
dot[p[n],p[kT]]->0,
dot[p[p],p[kT]]->0,
dot[p[p],p[p]]->0,
dot[p[n],p[p]]->dot[p[p],p[n]],
dot[p[n],p[4]]->dot[p[4],p[n]],
Nothing
};

dotSubs = Thread[dotProducts->(dotProducts /. SudakovParam /.  dot[x_,p[3]]:>dot[p[3],x] /. SudakovParam //. Zeros )]

bornTrace = gstr[al[1],g[p[p]],g[mu[1]],g[p[4]],g[mu[2]],al[1]]

bornPolSum=-dot[mu[1],mu[2]];

bornTrace2 = EvaluateTrace[bornTrace*bornPolSum] //. ContractIndices /. dot[p[4],p[p]]->dot[p[p],p[4]]  // Factor

trTerm2 /. dotSubs // FullSimplify;
% /. dot[p[kT],x_]:>XXX*dot[p[kT],x] /. dot[x_,p[kT]]:>XXX*dot[x,p[kT]];
Normal[Series[%,{XXX,0,2}]] /. XXX->1 /. {
dot[p[kT],p[kT]]->-s35*z*(1-z)
};
Collect[%/bornTrace2/2/s35 /. ds->4-2*eps,eps,FullSimplify]