Note the source code might be a little squished; if it's too hard to read I can send source code without linefeeds and extra spaces removed.