# Name: smd_macro v0.11 # Type: Admin/Public side plugin # Define custom macros/virtual TXP tags for your site # Author: Stef Dawson # URL: http://stefdawson.com/ # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjk6InNtZF9tYWNybyI7czo2OiJhdXRob3IiO3M6MTE6IlN0 ZWYgRGF3c29uIjtzOjEwOiJhdXRob3JfdXJpIjtzOjIyOiJodHRwOi8vc3RlZmRhd3Nvbi5j b20vIjtzOjc6InZlcnNpb24iO3M6NDoiMC4xMSI7czoxMToiZGVzY3JpcHRpb24iO3M6NTE6 IkRlZmluZSBjdXN0b20gbWFjcm9zL3ZpcnR1YWwgVFhQIHRhZ3MgZm9yIHlvdXIgc2l0ZSI7 czo0OiJjb2RlIjtzOjI0ODk1OiJpZihAdHhwaW50ZXJmYWNlID09ICdhZG1pbicpIHsNCgln bG9iYWwgJHNtZF9tYWNyb19ldmVudCwgJHNtZF9tYWNyb19zdHlsZXM7DQoJJHNtZF9tYWNy b19ldmVudCA9ICdzbWRfbWFjcm8nOw0KDQoJYWRkX3ByaXZzKCRzbWRfbWFjcm9fZXZlbnQs JzEsMicpOw0KCXJlZ2lzdGVyX3RhYignY29udGVudCcsICRzbWRfbWFjcm9fZXZlbnQsIHNt ZF9tYWNyb19nVHh0KCdzbWRfbWFjcm9fdGFiX25hbWUnKSk7DQoJcmVnaXN0ZXJfY2FsbGJh Y2soJ3NtZF9tYWNyb19kaXNwYXRjaGVyJywgJ3NtZF9tYWNybycpOw0KCXJlZ2lzdGVyX2Nh bGxiYWNrKCdzbWRfbWFjcm9fdXBsb2FkX2Zvcm0nLCAkc21kX21hY3JvX2V2ZW50LidfdWkn LCAndXBsb2FkX2Zvcm0nKTsNCglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX21hY3JvX3dlbGNv bWUnLCAncGx1Z2luX2xpZmVjeWNsZS5zbWRfbWFjcm8nKTsNCn0NCg0KaWYgKCFkZWZpbmVk KCdTTURfTUFDUk8nKSkgew0KCWRlZmluZSgiU01EX01BQ1JPIiwgJ3NtZF9tYWNybycpOw0K fQ0KDQovLyBCb290c3RyYXAgdGhlIGZ1bmN0aW9uIGluc2VydGlvbg0KcmVnaXN0ZXJfY2Fs bGJhY2soJ3NtZF9tYWNyb19ib290JywgJ3ByZXRleHQnKTsNCg0KLy8gKioqKioqKioqKioq KioqKioqKioNCi8vIEFETUlOIFNJREUgSU5URVJGQUNFDQovLyAqKioqKioqKioqKioqKioq KioqKg0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9tYWNy b19kaXNwYXRjaGVyKCRldnQsICRzdHApIHsNCglpZighJHN0cCBvciAhaW5fYXJyYXkoJHN0 cCwgYXJyYXkoDQoJCQknc21kX21hY3JvX3RhYmxlX2luc3RhbGwnLA0KCQkJJ3NtZF9tYWNy b190YWJsZV9yZW1vdmUnLA0KCQkJJ3NtZF9tYWNyb19wcmVmc2F2ZScsDQoJCQknc21kX21h Y3JvX3NhdmUnLA0KCQkJJ3NtZF9tYWNyb19kZWxldGUnLA0KCQkpKSkgew0KCQlzbWRfbWFj cm8oJycpOw0KCX0gZWxzZSAkc3RwKCk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KZnVuY3Rpb24gc21kX21hY3JvX3dlbGNvbWUoJGV2dCwgJHN0cCkgew0KCSRtc2cg PSAnJzsNCglzd2l0Y2ggKCRzdHApIHsNCgkJY2FzZSAnaW5zdGFsbGVkJzoNCgkJCXNtZF9t YWNyb190YWJsZV9pbnN0YWxsKDApOw0KCQkJJG1zZyA9ICdHbyBnbyBnYWRnZXQgbWFjcm8h JzsNCgkJCWJyZWFrOw0KCQljYXNlICdkZWxldGVkJzoNCgkJCXNtZF9tYWNyb190YWJsZV9y ZW1vdmUoMCk7DQoJCQlicmVhazsNCgl9DQoJcmV0dXJuICRtc2c7DQp9DQoNCg0KLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfbWFjcm8oJG1zZz0nJykgew0K CWdsb2JhbCAkc21kX21hY3JvX2V2ZW50Ow0KDQoJJGV4cG9ydF9saXN0ID0gZ3BzKCdzbWRf bWFjcm9fZXhwb3J0Jyk7DQoJJG1heF9maWxlX3NpemUgPSBnZXRfcHJlZignc21kX21hY3Jv X2ltcG9ydF9maWxlc2l6ZScsIDE1ICogMTAyNCk7DQoNCglpZiAoZ3BzKCdzdGVwJykgPT0g J3NtZF9tYWNyb19leHBvcnQnICYmICRleHBvcnRfbGlzdCkgew0KCQkvLyBHZW5lcmF0ZSBh biBhc3NvY2lhdGl2ZSBhcnJheSB0aGF0IGlzIHRyYW5zbGF0ZWQgdG8gYW4gaW5pIGZpbGUN CgkJJG91dCA9IGFycmF5KCk7DQoJCSRyb3dzID0gc2FmZV9yb3dzKCcqJywgU01EX01BQ1JP LCAibWFjcm9fbmFtZSBJTiAoJyIuam9pbigiJywnIiwgZG9TbGFzaCgkZXhwb3J0X2xpc3Qp KS4iJykiKTsNCgkJZm9yZWFjaCAoJHJvd3MgYXMgJHJvdykgew0KCQkJJGF0dHMgPSB1bnNl cmlhbGl6ZSgkcm93WydhdHRyaWJ1dGVzJ10pOw0KCQkJJG91dGF0dHMgPSBhcnJheSgpOw0K CQkJZm9yZWFjaCAoJGF0dHMgYXMgJGF0dCA9PiAkdmFscykgew0KCQkJCSRvdXRhdHRzW10g PSBqb2luKCd8JywgYXJyYXkoJGF0dCwgJHZhbHNbJ2RlZmF1bHQnXSwgJHZhbHNbJ3JlcCdd KSk7DQoJCQl9DQoJCQkkb3V0WyRyb3dbJ21hY3JvX25hbWUnXV0gPSBhcnJheSgNCgkJCQkn ZGVzY3JpcHRpb24nID0+ICRyb3dbJ2Rlc2NyaXB0aW9uJ10sDQoJCQkJJ2F0dHJpYnV0ZXMn ID0+ICRvdXRhdHRzLA0KCQkJCSdkZWZpbml0aW9uJyA9PiAkcm93WydkZWZpbml0aW9uJ10s DQoJCQkpOw0KCQl9DQoNCgkJJGNvbnRlbnQgPSBzbWRfbWFjcm9fY3JlYXRlX2luaSgkb3V0 LCBhcnJheSgnZGVmaW5pdGlvbicgPT4gJ2Jhc2U2NF9lbmNvZGUnKSk7DQoNCgkJaGVhZGVy KCJDb250ZW50LVR5cGU6IHRleHQvcGxhaW4iKTsNCgkJaGVhZGVyKCJDb250ZW50LURpc3Bv c2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1cInNtZF9tYWNyb3MuaW5pXCIiKTsNCgkJ aGVhZGVyKCJDb250ZW50LUxlbmd0aDogIiAuIHN0cmxlbigkY29udGVudCkpOw0KCQloZWFk ZXIoIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJpbmFyeSIpOw0KCQloZWFkZXIoIkNh Y2hlLUNvbnRyb2w6IG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUsIG1heC1hZ2U9NjAiKTsN CgkJaGVhZGVyKCJFeHBpcmVzOiBTYXQsIDAxIEphbiAyMDAwIDEyOjAwOjAwIEdNVCIpOw0K CQlwcmludCgkY29udGVudCk7DQoJCWV4aXQ7DQoNCgl9IGVsc2UgaWYgKGdwcygnc3RlcCcp ID09ICdzbWRfbWFjcm9faW1wb3J0Jykgew0KCQkkb3ZlcndyaXRlID0gZ3BzKCdzbWRfbWFj cm9faW1wb3J0X292ZXJ3cml0ZScpOw0KDQoJCSRmaWxlID0gQGdldF91cGxvYWRlZF9maWxl KCRfRklMRVNbJ3RoZWZpbGUnXVsndG1wX25hbWUnXSwgZ2V0X3ByZWYoJ3RlbXBkaXInKS5E Uy5iYXNlbmFtZSgkX0ZJTEVTWyd0aGVmaWxlJ11bJ3RtcF9uYW1lJ10pKTsNCgkJaWYgKCRm aWxlID09PSBmYWxzZSkgew0KCQkJJG1zZyA9IGFycmF5KHNtZF9tYWNyb19nVHh0KCdzbWRf bWFjcm9fY2Fubm90X2ltcG9ydCcpLCBFX1dBUk5JTkcpOw0KCQl9IGVsc2Ugew0KCQkJJHNp emUgPSBmaWxlc2l6ZSgkZmlsZSk7DQoJCQlpZiAoJG1heF9maWxlX3NpemUgPCAkc2l6ZSkg ew0KCQkJCSRtc2cgPSBhcnJheShzbWRfbWFjcm9fZ1R4dCgnc21kX21hY3JvX2ZpbGVfc2l6 ZScpLCBFX1dBUk5JTkcpOw0KCQkJfSBlbHNlIHsNCgkJCQkkaW5pID0gQHBhcnNlX2luaV9m aWxlKCRmaWxlLCB0cnVlKTsNCgkJCQlpZiAoJGluaSkgew0KCQkJCQkkZG9uZSA9IGFycmF5 KCdvaycgPT4gYXJyYXkoKSwgJ25vaycgPT4gYXJyYXkoKSwgJ3NraXAnID0+IGFycmF5KCkp Ow0KCQkJCQlmb3JlYWNoICgkaW5pIGFzICRrZXkgPT4gJHZhbCkgew0KCQkJCQkJJGF0dHMg PSBhcnJheSgpOw0KCQkJCQkJJGRlZiA9ICRkZXNjID0gJyc7DQoJCQkJCQlpZiAoaXNzZXQo JHZhbFsnYXR0cmlidXRlcyddKSkgew0KCQkJCQkJCWZvcmVhY2ggKCR2YWxbJ2F0dHJpYnV0 ZXMnXSBhcyAkYXR0bGlzdCkgew0KCQkJCQkJCQlsaXN0KCRuYW0sICRkZmx0LCAkcmVwKSA9 IGV4cGxvZGUoJ3wnLCAkYXR0bGlzdCk7DQoJCQkJCQkJCSRhdHRzW3Nhbml0aXplRm9yVXJs KCRuYW0pXSA9IGFycmF5KA0KCQkJCQkJCQkJJ2RlZmF1bHQnID0+ICRkZmx0LA0KCQkJCQkJ CQkJJ3JlcCcgPT4gJHJlcA0KCQkJCQkJCQkpOw0KCQkJCQkJCX0JDQoJCQkJCQl9DQoJCQkJ CQlpZiAoaXNzZXQoJHZhbFsnZGVzY3JpcHRpb24nXSkpIHsNCgkJCQkJCQkkZGVzYyA9ICR2 YWxbJ2Rlc2NyaXB0aW9uJ107DQoJCQkJCQl9DQoJCQkJCQlpZiAoaXNzZXQoJHZhbFsnZGVm aW5pdGlvbiddKSkgew0KCQkJCQkJCSRkZWYgPSBiYXNlNjRfZGVjb2RlKCR2YWxbJ2RlZmlu aXRpb24nXSk7DQoJCQkJCQl9DQoJCQ0KCQkJCQkJJHJlc3VsdCA9IChzdHJpbmcpc21kX21h Y3JvX3NhdmVfZGlyZWN0KCRrZXksICRkZXNjLCAkYXR0cywgJGRlZiwgJG92ZXJ3cml0ZSk7 DQoJCQkJCQlzd2l0Y2ggKCRyZXN1bHQpIHsNCgkJCQkJCQljYXNlICdTTURfTUFDUk9fQkFE X05BTUUnOg0KCQkJCQkJCWNhc2UgJ1NNRF9NQUNST19DTEFTSCc6DQoJCQkJCQkJCSRkb25l Wydub2snXVtdID0gJGtleTsNCgkJCQkJCQkJYnJlYWs7DQoJCQkJCQkJY2FzZSAnU01EX01B Q1JPX1NLSVAnOg0KCQkJCQkJCQkkZG9uZVsnc2tpcCddW10gPSAka2V5Ow0KCQkJCQkJCQli cmVhazsNCgkJCQkJCQlkZWZhdWx0Og0KCQkJCQkJCQkkZG9uZVsnb2snXVtdID0gJGtleTsN CgkJCQkJCQkJYnJlYWs7DQoJCQkJCQl9DQoJCQkJCX0NCgkJDQoJCQkJCSRtc2cgPSAoKCRk b25lWydvayddKSA/IHNtZF9tYWNyb19nVHh0KCdzbWRfbWFjcm9faW1wb3J0ZWQnKSAuIGpv aW4oJywgJywgJGRvbmVbJ29rJ10pLmJyIDogJycpDQoJCQkJCQkuICgoJGRvbmVbJ3NraXAn XSkgPyBzbWRfbWFjcm9fZ1R4dCgnc21kX21hY3JvX3NraXBwZWQnKSAuIGpvaW4oJywgJywg JGRvbmVbJ3NraXAnXSkuYnIgOiAnJykNCgkJCQkJCS4gKCgkZG9uZVsnbm9rJ10pID8gc21k X21hY3JvX2dUeHQoJ3NtZF9tYWNyb19ub3RfaW1wb3J0ZWQnKSAuIGpvaW4oJywgJywgJGRv bmVbJ25vayddKSA6ICcnKTsNCgkJCQl9IGVsc2Ugew0KCQkJCQkkbXNnID0gYXJyYXkoc21k X21hY3JvX2dUeHQoJ3NtZF9tYWNyb19pbnZhbGlkX2luaScpLCBFX1dBUk5JTkcpOw0KCQkJ CX0NCgkJCX0NCgkJCXVubGluaygkZmlsZSk7DQoJCX0NCgl9IGVsc2UgaWYgKGdwcygnc3Rl cCcpID09ICdzbWRfbWFjcm9fY2xvbmUnKSB7DQoJCSRzb3VyY2UgPSBzYWZlX3JvdygnKics IFNNRF9NQUNSTywgIm1hY3JvX25hbWU9JyIuZG9TbGFzaChncHMoJ3NtZF9tYWNyb19uYW1l JykpLiInIik7DQoJCSRuYW1lID0gZ3BzKCdzbWRfbWFjcm9fbmV3X25hbWUnKTsNCgkJJGRl c2MgPSAkc291cmNlWydkZXNjcmlwdGlvbiddOw0KCQkkZGVmID0gJHNvdXJjZVsnZGVmaW5p dGlvbiddOw0KCQkkYXR0cyA9ICRzb3VyY2VbJ2F0dHJpYnV0ZXMnXTsNCg0KCQkkcmVzdWx0 ID0gKHN0cmluZylzbWRfbWFjcm9fc2F2ZV9kaXJlY3QoJG5hbWUsICRkZXNjLCAkYXR0cywg JGRlZiwgZmFsc2UpOw0KCQlzd2l0Y2goJHJlc3VsdCkgew0KCQkJY2FzZSAnU01EX01BQ1JP X0JBRF9OQU1FJzoNCgkJCQkkbXNnID0gYXJyYXkoc21kX21hY3JvX2dUeHQoJ3NtZF9tYWNy b19pbnZhbGlkJyksIEVfV0FSTklORyk7DQoJCQkJYnJlYWs7DQoJCQljYXNlICdTTURfTUFD Uk9fQ0xBU0gnOg0KCQkJY2FzZSAnU01EX01BQ1JPX1NLSVAnOg0KCQkJCSRtc2cgPSBhcnJh eShzbWRfbWFjcm9fZ1R4dCgnc21kX21hY3JvX2V4aXN0cycpLCBFX1dBUk5JTkcpOw0KCQkJ CWJyZWFrOw0KCQkJZGVmYXVsdDoNCgkJCQkkbXNnID0gc21kX21hY3JvX2dUeHQoJ3NtZF9t YWNyb19jcmVhdGVkJyk7DQoJCQkJJF9QT1NUWydzbWRfbWFjcm9fbmFtZSddID0gJG5hbWU7 IC8vIEluamVjdCB0aGUgbmV3IG1hY3JvIGludG8gdGhlIHBvc3Qgc3RyZWFtIHNvIGl0J3Mg c2VsZWN0ZWQgYnkgZGVmYXVsdA0KCQkJCWJyZWFrOw0KCQl9DQoJfQ0KDQoJcGFnZXRvcChz bWRfbWFjcm9fZ1R4dCgnc21kX21hY3JvX3RhYl9uYW1lJyksICRtc2cpOw0KDQoJaWYgKHNt ZF9tYWNyb190YWJsZV9leGlzdCgxKSkgew0KCQkkbWFjcm9zID0gc2FmZV9yb3dzKCcqJywg U01EX01BQ1JPLCAnMT0xIE9SREVSIEJZIG1hY3JvX25hbWUnKTsNCgkJJG1hY3JvX25hbWUg PSAkbWFjcm9fbmV3X25hbWUgPSBncHMoJ3NtZF9tYWNyb19uYW1lJyk7DQoJCSRtYWNyb19k ZXNjcmlwdGlvbiA9ICRtYWNyb19kZWYgPSAkbWFjcm9fY29kZSA9ICcnOw0KCQkkbWFjcm9f YXR0cyA9IGFycmF5KCk7DQoNCgkJLy8gQnVpbGQgdGhlIHNlbGVjdCBsaXN0IGlmIHBvc3Np YmxlDQoJCSRtYWNyb2xpc3QgPSBhcnJheSgpOw0KCQlmb3JlYWNoICgkbWFjcm9zIGFzICRp ZHggPT4gJG1hY3JvKSB7DQoJCQkkbWFjcm9saXN0WyRtYWNyb1snbWFjcm9fbmFtZSddXSA9 ICRtYWNyb1snbWFjcm9fbmFtZSddOw0KCQkJaWYgKCRtYWNyb1snbWFjcm9fbmFtZSddID09 ICRtYWNyb19uYW1lKSB7DQoJCQkJJG1hY3JvX25ld19uYW1lID0gJG1hY3JvWydtYWNyb19u YW1lJ107DQoJCQkJJG1hY3JvX2Rlc2NyaXB0aW9uID0gJG1hY3JvWydkZXNjcmlwdGlvbidd Ow0KCQkJCSRtYWNyb19hdHRzID0gJG1hY3JvWydhdHRyaWJ1dGVzJ10gPyB1bnNlcmlhbGl6 ZSgkbWFjcm9bJ2F0dHJpYnV0ZXMnXSkgOiBhcnJheSgpOw0KCQkJCSRtYWNyb19kZWYgPSAk bWFjcm9bJ2RlZmluaXRpb24nXTsNCgkJCX0NCgkJfQ0KCQkkbWFjcm9TZWxlY3RvciA9ICgk bWFjcm9saXN0KSA/IHNlbGVjdElucHV0KCdzbWRfbWFjcm9fbmFtZScsICRtYWNyb2xpc3Qs ICRtYWNyb19uYW1lLCB0cnVlLCAxKSA6ICcnOw0KCQkkbXVsdGlfbWFjc2VsID0gJyc7DQoJ CWlmICgkbWFjcm9saXN0KSB7DQoJCQkkbXVsdGlfbWFjc2VsID0gJzxzZWxlY3QgbmFtZT0i c21kX21hY3JvX2V4cG9ydFtdIiBpZD0ic21kX21hY3JvX2V4cG9ydF9saXN0IiBzaXplPSI4 IiBjbGFzcz0ibGlzdCIgbXVsdGlwbGU9Im11bHRpcGxlIj4nLm47DQoJCQlmb3JlYWNoICgk bWFjcm9saXN0IGFzICRrZXkgPT4gJHZhbCkgew0KCQkJCSRtdWx0aV9tYWNzZWwgLj0gJzxv cHRpb24gdmFsdWU9IicuJGtleS4nIicgLiAoKCRtYWNyb19uYW1lPT0ka2V5KSA/ICcgc2Vs ZWN0ZWQ9InNlbGVjdGVkIicgOiAnJykgLic+Jy4kdmFsLic8L29wdGlvbj4nLm47DQoJCQl9 DQoJCQkkbXVsdGlfbWFjc2VsIC49ICc8L3NlbGVjdD4nOw0KCQl9DQoNCgkJJGVkaXRjZWxs ID0gKCRtYWNyb2xpc3QpID8gJzxsYWJlbD4nLnNtZF9tYWNyb19nVHh0KCdzbWRfbWFjcm9f Y2hvb3NlJykuJzwvbGFiZWw+Jy5zcC4kbWFjcm9TZWxlY3RvciA6ICcnOw0KDQoJCS8vIEVk aXQgZm9ybQ0KCQllY2hvICc8Zm9ybSBpZD0ic21kX21hY3JvX3NlbGVjdCIgYWN0aW9uPSJp bmRleC5waHAiIG1ldGhvZD0icG9zdCI+JzsNCgkJZWNobyBzdGFydFRhYmxlKCdzbWRfbWFj cm9fc2VsZWN0JywgJycsICcnLCAnJywgJzgwMCcpOw0KCQllY2hvIHRyKA0KCQkJdGRhKCRl ZGl0Y2VsbCAuIGVJbnB1dCgkc21kX21hY3JvX2V2ZW50KSwgJyBjbGFzcz0ibm9saW5lIiBz dHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IicpDQoJ CQkpOw0KCQllY2hvIGVuZFRhYmxlKCk7DQoJCWVjaG8gJzwvZm9ybT4nOw0KDQoJCS8vIElt cG9ydCAvIGV4cG9ydCBmb3JtDQoJCWVjaG8gc3RhcnRUYWJsZSgnc21kX21hY3JvX2ltcGV4 cCcsICcnLCAnJywgJycsICc4MDAnKTsNCgkJZWNobyB0cigNCgkJCXRkYSgNCgkJCQknPGEg aWQ9InNtZF9tYWNyb19pbXBvcnQiIGhyZWY9IiMiPicuc21kX21hY3JvX2dUeHQoJ3NtZF9t YWNyb19pbXBvcnQnKS4nPC9hPicNCgkJCQkuKCgkbXVsdGlfbWFjc2VsKQ0KCQkJCQk/ICcg LyAnIC4gJzxhIGlkPSJzbWRfbWFjcm9fZXhwb3J0IiBocmVmPSIjIj4nLnNtZF9tYWNyb19n VHh0KCdzbWRfbWFjcm9fZXhwb3J0JykuJzwvYT4nDQoJCQkJCQkuICgoJG1hY3JvX25hbWUp ID8gJyAvICcgLiAnPGEgaWQ9InNtZF9tYWNyb19jbG9uZSIgaHJlZj0iIyI+Jy5zbWRfbWFj cm9fZ1R4dCgnc21kX21hY3JvX2Nsb25lJykuJzwvYT4nIDogJycpDQoJCQkJCTogJycpDQoJ CQkJLic8ZGl2IGlkPSJzbWRfbWFjcm9faW1wb3J0X2hvbGRlciIgY2xhc3M9InNtZF9oaWRk ZW4iPicNCgkJCQkuIHVwbG9hZF9mb3JtKHNtZF9tYWNyb19nVHh0KCdzbWRfbWFjcm9fdXBs b2FkJyksICcnLCAnc21kX21hY3JvX2ltcG9ydCcsICRzbWRfbWFjcm9fZXZlbnQsICcnKQ0K CQkJCS4gJzwvZGl2PicNCgkJCQkuICgoJG11bHRpX21hY3NlbCkNCgkJCQkJCT8gJzxkaXYg aWQ9InNtZF9tYWNyb19leHBvcnRfaG9sZGVyIiBjbGFzcz0ic21kX2hpZGRlbiI+PGZvcm0g aWQ9InNtZF9tYWNyb19leHBvcnRfZm9ybSIgYWN0aW9uPSJpbmRleC5waHAiIG1ldGhvZD0i cG9zdCI+Jw0KCQkJCQkJCS4gJG11bHRpX21hY3NlbCAuIGJyDQoJCQkJCQkJLiBmSW5wdXQo J3N1Ym1pdCcsICdzbWRfbWFjcm9fZXhwb3J0X2dvJywgZ1R4dCgnZ28nKSwgJycsICcnLCAn c21kX21hY3JvX2V4cG9ydF9jbG9zZSgpOycpDQoJCQkJCQkJLiBlSW5wdXQoJHNtZF9tYWNy b19ldmVudCkNCgkJCQkJCQkuIHNJbnB1dCgnc21kX21hY3JvX2V4cG9ydCcpDQoJCQkJCQkJ LiAnPC9mb3JtPjwvZGl2PicNCgkJCQkJCQkuICc8ZGl2IGlkPSJzbWRfbWFjcm9fY2xvbmVf aG9sZGVyIiBjbGFzcz0ic21kX2hpZGRlbiI+PGZvcm0gaWQ9InNtZF9tYWNyb19jbG9uZV9m b3JtIiBhY3Rpb249ImluZGV4LnBocCIgbWV0aG9kPSJwb3N0Ij4nDQoJCQkJCQkJLiBoSW5w dXQoJ3NtZF9tYWNyb19uYW1lJywgJG1hY3JvX25hbWUpDQoJCQkJCQkJLiBmSW5wdXQoJ3Rl eHQnLCAnc21kX21hY3JvX25ld19uYW1lJywgJycpDQoJCQkJCQkJLiBmSW5wdXQoJ3N1Ym1p dCcsICdzbWRfbWFjcm9fY2xvbmVfZ28nLCBnVHh0KCdnbycpKQ0KCQkJCQkJCS4gZUlucHV0 KCRzbWRfbWFjcm9fZXZlbnQpDQoJCQkJCQkJLiBzSW5wdXQoJ3NtZF9tYWNyb19jbG9uZScp DQoJCQkJCQkJLiAnPC9mb3JtPjwvZGl2PicNCgkJCQkJCTogJycNCgkJCQkJKQ0KCQkJLCAn IGNsYXNzPSJub2xpbmUiIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodDsgdmVydGljYWwtYWxp Z246IG1pZGRsZTsiJw0KCQkJKQ0KCQkpOw0KCQllY2hvIGVuZFRhYmxlKCk7DQoNCgkJZWNo byAnPGZvcm0gaWQ9InNtZF9tYWNyb19mb3JtIiBhY3Rpb249ImluZGV4LnBocCIgbWV0aG9k PSJwb3N0Ij4nOw0KCQllY2hvIHN0YXJ0VGFibGUoJ2VkaXQnKTsNCgkJZWNobyB0cigNCgkJ CWZMYWJlbENlbGwoJ25hbWUnLCAnJywgJ3NtZF9tYWNyb19uZXdfbmFtZScpDQoJCQkudGQo DQoJCQkJZklucHV0KCd0ZXh0JywgJ3NtZF9tYWNyb19uZXdfbmFtZScsICRtYWNyb19uZXdf bmFtZSkuZklucHV0KCdoaWRkZW4nLCAnc21kX21hY3JvX25hbWUnLCAkbWFjcm9fbmFtZSkN CgkJCQkuKCgkbWFjcm9fbmFtZSA9PSAnJykgPyAnJyA6IHNwLic8YSBocmVmPSI/ZXZlbnQ9 Jy4kc21kX21hY3JvX2V2ZW50LiBhLidzdGVwPXNtZF9tYWNyb19kZWxldGUnIC4gYSAuICdz bWRfbWFjcm9fbmFtZT0nLnVybGVuY29kZSgkbWFjcm9fbmFtZSkuJyIgY2xhc3M9InNtYWxs ZXJib3giIG9uY2xpY2s9InJldHVybiBjb25maXJtKFwnJy5nVHh0KCdjb25maXJtX2RlbGV0 ZV9wb3B1cCcpLidcJyk7Ij5beF08L2E+JykNCgkJCSkNCgkJKTsNCgkJZWNobyB0cigNCgkJ CWZMYWJlbENlbGwoJ2Rlc2NyaXB0aW9uJywgJycsICdzbWRfbWFjcm9fZGVzY3JpcHRpb24n KQ0KCQkJLnRkKA0KCQkJCWZJbnB1dCgndGV4dCcsICdzbWRfbWFjcm9fZGVzY3JpcHRpb24n LCAkbWFjcm9fZGVzY3JpcHRpb24sICcnLCAnJywgJycsICc2NicpDQoJCQkpDQoJCSk7DQoN CgkJJGF0dGxpc3QgPSBhcnJheSgnPHRhYmxlIGlkPSJzbWRfbWFjcm9fYXR0bGlzdCI+PHRo ZWFkPjx0cj48dGg+Jy5nVHh0KCduYW1lJykuJzwvdGg+PHRoPicuZ1R4dCgnZGVmYXVsdCcp Lic8L3RoPjx0aD4nLnNtZF9tYWNyb19nVHh0KCdzbWRfbWFjcm9fcmVwbmFtZScpLic8L3Ro PjwvdHI+PC90aGVhZD48dGJvZHk+Jyk7DQoJCSRtYWNyb19hdHRzID0gZW1wdHkoJG1hY3Jv X2F0dHMpID8gYXJyYXkoJycgPT4gYXJyYXkoJ2RlZmF1bHQnID0+ICcnLCAncmVwJyA9PiAn JykpIDogJG1hY3JvX2F0dHM7DQoNCgkJZm9yZWFjaCAoJG1hY3JvX2F0dHMgYXMgJGF0dG5h bWUgPT4gJGF0dCkgew0KCQkJJGF0dGxpc3RbXSA9ICc8dHIgY2xhc3M9InNtZF9tYWNyb19h dHQiPicNCgkJCQkuJzx0ZD4nLmZJbnB1dCgndGV4dCcsICdzbWRfbWFjcm9fYXR0bmFtZVtd JywgJGF0dG5hbWUpLiAnPC90ZD4nDQoJCQkJLic8dGQ+Jy5mSW5wdXQoJ3RleHQnLCAnc21k X21hY3JvX2F0dGRmbHRbXScsICRhdHRbJ2RlZmF1bHQnXSkuICc8L3RkPicNCgkJCQkuJzx0 ZD4nLmZJbnB1dCgndGV4dCcsICdzbWRfbWFjcm9fYXR0cmVwW10nLCAkYXR0WydyZXAnXSku ICc8L3RkPicNCgkJCQkuJzwvdHI+JzsNCgkJfQ0KCQkkYXR0bGlzdFtdID0gJzwvdGJvZHk+ PC90YWJsZT4nOw0KDQoJCSRhdHRzID0gam9pbihuLCAkYXR0bGlzdCk7DQoJCWVjaG8gdHIo DQoJCQl0ZGEoJzxsYWJlbD4nLnNtZF9tYWNyb19nVHh0KCdzbWRfbWFjcm9fYXR0cmlidXRl cycpLic8L2xhYmVsPicuc3AuJzxhIGhyZWY9IiMiIGlkPSJzbWRfbWFjcm9fYXR0X2FkZCIg dGl0bGU9Iicuc21kX21hY3JvX2dUeHQoJ3NtZF9tYWNyb19hdHRfY2xvbmVfaGVscCcpLici Picuc21kX21hY3JvX2dUeHQoJ3NtZF9tYWNyb19hdHRfY2xvbmUnKS4nPC9hPicsICcgY2xh c3M9Im5vbGluZSIgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0OyB2ZXJ0aWNhbC1hbGlnbjog dG9wOyInKQ0KCQkJLnRkYSgkYXR0cywgJyBpZD0ic21kX21hY3JvX2F0dCInKQ0KCQkpOw0K CQllY2hvIHRyKA0KCQkJdGRhKCc8bGFiZWw+Jy5zbWRfbWFjcm9fZ1R4dCgnc21kX21hY3Jv X3RhZ19kZWZpbml0aW9uJykuJzwvbGFiZWw+JywgJyBjbGFzcz0ibm9saW5lIiBzdHlsZT0i dGV4dC1hbGlnbjogcmlnaHQ7IHZlcnRpY2FsLWFsaWduOiB0b3A7IicpDQoJCQkudGRhKA0K CQkJCXRleHRfYXJlYSgnc21kX21hY3JvX2RlZmluaXRpb24nLCAyNTAsIDcwMCwgJG1hY3Jv X2RlZikNCgkJCSkNCgkJKTsNCgkJZWNobyB0cih0ZCgnJm5ic3A7JykuZUlucHV0KCRzbWRf bWFjcm9fZXZlbnQpLnNJbnB1dCgnc21kX21hY3JvX3NhdmUnKS50ZChmSW5wdXQoJ3N1Ym1p dCcsICdzYXZlJywgZ1R4dCgnc2F2ZScpLCAnc21hbGxlcmJveCcsICcnLCAnJykpKTsNCgkJ ZWNobyBlbmRUYWJsZSgpOw0KCQllY2hvICc8L2Zvcm0+JzsNCgkJZWNobyA8PDxFT0pTDQo8 c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQpqUXVlcnkoZnVuY3Rpb24oKSB7DQoJ alF1ZXJ5KCcjc21kX21hY3JvX2F0dF9hZGQnKS5jbGljayhmdW5jdGlvbihldikgew0KCQl2 YXIgb2JqID0galF1ZXJ5KCcjc21kX21hY3JvX2F0dGxpc3QgdGJvZHknKTsNCgkJdmFyIGVs ZW1zID0galF1ZXJ5KCcuc21kX21hY3JvX2F0dCcpOw0KDQoJCS8vIEFkZCB0aGUgcm93LCBl bXB0eSBpdCBhbmQgZm9jdXMuIENhbid0IGRvIHRoaXMgaW4gYW55IGZld2VyIGpRdWVyeSgp IGNhbGxzIGZvciBzb21lIHJlYXNvbg0KCQlvYmouYXBwZW5kKG9iai5jaGlsZHJlbigpLmVx KDApLmNsb25lKCkpOw0KCQlvYmouY2hpbGRyZW4oKS5sYXN0KCkuZmluZCgnaW5wdXQ6dGV4 dCcpLnZhbCgnJyk7DQoJCW9iai5jaGlsZHJlbigpLmxhc3QoKS5maW5kKCdpbnB1dDp0ZXh0 JykuZmlyc3QoKS5mb2N1cygpOw0KCQlldi5wcmV2ZW50RGVmYXVsdCgpOw0KCX0pOw0KDQoJ Ly8gSW1wb3J0IGxpbmsNCglqUXVlcnkoJyNzbWRfbWFjcm9faW1wb3J0JykuY2xpY2soZnVu Y3Rpb24oZXYpIHsNCgkJalF1ZXJ5KCcjc21kX21hY3JvX2V4cG9ydF9ob2xkZXInKS5oaWRl KCdub3JtYWwnKTsNCgkJalF1ZXJ5KCcjc21kX21hY3JvX2Nsb25lX2hvbGRlcicpLmhpZGUo J25vcm1hbCcpOw0KCQlqUXVlcnkoJyNzbWRfbWFjcm9faW1wb3J0X2hvbGRlcicpLnRvZ2ds ZSgnbm9ybWFsJyk7DQoJfSk7DQoNCgkvLyBFeHBvcnQgbGluaw0KCWpRdWVyeSgnI3NtZF9t YWNyb19leHBvcnQnKS5jbGljayhmdW5jdGlvbihldikgew0KCQlqUXVlcnkoJyNzbWRfbWFj cm9faW1wb3J0X2hvbGRlcicpLmhpZGUoJ25vcm1hbCcpOw0KCQlqUXVlcnkoJyNzbWRfbWFj cm9fY2xvbmVfaG9sZGVyJykuaGlkZSgnbm9ybWFsJyk7DQoJCWpRdWVyeSgnI3NtZF9tYWNy b19leHBvcnRfaG9sZGVyJykudG9nZ2xlKCdub3JtYWwnKTsNCgl9KTsNCg0KCS8vIENsb25l IGxpbmsNCglqUXVlcnkoJyNzbWRfbWFjcm9fY2xvbmUnKS5jbGljayhmdW5jdGlvbihldikg ew0KCQlqUXVlcnkoJyNzbWRfbWFjcm9faW1wb3J0X2hvbGRlcicpLmhpZGUoJ25vcm1hbCcp Ow0KCQlqUXVlcnkoJyNzbWRfbWFjcm9fZXhwb3J0X2hvbGRlcicpLmhpZGUoJ25vcm1hbCcp Ow0KCQlqUXVlcnkoJyNzbWRfbWFjcm9fY2xvbmVfaG9sZGVyJykudG9nZ2xlKCdub3JtYWwn KS5maW5kKCJpbnB1dFtuYW1lPSdzbWRfbWFjcm9fbmV3X25hbWUnXSIpLmZvY3VzKCk7DQoJ fSk7DQp9KTsNCmZ1bmN0aW9uIHNtZF9tYWNyb19leHBvcnRfY2xvc2UoKSB7DQoJalF1ZXJ5 KCIjc21kX21hY3JvX2V4cG9ydCIpLmNsaWNrKCk7DQp9DQo8L3NjcmlwdD4NCjxzdHlsZSB0 eXBlPSJ0ZXh0L2NzcyI+DQouc21kX2hpZGRlbiB7DQoJZGlzcGxheTpub25lOw0KfQ0KI3Nt ZF9tYWNyb19pbXBvcnRfaG9sZGVyIC51cGxvYWQtZm9ybSB7DQoJdGV4dC1hbGlnbjpyaWdo dCFpbXBvcnRhbnQ7DQoJd2lkdGg6ODAwcHg7DQp9DQo8L3N0eWxlPg0KRU9KUzsNCg0KCX0g ZWxzZSB7DQoJCS8vIFRhYmxlIG5vdCBpbnN0YWxsZWQNCgkJJGJ0bkluc3RhbGwgPSAnPGZv cm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD0nLiRzbWRfbWFjcm9fZXZlbnQuYS4n c3RlcD1zbWRfbWFjcm9fdGFibGVfaW5zdGFsbCIgc3R5bGU9ImRpc3BsYXk6aW5saW5lIj4n LmZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcsIHNtZF9tYWNyb19nVHh0KCdzbWRfbWFjcm9f dGJsX2luc3RhbGxfbGJsJyksICdzbWFsbGVyYm94JykuJzwvZm9ybT4nOw0KCQkkYnRuU3R5 bGUgPSAnIHN0eWxlPSJib3JkZXI6MDtoZWlnaHQ6MjVweCInOw0KCQllY2hvIHN0YXJ0VGFi bGUoJ2xpc3QnKTsNCgkJZWNobyB0cih0ZGEoc3Ryb25nKHNtZF9tYWNyb19nVHh0KCdzbWRf bWFjcm9fcHJlZnNfc29tZV90YmwnKSkuYnIuYnINCgkJCQkuc21kX21hY3JvX2dUeHQoJ3Nt ZF9tYWNyb19wcmVmc19zb21lX2V4cGxhaW4nKS5ici5icg0KCQkJCS5zbWRfbWFjcm9fZ1R4 dCgnc21kX21hY3JvX3ByZWZzX3NvbWVfb3B0cycpLCAnIGNvbHNwYW49IjIiJykNCgkJKTsN CgkJZWNobyB0cih0ZGEoJGJ0bkluc3RhbGwsICRidG5TdHlsZSkpOw0KCQllY2hvIGVuZFRh YmxlKCk7DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIEFkZCBh biBvdmVyd3JpdGUgY2hlY2tib3ggdG8gdGhlIHVwbG9hZCBmb3JtDQpmdW5jdGlvbiBzbWRf bWFjcm9fdXBsb2FkX2Zvcm0oJGV2dCwgJHN0cCwgJGRhdGEsICRhcmdzKSB7DQoJJHJldCA9 IHN0cl9yZXBsYWNlKA0KCQknPC9kaXY+Jw0KCQksICBjaGVja2JveCgnc21kX21hY3JvX2lt cG9ydF9vdmVyd3JpdGUnLCAnMScsIDApIC4gc21kX21hY3JvX2dUeHQoJ3NtZF9tYWNyb19v dmVyd3JpdGUnKSAuICc8L2Rpdj4nDQoJCSwgJGRhdGENCgkpOw0KCXJldHVybiAkcmV0Ow0K fQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9tYWNyb19z YXZlX2RpcmVjdCgkbmFtZT0nJywgJGRlc2M9JycsICRhdHRzPWFycmF5KCksICRkZWY9Jycs ICRvdmVyd3JpdGUgPSBmYWxzZSkgew0KCWdsb2JhbCAkc21kX21hY3JvX2V2ZW50Ow0KDQoJ JHNtZF9tYWNyb19uZXdfbmFtZSA9IHNhbml0aXplRm9yVXJsKCRuYW1lKTsNCgkkc21kX21h Y3JvX2Rlc2NyaXB0aW9uID0gZG9TbGFzaCgkZGVzYyk7DQoJJHNtZF9tYWNyb19kZWZpbml0 aW9uID0gJGRlZjsNCg0KCSRyZXQgPSAnJzsNCg0KCWlmIChzbWRfbWFjcm9fdmFsaWQoJHNt ZF9tYWNyb19uZXdfbmFtZSkpIHsNCgkJJGNvZGUgPSBkb1NsYXNoKHNtZF9tYWNyb19idWls ZCgkc21kX21hY3JvX25ld19uYW1lLCAkYXR0cywgJHNtZF9tYWNyb19kZWZpbml0aW9uKSk7 DQoNCgkJJHNtZF9tYWNyb19kZWZpbml0aW9uID0gZG9TbGFzaCgkc21kX21hY3JvX2RlZmlu aXRpb24pOw0KCQkkc21kX21hY3JvX2F0dHMgPSBpc19hcnJheSgkYXR0cykgPyBzZXJpYWxp emUoJGF0dHMpIDogJGF0dHM7DQoNCgkJaWYgKHNtZF9tYWNyb190YWJsZV9leGlzdCgpKSB7 DQoJCQkvLyBDaGVjayBpZiB0aGlzIG1hY3JvIG5hbWUgY2xhc2hlcyB3aXRoIGEgYnVpbHQt aW4gUEhQL1RYUCBmdW5jdGlvbg0KCQkJJGV4aXN0cyA9IHNtZF9tYWNyb19leGlzdHMoJHNt ZF9tYWNyb19uZXdfbmFtZSwgZmFsc2UpOw0KCQkJaWYgKCRleGlzdHMgPT09IGZhbHNlKSB7 DQoJCQkJJGluZGIgPSBzYWZlX2ZpZWxkKCdtYWNyb19uYW1lJywgU01EX01BQ1JPLCAibWFj cm9fbmFtZT0nJHNtZF9tYWNyb19uZXdfbmFtZSciKTsNCg0KCQkJCWlmICgkaW5kYikgew0K CQkJCQlpZiAoJG92ZXJ3cml0ZSkgew0KCQkJCQkJLy8gVXBkYXRlDQoJCQkJCQkkcmV0ID0g c2FmZV91cGRhdGUoU01EX01BQ1JPLCAibWFjcm9fbmFtZT0nJHNtZF9tYWNyb19uZXdfbmFt ZScsIGRlc2NyaXB0aW9uPSckc21kX21hY3JvX2Rlc2NyaXB0aW9uJywgYXR0cmlidXRlcz0n JHNtZF9tYWNyb19hdHRzJywgZGVmaW5pdGlvbj0nJHNtZF9tYWNyb19kZWZpbml0aW9uJywg Y29kZT0nJGNvZGUnIiwgIm1hY3JvX25hbWU9JyRzbWRfbWFjcm9fbmV3X25hbWUnIik7DQoJ CQkJCX0gZWxzZSB7DQoJCQkJCQkkcmV0ID0gJ1NNRF9NQUNST19TS0lQJzsNCgkJCQkJfQ0K CQkJCX0gZWxzZSB7DQoJCQkJCS8vIEluc2VydA0KCQkJCQkkcmV0ID0gc2FmZV9pbnNlcnQo U01EX01BQ1JPLCAibWFjcm9fbmFtZT0nJHNtZF9tYWNyb19uZXdfbmFtZScsIGRlc2NyaXB0 aW9uPSckc21kX21hY3JvX2Rlc2NyaXB0aW9uJywgYXR0cmlidXRlcz0nJHNtZF9tYWNyb19h dHRzJywgZGVmaW5pdGlvbj0nJHNtZF9tYWNyb19kZWZpbml0aW9uJywgY29kZT0nJGNvZGUn Iik7DQoJCQkJfQ0KCQkJfSBlbHNlIHsNCgkJCQkkcmV0ID0gJ1NNRF9NQUNST19DTEFTSCc7 DQoJCQl9DQoJCX0NCgl9IGVsc2Ugew0KCQkkcmV0ID0gJ1NNRF9NQUNST19CQURfTkFNRSc7 DQoJfQ0KDQoJLy8gJHJldCBtYXkgYmUgZW1wdHkgb25seSBpZiBtYWNybyB0YWJsZSBub3Qg aW5zdGFsbGVkDQoJcmV0dXJuICRyZXQ7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KZnVuY3Rpb24gc21kX21hY3JvX3NhdmUoKSB7DQoJZ2xvYmFsICRzbWRfbWFjcm9f ZXZlbnQ7DQoNCglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgNCgkJJ3NtZF9tYWNyb19u YW1lJywNCgkJJ3NtZF9tYWNyb19uZXdfbmFtZScsDQoJCSdzbWRfbWFjcm9fZGVzY3JpcHRp b24nLA0KCSkpKSk7DQoJDQoJJG1zZyA9ICcnOw0KCSRzbWRfbWFjcm9fbmV3X25hbWUgPSBz YW5pdGl6ZUZvclVybCgkc21kX21hY3JvX25ld19uYW1lKTsNCg0KCWlmIChzbWRfbWFjcm9f dmFsaWQoJHNtZF9tYWNyb19uZXdfbmFtZSkpIHsNCgkJJGF0dF9uYW1lID0gZ3BzKCdzbWRf bWFjcm9fYXR0bmFtZScpOw0KCQkkYXR0X2RmbHQgPSBncHMoJ3NtZF9tYWNyb19hdHRkZmx0 Jyk7DQoJCSRhdHRfcmVwID0gZ3BzKCdzbWRfbWFjcm9fYXR0cmVwJyk7DQoNCgkJLy8gRG9u J3QgZG9TbGFzaCgpIHRoaXMgeWV0DQoJCSRzbWRfbWFjcm9fZGVmaW5pdGlvbiA9IGdwcygn c21kX21hY3JvX2RlZmluaXRpb24nKTsNCg0KCQkkYXR0cyA9IGFycmF5KCk7DQoJCWZvcmVh Y2goJGF0dF9uYW1lIGFzICRpZHggPT4gJGF0dCkgew0KCQkJaWYgKCRhdHQgPT0gJycpIGNv bnRpbnVlOw0KCQkJJGF0dHNbc2FuaXRpemVGb3JVcmwoJGF0dCldID0gYXJyYXkoDQoJCQkJ J2RlZmF1bHQnID0+ICRhdHRfZGZsdFskaWR4XSwNCgkJCQkncmVwJyA9PiAkYXR0X3JlcFsk aWR4XQ0KCQkJKTsNCgkJfQ0KCQkNCgkJJGNvZGUgPSBkb1NsYXNoKHNtZF9tYWNyb19idWls ZCgkc21kX21hY3JvX25ld19uYW1lLCAkYXR0cywgJHNtZF9tYWNyb19kZWZpbml0aW9uKSk7 DQoJCSRzbWRfbWFjcm9fZGVmaW5pdGlvbiA9IGRvU2xhc2goJHNtZF9tYWNyb19kZWZpbml0 aW9uKTsNCgkJJHNtZF9tYWNyb19hdHRzID0gc2VyaWFsaXplKCRhdHRzKTsNCg0KCQlpZiAo c21kX21hY3JvX3RhYmxlX2V4aXN0KCkpIHsNCgkJCSRleGlzdHMgPSAoJHNtZF9tYWNyb19u YW1lICE9ICRzbWRfbWFjcm9fbmV3X25hbWUpICYmIHNtZF9tYWNyb19leGlzdHMoJHNtZF9t YWNyb19uZXdfbmFtZSk7DQoJCQlpZiAoJGV4aXN0cyA9PT0gZmFsc2UpIHsNCgkJCQkvLyBJ bmplY3QgdGhlIG5ldyBuYW1lIHNvIGl0J3Mgc2VsZWN0ZWQgaW4gdGhlIGRyb3Bkb3duIGlm IHJlbmFtZWQNCgkJCQkkX1BPU1RbJ3NtZF9tYWNyb19uYW1lJ10gPSAkc21kX21hY3JvX25l d19uYW1lOw0KCQkJCQ0KCQkJCWlmICgkc21kX21hY3JvX25hbWUgPT0gJycpIHsNCgkJCQkJ Ly8gSW5zZXJ0DQoJCQkJCSRyZXQgPSBzYWZlX2luc2VydChTTURfTUFDUk8sICJtYWNyb19u YW1lPSckc21kX21hY3JvX25ld19uYW1lJywgZGVzY3JpcHRpb249JyRzbWRfbWFjcm9fZGVz Y3JpcHRpb24nLCBhdHRyaWJ1dGVzPSckc21kX21hY3JvX2F0dHMnLCBkZWZpbml0aW9uPSck c21kX21hY3JvX2RlZmluaXRpb24nLCBjb2RlPSckY29kZSciKTsNCgkJCQkJJG1zZyA9IHNt ZF9tYWNyb19nVHh0KCdzbWRfbWFjcm9fY3JlYXRlZCcpOw0KCQkJCX0gZWxzZSB7DQoJCQkJ CS8vIFVwZGF0ZQ0KCQkJCQkkcmV0ID0gc2FmZV91cGRhdGUoU01EX01BQ1JPLCAibWFjcm9f bmFtZT0nJHNtZF9tYWNyb19uZXdfbmFtZScsIGRlc2NyaXB0aW9uPSckc21kX21hY3JvX2Rl c2NyaXB0aW9uJywgYXR0cmlidXRlcz0nJHNtZF9tYWNyb19hdHRzJywgZGVmaW5pdGlvbj0n JHNtZF9tYWNyb19kZWZpbml0aW9uJywgY29kZT0nJGNvZGUnIiwgIm1hY3JvX25hbWU9JyRz bWRfbWFjcm9fbmFtZSciKTsNCgkJCQkJJG1zZyA9IHNtZF9tYWNyb19nVHh0KCdzbWRfbWFj cm9fc2F2ZWQnKTsNCgkJCQl9DQoJCQl9IGVsc2Ugew0KCQkJCSRtc2cgPSBhcnJheShzbWRf bWFjcm9fZ1R4dCgnc21kX21hY3JvX2V4aXN0cycpLCBFX1dBUk5JTkcpOw0KCQkJfQ0KCQl9 DQoJfSBlbHNlIHsNCgkJJG1zZyA9IGFycmF5KHNtZF9tYWNyb19nVHh0KCdzbWRfbWFjcm9f aW52YWxpZCcpLCBFX1dBUk5JTkcpOw0KCX0NCglzbWRfbWFjcm8oJG1zZyk7DQp9DQoNCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX21hY3JvX2RlbGV0ZSgp IHsNCglnbG9iYWwgJHNtZF9tYWNyb19ldmVudDsNCg0KCSRtYWNyb19uYW1lID0gZG9TbGFz aChncHMoJ3NtZF9tYWNyb19uYW1lJykpOw0KDQoJJHJldCA9IHNhZmVfZGVsZXRlKFNNRF9N QUNSTywgIm1hY3JvX25hbWU9JyRtYWNyb19uYW1lJyIpOw0KCSRtc2cgPSBzbWRfbWFjcm9f Z1R4dCgnc21kX21hY3JvX2RlbGV0ZWQnKTsNCg0KCSRfR0VUWydzbWRfbWFjcm9fbmFtZSdd ID0gJyc7DQoNCglzbWRfbWFjcm8oJG1zZyk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQ0KLy8gQ2hlY2sgdGhlIG1hY3JvIGRvZXNuJ3QgZXhpc3QgYW5kIGFsc28gdGhh dCBpdCBkb2Vzbid0IGNsYXNoIHdpdGggYW4gaW50ZXJuYWwgUEhQL1RYUCBmdW5jdGlvbg0K ZnVuY3Rpb24gc21kX21hY3JvX2V4aXN0cygkbWFjcm8sICRjaGVja19kYiA9IHRydWUpIHsN CgkkcmV0ID0gKCRjaGVja19kYikgPyBzYWZlX2ZpZWxkKCdtYWNyb19uYW1lJywgU01EX01B Q1JPLCAibWFjcm9fbmFtZT0nJG1hY3JvJyIpIDogZmFsc2U7DQoJaWYgKCRyZXQgPT09IGZh bHNlKSB7DQoJCSRmbnMgPSBnZXRfZGVmaW5lZF9mdW5jdGlvbnMoKTsNCgkJZm9yZWFjaCAo JGZucyBhcyAkZmxpc3QpIHsNCgkJCWlmICgkcmV0ID09PSBmYWxzZSkgew0KCQkJCSRyZXQg PSBpbl9hcnJheSgkbWFjcm8sICRmbGlzdCk7DQoJCQl9DQoJCX0NCgl9DQoJcmV0dXJuICRy ZXQ7DQp9DQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIENoZWNrIHRoZSBtYWNy byBuYW1lIGlzIGEgdmFsaWQgUEhQIGZ1bmN0aW9uIG5hbWUNCmZ1bmN0aW9uIHNtZF9tYWNy b192YWxpZCgkbWFjcm8pIHsNCglyZXR1cm4gaXNfY2FsbGFibGUoJG1hY3JvLCB0cnVlKSAm JiBwcmVnX21hdGNoKCcvXlthLXpBLVpfXHg3Zi1ceGZmXVthLXpBLVowLTlfXHg3Zi1ceGZm XSokLycsICRtYWNybyk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVu Y3Rpb24gc21kX21hY3JvX2J1aWxkKCRtYWNybywgJGFyZ3MsICRkZWYpIHsNCgkkYXJnbGlz dCA9ICRyZXBzID0gYXJyYXkoKTsNCgkkbEF0dHMgPSAnJzsNCg0KCS8vIFZhbGlkYXRlIG1h Y3JvIG5hbWUgYW5kIGJhaWwgaWYgaXQnZCBjYXVzZSBwcm9ibGVtcw0KDQoJLy8gQnVpbGQg YXJnIGxpc3QgYW5kIHJlcGxhY2VtZW50cyBhcnJheS4NCgkvLyBSZXBsYWNlbWVudHMgYXJl IHByZWZpeGVkIHdpdGggdGhlIG5hbWUgb2YgdGhlIG1hY3JvIGZvciBjbGFzaCBtaW5pbWlz YXRpb24NCgkkYXJncyA9IGlzX2FycmF5KCRhcmdzKSA/ICRhcmdzIDogdW5zZXJpYWxpemUo JGFyZ3MpOw0KCWZvcmVhY2ggKCRhcmdzIGFzICRhcmcgPT4gJHZhbHMpIHsNCgkJJGFyZ2xp c3RbXSA9ICInJGFyZycgPT4gJyIuJHZhbHNbJ2RlZmF1bHQnXS4iJyI7DQoJCSRyZXAgPSBl bXB0eSgkdmFsc1sncmVwJ10pID8gJGFyZyA6ICR2YWxzWydyZXAnXTsNCgkJJHJlcHNbXSA9 ICcieycgLiAkcmVwIC4gJ30iID0+ICIkJy4kbWFjcm8uJ18nLiRhcmcuJyInOw0KCX0NCgkk YXJnX3N0cmluZyA9IGpvaW4oJywnLm4sICRhcmdsaXN0KTsNCgkkcmVwX3N0cmluZyA9IGpv aW4oJywnLm4sICRyZXBzKTsNCgkkZGVmID0gZG9TbGFzaCgkZGVmKTsNCg0KCS8vIE9ubHkg Y3JlYXRlIGxBdHRzIGlmIHRoZXJlJ3MgYXQgbGVhc3Qgb25lIGF0dHJpYnV0ZSBkZWZpbmVk DQoJaWYgKCRhcmdfc3RyaW5nKSB7DQoJCSRsQXR0cyA9IDw8PEVPQVRUDQpleHRyYWN0KGxB dHRzKGFycmF5KA0KCQl7JGFyZ19zdHJpbmd9DQoJKSxcJGF0dHMpLCBFWFRSX1BSRUZJWF9B TEwsICd7JG1hY3JvfScpOw0KRU9BVFQ7DQoJfQ0KDQokZnVsbF9tYWNybyA9IDw8PCBFT0ZO DQpmdW5jdGlvbiB7JG1hY3JvfShcJGF0dHMsIFwkdGhpbmcgPSBOVUxMKSB7DQoJeyRsQXR0 c30NCglcJG91dCA9ICcnOw0KCVwkb3V0ID0gc3RydHIoc3RyaXBzbGFzaGVzKCd7JGRlZn0n KSwgYXJyYXkoeyRyZXBfc3RyaW5nfSkpOw0KCXJldHVybiBwYXJzZShcJG91dCk7DQp9DQpF T0ZOOw0KDQoJcmV0dXJuICRmdWxsX21hY3JvOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0NCi8vIENyZWF0ZSBpbmkgZmlsZSBjb250ZW50cyBhbmQgcmV0dXJuIGl0Lg0K Ly8gJHNwZWNpYWwgaXMgYW4gYXJyYXkgb2Yga2V5bmFtZXMgYW5kIGEgZnVuY3Rpb24gdG8g YXBwbHkgdG8gdGhlbSAoZS5nLiAnZGVmaW5pdGlvbicgPT4gJ2Jhc2U2NF9lbmNvZGUnKQ0K ZnVuY3Rpb24gc21kX21hY3JvX2NyZWF0ZV9pbmkoJGFyciwgJHNwZWNpYWw9YXJyYXkoKSkg ew0KCSRjb250ZW50ID0gJyc7DQoJZm9yZWFjaCAoJGFyciBhcyAka2V5ID0+ICRlbGVtKSB7 DQoJCSRjb250ZW50IC49ICJbIi4ka2V5LiJdXG4iOw0KCQlmb3JlYWNoICgkZWxlbSBhcyAk c3Via2V5ID0+ICRzdWJlbGVtKSB7DQoJCQkkc3ViZWxlbSA9IChhcnJheV9rZXlfZXhpc3Rz KCRzdWJrZXksICRzcGVjaWFsKSkgPyBkb0FycmF5KCRzdWJlbGVtLCAkc3BlY2lhbFskc3Vi a2V5XSkgOiAkc3ViZWxlbTsNCgkJCWlmKGlzX2FycmF5KCRzdWJlbGVtKSkgew0KCQkJCSRu dW0gPSBjb3VudCgkc3ViZWxlbSk7DQoJCQkJZm9yKCRpZHggPSAwOyAkaWR4IDwgJG51bTsg JGlkeCsrKSB7DQoJCQkJCSRjb250ZW50IC49ICRzdWJrZXkgLiAiW10gPSBcIiIgLiAkc3Vi ZWxlbVskaWR4XSAuICJcIlxuIjsNCgkJCQl9DQoJCQl9IGVsc2UgaWYoJHN1YmVsZW0gPT0g IiIpIHsNCgkJCQkkY29udGVudCAuPSAkc3Via2V5IC4gIiA9IFxuIjsNCgkJCX0gZWxzZSB7 DQoJCQkJJGNvbnRlbnQgLj0gJHN1YmtleSAuICIgPSBcIiIgLiAkc3ViZWxlbSAuICJcIlxu IjsNCgkJCX0NCgkJfQ0KCX0NCg0KCXJldHVybiAkY29udGVudDsNCn0NCg0KLy8gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQovLyBBZGQgbWFjcm8gdGFibGUgaWYgbm90IGFscmVhZHkg aW5zdGFsbGVkDQpmdW5jdGlvbiBzbWRfbWFjcm9fdGFibGVfaW5zdGFsbCgkc2hvd3BhbmU9 JzEnKSB7DQoJJEdMT0JBTFNbJ3R4cF9lcnJfY291bnQnXSA9IDA7DQoJJHJldCA9ICcnOw0K CSRzcWwgPSBhcnJheSgpOw0KCSRzcWxbXSA9ICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNU UyBgIi5QRlguU01EX01BQ1JPLiJgICgNCgkJYG1hY3JvX25hbWVgIHZhcmNoYXIoMzIpIE5P VCBOVUxMIGRlZmF1bHQgJycsDQoJCWBkZXNjcmlwdGlvbmAgdmFyY2hhcigyNTUpIE5VTEwg ZGVmYXVsdCAnJywNCgkJYGF0dHJpYnV0ZXNgIHRleHQgTlVMTCBkZWZhdWx0ICcnLA0KCQlg ZGVmaW5pdGlvbmAgbWVkaXVtdGV4dCBOVUxMIGRlZmF1bHQgJycsDQoJCWBjb2RlYCBtZWRp dW10ZXh0IE5VTEwgZGVmYXVsdCAnJywNCgkJUFJJTUFSWSBLRVkgKGBtYWNyb19uYW1lYCkN CgkpIEVOR0lORT1NeUlTQU0iOw0KDQoJaWYoZ3BzKCdkZWJ1ZycpKSB7DQoJCWRtcCgkc3Fs KTsNCgl9DQoJZm9yZWFjaCAoJHNxbCBhcyAkcXJ5KSB7DQoJCSRyZXQgPSBzYWZlX3F1ZXJ5 KCRxcnkpOw0KCQlpZiAoJHJldD09PWZhbHNlKSB7DQoJCQkkR0xPQkFMU1sndHhwX2Vycl9j b3VudCddKys7DQoJCQllY2hvICI8Yj4iLiRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10uIi48 L2I+ICIubXlzcWxfZXJyb3IoKS4iPGJyIC8+XG4iOw0KCQkJZWNobyAiPCEtLVxuICRxcnkg XG4tLT5cbiI7DQoJCX0NCgl9DQoNCgkkZmxkcyA9IGdldFRoaW5ncygnZGVzY3JpYmUgYCcu UEZYLlNNRF9NQUNSTy4nYCcpOw0KCWlmICghaW5fYXJyYXkoJ2RlZmluaXRpb24nLCRmbGRz KSkgew0KCQlzYWZlX2FsdGVyKFNNRF9NQUNSTywgImFkZCBgZGVmaW5pdGlvbmAgbWVkaXVt dGV4dCBOVUxMIGRlZmF1bHQgJycgYWZ0ZXIgYGF0dHJpYnV0ZXNgIik7DQoJfQ0KDQoJLy8g U3BpdCBvdXQgcmVzdWx0cw0KCWlmICgkR0xPQkFMU1sndHhwX2Vycl9jb3VudCddID09IDAp IHsNCgkJaWYgKCRzaG93cGFuZSkgew0KCQkJJG1zZyA9IHNtZF9tYWNyb19nVHh0KCdzbWRf bWFjcm9fdGJsX2luc3RhbGxlZCcpOw0KCQkJc21kX21hY3JvKCRtc2cpOw0KCQl9DQoJfSBl bHNlIHsNCgkJaWYgKCRzaG93cGFuZSkgew0KCQkJJG1zZyA9IHNtZF9tYWNyb19nVHh0KCdz bWRfbWFjcm9fdGJsX25vdF9pbnN0YWxsZWQnKTsNCgkJCXNtZF9tYWNybygkbXNnKTsNCgkJ fQ0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBEcm9wIHRhYmxl IGlmIGluIGRhdGFiYXNlDQpmdW5jdGlvbiBzbWRfbWFjcm9fdGFibGVfcmVtb3ZlKCkgew0K CSRyZXQgPSAnJzsNCgkkc3FsID0gYXJyYXkoKTsNCgkkR0xPQkFMU1sndHhwX2Vycl9jb3Vu dCddID0gMDsNCglpZiAoc21kX21hY3JvX3RhYmxlX2V4aXN0KCkpIHsNCgkJJHNxbFtdID0g IkRST1AgVEFCTEUgSUYgRVhJU1RTICIgLlBGWC5TTURfTUFDUk8uICI7ICI7DQoJCWlmKGdw cygnZGVidWcnKSkgew0KCQkJZG1wKCRzcWwpOw0KCQl9DQoJCWZvcmVhY2ggKCRzcWwgYXMg JHFyeSkgew0KCQkJJHJldCA9IHNhZmVfcXVlcnkoJHFyeSk7DQoJCQlpZiAoJHJldD09PWZh bHNlKSB7DQoJCQkJJEdMT0JBTFNbJ3R4cF9lcnJfY291bnQnXSsrOw0KCQkJCWVjaG8gIjxi PiIuJEdMT0JBTFNbJ3R4cF9lcnJfY291bnQnXS4iLjwvYj4gIi5teXNxbF9lcnJvcigpLiI8 YnIgLz5cbiI7DQoJCQkJZWNobyAiPCEtLVxuICRxcnkgXG4tLT5cbiI7DQoJCQl9DQoJCX0N Cgl9DQoJaWYgKCRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10gPT0gMCkgew0KCQkkbXNnID0g c21kX21hY3JvX2dUeHQoJ3NtZF9tYWNyb190YmxfcmVtb3ZlZCcpOw0KCX0gZWxzZSB7DQoJ CSRtc2cgPSBzbWRfbWFjcm9fZ1R4dCgnc21kX21hY3JvX3RibF9ub3RfcmVtb3ZlZCcpOw0K CQlzbWRfbWFjcm8oJG1zZyk7DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCmZ1bmN0aW9uIHNtZF9tYWNyb190YWJsZV9leGlzdCgkYWxsPScnKSB7DQoJaWYgKCRh bGwpIHsNCgkJJHRibHMgPSBhcnJheShTTURfTUFDUk8gPT4gNSk7DQoJCSRvdXQgPSBjb3Vu dCgkdGJscyk7DQoJCWZvcmVhY2ggKCR0YmxzIGFzICR0YmwgPT4gJGNvbHMpIHsNCgkJCWlm IChncHMoJ2RlYnVnJykpIHsNCgkJCQllY2hvICIrKyBUQUJMRSAiLiR0YmwuIiBIQVMgIi5j b3VudChAc2FmZV9zaG93KCdjb2x1bW5zJywgJHRibCkpLiIgQ09MVU1OUzsgUkVRVUlSRVMg Ii4kY29scy4iICsrIi5icjsNCgkJCX0NCgkJCWlmIChjb3VudChAc2FmZV9zaG93KCdjb2x1 bW5zJywgJHRibCkpID09ICRjb2xzKSB7DQoJCQkJJG91dC0tOw0KCQkJfQ0KCQl9DQoJCXJl dHVybiAoJG91dD09PTApID8gMSA6IDA7DQoJfSBlbHNlIHsNCgkJaWYgKGdwcygnZGVidWcn KSkgew0KCQkJZWNobyAiKysgVEFCTEUgIi5TTURfTUFDUk8uIiBIQVMgIi5jb3VudChAc2Fm ZV9zaG93KCdjb2x1bW5zJywgU01EX01BQ1JPKSkuIiBDT0xVTU5TOyI7DQoJCX0NCgkJcmV0 dXJuKEBzYWZlX3Nob3coJ2NvbHVtbnMnLCBTTURfTUFDUk8pKTsNCgl9DQp9DQoNCi8vICoq KioqKioqKioqKioqKioqKioqKg0KLy8gUFVCTElDIFNJREUgSU5URVJGQUNFDQovLyAqKioq KioqKioqKioqKioqKioqKioNCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBF eHRyYWN0cyBhbGwgcHJlYnVpbHQgbWFjcm9zIChlc3NlbnRpYWxseSwgbmV3IHRhZ3MpIGFu ZCBpbmplY3RzIHRoZW0gaW50byB0aGUgZ2xvYmFsIHNjb3BlIHNvIHRoZXkgY2FuIGJlIGNh bGxlZA0KZnVuY3Rpb24gc21kX21hY3JvX2Jvb3QoKSB7DQoJJGZ1bGxfbWFjcm9zID0gYXJy YXkoKTsNCg0KCSRycyA9IHNhZmVfcm93cygnKicsIFNNRF9NQUNSTywgJzE9MScpOw0KDQoJ Zm9yZWFjaCAoJHJzIGFzICRyb3cpIHsNCgkJJGZ1bGxfbWFjcm9zW10gPSBzdHJfcmVwbGFj ZSgnXHJcbicsJw0KJywkcm93Wydjb2RlJ10pOyAvLyB5dWtreSBuZXdsaW5lIHdvcmthcm91 bmQNCgl9DQoNCgkkbWFjcm9zID0gam9pbihuLCAkZnVsbF9tYWNyb3MpOw0KDQoJLy8gSW5q ZWN0IHRoZSB2aXJ0dWFsIHRhZ3MgaW50byB0aGUgZ2xvYmFsIHNjb3BlDQoJZXZhbCgkbWFj cm9zKTsNCn0NCg0KLyoqDQogKiBzbWRfbWFjcm9fZ1R4dAlDb252ZXJ0IHN0cmluZ3MgZm9y IGkxOG4gcHVycG9zZXMNCiAqDQogKiBAcGFyYW0Jc3RyaW5nCSR3aGF0IFsrXSBbcHJpdmF0 ZV0gW3N0YXRpY10JCU5hbWUgb2YgdGhlIGl0ZW0gZnJvbSB0aGUgYXJyYXkgdG8gcmV0cmll dmUNCiAqIEBwYXJhbQlhcnJheQkkYXR0cyBbK10JKERlZmF1bHQ6IEFycmF5KQlBcnJheSBv ZiAnc2VhcmNoJyA9PiAncmVwbGFjZW1lbnRzJyB0byBtYWtlDQogKi8NCmZ1bmN0aW9uIHNt ZF9tYWNyb19nVHh0KCR3aGF0LCAkYXR0cyA9IGFycmF5KCkpIHsNCgkkbGFuZyA9IGFycmF5 KA0KCQknc21kX21hY3JvX2F0dHJpYnV0ZXMnID0+ICdBdHRyaWJ1dGVzJywNCgkJJ3NtZF9t YWNyb19jaG9vc2UnID0+ICdTZWxlY3QgbWFjcm8gdG8gZWRpdDonLA0KCQknc21kX21hY3Jv X2F0dF9jbG9uZScgPT4gJ1srXScsDQoJCSdzbWRfbWFjcm9fYXR0X2Nsb25lX2hlbHAnID0+ ICdBZGQgYW4gYXR0cmlidXRlJywNCgkJJ3NtZF9tYWNyb19jYW5ub3RfaW1wb3J0JyA9PiAn VW5hYmxlIHRvIGltcG9ydCBtYWNyby4gUGxlYXNlIGNoZWNrIGZvbGRlciBwZXJtaXNzaW9u cy9zZXR0aW5ncyBvbiB5b3VyIGhvc3QnLA0KCQknc21kX21hY3JvX2Nsb25lJyA9PiAnQ2xv bmUnLA0KCQknc21kX21hY3JvX2NyZWF0ZWQnID0+ICdNYWNybyBjcmVhdGVkJywNCgkJJ3Nt ZF9tYWNyb19kZWxldGVkJyA9PiAnTWFjcm8gZGVsZXRlZCcsDQoJCSdzbWRfbWFjcm9fZXhp c3RzJyA9PiAnTWFjcm8gbmFtZSBhbHJlYWR5IGV4aXN0cyBvciBjbGFzaGVzJywNCgkJJ3Nt ZF9tYWNyb19leHBvcnQnID0+ICdFeHBvcnQnLA0KCQknc21kX21hY3JvX2ZpbGVfc2l6ZScg PT4gJ01hY3JvIGZpbGUgdG9vIGxhcmdlJywNCgkJJ3NtZF9tYWNyb19pbXBvcnQnID0+ICdJ bXBvcnQnLA0KCQknc21kX21hY3JvX2ltcG9ydGVkJyA9PiAnSW1wb3J0ZWQ6ICcsDQoJCSdz bWRfbWFjcm9faW52YWxpZCcgPT4gJ01hY3JvIG5hbWUgbm90IHZhbGlkJywNCgkJJ3NtZF9t YWNyb19pbnZhbGlkX2luaScgPT4gJ01hY3JvIGZpbGUgbm90IGluIGV4cGVjdGVkIGZvcm1h dCcsDQoJCSdzbWRfbWFjcm9fbm90X2ltcG9ydGVkJyA9PiAnTm90IGltcG9ydGVkOiAnLA0K CQknc21kX21hY3JvX292ZXJ3cml0ZScgPT4gJ0ZvcmNlIG92ZXJ3cml0ZScsDQoJCSdzbWRf bWFjcm9fcHJlZnNfc29tZV9leHBsYWluJyA9PiAnVGhpcyBpcyBlaXRoZXIgYSBuZXcgaW5z dGFsbGF0aW9uIG9yIGEgZGlmZmVyZW50IHZlcnNpb24nLmJyLidvZiB0aGUgcGx1Z2luIHRv IG9uZSB5b3UgaGFkIGJlZm9yZS4nLA0KCQknc21kX21hY3JvX3ByZWZzX3NvbWVfb3B0cycg PT4gJ0NsaWNrICJJbnN0YWxsIHRhYmxlIiB0byBhZGQgb3IgdXBkYXRlIHRoZSB0YWJsZScu YnIuJ2xlYXZpbmcgYWxsIGV4aXN0aW5nIGRhdGEgdW50b3VjaGVkLicsDQoJCSdzbWRfbWFj cm9fcHJlZnNfc29tZV90YmwnID0+ICdOb3QgYWxsIHRhYmxlIGluZm8gYXZhaWxhYmxlLics DQoJCSdzbWRfbWFjcm9fcmVwbmFtZScgPT4gJ1JlcGxhY2VtZW50IG5hbWUnLA0KCQknc21k X21hY3JvX3NhdmVkJyA9PiAnTWFjcm8gc2F2ZWQnLA0KCQknc21kX21hY3JvX3NraXBwZWQn ID0+ICdTa2lwcGVkOiAnLA0KCQknc21kX21hY3JvX3RhYl9uYW1lJyA9PiAnTWFjcm9zJywN CgkJJ3NtZF9tYWNyb190YWdfZGVmaW5pdGlvbicgPT4gJ01hY3JvIGRlZmluaXRpb24nLA0K CQknc21kX21hY3JvX3RibF9pbnN0YWxsX2xibCcgPT4gJ0luc3RhbGwgdGFibGUnLA0KCQkn c21kX21hY3JvX3RibF9pbnN0YWxsZWQnID0+ICdUYWJsZSBpbnN0YWxsZWQnLA0KCQknc21k X21hY3JvX3RibF9ub3RfaW5zdGFsbGVkJyA9PiAnVGFibGUgbm90IGluc3RhbGxlZCcsDQoJ CSdzbWRfbWFjcm9fdGJsX3JlbW92ZWQnID0+ICdUYWJsZSByZW1vdmVkJywNCgkJJ3NtZF9t YWNyb190Ymxfbm90X3JlbW92ZWQnID0+ICdUYWJsZSBub3QgcmVtb3ZlZCcsDQoJCSdzbWRf bWFjcm9fdXBsb2FkJyA9PiAnTWFjcm8gZmlsZScsDQoJKTsNCglyZXR1cm4gc3RydHIoJGxh bmdbJHdoYXRdLCAkYXR0cyk7DQp9IjtzOjQ6InR5cGUiO3M6MToiMSI7czo1OiJvcmRlciI7 czoxOiI1IjtzOjU6ImZsYWdzIjtzOjE6IjIiO3M6NDoiaGVscCI7czoxMTE5NzoiPGRpdiBp ZD0ic21kX2hlbHAiPgoKCTxoMSBpZD0ic21kX3RvcCI+c21kX21hY3JvPC9oMT4KCgk8cD5C dWlsZCB5b3VyIG93biB2aXJ0dWFsIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IHRh Z3MgZnJvbSBjb21iaW5hdGlvbnMgb2YgYnVpbHQtaW4gdGFncyBhbmQgcGx1Z2lucyAmIzgy MTI7IGV2ZW4gPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4uIFRodXMgeW91IGNhbiBl YXNlIHlvdXIgd29ya2Zsb3cgb3Igb2ZmZXIgeW91ciBjbGllbnRzIHNpbXBsZXIgc3ludGF4 IGZvciBkb2luZyBwb3dlcmZ1bCB0aGluZ3MgaW4gdGhlaXIgUGFnZXMsIEZvcm1zLCBhbmQg QXJ0aWNsZXMuPC9wPgoKCTxoMiBpZD0ic21kX2ZlYXQiPkZlYXR1cmVzOjwvaDI+CgoJPHVs PgoJCTxsaT5EZWZpbmUgbWFjcm9zICYjODIxMjsgY3VzdG9tLCB2aXJ0dWFsIDxzcGFuIGNs YXNzPSJjYXBzIj5UWFA8L3NwYW4+IHRhZ3MgJiM4MjEyOyB3aXRoIGFueSBudW1iZXIgb2Yg YXR0cmlidXRlczwvbGk+CgkJPGxpPkNvbnN0cnVjdCBhIGRlZmluaXRpb24gYmxvY2sgJiM4 MjEyOyBsaWtlIGEgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gRm9ybSAmIzgyMTI7 IHRoYXQgY29udGFpbnMgdGhlIHRhZ3MgLyBjb2RlIHRoYXQgbWFrZSB1cCB5b3VyIG1hY3Jv PC9saT4KCQk8bGk+SW5qZWN0IHJlcGxhY2VtZW50IHZhbHVlcyAocmVhZCBmcm9tIHlvdXIg YXR0cmlidXRlcykgaW50byBtYWNybyBkZWZpbml0aW9ucyBhdCBydW50aW1lPC9saT4KCQk8 bGk+SW1wb3J0IC8gZXhwb3J0IG1hY3JvcyBmb3IgYXJjaGl2ZSAvIHNoYXJpbmcgd2l0aCB0 aGUgY29tbXVuaXR5PC9saT4KCTwvdWw+CgoJPGgyPkF1dGhvciAvIGNyZWRpdHM8L2gyPgoK CTxwPldyaXR0ZW4gYnkgPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL2NvbnRhY3Qi PlN0ZWYgRGF3c29uPC9hPi4gU3Bhd25lZCBmcm9tIGFuIGlkZWEgYnkganBkdXBvbnQsIHdp dGggdGhhbmtzLiBBbHNvIGJpZyBwcm9wcyB0byB0aGUgYmV0YSB0ZXN0IHRlYW06IHByaW1h cmlseSBqcGR1cG9udCwgcGllbWFuLCBtcmRhbGUsIG1hdmVyaWNrLCBtYXJ1Y2hhbiBhbmQg amFrb2IuPC9wPgoKCTxoMj5JbnN0YWxsYXRpb24gLyB1bmluc3RhbGxhdGlvbjwvaDI+CgoJ PHAgY2xhc3M9ImltcG9ydGFudCI+UmVxdWlyZXMgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwv c3Bhbj4gNC4zLjArPC9wPgoKCTxwPkRvd25sb2FkIHRoZSBwbHVnaW4gZnJvbSBlaXRoZXIg PGEgaHJlZj0iaHR0cDovL3RleHRwYXR0ZXJuLm9yZy9wbHVnaW5zLzEyMTMvc21kX21hY3Jv Ij50ZXh0cGF0dGVybi5vcmc8L2E+LCBvciB0aGUgPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdz b24uY29tL3N3Ij5zb2Z0d2FyZSBwYWdlPC9hPiwgcGFzdGUgdGhlIGNvZGUgaW50byB0aGUg PHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gPGVtPkFkbWluIC0mZ3Q7IFBsdWdpbnM8 L2VtPiBwYW5lLCBpbnN0YWxsIGFuZCBlbmFibGUgdGhlIHBsdWdpbi4gVG8gdW5pbnN0YWxs LCBkZWxldGUgZnJvbSB0aGUgPGVtPkFkbWluIC0mZ3Q7IFBsdWdpbnM8L2VtPiBwYWdlLjwv cD4KCgk8cD5WaXNpdCB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNv bS92aWV3dG9waWMucGhwP2lkPTM1NzcyIj5mb3J1bSB0aHJlYWQ8L2E+IGZvciBtb3JlIGlu Zm8gb3IgdG8gcmVwb3J0IG9uIHRoZSBzdWNjZXNzIG9yIG90aGVyd2lzZSBvZiB0aGUgcGx1 Z2luLjwvcD4KCgk8aDIgaWQ9InNtZF91c2FnZSI+VXNhZ2U8L2gyPgoKCTxwPlZpc2l0IHRo ZSA8ZW0+Q29udGVudCAtJmd0OyBNYWNyb3M8L2VtPiB0YWIuIFdoZW4gdGhlcmUgYXJlIG1h Y3JvcyBkZWZpbmVkLCB0aGUgZHJvcGRvd24gYXQgdGhlIHRvcC1yaWdodCBvZiB0aGUgcGFu ZWwgY29udGFpbnMgYSBsaXN0IG9mIGFsbCBtYWNyb3MgdGhhdCBoYXZlIGJlZW4gZGVmaW5l ZC4gQ2hvb3NlIG9uZSB0byBsb2FkIGl0IGludG8gdGhlIGJveGVzIGJlbG93IGZvciBlZGl0 aW5nLjwvcD4KCgk8cD5UaGUgYm94ZXMgYXJlOjwvcD4KCgk8dWw+CgkJPGxpPjxzcGFuIGNs YXNzPSJhdG5tIj5OYW1lPC9zcGFuPiA6IG5hbWUgb2YgeW91ciBtYWNyby92aXJ0dWFsIHRh ZzxzdXAgaWQ9ImZucmV2MjQ5NzUzMTg4NGQ4ZjhmMDBkMTk3NSIgY2xhc3M9ImZvb3Rub3Rl Ij48YSBocmVmPSIjZm4yNDk3NTMxODg0ZDhmOGYwMGQxOTc1Ij4xPC9hPjwvc3VwPi4gQ2xp Y2sgdGhlIGFkamFjZW50IFt4XSBidXR0b24gdG8gZGVsZXRlIGl0LjwvbGk+CgkJPGxpPjxz cGFuIGNsYXNzPSJhdG5tIj5EZXNjcmlwdGlvbjwvc3Bhbj4gOiBvcHRpb25hbCBkZXNjcmlw dGlvbiBmb3IgeW91ciBvd24gZG9jdW1lbnRhdGlvbiAmIzgyMTI7IG5vdCB1c2VkIGFueXdo ZXJlIGVsc2UgYXQgcHJlc2VudC48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+QXR0 cmlidXRlczwvc3Bhbj4gOiBzcGVjaWZ5IHVwIHRvIHRocmVlIHZhbHVlcyBmb3IgZWFjaCBh dHRyaWJ1dGU8c3VwIGlkPSJmbnJldjE3MjQ2ODc2MDQ0ZDhmOGYwMGQxZDVkIiBjbGFzcz0i Zm9vdG5vdGUiPjxhIGhyZWY9IiNmbjE3MjQ2ODc2MDQ0ZDhmOGYwMGQxZDVkIj4yPC9hPjwv c3VwPi4gQ2xpY2sgdGhlIFsrXSBidXR0b24gdG8gY3JlYXRlIG1vcmUuIENsZWFyIHRoZSA8 ZW0+bmFtZTwvZW0+IGJveCBiZWZvcmUgU2F2aW5nIHRvIGRlbGV0ZSB0aGF0IGF0dHJpYnV0 ZS4gVGhlIHRocmVlIHZhbHVlcyBhcmU6Cgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij5OYW1lPC9zcGFuPiA6IHRoZSBuYW1lIG9mIHlvdXIgYXR0cmlidXRlIHRoYXQgY2xpZW50 cyB3aWxsIHVzZSBpbiB5b3VyIHRhZy4gTXVzdCBiZSBhIHZhbGlkIDxzcGFuIGNsYXNzPSJj YXBzIj5BU0NJSTwvc3Bhbj4gbmFtZS48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ RGVmYXVsdDwvc3Bhbj4gOiB0aGUgZGVmYXVsdCB2YWx1ZSB0aGF0IHRoaXMgYXR0cmlidXRl IHdpbGwgdGFrZSBvbiBpZiBub3Qgc3VwcGxpZWQuIExlYXZlIGVtcHR5IGZvciA8Y29kZT4m cXVvdDsmcXVvdDs8L2NvZGU+LjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5SZXBs YWNlbWVudDwvc3Bhbj4gOiB0aGUgbmFtZSBvZiB0aGUgPGNvZGU+e3JlcGxhY2VtZW50fTwv Y29kZT4gdGhhdCB0aGlzIGF0dHJpYnV0ZSB3aWxsIG9jY3VweSBpbiB5b3VyIGRlZmluaXRp b25zLiBTcGVjaWZ5IGl0IDxlbT53aXRob3V0PC9lbT4gdGhlIDxjb2RlPnt9PC9jb2RlPiBi cmFja2V0cy4gSWYgdGhpcyBlbnRyeSBpcyBvbWl0dGVkLCB0aGUgYXR0cmlidXRlJiM4MjE3 O3MgPGNvZGU+TmFtZTwvY29kZT4gd2lsbCBiZSB1c2VkLjwvbGk+Cgk8L3VsPjwvbGk+CgkJ PGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5NYWNybyBkZWZpbml0aW9uPC9zcGFuPiA6IHlvdXIg dGFnIGNvZGUgaGVyZS4gQXQgYW55IHBvaW50IHlvdSBjYW4gaW5zZXJ0IHRoZSBuYW1lIG9m IGFueSBvZiB5b3VyIGRlZmluZWQgYXR0cmlidXRlIHJlcGxhY2VtZW50IHZhbHVlcyBpbnNp ZGUgPGNvZGU+e308L2NvZGU+IG1hcmtzIHRvIGhhdmUgdGhlIHBsdWdpbiBpbmplY3QgdGhl IGF0dHJpYnV0ZSBpbnRvIHlvdXIgbWFya3VwIHdoZW4gdGhlIGNsaWVudCB1c2VzIHRoZSB0 YWcuIFNlZSA8YSBocmVmPSIjc21kX2V4YW1wbGVzIj5leGFtcGxlczwvYT4gZm9yIG1vcmUu PC9saT4KCTwvdWw+CgoJPHAgaWQ9ImZuMjQ5NzUzMTg4NGQ4ZjhmMDBkMTk3NSIgY2xhc3M9 ImZvb3Rub3RlIj48c3VwPjE8L3N1cD4gPHNwYW4gY2xhc3M9ImNhcHMiPklNUE9SVEFOVDwv c3Bhbj46IHlvdXIgdGFnIDxzdHJvbmc+PHNwYW4gY2xhc3M9ImNhcHMiPk1VU1Q8L3NwYW4+ PC9zdHJvbmc+IGFkaGVyZSB0byB0aGUgZm9sbG93aW5nIGNvbnZlbnRpb25zOjwvcD4KCgk8 dWw+CgkJPGxpPmFuIDxzcGFuIGNsYXNzPSJjYXBzIj5BU0NJSTwvc3Bhbj4gbmFtZSAmIzgy MTI7IG5vIGZvcmVpZ24gY2hhcmFjdGVycywgaHlwaGVucyBvciBhbnl0aGluZyBvdGhlciB0 aGFuIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCB1bmRlcnNjb3Jlcy4gSW4gYWRkaXRp b24gaXQgbWF5IDxlbT5ub3Q8L2VtPiBiZWdpbiB3aXRoIGEgbnVtYmVyLjwvbGk+CgkJPGxp PmRvdWJsZSBjaGVjayBiZWZvcmUgc2F2aW5nIHRoYXQgeW91ciB0YWcgZG9lcyBub3QgaGF2 ZSB0aGUgc2FtZSBuYW1lIGFzIGFuIGV4aXN0aW5nIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8 L3NwYW4+IG9yIDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+IGZ1bmN0aW9uLiBJZiBp dCBkb2VzLCB5b3VyIHNpdGUgPHNwYW4gY2xhc3M9ImNhcHMiPldJTEw8L3NwYW4+IGJsb3cg dXAgd2l0aCBuYXN0eSBlcnJvcnMuIFRoZSBiZXN0IHdheSB0byBhdm9pZCB0aGlzIGlzIHRv IG1ha2Ugc3VyZSB5b3UgcHJlZml4IHlvdXIgdGFncyB3aXRoIGEgdGhyZWUtbGV0dGVyIHBy ZWZpeCwganVzdCBhcyB5b3Ugd291bGQgaWYgdGhpcyB3YXMgeW91ciBvd24gcGx1Z2luLjwv bGk+Cgk8L3VsPgoKCTxwPlRoZSBwbHVnaW4gdHJpZXMgdG8gc2hpZWxkIHlvdSBmcm9tIGlu dmFsaWQgbmFtZXMgYXMgZmFyIGFzIHBvc3NpYmxlIGFuZCB3aWxsIHVzdWFsbHkgZGV0ZWN0 IGludGVybmFsIDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+L1RYUCBmdW5jdGlvbiBu YW1lIGNsYXNoZXMsIGFkbWluLXNpZGUgcGx1Z2luIGNsYXNoZXMgYXMgd2VsbCBhcyBpbnZh bGlkL3ByZXZpb3VzbHkgZGVmaW5lZCBtYWNybyBuYW1lcy4gQnV0IGl0IGNhbm5vdCBsZWdp c2xhdGUgZm9yIGZ1bmN0aW9ucyB0aGF0IGFyZSBnb2luZyB0byBiZWNvbWUgYXZhaWxhYmxl IG9uIHlvdXIgcHVibGljIHNpdGUsIGkuZS4gdGFncy9mdW5jdGlvbnMgYWRkZWQgYnkgcHVi bGljLXNpZGUgcGx1Z2lucy4gUGxlYXNlIGV4ZXJjaXNlIGNhdXRpb24gd2hlbiBuYW1pbmcg eW91ciBtYWNyb3MuPC9wPgoKCTxwIGlkPSJmbjE3MjQ2ODc2MDQ0ZDhmOGYwMGQxZDVkIiBj bGFzcz0iZm9vdG5vdGUiPjxzdXA+Mjwvc3VwPiBNYWtlIHN1cmUgeW91IGF2b2lkIHRoZSBw aXBlIHN5bWJvbCA8Y29kZT58PC9jb2RlPiBpbiB5b3VyIGF0dHJpYnV0ZSBuYW1lcyAvIGRl ZmF1bHRzIC8gcmVwbGFjZW1lbnRzIGFzIHRoaXMgY2hhcmFjdGVyIGlzIHVzZWQgaW50ZXJu YWxseSBieSB0aGUgcGx1Z2luLjwvcD4KCgk8aDIgaWQ9InNtZF9pbXBvcnQiPkltcG9ydGlu ZyBtYWNyb3M8L2gyPgoKCTxwPllvdSBjYW4gaW1wb3J0IG1hY3JvcyB0aGF0IGhhdmUgYmVl biBwcmV2aW91c2x5IGV4cG9ydGVkIGZyb20gdGhlIHBsdWdpbi4gQ2xpY2sgdGhlIDxlbT5J bXBvcnQ8L2VtPiBsaW5rIGFuZCBjaG9vc2UgdGhlIDxjb2RlPnNtZF9tYWNyb3MuaW5pPC9j b2RlPiBmaWxlIHRoYXQgeW91IGhhdmUgYmVlbiBnaXZlbiAodGhlIGZpbGUgbmFtZSBpdHNl bGYgZG9lc24mIzgyMTc7dCBhY3R1YWxseSBtYXR0ZXIpLiBJZiB5b3Ugd2FudCB0byBvdmVy d3JpdGUgYW55IG1hY3JvcyBvZiB0aGUgc2FtZSBuYW1lIHRoYXQgYWxyZWFkeSBleGlzdCBp biB5b3VyIHN5c3RlbSwgY2hlY2sgdGhlIDxlbT5Gb3JjZSBvdmVyd3JpdGU8L2VtPiBib3gu IE90aGVyd2lzZSwgYW55IG1hY3JvcyBpbiB0aGUgaW1wb3J0IGZpbGUgdGhhdCBhbHJlYWR5 IGV4aXN0IHdpbGwgYmUgc2tpcHBlZC48L3A+CgoJPHA+Tm90ZSB0aGF0IHRoZSBwbHVnaW4g bWFrZXMgc29tZSBjaGVja3Mgb24geW91ciBzeXN0ZW0gYW5kIHdpbGwgdHJ5IGFuZCBiYWls IG91dCBncmFjZWZ1bGx5IGlmIHRoZSBuZWNlc3NhcnkgcGVybWlzc2lvbnMgYXJlIG5vdCBz ZXQgKGl0IHRlbXBvcmFyaWx5IHVwbG9hZHMgZmlsZXMgdG8gPHNwYW4gY2xhc3M9ImNhcHMi PlRYUDwvc3Bhbj4mIzgyMTc7cyB0ZW1wIGRpcmVjdG9yeSwgYXMgZGVmaW5lZCBpbiA8ZW0+ QWR2YW5jZWQgUHJlZnM8L2VtPikuIEl0IGFsc28gaW1wb3NlcyBhIHNvZnQgbGltaXQgb2Yg cm91Z2hseSAxNUtCIG9uIHRoZSBzaXplIG9mIHRoZSBpbXBvcnRlZCBmaWxlLCBtb3N0bHkg Zm9yIHJlYXNvbnMgb2Ygc3BlZWQuIElmIHlvdSBmaW5kIHlvdXJzZWxmIHJlcXVpcmluZyB0 byBpbXBvcnQgbGFyZ2UgbnVtYmVycyBvZiBtYWNyb3MgaW4gb25lIGZpbGUsIHlvdSBjYW4g aW5jcmVhc2UgdGhpcyBsaW1pdCBieSBjcmVhdGluZyB0aGUgZm9sbG93aW5nIGdsb2JhbCBz eXN0ZW0gcHJlZmVyZW5jZSAoc21kX3ByZWZhbGl6ZXIgY2FuIGhlbHApOjwvcD4KCgk8dWw+ CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5QcmVmIG5hbWU8L3NwYW4+OiBzbWRfbWFjcm9f aW1wb3J0X2ZpbGVzaXplPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPlZhbHVlPC9z cGFuPiA6IG1heGltdW0gZmlsZSBzaXplIChpbiBieXRlcyk8L2xpPgoJCTxsaT48c3BhbiBj bGFzcz0iYXRubSI+VmlzaWJpbGl0eTwvc3Bhbj4gOiBIaWRkZW48L2xpPgoJCTxsaT48c3Bh biBjbGFzcz0iYXRubSI+RXZlbnQ8L3NwYW4+IDogc21kX21hY3JvPC9saT4KCTwvdWw+CgoJ PHA+QWx0ZXJuYXRpdmVseSwgc3BsaXQgeW91ciBtYWNyb3MgaW50byBhIGZldyBzbWFsbGVy IGZpbGVzIGFuZCBpbXBvcnQgdGhlbSBzZXBhcmF0ZWx5LjwvcD4KCgk8aDIgaWQ9InNtZF9l eHBvcnQiPkV4cG9ydGluZyBtYWNyb3M8L2gyPgoKCTxwPkF0IGFueSB0aW1lIHlvdSBjYW4g ZXhwb3J0IG9uZSBvciBtb3JlIG1hY3JvcyB0byBhIGZpbGUgZm9yIGRpc3RyaWJ1dGlvbiBv ciBiYWNrdXAuIEp1c3QgY2xpY2sgdGhlIDxlbT5FeHBvcnQ8L2VtPiBsaW5rIGFuZCBjaG9v c2Ugb25lIG9yIG1vcmUgbWFjcm9zIGZyb20gdGhlIGxpc3QgdGhhdCBhcHBlYXJzLiBDbGlj ayA8ZW0+R288L2VtPiBhbmQgdGhlbiBzYXZlIHRoZSByZXN1bHRpbmcgZmlsZSB0byB5b3Vy IGZpbGVzeXN0ZW0uIFRoZSBjdXJyZW50IG1hY3JvIHRoYXQgaXMgYmVpbmcgZWRpdGVkIChp ZiBhbnkpIGlzIHNlbGVjdGVkIGJ5IGRlZmF1bHQuPC9wPgoKCTxoMiBpZD0ic21kX2Nsb25l Ij5DbG9uaW5nIG1hY3JvczwvaDI+CgoJPHA+V2hpbGUgYSBtYWNybyBpcyBsb2FkZWQgaW50 byB0aGUgZWRpdCBib3hlcyB5b3UgY2FuIGNsb25lIGl0LiBDbGljayB0aGUgPGVtPkNsb25l PC9lbT4gYnV0dG9uLCBzdXBwbHkgYSBuYW1lIGZvciB0aGUgY2xvbmUgYW5kIGhpdCA8ZW0+ R288L2VtPi4gUHJvdmlkZWQgdGhlIG5hbWUgaXNuJiM4MjE3O3QgaW52YWxpZCBvciBpbiB1 c2UsIHlvdXIgbmV3IGNsb25lIHdpbGwgYmUgY3JlYXRlZCBhbmQgYnJvdWdodCBpbnRvIHRo ZSBlZGl0IGFyZWEgZm9yIGltbWVkaWF0ZSBlZGl0aW5nLjwvcD4KCgk8cD5Ob3RlIHRoYXQg dGhlIGNsb25lIHdpbGwgYmUgY3JlYXRlZCBmcm9tIHRoZSBjaG9zZW4gbWFjcm8gYXMgaXQg d2FzIGxhc3Qgc2F2ZWQgdG8gdGhlIGRhdGFiYXNlLiBJZiB5b3UgaGF2ZSBtYWRlIHVuc2F2 ZWQgZWRpdHMgdG8gdGhlIG1hY3JvIGluIHRoZSBlZGl0IGJveGVzIGF0IHRoZSB0aW1lIHlv dSBjbG9uZSB0aGUgbWFjcm8sIHRoZXkgd2lsbCBiZSBsb3N0LjwvcD4KCgk8aDIgaWQ9InNt ZF9leGFtcGxlcyI+RXhhbXBsZXM8L2gyPgoKCTxoMyBpZD0ic21kX2VnMSI+RXhhbXBsZSAx OiBpbWFnZSBnYWxsZXJ5PC9oMz4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5N YWNybyBuYW1lPC9zcGFuPiA6IG15X2dhbGxlcnk8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0i YXRubSI+QXR0cmlidXRlcyAoZGVmYXVsdCAvIHJlcGxhY2VtZW50KTwvc3Bhbj4gOiBjYXRl Z29yeSAoZW1wdHkgLyBpbWdfY2F0KTwvbGk+Cgk8L3VsPgoKPHByZSBjbGFzcz0iYmxvY2si Pjxjb2RlIGNsYXNzPSJibG9jayI+Jmx0O3R4cDppbWFnZXMgY2F0ZWdvcnk9JnF1b3Q7e2lt Z19jYXR9JnF1b3Q7Jmd0OwogICAmbHQ7dHhwOmltYWdlIC8mZ3Q7CiAgICZsdDtkaXYgY2xh c3M9JnF1b3Q7aW1nX2luZm8mcXVvdDsmZ3Q7Jmx0O3R4cDppbWFnZV9pbmZvIC8mZ3Q7IGJ5 ICZsdDt0eHA6aW1hZ2VfYXV0aG9yIC8mZ3Q7Jmx0Oy9kaXYmZ3Q7CiZsdDsvdHhwOmltYWdl cyZndDsKPC9jb2RlPjwvcHJlPgoKCTxwPlRodXMsIDxjb2RlPiZsdDt0eHA6bXlfZ2FsbGVy eSBjYXRlZ29yeT0mcXVvdDthbmltYWxzJnF1b3Q7IC8mZ3Q7PC9jb2RlPiB3aWxsIHJlbmRl ciBhbiBpbWFnZSBnYWxsZXJ5IGZyb20gdGhlIGdpdmVuIGNhdGVnb3J5LCBjb21wbGV0ZSB3 aXRoIGNhcHRpb24gYW5kIGF1dGhvciBpbmZvLiBOb3RlIHRoYXQgbm8gZGVmYXVsdCB2YWx1 ZSBpcyBnaXZlbiBzbyBpZiB0aGUgPGNvZGU+Y2F0ZWdvcnk8L2NvZGU+IGF0dHJpYnV0ZSBp cyBub3Qgc3VwcGxpZWQsIG5vIGdhbGxlcnkgd2lsbCBiZSBwcm9kdWNlZC48L3A+CgoJPGgz IGlkPSJzbWRfZWcyIj5FeGFtcGxlIDI6IGludGVyZmFjZSB0byBzbWRfcXVlcnk8L2gzPgoK CTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPk1hY3JvIG5hbWU8L3NwYW4+IDogbXlf Y29sX2Zyb21fdGFibGU8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+QXR0cmlidXRl cyAoZGVmYXVsdCAvIHJlcGxhY2VtZW50KTwvc3Bhbj4gOiBjb2x1bW4gKElEIC8gY29sKSwg dGFibGUgKHRleHRwYXR0ZXJuKTwvbGk+Cgk8L3VsPgoKPHByZSBjbGFzcz0iYmxvY2siPjxj b2RlIGNsYXNzPSJibG9jayI+Jmx0O3AmZ3Q7VGhlIGNvbnRlbnRzIG9mIHRoZSB7Y29sfSBj b2x1bW4KZnJvbSB0aGUge3RhYmxlfSB0YWJsZSBpczombHQ7L3AmZ3Q7CiZsdDt0eHA6c21k X3F1ZXJ5IGNvbHVtbj0mcXVvdDt7Y29sfSZxdW90OyB0YWJsZT0mcXVvdDt7dGFibGV9JnF1 b3Q7CiAgICAgd3JhcHRhZz0mcXVvdDt1bCZxdW90OyBicmVhaz0mcXVvdDtsaSZxdW90OyZn dDsKICAge3tjb2x9fQombHQ7L3R4cDpzbWRfcXVlcnkmZ3Q7CjwvY29kZT48L3ByZT4KCgk8 cD5Bbnlib2R5IHVzaW5nIDxjb2RlPiZsdDt0eHA6bXlfY29sX2Zyb21fdGFibGUgY29sdW1u PSZxdW90O1RpdGxlJnF1b3Q7IC8mZ3Q7PC9jb2RlPiB3b3VsZCBzZWUgYSBsaXN0IG9mIGFs bCBhcnRpY2xlIHRpdGxlcy4gSWYgdGhleSBhZGRlZCA8Y29kZT50YWJsZT0mcXVvdDt0eHBf ZmlsZSZxdW90OzwvY29kZT4gdGhleSYjODIxNztkIHNlZSBhbGwgdGl0bGVzIGZyb20gYWxs IHVwbG9hZGVkIGZpbGVzLiBUaGluZ3MgdG8gbm90ZTo8L3A+CgoJPHVsPgoJCTxsaT5ObyBy ZXBsYWNlbWVudCB2YXJpYWJsZSBzcGVjaWZpZWQgZm9yIHRoZSA8Y29kZT50YWJsZTwvY29k ZT4gYXR0cmlidXRlLCB0aGVyZWZvcmUgaXQgdGFrZXMgb24gdGhlIG5hbWUgb2YgdGhlIGF0 dHJpYnV0ZSBpdHNlbGYuPC9saT4KCQk8bGk+VGhlIGRvdWJsZSBzZXQgb2YgPGNvZGU+e3t9 fTwvY29kZT4gaW4gdGhlIHNtZF9xdWVyeSBjb250YWluZXIgaXMgcmVxdWlyZWQgYmVjYXVz ZSB5b3UgZmlyc3Qgd2FudCB0aGUgbWFjcm8gdG8gcmVwbGFjZSA8Y29kZT57Y29sfTwvY29k ZT4gd2l0aCB0aGUgdmFsdWUgZnJvbSB5b3VyIG1hY3JvJiM4MjE3O3MgPGNvZGU+Y29sdW1u PC9jb2RlPiBhdHRyaWJ1dGUsIGkuZS4gaWYgeW91JiM4MjE3O2QgY2hvc2VuIDxjb2RlPmNv bHVtbj0mcXVvdDtQb3N0ZWQmcXVvdDs8L2NvZGU+IHRoZW4gPGNvZGU+e3tjb2x9fTwvY29k ZT4gYmVjb21lcyA8Y29kZT57UG9zdGVkfTwvY29kZT4uIEFmdGVyIHRoYXQsIHNtZF9xdWVy eSBzZWFyY2hlcyBmb3IgPGNvZGU+e1Bvc3RlZH08L2NvZGU+IGFuZCByZXBsYWNlcyBpdCB3 aXRoIHRoZSBjb250ZW50cyBvZiB0aGUgJiM4MjE2O1Bvc3RlZCYjODIxNzsgY29sdW1uIGZv ciBlYWNoIHJvdyBpbiB0aGUgdGFibGUuPC9saT4KCTwvdWw+CgoJPGgyIGlkPSJzbWRfY2hh bmdlbG9nIj5DaGFuZ2Vsb2c8L2gyPgoKCTxwPjE2IE1hciAxMSB8IDAuMTAgfCBJbml0aWFs IHB1YmxpYyByZWxlYXNlPGJyIC8+CjI3IE1hciAxMSB8IDAuMTEgfCBGaXhlZCBuZXN0aW5n IGJ1ZyAodGhhbmtzIG1hdmVyaWNrKS4gUmVzYXZlIHlvdXIgbWFjcm9zIGFmdGVyIHVwZ3Jh ZGluZzwvcD4KCjwvZGl2Pgo8IS0tICoqKiBCRUdJTiBQTFVHSU4gQ1NTICoqKiAtLT4KPHN0 eWxlIHR5cGU9InRleHQvY3NzIj4KI3NtZF9oZWxwIHsgbGluZS1oZWlnaHQ6MS41IDt9CiNz bWRfaGVscCBjb2RlIHsgZm9udC13ZWlnaHQ6Ym9sZDsgZm9udDogMTA1JS8xMzAlICJDb3Vy aWVyIE5ldyIsIGNvdXJpZXIsIG1vbm9zcGFjZTsgYmFja2dyb3VuZC1jb2xvcjogI2YwZTY4 YzsgY29sb3I6IzMzMzsgfQojc21kX2hlbHAgY29kZS5ibG9jayB7IGZvbnQtd2VpZ2h0Om5v cm1hbDsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgZGlzcGxheTpibG9jazsgbWFyZ2luOjEw cHggMTBweCAyMHB4OyBwYWRkaW5nOjEwcHg7IH0KI3NtZF9oZWxwIGgxIHsgZm9udDogMjBw eCBHZW9yZ2lhLCBzYW5zLXNlcmlmOyBtYXJnaW46IDA7IHRleHQtYWxpZ246IGNlbnRlcjsg fQojc21kX2hlbHAgaDIgeyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7IHBhZGRp bmc6MTBweCAwIDA7IGZvbnQ6IDE3cHggR2VvcmdpYSwgc2Fucy1zZXJpZjsgfQojc21kX2hl bHAgaDMgeyBmb250OiBib2xkIDEycHggQXJpYWwsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFj aW5nOiAxcHg7IG1hcmdpbjogMTBweCAwIDA7dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsg dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9CiNzbWRfaGVscCBoNCB7IGZvbnQ6IGJvbGQg MTFweCBBcmlhbCwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDFweDsgbWFyZ2luOiAx MHB4IDAgMCA7dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgfQojc21kX2hlbHAgLmF0bm0g eyBmb250LXdlaWdodDpib2xkOyB9CiNzbWRfaGVscCAubWFuZCB7IGJhY2tncm91bmQ6I2Vl ZTsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgfQojc21kX2hlbHAgdGFibGUgeyB3aWR0aDo5 MCU7IHRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nLWJvdHRvbToxZW07IGJvcmRlci1jb2xs YXBzZTpjb2xsYXBzZTsgfQojc21kX2hlbHAgdGQsICNzbWRfaGVscCB0aCB7IGJvcmRlcjox cHggc29saWQgIzk5OTsgcGFkZGluZzouNWVtOyB9CiNzbWRfaGVscCB1bCB7IGxpc3Qtc3R5 bGUtdHlwZTpzcXVhcmU7IH0KI3NtZF9oZWxwIC5pbXBvcnRhbnQgeyBjb2xvcjpyZWQ7IH0K I3NtZF9oZWxwIGxpIHsgbWFyZ2luOjVweCAyMHB4IDVweCAzMHB4OyB9CiNzbWRfaGVscCAu YnJlYWsgeyBtYXJnaW4tdG9wOjVweDsgfQo8L3N0eWxlPgo8IS0tICoqKiBFTkQgUExVR0lO IENTUyAqKiogLS0+CiI7czozOiJtZDUiO3M6MzI6IjZlMzYwNjM5MmE5NWJhZDMxNzJlMGU4 YmY5YTY3ZTMzIjt9