# arc_meta v2.0.1-beta.1 # Title and Meta tags # Andy Carter # http://andy-carter.com/ # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YToxMjp7czo0OiJuYW1lIjtzOjg6ImFyY19tZXRhIjtzOjc6InZlcnNpb24iO3M6MTI6IjIu MC4xLWJldGEuMSI7czo2OiJhdXRob3IiO3M6MTE6IkFuZHkgQ2FydGVyIjtzOjEwOiJhdXRo b3JfdXJpIjtzOjIzOiJodHRwOi8vYW5keS1jYXJ0ZXIuY29tLyI7czoxMToiZGVzY3JpcHRp b24iO3M6MTk6IlRpdGxlIGFuZCBNZXRhIHRhZ3MiO3M6NToib3JkZXIiO3M6MToiNSI7czo0 OiJ0eXBlIjtzOjE6IjUiO3M6NToiZmxhZ3MiO3M6MToiMyI7czo4OiJ0ZXh0cGFjayI7czox NTg1OiIjQGFkbWluCiNAbGFuZ3VhZ2UgZW4tZ2IKYXJjX21ldGEgPT4gTWV0YWRhdGEgKGFy Y19tZXRhKQphcmNfbWV0YV90aXRsZSA9PiBNZXRhIHRpdGxlCmFyY19tZXRhX2Rlc2NyaXB0 aW9uID0+IE1ldGEgZGVzY3JpcHRpb24KYXJjX21ldGFfaW1hZ2UgPT4gTWV0YSBpbWFnZQph cmNfbWV0YV9yb2JvdHMgPT4gTWV0YSByb2JvdHMKYXJjX21ldGEgPT4gYXJjX21ldGEKYXJj X21ldGFfYXJ0aWNsZV90aXRsZSA9PiBBcnRpY2xlIHBhZ2UgdGl0bGVzIHBhdHRlcm4KYXJj X21ldGFfY29tbWVudF90aXRsZSA9PiBDb21tZW50IHBhZ2UgdGl0bGVzIHBhdHRlcm4KYXJj X21ldGFfc2VhcmNoX3RpdGxlID0+IFNlYXJjaCBwYWdlIHRpdGxlcyBwYXR0ZXJuCmFyY19t ZXRhX2NhdGVnb3J5X3RpdGxlID0+IENhdGVnb3J5IHRpdGxlcyBwYXR0ZXJuCmFyY19tZXRh X3NlY3Rpb25fdGl0bGUgPT4gU2VjdGlvbiB0aXRsZXMgcGF0dGVybgphcmNfbWV0YV9zZWN0 aW9uX2NhdGVnb3J5X3RpdGxlID0+IFNlY3Rpb24gY2F0ZWdvcnkgdGl0bGVzIHBhdHRlcm4K YXJjX21ldGFfaG9tZXBhZ2VfdGl0bGUgPT4gSG9tZXBhZ2UgdGl0bGUgcGF0dGVybgphcmNf bWV0YV9zZWN0aW9uX3RhYiA9PiBBZGRpdGlvbmFsIHBhbmVsIGxvY2F0aW9uIGZvciBzZWN0 aW9ucyBtZXRhIGRhdGEgZWRpdAphcmNfbWV0YV9zZWN0aW9uX3RhYl9jb250ZW50ID0+IENv bnRlbnQKYXJjX21ldGFfc2VjdGlvbl90YWJfZXh0ZW5zaW9ucyA9PiBFeHRlbnNpb25zCmFy Y19tZXRhX3NlY3Rpb25fdGFiX2hpZGRlbiA9PiBIaWRkZW4KI0BsYW5ndWFnZSBmci1mcgph cmNfbWV0YSA9PiBNw6l0YWRvbm7DqWVzIChhcmNfbWV0YSkKYXJjX21ldGFfdGl0bGUgPT4g TcOpdGEtdGl0cmUKYXJjX21ldGFfZGVzY3JpcHRpb24gPT4gTcOpdGEtZGVzY3JpcHRpb24K YXJjX21ldGFfaW1hZ2UgPT4gTcOpdGEtaW1hZ2UKYXJjX21ldGFfcm9ib3RzID0+IE3DqXRh LXJvYm90cwphcmNfbWV0YV9hcnRpY2xlX3RpdGxlID0+IE3DqXRhLXRpdHJlIGRlcyBhcnRp Y2xlcwphcmNfbWV0YV9jb21tZW50X3RpdGxlID0+IE3DqXRhLXRpdHJlIGRlcyBjb21tZW50 YWlyZXMKYXJjX21ldGFfc2VhcmNoX3RpdGxlID0+IE3DqXRhLXRpdHJlIGRlcyByw6lzdWx0 YXRzIGRlIHJlY2hlcmNoZQphcmNfbWV0YV9jYXRlZ29yeV90aXRsZSA9PiBNw6l0YS10aXRy ZSBkZXMgY2F0Z8Opb3JpZXMKYXJjX21ldGFfc2VjdGlvbl90aXRsZSA9PiBNw6l0YS10aXRy ZSBkZXMgc2VjdGlvbnMKYXJjX21ldGFfc2VjdGlvbl9jYXRlZ29yeV90aXRsZSA9PiBNw6l0 YS10aXRyZSBkZXMgY2F0w6lnb3JpZXMgZCd1bmUgc2VjdGlvbgphcmNfbWV0YV9ob21lcGFn ZV90aXRsZSA9PiBNw6l0YS10aXRyZSBkZSBsYSBwYWdlIGQnYWNjdWVpbAphcmNfbWV0YV9z ZWN0aW9uX3RhYiA9PiBQYW5uZWF1IGQnw6lkaXRpb24gZGVzIG3DqXRhZG9ubsOpZXMgZGUg c2VjdGlvbnMKYXJjX21ldGFfc2VjdGlvbl90YWJfY29udGVudCA9PiBDb250ZW51CmFyY19t ZXRhX3NlY3Rpb25fdGFiX2V4dGVuc2lvbnMgPT4gRXh0ZW5zaW9ucwphcmNfbWV0YV9zZWN0 aW9uX3RhYl9oaWRkZW4gPT4gQ2FjaMOpIjtzOjQ6ImhlbHAiO3M6OTUxMToiCTxoMT5hcmNf bWV0YTwvaDE+CgoJPGgyPlVzYWdlPC9oMj4KCgk8cD5BbGwgb2YgdGhlIGZvbGxvd2luZyB0 YWdzIHNob3VsZCBiZSB1c2VkIHdpdGhpbiB5b3VyIHRlbXBsYXRlcyYjODIxNzsgPGNvZGU+ Jmx0O2hlYWQmZ3Q7PC9jb2RlPiB0YWcuPC9wPgoKCTxoMz5hcmNfbWV0YV90aXRsZTwvaDM+ CgoJPHA+T3V0cHV0cyBhbiA8c3BhbiBjbGFzcz0iY2FwcyI+U0VPPC9zcGFuPiBmcmllbmRs eSA8Y29kZT4mbHQ7dGl0bGUmZ3Q7PC9jb2RlPiB0YWcuPC9wPgoKPHByZT48Y29kZT4mbHQ7 dHhwOmFyY19tZXRhX3RpdGxlIC8mZ3Q7CjwvY29kZT48L3ByZT4KCgk8aDQ+QXR0cmlidXRl czwvaDQ+CgoJPHA+VGhlIDxjb2RlPmFyY19tZXRhX3RpdGxlPC9jb2RlPiB0YWcgYXR0cmli dXRlcyBvdmVycmlkZSB0aGUgZGVmYXVsdHMuIFRvIHNldCB0aGUgZGVmYXVsdCBwYXR0ZXJu cyB1c2VkIGZvciB0aGUgPGNvZGU+Jmx0O3RpdGxlJmd0OzwvY29kZT4gdGFnIGdvdG8gdGhl IHBsdWdpbiYjODIxNztzIG9wdGlvbnMgcGFnZS48L3A+CgoJPHVsPgoJCTxsaT50aXRsZSAm IzgyMTI7IHVzZSB0aGlzIHRvIG92ZXJyaWRlIHRoZSB0aXRsZSB0YWcmIzgyMTc7cyBjb250 ZW50PC9saT4KCQk8bGk+YXJ0aWNsZV90aXRsZSAmIzgyMTI7IHNldHMgdGhlIHBhdHRlcm4g Zm9yIGFydGljbGUgcGFnZSB0aXRsZXM8L2xpPgoJCTxsaT5jb21tZW50X3RpdGxlICYjODIx Mjsgc2V0cyB0aGUgcGF0dGVybiBmb3IgY29tbWVudCBwYWdlIHRpdGxlczwvbGk+CgkJPGxp PnNlYXJjaF90aXRsZSAmIzgyMTI7IHNldHMgdGhlIHBhdHRlcm4gZm9yIHNlYXJjaCByZXN1 bHRzIHBhZ2UgdGl0bGVzPC9saT4KCQk8bGk+Y2F0ZWdvcnlfdGl0bGUgJiM4MjEyOyBzZXRz IHRoZSBwYXR0ZXJuIGZvciBjYXRlZ29yeSBwYWdlIHRpdGxlczwvbGk+CgkJPGxpPnNlY3Rp b25fdGl0bGUgJiM4MjEyOyBzZXRzIHRoZSBwYXR0ZXJuIGZvciBzZWN0aW9uIHBhZ2UgdGl0 bGVzPC9saT4KCQk8bGk+aG9tZXBhZ2VfdGl0bGUgJiM4MjEyOyBzZXRzIHRoZSBwYXR0ZXJu IGZvciB0aGUgaG9tZXBhZ2UgdGl0bGU8L2xpPgoJCTxsaT50eXBlICYjODIxMjsgb3ZlcnJp ZGUgdGhlIGNvbnRlbnQgdHlwZSBmb3IgdGhlIHRpdGxlPC9saT4KCTwvdWw+CgoJPGg0PlRp dGxlIFRva2VuczwvaDQ+CgoJPHA+VG8gc2V0IGEgcGF0dGVybiBmb3IgYSBwYWdlIHRpdGxl IHlvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgdG9rZW5zOi08L3A+CgoJPHVsPgoJCTxsaT48 Y29kZT4lYTwvY29kZT4gJiM4MjEyOyBhcnRpY2xlIHRpdGxlLCBjYW4gb25seSBiZSB1c2Vk IG9uIGFydGljbGUgYW5kIGNvbW1lbnQgcGFnZXM8L2xpPgoJCTxsaT48Y29kZT4lczwvY29k ZT4gJiM4MjEyOyBzZWN0aW9uIG5hbWUsIGNhbiBiZSB1c2VkIG9uIGFydGljbGUgYW5kIHNl Y3Rpb24gcGFnZXM8L2xpPgoJCTxsaT48Y29kZT4lYzwvY29kZT4gJiM4MjEyOyBjYXRlZ29y eSBuYW1lLCBjYW4gYmUgdXNlZCBvbiBjYXRlZ29yeSBwYWdlczwvbGk+CgkJPGxpPjxjb2Rl PiVuPC9jb2RlPiAmIzgyMTI7IHNpdGUmIzgyMTc7cyBuYW1lLCBjYW4gYmUgdXNlZCBvbiBh bGwgcGFnZXM8L2xpPgoJCTxsaT48Y29kZT4ldDwvY29kZT4gJiM4MjEyOyBzaXRlJiM4MjE3 O3Mgc2xvZ2FuLCBjYW4gYmUgdXNlZCBvbiBhbGwgcGFnZXM8L2xpPgoJCTxsaT48Y29kZT4l cTwvY29kZT4gJiM4MjEyOyBzZWFyY2ggcXVlcnksIGNhbiBiZSB1c2VkIG9uIHNlYXJjaCBy ZXN1bHRzIHBhZ2U8L2xpPgoJPC91bD4KCgk8cD5Gb3IgZXhhbXBsZSwgeW91IGNvdWxkIGRl ZmluZSB0aGUgcGF0dGVybiBmb3IgYW4gYXJ0aWNsZSBwYWdlIGFzOi08L3A+Cgo8cHJlPjxj b2RlPiVhIHwgJW4gKCV0KQo8L2NvZGU+PC9wcmU+CgoJPHA+VGhpcyB3b3VsZCBvdXRwdXQg c29tZXRoaW5nIGxpa2U6LTwvcD4KCjxwcmU+PGNvZGU+Jmx0O3RpdGxlJmd0O1dlbGNvbWUg dG8gWW91ciBTaXRlISB8IE15IHNpdGUgKE15IHBpdGh5IHNsb2dhbikmbHQ7L3RpdGxlJmd0 Owo8L2NvZGU+PC9wcmU+CgoJPGg0PkV4YW1wbGVzPC9oND4KCgk8aDU+RXhhbXBsZSBVc2lu ZyB0aGUgPGNvZGU+c2VjdGlvbl90aXRsZTwvY29kZT4gQXR0cmlidXRlPC9oNT4KCjxwcmU+ PGNvZGU+Jmx0O3R4cDphcmNfbWV0YV90aXRsZSBzZWN0aW9uX3RpdGxlPSYjMzk7JW4gLyAl cyYjMzk7IC8mZ3Q7CjwvY29kZT48L3ByZT4KCgk8cD5PdXRwdXRzIG9uIGFuICYjODIxNjtB cnRpY2xlcyYjODIxNzsgc2VjdGlvbiBwYWdlOi08L3A+Cgo8cHJlPjxjb2RlPiZsdDt0aXRs ZSZndDtNeSBzaXRlIC8gQXJ0aWNsZXMmbHQ7L3RpdGxlJmd0Owo8L2NvZGU+PC9wcmU+CgoJ PGg1PkV4YW1wbGUgVXNpbmcgdGhlIDxjb2RlPnRpdGxlPC9jb2RlPiBBdHRyaWJ1dGU8L2g1 PgoKPHByZT48Y29kZT4mbHQ7dHhwOmFyY19tZXRhX3RpdGxlIHRpdGxlPSYjMzk7SGVsbG8g V29ybGQmIzM5OyAvJmd0Owo8L2NvZGU+PC9wcmU+CgoJPHA+T3V0cHV0czotPC9wPgoKPHBy ZT48Y29kZT4mbHQ7dGl0bGUmZ3Q7SGVsbG8gV29ybGQmbHQ7L3RpdGxlJmd0Owo8L2NvZGU+ PC9wcmU+CgoJPGgzPmFyY19tZXRhX2Rlc2NyaXB0aW9uPC9oMz4KCgk8cD5PdXRwdXRzIGEg bWV0YSBkZXNjcmlwdGlvbiB0YWcgd2hlbiBhIGRlc2NyaXB0aW9uIGhhcyBiZWVuIHNldC48 L3A+Cgo8cHJlPjxjb2RlPiZsdDt0eHA6YXJjX21ldGFfZGVzY3JpcHRpb24gLyZndDsKPC9j b2RlPjwvcHJlPgoKCTxoND5BdHRyaWJ1dGVzPC9oND4KCgk8dWw+CgkJPGxpPmRlc2NyaXB0 aW9uICYjODIxMjsgb3ZlcnJpZGVzIHRoZSBkZXNjcmlwdGlvbiBzZXQgdXNpbmcgYXJjX21l dGEmIzgyMTc7cyBkZXNjcmlwdGlvbiBmaWVsZCBvbiB0aGUgYXJ0aWNsZSBXcml0ZSBwYWdl IG9yIHNlY3Rpb24vY2F0ZWdvcnkgZWRpdCBwYWdlPC9saT4KCQk8bGk+dHlwZSAmIzgyMTI7 IG92ZXJyaWRlIHRoZSBjb250ZW50IHR5cGUgZm9yIHRoZSBtZXRhIGRlc2NyaXB0aW9uPC9s aT4KCTwvdWw+CgoJPGgzPmFyY19tZXRhX3JvYm90czwvaDM+CgoJPHA+T3V0cHV0cyBhIG1l dGEgcm9ib3RzIHRhZyB3aGVuIHJvYm90cyBoYXZlIGJlZW4gc2V0LiBXaGVuIGEgc2l0ZSBp cyBpbiB0ZXN0aW5nIG9yIGRlYnVnZ2luZyBtb2RlIGl0IHdpbGwgYXV0b21hdGljYWxseSBv dXRwdXQgYSAmIzgyMTY7bm9pbmRleCwgbm9mb2xsb3cmIzgyMTc7IHRhZyB3aXRoIHlvdXIg YWN0dWFsIHNldHRpbmcgYXMgYSBjb21tZW50IGltbWVkaWF0ZWx5IGFmdGVyIHRoZSB0YWcg Zm9yIHJlZmVyZW5jZS48L3A+Cgo8cHJlPjxjb2RlPiZsdDt0eHA6YXJjX21ldGFfcm9ib3Rz IC8mZ3Q7CjwvY29kZT48L3ByZT4KCgk8aDQ+QXR0cmlidXRlczwvaDQ+CgoJPHVsPgoJCTxs aT5yb2JvdHMgJiM4MjEyOyBvdmVycmlkZXMgdGhlIHJvYm90cyBpbnN0cnVjdGlvbnMgc2V0 IHVzaW5nIHRoZSBtZXRhIHJvYm90cyBmaWVsZCBvbiB0aGUgYXJ0aWNsZSBXcml0ZSBwYWdl IG9yIHNlY3Rpb24vY2F0ZWdvcnkgZWRpdCBwYWdlPC9saT4KCQk8bGk+dHlwZSAmIzgyMTI7 IG92ZXJyaWRlIHRoZSBjb250ZW50IHR5cGUgZm9yIHRoZSByb2JvdHMgbWV0YSBkYXRhPC9s aT4KCTwvdWw+CgoJPGgzPmFyY19tZXRhX2tleXdvcmRzPC9oMz4KCgk8cD5PdXRwdXRzIGEg bWV0YSBrZXl3b3JkcyB0YWcgd2hlbiBrZXl3b3JkcyBoYXZlIGJlZW4gc2V0IChvbmx5IHdv cmtzIGZvciBhcnRpY2xlcykuPC9wPgoKPHByZT48Y29kZT4mbHQ7dHhwOmFyY19tZXRhX2tl eXdvcmRzIC8mZ3Q7CjwvY29kZT48L3ByZT4KCgk8aDQ+QXR0cmlidXRlczwvaDQ+CgoJPHVs PgoJCTxsaT5rZXl3b3JkcyAmIzgyMTI7IG92ZXJyaWRlcyB0aGUga2V5d29yZHMgc2V0IHVz aW5nIHRoZSBtZXRhIGtleXdvcmRzIGZpZWxkIG9uIHRoZSBhcnRpY2xlIFdyaXRlIHBhZ2U8 L2xpPgoJPC91bD4KCgk8aDM+YXJjX21ldGFfY2Fub25pY2FsPC9oMz4KCgk8cD5TcGVjaWZ5 IHRoZSBwYWdlJiM4MjE3O3MgY2Fub25pY2FsIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3Nw YW4+LiBTZWUgR29vZ2xlJiM4MjE3O3MgPGEgaHJlZj0iaHR0cDovL2dvb2dsZXdlYm1hc3Rl cmNlbnRyYWwuYmxvZ3Nwb3QuY29tLzIwMDkvMDIvc3BlY2lmeS15b3VyLWNhbm9uaWNhbC5o dG1sIj5TcGVjaWZ5IFlvdXIgQ2Fub25pY2FsPC9hPiBmb3IgYW4gZXhwbGFuYXRpb24uPC9w PgoKPHByZT48Y29kZT4mbHQ7dHhwOmFyY19tZXRhX2Nhbm9uaWNhbCAvJmd0Owo8L2NvZGU+ PC9wcmU+CgoJPGg0PkF0dHJpYnV0ZXM8L2g0PgoKCTx1bD4KCQk8bGk+dXJsICYjODIxMjsg b3ZlcnJpZGVzIHRoZSBkZWZhdWx0IDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+PC9s aT4KCTwvdWw+CgoJPGgzPmFyY19tZXRhX29wZW5fZ3JhcGg8L2gzPgoKCTxwPk91dHB1dHMg bWV0YSB0YWdzIGZvciB1c2luZyBGYWNlYm9vayBPcGVuIEdyYXBoLjwvcD4KCjxwcmU+PGNv ZGU+Jmx0O3R4cDphcmNfbWV0YV9vcGVuX2dyYXBoIC8mZ3Q7CjwvY29kZT48L3ByZT4KCgk8 cD5KdXN0IGluY2x1ZGluZyB0aGUgYWJvdmUgdGFnIGluIHlvdXIgdGVtcGxhdGVzJiM4MjE3 OyA8Y29kZT4mbHQ7aGVhZCZndDs8L2NvZGU+IHRhZyB3aWxsIG91dHB1dCB0YWdzIGZvciB0 aGUgZm9sbG93aW5nOi08L3A+CgoJPHVsPgoJCTxsaT5vZzpzaXRlX25hbWUgJiM4MjEyOyB5 b3VyIHNpdGUgbmFtZSBmcm9tIHlvdXIgcHJlZmVyZW5jZXM8L2xpPgoJCTxsaT5vZzp0aXRs ZSAmIzgyMTI7IHRoZSBhcnRpY2xlJiM4MjE3O3MgdGl0bGUsIHNlY3Rpb24gbmFtZSBvciBj YXRlZ29yeSBuYW1lPC9saT4KCQk8bGk+b2c6ZGVzY3JpcHRpb24gJiM4MjEyOyB5b3VyIHBh Z2UmIzgyMTc7cyBtZXRhIGRlc2NyaXB0aW9uPC9saT4KCQk8bGk+b2c6dXJsICYjODIxMjsg eW91ciBwYWdlJiM4MjE3O3MgY2Fub25pY2FsIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3Nw YW4+PC9saT4KCQk8bGk+b2c6aW1hZ2UgJiM4MjEyOyB0aGUgYXJ0aWNsZSYjODIxNztzIGlt YWdlPC9saT4KCTwvdWw+CgoJPHA+WW91IGNhbiBvdmVycmlkZSB0aGUgZGVmYXVsdCB2YWx1 ZXMgb2YgYW55IG9mIHRoZXNlIGJ5IHBhc3NpbmcgYSB2YWx1ZSB0byBvbmUgb2YgdGhlIHRh ZyYjODIxNztzIGF0dHJpYnV0ZXMgZGVmaW5lZCBiZWxvdy4gVG8gZGlzYWJsZSBvbmUgb2Yg dGhlIHRhZ3MganVzdCBwYXNzIGFuIGVtcHR5IGF0dHJpYnV0ZSB2YWx1ZSAoPGk+ZS5nLjwv aT4gPGNvZGU+dGl0bGU9JiMzOTsmIzM5OzwvY29kZT4pLjwvcD4KCgk8aDQ+QXR0cmlidXRl czwvaDQ+CgoJPHVsPgoJCTxsaT5zaXRlX25hbWU8L2xpPgoJCTxsaT50aXRsZTwvbGk+CgkJ PGxpPmRlc2NyaXB0aW9uPC9saT4KCQk8bGk+dXJsPC9saT4KCQk8bGk+aW1hZ2U8L2xpPgoJ PC91bD4KCgk8aDM+YXJjX21ldGFfdHdpdHRlcl9jYXJkPC9oMz4KCgk8cD5PdXRwdXRzIG1l dGEgdGFncyBmb3IgdXNpbmcgVHdpdHRlciBDYXJkcy48L3A+Cgo8cHJlPjxjb2RlPiZsdDt0 eHA6YXJjX21ldGFfdHdpdHRlcl9jYXJkIC8mZ3Q7CjwvY29kZT48L3ByZT4KCgk8cD5KdXN0 IGluY2x1ZGluZyB0aGUgYWJvdmUgdGFnIGluIHlvdXIgdGVtcGxhdGVzJiM4MjE3OyA8Y29k ZT4mbHQ7aGVhZCZndDs8L2NvZGU+IHRhZyB3aWxsIG91dHB1dCB0YWdzIGZvciB0aGUgZm9s bG93aW5nOi08L3A+CgoJPHVsPgoJCTxsaT50d2l0dGVyOmNhcmQgJiM4MjEyOyAmIzgyMTY7 c3VtbWFyeSYjODIxNzsgYnkgZGVmYXVsdCwgY2FuIGFsc28gYmUgc2V0IHRvICYjODIxNjtw aG90byYjODIxNzsgZm9yIGltYWdlIGNvbnRlbnQgb3IgJiM4MjE2O3BsYXllciYjODIxNzsg Zm9yIHZpZGVvczwvbGk+CgkJPGxpPnR3aXR0ZXI6dGl0bGUgJiM4MjEyOyB0aGUgYXJ0aWNs ZSYjODIxNztzIHRpdGxlLCBzZWN0aW9uIG5hbWUgb3IgY2F0ZWdvcnkgbmFtZTwvbGk+CgkJ PGxpPnR3aXR0ZXI6ZGVzY3JpcHRpb24gJiM4MjEyOyB5b3VyIHBhZ2UmIzgyMTc7cyBtZXRh IGRlc2NyaXB0aW9uPC9saT4KCQk8bGk+dHdpdHRlcjp1cmwgJiM4MjEyOyB5b3VyIHBhZ2Um IzgyMTc7cyBjYW5vbmljYWwgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj48L2xpPgoJ CTxsaT50d2l0dGVyOmltYWdlICYjODIxMjsgdGhlIGFydGljbGUmIzgyMTc7cyBpbWFnZTwv bGk+Cgk8L3VsPgoKCTxwPllvdSBjYW4gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgdmFsdWVzIG9m IGFueSBvZiB0aGVzZSBieSBwYXNzaW5nIGEgdmFsdWUgdG8gb25lIG9mIHRoZSB0YWcmIzgy MTc7cyBhdHRyaWJ1dGVzIGRlZmluZWQgYmVsb3cuPC9wPgoKCTxwPlRvIHN0YXJ0IHVzaW5n IFR3aXR0ZXIgY2FyZHMgeW91IHdpbGwgbmVlZCB0byBhdXRob3Jpc2UgdGhlbSBmb3IgeW91 ciBkb21haW4gYnkgPGEgaHJlZj0iaHR0cHM6Ly9kZXYudHdpdHRlci5jb20vZG9jcy9jYXJk cy92YWxpZGF0aW9uL3ZhbGlkYXRvciI+dmFsaWRhdGluZyBhbmQgYXBwbHlpbmc8L2E+IG9u IHRoZSBUd2l0dGVyIHdlYnNpdGUuIFlvdSB3aWxsIG5lZWQgdG8gc3VwcGx5IFR3aXR0ZXIg d2l0aCBhIGZldyBkZXRhaWxzIGluY2x1ZGluZyB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVS TDwvc3Bhbj4gb2YgYSBwYWdlIHdpdGggYSBjb21wbGV0ZSBUd2l0dGVyIGNhcmQuIEl0IGNh biB0YWtlIHNldmVyYWwgZGF5cyBmb3IgVHdpdHRlciB0byBhdXRob3Jpc2UgeW91ciBzaXRl LjwvcD4KCgk8aDQ+QXR0cmlidXRlczwvaDQ+CgoJPHVsPgoJCTxsaT5jYXJkPC9saT4KCQk8 bGk+dGl0bGU8L2xpPgoJCTxsaT5kZXNjcmlwdGlvbjwvbGk+CgkJPGxpPnVybDwvbGk+CgkJ PGxpPmltYWdlPC9saT4KCTwvdWw+CgoJPGgzPmFyY19tZXRhX29yZ2FuaXphdGlvbjwvaDM+ CgoJPHA+T3V0cHV0cyBLbm93bGVkZ2UgR3JhcGggc29jaWFsIHByb2ZpbGVzIHNjcmlwdCB0 YWcgZm9yIGFuIG9yZ2FuaXNhdGlvbi48L3A+Cgo8cHJlPjxjb2RlPiZsdDt0eHA6YXJjX21l dGFfb3JnYW5pemF0aW9uIC8mZ3Q7CjwvY29kZT48L3ByZT4KCgk8aDQ+QXR0cmlidXRlczwv aDQ+CgoJPHVsPgoJCTxsaT5uYW1lICYjODIxMjsgT3JnYW5pc2F0aW9uJiM4MjE3O3MgbmFt ZTwvbGk+CgkJPGxpPmxvZ28gJiM4MjEyOyA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFu PiB0byBvcmdhbmlzYXRpb24mIzgyMTc7cyBsb2dvIChyZXF1aXJlZCwgd2lsbCB0aHJvdyBh biBlcnJvciBpZiBub3Qgc2V0KTwvbGk+CgkJPGxpPmZhY2Vib29rICYjODIxMjsgPHNwYW4g Y2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gdG8gRmFjZWJvb2sgcGFnZTwvbGk+CgkJPGxpPmdw bHVzICYjODIxMjsgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gdG8gR29vZ2xlKyBw YWdlPC9saT4KCQk8bGk+dHdpdHRlciAmIzgyMTI7IDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8 L3NwYW4+IHRvIFR3aXR0ZXIgYWNjb3VudDwvbGk+Cgk8L3VsPgoKCTxoMz5hcmNfbWV0YV9w ZXJzb248L2gzPgoKCTxwPk91dHB1dHMgS25vd2xlZGdlIEdyYXBoIHNvY2lhbCBwcm9maWxl cyBzY3JpcHQgdGFnIGZvciBhIHBlcnNvbi48L3A+Cgo8cHJlPjxjb2RlPiZsdDt0eHA6YXJj X21ldGFfcGVyc29uIC8mZ3Q7CjwvY29kZT48L3ByZT4KCgk8aDQ+QXR0cmlidXRlczwvaDQ+ CgoJPHVsPgoJCTxsaT5uYW1lICYjODIxMjsgUGVyc29uJiM4MjE3O3MgbmFtZTwvbGk+CgkJ PGxpPmxvZ28gJiM4MjEyOyA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiB0byBwZXJz b24mIzgyMTc7cyBwaWN0dXJlPC9saT4KCQk8bGk+ZmFjZWJvb2sgJiM4MjEyOyA8c3BhbiBj bGFzcz0iY2FwcyI+VVJMPC9zcGFuPiB0byBGYWNlYm9vayBwYWdlPC9saT4KCQk8bGk+Z3Bs dXMgJiM4MjEyOyA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiB0byBHb29nbGUrIHBh Z2U8L2xpPgoJCTxsaT50d2l0dGVyICYjODIxMjsgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwv c3Bhbj4gdG8gVHdpdHRlciBhY2NvdW50PC9saT4KCTwvdWw+CgoJPGgyPkFkbWluPC9oMj4K Cgk8aDM+QXJ0aWNsZSBXcml0ZSBQYWdlPC9oMz4KCgk8cD5UaGUgcGx1Z2luIHdpbGwgYWRk IDxlbT50aXRsZTwvZW0+IGFuZCA8ZW0+ZGVzY3JpcHRpb248L2VtPiBmaWVsZHMgdG8gdGhl IDxlbT5NZXRhPC9lbT4gb3B0aW9ucy4gVXNlIHRoZXNlIHRvIHNldCB5b3VyIGFydGljbGUm IzgyMTc7cyBtZXRhIGRhdGEuPC9wPgoKCTxwPklmIHlvdSBzZXQgYSB0aXRsZSBoZXJlIGl0 IHdpbGwgYmUgdXNlZCBpbiBwbGFjZSBvZiB0aGUgYXJ0aWNsZSYjODIxNztzIHRpdGxlIHdo ZW4gcmVwbGFjaW5nIHRoZSA8Y29kZT4lYTwvY29kZT4gdG9rZW4gZm9yIHRoZSA8Y29kZT5h cmNfbWV0YV90aXRsZTwvY29kZT4gdGFnLjwvcD4KCgk8cD5UaGUgZGVzY3JpcHRpb24gd2ls bCBiZSB1c2VkIGZvciB0aGUgPGNvZGU+YXJjX21ldGFfZGVzY3JpcHRpb248L2NvZGU+IHRh ZyBhbmQgZm9yIHRoZSBkZXNjcmlwdGlvbnMgdXNlZCBieSB0aGUgPGNvZGU+YXJjX21ldGFf b3Blbl9ncmFwaDwvY29kZT4gYW5kIDxjb2RlPmFyY19tZXRhX3R3aXR0ZXJfY2FyZDwvY29k ZT4gdGFncy48L3A+CgoJPGgzPlNlY3Rpb24gYW5kIENhdGVnb3J5IFBhZ2VzPC9oMz4KCgk8 cD5UaGUgcGx1Z2luIHdpbGwgYWRkIDxlbT5tZXRhIHRpdGxlPC9lbT4gYW5kIDxlbT5tZXRh IGRlc2NyaXB0aW9uPC9lbT4gZmllbGRzIHRvIHRoZSBzZWN0aW9uIGFuZCBjYXRlZ29yeSBl ZGl0IGZvcm1zLjwvcD4KCgk8cD5JZiB5b3Ugc2V0IGEgdGl0bGUgaGVyZSBpdCB3aWxsIGJl IHVzZWQgaW4gcGxhY2Ugb2YgdGhlIHNlY3Rpb24mIzgyMTc7cy9jYXRlZ29yeSYjODIxNztz IG5hbWUgd2hlbiByZXBsYWNpbmcgdGhlIDxjb2RlPiVzPC9jb2RlPi88Y29kZT4lYzwvY29k ZT4gdG9rZW4gZm9yIHRoZSA8Y29kZT5hcmNfbWV0YV90aXRsZTwvY29kZT4gdGFnLiBXaGVu IGVkaXRpbmcgdGhlIGhvbWVwYWdlIHNlY3Rpb24gdGhlIDxlbT5tZXRhIHRpdGxlPC9lbT4g d2lsbCByZXBsYWNlIGFueSBwYXR0ZXJuIGRlZmluZWQgZm9yIHRoZSBwYWdlIHRpdGxlLjwv cD4KCgk8cD5UaGUgZGVzY3JpcHRpb24gd2lsbCBiZSB1c2VkIGZvciB0aGUgPGNvZGU+YXJj X21ldGFfZGVzY3JpcHRpb248L2NvZGU+IHRhZyBhbmQgZm9yIHRoZSBkZXNjcmlwdGlvbnMg dXNlZCBieSB0aGUgPGNvZGU+YXJjX21ldGFfb3Blbl9ncmFwaDwvY29kZT4gYW5kIDxjb2Rl PmFyY19tZXRhX3R3aXR0ZXJfY2FyZDwvY29kZT4gdGFncy48L3A+CgoJPGgzPlBsdWdpbiBP cHRpb25zPC9oMz4KCgk8cD5Gcm9tIHRoZSBwbHVnaW4mIzgyMTc7cyBvcHRpb25zIHBhZ2Ug eW91IGNhbiBzZXQgdGhlIGRlZmF1bHQgcGF0dGVybnMgdXNlZCBmb3IgdGhlIGFyY19tZXRh X3RpdGxlIHRhZy4gVGhlc2UgY2FuIGFsbCBiZSBvdmVycmlkZGVuIHdoZW4gdGhlIHRhZyBp cyBpbmNsdWRlZCBpbiB5b3VyIHBhZ2UgdGVtcGxhdGVzLCBidXQgaXQgbWF5IGJlIGVhc2ll ciB0byBzZXQgdGhlIGRlZmF1bHQgcGF0dGVybnMgaWYgeW91IHdhbnQgdG8gY2hhbmdlIHRo ZSBvbmVzIHRoYXQgY29tZSB3aXRoIHRoZSBwbHVnaW4gd2hlbiBpbnN0YWxsZWQuPC9wPiI7 czo0OiJjb2RlIjtzOjMwNTcyOiJnbG9iYWwgJHByZWZzLCAkdHhwY2ZnLCAkYXJjX21ldGE7 CgovLyBSZWdpc3RlciB0YWdzLgpUeHA6OmdldCgnXFRleHRwYXR0ZXJuXFRhZ1xSZWdpc3Ry eScpCiAgICAtPnJlZ2lzdGVyKCdhcmNfbWV0YV90aXRsZScpCiAgICAtPnJlZ2lzdGVyKCdh cmNfbWV0YV9kZXNjcmlwdGlvbicpCiAgICAtPnJlZ2lzdGVyKCdhcmNfbWV0YV9jYW5vbmlj YWwnKQogICAgLT5yZWdpc3RlcignYXJjX21ldGFfcm9ib3RzJykKICAgIC0+cmVnaXN0ZXIo J2FyY19tZXRhX2tleXdvcmRzJykKICAgIC0+cmVnaXN0ZXIoJ2FyY19tZXRhX29wZW5fZ3Jh cGgnKQogICAgLT5yZWdpc3RlcignYXJjX21ldGFfdHdpdHRlcl9jYXJkJykKICAgIC0+cmVn aXN0ZXIoJ2FyY19tZXRhX29yZ2FuaXphdGlvbicpCiAgICAtPnJlZ2lzdGVyKCdhcmNfbWV0 YV9wZXJzb24nKTsKCnJlZ2lzdGVyX2NhbGxiYWNrKCdfYXJjX21ldGFfaW5zdGFsbCcsICdw bHVnaW5fbGlmZWN5Y2xlLmFyY19tZXRhJywgJ2luc3RhbGxlZCcpOwpyZWdpc3Rlcl9jYWxs YmFjaygnX2FyY19tZXRhX3VuaW5zdGFsbCcsICdwbHVnaW5fbGlmZWN5Y2xlLmFyY19tZXRh JywgJ2RlbGV0ZWQnKTsKcmVnaXN0ZXJfY2FsbGJhY2soJ2FyY19tZXRhX29wdGlvbnMnLCAn cGx1Z2luX3ByZWZzLmFyY19tZXRhJyk7CmFkZF9wcml2cygncGx1Z2luX3ByZWZzLmFyY19t ZXRhJywgJzEsMicpOwphZGRfcHJpdnMoJ3ByZWZzLmFyY19tZXRhJywgJzEsMicpOwoKCmZ1 bmN0aW9uIGFyY19tZXRhX3RpdGxlKCRhdHRzKQp7CiAgICBnbG9iYWwgJHBhcmVudGlkLCAk dGhpc2FydGljbGUsICRpZCwgJHEsICRjLCAkY29udGV4dCwgJHMsICRzaXRlbmFtZSwgJHBy ZWZzOwoKICAgIGV4dHJhY3QobEF0dHMoYXJyYXkoCiAgICAgICAgJ3NlcGFyYXRvcicgPT4g JyB8ICcsCiAgICAgICAgJ3RpdGxlJyA9PiBudWxsLAogICAgICAgICdhcnRpY2xlX3RpdGxl JyA9PiAkcHJlZnNbJ2FyY19tZXRhX2FydGljbGVfdGl0bGUnXSwKICAgICAgICAnY29tbWVu dF90aXRsZScgPT4gJHByZWZzWydhcmNfbWV0YV9jb21tZW50X3RpdGxlJ10sCiAgICAgICAg J3NlYXJjaF90aXRsZScgPT4gJHByZWZzWydhcmNfbWV0YV9zZWFyY2hfdGl0bGUnXSwKICAg ICAgICAnY2F0ZWdvcnlfdGl0bGUnID0+ICRwcmVmc1snYXJjX21ldGFfY2F0ZWdvcnlfdGl0 bGUnXSwKICAgICAgICAnc2VjdGlvbl90aXRsZScgPT4gJHByZWZzWydhcmNfbWV0YV9zZWN0 aW9uX3RpdGxlJ10sCiAgICAgICAgJ3NlY3Rpb25fY2F0ZWdvcnlfdGl0bGUnID0+ICRwcmVm c1snYXJjX21ldGFfc2VjdGlvbl9jYXRlZ29yeV90aXRsZSddLAogICAgICAgICdob21lcGFn ZV90aXRsZScgPT4gJHByZWZzWydhcmNfbWV0YV9ob21lcGFnZV90aXRsZSddLAogICAgICAg ICd0eXBlJyA9PiBudWxsCiAgICApLCAkYXR0cykpOwoKICAgIGlmICgkdGl0bGUgPT09IG51 bGwpIHsKICAgICAgICAkbWV0YSA9IF9hcmNfbWV0YSgkdHlwZSk7CgogICAgICAgIC8vIERl dGVybWluZSB0aGUgdGl0bGUgdHlwZS4KICAgICAgICBpZiAoJHR5cGUgPT09IG51bGwpIHsK ICAgICAgICAgICAgaWYgKCFlbXB0eSgkcGFyZW50X2lkKSB8fCAhZW1wdHkoJHRoaXNhcnRp Y2xlWyd0aXRsZSddKSkgewogICAgICAgICAgICAgICAgJHR5cGUgPSAnY29tbWVudHMnOwog ICAgICAgICAgICB9IGVsc2VpZiAoJHEpIHsKICAgICAgICAgICAgICAgICR0eXBlID0gJ3Nl YXJjaCc7CiAgICAgICAgICAgIH0gZWxzZWlmICgkYykgewogICAgICAgICAgICAgICAgJHR5 cGUgPSAnY2F0ZWdvcnknOwogICAgICAgICAgICB9IGVsc2VpZiAoJHMgYW5kICRzICE9ICdk ZWZhdWx0JykgewogICAgICAgICAgICAgICAgJHR5cGUgPSAnc2VjdGlvbic7CiAgICAgICAg ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkdHlwZSA9ICdhcnRpY2xlJzsKICAgICAg ICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJHRva2VucyA9IGFycmF5KAogICAgICAgICAg ICAnXyVuXycgPT4gdHhwc3BlY2lhbGNoYXJzKCRzaXRlbmFtZSksCiAgICAgICAgICAgICdf JXRfJyA9PiB0eHBzcGVjaWFsY2hhcnMoJHByZWZzWydzaXRlX3Nsb2dhbiddKQogICAgICAg ICk7CgogICAgICAgIGlmICgkdHlwZSA9PT0gJ2NvbW1lbnRzJykgewogICAgICAgICAgICAk dG9rZW5zWydfJWFfJ10gPSBlbXB0eSgkbWV0YVsndGl0bGUnXSkgPyBlc2NhcGVfdGl0bGUo JHRoaXNhcnRpY2xlWyd0aXRsZSddKSA6ICRtZXRhWyd0aXRsZSddOwogICAgICAgICAgICAk dG9rZW5zWydfJXNfJ10gPSB0eHBzcGVjaWFsY2hhcnMoZmV0Y2hfc2VjdGlvbl90aXRsZSgk dGhpc2FydGljbGVbJ3NlY3Rpb24nXSkpOwogICAgICAgICAgICAkcGF0dGVybiA9ICFlbXB0 eSgkcGFyZW50X2lkKSA/ICRjb21tZW50X3RpdGxlIDogJGFydGljbGVfdGl0bGU7CiAgICAg ICAgfSBlbHNlaWYgKCR0eXBlID09PSAnc2VhcmNoJykgewogICAgICAgICAgICAkdG9rZW5z WydfJXFfJ10gPSB0eHBzcGVjaWFsY2hhcnMoJHEpOwogICAgICAgICAgICAkcGF0dGVybiA9 ICRzZWFyY2hfdGl0bGU7CiAgICAgICAgfSBlbHNlaWYgKCR0eXBlID09PSAnY2F0ZWdvcnkn KSB7CiAgICAgICAgICAgICR0b2tlbnNbJ18lY18nXSA9ICRtZXRhWyd0aXRsZSddID86IHR4 cHNwZWNpYWxjaGFycyhmZXRjaF9jYXRlZ29yeV90aXRsZSgkYywgJGNvbnRleHQpKTsKICAg ICAgICAgICAgaWYgKCRzIGFuZCAkcyAhPSAnZGVmYXVsdCcpIHsKICAgICAgICAgICAgICAg ICR0b2tlbnNbJ18lc18nXSA9IHR4cHNwZWNpYWxjaGFycyhmZXRjaF9zZWN0aW9uX3RpdGxl KCRzKSk7CiAgICAgICAgICAgICAgICAkcGF0dGVybiA9ICRzZWN0aW9uX2NhdGVnb3J5X3Rp dGxlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHBhdHRlcm4gPSAk Y2F0ZWdvcnlfdGl0bGU7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2VpZiAoJHR5cGUg PT09ICdzZWN0aW9uJykgewogICAgICAgICAgICAkdG9rZW5zWydfJXNfJ10gPSAkbWV0YVsn dGl0bGUnXSA/OiB0eHBzcGVjaWFsY2hhcnMoZmV0Y2hfc2VjdGlvbl90aXRsZSgkcykpOwog ICAgICAgICAgICAkcGF0dGVybiA9ICRzZWN0aW9uX3RpdGxlOwogICAgICAgIH0gZWxzZSB7 CiAgICAgICAgICAgICRwYXR0ZXJuID0gJG1ldGFbJ3RpdGxlJ10gPzogJGhvbWVwYWdlX3Rp dGxlOwogICAgICAgIH0KCiAgICAgICAgJHRpdGxlID0gcHJlZ19yZXBsYWNlKGFycmF5X2tl eXMoJHRva2VucyksIGFycmF5X3ZhbHVlcygkdG9rZW5zKSwgJHBhdHRlcm4pOwogICAgfQoK ICAgICRodG1sID0gdGFnKCR0aXRsZSwgJ3RpdGxlJyk7CgogICAgcmV0dXJuICRodG1sOwp9 CgpmdW5jdGlvbiBhcmNfbWV0YV9jYW5vbmljYWwoJGF0dHMpCnsKICAgIGV4dHJhY3QobEF0 dHMoYXJyYXkoCiAgICAgICAgJ3VybCcgPT4gbnVsbAogICAgKSwgJGF0dHMpKTsKCiAgICAk dXJsID0gJHVybCAhPT0gbnVsbCA/ICR1cmwgOiBfYXJjX21ldGFfdXJsKCk7CgogICAgJGh0 bWwgPSAiPGxpbmsgcmVsPVwiY2Fub25pY2FsXCIgaHJlZj1cIiR1cmxcIiAvPiI7CgogICAg cmV0dXJuICRodG1sOwp9CgpmdW5jdGlvbiBhcmNfbWV0YV9kZXNjcmlwdGlvbigkYXR0cykK ewogICAgZXh0cmFjdChsQXR0cyhhcnJheSgKICAgICAgICAnZGVzY3JpcHRpb24nID0+IG51 bGwsCiAgICAgICAgJ3R5cGUnID0+IG51bGwKICAgICksICRhdHRzKSk7CgogICAgaWYgKCRk ZXNjcmlwdGlvbiA9PT0gbnVsbCkgewogICAgICAgICRtZXRhID0gX2FyY19tZXRhKCR0eXBl KTsKICAgICAgICAkZGVzY3JpcHRpb24gPSAhZW1wdHkoJG1ldGFbJ2Rlc2NyaXB0aW9uJ10p ID8gdHhwc3BlY2lhbGNoYXJzKCRtZXRhWydkZXNjcmlwdGlvbiddLCBFTlRfUVVPVEVTKSA6 IF9hcmNfbWV0YV9kZXNjcmlwdGlvbigkdHlwZSk7CiAgICB9CgogICAgaWYgKCRkZXNjcmlw dGlvbikgewogICAgICAgICRkZXNjcmlwdGlvbiA9IHRyaW0oJGRlc2NyaXB0aW9uKTsKICAg ICAgICByZXR1cm4gIjxtZXRhIG5hbWU9XCJkZXNjcmlwdGlvblwiIGNvbnRlbnQ9XCIkZGVz Y3JpcHRpb25cIiAvPiI7CiAgICB9CgogICAgcmV0dXJuICcnOwp9CgpmdW5jdGlvbiBhcmNf bWV0YV9yb2JvdHMoJGF0dHMpCnsKICAgIGV4dHJhY3QobEF0dHMoYXJyYXkoCiAgICAgICAg J3JvYm90cycgPT4gbnVsbCwKICAgICAgICAndHlwZScgPT4gbnVsbAogICAgKSwgJGF0dHMp KTsKCiAgICBpZiAoJHJvYm90cyA9PT0gbnVsbCkgewogICAgICAgICRtZXRhID0gX2FyY19t ZXRhKCR0eXBlKTsKICAgICAgICAkcm9ib3RzID0gIWVtcHR5KCRtZXRhWydyb2JvdHMnXSkg PyAkbWV0YVsncm9ib3RzJ10gOiBudWxsOwogICAgfQoKICAgICRvdXQgPSAnJzsKCiAgICBp ZiAoZ2V0X3ByZWYoJ3Byb2R1Y3Rpb25fc3RhdHVzJykgIT0gJ2xpdmUnKSB7CiAgICAgICAg JG91dCAuPSAiPG1ldGEgbmFtZT1cInJvYm90c1wiIGNvbnRlbnQ9XCJub2luZGV4LCBub2Zv bGxvd1wiIC8+IjsKICAgICAgICAkb3V0IC49ICRyb2JvdHMgPyAiPCEtLSAkcm9ib3RzIC0t PiIgOiBudWxsOwogICAgfSBlbHNlaWYgKCRyb2JvdHMpIHsKICAgICAgICAkb3V0IC49ICI8 bWV0YSBuYW1lPVwicm9ib3RzXCIgY29udGVudD1cIiRyb2JvdHNcIiAvPiI7CiAgICB9Cgog ICAgcmV0dXJuICRvdXQ7Cn0KCmZ1bmN0aW9uIGFyY19tZXRhX2tleXdvcmRzKCRhdHRzKQp7 CiAgICBnbG9iYWwgJHRoaXNhcnRpY2xlOwoKICAgIGV4dHJhY3QobEF0dHMoYXJyYXkoCiAg ICAgICAgJ2tleXdvcmRzJyA9PiBudWxsCiAgICApLCAkYXR0cykpOwoKICAgICRrZXl3b3Jk cyA9ICRrZXl3b3Jkcz09PW51bGwgJiYgaXNzZXQoJHRoaXNhcnRpY2xlWydrZXl3b3Jkcydd KSA/ICR0aGlzYXJ0aWNsZVsna2V5d29yZHMnXSA6IG51bGw7CgogICAgaWYgKCRrZXl3b3Jk cykgewogICAgICAgICRrZXl3b3JkcyA9IHR4cHNwZWNpYWxjaGFycygka2V5d29yZHMpOwog ICAgICAgIHJldHVybiAiPG1ldGEgbmFtZT1cImtleXdvcmRzXCIgY29udGVudD1cIiRrZXl3 b3Jkc1wiIC8+IjsKICAgIH0KCiAgICByZXR1cm4gJyc7Cgp9CgpmdW5jdGlvbiBhcmNfbWV0 YV9vcGVuX2dyYXBoKCRhdHRzKQp7CiAgICBnbG9iYWwgJHRoaXNhcnRpY2xlLCAkcHJlZnMs ICRzLCAkYzsKCiAgICBleHRyYWN0KGxBdHRzKGFycmF5KAogICAgICAgICdzaXRlX25hbWUn ID0+ICRwcmVmc1snc2l0ZW5hbWUnXSwKICAgICAgICAndGl0bGUnID0+IG51bGwsCiAgICAg ICAgJ2Rlc2NyaXB0aW9uJyA9PiBudWxsLAogICAgICAgICd1cmwnID0+IG51bGwsCiAgICAg ICAgJ2ltYWdlJyA9PiBudWxsCiAgICApLCAkYXR0cykpOwoKICAgICR0aXRsZSA9ICR0aXRs ZT09PW51bGwgPyBfYXJjX21ldGFfdGl0bGUoKSA6ICR0aXRsZTsKICAgICRkZXNjcmlwdGlv biA9ICRkZXNjcmlwdGlvbj09PW51bGwgPyBfYXJjX21ldGFfZGVzY3JpcHRpb24oKSA6ICRk ZXNjcmlwdGlvbjsKICAgICR1cmwgPSAkdXJsPT09bnVsbCA/IF9hcmNfbWV0YV91cmwoKSA6 ICR1cmw7CiAgICAkaW1hZ2UgPSAkaW1hZ2U9PT1udWxsID8gX2FyY19tZXRhX2ltYWdlKCkg OiAkaW1hZ2U7CgogICAgJGh0bWwgPSAnJzsKICAgIGlmICgkc2l0ZV9uYW1lKSB7CiAgICAg ICAgJGh0bWwgLj0gIjxtZXRhIHByb3BlcnR5PVwib2c6c2l0ZV9uYW1lXCIgY29udGVudD1c IiRzaXRlX25hbWVcIiAvPiI7CiAgICB9CiAgICBpZiAoJHRpdGxlKSB7CiAgICAgICAgJGh0 bWwgLj0gIjxtZXRhIHByb3BlcnR5PVwib2c6dGl0bGVcIiBjb250ZW50PVwiJHRpdGxlXCIg Lz4iOwogICAgfQogICAgaWYgKCRkZXNjcmlwdGlvbikgewogICAgICAgICRodG1sIC49ICI8 bWV0YSBwcm9wZXJ0eT1cIm9nOmRlc2NyaXB0aW9uXCIgY29udGVudD1cIiRkZXNjcmlwdGlv blwiIC8+IjsKICAgIH0KICAgIGlmICgkdXJsKSB7CiAgICAgICAgJGh0bWwgLj0gIjxtZXRh IHByb3BlcnR5PVwib2c6dXJsXCIgY29udGVudD1cIiR1cmxcIiAvPiI7CiAgICB9CiAgICBp ZiAoJGltYWdlKSB7CiAgICAgICAgJGh0bWwgLj0gIjxtZXRhIHByb3BlcnR5PVwib2c6aW1h Z2VcIiBjb250ZW50PVwiJGltYWdlXCIgLz4iOwogICAgfQoKICAgIHJldHVybiAkaHRtbDsK fQoKZnVuY3Rpb24gYXJjX21ldGFfdHdpdHRlcl9jYXJkKCRhdHRzKQp7CiAgICBnbG9iYWwg JHRoaXNhcnRpY2xlLCAkcHJlZnMsICRzLCAkYzsKCiAgICBleHRyYWN0KGxBdHRzKGFycmF5 KAogICAgICAgICdjYXJkJyA9PiAnc3VtbWFyeScsCiAgICAgICAgJ3RpdGxlJyA9PiBudWxs LAogICAgICAgICdkZXNjcmlwdGlvbicgPT4gbnVsbCwKICAgICAgICAndXJsJyA9PiBudWxs LAogICAgICAgICdpbWFnZScgPT4gbnVsbAogICAgKSwgJGF0dHMpKTsKCiAgICAkdGl0bGUg PSAkdGl0bGU9PT1udWxsID8gX2FyY19tZXRhX3RpdGxlKCkgOiAkdGl0bGU7CiAgICAkZGVz Y3JpcHRpb24gPSAkZGVzY3JpcHRpb249PT1udWxsID8gX2FyY19tZXRhX2Rlc2NyaXB0aW9u KCkgOiAkZGVzY3JpcHRpb247CiAgICAkdXJsID0gJHVybD09PW51bGwgPyBfYXJjX21ldGFf dXJsKCkgOiAkdXJsOwogICAgJGltYWdlID0gJGltYWdlPT09bnVsbCA/IF9hcmNfbWV0YV9p bWFnZSgpIDogJGltYWdlOwoKICAgICRodG1sID0gIjxtZXRhIG5hbWU9XCJ0d2l0dGVyOmNh cmRcIiBjb250ZW50PVwiJGNhcmRcIiAvPiI7CiAgICAkaHRtbCAuPSAiPG1ldGEgbmFtZT1c InR3aXR0ZXI6dGl0bGVcIiBjb250ZW50PVwiJHRpdGxlXCIgLz4iOwogICAgJGh0bWwgLj0g IjxtZXRhIG5hbWU9XCJ0d2l0dGVyOmRlc2NyaXB0aW9uXCIgY29udGVudD1cIiRkZXNjcmlw dGlvblwiIC8+IjsKCiAgICBpZiAoJHVybCkgewogICAgICAgICRodG1sIC49ICI8bWV0YSBu YW1lPVwidHdpdHRlcjp1cmxcIiBjb250ZW50PVwiJHVybFwiIC8+IjsKICAgIH0KICAgIGlm ICgkaW1hZ2UpIHsKICAgICAgICAkaHRtbCAuPSAiPG1ldGEgbmFtZT1cInR3aXR0ZXI6aW1h Z2U6c3JjXCIgY29udGVudD1cIiRpbWFnZVwiIC8+IjsKICAgIH0KCiAgICByZXR1cm4gJGh0 bWw7Cgp9CgpmdW5jdGlvbiBhcmNfbWV0YV9vcmdhbml6YXRpb24oJGF0dHMpCnsKICAgIGds b2JhbCAkcHJlZnM7CgogICAgZXh0cmFjdChsQXR0cyhhcnJheSgKICAgICAgICAnbmFtZScg PT4gJHByZWZzWydzaXRlbmFtZSddLAogICAgICAgICdsb2dvJyA9PiBudWxsLAogICAgICAg ICdmYWNlYm9vaycgPT4gbnVsbCwKICAgICAgICAnZ3BsdXMnID0+IG51bGwsCiAgICAgICAg J3R3aXR0ZXInID0+IG51bGwKICAgICksICRhdHRzKSk7CgogICAgaWYgKGVtcHR5KCRsb2dv KSkgewogICAgICAgIHRyaWdnZXJfZXJyb3IoJ2FyY19tZXRhX29yZ2FuaXphdGlvbiBtaXNz aW5nIGxvZ28gYXR0cmlidXRlJywgRV9VU0VSX1dBUk5JTkcpOwogICAgfQoKICAgICRkYXRh ID0gYXJyYXkoCiAgICAgICAgJ0Bjb250ZXh0JyA9PiAnaHR0cDovL3NjaGVtYS5vcmcnLAog ICAgICAgICdAdHlwZScgPT4gJ09yZ2FuaXphdGlvbicsCiAgICAgICAgJ25hbWUnID0+ICRu YW1lLAogICAgICAgICdsb2dvJyA9PiAkbG9nbywKICAgICAgICAndXJsJyA9PiBodQogICAg KTsKCiAgICAkc2FtZUFzID0gYXJyYXkoKTsKICAgIGlmICghZW1wdHkoJGZhY2Vib29rKSkg ewogICAgICAgICRzYW1lQXNbXSA9ICRmYWNlYm9vazsKICAgIH0KICAgIGlmICghZW1wdHko JGdwbHVzKSkgewogICAgICAgICRzYW1lQXNbXSA9ICRncGx1czsKICAgIH0KICAgIGlmICgh ZW1wdHkoJHR3aXR0ZXIpKSB7CiAgICAgICAgJHNhbWVBc1tdID0gJHR3aXR0ZXI7CiAgICB9 CgogICAgaWYgKCFlbXB0eSgkc2FtZUFzKSkgewogICAgICAgICRkYXRhWydzYW1lQXMnXSA9 ICRzYW1lQXM7CiAgICB9CgogICAgcmV0dXJuICc8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9u L2xkK2pzb24iPicgLiBzdHJfcmVwbGFjZSgnXFwvJywgJy8nLCBqc29uX2VuY29kZSgkZGF0 YSkpIC4gJzwvc2NyaXB0Pic7Cgp9CgpmdW5jdGlvbiBhcmNfbWV0YV9wZXJzb24oJGF0dHMp CnsKICAgIGdsb2JhbCAkcHJlZnM7CgogICAgZXh0cmFjdChsQXR0cyhhcnJheSgKICAgICAg ICAnbmFtZScgPT4gJHByZWZzWydzaXRlbmFtZSddLAogICAgICAgICdsb2dvJyA9PiBudWxs LAogICAgICAgICdmYWNlYm9vaycgPT4gbnVsbCwKICAgICAgICAnZ3BsdXMnID0+IG51bGws CiAgICAgICAgJ3R3aXR0ZXInID0+IG51bGwKICAgICksICRhdHRzKSk7CgogICAgJGRhdGEg PSBhcnJheSgKICAgICAgICAnQGNvbnRleHQnID0+ICdodHRwOi8vc2NoZW1hLm9yZycsCiAg ICAgICAgJ0B0eXBlJyA9PiAnUGVyc29uJywKICAgICAgICAnbmFtZScgPT4gJG5hbWUsCiAg ICAgICAgJ3VybCcgPT4gaHUKICAgICk7CgogICAgJHNhbWVBcyA9IGFycmF5KCk7CiAgICBp ZiAoIWVtcHR5KCRmYWNlYm9vaykpIHsKICAgICAgICAkc2FtZUFzW10gPSAkZmFjZWJvb2s7 CiAgICB9CiAgICBpZiAoIWVtcHR5KCRncGx1cykpIHsKICAgICAgICAkc2FtZUFzW10gPSAk Z3BsdXM7CiAgICB9CiAgICBpZiAoIWVtcHR5KCR0d2l0dGVyKSkgewogICAgICAgICRzYW1l QXNbXSA9ICR0d2l0dGVyOwogICAgfQoKICAgIGlmICghZW1wdHkoJHNhbWVBcykpIHsKICAg ICAgICAkZGF0YVsnc2FtZUFzJ10gPSAkc2FtZUFzOwogICAgfQoKICAgIHJldHVybiAnPHNj cmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9sZCtqc29uIj4nIC4gc3RyX3JlcGxhY2UoJ1xcLycs ICcvJywganNvbl9lbmNvZGUoJGRhdGEpKSAuICc8L3NjcmlwdD4nOwoKfQoKZnVuY3Rpb24g X2FyY19tZXRhX3RpdGxlKCkKewogICAgZ2xvYmFsICR0aGlzYXJ0aWNsZSwgJHByZWZzLCAk cywgJGM7CgogICAgaWYgKCFlbXB0eSgkdGhpc2FydGljbGVbJ3RoaXNpZCddKSkgewogICAg ICAgICR0aXRsZSA9IHR4cHNwZWNpYWxjaGFycygkdGhpc2FydGljbGVbJ3RpdGxlJ10pOwog ICAgfSBlbHNlaWYgKCFlbXB0eSgkcykgYW5kICRzICE9ICdkZWZhdWx0JykgewogICAgICAg ICR0aXRsZSA9IHR4cHNwZWNpYWxjaGFycyhmZXRjaF9zZWN0aW9uX3RpdGxlKCRzKSk7CiAg ICB9IGVsc2VpZiAoIWVtcHR5KCRjKSkgewogICAgICAgICR0aXRsZSA9IHR4cHNwZWNpYWxj aGFycyhmZXRjaF9jYXRlZ29yeV90aXRsZSgkYykpOwogICAgfSBlbHNlIHsKICAgICAgICAk dGl0bGUgPSB0eHBzcGVjaWFsY2hhcnMoJHByZWZzWydzaXRlbmFtZSddKTsKICAgIH0KCiAg ICByZXR1cm4gJHRpdGxlOwoKfQoKZnVuY3Rpb24gX2FyY19tZXRhX3VybCgpCnsKICAgIGds b2JhbCAkdGhpc2FydGljbGUsICRzLCAkYzsKCiAgICBpZiAoIWVtcHR5KCR0aGlzYXJ0aWNs ZVsndGhpc2lkJ10pKSB7CiAgICAgICAgJHVybCA9IHBlcm1saW5rdXJsKCR0aGlzYXJ0aWNs ZSk7CiAgICB9IGVsc2VpZiAoIWVtcHR5KCRzKSBhbmQgJHMgIT0gJ2RlZmF1bHQnKSB7CiAg ICAgICAgJHVybCA9IHBhZ2VsaW5rdXJsKGFycmF5KCdzJyA9PiAkcykpOwogICAgfSBlbHNl aWYgKCFlbXB0eSgkYykpIHsKICAgICAgICAkdXJsID0gcGFnZWxpbmt1cmwoYXJyYXkoJ2Mn ID0+ICRjKSk7CiAgICB9IGVsc2UgewogICAgICAgICR1cmwgPSBodTsKICAgIH0KICAgIHJl dHVybiAkdXJsOwp9CgpmdW5jdGlvbiBfYXJjX21ldGFfaW1hZ2UoKQp7CiAgICBnbG9iYWwg JHRoaXNhcnRpY2xlOwoKICAgICRpbWFnZSA9ICR0aGlzYXJ0aWNsZVsnYXJ0aWNsZV9pbWFn ZSddOwoKICAgIGlmIChpbnR2YWwoJGltYWdlKSkgewogICAgICAgIGlmICgkcnMgPSBzYWZl X3JvdygnKicsICd0eHBfaW1hZ2UnLCAnaWQgPSAnIC4gaW50dmFsKCRpbWFnZSkpKSB7CiAg ICAgICAgICAgICRpbWFnZSA9IGltYWdlc3JjdXJsKCRyc1snaWQnXSwgJHJzWydleHQnXSk7 CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGltYWdlID0gbnVsbDsKICAgICAgICB9 CgogICAgfSBlbHNlIHsKICAgICAgICAkbWV0YSA9IF9hcmNfbWV0YSgpOwogICAgICAgIGlm ICghZW1wdHkoJG1ldGFbJ2ltYWdlJ10pICYmICRycyA9IHNhZmVfcm93KCcqJywgJ3R4cF9p bWFnZScsICdpZCA9ICcgLiBpbnR2YWwoJG1ldGFbJ2ltYWdlJ10pKSkgewogICAgICAgICAg ICAkaW1hZ2UgPSBpbWFnZXNyY3VybCgkcnNbJ2lkJ10sICRyc1snZXh0J10pOwogICAgICAg IH0gZWxzZSB7CiAgICAgICAgICAgICRpbWFnZSA9IG51bGw7CiAgICAgICAgfQoKICAgIH0K CiAgICByZXR1cm4gJGltYWdlOwp9CgovKioKICogRmV0Y2ggbWV0YSBkZXNjcmlwdGlvbiBm cm9tIHRoZSBnaXZlbiAob3IgYXV0b21hdGljKSBjb250ZXh0LgogKgogKiBDYXRlZ29yeSBj b250ZXh0IG1heSBiZSByZWZpbmVkIGJ5IHNwZWNpZnlpbmcgdGhlIGNvbnRlbnQgdHlwZSBh cyB3ZWxsCiAqIGFmdGVyIGEgZG90LiBlLmcuIGNhdGVnb3J5LmltYWdlIHRvIGNoZWNrIGlt YWdlIGNvbnRleHQgY2F0ZWdvcnkuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHR5cGUgRmxhdm91 ciBvZiBtZXRhIGNvbnRlbnQgdG8gZmV0Y2ggKHNlY3Rpb24sIGNhdGVnb3J5LCBhcnRpY2xl KQogKi8KZnVuY3Rpb24gX2FyY19tZXRhX2Rlc2NyaXB0aW9uKCR0eXBlID0gbnVsbCkKewog ICAgZ2xvYmFsICR0aGlzYXJ0aWNsZTsKCiAgICAkbWV0YURlc2NyaXB0aW9uID0gZ2V0TWV0 YURlc2NyaXB0aW9uKCR0eXBlKTsKCiAgICBpZiAoIWVtcHR5KCRtZXRhRGVzY3JpcHRpb24p KSB7CiAgICAgICAgJGRlc2NyaXB0aW9uID0gdHhwc3BlY2lhbGNoYXJzKCRtZXRhRGVzY3Jp cHRpb24pOwogICAgfSBlbHNlaWYgKCFlbXB0eSgkdGhpc2FydGljbGVbJ2V4Y2VycHQnXSkp IHsKICAgICAgICAkZGVzY3JpcHRpb24gPSBzdHJpcF90YWdzKCR0aGlzYXJ0aWNsZVsnZXhj ZXJwdCddKTsKICAgICAgICAkZGVzY3JpcHRpb24gPSBzdWJzdHIoJGRlc2NyaXB0aW9uLCAw LCAyMDApOwogICAgICAgICRkZXNjcmlwdGlvbiA9IHR4cHNwZWNpYWxjaGFycygkZGVzY3Jp cHRpb24pOwogICAgfSBlbHNlaWYgKCFlbXB0eSgkdGhpc2FydGljbGVbJ2JvZHknXSkpIHsK ICAgICAgICAkZGVzY3JpcHRpb24gPSBzdHJpcF90YWdzKCR0aGlzYXJ0aWNsZVsnYm9keSdd KTsKICAgICAgICAkZGVzY3JpcHRpb24gPSBzdWJzdHIoJGRlc2NyaXB0aW9uLCAwLCAyMDAp OwogICAgICAgICRkZXNjcmlwdGlvbiA9IHR4cHNwZWNpYWxjaGFycygkZGVzY3JpcHRpb24p OwogICAgfSBlbHNlIHsKICAgICAgICAkZGVzY3JpcHRpb24gPSBudWxsOwogICAgfQoKICAg IHJldHVybiAkZGVzY3JpcHRpb247Cn0KCi8qKgogKiBGZXRjaGVzIG1ldGEgZGF0YSBmb3Ig dGhlIGN1cnJlbnQgY29udGV4dC4KICogQHBhcmFtICBzdHJpbmcgICR0eXBlICAgQ29udGV4 dAogKiBAcGFyYW0gIGludCAgICAgJHR5cGVJZCBDb250ZXh0J3MgcHJpbWFyeSBrZXkKICog QHBhcmFtICBib29sZWFuICRhZG1pbiAgUGFzcyB0cnVlIGlmIGNhbGxlZCBmcm9tIHRoZSBh ZG1pbiBhcmVhCiAqIEByZXR1cm4gYXJyYXkgICAgICAgICAgIE1ldGEgZGF0YQogKi8KZnVu Y3Rpb24gX2FyY19tZXRhKCR0eXBlID0gbnVsbCwgJHR5cGVJZCA9IG51bGwsICRhZG1pbiA9 IGZhbHNlKQp7CiAgICBnbG9iYWwgJHRoaXNhcnRpY2xlLCAkdGhpc2NhdGVnb3J5LCAkdGhp c3NlY3Rpb24sICRzLCAkYywgJGFyY19tZXRhOwoKICAgIGlmIChlbXB0eSgkYXJjX21ldGEp KSB7CiAgICAgICAgJGFyY19tZXRhID0gYXJyYXkoCiAgICAgICAgICAgICdpZCcgPT4gbnVs bCwKICAgICAgICAgICAgJ3RpdGxlJyA9PiBudWxsLAogICAgICAgICAgICAnZGVzY3JpcHRp b24nID0+IG51bGwsCiAgICAgICAgICAgICdpbWFnZScgPT4gbnVsbCwKICAgICAgICAgICAg J3JvYm90cycgPT4gbnVsbAogICAgICAgICk7CgogICAgICAgIGlmICgkYWRtaW4gPT09IHRy dWUgJiYgJHR5cGVJZCA9PT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm4gJGFyY19tZXRh OwogICAgICAgIH0KCiAgICAgICAgaWYgKGVtcHR5KCR0eXBlKSkgewogICAgICAgICAgICBp ZiAoIWVtcHR5KCR0aGlzYXJ0aWNsZVsndGhpc2lkJ10pKSB7CiAgICAgICAgICAgICAgICAk dHlwZUlkID0gJHR5cGVJZCA/OiAkdGhpc2FydGljbGVbJ3RoaXNpZCddOwogICAgICAgICAg ICAgICAgJHR5cGUgPSAnYXJ0aWNsZSc7CiAgICAgICAgICAgIH0gZWxzZWlmICghZW1wdHko JGMpKSB7CiAgICAgICAgICAgICAgICAkdHlwZUlkID0gJHR5cGVJZCA/OiAkYzsKICAgICAg ICAgICAgICAgICR0eXBlID0gJ2NhdGVnb3J5JzsKICAgICAgICAgICAgfSBlbHNlaWYgKCFl bXB0eSgkcykpIHsKICAgICAgICAgICAgICAgICR0eXBlSWQgPSAkdHlwZUlkID86ICRzOwog ICAgICAgICAgICAgICAgJHR5cGUgPSAnc2VjdGlvbic7CiAgICAgICAgICAgIH0KCiAgICAg ICAgfSBlbHNlaWYgKCR0eXBlSWQgPT09IG51bGwpIHsKICAgICAgICAgICAgaWYgKHN0cnBv cygkdHlwZSwgJ2NhdGVnb3J5JykgPT09IDApIHsKICAgICAgICAgICAgICAgICR0eXBlID0g J2NhdGVnb3J5JzsKICAgICAgICAgICAgICAgICR0eXBlSWQgPSAkdGhpc2NhdGVnb3J5ID8g JHRoaXNjYXRlZ29yeVsnbmFtZSddIDogJGM7CiAgICAgICAgICAgIH0gZWxzZWlmICgkdHlw ZSA9PT0gJ3NlY3Rpb24nKSB7CiAgICAgICAgICAgICAgICAkdHlwZUlkID0gJHRoaXNzZWN0 aW9uWyduYW1lJ10gPyAkdGhpc3NlY3Rpb25bJ25hbWUnXSA6ICRzOwogICAgICAgICAgICB9 IGVsc2VpZiAoJHR5cGUgPT09ICdhcnRpY2xlJykgewogICAgICAgICAgICAgICAgYXNzZXJ0 X2FydGljbGUoKTsKICAgICAgICAgICAgICAgICR0eXBlSWQgPSAkdGhpc2FydGljbGUgPyAk dGhpc2FydGljbGVbJ3RoaXNpZCddIDogbnVsbDsKICAgICAgICAgICAgfQoKICAgICAgICB9 CgogICAgICAgIGlmIChlbXB0eSgkdHlwZSkgfHwgZW1wdHkoJHR5cGVJZCkpIHsKICAgICAg ICAgICAgaWYgKCFlbXB0eSgkdGhpc2FydGljbGVbJ3RoaXNpZCddKSkgewogICAgICAgICAg ICAgICAgJHR5cGVJZCA9ICR0aGlzYXJ0aWNsZVsndGhpc2lkJ107CiAgICAgICAgICAgICAg ICAkdHlwZSA9ICdhcnRpY2xlJzsKICAgICAgICAgICAgfSBlbHNlaWYgKCFlbXB0eSgkYykp IHsKICAgICAgICAgICAgICAgICR0eXBlSWQgPSAkYzsKICAgICAgICAgICAgICAgICR0eXBl ID0gJ2NhdGVnb3J5JzsKICAgICAgICAgICAgfSBlbHNlaWYgKCFlbXB0eSgkcykpIHsKICAg ICAgICAgICAgICAgICR0eXBlSWQgPSAkczsKICAgICAgICAgICAgICAgICR0eXBlID0gJ3Nl Y3Rpb24nOwogICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICAgICAgaWYgKCFlbXB0eSgk dHlwZUlkKSAmJiAhZW1wdHkoJHR5cGUpKSB7CiAgICAgICAgICAgICRtZXRhID0gc2FmZV9y b3coJyonLCAnYXJjX21ldGEnLCAidHlwZV9pZD0nJHR5cGVJZCcgQU5EIHR5cGU9JyR0eXBl JyIpOwogICAgICAgICAgICAkYXJjX21ldGEgPSBhcnJheV9tZXJnZSgkYXJjX21ldGEsICRt ZXRhKTsKICAgICAgICAgICAgcmV0dXJuICRhcmNfbWV0YTsKICAgICAgICB9CgogICAgfQoK ICAgIHJldHVybiAkYXJjX21ldGE7Cn0KCmlmIChAdHhwaW50ZXJmYWNlID09ICdhZG1pbicp IHsKICAgIHJlZ2lzdGVyX2NhbGxiYWNrKCdfYXJjX21ldGFfYXJ0aWNsZV9tZXRhJywgJ2Fy dGljbGVfdWknLCAndXJsX3RpdGxlJyk7CiAgICByZWdpc3Rlcl9jYWxsYmFjaygnX2FyY19t ZXRhX2FydGljbGVfbWV0YV9zYXZlJywgJ3BpbmcnKTsKICAgIHJlZ2lzdGVyX2NhbGxiYWNr KCdfYXJjX21ldGFfYXJ0aWNsZV9tZXRhX3NhdmUnLCAnYXJ0aWNsZV9zYXZlZCcpOwogICAg cmVnaXN0ZXJfY2FsbGJhY2soJ19hcmNfbWV0YV9hcnRpY2xlX21ldGFfc2F2ZScsICdhcnRp Y2xlX3Bvc3RlZCcpOwoKICAgIHJlZ2lzdGVyX2NhbGxiYWNrKCdfYXJjX21ldGFfc2VjdGlv bl9tZXRhJywgJ3NlY3Rpb25fdWknLCAnZXh0ZW5kX2RldGFpbF9mb3JtJyk7CiAgICByZWdp c3Rlcl9jYWxsYmFjaygnX2FyY19tZXRhX3NlY3Rpb25fbWV0YV9zYXZlJywgJ3NlY3Rpb24n LCAnc2VjdGlvbl9zYXZlJyk7CgogICAgcmVnaXN0ZXJfY2FsbGJhY2soJ19hcmNfbWV0YV9j YXRlZ29yeV9tZXRhJywgJ2NhdGVnb3J5X3VpJywgJ2V4dGVuZF9kZXRhaWxfZm9ybScpOwog ICAgcmVnaXN0ZXJfY2FsbGJhY2soJ19hcmNfbWV0YV9jYXRlZ29yeV9tZXRhX3NhdmUnLCAn Y2F0ZWdvcnknLCAnY2F0X2FydGljbGVfc2F2ZScpOwoKICAgIGlmICghZW1wdHkoJHByZWZz WydhcmNfbWV0YV9zZWN0aW9uX3RhYiddKSkgewogICAgICAgIGFkZF9wcml2cygnYXJjX21l dGFfc2VjdGlvbl90YWInLCAnMSwyLDMsNCcpOwogICAgICAgIHJlZ2lzdGVyX3RhYigkcHJl ZnNbJ2FyY19tZXRhX3NlY3Rpb25fdGFiJ10sICdhcmNfbWV0YV9zZWN0aW9uX3RhYicsICdT ZWN0aW9ucyBNZXRhIERhdGEnKTsKICAgICAgICByZWdpc3Rlcl9jYWxsYmFjaygnYXJjX21l dGFfc2VjdGlvbl90YWInLCAnYXJjX21ldGFfc2VjdGlvbl90YWInKTsKICAgIH0KfQoKZnVu Y3Rpb24gX2FyY19tZXRhX2luc3RhbGwoKQp7CiAgICAkc3FsID0gIkNSRUFURSBUQUJMRSBJ RiBOT1QgRVhJU1RTICIgLiBQRlggLiAiYXJjX21ldGEgKAogICAgICAgIGBpZGAgaW50KDEx KSBOT1QgTlVMTCBBVVRPX0lOQ1JFTUVOVCwKICAgICAgICBgdHlwZWAgdmFyY2hhcig4KSBO T1QgTlVMTCwKICAgICAgICBgdHlwZV9pZGAgdmFyY2hhcigxMjgpIE5PVCBOVUxMLAogICAg ICAgIGB0aXRsZWAgdmFyY2hhcigyNTApIERFRkFVTFQgTlVMTCwKICAgICAgICBgb3ZlcnJp ZGVfdGl0bGVgIHRpbnlpbnQoMSkgREVGQVVMVCBOVUxMLAogICAgICAgIGByb2JvdHNgIHZh cmNoYXIoNDUpIERFRkFVTFQgTlVMTCwKICAgICAgICBQUklNQVJZIEtFWSAoYGlkYCkKICAg ICAgICApIEVOR0lORT1Jbm5vREIgREVGQVVMVCBDSEFSU0VUPXV0ZjggQVVUT19JTkNSRU1F TlQ9MSA7IjsKCiAgICBpZiAoIXNhZmVfcXVlcnkoJHNxbCkpIHsKICAgICAgICByZXR1cm4g J0Vycm9yIC0gdW5hYmxlIHRvIGNyZWF0ZSBhcmNfbWV0YSB0YWJsZSc7CiAgICB9CgogICAg JGRiVGFibGUgPSBnZXRUaGluZ3MoJ0RFU0NSSUJFICcgLiBzYWZlX3BmeCgnYXJjX21ldGEn KSk7CgogICAgaWYgKCFpbl9hcnJheSgncm9ib3RzJywgJGRiVGFibGUpKSB7CiAgICAgICAg c2FmZV9hbHRlcignYXJjX21ldGEnLCAnQUREIHJvYm90cyBWQVJDSEFSKDQ1KScpOwogICAg fQoKICAgIGlmICghaW5fYXJyYXkoJ2ltYWdlJywgJGRiVGFibGUpKSB7CiAgICAgICAgc2Fm ZV9hbHRlcignYXJjX21ldGEnLCAnQUREIGltYWdlIElOVCgxMSkgREVGQVVMVCBOVUxMJyk7 CiAgICAgICAgLy8gSW5jcmVhc2VkIHNpemUgb2YgdGl0bGUgYW5kIGRlc2NyaXB0aW9uIGNv bHVtbnMuCiAgICAgICAgc2FmZV9hbHRlcignYXJjX21ldGEnLCAnQ0hBTkdFIHRpdGxlIHRp dGxlIFZBUkNIQVIoMjUwKSBDSEFSQUNURVIgU0VUIHV0ZjggQ09MTEFURSB1dGY4X2dlbmVy YWxfY2kgTlVMTCBERUZBVUxUIE5VTEwnKTsKICAgIH0KCiAgICAvLyBVcGdyYWRlIHBsdWdp biB0byAyLnguCiAgICBpZiAoaW5fYXJyYXkoJ2Rlc2NyaXB0aW9uJywgJGRiVGFibGUpKSB7 CiAgICAgICAgLy8gQ29weSBtZXRhIGRlc2NyaXB0aW9uIGRhdGEgdG8gbWFpbiBUWFAgdGFi bGVzLgogICAgICAgIHNhZmVfcXVlcnkoJ1VQREFURSAnIC4gc2FmZV9wZngoJ3RleHRwYXR0 ZXJuJykgLiAnLCAnIC4gc2FmZV9wZngoJ2FyY19tZXRhJykgLiAnIFNFVCB0ZXh0cGF0dGVy bi5kZXNjcmlwdGlvbiA9IGFyY19tZXRhLmRlc2NyaXB0aW9uIFdIRVJFIHRleHRwYXR0ZXJu LklEID0gYXJjX21ldGEudHlwZV9pZCBBTkQgYXJjX21ldGEudHlwZSA9IFwnYXJ0aWNsZVwn IEFORCBhcmNfbWV0YS5kZXNjcmlwdGlvbiBJUyBOT1QgTlVMTCBBTkQgdGV4dHBhdHRlcm4u ZGVzY3JpcHRpb24gPSBcJ1wnJyk7CiAgICAgICAgc2FmZV9xdWVyeSgnVVBEQVRFICcgLiBz YWZlX3BmeCgndHhwX2NhdGVnb3J5JykgLiAnLCAnIC4gc2FmZV9wZngoJ2FyY19tZXRhJykg LiAnIFNFVCB0eHBfY2F0ZWdvcnkuZGVzY3JpcHRpb24gPSBhcmNfbWV0YS5kZXNjcmlwdGlv biBXSEVSRSB0eHBfY2F0ZWdvcnkubmFtZSA9IGFyY19tZXRhLnR5cGVfaWQgQU5EIGFyY19t ZXRhLnR5cGUgPSBcJ2NhdGVnb3J5XCcgQU5EIGFyY19tZXRhLmRlc2NyaXB0aW9uIElTIE5P VCBOVUxMIEFORCB0eHBfY2F0ZWdvcnkuZGVzY3JpcHRpb24gPSBcJ1wnJyk7CiAgICAgICAg c2FmZV9xdWVyeSgnVVBEQVRFICcgLiBzYWZlX3BmeCgndHhwX3NlY3Rpb24nKSAuICcsICcg LiBzYWZlX3BmeCgnYXJjX21ldGEnKSAuICcgU0VUIHR4cF9zZWN0aW9uLmRlc2NyaXB0aW9u ID0gYXJjX21ldGEuZGVzY3JpcHRpb24gV0hFUkUgdHhwX3NlY3Rpb24ubmFtZSA9IGFyY19t ZXRhLnR5cGVfaWQgQU5EIGFyY19tZXRhLnR5cGUgPSBcJ3NlY3Rpb25cJyBBTkQgYXJjX21l dGEuZGVzY3JpcHRpb24gSVMgTk9UIE5VTEwgQU5EIHR4cF9zZWN0aW9uLmRlc2NyaXB0aW9u ID0gXCdcJycpOwogICAgICAgIC8vIERyb3Agb2xkIG1ldGEgZGVzY3JpcHRpb24gY29sdW1u LgogICAgICAgIHNhZmVfYWx0ZXIoJ2FyY19tZXRhJywgJ0RST1AgQ09MVU1OIGRlc2NyaXB0 aW9uJyk7CiAgICB9CgogICAgLy8gU2V0dXAgdGhlIHBsdWdpbiBwcmVmZXJlbmNlcy4KICAg IF9hcmNfbWV0YV9pbnN0YWxsX3ByZWZzKCk7CgogICAgcmV0dXJuOwp9CgovKioKICogU2V0 dXAgdGhlIHBsdWdpbiBwcmVmZXJlbmNlcyBpZiB0aGV5IGhhdmUgbm90IHlldCBiZWVuIHNl dC4KICovCmZ1bmN0aW9uIF9hcmNfbWV0YV9pbnN0YWxsX3ByZWZzKCkKewogICAgaWYgKCFp c3NldCgkcHJlZnNbJ2FyY19tZXRhX2hvbWVwYWdlX3RpdGxlJ10pKSB7CiAgICAgICAgc2V0 X3ByZWYoJ2FyY19tZXRhX2hvbWVwYWdlX3RpdGxlJywgJyVuIHwgJXQnLCAnYXJjX21ldGEn LCBQUkVGX1BMVUdJTiwgJ3RleHRfaW5wdXQnLCAxMCk7CiAgICB9CiAgICBpZiAoIWlzc2V0 KCRwcmVmc1snYXJjX21ldGFfYXJ0aWNsZV90aXRsZSddKSkgewogICAgICAgIHNldF9wcmVm KCdhcmNfbWV0YV9hcnRpY2xlX3RpdGxlJywgJyVhIHwgJW4nLCAnYXJjX21ldGEnLCBQUkVG X1BMVUdJTiwgJ3RleHRfaW5wdXQnLCAyMCk7CiAgICB9CiAgICBpZiAoIWlzc2V0KCRwcmVm c1snYXJjX21ldGFfY29tbWVudF90aXRsZSddKSkgewogICAgICAgIHNldF9wcmVmKCdhcmNf bWV0YV9jb21tZW50X3RpdGxlJywgZ1R4dCgnY29tbWVudHNfb24nKS4nICVhIHwgJW4nLCAn YXJjX21ldGEnLCBQUkVGX1BMVUdJTiwgJ3RleHRfaW5wdXQnLCAzMCk7CiAgICB9CiAgICBp ZiAoIWlzc2V0KCRwcmVmc1snYXJjX21ldGFfc2VhcmNoX3RpdGxlJ10pKSB7CiAgICAgICAg c2V0X3ByZWYoJ2FyY19tZXRhX3NlYXJjaF90aXRsZScsIGdUeHQoJ3NlYXJjaF9yZXN1bHRz JykgLiAnOiAnIC4gJyVxIHwgJW4nLCAnYXJjX21ldGEnLCBQUkVGX1BMVUdJTiwgJ3RleHRf aW5wdXQnLCA0MCk7CiAgICB9CiAgICBpZiAoIWlzc2V0KCRwcmVmc1snYXJjX21ldGFfY2F0 ZWdvcnlfdGl0bGUnXSkpIHsKICAgICAgICBzZXRfcHJlZignYXJjX21ldGFfY2F0ZWdvcnlf dGl0bGUnLCAnJWMgfCAlbicsICdhcmNfbWV0YScsIFBSRUZfUExVR0lOLCAndGV4dF9pbnB1 dCcsIDUwKTsKICAgIH0KICAgIGlmICghaXNzZXQoJHByZWZzWydhcmNfbWV0YV9zZWN0aW9u X3RpdGxlJ10pKSB7CiAgICAgICAgc2V0X3ByZWYoJ2FyY19tZXRhX3NlY3Rpb25fdGl0bGUn LCAnJXMgfCAlbicsICdhcmNfbWV0YScsIFBSRUZfUExVR0lOLCAndGV4dF9pbnB1dCcsIDYw KTsKICAgIH0KICAgIGlmICghaXNzZXQoJHByZWZzWydhcmNfbWV0YV9zZWN0aW9uX2NhdGVn b3J5X3RpdGxlJ10pKSB7CiAgICAgICAgc2V0X3ByZWYoJ2FyY19tZXRhX3NlY3Rpb25fY2F0 ZWdvcnlfdGl0bGUnLCAnJWMgLSAlcyB8ICVuJywgJ2FyY19tZXRhJywgUFJFRl9QTFVHSU4s ICd0ZXh0X2lucHV0JywgNzApOwogICAgfQogICAgaWYgKCFpc3NldCgkcHJlZnNbJ2FyY19t ZXRhX3NlY3Rpb25fdGFiJ10pKSB7CiAgICAgICAgc2V0X3ByZWYoJ2FyY19tZXRhX3NlY3Rp b25fdGFiJywgJ2NvbnRlbnQnLCAnYXJjX21ldGEnLCBQUkVGX1BMVUdJTiwgJ19hcmNfbWV0 YV9zZWN0aW9uX3RhYl9zZWxlY3QnLCA4MCk7CiAgICB9CiAgICByZXR1cm47Cn0KCmZ1bmN0 aW9uIF9hcmNfbWV0YV9zZWN0aW9uX3RhYl9zZWxlY3QoJG5hbWUsICR2YWwpCnsKICAgICR2 YWxzID0gYXJyYXkoCiAgICAgICAgJ2NvbnRlbnQnPT4gZ3R4dCgnYXJjX21ldGFfc2VjdGlv bl90YWJfY29udGVudCcpLAogICAgICAgICdleHRlbnNpb25zJz0+IGd0eHQoJ2FyY19tZXRh X3NlY3Rpb25fdGFiX2V4dGVuc2lvbnMnKSwKICAgICAgICAnaGlkZGVuJz0+IGd0eHQoJ2Fy Y19tZXRhX3NlY3Rpb25fdGFiX2hpZGRlbicpCiAgICApOwogICAgcmV0dXJuIHNlbGVjdElu cHV0KCRuYW1lLCAkdmFscywgJHZhbCk7Cn0KCmZ1bmN0aW9uIF9hcmNfbWV0YV91bmluc3Rh bGwoKQp7CiAgICAkc3FsID0gIkRST1AgVEFCTEUgSUYgRVhJU1RTICIuUEZYLiJhcmNfbWV0 YTsiOwogICAgaWYgKCFzYWZlX3F1ZXJ5KCRzcWwpKSB7CiAgICAgICAgcmV0dXJuICdFcnJv ciAtIHVuYWJsZSB0byBkZWxldGUgYXJjX21ldGEgdGFibGUnOwogICAgfQoKICAgICRzcWwg PSAiREVMRVRFIEZST00gICIuUEZYLiJ0eHBfcHJlZnMgV0hFUkUgZXZlbnQ9J2FyY19tZXRh JzsiOwogICAgaWYgKCFzYWZlX3F1ZXJ5KCRzcWwpKSB7CiAgICAgICAgcmV0dXJuICdFcnJv ciAtIHVuYWJsZSB0byBkZWxldGUgYXJjX21ldGEgcHJlZmVyZW5jZXMnOwogICAgfQoKICAg IHNhZmVfZGVsZXRlKCd0eHBfbGFuZycsICJvd25lciBMSUtFICdhcmNcX21ldGEnIik7Cgog ICAgcmV0dXJuOwp9CgpmdW5jdGlvbiBhcmNfbWV0YV9zZWN0aW9uX3RhYigkZXZlbnQsICRz dGVwKQp7CiAgICBzd2l0Y2ggKCRzdGVwKSB7CiAgICAgICAgY2FzZSAnZWRpdCc6CiAgICAg ICAgICAgIGFyY19tZXRhX3NlY3Rpb25fZWRpdCgpOwogICAgICAgICAgICBicmVhazsKCiAg ICAgICAgY2FzZSAnc2F2ZSc6CiAgICAgICAgICAgIF9hcmNfbWV0YV9zZWN0aW9uX21ldGFf c2F2ZSgkZXZlbnQsICRzdGVwKTsKICAgICAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIHNl Y3Rpb24gbGlzdC4KCiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgYXJjX21ldGFfc2Vj dGlvbl9saXN0KCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgfQp9CgpmdW5jdGlvbiBhcmNf bWV0YV9zZWN0aW9uX2xpc3QoKQp7CiAgICBnbG9iYWwgJGV2ZW50OwoKICAgIHBhZ2V0b3Ao J1NlY3Rpb24gTWV0YSBEYXRhJyk7CgogICAgJGh0bWwgPSAnPGgxIGNsYXNzPSJ0eHAtaGVh ZGluZyI+U2VjdGlvbiBNZXRhIERhdGE8L2gxPic7CgogICAgJHJzID0gc2FmZV9xdWVyeSgK ICAgICAgICAnU0VMRUNUIHNlY3Rpb25zLiosIGFyY19tZXRhLnRpdGxlIEFTIG1ldGFfdGl0 bGUgRlJPTSAnIC4gc2FmZV9wZngoJ3R4cF9zZWN0aW9uJykgLiAnIHNlY3Rpb25zIExFRlQg Sk9JTiAnIC4gc2FmZV9wZngoJ2FyY19tZXRhJykgLiAnIGFyY19tZXRhIE9OIGFyY19tZXRh LnR5cGUgPSAic2VjdGlvbiIgQU5EIGFyY19tZXRhLnR5cGVfaWQgPSBzZWN0aW9ucy5uYW1l IFdIRVJFIDE9MSBPUkRFUiBCWSBDQVNFIFdIRU4gc2VjdGlvbnMubmFtZSA9ICJkZWZhdWx0 IiBUSEVOIDEgRUxTRSAyIEVORCwgc2VjdGlvbnMubmFtZSBBU0MnCiAgICApOwoKICAgIGlm ICgkcnMpIHsKICAgICAgICAkaHRtbCAuPSBuIC4gJzxkaXYgaWQ9IicgLiAkZXZlbnQgLiAn X2NvbnRhaW5lciIgY2xhc3M9InR4cC1jb250YWluZXIiPic7CgogICAgICAgICRodG1sIC49 IG4gLiAnPGRpdiBjbGFzcz0idHhwLWxpc3R0YWJsZXMiPicgLiBuCiAgICAgICAgICAgICAg ICAuIG4gLiBzdGFydFRhYmxlKCcnLCAnJywgJ3R4cC1saXN0JykKICAgICAgICAgICAgICAg IC4gbiAuICc8dGhlYWQ+JwogICAgICAgICAgICAgICAgLiBuIC4gdHIoaENlbGwoJ05hbWUn KSAuIGhDZWxsKCdUaXRsZScpIC4gaENlbGwoZ3R4dCgnYXJjX21ldGFfdGl0bGUnKSkgLiBo Q2VsbCgnTWFuYWdlJykpCiAgICAgICAgICAgIC4gbiAuICc8L3RoZWFkPic7CgogICAgICAg IHdoaWxlICgkcm93ID0gbmV4dFJvdygkcnMpKSB7CiAgICAgICAgICAgICRlZGl0TGluayA9 IGhyZWYoCiAgICAgICAgICAgICAgICBnVHh0KCdlZGl0JyksCiAgICAgICAgICAgICAgICAn P2V2ZW50PWFyY19tZXRhX3NlY3Rpb25fdGFiJmFtcDtzdGVwPWVkaXQmYW1wO25hbWU9JyAu ICRyb3dbJ25hbWUnXQogICAgICAgICAgICApOwogICAgICAgICAgICAkaHRtbCAuPSBuIC4g dHIoCiAgICAgICAgICAgICAgICBuIC4gdGQoJHJvd1snbmFtZSddKSAuIHRkKCRyb3dbJ3Rp dGxlJ10pIC4gdGQoJHJvd1snbWV0YV90aXRsZSddKSAuIHRkKCRlZGl0TGluaykKICAgICAg ICAgICAgKTsKICAgICAgICB9CgogICAgICAgICRodG1sIC49IG4gLiBlbmRUYWJsZSgpOwoK ICAgICAgICAkaHRtbCAuPSBuIC4gJzwvZGl2Pic7CgogICAgfQoKICAgIGVjaG8gJGh0bWw7 Cn0KCmZ1bmN0aW9uIGFyY19tZXRhX3NlY3Rpb25fZWRpdCgpCnsKICAgIGdsb2JhbCAkZXZl bnQ7CgogICAgJG5hbWUgPSBncHMoJ25hbWUnKTsKCiAgICAkcnMgPSBzYWZlX3F1ZXJ5KAog ICAgICAgICdTRUxFQ1Qgc2VjdGlvbnMudGl0bGUgQVMgc2VjdGlvbiwgc2VjdGlvbnMuZGVz Y3JpcHRpb24sIGFyY19tZXRhLiogRlJPTSAnIC4gc2FmZV9wZngoJ3R4cF9zZWN0aW9uJykg LiAnIHNlY3Rpb25zIExFRlQgSk9JTiAnIC4gc2FmZV9wZngoJ2FyY19tZXRhJykgLiAnIGFy Y19tZXRhIE9OIGFyY19tZXRhLnR5cGUgPSAic2VjdGlvbiIgQU5EIGFyY19tZXRhLnR5cGVf aWQgPSBzZWN0aW9ucy5uYW1lIFdIRVJFIHNlY3Rpb25zLm5hbWU9IicgLiBkb1NsYXNoKCRu YW1lKSAuICciJwogICAgKTsKCiAgICAkbWV0YSA9IG5leHRSb3coJHJzKTsKCiAgICBwYWdl dG9wKCdTZWN0aW9uIE1ldGEgRGF0YScpOwoKICAgICRmb3JtID0gJyc7CgogICAgJGZvcm0g Lj0gJzxkaXYgY2xhc3M9InR4cC1lZGl0Ij4nOwogICAgJGZvcm0gLj0gaGVkKCdFZGl0IFNl Y3Rpb24gTWV0YSBEYXRhJywgMik7CgogICAgLy8gV2UgaW5jbHVkZSB0aGUgc2VjdGlvbiB0 aXRsZSBhcyBhIGRpc2FibGVkIGZpZWxkIGZvciB0aGUgdXNlcidzCiAgICAvLyByZWZlcmVu Y2UuCiAgICAkZm9ybSAuPSAnPGRpdiBjbGFzcz0idHhwLWZvcm0tZmllbGQgZWRpdC1zZWN0 aW9uLXNlY3Rpb24iPic7CiAgICAkZm9ybSAuPSAnPGRpdiBjbGFzcz0idHhwLWZvcm0tZmll bGQtbGFiZWwiPicgLiB0YWcoJ1NlY3Rpb24nLCAnbGFiZWwnLCAnIGZvcj0ic2VjdGlvbiIn KSAuICc8L2Rpdj4nOwogICAgJGZvcm0gLj0gJzxkaXYgY2xhc3M9InR4cC1mb3JtLWZpZWxk LXZhbHVlIj4nIC4gZklucHV0KCd0ZXh0JywgJ3NlY3Rpb24nLCAkbWV0YVsnc2VjdGlvbidd LCAnJywgJycsICcnLCAnMzInLCAnJywgJ3NlY3Rpb24nLCB0cnVlKSAuICc8L2Rpdj4nOwog ICAgJGZvcm0gLj0gJzwvZGl2Pic7CgogICAgLy8gTWV0YSBkYXRhIGZpZWxkcwogICAgJGZv cm0gLj0gaElucHV0KCdhcmNfbWV0YV9pZCcsICRtZXRhWydpZCddKTsKICAgICRmb3JtIC49 IGhJbnB1dCgnbmFtZScsICRuYW1lKTsKICAgICRmb3JtIC49ICc8ZGl2IGNsYXNzPSJ0eHAt Zm9ybS1maWVsZCBlZGl0LXNlY3Rpb24tYXJjX21ldGFfdGl0bGUiPic7CiAgICAkZm9ybSAu PSAnPGRpdiBjbGFzcz0idHhwLWZvcm0tZmllbGQtbGFiZWwiPicgLiB0YWcoZ3R4dCgnYXJj X21ldGFfdGl0bGUnKSwgJ2xhYmVsJywgJyBmb3I9ImFyY19tZXRhX3RpdGxlIicpIC4gJzwv ZGl2Pic7CiAgICAkZm9ybSAuPSAnPGRpdiBjbGFzcz0idHhwLWZvcm0tZmllbGQtdmFsdWUi PicgLiBmSW5wdXQoJ3RleHQnLCAnYXJjX21ldGFfdGl0bGUnLCAkbWV0YVsndGl0bGUnXSwg JycsICcnLCAnJywgJzMyJywgJycsICdhcmNfbWV0YV90aXRsZScpIC4gJzwvZGl2Pic7CiAg ICAkZm9ybSAuPSAnPC9kaXY+JzsKICAgICRmb3JtIC49ICc8ZGl2IGNsYXNzPSJ0eHAtZm9y bS1maWVsZCB0eHAtZm9ybS1maWVsZC10ZXh0YXJlYSBlZGl0LXNlY3Rpb24tYXJjX21ldGFf ZGVzY3JpcHRpb24iPic7CiAgICAkZm9ybSAuPSAnPGRpdiBjbGFzcz0idHhwLWZvcm0tZmll bGQtbGFiZWwiPicgLiB0YWcoZ3R4dCgnYXJjX21ldGFfZGVzY3JpcHRpb24nKSwgJ2xhYmVs JywgJyBmb3I9ImFyY19tZXRhX2Rlc2NyaXB0aW9uIicpIC4gJzwvZGl2Pic7CiAgICAkZm9y bSAuPSAnPGRpdiBjbGFzcz0idHhwLWZvcm0tZmllbGQtdmFsdWUiPicgLiB0ZXh0X2FyZWEo J2FyY19tZXRhX2Rlc2NyaXB0aW9uJywgbnVsbCwgbnVsbCwgJG1ldGFbJ2Rlc2NyaXB0aW9u J10sICdhcmNfbWV0YV9kZXNjcmlwdGlvbicpIC4gJzwvZGl2Pic7CiAgICAkZm9ybSAuPSAn PC9kaXY+JzsKICAgICRmb3JtIC49ICc8ZGl2IGNsYXNzPSJ0eHAtZm9ybS1maWVsZCBlZGl0 LXNlY3Rpb24tYXJjX21ldGFfaW1hZ2UiPic7CiAgICAkZm9ybSAuPSAnPGRpdiBjbGFzcz0i dHhwLWZvcm0tZmllbGQtbGFiZWwiPicgLiB0YWcoZ3R4dCgnYXJjX21ldGFfaW1hZ2UnKSwg J2xhYmVsJywgJyBmb3I9ImFyY19tZXRhX2ltYWdlIicpIC4gJzwvZGl2Pic7CiAgICAkZm9y bSAuPSAnPGRpdiBjbGFzcz0idHhwLWZvcm0tZmllbGQtdmFsdWUiPicgLiBmSW5wdXQoJ251 bWJlcicsICdhcmNfbWV0YV9pbWFnZScsICRtZXRhWydpbWFnZSddLCAnJywgJycsICcnLCAn MzInLCAnJywgJ2FyY19tZXRhX2ltYWdlJykgLiAnPC9kaXY+JzsKICAgICRmb3JtIC49ICc8 L2Rpdj4nOwogICAgJGZvcm0gLj0gJzxkaXYgY2xhc3M9InR4cC1mb3JtLWZpZWxkIGVkaXQt c2VjdGlvbi1hcmNfbWV0YV9yb2JvdHMiPic7CiAgICAkZm9ybSAuPSAnPGRpdiBjbGFzcz0i dHhwLWZvcm0tZmllbGQtbGFiZWwiPicgLiB0YWcoZ3R4dCgnYXJjX21ldGFfcm9ib3RzJyks ICdsYWJlbCcsICcgZm9yPSJhcmNfbWV0YV9kZXNjcmlwdGlvbiInKSAuICc8L2Rpdj4nOwog ICAgJGZvcm0gLj0gJzxkaXYgY2xhc3M9InR4cC1mb3JtLWZpZWxkLXZhbHVlIj4nIC4gc2Vs ZWN0SW5wdXQoJ2FyY19tZXRhX3JvYm90cycsIF9hcmNfbWV0YV9yb2JvdHMoKSwgJG1ldGFb J3JvYm90cyddLCAnYXJjX21ldGFfcm9ib3RzJykgLiAnPC9kaXY+JzsKICAgICRmb3JtIC49 ICc8L2Rpdj4nOwoKICAgICRmb3JtIC49ICc8cCBjbGFzcz0idHhwLWVkaXQtYWN0aW9ucyI+ JyAuIHNMaW5rKCdhcmNfbWV0YV9zZWN0aW9uX3RhYicsICcnLCBnVHh0KCdjYW5jZWwnKSwg J3R4cC1idXR0b24nKSAuIHNJbnB1dCgnc2F2ZScpIC4gZUlucHV0KCRldmVudCkgLiBmSW5w dXQoJ3N1Ym1pdCcsICdzYXZlJywgZ1R4dCgnU2F2ZScpLCAncHVibGlzaCcpIC4gJzwvcD4n OwoKICAgICRmb3JtIC49ICc8L2Rpdj4nOwoKICAgICRodG1sID0gJzxkaXYgaWQ9IicgLiAk ZXZlbnQgLiAnX2NvbnRhaW5lciIgY2xhc3M9InR4cC1jb250YWluZXIiPicgLiBmb3JtKCRm b3JtLCAnJywgJycsICdwb3N0JywgJ2VkaXQtZm9ybScpIC4gJzwvZGl2Pic7CgogICAgZWNo byAkaHRtbDsKfQoKZnVuY3Rpb24gYXJjX21ldGFfb3B0aW9ucygpCnsKICAgICRsaW5rID0g Jz9ldmVudD1wcmVmcyNwcmVmc19ncm91cF9hcmNfbWV0YSc7CiAgICBoZWFkZXIoJ0xvY2F0 aW9uOiAnIC4gJGxpbmspOwp9CgpmdW5jdGlvbiBfYXJjX21ldGFfYXJ0aWNsZV9tZXRhKCRl dmVudCwgJHN0ZXAsICRkYXRhLCAkcnMpCnsKICAgIC8vIEdldCB0aGUgYXJ0aWNsZSBtZXRh IGRhdGEuCiAgICAkYXJ0aWNsZUlkID0gIWVtcHR5KCRyc1snSUQnXSkgPyAkcnNbJ0lEJ10g OiBudWxsOwogICAgJG1ldGEgPSBfYXJjX21ldGEoJ2FydGljbGUnLCAkYXJ0aWNsZUlkLCB0 cnVlKTsKCiAgICAkZm9ybSA9IGhJbnB1dCgnYXJjX21ldGFfaWQnLCAkbWV0YVsnaWQnXSk7 CiAgICAkZm9ybSAuPSAiPHAgY2xhc3M9J2FyY19tZXRhX3RpdGxlJz4iOwogICAgJGZvcm0g Lj0gdGFnKGd0eHQoJ2FyY19tZXRhX3RpdGxlJyksICdsYWJlbCcsICcgZm9yPSJhcmNfbWV0 YV90aXRsZSInKSAuICc8YnIgLz4nOwogICAgJGZvcm0gLj0gZklucHV0KCd0ZXh0JywgJ2Fy Y19tZXRhX3RpdGxlJywgJG1ldGFbJ3RpdGxlJ10sICcnLCAnJywgJycsICczMicsICcnLCAn YXJjX21ldGFfdGl0bGUnKTsKICAgICRmb3JtIC49ICI8L3A+IjsKICAgICRmb3JtIC49ICI8 cCBjbGFzcz0nZWRpdC1jYXRlZ29yeS1hcmNfbWV0YV9yb2JvdHMnPiI7CiAgICAkZm9ybSAu PSB0YWcoZ3R4dCgnYXJjX21ldGFfcm9ib3RzJyksICdsYWJlbCcsICcgZm9yPSJhcmNfbWV0 YV9kZXNjcmlwdGlvbiInKSAuICc8YnIgLz4nOwogICAgJGZvcm0gLj0gc2VsZWN0SW5wdXQo J2FyY19tZXRhX3JvYm90cycsIF9hcmNfbWV0YV9yb2JvdHMoKSwgJG1ldGFbJ3JvYm90cydd LCAnYXJjX21ldGFfcm9ib3RzJyk7CiAgICAkZm9ybSAuPSAnPC9wPic7CgogICAgcmV0dXJu ICRmb3JtIC4gJGRhdGE7Cn0KCmZ1bmN0aW9uIF9hcmNfbWV0YV9zZWN0aW9uX21ldGEoJGV2 ZW50LCAkc3RlcCwgJGRhdGEsICRycykKewogICAgLy8gR2V0IHRoZSBzZWN0aW9uIG1ldGEg ZGF0YS4KICAgICRzZWN0aW9uTmFtZSA9ICFlbXB0eSgkcnNbJ25hbWUnXSkgPyAkcnNbJ25h bWUnXSA6IG51bGw7CiAgICAkbWV0YSA9IF9hcmNfbWV0YSgnc2VjdGlvbicsICRzZWN0aW9u TmFtZSwgdHJ1ZSk7CgogICAgJGZvcm0gPSBoSW5wdXQoJ2FyY19tZXRhX2lkJywgJG1ldGFb J2lkJ10pOwogICAgJGZvcm0gLj0gJzxkaXYgY2xhc3M9InR4cC1mb3JtLWZpZWxkIGVkaXQt c2VjdGlvbi1hcmNfbWV0YV90aXRsZSI+JzsKICAgICRmb3JtIC49ICc8ZGl2IGNsYXNzPSJ0 eHAtZm9ybS1maWVsZC1sYWJlbCI+JyAuIHRhZyhndHh0KCdhcmNfbWV0YV90aXRsZScpLCAn bGFiZWwnLCAnIGZvcj0iYXJjX21ldGFfdGl0bGUiJykgLiAnPC9kaXY+JzsKICAgICRmb3Jt IC49ICc8ZGl2IGNsYXNzPSJ0eHAtZm9ybS1maWVsZC12YWx1ZSI+JyAuIGZJbnB1dCgndGV4 dCcsICdhcmNfbWV0YV90aXRsZScsICRtZXRhWyd0aXRsZSddLCAnJywgJycsICcnLCAnMzIn LCAnJywgJ2FyY19tZXRhX3RpdGxlJykgLiAnPC9kaXY+JzsKICAgICRmb3JtIC49ICc8L2Rp dj4nOwogICAgJGZvcm0gLj0gJzxkaXYgY2xhc3M9InR4cC1mb3JtLWZpZWxkIGVkaXQtc2Vj dGlvbi1hcmNfbWV0YV9pbWFnZSI+JzsKICAgICRmb3JtIC49ICc8ZGl2IGNsYXNzPSJ0eHAt Zm9ybS1maWVsZC1sYWJlbCI+JyAuIHRhZyhndHh0KCdhcmNfbWV0YV9pbWFnZScpLCAnbGFi ZWwnLCAnIGZvcj0iYXJjX21ldGFfaW1hZ2UiJykgLiAnPC9kaXY+JzsKICAgICRmb3JtIC49 ICc8ZGl2IGNsYXNzPSJ0eHAtZm9ybS1maWVsZC12YWx1ZSI+JyAuIGZJbnB1dCgnbnVtYmVy JywgJ2FyY19tZXRhX2ltYWdlJywgJG1ldGFbJ2ltYWdlJ10sICcnLCAnJywgJycsICczMics ICcnLCAnYXJjX21ldGFfaW1hZ2UnKSAuICc8L2Rpdj4nOwogICAgJGZvcm0gLj0gJzwvZGl2 Pic7CiAgICAkZm9ybSAuPSAnPGRpdiBjbGFzcz0idHhwLWZvcm0tZmllbGQgZWRpdC1zZWN0 aW9uLWFyY19tZXRhX3JvYm90cyI+JzsKICAgICRmb3JtIC49ICc8ZGl2IGNsYXNzPSJ0eHAt Zm9ybS1maWVsZC1sYWJlbCI+JyAuIHRhZyhndHh0KCdhcmNfbWV0YV9yb2JvdHMnKSwgJ2xh YmVsJywgJyBmb3I9ImFyY19tZXRhX2Rlc2NyaXB0aW9uIicpIC4gJzwvZGl2Pic7CiAgICAk Zm9ybSAuPSAnPGRpdiBjbGFzcz0idHhwLWZvcm0tZmllbGQtdmFsdWUiPicgLiBzZWxlY3RJ bnB1dCgnYXJjX21ldGFfcm9ib3RzJywgX2FyY19tZXRhX3JvYm90cygpLCAkbWV0YVsncm9i b3RzJ10sICdhcmNfbWV0YV9yb2JvdHMnKSAuICc8L2Rpdj4nOwogICAgJGZvcm0gLj0gJzwv ZGl2Pic7CgogICAgcmV0dXJuICRkYXRhIC4gJGZvcm07Cn0KCmZ1bmN0aW9uIF9hcmNfbWV0 YV9jYXRlZ29yeV9tZXRhKCRldmVudCwgJHN0ZXAsICRkYXRhLCAkcnMpCnsKICAgIC8vIE1h a2Ugc3VyZSB0aGF0IHRoaXMgaXMgYW4gYXJ0aWNsZSBjYXRlZ29yeSAod2UgZG9uJ3Qgc3Vw cG9ydCBvdGhlcgogICAgLy8gY2F0ZWdvcnkgdHlwZXMpLgogICAgaWYgKCRyc1sndHlwZSdd IT0nYXJ0aWNsZScpIHsKICAgICAgICByZXR1cm4gJGRhdGE7CiAgICB9CgogICAgLy8gR2V0 IHRoZSBleGlzdGluZyBtZXRhIGRhdGEgZm9yIHRoaXMgY2F0ZWdvcnkuCiAgICAkbWV0YSA9 IF9hcmNfbWV0YSgnY2F0ZWdvcnknLCAkcnNbJ25hbWUnXSwgdHJ1ZSk7CgogICAgJGZvcm0g PSBoSW5wdXQoJ2FyY19tZXRhX2lkJywgJG1ldGFbJ2lkJ10pOwogICAgJGZvcm0gLj0gJzxk aXYgY2xhc3M9InR4cC1mb3JtLWZpZWxkIGVkaXQtY2F0ZWdvcnktYXJjX21ldGFfdGl0bGUi Pic7CiAgICAkZm9ybSAuPSAnPGRpdiBjbGFzcz0idHhwLWZvcm0tZmllbGQtbGFiZWwiPicg LiB0YWcoZ3R4dCgnYXJjX21ldGFfdGl0bGUnKSwgJ2xhYmVsJywgJyBmb3I9ImFyY19tZXRh X3RpdGxlIicpIC4gJzwvZGl2Pic7CiAgICAkZm9ybSAuPSAnPGRpdiBjbGFzcz0idHhwLWZv cm0tZmllbGQtdmFsdWUiPicgLiBmSW5wdXQoJ3RleHQnLCAnYXJjX21ldGFfdGl0bGUnLCAk bWV0YVsndGl0bGUnXSwgJycsICcnLCAnJywgJzMyJywgJycsICdhcmNfbWV0YV90aXRsZScp IC4gJzwvZGl2Pic7CiAgICAkZm9ybSAuPSAnPC9kaXY+JzsKICAgICRmb3JtIC49ICc8ZGl2 IGNsYXNzPSJ0eHAtZm9ybS1maWVsZCBlZGl0LWNhdGVnb3J5LWFyY19tZXRhX2ltYWdlIj4n OwogICAgJGZvcm0gLj0gJzxkaXYgY2xhc3M9InR4cC1mb3JtLWZpZWxkLWxhYmVsIj4nIC4g dGFnKGd0eHQoJ2FyY19tZXRhX2ltYWdlJyksICdsYWJlbCcsICcgZm9yPSJhcmNfbWV0YV9p bWFnZSInKSAuICc8L2Rpdj4nOwogICAgJGZvcm0gLj0gJzxkaXYgY2xhc3M9InR4cC1mb3Jt LWZpZWxkLXZhbHVlIj4nIC4gZklucHV0KCdudW1iZXInLCAnYXJjX21ldGFfaW1hZ2UnLCAk bWV0YVsnaW1hZ2UnXSwgJycsICcnLCAnJywgJzMyJywgJycsICdhcmNfbWV0YV9pbWFnZScp IC4gJzwvZGl2Pic7CiAgICAkZm9ybSAuPSAnPC9kaXY+JzsKICAgICRmb3JtIC49ICc8ZGl2 IGNsYXNzPSJ0eHAtZm9ybS1maWVsZCBlZGl0LWNhdGVnb3J5LWFyY19tZXRhX3JvYm90cyI+ JzsKICAgICRmb3JtIC49ICc8ZGl2IGNsYXNzPSJ0eHAtZm9ybS1maWVsZC1sYWJlbCI+JyAu IHRhZyhndHh0KCdhcmNfbWV0YV9yb2JvdHMnKSwgJ2xhYmVsJywgJyBmb3I9ImFyY19tZXRh X2Rlc2NyaXB0aW9uIicpIC4gJzwvZGl2Pic7CiAgICAkZm9ybSAuPSAnPGRpdiBjbGFzcz0i dHhwLWZvcm0tZmllbGQtdmFsdWUiPicgLiBzZWxlY3RJbnB1dCgnYXJjX21ldGFfcm9ib3Rz JywgX2FyY19tZXRhX3JvYm90cygpLCAkbWV0YVsncm9ib3RzJ10sICdhcmNfbWV0YV9yb2Jv dHMnKSAuICc8L2Rpdj4nOwogICAgJGZvcm0gLj0gJzwvZGl2Pic7CgogICAgcmV0dXJuICRk YXRhIC4gJGZvcm07Cn0KCmZ1bmN0aW9uIF9hcmNfbWV0YV9hcnRpY2xlX21ldGFfc2F2ZSgk ZXZlbnQsICRzdGVwKQp7CiAgICAkYXJ0aWNsZUlkID0gZW1wdHkoJEdMT0JBTFNbJ0lEJ10p ID8gZ3BzKCdJRCcpIDogJEdMT0JBTFNbJ0lEJ107CgogICAgJG1ldGFJZCA9IGdwcygnYXJj X21ldGFfaWQnKTsKICAgICRtZXRhVGl0bGUgPSBncHMoJ2FyY19tZXRhX3RpdGxlJyk7CiAg ICAkbWV0YVJvYm90cyA9IGdwcygnYXJjX21ldGFfcm9ib3RzJyk7CgogICAgJHZhbHVlcyA9 IGFycmF5KAogICAgICAgICd0eXBlJyA9PiAnYXJ0aWNsZScsCiAgICAgICAgJ3R5cGVfaWQn ID0+ICRhcnRpY2xlSWQsCiAgICAgICAgJ3RpdGxlJyA9PiBkb1NsYXNoKCRtZXRhVGl0bGUp LAogICAgICAgICdyb2JvdHMnID0+IGRvU2xhc2goJG1ldGFSb2JvdHMpCiAgICApOwoKICAg IGZvcmVhY2ggKCR2YWx1ZXMgYXMgJGtleSA9PiAkdmFsdWUpIHsKICAgICAgICAkc3FsW10g PSAiJGtleSA9ICckdmFsdWUnIjsKICAgIH0KICAgICRzcWwgPSBpbXBsb2RlKCcsICcsICRz cWwpOwoKICAgIGlmICgkbWV0YUlkKSB7CiAgICAgICAgLy8gVXBkYXRlIGV4aXN0aW5nIG1l dGEgZGF0YS4KICAgICAgICBzYWZlX3VwZGF0ZSgnYXJjX21ldGEnLCAkc3FsLCAiaWQ9JG1l dGFJZCIpOwoKICAgIH0gZWxzZWlmICghZW1wdHkoJG1ldGFUaXRsZSkgfHwgIWVtcHR5KCRt ZXRhUm9ib3RzKSkgewogICAgICAgIC8vIENyZWF0ZSBuZXcgbWV0YSBkYXRhIG9ubHkgaWYg dGhlcmUgaXMgZGF0YSB0byBiZSBzYXZlZC4KICAgICAgICBzYWZlX2luc2VydCgnYXJjX21l dGEnLCAkc3FsKTsKCiAgICB9Cn0KCmZ1bmN0aW9uIF9hcmNfbWV0YV9zZWN0aW9uX21ldGFf c2F2ZSgkZXZlbnQsICRzdGVwKQp7CiAgICAkc2VjdGlvbk5hbWUgPSBncHMoJ25hbWUnKTsK CiAgICAkbWV0YUlkID0gZ3BzKCdhcmNfbWV0YV9pZCcpOwogICAgJG1ldGFUaXRsZSA9IGdw cygnYXJjX21ldGFfdGl0bGUnKTsKICAgICRtZXRhRGVzY3JpcHRpb24gPSBncHMoJ2FyY19t ZXRhX2Rlc2NyaXB0aW9uJyk7CiAgICAkbWV0YUltYWdlID0gZ3BzKCdhcmNfbWV0YV9pbWFn ZScpOwogICAgJG1ldGFSb2JvdHMgPSBncHMoJ2FyY19tZXRhX3JvYm90cycpOwoKICAgICR2 YWx1ZXMgPSBhcnJheSgKICAgICAgICAndHlwZScgPT4gJ3NlY3Rpb24nLAogICAgICAgICd0 eXBlX2lkJyA9PiAkc2VjdGlvbk5hbWUsCiAgICAgICAgJ3RpdGxlJyA9PiBkb1NsYXNoKCRt ZXRhVGl0bGUpLAogICAgICAgICdpbWFnZScgPT4gaW50dmFsKCRtZXRhSW1hZ2UpLAogICAg ICAgICdyb2JvdHMnID0+IGRvU2xhc2goJG1ldGFSb2JvdHMpCiAgICApOwoKICAgIGlmIChl bXB0eSgkdmFsdWVzWydpbWFnZSddKSkgewogICAgICAgIHVuc2V0KCR2YWx1ZXNbJ2ltYWdl J10pOwogICAgICAgICRzcWxbXSA9ICJpbWFnZSA9IE5VTEwiOwogICAgfQoKICAgIGZvcmVh Y2ggKCR2YWx1ZXMgYXMgJGtleSA9PiAkdmFsdWUpIHsKICAgICAgICAkc3FsW10gPSAiJGtl eSA9ICckdmFsdWUnIjsKICAgIH0KICAgICRzcWwgPSBpbXBsb2RlKCcsICcsICRzcWwpOwoK ICAgIGlmICgkbWV0YUlkKSB7CiAgICAgICAgLy8gVXBkYXRlIGV4aXN0aW5nIG1ldGEgZGF0 YS4KICAgICAgICBzYWZlX3VwZGF0ZSgnYXJjX21ldGEnLCAkc3FsLCAiaWQ9JG1ldGFJZCIp OwoKICAgIH0gZWxzZWlmICghZW1wdHkoJG1ldGFUaXRsZSkgfHwgIWVtcHR5KCRtZXRhSW1h Z2UpIHx8ICFlbXB0eSgkbWV0YVJvYm90cykpIHsKICAgICAgICAvLyBDcmVhdGUgbmV3IG1l dGEgZGF0YSBvbmx5IGlmIHRoZXJlIGlzIGRhdGEgdG8gYmUgc2F2ZWQuCiAgICAgICAgc2Fm ZV9pbnNlcnQoJ2FyY19tZXRhJywgJHNxbCk7CgogICAgfQoKICAgIC8vIFVwZGF0ZSB0aGUg bWV0YSBkZXNjcmlwdGlvbi4KICAgICRtZXRhRGVzY3JpcHRpb24gPSBkb1NsYXNoKCRtZXRh RGVzY3JpcHRpb24pOwogICAgc2FmZV91cGRhdGUoJ3R4cF9zZWN0aW9uJywgImRlc2NyaXB0 aW9uID0gJyRtZXRhRGVzY3JpcHRpb24nIiwgIm5hbWU9JyRzZWN0aW9uTmFtZSciKTsKfQoK ZnVuY3Rpb24gX2FyY19tZXRhX2NhdGVnb3J5X21ldGFfc2F2ZSgkZXZlbnQsICRzdGVwKQp7 CiAgICAkY2F0ZWdvcnlOYW1lID0gZ3BzKCduYW1lJyk7CgogICAgJG1ldGFJZCA9IGdwcygn YXJjX21ldGFfaWQnKTsKICAgICRtZXRhVGl0bGUgPSBncHMoJ2FyY19tZXRhX3RpdGxlJyk7 CiAgICAkbWV0YUltYWdlID0gZ3BzKCdhcmNfbWV0YV9pbWFnZScpOwogICAgJG1ldGFSb2Jv dHMgPSBncHMoJ2FyY19tZXRhX3JvYm90cycpOwoKICAgICR2YWx1ZXMgPSBhcnJheSgKICAg ICAgICAndHlwZScgPT4gJ2NhdGVnb3J5JywKICAgICAgICAndHlwZV9pZCcgPT4gJGNhdGVn b3J5TmFtZSwKICAgICAgICAndGl0bGUnID0+IGRvU2xhc2goJG1ldGFUaXRsZSksCiAgICAg ICAgJ2ltYWdlJyA9PiBpbnR2YWwoJG1ldGFJbWFnZSksCiAgICAgICAgJ3JvYm90cycgPT4g ZG9TbGFzaCgkbWV0YVJvYm90cykKICAgICk7CgogICAgZm9yZWFjaCAoJHZhbHVlcyBhcyAk a2V5ID0+ICR2YWx1ZSkgewogICAgICAgICRzcWxbXSA9ICIka2V5ID0gJyR2YWx1ZSciOwog ICAgfQogICAgJHNxbCA9IGltcGxvZGUoJywgJywgJHNxbCk7CgogICAgaWYgKCRtZXRhSWQp IHsKICAgICAgICAvLyBVcGRhdGUgZXhpc3RpbmcgbWV0YSBkYXRhLgogICAgICAgIHNhZmVf dXBkYXRlKCdhcmNfbWV0YScsICRzcWwsICJpZD0kbWV0YUlkIik7CgogICAgfSBlbHNlaWYg KCFlbXB0eSgkbWV0YVRpdGxlKSB8fCAhZW1wdHkoJG1ldGFEZXNjcmlwdGlvbikgfHwgIWVt cHR5KCRtZXRhSW1hZ2UpIHx8ICFlbXB0eSgkbWV0YVJvYm90cykpIHsKICAgICAgICAvLyBD cmVhdGUgbmV3IG1ldGEgZGF0YSBvbmx5IGlmIHRoZXJlIGlzIGRhdGEgdG8gYmUgc2F2ZWQu CiAgICAgICAgc2FmZV9pbnNlcnQoJ2FyY19tZXRhJywgJHNxbCk7CgogICAgfQp9CgpmdW5j dGlvbiBfYXJjX21ldGFfcm9ib3RzKCkKewogICAgcmV0dXJuIGFycmF5KAogICAgICAgICdp bmRleCwgZm9sbG93JyA9PiAnaW5kZXgsIGZvbGxvdycsCiAgICAgICAgJ2luZGV4LCBub2Zv bGxvdycgPT4gJ2luZGV4LCBub2ZvbGxvdycsCiAgICAgICAgJ25vaW5kZXgsIGZvbGxvdycg PT4gJ25vaW5kZXgsIGZvbGxvdycsCiAgICAgICAgJ25vaW5kZXgsIG5vZm9sbG93JyA9PiAn bm9pbmRleCwgbm9mb2xsb3cnCiAgICApOwp9CiI7czozOiJtZDUiO3M6MzI6IjFhMWVhN2Ri ZjRhZDg2YzUxMDIwZGQ0NjM3MDcxZTNmIjt9