# Name: soo_plugin_pref v0.2.3 # 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 Lm5ldC90eHAvIjtzOjc6InZlcnNpb24iO3M6NToiMC4yLjMiO3M6MTE6ImRlc2NyaXB0aW9u IjtzOjI1OiJQbHVnaW4gcHJlZmVyZW5jZSBtYW5hZ2VyIjtzOjQ6ImhlbHAiO3M6OTc1ODoi PGgxPnNvb19wbHVnaW5fcHJlZjwvaDE+Cgo8cD5UaGlzIGlzIGEgcGx1Z2luIGZvciA8YSBo cmVmPSJodHRwOi8vdGV4dHBhdHRlcm4uY29tIj5UZXh0cGF0dGVybjwvYT4uPC9wPgoKPHVs PgoJPGxpPjxhIGhyZWY9Imh0dHBzOi8vZm9ydW0udGV4dHBhdHRlcm4uaW8vdmlld3RvcGlj LnBocD9pZD0zMTczMiI+U3VwcG9ydCBmb3J1bSB0b3BpYzwvYT48L2xpPgoJPGxpPjxhIGhy ZWY9Imh0dHA6Ly9pcHNlZGl4aXQubmV0L3R4cC85Mi9zb29fcGx1Z2luX3ByZWYiPkF1dGhv ciBzaXRlPC9hPjwvbGk+Cgk8bGk+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2pzb28v c29vX3BsdWdpbl9wcmVmIj5HaXRIdWI8L2E+PC9saT4KPC91bD4KCjxkaXYgaWQ9InRvYyI+ Cgo8aDI+Q29udGVudHM8L2gyPgoKPHVsPgoJPGxpPjxhIGhyZWY9IiNvdmVydmlldyI+T3Zl cnZpZXc8L2E+PC9saT4KCTxsaT48YSBocmVmPSIjdXNhZ2UiPlVzYWdlPC9hPjwvbGk+Cgk8 bGk+PGEgaHJlZj0iI2F1dGhvcnMiPkluZm8gZm9yIHBsdWdpbiBhdXRob3JzPC9hPgoJPHVs PgoJCTxsaT48YSBocmVmPSIjY29uZmlnIj5Db25maWd1cmF0aW9uPC9hPjwvbGk+CgkJPGxp PjxhIGhyZWY9IiNsaW1pdGF0aW9ucyI+TGltaXRhdGlvbnM8L2E+PC9saT4KCTwvdWw+PC9s aT4KCTxsaT48YSBocmVmPSIjaGlzdG9yeSI+SGlzdG9yeTwvYT48L2xpPgo8L3VsPgoKPC9k aXY+Cgo8aDIgaWQ9Im92ZXJ2aWV3Ij5PdmVydmlldzwvaDI+Cgo8cD5UaGlzIGlzIGFuIGFk bWluLXNpZGUgcGx1Z2luIGZvciBtYW5hZ2luZyBwbHVnaW4gcHJlZmVyZW5jZXMuPC9wPgoK PHA+Rm9yIHVzZXJzLCBpdCBwcm92aWRlcyBhIGNvbnNpc3RlbnQgYWRtaW4gaW50ZXJmYWNl IHRvIHNldCBwcmVmZXJlbmNlcyBmb3IgKnNvb19wbHVnaW5fcHJlZiotY29tcGF0aWJsZSBw bHVnaW5zLCBhbmQgYXV0b21hdGljYWxseSBpbnN0YWxscyBvciByZW1vdmVzIHRob3NlIHBy ZWZlcmVuY2VzIGZyb20gdGhlIGRhdGFiYXNlIGFzIGFwcHJvcHJpYXRlLiAoV2hlbiB5b3Ug dXBncmFkZSBhIHBsdWdpbiB5b3VyIGV4aXN0aW5nIHByZWZlcmVuY2UgdmFsdWVzIGFyZSBy ZXRhaW5lZC4pPC9wPgoKPHA+Rm9yIHBsdWdpbiBhdXRob3JzLCBpdCBhbGxvd3MgeW91IHRv IGFkZCBwcmVmZXJlbmNlIHNldHRpbmdzIHRvIHlvdXIgcGx1Z2lucyB3aXRob3V0IGhhdmlu ZyB0byBjcmVhdGUgdGhlIHVzZXIgaW50ZXJmYWNlIG9yIHRoZSBwcmVmZXJlbmNlLWhhbmRs aW5nIGZ1bmN0aW9ucy48L3A+Cgo8cD5JdCB1c2VzIHRoZSBwbHVnaW4gcHJlZnMvbGlmZWN5 Y2xlIGZlYXR1cmVzIGludHJvZHVjZWQgaW4gVHhwIDQuMi4wLCBzbyA8c3BhbiBjbGFzcz0i cmVxdWlyZWQiPlR4cCA0LjIuMCBvciBncmVhdGVyIGlzIHJlcXVpcmVkPC9zcGFuPi48L3A+ Cgo8aDIgaWQ9InVzYWdlIj5Vc2FnZTwvaDI+Cgo8cD48c3Ryb25nPnNvb19wbHVnaW5fcHJl Zjwvc3Ryb25nPiBvbmx5IHdvcmtzIHdpdGggcGx1Z2lucyB0aGF0IGFyZSBkZXNpZ25lZCB0 byB1c2UgaXQuIChTZWUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmlvL3Zp ZXd0b3BpYy5waHA/aWQ9MzE3MzIiPnN1cHBvcnQgZm9ydW0gdGhyZWFkPC9hPi4pIEFzIG9m IHZlcnNpb24gMC4yLjEsIHlvdSBjYW4gaW5zdGFsbCBwbHVnaW5zIGluIGFueSBvcmRlci4g QSBjb21wYXRpYmxlIHBsdWdpbiYjODIxNztzIHByZWZlcmVuY2VzIHdpbGwgYmUgaW5zdGFs bGVkIHRoZSBmaXJzdCB0aW1lIHlvdSA8YSBocmVmPSJodHRwczovL2RvY3MudGV4dHBhdHRl cm4uaW8vYWRtaW5pc3RyYXRpb24vcGx1Z2lucy1wYW5lbCI+YWN0aXZhdGUgaXQgb3IgY2xp Y2sgaXRzIDxzdHJvbmc+T3B0aW9uczwvc3Ryb25nPiBsaW5rIGluIHRoZSBwbHVnaW4gbGlz dDwvYT4gd2hpbGUgPHN0cm9uZz5zb29fcGx1Z2luX3ByZWY8L3N0cm9uZz4gaXMgYWN0aXZl LiBJdHMgcHJlZmVyZW5jZXMgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIGRhdGFiYXNlIHdo ZW4geW91IGRlbGV0ZSBpdCB3aGlsZSA8c3Ryb25nPnNvb19wbHVnaW5fcHJlZjwvc3Ryb25n PiBpcyBhY3RpdmUuPC9wPgoKPHA+VG8gc2V0IGEgcGx1Z2luJiM4MjE3O3MgcHJlZmVyZW5j ZXMsIDxhIGhyZWY9Imh0dHBzOi8vZG9jcy50ZXh0cGF0dGVybi5pby9hZG1pbmlzdHJhdGlv bi9wbHVnaW5zLXBhbmVsIj5jbGljayBpdHMgPHN0cm9uZz5PcHRpb25zPC9zdHJvbmc+IGxp bmsgaW4gdGhlIHBsdWdpbiBsaXN0PC9hPi48L3A+Cgo8cD5OQjogQSBsaW1pdGF0aW9uIGlz IHRoYXQgaWYgeW91IHVwZ3JhZGUgYW4gYWxyZWFkeS1lbmFibGVkIHBsdWdpbiwgYW5kIHRo ZSBuZXcgdmVyc2lvbiBvZiB0aGUgcGx1Z2luIGluY2x1ZGVzIG5ldyBwcmVmIHNldHRpbmdz LCB5b3UgbXVzdCBkaXNhYmxlIGFuZCByZS1lbmFibGUgaXQgdG8gcGljayB1cCB0aGUgY2hh bmdlcy48L3A+Cgo8aDIgaWQ9ImF1dGhvcnMiPkluZm8gZm9yIHBsdWdpbiBhdXRob3JzPC9o Mj4KCjxwPjxzdHJvbmc+SWYgeW91IGFyZSBub3QgYSBwbHVnaW4gYXV0aG9yLCB5b3UgY2Fu IHNhZmVseSBpZ25vcmUgdGhlIHJlc3Qgb2YgdGhpcyBoZWxwIHRleHQuPC9zdHJvbmc+PC9w PgoKPGgzIGlkPSJjb25maWciPkNvbmZpZ3VyYXRpb248L2gzPgoKPHA+VG8gY29uZmlndXJl IGEgcGx1Z2luIHRvIHdvcmsgd2l0aCA8c3Ryb25nPnNvb19wbHVnaW5fcHJlZjwvc3Ryb25n Pjo8L3A+Cgo8cD5JbiB0aGUgcGx1Z2luIG1hbmlmZXN0IChpLmUuLCB0aGUgPGNvZGU+JHBs dWdpbjwvY29kZT4gYXJyYXkgYXQgdGhlIHRvcCBvZiB0aGUgZmlsZSk6PC9wPgoKPHVsPgoJ PGxpPkVuc3VyZSB0aGUgcGx1Z2luIHdpbGwgbG9hZCBvbiB0aGUgYWRtaW4gc2lkZSAoaS5l LiwgaWYgPGNvZGU+dHlwZTwvY29kZT4gaXMgMCwgY2hhbmdlIGl0IHRvIDEpPC9saT4KCTxs aT5TZXQgdGhlIHBsdWdpbiBmbGFncyAodGhlIG9mZmljaWFsIHBsdWdpbiB0ZW1wbGF0ZSBh dCA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGV4dHBhdHRlcm4vdGV4dHBhdHRlcm4t cGx1Z2luLXRlbXBsYXRlL2Jsb2IvbWFzdGVyL3plbV9wbHVnaW5fZXhhbXBsZS5waHAiPmh0 dHBzOi8vZ2l0aHViLmNvbS90ZXh0cGF0dGVybi90ZXh0cGF0dGVybi1wbHVnaW4tdGVtcGxh dGUvYmxvYi9tYXN0ZXIvemVtX3BsdWdpbl9leGFtcGxlLnBocDwvYT4gYWxyZWFkeSBkb2Vz IHRoaXMgZm9yIHlvdSk8L2xpPgo8L3VsPgoKPHA+QWRkIHRoaXMgdG8gdGhlIHBsdWdpbiBj b2RlIHNlY3Rpb24gKHN1YnN0aXR1dGluZyB5b3VyIHBsdWdpbiYjODIxNztzIG5hbWUgZm9y IDxjb2RlPmFiY19teV9wbHVnaW48L2NvZGU+LCBhbmQgd2hhdGV2ZXIgbmFtZSB5b3UgY2hv b3NlIGZvciB0aGUgY2FsbGJhY2sgZnVuY3Rpb24pOjwvcD4KCjxwcmU+QHJlcXVpcmVfcGx1 Z2luKCYjMzk7c29vX3BsdWdpbl9wcmVmJiMzOTspOyAgICAvLyBvcHRpb25hbAppZiAoIEB0 eHBpbnRlcmZhY2UgPT0gJiMzOTthZG1pbiYjMzk7ICkKewogICAgYWRkX3ByaXZzKCYjMzk7 cGx1Z2luX3ByZWZzLmFiY19teV9wbHVnaW4mIzM5OywmIzM5OzEsMiYjMzk7KTsKICAgIGFk ZF9wcml2cygmIzM5O3BsdWdpbl9saWZlY3ljbGUuYWJjX215X3BsdWdpbiYjMzk7LCYjMzk7 MSwyJiMzOTspOwogICAgcmVnaXN0ZXJfY2FsbGJhY2soJiMzOTthYmNfbXlfcGx1Z2luX3By ZWZzJiMzOTssICYjMzk7cGx1Z2luX3ByZWZzLmFiY19teV9wbHVnaW4mIzM5Oyk7CiAgICBy ZWdpc3Rlcl9jYWxsYmFjaygmIzM5O2FiY19teV9wbHVnaW5fcHJlZnMmIzM5OywgJiMzOTtw bHVnaW5fbGlmZWN5Y2xlLmFiY19teV9wbHVnaW4mIzM5Oyk7Cn08L3ByZT4KCjxwPkRlZmlu ZSB5b3VyIHBsdWdpbiYjODIxNztzIHByZWZlcmVuY2UgZGVmYXVsdHMuIEkgbGlrZSB0byBk byB0aGlzIHdpdGggYSBmdW5jdGlvbiwgd2l0aCB0aGUgb3B0aW9uIHRvIG91dHB1dCB0aGUg bXVsdGktbGV2ZWwgYXJyYXkgcmVxdWlyZWQgYnkgPGNvZGU+c29vX3BsdWdpbl9wcmVmKCk8 L2NvZGU+IG9yIGEgc2ltcGxlIGtleTp2YWx1ZSBhcnJheTo8L3A+Cgo8cHJlPmZ1bmN0aW9u IGFiY19teV9wbHVnaW5fZGVmYXVsdHMoICR2YWxzX29ubHkgPSBmYWxzZSApIHsKICAgICRk ZWZhdWx0cyA9IGFycmF5KAogICAgICAgICYjMzk7Zm9vJiMzOTsgPSZndDsgYXJyYXkoCiAg ICAgICAgICAgICYjMzk7dmFsJiMzOTsgICA9Jmd0OyAmIzM5O2ZvbyYjMzk7LAogICAgICAg ICAgICAmIzM5O2h0bWwmIzM5OyAgPSZndDsgJiMzOTt0ZXh0X2lucHV0JiMzOTssCiAgICAg ICAgICAgICYjMzk7dGV4dCYjMzk7ICA9Jmd0OyAmIzM5O0hlbHBmdWwgZGVzY3JpcHRpb24m IzM5OywKICAgICAgICApLAogICAgICAgICYjMzk7YmFyJiMzOTsgPSZndDsgYXJyYXkoCiAg ICAgICAgICAgICYjMzk7dmFsJiMzOTsgICA9Jmd0OyAxLAogICAgICAgICAgICAmIzM5O2h0 bWwmIzM5OyAgPSZndDsgJiMzOTt5ZXNub3JhZGlvJiMzOTssCiAgICAgICAgICAgICYjMzk7 dGV4dCYjMzk7ICA9Jmd0OyAmIzM5O0VxdWFsbHkgaGVscGZ1bCBkZXNjcmlwdGlvbiYjMzk7 LAogICAgICAgICksCiAgICApOwogICAgaWYgKCAkdmFsc19vbmx5ICkKICAgICAgICBmb3Jl YWNoICggJGRlZmF1bHRzIGFzICRuYW1lID0mZ3Q7ICRhcnIgKQogICAgICAgICAgICAkZGVm YXVsdHNbJG5hbWVdID0gJGFyclsmIzM5O3ZhbCYjMzk7XTsKICAgIHJldHVybiAkZGVmYXVs dHM7Cn08L3ByZT4KCjxwPkZvciBlYWNoIHByZWZlcmVuY2UsIDxjb2RlPnZhbDwvY29kZT4g aXMgdGhlIGRlZmF1bHQgdmFsdWUsIGFuZCA8Y29kZT5odG1sPC9jb2RlPiBpcyB0aGUgdHlw ZSBvZiA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gaW5wdXQgZWxlbWVudCB1c2Vk IHRvIGRpc3BsYXkgdGhlIHByZWZlcmVuY2UgaW4gdGhlIGFkbWluIGludGVyZmFjZTsgdGhl c2UgZ28gdG8gdGhlIGNvcnJlc3BvbmRpbmcgY29sdW1ucyBpbiA8Y29kZT50eHBfcHJlZnM8 L2NvZGU+LiA8Y29kZT50ZXh0PC9jb2RlPiBpcyB0aGUgbGFiZWwgdGhhdCB3aWxsIGFwcGVh ciBpbiB0aGUgYWRtaW4gaW50ZXJmYWNlOyBpdCBpcyBub3Qgc3RvcmVkIGluIHRoZSBkYXRh YmFzZS48L3A+Cgo8cD5QcmVmZXJlbmNlIG5hbWVzIGluIHRoZSBkYXRhYmFzZSBhcmUgaW4g dGhlIGZvcm1hdCAmIzgyMjA7cGx1Z2luX25hbWUua2V5JiM4MjIxOywgd2hlcmUgJiM4MjIw O3BsdWdpbl9uYW1lJiM4MjIxOyBpcyB5b3VyIHBsdWdpbiYjODIxNztzIG5hbWUsIGFuZCAm IzgyMjA7a2V5JiM4MjIxOyBpcyB0aGUgYXJyYXkga2V5IGZyb20gdGhlIDxjb2RlPiRkZWZh dWx0czwvY29kZT4gYXJyYXkuPC9wPgoKPHA+RWFjaCBwcmVmZXJlbmNlIHdpbGwgYmUgYXNz aWduZWQgYSBwb3NpdGlvbiB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIGl0cyBwb3NpdGlvbiBp biB0aGUgZGVmYXVsdHMgYXJyYXksIHN0YXJ0aW5nIGF0IDAuIFRoaXMgZGV0ZXJtaW5lcyBp dHMgcmVsYXRpdmUgb3JkZXIgaW4gdGhlIGFkbWluIGludGVyZmFjZS48L3A+Cgo8cD5PdGhl ciA8Y29kZT50eHBfcHJlZnM8L2NvZGU+IGNvbHVtbnMgYXJlIHNldCBhcyBmb2xsb3dzOjxi ciAvPgo8dWw+Cgk8bGk+PGNvZGU+ZXZlbnQ8L2NvZGU+IGlzIGFsd2F5cyBzZXQgdG8gJiM4 MjIwO3BsdWdpbl9wcmVmcyYjODIyMTs8L2xpPgoJPGxpPjxjb2RlPnByZWZzX2lkPC9jb2Rl PiBpcyBhbHdheXMgc2V0IHRvIDxjb2RlPjE8L2NvZGU+PC9saT4KCTxsaT48Y29kZT50eXBl PC9jb2RlPiBpcyBhbHdheXMgc2V0IHRvIDxjb2RlPjI8L2NvZGU+IChoaWRkZW4gZnJvbSBt YWluIFByZWZzIHBhZ2UpPC9saT48YnIgLz4KPC91bD48L3A+Cgo8cD5BZGQgdGhlIHByZWZz IGNhbGxiYWNrOjwvcD4KCjxwcmU+ZnVuY3Rpb24gYWJjX215X3BsdWdpbl9wcmVmcyggJGV2 ZW50LCAkc3RlcCApIHsKICAgIGlmICggZnVuY3Rpb25fZXhpc3RzKCYjMzk7c29vX3BsdWdp bl9wcmVmJiMzOTspICkKICAgICAgICBzb29fcGx1Z2luX3ByZWYoJGV2ZW50LCAkc3RlcCwg YWJjX215X3BsdWdpbl9kZWZhdWx0cygpKTsKICAgIGVsc2UgewogICAgICAgIC8vIGFueSBj dXN0b20gcHJlZmVyZW5jZSBoYW5kbGluZyBnb2VzIGhlcmUKICAgIH0KfTwvcHJlPgoKPHA+ SWYgbm90aGluZyBlbHNlLCB5b3Ugc2hvdWxkIGRpc3BsYXkgYSBtZXNzYWdlIGZvciBhIDxj b2RlPnBsdWdpbl9wcmVmcy5hYmNfbXlfcGx1Z2luPC9jb2RlPiBldmVudCBpZiA8c3Ryb25n PnNvb19wbHVnaW5fcHJlZjwvc3Ryb25nPiBpcyBub3QgaW5zdGFsbGVkLiBUaGUgdmVyc2lv biBiZWxvdyBjaGVja3MgdGhlIGV2ZW50IHR5cGUsIHRoZW4gYXR0ZW1wdHMgdG8gY29iYmxl IHRvZ2V0aGVyIGEgbWVhbmluZ2Z1bCBtZXNzYWdlIHVzaW5nIDxjb2RlPmdUeHQoKTwvY29k ZT4gZnJhZ21lbnRzOjwvcD4KCjxwcmU+ZnVuY3Rpb24gYWJjX215X3BsdWdpbl9wcmVmcygg JGV2ZW50LCAkc3RlcCApIHsKICAgIGlmICggZnVuY3Rpb25fZXhpc3RzKCYjMzk7c29vX3Bs dWdpbl9wcmVmJiMzOTspICkKICAgICAgICByZXR1cm4gc29vX3BsdWdpbl9wcmVmKCRldmVu dCwgJHN0ZXAsIGFiY19teV9wbHVnaW5fZGVmYXVsdHMoKSk7CiAgICBpZiAoIHN1YnN0cigk ZXZlbnQsIDAsIDEyKSA9PSAmIzM5O3BsdWdpbl9wcmVmcyYjMzk7ICkgewogICAgICAgICRw bHVnaW4gPSBzdWJzdHIoJGV2ZW50LCAxMyk7CiAgICAgICAgJG1lc3NhZ2UgPSAmIzM5OyZs dDtwJmd0OyZsdDticiAvJmd0OyZsdDtzdHJvbmcmZ3Q7JiMzOTsgLiBnVHh0KCYjMzk7ZWRp dCYjMzk7KSAuICZxdW90OyAkcGx1Z2luICZxdW90OyAuCiAgICAgICAgICAgIGdUeHQoJiMz OTtlZGl0X3ByZWZlcmVuY2VzJiMzOTspIC4gJiMzOTs6Jmx0Oy9zdHJvbmcmZ3Q7Jmx0O2Jy IC8mZ3Q7JiMzOTsgLgogICAgICAgICAgICBnVHh0KCYjMzk7aW5zdGFsbF9wbHVnaW4mIzM5 OykgLiAmIzM5OyAmbHQ7YQogICAgICAgICAgICBocmVmPSZxdW90O2h0dHA6Ly9pcHNlZGl4 aXQubmV0L3R4cC85Mi9zb29fcGx1Z2luX3ByZWYmcXVvdDsmZ3Q7c29vX3BsdWdpbl9wcmVm Jmx0Oy9hJmd0OyZsdDsvcCZndDsmIzM5OzsKICAgICAgICBwYWdldG9wKGdUeHQoJiMzOTtl ZGl0X3ByZWZlcmVuY2VzJiMzOTspIC4gJnF1b3Q7ICZhbXA7IzgyNTA7ICRwbHVnaW4mcXVv dDssICRtZXNzYWdlKTsKICAgIH0KfTwvcHJlPgoKPHA+RmluYWxseSwgZmV0Y2ggdGhlIHBs dWdpbiBwcmVmZXJlbmNlcyBmb3IgdXNlIGJ5IHRoZSByZXN0IG9mIHRoZSBwbHVnaW4gY29k ZS4gSSB1c3VhbGx5IHB1dCBwcmVmZXJlbmNlcyBpbnRvIGEgZ2xvYmFsIGFycmF5OjwvcD4K CjxwcmU+Z2xvYmFsICRhYmNfbXlfcGx1Z2luOwokYWJjX215X3BsdWdpbiA9IGZ1bmN0aW9u X2V4aXN0cygmIzM5O3Nvb19wbHVnaW5fcHJlZl92YWxzJiMzOTspID8KICAgIGFycmF5X21l cmdlKGFiY19teV9wbHVnaW5fZGVmYXVsdHModHJ1ZSksIHNvb19wbHVnaW5fcHJlZl92YWxz KCYjMzk7YWJjX215X3BsdWdpbiYjMzk7KSkKICAgIDogYWJjX215X3BsdWdpbl9kZWZhdWx0 cyh0cnVlKTs8L3ByZT4KCjxwPk5vdGUgdGhlIHVzZSBvZiA8Y29kZT5zb29fcGx1Z2luX3By ZWZfdmFscygpPC9jb2RlPiwgd2hpY2ggcmV0dXJucyB5b3VyIHBsdWdpbiYjODIxNztzIHBy ZWZlcmVuY2VzIGFzIGFuIGFzc29jaWF0aXZlIGFycmF5LjwvcD4KCjxwPlRoZXJlIGFyZSB2 YXJpb3VzIHdheXMgeW91IGNhbiBjb2RlIHRoZSBhYm92ZSByZXF1aXJlbWVudHMsIGRlcGVu ZGluZyBvbiB5b3VyIHBsdWdpbiYjODIxNztzIGV4YWN0IG5lZWRzLiBTb21lIHdvcmtpbmcg ZXhhbXBsZXM6PC9wPgoKPHVsPgoJPGxpPjxhIGhyZWY9Imh0dHA6Ly9pcHNlZGl4aXQubmV0 L3R4cC83NC9zb29fcmVxdWlyZWRfZmlsZXMiPnNvb19yZXF1aXJlZF9maWxlczwvYT4sIGEg cHVibGljLXNpZGUgcGx1Z2luPC9saT4KCTxsaT48YSBocmVmPSJodHRwOi8vaXBzZWRpeGl0 Lm5ldC90eHAvMTI0L3Nvb19lZGl0YXJlYSI+c29vX2VkaXRhcmVhPC9hPiwgYW4gYWRtaW4t c2lkZSBwbHVnaW48L2xpPgo8L3VsPgoKCjxoMyBpZD0ibGltaXRhdGlvbnMiPkxpbWl0YXRp b25zPC9oMz4KCjx1bD4KCTxsaT5DdXJyZW50bHkgdGhlIG9ubHkgYWxsb3dlZCB2YWx1ZXMg Zm9yIDxjb2RlPmh0bWw8L2NvZGU+IGFyZSA8Y29kZT50ZXh0X2lucHV0PC9jb2RlPiBhbmQg PGNvZGU+eWVzbm9yYWRpbzwvY29kZT4uPC9saT4KCTxsaT48c3Ryb25nPnNvb19wbHVnaW5f cHJlZjwvc3Ryb25nPiBvbmx5IGhhbmRsZXMgZ2xvYmFsIHByZWZlcmVuY2VzLiBJZiB5b3Vy IHBsdWdpbiBoYXMgYSBtaXggb2YgZ2xvYmFsIGFuZCBwZXItdXNlciBwcmVmZXJlbmNlcywg eW91IHdpbGwgaGF2ZSB0byBjb2RlIGFsbCB0aGUgaGFuZGxpbmcgb2YgdGhlIHBlci11c2Vy IHByZWZlcmVuY2VzLjwvbGk+Cgk8bGk+UHJlZmVyZW5jZXMgYXJlIG9ubHkgaW5zdGFsbGVk IG9uIGVuYWJsaW5nIGEgcGx1Z2luLiBVcGdyYWRpbmcgYW4gZW5hYmxlZCBwbHVnaW4gZG9l cyBub3QgdHJpZ2dlciA8c3Ryb25nPnNvb19wbHVnaW5fcHJlZjwvc3Ryb25nPiB0byBpbnN0 YWxsIGFueSBwcmVmZXJlbmNlcyBuZXcgdG8gdGhlIHVwZ3JhZGVkIHZlcnNpb24uIFRoZSB1 c2VyIG11c3QgZGlzYWJsZSBhbmQgcmUtZW5hYmxlIGl0IHRvIHBpY2sgdXAgdGhlIG5ldyBw cmVmcy4gUGx1Z2luIGF1dGhvcnMgc2hvdWxkIGluY2x1ZGUgYSBub3RlIGFib3V0IHRoaXMg d2hlbiByZWxlYXNpbmcgYSBuZXcgdmVyc2lvbiB3aXRoIG5ldyBwcmVmcy48L2xpPgo8L3Vs PgoKPGgyIGlkPSJoaXN0b3J5Ij5WZXJzaW9uIEhpc3Rvcnk8L2gyPgoKPGg0PjAuMi4zICgy MDE3LTAyLTIzKTwvaDQ+Cgo8cD5Eb2N1bWVudGF0aW9uIHVwZGF0ZTwvcD4KCjxoMz4wLjIu MiAoOS8yOC8yMDA5KTwvaDM+Cgo8cD5GaXhlZCBidWcgaW4gcHJlZiBwb3NpdGlvbiByZS1p bmRleGluZzwvcD4KCjxoMz4wLjIuMSAoOS8yNi8yMDA5KTwvaDM+Cgo8dWw+Cgk8bGk+UHJl LWluc3RhbGxpbmcgPHN0cm9uZz5zb29fcGx1Z2luX3ByZWY8L3N0cm9uZz4gaXMgbm8gbG9u Z2VyIHJlcXVpcmVkIGZvciBhdXRvbWF0aWMgcHJlZmVyZW5jZSBpbnN0YWxsYXRpb248L2xp PgoJPGxpPkVhY2ggcHJlZmVyZW5jZSBpcyBub3cgYXNzaWduZWQgYSBwb3NpdGlvbiB2YWx1 ZSB0aGF0IGRldGVybWluZXMgcmVsYXRpdmUgb3JkZXIgaW4gdGhlIGFkbWluIGludGVyZmFj ZSwgYW5kIHRoYXQgY29ycmVzcG9uZHMgdG8gaXRzIHBvc2l0aW9uIGluIHRoZSBkZWZhdWx0 cyBhcnJheTwvbGk+CjwvdWw+Cgo8aDM+MC4yICg5LzE3LzIwMDkpPC9oMz4KCjxwPlRoaXMg dmVyc2lvbiB1c2VzIGEgZGlmZmVyZW50IGlkZW50aWZ5aW5nIHNjaGVtZSBmb3IgcHJlZmVy ZW5jZXMgYW5kIGhlbmNlIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIHByZXZpb3VzIHZl cnNpb24uIFRoZSBwbHVnaW4gbmFtZSBpcyBubyBsb25nZXIgc3RvcmVkIGluIHRoZSA8Y29k ZT5ldmVudDwvY29kZT4gY29sdW1uLCBzbyB0aGVyZSBpcyBubyBsb25nZXIgYW55IHJlc3Ry aWN0aW9uIG9uIHBsdWdpbiBuYW1lIGxlbmd0aC48L3A+Cgo8aDM+MC4xICg5LzUvMjAwOSk8 L2gzPgoKPHA+QmFzaWMgcGx1Z2luIHByZWZlcmVuY2UgbWFuYWdlbWVudDo8L3A+Cgo8dWw+ Cgk8bGk+QXV0b21hdGljIGluc3RhbGxhdGlvbi9yZW1vdmFsIG9mIHByZWZlcmVuY2VzIG9u IHBsdWdpbiBpbnN0YWxsL2RlbGV0aW9uPC9saT4KCTxsaT5TaW1wbGUgYWRtaW4gaW50ZXJm YWNlIGZvciBzZXR0aW5nIHByZWZlcmVuY2VzPC9saT4KPC91bD4iO3M6NDoiY29kZSI7czoz ODIwOiIKLy8gZXZlbnQgaGFuZGxlciBjYWxsZWQgYnkgb3RoZXIgcGx1Z2lucyBvbiBwbHVn aW5fbGlmZWN5Y2xlIGFuZCBwbHVnaW5fcHJlZnMgZXZlbnRzCmZ1bmN0aW9uIHNvb19wbHVn aW5fcHJlZiggJGV2ZW50LCAkc3RlcCwgJGRlZmF1bHRzICkgewogICAgcHJlZ19tYXRjaCgn L14oLispXC4oLispLycsICRldmVudCwgJG1hdGNoKTsKICAgIGxpc3QoICwgJHR5cGUsICRw bHVnaW4pID0gJG1hdGNoOwogICAgJG1lc3NhZ2UgPSAkc3RlcCA/IHNvb19wbHVnaW5fcHJl Zl9xdWVyeSgkcGx1Z2luLCAkc3RlcCwgJGRlZmF1bHRzKTogJyc7CiAgICBpZiAoICR0eXBl ID09ICdwbHVnaW5fcHJlZnMnICkKICAgICAgICBzb29fcGx1Z2luX3ByZWZfdWkoJHBsdWdp biwgJGRlZmF1bHRzLCAkbWVzc2FnZSk7Cn0KCi8vIHVzZXIgaW50ZXJmYWNlIGZvciBwcmVm ZXJlbmNlIHNldHRpbmcgKHBsdWdpbl9wcmVmcyBldmVudHMpCmZ1bmN0aW9uIHNvb19wbHVn aW5fcHJlZl91aSggJHBsdWdpbiwgJGRlZmF1bHRzLCAkbWVzc2FnZSA9ICcnICkgewogICAg JGNvbHMgPSAyOwogICAgJGFsaWduX3JtID0gJyBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDt2 ZXJ0aWNhbC1hbGlnbjptaWRkbGUiJzsKICAgICRwcmVmcyA9IHNvb19wbHVnaW5fcHJlZl9x dWVyeSgkcGx1Z2luLCAnc2VsZWN0Jyk7CgogICAgLy8gaW5zdGFsbCBwcmVmcyBpZiBuZWNl c3NhcnkKICAgIGlmICggJGRlZmF1bHRzIGFuZCAhICRwcmVmcyApIHsKICAgICAgICBzb29f cGx1Z2luX3ByZWZfcXVlcnkoJHBsdWdpbiwgJ2VuYWJsZWQnLCAkZGVmYXVsdHMpOwogICAg ICAgICRwcmVmcyA9IHNvb19wbHVnaW5fcHJlZl9xdWVyeSgkcGx1Z2luLCAnc2VsZWN0Jyk7 CiAgICB9CgogICAgcGFnZXRvcChnVHh0KCdlZGl0X3ByZWZlcmVuY2VzJykgLiAiICYjODI1 MDsgJHBsdWdpbiIsICRtZXNzYWdlKTsKICAgIGVjaG8KICAgICAgICBuLiAnPGZvcm0gbWV0 aG9kPSJwb3N0IiBuYW1lPSJzb29fcGx1Z2luX3ByZWZfZm9ybSI+JyAuCiAgICAgICAgbi4g c3RhcnRUYWJsZSgnbGlzdCcpIC4KICAgICAgICAgICAgdHIobi4gdGRjcyhoZWQoCiAgICAg ICAgICAgICAgICBnVHh0KCdwbHVnaW4nKSAuJyAnLiBnVHh0KCdlZGl0X3ByZWZlcmVuY2Vz JykgLiAiOiAkcGx1Z2luIgogICAgICAgICAgICAgICAgLCAxKSwKICAgICAgICAgICAgJGNv bHMpKQogICAgOwoKICAgIGZvcmVhY2ggKCAkcHJlZnMgYXMgJHByZWYgKSB7CiAgICAgICAg ZXh0cmFjdCgkcHJlZik7CiAgICAgICAgJG5hbWUgPSBzdHJfcmVwbGFjZSgiJHBsdWdpbi4i LCAnJywgJG5hbWUpOwogICAgICAgICRpbnB1dCA9ICRodG1sID09ICd5ZXNub3JhZGlvJyA/ CiAgICAgICAgICAgIHllc25vUmFkaW8oJG5hbWUsICR2YWwpIDoKICAgICAgICAgICAgZklu cHV0KCd0ZXh0JywgJG5hbWUsICR2YWwsICdlZGl0JywgJycsICcnLCAyMCk7CiAgICAgICAg ZWNobwogICAgICAgICAgICBuLiB0cigKICAgICAgICAgICAgbi50LiB0ZGEoJGRlZmF1bHRz WyRuYW1lXVsndGV4dCddLCAkYWxpZ25fcm0pIC4KICAgICAgICAgICAgbi4gdGQoJGlucHV0 KQogICAgICAgICk7CiAgICB9CgogICAgZWNobwogICAgICAgIG4uIHNJbnB1dCgndXBkYXRl JykgLgogICAgICAgIG4uIGVJbnB1dCgicGx1Z2luX3ByZWZzLiRwbHVnaW4iKSAuCiAgICAg ICAgbi4gdHIobi4gdGRjcyhmSW5wdXQoJ3N1Ym1pdCcsICdzb29fcGx1Z2luX3ByZWZfdXBk YXRlJywKICAgICAgICAgICAgZ1R4dCgnc2F2ZScpLCAncHVibGlzaCcpLCAkY29scykpIC4K ICAgICAgICB0cihuLiB0ZGNzKGhyZWYoCiAgICAgICAgICAgIGdUeHQoJ2dvX3RvJykgLicg Jy4gZ1R4dCgncGx1Z2lucycpIC4nICcuIGdUeHQoJ2xpc3QnKQogICAgICAgICAgICAsICc/ ZXZlbnQ9cGx1Z2luJykKICAgICAgICAgICAgLCRjb2xzKSkgLgogICAgICAgIGVuZFRhYmxl KCkgLiAnPC9mb3JtPicgLgogICAgICAgIG47Cn0KCi8vIHByZWZlcmVuY2UgQ1JVRApmdW5j dGlvbiBzb29fcGx1Z2luX3ByZWZfcXVlcnkoICRwbHVnaW4sICRhY3Rpb24sICRkZWZhdWx0 cyA9IGFycmF5KCkgKSB7CgogICAgaWYgKCAkYWN0aW9uID09ICdzZWxlY3QnICkKICAgICAg ICByZXR1cm4gc2FmZV9yb3dzKAogICAgICAgICAgICAnbmFtZSwgdmFsLCBodG1sLCBwb3Np dGlvbicsCiAgICAgICAgICAgICd0eHBfcHJlZnMnLAogICAgICAgICAgICAibmFtZSBsaWtl ICckcGx1Z2luLiUnIG9yZGVyIGJ5IHBvc2l0aW9uIGFzYyIKICAgICAgICApOwoKICAgIGVs c2VpZiAoICRhY3Rpb24gPT0gJ3VwZGF0ZScgKSB7CiAgICAgICAgJHBvc3QgPSBkb1NsYXNo KHN0cmlwUG9zdCgpKTsKICAgICAgICAkYWxsb3dlZCA9IGFycmF5X2tleXMoc29vX3BsdWdp bl9wcmVmX3ZhbHMoJHBsdWdpbikpOwogICAgICAgIGZvcmVhY2ggKCAkcG9zdCBhcyAkbmFt ZSA9PiAkdmFsICkKICAgICAgICAgICAgaWYgKCBpbl9hcnJheSgkbmFtZSwgJGFsbG93ZWQp ICkKICAgICAgICAgICAgICAgIGlmICggISBzZXRfcHJlZigiJHBsdWdpbi4kbmFtZSIsICR2 YWwpICkKICAgICAgICAgICAgICAgICAgICAkZXJyb3IgPSB0cnVlOwogICAgICAgIHJldHVy biBlbXB0eSgkZXJyb3IpID8gZ1R4dCgncHJlZmVyZW5jZXNfc2F2ZWQnKSA6ICcnOwogICAg fQoKICAgIGVsc2VpZiAoICRhY3Rpb24gPT0gJ2VuYWJsZWQnICkgewogICAgICAgICRwcmVm cyA9IHNvb19wbHVnaW5fcHJlZl92YWxzKCRwbHVnaW4pOwogICAgICAgICRhZGQgPSBhcnJh eV9kaWZmX2tleSgkZGVmYXVsdHMsICRwcmVmcyk7CiAgICAgICAgJHJlbW92ZSA9IGFycmF5 X2RpZmZfa2V5KCRwcmVmcywgJGRlZmF1bHRzKTsKICAgICAgICBmb3JlYWNoICggJGFkZCBh cyAkbmFtZSA9PiAkcHJlZiApCiAgICAgICAgICAgIHNldF9wcmVmKAogICAgICAgICAgICAg ICAgJHBsdWdpbiAuICcuJyAuICRuYW1lLAogICAgICAgICAgICAgICAgJHByZWZbJ3ZhbCdd LAogICAgICAgICAgICAgICAgJ3BsdWdpbl9wcmVmcycsCiAgICAgICAgICAgICAgICAyLAog ICAgICAgICAgICAgICAgJHByZWZbJ2h0bWwnXQogICAgICAgICAgICApOwogICAgICAgIGZv cmVhY2ggKCAkcmVtb3ZlIGFzICRuYW1lID0+ICR2YWwgKQogICAgICAgICAgICBzYWZlX2Rl bGV0ZSgndHhwX3ByZWZzJywgIm5hbWUgPSAnJHBsdWdpbi4kbmFtZSciKTsKCiAgICAgICAg Ly8gdXBkYXRlIHBvc2l0aW9uIHZhbHVlcwogICAgICAgIGZvcmVhY2ggKCBhcnJheV9rZXlz KCRkZWZhdWx0cykgYXMgJGkgPT4gJG5hbWUgKQogICAgICAgICAgICBzYWZlX3VwZGF0ZSgn dHhwX3ByZWZzJywKICAgICAgICAgICAgICAgICJwb3NpdGlvbiA9ICRpIiwKICAgICAgICAg ICAgICAgICJuYW1lID0gJyRwbHVnaW4uJG5hbWUnIik7CiAgICB9CgogICAgZWxzZWlmICgg JGFjdGlvbiA9PSAnZGVsZXRlZCcgKQogICAgICAgIHNhZmVfZGVsZXRlKCd0eHBfcHJlZnMn LCAibmFtZSBsaWtlICckcGx1Z2luLiUnIik7Cn0KCi8vIGdldCBhIHBsdWdpbidzIHByZWZz OyByZXR1cm4gYXMgYXNzb2NpYXRpdmUgbmFtZTp2YWx1ZSBhcnJheQpmdW5jdGlvbiBzb29f cGx1Z2luX3ByZWZfdmFscyggJHBsdWdpbiApIHsKICAgICRycyA9IHNvb19wbHVnaW5fcHJl Zl9xdWVyeSgkcGx1Z2luLCAnc2VsZWN0Jyk7CiAgICBmb3JlYWNoICggJHJzIGFzICRyICkg ewogICAgICAgIGV4dHJhY3QgKCRyKTsKICAgICAgICAkbmFtZSA9IHN0cl9yZXBsYWNlKCIk cGx1Z2luLiIsICcnLCAkbmFtZSk7CiAgICAgICAgJG91dFskbmFtZV0gPSAkdmFsOwogICAg fQogICAgcmV0dXJuIGlzc2V0KCRvdXQpID8gJG91dCA6IGFycmF5KCk7Cn0KIjtzOjQ6InR5 cGUiO3M6MToiMiI7czo1OiJmbGFncyI7czoxOiIwIjtzOjU6Im9yZGVyIjtzOjE6IjEiO3M6 MzoibWQ1IjtzOjMyOiIyOGE0ZThlYTFiOTUwOWI4ODQ3ZjkzY2IzN2Q4Zjk2ZSI7fQ==