# Name: soo_plugin_pref v0.2.2 # Type: Library plugin # Plugin preference manager # Author: Jeff Soo # URL: http://ipsedixit.net/txp/ # Recommended load order: 1 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjE1OiJzb29fcGx1Z2luX3ByZWYiO3M6NjoiYXV0aG9yIjtz Ojg6IkplZmYgU29vIjtzOjEwOiJhdXRob3JfdXJpIjtzOjI1OiJodHRwOi8vaXBzZWRpeGl0 Lm5ldC90eHAvIjtzOjc6InZlcnNpb24iO3M6NToiMC4yLjIiO3M6MTE6ImRlc2NyaXB0aW9u IjtzOjI1OiJQbHVnaW4gcHJlZmVyZW5jZSBtYW5hZ2VyIjtzOjQ6ImhlbHAiO3M6MTA5MDA6 IjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CmRpdiNzZWRfaGVscCBwcmUge3BhZGRpbmc6IDAu NWVtIDFlbTsgYmFja2dyb3VuZDogI2VlZTsgYm9yZGVyOiAxcHggZGFzaGVkICNjY2M7fQpk aXYjc2VkX2hlbHAgaDEsIGRpdiNzZWRfaGVscCBoMiwgZGl2I3NlZF9oZWxwIGgzLCBkaXYj c2VkX2hlbHAgaDMgY29kZSB7Zm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0 OiBib2xkO30KZGl2I3NlZF9oZWxwIGgxLCBkaXYjc2VkX2hlbHAgaDIsIGRpdiNzZWRfaGVs cCBoMyB7bWFyZ2luLWxlZnQ6IC0xZW07fQpkaXYjc2VkX2hlbHAgaDIsIGRpdiNzZWRfaGVs cCBoMyB7bWFyZ2luLXRvcDogMmVtO30KZGl2I3NlZF9oZWxwIGgxIHtmb250LXNpemU6IDIu NGVtO30KZGl2I3NlZF9oZWxwIGgyIHtmb250LXNpemU6IDEuOGVtO30KZGl2I3NlZF9oZWxw IGgzIHtmb250LXNpemU6IDEuNGVtO30KZGl2I3NlZF9oZWxwIGg0IHtmb250LXNpemU6IDEu MmVtO30KZGl2I3NlZF9oZWxwIGg1IHtmb250LXNpemU6IDFlbTttYXJnaW4tbGVmdDoxZW07 Zm9udC1zdHlsZTpvYmxpcXVlO30KZGl2I3NlZF9oZWxwIGg2IHtmb250LXNpemU6IDFlbTtt YXJnaW4tbGVmdDoyZW07Zm9udC1zdHlsZTpvYmxpcXVlO30KZGl2I3NlZF9oZWxwIGxpIHts aXN0LXN0eWxlLXR5cGU6IGRpc2M7fQpkaXYjc2VkX2hlbHAgbGkgbGkge2xpc3Qtc3R5bGUt dHlwZTogY2lyY2xlO30KZGl2I3NlZF9oZWxwIGxpIGxpIGxpIHtsaXN0LXN0eWxlLXR5cGU6 IHNxdWFyZTt9CmRpdiNzZWRfaGVscCBsaSBhIGNvZGUge2ZvbnQtd2VpZ2h0OiBub3JtYWw7 fQpkaXYjc2VkX2hlbHAgbGkgY29kZTpmaXJzdC1jaGlsZCB7YmFja2dyb3VuZDogI2RkZDtw YWRkaW5nOjAgLjNlbTttYXJnaW4tbGVmdDotLjNlbTt9CmRpdiNzZWRfaGVscCBsaSBsaSBj b2RlOmZpcnN0LWNoaWxkIHtiYWNrZ3JvdW5kOm5vbmU7cGFkZGluZzowO21hcmdpbi1sZWZ0 OjA7fQpkaXYjc2VkX2hlbHAgZGZuIHtmb250LXdlaWdodDpib2xkO2ZvbnQtc3R5bGU6b2Js aXF1ZTt9CmRpdiNzZWRfaGVscCAucmVxdWlyZWQsIGRpdiNzZWRfaGVscCAud2FybmluZyB7 Y29sb3I6cmVkO30KZGl2I3NlZF9oZWxwIC5kZWZhdWx0IHtjb2xvcjpncmVlbjt9Cjwvc3R5 bGU+CiA8ZGl2IGlkPSJzZWRfaGVscCI+CgoJPGgxPnNvb19wbHVnaW5fcHJlZjwvaDE+Cgog PGRpdiBpZD0idG9jIj4KCgk8aDI+Q29udGVudHM8L2gyPgoKCTx1bD4KCQk8bGk+PGEgaHJl Zj0iI292ZXJ2aWV3Ij5PdmVydmlldzwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIjdXNhZ2Ui PlVzYWdlPC9hPjwvbGk+CgkJPGxpPjxhIGhyZWY9IiNhdXRob3JzIj5JbmZvIGZvciBwbHVn aW4gYXV0aG9yczwvYT4KCTx1bD4KCQk8bGk+PGEgaHJlZj0iI2NvbmZpZyI+Q29uZmlndXJh dGlvbjwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIjZnVuY3Rpb25zIj5GdW5jdGlvbnM8L2E+ PC9saT4KCQk8bGk+PGEgaHJlZj0iI2xpbWl0YXRpb25zIj5MaW1pdGF0aW9uczwvYT48L2xp PgoJPC91bD48L2xpPgoJCTxsaT48YSBocmVmPSIjaGlzdG9yeSI+SGlzdG9yeTwvYT48L2xp PgoJPC91bD4KCiA8L2Rpdj4KCgk8aDIgaWQ9Im92ZXJ2aWV3Ij5PdmVydmlldzwvaDI+CgoJ PHA+VGhpcyBpcyBhbiBhZG1pbi1zaWRlIHBsdWdpbiBmb3IgbWFuYWdpbmcgcGx1Z2luIHBy ZWZlcmVuY2VzLjwvcD4KCgk8cD5Gb3IgdXNlcnMsIGl0IHByb3ZpZGVzIGEgY29uc2lzdGVu dCBhZG1pbiBpbnRlcmZhY2UgdG8gc2V0IHByZWZlcmVuY2VzIGZvciA8c3Ryb25nPnNvb19w bHVnaW5fcHJlZjwvc3Ryb25nPi1jb21wYXRpYmxlIHBsdWdpbnMsIGFuZCBhdXRvbWF0aWNh bGx5IGluc3RhbGxzIG9yIHJlbW92ZXMgdGhvc2UgcHJlZmVyZW5jZXMgZnJvbSB0aGUgZGF0 YWJhc2UgYXMgYXBwcm9wcmlhdGUuIE9mIGNvdXJzZSwgd2hlbiB5b3UgdXBncmFkZSBhIHBs dWdpbiB5b3VyIGV4aXN0aW5nIHByZWZlcmVuY2UgdmFsdWVzIGFyZSByZXRhaW5lZC48L3A+ CgoJPHA+Rm9yIHBsdWdpbiBhdXRob3JzLCBpdCBhbGxvd3MgeW91IHRvIGFkZCBwcmVmZXJl bmNlIHNldHRpbmdzIHRvIHlvdXIgcGx1Z2lucyB3aXRob3V0IGhhdmluZyB0byBjcmVhdGUg dGhlIHVzZXIgaW50ZXJmYWNlIG9yIHRoZSBwcmVmZXJlbmNlLWhhbmRsaW5nIGZ1bmN0aW9u cy48L3A+CgoJPHA+SXQgdXNlcyB0aGUgcGx1Z2luIHByZWZzL2xpZmVjeWNsZSBmZWF0dXJl cyBpbnRyb2R1Y2VkIGluIFR4cCA0LjIuMCwgc28gPHNwYW4gY2xhc3M9InJlcXVpcmVkIj5U eHAgNC4yLjAgb3IgZ3JlYXRlciBpcyByZXF1aXJlZDwvc3Bhbj4uPC9wPgoKCTxoMiBpZD0i dXNhZ2UiPlVzYWdlPC9oMj4KCgk8cD48c3Ryb25nPnNvb19wbHVnaW5fcHJlZjwvc3Ryb25n PiBvbmx5IHdvcmtzIHdpdGggcGx1Z2lucyB0aGF0IGFyZSBkZXNpZ25lZCB0byB1c2UgaXQu IChTZWUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMu cGhwP2lkPTMxNzMyIj5zdXBwb3J0IGZvcnVtIHRocmVhZDwvYT4gZm9yIGEgbGlzdCBvZiBj b21wYXRpYmxlIHBsdWdpbnMuKSBBcyBvZiB2ZXJzaW9uIDAuMi4xLCB5b3UgY2FuIGluc3Rh bGwgcGx1Z2lucyBpbiBhbnkgb3JkZXIuIEEgY29tcGF0aWJsZSBwbHVnaW4mIzgyMTc7cyBw cmVmZXJlbmNlcyB3aWxsIGJlIGluc3RhbGxlZCB0aGUgZmlyc3QgdGltZSB5b3UgPGEgaHJl Zj0iaHR0cDovL3RleHRib29rLnRleHRwYXR0ZXJuLm5ldC93aWtpL2luZGV4LnBocD90aXRs ZT1QbHVnaW5zI1BhbmVsX2xheW91dF8uMjZfY29udHJvbHMiPmFjdGl2YXRlIGl0IG9yIGNs aWNrIGl0cyA8c3Ryb25nPk9wdGlvbnM8L3N0cm9uZz4gbGluayBpbiB0aGUgcGx1Z2luIGxp c3Q8L2E+IHdoaWxlIDxzdHJvbmc+c29vX3BsdWdpbl9wcmVmPC9zdHJvbmc+IGlzIGFjdGl2 ZS4gSXRzIHByZWZlcmVuY2VzIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBkYXRhYmFzZSB3 aGVuIHlvdSBkZWxldGUgaXQgd2hpbGUgPHN0cm9uZz5zb29fcGx1Z2luX3ByZWY8L3N0cm9u Zz4gaXMgYWN0aXZlLjwvcD4KCgk8cD5UbyBzZXQgYSBwbHVnaW4mIzgyMTc7cyBwcmVmZXJl bmNlcywgPGEgaHJlZj0iaHR0cDovL3RleHRib29rLnRleHRwYXR0ZXJuLm5ldC93aWtpL2lu ZGV4LnBocD90aXRsZT1QbHVnaW5zI1BhbmVsX2xheW91dF8uMjZfY29udHJvbHMiPmNsaWNr IGl0cyA8c3Ryb25nPk9wdGlvbnM8L3N0cm9uZz4gbGluayBpbiB0aGUgcGx1Z2luIGxpc3Q8 L2E+LjwvcD4KCgk8aDIgaWQ9ImF1dGhvcnMiPkluZm8gZm9yIHBsdWdpbiBhdXRob3JzPC9o Mj4KCgk8cD48c3Ryb25nPklmIHlvdSBhcmUgbm90IGEgcGx1Z2luIGF1dGhvciwgeW91IGNh biBzYWZlbHkgaWdub3JlIHRoZSByZXN0IG9mIHRoaXMgaGVscCB0ZXh0Ljwvc3Ryb25nPjwv cD4KCgk8aDMgaWQ9ImNvbmZpZyI+Q29uZmlndXJhdGlvbjwvaDM+CgoJPHA+VG8gY29uZmln dXJlIGEgcGx1Z2luIHRvIHdvcmsgd2l0aCA8c3Ryb25nPnNvb19wbHVnaW5fcHJlZjwvc3Ry b25nPjo8L3A+CgoJPHA+SWYgdGhpcyBpcyBhIHB1YmxpYy1zaWRlIHBsdWdpbiwgc2V0IHRo ZSB0eXBlIHNvIHRoYXQgaXQgd2lsbCBhbHNvIGxvYWQgb24gdGhlIGFkbWluIHNpZGU6PC9w PgoKPHByZT4kcGx1Z2luWyYjMzk7dHlwZSYjMzk7XSA9IDE7CjwvcHJlPgoKCTxwPlNldCB0 aGUgcGx1Z2luIGZsYWdzIGF0IHRoZSB0b3Agb2YgdGhlIHBsdWdpbiB0ZW1wbGF0ZSAodXNp bmcgdGhlIDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5nb29nbGVjb2RlLmNvbS9zdm4v ZGV2ZWxvcG1lbnQvNC54LXBsdWdpbi10ZW1wbGF0ZS8iPmh0dHA6Ly90ZXh0cGF0dGVybi5n b29nbGVjb2RlLmNvbS9zdm4vZGV2ZWxvcG1lbnQvNC54LXBsdWdpbi10ZW1wbGF0ZS88L2E+ IHRlbXBsYXRlIGFsbCB5b3UgbmVlZCB0byBkbyBpcyB1bmNvbW1lbnQgdGhlIDxjb2RlPiRw bHVnaW5bJiMzOTtmbGFncyYjMzk7XTwvY29kZT4gbGluZSk6PC9wPgoKPHByZT5pZiAoIWRl ZmluZWQoJiMzOTtQTFVHSU5fSEFTX1BSRUZTJiMzOTspKSBkZWZpbmUoJiMzOTtQTFVHSU5f SEFTX1BSRUZTJiMzOTssIDB4MDAwMSk7CmlmICghZGVmaW5lZCgmIzM5O1BMVUdJTl9MSUZF Q1lDTEVfTk9USUZZJiMzOTspKSBkZWZpbmUoJiMzOTtQTFVHSU5fTElGRUNZQ0xFX05PVElG WSYjMzk7LCAweDAwMDIpOwokcGx1Z2luWyYjMzk7ZmxhZ3MmIzM5O10gPSBQTFVHSU5fSEFT X1BSRUZTIHwgUExVR0lOX0xJRkVDWUNMRV9OT1RJRlk7CjwvcHJlPgoKCTxwPlRoZW4gc29t ZXdoZXJlIGluIHRoZSBwbHVnaW4gY29kZSBzZWN0aW9uIChzdWJzdGl0dXRpbmcgeW91ciBw bHVnaW4mIzgyMTc7cyBuYW1lIGZvciA8Y29kZT5hYmNfbXlfcGx1Z2luPC9jb2RlPiwgYW5k IHdoYXRldmVyIG5hbWUgeW91IGNob29zZSBmb3IgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uKTo8 L3A+Cgo8cHJlPnJlcXVpcmVfcGx1Z2luKCYjMzk7c29vX3BsdWdpbl9wcmVmJiMzOTspOwph ZGRfcHJpdnMoJiMzOTtwbHVnaW5fcHJlZnMuYWJjX215X3BsdWdpbiYjMzk7LCYjMzk7MSwy JiMzOTspOwphZGRfcHJpdnMoJiMzOTtwbHVnaW5fbGlmZWN5Y2xlLmFiY19teV9wbHVnaW4m IzM5OywmIzM5OzEsMiYjMzk7KTsKcmVnaXN0ZXJfY2FsbGJhY2soJiMzOTthYmNfbXlfcGx1 Z2luX3ByZWZzJiMzOTssICYjMzk7cGx1Z2luX3ByZWZzLmFiY19teV9wbHVnaW4mIzM5Oyk7 CnJlZ2lzdGVyX2NhbGxiYWNrKCYjMzk7YWJjX215X3BsdWdpbl9wcmVmcyYjMzk7LCAmIzM5 O3BsdWdpbl9saWZlY3ljbGUuYWJjX215X3BsdWdpbiYjMzk7KTsKPC9wcmU+CgoJPHA+YW5k IGZpbmFsbHksIGRlZmluZSB5b3VyIHBsdWdpbiYjODIxNztzIHByZWZlcmVuY2VzIGFuZCBy b3V0ZSB0aGUgPGNvZGU+cGx1Z2luX3ByZWZzPC9jb2RlPiBhbmQgPGNvZGU+cGx1Z2luX2xp ZmVjeWNsZTwvY29kZT4gZXZlbnRzIHRvIDxjb2RlPnNvb19wbHVnaW5fcHJlZigpPC9jb2Rl PiBpbiB5b3VyIGNhbGxiYWNrIGZ1bmN0aW9uLiBIZXJlJiM4MjE3O3MgYW4gZXhhbXBsZTo8 L3A+Cgo8cHJlPmZ1bmN0aW9uIGFiY19teV9wbHVnaW5fcHJlZnMoICRldmVudCwgJHN0ZXAg KSB7CgkkZGVmYXVsdHMgPSBhcnJheSgKCQkmIzM5O2ZvbyYjMzk7ID0mZ3Q7IGFycmF5KAoJ CQkmIzM5O3ZhbCYjMzk7CT0mZ3Q7ICYjMzk7Zm9vJiMzOTssCgkJCSYjMzk7aHRtbCYjMzk7 CT0mZ3Q7ICYjMzk7dGV4dF9pbnB1dCYjMzk7LAoJCQkmIzM5O3RleHQmIzM5Owk9Jmd0OyAm IzM5O0hlbHBmdWwgZGVzY3JpcHRpb24mIzM5OywKCQkpLAoJCSYjMzk7YmFyJiMzOTsgPSZn dDsgYXJyYXkoCgkJCSYjMzk7dmFsJiMzOTsJPSZndDsgMSwKCQkJJiMzOTtodG1sJiMzOTsJ PSZndDsgJiMzOTt5ZXNub3JhZGlvJiMzOTssCgkJCSYjMzk7dGV4dCYjMzk7CT0mZ3Q7ICYj Mzk7RXF1YWxseSBoZWxwZnVsIGRlc2NyaXB0aW9uJiMzOTssCgkJKSwKCSk7Cglzb29fcGx1 Z2luX3ByZWYoJGV2ZW50LCAkc3RlcCwgJGRlZmF1bHRzKTsKfQo8L3ByZT4KCgk8cD5Gb3Ig ZWFjaCBwcmVmZXJlbmNlLCA8Y29kZT52YWw8L2NvZGU+IGlzIHRoZSBkZWZhdWx0IHZhbHVl LCBhbmQgPGNvZGU+aHRtbDwvY29kZT4gaXMgdGhlIHR5cGUgb2YgPHNwYW4gY2xhc3M9ImNh cHMiPkhUTUw8L3NwYW4+IGlucHV0IGVsZW1lbnQgdXNlZCB0byBkaXNwbGF5IHRoZSBwcmVm ZXJlbmNlIGluIHRoZSBhZG1pbiBpbnRlcmZhY2U7IHRoZXNlIGdvIHRvIHRoZSBjb3JyZXNw b25kaW5nIGNvbHVtbnMgaW4gPGNvZGU+dHhwX3ByZWZzPC9jb2RlPi4gPGNvZGU+dGV4dDwv Y29kZT4gaXMgdGhlIGxhYmVsIHRoYXQgd2lsbCBhcHBlYXIgaW4gdGhlIGFkbWluIGludGVy ZmFjZTsgaXQgaXMgbm90IHN0b3JlZCBpbiB0aGUgZGF0YWJhc2UuPC9wPgoKCTxwPlByZWZl cmVuY2UgbmFtZXMgaW4gdGhlIGRhdGFiYXNlIGFyZSBpbiB0aGUgZm9ybWF0ICYjODIyMDtw bHVnaW5fbmFtZS5rZXkmIzgyMjE7LCB3aGVyZSAmIzgyMjA7cGx1Z2luX25hbWUmIzgyMjE7 IGlzIHlvdXIgcGx1Z2luJiM4MjE3O3MgbmFtZSwgYW5kICYjODIyMDtrZXkmIzgyMjE7IGlz IHRoZSBhcnJheSBrZXkgZnJvbSB0aGUgPGNvZGU+JGRlZmF1bHRzPC9jb2RlPiBhcnJheS48 L3A+CgoJPHA+RWFjaCBwcmVmZXJlbmNlIHdpbGwgYmUgYXNzaWduZWQgYSBwb3NpdGlvbiB2 YWx1ZSBjb3JyZXNwb25kaW5nIHRvIGl0cyBwb3NpdGlvbiBpbiB0aGUgZGVmYXVsdHMgYXJy YXksIHN0YXJ0aW5nIGF0IDAuIFRoaXMgZGV0ZXJtaW5lcyBpdHMgcmVsYXRpdmUgb3JkZXIg aW4gdGhlIGFkbWluIGludGVyZmFjZS48L3A+CgoJPHA+T3RoZXIgPGNvZGU+dHhwX3ByZWZz PC9jb2RlPiBjb2x1bW5zIGFyZSBzZXQgYXMgZm9sbG93czoKCTx1bD4KCQk8bGk+PGNvZGU+ ZXZlbnQ8L2NvZGU+IGlzIGFsd2F5cyBzZXQgdG8gJiM4MjIwO3BsdWdpbl9wcmVmcyYjODIy MTs8L2xpPgoJCTxsaT48Y29kZT5wcmVmc19pZDwvY29kZT4gaXMgYWx3YXlzIHNldCB0byA8 Y29kZT4xPC9jb2RlPjwvbGk+CgkJPGxpPjxjb2RlPnR5cGU8L2NvZGU+IGlzIGFsd2F5cyBz ZXQgdG8gPGNvZGU+MjwvY29kZT4gKGhpZGRlbiBmcm9tIG1haW4gUHJlZnMgcGFnZSk8L2xp PgoJPC91bD48L3A+CgoJPGg0PkFsdGVybmF0aXZlIGNvbmZpZ3VyYXRpb24gaWYgcHJlZnMg YXJlIG9wdGlvbmFsPC9oND4KCgk8cD5JZiB5b3Ugd2lzaCB0byBvZmZlciA8c3Ryb25nPnNv b19wbHVnaW5fcHJlZjwvc3Ryb25nPiBwcmVmZXJlbmNlIG1hbmFnZW1lbnQgYXMgYW4gb3B0 aW9uIHJhdGhlciB0aGFuIGEgcmVxdWlyZW1lbnQ6PC9wPgoKCTxwPlNldCB0aGUgcGx1Z2lu IGZsYWdzIGFzIGFib3ZlLjwvcD4KCgk8cD5QcmVmaXggdGhlIGVycm9yIHN1cHByZXNzaW9u IG9wZXJhdG9yICgmIzgyMTc7QCYjODIxNzspIHRvIHRoZSA8Y29kZT5yZXF1aXJlX3BsdWdp bigpPC9jb2RlPiBsaW5lLCBidXQgb3RoZXJ3aXNlIHNldCA8Y29kZT5hZGRfcHJpdnMoKTwv Y29kZT4gYW5kIDxjb2RlPnJlZ2lzdGVyX2NhbGxiYWNrKCk8L2NvZGU+IGFzIGFib3ZlLjwv cD4KCgk8cD5EZWZpbmUgeW91ciBwcmVmZXJlbmNlIGRlZmF1bHRzIGluIGEgc2VwYXJhdGUg ZnVuY3Rpb246PC9wPgoKPHByZT5mdW5jdGlvbiBhYmNfbXlfcGx1Z2luX2RlZmF1bHRzKCAp IHsKCXJldHVybiBhcnJheSgKCQkmIzM5O2ZvbyYjMzk7ID0mZ3Q7IGFycmF5KAoJCQkmIzM5 O3ZhbCYjMzk7CT0mZ3Q7ICYjMzk7Zm9vJiMzOTssCgkJCSYjMzk7aHRtbCYjMzk7CT0mZ3Q7 ICYjMzk7dGV4dF9pbnB1dCYjMzk7LAoJCQkmIzM5O3RleHQmIzM5Owk9Jmd0OyAmIzM5O0hl bHBmdWwgZGVzY3JpcHRpb24mIzM5OywKCQkpLAoJCSYjMzk7YmFyJiMzOTsgPSZndDsgYXJy YXkoCgkJCSYjMzk7dmFsJiMzOTsJPSZndDsgMSwKCQkJJiMzOTtodG1sJiMzOTsJPSZndDsg JiMzOTt5ZXNub3JhZGlvJiMzOTssCgkJCSYjMzk7dGV4dCYjMzk7CT0mZ3Q7ICYjMzk7RXF1 YWxseSBoZWxwZnVsIGRlc2NyaXB0aW9uJiMzOTssCgkJKSwKCSk7Cn0KPC9wcmU+CgoJPHA+ VGhlbiBhZGQgYSBjb25kaXRpb25hbCBjaGVjayB0byB5b3VyIGNhbGxiYWNrIGZ1bmN0aW9u OjwvcD4KCjxwcmU+ZnVuY3Rpb24gYWJjX215X3BsdWdpbl9wcmVmcyggJGV2ZW50LCAkc3Rl cCApIHsKCWlmICggZnVuY3Rpb25fZXhpc3RzKCYjMzk7c29vX3BsdWdpbl9wcmVmJiMzOTsp ICkKCQlzb29fcGx1Z2luX3ByZWYoJGV2ZW50LCAkc3RlcCwgYWJjX215X3BsdWdpbl9kZWZh dWx0cygpKTsKCWVsc2UgewoJCS8vIGFueSBjdXN0b20gcHJlZmVyZW5jZSBoYW5kbGluZyBn b2VzIGhlcmUKCX0KfQo8L3ByZT4KCgk8cD5JZiBub3RoaW5nIGVsc2UsIHlvdSBzaG91bGQg ZGlzcGxheSBhIG1lc3NhZ2UgZm9yIGEgPGNvZGU+cGx1Z2luX3ByZWZzLmFiY19teV9wbHVn aW48L2NvZGU+IGV2ZW50IGlmIDxzdHJvbmc+c29vX3BsdWdpbl9wcmVmPC9zdHJvbmc+IGlz IG5vdCBpbnN0YWxsZWQuIFRoZSB2ZXJzaW9uIGJlbG93IGNoZWNrcyB0aGUgZXZlbnQgdHlw ZSwgdGhlbiBhdHRlbXB0cyB0byBjb2JibGUgdG9nZXRoZXIgYSBtZWFuaW5nZnVsIG1lc3Nh Z2UgdXNpbmcgPGNvZGU+Z1R4dCgpPC9jb2RlPiBmcmFnbWVudHM6PC9wPgoKPHByZT5mdW5j dGlvbiBhYmNfbXlfcGx1Z2luX3ByZWZzKCAkZXZlbnQsICRzdGVwICkgewoJaWYgKCBmdW5j dGlvbl9leGlzdHMoJiMzOTtzb29fcGx1Z2luX3ByZWYmIzM5OykgKQoJCXJldHVybiBzb29f cGx1Z2luX3ByZWYoJGV2ZW50LCAkc3RlcCwgYWJjX215X3BsdWdpbl9kZWZhdWx0cygpKTsK CWlmICggc3Vic3RyKCRldmVudCwgMCwgMTIpID09ICYjMzk7cGx1Z2luX3ByZWZzJiMzOTsg KSB7CgkJJHBsdWdpbiA9IHN1YnN0cigkZXZlbnQsIDEzKTsKCQkkbWVzc2FnZSA9ICYjMzk7 Jmx0O3AmZ3Q7Jmx0O2JyIC8mZ3Q7Jmx0O3N0cm9uZyZndDsmIzM5OyAuIGdUeHQoJiMzOTtl ZGl0JiMzOTspIC4gJnF1b3Q7ICRwbHVnaW4gJnF1b3Q7IC4KCQkJZ1R4dCgmIzM5O2VkaXRf cHJlZmVyZW5jZXMmIzM5OykgLiAmIzM5OzombHQ7L3N0cm9uZyZndDsmbHQ7YnIgLyZndDsm IzM5OyAuCgkJCWdUeHQoJiMzOTtpbnN0YWxsX3BsdWdpbiYjMzk7KSAuICYjMzk7ICZsdDth CgkJCWhyZWY9JnF1b3Q7aHR0cDovL2lwc2VkaXhpdC5uZXQvdHhwLzkyL3Nvb19wbHVnaW5f cHJlZiZxdW90OyZndDtzb29fcGx1Z2luX3ByZWYmbHQ7L2EmZ3Q7Jmx0Oy9wJmd0OyYjMzk7 OwoJCXBhZ2V0b3AoZ1R4dCgmIzM5O2VkaXRfcHJlZmVyZW5jZXMmIzM5OykgLiAmcXVvdDsg JmFtcDsjODI1MDsgJHBsdWdpbiZxdW90OywgJG1lc3NhZ2UpOwoJfQp9CjwvcHJlPgoKCTxo MyBpZD0iZnVuY3Rpb25zIj5GdW5jdGlvbnM8L2gzPgoKCTxwPlRoZXJlJiM4MjE3O3MgYWxz byA8Y29kZT5zb29fcGx1Z2luX3ByZWZfdmFscyggJHBsdWdpbiApPC9jb2RlPiwgYSBoYW5k eSBsaXR0bGUgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHlvdXIgcGx1Z2luJiM4MjE3O3MgcHJl ZmVyZW5jZXMgYXMgYW4gYXNzb2NpYXRpdmUgYXJyYXkuIEl0IHN0cmlwcyB0aGUgcGx1Z2lu IG5hbWUgYW5kICYjODIxNjsuJiM4MjE3OyBmcm9tIHRoZSBuYW1lIGluIHRoZSBkYXRhYmFz ZSwgc28gdGhhdCB0aGUgYXJyYXkga2V5cyBtYXRjaCB0aG9zZSBpbiB5b3VyIGRlZmF1bHRz IGFycmF5LiBNeSB0eXBpY2FsIHVzZSBvZiB0aGlzLCB3aXRoIHRoZSBhbHRlcm5hdGl2ZSAo aS5lLiwgPHN0cm9uZz5zb29fcGx1Z2luX3ByZWY8L3N0cm9uZz4gb3B0aW9uYWwpIGNvbmZp Z3VyYXRpb24gc2hvd24gYWJvdmU6PC9wPgoKPHByZT5pZiAoIGZ1bmN0aW9uX2V4aXN0cygm IzM5O3Nvb19wbHVnaW5fcHJlZl92YWxzJiMzOTspICkKCSRhYmNfbXlfcGx1Z2luID0gc29v X3BsdWdpbl9wcmVmX3ZhbHMoJiMzOTthYmNfbXlfcGx1Z2luJiMzOTspOwplbHNlCglmb3Jl YWNoICggYWJjX215X3BsdWdpbl9kZWZhdWx0cygpIGFzICRuYW1lID0mZ3Q7ICR2YWwgKQoJ CSRhYmNfbXlfcGx1Z2luWyRuYW1lXSA9ICR2YWw7CjwvcHJlPgoKCTxwPndoZXJlIDxjb2Rl PiRhYmNfbXlfcGx1Z2luPC9jb2RlPiBpcyBnbG9iYWwuPC9wPgoKCTxoMyBpZD0ibGltaXRh dGlvbnMiPkxpbWl0YXRpb25zPC9oMz4KCgk8dWw+CgkJPGxpPkN1cnJlbnRseSB0aGUgb25s eSBhbGxvd2VkIHZhbHVlcyBmb3IgPGNvZGU+aHRtbDwvY29kZT4gYXJlIDxjb2RlPnRleHRf aW5wdXQ8L2NvZGU+IGFuZCA8Y29kZT55ZXNub3JhZGlvPC9jb2RlPi48L2xpPgoJCTxsaT48 c3Ryb25nPnNvb19wbHVnaW5fcHJlZjwvc3Ryb25nPiBvbmx5IGhhbmRsZXMgZ2xvYmFsIHBy ZWZlcmVuY2VzLiBJZiB5b3VyIHBsdWdpbiBoYXMgYSBtaXggb2YgZ2xvYmFsIGFuZCBwZXIt dXNlciBwcmVmZXJlbmNlcywgeW91IHdpbGwgaGF2ZSB0byBjb2RlIGFsbCB0aGUgaGFuZGxp bmcgb2YgdGhlIHBlci11c2VyIHByZWZlcmVuY2VzLjwvbGk+Cgk8L3VsPgoKCTxoMiBpZD0i aGlzdG9yeSI+VmVyc2lvbiBIaXN0b3J5PC9oMj4KCgk8aDM+MC4yLjIgKDkvMjgvMjAwOSk8 L2gzPgoKCTxwPkZpeGVkIGJ1ZyBpbiBwcmVmIHBvc2l0aW9uIHJlLWluZGV4aW5nPC9wPgoK CTxoMz4wLjIuMSAoOS8yNi8yMDA5KTwvaDM+CgoJPHVsPgoJCTxsaT5QcmUtaW5zdGFsbGlu ZyA8c3Ryb25nPnNvb19wbHVnaW5fcHJlZjwvc3Ryb25nPiBpcyBubyBsb25nZXIgcmVxdWly ZWQgZm9yIGF1dG9tYXRpYyBwcmVmZXJlbmNlIGluc3RhbGxhdGlvbjwvbGk+CgkJPGxpPkVh Y2ggcHJlZmVyZW5jZSBpcyBub3cgYXNzaWduZWQgYSBwb3NpdGlvbiB2YWx1ZSB0aGF0IGRl dGVybWluZXMgcmVsYXRpdmUgb3JkZXIgaW4gdGhlIGFkbWluIGludGVyZmFjZSwgYW5kIHRo YXQgY29ycmVzcG9uZHMgdG8gaXRzIHBvc2l0aW9uIGluIHRoZSBkZWZhdWx0cyBhcnJheTwv bGk+Cgk8L3VsPgoKCTxoMz4wLjIgKDkvMTcvMjAwOSk8L2gzPgoKCTxwPlRoaXMgdmVyc2lv biB1c2VzIGEgZGlmZmVyZW50IGlkZW50aWZ5aW5nIHNjaGVtZSBmb3IgcHJlZmVyZW5jZXMg YW5kIGhlbmNlIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIHByZXZpb3VzIHZlcnNpb24u IFRoZSBwbHVnaW4gbmFtZSBpcyBubyBsb25nZXIgc3RvcmVkIGluIHRoZSA8Y29kZT5ldmVu dDwvY29kZT4gY29sdW1uLCBzbyB0aGVyZSBpcyBubyBsb25nZXIgYW55IHJlc3RyaWN0aW9u IG9uIHBsdWdpbiBuYW1lIGxlbmd0aC48L3A+CgoJPGgzPjAuMSAoOS81LzIwMDkpPC9oMz4K Cgk8cD5CYXNpYyBwbHVnaW4gcHJlZmVyZW5jZSBtYW5hZ2VtZW50OjwvcD4KCgk8dWw+CgkJ PGxpPkF1dG9tYXRpYyBpbnN0YWxsYXRpb24vcmVtb3ZhbCBvZiBwcmVmZXJlbmNlcyBvbiBw bHVnaW4gaW5zdGFsbC9kZWxldGlvbjwvbGk+CgkJPGxpPlNpbXBsZSBhZG1pbiBpbnRlcmZh Y2UgZm9yIHNldHRpbmcgcHJlZmVyZW5jZXM8L2xpPgoJPC91bD4KCiA8L2Rpdj4iO3M6NDoi Y29kZSI7czozMjQ2OiIKLy8gZXZlbnQgaGFuZGxlciBjYWxsZWQgYnkgb3RoZXIgcGx1Z2lu cyBvbiBwbHVnaW5fbGlmZWN5Y2xlIGFuZCBwbHVnaW5fcHJlZnMgZXZlbnRzCmZ1bmN0aW9u IHNvb19wbHVnaW5fcHJlZiggJGV2ZW50LCAkc3RlcCwgJGRlZmF1bHRzICkgewoJcHJlZ19t YXRjaCgnL14oLispXC4oLispLycsICRldmVudCwgJG1hdGNoKTsKCWxpc3QoICwgJHR5cGUs ICRwbHVnaW4pID0gJG1hdGNoOwoJJG1lc3NhZ2UgPSAkc3RlcCA/IHNvb19wbHVnaW5fcHJl Zl9xdWVyeSgkcGx1Z2luLCAkc3RlcCwgJGRlZmF1bHRzKTogJyc7CglpZiAoICR0eXBlID09 ICdwbHVnaW5fcHJlZnMnICkKCQlzb29fcGx1Z2luX3ByZWZfdWkoJHBsdWdpbiwgJGRlZmF1 bHRzLCAkbWVzc2FnZSk7Cn0KCi8vIHVzZXIgaW50ZXJmYWNlIGZvciBwcmVmZXJlbmNlIHNl dHRpbmcgKHBsdWdpbl9wcmVmcyBldmVudHMpCmZ1bmN0aW9uIHNvb19wbHVnaW5fcHJlZl91 aSggJHBsdWdpbiwgJGRlZmF1bHRzLCAkbWVzc2FnZSA9ICcnICkgewoJJGNvbHMgPSAyOwoJ JGFsaWduX3JtID0gJyBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDt2ZXJ0aWNhbC1hbGlnbjpt aWRkbGUiJzsKCSRwcmVmcyA9IHNvb19wbHVnaW5fcHJlZl9xdWVyeSgkcGx1Z2luLCAnc2Vs ZWN0Jyk7CgoJLy8gaW5zdGFsbCBwcmVmcyBpZiBuZWNlc3NhcnkKCWlmICggJGRlZmF1bHRz IGFuZCAhICRwcmVmcyApIHsKCQlzb29fcGx1Z2luX3ByZWZfcXVlcnkoJHBsdWdpbiwgJ2Vu YWJsZWQnLCAkZGVmYXVsdHMpOwoJCSRwcmVmcyA9IHNvb19wbHVnaW5fcHJlZl9xdWVyeSgk cGx1Z2luLCAnc2VsZWN0Jyk7Cgl9CgoJcGFnZXRvcChnVHh0KCdlZGl0X3ByZWZlcmVuY2Vz JykgLiAiICYjODI1MDsgJHBsdWdpbiIsICRtZXNzYWdlKTsKCWVjaG8KCQluLiAnPGZvcm0g bWV0aG9kPSJwb3N0IiBuYW1lPSJzb29fcGx1Z2luX3ByZWZfZm9ybSI+JyAuCgkJbi4gc3Rh cnRUYWJsZSgnbGlzdCcpIC4KCQkJdHIobi4gdGRjcyhoZWQoCgkJCQlnVHh0KCdwbHVnaW4n KSAuJyAnLiBnVHh0KCdlZGl0X3ByZWZlcmVuY2VzJykgLiAiOiAkcGx1Z2luIgoJCQkJLCAx KSwKCQkJJGNvbHMpKQoJOwoKCWZvcmVhY2ggKCAkcHJlZnMgYXMgJHByZWYgKSB7CgkJZXh0 cmFjdCgkcHJlZik7CgkJJG5hbWUgPSBzdHJfcmVwbGFjZSgiJHBsdWdpbi4iLCAnJywgJG5h bWUpOwoJCSRpbnB1dCA9ICRodG1sID09ICd5ZXNub3JhZGlvJyA/CiAJCQl5ZXNub1JhZGlv KCRuYW1lLCAkdmFsKSA6CiAJCQlmSW5wdXQoJ3RleHQnLCAkbmFtZSwgJHZhbCwgJ2VkaXQn LCAnJywgJycsIDIwKTsKIAkJZWNobwogCQkJbi4gdHIoCiAJCQluLnQuIHRkYSgkZGVmYXVs dHNbJG5hbWVdWyd0ZXh0J10sICRhbGlnbl9ybSkgLgogCQkJbi4gdGQoJGlucHV0KQogCQkp OwogCX0KCgllY2hvCgkJbi4gc0lucHV0KCd1cGRhdGUnKSAuCgkJbi4gZUlucHV0KCJwbHVn aW5fcHJlZnMuJHBsdWdpbiIpIC4KCQluLiB0cihuLiB0ZGNzKGZJbnB1dCgnc3VibWl0Jywg J3Nvb19wbHVnaW5fcHJlZl91cGRhdGUnLAoJCQlnVHh0KCdzYXZlJyksICdwdWJsaXNoJyks ICRjb2xzKSkgLgoJCXRyKG4uIHRkY3MoaHJlZigKCQkJZ1R4dCgnZ29fdG8nKSAuJyAnLiBn VHh0KCdwbHVnaW5zJykgLicgJy4gZ1R4dCgnbGlzdCcpCgkJCSwgJz9ldmVudD1wbHVnaW4n KQoJCQksJGNvbHMpKSAuCgkJZW5kVGFibGUoKSAuICc8L2Zvcm0+JyAuCgkJbjsKfQoKLy8g cHJlZmVyZW5jZSBDUlVECmZ1bmN0aW9uIHNvb19wbHVnaW5fcHJlZl9xdWVyeSggJHBsdWdp biwgJGFjdGlvbiwgJGRlZmF1bHRzID0gYXJyYXkoKSApIHsKCglpZiAoICRhY3Rpb24gPT0g J3NlbGVjdCcgKQoJCXJldHVybiBzYWZlX3Jvd3MoCgkJCSduYW1lLCB2YWwsIGh0bWwsIHBv c2l0aW9uJywKCQkJJ3R4cF9wcmVmcycsCgkJCSJuYW1lIGxpa2UgJyRwbHVnaW4uJScgb3Jk ZXIgYnkgcG9zaXRpb24gYXNjIgoJCSk7CgoJZWxzZWlmICggJGFjdGlvbiA9PSAndXBkYXRl JyApIHsKCQkkcG9zdCA9IGRvU2xhc2goc3RyaXBQb3N0KCkpOwoJCSRhbGxvd2VkID0gYXJy YXlfa2V5cyhzb29fcGx1Z2luX3ByZWZfdmFscygkcGx1Z2luKSk7CgkJZm9yZWFjaCAoICRw b3N0IGFzICRuYW1lID0+ICR2YWwgKQoJCQlpZiAoIGluX2FycmF5KCRuYW1lLCAkYWxsb3dl ZCkgKQoJCQkJaWYgKCAhIHNldF9wcmVmKCIkcGx1Z2luLiRuYW1lIiwgJHZhbCkgKQoJCQkJ CSRlcnJvciA9IHRydWU7CgkJcmV0dXJuIGVtcHR5KCRlcnJvcikgPyBnVHh0KCdwcmVmZXJl bmNlc19zYXZlZCcpIDogJyc7Cgl9CgoJZWxzZWlmICggJGFjdGlvbiA9PSAnZW5hYmxlZCcg KSB7CgkJJHByZWZzID0gc29vX3BsdWdpbl9wcmVmX3ZhbHMoJHBsdWdpbik7CgkJJGFkZCA9 IGFycmF5X2RpZmZfa2V5KCRkZWZhdWx0cywgJHByZWZzKTsKCQkkcmVtb3ZlID0gYXJyYXlf ZGlmZl9rZXkoJHByZWZzLCAkZGVmYXVsdHMpOwoJCWZvcmVhY2ggKCAkYWRkIGFzICRuYW1l ID0+ICRwcmVmICkKCQkJc2V0X3ByZWYoCgkJCQkkcGx1Z2luIC4gJy4nIC4gJG5hbWUsCgkJ CQkkcHJlZlsndmFsJ10sCgkJCQkncGx1Z2luX3ByZWZzJywKCQkJCTIsCgkJCQkkcHJlZlsn aHRtbCddCgkJCSk7CgkJZm9yZWFjaCAoICRyZW1vdmUgYXMgJG5hbWUgPT4gJHZhbCApCgkJ CXNhZmVfZGVsZXRlKCd0eHBfcHJlZnMnLCAibmFtZSA9ICckcGx1Z2luLiRuYW1lJyIpOwoK CQkvLyB1cGRhdGUgcG9zaXRpb24gdmFsdWVzCgkJZm9yZWFjaCAoIGFycmF5X2tleXMoJGRl ZmF1bHRzKSBhcyAkaSA9PiAkbmFtZSApCgkJCXNhZmVfdXBkYXRlKCd0eHBfcHJlZnMnLAoJ CQkJInBvc2l0aW9uID0gJGkiLAoJCQkJIm5hbWUgPSAnJHBsdWdpbi4kbmFtZSciKTsKCX0K CgllbHNlaWYgKCAkYWN0aW9uID09ICdkZWxldGVkJyApCgkJc2FmZV9kZWxldGUoJ3R4cF9w cmVmcycsICJuYW1lIGxpa2UgJyRwbHVnaW4uJSciKTsKfQoKLy8gZ2V0IGEgcGx1Z2luJ3Mg cHJlZnM7IHJldHVybiBhcyBhc3NvY2lhdGl2ZSBuYW1lOnZhbHVlIGFycmF5CmZ1bmN0aW9u IHNvb19wbHVnaW5fcHJlZl92YWxzKCAkcGx1Z2luICkgewoJJHJzID0gc29vX3BsdWdpbl9w cmVmX3F1ZXJ5KCRwbHVnaW4sICdzZWxlY3QnKTsKCWZvcmVhY2ggKCAkcnMgYXMgJHIgKSB7 CgkJZXh0cmFjdCAoJHIpOwoJCSRuYW1lID0gc3RyX3JlcGxhY2UoIiRwbHVnaW4uIiwgJycs ICRuYW1lKTsKCQkkb3V0WyRuYW1lXSA9ICR2YWw7Cgl9CglyZXR1cm4gaXNzZXQoJG91dCkg PyAkb3V0IDogYXJyYXkoKTsKfQoiO3M6NDoidHlwZSI7czoxOiIyIjtzOjU6ImZsYWdzIjtz OjE6IjAiO3M6NToib3JkZXIiO3M6MToiMSI7czozOiJtZDUiO3M6MzI6ImJiZmE5ZWJlMTI5 ZmZiOTViZTUxMDU1YTQ4YzQxYWM0Ijt9