# Name: ied_plugin_composer v0.8 # Type: Admin side plugin # Write and publish plugins easily # Author: Yura Linnyk / Stef Dawson / Steve Dickinson # URL: http://stefdawson.com/ # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMzp7czo0OiJuYW1lIjtzOjE5OiJpZWRfcGx1Z2luX2NvbXBvc2VyIjtzOjc6InZlcnNp b24iO3M6MzoiMC44IjtzOjg6InJldmlzaW9uIjtzOjA6IiI7czo2OiJhdXRob3IiO3M6NDM6 Ill1cmEgTGlubnlrIC8gU3RlZiBEYXdzb24gLyBTdGV2ZSBEaWNraW5zb24iO3M6MTA6ImF1 dGhvcl91cmkiO3M6MjI6Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS8iO3M6MTE6ImRlc2NyaXB0 aW9uIjtzOjMyOiJXcml0ZSBhbmQgcHVibGlzaCBwbHVnaW5zIGVhc2lseSI7czo1OiJvcmRl ciI7czoxOiI1IjtzOjQ6InR5cGUiO3M6MToiMyI7czoxMDoibG9hZF9vcmRlciI7czoxOiI1 IjtzOjQ6ImhlbHAiO3M6MjQ3MzA6Igk8cD48ZGl2IGlkPSJpZWRfaGVscCI+PC9wPgoKCTxo MSBpZD0idG9wIj5JbnNwaXJlZCBwbHVnaW4gY29tcG9zZXI8L2gxPgoKCTxwPlRoaXMgcGx1 Z2luIGNyZWF0ZXMgYSBuZXcgcGFnZSB1bmRlciB0aGUgJiM4MjE2O0V4dGVuc2lvbnMmIzgy MTc7IHRhYiB3aGVyZSB5b3UgY2FuIGVkaXQgcGx1Z2lucyB0aGF0IGFyZSBhbHJlYWR5IGlu c3RhbGxlZCBpbiBUZXh0cGF0dGVybiBhbmQgcmVnaXN0ZXIgbmV3IHBsdWdpbnMuPC9wPgoK CTxoMiBpZD0iZmVhdHVyZXMiPkZlYXR1cmVzPC9oMj4KCgk8dWw+CgkJPGxpPkNyZWF0ZSwg ZWRpdCBvciB1cGxvYWQgcGx1Z2luIGNvZGUgYW5kIGRvY3VtZW50YXRpb24sIHRoZW4gcHVi bGlzaCB5b3VyIHdhcmVzIGluIHRoZSBzdGFuZGFyZCA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQ PC9zcGFuPiBwbHVnaW4gZm9ybWF0IChzZWUgYW4gPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdz b24uY29tL2Rvd25sb2Fkcy9leGFtcGxlX3BsdWdpbl90ZW1wbGF0ZS50eHQiPmV4YW1wbGU8 L2E+KTwvbGk+CgkJPGxpPkZ1bGwgc3VwcG9ydCBmb3IgdGhlIG9mZmljaWFsIDxhIGhyZWY9 Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9kb3dubG9hZHMvZW1wdHlfcGx1Z2luX3RlbXBsYXRl LnR4dCI+emVtX3RwbC5waHAgcGx1Z2luIHRlbXBsYXRlPC9hPi4gVGhlIDxhIGhyZWY9Imh0 dHA6Ly9zdGVmZGF3c29uLmNvbS9kb3dubG9hZHMvZW1wdHlfcGx1Z2luX3RlbXBsYXRlX2Nv ZGVfZmlyc3QudHh0Ij5tb2RpZmllZCB2ZXJzaW9uPC9hPiBieSA8YSBocmVmPSJodHRwOi8v dHhwLXBsdWdpbnMubmV0Y2FydmluZy5jb20vcGx1Z2lucy9tb2RpZmllZC1wbHVnaW4tY29t cGlsZXIiPm5ldC1jYXJ2ZXI8L2E+IGFsc28gaW5jb3Jwb3JhdGVzIGEgJiM4MjE2O3N0eWxl JiM4MjE3OyBzZWN0aW9uIGZvciBlYXN5IHN0eWxpbmcgb2YgeW91ciBoZWxwIHRleHQuIFRo ZSBQbHVnaW4gQ29tcG9zZXIgbG9va3MgZm9yIDxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3Nw YW4+IHNlY3Rpb25zIGluIHRoZSB0ZW1wbGF0ZSBhbmQgd2lsbCB1c2UgdGhlbSBhY2NvcmRp bmdseS4gSXQgd2lsbCBhbHNvIHJlYWQgPHNwYW4gY2xhc3M9ImNhcHMiPlNWTjwvc3Bhbj4g JExhc3RDaGFuZ2VkUmV2aXNpb24gZW50cmllcyAodGhhbmtzIG5ldC1jYXJ2ZXIpPC9saT4K CQk8bGk+RXhwb3J0IHBsdWdpbnMgaW4gYSB2YXJpZXR5IG9mIGZvcm1hdHMsIGFsbG93aW5n IHlvdSB0byBzd2l0Y2ggYmV0d2VlbiBlZGl0aW5nIGluIHRoZSBwbHVnaW4gY29tcG9zZXIg b3IgeW91ciBmYXZvdXJpdGUgZWRpdGluZyBwcm9ncmFtLCB0ZXN0IHRoZSBmaWxlIGluIHRo ZSBwbHVnaW5fY2FjaGVfZGlyLCB0aGVuIGltcG9ydCBpdCBiYWNrIGludG8gPHNwYW4gY2xh c3M9ImNhcHMiPlRYUDwvc3Bhbj4gd2l0aCB0aGUgaGVscCBvZiB0aGUgQ29tcG9zZXIgYW5k IHB1Ymxpc2ggeW91ciBwbHVnaW4gZm9yIGV2ZXJ5b25lLiBMb29rIGF0IHRoZSBib3R0b20g b2YgdGhlIFBsdWdpbiBDb21wb3NlciYjODIxNztzIDxhIGhyZWY9IiNlZGl0cGFnZSI+RWRp dCBwYWdlPC9hPiBmb3IgdGhlIG9wdGlvbnM7IGp1c3QgcmVtZW1iZXIgdG8gc2F2ZSB5b3Vy IGNoYW5nZXMgYmVmb3JlIGV4cG9ydGluZyBvciBjb3B5aW5nL3Bhc3RpbmcgdGhlIGNvZGUh IFlvdSBjYW4gZXhwb3J0IGFzOgoJPHVsPgoJCTxsaT5hIHN0YW5kYXJkIEJBU0U2NC1lbmNv ZGVkIHRleHQgZmlsZTwvbGk+CgkJPGxpPmEgZ3ppcHBlZCB2ZXJzaW9uICh1c2VmdWwgZm9y IGxhcmdlIHBsdWdpbnMpPC9saT4KCQk8bGk+YSBwaHAgZmlsZSBpbiB0aGUgc3RhbmRhcmQg dGVtcGxhdGUgZm9ybWF0PC9saT4KCTwvdWw+PC9saT4KCQk8bGk+V2hlbiBleHBvcnRpbmcs IGZpbGVzIGNhbiBiZSBzYXZlZCB3aXRoIGVpdGhlciB0aGUgY29kZSBibG9jayBmaXJzdCBv ciB0aGUgaGVscCBibG9jayBmaXJzdCwgYW5kIHlvdSBjYW4gY2hhbmdlIHRoZSBvdXRwdXQg ZmlsZW5hbWUgZm9ybWF0IHRvIHRhc3RlLiBVc2UgdGhlIDxhIGhyZWY9IiNzZXR1cHBhZ2Ui PlNldHVwIGJ1dHRvbjwvYT4gdG8gY29uZmlndXJlPC9saT4KCQk8bGk+U3VwcG9ydCBmb3Ig YWxsIHBsdWdpbiB0eXBlczoKCTx1bD4KCQk8bGk+Q2xpZW50ICsgQWRtaW48L2xpPgoJCTxs aT5DbGllbnQtc2lkZSBvbmx5PC9saT4KCQk8bGk+QWRtaW4tc2lkZSBvbmx5PC9saT4KCQk8 bGk+TGlicmFyeSBwbHVnaW5zPC9saT4KCTwvdWw+PC9saT4KCQk8bGk+U3VwcG9ydCBmb3Ig c3BlY2lmeWluZyBhIHJlY29tbWVuZGVkIHBsdWdpbiBsb2FkIG9yZGVyIGlmIHlvdXIgcGx1 Z2luIG5lZWRzIHNwZWNpYWwgcG93ZXJzLiAmIzgyMTY7NSYjODIxNzsgaXMgdGhlIGRlZmF1 bHQuIE5vdGUgdGhhdCBpZiB1c2luZyB0aGUgcGx1Z2luIGNhY2hlIGRpcmVjdG9yeSB0aGlz IGZlYXR1cmUgaXMgPGVtPm9ubHkgYXZhaWxhYmxlIGlmIHRoZSA8Y29kZT4kcGx1Z2luWyYj Mzk7b3JkZXImIzM5O108L2NvZGU+IHN0cmluZyBpcyBpbiB0aGUgdGVtcGxhdGUgdG8gYmVn aW4gd2l0aC48L2VtPiBTbyBpZiB5b3VyIGxvYWQgb3JkZXIga2VlcHMgcmV0dXJuaW5nIHRv ICYjODIxNjs1JiM4MjE3OywgZWRpdCB5b3VyIHRlbXBsYXRlIGRpcmVjdGx5IHRvIGFkZCB0 aGF0IHN0cmluZyBvciBwYXN0ZSB5b3VyIHBsdWdpbiBpbnRvIHRoZSByZWxldmFudCBwYXJ0 cyBvZiB0aGUgPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL2Rvd25sb2Fkcy9lbXB0 eV9wbHVnaW5fdGVtcGxhdGUudHh0Ij5lbXB0eSBwbHVnaW4gdGVtcGxhdGU8L2E+IGFuZCB1 cGxvYWQgaXQ8L2xpPgoJCTxsaT5IZWxwIHRleHQgY2FuIGJlIHdyaXR0ZW4gaW4gVGV4dGls ZSBvciAoWClIVE1MLiBTdHlsZXMgY2FuIGJlIGFkZGVkIHRvIHRoZSBoZWxwIHNlY3Rpb248 L2xpPgoJCTxsaT5UYWtlIGFkdmFudGFnZSBvZiB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVt LnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP2lkPTEzMDg5Ij5UaW55TUNFIDxzcGFu IGNsYXNzPSJjYXBzIj5XWVNJV1lHPC9zcGFuPiBlZGl0b3I8L2E+IGZvciB0aGUgaGVscCBz ZWN0aW9uIG9yIDxhIGhyZWY9Imh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93 ZmlsZXMucGhwP2dyb3VwX2lkPTE2NDAwOCI+RWRpdCBBcmVhPC9hPiBmb3IgY29kZSBtYXJr dXAgKHRoYW5rcyB2YXJpYWFzKS4gU2VlIHRoZSA8YSBocmVmPSIjc2V0dXBwYWdlIj5zZXR1 cDwvYT4gYW5kIDxhIGhyZWY9IiNub3RlcyI+bm90ZXM8L2E+IHNlY3Rpb25zIGZvciBtb3Jl IG9uIHRoZXNlIGVkaXRvcnM8L2xpPgoJCTxsaT5CdWlsdC1pbiBUZXh0aWxlIGhlbHAgdmll d2VyICh0aGFua3MgdG8gbmV0LWNhcnZlciYjODIxNztzIDxhIGhyZWY9Imh0dHA6Ly90eHAt cGx1Z2lucy5uZXRjYXJ2aW5nLmNvbS9wbHVnaW5zL3BsdWdpbi1oZWxwLXZpZXdlciI+UGx1 Z2luIEhlbHAgVmlld2VyPC9hPikgdG8gYWxsb3cgeW91IHRvIHByZXZpZXcgeW91ciBIZWxw IHRleHQgZHVyaW5nIGRldmVsb3BtZW50ICh0aGUgdHdvIHZpZXdlcnMgd2lsbCBoYXBwaWx5 IGNvLWV4aXN0IGlmIHlvdSB3aXNoKTwvbGk+CgkJPGxpPlJlc2l6YWJsZSB0ZXh0YXJlYSwg cGx1cyBjaGFyYWN0ZXIgbGltaXQvY291bnRlcnMgc28gdGhlcmUmIzgyMTc7cyBsZXNzIGNo YW5jZSBvZiB5b3UgbWFraW5nIHRoZSBwbHVnaW4gb3IgZG9jcyB0b28gYmlnIHRvIGZpdCBp biB0aGUgZGF0YWJhc2U8L2xpPgoJCTxsaT5TdXBwb3J0IGZvciBzZXR0aW5nIGEgY29kZSAm IzgyMjA7cmVzdG9yZSBwb2ludCYjODIyMTsgYW5kIHJvbGxpbmcgYmFjayB0byB0aGF0IHBv aW50IGlmIHRoaW5ncyBnbyBzaWRld2F5cy4gQWxzbyB1c2VmdWwgZm9yIHJldHVybmluZyBw bHVnaW4gc291cmNlIGNvZGUgdG8gaXRzIGFzLWluc3RhbGxlZCBzdGF0ZTwvbGk+Cgk8L3Vs PgoKCTxoMiBpZD0iYXV0aG9ycyI+QXV0aG9yczwvaDI+CgoJPHA+T3JpZ2luYWwgcGx1Z2lu OiA8YSBocmVmPSJodHRwOi8vaW5zcGlyZWQua2lldi51YS9mZWVkYmFjay8iPll1cmEgTGlu bnlrPC9hPjxiciAvPgpNb2RpZmljYXRpb25zICh2MC41Kyk6IDxhIGhyZWY9Imh0dHA6Ly9z dGVmZGF3c29uLmNvbS9jb21tZW50Rm9ybSI+U3RlZiBEYXdzb248L2E+PGJyIC8+CkEgdG91 Y2ggb2YgY2xhc3M6IDxhIGhyZWY9Imh0dHA6Ly90eHAtcGx1Z2lucy5uZXRjYXJ2aW5nLmNv bS9jb250YWN0Ij5TdGV2ZSBEaWNraW5zb248L2E+PGJyIC8+ClBsdXMgaGVscCBmcm9tIGEg aG9zdCBvZiBmb3J1bSBjb250cmlidXRvcnMgdG9vIG51bWVyb3VzIHRvIG1lbnRpb24uIFlv dSBrbm93IHdobyB5b3UgYXJlIDstKTwvcD4KCgk8aDIgaWQ9Imluc3RhbGwiPkluc3RhbGxh dGlvbiAvIFVuaW5zdGFsbGF0aW9uPC9oMj4KCgk8cD5Eb3dubG9hZCB0aGUgcGx1Z2luICh2 MC41IGFuZCBhYm92ZSkgZnJvbSA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vc3ci PnN0ZWZkYXdzb24uY29tPC9hPiAocHJldmlvdXMgdmVyc2lvbnMgYXJlIHN0aWxsIGF2YWls YWJsZSBvbiB0aGUgPGEgaHJlZj0iaHR0cDovL2luc3BpcmVkLmtpZXYudWEvdHhwL2llZF9w bHVnaW5fY29tcG9zZXIiPkluc3BpcmVkIGhvbWVwYWdlPC9hPiksIHBhc3RlIHRoZSBjb2Rl IGludG8gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IEFkbWluIC0mZ3Q7IFBs dWdpbnMgcGFnZSwgaW5zdGFsbCBhbmQgZW5hYmxlIHRoZSBwbHVnaW4uPC9wPgoKCTxwPlZp c2l0IHRoZSBFeHRlbnNpb25zIC0mZ3Q7IFBsdWdpbiBDb21wb3NlciB0YWIgYW5kIGNsaWNr IHRoZSBTZXR1cCBidXR0b24gaW4gdGhlIHRvcC1yaWdodCBvZiB0aGUgc2NyZWVuLiBGcm9t IGhlcmUgeW91IGNhbiBJbnN0YWxsLCBEZWxldGUgYW5kIFNhdmUgdGhlIHBsdWdpbiBwcmVm ZXJlbmNlcy4gU2VlIHRoZSA8YSBocmVmPSIjc2V0dXBwYWdlIj5zZXR1cCBzZWN0aW9uPC9h PiBmb3IgZGV0YWlscy48L3A+CgoJPHA+VG8gcmVtb3ZlIHRoZSBQbHVnaW4gQ29tcG9zZXIg KG5vb29vISkgdmlzaXQgdGhlIFNldHVwIHBhZ2UgYWdhaW4gZnJvbSB0aGUgUGx1Z2luIENv bXBvc2VyIHRhYiwgaGl0IERlbGV0ZSB0byByZW1vdmUgdGhlIHByZWZlcmVuY2VzLCB0aGVu IHNpbXBseSBkZWxldGUgdGhlIHBsdWdpbiBhcyBub3JtYWwgZnJvbSB0aGUgQWRtaW4gLSZn dDsgUGx1Z2lucyBwYWdlLjwvcD4KCgk8aDIgaWQ9InVzYWdlIj5Vc2FnZTwvaDI+CgoJPGgz IGlkPSJsaXN0cGFnZSI+TGlzdCBwYWdlPC9oMz4KCgk8cD5UaGVyZSBpcyBhIDxhIGhyZWY9 IiNzZXR1cHBhZ2UiPnNldHVwPC9hPiBidXR0b24gdG8gYWxsb3cgeW91IHRvIGNvbmZpZ3Vy ZSB2YXJpb3VzIG9wdGlvbnMgaW4gdGhlIENvbXBvc2VyLCB3aGlsZSB0aGUgcmVzdCBvZiB0 aGUgcGFnZSBsaXN0cyBhbGwgaW5zdGFsbGVkIHBsdWdpbnMuIFRoZSBjb2x1bW5zIGFyZTo8 L3A+CgoJPHVsPgoJCTxsaT48c3Ryb25nPlBsdWdpbjwvc3Ryb25nPiA6IGNsaWNrIHRoZSBw bHVnaW4gbmFtZSB0byA8YSBocmVmPSIjZWRpdHBhZ2UiPmVkaXQ8L2E+IGl0PC9saT4KCQk8 bGk+PHN0cm9uZz5BdXRob3I8L3N0cm9uZz4gOiBpZiBhdmFpbGFibGUsIGNsaWNrIHRoZSBh dXRob3IgdG8gZ28gdG8gdGhlaXIgc2l0ZTwvbGk+CgkJPGxpPjxzdHJvbmc+VmVyc2lvbiAo TW9kaWZpZWQpPC9zdHJvbmc+IDogc2hvd3MgdGhlIGN1cnJlbnQgdmVyc2lvbiBudW1iZXIg YW5kIHdoZXRoZXIgdGhlIHBsdWdpbiBoYXMgYmVlbiBtb2RpZmllZCBmcm9tIHdoZW4gaXQg d2FzIGVpdGhlciBjcmVhdGVkIG9yIGluc3RhbGxlZC4gSWYgaXQgaGFzLCB5b3UgY2FuIGNs aWNrIHRoZSB2ZXJzaW9uIG51bWJlciB0byByZXN0b3JlIHRoZSBwbHVnaW4gY29kZSB0byBp dHMgaW5zdGFsbGVkIHN0YXRlIG9yIGxhc3QgPGEgaHJlZj0iI3Jlc3RvcmUiPnJlc3RvcmUg cG9pbnQ8L2E+PC9saT4KCQk8bGk+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPiA6IGJy aWVmbHksIHdoYXQgdGhlIHBsdWdpbiBkb2VzPC9saT4KCQk8bGk+PHN0cm9uZz5QdWJsaXNo PC9zdHJvbmc+IDogdGhyZWUgbGlua3MKCTx1bD4KCQk8bGk+PGVtPlB1Ymxpc2g8L2VtPiA6 IGV4cG9ydHMgdGhlIHBsdWdpbiBhcyBhIC50eHQgZmlsZSBmb3IgZGlzdHJpYnV0aW9uIHRv IG90aGVyIFRleHRwYXR0ZXJuIHVzZXJzPC9saT4KCQk8bGk+PGVtPlppcDwvZW0+IDogZXhw b3J0cyB0aGUgcGx1Z2luIGFzIGEgY29tcHJlc3NlZCAoZ3ppcHBlZCkgLnR4dCBmaWxlIGZv ciBkaXN0cmlidXRpb248L2xpPgoJCTxsaT48ZW0+SGVscDwvZW0+IDogZGlzcGxheXMgdGhl ICh0ZXh0aWxlIHByb2Nlc3NlZCkgcGx1Z2luIGRvY3VtZW50YXRpb24gKGlmIHRoZXJlIGlz IGFueSkuIENhbiBhbHNvIGJlIHZpZXdlZCBmcm9tIHRoZSBFZGl0IHBhZ2U8L2xpPgoJPC91 bD48L2xpPgoJCTxsaT48c3Ryb25nPk9yZGVyPC9zdHJvbmc+IDogdGhlIHJlY29tbWVuZGVk IHBsdWdpbiBsb2FkIG9yZGVyIGZyb20gMSAobG9hZGVkIGZpcnN0KSB0byA5IChsb2FkZWQg bGFzdCkuIDUgaXMgZGVmYXVsdDwvbGk+CgkJPGxpPjxzdHJvbmc+QWN0aXZlPC9zdHJvbmc+ IDogZW5hYmxlIG9yIGRpc2FibGUgYSBwbHVnaW4gYnkgY2xpY2tpbmcgZW50cmllcyBpbiB0 aGlzIGNvbHVtbjwvbGk+CgkJPGxpPjxzdHJvbmc+eDwvc3Ryb25nPiA6IGRlbGV0ZSB0aGUg cGx1Z2luPC9saT4KCTwvdWw+CgoJPHA+SWYgeW91IGFyZSB1c2luZyB0aGUgcGx1Z2luX2Nh Y2hlX2RpciAoQWRtaW4gLSZndDsgQWR2YW5jZWQgUHJlZnMpLCBhbnkgcGx1Z2lucyBpbiB0 aGUgc3RhbmRhcmQgdGVtcGxhdGUgZm9ybWF0IHVwbG9hZGVkIHRvIHRoaXMgZGlyZWN0b3J5 IHdpbGwgYmUgYXZhaWxhYmxlIGltbWVkaWF0ZWx5IGZvciBlZGl0aW5nIGFuZCB0ZXN0aW5n LiBZb3UgY2FuIGVkaXQgYW5kIHB1Ymxpc2ggdGhlIHBsdWdpbnMgaW4gdGhlIHNhbWUgbWFu bmVyIGFzIHRoZSByZWd1bGFyLCBpbnN0YWxsZWQgcGx1Z2lucyBhYm92ZSwgd2l0aCB0aGUg Zm9sbG93aW5nIGV4Y2VwdGlvbnM6PC9wPgoKCTxvbD4KCQk8bGk+VGhlcmUgaXMgbm8gY29u Y2VwdCBvZiAmIzgyMTY7bW9kaWZpZWQmIzgyMTc7IG9yIG9mIHJlc3RvcmUgcG9pbnRzIGFz IHRoZSBmaWxlcyBhbHdheXMgcmVwcmVzZW50IHRoZSBtb3N0IHVwLXRvLWRhdGUgdmVyc2lv bjwvbGk+CgkJPGxpPkNhY2hlZCBwbHVnaW5zIGFyZSAmIzgyMjA7YWx3YXlzIG9uJiM4MjIx OyBhbmQgZG8gbm90IG5lZWQgdG8gYmUgaW5zdGFsbGVkLiBUbyBkZWFjdGl2YXRlIHRoZSBw bHVnaW4gdGhlIGZpbGUgbXVzdCBiZSByZW1vdmVkIGZyb20gdGhlIHBsdWdpbiBjYWNoZSBk aXJlY3Rvcnk8L2xpPgoJCTxsaT5UaGUgcmVjb21tZW5kZWQgbG9hZCBvcmRlciBjYW5ub3Qg YmUgY2hhbmdlZCBmcm9tIHRoZSBsaXN0IHBhZ2U7IGl0IGNhbiBvbmx5IGJlIGFsdGVyZWQg dmlhIHRoZSA8YSBocmVmPSIjZWRpdHBhZ2UiPkVkaXQ8L2E+IHBhZ2U8L2xpPgoJPC9vbD4K Cgk8aDQ+Q3JlYXRpbmcgYW5kIG5hbWluZyBwbHVnaW5zPC9oND4KCgk8cD5UaGVyZSBhcmUg dHdvIHdheXMgb2YgY3JlYXRpbmcgcGx1Z2lucyBmcm9tIHRoZSBQbHVnaW4gQ29tcG9zZXIg bGlzdCBwYWdlLjwvcD4KCgk8cD5UaGUgZmlyc3QgaXMgdG8gY3JlYXRlIGEgYmxhbmssIGVt cHR5IHBsdWdpbjsgdXNlIHRoZSB0ZXh0IGJveCBhdCB0aGUgdG9wIGZvciB0aGlzLjwvcD4K Cgk8cD5UaGUgc2Vjb25kIGlzIHRvIHVwbG9hZCBvbmUgdXNpbmcgdGhlIEJyb3dzZS91cGxv YWQgYm94IGF0IHRoZSBib3R0b20gb2YgdGhlIGxpc3QuIFlvdSBjYW4gdXBsb2FkIGNvZGUg aW4gZWl0aGVyIHN0YW5kYXJkIHBsdWdpbiB0ZW1wbGF0ZSBmb3JtYXQgKGVpdGhlciBjb2Rl LWZpcnN0IG9yIGhlbHAtZmlyc3QsIGNvbXBsZXRlIHdpdGggPHNwYW4gY2xhc3M9ImNhcHMi PkNTUzwvc3Bhbj4gYXJlYXMpIG9yIHNpbXBseSB1cGxvYWQgYSA8c3BhbiBjbGFzcz0iY2Fw cyI+UEhQPC9zcGFuPiBmaWxlIGNvbnRhaW5pbmcgY29kZSBvbmx5LiA8ZW0+Tm90ZSB0aGlz IGlzIHRoZSBvbmx5IHBsYWNlIHlvdSBjYW4gdXBsb2FkIHJhdyA8c3BhbiBjbGFzcz0iY2Fw cyI+UEhQPC9zcGFuPiB3aXRoIHRoZSA8Y29kZT4mbHQ7P3BocCA/Jmd0OzwvY29kZT4gbWFy a2Vycy4gRXZlcnl3aGVyZSBlbHNlIHlvdSBzaG91bGQgdXNlIGEgZnVsbCB0ZW1wbGF0ZS48 L2VtPjwvcD4KCgk8cD5FdmVyeSBwbHVnaW4gc2hvdWxkIGJlIGNyZWF0ZWQgd2l0aCBhIHRo cmVlLWxldHRlciBwcmVmaXgsIGFuIHVuZGVyc2NvcmUsIHRoZW4gdGhlIG5hbWUgb2YgdGhl IHBsdWdpbi4gWW91IGFyZSBmcmVlIHRvIGNob29zZSB5b3VyIG93biB0aHJlZS1sZXR0ZXIg cHJlZml4ICh1c3VhbGx5IHlvdXIgaW5pdGlhbHMpIHN1YmplY3QgdG8gPGEgaHJlZj0iaHR0 cDovL3d3dy50ZXh0cGF0dGVybi5uZXQvd2lraS9pbmRleC5waHA/dGl0bGU9UmVzZXJ2ZWRf UGx1Z2luX1ByZWZpeGVzIj5hdm9pZGluZyBvbmVzIGFscmVhZHkgdGFrZW4gYnkgb3RoZXIg cGx1Z2luIGF1dGhvcnM8L2E+IHNvIHBlb3BsZSBjYW4gZ2V0IHRvIGtub3cgeW91ciB3b3Jr LiBQbHVzLCBpdCBncm91cHMgeW91ciBwbHVnaW5zIHRvZ2V0aGVyIGluIHRoZSBwbHVnaW4g YXJjaGl2ZS48L3A+CgoJPHA+QWxsIGZ1bmN0aW9ucywgdmFyaWFibGVzIChpbmNsdWRpbmcg PHNwYW4gY2xhc3M9ImNhcHMiPkRPTTwvc3Bhbj4gbm9kZXMpLCA8c3BhbiBjbGFzcz0iY2Fw cyI+Q1NTPC9zcGFuPiBjbGFzc2VzLCBhbmQgYW55dGhpbmcgZWxzZSB5b3UgaW5qZWN0IGlu dG8gdGhlIGdsb2JhbCBzY29wZSBzaG91bGQgYmUgcHJlZml4ZWQgYnkgPHN0cm9uZz5hdCBs ZWFzdDwvc3Ryb25nPiB5b3VyIHRocmVlIGxldHRlciBjb2RlOyBwcmVmZXJhYmx5IHRoZSB3 aG9sZSBwbHVnaW4gbmFtZSAob3IgYWJyaWRnZWQgdmVyc2lvbiB0aGVyZW9mKSB0byBhdm9p ZCBuYW1lc3BhY2UgY2xhc2hlcyB3aXRoIHlvdXIgb3duIGFuZCBvdGhlciBwbHVnaW5zLjwv cD4KCgk8aDMgaWQ9ImVkaXRwYWdlIj5FZGl0IHBhZ2U8L2gzPgoKCTxwPlRoZSBFZGl0IHBh Z2UgaXMgd2hlcmUgeW91IGNyZWF0ZSB5b3VyIG1hc3RlcnBpZWNlLiBJdCBpcyBkaXZpZGVk IGludG8gdmFyaW91cyBzZWN0aW9ucyBhbmQgYm94ZXMsIGFzIGRldGFpbGVkIGhlcmU6PC9w PgoKCTx1bD4KCQk8bGk+PHN0cm9uZz5QbHVnaW48L3N0cm9uZz4gOiB0aGUgbmFtZSBvZiB5 b3VyIHBsdWdpbiwgd2hpY2ggeW91IGNhbiBjaGFuZ2UgYXQgYW55IHRpbWUuIE5vdGUgdGhh dCBpZiB5b3UgYXJlIGVkaXRpbmcgYSBmaWxlIGZyb20gdGhlIHBsdWdpbiBjYWNoZSBkaXJl Y3RvcnkgYW5kIHRoZSA8Y29kZT4kcGx1Z2luWyYjMzk7bmFtZSYjMzk7XTwvY29kZT4gcm93 IGlzIGNvbW1lbnRlZCBvdXQgaW4gdGhlIGZpbGUsIHlvdSB3aWxsIG5vdCBiZSBhYmxlIHRv IGNoYW5nZSB0aGUgcGx1Z2luIG5hbWU7IGl0IHdpbGwgYWx3YXlzIGJlIHRoZSBuYW1lIG9m IHRoZSBmaWxlLjxiciAvPgpUbyB0aGUgcmlnaHQgb2YgdGhpcyBib3ggd2lsbCBiZSBvbmUg b2YgdHdvIGl0ZW1zOgoJPHVsPgoJCTxsaT48c3Ryb25nPkVuYWJsZTwvc3Ryb25nPiA6IGlm IHRoZSBwbHVnaW4gaXMgYSByZWd1bGFyIChpbnN0YWxsZWQpIHBsdWdpbiwgdGhpcyBjaGVj a2JveCBhbGxvd3MgeW91IHRvIHN3aXRjaCB0aGUgcGx1Z2luIG9uIGFuZCBvZmY8L2xpPgoJ CTxsaT48c3Ryb25nPihmaWxlIG5hbWUpPC9zdHJvbmc+IDogaWYgeW91IGFyZSBlZGl0aW5n IGEgcGx1Z2luIGluIHRoZSBjYWNoZSBkaXJlY3RvcnksIHRoZSBjdXJyZW50IGZpbGVuYW1l IHlvdSBhcmUgd3JpdGluZyB0byB3aWxsIGJlIGRpc3BsYXllZCBpbnN0ZWFkPC9saT4KCTwv dWw+PC9saT4KCQk8bGk+PHN0cm9uZz5Tb3VyY2UgY29kZTwvc3Ryb25nPiA6IHlvdXIgcGx1 Z2luIGNvZGUgZ29lcyBoZXJlLiBUaGUgYm94IGlzIHJlc2l6YWJsZSBieSBncmFiYmluZyB0 aGUgPGNvZGU+LS0tICsgLS0tPC9jb2RlPiBiZWxvdyB0aGUgYm94IGFuZCBkcmFnZ2luZy4g VGhlIGJveCBzaXplIHdpbGwgYmUgcmVtZW1iZXJlZCB2aWEgYSBjb29raWUgZm9yIDMwIGRh eXMgZnJvbSB5b3VyIGxhc3QgYWRqdXN0bWVudC48YnIgLz4KUGx1Z2lucyBhcmUgbGltaXRl ZCB0byA2NGtCIG9mIGNvZGUgc28gdGhlcmUgaXMgYWxzbyBhIGNoYXJhY3RlciBjb3VudGRv d24ganVzdCBiZWxvdyB0aGUgZWRpdCBib3guIElmIHlvdSBzdGFydCBhcHByb2FjaGluZyB0 aGUgbGltaXQsIGl0IG1pZ2h0IGJlIHdvcnRoIGNvbnNpZGVyaW5nIHNwbGl0dGluZyB5b3Vy IHBsdWdpbiBpbnRvIGEgZmV3IHBhcnRzPC9saT4KCQk8bGk+PHN0cm9uZz5QbHVnaW4gdHlw ZTwvc3Ryb25nPiA6IGNob29zZSBvbmUgb2YgdGhlIHR5cGVzIHRoYXQgYmVzdCBmaXRzIHRo ZSBpbnRlbmRlZCB1c2Ugb2YgeW91ciBwbHVnaW4uIElmIHlvdSBjaG9vc2UgJiM4MjE2O0Ns aWVudCYjODIxNzsgYW5kIHRyeSB0byBhY2Nlc3MgdGhlIGFkbWluIHNpZGUgaW4geW91ciBj b2RlLCBhIHdhcm5pbmcgd2lsbCBiZSBpc3N1ZWQgd2hlbiB0aGUgcGx1Z2luIGlzIHNhdmVk IHNvIHlvdSBjYW4gY2hvb3NlIGEgbW9yZSBhcHByb3ByaWF0ZSB0eXBlPC9saT4KCQk8bGk+ PHN0cm9uZz5Mb2FkIG9yZGVyPC9zdHJvbmc+IDogY2hvb3NlIHRoZSByZWNvbW1lbmRlZCBv cmRlciBpbiB3aGljaCB5b3UgdGhpbmsgeW91ciBwbHVnaW4gc2hvdWxkIGJlIGxvYWRlZCBi eSB1c2Vycy4gTW9zdCBvZiB0aGUgdGltZSwgdGhlIGRlZmF1bHQgb2YgJiM4MjE2OzUmIzgy MTc7IGlzIGZpbmUgYnV0IGZvciBzcGVjaWFsIGNhc2VzIHdoZXJlIHlvdXIgcGx1Z2luIGhh cyB0byBzZXQgdXAgYW4gZW52aXJvbm1lbnQgb3IgaGFzIHRvIHdhaXQgZm9yIG90aGVyIHBs dWdpbnMgdG8gbG9hZCBmaXJzdCwgeW91IG1pZ2h0IHJlcXVpcmUgb25lIG9mIHRoZSBudW1i ZXJzIGVpdGhlciBzaWRlLiBCZSBhd2FyZSB0aGF0IHRoaXMgaXMgYSA8ZW0+cmVjb21tZW5k YXRpb248L2VtPiBhbmQgaXMgb3ZlcnJpZGFibGUgYnkgdGhlIHNpdGUgYWRtaW4uIElmIHRo ZSBwbHVnaW4gaXMgYWxyZWFkeSBkZXBsb3llZCBvbiBhIHNpdGUsIHRoZSBsb2FkIG9yZGVy IGFscmVhZHkgc2V0IHdpbGwgYmUgdXNlZCByZWdhcmRsZXNzIG9mIHRoZSBzZXR0aW5nIG9m IHRoaXMgdmFsdWUuIE9ubHkgbmV3IGluc3RhbGxhdGlvbnMgd2lsbCBiZSBzZXQgdG8gdGhp cyB2YWx1ZSBieSBkZWZhdWx0PC9saT4KCQk8bGk+PHN0cm9uZz5WZXJzaW9uPC9zdHJvbmc+ IDogdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB5b3VyIHBsdWdpbi4gVG8gdGhlIHJpZ2h0IG9m IHRoaXMgYm94IHdpbGwgYmUgb25lIG9mIHR3byBpdGVtczoKCTx1bD4KCQk8bGk+PHN0cm9u Zz5SZXN0b3JlIHBvaW50PC9zdHJvbmc+IDogc2VsZWN0aW5nIHRoaXMgY2hlY2tib3ggd2ls bCAodXBvbiBzYXZlKSBzdG9yZSB0aGUgY3VycmVudCBjb2RlIGFzIGEgYmFzZWxpbmUgdG8g d2hpY2ggeW91IG1heSAmIzgyMjA7cm9sbCBiYWNrJiM4MjIxOyB0byBhdCBhIGxhdGVyIGRh dGUuIFNlZSA8YSBocmVmPSIjcmVzdG9yZSI+cmVzdG9yZSBwb2ludHM8L2E+IGZvciBtb3Jl PC9saT4KCQk8bGk+PHN0cm9uZz5SZW5hbWUgZmlsZTwvc3Ryb25nPiA6IGJ5IGRlZmF1bHQs IHdoZW4geW91IHNhdmUgYSBmaWxlIHRoYXQgaXMgYmVpbmcgZWRpdGVkIGluIHRoZSBwbHVn aW4gY2FjaGUgZGlyZWN0b3J5LCBpdCBpcyBvdmVyd3JpdHRlbiB3aXRoIHlvdXIgY2hhbmdl cy4gT25jZSBhIHBsdWdpbiBpcyByZWxlYXNlZCB5b3Ugd291bGQgbm9ybWFsbHkgZG93bmxv YWQgYSBjb3B5IHZpYSA8c3BhbiBjbGFzcz0iY2FwcyI+RlRQPC9zcGFuPiBmcm9tIHRoZSBw bHVnaW5fY2FjaGVfZGlyIGZvciBzYWZla2VlcGluZy4gSWYgeW91IHRoZW4gc3Vic2VxdWVu dGx5IG1vZGlmeSB0aGUgcGx1Z2luIGFuZCBpbmNyZWFzZSB0aGUgdmVyc2lvbiBudW1iZXIs IGl0IG1heSBub3QgYmUgZGVzaXJhYmxlIHRvIHdyaXRlIGl0IG92ZXIgdGhlIHNhbWUgZmls ZS4gQ2hlY2tpbmcgdGhpcyBib3ggd2lsbCAodXBvbiBzYXZlKSByZW5hbWUgdGhlIGZpbGUg aW4gdGhlIHBsdWdpbiBjYWNoZSBkaXJlY3RvcnkgdG8gcmVmbGVjdCB0aGUgY3VycmVudCB2 ZXJzaW9uIG51bWJlci4gU2VlIHRoZSA8YSBocmVmPSIjc2V0dXBwYWdlIj5zZXR1cCBwYWdl PC9hPiBmb3IgZGV0YWlscyBvbiBjdXN0b21pc2luZyB0aGUgZmlsZW5hbWUgZm9ybWF0PC9s aT4KCTwvdWw+PC9saT4KCQk8bGk+PHN0cm9uZz5BdXRob3I8L3N0cm9uZz4gOiB5b3UhPC9s aT4KCQk8bGk+PHN0cm9uZz5XZWJzaXRlPC9zdHJvbmc+IDogeW91ciBob21lIHBhZ2Ugb3Ig cGx1Z2luIHBhZ2UuIFdpbGwgYmUgbGlua2VkIHRvIHlvdXIgbmFtZSBpbiB0aGUgbGlzdCBw YWdlPC9saT4KCQk8bGk+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPiA6IHZlcnkgYnJp ZWYgb25lLWxpbmVyIGRlc2NyaWJpbmcgeW91ciBwbHVnaW4mIzgyMTc7cyBjb3JlIGZ1bmN0 aW9uIC8gcmVhc29uIGZvciBleGlzdGVuY2U8L2xpPgoJCTxsaT48c3Ryb25nPlBsdWdpbiBI ZWxwPC9zdHJvbmc+IDogZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlsaW5nIHRoZSBwbHVnaW4g dXNhZ2UuIENhbiAocHJvYmFibHkgc2hvdWxkISkgYmUgd3JpdHRlbiB1c2luZyA8YSBocmVm PSJodHRwOi8vdGV4dGlsZS50aHJlc2hvbGRzdGF0ZS5jb20vIj5UZXh0aWxlPC9hPi4gVGhl cmUgd2VyZSBzb21lIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmll d3RvcGljLnBocD9pZD0yNTMyNyI+bG9vc2UgZG9jdW1lbnRhdGlvbiBndWlkZWxpbmVzPC9h PiBwcm9wb3NlZCB0aGF0IHNlcnZlIGFzIGEgZ29vZCBzdGFydGluZyBwb2ludDwvbGk+CgkJ PGxpPjxzdHJvbmc+U3R5bGU8L3N0cm9uZz4gOiBBbnkgPHNwYW4gY2xhc3M9ImNhcHMiPkNT Uzwvc3Bhbj4gc3R5bGUgcnVsZXMgeW91IHdpc2ggdG8gYXBwbHkgdG8geW91ciBkb2N1bWVu dGF0aW9uIHRvIG1ha2UgaXQgbW9yZSBwcmV0dHkuIEl0JiM4MjE3O3MgYmVzdCB0byB0YXJn ZXQgeW91ciBkb2N1bWVudGF0aW9uIHNwZWNpZmljYWxseSBieSBzdXJyb3VuZGluZyB0aGUg ZW50aXJlIFBsdWdpbiBIZWxwIHNlY3Rpb24gd2l0aCBzb21ldGhpbmcgbGlrZTogPGNvZGU+ Jmx0O2RpdiBpZD0mcXVvdDthYmNfaGVscCZxdW90OyZndDtoMS4gRG9jcyBnbyBoZXJlLi4u Jmx0Oy9kaXYmZ3Q7PC9jb2RlPi48YnIgLz4KTm90ZSB0aGF0IGJvdGggdGhlIFBsdWdpbiBI ZWxwIGFuZCBTdHlsZSBhcmUgZ292ZXJuZWQgYnkgYSBzaXplIGxpbWl0LiBTaW5jZSB0aGV5 IGFyZSBib3RoIHN0b3JlZCBpbiB0aGUgc2FtZSA2NGtCIGZpZWxkLCB0aGUgc2l6ZSBpcyBz aGFyZWQgYmV0d2VlbiB0aGVtLiBTdHlsZXMgYXJlIDxlbT5ub3Q8L2VtPiBwYXNzZWQgdGhy b3VnaCB0aGUgVGV4dGlsZSBwcm9jZXNzb3IgYW5kIHlvdSBkb24mIzgyMTc7dCBuZWVkIHRv IGFkZCB0aGUgPGNvZGU+Jmx0O3N0eWxlJmd0OzwvY29kZT4gdGFnczsgdGhlIENvbXBvc2Vy IHdpbGwgZG8gdGhhdCBmb3IgeW91PC9saT4KCQk8bGk+PHN0cm9uZz5TYXZlPC9zdHJvbmc+ IDogY29tbWl0cyB0aGUgY2hhbmdlczwvbGk+CgkJPGxpPjxzdHJvbmc+WyBWaWV3IEhlbHAg XTwvc3Ryb25nPiA6IHNob3dzIHRoZSBkb2N1bWVudGF0aW9uIGFzIHVzZXJzIHdpbGwgc2Vl IGl0IChpLmUuIFRleHRpbGUgcHJvY2Vzc2VkIGludG8gPHNwYW4gY2xhc3M9ImNhcHMiPkhU TUw8L3NwYW4+KTwvbGk+Cgk8L3VsPgoKCTxwPk9uY2UgeW91IGhhdmUgc2F2ZWQgeW91ciBw bHVnaW4sIHRoZXJlIGlzIGEgc2VjdGlvbiByaWdodCBhdCB0aGUgYm90dG9tIHRoYXQgYWxs b3dzIHlvdSB0byBleHBvcnQgeW91ciBwbHVnaW4gaW4gYSB2YXJpZXR5IG9mIGZvcm1hdHM6 PC9wPgoKCTx1bD4KCQk8bGk+PHN0cm9uZz5QbHVnaW4gY29kZSBmb3IgZGlzdHJpYnV0aW9u PC9zdHJvbmc+IDogaXMgYSBkaXJlY3QgY29weSAmIzgyMTY7biYjODIxNzsgcGFzdGUgYXJl YSB0aGF0IGNvbnRhaW5zIHlvdXIgZW50aXJlIHBsdWdpbiArIGRvY3MuIFlvdSBjYW4gdGFr ZSB0aGlzIGVudGlyZSBhcmVhIGFuZCBwYXN0ZSBpdCBpbnRvIHRoZSAmIzgyMTY7SW5zdGFs bCBwbHVnaW4mIzgyMTc7IGJveCBvbiB0aGUgQWRtaW4gLSZndDsgUGx1Z2lucyBwYWdlPC9s aT4KCQk8bGk+PHN0cm9uZz5FeHBvcnQgYXMgYWJjX215cGx1Z2luLnR4dDwvc3Ryb25nPiA6 IGNvbnZlcnRzIHRoZSBwbHVnaW4gaGVscCB0byA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwv c3Bhbj4gYW5kIHNhdmVzIHRoZSBwbHVnaW4gdG8geW91ciBjb21wdXRlciBhcyBhIHJlZGlz dHJpYnV0YWJsZSB0ZXh0IGZpbGUgZm9yIG90aGVyIFRleHRwYXR0ZXJuIHVzZXJzIHRvIGlu c3RhbGw8L2xpPgoJCTxsaT48c3Ryb25nPkV4cG9ydCBhcyBhYmNfbXlwbHVnaW4udHh0IChj b21wcmVzc2VkKTwvc3Ryb25nPiA6IGNvbnZlcnRzIHRoZSBwbHVnaW4gaGVscCB0byA8c3Bh biBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gYW5kIHNhdmVzIHRoZSBwbHVnaW4gYXMgYSBy ZWRpc3RyaWJ1dGFibGUsIGd6aXBwZWQgdGV4dCBmaWxlIGZvciBvdGhlciBUZXh0cGF0dGVy biB1c2VycyB0byBpbnN0YWxsLiBVc2VmdWwgZm9yIGxhcmdlIHBsdWdpbnMgb3IgdG8gb2Zm ZXIgYW4gYWx0ZXJuYXRpdmUgZm9yIHBlb3BsZSB3aG8gaGF2ZSBzdHJpbmdlbnQgc2l6ZSBs aW1pdHMgaW1wb3NlZCBieSB0aGVpciBob3N0PC9saT4KCQk8bGk+PHN0cm9uZz5FeHBvcnQg YXMgYWJjX215cGx1Z2luLnBocDwvc3Ryb25nPiA6IHNhdmVzIHRoZSBwbHVnaW4gaW4gYSBU ZXh0cGF0dGVybiBzdGFuZGFyZCB0ZW1wbGF0ZSBmb3JtYXQuIFVzZWZ1bCBmb3Iga2VlcGlu ZyB0aGUgcGx1Z2luIGZvciB5b3Vyc2VsZiAmIzgyMTI7IGNvbXBsZXRlIHdpdGggVGV4dGls ZSBtYXJrdXAgJiM4MjEyOyBzbyBpdCBjYW4gYmUgbGF0ZXIgZWRpdGVkIGFuZCByZS1pc3N1 ZWQgLyB1cGRhdGVkIG9yIHNoYXJlZCB3aXRoIG90aGVyIGRldmVsb3BlcnMgd2hvIGhhdmUg dGhlIFBsdWdpbiBDb21wb3NlciBvciB6ZW1fdHBsLnBocCBjb21waWxlcjwvbGk+Cgk8L3Vs PgoKCTxwPk5vdGUgdGhhdCB3aGVuIGV4cG9ydGluZyBhcyBhIHN0YW5kYXJkIHBsdWdpbiwg dGhlIFRleHRpbGUgcHJvY2Vzc29yIGF0dGVtcHRzIHRvIGRlY2lkZSBpZiB5b3UgaGF2ZSB1 c2VkIFRleHRpbGUgb3Igbm90OyBpdCBzaW1wbHkgbG9va3MgZm9yIGEgdGV4dGlsZWQgaGVh ZGVyICg8Y29kZT5oMS48L2NvZGU+IHRocm91Z2ggPGNvZGU+aDYuPC9jb2RlPikuIFJ1bm5p bmcgcHVyZSA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gdGhyb3VnaCBUZXh0aWxl IG1heSBvY2Nhc2lvbmFsbHkgY2F1c2UgZW5jb2RpbmcgaXNzdWVzIGRlcGVuZGluZyBvbiB0 aGUgb3JpZ2luYWwgY2hhcmFjdGVyIHNldCB1c2VkIHNvIGl0IGlzIGFsd2F5cyBiZXN0IHRv IHRyeSBhbmQgc3RpY2sgdG8gVGV4dGlsZSBhcyB0aGUgZG9jdW1lbnRhdGlvbiBzeXN0ZW0u PC9wPgoKCTxoMyBpZD0icmVzdG9yZSI+UmVzdG9yZSBwb2ludHM8L2gzPgoKCTxwPldoZW4g YSBwbHVnaW4gaXMgaW5zdGFsbGVkLCBhIGNvcHkgaXMga2VwdCBpbiB0aGUgZGF0YWJhc2Uu IElmIHRoZSBwbHVnaW4gY29kZSAobm90IGhlbHAgdGV4dCkgaXMgc3Vic2VxdWVudGx5IGVk aXRlZCwgdGhlIHBsdWdpbiBpcyBjb25zaWRlcmVkICYjODIyMDttb2RpZmllZCYjODIyMTs7 IGluZGljYXRlZCBpbiB0aGUgUGx1Z2luIENvbXBvc2VyIGxpc3QgcGFnZSBhbmQgQWRtaW4g LSZndDsgUGx1Z2lucyBwYWdlLiBTb21ldGltZXMgeW91IG1heSB3aXNoIHRvIHJldmVydCBh bnkgY2hhbmdlcyBiYWNrIHRvIHRoZSBhcy1pbnN0YWxsZWQgc3RhdGUgYW5kIHRoZSBDb21w b3NlciBhbGxvd3MgdGhpcy48L3A+CgoJPHA+QW55IHRpbWUgYSBwbHVnaW4gaXMgbWFya2Vk IGFzICYjODIxNjttb2RpZmllZCYjODIxNzssIHRoZSB2ZXJzaW9uIG51bWJlciBiZWNvbWVz IGNsaWNrYWJsZSBpbiB0aGUgPGEgaHJlZj0iI2xpc3RwYWdlIj5saXN0PC9hPiBwYWdlLiBD bGlja2luZyBpdCAoYW5kIGNvbmZpcm1pbmcgeW91IGFyZSBzdXJlKSB3aWxsIHdpcGUgb3V0 IGFueSBjaGFuZ2VzIHlvdSBtYWRlIGFuZCByZXR1cm4gdGhlIHBsdWdpbiB0byBpdHMgaW5z dGFsbGVkIHN0YXRlLjwvcD4KCgk8cD5EdXJpbmcgdGhlIGVkaXRpbmcgcHJvY2VzcyBvZiB5 b3VyIG93biBwbHVnaW5zLCBpdCBtYXkgYmUgdGhhdCBhdCBjZXJ0YWluIHRpbWVzIHlvdSB3 aXNoIHRvIHB1dCBhIHN0YWtlIGluIHRoZSBncm91bmQgYW5kIHNheSAmIzgyMjA7dGhpcyBp cyBteSBjdXJyZW50IGJhc2VsaW5lIHRoYXQgSSBtaWdodCB3YW50IHRvIHJldHVybiB0byBs YXRlciYjODIyMTsuIFBlcmhhcHMgeW91IGFyZSBhYm91dCB0byBtYWtlIHNvbWUgbW9uc3Rl ciBlZGl0cyBvciB0cnkgc29tZXRoaW5nIGV4cGVyaW1lbnRhbCBhbmQgd2FudCBhbiBlYXN5 IGZhbGxiYWNrIG1lY2hhbmlzbS4gVGhhdCYjODIxNztzIHdoZXJlIHRoZSAmIzgyMjA7UmVz dG9yZSBwb2ludCYjODIyMTsgY2hlY2tib3ggY29tZXMgaW4uPC9wPgoKCTxwPkJ5IGNoZWNr aW5nIHRoZSBib3ggd2hlbiB5b3Ugc2F2ZSB5b3VyIHBsdWdpbiwgdGhlIGN1cnJlbnQgY29k ZSB3aWxsIGJlY29tZSB5b3VyIG5ldyByb2xsYmFjayBwb2ludCBhbmQgdGhlIHBsdWdpbiB3 aWxsIG5vIGxvbmdlciBiZSBtYXJrZWQgJiM4MjIwO21vZGlmaWVkJiM4MjIxOy4gQW55IGNo YW5nZXMgbWFkZSBiZWZvcmVoYW5kIHdpbGwgbm90IGJlIHJlY292ZXJhYmxlIHNvIHlvdSB3 aWxsIGhhdmUgdG8gcmVseSBvbiB5b3VyIG93biBiYWNrdXBzIGlmIHlvdSB3aXNoIHRvIGdv IGJhY2sgZnVydGhlci4gQW55IGVkaXRzIHlvdSBtYWtlIGFmdGVyIGNyZWF0aW5nIGEgcmVz dG9yZSBwb2ludCBjYW4gYmUgdW5kb25lIGJ5IHZpc2l0aW5nIHRoZSBsaXN0IHBhZ2UgYW5k IGNsaWNraW5nIHRoZSB2ZXJzaW9uIG51bWJlciBuZXh0IHRvIHlvdXIgcGx1Z2luLiBDdXJy ZW50bHksIG9ubHkgb25lIHJvbGxiYWNrIHBvaW50IGNhbiBiZSBzdG9yZWQgaW4gdGhlIGRh dGFiYXNlLjwvcD4KCgk8aDMgaWQ9InNldHVwcGFnZSI+U2V0dXAgcGFnZTwvaDM+CgoJPHA+ Q2xpY2tpbmcgU2V0dXAgZnJvbSB0aGUgbWFpbiA8YSBocmVmPSIjbGlzdHBhZ2UiPmxpc3Q8 L2E+IHBhZ2UgYWxsb3dzIGFjY2VzcyB0byB0aGUgcGx1Z2luIHByZWZlcmVuY2VzLjwvcD4K Cgk8cD5Zb3UgY2FuIEluc3RhbGwgdGhlbSAmIzgyMTI7IHdoaWNoIHJldGFpbnMgYW55IHBy ZXZpb3VzIHNldHRpbmdzIGFuZCBhZGRzIG5ldyBvbmVzIHdoZW4gdXBkYXRpbmcgdGhlIHBs dWdpbiAmIzgyMTI7IG9yIERlbGV0ZSB0aGVtLiBUaGUgcGx1Z2luIGNoZWNrcyBpZiBhbGwg cmVxdWlyZWQgcHJlZmVyZW5jZXMgYXJlIGF2YWlsYWJsZSBhbmQgb2ZmZXJzIHlvdSB0aGUg Y2hvaWNlIG9mIGRlbGV0aW5nL3JlaW5zdGFsbGluZyBpbiBjYXNlIHRoZSBwcmVmcyBiZWNv bWUgY29ycnVwdGVkIG9yIG5lZWQgdXBkYXRpbmcuPC9wPgoKCTxwPk9uY2UgdGhlIHByZWZz IGFyZSBpbnN0YWxsZWQgeW91IHdpbGwgc2VlIHRoZSBhdmFpbGFibGUgb3B0aW9uczo8L3A+ CgoJPHVsPgoJCTxsaT48c3Ryb25nPlBsdWdpbiBlZGl0b3I8L3N0cm9uZz4gOiB5b3UgbWF5 IGNob29zZSB0byBlZGl0IHRoZSBjb2RlIHVzaW5nIGEgM3JkIHBhcnR5IHN5bnRheCBoaWdo bGlnaHRlci4gQ3VycmVudCBzdXBwb3J0IGlzIGZvciBFZGl0IEFyZWEgYW5kIChzb3J0IG9m KSBDb2RlUHJlc3MgKHNlZSB0aGUgPGEgaHJlZj0iI25vdGVzIj5ub3RlczwvYT4pLiBDaG9v c2UgdGhlIHN5c3RlbSBoZXJlLCB3aGVyZWJ5IHRoZSBib3ggYmVuZWF0aCBiZWNvbWVzIGF2 YWlsYWJsZSBzbyB5b3UgY2FuIHNwZWNpZnkgdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8 L3NwYW4+IHBhdGggb2YgdGhlIEVkaXRBcmVhIGluc3RhbGxhdGlvbiBvbiB5b3VyIHNlcnZl cjsgdGhpcyBpcyBub3JtYWxseSBldmVyeXRoaW5nIHVwIHRvIGFuZCBpbmNsdWRpbmcgL2Vk aXRfYXJlYS4gTm8gdHJhaWxpbmcgc2xhc2ggaXMgcmVxdWlyZWQ8L2xpPgoJCTxsaT48c3Ry b25nPlBsdWdpbiBlZGl0b3Igd2lkdGg8L3N0cm9uZz4gOiB0aGUgbnVtYmVyIG9mIGNoYXJh Y3RlcnMgd2lkZSB0byBtYWtlIHRoZSBib3hlcyBvbiB0aGUgPGEgaHJlZj0iI2VkaXRwYWdl Ij5FZGl0PC9hPiBwYWdlIHRvIHN1aXQgeW91ciBzY3JlZW4gcmVzb2x1dGlvbjwvbGk+CgkJ PGxpPjxzdHJvbmc+SGVscCBlZGl0b3I8L3N0cm9uZz4gOiB5b3UgbWF5IGNob29zZSB0byBl ZGl0IHRoZSBoZWxwIG1hbnVhbGx5IHZpYSBUZXh0aWxlIG9yIHVzZSBUaW55TUNFIGZvciBh IG1vcmUgPHNwYW4gY2xhc3M9ImNhcHMiPldZU0lXWUc8L3NwYW4+IGV4cGVyaWVuY2UuIFRo aXMgaXMgZXhwZXJpbWVudGFsIGFuZCBwcm9iYWJseSB3b24mIzgyMTc7dCB3b3JrIHJpZ2h0 IG5vdzwvbGk+CgkJPGxpPjxzdHJvbmc+PHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4g ZXhwb3J0IG9yZGVyPC9zdHJvbmc+IDogd2hlbiBzYXZpbmcgeW91ciBwbHVnaW4gaW4gdGhl IHN0YW5kYXJkIHRlbXBsYXRlIGZvcm1hdCwgdGhpcyBnb3Zlcm5zIHdoZXRoZXIgeW91IHBy ZWZlciB0aGUgY29kZSBibG9jayB0byBiZSBhdCB0aGUgdG9wIG9mIHRoZSBmaWxlIGFuZCB0 aGUgaGVscCBibG9jayBiZWxvdywgb3IgdmljZSB2ZXJzYTwvbGk+Cgk8L3VsPgoKCTxwPlRo ZSBmaW5hbCB0aHJlZSB0ZXh0Ym94ZXMgYXJlIGFsbCB2ZXJ5IHNpbWlsYXI7IHRoZXkgZGVm aW5lIHRoZSBmb3JtYXQgb2YgdGhlIGZpbGVuYW1lcyB3aGVuIHlvdSBleHBvcnQgcGx1Z2lu cy4gVGhlIGZpcnN0IGlzIGZvciB3aGVuIHlvdSBleHBvcnQgc3RhbmRhcmQgPHNwYW4gY2xh c3M9ImNhcHMiPkJBU0U8L3NwYW4+LTY0IHBsdWdpbnM7IHRoZSBzZWNvbmQgaXMgZm9yIGNv bXByZXNzZWQgcGx1Z2luczsgdGhlIHRoaXJkIGlzIGZvciBleHBvcnRpbmcgYSBzdGFuZGFy ZCA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiB0ZW1wbGF0ZS48L3A+CgoJPHA+V2hl cmV2ZXIgeW91IHR5cGUgPGNvZGU+e25hbWV9PC9jb2RlPiwgdGhlIHBsdWdpbiBuYW1lIHdp bGwgYXBwZWFyLiBTaW1pbGFybHksIDxjb2RlPnt2ZXJzaW9ufTwvY29kZT4gd2lsbCBiZSBy ZXBsYWNlZCB3aXRoIHRoZSBjdXJyZW50IHBsdWdpbiB2ZXJzaW9uIG51bWJlci4gWW91IGNh biB0eXBlIGFueXRoaW5nIHlvdSBsaWtlIGluIHRoZXNlIGJveGVzLCBidXQgaXQmIzgyMTc7 cyBtb3JlIHVzZWZ1bCB0byBpbmNsdWRlIGJvdGggb2YgdGhlIHJlcGxhY2VtZW50IHN0cmlu Z3Mgc29tZXdoZXJlIGluIGVhY2ggYm94IHNvIHlvdSBkb24mIzgyMTc7dCBnZXQgbmFtZSAv IHZlcnNpb24gY2xhc2hlcy48L3A+CgoJPHA+Rm9yIGV4YW1wbGUsIGlmIHlvdSBkb24mIzgy MTc7dCBsaWtlIHRoZSBmYWN0IHRoYXQgemlwcGVkIHBsdWdpbnMgYXJlIGV4cG9ydGVkIGFz IDxjb2RlPnBmeF9teV9wbHVnaW5fdjAuMV96aXAudHh0PC9jb2RlPiwgeW91IGNhbiBjaGFu Z2UgaXQuIFBlcmhhcHMgeW91IG1heSBwcmVmZXIgPGNvZGU+cGZ4X215X3BsdWdpbi1jb21w cmVzc2VkLTAuMS50eHQ8L2NvZGU+LiBJbiB3aGljaCBjYXNlLCBzZXQgdGhlIDJuZCBib3gg dG8gPGNvZGU+e25hbWV9LWNvbXByZXNzZWQte3ZlcnNpb259LnR4dDwvY29kZT4uPC9wPgoK CTxwPlRoZSBleHRlbnNpb24gc2hvdWxkIHVzdWFsbHkgYmUgc3BlY2lmaWVkIHNvIHlvdXIg c3lzdGVtL2Jyb3dzZXIga25vd3MgdGhlIGZpbGUmIzgyMTc7cyB0eXBlIHdoZW4gaXQgaXMg ZXhwb3J0ZWQsIGJ1dCBpdCYjODIxNztzIG5vdCBtYW5kYXRvcnkgYXMgdGhlIDxzcGFuIGNs YXNzPSJjYXBzIj5NSU1FPC9zcGFuPiB0eXBlIGlzIGdpdmVuIHNvIChnb29kKSBicm93c2Vy cyBzaG91bGQgcmVhZCB0aGF0LjwvcD4KCgk8aDMgaWQ9Im5vdGVzIj5Ob3RlczwvaDM+CgoJ PHA+TW9yZSBlZGl0b3JzIGNhbiBiZSBpbnRlZ3JhdGVkIGludG8gdGhlIENvbXBvc2VyIGZh aXJseSBlYXNpbHkuIElmIHlvdSBmaW5kIGEgZ29vZCBvbmUsIGdldCBpbiBjb250YWN0LiBC ZSB3YXJuZWQgdGhhdCB0aGUgZWRpdG9ycyBkbyB0ZW5kIHRvIHNsb3cgdGhlIHBsdWdpbiBk b3duLCBlc3BlY2lhbGx5IGFzIGNvZGUgc2l6ZSBpbmNyZWFzZXMuPC9wPgoKCTxwPlRlbnRh dGl2ZSBzdXBwb3J0IGZvciBDb2RlUHJlc3MgaXMgYWxyZWFkeSBpbiB0aGVyZSBidXQgSSBm b3VuZCBpdCBpbmV4cGxpY2FibHkgYmxhbmtlZCBvdXQgdGhlIHBsdWdpbiBjb2RlIHdoZW4g aXQgd2FzIHNhdmVkIHNvIEkmIzgyMTc7dmUgY29tbWVudGVkIG91dCBzdXBwb3J0IGZvciBu b3cuIElmIGFueW9uZSBjYW4gc2hlZCBhbnkgbGlnaHQgb24gd2h5IGl0IGRvZXMgdGhpcywg cGxlYXNlIHNwZWFrIHVwISBVbmNvbW1lbnQgdGhlIGNvZGUgb24gbGluZSA5NTkgYW5kIGNv bW1lbnQgb3V0IGxpbmUgOTYwIHRvIGVuYWJsZSBzdXBwb3J0LCB0aGVuIHZpc2l0IHRoZSBT ZXR1cCBwYWdlIGFuZCBzZWxlY3QgQ29kZVByZXNzIGZyb20gdGhlIGxpc3QuIERvbiYjODIx Nzt0IGV4cGVyaW1lbnQgd2l0aCB0aGlzIHNldHRpbmcgb24gYW4gaW1wb3J0YW50IHBsdWdp biA6LSk8L3A+CgoJPGgzIGlkPSJjaGFuZ2Vsb2ciPkNoYW5nZWxvZzwvaDM+CgoJPHVsPgoJ CTxsaT4yNSBGZWIgMDYgfCAwLjEgfCBJbml0aWFsIHJlbGVhc2U8L2xpPgoJCTxsaT4yNSBG ZWIgMDYgfCAwLjIgfCBBZGRlZCAmIzgyMTY7c2F2ZSBhcyYjODIxNzsgb3B0aW9uPC9saT4K CQk8bGk+MTcgTWFyIDA2IHwgMC4zIHwgQWRkZWQgJiM4MjE2O3NhdmUgYXMgcGhwJiM4MjE3 OzwvbGk+CgkJPGxpPjEwIEFwciAwNiB8IDAuNCB8IEFkZGVkIHN1cHBvcnQgZm9yIHBsdWdp bl9jYWNoZV9kaXI8L2xpPgoJCTxsaT4wNCBKYW4gMDggfCAwLjUgfCBGdWxsIHN1cHBvcnQg Zm9yIHN0ZCB0ZW1wbGF0ZTsgY29tcHJlc3NlZCBwbHVnaW5zOyBMaWJyYXJ5IHBsdWdpbnM7 IFRleHRpbGUgaGVscCBhbmQgc3R5bGluZzsgaW50ZWdyYXRpb24gd2l0aCBuZXQtY2FydmVy JiM4MjE3O3MgUGx1Z2luIEhlbHAgVmlld2VyPC9saT4KCQk8bGk+MDcgSmFuIDA4IHwgMC42 IHwgQnVpbHQtaW4gaGVscCB2aWV3ZXIgKHRoYW5rcyBuZXQtY2FydmVyKTsgc3VwcG9ydCBm b3IgRWRpdCBBcmVhICZhbXA7IENvZGVQcmVzcyhpc2gpICh0aGFua3MgdmFyaWFhcyk7IEhl bHAgYmxvY2svQ29kZSBibG9jayBwb3NpdGlvbiBzd2l0Y2hhYmxlIG9uIGV4cG9ydDsgYWRk ZWQgU2V0dXAgcHJlZnMgcGFnZTsgbGluZSBicmVhay9zdHlsZSBidWdmaXhlczwvbGk+CgkJ PGxpPjA4IEphbiAwOCB8IDAuNyB8IFJlLWltcG9ydGluZyBwbHVnaW5zIG5vdyByZXRhaW5z IHN0eWxlIGJsb2NrOyBhZGRlZCAmIzgyMTY7YWRtaW4gc2lkZSBwbHVnaW4gd2l0aCBjbGll bnQtc2lkZSB0eXBlJiM4MjE3OyB3YXJuaW5nOyBjaGFuZ2VkIGJ1dHRvbiBzdHlsaW5nIGFu ZCBwb3NpdGlvbnMgKGFsbCB0aGFua3MgbmV0LWNhcnZlcik7IGdUeHQoKSBwcmVmIGxhYmVs cyBhbmQgJiM4MjE2O2ludGVsbGlnZW50JiM4MjE3OyBwcmVmcyAoZ28galF1ZXJ5IGdvISk7 IGNhY2hlZCBwbHVnaW5zIG5vdyBhbHNvIGhhdmUgZGlyZWN0IGV4cG9ydCBmcm9tIEVkaXQg cGFnZTsgJiM4MjE2O2RvbiYjODIxNzt0IHRleHRpbGUgPHNwYW4gY2xhc3M9ImNhcHMiPkhU TUw8L3NwYW4+JiM4MjE3OyBjaGVjazsgbWlub3IgYnVnZml4ZXM8L2xpPgoJCTxsaT4wOSBK YW4gMDggfCAwLjcxIHwgVGV4dGFyZWEgd2lkdGggY2FuIG5vdyBiZSBjb250cm9sbGVkIGZy b20gcHJlZnMsIGFuZCBoZWlnaHQgZnJvbSBhIGRyYWcgYmFyOyBkZWZhdWx0IHdpZHRoIGlu Y3JlYXNlZCB0byAxMTAgY2hhcnM7IHB1Ymxpc2ggcGx1Z2lucyBmcm9tIHRoZSBsaXN0IHBh Z2U7IEluc3RhbGwgYnV0dG9uIHJlbW92ZWQgd2hlbiBwcmVmcyBhbGwgY29ycmVjdGx5IGlu c3RhbGxlZCAoYWxsIHRoYW5rcyB2YXJpYWFzIC8gaWJsYXN0b2ZmKTwvbGk+CgkJPGxpPjEw IEphbiAwOCB8IDAuNzIgfCBGaXhlZCBidWcgaWYgcGx1Z2luIGhhcyBubyBoZWxwOyBzdHls ZSBzZWN0aW9uIG5vIGxvbmdlciBzdG9yZWQvZXhwb3J0ZWQgaWYgaXQmIzgyMTc7cyBub3Qg aW4gdXNlICh0aGFua3MgdGhlX2dob3N0IC8gaWJsYXN0b2ZmKTwvbGk+CgkJPGxpPjExIEph biAwOCB8IDAuNzMgfCBBZGRlZCBzdXBwb3J0IGZvciA8ZW0+cmVhZGluZzwvZW0+IGFuIG9w dGlvbmFsIHJldmlzaW9uIGZyb20gdGhlIHRlbXBsYXRlIHBhcnNlciBhbmQgYXBwZW5kaW5n IGl0IHRvIHRoZSB2ZXJzaW9uICh0aGFua3MgbmV0LWNhcnZlcik7IG1vcmUgZ1R4dCgpIHN0 cmluZ3MgY29udmVydGVkPC9saT4KCQk8bGk+MjggTWFyIDA4IHwgMC43NCB8IEZpeGVkIGVt cHR5IHBsdWdpbiBjb2RlIGlmIFN0eWxlIGJsb2NrIGxlZnQgYmxhbmsgOyBmaXhlZCBzdHJp cC9zbGFzaC9lbmNvZGluZyBlcnJvcnMgKHRoYW5rcyB0aGVfZ2hvc3QvcnV1ZCkgOyBmaXhl ZCBjcmxmIG5ld2xpbmVzIGluIGNvZGUgYmxvY2sgKHRoYW5rcyBoYWtqb29uL3J1dWQpPC9s aT4KCQk8bGk+MjggTWF5IDA4IHwgMC43NSB8IEFkZGVkICYjODIxNjttb2RpZmllZCYjODIx NzsgdG8gdGhlIFZlcnNpb24gY29sdW1uICh0aGFua3MgdWxpKSA7IGFkZGVkIGFiaWxpdHkg dG8gcmVuYW1lIGZpbGVzIGluIHRoZSBwbHVnaW4gY2FjaGUgZGlyIHdoZW4gdGhlIHZlcnNp b24gY2hhbmdlczwvbGk+CgkJPGxpPjAzIE5vdiAwOCB8IDAuOCB8IEFkZGVkIHN1cHBvcnQg Zm9yIHJlY29tbWVuZGVkIHBsdWdpbiBsb2FkIG9yZGVyIDsgYWRkZWQgQWRtaW4tb25seSBw bHVnaW4gdHlwZTsgYWRkZWQgYWJpbGl0eSB0byBvdmVycmlkZSBmaWxlbmFtZSBmb3JtYXQg b24gZXhwb3J0IDsgYWRkZWQgcmVzdG9yZSBwb2ludC9yb2xsYmFjayAodGhhbmtzIG1hdmVy aWNrKSA7IGFkZGVkIGNoYXJhY3RlciBjb3VudCAodGhhbmtzIHBlcGViZSkgOyByYXRpb25h bGlzZWQgdGhlIGxpc3QgYW5kIGVkaXQgcGFnZXMgOyBzcGVkIHVwIGV4cG9ydC9zYXZlIHJv dXRpbmVzIDsgZml4ZWQgYSBmZXcgY29ybmVyIGNhc2UgYnVncyAoZS5nLiBlbXB0eSBwbHVn aW4gbmFtZSwgbWlzc2luZyBxdW90ZXMgaW4gdGVtcGxhdGUgb3B0aW9ucyk8L2xpPgoJPC91 bD4KCgk8aDIgaWQ9IndyaXRpbmciPldyaXRpbmcgYSBwbHVnaW48L2gyPgoKCTxwPllvdSBz aG91bGQgYmUgYXdhcmUgb2YgdGhlIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVy bi5jb20vdmlld3RvcGljLnBocD9pZD05ODgxIj5QbHVnaW4gQXV0aG9yIFJlc291cmNlczwv YT4gdG9waWMgb24gdGhlIFRleHRwYXR0ZXJuIFN1cHBvcnQgRm9ydW0sIGFuZCB5b3UgbWln aHQgYWxzbyB3YW50IHRvIGhhdmUgYSBsb29rIGF0IHRoZSA8YSBocmVmPSJodHRwOi8vaW5z cGlyZWQua2lldi51YS90eHAtcGx1Z2luLWNoZWF0c2hlZXQiPlRleHRQYXR0ZXJuIHBsdWdp biBjaGVhdCBzaGVldDwvYT4gYW5kIHRoZSB0dXRvcmlhbHMgYW5kIGd1aWRlcyBmb3IgPGEg aHJlZj0iaHR0cDovL3RleHRwYXR0ZXJuLm5ldC93aWtpL2luZGV4LnBocD90aXRsZT1FeHRl bmRpbmdfVGV4dHBhdHRlcm4iPkV4dGVuZGluZyBUZXh0cGF0dGVybjwvYT4gb24gVGV4dEJv b2suPC9wPgoKCTxwPkhhcHB5IHBsdWdpbiBhdXRob3JpbmcgOi0pPC9wPgoKICA8L2Rpdj4K PCEtLSAtLS0gQkVHSU4gUExVR0lOIENTUyAtLS0gLS0+CjxzdHlsZSB0eXBlPSJ0ZXh0L2Nz cyI+CiNpZWRfaGVscCB7IGxpbmUtaGVpZ2h0OjEuNSA7fQojaWVkX2hlbHAgY29kZSB7IGZv bnQtd2VpZ2h0OmJvbGQ7IGZvbnQ6IDEwNSUvMTMwJSAiQ291cmllciBOZXciLCBjb3VyaWVy LCBtb25vc3BhY2U7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGQ0M7fQojaWVkX2hlbHAgY29k ZS5zZWRfY29kZV90YWcgeyBmb250LXdlaWdodDpub3JtYWw7IGJvcmRlcjoxcHggZG90dGVk ICM5OTk7IGJhY2tncm91bmQtY29sb3I6ICNmMGU2OGM7IGRpc3BsYXk6YmxvY2s7IG1hcmdp bjoxMHB4IDEwcHggMjBweDsgcGFkZGluZzoxMHB4OyB9CiNpZWRfaGVscCBhOmxpbmssICNp ZWRfaGVscCBhOnZpc2l0ZWQgeyBjb2xvcjogYmx1ZTsgdGV4dC1kZWNvcmF0aW9uOiBub25l OyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmx1ZTsgcGFkZGluZy1ib3R0b206MXB4O30K I2llZF9oZWxwIGE6aG92ZXIsICNpZWRfaGVscCBhOmFjdGl2ZSB7IGNvbG9yOiBibHVlOyB0 ZXh0LWRlY29yYXRpb246IG5vbmU7IGJvcmRlci1ib3R0b206IDJweCBzb2xpZCBibHVlOyBw YWRkaW5nLWJvdHRvbToxcHg7fQojaWVkX2hlbHAgaDEgeyBjb2xvcjogIzM2OTsgZm9udDog MjBweCBHZW9yZ2lhLCBzYW5zLXNlcmlmOyBtYXJnaW46IDA7IHRleHQtYWxpZ246IGNlbnRl cjsgfQojaWVkX2hlbHAgaDIgeyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7IHBh ZGRpbmc6MTBweCAwIDA7IGNvbG9yOiAjMzY5OyBmb250OiAxN3B4IEdlb3JnaWEsIHNhbnMt c2VyaWY7IH0KI2llZF9oZWxwIGgzIHsgY29sb3I6ICMxMDgwMzA7IGZvbnQ6IGJvbGQgMTJw eCBBcmlhbCwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDFweDsgbWFyZ2luOiAxNXB4 IDAgMDt0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO30KPC9zdHlsZT4KPCEtLSAtLS0gRU5E IFBMVUdJTiBDU1MgLS0tIC0tPgoiO3M6MzoiY3NzIjtzOjkyNToiPHN0eWxlIHR5cGU9InRl eHQvY3NzIj4KI2llZF9oZWxwIHsgbGluZS1oZWlnaHQ6MS41IDt9CiNpZWRfaGVscCBjb2Rl IHsgZm9udC13ZWlnaHQ6Ym9sZDsgZm9udDogMTA1JS8xMzAlICJDb3VyaWVyIE5ldyIsIGNv dXJpZXIsIG1vbm9zcGFjZTsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZDQzt9CiNpZWRfaGVs cCBjb2RlLnNlZF9jb2RlX3RhZyB7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgYm9yZGVyOjFweCBk b3R0ZWQgIzk5OTsgYmFja2dyb3VuZC1jb2xvcjogI2YwZTY4YzsgZGlzcGxheTpibG9jazsg bWFyZ2luOjEwcHggMTBweCAyMHB4OyBwYWRkaW5nOjEwcHg7IH0KI2llZF9oZWxwIGE6bGlu aywgI2llZF9oZWxwIGE6dmlzaXRlZCB7IGNvbG9yOiBibHVlOyB0ZXh0LWRlY29yYXRpb246 IG5vbmU7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibHVlOyBwYWRkaW5nLWJvdHRvbTox cHg7fQojaWVkX2hlbHAgYTpob3ZlciwgI2llZF9oZWxwIGE6YWN0aXZlIHsgY29sb3I6IGJs dWU7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIGJs dWU7IHBhZGRpbmctYm90dG9tOjFweDt9CiNpZWRfaGVscCBoMSB7IGNvbG9yOiAjMzY5OyBm b250OiAyMHB4IEdlb3JnaWEsIHNhbnMtc2VyaWY7IG1hcmdpbjogMDsgdGV4dC1hbGlnbjog Y2VudGVyOyB9CiNpZWRfaGVscCBoMiB7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFj azsgcGFkZGluZzoxMHB4IDAgMDsgY29sb3I6ICMzNjk7IGZvbnQ6IDE3cHggR2VvcmdpYSwg c2Fucy1zZXJpZjsgfQojaWVkX2hlbHAgaDMgeyBjb2xvcjogIzEwODAzMDsgZm9udDogYm9s ZCAxMnB4IEFyaWFsLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMXB4OyBtYXJnaW46 IDE1cHggMCAwO3RleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7fQo8L3N0eWxlPiI7czo0OiJj b2RlIjtzOjQ0OTAzOiJpZihAdHhwaW50ZXJmYWNlID09ICdhZG1pbicpIHsKCWFkZF9wcml2 cygnaWVkX3BsdWdpbl9jb21wb3NlcicsJzEsMicpOwoJcmVnaXN0ZXJfdGFiKCdleHRlbnNp b25zJywgJ2llZF9wbHVnaW5fY29tcG9zZXInLCBpZWRfcGx1Z2luX2dUeHQoJ2llZF9wbHVn aW5fY29tcG9zZXInKSk7CglyZWdpc3Rlcl9jYWxsYmFjaygnaWVkX3BsdWdpbl9jb21wb3Nl cicsICdpZWRfcGx1Z2luX2NvbXBvc2VyJyk7CglnbG9iYWwgJGllZF9wbHVnaW5fY29tcG9z ZXIsICRpZWRfcGx1Z2luX3ByZWZzLCAkaWVkX3BsdWdpbl9nbG9iYWxzOwoJJGllZF9wbHVn aW5fZ2xvYmFscyA9IGFycmF5KAoJCSdjc3Nfc3RhcnQnID0+ICc8IS0tJywKCQknY3NzX2Vu ZCcgPT4gJy0tPicsCgkJJ2RsbV9zdGFydCcgPT4gJyMnLAoJCSdkbG1fZW5kJyA9PiAnJywK CQknc3RhcnQnID0+ICcgLS0tIEJFR0lOIFBMVUdJTiBTRUNUSU9OIC0tLScsCgkJJ2VuZCcg PT4gJyAtLS0gRU5EIFBMVUdJTiBTRUNUSU9OIC0tLScsCgkpOwoJLy8gRG91YmxlIGFycmF5 OiAxc3QgaXMgYSBsaXN0IG9mIGN1cnJlbnQgcHJlZnMgYW5kIHRoZWlyIGRlZmF1bHRzLAoJ Ly8gMm5kIGlzIGEgbGlzdCBvZiBsZWdhY3kgcHJlZnMgdGhhdCBtYXkgbmVlZCByZW1vdmlu ZyBpbiBmdXR1cmUgKGRlZmF1bHRzIGFsbCBzZXQgZW1wdHkpCgkkaWVkX3BsdWdpbl9wcmVm cyA9IGFycmF5KAoJCWFycmF5KAoJCQknaWVkX3BsdWdpbl9lZGl0b3InID0+ICdub25lJywK CQkJJ2llZF9wbHVnaW5fZWRpdG9yX3BhdGgnID0+IGh1LidqcycuRFMsCgkJCSdpZWRfcGx1 Z2luX2VkaXRvcl93aWR0aCcgPT4gJzExMCcsCgkJCSdpZWRfcGx1Z2luX2hlbHBfZWRpdG9y JyA9PiAndGV4dGlsZScsCgkJCSdpZWRfcGx1Z2luX2hlbHBfZWRpdG9yX3BhdGgnID0+IGh1 LidqcycuRFMsCgkJCSdpZWRfcGx1Z2luX291dHB1dF9vcmRlcicgPT4gJzAnLAoJCQknaWVk X3BsdWdpbl9vdXRwdXRfc2ZpbGUnID0+ICd7bmFtZX1fdnt2ZXJzaW9ufS50eHQnLAoJCQkn aWVkX3BsdWdpbl9vdXRwdXRfc2ZpbGVjJyA9PiAne25hbWV9X3Z7dmVyc2lvbn1femlwLnR4 dCcsCgkJCSdpZWRfcGx1Z2luX291dHB1dF9zZmlsZXAnID0+ICd7bmFtZX1fdnt2ZXJzaW9u fS5waHAnLAoJCSksCgkJYXJyYXkoCgkJCSdpZWRfcGx1Z2luX25vdF91c2VkX2FueV9tb3Jl X3BsYWNlaG9sZGVyJyA9PiAnJywKCQkpCgkpOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGll ZF9wbHVnaW5fY29tcG9zZXIgKCRldmVudCwgJHN0ZXApIHsKCWlmKCEkc3RlcCBvciAhaW5f YXJyYXkoJHN0ZXAsIGFycmF5KCdpZWRfcGx1Z2luX2RlbGV0ZScsCgkJCSdpZWRfcGx1Z2lu X2VkaXQnLAoJCQknaWVkX3BsdWdpbl9oZWxwJywKCQkJJ2llZF9wbHVnaW5fbGlzdCcsCgkJ CSdpZWRfcGx1Z2luX2luc3RhbGwnLAoJCQknaWVkX3BsdWdpbl9zYXZlJywKCQkJJ2llZF9w bHVnaW5fcmVzdG9yZScsCgkJCSdpZWRfc3dpdGNoX3N0YXR1cycsCgkJCSdpZWRfc2V0X29y ZGVyJywKCQkJJ2llZF9wbHVnaW5fc2V0dXAnLAoJCQknaWVkX3BsdWdpbl9wcmVmc19pbnN0 YWxsJywKCQkJJ2llZF9wbHVnaW5fcHJlZnNfcmVtb3ZlJywKCQkJJ2llZF9wbHVnaW5fcHJl ZnNfdXBkYXRlJywKCQkJJ2llZF9wbHVnaW5fY3JlYXRlX25ldycsCgkJCSdpZWRfcGx1Z2lu X3NhdmVfYXNfZmlsZScsCgkJCSdpZWRfcGx1Z2luX3NhdmVfYXNfcGhwX2ZpbGUnLAoJCQkn aWVkX3BsdWdpbl91cGxvYWQnLAoJCQknaWVkX3BsdWdpbl9oZWxwX3ZpZXdlcicsCgkJKSkp IHsKCQlpZWRfcGx1Z2luX2xpc3QoKTsKCX0gZWxzZSAkc3RlcCgpOwp9CgovLyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ci8vIFJldXJucyBhbiBhcnJheSBvZiBmaWxlbmFtZXM7IDFzdCBpcyB0aGUgc3RhbmRhcmQg cGx1Z2luLCAybmQgaXMgdGhlIGNvbXByZXNzZWQgcGx1Z2luLCAzcmQgaXMgdGhlIFBIUCB0 ZW1wbGF0ZQpmdW5jdGlvbiBpZWRfcGx1Z2luX2dldF9uYW1lKCRuYW1lLCAkdmVyc2lvbikg ewoJZ2xvYmFsICRpZWRfcGx1Z2luX3ByZWZzLCAkcHJlZnM7CgoJJG91dCA9IGFycmF5KAoJ CSgoaXNzZXQoJHByZWZzWydpZWRfcGx1Z2luX291dHB1dF9zZmlsZSddKSAmJiAhZW1wdHko JHByZWZzWydpZWRfcGx1Z2luX291dHB1dF9zZmlsZSddKSkgPyAkcHJlZnNbJ2llZF9wbHVn aW5fb3V0cHV0X3NmaWxlJ10gOiAkaWVkX3BsdWdpbl9wcmVmc1swXVsnaWVkX3BsdWdpbl9v dXRwdXRfc2ZpbGUnXSksCgkJKChpc3NldCgkcHJlZnNbJ2llZF9wbHVnaW5fb3V0cHV0X3Nm aWxlYyddKSAmJiAhZW1wdHkoJHByZWZzWydpZWRfcGx1Z2luX291dHB1dF9zZmlsZWMnXSkp ID8gJHByZWZzWydpZWRfcGx1Z2luX291dHB1dF9zZmlsZWMnXSA6ICRpZWRfcGx1Z2luX3By ZWZzWzBdWydpZWRfcGx1Z2luX291dHB1dF9zZmlsZWMnXSksCgkJKChpc3NldCgkcHJlZnNb J2llZF9wbHVnaW5fb3V0cHV0X3NmaWxlcCddKSAmJiAhZW1wdHkoJHByZWZzWydpZWRfcGx1 Z2luX291dHB1dF9zZmlsZXAnXSkpID8gJHByZWZzWydpZWRfcGx1Z2luX291dHB1dF9zZmls ZXAnXSA6ICRpZWRfcGx1Z2luX3ByZWZzWzBdWydpZWRfcGx1Z2luX291dHB1dF9zZmlsZXAn XSksCgkpOwoKCSRyZXAgPSBhcnJheSgKCQkie25hbWV9IiA9PiAkbmFtZSwKCQkie3ZlcnNp b259IiA9PiAkdmVyc2lvbiwKCSk7CgoJZm9yZWFjaCAoJG91dCBhcyAkZmlkeCA9PiAkZm5h bWUpIHsKCQkkZm5hbWUgPSBzdHJ0cigkZm5hbWUsICRyZXApOwoJCSRvdXRbJGZpZHhdID0g c21kX3Nhbml0aXplRm9yRmlsZSgkZm5hbWUpOwoJfQoKCXJldHVybiAkb3V0Owp9CgovLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCmZ1bmN0aW9uIGllZF9wbHVnaW5fbGlzdCgkbWVzc2FnZT0nJykgewoJcGFnZXRv cChnVHh0KCdlZGl0X3BsdWdpbnMnKSwkbWVzc2FnZSk7CgllY2hvIHN0YXJ0VGFibGUoJ2xp c3QnKS4KdHIodGRhKApmb3JtKApmSW5wdXQoJ3RleHQnLCduYW1lJywnJywnJywnJywnJywn MzAnLCcwJykKLiBmSW5wdXQoJ3N1Ym1pdCcsJ3N1Ym1pdCcsaWVkX3BsdWdpbl9nVHh0KCdj cmVhdGVfbmV3JyksJ3NtYWxsZXJib3gnKQouIHNJbnB1dCgnaWVkX3BsdWdpbl9jcmVhdGVf bmV3JykKLiBlSW5wdXQoJ2llZF9wbHVnaW5fY29tcG9zZXInKQopCiwnIGNvbHNwYW49IjYi IHN0eWxlPSJib3JkZXI6MDtoZWlnaHQ6NTBweCInKQoudGRhKGZvcm0oZklucHV0KCdzdWJt aXQnLCAnc3VibWl0JywgaWVkX3BsdWdpbl9nVHh0KCdzZXR1cCcpLCAncHVibGlzaCcpLnNJ bnB1dCgnaWVkX3BsdWdpbl9zZXR1cCcpLmVJbnB1dCgnaWVkX3BsdWdpbl9jb21wb3Nlcicp KSwnIGNvbHNwYW49IjYiIHN0eWxlPSJib3JkZXI6MDtoZWlnaHQ6NTBweCInKSkuCmFzc0hl YWQoJ3BsdWdpbicsJ2F1dGhvcicsZ1R4dCgndmVyc2lvbicpLicgKCcuZ1R4dCgncGx1Z2lu X21vZGlmaWVkJykuJyknLCdkZXNjcmlwdGlvbicsJ3B1Ymxpc2gnLCdvcmRlcicsJ2FjdGl2 ZScsJycpOwoKCSRycyA9IHNhZmVfcm93c19zdGFydCgiKiIsInR4cF9wbHVnaW4iLCAiMT0x IG9yZGVyIGJ5IG5hbWUiKTsKCgl3aGlsZSAoJGEgPSBuZXh0Um93KCRycykpIHsKCQlleHRy YWN0KCRhKTsKCQkkZW5hbWUgPSAnPGEgaHJlZj0iP2V2ZW50PWllZF9wbHVnaW5fY29tcG9z ZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9lZGl0JiMzODtuYW1lPScuJG5hbWUuJyI+Jy4kbmFt ZS4nPC9hPic7CgkJJGhsaW5rID0gKCRoZWxwKSA/ICc8YSBocmVmPSI/ZXZlbnQ9aWVkX3Bs dWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2luX2hlbHBfdmlld2VyJiMzODtuYW1l PScuJG5hbWUuJyI+Jy5nVHh0KCdoZWxwJykuJzwvYT4nIDogJ05vbmUnOwoJCSRvTGluayA9 IGllZF9wbHVnaW5fb3JkZXJfZm9ybSgkbmFtZSwgJGxvYWRfb3JkZXIpOwoJCSRmbmFtZXMg PSBpZWRfcGx1Z2luX2dldF9uYW1lKCRuYW1lLCAkdmVyc2lvbik7CgkJJHB1YnRhZyA9IHRh ZyhnVHh0KCdwdWJsaXNoJyksJ2EnLCcgaHJlZj0iP2V2ZW50PWllZF9wbHVnaW5fY29tcG9z ZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9zYXZlX2FzX2ZpbGUmIzM4O25hbWU9Jy4kbmFtZS4n IiB0aXRsZT0iJyAuIGllZF9wbHVnaW5fZ1R4dCgnZXhwb3J0JykgLicgJy4kZm5hbWVzWzBd LiAnIicpOwoJCSRwdWJ6dGFnID0gdGFnKGllZF9wbHVnaW5fZ1R4dCgnY29tcHJlc3MnKSwn YScsJyBocmVmPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1 Z2luX3NhdmVfYXNfZmlsZSYjMzg7bmFtZT0nLiRuYW1lLicmIzM4O3ppcD10cnVlIiB0aXRs ZT0iJyAuIGllZF9wbHVnaW5fZ1R4dCgnZXhwb3J0JykgLicgJy4kZm5hbWVzWzFdLiAnIicp OwoJCSRtb2RpZmllZCA9IChzdHJ0b2xvd2VyKCRjb2RlKSAhPSAoc3RydG9sb3dlcigkY29k ZV9yZXN0b3JlKSkpOwoKCQllY2hvIHRyKHRkKCRlbmFtZSkKLnRkKCggKCRhdXRob3JfdXJp KSA/ICc8YSBocmVmPSInLiRhdXRob3JfdXJpLiciPicuJGF1dGhvci4nPC9hPicgOiAkYXV0 aG9yKSwxNjApCi50ZCgoKCRtb2RpZmllZCkgPyAnPGEgaHJlZj0iaW5kZXgucGhwP2V2ZW50 PWllZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9yZXN0b3JlJiMzODtu YW1lPScuJG5hbWUuJyIgdGl0bGU9IicuaWVkX3BsdWdpbl9nVHh0KCdyZXN0b3JlX2hlbHAn KS4nIiBvbmNsaWNrPSJyZXR1cm4gdmVyaWZ5KFwnJy5pZWRfcGx1Z2luX2dUeHQoJ3Jlc3Rv cmVfdmVyaWZ5JywgYXJyYXkoJ3tuYW1lfScgPT4gJG5hbWUpKS4nXCcpOyI+Jy4kdmVyc2lv bi4nPC9hPicgOiAkdmVyc2lvbikgLiAoKCRtb2RpZmllZCkgPyAnJm5ic3A7KCcuZ1R4dCgn eWVzJykuJyknIDogJycpLDEwKQoudGQoJGRlc2NyaXB0aW9uLDI2MCkKLnRkKCRwdWJ0YWcg LicgfCAnLiAkcHVienRhZyAuJyB8ICcuICRobGluaykKLnRkKCRvTGluaywgNDApCi50ZChp ZWRfc3RhdHVzX2xpbmsoJHN0YXR1cywkbmFtZSx5ZXNfbm8oJHN0YXR1cykpLDMwKQoKLnRk KGRMaW5rKCdpZWRfcGx1Z2luX2NvbXBvc2VyJywnaWVkX3BsdWdpbl9kZWxldGUnLCduYW1l JywkbmFtZSksMzApCik7CgkJdW5zZXQoJG5hbWUsJHBhZ2UsJGRlbGV0ZWxpbmspOwoJfQoK CWlmICghZW1wdHkoJEdMT0JBTFNbJ3ByZWZzJ11bJ3BsdWdpbl9jYWNoZV9kaXInXSkpIHsK CQkkZmlsZW5hbWVzID0gYXJyYXkoKTsKCQkkZGlyID0gZGlyKCRHTE9CQUxTWydwcmVmcydd WydwbHVnaW5fY2FjaGVfZGlyJ10pOwoJCXdoaWxlICgkZmlsZSA9ICRkaXItPnJlYWQoKSkg ewoJCQlpZigkZmlsZSAhPSAiLiIgJiYgJGZpbGUgIT0gIi4uIikgewoJCQkJJGZpbGVhZGRy ID0gJEdMT0JBTFNbJ3ByZWZzJ11bJ3BsdWdpbl9jYWNoZV9kaXInXS5EUy4kZmlsZTsKCQkJ CWlmICghaXNfZGlyKCRmaWxlYWRkcikpIHsKCQkJCQkkZmlsZW5hbWVzW109JGZpbGU7CgkJ CQl9CgkJCX0KCQl9CgkJJGRpci0+Y2xvc2UoKTsKCQkoJGZpbGVuYW1lcyk/bmF0Y2FzZXNv cnQoJGZpbGVuYW1lcyk6Jyc7CgkJZWNobyB0cigKCQl0ZGEoCgkJdGFnKGllZF9wbHVnaW5f Z1R4dCgncnVuX2Zyb20nKS4nICcudGFnKCdwbHVnaW5fY2FjaGVfZGlyJywnYWNyb255bScs JyB0aXRsZT0iJy4kR0xPQkFMU1sncHJlZnMnXVsncGx1Z2luX2NhY2hlX2RpciddLiciIHN0 eWxlPSJib3JkZXItYm90dG9tOjFweCBkYXNoZWQgYmxhY2siJykuJzonLCdoMScpCgkJLCcg Y29sc3Bhbj0iOCIgc3R5bGU9ImJvcmRlcjowO2hlaWdodDo1MHB4O3RleHQtYWxpZ246bGVm dCInKQoKCQkpOwoKCQllY2hvIGFzc0hlYWQoJ3BsdWdpbicsJ2F1dGhvcicsJ3ZlcnNpb24n LCdkZXNjcmlwdGlvbicsJ3B1Ymxpc2gnLCcnLCcnKTsKCQlmb3JlYWNoKCRmaWxlbmFtZXMg YXMgJGZpbGVuYW1lKSB7CgkJCSRmaWxlZXh0PSBhcnJheV9wb3AoZXhwbG9kZSAoJy4nLCRm aWxlbmFtZSkpOwoJCQlpZiAoJGZpbGVleHQ9PSdwaHAnKSB7CgkJCQkkYmFzZW5hbWU9YmFz ZW5hbWUoJGZpbGVuYW1lKTsKCQkJCSRwbHVnaW4gPSBpZWRfcGx1Z2luX3JlYWRfZmlsZSgk R0xPQkFMU1sncHJlZnMnXVsncGx1Z2luX2NhY2hlX2RpciddLkRTLiRmaWxlbmFtZSk7CgkJ CQkkaGxpbmsgPSAoJHBsdWdpblsnaGVscCddKSA/ICc8YSBocmVmPSI/ZXZlbnQ9aWVkX3Bs dWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2luX2hlbHBfdmlld2VyJiMzODtmaWxl bmFtZT0nLiRmaWxlbmFtZS4nIj4nLmdUeHQoJ2hlbHAnKS4nPC9hPicgOiAnTm9uZSc7CgkJ CQkkZWZpbGUgPSAnPGEgaHJlZj0iP2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0 ZXA9aWVkX3BsdWdpbl9lZGl0JiMzODtmaWxlbmFtZT0nLiRmaWxlbmFtZS4nIj4nLiRwbHVn aW5bJ25hbWUnXS4nPC9hPic7CgkJCQkkZm5hbWVzID0gaWVkX3BsdWdpbl9nZXRfbmFtZSgk cGx1Z2luWyduYW1lJ10sICRwbHVnaW5bJ3ZlcnNpb24nXSk7CgoJCQkJZWNobyB0cigKCQkJ CXRkKAoJCQkJdGFnKCRmaWxlbmFtZSwnZGl2JywnIHN0eWxlPSJjb2xvcjpncmF5O2JvcmRl cjowO3BhZGRpbmc6MXB4IDJweCAycHggMXB4OyInKQoJCQkJLihpc3NldCgkcGx1Z2luWydu YW1lJ10pPyRlZmlsZS4nPGJyIC8+JzonJykuJyAnCgkJCQkpCgkJCQkudGQoCgkJCQkoIGlz c2V0KCRwbHVnaW5bJ2F1dGhvcl91cmknXSk/JzxhIGhyZWY9IicuJHBsdWdpblsnYXV0aG9y X3VyaSddLiciPic6JycgKSAuCgkJCQkoIGlzc2V0KCRwbHVnaW5bJ2F1dGhvciddKT8kcGx1 Z2luWydhdXRob3InXTonJm5ic3A7JyApLgoJCQkJKCBpc3NldCgkcGx1Z2luWydhdXRob3Jf dXJpJ10pPyc8L2E+JzonJyApLCAxNjAKCQkJCSkKCQkJCS50ZCgoaXNzZXQoJHBsdWdpblsn dmVyc2lvbiddKT8kcGx1Z2luWyd2ZXJzaW9uJ106JyZuYnNwOycpLDEwKQoJCQkJLnRkKChp c3NldCgkcGx1Z2luWydkZXNjcmlwdGlvbiddKT8kcGx1Z2luWydkZXNjcmlwdGlvbiddOicm bmJzcDsnKSwyNjApCgkJCQkudGQoKGlzc2V0KCRwbHVnaW5bJ25hbWUnXSk/CgkJCQl0YWco Z1R4dCgncHVibGlzaCcpLCdhJywnIGhyZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2Vy JiMzODtzdGVwPWllZF9wbHVnaW5fc2F2ZV9hc19maWxlJiMzODtmaWxlbmFtZT0nLiRmaWxl bmFtZS4nIiB0aXRsZT0iJyAuIGllZF9wbHVnaW5fZ1R4dCgnZXhwb3J0JykgLicgJy4kZm5h bWVzWzBdLiAnIicpCgkJCQkJCS4nIHwgJy50YWcoaWVkX3BsdWdpbl9nVHh0KCdjb21wcmVz cycpLCdhJywnIGhyZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtzdGVwPWll ZF9wbHVnaW5fc2F2ZV9hc19maWxlJiMzODtmaWxlbmFtZT0nLiRmaWxlbmFtZS4nJiMzODt6 aXA9dHJ1ZSIgdGl0bGU9IicgLiBpZWRfcGx1Z2luX2dUeHQoJ2V4cG9ydCcpIC4nICcuJGZu YW1lc1sxXS4gJyInKToKCQkJCXRhZygnJm5ic3A7Jywnc3BhbicsJyBzdHlsZT0iY29sb3I6 Z3JheSInKQoJCQkJKS4nIHwgJy4kaGxpbmspCgkJCQkudGQoJycpCgkJCQkudGQoJycpCgkJ CQkpOwoJCQl9CgkJfQoJfQoKCWVjaG8gdHIoCnRkYSgKJzxmb3JtIGVuY3R5cGU9Im11bHRp cGFydC9mb3JtLWRhdGEiIGFjdGlvbj0iaW5kZXgucGhwIiBtZXRob2Q9InBvc3QiPicuCnN0 YXJ0VGFibGUoJ2VkaXQnLCdsZWZ0JykuCnRyKHRkYSggaElucHV0KCdNQVhfRklMRV9TSVpF JywxMDAwMDAwKS4KZ3JhZihpZWRfcGx1Z2luX2dUeHQoJ3VwbG9hZF9waHAnKS4nOiAnLgpm SW5wdXQoJ2ZpbGUnLCd0aGVmaWxlJywnJywnZWRpdCcpLgpmSW5wdXQoJ3N1Ym1pdCcsJ3N1 Ym1pdCcsZ1R4dCgndXBsb2FkJyksJ3NtYWxsZXJib3gnKSkuCmVJbnB1dCgnaWVkX3BsdWdp bl9jb21wb3NlcicpLgpzSW5wdXQoJ2llZF9wbHVnaW5fdXBsb2FkJykgLCAnIHN0eWxlPSJi b3JkZXI6MHB4IHNvbGlkIGdyYXkiJyApLgp0ZGEoIHRhZyhpZWRfcGx1Z2luX2dUeHQoJ25h bWUnKSwgJ2Fjcm9ueW0nLCcgdGl0bGU9IicuaWVkX3BsdWdpbl9nVHh0KCduYW1lX3Rvb2x0 aXAnKS4nIiBzdHlsZT0iYm9yZGVyLWJvdHRvbToxcHggZGFzaGVkIGJsYWNrIicpLic6ICcu IGZJbnB1dCgndGV4dCcsJ25hbWUnLCd4eHhfeHh4eHh4JywnJywnJywnJywnMzAnLCcwJykg LCAnIHN0eWxlPSJib3JkZXI6MHB4IHNvbGlkIGdyYXk7dmVydGljYWwtYWxpZ246bWlkZGxl OyInICkpLgplbmRUYWJsZSgpLgonPC9mb3JtPicKLCcgY29sc3Bhbj0iOCIgc3R5bGU9ImJv cmRlcjowO2hlaWdodDo1MHB4O3RleHQtYWxpZ246bGVmdCInKQopOwoJZWNobyBlbmRUYWJs ZSgpOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGllZF9zdGF0dXNfbGluaygkc3RhdHVzLCRu YW1lLCRsaW5rdGV4dCkgewoJJG91dCA9ICc8YSBocmVmPSJpbmRleC5waHA/JzsKCSRvdXQg Lj0gJ2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3N3aXRjaF9zdGF0 dXMmIzM4O3N0YXR1cz0nLgoJJHN0YXR1cy4nJiMzODtuYW1lPScudXJsZW5jb2RlKCRuYW1l KS4nIic7Cgkkb3V0IC49ICc+Jy4kbGlua3RleHQuJzwvYT4nOwoJcmV0dXJuICRvdXQ7Cn0K Ci8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVkX3N3aXRjaF9zdGF0dXMoKSB7CglleHRyYWN0KGRv U2xhc2goZ3BzYShhcnJheSgnbmFtZScsJ3N0YXR1cycpKSkpOwoJJGNoYW5nZSA9ICgkc3Rh dHVzKSA/IDAgOiAxOwoJc2FmZV91cGRhdGUoInR4cF9wbHVnaW4iLCAic3RhdHVzPSRjaGFu Z2UiLCAibmFtZT0nJG5hbWUnIik7CglpZWRfcGx1Z2luX2xpc3QoZ1R4dCgncGx1Z2luX3Nh dmVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJG5hbWUpKSk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rp b24gaWVkX3NldF9vcmRlcigpIHsKCWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCduYW1l JywgJ2xvYWRfb3JkZXInKSkpKTsKCSRvcmRlciA9IG1pbihtYXgoIGludHZhbCgkbG9hZF9v cmRlciksIDEpLCA5KTsKCXNhZmVfdXBkYXRlKCd0eHBfcGx1Z2luJywgImxvYWRfb3JkZXIg PSAkbG9hZF9vcmRlciIsICJuYW1lID0gJyRuYW1lJyIpOwoJaWVkX3BsdWdpbl9saXN0KGdU eHQoJ3BsdWdpbl9zYXZlZCcsIGFycmF5KCd7bmFtZX0nID0+ICRuYW1lKSkpOwp9CgovLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCmZ1bmN0aW9uIGllZF9wbHVnaW5fb3JkZXJfZm9ybSgkbmFtZSwgJGxvYWRfb3Jk ZXIpIHsKCWZvciAoJGkgPSAxOyAkaSA8PSA5OyAkaSsrKSAkb3JkZXJzWyRpXSA9ICRpOwoJ cmV0dXJuIGZvcm0oCgkJZUlucHV0KCdpZWRfcGx1Z2luX2NvbXBvc2VyJykubi4KCQlzSW5w dXQoJ2llZF9zZXRfb3JkZXInKS5uLgoJCWhJbnB1dCgnbmFtZScsICRuYW1lKS5uLgoJCXNl bGVjdElucHV0KCdsb2FkX29yZGVyJywgJG9yZGVycywgJGxvYWRfb3JkZXIsIDAsIDEpCgkJ LCdkaXNwbGF5OmlubGluZScKCSk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVkX3BsdWdp bl9kZWxldGUoKSB7CgkkbmFtZSA9IGRvU2xhc2gocHMoJ25hbWUnKSk7CglzYWZlX2RlbGV0 ZSgidHhwX3BsdWdpbiIsIm5hbWU9JyRuYW1lJyIpOwoJaWVkX3BsdWdpbl9saXN0KGdUeHQo J3BsdWdpbl9kZWxldGVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJG5hbWUpKSk7Cn0KCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KZnVuY3Rpb24gaWVkX3BsdWdpbl9yZXN0b3JlKCkgewoJJG5hbWUgPSBkb1NsYXNo KGdwcygnbmFtZScpKTsKCXNhZmVfdXBkYXRlKCJ0eHBfcGx1Z2luIiwiY29kZSA9IGNvZGVf cmVzdG9yZSIsIm5hbWU9JyRuYW1lJyIpOwoJaWVkX3BsdWdpbl9saXN0KGllZF9wbHVnaW5f Z1R4dCgncmVzdG9yZWQnLCBhcnJheSgne25hbWV9JyA9PiAkbmFtZSkpKTsKfQoKLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQpmdW5jdGlvbiBpZWRfcGx1Z2luX2VkaXQoJG1lc3NhZ2U9JycsJG5ld2ZpbGU9Jycp IHsKCSRzaXRlX2RpciA9IGh1OwoJJG5ld25hbWUgPSB0cmltKGdwcygnbmV3bmFtZScpKTsK CSRuYW1lID0gZW1wdHkoJG5ld25hbWUpID8gZ3BzKCduYW1lJykgOiAkbmV3bmFtZTsKCXBh Z2V0b3AoZ1R4dCgnZWRpdF9wbHVnaW5zJyksJG1lc3NhZ2UpOwoJZWNobyBpZWRfaW5zZXJ0 X2VkaXRvcnMoKTsKCSR0aGVGaWxlID0gKCRuZXdmaWxlKSA/ICRuZXdmaWxlIDogKChncHMo J2ZpbGVuYW1lJykpID8gZ3BzKCdmaWxlbmFtZScpIDogJG5hbWUpOwoJZWNobyBpZWRfcGx1 Z2luX2VkaXRfZm9ybSgkdGhlRmlsZSwgZ3BzKCdmaWxlbmFtZScpPyAxOiAwKTsKfQoKLy8g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQpmdW5jdGlvbiBpZWRfcGx1Z2luX2VkaXRfZm9ybSgkbmFtZT0nJywkZWRpdGZp bGU9MCkgewoJZ2xvYmFsICRwcmVmcywgJGllZF9wbHVnaW5fcHJlZnMsICRpZWRfcGx1Z2lu X2dsb2JhbHM7CglpZiAoISRlZGl0ZmlsZSkgewoJCSRycyA9IHNhZmVfcm93KCJhdXRob3Is IGF1dGhvcl91cmksIHZlcnNpb24sIGRlc2NyaXB0aW9uLCBjb2RlLCBoZWxwLCBzdGF0dXMs IHR5cGUsIGxvYWRfb3JkZXIiLCAidHhwX3BsdWdpbiIsICJuYW1lPSckbmFtZSciKTsKCQll eHRyYWN0KCRycyk7CgoJCWxpc3QoJGNzcywkaGVscCkgPSAoJGhlbHApID8gaWVkX3BsdWdp bl9leHRyYWN0X2h1bmsoJGhlbHAsICJDU1MiLCAiPCEtLXwtLT4iLCB0cnVlKSA6IGFycmF5 KCcnLCRoZWxwKTsKCX0gZWxzZSB7CgkJJHBsdWdpbiA9IGllZF9wbHVnaW5fcmVhZF9maWxl KCRHTE9CQUxTWydwcmVmcyddWydwbHVnaW5fY2FjaGVfZGlyJ10uRFMuJG5hbWUpOwoJCSRm aWxlbmFtZSA9ICRuYW1lOwoJCSRmaWxlZXh0ID0gYXJyYXlfcG9wKCRuYW1lPWV4cGxvZGUg KCcuJywkbmFtZSkpOwoJCSRuYW1lID0gaW1wbG9kZSgkbmFtZSk7CgkJZXh0cmFjdCgkcGx1 Z2luKTsKCQkkc3RhdHVzID0gKCRmaWxlZXh0PT0ncGhwJyk/IDE6IDA7Cgl9CgkkZWR3aWR0 aCA9IChpc3NldCgkcHJlZnNbJ2llZF9wbHVnaW5fZWRpdG9yX3dpZHRoJ10pICYmIGlzX251 bWVyaWMoJHByZWZzWydpZWRfcGx1Z2luX2VkaXRvcl93aWR0aCddKSkgPyAkcHJlZnNbJ2ll ZF9wbHVnaW5fZWRpdG9yX3dpZHRoJ10gOiAkaWVkX3BsdWdpbl9wcmVmc1swXVsnaWVkX3Bs dWdpbl9lZGl0b3Jfd2lkdGgnXTsKCWxpc3QgKCRzdGFydF9jc3MsICRlbmRfY3NzKSA9IGll ZF9wbHVnaW5fbWFrZV9tYXJrZXJzKCJDU1MiLCAkaWVkX3BsdWdpbl9nbG9iYWxzWydjc3Nf c3RhcnQnXSwgJGllZF9wbHVnaW5fZ2xvYmFsc1snY3NzX2VuZCddKTsKCSRwbHVnaW5bJ25h bWUnXSA9ICRuYW1lOwoJJHBsdWdpblsnYXV0aG9yJ10gPSAkYXV0aG9yOwoJJHBsdWdpblsn YXV0aG9yX3VyaSddID0gJGF1dGhvcl91cmk7CgkkcGx1Z2luWyd2ZXJzaW9uJ10gPSAkdmVy c2lvbjsKCSRwbHVnaW5bJ2Rlc2NyaXB0aW9uJ10gPSAkZGVzY3JpcHRpb247CgkkcGx1Z2lu WydoZWxwJ10gPSBpZWRfcGx1Z2luX3RleHRpbGUoJGhlbHAsICRjc3MsICRzdGFydF9jc3Ms ICRlbmRfY3NzKTsKCSRwbHVnaW5bJ2NvZGUnXSA9ICRjb2RlOwoJJHBsdWdpblsndHlwZSdd ID0gJHR5cGU7CgkkcGx1Z2luWydvcmRlciddID0gJGxvYWRfb3JkZXI7CgkkcGx1Z2luWydt ZDUnXSA9IG1kNSggJHBsdWdpblsnY29kZSddICk7Cglmb3IgKCRpID0gMTsgJGkgPD0gOTsg JGkrKykgJG9yZGVyc1skaV0gPSAkaTsKCgkkZGlzdHJpYnV0aW9uPSc8dGV4dGFyZWEgbmFt ZT0iZGlzdHJpYnV0aW9uIiByb3dzPSIxIiBjb2xzPSInLiRlZHdpZHRoLiciIG9uY2xpY2s9 InRoaXMuc2VsZWN0KCkiPicuYmFzZTY0X2VuY29kZShzZXJpYWxpemUoJHBsdWdpbikpLic8 L3RleHRhcmVhPic7CgoJJGZuYW1lcyA9IGllZF9wbHVnaW5fZ2V0X25hbWUoJHBsdWdpblsn bmFtZSddLCAkcGx1Z2luWyd2ZXJzaW9uJ10pOwoJJG5hbWVkTGluayA9IChpc3NldCgkZmls ZW5hbWUpKSA/ICdmaWxlbmFtZT0nLiRmaWxlbmFtZSA6ICduYW1lPScuJG5hbWU7Ci8vCSRu YW1lZEZpbGUgPSAoaXNzZXQoJGZpbGVuYW1lKSkgPyAkZmlsZW5hbWUgOiAkZm5hbWVzWzJd OwovLwkkbmFtZWRGaWxlTm9FeHQgPSBwcmVnX3JlcGxhY2UoJy8oLispXC4uKiQvJywgJyQx JywgJG5hbWVkRmlsZSk7CgoJJHNsaW5rID0gJzxhIGhyZWY9Ij9ldmVudD1pZWRfcGx1Z2lu X2NvbXBvc2VyJiMzODtzdGVwPWllZF9wbHVnaW5fc2F2ZV9hc19maWxlJiMzODsnLiRuYW1l ZExpbmsuJyI+JyAuaWVkX3BsdWdpbl9nVHh0KCdleHBvcnQnKSAuJyAnLiAkZm5hbWVzWzBd LiAnPC9hPic7Cgkkc3ppcGxpbmsgPSAnPGEgaHJlZj0iP2V2ZW50PWllZF9wbHVnaW5fY29t cG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9zYXZlX2FzX2ZpbGUmIzM4OycuJG5hbWVkTGlu ay4nJiMzODt6aXA9dHJ1ZSI+JyAuIGllZF9wbHVnaW5fZ1R4dCgnZXhwb3J0JykgLicgJy4g JGZuYW1lc1sxXS4gJyAoY29tcHJlc3NlZCk8L2E+JzsKCSRzcGhwbGluayA9ICc8YSBocmVm PSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2luX3NhdmVf YXNfcGhwX2ZpbGUmIzM4OycuJG5hbWVkTGluay4nIj4nIC4gaWVkX3BsdWdpbl9nVHh0KCdz YXZlX2FzJykgLicgJy4gJGZuYW1lc1syXS4gJzwvYT4nOwoJJHZoZWxwbGlua2Z1bGwgPSAo JGhlbHApID8gJzxhIGhyZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtzdGVw PWllZF9wbHVnaW5faGVscF92aWV3ZXImIzM4OycuJG5hbWVkTGluay4nIj5bICcuc3Ryb25n KGdUeHQoJ3ZpZXcnKS4nICcuZ1R4dCgnaGVscCcpKS4nIF08L2E+JyA6ICcnOwoKCSRuZXdu YW1lID0gZklucHV0KCd0ZXh0JywnbmV3bmFtZScsJG5hbWUsJ2VkaXQnLCcnLCcnLCRlZHdp ZHRoIC0gKGludCkoJGVkd2lkdGgqMC4zKSwnMicpOwoJJGF1dGhvciA9IGZJbnB1dCgndGV4 dCcsJ2F1dGhvcicsJGF1dGhvciwnZWRpdCcsJycsJycsJGVkd2lkdGgsJzInKTsKCSRhdXRo b3JfdXJpID0gZklucHV0KCd0ZXh0JywnYXV0aG9yX3VyaScsJGF1dGhvcl91cmksJ2VkaXQn LCcnLCcnLCRlZHdpZHRoLCcyJyk7CgkkdmVyc2lvbiA9IGZJbnB1dCgndGV4dCcsJ3ZlcnNp b24nLCR2ZXJzaW9uLCdlZGl0JywnJywnJywkZWR3aWR0aCAtIChpbnQpKCRlZHdpZHRoKjAu MyksJzInKSAuICcmIzE2MDsmIzE2MDsnLiAoKCRlZGl0ZmlsZSkgPyBjaGVja2JveCgncmVu YW1lX2ZpbGUnLCAnMScsIDAsICcnLCdyZW5hbWVfZmlsZScpIC4gJyA8bGFiZWwgZm9yPSJy ZW5hbWVfZmlsZSI+Jy5pZWRfcGx1Z2luX2dUeHQoJ3JlbmFtZV9maWxlJykuJzwvbGFiZWw+ JyA6IGNoZWNrYm94KCdyZXN0b3JlX3BvaW50JywgJzEnLCAwLCAnJywncmVzdG9yZV9wb2lu dCcpIC4gJyA8bGFiZWwgZm9yPSJyZXN0b3JlX3BvaW50Ij4nLmllZF9wbHVnaW5fZ1R4dCgn cmVzdG9yZV9wb2ludCcpLic8L2xhYmVsPicpOwoJJGRlc2NyaXB0aW9uID1mSW5wdXQoJ3Rl eHQnLCdkZXNjcmlwdGlvbicsJGRlc2NyaXB0aW9uLCdlZGl0JywnJywnJywkZWR3aWR0aCwn MicpOwoJJGNvZGUgPSAnPHRleHRhcmVhIG5hbWU9ImNvZGUiIGlkPSJwbHVnaW5fZWRpdG9y IiByb3dzPSIzMCIgY29scz0iJy4kZWR3aWR0aC4nIiBjbGFzcz0iY29kZXByZXNzIHBocCIg bWF4bGVuZ3RoPSI2NTUzNSI+Jy5odG1sc3BlY2lhbGNoYXJzKCRjb2RlKS4nPC90ZXh0YXJl YT48ZGl2IGNsYXNzPSJjaGFyc1JlbWFpbiI+PC9kaXY+JzsKCSRoZWxwID0gJzx0ZXh0YXJl YSBuYW1lPSJoZWxwIiByb3dzPSIzMCIgY29scz0iJy4kZWR3aWR0aC4nIiBjbGFzcz0ibWNl RWRpdG9yIiBtYXhsZW5ndGg9IjYzMDAwIj4nLmh0bWxzcGVjaWFsY2hhcnMoJGhlbHApLic8 L3RleHRhcmVhPjxkaXYgY2xhc3M9ImNoYXJzUmVtYWluIj48L2Rpdj4nOwoJJGNzcyA9ICc8 dGV4dGFyZWEgbmFtZT0iY3NzIiByb3dzPSIxNSIgY29scz0iJy4kZWR3aWR0aC4nIiBtYXhs ZW5ndGg9IjI1MzUiPicuaHRtbHNwZWNpYWxjaGFycygkY3NzKS4nPC90ZXh0YXJlYT48ZGl2 IGNsYXNzPSJjaGFyc1JlbWFpbiI+PC9kaXY+JzsKCSRwbHVnc3RhdHVzID0gKCEkZWRpdGZp bGUpID8gJyYjMTYwOyYjMTYwOycuY2hlY2tib3goJ3N0YXR1cycsMSwkc3RhdHVzLCAnJywn c3RhdHVzJykuICcgPGxhYmVsIGZvcj0ic3RhdHVzIj4nLmllZF9wbHVnaW5fZ1R4dCgnZW5h YmxlJykuJzwvbGFiZWw+JyA6ICcnOwoJJHBsdWd0eXBlID0gcmFkaW8oJ3R5cGUnLDAsKCgk dHlwZT09MCk/MTowKSkuaWVkX3BsdWdpbl9nVHh0KCd0eXBlXzAnKS4iICIKCQkuIHJhZGlv KCd0eXBlJywxLCgoJHR5cGU9PTEpPzE6MCkpLmllZF9wbHVnaW5fZ1R4dCgndHlwZV8xJyku IiAiCgkJLiByYWRpbygndHlwZScsMiwoKCR0eXBlPT0yKT8xOjApKS5pZWRfcGx1Z2luX2dU eHQoJ3R5cGVfMicpLiIgIgoJCS4gcmFkaW8oJ3R5cGUnLDMsKCgkdHlwZT09Myk/MTowKSku aWVkX3BsdWdpbl9nVHh0KCd0eXBlXzMnKTsKCSRwbHVnb3JkZXIgPSBzZWxlY3RJbnB1dCgn bG9hZF9vcmRlcicsICRvcmRlcnMsICRsb2FkX29yZGVyLCAwLCAwKTsKCgkkc3ViID0gZklu cHV0KCdzdWJtaXQnLCcnLGdUeHQoJ3NhdmUnKSwncHVibGlzaCcpOwoJcmV0dXJuIGZvcm0o c3RhcnRUYWJsZSgnZWRpdCcpCgkuIHRyKCBmTGFiZWxDZWxsKCcmbmJzcDsnKSAuIHRkKCRz dWIgLiAkdmhlbHBsaW5rZnVsbCkpCgkuIHRyKCBmTGFiZWxDZWxsKCAncGx1Z2luJyApIC4g dGQoJG5ld25hbWUgLiAkcGx1Z3N0YXR1cyAuICggKGlzc2V0KCRmaWxlbmFtZSkpID8gdGFn KCcmIzE2MDsmIzE2MDsoJy4kZmlsZW5hbWUuJyknLCdzcGFuJywnIHN0eWxlPSJjb2xvcjpn cmF5OyInKS5oSW5wdXQoJ2ZpbGVuYW1lJywkZmlsZW5hbWUpIDogJycgKSApKQoJLiB0cigg ZkxhYmVsQ2VsbCggaWVkX3BsdWdpbl9nVHh0KCdwbHVnaW5fY29kZScpICkgLiB0ZCgkY29k ZSkpCgkuIHRyKCBmTGFiZWxDZWxsKCBpZWRfcGx1Z2luX2dUeHQoJ3R5cGUnKSApIC4gdGQo JHBsdWd0eXBlKSkKCS4gdHIoIGZMYWJlbENlbGwoIGllZF9wbHVnaW5fZ1R4dCgnbG9hZF9v cmRlcicpICkgLiB0ZCgkcGx1Z29yZGVyLicmIzE2MDsmIzE2MDsnLmllZF9wbHVnaW5fZ1R4 dCgnbG9hZF9vcmRlcl9oZWxwJykpKQoJLiB0ciggZkxhYmVsQ2VsbCggJ3ZlcnNpb24nICkg LiB0ZCgkdmVyc2lvbikpCgkuIHRyKCBmTGFiZWxDZWxsKCAnYXV0aG9yJyApIC4gdGQoJGF1 dGhvcikpCgkuIHRyKCBmTGFiZWxDZWxsKCAnd2Vic2l0ZScgKSAuIHRkKCRhdXRob3JfdXJp KSkKCS4gdHIoIGZMYWJlbENlbGwoICdkZXNjcmlwdGlvbicgKSAuIHRkKCRkZXNjcmlwdGlv bikpCgkuIHRyKCB0ZGEoZ1R4dCgncGx1Z2luX2hlbHAnKSwgJyBjbGFzcz0ibm9saW5lIiBz dHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IicpIC4g dGQoJGhlbHApKQoJLiB0ciggZkxhYmVsQ2VsbCggJ2NzcycgKSAuIHRkKCRjc3MpKQoJLiB0 ciggZkxhYmVsQ2VsbCgnJm5ic3A7JykgLiB0ZCgkc3ViKSkKCgkuIHRyKCB0ZGNzKCc8aHI+ JywyKSkKCS4gdHIoIGZMYWJlbENlbGwoJyZuYnNwOycpIC4gdGQoaWVkX3BsdWdpbl9nVHh0 KCd1dGlsaXRpZXMnKS4nOicpKQoKCS4gdHIoIGZMYWJlbENlbGwoIGllZF9wbHVnaW5fZ1R4 dCgnY29kZV9kaXN0JykgKSAuIHRkKCRkaXN0cmlidXRpb24pKQoJLiB0ciggZkxhYmVsQ2Vs bCgnJm5ic3A7JykgLiB0ZCgkc2xpbmspKQoJLiB0ciggZkxhYmVsQ2VsbCgnJm5ic3A7Jykg LiB0ZCgkc3ppcGxpbmspKQoJLiB0ciggZkxhYmVsQ2VsbCgnJm5ic3A7JykgLiB0ZCgkc3Bo cGxpbmspKQoJLiBlbmRUYWJsZSgpCgkuIHNJbnB1dCgnaWVkX3BsdWdpbl9zYXZlJykKCS4g ZUlucHV0KCdpZWRfcGx1Z2luX2NvbXBvc2VyJykKCS4gaElucHV0KCduYW1lJywkbmFtZSkp CS4gPDw8RU9GCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KalF1ZXJ5LmZuLnJl c2l6ZWhhbmRsZSA9IGZ1bmN0aW9uKGN1cmgpIHsKCXJldHVybiB0aGlzLmVhY2goZnVuY3Rp b24oKSB7CgkJdmFyIG1lID0galF1ZXJ5KHRoaXMpOwoJCW1lLmFuaW1hdGUoe2hlaWdodDog Y3VyaH0pOwoJCW1lLmFmdGVyKAoJCQlqUXVlcnkoJzxkaXYgY2xhc3M9InJlc2l6ZWhhbmRs ZSI+LS0tICsgLS0tPC9kaXY+JykuYmluZCgibW91c2Vkb3duIiwgZnVuY3Rpb24oZSkgewoJ CQkJdmFyIGggPSBtZS5oZWlnaHQoKTsKCQkJCXZhciB5ID0gZS5jbGllbnRZOwoJCQkJdmFy IG1vdmVIYW5kbGVyID0gZnVuY3Rpb24oZSkgewoJCQkJCW1lLmhlaWdodChNYXRoLm1heCgy MCwgZS5jbGllbnRZICsgaCAtIHkpKTsKCQkJCX07CgkJCQl2YXIgdXBIYW5kbGVyID0gZnVu Y3Rpb24oZSkgewoJCQkJCWpRdWVyeSgiaHRtbCIpLnVuYmluZCgibW91c2Vtb3ZlIixtb3Zl SGFuZGxlcikudW5iaW5kKCJtb3VzZXVwIix1cEhhbmRsZXIpOwoJCQkJCW5ld2ggPSBtZS5o ZWlnaHQoKTsKCQkJCQlzZXRDb29raWUoJ2llZF9wbHVnaW5fZWRoZWlnaHQnLCBuZXdoLCAz MCk7CgkJCQl9OwoJCQkJalF1ZXJ5KCJodG1sIikuYmluZCgibW91c2Vtb3ZlIiwgbW92ZUhh bmRsZXIpLmJpbmQoIm1vdXNldXAiLCB1cEhhbmRsZXIpOwoJCQl9KQoJCSk7Cgl9KTsKfQpq UXVlcnkoZnVuY3Rpb24oKSB7CgljdXJoID0gZ2V0Q29va2llKCdpZWRfcGx1Z2luX2VkaGVp Z2h0Jyk7CgljdXJoID0gKGN1cmggPT0gbnVsbCkgPyAnNDgwJyA6IGN1cmg7CglqUXVlcnko IiNwbHVnaW5fZWRpdG9yIikucmVzaXplaGFuZGxlKHBhcnNlSW50KGN1cmgpKTsKCWpRdWVy eSgndGV4dGFyZWFbbWF4bGVuZ3RoXScpLmtleXVwKGZ1bmN0aW9uKCl7CgkJdmFyIG1heCA9 IHBhcnNlSW50KGpRdWVyeSh0aGlzKS5hdHRyKCdtYXhsZW5ndGgnKSk7CgkJaWYoalF1ZXJ5 KHRoaXMpLnZhbCgpLmxlbmd0aCA+IG1heCl7CgkJCWpRdWVyeSh0aGlzKS52YWwoalF1ZXJ5 KHRoaXMpLnZhbCgpLnN1YnN0cigwLCBqUXVlcnkodGhpcykuYXR0cignbWF4bGVuZ3RoJykp KTsKCQl9CgkJalF1ZXJ5KHRoaXMpLnBhcmVudCgpLmZpbmQoJy5jaGFyc1JlbWFpbicpLmh0 bWwoJ0NoYXJzIHJlbWFpbmluZzogJysgKG1heCAtIGpRdWVyeSh0aGlzKS52YWwoKS5sZW5n dGgpKTsKCX0pOwoJalF1ZXJ5KCd0ZXh0YXJlYVttYXhsZW5ndGhdJykua2V5dXAoKTsKfSk7 Cjwvc2NyaXB0Pgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoucmVzaXplaGFuZGxlIHsKCWN1 cnNvcjpzLXJlc2l6ZTsKCWZsb2F0OmxlZnQ7Cgl0ZXh0LWFsaWduOmNlbnRlcjsKCWZvbnQt c2l6ZToxZW07Cgl3aWR0aDo4MiU7CglwYWRkaW5nOjJweCAwIDZweDsKfQouY2hhcnNSZW1h aW4gewoJdGV4dC1hbGlnbjpyaWdodDsKCWNvbG9yOmdyYXk7Cn0KPC9zdHlsZT4KRU9GOwp9 CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGllZF9wbHVnaW5fc2F2ZSgpIHsKCWdsb2JhbCAkaWVk X3BsdWdpbl9nbG9iYWxzOwoJZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXkoJ25hbWUnLCdu ZXduYW1lJywnZmlsZW5hbWUnLCdjb2RlJywnYXV0aG9yJywnYXV0aG9yX3VyaScsJ3ZlcnNp b24nLCdkZXNjcmlwdGlvbicsJ2hlbHAnLCdjc3MnLCdzdGF0dXMnLCd0eXBlJywnbG9hZF9v cmRlcicsJ3JlbmFtZV9maWxlJywncmVzdG9yZV9wb2ludCcpKSkpOwoKCWxpc3QgKCRzdGFy dF9jc3MsICRlbmRfY3NzKSA9IGllZF9wbHVnaW5fbWFrZV9tYXJrZXJzKCJDU1MiLCAkaWVk X3BsdWdpbl9nbG9iYWxzWydjc3Nfc3RhcnQnXSwgJGllZF9wbHVnaW5fZ2xvYmFsc1snY3Nz X2VuZCddKTsKCSRleHRyYU1zZyA9ICRuZXdmaWxlbmFtZSA9ICcnOwoJJG5ld25hbWUgPSB0 cmltKCRuZXduYW1lKTsKCglpZiAoZW1wdHkoJG5ld25hbWUpKSB7CgkJJG1zZzEgPSBpZWRf cGx1Z2luX2dUeHQoJ25hbWVfZmlyc3QnKTsKCX0gZWxzZSB7CgkJaWYgKGVtcHR5KCRmaWxl bmFtZSkpIHsKCQkJJGhlbHAgPSAkaGVscC4oKCRjc3MpID8gbi4kc3RhcnRfY3NzLm4uJGNz cy5uLiRlbmRfY3NzIDogJycpOwoJCQlzYWZlX3VwZGF0ZSgKCQkJCSJ0eHBfcGx1Z2luIiwK CQkJCSJuYW1lPSckbmV3bmFtZScsCgkJCQlzdGF0dXMgPSAnJHN0YXR1cycsCgkJCQl0eXBl ID0gJyR0eXBlJywKCQkJCWF1dGhvciA9ICckYXV0aG9yJywKCQkJCWF1dGhvcl91cmkgPSAn JGF1dGhvcl91cmknLAoJCQkJdmVyc2lvbiA9ICckdmVyc2lvbicsCgkJCQlkZXNjcmlwdGlv biA9ICckZGVzY3JpcHRpb24nLAoJCQkJaGVscCA9ICckaGVscCcsCgkJCQljb2RlID0gJyRj b2RlJywKCQkJCSIuKCgkcmVzdG9yZV9wb2ludCA9PSAxKT8gImNvZGVfcmVzdG9yZSA9ICck Y29kZScsIiA6ICcnKS4iCgkJCQlsb2FkX29yZGVyID0gJyRsb2FkX29yZGVyJyIsCgkJCQki bmFtZSA9ICckbmFtZSciKTsKCgkJCSRtc2cxID0gZ1R4dCgncGx1Z2luX3NhdmVkJywgYXJy YXkoJ3tuYW1lfScgPT4gJG5ld25hbWUpKTsKCQl9IGVsc2UgewoJCQkkZGlyID0gJEdMT0JB TFNbJ3ByZWZzJ11bJ3BsdWdpbl9jYWNoZV9kaXInXS5EUzsKCQkJJGZpbGVjb250ZW50ID0g ZmlsZSgkZGlyLiRmaWxlbmFtZSk7CgkJCSRmaWxlY29udGVudCA9IGllZF9wbHVnaW5fbWFr ZV9hcnJheSgkZmlsZWNvbnRlbnQpOwoJCQkkbWV0YXZhcnMgPSBhcnJheSgibmFtZSIgPT4g IiRuZXduYW1lIiwKCQkJCQkJCQkJInZlcnNpb24iID0+ICIkdmVyc2lvbiIsCgkJCQkJCQkJ CSJhdXRob3IiID0+ICIkYXV0aG9yIiwKCQkJCQkJCQkJImF1dGhvcl91cmkiID0+ICIkYXV0 aG9yX3VyaSIsCgkJCQkJCQkJCSJkZXNjcmlwdGlvbiIgPT4gIiRkZXNjcmlwdGlvbiIsCgkJ CQkJCQkJCSJ0eXBlIiA9PiAiJHR5cGUiLAoJCQkJCQkJCQkib3JkZXIiID0+ICIkbG9hZF9v cmRlciIsCgkJCQkJCQkpOwoJCQkkaHVua3ZhcnMgPSBhcnJheSgiQ09ERSIgPT4gZG9TdHJp cChzdHJfcmVwbGFjZSgnXHJcbicsJwonLCRjb2RlKSksIC8vIG5ld2xpbmUgd29ya2Fyb3Vu ZAoJCQkJCQkiSEVMUCIgPT4gZG9TdHJpcChzdHJfcmVwbGFjZSgnXHJcbicsJwonLCRoZWxw KSksCgkJCQkJCSJDU1MiID0+IGRvU3RyaXAoc3RyX3JlcGxhY2UoJ1xyXG4nLCcKJywkY3Nz KSksCgkJCQkJCQkpOwoJCQlmb3JlYWNoICgkbWV0YXZhcnMgYXMgJHZhcm5hbWUgPT4gJHZh bHVlKSB7CgkJCQlmb3IoJGlkeCA9IDA7ICRpZHggPCBjb3VudCgkZmlsZWNvbnRlbnQpOyAk aWR4KyspIHsKCQkJCQlpZiAoc3RycG9zKCRmaWxlY29udGVudFskaWR4XSwgJyRwbHVnaW5b XCcnLiR2YXJuYW1lLidcJ10nKSA9PT0gMCkgewoJCQkJCQkkZmlsZWNvbnRlbnRbJGlkeF0g PSAnJHBsdWdpbltcJycuJHZhcm5hbWUuJ1wnXSA9ICcuZG9RdW90ZSgkdmFsdWUpLic7JzsK CQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJfQoJCQl9CgkJCWZvcmVhY2ggKCRodW5rdmFycyBh cyAkdmFybmFtZSA9PiAkaHVuaykgewoJCQkJbGlzdCAoJHN0YXJ0X2RlbGltLCAkZW5kX2Rl bGltKSA9IGllZF9wbHVnaW5fbWFrZV9tYXJrZXJzKCR2YXJuYW1lLCAkaWVkX3BsdWdpbl9n bG9iYWxzWydkbG1fc3RhcnQnXSwgJGllZF9wbHVnaW5fZ2xvYmFsc1snZGxtX2VuZCddKTsK CQkJCSRzdGFydCA9IGFycmF5X3NlYXJjaCgkc3RhcnRfZGVsaW0sICRmaWxlY29udGVudCkg KyAxOwoJCQkJJGVuZCA9IGFycmF5X3NlYXJjaCgkZW5kX2RlbGltLCAkZmlsZWNvbnRlbnQp OwoJCQkJaWYgKGlzX251bWVyaWMoJHN0YXJ0KSAmJiBpc19udW1lcmljKCRlbmQpICYmICRl bmQgPj0gJHN0YXJ0KSB7CgkJCQkJYXJyYXlfc3BsaWNlKCRmaWxlY29udGVudCwgJHN0YXJ0 LCAkZW5kLSRzdGFydCwgJGh1bmspOwoJCQkJfQoJCQl9CgkJCSRmaWxlY29udGVudCA9IGlt cGxvZGUoIlxuIiwgJGZpbGVjb250ZW50KTsKCgkJCSRmaCA9IGZvcGVuKCRkaXIuJGZpbGVu YW1lLCAndysnKTsKCQkJZndyaXRlKCRmaCwgJGZpbGVjb250ZW50KTsKCQkJZmNsb3NlKCRm aCk7CgoJCQkvLyBNYWtlIG5ldyBmaWxlIGlmIHJlcXVpcmVkCgkJCWlmICgkcmVuYW1lX2Zp bGUgPT0gMSkgewoJCQkJJGZuYW1lcyA9IGllZF9wbHVnaW5fZ2V0X25hbWUoJG5ld25hbWUs ICR2ZXJzaW9uKTsKCQkJCSRuZXdmaWxlbmFtZSA9ICRmbmFtZXNbMl07CgkJCQkkcmVzID0g cmVuYW1lKCRkaXIuJGZpbGVuYW1lLCAkZGlyLiRuZXdmaWxlbmFtZSk7CgkJCQkkZXh0cmFN c2cgPSAoJHJlcykgPyBpZWRfcGx1Z2luX2dUeHQoJ3JlbmFtZWQnKSA6IGllZF9wbHVnaW5f Z1R4dCgncmVuYW1lX2ZhaWxlZCcpOwoJCQl9CgkJCSRtc2cxID0gZ1R4dCgncGx1Z2luX3Nh dmVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJG5ld25hbWUpKTsKCQl9Cgl9CgkvLyBDaGVjayB0 aGUgcGx1Z2luIHR5cGUgbWF0Y2hlcyB0aGUgY29kZSB1c2VkCgkkZXh0cmFNc2cgLj0gKGll ZF9wbHVnaW5fYWRtaW5fY2hlY2soJGNvZGUsICR0eXBlKSkgPyAnJyA6IHN0cm9uZyhpZWRf cGx1Z2luX2dUeHQoJ2NoZWNrX3R5cGUnKSk7CgkkbWVzc2FnZSA9ICRtc2cxLmJyLiRleHRy YU1zZzsKCWllZF9wbHVnaW5fZWRpdCgkbWVzc2FnZSwgJG5ld2ZpbGVuYW1lKTsKfQoKLy8g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQpmdW5jdGlvbiBpZWRfcGx1Z2luX2NyZWF0ZV9uZXcoKSB7CglleHRyYWN0KGRv U2xhc2goZ3BzYShhcnJheSgnbmFtZScpKSkpOwoJaWYgKCRuYW1lPT0nJykgewoJCWllZF9w bHVnaW5fbGlzdChpZWRfcGx1Z2luX2dUeHQoJ25hbWVfZmlyc3QnKSk7CgkJcmV0dXJuOwoJ fQoJJGV4aXN0cyA9IGZldGNoKCduYW1lJywndHhwX3BsdWdpbicsJ25hbWUnLCRuYW1lKTsK CWlmICghJGV4aXN0cykgewoJCXNhZmVfaW5zZXJ0KCJ0eHBfcGx1Z2luIiwgIgoJCQluYW1l PSckbmFtZScsCgkJCXN0YXR1cz0nMCcsCgkJCXR5cGU9JzAnLAoJCQl2ZXJzaW9uPScwLjEn LAoJCQlsb2FkX29yZGVyPSc1JwoJCSIpOwoJCXBhZ2V0b3AoZ1R4dCgnZWRpdF9wbHVnaW5z JyksICdlZGl0IHlvdXIgbmV3IHBsdWdpbicpOwoJCWVjaG8gaWVkX3BsdWdpbl9lZGl0X2Zv cm0oJG5hbWUpOwoJfSBlbHNlIHsKCQlpZWRfcGx1Z2luX2xpc3QoZ1R4dCgncGx1Z2luJyku JyA8c3Ryb25nPicuJG5hbWUuJzwvc3Ryb25nPiAnLmdUeHQoJ2FscmVhZHlfZXhpc3RzJykp OwoJfQp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGllZF9wbHVnaW5fc2F2ZV9hc19maWxlKCkg ewoJZ2xvYmFsICRpZWRfcGx1Z2luX2dsb2JhbHM7CglpZiAoZ3BzKCduYW1lJykpIHsKCQkk bmFtZSA9IGdwcygnbmFtZScpOwoJCSRycyA9IHNhZmVfcm93KCJkZXNjcmlwdGlvbiwgYXV0 aG9yLCBhdXRob3JfdXJpLCB2ZXJzaW9uLCBjb2RlLCBoZWxwLCB0eXBlLCBsb2FkX29yZGVy IiwgInR4cF9wbHVnaW4iLCAibmFtZT0nJG5hbWUnIik7CgkJZXh0cmFjdCgkcnMpOwoKCQls aXN0KCRjc3MsJGhlbHApID0gKCRoZWxwKSA/IGllZF9wbHVnaW5fZXh0cmFjdF9odW5rKCRo ZWxwLCAiQ1NTIiwgIjwhLS18LS0+IiwgdHJ1ZSkgOiBhcnJheSgnJywkaGVscCk7Cgl9IGVs c2VpZiAoZ3BzKCdmaWxlbmFtZScpKSB7CgkJJHBsdWdpbj1pZWRfcGx1Z2luX3JlYWRfZmls ZSgkR0xPQkFMU1sncHJlZnMnXVsncGx1Z2luX2NhY2hlX2RpciddLkRTLmdwcygnZmlsZW5h bWUnKSk7CgkJZXh0cmFjdCgkcGx1Z2luKTsKCX0KCgkkemlwID0gZ3BzKCd6aXAnKTsKCWlm IChncHMoJ3RyaW0nKT09MSkgewoJCSRjb2RlPWV4cGxvZGUoIlxyXG4iLCRjb2RlKTsKCQkk Y29kZT1hcnJheV9tYXAoJ3RyaW0nLCRjb2RlKTsKCQkkY29kZT1pbXBsb2RlKCJcclxuIiwk Y29kZSk7Cgl9CgoJbGlzdCAoJHN0YXJ0X2NzcywgJGVuZF9jc3MpID0gaWVkX3BsdWdpbl9t YWtlX21hcmtlcnMoIkNTUyIsICRpZWRfcGx1Z2luX2dsb2JhbHNbJ2Nzc19zdGFydCddLCAk aWVkX3BsdWdpbl9nbG9iYWxzWydjc3NfZW5kJ10pOwoJJGZuYW1lcyA9IGllZF9wbHVnaW5f Z2V0X25hbWUoJG5hbWUsICR2ZXJzaW9uKTsKCgloZWFkZXIoIkNvbnRlbnQtdHlwZTogdGV4 dC9wbGFpbiIpOwoJaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBm aWxlbmFtZT0nIC4gKCgkemlwKSA/ICRmbmFtZXNbMV0gOiAkZm5hbWVzWzBdKSk7CgoJJHR5 cGVzID0gYXJyYXkoICdDbGllbnQgc2lkZScgLCAnQWRtaW4vQ2xpZW50IHNpZGUnICwgJ0xp YnJhcnknICwgJ0FkbWluIHNpZGUnKTsKCSRwbHVnaW5bJ25hbWUnXSA9ICRuYW1lOwoJJHBs dWdpblsnYXV0aG9yJ10gPSAkYXV0aG9yOwoJJHBsdWdpblsnYXV0aG9yX3VyaSddID0gJGF1 dGhvcl91cmk7CgkkcGx1Z2luWyd2ZXJzaW9uJ10gPSAkdmVyc2lvbjsKCSRwbHVnaW5bJ2Rl c2NyaXB0aW9uJ10gPSAkZGVzY3JpcHRpb247CgkkcGx1Z2luWydjb2RlJ10gPSAkY29kZTsK CSRwbHVnaW5bJ3R5cGUnXSA9ICR0eXBlOwoJJHBsdWdpblsnb3JkZXInXSA9ICRsb2FkX29y ZGVyOwovLwkkcGx1Z2luWydhbGxvd19odG1sX2hlbHAnXSA9IHRydWU7Ci8vCSRwbHVnaW5b J2hlbHBfcmF3J10gPSAkaGVscC4kc3RhcnRfY3NzLiRjc3MuJGVuZF9jc3M7CgkkcGx1Z2lu WydoZWxwJ10gPSBpZWRfcGx1Z2luX3RleHRpbGUoJGhlbHAsICRjc3MsICRzdGFydF9jc3Ms ICRlbmRfY3NzKTsKCSRwbHVnaW5bJ21kNSddID0gbWQ1KCAkcGx1Z2luWydjb2RlJ10gKTsK CgllY2hvICcjIE5hbWU6ICcuJG5hbWUuJyB2Jy4kdmVyc2lvbi4nICcuKCgkemlwKSA/ICIo Y29tcHJlc3NlZCkiIDogIiIpLicKIyBUeXBlOiAnLiR0eXBlc1skdHlwZV0uJyBwbHVnaW4K IyAnLiRkZXNjcmlwdGlvbi4nCiMgQXV0aG9yOiAnLiRhdXRob3IuJwojIFVSTDogJy4kYXV0 aG9yX3VyaS4nCiMgUmVjb21tZW5kZWQgbG9hZCBvcmRlcjogJy4kbG9hZF9vcmRlci4nCgoj IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLgojIFRoaXMgaXMgYSBwbHVnaW4gZm9yIFRleHRwYXR0ZXJuIC0g aHR0cDovL3RleHRwYXR0ZXJuLmNvbS8KIyBUbyBpbnN0YWxsOiB0ZXh0cGF0dGVybiA+IGFk bWluID4gcGx1Z2lucwojIFBhc3RlIHRoZSBmb2xsb3dpbmcgdGV4dCBpbnRvIHRoZSBcJ0lu c3RhbGwgcGx1Z2luXCcgYm94OgojIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgoKJy4oKCR6aXApID8gY2h1 bmtfc3BsaXQoYmFzZTY0X2VuY29kZShnemVuY29kZShzZXJpYWxpemUoJHBsdWdpbikpKSwg NzIpIDogY2h1bmtfc3BsaXQoYmFzZTY0X2VuY29kZShzZXJpYWxpemUoJHBsdWdpbikpLCA3 MikpOwoKCWRpZSgpOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGllZF9wbHVnaW5fc2F2ZV9h c19waHBfZmlsZSgpIHsKCWdsb2JhbCAkcHJlZnM7CglpZiAoZ3BzKCduYW1lJykpIHsKCQkk bmFtZSA9IGdwcygnbmFtZScpOwoJCSRycyA9IHNhZmVfcm93KCJkZXNjcmlwdGlvbiwgYXV0 aG9yLCBhdXRob3JfdXJpLCB2ZXJzaW9uLCBjb2RlLCBoZWxwLCB0eXBlLCBsb2FkX29yZGVy IiwgInR4cF9wbHVnaW4iLCAibmFtZT0nJG5hbWUnIik7CgkJZXh0cmFjdCgkcnMpOwoKCQls aXN0KCRjc3MsJGhlbHApID0gKCRoZWxwKSA/IGllZF9wbHVnaW5fZXh0cmFjdF9odW5rKCRo ZWxwLCAiQ1NTIiwgIjwhLS18LS0+IiwgdHJ1ZSkgOiBhcnJheSgnJywkaGVscCk7Cgl9IGVs c2VpZiAoZ3BzKCdmaWxlbmFtZScpKSB7CgkJJHBsdWdpbj1pZWRfcGx1Z2luX3JlYWRfZmls ZSgkR0xPQkFMU1sncHJlZnMnXVsncGx1Z2luX2NhY2hlX2RpciddLkRTLmdwcygnZmlsZW5h bWUnKSk7CgkJZXh0cmFjdCgkcGx1Z2luKTsKCX0KCgkkb3BvcmRlciA9IChpc3NldCgkcHJl ZnNbJ2llZF9wbHVnaW5fb3V0cHV0X29yZGVyJ10pICYmIGlzX251bWVyaWMoJHByZWZzWydp ZWRfcGx1Z2luX291dHB1dF9vcmRlciddKSkgPyAkcHJlZnNbJ2llZF9wbHVnaW5fb3V0cHV0 X29yZGVyJ10gOiAwOwoJJGZuYW1lcyA9IGllZF9wbHVnaW5fZ2V0X25hbWUoJG5hbWUsICR2 ZXJzaW9uKTsKCgloZWFkZXIoIkNvbnRlbnQtdHlwZTogdGV4dC9waHAiKTsKCWhlYWRlcign Q29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9JyAuJGZuYW1lc1sy XSk7CgoJJGhlbHBjaHVuayA9ICdpZiAoMCkgeycubgouJz8+Jy5uCi4gKCgkY3NzKSA/ICc8 IS0tJy5uCi4nIyAtLS0gQkVHSU4gUExVR0lOIENTUyAtLS0nLm4KLiRjc3MubgouJyMgLS0t IEVORCBQTFVHSU4gQ1NTIC0tLScubgouJy0tPicubiA6ICcnKQouJzwhLS0nLm4KLicjIC0t LSBCRUdJTiBQTFVHSU4gSEVMUCAtLS0nLm4KLiRoZWxwLm4KLicjIC0tLSBFTkQgUExVR0lO IEhFTFAgLS0tJy5uCi4nLS0+Jy5uCi4nPD9waHAnLm4KLid9Jy5uOwoKCSRjb2RlY2h1bmsg PSAnIyAtLS0gQkVHSU4gUExVR0lOIENPREUgLS0tJy5uCi5zdHJfcmVwbGFjZSgiXHJcbiIs IlxuIiwkY29kZSkubgouJyMgLS0tIEVORCBQTFVHSU4gQ09ERSAtLS0nLm47CgoJZWNobyAn PD9waHAnLm4KLicvLyBUaGlzIGlzIGEgUExVR0lOIFRFTVBMQVRFLicubgouJy8vIENvcHkg dGhpcyBmaWxlIHRvIGEgbmV3IG5hbWUgbGlrZSBhYmNfbXlwbHVnaW4ucGhwLiAgRWRpdCB0 aGUgY29kZSwgdGhlbicubgouJy8vIHJ1biB0aGlzIGZpbGUgYXQgdGhlIGNvbW1hbmQgbGlu ZSB0byBwcm9kdWNlIGEgcGx1Z2luIGZvciBkaXN0cmlidXRpb246Jy5uCi4nLy8gJCBwaHAg YWJjX215cGx1Z2luLnBocCA+IGFiY19teXBsdWdpbi0wLjEudHh0Jy5uCi5uCi4nLy8gUGx1 Z2luIG5hbWUgaXMgb3B0aW9uYWwuICBJZiB1bnNldCwgaXQgd2lsbCBiZSBleHRyYWN0ZWQg ZnJvbSB0aGUgY3VycmVudCcubgouJy8vIGZpbGUgbmFtZS4gVW5jb21tZW50IGFuZCBlZGl0 IHRoaXMgbGluZSB0byBvdmVycmlkZTonLm4KLickcGx1Z2luW1wnbmFtZVwnXSA9ICcuZG9R dW90ZSgkbmFtZSkuJzsnLm4KLm4KLicvLyAwID0gUGx1Z2luIGhlbHAgaXMgaW4gVGV4dGls ZSBmb3JtYXQsIG5vIHJhdyBIVE1MIGFsbG93ZWQgKGRlZmF1bHQpLicubgouJy8vIDEgPSBQ bHVnaW4gaGVscCBpcyBpbiByYXcgSFRNTC4gIE5vdCByZWNvbW1lbmRlZC4nLm4KLicjICRw bHVnaW5bXCdhbGxvd19odG1sX2hlbHBcJ10gPSAxOycubgoubgouJyRwbHVnaW5bXCd2ZXJz aW9uXCddID0gJy5kb1F1b3RlKCR2ZXJzaW9uKS4nOycubgouJyRwbHVnaW5bXCdhdXRob3Jc J10gPSAnLmRvUXVvdGUoJGF1dGhvcikuJzsnLm4KLickcGx1Z2luW1wnYXV0aG9yX3VyaVwn XSA9ICcuZG9RdW90ZSgkYXV0aG9yX3VyaSkuJzsnLm4KLickcGx1Z2luW1wnZGVzY3JpcHRp b25cJ10gPSAnLmRvUXVvdGUoJGRlc2NyaXB0aW9uKS4nOycubgoubgouJy8vIFBsdWdpbiBs b2FkIG9yZGVyOicubgouJy8vIFRoZSBkZWZhdWx0IHZhbHVlIG9mIDUgd291bGQgZml0IG1v c3QgcGx1Z2lucywgd2hpbGUgZm9yIGluc3RhbmNlIGNvbW1lbnQgc3BhbSBldmFsdWF0b3Jz IG9yIFVSTCByZWRpcmVjdG9ycycubgouJy8vIHdvdWxkIHByb2JhYmx5IHdhbnQgdG8gcnVu IGVhcmxpZXIgKDEuLi40KSB0byBwcmVwYXJlIHRoZSBlbnZpcm9ubWVudCBmb3IgZXZlcnl0 aGluZyBlbHNlIHRoYXQgZm9sbG93cy4nLm4KLicvLyBPcmRlcnMgNi4uLjkgc2hvdWxkIGJl IGNvbnNpZGVyZWQgZm9yIHBsdWdpbnMgd2hpY2ggd291bGQgd29yayBsYXRlLiBUaGlzIG9y ZGVyIGlzIHVzZXItb3ZlcnJpZGVhYmxlLicubgouJyRwbHVnaW5bXCdvcmRlclwnXSA9ICcu ZG9RdW90ZSgkbG9hZF9vcmRlcikuJzsnLm4KLm4KLicvLyBQbHVnaW4gXCd0eXBlXCcgZGVm aW5lcyB3aGVyZSB0aGUgcGx1Z2luIGlzIGxvYWRlZCcubgouJy8vIDAgPSBwdWJsaWMgICAg ICAgOiBvbmx5IG9uIHRoZSBwdWJsaWMgc2lkZSBvZiB0aGUgd2Vic2l0ZSAoZGVmYXVsdCkn Lm4KLicvLyAxID0gcHVibGljK2FkbWluIDogb24gYm90aCB0aGUgcHVibGljIGFuZCBhZG1p biBzaWRlJy5uCi4nLy8gMiA9IGxpYnJhcnkgICAgICA6IG9ubHkgd2hlbiBpbmNsdWRlX3Bs dWdpbigpIG9yIHJlcXVpcmVfcGx1Z2luKCkgaXMgY2FsbGVkJy5uCi4nLy8gMyA9IGFkbWlu ICAgICAgICA6IG9ubHkgb24gdGhlIGFkbWluIHNpZGUnLm4KLickcGx1Z2luW1wndHlwZVwn XSA9ICcuZG9RdW90ZSgkdHlwZSkuJzsnLm4KLm4KLidpZiAoIWRlZmluZWQoXCd0eHBpbnRl cmZhY2VcJykpJy5uCi4nICAgICAgICBAaW5jbHVkZV9vbmNlKFwnemVtX3RwbC5waHBcJyk7 Jy5uCi5uCi4oKCRvcG9yZGVyID09IDApID8gJGNvZGVjaHVuayA6ICRoZWxwY2h1bmspCi4o KCRvcG9yZGVyID09IDEpID8gJGNvZGVjaHVuayA6ICRoZWxwY2h1bmspCi4nPz4nOwoJZGll KCk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVkX3BsdWdpbl91cGxvYWQoKSB7CglnbG9i YWwgJGllZF9wbHVnaW5fZ2xvYmFsczsKCWxpc3QgKCRzdGFydF9jc3MsICRlbmRfY3NzKSA9 IGllZF9wbHVnaW5fbWFrZV9tYXJrZXJzKCJDU1MiLCAkaWVkX3BsdWdpbl9nbG9iYWxzWydj c3Nfc3RhcnQnXSwgJGllZF9wbHVnaW5fZ2xvYmFsc1snY3NzX2VuZCddKTsKCglpZiAoISRf RklMRVNbJ3RoZWZpbGUnXVsndG1wX25hbWUnXSkgewoJCWllZF9wbHVnaW5fbGlzdChpZWRf cGx1Z2luX2dUeHQoJ2Nob29zZV9maWxlJykpO3JldHVybjsKCX0KCSRwbHVnaW4gPSBpZWRf cGx1Z2luX3JlYWRfZmlsZSgkX0ZJTEVTWyd0aGVmaWxlJ11bJ3RtcF9uYW1lJ10pOwovLwkk bmV3bmFtZSA9IChlbXB0eSgkcGx1Z2luWyduYW1lJ10pKSA/IGJhc2VuYW1lKCRfRklMRVNb J3RoZWZpbGUnXVsnbmFtZSddLCAnLnBocCcpIDogJHBsdWdpblsnbmFtZSddOwoJJG5ld25h bWUgPSAkcGx1Z2luWyduYW1lJ107CglpZiAoZ3BzKCduYW1lJykgYW5kIGdwcygnbmFtZScp IT0neHh4X3h4eHh4eCcpIHsKCQkkbmV3bmFtZT1ncHMoJ25hbWUnKTsKCX0KCWlmIChlbXB0 eSgkcGx1Z2luWydjb2RlJ10pKSB7CgkJJHBsdWdpblsnY29kZSddID0gaW1wbG9kZSAoIiIs IGZpbGUoJF9GSUxFU1sndGhlZmlsZSddWyd0bXBfbmFtZSddKSk7Cgl9CgoJaWYgKE1BR0lD X1FVT1RFU19HUEMpIHsKCQkkcGx1Z2luID0gZG9TdHJpcCgkcGx1Z2luKTsKCX0KCWV4dHJh Y3QoZG9TbGFzaCgkcGx1Z2luKSk7CgkkbWQ1PW1kNSgkY29kZSk7CgkkdmVyc2lvbiA9IChl bXB0eSgkdmVyc2lvbikpID8gIjAuMSIgOiAkdmVyc2lvbjsKCSRoZWxwID0gJGhlbHAuKCgk Y3NzKSA/IG4uJHN0YXJ0X2Nzcy5uLiRjc3Mubi4kZW5kX2NzcyA6ICcnKTsKCSRleGlzdHMg PSBmZXRjaCgnbmFtZScsJ3R4cF9wbHVnaW4nLCduYW1lJywkbmV3bmFtZSk7CglpZiAoJGV4 aXN0cykgewoJCSRzdGF0dXMgPSBmZXRjaCgnc3RhdHVzJywndHhwX3BsdWdpbicsJ25hbWUn LCRuZXduYW1lKTsKCQkkcnMgPSBzYWZlX3VwZGF0ZSgKCQkJInR4cF9wbHVnaW4iLAoJCQki c3RhdHVzID0gJyRzdGF0dXMnLAoJCQl0eXBlID0gJyR0eXBlJywKCQkJYXV0aG9yID0gJyRh dXRob3InLAoJCQlhdXRob3JfdXJpID0gJyRhdXRob3JfdXJpJywKCQkJdmVyc2lvbiA9ICck dmVyc2lvbicsCgkJCWRlc2NyaXB0aW9uID0gJyRkZXNjcmlwdGlvbicsCgkJCWhlbHAgPSAn JGhlbHAnLAoJCQljb2RlID0gJyRjb2RlJywKCQkJY29kZV9yZXN0b3JlID0gJyRjb2RlJywK CQkJY29kZV9tZDUgPSAnJG1kNScsCgkJCWxvYWRfb3JkZXIgPSAnJGxvYWRfb3JkZXInIiwK CQkJIm5hbWUgPSAnJG5ld25hbWUnIgoJCSk7Cgl9IGVsc2UgewoJCSRycyA9IHNhZmVfaW5z ZXJ0KAoJCQkidHhwX3BsdWdpbiIsCgkJCSJuYW1lID0gJyRuZXduYW1lJywKCQkJc3RhdHVz ID0gMCwKCQkJdHlwZSA9ICckdHlwZScsCgkJCWF1dGhvciA9ICckYXV0aG9yJywKCQkJYXV0 aG9yX3VyaSA9ICckYXV0aG9yX3VyaScsCgkJCXZlcnNpb24gPSAnJHZlcnNpb24nLAoJCQlk ZXNjcmlwdGlvbiA9ICckZGVzY3JpcHRpb24nLAoJCQloZWxwID0gJyRoZWxwJywKCQkJY29k ZSA9ICckY29kZScsCgkJCWNvZGVfcmVzdG9yZSA9ICckY29kZScsCgkJCWNvZGVfbWQ1ID0g JyRtZDUnLAoJCQlsb2FkX29yZGVyID0gJyRsb2FkX29yZGVyJyIKCQkpOwoJfQoKCXBhZ2V0 b3AoZ1R4dCgnZWRpdF9wbHVnaW5zJyksIG1lc3NlbmdlcigncGx1Z2luJywkbmV3bmFtZSwo JGV4aXN0cyk/J3VwZGF0ZWQnOid1cGxvYWRlZCcpKTsKCWVjaG8gaWVkX3BsdWdpbl9lZGl0 X2Zvcm0oJG5ld25hbWUpOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGllZF9wbHVnaW5fcmVh ZF9maWxlKCRmaWxlcGF0aCkgewoJJGNvbnRlbnQgPSBmaWxlKCRmaWxlcGF0aCk7CgkkanVz dGZpbGUgPSBiYXNlbmFtZSgkZmlsZXBhdGgpOwoJJGV4dCA9IGFycmF5X3BvcChleHBsb2Rl ICgnLicsJGp1c3RmaWxlKSk7CgkkZXh0ID0gKCRleHQ9PSRqdXN0ZmlsZSkgPyAnJyA6ICcu Jy4kZXh0OyAvLyBPbmx5IGFzc2lnbiBhbiBleHRlbnNpb24gaWYgb25lIGV4aXN0cwoJJHNv dXJjZV9saW5lcyA9IGNvdW50KCRjb250ZW50KTsKCSRtZXRhZGF0YSA9IGFycmF5KAoJCQkJ CQknbmFtZScgPT4gJycsCgkJCQkJCSd2ZXJzaW9uJyA9PiAnJywKCQkJCQkJJ3JldmlzaW9u JyA9PiAnJywKCQkJCQkJJ2F1dGhvcicgPT4gJycsCgkJCQkJCSdhdXRob3JfdXJpJyA9PiAn JywKCQkJCQkJJ2Rlc2NyaXB0aW9uJyA9PiAnJywKCQkJCQkJJ29yZGVyJyA9PiAnNScsCgkJ CQkJCSd0eXBlJyA9PiAnJywKCQkJCQkpOwoJZm9yICgkaWR4PTA7ICRpZHggPCAkc291cmNl X2xpbmVzOyAkaWR4KyspIHsKCQkkY29udGVudFskaWR4XSA9IHJ0cmltKCRjb250ZW50WyRp ZHhdKTsKCQlpZiAoc3RycG9zKCRjb250ZW50WyRpZHhdLCAnJHBsdWdpblsnKSA9PT0gMCkg ewoJCQkvLyBGb3VuZCBhIHBsdWdpbiB2YXJpYWJsZSBzbyBleHRyYWN0IGl0CgkJCSRwYXJ0 cyA9IGV4cGxvZGUoIiA9ICIsICRjb250ZW50WyRpZHhdKTsKCQkJJHBhcnRzWzBdID0gc3Ry X3JlcGxhY2UoIiciLCAiIiwgJHBhcnRzWzBdKTsgLy8gTWFrZSB0aGUgbWF0Y2ggZWFzaWVy IQoJCQkkcGFydHNbMV0gPSBzdHJfcmVwbGFjZSgiOyIsICIiLCAkcGFydHNbMV0pOyAvLyBE aXR0bwoJCQlwcmVnX21hdGNoKCIvcGx1Z2luXFsoLiopXF0vIiwgJHBhcnRzWzBdLCAkdmFy KTsgLy8gRXh0cmFjdCBqdXN0IHRoZSB2YXJpYWJsZSBuYW1lCgkJCWlmIChpc19udW1lcmlj KCRwYXJ0c1sxXSkpIHsKCQkJCSRwYXJ0c1sxXSA9ICInIi4kcGFydHNbMV0uIiciOwoJCQl9 CgkJCXByZWdfbWF0Y2goIi8uKicoLiopJy4qLyIsICRwYXJ0c1sxXSwgJHZhbCk7IC8vIFJl bW92ZSBhbnl0aGluZyBvdXRzaWRlIHRoZSBxdW90ZXMgKGUuZy4gJHJldmlzaW9uKQoJCQlp ZiAoJHZhclsxXSA9PSAncmV2aXNpb24nICYmICFlbXB0eSgkdmFsWzFdKSkgewoJCQkJJHJl dnBhcnRzID0gZXhwbG9kZSgnICcsIHRyaW0oJHZhbFsxXSwgJyQgJykpOwoJCQkJJHZhbFsx XSA9ICRyZXZwYXJ0c1tjb3VudCgkcmV2cGFydHMpLTFdOwoJCQkJJHZhbFsxXSA9IChlbXB0 eSgkdmFsWzFdKSkgPyAnJyA6ICcuJyAuJHZhbFsxXTsKCQkJfQoJCQkkbWV0YWRhdGFbJHZh clsxXV0gPSAkdmFsWzFdOwoJCX0KCX0KCgkkbWV0YWRhdGFbJ25hbWUnXSA9IChlbXB0eSgk bWV0YWRhdGFbJ25hbWUnXSkpID8gYmFzZW5hbWUoJGp1c3RmaWxlLCAkZXh0KSA6ICRtZXRh ZGF0YVsnbmFtZSddOwoJJG1ldGFkYXRhWydsb2FkX29yZGVyJ10gPSAkbWV0YWRhdGFbJ29y ZGVyJ107CgkkbWV0YWRhdGFbJ3ZlcnNpb24nXSAuPSAkbWV0YWRhdGFbJ3JldmlzaW9uJ107 CgkkbWV0YWRhdGFbJ2hlbHAnXSA9IGllZF9wbHVnaW5fZXh0cmFjdF9odW5rKCRjb250ZW50 LCAnSEVMUCcpOwoJJG1ldGFkYXRhWydjc3MnXSAgPSBpZWRfcGx1Z2luX2V4dHJhY3RfaHVu aygkY29udGVudCwgJ0NTUycgKTsKCSRtZXRhZGF0YVsnY29kZSddID0gaWVkX3BsdWdpbl9l eHRyYWN0X2h1bmsoJGNvbnRlbnQsICdDT0RFJyk7CgoJcmV0dXJuICRtZXRhZGF0YTsKfQoK Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQovLyByaXBwZWQgYW5kIG1vZGRlZCBmcm9tIG5ldC1jYXJ2ZXIncyB6ZW1f dHBsIHRlbXBsYXRlCmZ1bmN0aW9uIGllZF9wbHVnaW5fZXh0cmFjdF9odW5rKCRjb250ZW50 LCAkaHVuaywgJGNtbnQ9IiMiLCAkZGVsZXRlPWZhbHNlKSB7CgkkZGxtID0gZXhwbG9kZSgi fCIsICRjbW50KTsKCSRkbG1TdGFydCA9ICRkbG1bMF07CgkkZGxtRW5kID0gKGNvdW50KCRk bG0pID4gMSkgPyAkZGxtWzFdIDogJyc7CgkkbGluZXMgPSBpZWRfcGx1Z2luX21ha2VfYXJy YXkoJGNvbnRlbnQpOwoKCWxpc3QgKCRzdGFydF9kZWxpbSwgJGVuZF9kZWxpbSkgPSBpZWRf cGx1Z2luX21ha2VfbWFya2VycygkaHVuaywgJGRsbVN0YXJ0LCAkZGxtRW5kKTsKCSRzdGFy dCA9IGFycmF5X3NlYXJjaCgkc3RhcnRfZGVsaW0sICRsaW5lcykgKyAxOwoJJGVuZCA9IGFy cmF5X3NlYXJjaCgkZW5kX2RlbGltLCAkbGluZXMpOwoJJGV4dHJhY3RlZCA9IGFycmF5KCk7 CglpZiAoY291bnQoJGxpbmVzKSA+IDAgJiYgaXNfbnVtZXJpYygkc3RhcnQpICYmIGlzX251 bWVyaWMoJGVuZCkgJiYgJGVuZCA+ICRzdGFydCkgewoJCSRleHRyYWN0ZWQgPSBhcnJheV9z bGljZSgkbGluZXMsICRzdGFydCwgJGVuZC0kc3RhcnQpOwoJCSRsaW5lTnVtID0gY291bnQo JGV4dHJhY3RlZCktMTsKCQl3aGlsZSAoJGxpbmVOdW0gPiAwICYmIHRyaW0oJGV4dHJhY3Rl ZFskbGluZU51bS0tXSkgPT0gIiIpIHsKCQkJYXJyYXlfcG9wKCRleHRyYWN0ZWQpOwoJCX0K CQl3aGlsZSAoY291bnQoJGV4dHJhY3RlZCkgPiAwICYmIHRyaW0oJGV4dHJhY3RlZFswXSkg PT0gIiIpIHsKCQkJYXJyYXlfc2hpZnQoJGV4dHJhY3RlZCk7CgkJfQoJCWlmICgkZGVsZXRl KSB7CgkJCSRjaG9wcGVkID0gYXJyYXlfc3BsaWNlKCRsaW5lcywgJHN0YXJ0LTEsICRlbmQt JHN0YXJ0KzIsICIiKTsKCQl9Cgl9CgkkcmVtYWlucyA9ICRsaW5lczsKCS8vIENoZWNrIGlm IHRoZSBDU1Mgc2VjdGlvbiBoYXMgPHN0eWxlPiB0YWdzIGFyb3VuZCBpdDsgYWRkIHRoZW0g aWYgbm90CglpZiAoJGh1bmsgPT0gIkNTUyIpIHsKCQkkbnVtcm93cyA9IGNvdW50KCRleHRy YWN0ZWQpOwoJCWlmICgkbnVtcm93cyA+IDEpIHsKCQkJaWYgKHN0cnBvcygkZXh0cmFjdGVk WyRudW1yb3dzLTFdLCAnPC9zdHlsZT4nKSA9PT0gZmFsc2UpIHsKCQkJCSRleHRyYWN0ZWRb XSA9ICc8L3N0eWxlPic7CgkJCX0KCQkJaWYgKHN0cnBvcygkZXh0cmFjdGVkWzBdLCAnPHN0 eWxlICcpID09PSBmYWxzZSkgewoJCQkJYXJyYXlfdW5zaGlmdCgkZXh0cmFjdGVkLCAnPHN0 eWxlIHR5cGU9InRleHQvY3NzIj4nKTsKCQkJfQoJCX0KCX0KCWlmICgkZGVsZXRlKSB7CgkJ cmV0dXJuIGFycmF5KHRyaW0oam9pbigiXG4iLCAkZXh0cmFjdGVkKSksIHRyaW0oam9pbigi XG4iLCAkcmVtYWlucykpKTsKCX0gZWxzZSB7CgkJcmV0dXJuIHRyaW0oam9pbigiXG4iLCAk ZXh0cmFjdGVkKSk7Cgl9Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVkX3BsdWdpbl9tYWtl X2FycmF5KCRhcnIpIHsKCWlmICghaXNfYXJyYXkoJGFycikpIHsKCQkkYXJyID0gZXhwbG9k ZSgiXG4iLCAkYXJyKTsKCX0KCSRzb3VyY2VfbGluZXMgPSBjb3VudCgkYXJyKTsKCWZvciAo JGlkeD0wOyAkaWR4IDwgJHNvdXJjZV9saW5lczsgJGlkeCsrKSB7CgkJJGFyclskaWR4XSA9 IHJ0cmltKCRhcnJbJGlkeF0pOwoJfQoJcmV0dXJuICRhcnI7Cn0KCi8vIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVu Y3Rpb24gaWVkX3BsdWdpbl9tYWtlX21hcmtlcnMoJGh1bmssICRzdGFydCwgJGVuZCkgewoJ Z2xvYmFsICRpZWRfcGx1Z2luX2dsb2JhbHM7Cgkkc21hcmtlciA9ICRzdGFydCAuIHN0cl9y ZXBsYWNlKCJTRUNUSU9OIiwgJGh1bmssICRpZWRfcGx1Z2luX2dsb2JhbHNbJ3N0YXJ0J10p IC4gKCgkZW5kKT8nICcuJGVuZDonJyk7CgkkZW1hcmtlciA9ICRzdGFydCAuIHN0cl9yZXBs YWNlKCJTRUNUSU9OIiwgJGh1bmssICRpZWRfcGx1Z2luX2dsb2JhbHNbJ2VuZCddKSAuICgo JGVuZCk/JyAnLiRlbmQ6JycpOwoJcmV0dXJuIChhcnJheSgkc21hcmtlciwgJGVtYXJrZXIp KTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQovLyByaXBwZWQgYW5kIG1vZGRlZCBmcm9tIG5ldC1jYXJ2ZXIn cyB6ZW1fdHBsIHRlbXBsYXRlCmZ1bmN0aW9uIGllZF9wbHVnaW5fYWRtaW5fY2hlY2soJGNv ZGVibG9jaywgJHR5cGUpIHsKCSRyZSA9ICcvdHhwaW50ZXJmYWNlXHMqKD09fD09PSkuKmFk bWlufGFkbWluLiooPT18PT09KS4qdHhwaW50ZXJmYWNlLyc7CgkkcmV0ID0gdHJ1ZTsKCWlm IChwcmVnX21hdGNoKCRyZSwgJGNvZGVibG9jaykgJiYgJHR5cGUgPT0gMCkgewoJCSRyZXQg PSBmYWxzZTsKCX0KCXJldHVybiAkcmV0Owp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGllZF9w bHVnaW5fdGV4dGlsZSgkaGVscCwgJGNzcywgJHN0YXJ0X2RsbSwgJGVuZF9kbG0pIHsKCUBp bmNsdWRlX29uY2UgdHhwYXRoLicvbGliL2NsYXNzVGV4dGlsZS5waHAnOwoJJG91dCA9ICRo ZWxwOwoJaWYgKGNsYXNzX2V4aXN0cygnVGV4dGlsZScpKSB7CgkJLy8gVHJ5IGFuZCBiZSBh IGxpdHRsZSBtb3JlIGludGVsbGlnZW50IGFib3V0IGFwcGx5aW5nIHRleHRpbGUgb3Igbm90 CgkJJHJlID0gJy9oWzAtNl0oXCguKlwpKT9cLi8nOwoJCWlmIChwcmVnX21hdGNoKCRyZSwg JGhlbHApKSB7CgkJCSR0ZXh0aWxlID0gbmV3IFRleHRpbGUoKTsKCQkJJG91dCA9ICR0ZXh0 aWxlLT5UZXh0aWxlVGhpcygkaGVscCk7CgkJfQoJfQoJJG91dCAuPSAoJGNzcykgPyAiXG4k c3RhcnRfZGxtXG4kY3NzXG4kZW5kX2RsbVxuIiA6ICcnOwoJcmV0dXJuICRvdXQ7Cn0KCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KZnVuY3Rpb24gaWVkX2luc2VydF9lZGl0b3JzKCkgewoJZ2xvYmFsICRwcmVm cywgJGllZF9wbHVnaW5fcHJlZnM7Cgkkb3V0ID0gYXJyYXkoKTsKCgkkcHJlZmtleXMgPSBk b1F1b3RlKGltcGxvZGUoIicsJyIsYXJyYXlfa2V5cygkaWVkX3BsdWdpbl9wcmVmc1swXSkp KTsKCSRycyA9IHNhZmVfcm93cygnbmFtZSx2YWwsaHRtbCcsJ3R4cF9wcmVmcycsJ25hbWUg aW4gKCcuJHByZWZrZXlzLicpJyk7CglpZiAoY291bnQoJHJzKSA9PSBjb3VudCgkaWVkX3Bs dWdpbl9wcmVmc1swXSkpIHsKCQkkZWQgPSBhcnJheSgpOwoJCSRlZFskcHJlZnNbJ2llZF9w bHVnaW5fZWRpdG9yJ11dID0gJHByZWZzWydpZWRfcGx1Z2luX2VkaXRvcl9wYXRoJ107CgkJ JGVkWyRwcmVmc1snaWVkX3BsdWdpbl9oZWxwX2VkaXRvciddXSA9ICRwcmVmc1snaWVkX3Bs dWdpbl9oZWxwX2VkaXRvcl9wYXRoJ107CgoJCWZvcmVhY2ggKCRlZCBhcyAkZWRpdG9yID0+ ICRlZGl0b3JfZGlyKSB7CgkJCXN3aXRjaCAoJGVkaXRvcikgewoJCQkJY2FzZSAidGlueV9t Y2UiOgoJCQkJCSRvdXRbXSA9IDw8PEVPRgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw dCIgc3JjPSInLiRlZGl0b3JfZGlyLicvdGlueV9tY2UuanMiPjwvc2NyaXB0Pgo8c2NyaXB0 IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cgl0aW55TUNFLmluaXQoewoJCW1vZGUgOiAic3Bl Y2lmaWNfdGV4dGFyZWFzIiwKCQllZGl0b3Jfc2VsZWN0b3IgOiAibWNlRWRpdG9yIiwKCQl0 aGVtZV9hZHZhbmNlZF90b29sYmFyX2xvY2F0aW9uIDogInRvcCIsCgkJdGhlbWVfYWR2YW5j ZWRfYnV0dG9uczEgOiAiYm9sZCxpdGFsaWMsdW5kZXJsaW5lLHN0cmlrZXRocm91Z2gsZm9y ZWNvbG9yLGJhY2tjb2xvcixyZW1vdmVmb3JtYXQsbnVtbGlzdCxidWxsaXN0LG91dGRlbnQs aW5kZW50LGp1c3RpZnlsZWZ0LGp1c3RpZnljZW50ZXIsanVzdGlmeXJpZ2h0LGp1c3RpZnlm dWxsIiwKCQl0aGVtZV9hZHZhbmNlZF9idXR0b25zMiA6ICJsaW5rLHVubGluayxzZXBhcmF0 b3IsaWJyb3dzZXIsc2VwYXJhdG9yLHNlYXJjaCxyZXBsYWNlLHNlcGFyYXRvcixjdXQsY29w eSxwYXN0ZSxzZXBhcmF0b3IsY29kZSxzZXBhcmF0b3IsZm9ybWF0c2VsZWN0IiwKCQl0aGVt ZV9hZHZhbmNlZF9idXR0b25zMyA6ICIiCgl9KTsKPC9zY3JpcHQ+OwpFT0Y7CgkJCQkJYnJl YWs7CgkJCQljYXNlICJlZGl0X2FyZWEiOgoJCQkJCSRvdXRbXSA9IDw8PEVPRgo8c2NyaXB0 IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIkZWRpdG9yX2Rpci9lZGl0X2FyZWFfZnVs bC5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCS8vIGlu aXRpYWxpc2F0aW9uCgllZGl0QXJlYUxvYWRlci5pbml0KHsKCQlpZDogInBsdWdpbl9lZGl0 b3IiCS8vIGlkIG9mIHRoZSB0ZXh0YXJlYSB0byB0cmFuc2Zvcm0KCQksc3RhcnRfaGlnaGxp Z2h0OiB0cnVlCS8vIGlmIHN0YXJ0IHdpdGggaGlnaGxpZ2h0CgkJLGFsbG93X3Jlc2l6ZTog ImJvdGgiCgkJLGFsbG93X3RvZ2dsZTogdHJ1ZQoJCSxsYW5ndWFnZTogImVuIgoJCSxzeW50 YXg6ICJwaHAiCgl9KTsKPC9zY3JpcHQ+CkVPRjsKCQkJCQlicmVhazsKCQkJCWNhc2UgImNv ZGVwcmVzcyI6CgkJCQkJJG91dFtdID0gJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0 IiBzcmM9IicuJGVkaXRvcl9kaXIuJy9jb2RlcHJlc3MuanMiPjwvc2NyaXB0Pic7CgkJCQkJ YnJlYWs7CgkJCX0KCQl9Cgl9CgoJcmV0dXJuIGltcGxvZGUoIlxuIiwgJG91dCk7Cn0KCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KZnVuY3Rpb24gaWVkX3BsdWdpbl9oZWxwX3ZpZXdlcigkbWVzc2FnZT0nJykg ewoJZ2xvYmFsICRpZWRfcGx1Z2luX2dsb2JhbHM7CglwYWdldG9wKGdUeHQoJ2VkaXRfcGx1 Z2lucycpLCRtZXNzYWdlKTsKCglpZiAoZ3BzKCduYW1lJykpIHsKCQkkbmFtZSA9IGdwcygn bmFtZScpOwoJCSRoZWxwID0gKCRuYW1lKSA/IGZldGNoKCdoZWxwJywndHhwX3BsdWdpbics J25hbWUnLCRuYW1lKSA6ICcnOwoJCWxpc3QoJGNzcywkaGVscCkgPSAoJGhlbHApID8gaWVk X3BsdWdpbl9leHRyYWN0X2h1bmsoJGhlbHAsICJDU1MiLCAiPCEtLXwtLT4iLCB0cnVlKSA6 IGFycmF5KCcnLCRoZWxwKTsKCX0gZWxzZSBpZiAoZ3BzKCdmaWxlbmFtZScpKSB7CgkJJHBs dWdpbj1pZWRfcGx1Z2luX3JlYWRfZmlsZSgkR0xPQkFMU1sncHJlZnMnXVsncGx1Z2luX2Nh Y2hlX2RpciddLkRTLmdwcygnZmlsZW5hbWUnKSk7CgkJZXh0cmFjdCgkcGx1Z2luKTsKCX0K CWVjaG8gc3RhcnRUYWJsZSgnZWRpdCcpOwoJaWYgKGVtcHR5KCRoZWxwKSkgewoJCWVjaG8g dHIodGRhKCc8cD5IZWxwIG5vdCBhY2Nlc3NpYmxlIGZyb20gdGhpcyBmaWxlLjwvcD4nKSk7 Cgl9IGVsc2UgewoJCWxpc3QgKCRzdGFydF9jc3MsICRlbmRfY3NzKSA9IGllZF9wbHVnaW5f bWFrZV9tYXJrZXJzKCJDU1MiLCAkaWVkX3BsdWdpbl9nbG9iYWxzWydjc3Nfc3RhcnQnXSwg JGllZF9wbHVnaW5fZ2xvYmFsc1snY3NzX2VuZCddKTsKCQkkcGx1Z2luWydoZWxwJ10gPSBp ZWRfcGx1Z2luX3RleHRpbGUoJGhlbHAsICRjc3MsICRzdGFydF9jc3MsICRlbmRfY3NzKTsK CQllY2hvIHRyKHRkYSggJzxwPkV4dHJhY3RlZCAnLighZW1wdHkoJHBsdWdpblsnaGVscCdd KSA/ICdhbmQgVGV4dGlsZSBwcm9jZXNzZWQnIDogJycpLicgaGVscCBzZWN0aW9uIGZvbGxv d3MmIzgyMzA7PC9wPjxocj4nLCAnIHdpZHRoPSI2MDAiJykpOwoJCWVjaG8gdHIodGRhKCRw bHVnaW5bJ2hlbHAnXSwgJyB3aWR0aD0iNjAwIicpKTsKCX0KCWVjaG8gZW5kVGFibGUoKTsK fQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBpZWRfcGx1Z2luX3NldHVwKCRtZXNzYWdlPScnKSB7 CglnbG9iYWwgJGllZF9wbHVnaW5fcHJlZnM7CgkkbnVtUmVxUHJlZnMgPSBjb3VudCgkaWVk X3BsdWdpbl9wcmVmc1swXSk7CgoJcGFnZXRvcChnVHh0KCdlZGl0X3BsdWdpbnMnKSwkbWVz c2FnZSk7CgkkcHJlZmtleXMgPSBkb1F1b3RlKGltcGxvZGUoIicsJyIsYXJyYXlfa2V5cygk aWVkX3BsdWdpbl9wcmVmc1swXSkpKTsKCSRycyA9IHNhZmVfcm93cygnbmFtZSx2YWwsaHRt bCcsJ3R4cF9wcmVmcycsJ25hbWUgaW4gKCcuJHByZWZrZXlzLicpJyk7CgkkbnVtUm93cyA9 IGNvdW50KCRycyk7CgoJJGJ0blNhdmUgPSBmSW5wdXQoJ3N1Ym1pdCcsICdzdWJtaXQnLCBn VHh0KCdzYXZlJyksICdwdWJsaXNoJyk7CgkkYnRuSW5zdGFsbCA9ICc8Zm9ybSBtZXRob2Q9 InBvc3QiIGFjdGlvbj0iP2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVk X3BsdWdpbl9wcmVmc19pbnN0YWxsIiBzdHlsZT0iZGlzcGxheTppbmxpbmUiPicuZklucHV0 KCdzdWJtaXQnLCAnc3VibWl0JywgZ1R4dCgnaW5zdGFsbCcpLCAncHVibGlzaCcpLic8L2Zv cm0+JzsKCSRidG5SZW1vdmUgPSAnPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVu dD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtzdGVwPWllZF9wbHVnaW5fcHJlZnNfcmVtb3Zl IiBzdHlsZT0iZGlzcGxheTppbmxpbmUiPicuZklucHV0KCdzdWJtaXQnLCAnc3VibWl0Jywg Z1R4dCgnZGVsZXRlJyksICdwdWJsaXNoJykuJzwvZm9ybT4nOwoJJGJ0blN0eWxlID0gJyBz dHlsZT0iYm9yZGVyOjA7aGVpZ2h0OjI1cHgiJzsKCgllY2hvIHN0YXJ0VGFibGUoJ2xpc3Qn KTsKCWlmICgkbnVtUm93cyA9PSAkbnVtUmVxUHJlZnMpIHsKCQkvLyBQcmVmcyBhbGwgaW5z dGFsbGVkCgkJZWNobyB0cih0ZGEoc3Ryb25nKGllZF9wbHVnaW5fZ1R4dCgncHJlZnNfdGl0 bGUnKSksICcgY29sc3Bhbj0iMiInKSAuIHRkYSgkYnRuUmVtb3ZlLCAkYnRuU3R5bGUpICk7 CgkJZWNobyAnPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD1pZWRfcGx1Z2lu X2NvbXBvc2VyJiMzODtzdGVwPWllZF9wbHVnaW5fcHJlZnNfdXBkYXRlIj4nOwoJCWZvciAo JGlkeCA9IDA7ICRpZHggPCAkbnVtUm93czsgJGlkeCsrKSB7CgkJCSRhID0gJHJzWyRpZHhd OwoJCQkkbGFiZWwgPSAnPGxhYmVsIGZvcj0iJy4kYVsnbmFtZSddLiciPicuaWVkX3BsdWdp bl9nVHh0KCRhWyduYW1lJ10pLic6PC9sYWJlbD4nOwoJCQkkb3V0ID0gdGRhKCRsYWJlbCwg JyBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Iicp OwoJCQlzd2l0Y2goJGFbJ25hbWUnXSkgewoJCQkJY2FzZSAiaWVkX3BsdWdpbl9lZGl0b3Jf cGF0aCI6CgkJCQljYXNlICJpZWRfcGx1Z2luX2hlbHBfZWRpdG9yX3BhdGgiOgoJCQkJY2Fz ZSAiaWVkX3BsdWdpbl9vdXRwdXRfc2ZpbGUiOgoJCQkJY2FzZSAiaWVkX3BsdWdpbl9vdXRw dXRfc2ZpbGVjIjoKCQkJCWNhc2UgImllZF9wbHVnaW5fb3V0cHV0X3NmaWxlcCI6CgkJCQkJ JG91dCAuPSB0ZChmSW5wdXQoJ3RleHQnLCAkYVsnbmFtZSddLCAkYVsndmFsJ10sICdlZGl0 JywgJycsICcnLCA1MCwgJycsICRhWyduYW1lJ10pKTsKCQkJCQlicmVhazsKCQkJCWNhc2Ug ImllZF9wbHVnaW5fZWRpdG9yIjoKLy8JCQkJCSRvdXQgLj0gdGQoc2VsZWN0SW5wdXQoJGFb J25hbWUnXSwgYXJyYXkoJ25vbmUnID0+ICdOb25lJywgJ2VkaXRfYXJlYScgPT4gJ0VkaXQg QXJlYScsICdjb2RlcHJlc3MnID0+ICdDb2RlUHJlc3MnKSwgJGFbJ3ZhbCddLCAnJywgJyBv bmNoYW5nZT0iaWVkX3BsdWdpbl9wcmVmc3dhcCh0aGlzLmlkLCB0aGlzLnZhbHVlKTsiJywg JGFbJ25hbWUnXSkpOwoJCQkJCSRvdXQgLj0gdGQoc2VsZWN0SW5wdXQoJGFbJ25hbWUnXSwg YXJyYXkoJ25vbmUnID0+ICdOb25lJywgJ2VkaXRfYXJlYScgPT4gJ0VkaXQgQXJlYScpLCAk YVsndmFsJ10sICcnLCAnIG9uY2hhbmdlPSJpZWRfcGx1Z2luX3ByZWZzd2FwKHRoaXMuaWQs IHRoaXMudmFsdWUpOyInLCAkYVsnbmFtZSddKSk7CgkJCQkJYnJlYWs7CgkJCQljYXNlICJp ZWRfcGx1Z2luX2hlbHBfZWRpdG9yIjoKCQkJCQkkb3V0IC49IHRkKHNlbGVjdElucHV0KCRh WyduYW1lJ10sIGFycmF5KCd0ZXh0aWxlJyA9PiAnTm9uZSAoVGV4dGlsZSknLCAndGlueV9t Y2UnID0+ICdUaW55IE1DRScpLCAkYVsndmFsJ10sICcnLCAnIG9uY2hhbmdlPSJpZWRfcGx1 Z2luX3ByZWZzd2FwKHRoaXMuaWQsIHRoaXMudmFsdWUpOyInLCAkYVsnbmFtZSddKSk7CgkJ CQkJYnJlYWs7CgkJCQljYXNlICJpZWRfcGx1Z2luX291dHB1dF9vcmRlciI6CgkJCQkJJG91 dCAuPSB0ZChyYWRpbygkYVsnbmFtZSddLDAsKCgkYVsndmFsJ109PTApPzE6MCkpLmllZF9w bHVnaW5fZ1R4dCgnb3V0cHV0X2NvZGVfZmlyc3QnKS4iICIgLiByYWRpbygkYVsnbmFtZSdd LDEsKCgkYVsndmFsJ109PTEpPzE6MCkpLmllZF9wbHVnaW5fZ1R4dCgnb3V0cHV0X2hlbHBf Zmlyc3QnKS4iICIpOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSAiaWVkX3BsdWdpbl9lZGl0b3Jf d2lkdGgiOgoJCQkJCSRvdXQgLj0gdGQoZklucHV0KCd0ZXh0JywgJGFbJ25hbWUnXSwgJGFb J3ZhbCddLCAnZWRpdCcsICcnLCAnJywgNSwgJycsICRhWyduYW1lJ10pKTsKCQkJCQlicmVh azsKCQkJfQoJCQllY2hvIHRyKCRvdXQpOwoJCX0KCQllY2hvIHRyKHRkYSgkYnRuU2F2ZSwg JGJ0blN0eWxlKSk7CgkJZWNobyAnPC9mb3JtPic7Cgl9IGVsc2UgaWYgKCRudW1Sb3dzID4g MCAmJiAkbnVtUm93cyA8ICRudW1SZXFQcmVmcykgewoJCWVjaG8gdHIodGRhKHN0cm9uZyhp ZWRfcGx1Z2luX2dUeHQoJ3ByZWZzX3NvbWUnKSkuYnIuYnIKCQkJCQkJLmllZF9wbHVnaW5f Z1R4dCgncHJlZnNfc29tZV9leHBsYWluJykuYnIuYnIKCQkJCQkJLmllZF9wbHVnaW5fZ1R4 dCgncHJlZnNfc29tZV9vcHRpb25zJyksICcgY29sc3Bhbj0iMiInKSk7CgkJZWNobyB0cih0 ZGEoJGJ0blJlbW92ZSwkYnRuU3R5bGUpIC4gdGRhKCRidG5JbnN0YWxsLCAkYnRuU3R5bGUp KTsKCX0gZWxzZSB7CgkJZWNobyB0cih0ZGEoaWVkX3BsdWdpbl9nVHh0KCdwcmVmc19ub3Rf aW5zdGFsbGVkJyksICcgY29sc3Bhbj0iMiInKSk7CgkJZWNobyB0cih0ZGEoJGJ0bkluc3Rh bGwsICRidG5TdHlsZSkpOwoJfQoJZWNobyBlbmRUYWJsZSgpOwoKCWVjaG8gPDw8RU9GCjxz Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KdmFyIGllZF9wbHVnaW5fcGF0aF9yZSA9 IG5ldyBSZWdFeHAoIl4uKlsvXFxdIiwgImciKQpmdW5jdGlvbiBpZWRfcGx1Z2luX3ByZWZz d2FwKHNlbElELCBzZWxWYWx1ZSkgewoJdmFyIGlkID0gc2VsSUQrJ19wYXRoJzsKCXZhciBu dXZhbCA9ICgoYmFzZW5hbWUoJCgiIyIraWQpLnZhbCgpKSA9PSBzZWxWYWx1ZSkgPyAkKCIj IitpZCkudmFsKCkgOiBkaXJuYW1lKCQoIiMiK2lkKS52YWwoKSkrc2VsVmFsdWUpOwoJaWYg KCQoIiMiK3NlbElEKVswXS5zZWxlY3RlZEluZGV4ID09IDApIHsKCQkkKCIjIitpZCkuYXR0 cigiZGlzYWJsZWQiLCB0cnVlKTsgOwoJfSBlbHNlIHsKCQkkKCIjIitpZCkuYXR0cigiZGlz YWJsZWQiLCBmYWxzZSk7IDsKCQkkKCIjIitpZCkudmFsKG51dmFsKTsKCX0KfQpmdW5jdGlv biBiYXNlbmFtZShwYXRoLCBzdWZmaXgpIHsKCXJldHVybiBwYXRoLnJlcGxhY2UoaWVkX3Bs dWdpbl9wYXRoX3JlLCAnJyk7Cn0KZnVuY3Rpb24gZGlybmFtZShwYXRoKSB7CglyZXR1cm4g cGF0aC5tYXRjaChpZWRfcGx1Z2luX3BhdGhfcmUpOwp9CiQoZnVuY3Rpb24oKSB7CgkkKCJz ZWxlY3QubGlzdCIpLmVhY2goZnVuY3Rpb24oKSB7CgkJaWVkX3BsdWdpbl9wcmVmc3dhcCh0 aGlzLmlkLCB0aGlzLnZhbHVlKTsKCX0pOwp9KTsKPC9zY3JpcHQ+CkVPRjsKfQoKLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQpmdW5jdGlvbiBpZWRfcGx1Z2luX3ByZWZzX2luc3RhbGwoKSB7CglnbG9iYWwgJGll ZF9wbHVnaW5fcHJlZnM7CgkkbWVzc2FnZSA9ICcnOwoJZm9yZWFjaCAoJGllZF9wbHVnaW5f cHJlZnNbMF0gYXMgJHByZWYgPT4gJGRmbHQpIHsKCQlpZiAoIWZldGNoKCduYW1lJywndHhw X3ByZWZzJywnbmFtZScsJHByZWYpKSB7CgkJCSRpZCA9IHNhZmVfaW5zZXJ0KCd0eHBfcHJl ZnMnLCdwcmVmc19pZD0xLCBuYW1lPScuZG9RdW90ZShkb1NsYXNoKCRwcmVmKSkuJywgdmFs PScuZG9RdW90ZShkb1NsYXNoKCRkZmx0KSkuJyxldmVudD0iaWVkX3BsdWdpbiInKTsKCQl9 Cgl9CgkkbWVzc2FnZSA9IGllZF9wbHVnaW5fZ1R4dCgncHJlZnNfaW5zdGFsbGVkJyk7Cglp ZWRfcGx1Z2luX3NldHVwKCRtZXNzYWdlKTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBpZWRf cGx1Z2luX3ByZWZzX3JlbW92ZSgpIHsKCWdsb2JhbCAkaWVkX3BsdWdpbl9wcmVmczsKCSRt ZXNzYWdlID0gJyc7Cglmb3JlYWNoIChhcnJheV9tZXJnZSgkaWVkX3BsdWdpbl9wcmVmc1sw XSwkaWVkX3BsdWdpbl9wcmVmc1sxXSkgYXMgJHByZWYgPT4gJGRmbHQpIHsKCQlpZiAoZmV0 Y2goJ25hbWUnLCd0eHBfcHJlZnMnLCduYW1lJywkcHJlZikpIHsKCQkJJGlkID0gc2FmZV9k ZWxldGUoJ3R4cF9wcmVmcycsJ25hbWU9Jy5kb1F1b3RlKGRvU2xhc2goJHByZWYpKSk7CgkJ fQoJfQoJJG1lc3NhZ2UgPSBpZWRfcGx1Z2luX2dUeHQoJ3ByZWZzX2RlbGV0ZWQnKTsKCWll ZF9wbHVnaW5fc2V0dXAoJG1lc3NhZ2UpOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGllZF9w bHVnaW5fcHJlZnNfdXBkYXRlKCkgewoJZ2xvYmFsICRpZWRfcGx1Z2luX3ByZWZzOwoJJG1l c3NhZ2UgPSAnJzsKCSRwb3N0ID0gZG9TbGFzaChzdHJpcFBvc3QoKSk7Cglmb3JlYWNoICgk aWVkX3BsdWdpbl9wcmVmc1swXSBhcyAkcHJlZiA9PiAkZGZsdCkgewoJCWlmIChpc3NldCgk cG9zdFskcHJlZl0pKSB7CgkJCXNhZmVfdXBkYXRlKCJ0eHBfcHJlZnMiLCAidmFsID0gJyIu JHBvc3RbJHByZWZdLiInIiwgIm5hbWUgPSAnIi5kb1NsYXNoKCRwcmVmKS4iJyBhbmQgcHJl ZnNfaWQgPSAxIik7CgkJfQoJfQoJJG1lc3NhZ2UgPSBnVHh0KCdwcmVmZXJlbmNlc19zYXZl ZCcpOwoJaWVkX3BsdWdpbl9zZXR1cCgkbWVzc2FnZSk7Cn0KCi8vIEJvb28hIHNhbml0aXpl Rm9yRmlsZSgpIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgY29yZSBzbyBkdXBsaWNhdGUg aXRzIGZ1bmN0aW9uYWxpdHkKaWYgKCFmdW5jdGlvbl9leGlzdHMoInNtZF9zYW5pdGl6ZUZv ckZpbGUiKSkgewpmdW5jdGlvbiBzbWRfc2FuaXRpemVGb3JGaWxlKCRuYW1lKSB7CgkkbmV3 bmFtZSA9IHByZWdfcmVwbGFjZSgnL1tceDAwLVx4MWZceDIyXHgyYVx4MmZceDNhXHgzY1x4 M2VceDNmXHg1Y1x4N2NceDdmXSsvJywgJycsICRuYW1lKTsKCSRuZXduYW1lID0gcHJlZ19y ZXBsYWNlKCcvWy5dezIsfS8nLCAnLicsIHRyaW0oJG5ld25hbWUsICcuICcpKTsKCXJldHVy biAkbmV3bmFtZTsKfQp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGllZF9wbHVnaW5fZ1R4dCgk d2hhdCwgJGF0dHMgPSBhcnJheSgpKSB7CgkkbGFuZyA9IGFycmF5KAoJCSdjaGVja190eXBl JyA9PiAnQ2hlY2sgeW91ciBwbHVnaW4gdHlwZSEnLAoJCSdjaG9vc2VfZmlsZScgPT4gJ1lv dSBhcmUgc3VwcG9zZWQgdG8gY2hvb3NlIHRoZSBmaWxlIDspJywKCQknY29kZV9kaXN0JyA9 PiAnUGx1Z2luIGNvZGU8YnI+Zm9yIGRpc3RyaWJ1dGlvbicsCgkJJ2llZF9wbHVnaW5fY29t cG9zZXInID0+ICdQbHVnaW4gQ29tcG9zZXInLAoJCSdjb21wcmVzcycgPT4gJ1ppcCcsCgkJ J2NyZWF0ZV9uZXcnID0+ICdDcmVhdGUgbmV3IHBsdWdpbicsCgkJJ2VuYWJsZScgPT4gJ0Vu YWJsZWQnLAoJCSdleHBvcnQnID0+ICdFeHBvcnQgYXMnLAoJCSdpZWRfcGx1Z2luX2VkaXRv cicgPT4gJ1BsdWdpbiBlZGl0b3InLAoJCSdpZWRfcGx1Z2luX2VkaXRvcl9wYXRoJyA9PiAn UGx1Z2luIGVkaXRvciBwYXRoIFVSTCcsCgkJJ2llZF9wbHVnaW5fZWRpdG9yX3dpZHRoJyA9 PiAnUGx1Z2luIGVkaXRvciB3aWR0aCAoY2hhcnMpJywKCQknaWVkX3BsdWdpbl9oZWxwX2Vk aXRvcicgPT4gJ0hlbHAgZWRpdG9yJywKCQknaWVkX3BsdWdpbl9oZWxwX2VkaXRvcl9wYXRo JyA9PiAnSGVscCBlZGl0b3IgcGF0aCBVUkwnLAoJCSdpZWRfcGx1Z2luX291dHB1dF9vcmRl cicgPT4gJ1BIUCBleHBvcnQgb3JkZXInLAoJCSdpZWRfcGx1Z2luX291dHB1dF9zZmlsZScg PT4gJ0V4cG9ydCBwbHVnaW4gZmlsZW5hbWUgZm9ybWF0JywKCQknaWVkX3BsdWdpbl9vdXRw dXRfc2ZpbGVjJyA9PiAnRXhwb3J0IGNvbXByZXNzZWQgZmlsZW5hbWUgZm9ybWF0JywKCQkn aWVkX3BsdWdpbl9vdXRwdXRfc2ZpbGVwJyA9PiAnUGx1Z2luIHRlbXBsYXRlIGZpbGVuYW1l IGZvcm1hdCcsCgkJJ25hbWUnID0+ICdQbHVnaW4gbmFtZScsCgkJJ25hbWVfZmlyc3QnID0+ ICdZb3UgYXJlIHN1cHBvc2VkIHRvIG5hbWUgdGhlIHBsdWdpbiA7KScsCgkJJ25hbWVfdG9v bHRpcCcgPT4gJ09ubHkgbmVlZGVkIGlmIHRoZSBQSFAgZmlsZSB5b3UgYXJlIHVwbG9hZGlu ZyBpcyBOT1QgaW4gdGhlIHN0YW5kYXJkIHRlbXBsYXRlIGZvcm1hdCcsCgkJJ2xvYWRfb3Jk ZXInID0+ICdMb2FkIG9yZGVyJywKCQknbG9hZF9vcmRlcl9oZWxwJyA9PiAnKDE9Zmlyc3Qs IDU9bm9ybWFsLCA5PWxhc3QpJywKCQknb3V0cHV0X2NvZGVfZmlyc3QnID0+ICdDb2RlIGZp cnN0JywKCQknb3V0cHV0X2hlbHBfZmlyc3QnID0+ICdIZWxwIGZpcnN0JywKCQkncGx1Z2lu X2NvZGUnID0+ICdTb3VyY2UgY29kZScsCgkJJ3ByZWZzX2RlbGV0ZWQnID0+ICdQcmVmZXJl bmNlcyBkZWxldGVkJywKCQkncHJlZnNfaW5zdGFsbGVkJyA9PiAnUHJlZmVyZW5jZXMgaW5z dGFsbGVkJywKCQkncHJlZnNfbm90X2luc3RhbGxlZCcgPT4gJ1ByZWZlcmVuY2VzIG5vdCBp bnN0YWxsZWQuJywKCQkncHJlZnNfc29tZScgPT4gJ05vdCBhbGwgcHJlZmVyZW5jZXMgYXZh aWxhYmxlLicsCgkJJ3ByZWZzX3NvbWVfZXhwbGFpbicgPT4gJ0l0IGlzIGVpdGhlciBiZWNh dXNlIHRoaXMgaXMgYSBkaWZmZXJlbnQgdmVyc2lvbiBvZiB0aGUnLmJyLidwbHVnaW4gdG8g b25lIHlvdSBoYWQgYmVmb3JlIG9yIHRoZSBwcmVmZXJlbmNlcycuYnIuJ2hhdmUgYmVjb21l IGNvcnJ1cHQgc29tZWhvdy4nLAoJCSdwcmVmc19zb21lX29wdGlvbnMnID0+ICdDaG9vc2Ug Jy5nVHh0KCdkZWxldGUnKS4nIHRvIHJlbW92ZSB0aGVtIGFsbCBvciAnLmdUeHQoJ2luc3Rh bGwnKS4nIHRvIGFkZCcuYnIuJ2FueSBuZXcgb25lcywgbGVhdmluZyBhbGwgZXhpc3Rpbmcg cHJlZmVyZW5jZXMgdW50b3VjaGVkLicsCgkJJ3ByZWZzX3RpdGxlJyA9PiAnUGx1Z2luIENv bXBvc2VyIHByZWZlcmVuY2VzJywKCQkncmVuYW1lX2ZhaWxlZCcgPT4gJyAocmVuYW1lIGZh aWxlZCkuICcsCgkJJ3JlbmFtZV9maWxlJyA9PiAnUmVuYW1lIGZpbGUnLAoJCSdyZW5hbWVk JyA9PiAnIGFuZCByZW5hbWVkLiAnLAoJCSdyZXN0b3JlX2hlbHAnID0+ICdSb2xsIGJhY2sg dGhlIHBsdWdpbiBjb2RlIHRvIHRoZSBtb3N0IHJlY2VudCByZXN0b3JlIHBvaW50JywKCQkn cmVzdG9yZV9wb2ludCcgPT4gJ1Jlc3RvcmUgcG9pbnQnLAoJCSdyZXN0b3JlX3ZlcmlmeScg PT4gJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByb2xsYmFjayB0aGUge25hbWV9IHNvdXJj ZSBjb2RlIHRvIGl0cyBsYXN0IHJlc3RvcmUgcG9pbnQ/JywKCQkncmVzdG9yZWQnID0+ICdQ bHVnaW4ge25hbWV9IHJlc3RvcmVkLicsCgkJJ3J1bl9mcm9tJyA9PiAnUGx1Z2lucyB0aGF0 IHJ1biBmcm9tJywKCQknc2F2ZV9hcycgPT4gJ1NhdmUgYXMnLAoJCSdzZXR1cCcgPT4gJ1Nl dHVwJywKCQkndHlwZScgPT4gJ1BsdWdpbiB0eXBlJywKCQkndHlwZV8wJyA9PiAnQ2xpZW50 JywKCQkndHlwZV8xJyA9PiAnQWRtaW4gKyBDbGllbnQnLAoJCSd0eXBlXzInID0+ICdMaWJy YXJ5JywKCQkndHlwZV8zJyA9PiAnQWRtaW4nLAoJCSd1cGxvYWRfcGhwJyA9PiAnVXBsb2Fk IHBsdWdpbiBmcm9tIFBIUCBmaWxlJywKCQkndXRpbGl0aWVzJyA9PiAnVXRpbGl0aWVzICg8 c3Ryb25nPnVzZSBvbmx5IGFmdGVyIHNhdmluZyB0aGUgZGF0YSBhYm92ZTwvc3Ryb25nPikn LAoJKTsKCXJldHVybiBzdHJ0cigkbGFuZ1skd2hhdF0sICRhdHRzKTsKfSI7czozOiJtZDUi O3M6MzI6ImJhY2FkZmE1ODZlNTA0MTE2MWQ3NDIzOGNkZTExMDQ1Ijt9