{"body":"    (function() {\n    var preTags = document.getElementsByTagName('pre');\n    var preWithHeaderInfo = preTags[0];\n    var preWithContent = preTags[2];\n\n    var lines = preWithContent.textContent.split('\\n');\n \n    // get data about the formatting (changes between different versions of chrome)\n    var rgx = /^(0{8}:\\s+)([0-9a-f]{2}\\s+)[0-9a-f]{2}/m;\n    var match = rgx.exec(lines[0]);\n \n    var text = '';\n    for (var i = 0; i < lines.length; i++) {\n        var line = lines[i];\n        var firstIndex = match[1].length; // first index of the chars to match (e.g. where a '84' would start)\n        var indexJump = match[2].length; // how much space is between each set of numbers\n        var totalCharsPerLine = 16;\n        index = firstIndex;\n        for (var j = 0; j < totalCharsPerLine; j++) {\n            var hexValAsStr = line.substr(index, 2);\n            if (hexValAsStr == '  ') {\n                // no more chars\n                break;\n            }\n\n            var asciiVal = parseInt(hexValAsStr, 16);\n            text += String.fromCharCode(asciiVal);\n\n            index += indexJump;\n        }\n    }\n\n    var headerText = preWithHeaderInfo.textContent;\n    var elToInsertBefore = document.body.childNodes[0];\n    var insertedDiv = document.createElement(\"div\");\n    document.body.insertBefore(insertedDiv, elToInsertBefore);\n\n    // find the filename\n    var nodes = [document.body];\n    var filepath = '';\n    while (true) {\n        var node = nodes.pop();\n        if (node.hasChildNodes()) {\n            var children = node.childNodes;\n            for (var i = children.length - 1; i >= 0; i--) {\n                nodes.push(children[i]);\n            }\n        }\n\n        if (node.nodeType === Node.TEXT_NODE && /\\S/.test(node.nodeValue)) {\n            // 1st depth-first text node (with non-whitespace chars) found\n            filepath = node.nodeValue;\n            break;\n        }\n    }\n    \n    outputResults(insertedDiv, convertToBase64(text), filepath, headerText);\n\n    insertedDiv.appendChild(document.createElement('hr'));\n\n    function outputResults(parentElement, fileContents, fileUrl, headerText) {\n        // last updated 1/27/12\n        var rgx = /.+\\/([^\\/]+)/;\n        var filename = rgx.exec(fileUrl)[1];\n\n        // get the content type\n        rgx = /content-type: (.+)/i;\n        var match = rgx.exec(headerText);\n        var contentTypeFound = match != null;\n        var contentType = \"text/plain\";\n        if (contentTypeFound) {\n            contentType = match[1];\n        }\n\n        var dataUri = \"data:\" + contentType + \";base64,\" + fileContents;\n\n        // check for gzipped file\n        var gZipRgx = /content-encoding: gzip/i;\n        if (gZipRgx.test(headerText)) {\n            filename += '.gz';\n        }\n        \n        // check for image\n        var imageRgx = /image/i;\n        var isImage = imageRgx.test(contentType);\n            \n        // create link\n        var aTag = document.createElement('a');\n        aTag.textContent = \"Left-click to download the cached file\";\n        aTag.setAttribute('href', dataUri);\n        aTag.setAttribute('download', filename);\n        parentElement.appendChild(aTag);\n        parentElement.appendChild(document.createElement('br'));\n    \n        // create image\n        if (isImage) {\n            var imgTag = document.createElement('img');\n            imgTag.setAttribute(\"src\", dataUri);\n            parentElement.appendChild(imgTag);\n            parentElement.appendChild(document.createElement('br'));\n        }\n    \n        // create warning\n        if (!contentTypeFound) {\n            var pTag = document.createElement('p');\n            pTag.textContent = \"WARNING: the type of file was not found in the headers... defaulting to text file.\";\n            parentElement.appendChild(pTag);\n        }\n    }\n\n    function getBase64Char(base64Value) {\n        if (base64Value < 0) {\n            throw \"Invalid number: \" + base64Value;\n        } else if (base64Value <= 25) {\n            // A-Z\n            return String.fromCharCode(base64Value + \"A\".charCodeAt(0));\n        } else if (base64Value <= 51) {\n            // a-z\n            base64Value -= 26; // a\n            return String.fromCharCode(base64Value + \"a\".charCodeAt(0));\n        } else if (base64Value <= 61) {\n            // 0-9\n            base64Value -= 52; // 0\n            return String.fromCharCode(base64Value + \"0\".charCodeAt(0));\n        } else if (base64Value <= 62) {\n            return '+';\n        } else if (base64Value <= 63) {\n            return '/';\n        } else {\n            throw \"Invalid number: \" + base64Value;\n        }\n    }\n\n    function convertToBase64(input) {\n        // http://en.wikipedia.org/wiki/Base64#Example\n        var remainingBits;\n        var result = \"\";\n        var additionalCharsNeeded = 0;\n\n        var charIndex = -1;\n        var charAsciiValue;\n        var advanceToNextChar = function() {\n            charIndex++;\n            charAsciiValue = input.charCodeAt(charIndex);\n            return charIndex < input.length;\n        };\n\n        while (true) {\n            var base64Char;\n\n            // handle 1st char\n            if (!advanceToNextChar()) break;\n            base64Char = charAsciiValue >>> 2;\n            remainingBits = charAsciiValue & 3; // 0000 0011\n            result += getBase64Char(base64Char); // 1st char\n            additionalCharsNeeded = 3;\n\n            // handle 2nd char\n            if (!advanceToNextChar()) break;\n            base64Char = (remainingBits << 4) | (charAsciiValue >>> 4);\n            remainingBits = charAsciiValue & 15; // 0000 1111\n            result += getBase64Char(base64Char); // 2nd char\n            additionalCharsNeeded = 2;\n\n            // handle 3rd char\n            if (!advanceToNextChar()) break;\n            base64Char = (remainingBits << 2) | (charAsciiValue >>> 6);\n            result += getBase64Char(base64Char); // 3rd char\n            remainingBits = charAsciiValue & 63; // 0011 1111\n            result += getBase64Char(remainingBits); // 4th char\n            additionalCharsNeeded = 0;\n        }\n\n        // there may be an additional 2-3 chars that need to be added\n        if (additionalCharsNeeded == 2) {\n            remainingBits = remainingBits << 2; // 4 extra bits\n            result += getBase64Char(remainingBits) + \"=\";\n        } else if (additionalCharsNeeded == 3) {\n            remainingBits = remainingBits << 4; // 2 extra bits\n            result += getBase64Char(remainingBits) + \"==\";\n        } else if (additionalCharsNeeded != 0) {\n            throw \"Unhandled number of additional chars needed: \" + additionalCharsNeeded;\n        }\n\n        return result;\n    }\n    })()\n        ","name":"","extension":"txt","url":"https://www.irccloud.com/pastebin/d2hVhtMw","modified":1444251227,"id":"d2hVhtMw","size":6675,"lines":188,"own_paste":false,"theme":"","date":1444251227}