# adi_variables v0.2 # Manage TXP variables # Adi Gilbert # http://www.greatoceanmedia.com.au/ # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YToxMDp7czo0OiJuYW1lIjtzOjEzOiJhZGlfdmFyaWFibGVzIjtzOjc6InZlcnNpb24iO3M6 MzoiMC4yIjtzOjY6ImF1dGhvciI7czoxMToiQWRpIEdpbGJlcnQiO3M6MTA6ImF1dGhvcl91 cmkiO3M6MzQ6Imh0dHA6Ly93d3cuZ3JlYXRvY2Vhbm1lZGlhLmNvbS5hdS8iO3M6MTE6ImRl c2NyaXB0aW9uIjtzOjIwOiJNYW5hZ2UgVFhQIHZhcmlhYmxlcyI7czo0OiJ0eXBlIjtpOjE7 czo0OiJoZWxwIjtzOjI1OTk6Igk8aDE+PHN0cm9uZz5hZGlfdmFyaWFibGVzPC9zdHJvbmc+ ICYjODIxMTsgTWFuYWdlIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IHZhcmlhYmxl czwvaDE+CgoJPHA+VGhpcyBwbHVnaW4gcHJvdmlkZXM6PC9wPgoKCTx1bD4KCQk8bGk+YSBu ZXcgVmFyaWFibGVzIHRhYiB1bmRlciBDb250ZW50IHRvIG1hbmFnZSB5b3VyIHZhcmlhYmxl czwvbGk+CgkJPGxpPmEgbmV3IGZvcm0sIDxpPmFkaV92YXJpYWJsZXM8L2k+LCB0byBzdG9y ZSB0aGUgdmFyaWFibGVzPC9saT4KCTwvdWw+CgoJPGgyPjxzdHJvbmc+SW5zdGFsbGF0aW9u PC9zdHJvbmc+PC9oMj4KCgk8cD5BIG5ldyBmb3JtLCBjYWxsZWQgPGk+YWRpX3ZhcmlhYmxl czwvaT4sIHdpbGwgYmUgaW5zdGFsbGVkIHdoZW4geW91IHZpc2l0IHRoZSBWYXJpYWJsZXMg dGFiIGZvciB0aGUgZmlyc3QgdGltZS48L3A+CgoJPHA+RGVsZXRlIHRoZSBleGFtcGxlIHZh cmlhYmxlcyBhbmQgYWRkIHlvdXIgb3duLjwvcD4KCgk8cD5UbyBicmluZyB0aGVtIGludG8g b3BlcmF0aW9uIHB1dCB0aGlzIGxpbmUgb2YgY29kZTo8L3A+CgoJPHA+PGNvZGU+Jmx0O3R4 cDpvdXRwdXRfZm9ybSBmb3JtPSZxdW90O2FkaV92YXJpYWJsZXMmcXVvdDsgLyZndDs8L2Nv ZGU+PC9wPgoKCTxwPmF0IHRoZSB0b3Agb2YgYWxsIHlvdXIgd2ViIHBhZ2VzLjwvcD4KCgk8 aDI+PHN0cm9uZz5BZG1pbiB0YWI8L3N0cm9uZz48L2gyPgoKCTxwPkFsbCB1c2VycyB3aWxs IHNlZSB0aGUgVmFyaWFibGVzIHRhYiB1bmRlciBDb250ZW50LiAgVGhpcyBwcm92aWRlczo8 L3A+CgoJPHVsPgoJCTxsaT5hIGxpc3Qgb2YgdmFyaWFibGVzICZhbXA7IHRoZWlyIGN1cnJl bnQgdmFsdWVzPC9saT4KCQk8bGk+dGhlIGFiaWxpdHkgdG8gYWRkICZhbXA7IGRlbGV0ZSB2 YXJpYWJsZXM8L2xpPgoJCTxsaT5vcHRpb25zIHRvIG1ha2UgdmFyaWFibGVzIEFkbWluIG9y IFB1YmxpYzwvbGk+CgkJPGxpPmFuIGFkbWluIGZ1bmN0aW9uIHRvIHRha2UgYSBiYWNrdXAg Y29weSBvZiB0aGUgPGk+YWRpX3ZhcmlhYmxlczwvaT4gZm9ybSBpbiA8aT5hZGlfdmFyaWFi bGVzX2NvcHk8L2k+PC9saT4KCTwvdWw+CgoJPHA+VG9vbHRpcHMgYXJlIGF2YWlsYWJsZSBo ZXJlICYjODIxMTsganVzdCBob3ZlciBvdmVyIGFueXRoaW5nIHdpdGggYSBkYXNoZWQgdW5k ZXJsaW5lLjwvcD4KCgk8aDI+PHN0cm9uZz5BZG1pbiAmYW1wOyBQdWJsaWM8L3N0cm9uZz48 L2gyPgoKCTxwPkJlY2F1c2UgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gdmFyaWFi bGVzIGhhdmUgYmVlbiBpbXBsZW1lbnRlZCBhcyBhIHRhZyBhbmQgaGVuY2UgdXNlZCBpbiBm b3Jtcy9wYWdlcyBldGMsIHRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuICYjODIxNjtBZG1pbiYj ODIxNzsgYW5kICYjODIxNjtQdWJsaWMmIzgyMTc7IGtpY2tzIGluIGEgbG9uZyB3YXkgZG93 biB0aGUgZm9vZCBjaGFpbi4gQmFzaWNhbGx5LCBhbnlib2R5IGFwYXJ0IGZyb20gU3RhZmYg V3JpdGVyICZhbXA7IEZyZWVsYW5jZXIgaGFzIGFjY2VzcyB0byBGb3JtcyAmIzgyMTE7IHNv IGl0JiM4MjE3O3Mgb25seSB0aGVzZSB0d28gdXNlciBwcml2cyB0aGF0IGNhbiBzZW5zaWJs eSBiZSByZXN0cmljdGVkLjwvcD4KCgk8cD5BZG1pbiB1c2VycyBjYW4gYWRkLCBkZWxldGUg b3IgdXBkYXRlIGFueSBvZiB0aGUgdmFyaWFibGVzLjwvcD4KCgk8cD5QdWJsaWMgdXNlcnMg KGkuZS4gU3RhZmYgV3JpdGVyICZhbXA7IEZyZWVsYW5jZXIpIGhhdmUgdmlzaWJpbGl0eSBv ZiBhbGwgdmFyaWFibGVzIGJ1dCBjYW4gb25seSB1cGRhdGUgdGhlICYjODIxNjtQdWJsaWMm IzgyMTc7IG9uZXMuPC9wPgoKCTxwPkJ5IG1ha2luZyB2YXJpYWJsZXMgJiM4MjE2O1B1Ymxp YyYjODIxNzssIHlvdSYjODIxNztyZSBnaXZpbmcgU3RhZmYgV3JpdGVyICZhbXA7IEZyZWVs YW5jZXIgdXNlcnMgdGhlIGFiaWxpdHkgdG8gbW9kaWZ5IHRoZW0uIE5vcm1hbGx5IHRoZXkg d291bGRuJiM4MjE3O3QgYmUgYWJsZSB0byBlZGl0IHRoZSBmb3JtcyBjb250YWluaW5nIHRo ZSA8Y29kZT4mbHQ7dHhwOnZhcmlhYmxlIC8mZ3Q7PC9jb2RlPiBlbnRyaWVzLiBUaGV5IHN0 aWxsLCBob3dldmVyLCBjYW4mIzgyMTc7dCBkZWxldGUgb3IgYWRkIHZhcmlhYmxlcy48L3A+ CgoJPGgyIGNsYXNzPSJhZGlfZXh0cmFzIj48c3Ryb25nPkFkZGl0aW9uYWwgaW5mb3JtYXRp b248L3N0cm9uZz48L2gyPgoKCTxwIGNsYXNzPSJhZGlfZXh0cmFzIj5TdXBwb3J0IGFuZCBm dXJ0aGVyIGluZm9ybWF0aW9uIGNhbiBiZSBvYnRhaW5lZCBmcm9tIHRoZSA8YSBocmVmPSJo dHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/aWQ9Mjg3MjAiPlRl eHRwYXR0ZXJuIHN1cHBvcnQgZm9ydW08L2E+LiBBIGNvcHkgb2YgdGhpcyBoZWxwIGlzIGFs c28gYXZhaWxhYmxlIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ3JlYXRvY2Vhbm1lZGlhLmNvbS5h dS90eHAvP3BsdWdpbj1hZGlfdmFyaWFibGVzIj5vbmxpbmU8L2E+LiAgTW9yZSBhZGlfcGx1 Z2lucyBjYW4gYmUgZm91bmQgPGEgaHJlZj0iaHR0cDovL3d3dy5ncmVhdG9jZWFubWVkaWEu Y29tLmF1L3R4cC8iPmhlcmU8L2E+LjwvcD4iO3M6NDoiY29kZSI7czoxNDU5MzoiCi8qCglh ZGlfdmFyaWFibGVzIC0gTWFuYWdlIFRYUCB2YXJpYWJsZXMKCglXcml0dGVuIGJ5IEFkaSBH aWxiZXJ0CgoJUmVsZWFzZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl CgoJVmVyc2lvbiBoaXN0b3J5OgoJMC4yCQktIGVuaGFuY2VtZW50OiBjb3BlIHdpdGggVFhQ IHRhZ3MgaW4gdmFyaWFibGUgdmFsdWVzIChmb3Igam9obnN0ZXBoZW5zKQoJMC4xCQktIGlu aXRpYWwgcmVsZWFzZQoKKi8KCmdsb2JhbCAkZGVidWcsJGgsJHBzLCR0aGlzX3ZhcmlhYmxl LCRhZG1pbl9wcml2cywkYWRpX3ZhcmlhYmxlc19ib3VuZGFyeTsKCiRhZGlfdmFyaWFibGVz X2JvdW5kYXJ5ID0gJzx0eHA6aGlkZT5QVUJMSUMgdmFyaWFibGVzIGJlbG93LCBBRE1JTiB2 YXJpYWJsZXMgYWJvdmU8L3R4cDpoaWRlPic7CgokZGVidWcgPSBGQUxTRTsKCi8vIHRvb2x0 aXAgaGVscCBpbmZvcm1hdGlvbgokaFsnY3AnXSA9ICdNYWtlIGEgYmFja3VwIGNvcHkgb2Yg dGhlIGFkaV92YXJpYWJsZXMgZm9ybSAoaW4gYWRpX3ZhcmlhYmxlc19jb3B5KSc7CiRoWydy cyddID0gJ1Jlc2V0IHRoZSBhZGlfdmFyaWFibGVzIGZvcm0gdG8gYSBzYW1wbGUgY29uZmln dXJhdGlvbi4gQkVXQVJFLCBZT1VSIFZBUklBQkxFIERBVEEgV0lMTCBCRSBPVkVSV1JJVFRF Tic7CiRoWyd2ciddID0gIlRoZSB2YXJpYWJsZSdzIG5hbWUgKHNwYWNlcyAmYW1wOyBxdW90 ZXMgbm90IGFsbG93ZWQpIjsKJGhbJ3ZsJ10gPSAiVGhlIHZhcmlhYmxlJ3MgdmFsdWUgKFRY UCB0YWdzIGFyZSBhbGxvd2VkKSI7CiRoWydwdSddID0gIlRpY2sgaWYgeW91IHdhbnQgU3Rh ZmYgV3JpdGVycyBvciBGcmVlbGFuY2VycyB0byBiZSBhYmxlIHRvIG1vZGlmeSB0aGUgdmFy aWFibGUgIjsKCmlmICh0eHBpbnRlcmZhY2UgPT09ICdhZG1pbicpIHsKCSRteWV2ZW50ID0g J2FkaV92YXJpYWJsZXNfYWRtaW4nOwoJJG15dGFiID0gJ1ZhcmlhYmxlcyc7CgoJLy8gYWNj ZXNzIHRvIHZhcmlhYmxlcyB0YWIgJiBwdWJsaWMgdmFyaWFibGUgdXBkYXRlCgkkdGFiX3By aXZzID0gJzEsMiwzLDQsNSw2JzsgLy8gZXZlcnlib2R5CgkvLyBhZG1pbiB2YXJpYWJsZSB1 cGRhdGUsIGFkZC9kZWxldGUsIGFkbWluIGJ1dHRvbnMgKGkuZS4gYW55Ym9keSB3aG8gY2Fu IGFjY2VzcyBGb3JtcyEpCgkkYWRtaW5fcHJpdnMgPSAnZm9ybSc7IC8vIHNlZSBsaWIvYWRt aW5fY29uZmlnLnBocDogJzEsMiwzLDYnIHB1Ymxpc2hlciwgbWFuYWdlciwgY29weSB3cml0 ZXIsIGRlc2lnbmVyCgoJLyoJVXNlciBwcml2aWxlZ2Ugc3VtbWFyeToKCQkwIC0gbm9uZQkJ CS0gY2FuJ3QgZXZlbiBsb2dpbgoJCTEgLSBwdWJsaXNoZXIJCS0gZnVsbCBjYXBhYmlsaXR5 CgkJMiAtIG1hbmFnZXIJCQktIGZ1bGwgY2FwYWJpbGl0eQoJCTMgLSBjb3B5IGVkaXRvcgkJ LSBmdWxsIGNhcGFiaWxpdHkKCQk0IC0gc3RhZmYgd3JpdGVyCS0gcHVibGljIHZhcmlhYmxl IHVwZGF0ZSBvbmx5CgkJNSAtIGZyZWVsYW5jZXIJCS0gcHVibGljIHZhcmlhYmxlIHVwZGF0 ZSBvbmx5CgkJNiAtIGRlc2lnbmVyCQktIGZ1bGwgY2FwYWJpbGl0eQoJKi8KCgkvLyByZWdp c3RlciBhZGlfdmFyaWFibGVzIHRhYgoJYWRkX3ByaXZzKCJhZGlfdmFyaWFibGVzX2FkbWlu IiwkdGFiX3ByaXZzKTsKCXJlZ2lzdGVyX3RhYigiY29udGVudCIsICRteWV2ZW50LCAkbXl0 YWIpOwoJcmVnaXN0ZXJfY2FsbGJhY2soImFkaV92YXJpYWJsZXNfYWRtaW4iLCAkbXlldmVu dCk7Cn0KCmZ1bmN0aW9uIGFkaV92YXJpYWJsZXNfdGlwKCR0ZXJtLCRoZWxwKSB7CglyZXR1 cm4gJzxkZm4nLgoJCScgdGl0bGU9IicuJGhlbHAuJyInLgoJCScgc3R5bGU9ImJvcmRlci1i b3R0b206MXB4IGRhc2hlZCBibGFjaztmb250LXN0eWxlOm5vcm1hbCInLgoJCSc+Jy4KCQkk dGVybS4KCQknPC9kZm4+JzsKfQoKZnVuY3Rpb24gYWRpX3ZhcmlhYmxlc19pbnN0YWxsKCRt b2RlPScnKSB7CgkkZm9ybSA9IDw8PEVPRgo8dHhwOnZhcmlhYmxlIG5hbWU9ImV4YW1wbGUt YWRtaW4iIHZhbHVlPSJPbmx5IGFkbWluIGNhbiBjaGFuZ2UgdGhpcyIgLz4KPHR4cDpoaWRl PlBVQkxJQyB2YXJpYWJsZXMgYmVsb3csIEFETUlOIHZhcmlhYmxlcyBhYm92ZTwvdHhwOmhp ZGU+Cjx0eHA6dmFyaWFibGUgbmFtZT0iZXhhbXBsZS1wdWJsaWMxIiB2YWx1ZT0iQW55Ym9k eSBjYW4gY2hhbmdlIHRoaXMgb25lIiAvPgo8dHhwOnZhcmlhYmxlIG5hbWU9ImV4YW1wbGUt cHVibGljMiIgdmFsdWU9IkFueWJvZHkgY2FuIGNoYW5nZSB0aGlzIHRvbyIgLz4KRU9GOwoJ aWYgKCFzYWZlX2ZpZWxkKCduYW1lJywgJ3R4cF9mb3JtJywgIm5hbWU9J2FkaV92YXJpYWJs ZXMnIikpIC8vIGluc3RhbGwgZGVmYXVsdCBmb3JtCgkJcmV0dXJuIHNhZmVfaW5zZXJ0KCd0 eHBfZm9ybScsCgkJCSJuYW1lPSdhZGlfdmFyaWFibGVzJywKCQkJdHlwZT0nbWlzYycsCgkJ CUZvcm09JyIuZG9TbGFzaCgkZm9ybSkuIiciCgkJKTsKCWVsc2UgaWYgKCRtb2RlID09ICdy ZXNldCcpIC8vIG92ZXJ3cml0ZSBmb3JtIHdpdGggZGVmYXVsdAoJCXJldHVybiBhZGlfdmFy aWFibGVzX3VwZGF0ZSgkZm9ybSk7CgllbHNlIGlmICgkbW9kZSA9PSAnY29weScpIHsgLy8g Y29weSBhZGlfdmFyaWFibGVzIGZvcm0gdG8gYWRpX3ZhcmlhYmxlc19jb3B5IENPTlNPTElE QVRFIENPREUKCQkkcmF3ID0gYWRpX3ZhcmlhYmxlc19yZWFkX2Zvcm0oKTsgLy8gcmVhZCBm b3JtCgkJaWYgKGVtcHR5KCRyYXcpKQoJCQlyZXR1cm4gRkFMU0U7CgkJaWYgKHNhZmVfZmll bGQoJ25hbWUnLCAndHhwX2Zvcm0nLCAibmFtZT0nYWRpX3ZhcmlhYmxlc19jb3B5JyIpKSAv LyB1cGRhdGUgZXhpc3RpbmcgZm9ybSBjb3B5CgkJCXJldHVybiBzYWZlX3VwZGF0ZSgndHhw X2Zvcm0nLAoJCQkJIkZvcm09JyIuZG9TbGFzaCgkcmF3WydGb3JtJ10pLiInIiwKCQkJCSJu YW1lPSdhZGlfdmFyaWFibGVzX2NvcHknIgoJCQkpOwoJCWVsc2UgLy8gYWRkIG5ldyBmb3Jt IGNvcHkKCQkJcmV0dXJuIHNhZmVfaW5zZXJ0KCd0eHBfZm9ybScsCgkJCQkibmFtZT0nYWRp X3ZhcmlhYmxlc19jb3B5JywKCQkJCXR5cGU9J21pc2MnLAoJCQkJRm9ybT0nIi5kb1NsYXNo KCRyYXdbJ0Zvcm0nXSkuIiciCgkJCSk7Cgl9Cn0KCmZ1bmN0aW9uIGFkaV92YXJpYWJsZXNf cmVhZF9mb3JtKCkgewoJJHJzID0gc2FmZV9xdWVyeSgnU0VMRUNUIEZvcm0gRlJPTSAnLnNh ZmVfcGZ4KCd0eHBfZm9ybScpLiIgV0hFUkUgbmFtZT0nYWRpX3ZhcmlhYmxlcyciKTsKCWlm ICgkcnMpCgkJcmV0dXJuIG5leHRSb3coJHJzKTsgLy8gJGEgPSBhcnJheSgiRm9ybScgPT4g Jzx0eHA6dmFyaWFibGUgbmFtZT0iZXhhbXBsZV9hZG1pbiIgLi4uLi4gKQoJZWxzZQoJCXJl dHVybiBhcnJheSgpOwp9CgpmdW5jdGlvbiBhZGlfdmFyaWFibGVzX3ZhbGlkYXRlKCR0eHBf dmFyX3RhZykgeyAvLyBNQUtFIENBU0UgSU5TRU5TSVRJVkU/PwoJLy8gQ09NQklORSBUSEVT RT8/IFNUUklDVEVSIE1BVENIPz8KCS8vIDx0eHA6dmFyaWFibGUgbmFtZT0iampqampqaiIg dmFsdWU9ImpqaiIgLz4KCS8vIF4oPHR4cDp2YXJpYWJsZSkuKyhuYW1lPSIpLiooIikuKih2 YWx1ZT0iKS4qKCIpLiooXC8+KSQKCS8vIF4oPHR4cDp2YXJpYWJsZSkuKihuYW1lPSkuKih2 YWx1ZT0pLiooXC8+KSQKCSR2YWxpZCA9IHByZWdfbWF0Y2goJ0BePHR4cDp2YXJpYWJsZVwg QCcsJHR4cF92YXJfdGFnKTsgLy8gbGluZSBzdGFydHMgIjx0eHA6dmFyaWFibGUgIgoJJHZh bGlkID0gJHZhbGlkICYmIHByZWdfbWF0Y2goJ0AvPkAnLCR0eHBfdmFyX3RhZyk7IC8vIGxp bmUgZW5kcyAiLz4iCglyZXR1cm4gJHZhbGlkOwp9CgpmdW5jdGlvbiBhZGlfdmFyaWFibGVz X2dldF92YXJzKCRsaW5lcykgewoJJHZhcnMgPSBhcnJheSgpOwoJJHB1YmxpYyA9IEZBTFNF OwoJZm9yZWFjaCAoJGxpbmVzIGFzICRpbmRleCA9PiAkbGluZSkgewoJCSRvayA9IGFkaV92 YXJpYWJsZXNfdmFsaWRhdGUoJGxpbmUpOwoJCWlmIChwcmVnX21hdGNoKCdAXig8dHhwOmhp ZGU+UFVCTElDKUAnLCRsaW5lKSkgJHB1YmxpYyA9IFRSVUU7IC8vIGxvb2sgZm9yIGRlbWFy Y2F0aW9uCgkJaWYgKCRvaykgewoJCQkkdmFyID0gYWRpX3ZhcmlhYmxlc19leHRyYWN0KCRs aW5lKTsKCQkJLy8gY3JlYXRlIGFycmF5KCduYW1lJyA9PiBhcnJheSgndmFsdWUnID0+IHZh bHVlLCAncHVibGljJyA9PiBib29sZWFuKSkKCQkJJHZhcnNbJHZhclsnbmFtZSddXVsndmFs dWUnXSA9ICR2YXJbJ3ZhbHVlJ107CgkJCSR2YXJzWyR2YXJbJ25hbWUnXV1bJ3B1YmxpYydd ID0gJHB1YmxpYzsKCQl9Cgl9CglyZXR1cm4gJHZhcnM7Cn0KCmZ1bmN0aW9uIGFkaV92YXJp YWJsZXNfZXh0cmFjdCgkbGluZSkgewovLyBleHRyYWN0IHZhcmlhYmxlcyAmIHZhbHVlcyBm cm9tIGFkaV92YXJpYWJsZXMgZm9ybQovLyBvbGQgKDAuMSkgZm9ybWF0OiA8dHhwOnZhcmlh YmxlIG5hbWU9InZhciIgdmFsdWU9InZhbHVhYmxlIiAvPgovLyBuZXcgKDAuMispIGZvcm1h dDogPHR4cDp2YXJpYWJsZSBuYW1lPSJ2YXIiIHZhbHVlPSd2YWx1YWJsZScgLz4KLy8gb2xk IGZvcm1hdCBleHRyYWN0ZWQgZmlyc3QgKGNvcGVzIHdpdGggMC4xIC0+IDAuMisgbWlncmF0 aW9uKQovLyBkb3duZ3JhZGU6IGVkaXQgYWRpX3ZhcmlhYmxlcyBmb3JtIHRvIGNoYW5nZSBz aW5nbGUgdG8gZG91YmxlIHF1b3RlcyAmIGluc3RhbGwgMC4xCgkkdmFyID0gYXJyYXkoKTsK CSR0aGlzX2xpbmUgPSB0cmltKCRsaW5lKTsKCWlmIChhZGlfdmFyaWFibGVzX3ZhbGlkYXRl KCRsaW5lKSkgewoJCSRkaWNlZCA9IGV4cGxvZGUoJyInLCRsaW5lKTsgLy8gdXNlIGRvdWJs ZSBxdW90ZSBkZWxpbWl0ZXIgZmlyc3QKCQlpZiAoIWVtcHR5KCRkaWNlZCkpIHsgLy8gY2hl Y2sgdGhhdCB0aGVyZSdzIHNvbWV0aGluZyB0aGVyZQoJCQkkdmFyWyduYW1lJ10gPSAkZGlj ZWRbMV07IC8vIHZhciBuYW1lIHdpbGwgYmUgc2Vjb25kIHNsaWNlCgkJCWlmIChjb3VudCgk ZGljZWQpICE9IDUpIHsgLy8gbXVzdCBiZSBuZXcgZm9ybWF0CgkJCQkkZGljZWQgPSBleHBs b2RlKCInIiwkbGluZSk7IC8vIHNpbmdsZSBxdW90ZSBkZWxpbWl0ZXIKCQkJCSR2YXJbJ3Zh bHVlJ10gPSAkZGljZWRbMV07IC8vIG5ldyBmb3JtYXQsIHZhbHVlIHdpbGwgYmUgbm93IGJl IHNlY29uZCBzbGljZQoJCQl9CgkJCWVsc2UgLy8gb2xkIGZvcm1hdCwgdmFsdWUgd2lsbCBi ZSBmb3VydGggc2xpY2UKCQkJCSR2YXJbJ3ZhbHVlJ10gPSAkZGljZWRbM107CgkJfQoJfQoJ cmV0dXJuICR2YXI7Cn0KCmZ1bmN0aW9uIGFkaV92YXJpYWJsZXNfZGlzcGxheV9zZXR0aW5n cygkdmFycykgewoJZ2xvYmFsICRhZG1pbl9wcml2czsKCSRvdXQgPSAnJzsKCWZvcmVhY2gg KCR2YXJzIGFzICRuYW1lID0+ICR2YXIpIHsKCQlpZiAoaGFzX3ByaXZzKCRhZG1pbl9wcml2 cykpIC8vIHJlc3RyaWN0IGFjY2VzcyB0byBhZG1pbiBjYXBhYmlsaXRpZXMKCQkJJG91dCAu PSB0cigKCQkJCQl0ZGEoJG5hbWUpLgoJCQkJCXRkYShmaW5wdXQoInRleHQiLCJwc19uYW1l WyRuYW1lXSIsJHZhclsndmFsdWUnXSwnJywnJywnJyw4MCkpLgoJCQkJCXRkYShjaGVja2Jv eCgicHNfcHVibGljWyRuYW1lXSIsICIxIiwgJHZhclsncHVibGljJ10pLCcgc3R5bGU9InRl eHQtYWxpZ246Y2VudGVyIicpLgoJCQkJCXRkYShhZGlfdmFyaWFibGVzX2RlbGV0ZV9idXR0 b24oJG5hbWUpKQoJCQkJCSk7CgkJZWxzZSAvLyBwdWJsaWMgdmlldwoJCQlpZiAoJHZhclsn cHVibGljJ10pIC8vIGRpc3BsYXkgdmFyaWFibGUKCQkJCSRvdXQgLj0gdHIoCgkJCQkJCXRk YSgkbmFtZSkuCgkJCQkJCXRkYShmaW5wdXQoInRleHQiLCJwc19uYW1lWyRuYW1lXSIsJHZh clsndmFsdWUnXSwnJywnJywnJyw4MCkpLgoJCQkJCQl0ZGEoaGlucHV0KCJwc19wdWJsaWNb JG5hbWVdIiwgJHZhclsncHVibGljJ10pKSAvLyBoaWRlIHB1YmxpYyBzZXR0aW5nCgkJCQkJ CSk7CgkJCWVsc2UgLy8gaGlkZSB2YXJpYWJsZSBpbnB1dCBidXQgZGlzcGxheSB2YXJpYWJs ZSBuYW1lL3ZhbHVlCgkJCQkkb3V0IC49IHRyKAoJCQkJCQl0ZGEoJG5hbWUpLgoJCQkJCQl0 ZGEoaGlucHV0KCJwc19uYW1lWyRuYW1lXSIsJHZhclsndmFsdWUnXSkuJHZhclsndmFsdWUn XSkuCgkJCQkJCXRkYShoaW5wdXQoInBzX3B1YmxpY1skbmFtZV0iLCAkdmFyWydwdWJsaWMn XSkpIC8vIGhpZGUgcHVibGljIHNldHRpbmcKCQkJCQkJKTsKCX0KCWlmIChoYXNfcHJpdnMo JGFkbWluX3ByaXZzKSkgLy8gcmVzdHJpY3QgYWNjZXNzIHRvIGFkZGluZyBuZXcgdmFyaWFi bGVzCgkJJG91dCAuPSB0cigKCQkJCXRkYShmaW5wdXQoInRleHQiLCJuZXdfdmFyIiwnJywn JywnJywnJywyMCkpLgoJCQkJdGRhKGZpbnB1dCgidGV4dCIsIm5ld192YWx1ZSIsJycsJycs JycsJycsODApKS4KCQkJCXRkYShjaGVja2JveCgibmV3X3B1YmxpYyIsICIxIiwgJycpLCcg c3R5bGU9InRleHQtYWxpZ246Y2VudGVyIicpLgoJCQkJdGRhKCcmbmJzcDsnKQoJCQkJKTsK CXJldHVybiAkb3V0Owp9CgpmdW5jdGlvbiBhZGlfdmFyaWFibGVzX2RlbGV0ZV9idXR0b24o JHZhcikgewoJLy8gQ0FOJ1QgTkVTVCBGT1JNUyEhCgkvKnJldHVybiBqb2luKCcnLAoJCWFy cmF5KAoJCSc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iaW5kZXgucGhwIiBvbnN1Ym1p dD0icmV0dXJuIGNvbmZpcm0oXCcnLmdUeHQoJ2NvbmZpcm1fZGVsZXRlX3BvcHVwJykuJ1wn KTsiPicsCgkJZklucHV0KCdzdWJtaXQnLCcnLCcmIzIxNTsnLCdzbWFsbGVyYm94JyksCgkJ ZUlucHV0KCdhZGlfdmFyaWFibGVzX2FkbWluJykuc0lucHV0KCdkZWxldGUnKS5oSW5wdXQo J3NvbWV0aGluZycsJHZhcikuJzwvZm9ybT4nCgkJKQoJKTsqLwoJJGV2ZW50ID0gJ2FkaV92 YXJpYWJsZXNfYWRtaW4nOwoJJHN0ZXAgPSAnZGVsZXRlJzsKCSR1cmwgPSAnP2V2ZW50PScu JGV2ZW50LmEuJ3N0ZXA9Jy4kc3RlcC5hLid2YXJpYWJsZT0nLiR2YXI7CglyZXR1cm4KCQkn PGEgaHJlZj0iJwoJCS4kdXJsCgkJLiciIGNsYXNzPSJkbGluayIgdGl0bGU9IkRlbGV0ZT8i IG9uY2xpY2s9InJldHVybiB2ZXJpZnkoXCcnCgkJLiR2YXIKCQkuJzogJwoJCS5nVHh0KCdj b25maXJtX2RlbGV0ZV9wb3B1cCcpCgkJLidcJykiPiYjMjE1OzwvYT4nOwp9CgpmdW5jdGlv biBhZGlfdmFyaWFibGVzX3VwZGF0ZSgkZm9ybV9jb250ZW50cykgewoJZ2xvYmFsICRkZWJ1 ZzsKCWlmIChzYWZlX2ZpZWxkKCduYW1lJywgJ3R4cF9mb3JtJywgIm5hbWU9J2FkaV92YXJp YWJsZXMnIikpIHsKCQkkcmVzID0gc2FmZV91cGRhdGUoJ3R4cF9mb3JtJywKCQkJCSJGb3Jt PSciLmRvU2xhc2goJGZvcm1fY29udGVudHMpLiInIiwKCQkJCSJuYW1lPSdhZGlfdmFyaWFi bGVzJyIKCQkJCSk7Cgl9CgllbHNlIC8vIEZvcm0gbm90IGZvdW5kCgkJcmV0dXJuIEZBTFNF OwoJcmV0dXJuICRyZXM7Cn0KCmZ1bmN0aW9uIGFkaV92YXJpYWJsZXNfdmFyaWFibGVfdGFn KCRuYW1lLCR2YWx1ZSkgewovLyBnZW5lcmF0ZSBUWFAgdmFyaWFibGUgdGFnCglyZXR1cm4g Jzx0eHA6dmFyaWFibGUgbmFtZT0iJy4kbmFtZS4nIiAnLiJ2YWx1ZT0nIi4kdmFsdWUuIicg Lz4iOyAvLyB1c2Ugc2luZ2xlIHF1b3RlcyBmb3IgdmFsdWVzCn0KCmZ1bmN0aW9uIGFkaV92 YXJpYWJsZXNfZm9ybV91cGRhdGUoJHBzX25hbWUsJHBzX3B1YmxpYywkbmV3X25hbWUsJG5l d192YWx1ZSwkbmV3X3B1YmxpYywkZGVsZXRlX21lPScnKSB7CglnbG9iYWwgJGFkaV92YXJp YWJsZXNfYm91bmRhcnk7CgkkbmV3X2Zvcm0gPSBhcnJheSgpOwoJJGFkbWluX3ZhcnMgPSAk cHVibGljX3ZhcnMgPSAkc29ydGVkX3ZhcnMgPSBhcnJheSgpOwoJaWYgKCFlbXB0eSgkbmV3 X25hbWUpKSB7CgkJJHBzX25hbWVbJG5ld19uYW1lXSA9ICRuZXdfdmFsdWU7CgkJaWYgKCRu ZXdfcHVibGljKQoJCQkkcHNfcHVibGljWyRuZXdfbmFtZV0gPSBUUlVFOwoJfQoJaWYgKCRw c19uYW1lKSB7IC8vIHRoZXJlJ3MgYXQgbGVhc3Qgb25lIHZhcmlhYmxlCgkJLy8gc29ydCB2 YXJzOiBhZG1pbiBmaXJzdCwgcHVibGljIGxhc3QKCQlmb3JlYWNoICgkcHNfbmFtZSBhcyAk bmFtZSA9PiAkdmFsdWUpIHsKCQkJaWYgKGlzc2V0KCRwc19wdWJsaWNbJG5hbWVdKSkKCQkJ CSRwdWJsaWNfdmFyc1skbmFtZV0gPSAkdmFsdWU7CgkJCWVsc2UgewoJCQkJJHBzX3B1Ymxp Y1skbmFtZV0gPSBGQUxTRTsgLy8gc2V0IGl0IGZvciB1c2UgbGF0ZXIsIGJlY2F1c2UgUE9T VCBWQVJTIGRvZXNuJ3QKCQkJCSRhZG1pbl92YXJzWyRuYW1lXSA9ICR2YWx1ZTsKCQkJfQoJ CX0KCQkkc29ydGVkX3ZhcnMgPSAkYWRtaW5fdmFycyArICRwdWJsaWNfdmFyczsKCQkvLyBn ZW5lcmF0ZSBuZXcgZm9ybQoJCSRwdWJsaWMgPSBGQUxTRTsKCQlmb3JlYWNoICgkc29ydGVk X3ZhcnMgYXMgJG5hbWUgPT4gJHZhbHVlKSB7CgkJCWlmICghJHB1YmxpYyAmJiAkcHNfcHVi bGljWyRuYW1lXSkgeyAvLyBzdGFydCBvZiBwdWJsaWMgdmFycyBmb3VuZAoJCQkJJHB1Ymxp YyA9IFRSVUU7IC8vIHRvZ2dsZSBwdWJsaWMKCQkJCSRuZXdfZm9ybVtdID0gJGFkaV92YXJp YWJsZXNfYm91bmRhcnk7IC8vIGRlbWFyY2F0aW9uCgkJCX0KCQkJLy8kbmV3X2Zvcm1bXSA9 ICc8dHhwOnZhcmlhYmxlIG5hbWU9IicuJG5hbWUuJyIgJy4idmFsdWU9JyIuJHZhbHVlLiIn IC8+IjsgLy8gdXNlIHNpbmdsZSBxdW90ZXMgZm9yIHZhbHVlcwoJCQkkbmV3X2Zvcm1bXSA9 IGFkaV92YXJpYWJsZXNfdmFyaWFibGVfdGFnKCRuYW1lLCR2YWx1ZSk7CgkJfQoJfQoJcmV0 dXJuICRuZXdfZm9ybTsKfQoKZnVuY3Rpb24gYWRpX3ZhcmlhYmxlc19mb3JtX2RlbGV0ZSgk ZGVsZXRlX21lKSB7CglnbG9iYWwgJGFkaV92YXJpYWJsZXNfYm91bmRhcnk7CgkkbmV3X2Zv cm0gPSBhcnJheSgpOwoJJHJhdyA9IGFkaV92YXJpYWJsZXNfcmVhZF9mb3JtKCk7IC8vIHJh dyBkYXRhIGZyb20gZm9ybQoJJGxpbmVzID0gZXhwbG9kZSgiXG4iLCRyYXdbJ0Zvcm0nXSk7 IC8vIGJyZWFrIHVwIGludG8gbGluZXMKCSR2YXJzID0gYWRpX3ZhcmlhYmxlc19nZXRfdmFy cygkbGluZXMpOyAvLyBleHRyYWN0IHZhcmlhYmxlcwoJdW5zZXQoJHZhcnNbJGRlbGV0ZV9t ZV0pOyAvLyBkZWxldGUgdGhlIGFwcHJvcHJpYXRlIHZhcmlhYmxlCgkvLyBnZW5lcmF0ZSBu ZXcgZm9ybQoJJHB1YmxpYyA9IEZBTFNFOwoJZm9yZWFjaCAoJHZhcnMgYXMgJG5hbWUgPT4g JHZhcikgewoJCWlmICghJHB1YmxpYyAmJiAkdmFyWydwdWJsaWMnXSkgeyAvLyBzdGFydCBv ZiBwdWJsaWMgdmFycyBmb3VuZAoJCQkkcHVibGljID0gVFJVRTsgLy8gdG9nZ2xlIHB1Ymxp YwoJCQkkbmV3X2Zvcm1bXSA9ICRhZGlfdmFyaWFibGVzX2JvdW5kYXJ5OyAvLyBkZW1hcmNh dGlvbgoJCX0KCQkvLyRuZXdfZm9ybVtdID0gJzx0eHA6dmFyaWFibGUgbmFtZT0iJy4kbmFt ZS4nIiAnLiJ2YWx1ZT0nIi4kdmFyWyd2YWx1ZSddLiInIC8+IjsgLy8gdXNlIHNpbmdsZSBx dW90ZXMgZm9yIHZhbHVlcwoJCSRuZXdfZm9ybVtdID0gYWRpX3ZhcmlhYmxlc192YXJpYWJs ZV90YWcoJG5hbWUsJHZhclsndmFsdWUnXSk7Cgl9CglyZXR1cm4gJG5ld19mb3JtOwp9Cgpm dW5jdGlvbiBhZGlfdmFyaWFibGVzX2RlYnVnKCkgewoJZ2xvYmFsICRkZWJ1ZywkZXZlbnQs JHN0ZXAsJHNvbWV0aGluZywkcHMsJHJhdywkbGluZXMsJHZhcnMsJHRoaXNfdmFyaWFibGU7 CgllY2hvICI8cD5FdmVudDogIi4kZXZlbnQuIiwgU3RlcDogIi4kc3RlcC4iLCBTb21ldGhp bmc6ICIuJHNvbWV0aGluZy4iLCBWYXJpYWJsZTogIi4kdGhpc192YXJpYWJsZS4iPC9wPiI7 CglwcmludCAiPGgzPlJBVyBGT1JNOjwvaDM+IjsKCWRtcCgkcmF3KTsKCXByaW50ICI8aDM+ TElORSBCWSBMSU5FOjwvaDM+IjsKCWZvcmVhY2ggKCRsaW5lcyBhcyAkaW5kZXggPT4gJGxp bmUpIHsKCQkkbGluZSA9IGh0bWxzcGVjaWFsY2hhcnMoJGxpbmUpOyAvLyByZXBsYWNlIGFu Z2xlIGJyYWNrZXRzIHNvIHRhZ3Mgbm90IHBhcnNlZAoJCXByaW50ICJMaW5lICIuJGluZGV4 LiIuICIuJGxpbmUuIjxici8+IjsKCX0KCSRwdWJsaWMgPSBGQUxTRTsKCXByaW50ICI8YnIv PjxoMz5BTkFMWVNJUzo8L2gzPiI7Cglmb3JlYWNoICgkbGluZXMgYXMgJGluZGV4ID0+ICRs aW5lKSB7CgkJJHRoaXNfbGluZSA9IHRyaW0oJGxpbmUpOwoJCWlmIChlbXB0eSgkdGhpc19s aW5lKSkKCQkJcHJpbnQgIkJMQU5LIExJTkU8YnIvPiI7CgkJZWxzZSB7CgkJCSRvayA9IGFk aV92YXJpYWJsZXNfdmFsaWRhdGUoJGxpbmUpOwoJCQkkb2sgPyBwcmludCAiVkFSICIgOiBw cmludCAiT1RIRVIgIjsKCQkJaWYgKHByZWdfbWF0Y2goJ0BeKDx0eHA6aGlkZT5QVUJMSUMp QCcsJGxpbmUpKSAkcHVibGljID0gVFJVRTsgLy8gbG9vayBmb3IgZGVtYXJjYXRpb24KCQkJ aWYgKCRvaykKCQkJCSRwdWJsaWMgPyBwcmludCAnKFBVQkxJQyk6ICcgOiBwcmludCAnKEFE TUlOKTogJzsKCQkJJGxpbmUgPSBodG1sc3BlY2lhbGNoYXJzKCRsaW5lKTsgLy8gcmVwbGFj ZSBhbmdsZSBicmFja2V0cyBzbyB0YWdzIG5vdCBwYXJzZWQKCQkJcHJpbnQgJGxpbmUuIjxi ci8+IjsKCQl9Cgl9CglwcmludCAiPGJyLz48aDM+VkFSSUFCTEVTIERBVEE6PC9oMz4iOwoJ ZG1wKCR2YXJzKTsKCXByaW50ICI8YnIvPjxoMz5QT1NURUQgREFUQSAoVVBEQVRFIEVYSVNU SU5HKTo8L2gzPiI7CglwcmludF9yKHBzKCdwc19uYW1lJykpOwoJcHJpbnQgIjxici8+IjsK CXByaW50X3IocHMoJ3BzX3B1YmxpYycpKTsKCXByaW50ICI8YnIvPjxoMz5QT1NURUQgREFU QSAoTkVXKTo8L2gzPiI7CglwcmludF9yKHBzKCduZXdfdmFyJykpOwoJcHJpbnQgIjxici8+ IjsKCXByaW50X3IocHMoJ25ld192YWx1ZScpKTsKCXByaW50ICI8YnIvPiI7CglwcmludF9y KHBzKCduZXdfcHVibGljJykpOwp9CgpmdW5jdGlvbiBhZGlfdmFyaWFibGVzX2FkbWluKCRl dmVudCwgJHN0ZXApIHsKCWdsb2JhbCAkZGVidWcsJHBzLCRoLCRldmVudCwkc3RlcCwkc29t ZXRoaW5nLCRyYXcsJGxpbmVzLCR2YXJzLCR0aGlzX3ZhcmlhYmxlLCRhZG1pbl9wcml2czsK CSRtZXNzYWdlPSAnJzsKCSRzb21ldGhpbmcgPSBwcygnc29tZXRoaW5nJyk7CgkkdGhpc192 YXJpYWJsZSA9IGdwcygndmFyaWFibGUnKTsKCS8vIGluc3RhbGwgYWRpX3ZhcmlhYmxlcyBm b3JtIGlmIHJlcXVpcmVkCglpZiAoIXNhZmVfZmllbGQoJ25hbWUnLCAndHhwX2Zvcm0nLCAi bmFtZT0nYWRpX3ZhcmlhYmxlcyciKSkgLy8gZm9ybSBub3QgZm91bmQKCQlpZiAoYWRpX3Zh cmlhYmxlc19pbnN0YWxsKCkpCgkJCSRtZXNzYWdlID0gImluc3RhbGxlZCBPSyI7CgkJZWxz ZQoJCQkkbWVzc2FnZSA9ICJpbnN0YWxsIGZhaWxlZCI7CglpZiAoJHN0ZXAgPT0gJ3VwZGF0 ZScpIHsKCQkkbmV3X25hbWUgPSB0cmltKHBzKCduZXdfdmFyJykpOwoJCS8vIHZhbGlkYXRl IG5ldyB2YXJpYWJsZSBuYW1lCgkJaWYgKHN0cnBvcygkbmV3X25hbWUsJyAnKSkKCQkJJG1l c3NhZ2UgPSAnc3BhY2VzIG5vdCBhbGxvd2VkIGluIHZhcmlhYmxlIG5hbWUnOwoJCWlmIChz dHJwb3MoJG5ld19uYW1lLCciJykgfHwgc3RycG9zKCRuZXdfbmFtZSwiJyIpKQoJCQkkbWVz c2FnZSA9ICdxdW90ZXMgbm90IGFsbG93ZWQgaW4gdmFyaWFibGUgbmFtZSc7CgkJaWYgKHBz KCdwc19uYW1lJykpIC8vIHRoZW4gb3RoZXIgdmFyaWFibGVzIGV4aXN0IChpLmUuIHRoaXMg aXMgbm90IHRoZSBmaXJzdCkKCQkJaWYgKGFycmF5X2tleV9leGlzdHMoJG5ld19uYW1lLHBz KCdwc19uYW1lJykpKQoJCQkJJG1lc3NhZ2UgPSAiJG5ld19uYW1lIGFscmVhZHkgZXhpc3Rz IjsKCQkvLyBhZGQgbmV3IHZhcmlhYmxlIHRvIGZvcm0KCQlpZiAoJG1lc3NhZ2UgPT0gJycp IHsKCQkJJG5ld19mb3JtID0gYWRpX3ZhcmlhYmxlc19mb3JtX3VwZGF0ZShwcygncHNfbmFt ZScpLHBzKCdwc19wdWJsaWMnKSwkbmV3X25hbWUscHMoJ25ld192YWx1ZScpLHBzKCduZXdf cHVibGljJykpOwoJCQkkb2sgPSBhZGlfdmFyaWFibGVzX3VwZGF0ZShqb2luKCJcbiIsJG5l d19mb3JtKSk7CgkJCSRvayA/CgkJCQkkbWVzc2FnZSA9ICJ1cGRhdGVkIiA6CgkJCQkkbWVz c2FnZSA9ICJ1cGRhdGUgZmFpbGVkIjsKCQl9Cgl9CglpZiAoJHN0ZXAgPT0gJ2RlbGV0ZScp IHsKCQlpZiAoaGFzX3ByaXZzKCRhZG1pbl9wcml2cykpIHsgLy8gZG91YmxlIGNoZWNrIHBy aXZpbGVnZXMgYmVjYXVzZSB0aGlzIG9wZXJhdGlvbiB1c2VzIEdFVCBWQVJTCgkJCSRuZXdf Zm9ybSA9IGFkaV92YXJpYWJsZXNfZm9ybV9kZWxldGUoJHRoaXNfdmFyaWFibGUpOwoJCQkk b2sgPSBhZGlfdmFyaWFibGVzX3VwZGF0ZShqb2luKCJcbiIsJG5ld19mb3JtKSk7CgkJCSRv ayA/CgkJCQkkbWVzc2FnZSA9ICIkdGhpc192YXJpYWJsZSBkZWxldGVkIiA6CgkJCQkkbWVz c2FnZSA9ICJkZWxldGUgZmFpbGVkIjsKCQl9CgkJZWxzZQoJCQkkbWVzc2FnZSA9ICJpbnN1 ZmZpY2llbnQgcHJpdmlsZWdlcyI7Cgl9CglpZiAoJHNvbWV0aGluZyA9PSAicmVzZXQiKSB7 CgkJJG9rID0gYWRpX3ZhcmlhYmxlc19pbnN0YWxsKCdyZXNldCcpOwoJCSRvayA/CgkJCSRt ZXNzYWdlID0gImZvcm0gcmVzZXQiIDoKCQkJJG1lc3NhZ2UgPSAicmVzZXQgZmFpbGVkIjsK CX0KCWlmICgkc29tZXRoaW5nID09ICJjb3B5IikgewoJCSRvayA9IGFkaV92YXJpYWJsZXNf aW5zdGFsbCgnY29weScpOwoJCSRvayA/CgkJCSRtZXNzYWdlID0gImZvcm0gY29waWVkIiA6 CgkJCSRtZXNzYWdlID0gImNvcHkgZmFpbGVkIjsKCX0KCS8vIHJlYWQgY29udGVudHMgb2Yg Zm9ybQoJJHJhdyA9IGFkaV92YXJpYWJsZXNfcmVhZF9mb3JtKCk7CglpZiAoZW1wdHkoJHJh dykpCgkJJG1lc3NhZ2UgPSAidW5hYmxlIHRvIHJlYWQgZm9ybSI7CgkvLyBicmVhayB1cCBp bnRvIGluZGl2aWR1YWwgbGluZXMKCSRsaW5lcyA9IGV4cGxvZGUoIlxuIiwkcmF3WydGb3Jt J10pOwoJLy8gZXh0cmFjdCB2YXJpYWJsZXMgJiB2YWx1ZXMgZnJvbSBmb3JtCgkkdmFycyA9 IGFkaV92YXJpYWJsZXNfZ2V0X3ZhcnMoJGxpbmVzKTsgLy8gRVJST1IgTUVTU0FHRSBJRiBO TyBWQVJTPz8/CglpZiAodHJpbSgkcmF3WydGb3JtJ10pID09ICcnKQoJCSRtZXNzYWdlID0g ImZvcm0gaXMgZW1wdHkiOwoJZWxzZSBpZiAoZW1wdHkoJHZhcnMpKQoJCSRtZXNzYWdlID0g Im5vIHZhcmlhYmxlcyBmb3VuZCI7CgkvLyBnZW5lcmF0ZSBwYWdlCglpZiAoIWVtcHR5KCRt ZXNzYWdlKSkKCQkkbWVzc2FnZSA9ICdhZGlfdmFyaWFibGVzOiA8Yj4nLiRtZXNzYWdlLic8 L2I+JzsKCXBhZ2V0b3AoJ2FkaV92YXJpYWJsZXMgYWRtaW4nLCRtZXNzYWdlKTsKCWlmICgk ZGVidWcpIHsKCQlhZGlfdmFyaWFibGVzX2RlYnVnKCk7CgkJaWYgKCRzdGVwID09ICJ1cGRh dGUiKSB7CgkJCXByaW50ICI8YnIvPjxoMz5ORVcgRk9STTo8L2gzPiI7CgkJCWRtcCgkbmV3 X2Zvcm0pOwoJCX0KCX0KCS8vIG91dHB1dCB0YWJsZSAmIGlucHV0IGZvcm0KCWVjaG8gZm9y bSgKCQlzdGFydFRhYmxlKCdsaXN0JykuCgkJdHIoCgkJCWhjZWxsKGFkaV92YXJpYWJsZXNf dGlwKCdWYXJpYWJsZScsJGhbJ3ZyJ10pKS4KCQkJaGNlbGwoYWRpX3ZhcmlhYmxlc190aXAo J1ZhbHVlJywkaFsndmwnXSkpLgoJCQloY2VsbChoYXNfcHJpdnMoJGFkbWluX3ByaXZzKT9h ZGlfdmFyaWFibGVzX3RpcCgnUHVibGljPycsJGhbJ3B1J10pOicnKSAvLyBoaWRlIFB1Ymxp YyBoZWFkaW5nIGlmIHJlcXVpcmVkCgkJCSkuCgkJYWRpX3ZhcmlhYmxlc19kaXNwbGF5X3Nl dHRpbmdzKCR2YXJzKS4KCQllbmRUYWJsZSgpLgoJCXRhZygKCQkJZklucHV0KCJzdWJtaXQi LCAidXBkYXRlIiwgIlVwZGF0ZSIsICJzbWFsbGVyYm94IikuCgkJCWVJbnB1dCgiYWRpX3Zh cmlhYmxlc19hZG1pbiIpLnNJbnB1dCgidXBkYXRlIiksCgkJCSdkaXYnLAoJCQknIGFsaWdu PSJjZW50ZXIiIHN0eWxlPSJtYXJnaW4tdG9wOjJlbSInCgkJKQoJKTsKCS8vIGFkbWluIGZ1 bmN0aW9ucwoJaWYgKGhhc19wcml2cygkYWRtaW5fcHJpdnMpKSB7IC8vIHJlc3RyaWN0IGFj Y2VzcyB0byBhZG1pbiBmdW5jdGlvbnMKCQkkZGVidWcgPyAkcmVzZXRfYnV0dG9uID0gIiAi LmFkaV92YXJpYWJsZXNfdGlwKCJSZXNldCIsJGhbJ3JzJ10pLmZJbnB1dCgicmFkaW8iLCAi c29tZXRoaW5nIiwgInJlc2V0IiwgImVkaXQiLCAiIiwgIiIsICIyMCIsICIxIikgOiAkcmVz ZXRfYnV0dG9uID0gJyc7CgkgICAgZWNobyBmb3JtKAoJCQl0YWcoImFkaV92YXJpYWJsZXMg YWRtaW4iLCJoMyIpLgoJCQlncmFmKAoJCQkJJHJlc2V0X2J1dHRvbi4KCQkJCSIgIi5hZGlf dmFyaWFibGVzX3RpcCgiQmFja3VwIiwkaFsnY3AnXSkuCgkJCQlmSW5wdXQoInJhZGlvIiwg InNvbWV0aGluZyIsICJjb3B5IiwgImVkaXQiLCAiIiwgIiIsICIyMCIsICIxIikuCgkgICAg ICAgIAlmSW5wdXQoInN1Ym1pdCIsICJkb19zb21ldGhpbmciLCAiRG8gYWRtaW4iLCAic21h bGxlcmJveCIsIiIsJ3JldHVybiB2ZXJpZnkoXCcnLmdUeHQoJ2FyZV95b3Vfc3VyZScpLidc JyknKQoJCQkpLgoJICAgICAgICBlSW5wdXQoJ2FkaV92YXJpYWJsZXNfYWRtaW4nKS5zSW5w dXQoJ2FkbWluJykKCQkJLCJ0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW4tdG9wOjNlbSIKCQkp OwoJfQp9CiI7czo4OiJoZWxwX3JhdyI7czoyMDQxOiJoMS4gKmFkaV92YXJpYWJsZXMqIC0g TWFuYWdlIFRYUCB2YXJpYWJsZXMKClRoaXMgcGx1Z2luIHByb3ZpZGVzOgoKKiBhIG5ldyBW YXJpYWJsZXMgdGFiIHVuZGVyIENvbnRlbnQgdG8gbWFuYWdlIHlvdXIgdmFyaWFibGVzCiog YSBuZXcgZm9ybSwgX19hZGlfdmFyaWFibGVzX18sIHRvIHN0b3JlIHRoZSB2YXJpYWJsZXMK CmgyLiAqSW5zdGFsbGF0aW9uKgoKQSBuZXcgZm9ybSwgY2FsbGVkIF9fYWRpX3ZhcmlhYmxl c19fLCB3aWxsIGJlIGluc3RhbGxlZCB3aGVuIHlvdSB2aXNpdCB0aGUgVmFyaWFibGVzIHRh YiBmb3IgdGhlIGZpcnN0IHRpbWUuCgpEZWxldGUgdGhlIGV4YW1wbGUgdmFyaWFibGVzIGFu ZCBhZGQgeW91ciBvd24uCgpUbyBicmluZyB0aGVtIGludG8gb3BlcmF0aW9uIHB1dCB0aGlz IGxpbmUgb2YgY29kZToKCkA8dHhwOm91dHB1dF9mb3JtIGZvcm09ImFkaV92YXJpYWJsZXMi IC8+QAoKYXQgdGhlIHRvcCBvZiBhbGwgeW91ciB3ZWIgcGFnZXMuCgpoMi4gKkFkbWluIHRh YioKCkFsbCB1c2VycyB3aWxsIHNlZSB0aGUgVmFyaWFibGVzIHRhYiB1bmRlciBDb250ZW50 LiAgVGhpcyBwcm92aWRlczoKCiogYSBsaXN0IG9mIHZhcmlhYmxlcyAmIHRoZWlyIGN1cnJl bnQgdmFsdWVzCiogdGhlIGFiaWxpdHkgdG8gYWRkICYgZGVsZXRlIHZhcmlhYmxlcwoqIG9w dGlvbnMgdG8gbWFrZSB2YXJpYWJsZXMgQWRtaW4gb3IgUHVibGljCiogYW4gYWRtaW4gZnVu Y3Rpb24gdG8gdGFrZSBhIGJhY2t1cCBjb3B5IG9mIHRoZSBfX2FkaV92YXJpYWJsZXNfXyBm b3JtIGluIF9fYWRpX3ZhcmlhYmxlc19jb3B5X18KClRvb2x0aXBzIGFyZSBhdmFpbGFibGUg aGVyZSAtIGp1c3QgaG92ZXIgb3ZlciBhbnl0aGluZyB3aXRoIGEgZGFzaGVkIHVuZGVybGlu ZS4KCmgyLiAqQWRtaW4gJiBQdWJsaWMqCgpCZWNhdXNlIFRYUCB2YXJpYWJsZXMgaGF2ZSBi ZWVuIGltcGxlbWVudGVkIGFzIGEgdGFnIGFuZCBoZW5jZSB1c2VkIGluIGZvcm1zL3BhZ2Vz IGV0YywgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gJ0FkbWluJyBhbmQgJ1B1YmxpYycga2lj a3MgaW4gYSBsb25nIHdheSBkb3duIHRoZSBmb29kIGNoYWluLiBCYXNpY2FsbHksIGFueWJv ZHkgYXBhcnQgZnJvbSBTdGFmZiBXcml0ZXIgJiBGcmVlbGFuY2VyIGhhcyBhY2Nlc3MgdG8g Rm9ybXMgLSBzbyBpdCdzIG9ubHkgdGhlc2UgdHdvIHVzZXIgcHJpdnMgdGhhdCBjYW4gc2Vu c2libHkgYmUgcmVzdHJpY3RlZC4KCkFkbWluIHVzZXJzIGNhbiBhZGQsIGRlbGV0ZSBvciB1 cGRhdGUgYW55IG9mIHRoZSB2YXJpYWJsZXMuCgpQdWJsaWMgdXNlcnMgKGkuZS4gU3RhZmYg V3JpdGVyICYgRnJlZWxhbmNlcikgaGF2ZSB2aXNpYmlsaXR5IG9mIGFsbCB2YXJpYWJsZXMg YnV0IGNhbiBvbmx5IHVwZGF0ZSB0aGUgJ1B1YmxpYycgb25lcy4KCkJ5IG1ha2luZyB2YXJp YWJsZXMgJ1B1YmxpYycsIHlvdSdyZSBnaXZpbmcgU3RhZmYgV3JpdGVyICYgRnJlZWxhbmNl ciB1c2VycyB0aGUgYWJpbGl0eSB0byBtb2RpZnkgdGhlbS4gTm9ybWFsbHkgdGhleSB3b3Vs ZG4ndCBiZSBhYmxlIHRvIGVkaXQgdGhlIGZvcm1zIGNvbnRhaW5pbmcgdGhlIEA8dHhwOnZh cmlhYmxlIC8+QCBlbnRyaWVzLiBUaGV5IHN0aWxsLCBob3dldmVyLCBjYW4ndCBkZWxldGUg b3IgYWRkIHZhcmlhYmxlcy4KCmgyKGFkaV9leHRyYXMpLiAqQWRkaXRpb25hbCBpbmZvcm1h dGlvbioKCnAoYWRpX2V4dHJhcykuIFN1cHBvcnQgYW5kIGZ1cnRoZXIgaW5mb3JtYXRpb24g Y2FuIGJlIG9idGFpbmVkIGZyb20gdGhlICJUZXh0cGF0dGVybiBzdXBwb3J0IGZvcnVtIjpo dHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/aWQ9Mjg3MjAuIEEg Y29weSBvZiB0aGlzIGhlbHAgaXMgYWxzbyBhdmFpbGFibGUgIm9ubGluZSI6aHR0cDovL3d3 dy5ncmVhdG9jZWFubWVkaWEuY29tLmF1L3R4cC8/cGx1Z2luPWFkaV92YXJpYWJsZXMuICBN b3JlIGFkaV9wbHVnaW5zIGNhbiBiZSBmb3VuZCAiaGVyZSI6aHR0cDovL3d3dy5ncmVhdG9j ZWFubWVkaWEuY29tLmF1L3R4cC8uIjtzOjM6Im1kNSI7czozMjoiNTI5OGIwMGU4N2IyNWU2 YTk2NzBmZDhhYWUyNWRkZWUiO30=