# Name: smd_faux_role v0.1 # Type: Admin only plugin # Switch user privs on the fly so you can see what other accounts see # Author: Stef Dawson # URL: http://stefdawson.com/ # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjEzOiJzbWRfZmF1eF9yb2xlIjtzOjY6ImF1dGhvciI7czox MToiU3RlZiBEYXdzb24iO3M6MTA6ImF1dGhvcl91cmkiO3M6MjI6Imh0dHA6Ly9zdGVmZGF3 c29uLmNvbS8iO3M6NzoidmVyc2lvbiI7czozOiIwLjEiO3M6MTE6ImRlc2NyaXB0aW9uIjtz OjY3OiJTd2l0Y2ggdXNlciBwcml2cyBvbiB0aGUgZmx5IHNvIHlvdSBjYW4gc2VlIHdoYXQg b3RoZXIgYWNjb3VudHMgc2VlIjtzOjQ6ImhlbHAiO3M6NTIxNzoiPGRpdiBpZD0ic21kX2hl bHAiPgoKCTxoMSBpZD0idG9wIj5zbWRfZmF1eF9yb2xlPC9oMT4KCgk8cD5BbHRlciB1c2Vy IHByaXZzIGF0IGFueSB0aW1lIHNvIHlvdSBjYW4gZXhwZXJpZW5jZSB0aGUgYWRtaW4gc2lk ZSBhcyBvdGhlciB1c2VycyBzZWUgaXQuPC9wPgoKCTxoMiBpZD0iYXV0aG9yIj5BdXRob3I8 L2gyPgoKCTxwPjxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9jb250YWN0Ij5TdGVm IERhd3NvbjwvYT4uIEZvciBvdGhlciBzb2Z0d2FyZSBieSBtZSwgb3IgdG8gbWFrZSBhIGRv bmF0aW9uLCBzZWUgdGhlIDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9zdyI+c29m dHdhcmUgcGFnZTwvYT4uPC9wPgoKCTxoMiBpZD0iaW5zdGFsbCI+SW5zdGFsbGF0aW9uIC8g VW5pbnN0YWxsYXRpb248L2gyPgoKCTxwIGNsYXNzPSJpbXBvcnRhbnQiPlJlcXVpcmVzIDxz cGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IDQuMi4wKzwvcD4KCgk8cD5Eb3dubG9hZCB0 aGUgcGx1Z2luIGZyb20gZWl0aGVyIDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5vcmcv cGx1Z2lucy8xMTU5L3NtZF9mYXV4X3JvbGUiPnRleHRwYXR0ZXJuLm9yZzwvYT4sIG9yIHRo ZSBzb2Z0d2FyZSBwYWdlIGFib3ZlLCBwYXN0ZSB0aGUgY29kZSBpbnRvIHRoZSA8c3BhbiBj bGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBBZG1pbiAtJmd0OyBQbHVnaW5zIHBhbmUsIGluc3Rh bGwgYW5kIGVuYWJsZSB0aGUgcGx1Z2luLiBWaXNpdCB0aGUgPGEgaHJlZj0iaHR0cDovL2Zv cnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP2lkPTMzNDYyIj5mb3J1bSB0aHJl YWQ8L2E+IGZvciBtb3JlIGluZm8gb3IgdG8gcmVwb3J0IG9uIHRoZSBzdWNjZXNzIG9yIG90 aGVyd2lzZSBvZiB0aGUgcGx1Z2luLjwvcD4KCgk8cD5UbyByZW1vdmUgdGhlIHBsdWdpbiwg c2ltcGx5IGRlbGV0ZSBpdCBmcm9tIHRoZSBBZG1pbi0mZ3Q7UGx1Z2lucyB0YWIuIFdoZW5l dmVyIHlvdSBkZWxldGUgb3IgZGlzYWJsZSB0aGUgcGx1Z2luIHRoZSBub21pbmF0ZWQgYWNj b3VudHMgYXJlIGFsbCBhdXRvbWF0aWNhbGx5IHJlc3RvcmVkIHRvIFB1Ymxpc2hlci48L3A+ CgoJPGgyIGlkPSJ1c2FnZSI+VXNhZ2U8L2gyPgoKCTxwPkZvciBzZWN1cml0eSByZWFzb25z IHlvdSBtdXN0IGVkaXQgdGhlIHBsdWdpbiBjb2RlIGJlZm9yZSB1c2luZyBpdC4gWW91IGNh biBjdXN0b21pc2UgdHdvIHBhcmFtZXRlcnM6PC9wPgoKCTxoMyBpZD0idXNlcnMiPlVzZXJz PC9oMz4KCgk8cD5BbHRlciB0aGUgZm9sbG93aW5nIGxpbmUgdG8gcmVwcmVzZW50IHRoZSB1 c2VyIChsb2dpbikgbmFtZSBvciBuYW1lcyBvZiB5b3VyIG1haW4gUHVibGlzaGVyIGFjY291 bnQocyk6PC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+CSRz bWRfZmF1eF9wdWJsaXNoX3VzZXIgPSAmIzM5OyYjMzk7Owo8L2NvZGU+PC9wcmU+CgoJPHA+ Rm9yIGV4YW1wbGUsIGlmIHlvdXIgbWFpbiBwdWJsaXNoZXIgbG9naW4gd2FzIDxjb2RlPkZy ZWQ8L2NvZGU+LCB5b3Ugd291bGQgY2hhbmdlIHRoYXQgbGluZSB0byByZWFkOjwvcD4KCjxw cmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPgkkc21kX2ZhdXhfcHVibGlz aF91c2VyID0gJiMzOTtGcmVkJiMzOTs7CjwvY29kZT48L3ByZT4KCgk8cD5JZiB5b3Ugd2Fu dGVkIHRvIGFsbG93IHR3byB1c2VycyAmIzgyMTI7IEZyZWQgYW5kIERhcGhuZSAmIzgyMTI7 IHRvIGFsdGVyIHRoZWlyIHByaXZzLCBzcGVjaWZ5IHRoZW0gbGlrZSB0aGlzOjwvcD4KCjxw cmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPgkkc21kX2ZhdXhfcHVibGlz aF91c2VyID0gJiMzOTtGcmVkLCBEYXBobmUmIzM5OzsKPC9jb2RlPjwvcHJlPgoKCTxwPk9u Y2UgdGhhdCBpcyBkb25lLCBzYXZlIHRoZSBwbHVnaW4uIEEgbmV3IHRhYiB3aWxsIGFwcGVh ciB1bmRlciA8ZW0+QWRtaW4tJmd0O1N3aXRjaCByb2xlPC9lbT4gd2hlbiB5b3UgYXJlIGxv Z2dlZCBpbiBhcyBvbmUgb2YgdGhlIG5vbWluYXRlZCBhY2NvdW50cy4gVXNlIHRoZSBkcm9w ZG93biB0byBzZXQgdGhpcyB1c2VyJiM4MjE3O3MgcHJpdnMgbGV2ZWwuIEl0IGRvZXMgdGhp cyBkaXJlY3RseSBhbmQgcGVybWFuZW50bHkgaW4gdGhlIGRhdGFiYXNlLjwvcD4KCgk8cD5Q bGVhc2Ugbm90ZTo8L3A+CgoJPHVsPgoJCTxsaT5Mb2dpbiBuYW1lcyBhcmUgY2FzZS1zZW5z aXRpdmU8L2xpPgoJCTxsaT5QdWJsaXNoZXIgcHJpdnMgd2lsbCBiZSByZXN0b3JlZCB0byA8 c3Ryb25nPmFsbCBub21pbmF0ZWQgYWNjb3VudHM8L3N0cm9uZz4gd2hlbiB0aGUgcGx1Z2lu IGlzIGVpdGhlciBkaXNhYmxlZCBvciBkZWxldGVkPC9saT4KCTwvdWw+CgoJPGgzIGlkPSJw b3NpdGlvbiI+RHJvcGRvd24gcG9zaXRpb248L2gzPgoKCTxwPkFsdGVyIHRoZSBmb2xsb3dp bmcgbGluZSB0byBkZXRlcm1pbmUgd2hlcmUgeW91IHdhbnQgdGhlIGRyb3Bkb3duIHRvIGFw cGVhciBmb3IgYWxsIG5vbWluYXRlZCB1c2Vyczo8L3A+Cgo8cHJlIGNsYXNzPSJibG9jayI+ PGNvZGUgY2xhc3M9ImJsb2NrIj4JJHNtZF9mYXV4X3Bvc2l0aW9uID0gJiMzOTswJiMzOTs7 CjwvY29kZT48L3ByZT4KCgk8cD5JZiB5b3Ugc2V0IGl0IHRvIDAsIHRoZSBkcm9wZG93biB3 aWxsIGFwcGVhciBpbiBpdHMgb3duIHRhYiB1bmRlciA8ZW0+QWRtaW4tJmd0O1N3aXRjaCBy b2xlPC9lbT4uIElmIHlvdSBzZXQgaXQgdG8gYW55dGhpbmcgZWxzZSwgdGhlIHBsdWdpbiBh c3N1bWVzIHlvdSBhcmUgZGVmaW5pbmcgdGhlIHggYW5kIHkgY28tb3JkaW5hdGVzIG9mIHRo ZSBzY3JlZW4gbG9jYXRpb24gYXQgd2hpY2ggeW91IHdpc2ggdGhlIGRyb3Bkb3duIHRvIGFw cGVhciBpbiB0aGUgaW50ZXJmYWNlICYjODIxMjsgb24gYWxsIHRhYnMuPC9wPgoKCTxwPkZv ciBleGFtcGxlLCB0byBzZXQgdGhlIGRyb3Bkb3duIHRvIGFwcGVhciBvbiB0aGUgdG9wIGJh ciAoaW4gdGhlIGNsYXNzaWMgdGhlbWUgYXQgbGVhc3QpIGF0IDcwMHB4IGZyb20gdGhlIGxl ZnQgZWRnZSBvZiB0aGUgc2NyZWVuOjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBj bGFzcz0iYmxvY2siPgkkc21kX2ZhdXhfcG9zaXRpb24gPSAmIzM5OzcwMCYjMzk7Owo8L2Nv ZGU+PC9wcmU+CgoJPHA+VG8gc2V0IGl0IHRvIGFwcGVhciBhdCA3NTAgcGl4ZWxzIGZyb20g dGhlIGxlZnQgYW5kIDcyIHBpeGVscyBmcm9tIHRoZSB0b3A6PC9wPgoKPHByZSBjbGFzcz0i YmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+CSRzbWRfZmF1eF9wb3NpdGlvbiA9ICYjMzk7 NzUwLCA3MiYjMzk7Owo8L2NvZGU+PC9wcmU+CgoJPHA+QWx0aG91Z2ggdGhlIGRyb3Bkb3du IGlzIGFic29sdXRlbHkgcG9zaXRpb25lZCAoc28gaXQgd29uJiM4MjE3O3QgaW50ZXJmZXJl IHdpdGggeW91ciBhZG1pbiBzaWRlIGxheW91dCkgbm8gZ3VhcmFudGVlIGlzIG1hZGUgdGhh dCBpdCB3aWxsIGFwcGVhciBjb3JyZWN0bHkgaW4gdGhlbWVzIG90aGVyIHRoYW4gY2xhc3Np YyBhbmQgcmVtb3JhIGJlY2F1c2UgaXQgZGVwZW5kcyBob3cgdGhlIGF1dGhvciBoYXMgZGVz aWduZWQgdGhlIGhlYWRlci4gRXhwZXJpbWVudCB0byBmaW5kIHRoZSBiZXN0IGxvY2F0aW9u LiBZb3UgbWF5IHVzZSBuZWdhdGl2ZSB2YWx1ZXMgaWYgcmVxdWlyZWQuPC9wPgoKPC9kaXY+ CjwhLS0gKioqIEJFR0lOIFBMVUdJTiBDU1MgKioqIC0tPgo8c3R5bGUgdHlwZT0idGV4dC9j c3MiPgojc21kX2hlbHAgeyBsaW5lLWhlaWdodDoxLjUgO30KI3NtZF9oZWxwIGNvZGUgeyBm b250LXdlaWdodDpib2xkOyBmb250OiAxMDUlLzEzMCUgIkNvdXJpZXIgTmV3IiwgY291cmll ciwgbW9ub3NwYWNlOyBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkNDO30KI3NtZF9oZWxwIGNv ZGUuYmxvY2sgeyBmb250LXdlaWdodDpub3JtYWw7IGJvcmRlcjoxcHggZG90dGVkICM5OTk7 IGJhY2tncm91bmQtY29sb3I6ICNmMGU2OGM7IGRpc3BsYXk6YmxvY2s7IG1hcmdpbjoxMHB4 IDEwcHggMjBweDsgcGFkZGluZzoxMHB4OyB9CiNzbWRfaGVscCBhOmxpbmssICNzbWRfaGVs cCBhOnZpc2l0ZWQgeyBjb2xvcjogIzAwYzsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBib3Jk ZXItYm90dG9tOiAxcHggc29saWQgYmx1ZTsgcGFkZGluZy1ib3R0b206MXB4O30KI3NtZF9o ZWxwIGE6aG92ZXIsICNzbWRfaGVscCBhOmFjdGl2ZSB7IGNvbG9yOiBibHVlOyB0ZXh0LWRl Y29yYXRpb246IG5vbmU7IGJvcmRlci1ib3R0b206IDJweCBzb2xpZCBibHVlOyBwYWRkaW5n LWJvdHRvbToxcHg7fQojc21kX2hlbHAgaDEgeyBjb2xvcjogIzM2OTsgZm9udDogMjBweCBH ZW9yZ2lhLCBzYW5zLXNlcmlmOyBtYXJnaW46IDA7IHRleHQtYWxpZ246IGNlbnRlcjsgfQoj c21kX2hlbHAgaDIgeyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7IHBhZGRpbmc6 MTBweCAwIDA7IGNvbG9yOiAjMzY5OyBmb250OiAxN3B4IEdlb3JnaWEsIHNhbnMtc2VyaWY7 IH0KI3NtZF9oZWxwIGgzIHsgY29sb3I6ICMwNzk7IGZvbnQ6IGJvbGQgMTJweCBBcmlhbCwg c2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDFweDsgbWFyZ2luOiAxMHB4IDAgMDt0ZXh0 LXRyYW5zZm9ybTogdXBwZXJjYXNlOyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30KI3Nt ZF9oZWxwIGg0IHsgZm9udDogYm9sZCAxMXB4IEFyaWFsLCBzYW5zLXNlcmlmOyBsZXR0ZXIt c3BhY2luZzogMXB4OyBtYXJnaW46IDEwcHggMCAwIDt0ZXh0LXRyYW5zZm9ybTogdXBwZXJj YXNlOyB9CiNzbWRfaGVscCAuYXRubSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IGNvbG9yOiMzM2Q7 IH0KI3NtZF9oZWxwIC5tYW5kIHsgYmFja2dyb3VuZDojZWVlOyBib3JkZXI6MXB4IGRvdHRl ZCAjOTk5OyB9CiNzbWRfaGVscCB0YWJsZSB7d2lkdGg6OTAlOyB0ZXh0LWFsaWduOmNlbnRl cjsgcGFkZGluZy1ib3R0b206MWVtO30KI3NtZF9oZWxwIHRkLCAjc21kX2hlbHAgdGgge2Jv cmRlcjoxcHggc29saWQgIzk5OTsgcGFkZGluZzouNWVtIDA7fQojc21kX2hlbHAgdWwgeyBs aXN0LXN0eWxlLXR5cGU6c3F1YXJlOyB9CiNzbWRfaGVscCAuaW1wb3J0YW50IHtjb2xvcjpy ZWQ7fQojc21kX2hlbHAgbGkgeyBtYXJnaW46NXB4IDIwcHggNXB4IDMwcHg7IH0KI3NtZF9o ZWxwIC5icmVhayB7IG1hcmdpbi10b3A6NXB4OyB9Cjwvc3R5bGU+CjwhLS0gKioqIEVORCBQ TFVHSU4gQ1NTICoqKiAtLT4KIjtzOjQ6ImNvZGUiO3M6NDcyMToiaWYgKEB0eHBpbnRlcmZh Y2UgPT0gJ2FkbWluJykgew0KCWdsb2JhbCAkdHhwX3VzZXIsICRzbWRfZmF1eF9wdWJsaXNo X3VzZXIsICRzbWRfZmF1eF9wb3NpdGlvbiwgJHNtZF9wcml2czsNCg0KCS8vIFBVVCBZT1VS IFNVUEVSLVVTRVIgTE9HSU4gTkFNRShTKSBJTlNJREUgVEhFICcnIChDQVNFIFNFTlNJVElW RSkuDQoJLy8gQ09NTUEtU0VQQVJBVEUgVEhFIExJU1QgT0YgTkFNRVMuDQoJJHNtZF9mYXV4 X3B1Ymxpc2hfdXNlciA9ICcnOw0KDQoJLy8gRFJPUERPV04gTE9DQVRJT04uIFNFVCBUSElT IFRPOg0KCS8vICAqIDAgSUYgWU9VIFdBTlQgQU4gQURNSU4tPlNXSVRDSCBST0xFIFRBQiBX SVRIIFRIRSBEUk9QRE9XTiBJTiBJVC4NCgkvLyAgKiBBTlkgT1RIRVIgVkFMVUUoUykgU1BF Q0lGWSBXSEVSRSBZT1UgV0FOVCBUSEUgRFJPUERPV04gVE8gQVBQRUFSIElOIEEgRklYRUQg TE9DQVRJT04gT04gVEhFIFNDUkVFTg0KCS8vICAgIC0tPiBUSEUgVkFMVUUgSVMgVEhFIE5V TUJFUiBPRiBQSVhFTFMgRlJPTSBUSEUgTEVGVCAmIFRPUCBFREdFUywgZS5nLiAnODAwJyBv ciAnNzUwLDcyJy4NCgkkc21kX2ZhdXhfcG9zaXRpb24gPSAnMCc7DQoNCgkvLyBET04nVCBU T1VDSCBBTllUSElORyBCRUxPVyBUSElTIExJTkUhDQoJJHNtZF9wcml2cyA9IGFycmF5KA0K CQkxID0+IGdUeHQoJ3B1Ymxpc2hlcicpLA0KCQkyID0+IGdUeHQoJ21hbmFnaW5nX2VkaXRv cicpLA0KCQkzID0+IGdUeHQoJ2NvcHlfZWRpdG9yJyksDQoJCTQgPT4gZ1R4dCgnc3RhZmZf d3JpdGVyJyksDQoJCTUgPT4gZ1R4dCgnZnJlZWxhbmNlcicpLA0KCQk2ID0+IGdUeHQoJ2Rl c2lnbmVyJyksDQoJKTsNCg0KCWlmIChpbl9saXN0KCR0eHBfdXNlciwgJHNtZF9mYXV4X3B1 Ymxpc2hfdXNlcikpIHsNCgkJaWYgKCRzbWRfZmF1eF9wb3NpdGlvbikgew0KCQkJLy8gQWRk IHRoZSBkcm9wZG93biB0byB0aGUgdG9wIGJhcg0KCQkJcmVnaXN0ZXJfY2FsbGJhY2soJ3Nt ZF9mYXV4X2dvJywgJ2FkbWluX3NpZGUnLCAnaGVhZGVyJyk7DQoJCX0gZWxzZSB7DQoJCQkv LyBBZGQgdGhlIGludGVyZmFjZSB0byB0aGUgQWRtaW4gdGFiIHNpbmNlIHRoYXQncyB2aXNp YmxlIHRvIGFsbCB1c2Vycw0KCQkJYWRkX3ByaXZzKCdzbWRfZmF1eF9yb2xlJywgJzEsMiwz LDQsNSw2Jyk7DQoJCQlyZWdpc3Rlcl90YWIoJ2FkbWluJywgJ3NtZF9mYXV4X3JvbGUnLCBz bWRfZmF1eF9nVHh0KCd0YWJfbmFtZScpKTsNCgkJCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRf ZmF1eF9yb2xlJywgJ3NtZF9mYXV4X3JvbGUnKTsNCgkJfQ0KCQlyZWdpc3Rlcl9jYWxsYmFj aygnc21kX2ZhdXhfcGx1Z2luX29mZicsICdwbHVnaW5fbGlmZWN5Y2xlLnNtZF9mYXV4X3Jv bGUnLCAnZGlzYWJsZWQnKTsNCgkJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9mYXV4X3BsdWdp bl9vZmYnLCAncGx1Z2luX2xpZmVjeWNsZS5zbWRfZmF1eF9yb2xlJywgJ2RlbGV0ZWQnKTsN Cgl9DQp9DQoNCi8vIFBsdWdpbiBqdW1wLW9mZiBwb2ludA0KZnVuY3Rpb24gc21kX2ZhdXhf cm9sZSgkZXZlbnQsICRzdGVwKSB7DQoJaWYoISRzdGVwIG9yICFpbl9hcnJheSgkc3RlcCwg YXJyYXkoDQoJCSdzbWRfZmF1eF9wcmVmcycsDQoJCSdzbWRfZmF1eF9zYXZlJywNCgkpKSkg ew0KCQlzbWRfZmF1eF9wcmVmcygpOw0KCX0gZWxzZSAkc3RlcCgpOw0KfQ0KDQovLyBBbGxv dyByb2xlIHRvIGJlIGFsdGVyZWQgdmlhIGRyb3Bkb3duIG9uIGl0cyBvd24gdGFiLi4uDQpm dW5jdGlvbiBzbWRfZmF1eF9wcmVmcygkbXNnPScnKSB7DQoJJG1zZyA9IChlbXB0eSgkbXNn KSkgPyBncHMoJ3NtZF9mYXV4X21zZycpIDogJG1zZzsNCg0KCXBhZ2V0b3Aoc21kX2ZhdXhf Z1R4dCgndGFiX25hbWUnKSwgJG1zZyk7DQoJZWNobyBzbWRfZmF1eF9kcm9wZG93bigpOw0K fQ0KDQovLyAuLi5vciBwb3NpdGlvbiB0aGUgZHJvcGRvd24gb24gdGhlIHRvcCByb3cNCmZ1 bmN0aW9uIHNtZF9mYXV4X2dvKCRldmVudCwgJHN0ZXAsICRkYXRhKSB7DQoJZ2xvYmFsICRz bWRfZmF1eF9wb3NpdGlvbjsNCg0KCXNtZF9mYXV4X3NhdmUoKTsNCgkkcG9zID0gZG9fbGlz dCgkc21kX2ZhdXhfcG9zaXRpb24pOw0KCSRsZWZ0ID0gKGlzc2V0KCRwb3NbMF0pICYmIGlz X251bWVyaWMoJHBvc1swXSkpID8gJHBvc1swXSA6IDA7DQoJJHRvcCA9IChpc3NldCgkcG9z WzFdKSAmJiBpc19udW1lcmljKCRwb3NbMV0pKSA/ICRwb3NbMV0gOiAwOw0KCXJldHVybiAn PGRpdiBpZD0ic21kX2ZhdXhfZ28iIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oicu JGxlZnQuJ3B4O3RvcDonLiR0b3AuJ3B4OyI+Jy5zbWRfZmF1eF9kcm9wZG93bigpLic8L2Rp dj4nLiRkYXRhOw0KfQ0KDQovLyBSZW5kZXIgdGhlIGRyb3Bkb3duDQpmdW5jdGlvbiBzbWRf ZmF1eF9kcm9wZG93bigpIHsNCglnbG9iYWwgJHR4cF91c2VyLCAkc21kX2ZhdXhfcHVibGlz aF91c2VyLCAkc21kX2ZhdXhfcG9zaXRpb24sICRzbWRfcHJpdnM7DQoNCgkkdXNlcmxpc3Qg PSBkb19saXN0KCRzbWRfZmF1eF9wdWJsaXNoX3VzZXIpOw0KCSRvdXQgPSAnJzsNCg0KCWZv cmVhY2ggKCR1c2VybGlzdCBhcyAkdGhlVXNlcikgew0KCQlpZiAoJHR4cF91c2VyID09ICR0 aGVVc2VyKSB7DQoJCQkkY3Vycl9wcml2cyA9IHNhZmVfZmllbGQoInByaXZzIiwgInR4cF91 c2VycyIsICJuYW1lID0gJyIuZG9TbGFzaCgkdGhlVXNlcikuIiciKTsNCgkJCSRvdXQgPSBm b3JtKA0KCQkJCSc8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlciI+Jy5zbWRfZmF1eF9n VHh0KCdzZXRfdXNlcicsIGFycmF5KCd7bmFtZX0nID0+ICR0aGVVc2VyKSkNCgkJCQkuIHNl bGVjdElucHV0KCdzbWRfZmF1eF9wcml2JywgJHNtZF9wcml2cywgJGN1cnJfcHJpdnMsICcn LCAxKQ0KCQkJCS4oKCRzbWRfZmF1eF9wb3NpdGlvbikgPyBlSW5wdXQoZ3BzKCdldmVudCcp KS5zSW5wdXQoZ3BzKCdzdGVwJykpIDogZUlucHV0KCdzbWRfZmF1eF9yb2xlJykuc0lucHV0 KCdzbWRfZmF1eF9zYXZlJykpDQoJCQkJLmhJbnB1dCgnc21kX2ZhdXhfdXNlcicsICR0aGVV c2VyKQ0KCQkJCS4gJzwvZGl2PicNCgkJCQkpOw0KCQl9DQoJfQ0KCXJldHVybiAkb3V0Ow0K fQ0KDQovLyBVcGRhdGUgdGhlIHVzZXIgcHJpdnMgaW4gdGhlIGRhdGFiYXNlIHdoZW4gdGhl IHNlbGVjdCBsaXN0IGlzIGFsdGVyZWQNCmZ1bmN0aW9uIHNtZF9mYXV4X3NhdmUoKSB7DQoJ Z2xvYmFsICRzbWRfcHJpdnMsICRzbWRfZmF1eF9wb3NpdGlvbjsNCg0KCSRwcml2ID0gZ3Bz KCdzbWRfZmF1eF9wcml2Jyk7DQoJJHVuYW1lID0gZG9TbGFzaChncHMoJ3NtZF9mYXV4X3Vz ZXInKSk7DQoJJG1zZyA9ICcnOw0KDQoJaWYgKCRwcml2ICYmICR1bmFtZSkgew0KCQlhc3Nl cnRfaW50KCRwcml2KTsNCgkJJGNoZWNrID0gc2FmZV9maWVsZCgnbmFtZScsICd0eHBfdXNl cnMnLCAibmFtZT0nJHVuYW1lJyIpOw0KDQoJCS8vIEFsdGVyIHRoZSBwcml2cyBvZiB0aGUg bm9taW5hdGVkIHN1cGVyLXVzZXINCgkJaWYgKCRjaGVjaykgew0KCQkJc2FmZV91cGRhdGUo J3R4cF91c2VycycsICdwcml2cz0nLmRvU2xhc2goJHByaXYpLCAibmFtZSA9ICciLiR1bmFt ZS4iJyIpOw0KCQkJJG1zZyA9IHNtZF9mYXV4X2dUeHQoJ25ld19yb2xlJywgYXJyYXkoJ3tu YW1lfScgPT4gJHVuYW1lLCAne3JvbGV9JyA9PiAkc21kX3ByaXZzWyRwcml2XSkpOw0KCQl9 IGVsc2Ugew0KCQkJJG1zZyA9IHNtZF9mYXV4X2dUeHQoJ2JhZF91c2VyJywgYXJyYXkoJ3tu YW1lfScgPT4gJHVuYW1lKSk7DQoJCX0NCg0KCQlpZiAoJHNtZF9mYXV4X3Bvc2l0aW9uKSB7 DQoJCQloZWFkZXIoIkxvY2F0aW9uOiAiLiRfU0VSVkVSWydIVFRQX1JFRkVSRVInXSk7DQoJ CX0gZWxzZSB7DQoJCQkkYXJnc1snZXZlbnQnXSA9ICdzbWRfZmF1eF9yb2xlJzsNCgkJCSRh cmdzWydzdGVwJ10gPSAnc21kX2ZhdXhfcHJlZnMnOw0KCQkJJGFyZ3NbJ3NtZF9mYXV4X21z ZyddID0gJG1zZzsNCgkJCWhlYWRlcigiTG9jYXRpb246ICIuJF9TRVJWRVJbJ1JFUVVFU1Rf VVJJJ10uc3RyX3JlcGxhY2UoJyZhbXA7JywgJyYnLCBqb2luX3FzKCRhcmdzKSkpOw0KCQl9 DQoJfQ0KfQ0KDQovLyBSZXN0b3JlIHB1Ymxpc2hlciBwcml2cyBpZiBwbHVnaW4gaXMgZGVs ZXRlZC9kaXNhYmxlZA0KZnVuY3Rpb24gc21kX2ZhdXhfcGx1Z2luX29mZigkZXZlbnQsICRz dGVwKSB7DQoJZ2xvYmFsICRzbWRfZmF1eF9wdWJsaXNoX3VzZXI7DQoNCgkkdXNlcmxpc3Qg PSBkb19saXN0KCRzbWRfZmF1eF9wdWJsaXNoX3VzZXIpOw0KDQoJZm9yZWFjaCAoJHVzZXJs aXN0IGFzICR0aGVVc2VyKSB7DQoJCXNhZmVfdXBkYXRlKCd0eHBfdXNlcnMnLCAncHJpdnM9 MScsICJuYW1lID0gJyIuZG9TbGFzaCgkdGhlVXNlcikuIiciKTsNCgl9DQp9DQoNCi8vIFBs dWdpbi1zcGVjaWZpYyByZXBsYWNlbWVudCBzdHJpbmdzIC0gbG9jYWxpc2UgYXMgcmVxdWly ZWQNCmZ1bmN0aW9uIHNtZF9mYXV4X2dUeHQoJHdoYXQsICRhdHRzID0gYXJyYXkoKSkgew0K CSRsYW5nID0gYXJyYXkoDQoJCSdiYWRfdXNlcicgPT4gJ05vIHN1Y2ggdXNlcjoge25hbWV9 JywNCgkJJ25ld19yb2xlJyA9PiAnTmV3IHJvbGUgZm9yIHtuYW1lfSBpcyB7cm9sZX0nLA0K CQknc2V0X3VzZXInID0+ICdTZXQgdXNlciB7bmFtZX0gdG86ICcsDQoJCSd0YWJfbmFtZScg PT4gJ1N3aXRjaCByb2xlJywNCgkpOw0KCXJldHVybiBzdHJ0cigkbGFuZ1skd2hhdF0sICRh dHRzKTsNCn0iO3M6NDoidHlwZSI7czoxOiIzIjtzOjU6ImZsYWdzIjtzOjE6IjIiO3M6NToi b3JkZXIiO3M6MToiNSI7czozOiJtZDUiO3M6MzI6IjRjOGI1MGRjYTg3ODQzZTNiZjVkMDc0 ZTUwZDI2OGU5Ijt9