# adi_cat_menu v0.4 # Category & article menu # Adi Gilbert # http://www.greatoceanmedia.com.au/ # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YToxMDp7czo0OiJuYW1lIjtzOjEyOiJhZGlfY2F0X21lbnUiO3M6NzoidmVyc2lvbiI7czoz OiIwLjQiO3M6NjoiYXV0aG9yIjtzOjExOiJBZGkgR2lsYmVydCI7czoxMDoiYXV0aG9yX3Vy aSI7czozNDoiaHR0cDovL3d3dy5ncmVhdG9jZWFubWVkaWEuY29tLmF1LyI7czoxMToiZGVz Y3JpcHRpb24iO3M6MjM6IkNhdGVnb3J5ICYgYXJ0aWNsZSBtZW51IjtzOjQ6InR5cGUiO2k6 MDtzOjQ6ImhlbHAiO3M6MTA1NzQ6Igk8aDE+PHN0cm9uZz5hZGlfY2F0X21lbnU8L3N0cm9u Zz4gJiM4MjExOyBDYXRlZ29yeSAmYW1wOyBhcnRpY2xlIG1lbnU8L2gxPgoKCTxwPlRoaXMg d2lsbCBwcm9kdWNlIGEgbWVudSBvZiBjYXRlZ29yaWVzIGFuZCB0aGVpciBhcnRpY2xlcy48 L3A+CgoJPHA+VGhlIGNhdGVnb3J5IGxpc3QgY2FuIGJlIGRlZmluZWQgYWNjb3JkaW5nIHRv IGEgcGFyZW50IGNhdGVnb3J5LCBhIHVzZXIgc3VwcGxpZWQgbGlzdCBvciBhIHNlY3Rpb24u PC9wPgoKCTxoMj48c3Ryb25nPkluc3RhbGxhdGlvbjwvc3Ryb25nPjwvaDI+CgoJPHA+MS4g RG93bmxvYWQgYW5kIGluc3RhbGwgdGhlIHBsdWdpbiBpbiB0aGUgdXN1YWwgd2F5LjwvcD4K Cgk8cD4yLiBUbyB1c2Ugd2l0aCBzdGFuZGFyZCA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9z cGFuPiBjYXRlZ29yaWVzLCBjcmVhdGUgYSBuZXcgZm9ybSBvZiB0eXBlICYjODIyMDthcnRp Y2xlJiM4MjIxOywgY2FsbGVkIDxpPmFkaV9jYXRfbWVudV9hcnRpY2xlczwvaT4sIGFuZCBm aWxsIGl0IHdpdGg6PC9wPgoKPHByZT48Y29kZT4mbHQ7bGkmbHQ7dHhwOmFkaV9jYXRfbWVu dV9pZiZndDsgY2xhc3M9JnF1b3Q7YWN0aXZlX2NsYXNzJnF1b3Q7Jmx0Oy90eHA6YWRpX2Nh dF9tZW51X2lmJmd0OyZndDsKJmx0O3R4cDpwZXJtbGluayZndDsmbHQ7dHhwOnRpdGxlLyZn dDsmbHQ7L3R4cDpwZXJtbGluayZndDsKJmx0Oy9saSZndDsKPC9jb2RlPjwvcHJlPgoKCTxw PjMuIFRvIHVzZSB3aXRoIDxjb2RlPnJzc191bmxpbWl0ZWRfY2F0ZWdvcmllczwvY29kZT4s IGNyZWF0ZSBhIG5ldyBmb3JtIG9mIHR5cGUgJiM4MjIwO2FydGljbGUmIzgyMjE7LCBjYWxs ZWQgPGk+YWRpX2NhdF9tZW51X3Jzc19hcnRpY2xlczwvaT4sIGFuZCBmaWxsIGl0IHdpdGg6 PC9wPgoKPHByZT48Y29kZT4mbHQ7bGkmZ3Q7CiZsdDt0eHA6cnNzX3NjdF9wZXJtbGluayZn dDsmbHQ7dHhwOnRpdGxlLyZndDsmbHQ7L3R4cDpyc3Nfc2N0X3Blcm1saW5rJmd0OwombHQ7 L2xpJmd0Owo8L2NvZGU+PC9wcmU+CgoJPHA+PGVtPklmIHlvdSBoYXZlIGEgcmVxdWlyZW1l bnQgdG8gZ2VuZXJhdGUgYXJ0aWNsZSBsaXN0cyBpbiBtb3JlIHRoYW4gb25lIGZvcm1hdCB0 aGVuIG1ha2UgdXNlIG9mIHRoZSA8Y29kZT5hcnRpY2xlX2Zvcm08L2NvZGU+IGFuZCA8Y29k ZT5yc3NfYXJ0aWNsZV9mb3JtPC9jb2RlPiBhdHRyaWJ1dGVzLjwvZW0+PC9wPgoKCTxoMj48 c3Ryb25nPlVzYWdlPC9zdHJvbmc+PC9oMj4KCgk8cD5QbGFjZSB0aGUgPGNvZGU+Jmx0O3R4 cDphZGlfY2F0X21lbnUgLyZndDs8L2NvZGU+IHRhZyB3aGVyZXZlciB5b3Ugd2FudCB0aGUg bWVudSB0byBhcHBlYXIuICBCeSBkZWZhdWx0LCA8c3Ryb25nPmFkaV9jYXRfbWVudTwvc3Ry b25nPiB3aWxsIHByb2R1Y2UgYSBtZW51IGNvbnRhaW5pbmcgYWxsIGFydGljbGUgY2F0ZWdv cmllcyB0b2dldGhlciB3aXRoIHRoZSBhcnRpY2xlcyB0aGF0IGJlbG9uZyB0byB0aGVtLiBB IHBhcmVudCBjYXRlZ29yeSBjYW4gYmUgc3BlY2lmaWVkLCB1c2luZyB0aGUgPGNvZGU+cGFy ZW50PSZxdW90O2NhdGVnb3J5IG5hbWUmcXVvdDs8L2NvZGU+IGF0dHJpYnV0ZSwgdG8gcmVz dHJpY3QgdGhlIGxpc3QuPC9wPgoKCTxwPldpdGggbm9ybWFsIDxzcGFuIGNsYXNzPSJjYXBz Ij5UWFA8L3NwYW4+IGNhdGVnb3JpZXMsIHRoZSBzdGFuZGFyZCA8Y29kZT4mbHQ7dHhwOmFy dGljbGVfY3VzdG9tIC8mZ3Q7PC9jb2RlPiB0YWcgaXMgdXNlZCB0byBwcmVzZW50IHRoZSBs aXN0cyBvZiBhcnRpY2xlcy4gPGNvZGU+Jmx0O3R4cDphcnRpY2xlX2N1c3RvbSAvJmd0Ozwv Y29kZT4gYXR0cmlidXRlcyBtYXkgYmUgc3BlY2lmaWVkIHVzaW5nIHRoZSA8Y29kZT5hcnRp Y2xlX2F0dHI8L2NvZGU+IGF0dHJpYnV0ZSBhbmQgYXJlIGRvY3VtZW50ZWQgaW4gdGhlIDxh IGhyZWY9Imh0dHA6Ly90ZXh0Ym9vay50ZXh0cGF0dGVybi5uZXQvd2lraS9pbmRleC5waHA/ dGl0bGU9VHhwOmFydGljbGVfY3VzdG9tXy8iPlRleHRib29rPC9hPi48L3A+CgoJPHA+V2l0 aCA8Y29kZT4mbHQ7dHhwOnJzc191bmxpbWl0ZWRfY2F0ZWdvcmllcyAvJmd0OzwvY29kZT4s IHRoZSA8Y29kZT4mbHQ7dHhwOnJzc191bmxpbWl0ZWRfY2F0ZWdvcmllc19hcnRpY2xlX2xp c3QgLyZndDs8L2NvZGU+IHRhZyBpcyB1c2VkIHRvIHByZXNlbnQgdGhlIGxpc3RzIG9mIGFy dGljbGVzLiBBdHRyaWJ1dGVzIGZvciB0aGlzIHRhZyBhcmUgc3BlY2lmaWVkIHVzaW5nIHRo ZSA8Y29kZT5hcnRpY2xlX2F0dHI8L2NvZGU+IGF0dHJpYnV0ZSBhbmQgYXJlIGRvY3VtZW50 ZWQgb24gPGEgaHJlZj0iaHR0cDovL3d3dy53aWxzaGlyZW9uZS5jb20vdGV4dHBhdHRlcm4t cGx1Z2lucy9yc3MtdW5saW1pdGVkLWNhdGVnb3JpZXMjcnNzX3VubGltaXRlZF9jYXRlZ29y aWVzX2FydGljbGVfbGlzdCI+d2lsc2hpcmV8b25lPC9hPi48L3A+CgoJPHA+SWYgeW91IHdh bnQgdGhlIG91dHB1dCB0byBiZSAmIzgyMjA7c2VjdGlvbiBzZW5zaXRpdmUmIzgyMjE7LCB3 aGVyZSBvbmx5IGNhdGVnb3JpZXMgdGhhdCBjb250YWluIGFydGljbGVzIGluIGEgc3BlY2lm aWVkIHNlY3Rpb24gYXJlIGRpc3BsYXllZCAmIzgyMTE7IHRoZW4gdXNlIDxjb2RlPnNlY3Rp b25fc2Vuc2l0aXZlPSZxdW90OzEmcXVvdDs8L2NvZGU+LjwvcD4KCgk8aDI+PHN0cm9uZz5X ZWxsIFNvcnRlZDwvc3Ryb25nPjwvaDI+CgoJPHA+QnkgZGVmYXVsdCwgPHN0cm9uZz5hZGlf Y2F0X21lbnU8L3N0cm9uZz4gd2lsbCBzb3J0IHRoZSBjYXRlZ29yeSBsaXN0IGFjY29yZGlu ZyB0byA8Y29kZT4mcXVvdDtuYW1lIGFzYyZxdW90OzwvY29kZT4gJiM4MjExOyB0aGF0IGlz LCB0aGUgY2F0ZWdvcnkgbmFtZSAoYXMgb3Bwb3NlZCB0byBpdHMgdGl0bGUpIGluIGFzY2Vu ZGluZyBhbHBoYWJldGljYWwgb3JkZXIuPC9wPgoKCTxwPlRvIHNvcnQgdGhlIGNhdGVnb3J5 IGxpc3QgaW4gb3RoZXIgd2F5cyB1c2UgdGhlIGF0dHJpYnV0ZSA8Y29kZT5zb3J0PSZxdW90 Oy4uLiZxdW90OzwvY29kZT4sIHdoZXJlIDxjb2RlPiZxdW90Oy4uLiZxdW90OzwvY29kZT4g aXMgZGVmaW5lZCBpbiB0aGUgPHN0cm9uZz5BdHRyaWJ1dGVzPC9zdHJvbmc+IHNlY3Rpb24g YmVsb3cuPC9wPgoKCTxwPlNvcnQgYXJ0aWNsZXMgdXNpbmcgdGhlIDxjb2RlPmFydGljbGVf YXR0cj0mcXVvdDsuLi4mcXVvdDs8L2NvZGU+IGF0dHJpYnV0ZS4gVGhpcyBwYXNzZXMgYXR0 cmlidXRlcyBkaXJlY3RseSB0byA8Y29kZT4mbHQ7dHhwOmFydGljbGVfY3VzdG9tIC8mZ3Q7 PC9jb2RlPiBvciA8Y29kZT4mbHQ7dHhwOnJzc191bmxpbWl0ZWRfY2F0ZWdvcmllc19hcnRp Y2xlX2xpc3QgLyZndDs8L2NvZGU+IHRhZ3MgZGVwZW5kaW5nIHdoaWNoIG1vZGUgeW91JiM4 MjE3O3JlIHVzaW5nLiBCZSBhd2FyZSB0aGF0LCBpbiBkZWZhdWx0IG1vZGUsIHlvdSBzaG91 bGQgdXNlIDxjb2RlPnNvcnQ9JnF1b3Q7dGl0bGUgYXNjJnF1b3Q7PC9jb2RlPiBidXQgaW4g cnNzX3VubGltaXRlZF9jYXRlZ29yaWVzIG1vZGUgKDxjb2RlPnJzc191bmxpbWl0ZWQ9JnF1 b3Q7MSZxdW90OzwvY29kZT4pIHVzZSA8Y29kZT5zb3J0Ynk9JnF1b3Q7dGl0bGUmcXVvdDsg c29ydGRpcj0mcXVvdDthc2MmcXVvdDs8L2NvZGU+LjwvcD4KCgk8aDI+PHN0cm9uZz5BdHRy aWJ1dGVzPC9zdHJvbmc+PC9oMj4KCgk8cD48Y29kZT5wYXJlbnQ9JnF1b3Q7Y2F0ZWdvcnkg bmFtZSZxdW90OzwvY29kZT48L3A+CgoJPHA+LSB0aGUgcGFyZW50IGNhdGVnb3J5LiBEZWZh dWx0ID0gJiM4MjIwOyYjODIyMTsgKGFsbCBjYXRlZ29yaWVzLCBwYXJlbnRzICZhbXA7IGNo aWxkcmVuKS48L3A+CgoJPHA+PGNvZGU+Y2F0ZWdvcmllcz0mcXVvdDtjYXRlZ29yeSBuYW1l KHMpJnF1b3Q7PC9jb2RlPjwvcD4KCgk8cD4tIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGNh dGVnb3J5IG5hbWVzIHRvIGluY2x1ZGUgaW4gdGhlIGxpc3QuIERlZmF1bHQgPSAmIzgyMjA7 JiM4MjIxOyAoaW5jbHVkZSBhbGwpLjwvcD4KCgk8cD48Y29kZT5leGNsdWRlPSZxdW90O2Nh dGVnb3J5IG5hbWUocykmcXVvdDs8L2NvZGU+PC9wPgoKCTxwPi0gY29tbWEgc2VwYXJhdGVk IGxpc3Qgb2YgY2F0ZWdvcnkgbmFtZXMgd2hpY2ggd2lsbCBiZSBleGNsdWRlZCBmcm9tIHRo ZSBsaXN0LiBEZWZhdWx0ID0gJiM4MjIwOyYjODIyMTsgKGV4Y2x1ZGUgbm9uZSkuPC9wPgoK CTxwPjxjb2RlPnNvcnQ9JnF1b3Q7c29ydCB2YWx1ZXMmcXVvdDs8L2NvZGU+PC9wPgoKCTxw Pi0gaG93IHRvIHNvcnQgdGhlIGNhdGVnb3J5IGxpc3QuIERlZmF1bHQgaXMgJiM4MjIwO25h bWUgYXNjJiM4MjIxOyAoYWxwaGFiZXRpY2FsIG9yZGVyKS4gT3RoZXIgb3B0aW9uczogJiM4 MjIwO2lkJiM4MjIxOywgJiM4MjIwO25hbWUmIzgyMjE7LCAmIzgyMjA7dHlwZSYjODIyMTss ICYjODIyMDtwYXJlbnQmIzgyMjE7LCAmIzgyMjA7dGl0bGUmIzgyMjE7LjwvcD4KCgk8cD48 Y29kZT5jbGFzcz0mcXVvdDtjbGFzcyBuYW1lJnF1b3Q7PC9jb2RlPjwvcD4KCgk8cD4tIGNs YXNzIGFwcGxpZWQgdG8gdGhlIHRvcCBsZXZlbCA8Y29kZT4mbHQ7dWwmZ3Q7PC9jb2RlPi4g RGVmYXVsdCA9ICYjODIyMDtjYXRfbWVudSYjODIyMTsuPC9wPgoKCTxwPjxjb2RlPm1lbnVf aWQ9JnF1b3Q7aWQgbmFtZSZxdW90OzwvY29kZT48L3A+CgoJPHA+LSB0aGUgSUQgdG8gYmUg dXNlZCBvbiB0aGUgdG9wIGxldmVsIDxjb2RlPiZsdDt1bCZndDs8L2NvZGU+LiAgRGVmYXVs dCA9ICYjODIyMDsmIzgyMjE7IChub25lKS48L3A+CgoJPHA+PGNvZGU+YWN0aXZlX2NsYXNz PSZxdW90O2NsYXNzIG5hbWUmcXVvdDs8L2NvZGU+PC9wPgoKCTxwPi0gY2xhc3MgYXBwbGll ZCB0byBhY3RpdmUgY2F0ZWdvcnkgPGNvZGU+Jmx0O2xpJmd0OzwvY29kZT4uIERlZmF1bHQg PSAmIzgyMjA7YWN0aXZlX2NsYXNzJiM4MjIxOy48L3A+CgoJPHA+PGk+Tm90ZXM6PC9pPjxi ciAvPgo8aT4xLiBUaGUgY2xhc3MgYXBwbGllZCB0byBhY3RpdmUgYXJ0aWNsZSA8Y29kZT4m bHQ7bGkmZ3Q7PC9jb2RlPiBpbiB0aGUgcmVuZGVyZWQgbWVudSBkZWZhdWx0cyB0byAmIzgy MjA7YWN0aXZlX2NsYXNzJiM4MjIxOyBhbHNvIGJ1dCBjYW4gb25seSBiZSBjaGFuZ2VkIGJ5 IGVkaXRpbmcgdGhlIDxzdHJvbmc+YWRpX21lbnVfY2F0X2FydGljbGVzPC9zdHJvbmc+IGZv cm0uPC9pPjxiciAvPgo8aT4yLiA8Y29kZT5hZGlfY2F0X21lbnU8L2NvZGU+IHVzZXMgPGNv ZGU+cnNzX3VubGltaXRlZF9jYXRlZ29yaWVzX2FydGljbGVfbGlzdDwvY29kZT4gdG8gb3V0 cHV0IHRoZSBsaXN0cyBvZiBhcnRpY2xlcy4gQ3VycmVudGx5IHRoZXNlIGRvIG5vdCBjb250 YWluIHRoZSBhY3RpdmUgYXJ0aWNsZSBzbyAmIzgyMjA7YWN0aXZlX2NsYXNzJiM4MjIxOyBk b2VzIG5vdCBhcHBseSBpbiB0aGlzIGNhc2UuPC9pPjwvcD4KCgk8cD48Y29kZT5zZWN0aW9u PSZxdW90O3NlY3Rpb24gbmFtZSZxdW90OzwvY29kZT48L3A+CgoJPHA+LSBnZW5lcmF0ZSBj YXRlZ29yeSBsaW5rcyB0byBzcGVjaWZpZWQgc2VjdGlvbi4gRGVmYXVsdCA9ICYjODIyMDsm IzgyMjE7IChubyBzZWN0aW9uIHJlc3RyaWN0aW9uKS4gTGlzdCBvZiBhcnRpY2xlcyBpcyBh bHNvIHJlc3RyaWN0ZWQgdG8gdGhvc2UgYmVsb25naW5nIHRvIHRoZSBzcGVjaWZpZWQgc2Vj dGlvbi48L3A+CgoJPHA+PGNvZGU+dGhpc19zZWN0aW9uPSZxdW90O2Jvb2xlYW4mcXVvdDs8 L2NvZGU+PC9wPgoKCTxwPi0gZ2VuZXJhdGUgY2F0ZWdvcnkgbGlua3MgdG8gY3VycmVudGx5 IGFjdGl2ZSBzZWN0aW9uLiBEZWZhdWx0ID0gJiM4MjIwO25vJiM4MjIxOy4gTGlzdCBvZiBh cnRpY2xlcyBpcyBhbHNvIHJlc3RyaWN0ZWQgdG8gdGhvc2UgYmVsb25naW5nIHRvIHRoZSBj dXJyZW50IHNlY3Rpb24uIDxlbT5Ob3RlIHRoYXQgdGhpcyBvdmVycmlkZXMgdGhlIDxjb2Rl PnNlY3Rpb248L2NvZGU+IGF0dHJpYnV0ZS48L2VtPjwvcD4KCgk8cD48Y29kZT5zZWN0aW9u X3NlbnNpdGl2ZT0mcXVvdDtib29sZWFuJnF1b3Q7PC9jb2RlPjwvcD4KCgk8cD4tIGdlbmVy YXRlIGNhdGVnb3J5IGxpbmtzIHdoaWNoIGhhdmUgYXJ0aWNsZXMgaW4gdGhlIGN1cnJlbnRs eSBhY3RpdmUgc2VjdGlvbi4gRGVmYXVsdCA9ICYjODIyMDtubyYjODIyMTsuPC9wPgoKCTxw Pjxjb2RlPmFjdGl2ZV9vbmx5PSZxdW90O2Jvb2xlYW4mcXVvdDs8L2NvZGU+PC9wPgoKCTxw Pi0gc3BlY2lmaWVzIHdoZXRoZXIgdG8gb25seSBzaG93IGFydGljbGVzIGluIGN1cnJlbnRs eSBhY3RpdmUgY2F0ZWdvcnkuIERlZmF1bHQgPSAmIzgyMjA7MCYjODIyMTsgKHNob3cgYXJ0 aWNsZXMgaW4gYWxsIGNhdGVnb3JpZXMpLjwvcD4KCgk8cD48Y29kZT5tZXNzeV91cmw9JnF1 b3Q7Ym9vbGVhbiZxdW90OzwvY29kZT48L3A+CgoJPHA+LSBmb3JjZSBsaW5rcyB0byBiZSBv dXRwdXQgaW4gbWVzc3kgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gZm9ybWF0LiBE ZWZhdWx0ID0gJiM4MjIwOzAmIzgyMjE7IChvdXRwdXQgbGlua3MgYWNjb3JkaW5nIHRvIFBl cm1hbmVudCBMaW5rIE1vZGUgc2V0dGluZyBpbiA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9z cGFuPiBQcmVmZXJlbmNlcykuPC9wPgoKCTxwPjxjb2RlPmxpbms9JnF1b3Q7Ym9vbGVhbiZx dW90OzwvY29kZT48L3A+CgoJPHA+LSBzcGVjaWZpZXMgd2hldGhlciB0byBvdXRwdXQgY2F0 ZWdvcmllcyBhcyBsaW5rcy4gRGVmYXVsdCA9ICYjODIyMDsxJiM4MjIxOyAob3V0cHV0IGxp bmtzKS4gSWYgc2V0IHRvICYjODIyMDswJiM4MjIxOyB0aGVuIG9ubHkgdGhlIGNhdGVnb3Jp ZXMgdGl0bGVzIHdpbGwgYmUgb3V0cHV0LjwvcD4KCgk8cD48Y29kZT5hcnRpY2xlX2F0dHI9 JiMzOTthcnRpY2xlX2N1c3RvbSBhdHRyaWJ1dGVzJiMzOTs8L2NvZGU+PC9wPgoKCTxwPi0g YSBsaXN0IG9mIGF0dHJpYnV0ZXMgdG8gYmUgcGFzc2VkIHRocm91Z2ggdG8gPGNvZGU+Jmx0 O3R4cDphcnRpY2xlX2N1c3RvbSAvJmd0OzwvY29kZT4gb3IgPGNvZGU+Jmx0O3R4cDpyc3Nf dW5saW1pdGVkX2NhdGVnb3JpZXNfYXJ0aWNsZV9saXN0IC8mZ3Q7PC9jb2RlPiB0byBjb250 cm9sIHRoZSBhcHBlYXJhbmNlIG9mIGFydGljbGVzIChkZXBlbmRzIG9uIDxjb2RlPnJzc191 bmxpbWl0ZWQ8L2NvZGU+IHNldHRpbmcgYmVsb3cpLiBBdHRyaWJ1dGVzL3ZhbHVlcyBzaG91 bGQgYmUgc2VwYXJhdGVkIGJ5IHNwYWNlcy4gRGVmYXVsdCA9ICYjODIxNjsmIzgyMTc7IChp LmUuIDxjb2RlPiZsdDt0eHA6YXJ0aWNsZV9jdXN0b20gLyZndDs8L2NvZGU+IG9yIDxjb2Rl PiZsdDt0eHA6cnNzX3VubGltaXRlZF9jYXRlZ29yaWVzX2FydGljbGVfbGlzdCAvJmd0Ozwv Y29kZT4gZGVmYXVsdHMpLiA8c3Ryb25nPk5vdGUgdGhlIHVzZSBvZiBzaW5nbGUgcXVvdGVz PC9zdHJvbmc+LiBGb3IgZXhhbXBsZTogPGNvZGU+YXJ0aWNsZV9hdHRyPSYjMzk7c29ydD0m cXVvdDtUaXRsZSZxdW90OyBsaW1pdD0mcXVvdDsyMCZxdW90OyYjMzk7PC9jb2RlPiBvciA8 Y29kZT5yc3NfdW5saW1pdGVkPSZxdW90OzEmcXVvdDsgYXJ0aWNsZV9hdHRyPSYjMzk7c29y dGJ5PSZxdW90O1RpdGxlJnF1b3Q7IGxpbWl0PSZxdW90OzIwJnF1b3Q7JiMzOTs8L2NvZGU+ PC9wPgoKCTxwPjxjb2RlPmFydGljbGVfZm9ybT0mcXVvdDtmb3JtIG5hbWUmcXVvdDs8L2Nv ZGU+PC9wPgoKCTxwPi0gdGhlIGZvcm0gdG8gdXNlIHdoZW4gbGlzdGluZyBhcnRpY2xlcy4g RGVmYXVsdCA9ICYjODIyMDthZGlfY2F0X21lbnVfYXJ0aWNsZXMmIzgyMjE7LjwvcD4KCgk8 cD48Y29kZT5yc3NfdW5saW1pdGVkPSZxdW90O2Jvb2xlYW4mcXVvdDs8L2NvZGU+PC9wPgoK CTxwPi0gZW5hYmxlcyBjb21wYXRpYmlsaXR5IHdpdGggPGNvZGU+cnNzX3VubGltaXRlZF9j YXRlZ29yaWVzPC9jb2RlPi4gRGVmYXVsdCA9ICYjODIyMDswJiM4MjIxOyAoc3RhbmRhcmQg PHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gY2F0ZWdvcmllcyBvbmx5KS48L3A+CgoJ PHA+PGNvZGU+cnNzX2FydGljbGVfZm9ybSA9JnF1b3Q7Zm9ybSBuYW1lJnF1b3Q7PC9jb2Rl PjwvcD4KCgk8cD4tIHRoZSBmb3JtIHRvIHVzZSB3aGVuIGxpc3RpbmcgYXJ0aWNsZXMgaW4g cnNzX3VubGltaXRlZF9jYXRlZ29yaWVzIGNvbXBhdGliaWxpdHkgbW9kZS4gRGVmYXVsdCA9 ICYjODIyMDthZGlfY2F0X21lbnVfcnNzX2FydGljbGVzJiM4MjIxOy48L3A+CgoJPGgyPjxz dHJvbmc+RXhhbXBsZXM8L3N0cm9uZz48L2gyPgoKCTxwPjxjb2RlPiZsdDt0eHA6YWRpX2Nh dF9tZW51IHBhcmVudD0mcXVvdDtkYWRkeSZxdW90OyBhcnRpY2xlX2F0dHI9JiMzOTtzb3J0 PSZxdW90O3RpdGxlJnF1b3Q7IGxpbWl0PSZxdW90OzEyJnF1b3Q7JiMzOTsgLyZndDs8L2Nv ZGU+PC9wPgoKCTxwPkluIHRoZSBhYm92ZSBleGFtcGxlOjwvcD4KCgk8dWw+CgkJPGxpPm9u bHkgY2hpbGQgY2F0ZWdvcmllcyBiZWxvbmdpbmcgdG8gcGFyZW50IGNhdGVnb3J5ICYjODIy MDtkYWRkeSYjODIyMTsgd2lsbCBiZSBsaXN0ZWQ8L2xpPgoJCTxsaT50aGUgY2xhc3Mgb24g dGhlIHRvcCBsZXZlbCA8Y29kZT4mbHQ7dWwmZ3Q7PC9jb2RlPiB3aWxsIGJlICYjODIyMDtj YXRfbWVudSYjODIyMTs8L2xpPgoJCTxsaT50aGUgY2xhc3Mgb24gdGhlIGFjdGl2ZSA8Y29k ZT4mbHQ7bGkmZ3Q7PC9jb2RlPiAoY2F0ZWdvcnkgb3IgYXJ0aWNsZSkgd2lsbCBiZSAmIzgy MjA7YWN0aXZlX2NsYXNzJiM4MjIxOzwvbGk+CgkJPGxpPnRoZSBhcnRpY2xlcyB3aWxsIGJl IHNvcnRlZCBhY2NvcmRpbmcgdG8gdGhlaXIgdGl0bGVzPC9saT4KCQk8bGk+dGhlIG51bWJl ciBvZiBhcnRpY2xlcyBwZXIgY2F0ZWdvcnkgd2lsbCBiZSBsaW1pdGVkIHRvIDEyPC9saT4K CTwvdWw+CgoJPHA+PGNvZGU+Jmx0O3R4cDphZGlfY2F0X21lbnUgYXJ0aWNsZV9hdHRyPSYj Mzk7c29ydD0mcXVvdDt0aXRsZSBhc2MmcXVvdDsmIzM5OyB0aGlzX3NlY3Rpb249JnF1b3Q7 MSZxdW90OyBzZWN0aW9uX3NlbnNpdGl2ZT0mcXVvdDsxJnF1b3Q7IC8mZ3Q7PC9jb2RlPjwv cD4KCgk8cD5UaGUgYWJvdmUgd2lsbDo8L3A+CgoJPHVsPgoJCTxsaT5jcmVhdGUgYSBtZW51 IG9mIGNhdGVnb3JpZXMgdGhhdCBjb250YWluIGFydGljbGVzIGJlbG9uZ2luZyB0byB0aGUg Y3VycmVudCBzZWN0aW9uPC9saT4KCQk8bGk+bGlzdCB0aGUgY2F0ZWdvcmllcyBpbiBhbHBo YWJldGljYWwgb3JkZXIgYWNjb3JkaW5nIHRvIHRoZWlyIHRpdGxlczwvbGk+Cgk8L3VsPgoK CTxoMj48c3Ryb25nPlN0eWxpbmc8L3N0cm9uZz48L2gyPgoKCTxwPlNvbWUgPHNwYW4gY2xh c3M9ImNhcHMiPkNTUzwvc3Bhbj4gc2VydmluZyBzdWdnZXN0aW9uczo8L3A+Cgo8cHJlPjxj b2RlPi8qIHRvIHNldCBkZWZhdWx0IGxpbmsgY29sb3VyICovCnVsLmNhdF9tZW51IGEgeyBj b2xvcjogYmxhY2sgfQo8L2NvZGU+PC9wcmU+Cgo8cHJlPjxjb2RlPi8qIHRvIHNldCBhY3Rp dmUgbGluayBjb2xvdXIgKi8KdWwuY2F0X21lbnUgLmFjdGl2ZV9jbGFzcyBhIHsgY29sb3I6 IHJlZCB9CnVsLmNhdF9tZW51IC5hY3RpdmVfY2xhc3MgdWwgYSB7IGNvbG9yOiBibGFjayB9 CjwvY29kZT48L3ByZT4KCgk8aDI+PHN0cm9uZz5DcmVkaXRzPC9zdHJvbmc+PC9oMj4KCgk8 cD5UaGFua3MgdG8gS2V2aW4gUG90dHMgZm9yIHNwb25zb3JpbmcgdGhpcyBwbHVnaW4uIEkm IzgyMTc7bSBub3cgdGhlIHByb3VkIG93bmVyIG9mIGEgc2lnbmVkIGNvcHkgb2YgaGlzIGJv b2s6IDxhIGhyZWY9Imh0dHA6Ly93d3cuZ3JhcGhpY3B1c2guY29tL2Jvb2tzL3dlYi1kZXNp Z24tYW5kLW1hcmtldGluZy1zb2x1dGlvbnMtZm9yLWJ1c2luZXNzLXdlYnNpdGVzIj5XZWIg RGVzaWduIGFuZCBNYXJrZXRpbmcgU29sdXRpb25zPC9hPi48L3A+CgoJPHA+VGhhbmtzIGFu ZCByZXNwZWN0IGFuZCBhcG9sb2dpZXMgdG8gPGEgaHJlZj0iaHR0cDovL3d3dy5kaWdpdGFs aWEuYmUvIj5DaHJpc3RvcGhlIEJleWxzPC9hPiBmb3IgdGhlIGNvZGUgdGhhdCBJJiM4MjE3 O3ZlIHN0b2xlbiBmcm9tIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20v dmlld3RvcGljLnBocD9pZD0xMTg0MyI+Y2JzX2NhdGVnb3J5X2xpc3Q8L2E+IHRvIGltcGxl bWVudCB0aGUgc2VjdGlvbiBzZW5zaXRpdml0eSBndWJiaW5zLjwvcD4KCgk8aDIgY2xhc3M9 ImFkaV9leHRyYXMiPjxzdHJvbmc+QWRkaXRpb25hbCBpbmZvcm1hdGlvbjwvc3Ryb25nPjwv aDI+CgoJPHAgY2xhc3M9ImFkaV9leHRyYXMiPlN1cHBvcnQgYW5kIGZ1cnRoZXIgaW5mb3Jt YXRpb24gY2FuIGJlIG9idGFpbmVkIGZyb20gdGhlIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS50 ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD0yODUzMSI+VGV4dHBhdHRlcm4gc3Vw cG9ydCBmb3J1bTwvYT4uIEEgY29weSBvZiB0aGlzIGhlbHAgaXMgYWxzbyBhdmFpbGFibGUg PGEgaHJlZj0iaHR0cDovL3d3dy5ncmVhdG9jZWFubWVkaWEuY29tLmF1L3R4cC8/cGx1Z2lu PWFkaV9jYXRfbWVudSI+b25saW5lPC9hPi4gIE1vcmUgYWRpX3BsdWdpbnMgY2FuIGJlIGZv dW5kIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ3JlYXRvY2Vhbm1lZGlhLmNvbS5hdS90eHAvIj5o ZXJlPC9hPi48L3A+IjtzOjQ6ImNvZGUiO3M6MTA1Mzg6IgovKgoJYWRpX2NhdF9tZW51IC0g Q2F0ZWdvcnkgJiBhcnRpY2xlIG1lbnUKCglXcml0dGVuIGJ5IEFkaSBHaWxiZXJ0CgoJUmVs ZWFzZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCgoJVmVyc2lvbiBo aXN0b3J5OgoJMC40CQktIG5ldyBhZGlfY2F0X21lbnUgYXR0cmlidXRlczogJ2xpbmsnIChm b3IganBkdXBvbnQpLCAnYXJ0aWNsZV9mb3JtJyAmICdyc3NfYXJ0aWNsZV9mb3JtJyAoZm9y IGZsb29kZmlzaCkKCQkJLSBlbmhhbmNlbWVudDogZXh0ZW5kZWQgJ2NhdGVnb3JpZXMnICYg J2V4Y2x1ZGUnIGZ1bmN0aW9uYWxpdHkgdG8gc2VjdGlvbiBzZW5zaXRpdmUgbW9kZQoJCQkt IGZpeDogc3VwcHJlc3MgZW1wdHkgPHVsPjwvdWw+IChlLmcuIHdoZW4gbm8gY2F0ZWdvcmll cyBmb3VuZCBpbiBzZWN0aW9uIHNlbnNpdGl2ZSBtb2RlKSAoZm9yIGpwZHVwb250KQoJMC4z CQktIGVuaGFuY2VtZW50OiByZXN0b3JlZCAnc2VjdGlvbicsICd0aGlzX3NlY3Rpb24nIGF0 dHJpYnV0ZXMgJiBleHRlbmRlZCBmdW5jdGlvbmFsaXR5IHRvIGNvdmVyIGFydGljbGUgbGlz dHMKCQkJLSBlbmhhbmNlbWVudDogcmVzdG9yZWQgJ2V4Y2x1ZGUnIGF0dHJpYnV0ZSBmdW5j dGlvbmFsaXR5CgkJCS0gZW5oYW5jZW1lbnQ6IHJlc3RvcmVkICdjYXRlZ29yaWVzJyBhdHRy aWJ1dGUgZnVuY3Rpb25hbGl0eQoJCQktIG5ldyBhZGlfY2F0X21lbnUgYXR0cmlidXRlOiAn c2VjdGlvbi1zZW5zaXRpdmUnCgkwLjIJCS0gZW5oYW5jZW1lbnQ6IHJzc191bmxpbWl0ZWRf Y2F0ZWdvcmllcyBtb2RlCgkJCS0gaGVscDogdXBkYXRlZCBpbnN0cnVjdGlvbnMgcmVnYXJk aW5nIGFydGljbGUgPGxpPiBhY3RpdmUgY2xhc3MKCQkJLSBoZWxwOiBkb2N1bWVudGVkICJz b3J0JyBhdHRyaWJ1dGUKCTAuMQkJLSBpbml0aWFsIHJlbGVhc2UKCiovCgpnbG9iYWwgJHRo aW5nLCRhdHRzLCR0eHA0MDc7CgokdHhwNDA3ID0gdmVyc2lvbl9jb21wYXJlKCRwcmVmc1sn dmVyc2lvbiddLCAnNC4wLjcnLCAnPj0nKTsKCmZ1bmN0aW9uIGFkaV9jYXRfbWVudV9hcnRp Y2xlcygkY2F0ZWdvcnksJHdyYXB0YWc9JycsJGFydGljbGVfYXR0cj0nJykgewovLyByZXRy aWV2ZSBhcnRpY2xlcyB1c2luZyA8dHhwOmFydGljbGVfY3VzdG9tIC8+IG9yIDx0eHA6cnNz X3VubGltaXRlZF9jYXRlZ29yaWVzX2FydGljbGVfbGlzdCAvPiB0YWdzCglnbG9iYWwgJHJz c191bmxpbWl0ZWQsJHMsJHNlY3Rpb24sJHRoaXNfc2VjdGlvbiwkdHhwNDA3LCRhcnRpY2xl X2Zvcm0sJHJzc19hcnRpY2xlX2Zvcm07CgkvLyRhcnRpY2xlX2Zvcm0gPSAnYWRpX2NhdF9t ZW51X2FydGljbGVzJzsjIyMjIyMjIyMjIwoJLy8kcnNzX2FydGljbGVfZm9ybSA9ICdhZGlf Y2F0X21lbnVfcnNzX2FydGljbGVzJzsjIyMjIyMjIyMjCgkkYXJ0aWNsZV9hdHRyID09ICcn ID8gLy8gYW55IGFydGljbGVfY3VzdG9tIGF0dHJpYnV0ZXMgc3BlY2lmaWVkPwoJCSRhdHRy ID0gJycgOgoJCSRhdHRyID0gJyAnLiRhcnRpY2xlX2F0dHI7CgkvLyBzZXQgZGVmYXVsdCAi YWxsIHNlY3Rpb25zIiBhdHRyaWJ1dGUKCWlmICgkcnNzX3VubGltaXRlZCkKCQkkc2VjdGlv bl9hdHRyaWJ1dGUgPSAnIHNlY3Rpb249IioiJzsKCWVsc2UKCQkkc2VjdGlvbl9hdHRyaWJ1 dGUgPSAnJzsKCWlmICgkc2VjdGlvbikgLy8gZXhwbGljaXQgc2VjdGlvbiBzcGVjaWZpZWQK CQkkc2VjdGlvbl9hdHRyaWJ1dGUgPSAnIHNlY3Rpb249IicuJHNlY3Rpb24uJyInOwoJaWYg KCR0aGlzX3NlY3Rpb24pIC8vIGN1cnJlbnQgc2VjdGlvbiByZXF1aXJlZAoJCSRzZWN0aW9u X2F0dHJpYnV0ZSA9ICcgc2VjdGlvbj0iJy4kcy4nIic7CgkkcnNzX3VubGltaXRlZCA/CgkJ JGFydGljbGVfbGlzdCA9IHRyaW0ocGFyc2UoJzx0eHA6cnNzX3VubGltaXRlZF9jYXRlZ29y aWVzX2FydGljbGVfbGlzdCBjYXRlZ29yeT0iJy4kY2F0ZWdvcnkuJyInLiRhdHRyLicgJy4k c2VjdGlvbl9hdHRyaWJ1dGUuJyBmb3JtPSInLiRyc3NfYXJ0aWNsZV9mb3JtLiciIC8+Jykp IDoKCQkkYXJ0aWNsZV9saXN0ID0gdHJpbShwYXJzZSgnPHR4cDphcnRpY2xlX2N1c3RvbSBj YXRlZ29yeT0iJy4kY2F0ZWdvcnkuJyInLiRhdHRyLicgJy4kc2VjdGlvbl9hdHRyaWJ1dGUu JyBmb3JtPSInLiRhcnRpY2xlX2Zvcm0uJyIgLz4nKSk7CglpZiAoJGFydGljbGVfbGlzdCA9 PSAiIikKCQlyZXR1cm4gJyc7CgllbHNlIC8vIGFydGljbGVzIGZvdW5kCgkJaWYgKCR3cmFw dGFnID09ICIiKQoJCQlyZXR1cm4gJGFydGljbGVfbGlzdDsKCQllbHNlCgkJCXJldHVybiB0 YWcoJGFydGljbGVfbGlzdCwkd3JhcHRhZywnJyk7Cn0KCmZ1bmN0aW9uIGFkaV9jYXRfbWVu dV9pZigkYXR0cywgJHRoaW5nKSB7Ci8vIGZvciB1c2UgaW4gdGhlIEZvcm0gdG8gaWRlbnRp ZnkgdGhlIGFjdGl2ZSBhcnRpY2xlCi8vIGNvcHkgb2YgVFhQIDQuMC43IGlmX2FydGljbGVf aWQKCWdsb2JhbCAkdGhpc2FydGljbGUsICRwcmV0ZXh0OwoJYXNzZXJ0X2FydGljbGUoKTsK CWV4dHJhY3QobEF0dHMoYXJyYXkoCgkJJ2lkJyA9PiAkcHJldGV4dFsnaWQnXSwKCSksICRh dHRzKSk7CglpZiAoJGlkKQoJCXJldHVybiBwYXJzZShFdmFsRWxzZSgkdGhpbmcsIGluX2xp c3QoJHRoaXNhcnRpY2xlWyd0aGlzaWQnXSwgJGlkKSkpOwp9CgpmdW5jdGlvbiBhZGlfY2F0 X21lbnUoJGF0dHMpIHsKLy8gPHR4cDphZGlfY2F0X21lbnUgLz4gdGFnCglnbG9iYWwgJHBy ZWZzLCRzLCRjLCR0aGlzYXJ0aWNsZSwkcnNzX3VubGltaXRlZCwkc2VjdGlvbiwkdGhpc19z ZWN0aW9uLCR0eHA0MDcsJGFydGljbGVfZm9ybSwkcnNzX2FydGljbGVfZm9ybTsKCglleHRy YWN0KGxBdHRzKGFycmF5KAoJCSdjbGFzcycJCQkJPT4gJ2NhdF9tZW51JywJCS8vIGNsYXNz IGFwcGxpZWQgdG8gdG9wIGxldmVsIDx1bD4KCQknbWVudV9pZCcJCQk9PiAnJywJCQkJLy8g Q1NTIElEIGZvciB0b3AgbGV2ZWwgPHVsPgoJCSdhY3RpdmVfY2xhc3MnCQk9PiAnYWN0aXZl X2NsYXNzJywJLy8gY2xhc3MgYXBwbGllZCB0byBhY3RpdmUgPGxpPgoJCSdwYXJlbnQnCQkJ PT4gJycsCQkJCS8vIGNhdGVnb3J5IHBhcmVudAoJCSdjYXRlZ29yaWVzJwkJPT4gJycsCQkJ CS8vIGxpc3Qgb2YgY2F0ZWdvcmllcyB0byBpbmNsdWRlCgkJJ2V4Y2x1ZGUnCQkJPT4gJycs CQkJCS8vIGxpc3Qgb2YgY2F0ZWdvcmllcyB0byBleGNsdWRlCgkJJ3Jlc3RyaWN0JwkJCT0+ ICcnLAkJCQkvLyBjYXRlZ29yeTEgb3IgY2F0ZWdvcnkyCgkJJ3NvcnQnCQkJCT0+ICcnLAkJ CQkvLyBjYXRlZ29yeSBzb3J0IG9wdGlvbnMKCQknbGluaycJCQkJPT4gJzEnLAkJCQkvLyBv dXRwdXQgY2F0ZWdvcmllcyBhcyBsaW5rcwoJCSdtZXNzeV91cmwnCQkJPT4gJzAnLAkJCQkv LyBmb3JjZSBsaW5rcyB0byBiZSBvdXRwdXQgaW4gbWVzc3kgVVJMIGZvcm1hdAoJCSdhcnRp Y2xlX2F0dHInCQk9PiAnJywJCQkJLy8gYXR0cmlidXRlcyB0byBwYXNzIHRvIGFydGljbGVf Y3VzdG9tCgkJJ2FydGljbGVfZm9ybScJCT0+ICdhZGlfY2F0X21lbnVfYXJ0aWNsZXMnLCAv LyBmb3JtIHRvIHVzZSB3aXRoIGFydGljbGVfY3VzdG9tCgkJJ2FjdGl2ZV9vbmx5JwkJPT4g JzAnLAkJCQkvLyBvbmx5IHNob3cgYXJ0aWNsZXMgaW4gY3VycmVudGx5IGFjdGl2ZSBjYXRl Z29yeQoJCSdyc3NfdW5saW1pdGVkJwkJPT4gJzAnLAkJCQkvLyByc3NfdW5saW1pdGVkX2Nh dGVnb3JpZXMgbW9kZQoJCSdyc3NfYXJ0aWNsZV9mb3JtJwk9PiAnYWRpX2NhdF9tZW51X3Jz c19hcnRpY2xlcycsIC8vIGZvcm0gdG8gdXNlIHdpdGggcnNzX3VubGltaXRlZF9jYXRlZ29y aWVzX2FydGljbGVfbGlzdAoJCSdzZWN0aW9uJwkJCT0+ICcnLAkJCQkvLyBsaW5rIGNhdGVn b3JpZXMgdG8gc3BlY2lmaWVkIHNlY3Rpb24KCQkndGhpc19zZWN0aW9uJwkJPT4gJycsCQkJ CS8vIGxpbmsgY2F0ZWdvcmllcyB0byBjdXJyZW50IHNlY3Rpb24gKG92ZXJyaWRlcyAnc2Vj dGlvbicpCgkJJ3NlY3Rpb25fc2Vuc2l0aXZlJyA9PiAnMCcsCQkJCS8vIGRpc3BsYXkgY2F0 ZWdvcmllcyBvbmx5IHRoYXQgaGF2ZSBhcnRpY2xlcyBiZWxvbmdpbmcgdG8gc3BlY2lmaWVk ICdzZWN0aW9uJyBvciAndGhpc19zZWN0aW9uJwoJCSd0eXBlJwkJCQk9PiAnYXJ0aWNsZScs CQkvLyBsZWZ0b3ZlciBmcm9tIFRYUCBjYXRlZ29yeV9saXN0CgkJJ2RlYnVnJwkJCQk9PiAn MCcsCgkpLCAkYXR0cykpOwoKCS8vIHNldCB1cCB0aGUgYmFzaWNzCgkkYnJlYWsgPSAnbGkn OwoJJHdyYXB0YWcgPSAndWwnOwoJJHNvcnQgPSBkb1NsYXNoKCRzb3J0KTsKCSRpbmNsdWRl X2xpc3QgPSAnJzsKCWlmICgkY2F0ZWdvcmllcykgewoJCSRpbmNsdWRlX2xpc3QgPSBkb19s aXN0KCRjYXRlZ29yaWVzKTsKCQkkaW5jbHVkZV9saXN0ID0gam9pbigiJywnIixkb1NsYXNo KCRpbmNsdWRlX2xpc3QpKTsKCX0KCSRleGNsdWRlX2xpc3QgPSAnJzsKCWlmICgkZXhjbHVk ZSkgewoJCSRleGNsdWRlX2xpc3QgPSBkb19saXN0KCRleGNsdWRlKTsKCQkkZXhjbHVkZV9s aXN0ID0gam9pbigiJywnIixkb1NsYXNoKCRleGNsdWRlX2xpc3QpKTsKCX0KCgkvLyBkZWJ1 ZyBhY3Rpb24KCWlmICgkZGVidWcpIHsKCQllY2hvICJWRVJTSU9OUyI7CgkJZWNobyAnPHBy ZT4nOwoJCSR2ZXJzaW9uID0gc2FmZV9maWVsZCgidmVyc2lvbiIsICJ0eHBfcGx1Z2luIiwg Im5hbWU9J2FkaV9jYXRfbWVudSciKTsKCQkkc3RhdHVzID0gc2FmZV9maWVsZCgic3RhdHVz IiwgInR4cF9wbHVnaW4iLCAibmFtZT0nYWRpX2NhdF9tZW51JyIpOwoJCWVjaG8gX19GVU5D VElPTl9fLic6ICcuKGVtcHR5KCR2ZXJzaW9uKT8nbm90IGluc3RhbGxlZCc6JHZlcnNpb24u KCRzdGF0dXM/JyAoYWN0aXZlKSc6JyAobm90IGFjdGl2ZSknKSkuJzxici8+JzsKCQllY2hv ICdUWFA6ICcuJHByZWZzWyd2ZXJzaW9uJ10uKCR0eHA0MDcgPyAnICg0LjAuNyspJyA6ICcg KHByZS00LjAuNyknKS4nPGJyLz4nOwoJCWVjaG8gJ1BIUDogJy5waHB2ZXJzaW9uKCkuJzxi ci8+JzsKCQllY2hvICdNeVNRTDogJy5teXNxbF9nZXRfc2VydmVyX2luZm8oKTsKCQllY2hv ICc8L3ByZT4nOwoJCWVjaG8gJ1NVUFBMSUVEIEFUVFJJQlVURVM6JzsKCQlkbXAoJGF0dHMp OwoJCWVjaG8gIkNVUlJFTlQgQ0FURUdPUlkgPSAkYzxici8+IjsKCQllY2hvICJDVVJSRU5U IFNFQ1RJT04gPSAkczxici8+IjsKCQllY2hvICJJTklUSUFMIElOQ0xVREUgTElTVCA9ICRp bmNsdWRlX2xpc3Q8YnIvPiI7CgkJZWNobyAiSU5JVElBTCBFWENMVURFIExJU1QgPSAkZXhj bHVkZV9saXN0PGJyLz4iOwoJfQoKCS8vIGhlcmUgd2UgZ28KCWlmICgkc2VjdGlvbl9zZW5z aXRpdmUpIHsKCQlpZiAoJHRoaXNfc2VjdGlvbikgLy8gY3VycmVudCBzZWN0aW9uIHJlcXVp cmVkLCBvdmVycmlkZSAkc2VjdGlvbgoJCQkkc2VjdGlvbiA9ICRzOwoJCS8vIHNldCBzb21l IGNic19jYXRlZ29yeV9saXN0IGF0dHJpYnV0ZSB2YWx1ZXMKCQkkc2hvd2NvdW50ID0gRkFM U0U7CgkJJHN0aWNreSA9IEZBTFNFOwoJCSRwb3N0ZWQgPSAnJzsKCQkvLyBzb21lIGNsZXZl ciBzdHVmZiBmcm9tIGNic19jYXRlZ29yeV9saXN0CgkJaWYgKCRzZWN0aW9uID09ICdkZWZh dWx0JykgewoJCQkkdGFibGUgPSAnLCBgJy5QRlguJ3R4cF9zZWN0aW9uYCBBUyBzJzsKCQkJ JHNxbHNlY3Rpb24gPSAncy5uYW1lIEFORCBzLm9uX2Zyb250cGFnZSA9IDEnOwoJCX0KCQll bHNlIHsKCQkJJHRhYmxlID0gJyc7CgkJCSRzcWxzZWN0aW9uID0gIickc2VjdGlvbiciOwoJ CX0KCQkvLyBwcm9jZXNzIGNic19jYXRlZ29yeV9saXN0IGF0dHJpYnV0ZXMKCQkkcGFyZW50 ID0gKCRwYXJlbnQpID8gIiBBTkQgYy5wYXJlbnQgPSAnJHBhcmVudCciIDogJyc7CgkJJHNo b3djb3VudCA9ICgkc2hvd2NvdW50ID09ICd0cnVlJykgPyAnLCBDT1VOVCgqKSBBUyBjb3Vu dCcgOiAnJzsKCQkkc3RpY2t5ID0gKCRzdGlja3kgPT0gJ3RydWUnKSA/ICc1JyA6ICc0JzsK CQlzd2l0Y2goJHBvc3RlZCkgewoJCQljYXNlICdhbGwnOgoJCQkJJHBvc3RlZCA9ICcnOwoJ CQkJYnJlYWs7CgkJCWNhc2UgJ2Z1dHVyZSc6CgkJCQkkcG9zdGVkID0gJyBBTkQgdC5Qb3N0 ZWQgPj0gbm93KCknOwoJCQkJYnJlYWs7CgkJCWRlZmF1bHQ6CgkJCQkkcG9zdGVkID0gJyBB TkQgdC5Qb3N0ZWQgPCBub3coKSc7CgkJfQoJCS8vIEkgZGlkIHRoZXNlIGJpdHMhCgkJJHNv cnQgPwoJCQkkc29ydCA9ICcgT1JERVIgQlkgYy4nLiRzb3J0IDoKCQkJJHNvcnQgPSAnIE9S REVSIEJZIGMubmFtZSBhc2MnOwoJCWlmICgkaW5jbHVkZV9saXN0KQoJCQkkaW5jbHVkZV9s aXN0ID0gIiBBTkQgYy5uYW1lIElOICgnJGluY2x1ZGVfbGlzdCcpIjsKCQlpZiAoJGV4Y2x1 ZGVfbGlzdCkKCQkJJGV4Y2x1ZGVfbGlzdCA9ICIgQU5EIGMubmFtZSBOT1QgSU4gKCckZXhj bHVkZV9saXN0JykiOwoJCS8vIHNvbWUgbWFnaWMgU1FMIGZyb20gY2JzX2NhdGVnb3J5X2xp c3QgKHdpdGggc29tZSBpbmNsdWRlL2V4Y2x1ZGUgZXh0cmFzKQoJCSRycyA9IHN0YXJ0Um93 cygKCQkJJ1NFTEVDVCBjLm5hbWUsIGMudGl0bGUnLiRzaG93Y291bnQuJyBGUk9NIGAnLlBG WC4ndHhwX2NhdGVnb3J5YCBBUyBjLCBgJy5QRlguJ3RleHRwYXR0ZXJuYCBBUyB0Jy4kdGFi bGUKCQkJLicgV0hFUkUgKGMubmFtZSA9IHQuQ2F0ZWdvcnkxIE9SIGMubmFtZSA9IHQuQ2F0 ZWdvcnkyKScKCQkJLiRpbmNsdWRlX2xpc3QKCQkJLiRleGNsdWRlX2xpc3QKCQkJLicgQU5E IGMudHlwZSA9IFwnYXJ0aWNsZVwnIEFORCB0LlNlY3Rpb24gPSAnLiRzcWxzZWN0aW9uLiRw YXJlbnQuJHBvc3RlZAoJCQkuJyBBTkQgdC5TdGF0dXMgPSAnLiRzdGlja3kuJyBHUk9VUCBC WSBjLm5hbWUnLiRzb3J0CgkJCSwkZGVidWcpOwoJfQoJZWxzZSB7IC8vIG5vdCBzZWN0aW9u IHNlbnNpdGl2ZQoJCWlmICgkcGFyZW50KSAvLyBleGNsdWRlIHBhcmVudCBmcm9tIGxpc3QK CQkJaWYgKCRleGNsdWRlX2xpc3QpIC8vIGNvbWJpbmUgcGFyZW50ICYgZXhjbHVkZSBsaXN0 CgkJCQkkZXhjbHVkZV9saXN0ID0gJGV4Y2x1ZGVfbGlzdC4nLCcuJHBhcmVudDsKCQkJZWxz ZSAvLyBqdXN0IGV4Y2x1ZGUgcGFyZW50CgkJCQkkZXhjbHVkZV9saXN0ID0gJHBhcmVudDsK CQlpZiAoJGRlYnVnKSBlY2hvICJORVcgRVhDTFVERSBMSVNUID0gJGV4Y2x1ZGVfbGlzdCI7 CgkJLy8gYmFzZWQgb24gY29kZSBmcm9tIFRYUCA0LjAuNiBjYXRlZ29yeV9saXN0IHRhZwoJ CWlmICgkZXhjbHVkZV9saXN0KSB7CgkJCSRleGNsdWRlX2xpc3QgPSAiQU5EIG5hbWUgTk9U IElOICgnJGV4Y2x1ZGVfbGlzdCcpIjsKCQl9CgkJaWYgKCRwYXJlbnQpIHsKCQkJJHFzID0g c2FmZV9yb3coJ2xmdCwgcmd0JywgJ3R4cF9jYXRlZ29yeScsICJuYW1lID0gJyIuZG9TbGFz aCgkcGFyZW50KS4iJyIsJGRlYnVnKTsKCQkJaWYgKCRxcykgewoJCQkJZXh0cmFjdCgkcXMp OwoJCQkJJHJzID0gc2FmZV9yb3dzX3N0YXJ0KCduYW1lLCB0aXRsZScsICd0eHBfY2F0ZWdv cnknLAoJCQkJCSIobGZ0IGJldHdlZW4gJGxmdCBhbmQgJHJndCkgYW5kIHR5cGUgPSAnIi5k b1NsYXNoKCR0eXBlKS4iJyBhbmQgbmFtZSAhPSAnZGVmYXVsdCcgJGV4Y2x1ZGVfbGlzdCBv cmRlciBieSAiLigkc29ydCA/ICRzb3J0IDogJ2xmdCBBU0MnKSwkZGVidWcpOwoJCQl9CgkJ fQoJCWVsc2UgaWYgKCRpbmNsdWRlX2xpc3QpIHsgLy8gZXhwbGljaXQgbGlzdCBvZiBjYXRl Z29yaWVzIHN1cHBsaWVkCgkJCSRycyA9IHNhZmVfcm93c19zdGFydCgnbmFtZSwgdGl0bGUn LCAndHhwX2NhdGVnb3J5JywKCQkJCSJ0eXBlID0gJyIuZG9TbGFzaCgkdHlwZSkuIicgYW5k IG5hbWUgaW4gKCckaW5jbHVkZV9saXN0Jykgb3JkZXIgYnkgIi4oJHNvcnQgPyAkc29ydCA6 ICJmaWVsZChuYW1lLCAnJGluY2x1ZGVfbGlzdCcpIiksJGRlYnVnKTsKCQl9CgkJZWxzZSB7 IC8vIGVtcHR5IHBhcmVudCBhdHRyaWJ1dGUgKD0gYWxsIGNhdGVnb3JpZXMpCgkJCSRycyA9 IHNhZmVfcm93c19zdGFydCgnbmFtZSwgdGl0bGUnLCAndHhwX2NhdGVnb3J5JywKCQkJCSJ0 eXBlID0gJyR0eXBlJyBhbmQgbmFtZSBub3QgaW4oJ2RlZmF1bHQnLCdyb290JykgJGV4Y2x1 ZGVfbGlzdCBvcmRlciBieSAiLigkc29ydCA/ICRzb3J0IDogJ25hbWUgQVNDJyksJGRlYnVn KTsKCQl9Cgl9CgoJLy8gaWYgcGFyZW50IGNhdGVnb3J5IG5vdCBmb3VuZCB0aGVuIHdlIGZh aWwgaW4gc2FtZSB3YXkgYXMgVFhQIGNhdGVnb3J5X2xpc3Qgd2l0aCAiVW5kZWZpbmVkIHZh cmlhYmxlOiBycyIKCWlmICgkcnMpIHsKCQkkb3V0ID0gYXJyYXkoKTsKCQllbXB0eSgkY2xh c3MpID8gLy8gc2V0IHVwIDx1bD4gY2xhc3MKCQkJJHVsX2NsYXNzID0gJycgOgoJCQkkdWxf Y2xhc3MgPSAnIGNsYXNzPSInLiRjbGFzcy4nIic7CgkJZW1wdHkoJG1lbnVfaWQpID8gLy8g c2V0IHVwIDx1bD4gSUQKCQkJJHVsX2lkID0gJycgOgoJCQkkdWxfaWQgPSAnIGlkPSInLiRt ZW51X2lkLiciJzsKCQkvLyRvdXRbXSA9ICc8Jy4kd3JhcHRhZy4kdWxfY2xhc3MuJHVsX2lk Lic+Jzs/Pz8/Pz8/Pz8/PwoJCXdoaWxlICgkYSA9IG5leHRSb3coJHJzKSkgewoJCQlleHRy YWN0KCRhKTsgLy8gZXh0cmFjdHMgJG5hbWUgJiAkdGl0bGUKCQkJaWYgKCRkZWJ1ZykgZG1w KCRhKTsKCQkJaWYgKCRuYW1lKSB7IC8vIGkuZS4gY2F0ZWdvcnkgbmFtZQoJCQkJLy8gc2V0 IHNlY3Rpb24gZm9yIGNhdGVnb3J5IGxpbmsgKGlmIHRoaXNfc2VjdGlvbiBzZXQgdGhlbiBj dXJyZW50IHNlY3Rpb24sIGVsc2UgdXNlIHN1cHBsaWVkIHNlY3Rpb24pCgkJCQkkc2VjdGlv biA9ICgkdGhpc19zZWN0aW9uKSA/ICggJHMgPT0gJ2RlZmF1bHQnID8gJycgOiAkcyApIDog JHNlY3Rpb247IC8vIG5vdGU6IGRlZmF1bHQgPSAnJwoJCQkJJHRpdGxlID0gaHRtbHNwZWNp YWxjaGFycygkdGl0bGUpOwoJCQkJLy8gbm90ZSB1c2Ugb2Ygc3RyY2FzZWNtcCAtIGNhdGVn b3J5IG5hbWVzIGNhbiBiZSBpbiBkaWZmZXJlbnQgY2FzZSBpZiBwZXJtYW5lbnQgbGluayBt b2RlIGluIFRYUCA0LjAuNSBpcyBub3QgbWVzc3khCgkJCQkkbGlfY2xhc3MgPSAoJGFjdGl2 ZV9jbGFzcyBhbmQgKHN0cmNhc2VjbXAoJGMsICRuYW1lKSA9PSAwKSkgPyAnIGNsYXNzPSIn LiRhY3RpdmVfY2xhc3MuJyInIDogJyc7CgkJCQkkb3V0W10gPSAnPCcuJGJyZWFrLiRsaV9j bGFzcy4nPic7CgkJCQkkbWVzc3lfdXJsID8KCQkJCQkkY2F0X3VybCA9IGh1Lic/Yz0nLiRu YW1lIDogLy8gbWVzc3kgVVJMCgkJCQkJJGNhdF91cmwgPSBwYWdlbGlua3VybChhcnJheSgn cycgPT4gJHNlY3Rpb24sICdjJyA9PiAkbmFtZSkpOyAvLyByZW5kZXIgbGluayBhY2NvcmRp bmcgdG8gUGVybWFuZW50IExpbmsgTW9kZQoJCQkJJGxpbmsgPwoJCQkJCSRvdXRbXSA9ICc8 YSBocmVmPSInLiRjYXRfdXJsLiciPicuJHRpdGxlLic8L2E+JyA6CgkJCQkJJG91dFtdID0g JHRpdGxlOwoJCQkJJGxpc3RfYXJ0aWNsZXMgPSBUUlVFOwoJCQkJaWYgKCRhY3RpdmVfb25s eSkgeyAvLyBkZXRlcm1pbmUgd2hldGhlciB0byBsaXN0IGFydGljbGVzIG9yIG5vdAoJCQkJ CS8vIGNoZWNrIGN1cnJlbnQgY2F0ZWdvcnkgKGNhdGVnb3J5IGxpc3RpbmcpCgkJCQkJJGxp c3RfYXJ0aWNsZXMgPSAoc3RyY2FzZWNtcCgkYywgJG5hbWUpID09IDApOwoJCQkJCWlmICgh ZW1wdHkoJHRoaXNhcnRpY2xlKSkgeyAvLyBpbmRpdmlkdWFsIGFydGljbGUgYmVpbmcgZGlz cGxheWVkCgkJCQkJCS8vIGNoZWNrIGN1cnJlbnQgYXJ0aWNsZSdzIGNhdGVnb3J5IChzaW5n bGUgYXJ0aWNsZSkgKGZyb20gVFhQIGlmX2FydGljbGVfY2F0ZWdvcnkgdGFnKQoJCQkJCQkk Y2F0cyA9IGFycmF5KCk7CgkJCQkJCWlmICghZW1wdHkoJHRoaXNhcnRpY2xlWydjYXRlZ29y eTEnXSkpICRjYXRzW10gPSAkdGhpc2FydGljbGVbJ2NhdGVnb3J5MSddOwoJCQkJCQlpZiAo IWVtcHR5KCR0aGlzYXJ0aWNsZVsnY2F0ZWdvcnkyJ10pKSAkY2F0c1tdID0gJHRoaXNhcnRp Y2xlWydjYXRlZ29yeTInXTsKCQkJCQkJJGNhdHMgPSBhcnJheV91bmlxdWUoJGNhdHMpOwoJ CQkJCQlpZiAoJGRlYnVnKSB7CgkJCQkJCQllY2hvICdBUlRJQ0xFIENBVEVHT1JJRVM6JzsK CQkJCQkJCWRtcCgkY2F0cyk7CgkJCQkJCX0KCQkJCQkJaWYgKCEoYXJyYXlfc2VhcmNoKCRu YW1lLCRjYXRzKSA9PT0gRkFMU0UpKQoJCQkJCQkJJGxpc3RfYXJ0aWNsZXMgPSAkbGlzdF9h cnRpY2xlcyB8fCBUUlVFOwoJCQkJCX0KCQkJCX0KCQkJCWlmICgkbGlzdF9hcnRpY2xlcykK CQkJCQkkb3V0W10gPSBhZGlfY2F0X21lbnVfYXJ0aWNsZXMoJG5hbWUsJ3VsJywkYXJ0aWNs ZV9hdHRyKTsKCQkJCSRvdXRbXSA9ICc8LycuJGJyZWFrLic+JzsKCQkJfQoJCX0KCQkvLyRv dXRbXSA9ICc8LycuJHdyYXB0YWcuJz4nOz8/Pz8/Pz8KCQkvL3JldHVybiBqb2luKCRvdXQp Oz8/Pz8/Pz8/PwoJCWlmICgkb3V0KSAvLyBpdCdzIGEgd3JhcAoJCQlyZXR1cm4gJzwnLiR3 cmFwdGFnLiR1bF9jbGFzcy4kdWxfaWQuJz4nLmpvaW4oJG91dCkuJzwvJy4kd3JhcHRhZy4n Pic7CgkJZWxzZQoJCQlyZXR1cm4gJyc7Cgl9CglyZXR1cm4gJyc7Cn0KIjtzOjg6ImhlbHBf cmF3IjtzOjc3Mzc6ImgxLiAqYWRpX2NhdF9tZW51KiAtIENhdGVnb3J5ICYgYXJ0aWNsZSBt ZW51CgpUaGlzIHdpbGwgcHJvZHVjZSBhIG1lbnUgb2YgY2F0ZWdvcmllcyBhbmQgdGhlaXIg YXJ0aWNsZXMuCgpUaGUgY2F0ZWdvcnkgbGlzdCBjYW4gYmUgZGVmaW5lZCBhY2NvcmRpbmcg dG8gYSBwYXJlbnQgY2F0ZWdvcnksIGEgdXNlciBzdXBwbGllZCBsaXN0IG9yIGEgc2VjdGlv bi4KCmgyLiAqSW5zdGFsbGF0aW9uKgoKMS4gRG93bmxvYWQgYW5kIGluc3RhbGwgdGhlIHBs dWdpbiBpbiB0aGUgdXN1YWwgd2F5LgoKMi4gVG8gdXNlIHdpdGggc3RhbmRhcmQgVFhQIGNh dGVnb3JpZXMsIGNyZWF0ZSBhIG5ldyBmb3JtIG9mIHR5cGUgImFydGljbGUiLCBjYWxsZWQg X19hZGlfY2F0X21lbnVfYXJ0aWNsZXNfXywgYW5kIGZpbGwgaXQgd2l0aDoKCmJjLiA8bGk8 dHhwOmFkaV9jYXRfbWVudV9pZj4gY2xhc3M9ImFjdGl2ZV9jbGFzcyI8L3R4cDphZGlfY2F0 X21lbnVfaWY+Pgo8dHhwOnBlcm1saW5rPjx0eHA6dGl0bGUvPjwvdHhwOnBlcm1saW5rPgo8 L2xpPgoKMy4gVG8gdXNlIHdpdGggQHJzc191bmxpbWl0ZWRfY2F0ZWdvcmllc0AsIGNyZWF0 ZSBhIG5ldyBmb3JtIG9mIHR5cGUgImFydGljbGUiLCBjYWxsZWQgX19hZGlfY2F0X21lbnVf cnNzX2FydGljbGVzX18sIGFuZCBmaWxsIGl0IHdpdGg6CgpiYy4gPGxpPgo8dHhwOnJzc19z Y3RfcGVybWxpbms+PHR4cDp0aXRsZS8+PC90eHA6cnNzX3NjdF9wZXJtbGluaz4KPC9saT4K Cl9JZiB5b3UgaGF2ZSBhIHJlcXVpcmVtZW50IHRvIGdlbmVyYXRlIGFydGljbGUgbGlzdHMg aW4gbW9yZSB0aGFuIG9uZSBmb3JtYXQgdGhlbiBtYWtlIHVzZSBvZiB0aGUgQGFydGljbGVf Zm9ybUAgYW5kIEByc3NfYXJ0aWNsZV9mb3JtQCBhdHRyaWJ1dGVzLl8KCmgyLiAqVXNhZ2Uq CgpQbGFjZSB0aGUgQDx0eHA6YWRpX2NhdF9tZW51IC8+QCB0YWcgd2hlcmV2ZXIgeW91IHdh bnQgdGhlIG1lbnUgdG8gYXBwZWFyLiAgQnkgZGVmYXVsdCwgKmFkaV9jYXRfbWVudSogd2ls bCBwcm9kdWNlIGEgbWVudSBjb250YWluaW5nIGFsbCBhcnRpY2xlIGNhdGVnb3JpZXMgdG9n ZXRoZXIgd2l0aCB0aGUgYXJ0aWNsZXMgdGhhdCBiZWxvbmcgdG8gdGhlbS4gQSBwYXJlbnQg Y2F0ZWdvcnkgY2FuIGJlIHNwZWNpZmllZCwgdXNpbmcgdGhlIEBwYXJlbnQ9ImNhdGVnb3J5 IG5hbWUiQCBhdHRyaWJ1dGUsIHRvIHJlc3RyaWN0IHRoZSBsaXN0LgoKV2l0aCBub3JtYWwg VFhQIGNhdGVnb3JpZXMsIHRoZSBzdGFuZGFyZCBAPHR4cDphcnRpY2xlX2N1c3RvbSAvPkAg dGFnIGlzIHVzZWQgdG8gcHJlc2VudCB0aGUgbGlzdHMgb2YgYXJ0aWNsZXMuIEA8dHhwOmFy dGljbGVfY3VzdG9tIC8+QCBhdHRyaWJ1dGVzIG1heSBiZSBzcGVjaWZpZWQgdXNpbmcgdGhl IEBhcnRpY2xlX2F0dHJAIGF0dHJpYnV0ZSBhbmQgYXJlIGRvY3VtZW50ZWQgaW4gdGhlICJU ZXh0Ym9vayI6aHR0cDovL3RleHRib29rLnRleHRwYXR0ZXJuLm5ldC93aWtpL2luZGV4LnBo cD90aXRsZT1UeHA6YXJ0aWNsZV9jdXN0b21fLy4KCldpdGggQDx0eHA6cnNzX3VubGltaXRl ZF9jYXRlZ29yaWVzIC8+QCwgdGhlIEA8dHhwOnJzc191bmxpbWl0ZWRfY2F0ZWdvcmllc19h cnRpY2xlX2xpc3QgLz5AIHRhZyBpcyB1c2VkIHRvIHByZXNlbnQgdGhlIGxpc3RzIG9mIGFy dGljbGVzLiBBdHRyaWJ1dGVzIGZvciB0aGlzIHRhZyBhcmUgc3BlY2lmaWVkIHVzaW5nIHRo ZSBAYXJ0aWNsZV9hdHRyQCBhdHRyaWJ1dGUgYW5kIGFyZSBkb2N1bWVudGVkIG9uICJ3aWxz aGlyZXxvbmUiOmh0dHA6Ly93d3cud2lsc2hpcmVvbmUuY29tL3RleHRwYXR0ZXJuLXBsdWdp bnMvcnNzLXVubGltaXRlZC1jYXRlZ29yaWVzI3Jzc191bmxpbWl0ZWRfY2F0ZWdvcmllc19h cnRpY2xlX2xpc3QuCgpJZiB5b3Ugd2FudCB0aGUgb3V0cHV0IHRvIGJlICJzZWN0aW9uIHNl bnNpdGl2ZSIsIHdoZXJlIG9ubHkgY2F0ZWdvcmllcyB0aGF0IGNvbnRhaW4gYXJ0aWNsZXMg aW4gYSBzcGVjaWZpZWQgc2VjdGlvbiBhcmUgZGlzcGxheWVkIC0gdGhlbiB1c2UgQHNlY3Rp b25fc2Vuc2l0aXZlPSIxIkAuCgpoMi4gKldlbGwgU29ydGVkKgoKQnkgZGVmYXVsdCwgKmFk aV9jYXRfbWVudSogd2lsbCBzb3J0IHRoZSBjYXRlZ29yeSBsaXN0IGFjY29yZGluZyB0byBA Im5hbWUgYXNjIkAgLSB0aGF0IGlzLCB0aGUgY2F0ZWdvcnkgbmFtZSAoYXMgb3Bwb3NlZCB0 byBpdHMgdGl0bGUpIGluIGFzY2VuZGluZyBhbHBoYWJldGljYWwgb3JkZXIuCgpUbyBzb3J0 IHRoZSBjYXRlZ29yeSBsaXN0IGluIG90aGVyIHdheXMgdXNlIHRoZSBhdHRyaWJ1dGUgQHNv cnQ9Ii4uLiJALCB3aGVyZSBAIi4uLiJAIGlzIGRlZmluZWQgaW4gdGhlICpBdHRyaWJ1dGVz KiBzZWN0aW9uIGJlbG93LgoKU29ydCBhcnRpY2xlcyB1c2luZyB0aGUgQGFydGljbGVfYXR0 cj0iLi4uIkAgYXR0cmlidXRlLiBUaGlzIHBhc3NlcyBhdHRyaWJ1dGVzIGRpcmVjdGx5IHRv IEA8dHhwOmFydGljbGVfY3VzdG9tIC8+QCBvciBAPHR4cDpyc3NfdW5saW1pdGVkX2NhdGVn b3JpZXNfYXJ0aWNsZV9saXN0IC8+QCB0YWdzIGRlcGVuZGluZyB3aGljaCBtb2RlIHlvdSdy ZSB1c2luZy4gQmUgYXdhcmUgdGhhdCwgaW4gZGVmYXVsdCBtb2RlLCB5b3Ugc2hvdWxkIHVz ZSBAc29ydD0idGl0bGUgYXNjIkAgYnV0IGluIHJzc191bmxpbWl0ZWRfY2F0ZWdvcmllcyBt b2RlIChAcnNzX3VubGltaXRlZD0iMSJAKSB1c2UgQHNvcnRieT0idGl0bGUiIHNvcnRkaXI9 ImFzYyJALgoKaDIuICpBdHRyaWJ1dGVzKgoKQHBhcmVudD0iY2F0ZWdvcnkgbmFtZSJACgot IHRoZSBwYXJlbnQgY2F0ZWdvcnkuIERlZmF1bHQgPSAiIiAoYWxsIGNhdGVnb3JpZXMsIHBh cmVudHMgJiBjaGlsZHJlbikuCgpAY2F0ZWdvcmllcz0iY2F0ZWdvcnkgbmFtZShzKSJACgot IGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGNhdGVnb3J5IG5hbWVzIHRvIGluY2x1ZGUgaW4g dGhlIGxpc3QuIERlZmF1bHQgPSAiIiAoaW5jbHVkZSBhbGwpLgoKQGV4Y2x1ZGU9ImNhdGVn b3J5IG5hbWUocykiQAoKLSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBjYXRlZ29yeSBuYW1l cyB3aGljaCB3aWxsIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIGxpc3QuIERlZmF1bHQgPSAiIiAo ZXhjbHVkZSBub25lKS4KCkBzb3J0PSJzb3J0IHZhbHVlcyJACgotIGhvdyB0byBzb3J0IHRo ZSBjYXRlZ29yeSBsaXN0LiBEZWZhdWx0IGlzICJuYW1lIGFzYyIgKGFscGhhYmV0aWNhbCBv cmRlcikuIE90aGVyIG9wdGlvbnM6ICJpZCIsICJuYW1lIiwgInR5cGUiLCAicGFyZW50Iiwg InRpdGxlIi4KCkBjbGFzcz0iY2xhc3MgbmFtZSJACgotIGNsYXNzIGFwcGxpZWQgdG8gdGhl IHRvcCBsZXZlbCBAPHVsPkAuIERlZmF1bHQgPSAiY2F0X21lbnUiLgoKQG1lbnVfaWQ9Imlk IG5hbWUiQAoKLSB0aGUgSUQgdG8gYmUgdXNlZCBvbiB0aGUgdG9wIGxldmVsIEA8dWw+QC4g IERlZmF1bHQgPSAiIiAobm9uZSkuCgpAYWN0aXZlX2NsYXNzPSJjbGFzcyBuYW1lIkAKCi0g Y2xhc3MgYXBwbGllZCB0byBhY3RpdmUgY2F0ZWdvcnkgQDxsaT5ALiBEZWZhdWx0ID0gImFj dGl2ZV9jbGFzcyIuCgpfX05vdGVzOl9fCl9fMS4gVGhlIGNsYXNzIGFwcGxpZWQgdG8gYWN0 aXZlIGFydGljbGUgQDxsaT5AIGluIHRoZSByZW5kZXJlZCBtZW51IGRlZmF1bHRzIHRvICJh Y3RpdmVfY2xhc3MiIGFsc28gYnV0IGNhbiBvbmx5IGJlIGNoYW5nZWQgYnkgZWRpdGluZyB0 aGUgKmFkaV9tZW51X2NhdF9hcnRpY2xlcyogZm9ybS5fXwpfXzIuIEBhZGlfY2F0X21lbnVA IHVzZXMgQHJzc191bmxpbWl0ZWRfY2F0ZWdvcmllc19hcnRpY2xlX2xpc3RAIHRvIG91dHB1 dCB0aGUgbGlzdHMgb2YgYXJ0aWNsZXMuIEN1cnJlbnRseSB0aGVzZSBkbyBub3QgY29udGFp biB0aGUgYWN0aXZlIGFydGljbGUgc28gImFjdGl2ZV9jbGFzcyIgZG9lcyBub3QgYXBwbHkg aW4gdGhpcyBjYXNlLl9fCgpAc2VjdGlvbj0ic2VjdGlvbiBuYW1lIkAKCi0gZ2VuZXJhdGUg Y2F0ZWdvcnkgbGlua3MgdG8gc3BlY2lmaWVkIHNlY3Rpb24uIERlZmF1bHQgPSAiIiAobm8g c2VjdGlvbiByZXN0cmljdGlvbikuIExpc3Qgb2YgYXJ0aWNsZXMgaXMgYWxzbyByZXN0cmlj dGVkIHRvIHRob3NlIGJlbG9uZ2luZyB0byB0aGUgc3BlY2lmaWVkIHNlY3Rpb24uCgpAdGhp c19zZWN0aW9uPSJib29sZWFuIkAKCi0gZ2VuZXJhdGUgY2F0ZWdvcnkgbGlua3MgdG8gY3Vy cmVudGx5IGFjdGl2ZSBzZWN0aW9uLiBEZWZhdWx0ID0gIm5vIi4gTGlzdCBvZiBhcnRpY2xl cyBpcyBhbHNvIHJlc3RyaWN0ZWQgdG8gdGhvc2UgYmVsb25naW5nIHRvIHRoZSBjdXJyZW50 IHNlY3Rpb24uIF9Ob3RlIHRoYXQgdGhpcyBvdmVycmlkZXMgdGhlIEBzZWN0aW9uQCBhdHRy aWJ1dGUuXwoKQHNlY3Rpb25fc2Vuc2l0aXZlPSJib29sZWFuIkAKCi0gZ2VuZXJhdGUgY2F0 ZWdvcnkgbGlua3Mgd2hpY2ggaGF2ZSBhcnRpY2xlcyBpbiB0aGUgY3VycmVudGx5IGFjdGl2 ZSBzZWN0aW9uLiBEZWZhdWx0ID0gIm5vIi4KCkBhY3RpdmVfb25seT0iYm9vbGVhbiJACgot IHNwZWNpZmllcyB3aGV0aGVyIHRvIG9ubHkgc2hvdyBhcnRpY2xlcyBpbiBjdXJyZW50bHkg YWN0aXZlIGNhdGVnb3J5LiBEZWZhdWx0ID0gIjAiIChzaG93IGFydGljbGVzIGluIGFsbCBj YXRlZ29yaWVzKS4KCkBtZXNzeV91cmw9ImJvb2xlYW4iQAoKLSBmb3JjZSBsaW5rcyB0byBi ZSBvdXRwdXQgaW4gbWVzc3kgVVJMIGZvcm1hdC4gRGVmYXVsdCA9ICIwIiAob3V0cHV0IGxp bmtzIGFjY29yZGluZyB0byBQZXJtYW5lbnQgTGluayBNb2RlIHNldHRpbmcgaW4gVFhQIFBy ZWZlcmVuY2VzKS4KCkBsaW5rPSJib29sZWFuIkAKCi0gc3BlY2lmaWVzIHdoZXRoZXIgdG8g b3V0cHV0IGNhdGVnb3JpZXMgYXMgbGlua3MuIERlZmF1bHQgPSAiMSIgKG91dHB1dCBsaW5r cykuIElmIHNldCB0byAiMCIgdGhlbiBvbmx5IHRoZSBjYXRlZ29yaWVzIHRpdGxlcyB3aWxs IGJlIG91dHB1dC4KCkBhcnRpY2xlX2F0dHI9J2FydGljbGVfY3VzdG9tIGF0dHJpYnV0ZXMn QAoKLSBhIGxpc3Qgb2YgYXR0cmlidXRlcyB0byBiZSBwYXNzZWQgdGhyb3VnaCB0byBAPHR4 cDphcnRpY2xlX2N1c3RvbSAvPkAgb3IgQDx0eHA6cnNzX3VubGltaXRlZF9jYXRlZ29yaWVz X2FydGljbGVfbGlzdCAvPkAgdG8gY29udHJvbCB0aGUgYXBwZWFyYW5jZSBvZiBhcnRpY2xl cyAoZGVwZW5kcyBvbiBAcnNzX3VubGltaXRlZEAgc2V0dGluZyBiZWxvdykuIEF0dHJpYnV0 ZXMvdmFsdWVzIHNob3VsZCBiZSBzZXBhcmF0ZWQgYnkgc3BhY2VzLiBEZWZhdWx0ID0gJycg KGkuZS4gQDx0eHA6YXJ0aWNsZV9jdXN0b20gLz5AIG9yIEA8dHhwOnJzc191bmxpbWl0ZWRf Y2F0ZWdvcmllc19hcnRpY2xlX2xpc3QgLz5AIGRlZmF1bHRzKS4gKk5vdGUgdGhlIHVzZSBv ZiBzaW5nbGUgcXVvdGVzKi4gRm9yIGV4YW1wbGU6IEBhcnRpY2xlX2F0dHI9J3NvcnQ9IlRp dGxlIiBsaW1pdD0iMjAiJ0Agb3IgQHJzc191bmxpbWl0ZWQ9IjEiIGFydGljbGVfYXR0cj0n c29ydGJ5PSJUaXRsZSIgbGltaXQ9IjIwIidACgpAYXJ0aWNsZV9mb3JtPSJmb3JtIG5hbWUi QAoKLSB0aGUgZm9ybSB0byB1c2Ugd2hlbiBsaXN0aW5nIGFydGljbGVzLiBEZWZhdWx0ID0g ImFkaV9jYXRfbWVudV9hcnRpY2xlcyIuCgpAcnNzX3VubGltaXRlZD0iYm9vbGVhbiJACgot IGVuYWJsZXMgY29tcGF0aWJpbGl0eSB3aXRoIEByc3NfdW5saW1pdGVkX2NhdGVnb3JpZXNA LiBEZWZhdWx0ID0gIjAiIChzdGFuZGFyZCBUWFAgY2F0ZWdvcmllcyBvbmx5KS4KCkByc3Nf YXJ0aWNsZV9mb3JtID0iZm9ybSBuYW1lIkAKCi0gdGhlIGZvcm0gdG8gdXNlIHdoZW4gbGlz dGluZyBhcnRpY2xlcyBpbiByc3NfdW5saW1pdGVkX2NhdGVnb3JpZXMgY29tcGF0aWJpbGl0 eSBtb2RlLiBEZWZhdWx0ID0gImFkaV9jYXRfbWVudV9yc3NfYXJ0aWNsZXMiLgoKaDIuICpF eGFtcGxlcyoKCkA8dHhwOmFkaV9jYXRfbWVudSBwYXJlbnQ9ImRhZGR5IiBhcnRpY2xlX2F0 dHI9J3NvcnQ9InRpdGxlIiBsaW1pdD0iMTIiJyAvPkAKCkluIHRoZSBhYm92ZSBleGFtcGxl OgoKKiBvbmx5IGNoaWxkIGNhdGVnb3JpZXMgYmVsb25naW5nIHRvIHBhcmVudCBjYXRlZ29y eSAiZGFkZHkiIHdpbGwgYmUgbGlzdGVkCiogdGhlIGNsYXNzIG9uIHRoZSB0b3AgbGV2ZWwg QDx1bD5AIHdpbGwgYmUgImNhdF9tZW51IgoqIHRoZSBjbGFzcyBvbiB0aGUgYWN0aXZlIEA8 bGk+QCAoY2F0ZWdvcnkgb3IgYXJ0aWNsZSkgd2lsbCBiZSAiYWN0aXZlX2NsYXNzIgoqIHRo ZSBhcnRpY2xlcyB3aWxsIGJlIHNvcnRlZCBhY2NvcmRpbmcgdG8gdGhlaXIgdGl0bGVzCiog dGhlIG51bWJlciBvZiBhcnRpY2xlcyBwZXIgY2F0ZWdvcnkgd2lsbCBiZSBsaW1pdGVkIHRv IDEyCgpAPHR4cDphZGlfY2F0X21lbnUgYXJ0aWNsZV9hdHRyPSdzb3J0PSJ0aXRsZSBhc2Mi JyB0aGlzX3NlY3Rpb249IjEiIHNlY3Rpb25fc2Vuc2l0aXZlPSIxIiAvPkAKClRoZSBhYm92 ZSB3aWxsOgoKKiBjcmVhdGUgYSBtZW51IG9mIGNhdGVnb3JpZXMgdGhhdCBjb250YWluIGFy dGljbGVzIGJlbG9uZ2luZyB0byB0aGUgY3VycmVudCBzZWN0aW9uCiogbGlzdCB0aGUgY2F0 ZWdvcmllcyBpbiBhbHBoYWJldGljYWwgb3JkZXIgYWNjb3JkaW5nIHRvIHRoZWlyIHRpdGxl cwoKCmgyLiAqU3R5bGluZyoKClNvbWUgQ1NTIHNlcnZpbmcgc3VnZ2VzdGlvbnM6CgpiYy4g LyogdG8gc2V0IGRlZmF1bHQgbGluayBjb2xvdXIgKi8KdWwuY2F0X21lbnUgYSB7IGNvbG9y OiBibGFjayB9CgpiYy4gLyogdG8gc2V0IGFjdGl2ZSBsaW5rIGNvbG91ciAqLwp1bC5jYXRf bWVudSAuYWN0aXZlX2NsYXNzIGEgeyBjb2xvcjogcmVkIH0KdWwuY2F0X21lbnUgLmFjdGl2 ZV9jbGFzcyB1bCBhIHsgY29sb3I6IGJsYWNrIH0KCmgyLiAqQ3JlZGl0cyoKClRoYW5rcyB0 byBLZXZpbiBQb3R0cyBmb3Igc3BvbnNvcmluZyB0aGlzIHBsdWdpbi4gSSdtIG5vdyB0aGUg cHJvdWQgb3duZXIgb2YgYSBzaWduZWQgY29weSBvZiBoaXMgYm9vazogIldlYiBEZXNpZ24g YW5kIE1hcmtldGluZyBTb2x1dGlvbnMiOmh0dHA6Ly93d3cuZ3JhcGhpY3B1c2guY29tL2Jv b2tzL3dlYi1kZXNpZ24tYW5kLW1hcmtldGluZy1zb2x1dGlvbnMtZm9yLWJ1c2luZXNzLXdl YnNpdGVzLgoKVGhhbmtzIGFuZCByZXNwZWN0IGFuZCBhcG9sb2dpZXMgdG8gIkNocmlzdG9w aGUgQmV5bHMiOmh0dHA6Ly93d3cuZGlnaXRhbGlhLmJlLyBmb3IgdGhlIGNvZGUgdGhhdCBJ J3ZlIHN0b2xlbiBmcm9tICJjYnNfY2F0ZWdvcnlfbGlzdCI6aHR0cDovL2ZvcnVtLnRleHRw YXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP2lkPTExODQzIHRvIGltcGxlbWVudCB0aGUgc2Vj dGlvbiBzZW5zaXRpdml0eSBndWJiaW5zLgoKaDIoYWRpX2V4dHJhcykuICpBZGRpdGlvbmFs IGluZm9ybWF0aW9uKgoKcChhZGlfZXh0cmFzKS4gU3VwcG9ydCBhbmQgZnVydGhlciBpbmZv cm1hdGlvbiBjYW4gYmUgb2J0YWluZWQgZnJvbSB0aGUgIlRleHRwYXR0ZXJuIHN1cHBvcnQg Zm9ydW0iOmh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD0y ODUzMS4gQSBjb3B5IG9mIHRoaXMgaGVscCBpcyBhbHNvIGF2YWlsYWJsZSAib25saW5lIjpo dHRwOi8vd3d3LmdyZWF0b2NlYW5tZWRpYS5jb20uYXUvdHhwLz9wbHVnaW49YWRpX2NhdF9t ZW51LiAgTW9yZSBhZGlfcGx1Z2lucyBjYW4gYmUgZm91bmQgImhlcmUiOmh0dHA6Ly93d3cu Z3JlYXRvY2Vhbm1lZGlhLmNvbS5hdS90eHAvLiI7czozOiJtZDUiO3M6MzI6IjliZWM4Nzlh NzJlZjIxMDAwOTA2ZTAyNzc3YTA3Yjk4Ijt9