{"id":2852,"date":"2015-05-17T17:53:59","date_gmt":"2015-05-17T15:53:59","guid":{"rendered":"http:\/\/www.salvis.com\/blog\/?p=2852"},"modified":"2023-11-08T20:18:51","modified_gmt":"2023-11-08T19:18:51","slug":"introducing-plsql-unwrapper-for-sql-developer","status":"publish","type":"post","link":"https:\/\/www.salvis.com\/blog\/2015\/05\/17\/introducing-plsql-unwrapper-for-sql-developer\/","title":{"rendered":"Introducing PL\/SQL Unwrapper for SQL Developer"},"content":{"rendered":"\n<p>I&#8217;m using from time to time the free service&nbsp;<a href=\"http:\/\/www.codecrete.net\/UnwrapIt\">Unwrap it!<\/a> or Niels Teusink&#8217;s Python script <a href=\"http:\/\/blog.teusink.net\/2010\/04\/unwrapping-oracle-plsql-with-unwrappy.html\">unwrap.py<\/a>&nbsp;to unwrap PL\/SQL code. Recently I&#8217;ve been confronted more with wrapped code since a customer is about to migrate to a new banking platform which is using wrapped PL\/SQL code extensively. While investigating migration errors we experienced&nbsp;that unwrapping the PL\/SQL packages helped us a lot to identify the root cause faster. But since the unwrapping and debugging process is still a bit cumbersome for a series of PL\/SQL packages a colleague asked me: &#8220;Wouldn&#8217;t it be nice if we could unwrap PL\/SQL packages directly in SQL Developer?&#8221; and I answered &#8220;This should be simple. I&#8217;ve already written an extension for SQL Developer and the code in unwrap.py does not look too complicated.&#8221;<\/p>\n\n\n\n<p>On a rainy weekend, I analyzed&nbsp;<a href=\"http:\/\/blog.teusink.net\/2010\/04\/unwrapping-oracle-plsql-with-unwrappy.html\">Niels Teusink&#8217;s public domain Phyton script unwrap.py<\/a>&nbsp;and used it as a starting point for the development of a PL\/SQL Unwrapper for SQL Developer.<\/p>\n\n\n<div class=\"accordion\"><div class=\"mfn-acc accordion_wrapper  toggle\"><br \/>\n<div class=\"question\"><div class=\"title\"><i class=\"icon-plus acc-icon-plus\" aria-hidden=\"true\"><\/i><i class=\"icon-minus acc-icon-minus\" aria-hidden=\"true\"><\/i>Niels Teusink\u2019s Python script unwrap.py (copy)<\/div><div class=\"answer\"><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"#!\/usr\/bin\/python\n#\n# This script unwraps Oracle wrapped plb packages, does not support 9g\n# Contact: niels at teusink net \/ blog.teusink.net\n#\n# License: Public domain\n#\nimport re\nimport base64\nimport zlib\nimport sys\n\n# simple substitution table\ncharmap = &#091;0x3d, 0x65, 0x85, 0xb3, 0x18, 0xdb, 0xe2, 0x87, 0xf1, 0x52, 0xab, 0x63, 0x4b, 0xb5, 0xa0, 0x5f, 0x7d, 0x68, 0x7b, 0x9b, 0x24, 0xc2, 0x28, 0x67, 0x8a, 0xde, 0xa4, 0x26, 0x1e, 0x03, 0xeb, 0x17, 0x6f, 0x34, 0x3e, 0x7a, 0x3f, 0xd2, 0xa9, 0x6a, 0x0f, 0xe9, 0x35, 0x56, 0x1f, 0xb1, 0x4d, 0x10, 0x78, 0xd9, 0x75, 0xf6, 0xbc, 0x41, 0x04, 0x81, 0x61, 0x06, 0xf9, 0xad, 0xd6, 0xd5, 0x29, 0x7e, 0x86, 0x9e, 0x79, 0xe5, 0x05, 0xba, 0x84, 0xcc, 0x6e, 0x27, 0x8e, 0xb0, 0x5d, 0xa8, 0xf3, 0x9f, 0xd0, 0xa2, 0x71, 0xb8, 0x58, 0xdd, 0x2c, 0x38, 0x99, 0x4c, 0x48, 0x07, 0x55, 0xe4, 0x53, 0x8c, 0x46, 0xb6, 0x2d, 0xa5, 0xaf, 0x32, 0x22, 0x40, 0xdc, 0x50, 0xc3, 0xa1, 0x25, 0x8b, 0x9c, 0x16, 0x60, 0x5c, 0xcf, 0xfd, 0x0c, 0x98, 0x1c, 0xd4, 0x37, 0x6d, 0x3c, 0x3a, 0x30, 0xe8, 0x6c, 0x31, 0x47, 0xf5, 0x33, 0xda, 0x43, 0xc8, 0xe3, 0x5e, 0x19, 0x94, 0xec, 0xe6, 0xa3, 0x95, 0x14, 0xe0, 0x9d, 0x64, 0xfa, 0x59, 0x15, 0xc5, 0x2f, 0xca, 0xbb, 0x0b, 0xdf, 0xf2, 0x97, 0xbf, 0x0a, 0x76, 0xb4, 0x49, 0x44, 0x5a, 0x1d, 0xf0, 0x00, 0x96, 0x21, 0x80, 0x7f, 0x1a, 0x82, 0x39, 0x4f, 0xc1, 0xa7, 0xd7, 0x0d, 0xd1, 0xd8, 0xff, 0x13, 0x93, 0x70, 0xee, 0x5b, 0xef, 0xbe, 0x09, 0xb9, 0x77, 0x72, 0xe7, 0xb2, 0x54, 0xb7, 0x2a, 0xc7, 0x73, 0x90, 0x66, 0x20, 0x0e, 0x51, 0xed, 0xf8, 0x7c, 0x8f, 0x2e, 0xf4, 0x12, 0xc6, 0x2b, 0x83, 0xcd, 0xac, 0xcb, 0x3b, 0xc4, 0x4e, 0xc0, 0x69, 0x36, 0x62, 0x02, 0xae, 0x88, 0xfc, 0xaa, 0x42, 0x08, 0xa6, 0x45, 0x57, 0xd3, 0x9a, 0xbd, 0xe1, 0x23, 0x8d, 0x92, 0x4a, 0x11, 0x89, 0x74, 0x6b, 0x91, 0xfb, 0xfe, 0xc9, 0x01, 0xea, 0x1b, 0xf7, 0xce&#093;\n\ndef decode_base64_package(base64str):\n\tbase64dec = base64.decodestring(base64str)&#091;20:&#093; # we strip the first 20 chars (SHA1 hash, I don't bother checking it at the moment)\n\tdecoded = ''\n\tfor byte in range(0, len(base64dec)):\n\t\tdecoded += chr(charmap&#091;ord(base64dec&#091;byte&#093;)&#093;)\n\treturn zlib.decompress(decoded)\n\t\n\nsys.stderr.write(&quot;=== Oracle 10g\/11g PL\/SQL unwrapper 0.2 - by Niels Teusink - blog.teusink.net ===\\n\\n&quot; )\nif len(sys.argv) < 2:\n\tsys.stderr.write(&quot;Usage: %s infile.plb &#091;outfile&#093;\\n&quot; % sys.argv&#091;0&#093;)\n\tsys.exit(1)\n\ninfile = open(sys.argv&#091;1&#093;)\noutfile = None\nif len(sys.argv) == 3:\n\toutfile = open(sys.argv&#091;2&#093;, 'w')\n\nlines = infile.readlines()\nfor i in range(0, len(lines)):\n\t# this is really naive parsing, but works on every package I've thrown at it\n\tmatches = re.compile(r&quot;^&#091;0-9a-f&#093;+ (&#091;0-9a-f&#093;+)$&quot;).match(lines&#091;i&#093;)\n\tif matches:\n\t\tbase64len = int(matches.groups()&#091;0&#093;, 16)\n\t\tbase64str = ''\n\t\tj = 0\n\t\twhile len(base64str) < base64len:\n\t\t\tj+=1\n\t\t\tbase64str += lines&#091;i+j&#093;\n\t\tbase64str = base64str.replace(&quot;\\n&quot;,&quot;&quot;)\n\t\tif outfile:\n\t\t\toutfile.write(decode_base64_package(base64str) + &quot;\\n&quot;)\n\t\telse:\n\t\t\tprint decode_base64_package(base64str)\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6A9955\">#!\/usr\/bin\/python<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">#<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\"># This script unwraps Oracle wrapped plb packages, does not support 9g<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\"># Contact: niels at teusink net \/ blog.teusink.net<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">#<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\"># License: Public domain<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">#<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">import<\/span><span style=\"color: #D4D4D4\"> re<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">import<\/span><span style=\"color: #D4D4D4\"> base64<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">import<\/span><span style=\"color: #D4D4D4\"> zlib<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">import<\/span><span style=\"color: #D4D4D4\"> sys<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\"># simple substitution table<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">charmap = [<\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">3d<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">65<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">85<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">b3<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">18<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">db<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">e2<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">87<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">f1<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">52<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">ab<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">63<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">4b<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">b5<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">a0<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">5f<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">7d<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">68<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">7b<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">9b<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">24<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">c2<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">28<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">67<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">8a<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">de<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">a4<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">26<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">1e<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">03<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">eb<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">17<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">6f<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">34<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">3e<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">7a<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">3f<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">d2<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">a9<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">6a<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">0f<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">e9<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">35<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">56<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">1f<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">b1<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">4d<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">10<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">78<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">d9<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">75<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">f6<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">bc<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">41<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">04<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">81<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">61<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">06<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">f9<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">ad<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">d6<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">d5<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">29<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">7e<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">86<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">9e<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">79<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">e5<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">05<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">ba<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">84<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">cc<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">6e<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">27<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">8e<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">b0<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">5d<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">a8<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">f3<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">9f<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">d0<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">a2<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">71<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">b8<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">58<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">dd<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">2c<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">38<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">99<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">4c<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">48<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">07<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">55<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">e4<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">53<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">8c<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">46<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">b6<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">2d<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">a5<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">af<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">32<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">22<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">40<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">dc<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">50<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">c3<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">a1<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">25<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">8b<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">9c<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">16<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">60<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">5c<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">cf<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">fd<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">0c<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">98<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">1c<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">d4<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">37<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">6d<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">3c<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">3a<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">30<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">e8<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">6c<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">31<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">47<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">f5<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">33<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">da<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">43<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">c8<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">e3<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">5e<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">19<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">94<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">ec<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">e6<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">a3<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">95<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">14<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">e0<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">9d<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">64<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">fa<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">59<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">15<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">c5<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">2f<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">ca<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">bb<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">0b<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">df<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">f2<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">97<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">bf<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">0a<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">76<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">b4<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">49<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">44<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">5a<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">1d<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">f0<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">00<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">96<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">21<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">80<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">7f<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">1a<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">82<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">39<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">4f<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">c1<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">a7<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">d7<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">0d<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">d1<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">d8<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">ff<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">13<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">93<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">70<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">ee<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">5b<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">ef<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">be<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">09<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">b9<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">77<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">72<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">e7<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">b2<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">54<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">b7<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">2a<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">c7<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">73<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">90<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">66<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">20<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">0e<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">51<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">ed<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">f8<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">7c<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">8f<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">2e<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">f4<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">12<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">c6<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">2b<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">83<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">cd<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">ac<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">cb<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">3b<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">c4<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">4e<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">c0<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">69<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">36<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">62<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">02<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">ae<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">88<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">fc<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">aa<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">42<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">08<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">a6<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">45<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">57<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">d3<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">9a<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">bd<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">e1<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">23<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">8d<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">92<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">4a<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">11<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">89<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">74<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">6b<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">91<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">fb<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">fe<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">c9<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">01<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">ea<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">1b<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">f7<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">0x<\/span><span style=\"color: #B5CEA8\">ce<\/span><span style=\"color: #D4D4D4\">]<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">def<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">decode_base64_package<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #9CDCFE\">base64str<\/span><span style=\"color: #D4D4D4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\tbase64dec = base64.decodestring(base64str)[<\/span><span style=\"color: #B5CEA8\">20<\/span><span style=\"color: #D4D4D4\">:] <\/span><span style=\"color: #6A9955\"># we strip the first 20 chars (SHA1 hash, I don&#39;t bother checking it at the moment)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\tdecoded = <\/span><span style=\"color: #CE9178\">&#39;&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t<\/span><span style=\"color: #C586C0\">for<\/span><span style=\"color: #D4D4D4\"> byte <\/span><span style=\"color: #C586C0\">in<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">range<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #DCDCAA\">len<\/span><span style=\"color: #D4D4D4\">(base64dec)):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t\tdecoded += <\/span><span style=\"color: #DCDCAA\">chr<\/span><span style=\"color: #D4D4D4\">(charmap[<\/span><span style=\"color: #DCDCAA\">ord<\/span><span style=\"color: #D4D4D4\">(base64dec[byte])])<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t<\/span><span style=\"color: #C586C0\">return<\/span><span style=\"color: #D4D4D4\"> zlib.decompress(decoded)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">sys.stderr.write(<\/span><span style=\"color: #CE9178\">&quot;=== Oracle 10g\/11g PL\/SQL unwrapper 0.2 - by Niels Teusink - blog.teusink.net ===<\/span><span style=\"color: #D7BA7D\">\\n\\n<\/span><span style=\"color: #CE9178\">&quot;<\/span><span style=\"color: #D4D4D4\"> )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">if<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">len<\/span><span style=\"color: #D4D4D4\">(sys.argv) &lt; <\/span><span style=\"color: #B5CEA8\">2<\/span><span style=\"color: #D4D4D4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\tsys.stderr.write(<\/span><span style=\"color: #CE9178\">&quot;Usage: <\/span><span style=\"color: #569CD6\">%s<\/span><span style=\"color: #CE9178\"> infile.plb [outfile]<\/span><span style=\"color: #D7BA7D\">\\n<\/span><span style=\"color: #CE9178\">&quot;<\/span><span style=\"color: #D4D4D4\"> % sys.argv[<\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\">])<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\tsys.exit(<\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">infile = <\/span><span style=\"color: #DCDCAA\">open<\/span><span style=\"color: #D4D4D4\">(sys.argv[<\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">])<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">outfile = <\/span><span style=\"color: #569CD6\">None<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">if<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">len<\/span><span style=\"color: #D4D4D4\">(sys.argv) == <\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\toutfile = <\/span><span style=\"color: #DCDCAA\">open<\/span><span style=\"color: #D4D4D4\">(sys.argv[<\/span><span style=\"color: #B5CEA8\">2<\/span><span style=\"color: #D4D4D4\">], <\/span><span style=\"color: #CE9178\">&#39;w&#39;<\/span><span style=\"color: #D4D4D4\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">lines = infile.readlines()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">for<\/span><span style=\"color: #D4D4D4\"> i <\/span><span style=\"color: #C586C0\">in<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">range<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #DCDCAA\">len<\/span><span style=\"color: #D4D4D4\">(lines)):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t<\/span><span style=\"color: #6A9955\"># this is really naive parsing, but works on every package I&#39;ve thrown at it<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\tmatches = re.compile(<\/span><span style=\"color: #569CD6\">r<\/span><span style=\"color: #D16969\">&quot;^<\/span><span style=\"color: #CE9178\">[<\/span><span style=\"color: #D16969\">0-9a-f<\/span><span style=\"color: #CE9178\">]<\/span><span style=\"color: #D7BA7D\">+<\/span><span style=\"color: #D16969\"> <\/span><span style=\"color: #CE9178\">([<\/span><span style=\"color: #D16969\">0-9a-f<\/span><span style=\"color: #CE9178\">]<\/span><span style=\"color: #D7BA7D\">+<\/span><span style=\"color: #CE9178\">)<\/span><span style=\"color: #D16969\">$&quot;<\/span><span style=\"color: #D4D4D4\">).match(lines[i])<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t<\/span><span style=\"color: #C586C0\">if<\/span><span style=\"color: #D4D4D4\"> matches:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t\tbase64len = <\/span><span style=\"color: #4EC9B0\">int<\/span><span style=\"color: #D4D4D4\">(matches.groups()[<\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\">], <\/span><span style=\"color: #B5CEA8\">16<\/span><span style=\"color: #D4D4D4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t\tbase64str = <\/span><span style=\"color: #CE9178\">&#39;&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t\tj = <\/span><span style=\"color: #B5CEA8\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t\t<\/span><span style=\"color: #C586C0\">while<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">len<\/span><span style=\"color: #D4D4D4\">(base64str) &lt; base64len:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t\t\tj+=<\/span><span style=\"color: #B5CEA8\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t\t\tbase64str += lines[i+j]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t\tbase64str = base64str.replace(<\/span><span style=\"color: #CE9178\">&quot;<\/span><span style=\"color: #D7BA7D\">\\n<\/span><span style=\"color: #CE9178\">&quot;<\/span><span style=\"color: #D4D4D4\">,<\/span><span style=\"color: #CE9178\">&quot;&quot;<\/span><span style=\"color: #D4D4D4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t\t<\/span><span style=\"color: #C586C0\">if<\/span><span style=\"color: #D4D4D4\"> outfile:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t\t\toutfile.write(decode_base64_package(base64str) + <\/span><span style=\"color: #CE9178\">&quot;<\/span><span style=\"color: #D7BA7D\">\\n<\/span><span style=\"color: #CE9178\">&quot;<\/span><span style=\"color: #D4D4D4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t\t<\/span><span style=\"color: #C586C0\">else<\/span><span style=\"color: #D4D4D4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t\t\t<\/span><span style=\"color: #DCDCAA\">print<\/span><span style=\"color: #D4D4D4\"> decode_base64_package(base64str)<\/span><\/span><\/code><\/pre><\/div>\n\n\n<p><\/div><\/div>\n<br \/>\n<\/div><\/div>\n\n\n\n\n<p>Even if this code looked straightforward on first sight, it took me a moment or two to understand it. In fact, I googled and found the following information helpful:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>David Litchfield&#8217;s <a href=\"http:\/\/www.amazon.de\/Oracle-Hackers-Handbook-Hacking-Defending-ebook\/dp\/B000SEIC3K\/ref=sr_1_1?s=digital-text&amp;ie=UTF8&amp;qid=1431864147&amp;sr=1-1&amp;keywords=kindle+The+Oracle+Hacker%27s+Handbook%3A+Hacking+and+Defending+Oracle\">The Oracle Hacker&#8217;s Handbook: Hacking and Defending Oracle<\/a>&nbsp;(chapter 5)<\/li>\n\n\n\n<li>Pete Finnigan&#8217;s <a href=\"https:\/\/www.blackhat.com\/presentations\/bh-usa-06\/BH-US-06-Finnigan.pdf\">How to Unwrap PL\/SQL<\/a>.&nbsp;Pete provides a lot of useful resources on his <a href=\"http:\/\/www.petefinnigan.com\/weblog\/entries\/\">blog<\/a>&nbsp;and has shown in&nbsp;this <a href=\"http:\/\/www.petefinnigan.com\/weblog\/archives\/00001298.htm\">post<\/a>, that he owns unwrappers for 9i and 10g, which should be capable of handling every&nbsp;wrapped code.<\/li>\n\n\n\n<li>Anton Scheffler&#8217;s blog post about&nbsp;<a href=\"https:\/\/technology.amis.nl\/2009\/02\/03\/unwrapping-10g-wrapped-plsql\/\">Unwrapping 10g wrapped PL\/SQL<\/a><\/li>\n\n\n\n<li><a href=\"http:\/\/webcourse.cs.technion.ac.il\/236349\/Spring2009\/ho\/WCFiles\/final_report.pdf\">Automatic Detection of Vulnerabilities in Wrapped Packages in Oracle<\/a> by&nbsp;Yaron Gur-Arieh,&nbsp;Nikita Zubrilov and Ilya Kolchinsky<\/li>\n\n\n\n<li>Marcel Lambrechts&#8217;&nbsp;blog about&nbsp;<a href=\"http:\/\/marcel.vandewaters.nl\/oracle\/security\/unwrapping-wrapped-plsql-in-10g-and-11g\">Unwrapping Wrapped PL\/SQL in Oracle 10gR2 &#8211; 12cR1<\/a><\/li>\n<\/ul>\n\n\n\n<p>After flipping through all these pages&nbsp;I had some second thoughts about publishing an&nbsp;unwrapper, especially since David, Pete and Anton were a bit secretive about certain&nbsp;details such as the substitution&nbsp;table. Obviously,&nbsp;I decided to publish it nonetheless. Is this really harmful? There are already a couple of&nbsp;other 10g unwrappers available, such as:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><span style=\"line-height: 1.5;\"><a href=\"http:\/\/www.codecrete.net\/UnwrapIt\">http:\/\/www.codecrete.net\/UnwrapIt<\/a><\/span><\/li>\n\n\n\n<li><a href=\"http:\/\/marcel.vandewaters.nl\/tools\">http:\/\/marcel.vandewaters.nl\/tools<\/a><\/li>\n\n\n\n<li><a href=\"http:\/\/blog.teusink.net\/2010\/04\/unwrapping-oracle-plsql-with-unwrappy.html\">http:\/\/blog.teusink.net\/2010\/04\/unwrapping-oracle-plsql-with-unwrappy.html<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/code.google.com\/p\/plsqlunwrapper\/\">https:\/\/code.google.com\/p\/plsqlunwrapper\/<\/a><\/li>\n<\/ul>\n\n\n\n<p>In the end, this is just another PL\/SQL Unwrapper. However, I believe it delivers some additional value if&nbsp;Oracle&#8217;s SQL Developer is the IDE of your choice. This is what it looks like on Windows:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"\/\/www.salvis.com\/blog\/wp-content\/uploads\/2015\/05\/unwrapper-windows.png\"><img wpfc-lazyload-disable=\"true\" loading=\"lazy\" decoding=\"async\" width=\"684\" height=\"589\" src=\"\/\/www.salvis.com\/blog\/wp-content\/uploads\/2015\/05\/unwrapper-windows.png\" alt=\"unwrapper-windows\" class=\"wp-image-2861\"\/><\/a><\/figure>\n\n\n\n<p>The wrapped code will be replaced in the editor by the unwrapped code&#8230;<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"\/\/www.salvis.com\/blog\/wp-content\/uploads\/2015\/05\/unwrapper-windows-2.png\"><img wpfc-lazyload-disable=\"true\" loading=\"lazy\" decoding=\"async\" width=\"682\" height=\"267\" src=\"\/\/www.salvis.com\/blog\/wp-content\/uploads\/2015\/05\/unwrapper-windows-2.png\" alt=\"unwrapper-windows-2\" class=\"wp-image-2862\"\/><\/a><\/figure>\n\n\n\n<p>&#8230;you have to pay attention to not save the unwrapped code&nbsp;by accident.<\/p>\n\n\n\n<p>Grab your copy of Trivadis PL\/SQL Unwrapper from the <a href=\"https:\/\/www.salvis.com\/blog\/download\/\">download area<\/a>. I hope it is useful.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I&#8217;m using from time to time the free service&nbsp;Unwrap it! or Niels Teusink&#8217;s Python script unwrap.py&nbsp;to unwrap PL\/SQL code. Recently I&#8217;ve been confronted more with wrapped code since a customer is about to migrate to a new banking platform which is using wrapped PL\/SQL code extensively. While investigating migration errors we experienced&nbsp;that<span class=\"excerpt-hellip\"> [\u2026]<\/span><\/p>\n","protected":false},"author":1,"featured_media":2861,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[13,121,87],"class_list":["post-2852","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-oracle","tag-plsql","tag-pl-sql-unwrapper","tag-sql-developer"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Introducing PL\/SQL Unwrapper for SQL Developer - Philipp Salvisberg&#039;s Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.salvis.com\/blog\/2015\/05\/17\/introducing-plsql-unwrapper-for-sql-developer\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Introducing PL\/SQL Unwrapper for SQL Developer - Philipp Salvisberg&#039;s Blog\" \/>\n<meta property=\"og:description\" content=\"I&#8217;m using from time to time the free service&nbsp;Unwrap it! or Niels Teusink&#8217;s Python script unwrap.py&nbsp;to unwrap PL\/SQL code. Recently I&#8217;ve been confronted more with wrapped code since a customer is about to migrate to a new banking platform which is using wrapped PL\/SQL code extensively. While investigating migration errors we experienced&nbsp;that [\u2026]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.salvis.com\/blog\/2015\/05\/17\/introducing-plsql-unwrapper-for-sql-developer\/\" \/>\n<meta property=\"og:site_name\" content=\"Philipp Salvisberg&#039;s Blog\" \/>\n<meta property=\"article:published_time\" content=\"2015-05-17T15:53:59+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-11-08T19:18:51+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2015\/05\/unwrapper-windows.png\" \/>\n\t<meta property=\"og:image:width\" content=\"684\" \/>\n\t<meta property=\"og:image:height\" content=\"589\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Philipp Salvisberg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@phsalvisberg\" \/>\n<meta name=\"twitter:site\" content=\"@phsalvisberg\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Philipp Salvisberg\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2015\\\/05\\\/17\\\/introducing-plsql-unwrapper-for-sql-developer\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2015\\\/05\\\/17\\\/introducing-plsql-unwrapper-for-sql-developer\\\/\"},\"author\":{\"name\":\"Philipp Salvisberg\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#\\\/schema\\\/person\\\/34352245c48678b1a5a05d4bc1339515\"},\"headline\":\"Introducing PL\\\/SQL Unwrapper for SQL Developer\",\"datePublished\":\"2015-05-17T15:53:59+00:00\",\"dateModified\":\"2023-11-08T19:18:51+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2015\\\/05\\\/17\\\/introducing-plsql-unwrapper-for-sql-developer\\\/\"},\"wordCount\":508,\"commentCount\":46,\"publisher\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#\\\/schema\\\/person\\\/34352245c48678b1a5a05d4bc1339515\"},\"image\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2015\\\/05\\\/17\\\/introducing-plsql-unwrapper-for-sql-developer\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/05\\\/unwrapper-windows.png\",\"keywords\":[\"PL\\\/SQL\",\"PL\\\/SQL Unwrapper\",\"SQL Developer\"],\"articleSection\":[\"Oracle\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2015\\\/05\\\/17\\\/introducing-plsql-unwrapper-for-sql-developer\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2015\\\/05\\\/17\\\/introducing-plsql-unwrapper-for-sql-developer\\\/\",\"url\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2015\\\/05\\\/17\\\/introducing-plsql-unwrapper-for-sql-developer\\\/\",\"name\":\"Introducing PL\\\/SQL Unwrapper for SQL Developer - Philipp Salvisberg&#039;s Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2015\\\/05\\\/17\\\/introducing-plsql-unwrapper-for-sql-developer\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2015\\\/05\\\/17\\\/introducing-plsql-unwrapper-for-sql-developer\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/05\\\/unwrapper-windows.png\",\"datePublished\":\"2015-05-17T15:53:59+00:00\",\"dateModified\":\"2023-11-08T19:18:51+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2015\\\/05\\\/17\\\/introducing-plsql-unwrapper-for-sql-developer\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2015\\\/05\\\/17\\\/introducing-plsql-unwrapper-for-sql-developer\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2015\\\/05\\\/17\\\/introducing-plsql-unwrapper-for-sql-developer\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/05\\\/unwrapper-windows.png\",\"contentUrl\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/05\\\/unwrapper-windows.png\",\"width\":684,\"height\":589},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2015\\\/05\\\/17\\\/introducing-plsql-unwrapper-for-sql-developer\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Introducing PL\\\/SQL Unwrapper for SQL Developer\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/\",\"name\":\"Philipp Salvisberg&#039;s Blog\",\"description\":\"Database-centric development\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#\\\/schema\\\/person\\\/34352245c48678b1a5a05d4bc1339515\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#\\\/schema\\\/person\\\/34352245c48678b1a5a05d4bc1339515\",\"name\":\"Philipp Salvisberg\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2010\\\/11\\\/phs_trivadis4.jpg\",\"url\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2010\\\/11\\\/phs_trivadis4.jpg\",\"contentUrl\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2010\\\/11\\\/phs_trivadis4.jpg\",\"width\":400,\"height\":400,\"caption\":\"Philipp Salvisberg\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2010\\\/11\\\/phs_trivadis4.jpg\"},\"sameAs\":[\"http:\\\/\\\/www.salvis.com\\\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Introducing PL\/SQL Unwrapper for SQL Developer - Philipp Salvisberg&#039;s Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.salvis.com\/blog\/2015\/05\/17\/introducing-plsql-unwrapper-for-sql-developer\/","og_locale":"en_US","og_type":"article","og_title":"Introducing PL\/SQL Unwrapper for SQL Developer - Philipp Salvisberg&#039;s Blog","og_description":"I&#8217;m using from time to time the free service&nbsp;Unwrap it! or Niels Teusink&#8217;s Python script unwrap.py&nbsp;to unwrap PL\/SQL code. Recently I&#8217;ve been confronted more with wrapped code since a customer is about to migrate to a new banking platform which is using wrapped PL\/SQL code extensively. While investigating migration errors we experienced&nbsp;that [\u2026]","og_url":"https:\/\/www.salvis.com\/blog\/2015\/05\/17\/introducing-plsql-unwrapper-for-sql-developer\/","og_site_name":"Philipp Salvisberg&#039;s Blog","article_published_time":"2015-05-17T15:53:59+00:00","article_modified_time":"2023-11-08T19:18:51+00:00","og_image":[{"width":684,"height":589,"url":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2015\/05\/unwrapper-windows.png","type":"image\/png"}],"author":"Philipp Salvisberg","twitter_card":"summary_large_image","twitter_creator":"@phsalvisberg","twitter_site":"@phsalvisberg","twitter_misc":{"Written by":"Philipp Salvisberg","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.salvis.com\/blog\/2015\/05\/17\/introducing-plsql-unwrapper-for-sql-developer\/#article","isPartOf":{"@id":"https:\/\/www.salvis.com\/blog\/2015\/05\/17\/introducing-plsql-unwrapper-for-sql-developer\/"},"author":{"name":"Philipp Salvisberg","@id":"https:\/\/www.salvis.com\/blog\/#\/schema\/person\/34352245c48678b1a5a05d4bc1339515"},"headline":"Introducing PL\/SQL Unwrapper for SQL Developer","datePublished":"2015-05-17T15:53:59+00:00","dateModified":"2023-11-08T19:18:51+00:00","mainEntityOfPage":{"@id":"https:\/\/www.salvis.com\/blog\/2015\/05\/17\/introducing-plsql-unwrapper-for-sql-developer\/"},"wordCount":508,"commentCount":46,"publisher":{"@id":"https:\/\/www.salvis.com\/blog\/#\/schema\/person\/34352245c48678b1a5a05d4bc1339515"},"image":{"@id":"https:\/\/www.salvis.com\/blog\/2015\/05\/17\/introducing-plsql-unwrapper-for-sql-developer\/#primaryimage"},"thumbnailUrl":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2015\/05\/unwrapper-windows.png","keywords":["PL\/SQL","PL\/SQL Unwrapper","SQL Developer"],"articleSection":["Oracle"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.salvis.com\/blog\/2015\/05\/17\/introducing-plsql-unwrapper-for-sql-developer\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.salvis.com\/blog\/2015\/05\/17\/introducing-plsql-unwrapper-for-sql-developer\/","url":"https:\/\/www.salvis.com\/blog\/2015\/05\/17\/introducing-plsql-unwrapper-for-sql-developer\/","name":"Introducing PL\/SQL Unwrapper for SQL Developer - Philipp Salvisberg&#039;s Blog","isPartOf":{"@id":"https:\/\/www.salvis.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.salvis.com\/blog\/2015\/05\/17\/introducing-plsql-unwrapper-for-sql-developer\/#primaryimage"},"image":{"@id":"https:\/\/www.salvis.com\/blog\/2015\/05\/17\/introducing-plsql-unwrapper-for-sql-developer\/#primaryimage"},"thumbnailUrl":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2015\/05\/unwrapper-windows.png","datePublished":"2015-05-17T15:53:59+00:00","dateModified":"2023-11-08T19:18:51+00:00","breadcrumb":{"@id":"https:\/\/www.salvis.com\/blog\/2015\/05\/17\/introducing-plsql-unwrapper-for-sql-developer\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.salvis.com\/blog\/2015\/05\/17\/introducing-plsql-unwrapper-for-sql-developer\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.salvis.com\/blog\/2015\/05\/17\/introducing-plsql-unwrapper-for-sql-developer\/#primaryimage","url":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2015\/05\/unwrapper-windows.png","contentUrl":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2015\/05\/unwrapper-windows.png","width":684,"height":589},{"@type":"BreadcrumbList","@id":"https:\/\/www.salvis.com\/blog\/2015\/05\/17\/introducing-plsql-unwrapper-for-sql-developer\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.salvis.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Introducing PL\/SQL Unwrapper for SQL Developer"}]},{"@type":"WebSite","@id":"https:\/\/www.salvis.com\/blog\/#website","url":"https:\/\/www.salvis.com\/blog\/","name":"Philipp Salvisberg&#039;s Blog","description":"Database-centric development","publisher":{"@id":"https:\/\/www.salvis.com\/blog\/#\/schema\/person\/34352245c48678b1a5a05d4bc1339515"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.salvis.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.salvis.com\/blog\/#\/schema\/person\/34352245c48678b1a5a05d4bc1339515","name":"Philipp Salvisberg","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2010\/11\/phs_trivadis4.jpg","url":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2010\/11\/phs_trivadis4.jpg","contentUrl":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2010\/11\/phs_trivadis4.jpg","width":400,"height":400,"caption":"Philipp Salvisberg"},"logo":{"@id":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2010\/11\/phs_trivadis4.jpg"},"sameAs":["http:\/\/www.salvis.com\/"]}]}},"_links":{"self":[{"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/posts\/2852","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/comments?post=2852"}],"version-history":[{"count":22,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/posts\/2852\/revisions"}],"predecessor-version":[{"id":12754,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/posts\/2852\/revisions\/12754"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/media\/2861"}],"wp:attachment":[{"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/media?parent=2852"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/categories?post=2852"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/tags?post=2852"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}