# mah_lib_category_array v0.2.5 # mah_lib_category_array() is a library function that returns an array of non-empty "article", "link", "image", or "file" categories. # Micky Hulse # http://ambiguism.com/ # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YTo5OntzOjc6InZlcnNpb24iO3M6NToiMC4yLjUiO3M6NjoiYXV0aG9yIjtzOjExOiJNaWNr eSBIdWxzZSI7czoxMDoiYXV0aG9yX3VyaSI7czoyMToiaHR0cDovL2FtYmlndWlzbS5jb20v IjtzOjExOiJkZXNjcmlwdGlvbiI7czoxMzE6Im1haF9saWJfY2F0ZWdvcnlfYXJyYXkoKSBp cyBhIGxpYnJhcnkgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIGFycmF5IG9mIG5vbi1lbXB0 eSAiYXJ0aWNsZSIsICJsaW5rIiwgImltYWdlIiwgb3IgImZpbGUiIGNhdGVnb3JpZXMuIjtz OjQ6InR5cGUiO2k6MjtzOjQ6Im5hbWUiO3M6MjI6Im1haF9saWJfY2F0ZWdvcnlfYXJyYXki O3M6NDoiaGVscCI7czo2MTQyOiIJPGgxPjxjb2RlPm1haF9saWJfY2F0ZWdvcnlfYXJyYXko KTwvY29kZT48L2gxPgoKCTxoND48ZW0+TGlicmFyeSBmdW5jdGlvbiB0aGF0IHJldHVybnMg YW4gYXJyYXkgb2Ygbm9uLWVtcHR5ICYjODIyMDthcnRpY2xlJiM4MjIxOywgJiM4MjIwO2xp bmsmIzgyMjE7LCAmIzgyMjA7aW1hZ2UmIzgyMjE7LCBvciAmIzgyMjA7ZmlsZSYjODIyMTsg Y2F0ZWdvcmllcy48L2VtPjwvaDQ+CgoJPHA+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiA8ZW0+ VGhpcyBjb2RlIGlzIGp1c3QgYSBoYWNrZWQvbW9kaWZpZWQgdmVyc2lvbiBvZiA8Y29kZT5j YnNfY2F0ZWdvcnlfbGlzdDwvY29kZT4gdjAuOSBieSBDaHJpc3RvcGhlIEJleWxzIDxhIGhy ZWY9Imh0dHA6Ly93d3cuZGlnaXRhbGlhLmJlIj5odHRwOi8vd3d3LmRpZ2l0YWxpYS5iZTwv YT4uIEEgPHN0cm9uZz48c3BhbiBjbGFzcz0iY2FwcyI+QklHPC9zcGFuPjwvc3Ryb25nPiB0 aGFua3MgZ29lcyBvdXQgdG8gQ2hyaXN0b3BoZS48L2VtPjwvcD4KCgk8aDQ+PHNwYW4gY2xh c3M9ImNhcHMiPkFCT1VUPC9zcGFuPjwvaDQ+CgoJPHVsPgoJCTxsaT5tYWhfbGliX2NhdGVn b3J5X2FycmF5KCkgaXMgYSBzZWN0aW9uLXNlbnNpdGl2ZSBmdW5jdGlvbiA8c3Ryb25nPnJl dHVybnMgYW4gYXJyYXk8L3N0cm9uZz4gb2YgPHN0cm9uZz5ub24tZW1wdHk8L3N0cm9uZz4g JiM4MjIwO2FydGljbGUmIzgyMjE7LCAmIzgyMjA7bGluayYjODIyMTssICYjODIyMDtpbWFn ZSYjODIyMTssIG9yICYjODIyMDtmaWxlJiM4MjIxOyBjYXRlZ29yaWVzLjwvbGk+CgkJPGxp PkNhdGVnb3JpZXMgYXJlIHJldHVybmVkIHVzaW5nIHRoZWlyIDxlbT5UaXRsZTwvZW0+IG9y IDxlbT5OYW1lPC9lbT4gYW5kIHNvcnRlZCBhbHBoYWJldGljYWxseSBieSA8ZW0+VGl0bGU8 L2VtPi48L2xpPgoJCTxsaT5Gb3IgYXJ0aWNsZXM6IElmIG5vIGFydGljbGUgaXMgZm91bmQg aW4gdGhlIHNlY3Rpb24gZm9yIGEgY2F0ZWdvcnksIHRoaXMgY2F0ZWdvcnkgd2lsbCBub3Qg YmUgaW5jbHVkZWQuPC9saT4KCQk8bGk+Rm9yIGxpbmtzLCBpbWFnZXMsIGFuZCBmaWxlczog SWYgYSBjYXRlZ29yeSBjb250YWlucyBubyBkYXRhLCB0aGlzIGNhdGVnb3J5IHdpbGwgbm90 IGJlIGluY2x1ZGVkLjwvbGk+Cgk8L3VsPgoKCTxoND48c3BhbiBjbGFzcz0iY2FwcyI+U1lO VEFYPC9zcGFuPjwvaDQ+CgoJPHVsPgoJCTxsaT48Y29kZT5tYWhfbGliX2NhdGVnb3J5X2Fy cmF5KCk8L2NvZGU+PC9saT4KCTwvdWw+CgoJPGg0PjxzcGFuIGNsYXNzPSJjYXBzIj5BVFRS SUJVVEVTPC9zcGFuPjwvaDQ+CgoJPGg1PjxzcGFuIGNsYXNzPSJjYXBzIj5SRVFVSVJFRDwv c3Bhbj48L2g1PgoKCTx1bD4KCQk8bGk+PHN0cm9uZz50eXBlOjwvc3Ryb25nPiBDYXRlZ29y eSB0eXBlcywgeW91IG11c3QgY2hvb3NlIGJldHdlZW4gJiM4MjIwO2FydGljbGUmIzgyMjE7 LCAmIzgyMjA7bGluayYjODIyMTssICYjODIyMDtpbWFnZSYjODIyMTssIG9yICYjODIyMDtm aWxlJiM4MjIxOy48L2xpPgoJPC91bD4KCgk8aDU+PHNwYW4gY2xhc3M9ImNhcHMiPk9QVElP TkFMPC9zcGFuPjwvaDU+CgoJPHVsPgoJCTxsaT48c3Ryb25nPmZvcm1hdDo8L3N0cm9uZz4g RGV0ZXJtaW5lcyB0aGUgcmV0dXJuIHZhbHVlIHR5cGUuICYjODIyMDtuYW1lJiM4MjIxOyB3 aWxsIHJldHVybiB0aGUgY2F0ZWdvcmllcyBpbiBhbiBhcnJheSBieSBuYW1lLiBUaGUgZGVm YXVsdCBpcyAmIzgyMjA7dGl0bGUmIzgyMjE7LCBhbmQgd2lsbCByZXR1cm4gdGhlIGNhdGVn b3JpZXMgaW4gYW4gYXJyYXkgYnkgdGl0bGUuPC9saT4KCQk8bGk+PHN0cm9uZz5wYXJlbnQ6 PC9zdHJvbmc+IFRoZSBwYXJlbnQgY2F0ZWdvcnkgbmFtZS4gSWYgc3BlY2lmaWVkLCB3aWxs IHJldHVybiBvbmx5IHRoZSBkaXJlY3QgY2hpbGRyZW4gY2F0ZWdvcmllcyBmb3IgdGhpcyBw YXJlbnQuIEl0IHdpbGwgbm90IHNob3cgY2hpbGRyZW4gb2YgY2hpbGRyZW4uIERlZmF1bHQg aXMgYW55IGNhdGVnb3J5LjwvbGk+CgkJPGxpPjxzdHJvbmc+cG9zdGVkOjwvc3Ryb25nPiAo PHN0cm9uZz4mIzgyMjA7YXJ0aWNsZSYjODIyMTsgYW5kICYjODIyMDtmaWxlJiM4MjIxOyBj YXRlZ29yaWVzIG9ubHk8L3N0cm9uZz4pIEVpdGhlciAmIzgyMjA7cGFzdCYjODIyMTssICYj ODIyMDtmdXR1cmUmIzgyMjE7IG9yICYjODIyMDthbGwmIzgyMjE7LiBXaWxsIG9ubHkgY291 bnQgYXJ0aWNsZXMgd2l0aCB0aGUgc3BlY2lmaWVkIHB1YmxpY2F0aW9uIGRhdGUuICYjODIy MDthbGwmIzgyMjE7IGlzIHNsaWdodGx5IGZhc3RlciBiZWNhdXNlIE15U1FMIHdpbGwgYmUg YWJsZSB0byBjYWNoZSB0aGUgcXVlcnkuIERlZmF1bHQgaXMgJiM4MjIwO3Bhc3QmIzgyMjE7 LjwvbGk+CgkJPGxpPjxzdHJvbmc+c3RpY2t5Ojwvc3Ryb25nPiAoPHN0cm9uZz4mIzgyMjA7 YXJ0aWNsZSYjODIyMTsgY2F0ZWdvcmllcyBvbmx5PC9zdHJvbmc+KSBXaGVuIHNldCB0byB0 cnVlLCB3aWxsIGRpc3BsYXkgdGhlIGNhdGVnb3J5IGxpc3Qgb2YgJiM4MjIwO3N0aWNreSYj ODIyMTsgYXJ0aWNsZXMgaW5zdGVhZCBvZiAmIzgyMjA7bGl2ZSYjODIyMTsgYXJ0aWNsZXMu IERlZmF1bHQgaXMgZmFsc2UuPC9saT4KCQk8bGk+PHN0cm9uZz5zZWN0aW9uOjwvc3Ryb25n PiAoPHN0cm9uZz4mIzgyMjA7YXJ0aWNsZSYjODIyMTsgY2F0ZWdvcmllcyBvbmx5PC9zdHJv bmc+KSBUaGUgc2VjdGlvbiB0byBkaXNwbGF5IHRoZSByZWxhdGVkIGFydGljbGUgY2F0ZWdv cmllcy4gV2hlbiAmIzgyMjA7ZGVmYXVsdCYjODIyMTsgKHRoZSBmcm9udHBhZ2UpIGlzIHNw ZWNpZmllZCwgaXQgc2hvd3MgYWxsIGNhdGVnb3JpZXMgcmVsYXRlZCB0byBzZWN0aW9ucyB3 aGljaCBhcmUgcGFydCBvZiB0aGUgZnJvbnRwYWdlLiBEZWZhdWx0IGlzIHRoZSBjdXJyZW50 IHNlY3Rpb24uPC9saT4KCQk8bGk+PHN0cm9uZz5vcmRlcjo8L3N0cm9uZz4gJiM4MjIwO2Fz YyYjODIyMTsgPSBzb3J0IHRoZSBjYXRlZ29yaWVzIGluIGFscGhhYmV0aWNhbCBhc2NlbmRp bmcgb3JkZXIuIChBbHBoYWJldGljYWwgZGVzY2VuZGluZywgYmFzZWQgb24gY2F0ZWdvcnkg dGl0bGUsIGlzIGRlZmF1bHQuKTwvbGk+CgkJPGxpPjxzdHJvbmc+ZW50cnlfb3JkZXI6PC9z dHJvbmc+ICg8c3Ryb25nPiYjODIyMDthcnRpY2xlJiM4MjIxOyBjYXRlZ29yaWVzIG9ubHk8 L3N0cm9uZz4pICYjODIyMDt0cnVlJiM4MjIxOyA9IHNvcnQgY2F0ZWdvcmllcyBiYXNlZCBv biBlbnRyeSBkYXRlIG9mIGxhc3QgbW9kaWZpZWQgYXJ0aWNsZSBpbiBzYWlkIGNhdGVnb3J5 LiAoQWxwaGFiZXRpY2FsIGRlc2NlbmRpbmcsIGJhc2VkIG9uIHRpdGxlLCBpcyBkZWZhdWx0 Lik8L2xpPgoJPC91bD4KCgk8aDQ+PHNwYW4gY2xhc3M9ImNhcHMiPkVYQU1QTEU8L3NwYW4+ IDxzcGFuIGNsYXNzPSJjYXBzIj5VU0FHRTwvc3Bhbj46PC9oND4KCjxwcmU+PGNvZGU+JiM2 MDt0eHA6cGhwJiM2MjsKJG1haF9saWJfY2F0ZWdvcnlfYXJyYXlfYXR0cyA9IGFycmF5KCYj Mzk7dHlwZSYjMzk7ID0mIzYyOyAmIzM5O2FydGljbGUmIzM5OywgJiMzOTtwb3N0ZWQmIzM5 OyA9JiM2MjsgJiMzOTthbGwmIzM5OywgJiMzOTtmb3JtYXQmIzM5OyA9JiM2MjsgJiMzOTtu YW1lJiMzOTssICYjMzk7ZW50cnlfb3JkZXImIzM5OyA9JiM2MjsgJiMzOTt0cnVlJiMzOTsp OyAvLyBTZXR1cCBhdHRyaWJ1dGVzLgokY2F0ZWdvcnlfbGlzdCA9IG1haF9saWJfY2F0ZWdv cnlfYXJyYXkoJG1haF9saWJfY2F0ZWdvcnlfYXJyYXlfYXR0cyk7IC8vIENhbGwgbWV0aG9k LgojIExvb3AgdGhyb3VnaCBhcnJheToKZm9yKCRpID0gMDsgJGkgJiM2MDsgY291bnQoJGNh dGVnb3J5X2xpc3QpOyAkaSsrKSB7CgkkY2F0ZWdvcnkgPSAkY2F0ZWdvcnlfbGlzdFskaV07 CgllY2hvICYjMzk7JiM2MDtoMiYjNjI7JiM2MDt0eHA6Y2F0ZWdvcnkgbmFtZT0mIzM0OyYj Mzk7LiRjYXRlZ29yeS4mIzM5OyYjMzQ7IGxpbms9JiMzNDsxJiMzNDsgdGl0bGU9JiMzNDsx JiMzNDsgLyYjNjI7JiM2MDsvaDImIzYyOyYjMzk7LiYjMzQ7XG4mIzM0OzsKCWVjaG8gYXJ0 aWNsZV9jdXN0b20oYXJyYXkoJiMzOTtjYXRlZ29yeSYjMzk7ID0mIzYyOyAkY2F0ZWdvcnkp KS4mIzM0O1xuJiMzNDs7CiAgICBlY2hvICYjMzk7JiM2MDtociYjNjI7JiMzOTs7Cn0KJiM2 MDsvdHhwOnBocCYjNjI7CjwvY29kZT48L3ByZT4KCgk8aDQ+PHNwYW4gY2xhc3M9ImNhcHMi PkRPV05MT0FEPC9zcGFuPjwvaDQ+CgoJPHVsPgoJCTxsaT48YSBocmVmPSJodHRwOi8vd3d3 LmFtYmlndWlzbS5jb20vc2FuZGJveC9zY3JpcHRzL3RleHRwYXR0ZXJuL21haF9saWJfY2F0 ZWdvcnlfYXJyYXkudHh0Ij5tYWhfbGliX2NhdGVnb3J5X2FycmF5LnR4dDwvYT48L2xpPgoJ PC91bD4KCgk8aDQ+PHNwYW4gY2xhc3M9ImNhcHMiPkNIQU5HRTwvc3Bhbj4gPHNwYW4gY2xh c3M9ImNhcHMiPkxPRzwvc3Bhbj48L2g0PgoKCTx1bD4KCQk8bGk+PHN0cm9uZz4xMi8wMS8w Nzwvc3Ryb25nPiAmIzgyMTI7IEFkZGVkIHRoZSBhYmlsaXR5IHRvIHNwZWNpZnkgdGhlIHR5 cGUgb2YgY2F0ZWdvcmllcyB0byByZXR1cm4uPC9saT4KCQk8bGk+PHN0cm9uZz4wMy8yNi8w ODwvc3Ryb25nPiAmIzgyMTI7IDEpIEFkZGVkOiBzYWZlX3BmeCgpIHRvIHF1ZXJpZXM7IDIp IEFiaWxpdHkgdG8gb3JkZXIgY2F0ZWdvcmllcyBpbiA8c3BhbiBjbGFzcz0iY2FwcyI+QVND PC9zcGFuPiBvcmRlcjsgMykgT3B0aW9uIHRvIHNvcnQgY2F0ZWdvcmllcyBiYXNlZCBvbiBs YXRlc3QgYXJ0aWNsZSBlbnRyeSBkYXRlIGluIHNhaWQgY2F0ZWdvcnkuIDQpIENsZWFuZWQt dXAgY29kZS48L2xpPgoJPC91bD4KCgk8aDQ+PHNwYW4gY2xhc3M9ImNhcHMiPlRIQU5LPC9z cGFuPiA8c3BhbiBjbGFzcz0iY2FwcyI+WU9VPC9zcGFuPiYjODIxNztTPC9oND4KCgk8dWw+ CgkJPGxpPjxzdHJvbmc+Q2hyaXN0b3BoZSBCZXlsczwvc3Ryb25nPiA8ZW0+PGEgaHJlZj0i aHR0cDovL3d3dy5kaWdpdGFsaWEuYmUiPmh0dHA6Ly93d3cuZGlnaXRhbGlhLmJlPC9hPjwv ZW0+OiBGb3IgY3JlYXRpbmcvc2hhcmluZyA8YSBocmVmPSJodHRwOi8vdGV4dHBhdHRlcm4u b3JnL3BsdWdpbnMvNDcwL2Nic19jYXRlZ29yeV9saXN0Ij50aGUgb3JpZ2luYWwgY29kZTwv YT4uPC9saT4KCQk8bGk+PHN0cm9uZz5SdXVkIHZhbiBNZWxpY2s8L3N0cm9uZz4gPGVtPjxh IGhyZWY9Imh0dHA6Ly92YW5tZWxpY2suY29tLyI+aHR0cDovL3Zhbm1lbGljay5jb20vPC9h PjwvZW0+OiBGb3IgaW5zcGlyYXRpb24gYW5kIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS50ZXh0 cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD0yNDc0MCI+PHNwYW4gY2xhc3M9ImNhcHMi PlRYUDwvc3Bhbj4gZm9ydW0gaGVscGZ1bG5lc3M8L2E+LjwvbGk+CgkJPGxpPjxzdHJvbmc+ emVtPC9zdHJvbmc+IDxlbT48YSBocmVmPSJodHRwOi8vdGhyZXNob2xkc3RhdGUuY29tLyI+ aHR0cDovL3RocmVzaG9sZHN0YXRlLmNvbS88L2E+PC9lbT46IEZvciB0aGUgZWFzeS10by11 c2UgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhw P2lkPTEwMzMwIj5wbHVnaW4gdGVtcGxhdGU8L2E+LjwvbGk+CgkJPGxpPjxzdHJvbmc+U3Rl dmUgRGlja2luc29uPC9zdHJvbmc+IDxlbT48YSBocmVmPSJodHRwOi8vdHhwLXBsdWdpbnMu bmV0Y2FydmluZy5jb20vIj5odHRwOi8vdHhwLXBsdWdpbnMubmV0Y2FydmluZy5jb20vPC9h PjwvZW0+OiBGb3IgaW5wc3BpcmF0aW9uIGFuZCBtb3RpdmF0aW9uLiA6KTwvbGk+Cgk8L3Vs PgoKCTxoND48c3BhbiBjbGFzcz0iY2FwcyI+UkVMQVRFRDwvc3Bhbj4gPHNwYW4gY2xhc3M9 ImNhcHMiPkxJTktTPC9zcGFuPjwvaDQ+CgoJPHVsPgoJCTxsaT48YSBocmVmPSJodHRwOi8v Zm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/aWQ9MjQ3NDAiPk9yaWdpbmFs IHRocmVhZDwvYT48L2xpPgoJCTxsaT48YSBocmVmPSJodHRwOi8vZm9ydW0udGV4dHBhdHRl cm4uY29tL3ZpZXd0b3BpYy5waHA/aWQ9MjQ4OTciPkZvcnVtIGRpc2N1c3Npb248L2E+PC9s aT4KCQk8bGk+PGEgaHJlZj0iaHR0cDovL3RleHRwYXR0ZXJuLm9yZy9wbHVnaW5zLzkwNi9t YWhfbGliX2NhdGVnb3J5X2FycmF5Ij5UZXh0cGF0dGVybiBSZXNvdXJjZXM8L2E+PC9saT4K CTwvdWw+IjtzOjQ6ImNvZGUiO3M6NDk1NDoiCmZ1bmN0aW9uIG1haF9saWJfY2F0ZWdvcnlf YXJyYXkoJGF0dHMpIHsKCgkvKgoJKioKCSoqIG1haF9saWJfY2F0ZWdvcnlfYXJyYXkoKQoJ KiogTm90ZTogVGhpcyBwbHVnaW4gaXMganVzdCBhIGhhY2tlZCB2ZXJzaW9uIG9mOgoJKiog Y2JzX2NhdGVnb3J5X2xpc3QgdjAuOSBieSBDaHJpc3RvcGhlIEJleWxzIFtodHRwOi8vd3d3 LmRpZ2l0YWxpYS5iZV0KCSoqCgkqKiBDaGFuZ2Vsb2c6CgkqKiAgICAgIDEyLzAxLzA3IC0t IEFkZGVkIHRoZSBhYmlsaXR5IHRvIHNwZWNpZnkgdGhlIHR5cGUgb2YgY2F0ZWdvcmllcyB0 byByZXR1cm4uCgkqKiAgICAgIDAzLzI2LzA4IC0tIDEpIEFkZGVkOiBzYWZlX3BmeCgpIHRv IHF1ZXJpZXM7IDIpIEFiaWxpdHkgdG8gb3JkZXIgY2F0ZWdvcmllcyBpbiBBU0Mgb3JkZXI7 IDMpIE9wdGlvbiB0byBzb3J0IGNhdGVnb3JpZXMgYmFzZWQgb24gZW50cnkgZGF0ZSBvZiBs YXN0IG1vZGlmaWVkIGFydGljbGUgaW4gc2FpZCBjYXRlZ29yeS4gNCkgQ2xlYW5lZC11cCBj b2RlLgoJKioKCSovCgoJIyBHbG9iYWwocyk6CglnbG9iYWwgJHM7CgoJIyBJbml0aWFsaXpl IGludGVybmFsIHZhcmlhYmxlczoKCSRhdHRzICAgICAgICAgICAgICAgID0gJGF0dHM7Cgkk cG9zdGVkX2FydGljbGUgICAgICA9ICcnOwoJJHBvc3RlZF9maWxlICAgICAgICAgPSAnJzsK CSR0YWJsZSAgICAgICAgICAgICAgID0gJyc7Cgkkc3Fsc2VjdGlvbiAgICAgICAgICA9ICcn OwoJJHNxbCAgICAgICAgICAgICAgICAgPSAnJzsKCSRycyAgICAgICAgICAgICAgICAgID0g Jyc7Cgkkb3V0ICAgICAgICAgICAgICAgICA9IGFycmF5KCk7CgkkYSAgICAgICAgICAgICAg ICAgICA9IDA7CgoJIyBFeHRyYWN0IHBsdWdpbiBhdHRyaWJ1dGVzOgoJZXh0cmFjdChsQXR0 cyhhcnJheSgKCQkndHlwZScgICAgICAgICAgID0+ICcnLCAgICAgICAvLyBDYXRlZ29yeSB0 eXBlOiAiYXJ0aWNsZSIsICJsaW5rIiwgImltYWdlIiwgImZpbGUiLgoJCSdmb3JtYXQnICAg ICAgICAgPT4gRkFMU0UsICAgIC8vIEJ5IGNhdGVnb3J5ICJuYW1lIj8gRGVmYXVsdCBpcyAi dGl0bGUiLgoJCSdwYXJlbnQnICAgICAgICAgPT4gRkFMU0UsICAgIC8vIFBhcmVudCBjYXRl Z29yeT8KCQkncG9zdGVkJyAgICAgICAgID0+IDAsICAgICAgICAvLyBTaG93IHBhc3Qgb3Ig ZnV0dXJlPwoJCSdzdGlja3knICAgICAgICAgPT4gRkFMU0UsICAgIC8vIFN0aWNreT8KCQkn c2VjdGlvbicgICAgICAgID0+ICRzLCAgICAgICAvLyBGcm9tIHdoYXQgc2VjdGlvbj8KCQkn b3JkZXInICAgICAgICAgID0+IEZBTFNFLCAgICAvLyBTb3J0IG9yZGVyOiAiQVNDIiwgZGVm YXVsdCBpcyAiREVTQyIuCgkJJ2VudHJ5X29yZGVyJyAgICA9PiBGQUxTRSAgICAgLy8gU29y dCBjYXRlZ29yaWVzIGJhc2VkIG9uIGxhdGVzdCBlbnRyeSBpbiBzYWlkIGNhdGVnb3J5PwoJ KSwgJGF0dHMpKTsKCglpZigkdHlwZSA9PT0gJycpIHJldHVybiBGQUxTRTsgLy8gQ2F0ZWdv cnkgdHlwZSBub3Qgc3BlY2lmaWVkLCBxdWl0LgoKCSRmb3JtYXQgPSAoJGZvcm1hdCkgPyBU UlVFIDogRkFMU0U7IC8vIFdoYXQgZm9ybWF0PwoJJHBhcmVudCA9ICgkcGFyZW50KSA/ICJB TkQgYy5wYXJlbnQgPSAnJHBhcmVudCcgIiA6ICcnOyAvLyBQYXJlbnQgY2F0ZWdvcnkgc3Bl Y2lmaWVkPwoJJG9yZGVyID0gKCRvcmRlcikgPyAnQVNDJyA6ICdERVNDJzsgLy8gU29ydCBv cmRlcjogSWYgbm90IHNwZWNpZmllZCwgZGVmYXVsdCB0byBERVNDLgoJJGVudHJ5X29yZGVy ID0gKCRlbnRyeV9vcmRlcikgPyBUUlVFIDogRkFMU0U7CgoJIyBQb3N0ZWQ/Cglzd2l0Y2go JHBvc3RlZCkgewoKCQljYXNlICdhbGwnOgoJCQkjIEFsbDoKCQkJJHBvc3RlZF9hcnRpY2xl ID0gJyc7CgkJCSRwb3N0ZWRfZmlsZSA9ICcnOwoJCWJyZWFrOwoKCQljYXNlICdmdXR1cmUn OgoJCQkjIEZ1dHVyZToKCQkJJHBvc3RlZF9hcnRpY2xlID0gJ0FORCB0LlBvc3RlZCA+PSBu b3coKSAnOwoJCQkkcG9zdGVkX2ZpbGUgPSAnQU5EIHQuY3JlYXRlZCA+PSBub3coKSAnOwoJ CWJyZWFrOwoKCQlkZWZhdWx0OgoJCQkjIFBhc3Q6CgkJCSRwb3N0ZWRfYXJ0aWNsZSA9ICdB TkQgdC5Qb3N0ZWQgPCBub3coKSAnOwoJCQkkcG9zdGVkX2ZpbGUgPSAnQU5EIHQuY3JlYXRl ZCA8IG5vdygpICc7CgoJfQoKCXN3aXRjaCgkdHlwZSkgewoKCQljYXNlICdsaW5rJzoKCQkJ IyBMaW5rOgoJCQkkc3FsID0KCQkJCSdTRUxFQ1QgYy5uYW1lLCBjLnRpdGxlLCB0LmNhdGVn b3J5ICcKCQkJCS4gJ0ZST00gJyAuIHNhZmVfcGZ4KCd0eHBfY2F0ZWdvcnknKSAuICcgQVMg YywgJyAuIHNhZmVfcGZ4KCd0eHBfbGluaycpIC4gJyBBUyB0ICcKCQkJCS4gJ1dIRVJFIGMu dHlwZSA9ICJsaW5rIiAnCgkJCQkuICRwYXJlbnQKCQkJCS4gJ0FORCBjLm5hbWUgPSB0LmNh dGVnb3J5ICcKCQkJCS4gJ0dST1VQIEJZIGMubmFtZSAnCgkJCQkuICdPUkRFUiBCWSBjLnRp dGxlICcgLiAkb3JkZXI7CgkJCWJyZWFrOwoKCQljYXNlICdpbWFnZSc6CgkJCSMgSW1hZ2U6 CgkJCSRzcWwgPQoJCQkJJ1NFTEVDVCBjLm5hbWUsIGMudGl0bGUsIHQuY2F0ZWdvcnkgJwoJ CQkJLiAnRlJPTSAnIC4gc2FmZV9wZngoJ3R4cF9jYXRlZ29yeScpIC4gJyBBUyBjLCAnIC4g c2FmZV9wZngoJ3R4cF9pbWFnZScpIC4gJyBBUyB0ICcKCQkJCS4gJ1dIRVJFIGMudHlwZSA9 ICJpbWFnZSIgJwoJCQkJLiAkcGFyZW50CgkJCQkuICdBTkQgYy5uYW1lID0gdC5jYXRlZ29y eSAnCgkJCQkuICdHUk9VUCBCWSBjLm5hbWUgJwoJCQkJLiAnT1JERVIgQlkgYy50aXRsZSAn IC4gJG9yZGVyOwoJCQlicmVhazsKCgkJY2FzZSAnZmlsZSc6CgkJCSMgRmlsZToKCQkJJHNx bCA9CgkJCQknU0VMRUNUIGMubmFtZSwgYy50aXRsZSwgdC5jYXRlZ29yeSAnCgkJCQkuICdG Uk9NICcgLiBzYWZlX3BmeCgndHhwX2NhdGVnb3J5JykgLiAnIEFTIGMsICcgLiBzYWZlX3Bm eCgndHhwX2ZpbGUnKSAuICcgQVMgdCAnCgkJCQkuICdXSEVSRSBjLnR5cGUgPSAiZmlsZSIg JwoJCQkJLiAkcGFyZW50CgkJCQkuICRwb3N0ZWRfZmlsZQoJCQkJLiAnQU5EIGMubmFtZSA9 IHQuY2F0ZWdvcnkgJwoJCQkJLiAnR1JPVVAgQlkgYy5uYW1lICcKCQkJCS4gJ09SREVSIEJZ IGMudGl0bGUgJyAuICRvcmRlcjsKCQkJYnJlYWs7CgoJCWRlZmF1bHQ6CgkJCSMgQXJ0aWNs ZToKCQkJJHN0aWNreSA9ICgkc3RpY2t5KSA/ICc1JyA6ICc0JzsKCgkJCWlmKCRzZWN0aW9u ID09ICdkZWZhdWx0JykgewoJCQkJJHRhYmxlID0gJywgJyAuIHNhZmVfcGZ4KCd0eHBfc2Vj dGlvbicpIC4gJyBBUyBzJzsKCQkJCSRzcWxzZWN0aW9uID0KCQkJCQkncy5uYW1lICcKCQkJ CQkuICdBTkQgcy5vbl9mcm9udHBhZ2UgPSAxJzsKCQkJfSBlbHNlIHsgJHNxbHNlY3Rpb24g PSAiJyRzZWN0aW9uJyI7IH0KCgkJCWlmKGVudHJ5X29yZGVyKSB7CgkJCQkjIFNvcnQgY2F0 ZWdvcmllcyBiYXNlZCBvbiBlbnRyeSBkYXRlIG9mIGxhc3QgbW9kaWZpZWQgYXJ0aWNsZSBp biBzYWlkIGNhdGVnb3J5OgoJCQkJJHNxbCA9CgkJCQkJJ1NFTEVDVCBjLm5hbWUsIGMudGl0 bGUgJwoJCQkJCS4gJ0ZST00gJyAuIHNhZmVfcGZ4KCd0eHBfY2F0ZWdvcnknKSAuICcgQVMg YywgJyAuIHNhZmVfcGZ4KCd0ZXh0cGF0dGVybicpIC4gJyBBUyB0JyAuICR0YWJsZSAuICcg JwoJCQkJCS4gJ1dIRVJFIChjLm5hbWUgPSB0LkNhdGVnb3J5MSBPUiBjLm5hbWUgPSB0LkNh dGVnb3J5MikgJwoJCQkJCS4gJ0FORCBjLnR5cGUgPSAiYXJ0aWNsZSIgJwoJCQkJCS4gJ0FO RCB0LlNlY3Rpb24gPSAnIC4gJHNxbHNlY3Rpb24gLiAnICcKCQkJCQkuICRwYXJlbnQKCQkJ CQkuICRwb3N0ZWRfYXJ0aWNsZQoJCQkJCS4gJ0FORCB0LlN0YXR1cyA9ICcgLiAkc3RpY2t5 IC4gJyAnCgkJCQkJLiAnQU5EIHQuTGFzdE1vZCA9ICgnCgkJCQkJLiAnU0VMRUNUIE1BWChM YXN0TW9kKSAnCgkJCQkJLiAnRlJPTSAnIC4gc2FmZV9wZngoJ3RleHRwYXR0ZXJuJykgLiAn ICcKCQkJCQkuICdXSEVSRSAoYy5uYW1lID0gQ2F0ZWdvcnkxIE9SIGMubmFtZSA9IENhdGVn b3J5MiApICcKCQkJCQkuICdBTkQgU2VjdGlvbiA9ICcgLiAkc3Fsc2VjdGlvbgoJCQkJCS4g JykgJwoJCQkJCS4gJ0dST1VQIEJZIGMubmFtZSAnCgkJCQkJLiAnT1JERVIgQlkgdC5MYXN0 TW9kICcgLiAkb3JkZXI7CgkJCX0gZWxzZSB7CgkJCQkjIFNvcnQgY2F0ZWdvcmllcyBhbHBo YWJldGljYWxseSBieSB0aXRsZToKCQkJCSRzcWwgPQoJCQkJCSdTRUxFQ1QgYy5uYW1lLCBj LnRpdGxlICcKCQkJCQkuICdGUk9NICcgLiBzYWZlX3BmeCgndHhwX2NhdGVnb3J5JykgLiAn IEFTIGMsICcgLiBzYWZlX3BmeCgndGV4dHBhdHRlcm4nKSAuICcgQVMgdCcgLiAkdGFibGUg LiAnICcKCQkJCQkuICdXSEVSRSAoYy5uYW1lID0gdC5DYXRlZ29yeTEgT1IgYy5uYW1lID0g dC5DYXRlZ29yeTIpICcKCQkJCQkuICdBTkQgYy50eXBlID0gImFydGljbGUiICcKCQkJCQku ICdBTkQgdC5TZWN0aW9uID0gJyAuICRzcWxzZWN0aW9uIC4gJyAnCgkJCQkJLiAkcGFyZW50 CgkJCQkJLiAkcG9zdGVkX2FydGljbGUKCQkJCQkuICdBTkQgdC5TdGF0dXMgPSAnIC4gJHN0 aWNreSAuICcgJwoJCQkJCS4gJ0dST1VQIEJZIGMubmFtZSAnCgkJCQkJLiAnT1JERVIgQlkg Yy50aXRsZSAnIC4gJG9yZGVyOwoJCQl9Cgl9CgoJIyBRdWVyeToKCSRycyA9IHN0YXJ0Um93 cygkc3FsKTsKCWlmKCEkcnMpIHJldHVybiAnJzsgLy8gTm8gcmVzdWx0cywgcmV0dXJuIGVt cHR5IHN0cmluZy4KCgkjIEdlbmVyYXRlIHJldHVybiB2YWx1ZShzKToKCXdoaWxlKCRhID0g bmV4dFJvdygkcnMpKSB7CgkJZXh0cmFjdCgkYSk7CgkJJG91dFtdID0gKCRmb3JtYXQpID8g JG5hbWUgOiBzdHJfcmVwbGFjZSgnJicsICcmIzM4OycsICR0aXRsZSk7IC8vIEFycmF5Cgl9 CgoJcmV0dXJuIChlbXB0eSgkb3V0KSkgPyAnJyA6ICRvdXQ7IC8vIFJldHVybiBub24tZW1w dHkgYXJyYXkuCgp9CiI7czozOiJtZDUiO3M6MzI6IjFhODBkMjUxMzIyODg2MWFkODhjMDY0 YWU4ZmY4NGExIjt9