# smd_random_banner 0.15a # Random image by category with a few extra advertising options # Stef Dawson # http://www.stefdawson.com/ # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YTo5OntzOjQ6Im5hbWUiO3M6MTc6InNtZF9yYW5kb21fYmFubmVyIjtzOjY6ImF1dGhvciI7czoxMToiU3RlZiBEYXdzb24iO3M6MTA6ImF1dGhvcl91cmkiO3M6MjY6Imh0dHA6Ly93d3cuc3RlZmRhd3Nvbi5jb20vIjtzOjc6InZlcnNpb24iO3M6NToiMC4xNWEiO3M6MTE6ImRlc2NyaXB0aW9uIjtzOjYxOiJSYW5kb20gaW1hZ2UgYnkgY2F0ZWdvcnkgd2l0aCBhIGZldyBleHRyYSBhZHZlcnRpc2luZyBvcHRpb25zIjtzOjQ6ImhlbHAiO3M6ODIwMjoiPGI+QmFzaWMgaWRlYTwvYj4NCg0KPHA+QmFzZWQgc2hhbWVsZXNzbHkgb24gZHJ1X3JhbmRvbV9pbWFnZSAodGhhbmtzISkgdGhpcyBwbHVnaW4gZXh0ZW5kcyB0aGUgaWRlYSBhIGxpdHRsZS4gVGhlIGNvbmNlcHQgaXM6IHdoYXQgaWYgeW91IHdhbnQgdG8gYWR2ZXJ0aXNlIG90aGVyIHBhcnRzIG9mIHlvdXIgc2l0ZSAoZS5nLiBvdGhlciBwcm9kdWN0cy9zZXJ2aWNlcykgdXNpbmcgYSBiYW5uZXIgYWQ/IFlvdSB3YW50IGFuIGltYWdlL2FuaW1hdGVkIGdpZi93aGF0ZXZlciB0byBhZHZlcnRpc2UgdGhlIHByb2R1Y3Qgb3Igc2VydmljZSBhbmQgd2hlbiBwZW9wbGUgY2xpY2sgb24gaXQsIGJlIHRha2VuIHRvIHRoZSBjb3JyZWN0IHBhcnQgb2YgdGhlIHNpdGUuIFRoaXMgY291bGQgb2YgY291cnNlIGJlIHVzZWQgZm9yIGxpbmtzIHRvIGV4dGVybmFsIHNpdGVzIGlmIHlvdSB3aXNoLg0KDQo8cD5JbiBpdHMgYmFzZSBmb3JtLCB0aGlzIHBsdWdpbiBmdW5jdGlvbnMgZXhhY3RseSBhcyBkcnVfcmFuZG9tX2ltYWdlLiBTbzo8L3A+DQoNCjxjb2RlPiZsdDt0eHA6c21kX3JhbmRvbV9iYW5uZXIgLyZndDs8L2NvZGU+DQoNCjxwPmNob29zZXMgYSByYW5kb20gaW1hZ2UgZnJvbSBhbGwgaW1hZ2VzIHVwbG9hZGVkIHZpYSB0ZXh0cGF0dGVybidzIGltYWdlIGludGVyZmFjZS48L3A+DQoNCjxjb2RlPiZsdDt0eHA6c21kX3JhbmRvbV9iYW5uZXIgY2F0ZWdvcnk9ImJhbm5lcnMiIC8mZ3Q7PC9jb2RlPg0KDQo8cD5jaG9vc2VzIGEgcmFuZG9tIGltYWdlIGZyb20gYWxsIGltYWdlcyBpbiB0aGUgJ2Jhbm5lcnMnIGNhdGVnb3J5LiBJZiBhdCBhbnkgcG9pbnQsIHRoZSBwYXJ0aWN1bGFyIG9wdGlvbnMgcmVzdWx0IGluIG1hdGNoaW5nIG5vIGltYWdlcywgdGhlIHBsdWdpbiB3aWxsIHJldHVybiBub3RoaW5nLiBUaGlzIGlzIHNvIHlvdSBjYW4gdXNlIHBsdWdpbnMgc3VjaCBhcyBDb2tlIEhhcnJpbmd0b24ncyBleGNlbGxlbnQgY2hoX2lmX2RhdGEgdG8gZGV0ZWN0IHRoaXMgYW5kIGJyYW5jaCB0byBhICJkZWZhdWx0IiBpbWFnZSBvciBzb21ldGhpbmcuPC9wPg0KDQo8cD5BbHRlcm5hdGl2ZWx5LCBpZiB5b3UgYWx3YXlzIHdhbnQgYSBwaWN0dXJlIHRvIGJlIGRpc3BsYXllZCBubyBtYXR0ZXIgd2hhdCwgc3BlY2lmeSB0aGUgPGNvZGU+YWx3YXlzX2Rpc3BsYXk9IjEiPC9jb2RlPiBwYXJhbWV0ZXIuIEluIHRoZSBldmVudCBvZiBubyBtYXRjaGVzIGJlaW5nIGZvdW5kLCB0aGUgcGx1Z2luIHdpbGwgdHJ5IGFnYWluIGp1c3QgZnJvbSB0aGUgZ2l2ZW4gY2F0ZWdvcnkgKGlmIHN1cHBsaWVkKSBvciBmcm9tIHRoZSB3aG9sZSBwb29sIG9mIGltYWdlcyBvdGhlcndpc2UuPC9wPg0KDQo8Yj5BZGp1c3RpbmcgcmFuZG9tbmVzczwvYj4NCg0KPHA+Tm93IGNvbWVzIHRoZSBmdW4gcGFydC4gV2hhdCBpZiB5b3Ugb25seSB3YW50IGltYWdlcyB0byBhcHBlYXIgdGhhdCBoYXZlIHBhcnRpY3VsYXIgd29yZHMgaW4gdGhlaXIgZmlsZW5hbWU/IChvciBBbHQgVGV4dCAtIHNlZSBvcHRpb24gPGNvZGU+dXNlX2FsdDwvY29kZT4gYmVsb3cpIEZvciBleGFtcGxlLCBpZiB5b3UgaGFkIGEgem9vIHdlYnNpdGUgYW5kIG9ubHkgd2FudGVkIHBpY3R1cmVzIG9mIGxpb25zIHRvIGFwcGVhciBvbiB0aGUgTGlvbnMgcGFnZS48L3A+DQoNCjxwPk9yLCBjb252ZXJzZWx5LCB3aGF0IGlmIHlvdSA8aT5kb24ndDwvaT4gd2FudCBhIGJhbm5lciB0byBhcHBlYXIgdGhhdCBhZHZlcnRpc2VzIHRoZSBwcm9kdWN0IHlvdXIgY3VzdG9tZXIgaXMgYWxyZWFkeSBsb29raW5nIGF0PyBJdCBsb29rcyBhIGJpdCBzdHJhbmdlIHRvIGhhdmUgYW4gYWR2ZXJ0IGZvciAicHJvZHVjdEEiIG9uIGEgcGFnZSBhYm91dCAicHJvZHVjdEEiISBUaGF0J3Mgd2hlcmUgdGhlIG5leHQgdGhyZWUgb3B0aW9ucyBjb21lIGluOiA8Y29kZT5tYXRjaF90ZXh0PC9jb2RlPiwgPGNvZGU+YXZvaWRfdGV4dDwvY29kZT4gYW5kIDxjb2RlPmxvb2tfaW48L2NvZGU+LjwvcD4NCg0KPHA+V2hhdCB0aGVzZSBkbyBpcyBjb21wYXJlIHRoZSBmaWxlbmFtZSBvZiB5b3VyIGJhbm5lciBpbWFnZSB0byBzb21lIHRleHQgYW5kIGlmIGl0IG1hdGNoZXMsIHRoYXQgcGFydGljdWxhciBpbWFnZSB3aWxsIGVpdGhlciBiZSBkaXNwbGF5ZWQgKG1hdGNoX3RleHQpIG9yIDxpPm5vdDwvaT4gZGlzcGxheWVkIChhdm9pZF90ZXh0KS4gU29tZSBleGFtcGxlczo8L3A+DQoNCjxjb2RlPiZsdDt0eHA6c21kX3JhbmRvbV9iYW5uZXIgY2F0ZWdvcnk9ImJhbm5lcnMiIG1hdGNoX3RleHQ9InBlbmd1aW4iIC8mZ3Q7PC9jb2RlPg0KDQo8cD5UaGF0IHdpbGwgY2hvb3NlIGEgcmFuZG9tIGltYWdlIGZyb20gYWxsIGltYWdlcyBpbiB0aGUgJ2Jhbm5lcnMnIGNhdGVnb3J5IHRoYXQgaGF2ZSB0aGUgd29yZCAicGVuZ3VpbiIgaW4gdGhlaXIgdGl0bGUuPC9wPg0KDQo8Y29kZT4mbHQ7dHhwOnNtZF9yYW5kb21fYmFubmVyIGNhdGVnb3J5PSJiYW5uZXJzIiBhdm9pZF90ZXh0PSJwcm9kdWN0MSIgLyZndDs8L2NvZGU+DQoNCjxwPlRoYXQgd2lsbCBjaG9vc2UgYSByYW5kb20gaW1hZ2UgZnJvbSBhbGwgaW1hZ2VzIGluIHRoZSAnYmFubmVycycgY2F0ZWdvcnkgYnV0IGlnbm9yZXMgYW55IGltYWdlIGZpbGVuYW1lcyB0aGF0IGNvbnRhaW4gdGhlIHRleHQgJ3Byb2R1Y3QxJy4gVGhpcyBpcyB1c2VmdWwgaWYgeW91IGhhZCBtb3JlIHRoYW4gb25lIGJhbm5lciBwZXIgcHJvZHVjdCBsaWtlOjwvcD4NCjx1bD4NCjxsaT5iYW5uZXJfcHJvZHVjdDFfQS5qcGc8L2xpPg0KPGxpPmJhbm5lcl9wcm9kdWN0MV9CLmpwZzwvbGk+DQo8bGk+YmFubmVyX3Byb2R1Y3QyX0EuanBnPC9saT4NCjxsaT4uLi48L2xpPg0KPC91bD4NCg0KPHA+YXMgaXQgd291bGQgZXhjbHVkZSBhbGwgb2YgcHJvZHVjdDEncyBpbWFnZXMuIEJvdGggb3B0aW9ucyBjYW4gYWxzbyB0YWtlIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygd29yZHMgdG8gaWdub3JlLCBlLmcuIDxjb2RlPm1hdGNoX3RleHQ9ImxsYW1hLHBlbmd1aW4iPC9jb2RlPiBvciA8Y29kZT5hdm9pZF90ZXh0PSJwcm9kdWN0MSxwcm9kdWN0Mixwcm9kdWN0OCI8L2NvZGU+IE5vdGU6IG5vIHNwYWNlcyBhcm91bmQgdGhlIGNvbW1hcyE8L3A+DQoNCjxwPlRoZXNlIG9wdGlvbnMgY2FuIGJlIHVzZWQgaW4gdGFuZGVtIHRvIGNyZWF0ZSBzb21lIGNyYXp5IGJyYWluLWJlbmRpbmcgY29tYmluYXRpb25zLjwvcD4NCg0KPGI+V2hhdCBhYm91dCBhbHQgdGV4dD88L2I+DQoNCjxwPklmIHlvdSd2ZSBhbHJlYWR5IGxvYWRlZCBhbGwgeW91ciBpbWFnZXMgYW5kIHRoZSBwcm9zcGVjdCBvZiBnb2luZyB0aHJvdWdoIHRoZW0gdG8gY3JlYXRlIGEgbmFtaW5nIGNvbnZlbnRpb24gaXMgZGF1bnRpbmcsIHRyeSBhZGRpbmcgdGhlIDxjb2RlPnVzZV9hbHQ9IjEiPC9jb2RlPiBvcHRpb24gKCcxJyBpcyBhIGNvbnZlbmllbmNlLCBpdCBjb3VsZCBiZSBhbnl0aGluZyByZWFsbHkpLiBUaGVuLCBpbnN0ZWFkIG9mIGxvb2tpbmcgaW4gdGhlIGltYWdlIGZpbGVuYW1lLCBpdCB3aWxsIGxvb2sgaW4gdGhlIGltYWdlJ3MgJ0FsdCBUZXh0JyBmb3Igd29yZHMgdG8gbWF0Y2gvZXhjbHVkZS48L3A+DQoNCjxiPkdldHRpbmcgd2lsZDwvYj4NCg0KPHA+Tm93IHRoaW5ncyBnZXQgZXZlbiBtb3JlIHdhcnBlZC4gU2luY2UgeW91IG9mdGVuIGRvbid0IGtub3cgd2hpY2ggcHJvZHVjdCBwYWdlIHlvdXIgY3VzdG9tZXJzIHdpbGwgbG9vayBhdCwgeW91IGNhbiB1c2UgdGhlIHNwZWNpYWwgd2lsZGNhcmQgIj8iIGFzIGFuIG9wdGlvbiBpbiB5b3VyIGxpc3Qgb2Ygd29yZHMgdG8gbWF0Y2ggb3IgYXZvaWQuIFdoYXQgdGhpcyBkb2VzIGlzIGxvb2sgYXQgdGhlIGN1cnJlbnQgc2VjdGlvbiBuYW1lIG9mIHRoZSBwYWdlIGJlaW5nIGRpc3BsYXllZCBhbmQgdXNlIHRoYXQgYXMgb25lIG9mIHlvdXIgaWdub3JlIHdvcmRzLiBTbyBpZiBhIHBlcnNvbiB3YXMgb24gcGFnZSA8Y29kZT53d3cubWVnYXpvby5jb20vbGlvbnMvdGhlLWh1bWJsZS1saW9uPC9jb2RlPiBhbmQgdGhlIHBsdWdpbiB3YXMgY2FsbGVkIHRodXM6PC9wPg0KDQo8Y29kZT4mbHQ7dHhwOnNtZF9yYW5kb21fYmFubmVyIGNhdGVnb3J5PSJiYW5uZXJzIiBtYXRjaF90ZXh0PSI/IiAvJmd0OzwvY29kZT4NCg0KPHA+YW55IGltYWdlIG5hbWUgaW4gdGhlICJiYW5uZXJzIiBjYXRlZ29yeSB0aGF0IGhhZCB0aGUgdGV4dCAibGlvbnMiIGluIGl0IHdvdWxkIGJlIGZhaXIgZ2FtZSBmb3IgYXBwZWFyaW5nIG9uIHRoZSBwYWdlLiBBZ2FpbiwgeW91IGNhbiBkbyB0aGUgcmV2ZXJzZSBieSB1c2luZyBhdm9pZF90ZXh0OjwvcD4NCg0KPGNvZGU+Jmx0O3R4cDpzbWRfcmFuZG9tX2Jhbm5lciBjYXRlZ29yeT0iYmFubmVycyIgYXZvaWRfdGV4dD0iPyIgLyZndDs8L2NvZGU+DQoNCjxwPlRoaXMgbWVhbnMgdGhhdCBpZiB5b3UgYXJyYW5nZSB5b3VyIHNpdGUgc3VjaCB0aGF0IGVhY2ggcHJvZHVjdCBoYXMgYSBzZXBhcmF0ZSBzZWN0aW9uLCB5b3UgY2FuIHRoZW4gbmFtZSB5b3VyIGJhbm5lciBpbWFnZXMgKG9yIGFsdCB0ZXh0KSBpbiBzdWNoIGEgd2F5IHRoYXQgY2VydGFpbiBpbWFnZXMgd29uJ3QgYmUgZGlzcGxheWVkIHdoZW4gYSB1c2VyIHZpc2l0cyBhIHBhcnRpY3VsYXIgc2VjdGlvbi48L3A+DQoNCjxwPllvdSBjYW4gdXNlIHRoZSAiPyIgaW4gYWRkaXRpb24gdG8gYSBsaXN0IG9mIHdvcmRzIGlmIHlvdSBsaWtlLCBhbmQgbWl4IGJvdGggPGNvZGU+bWF0Y2hfdGV4dDwvY29kZT4gYW5kIDxjb2RlPmF2b2lkX3RleHQ8L2NvZGU+IHVudGlsIHlvdXIgYnJhaW4gZXhwbG9kZXMuPC9wPg0KDQo8Yj5Mb29raW5nIGFyb3VuZDwvYj4NCg0KPHA+QnkgZGVmYXVsdCwgdGhlICI/IiBtZWFucyB0aGUgcGx1Z2luIHdpbGwgbG9vayBhdCB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBzZWN0aW9uIGZvciBhIG1hdGNoL2V4Y2x1c2lvbi4gSWYgeW91IHdhbnQgdG8gY2hhbmdlIHRoYXQsIHlvdSBoYXZlIHRoZSBjaG9pY2Ugb2YgZ2l2aW5nIHRoZSA8Y29kZT5sb29rX2luPC9jb2RlPiBvcHRpb24uIFRoaXMgZm9yY2VzIHRoZSBwbHVnaW4gdG8gbG9vayBmb3IgYSBtYXRjaCBzb21ld2hlcmUgZWxzZSBpbiB0aGUgVVJMLjwvcD4NCg0KPHA+VGhlIGN1cnJlbnQgb3B0aW9ucyBhdmFpbGFibGUgYXJlICJjYXRlZ29yeSIsICJzZWN0aW9uIiBvciAidGl0bGUiOyB0aGUgJ3RpdGxlJyBpbiB0aGlzIGNhc2UgaXMgdGhlIG5hbWUgb2YgdGhlIGFydGljbGUgaXRzZWxmLiBGb3IgZXhhbXBsZTo8L3A+DQoNCjxjb2RlPiZsdDt0eHA6c21kX3JhbmRvbV9iYW5uZXIgY2F0ZWdvcnk9ImJhbm5lcnMiIG1hdGNoX3RleHQ9Ij8iIGxvb2tfaW49InRpdGxlIiAvJmd0OzwvY29kZT4NCg0KPHA+d291bGQgbG9vayBhdCBqdXN0IHRoZSBhcnRpY2xlJ3MgdGl0bGUgYW5kIGNvbXBhcmUgaXQgdG8gdGhlIGltYWdlIG5hbWVzLiBJbiBvdXIgZXhhbXBsZSBVUkwgYWJvdmUsIGlmIHRoZXJlIHdhcyBhbiBpbWFnZSBpbiB0aGUgImJhbm5lcnMiIGNhdGVnb3J5IHdoaWNoIGhhZCA8Y29kZT50aGUtaHVtYmxlLWxpb248L2NvZGU+IGluIGl0cyBuYW1lLCBpdCB3b3VsZCBhcHBlYXIgb24gYW55IHBhZ2UgdGhhdCBoYWQgYSBVUkwgd2l0aCBhIHRpdGxlIGNvbnRhaW5pbmcgPGNvZGU+dGhlLWh1bWJsZS1saW9uPC9jb2RlPi4gSWYgeW91IGluc3RlYWQgdXNlZDo8L3A+DQoNCjxjb2RlPiZsdDt0eHA6c21kX3JhbmRvbV9iYW5uZXIgY2F0ZWdvcnk9ImJhbm5lcnMiIG1hdGNoX3RleHQ9Ij8iIGxvb2tfaW49InRpdGxlLHNlY3Rpb24iIC8mZ3Q7PC9jb2RlPg0KDQo8cD5pdCB3b3VsZCBpbmNsdWRlIGFueSBpbWFnZSBuYW1lcyB0aGF0IGhhZCBlaXRoZXIgImxpb25zIiBvciAidGhlLWh1bWJsZS1saW9uIiBpbiB0aGVtLiBOb3RlIHRoYXQgaWYgeW91IHNwZWNpZnkgYSA8Y29kZT5sb29rX2luPC9jb2RlPiBwYXJhbWV0ZXIgeW91IG11c3Qgc3BlY2lmeSBldmVyeSBwbGFjZSB0byBsb29rIGluOyBpdCBvbmx5IGFzc3VtZXMgInNlY3Rpb24iIGlmIHlvdSBtaXNzIG91dCB0aGUgPGNvZGU+bG9va19pbjwvY29kZT4gcGFyYW1ldGVyIGVudGlyZWx5LjwvcD4NCg0KPHA+QWxzbyBiZSBhd2FyZSB0aGF0IGlmIHlvdSBzcGVjaWZ5ICJ0aXRsZSIgYXMgYSBwbGFjZSB0byA8Y29kZT5sb29rX2luPC9jb2RlPiBhbmQgdGhlIHBlcnNvbiBpcyBzdXJmaW5nIGEgcGFnZSB0aGF0IGNvbnRhaW5zIGEgbGlzdCBvZiBhcnRpY2xlcyBvbmx5LCB0aGUgdGl0bGUgcGFyYW1ldGVyIHdpbGwgYmUgaWdub3JlZC48L3A+DQoNCjxiPkxpbmtpbmcgdGhlIGltYWdlPC9iPg0KDQo8cD5UaGUgZmluYWwgcGllY2Ugb2YgdGhlIHB1enpsZSBpcyB0byBkaXJlY3QgcGVvcGxlIHRvIGEgd2ViIGxpbmsgd2hlbiB0aGV5IGNsaWNrIG9uIHRoZSBpbWFnZS4gU2luY2UgdGhlIGltYWdlIGlzIGdvaW5nIHRvIGJlIGEgYmFubmVyIGFuZCB5b3UncmUgdW5saWtlbHkgdG8gd2FudCB0byBwdXQgYSBjYXB0aW9uIG9uIGl0LCBJIGZpZ3VyZWQgdGhlIGNhcHRpb24gd2FzIGEgZ29vZCBwbGFjZSB0byBzdG9yZSBhIHdlYiBsaW5rLiBXaGVuIHlvdSB1cGxvYWQgeW91ciBpbWFnZSwgcHV0IHRoZSBkZXNpcmVkIGRlc3RpbmF0aW9uIFVSTCBpbiB0aGUgJ2NhcHRpb24nIGZpZWxkIGFuZCB1c2UgdGhlIDxjb2RlPmxpbmtjYXB0aW9uPSIxIjwvY29kZT4gb3B0aW9uIHRvIHB1bGwgaXQgZnJvbSB0aGVyZSBhbmQgbWFrZSB5b3VyIGJhbm5lciBjbGlja2FibGUuPC9wPg0KDQo8Y29kZT4mbHQ7dHhwOnNtZF9yYW5kb21fYmFubmVyIGNhdGVnb3J5PSJiYW5uZXJzIiBtYXRjaF90ZXh0PSI/IiBhdm9pZF90ZXh0PSJ0ZXN0IiBsb29rX2luPSJzZWN0aW9uLHRpdGxlIiBsaW5rY2FwdGlvbj0iMSIgLyZndDs8L2NvZGU+DQoNCjxwPklmIHRoZSBVUkwgYmVnaW5zIHdpdGggPGNvZGU+aHR0cDovLzwvY29kZT4sIGl0IHdpbGwgYmUgdXNlZCB2ZXJiYXRpbS4gSWYgbm90LCBpdCB3aWxsIGJlIGFzc3VtZWQgdG8gYmUgYSAnbG9jYWwnIGxpbmsgYW5kIHdpbGwgaGF2ZSA8Y29kZT4mbHQ7dHhwOnNpdGVfdXJsIC8mZ3Q7PC9jb2RlPiBwcmVwZW5kZWQgdG8gaXQuPC9wPg0KDQo8Yj5UcmFjayBpdDwvYj4NCg0KPHA+SWYgeW91IHVzZSA8Y29kZT5saW5rY2FwdGlvbj0iMSI8L2NvZGU+LCB0aGUgcGx1Z2luIHdpbGwgYXV0b21hdGljYWxseSBhZGQgYSBwYXJhbWV0ZXIgdG8gdGhlIGxpbmsgc28geW91IGNhbiB0cmFjayB3aGljaCBiYW5uZXJzIHdlcmUgY2xpY2tlZCBpbiB5b3VyIHRleHRwYXR0ZXJuIGxvZ3MuIFNpbmNlIHRoaXMgaXMgYSBiaXQgbGlrZSByZWZlcnJlciB0cmFja2luZywgdGhlIG9wdGlvbiB0byBjb250cm9sIGl0IGlzIG5hbWVkIDxjb2RlPnJlZmVyZXI8L2NvZGU+ICYjODIxMTsgYW5kIGlzIG1pcy1zcGVsbGVkIGV4YWN0bHkgdGhlIHNhbWUgd2F5IGFzIHRoZSBIVFRQIHNwZWMgd2FzIGFsbCB0aG9zZSB5ZWFycyBhZ28gOi0pPC9wPg0KDQo8cD48Y29kZT5yZWZlcmVyPC9jb2RlPiB0YWtlcyBhIHRleHQgYXJndW1lbnQgdG8gdXNlIGFzIGEgcHJlZml4LiBBbiBleGFtcGxlOjwvcD4NCg0KPGNvZGU+Jmx0O3R4cDpzbWRfcmFuZG9tX2Jhbm5lciBjYXRlZ29yeT0iYmFubmVycyIgbWF0Y2hfdGV4dD0iPyxnb2xkZmlzaCIgcmVmZXJlcj0idHJhY2tpZCIgLyZndDs8L2NvZGU+DQoNCjxwPlRoaXMgd2lsbCBnZW5lcmF0ZSBhIHVybCB3aXRoIDxjb2RlPj90cmFja2lkPTxpPmltYWdlX251bWJlcjwvaT48L2NvZGU+IGFkZGVkIHRvIGl0LCB3aGVyZSA8Y29kZT48aT5pbWFnZV9udW1iZXI8L2k+PC9jb2RlPiBpcyB0aGUgaW1hZ2UgaWQgb2YgdGhlIHBpY3R1cmUgaW4gcXVlc3Rpb24uPC9wPg0KDQo8cD5JZiB5b3UgZG9uJ3Qgc3BlY2lmeSB0aGUgPGNvZGU+cmVmZXJlcjwvY29kZT4sIGFsbCBsaW5rYWJsZSBpbWFnZXMgd2lsbCBoYXZlIHRoZSBjb2RlIDxjb2RlPj9iaWQ9PGk+aW1hZ2VfbnVtYmVyPC9pPjwvY29kZT4gYWRkZWQgKGZvciAnQmFubmVyIElEJykuIElmIHlvdSB3aXNoIHRvIGRpc2FibGUgdGhlIG9wdGlvbiwgYWRkIDxjb2RlPnJlZmVyZXI9IiI8L2NvZGU+LjwvcD4NCg0KPGI+QW5kIHRoZXJlJ3MgbW9yZTwvYj4NCg0KPHA+V2FudCBtb3JlIHRoYW4gb25lIGltYWdlIHNlbnQgb3V0IGF0IG9uY2U/IEFkZCB0aGUgPGNvZGU+bGltaXQ8L2NvZGU+IHBhcmFtZXRlci4gRGVmYXVsdHMgdG8gMSBpbWFnZS48L3A+IjtzOjQ6ImNvZGUiO3M6NDY5ODoiLy8gdjAuMSAgSW5pdGlhbCBwdWJsaWMgcmVsZWFzZQ0KLy8gdjAuMTEgQWRkZWQgUEZYIHRvIHF1ZXJ5ICh0aGFua3MgbWVyY3VyeSkNCi8vIHYwLjEyIEZpeGVkIGhlbHAgdG8gaW5jbHVkZSB0cmFpbGluZyBzbGFzaGVzICh0aGFua3Mgdml0dG9yaW8pDQovLyB2MC4xMyBVbnJlbGVhc2VkLiBBZGRlZCBsb29rX2luPWNhdGVnb3J5IGFuZCByZWZlcmVyDQovLyB2MC4xNCBBZGRlZCBtYXRjaF90ZXh0IGFuZCB1c2VfYWx0ICh0aGFua3MgbHVrZXBlcm1zbikNCi8vIHYwLjE1IEFkZGVkIGFsd2F5c19kaXNwbGF5IGFuZCBsaW1pdCAodGhhbmtzIGx1a2VwZXJtc24pDQovLyB2MC4xNWEgQnVnZml4IGZvciBsaW5rY2FwdGlvbiAodGhhbmtzIG1lcmN1cnkpDQovLyB2MC4yICBUT0RPOiBBZGQgc3ViY2F0ZWdvcnkgc3VwcG9ydCAtIElOIERFVkVMT1BNRU5UDQpmdW5jdGlvbiBzbWRfcmFuZG9tX2Jhbm5lcigkYXR0cykgew0KCWdsb2JhbCAkcHJldGV4dDsNCg0KCSRjYXRlZ29yeSA9ICclJzsNCgkkbG9va19pbiA9ICcnOw0KCSRtYXRjaF90ZXh0ID0gJyc7DQoJJGF2b2lkX3RleHQgPSAnJzsNCgkkcmVmZXJlciA9ICdiaWQnOw0KCSR1c2VfYWx0ID0gJyc7DQoJJGFsd2F5c19kaXNwbGF5ID0gJyc7DQoJJGxpbWl0ID0gJzEnOw0KCSR3aGVyZU5hbWUgPSAnJzsNCgkkbGlua2NhcHRpb24gPSAoaXNzZXQoJGxpbmtjYXB0aW9uKSkgPyB0cnVlIDogZmFsc2U7DQoJJG1hdGNoQXJyYXkgPSBhcnJheSgpOw0KCSRhdm9pZEFycmF5ID0gYXJyYXkoKTsNCg0KCWlmIChpc19hcnJheSgkYXR0cykpIGV4dHJhY3QoJGF0dHMpOw0KDQoJLy8gdXNlX2FsdCBzd2l0Y2hlcyB0aGUgV0hFUkUgc3RhdGVtZW50IHRvIGxvb2sgaW4gdGhlIGltYWdlICdhbHQnIGluc3RlYWQgb2YgJ25hbWUnDQoJaWYoJHVzZV9hbHQgPT0gIiIpIHsNCgkJJHdoZXJlUG9zID0gIm5hbWUiOw0KCX0gZWxzZSB7DQoJCSR3aGVyZVBvcyA9ICJhbHQiOw0KCX0NCg0KCS8vKiogTUFUQ0hJTkcgVEVYVCANCgkvLyBJZiBtYXRjaF90ZXh0IGlzIHNwZWNpZmllZCwgbG9va19pbiBtdXN0IGFsc28gYmUgZ2l2ZW47DQoJLy8gaWYgaXQgaXNuJ3QsIHNldCBpdCB0byBhIGRlZmF1bHQgZmlyc3QNCglpZiAoJG1hdGNoX3RleHQgIT0gIiIgKSB7DQoJCWlmICgkbG9va19pbiA9PSAiIikgew0KCQkJJGxvb2tfaW4gPSAic2VjdGlvbiI7DQoJCX0NCg0KCQkkdXJsX3BhcnRzID0gZXhwbG9kZSgiLCIsICRsb29rX2luKTsNCgkJJG1hdGNoZXMgPSBleHBsb2RlKCIsIiwgJG1hdGNoX3RleHQpOw0KDQoJCWZvcmVhY2ggKCR1cmxfcGFydHMgYXMgJHBhcnQpIHsNCgkJCWZvcmVhY2ggKCRtYXRjaGVzIGFzICRtYXRjaCkgew0KCQkJCWlmICgkbWF0Y2ggPT09ICI/Iikgew0KCQkJCQlzd2l0Y2ggKCRwYXJ0KSB7DQoJCQkJCQljYXNlICJzZWN0aW9uIjoNCgkJCQkJCQkkbWF0Y2ggPSAkcHJldGV4dFtzXTsNCgkJCQkJCQlicmVhazsNCgkJCQkJCWNhc2UgImNhdGVnb3J5IjoNCgkJCQkJCQkkbWF0Y2ggPSAkcHJldGV4dFtjXTsNCgkJCQkJCQlicmVhazsNCgkJCQkJCWNhc2UgInRpdGxlIjoNCgkJCQkJCQkvLyBDaGVjayBpZiB0aGlzIGlzIGFuIGFydGljbGUgYnkgdGVzdGluZyBuZXh0X2lkDQoJCQkJCQkJaWYgKGFycmF5X2tleV9leGlzdHMoJ25leHRfaWQnLCRwcmV0ZXh0KSkgeyANCgkJCQkJCQkJLy8gR2V0IHJpZCBvZiBhbnkgPyBwYXJhbXMgYWZ0ZXIgdGhlIFVSTCB0aXRsZQ0KCQkJCQkJCQkkdXJsID0gc3BsaXQoIlw/IiwkcHJldGV4dFtyZXFdKTsNCgkJCQkJCQkJJG1hdGNoID0gc3Vic3RyKHN0cnJjaHIoJHVybFswXSwgIi8iKSwgMSk7DQoJCQkJCQkJfSBlbHNlIHsNCgkJCQkJCQkJJG1hdGNoID0gIiI7DQoJCQkJCQkJfQ0KCQkJCQkJCWJyZWFrOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCWlmICgkbWF0Y2ggIT0gIiIpIHsNCgkJCQkJaWYgKCFpbl9hcnJheSgkbWF0Y2gsJG1hdGNoQXJyYXkpKSB7DQoJCQkJCQkkbWF0Y2hBcnJheVtdID0gJG1hdGNoOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQoNCgkJJG51bU1hdGNoZXMgPSBjb3VudCgkbWF0Y2hBcnJheSk7DQoJCSRjdHIgPSAxOw0KCQlmb3JlYWNoICgkbWF0Y2hBcnJheSBhcyAkbWF0Y2hTdHIpIHsNCgkJCWlmICgkY3RyID09IDEpIHsNCgkJCQkkd2hlcmVOYW1lIC49ICIgQU5EICggIjsNCgkJCX0gZWxzZSB7DQoJCQkJJHdoZXJlTmFtZSAuPSAiIE9SICI7DQoJCQl9DQoJCQkkd2hlcmVOYW1lIC49ICR3aGVyZVBvcyAuICIgTElLRSAnJSIuJG1hdGNoU3RyLiIlJyI7DQoJCQlpZiAoJGN0ciA9PSAkbnVtTWF0Y2hlcykgew0KCQkJCSR3aGVyZU5hbWUgLj0gIiApICI7DQoJCQl9DQoJCQkkY3RyKys7DQoJCX0NCgl9DQoNCgkvLyoqIEFWT0lESU5HIFRFWFQNCgkvLyBJZiBhdm9pZF90ZXh0IGlzIHNwZWNpZmllZCwgbG9va19pbiBtdXN0IGFsc28gYmUgZ2l2ZW47DQoJLy8gaWYgaXQgaXNuJ3QsIHNldCBpdCB0byBhIGRlZmF1bHQgZmlyc3QNCglpZiAoJGF2b2lkX3RleHQgIT0gIiIgKSB7DQoJCWlmICgkbG9va19pbiA9PSAiIikgew0KCQkJJGxvb2tfaW4gPSAic2VjdGlvbiI7DQoJCX0NCg0KCQkkdXJsX3BhcnRzID0gZXhwbG9kZSgiLCIsJGxvb2tfaW4pOw0KCQkkbWF0Y2hlcyA9IGV4cGxvZGUoIiwiLCRhdm9pZF90ZXh0KTsNCgkJZm9yZWFjaCAoJHVybF9wYXJ0cyBhcyAkcGFydCkgew0KCQkJZm9yZWFjaCAoJG1hdGNoZXMgYXMgJG1hdGNoKSB7DQoJCQkJaWYgKCRtYXRjaCA9PT0gIj8iKSB7DQoJCQkJCXN3aXRjaCAoJHBhcnQpIHsNCgkJCQkJCWNhc2UgInNlY3Rpb24iOg0KCQkJCQkJCSRtYXRjaCA9ICRwcmV0ZXh0W3NdOw0KCQkJCQkJCWJyZWFrOw0KCQkJCQkJY2FzZSAiY2F0ZWdvcnkiOg0KCQkJCQkJCSRtYXRjaCA9ICRwcmV0ZXh0W2NdOw0KCQkJCQkJCWJyZWFrOw0KCQkJCQkJY2FzZSAidGl0bGUiOg0KCQkJCQkJCS8vIENoZWNrIGlmIHRoaXMgaXMgYW4gYXJ0aWNsZSBieSB0ZXN0aW5nIG5leHRfaWQNCgkJCQkJCQlpZiAoYXJyYXlfa2V5X2V4aXN0cygnbmV4dF9pZCcsJHByZXRleHQpKSB7IA0KCQkJCQkJCQkvLyBHZXQgcmlkIG9mIGFueSA/IHBhcmFtcyBhZnRlciB0aGUgVVJMIHRpdGxlDQoJCQkJCQkJCSR1cmwgPSBzcGxpdCgiXD8iLCRwcmV0ZXh0W3JlcV0pOw0KCQkJCQkJCQkkbWF0Y2ggPSBzdWJzdHIoc3RycmNocigkdXJsWzBdLCAiLyIpLCAxKTsNCgkJCQkJCQl9IGVsc2Ugew0KCQkJCQkJCQkkbWF0Y2ggPSAiIjsNCgkJCQkJCQl9DQoJCQkJCQkJYnJlYWs7DQoJCQkJCX0NCgkJCQl9DQoJCQkJaWYgKCRtYXRjaCAhPSAiIikgew0KCQkJCQlpZiAoIWluX2FycmF5KCRtYXRjaCwkYXZvaWRBcnJheSkpIHsNCgkJCQkJCSRhdm9pZEFycmF5W10gPSAkbWF0Y2g7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0NCg0KCQlmb3JlYWNoICgkYXZvaWRBcnJheSBhcyAkYXZvaWRTdHIpIHsNCgkJCSR3aGVyZU5hbWUgLj0gIiBBTkQgIiAuICR3aGVyZVBvcyAuICIgTk9UIExJS0UgJyUiLiRhdm9pZFN0ci4iJSciOw0KCQl9DQoJfQ0KDQoJJHF1ZXJ5ID0gInNlbGVjdCBpZCxjYXB0aW9uIGZyb20gIi5QRlguInR4cF9pbWFnZSB3aGVyZSBjYXRlZ29yeSBsaWtlICckY2F0ZWdvcnknICR3aGVyZU5hbWUgb3JkZXIgYnkgcmFuZCgpIGxpbWl0ICRsaW1pdCI7DQoJJHJzID0gZ2V0Um93cygkcXVlcnkpOw0KCSRvdXRTdHIgPSAnJzsNCg0KCWlmKCRycykgew0KCQkkb3V0U3RyID0gc21kX3JzX291dCgkcnMsJGxpbmtjYXB0aW9uLCRyZWZlcmVyLCRhdHRzKTsNCgl9IGVsc2Ugew0KCQkvLyBObyBtYXRjaGluZyBpbWFnZXMgZm91bmQuIElmIGFsd2F5c19kaXNwbGF5IGlzIG9uLCBwaWNrIGFueSBpbWFnZShzKQ0KCQlpZiAoJGFsd2F5c19kaXNwbGF5KSB7DQoJCQkkcXVlcnkgPSAic2VsZWN0IGlkLGNhcHRpb24gZnJvbSAiLlBGWC4idHhwX2ltYWdlIHdoZXJlIGNhdGVnb3J5IGxpa2UgJyRjYXRlZ29yeScgb3JkZXIgYnkgcmFuZCgpIGxpbWl0ICRsaW1pdCI7DQoJCQkkcnMgPSBnZXRSb3dzKCRxdWVyeSk7DQoJCQlpZigkcnMpIHsNCgkJCQkkb3V0U3RyID0gc21kX3JzX291dCgkcnMsJGxpbmtjYXB0aW9uLCRyZWZlcmVyLCRhdHRzKTsNCgkJCX0NCgkJfSBlbHNlIHsNCgkJCXJldHVybjsNCgkJfQ0KCX0NCg0KCXJldHVybiAkb3V0U3RyOw0KfQ0KDQpmdW5jdGlvbiBzbWRfcnNfb3V0KCRycywkbGlua2NhcHRpb24sJHJlZmVyZXIsJGF0dHMpIHsNCgkkb3V0ID0gJyc7DQoJZm9yZWFjaCgkcnMgYXMgJHJvdykgew0KCQkkbGlua05hbWU9dHJpbSgkcm93WydjYXB0aW9uJ10pOw0KCQlpZiAoJGxpbmtjYXB0aW9uICYmICRsaW5rTmFtZSkgew0KCQkJJHByZWZpeCA9ICJodHRwOi8vIjsNCgkJCWlmIChzdWJzdHIoJGxpbmtOYW1lLCAwLCBzdHJsZW4oJHByZWZpeCkpID09PSAkcHJlZml4KSB7DQoJCQkJJGxpbmt1cmwgPSAkbGlua05hbWU7DQoJCQl9IGVsc2Ugew0KCQkJCSRsaW5rdXJsID0gc2l0ZV91cmwoJGF0dHMpIC4gJGxpbmtOYW1lOw0KCQkJfQ0KCQkJaWYgKCRyZWZlcmVyICE9ICIiKSB7DQoJCQkJJHJlZmVyZXIgPSAiPyIuICRyZWZlcmVyIC4gIj0iIC4kcm93WydpZCddOw0KCQkJfQ0KCQkJJG91dCAuPSAiPGEgaHJlZj0iLiRsaW5rdXJsLiRyZWZlcmVyLiI+Ii5pbWFnZSgkcm93KS4iPC9hPiI7DQoJCX0gZWxzZSB7DQoJCQkkb3V0IC49IGltYWdlKCRyb3cpOw0KCQl9DQoJfQ0KCXJldHVybiAkb3V0Ow0KfQ0KIjtzOjQ6InR5cGUiO3M6MToiMCI7czozOiJtZDUiO3M6MzI6ImIxNWNkMTZkNGJlNTI3MDhmZmUxZWFmODI3ZjYwOGQ3Ijt9