algorithm by neil, function per Seno.Aiko@gmail.com, whatever's left of the patch is by me :) r=neil sr=neil git-svn-id: svn://10.0.0.236/trunk@211878 18797224-902f-48f8-a5cc-f745e15eee43
algorithm by neil, function per Seno.Aiko@gmail.com, whatever's left of the patch is by me :) r=neil sr=neil git-svn-id: svn://10.0.0.236/trunk@211878 18797224-902f-48f8-a5cc-f745e15eee43