# Name: smd_where_used v0.2 # Type: Admin side plugin # Find which forms/pages/articles/plugins/text have been used where in your design # 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: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjE0OiJzbWRfd2hlcmVfdXNlZCI7czo2OiJhdXRob3IiO3M6 MTE6IlN0ZWYgRGF3c29uIjtzOjEwOiJhdXRob3JfdXJpIjtzOjIyOiJodHRwOi8vc3RlZmRh d3Nvbi5jb20vIjtzOjc6InZlcnNpb24iO3M6MzoiMC4yIjtzOjExOiJkZXNjcmlwdGlvbiI7 czo4MDoiRmluZCB3aGljaCBmb3Jtcy9wYWdlcy9hcnRpY2xlcy9wbHVnaW5zL3RleHQgaGF2 ZSBiZWVuIHVzZWQgd2hlcmUgaW4geW91ciBkZXNpZ24iO3M6NDoiY29kZSI7czoxMzIyMjoi Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQ0KaWYgKEB0eHBpbnRlcmZhY2UgPT0gJ2FkbWluJykgew0KCWFkZF9wcml2 cygnc21kX3d1JywnMSwyJyk7DQoNCgkvLyBFeHRlbnNpb25zIHRhYg0KCXJlZ2lzdGVyX3Rh YignZXh0ZW5zaW9ucycsICdzbWRfd3UnLCBzbWRfd3VfZ1R4dCgnc21kX3d1JykpOw0KCXJl Z2lzdGVyX2NhbGxiYWNrKCdzbWRfd3UnLCAnc21kX3d1Jyk7DQp9DQoNCi8vIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N CmZ1bmN0aW9uIHNtZF93dSgkZXZlbnQsICRzdGVwKSB7DQoJaWYoISRzdGVwIG9yICFpbl9h cnJheSgkc3RlcCwgYXJyYXkoDQoJCQknc21kX3d1X3NlYXJjaCcsDQoJCQknc21kX3d1X3By ZWZzYXZlJywNCgkJKSkpIHsNCgkJc21kX3d1X3Nob3dmb3JtKCcnKTsNCgl9IGVsc2UgJHN0 ZXAoKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX3d1X3Nob3dmb3JtKCRtZXNz YWdlLCAkdGVybT0nJywgJHNlbD1hcnJheSgpLCAkaW5jbD0wLCAkd2hvbGU9MCwgJG1vZGU9 MCwgJHBsdWd0eXBlPTAsICRjYXNlPTApIHsNCglwYWdldG9wKHNtZF93dV9nVHh0KCdzbWRf d3UnKSwkbWVzc2FnZSk7DQoJJGJ0blNlYXJjaCA9IGZJbnB1dCgnc3VibWl0JywgJ3NtZF93 dV9zZWFyY2gnLCBnVHh0KCdzZWFyY2gnKSwgJ3NtYWxsZXJib3gnKS5zSW5wdXQoJ3NtZF93 dV9zZWFyY2gnKS5oSW5wdXQoJ3BsdWd0eXBlJywgKCgkcGx1Z3R5cGU9PTEpID8gMCA6IDEp KTsNCgkkYnRuU3R5bGUgPSAnIHN0eWxlPSJib3JkZXI6MDtoZWlnaHQ6MjVweCInOw0KCSRw bGFjZSA9IGFycmF5KCdzZWN0aW9ucycsJ3BhZ2VzJywnZm9ybXMnLCdhcnRpY2xlcycpOw0K CSRzZWwgPSBlbXB0eSgkc2VsKSA/IHVuc2VyaWFsaXplKGdldF9wcmVmKCdzbWRfd3VfbG9v a19pbicpKSA6ICRzZWw7DQoJJHNlbCA9IGVtcHR5KCRzZWwpID8gJHBsYWNlIDogJHNlbDsN Cg0KCWVjaG8gJzxmb3JtIG1ldGhvZD0icG9zdCIgbmFtZT0ic21kX3d1X2Zvcm0iPic7DQoJ ZWNobyBzdGFydFRhYmxlKCdsaXN0Jyk7DQoJZWNobyB0cihmTGFiZWxDZWxsKHNtZF93dV9n VHh0KCdzZWFyY2hfbGJsJykpIC4gdGRjcyhmSW5wdXQoJ3RleHQnLCAnc2VhcmNoX2Zvcics IHN0cmlwc2xhc2hlcygkdGVybSksICcnLCAnJywgJycsIDMwLCAnJywgJ3NtZF9zZWFyY2hf Zm9yJyksIDQpIC4gdGRhKCRidG5TZWFyY2gsICRidG5TdHlsZSkpOw0KCWVjaG8gdHIoZkxh YmVsQ2VsbChzbWRfd3VfZ1R4dCgnZmlsdGVyJykpLnRkY3MocmFkaW8oJ21ldGgnLDAsKCgk aW5jbD09MCk/MTowKSkuc21kX3d1X2dUeHQoJ2luY2x1c2lvbicpLiIgIiAuIHJhZGlvKCdt ZXRoJywxLCgoJGluY2w9PTEpPzE6MCkpLnNtZF93dV9nVHh0KCdleGNsdXNpb24nKS4gIiB8 ICIgLiBzbWRfd3VfZ1R4dCgnd2hvbGVfd29yZCcpLmNoZWNrYm94KCd3aG9sZScsIDEsICgo JHdob2xlPT0xKT8xOjApKS4gIiB8ICIgLiBzbWRfd3VfZ1R4dCgnbWF0Y2hfY2FzZScpLmNo ZWNrYm94KCdjYXNlJywgMSwgKCgkY2FzZT09MSk/MTowKSksIDQpKTsNCgkkb3V0ID0gJyc7 DQoJZm9yZWFjaCAoJHBsYWNlIGFzICRoZXJlKSB7DQoJCSRvdXQgLj0gZkxhYmVsQ2VsbChn VHh0KCRoZXJlKSAuIGNoZWNrYm94KCdwbGFjZXNbXScsICRoZXJlLCBpbl9hcnJheSgkaGVy ZSwkc2VsKSkpOw0KCX0NCgllY2hvIHRyKGZMYWJlbENlbGwoc21kX3d1X2dUeHQoJ3NlYXJj aF93aGVyZV9sYmwnKSkgLiAkb3V0KTsNCgllY2hvIGVuZFRhYmxlKCk7DQoJZWNobyAnPC9m b3JtPic7DQoNCgkvLyBSZW5kZXIgdGhlIHByZWZzIGNoZWNrYm94ZXMNCgkkY29scyA9IGdl dFRoaW5ncygnZGVzY3JpYmUgYCcuUEZYLid0ZXh0cGF0dGVybmAnKTsNCgkkZmxkcyA9IGRv X2xpc3QoZ2V0X3ByZWYoJ3NtZF93dV9hcnRpY2xlX2ZpZWxkcycpKTsNCgkkZmxkcyA9IGVt cHR5KCRmbGRzWzBdKSA/IGRvX2xpc3QoJ0JvZHksRXhjZXJwdCxvdmVycmlkZV9mb3JtLFNl Y3Rpb24sVGl0bGUsS2V5d29yZHMnKSA6ICRmbGRzOw0KDQoJZWNobyAnPGRpdiBpZD0ic21k X3d1X3ByZWZ3cmFwIj48YSBpZD0ic21kX3d1X3ByZWZ0b2ciIGhyZWY9IiMiPicuc21kX3d1 X2dUeHQoJ3ByZWZzX2xpbmsnKS4nPC9hPic7DQoJZWNobyAnPGZvcm0gbWV0aG9kPSJwb3N0 IiBpZD0ic21kX3d1X3ByZWZzIiBzdHlsZT0iZGlzcGxheTpub25lOyI+JzsNCglmb3JlYWNo ICgkY29scyBhcyAkY29sKSB7DQoJCWVjaG8gYnIuY2hlY2tib3goJ3NtZF93dV9hcnRpY2xl X2ZpZWxkc1tdJywgJGNvbCwgKGluX2FycmF5KCRjb2wsICRmbGRzKSA/IDEgOiAwKSkuc3Au JGNvbDsNCgl9DQoJZWNobyBmSW5wdXQoJ3N1Ym1pdCcsICdzbWRfd3VfcHJlZnNhdmUnLCBn VHh0KCdzYXZlJyksICdzbWFsbGVyYm94JywgJycsICcnLCAnJywgJycsICdzbWRfd3VfcHJl ZnNhdmUnKTsNCgllY2hvICc8L2Zvcm0+PC9kaXY+JzsNCgllY2hvIDw8PEVPSlMNCjxzY3Jp cHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCmpRdWVyeShmdW5jdGlvbigpIHsNCglqUXVl cnkoIiNzbWRfc2VhcmNoX2ZvciIpLmZvY3VzKCk7DQoJalF1ZXJ5KCIjc21kX3d1X3ByZWZz IikuaGlkZSgpOw0KCWpRdWVyeSgiI3NtZF93dV9wcmVmdG9nIikuY2xpY2soZnVuY3Rpb24o KSB7DQoJCWpRdWVyeSgiI3NtZF93dV9wcmVmcyIpLnRvZ2dsZSgnZmFzdCcpOw0KCQlyZXR1 cm4gZmFsc2U7DQoJfSk7DQoJalF1ZXJ5KCIjc21kX3d1X3ByZWZzYXZlIikuY2xpY2soZnVu Y3Rpb24oKSB7DQoJCXZhciBvdXQgPSBbXTsNCgkJalF1ZXJ5KCIjc21kX3d1X3ByZWZzIGlu cHV0OmNoZWNrZWQiKS5lYWNoKGZ1bmN0aW9uKCkgew0KCQkJb3V0LnB1c2goalF1ZXJ5KHRo aXMpLnZhbCgpKTsNCgkJfSk7DQoNCgkJc2VuZEFzeW5jRXZlbnQoDQoJCQl7DQoJCQkJZXZl bnQ6IHRleHRwYXR0ZXJuLmV2ZW50LA0KCQkJCXN0ZXA6ICdzbWRfd3VfcHJlZnNhdmUnLA0K CQkJCXNtZF93dV9hcnRpY2xlX2ZpZWxkczogb3V0LmpvaW4oJywnKQ0KCQkJfQ0KCQkpOw0K CQlqUXVlcnkoIiNzbWRfd3VfcHJlZnMiKS50b2dnbGUoJ2Zhc3QnKTsNCgkJcmV0dXJuIGZh bHNlOw0KCX0pOw0KfSk7DQo8L3NjcmlwdD4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQoj c21kX3d1X3ByZWZ3cmFwIHsNCgl3aWR0aDoxNDBweDsNCgltYXJnaW46MTBweCBhdXRvIDA7 DQp9DQo8L3N0eWxlPg0KRU9KUzsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX3d1 X3ByZWZzYXZlKCkgew0KCSRjb2xzID0gZ2V0VGhpbmdzKCdkZXNjcmliZSBgJy5QRlguJ3Rl eHRwYXR0ZXJuYCcpOw0KCSRmaWVsZHMgPSBkb19saXN0KGdwcygnc21kX3d1X2FydGljbGVf ZmllbGRzJykpOw0KCSRvZmxkcyA9IGFycmF5KCk7DQoJZm9yZWFjaCgkZmllbGRzIGFzICRm bGQpIHsNCgkJaWYgKGluX2FycmF5KCRmbGQsICRjb2xzKSkgew0KCQkJJG9mbGRzW10gPSAk ZmxkOw0KCQl9DQoJfQ0KCXNldF9wcmVmKCdzbWRfd3VfYXJ0aWNsZV9maWVsZHMnLCBqb2lu KCcsJywkb2ZsZHMpLCAnc21kX3d1JywgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0Jyk7DQoJ c2VuZF94bWxfcmVzcG9uc2UoKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX3d1 X3NlYXJjaCgpIHsNCglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgnc2VhcmNoX2Zvcicp KSkpOw0KCSR3aG9sZSA9IGdwcygnd2hvbGUnKTsNCgkkY2FzZSA9IGdwcygnY2FzZScpOyAv LyAwID0gY2FzZSBpbnNlbnNpdGl2ZSwgMSA9IGNhc2Ugc2Vuc2l0aXZlDQoJJGNhc2VTZW5z ZSA9ICgkY2FzZT09MSkgPyAnIEJJTkFSWSAnIDogJyc7DQoJJG1ldGggPSBncHMoJ21ldGgn KTsgLy8gMCA9IGluY2x1ZGUsIDEgPSBleGNsdWRlDQoJJHBsdWd0eXBlID0gZ3BzKCdwbHVn dHlwZScpOyAvLyAwID0gY2xpZW50LCAxID0gMCthZG1pbiwgMiA9IDErbGlicmFyeQ0KCSRw bHVndHlwZSA9IChpc19udW1lcmljKCRwbHVndHlwZSkgJiYgJHBsdWd0eXBlIDwgMykgPyAk cGx1Z3R5cGUgOiAwOw0KCSRqb2lubWUgPSAoJG1ldGggPT0gMCkgPyAiIE9SICIgOiAiIEFO RCAiOw0KCSRwbGFjZXMgPSBncHMoJ3BsYWNlcycpOw0KCSRwbGFjZXMgPSBpc19hcnJheSgk cGxhY2VzKSA/ICRwbGFjZXMgOiBhcnJheSgpOw0KCXNldF9wcmVmKCdzbWRfd3VfbG9va19p bicsIHNlcmlhbGl6ZSgkcGxhY2VzKSwgJ3NtZF93dScsIFBSRUZfSElEREVOLCAndGV4dF9p bnB1dCcpOw0KCSRtb2RlID0gKCRzZWFyY2hfZm9yKSA/IDAgOiAxOw0KCXNtZF93dV9zaG93 Zm9ybSgnJywgJHNlYXJjaF9mb3IsICRwbGFjZXMsICRtZXRoLCAkd2hvbGUsICRtb2RlLCAk cGx1Z3R5cGUsICRjYXNlKTsNCg0KCSRhcnRmbGRzID0gZ2V0X3ByZWYoJ3NtZF93dV9hcnRp Y2xlX2ZpZWxkcycpOw0KCSRhcnRmbGRzID0gZW1wdHkoJGFydGZsZHMpID8gJ0JvZHksRXhj ZXJwdCxvdmVycmlkZV9mb3JtLFNlY3Rpb24sVGl0bGUsS2V5d29yZHMnIDogJGFydGZsZHM7 DQoNCgkvLyBFbnRyaWVzIGluIHRoZSBwbGFjZVRhYmxlIGFycmF5IGFyZToNCgkvLyAgMDog VGFibGUgdG8gc2VhcmNoDQoJLy8gIDE6IENvbHVtbiB0byBzZWFyY2gNCgkvLyAgMjogQ29s dW1uIHRvIHJldHVybg0KCS8vICAzOiBIZWFkaW5nIHRvIGRpc3BsYXkgaWYgcmVzdWx0cyBm b3VuZA0KCS8vICA0OiBFdmVudCBvZiBkZXN0aW5hdGlvbiBVUkwNCgkvLyAgNTogU3RlcCBv ZiBkZXN0aW5hdGlvbiBVUkwNCgkvLyAgNjogQWRkaXRpb25hbCBVUkwgdmFyDQoJLy8gIDc6 IEFkZGl0aW9uYWwgVVJMIHZhciByZXBsYWNlbWVudCAodXNlZCBpbiBzdHJ0cikNCgkkcGxh Y2VUYWJsZSA9IGFycmF5KA0KCQkncGFnZXMnID0+IGFycmF5KCd0eHBfcGFnZScsICd1c2Vy X2h0bWwnLCAnbmFtZScsIGdUeHQoJ3BhZ2VzJyksICdwYWdlJywgJycsICduYW1lJywgJ3tu YW1lfScsICcnKSwNCgkJJ2Zvcm1zJyA9PiBhcnJheSgndHhwX2Zvcm0nLCAnZm9ybScsICdu YW1lJywgZ1R4dCgnZm9ybXMnKSwgJ2Zvcm0nLCAnZm9ybV9lZGl0JywgJ25hbWUnLCAne25h bWV9JywgJycpLA0KCQknYXJ0aWNsZXMnID0+IGFycmF5KCd0ZXh0cGF0dGVybicsICRhcnRm bGRzLCAnSUQsdGl0bGUnLCBnVHh0KCdhcnRpY2xlcycpLCAnYXJ0aWNsZScsICdlZGl0Jywg J0lEJywgJ3tJRH0nLCAnJyksDQoJCSdzZWN0aW9ucycgPT4gYXJyYXkoJ3R4cF9zZWN0aW9u JywgJ3BhZ2UsY3NzJywgJ25hbWUnLCBnVHh0KCdzZWN0aW9ucycpLCAnc2VjdGlvbicsICcn LCAnIycsICdzZWN0aW9uLXtuYW1lfScsICcnKSwNCgkpOw0KDQoJJHJzID0gYXJyYXkoKTsN CgllY2hvIG4uJzxociB3aWR0aD0iNTAlIiAvPic7DQoJZWNobyBzdGFydFRhYmxlKCdsaXN0 Jyk7DQoJJGNvbEhlYWQgPSBhcnJheSgpOw0KCSRjb2xCb2R5ID0gYXJyYXkoKTsNCg0KCWlm ICgkc2VhcmNoX2Zvcikgew0KCQllY2hvIHRyKHRkY3ModGFnKGdUeHQoJ3NlYXJjaF9yZXN1 bHRzJyksICdoMicpLCA0KSk7DQoJCWZvcmVhY2ggKCRwbGFjZXMgYXMgJHBsYWNlKSB7DQoJ CQkkY3JvdyA9ICRwbGFjZVRhYmxlWyRwbGFjZV07DQoJCQkkd2hlcmUgPSBhcnJheSgpOw0K CQkJJHdpdGVtcyA9IGRvX2xpc3QoJGNyb3dbMV0pOw0KCQkJJGxpc3QgPSBkb19saXN0KCRj cm93WzJdKTsNCg0KCQkJZm9yZWFjaCAoJHdpdGVtcyBhcyAkaXRlbSkgew0KCQkJCSR3aGVy ZVtdID0gJGNhc2VTZW5zZSAuICRpdGVtIC4gKCgkbWV0aD09MSkgPyAnIE5PVCcgOiAnJykg LiAoKCR3aG9sZT09MSkgPyAnIFJFR0VYUCBcJ1tbOjw6XV0nLiRzZWFyY2hfZm9yLidbWzo+ Ol1dXCcnIDogIiBMSUtFICclJHNlYXJjaF9mb3IlJyIpOw0KCQkJfQ0KCQkJJHJzID0gc2Fm ZV9yb3dzKCRjcm93WzJdLCAkY3Jvd1swXSwgJygnLmpvaW4oJGpvaW5tZSwgJHdoZXJlKS4n KSBPUkRFUiBCWSAnLiRsaXN0WzBdKTsNCgkJCSRjb2xIZWFkW10gPSB0ZChzdHJvbmcoJGNy b3dbM10pKTsNCgkJCWlmICgkcnMpIHsNCgkJCQkkb3V0ID0gJzx1bD4nOw0KCQkJCWZvcmVh Y2ggKCRycyBhcyAkcm93KSB7DQoJCQkJCSRobGluayA9ICcnOw0KCQkJCQkkdmFycyA9ICcn Ow0KCQkJCQlmb3JlYWNoICgkbGlzdCBhcyAkY29sKSB7DQoJCQkJCQkkZnJvbSA9ICd7Jy4k Y29sLid9JzsNCgkJCQkJCWlmIChzdHJwb3MoJGNyb3dbN10sICRmcm9tKSAhPT0gZmFsc2Up IHsNCgkJCQkJCQlpZiAoJGNyb3dbNl0gPT0gIiMiKSB7DQoJCQkJCQkJCSR2YXJzID0gam9p bl9xcyhhcnJheSgiZXZlbnQiID0+ICRjcm93WzRdLCAic3RlcCIgPT4gJGNyb3dbNV0pKS4k Y3Jvd1s2XS5zdHJ0cigkY3Jvd1s3XSwgYXJyYXkoJGZyb20gPT4gJHJvd1skY29sXSkpOw0K CQkJCQkJCX0gZWxzZSB7DQoJCQkJCQkJCSR2YXJzID0gam9pbl9xcyhhcnJheSgiZXZlbnQi ID0+ICRjcm93WzRdLCAic3RlcCIgPT4gJGNyb3dbNV0sICRjcm93WzZdID0+IHN0cnRyKCRj cm93WzddLCBhcnJheSgkZnJvbSA9PiAkcm93WyRjb2xdKSkpKTsNCgkJCQkJCQl9DQoJCQkJ CQl9DQoJCQkJCQkkaGxpbmsgLj0gJHJvd1skY29sXS4iICI7DQoJCQkJCX0NCgkJCQkJJG91 dCAuPSAoJGhsaW5rKSA/ICc8bGk+JyAuICgoJHZhcnMpID8gJzxhIGhyZWY9ImluZGV4LnBo cCcuJHZhcnMuJyI+Jy4kaGxpbmsuJzwvYT4gJyA6ICRobGluaykgLiAnPC9saT4nOiAnJzsN CgkJCQl9DQoJCQkJJG91dCAuPSAnPC91bD4nOw0KCQkJCSRjb2xCb2R5W10gPSB0ZCgkb3V0 KTsNCgkJCX0gZWxzZSB7DQoJCQkJJGNvbEJvZHlbXSA9IHRkKGdUeHQoJ25vX3Jlc3VsdHNf Zm91bmQnKSk7DQoJCQl9DQoJCX0NCgkJZWNobyB0cihqb2luKCIgIiwgJGNvbEhlYWQpKTsN CgkJZWNobyB0cihqb2luKCIgIiwgJGNvbEJvZHkpKTsNCgl9IGVsc2Ugew0KCQkvLyBObyBz ZWFyY2ggY3JpdGVyaWEsIHNvIHNob3cgb3JwaGFucw0KCQllY2hvIHRyKHRkY3ModGFnKHNt ZF93dV9nVHh0KCdvcnBoYW5fcmVzdWx0cycpLCAnaDInKSwgNSkpOw0KDQoJCS8vIFJlcHJv Z3JhbSB0aGUgcGxhY2VzL3BsYWNlVGFibGUNCgkJJGFydGtleSA9IGFycmF5X3NlYXJjaCgn YXJ0aWNsZXMnLCAkcGxhY2VzKTsNCgkJaWYgKCRhcnRrZXkgIT09IGZhbHNlKSB7DQoJCQl1 bnNldCgkcGxhY2VzWyRhcnRrZXldKTsNCgkJfQ0KDQoJCS8vIHBhZ2VzL2Zvcm1zL3NlY3Rp b25zIHRvIGlnbm9yZSBiZWNhdXNlIHRoZXkgYXJlIHN0YXRpYyBhbmQgY2Fubm90IGJlIGRl bGV0ZWQNCgkJJGVzc2VudGlhbHMgPSBhcnJheSgNCgkJCSdzZWN0aW9ucycgPT4gYXJyYXko J2RlZmF1bHQnKSwNCgkJCSdwYWdlcycgPT4gYXJyYXkoJ2Vycm9yX2RlZmF1bHQnKSwNCgkJ CSdmb3JtcycgPT4gYXJyYXkoJ2NvbW1lbnRzJywnY29tbWVudHNfZGlzcGxheScsJ2NvbW1l bnRfZm9ybScsJ2RlZmF1bHQnLCdMaW5rcycsJ2ZpbGVzJyksIC8vIGNvcGllZCBmcm9tIHR4 cF9mb3Jtcw0KCQkpOw0KDQoJCSRwbGFjZXNbXSA9ICdwbHVnaW5zJzsNCgkJJHBsYWNlc1td ID0gJ3N0eWxlc2hlZXRzJzsNCg0KCQkkcGxhY2VUYWJsZVsncGx1Z2lucyddID0gYXJyYXko J3R4cF9wbHVnaW4nLCAnbmFtZScsICduYW1lJywgZ1R4dCgncGx1Z2lucycpLCAncGx1Z2lu JywgJycsICcjJywgJ3tuYW1lfScpOw0KCQkkcGxhY2VUYWJsZVsnc3R5bGVzaGVldHMnXSA9 IGFycmF5KCd0eHBfY3NzJywgJ25hbWUnLCAnbmFtZScsIHNtZF93dV9nVHh0KCdzdHlsZXNo ZWV0cycpLCAnY3NzJywgJycsICduYW1lJywgJ3tuYW1lfScpOw0KDQoJCSRwbGFjZVRhYmxl Wydmb3JtcyddWzBdID0gIlNFTEVDVCB0Zi5uYW1lIEZST00gIiAuc2FmZV9wZngoJ3R4cF9m b3JtJykuICIgQVMgdGYgV0hFUkUgdGYubmFtZSBOT1QgSU4gKCIgLmRvUXVvdGUoaW1wbG9k ZSgiJywnIiwkZXNzZW50aWFsc1snZm9ybXMnXSkpLiAiKSBPUkRFUiBCWSB0Zi5uYW1lIjsg Ly8gV291bGQgYmUgbmljZSB0byBleGNsdWRlIGZvcm1zIHRoYXQgcmVmZXJlbmNlIGZvcm1z IGhlcmUgaW5zdGVhZCBvZiBpdGVyYXRpbmcgdGhyb3VnaCB0aGVtIGxhdGVyDQoJCSRwbGFj ZVRhYmxlWydwYWdlcyddWzBdID0gIlNFTEVDVCB0cC5uYW1lIEZST00gIiAuc2FmZV9wZngo J3R4cF9zZWN0aW9uJykuICIgQVMgdHMgUklHSFQgSk9JTiAiIC5zYWZlX3BmeCgndHhwX3Bh Z2UnKS4gIiBBUyB0cCBPTiB0cy5wYWdlID0gdHAubmFtZSBXSEVSRSB0cy5wYWdlIElTIE5V TEwgQU5EIHRwLm5hbWUgTk9UIElOICgiIC5kb1F1b3RlKGltcGxvZGUoIicsJyIsJGVzc2Vu dGlhbHNbJ3BhZ2VzJ10pKS4gIikgT1JERVIgQlkgdHAubmFtZSI7DQoJCSRwbGFjZVRhYmxl WydwbHVnaW5zJ11bMF0gPSAiU0VMRUNUIHRnLm5hbWUsIHRnLmNvZGUgRlJPTSAiIC5zYWZl X3BmeCgndHhwX3BsdWdpbicpLiAiIEFTIHRnIFdIRVJFIHR5cGUgPCAiIC4oJHBsdWd0eXBl KzEpLiAiIEFORCB0Zy5uYW1lICE9ICdzbWRfd2hlcmVfdXNlZCcgT1JERVIgQlkgdGcubmFt ZSI7DQoJCSRwbGFjZVRhYmxlWydzZWN0aW9ucyddWzBdID0gIlNFTEVDVCB0cy5uYW1lIEZS T00gIiAuc2FmZV9wZngoJ3R4cF9zZWN0aW9uJykuICIgQVMgdHMgTEVGVCBKT0lOICIgLnNh ZmVfcGZ4KCd0ZXh0cGF0dGVybicpLiAiIEFTIHR4cCBPTiB0cy5uYW1lID0gdHhwLnNlY3Rp b24gV0hFUkUgSUQgSVMgTlVMTCBBTkQgdHMubmFtZSBOT1QgSU4gKCIgLmRvUXVvdGUoaW1w bG9kZSgiJywnIiwkZXNzZW50aWFsc1snc2VjdGlvbnMnXSkpLiAiKSBPUkRFUiBCWSB0cy5u YW1lIjsNCgkJJHBsYWNlVGFibGVbJ3N0eWxlc2hlZXRzJ11bMF0gPSAiU0VMRUNUIHRjLm5h bWUgRlJPTSAiIC5zYWZlX3BmeCgndHhwX3NlY3Rpb24nKS4gIiBBUyB0cyBSSUdIVCBKT0lO ICIgLnNhZmVfcGZ4KCd0eHBfY3NzJykuICIgQVMgdGMgT04gdHMuY3NzID0gdGMubmFtZSBX SEVSRSB0cy5wYWdlIElTIE5VTEwgT1JERVIgQlkgdGMubmFtZSI7DQoNCgkJLy8gRm9yICJh d2t3YXJkIiBxdWVyaWVzIHRoYXQgY2FuJ3QgYmUgZG9uZSBpbiBvbmUgc2hvdCwgdGhlcmUg YXJlIHRocmVlIHRoaW5ncyByZXF1aXJlZCBwZXIgJHBsYWNlOg0KCQkvLyAgMTogdHhwIHRh YmxlIG5hbWUNCgkJLy8gIDI6IGxpc3Qgb2YgY29sdW1ucyB0byBjb21wYXJlDQoJCS8vICAz OiBtZXRob2Qgb2YgY29tcGFyaXNvbiBwZXIgY29sdW1uICgwID0gImRpcmVjdCBtYXRjaCIs IDEgPSAibGlrZSIpDQoJCSRjVGFibGUgPSBhcnJheSgNCgkJCSdwbHVnaW5zJyA9PiBhcnJh eSgNCgkJCQkndHhwX2Zvcm0nID0+IGFycmF5KCdmb3JtJyA9PiAxKSwNCgkJCQkndHhwX3Bh Z2UnID0+IGFycmF5KCd1c2VyX2h0bWwnID0+IDEpLA0KCQkJCSd0ZXh0cGF0dGVybicgPT4g YXJyYXkoJ0JvZHknID0+IDEsICdFeGNlcnB0JyA9PiAxKSwNCgkJCSksDQoJCQknZm9ybXMn ID0+IGFycmF5KA0KCQkJCSd0eHBfZm9ybScgPT4gYXJyYXkoJ2Zvcm0nID0+IDEpLA0KCQkJ CSd0eHBfcGFnZScgPT4gYXJyYXkoJ3VzZXJfaHRtbCcgPT4gMSksDQoJCQkJJ3RleHRwYXR0 ZXJuJyA9PiBhcnJheSgnQm9keScgPT4gMSwgJ0V4Y2VycHQnID0+IDEsICdvdmVycmlkZV9m b3JtJyA9PiAwKSwNCgkJCSksDQoJCSk7DQoNCgkJLy8gV29yayBvbiBhIGNvbHVtbiBhdCBh IHRpbWUNCgkJZm9yZWFjaCAoJHBsYWNlcyBhcyAkcGxhY2UpIHsNCgkJCSRjcm93ID0gJHBs YWNlVGFibGVbJHBsYWNlXTsNCgkJCSRjb2xSZWZzID0gZG9fbGlzdCgkY3Jvd1syXSk7DQoJ CQkkY29sSGVhZFtdID0gdGQoc3Ryb25nKCRjcm93WzNdIC4gKCgkcGxhY2UgPT0gJ3BsdWdp bnMnKSA/ICgoJHBsdWd0eXBlPT0wKSA/IHNtZF93dV9nVHh0KCdjbGllbnRfcGx1Z2lucycp IDogc21kX3d1X2dUeHQoJ2FkbWluX3BsdWdpbnMnKSApIDogJycpICkpOw0KCQkJJHJzID0g c3RhcnRSb3dzKCRjcm93WzBdKTsNCgkJCWlmICgkcnMpIHsNCgkJCQkkb3V0ID0gJzx1bD4n Ow0KCQkJCXdoaWxlICgkcm93ID0gbmV4dFJvdygkcnMpKSB7DQoJCQkJCS8vIENvdW50IHRo ZSBubyBvZiByZWNvcmRzIG1hdGNoaW5nIHRoaXMgbmFtZSBpbiBlYWNoIHRhYmxlLg0KCQkJ CQkvLyBBbnkgdGltZSB0aGlzIGdvZXMgYWJvdmUgemVybywgdGhlIGl0ZW0gaXMgdXNlZCBh bmQgaXQgY2FuIGJlIGlnbm9yZWQNCgkJCQkJJGZuYWxpYXNlcyA9IGFycmF5KCk7DQoJCQkJ CWlmIChhcnJheV9rZXlfZXhpc3RzKCRwbGFjZSwgJGNUYWJsZSkpIHsNCgkJCQkJCS8vIFBs dWdpbiBmdW5jdGlvbnMgYXJlIG5vdCBuZWNlc3NhcmlseSB0aGUgbmFtZSBvZiB0aGUgcGx1 Z2luIGl0c2VsZi4NCgkJCQkJCS8vIEZpbmQgYWxsIGZ1bmN0aW9uIGRlZmluaXRpb25zIGFu ZCBidWlsZCBhIGxpc3Qgb2YgYWxpYXNlcw0KCQkJCQkJaWYgKCRwbGFjZSA9PSAncGx1Z2lu cycpIHsNCgkJCQkJCQkkcmUgPSAnL2Z1bmN0aW9uXHMrKFtBLVphLXowLTlfXSspXHMqXCgv JzsNCgkJCQkJCQkkbnVtID0gcHJlZ19tYXRjaF9hbGwoJHJlLCAkcm93Wydjb2RlJ10sICRm bmFsaWFzZXMpOw0KCQkJCQkJfQ0KDQoJCQkJCQkkcmVjcyA9IDA7DQoJCQkJCQlmb3JlYWNo ICgkY1RhYmxlWyRwbGFjZV0gYXMgJHRibCA9PiAkY29sSW5mbykgew0KCQkJCQkJCWlmICgk cmVjcyA9PSAwKSB7DQoJCQkJCQkJCSR3aGVyZSA9IGFycmF5KCk7DQoJCQkJCQkJCWZvcmVh Y2ggKCRjb2xJbmZvIGFzICRjb2xOYW1lID0+ICRxcnlUeXBlKSB7DQoJCQkJCQkJCQkkd2hl cmVbXSA9ICRjb2xOYW1lIC4gKCgkcXJ5VHlwZT09MCkgPyAiID0gJyIgLiRyb3dbJGNvbFJl ZnNbMF1dLiAiJyIgOiAiIExJS0UgJyUiIC4kcm93WyRjb2xSZWZzWzBdXS4gIiUnIik7DQoJ CQkJCQkJCQlpZiAoY291bnQoJGZuYWxpYXNlcykgPiAxKSB7DQoJCQkJCQkJCQkJZm9yZWFj aCAoJGZuYWxpYXNlc1sxXSBhcyAkZm5hbGlhcykgew0KCQkJCQkJCQkJCQkkd2hlcmVbXSA9 ICRjb2xOYW1lIC4gKCgkcXJ5VHlwZT09MCkgPyAiID0gJyIgLiRmbmFsaWFzLiAiJyIgOiAi IExJS0UgJyUiIC4kZm5hbGlhcy4gIiUnIik7DQoJCQkJCQkJCQkJfQ0KCQkJCQkJCQkJfQ0K CQkJCQkJCQl9DQoJCQkJCQkJCSR3aGVyZSA9IGpvaW4oIiBPUiAiLCAkd2hlcmUpOw0KCQkJ CQkJCQkkcmVjcyArPSBzYWZlX2NvdW50KCR0YmwsICR3aGVyZSk7DQoJCQkJCQkJfQ0KCQkJ CQkJfQ0KDQoJCQkJCQkvLyBJZiB0aGUgaXRlbSBoYXMgbm90IGJlZW4gZm91bmQsIGZsYWcg aXQNCgkJCQkJCWlmICgkcmVjcyA9PSAwKSB7DQoJCQkJCQkJJGNvbE5hbWVzID0gJGNvbFJl ZnM7DQoJCQkJCQl9IGVsc2Ugew0KCQkJCQkJCSRjb2xOYW1lcyA9IGFycmF5KCk7DQoJCQkJ CQl9DQoJCQkJCX0gZWxzZSB7DQoJCQkJCQkkY29sTmFtZXMgPSAkY29sUmVmczsNCgkJCQkJ fQ0KDQoJCQkJCS8vIE1ha2UgdXAgdGhlIHN0cmluZyB0byBkaXNwbGF5LCBhbmQgaHlwZXJs aW5rIGl0IGlmIGRpcmVjdGVkDQoJCQkJCSRobGluayA9ICcnOw0KCQkJCQkkdmFycyA9ICcn Ow0KCQkJCQlmb3JlYWNoICgkY29sTmFtZXMgYXMgJGNvbCkgew0KCQkJCQkJJGZyb20gPSAn eycuJGNvbC4nfSc7DQoJCQkJCQlpZiAoc3RycG9zKCRjcm93WzddLCAkZnJvbSkgIT09IGZh bHNlKSB7DQoJCQkJCQkJaWYgKCRjcm93WzZdID09ICIjIikgew0KCQkJCQkJCQkkdmFycyA9 IGpvaW5fcXMoYXJyYXkoImV2ZW50IiA9PiAkY3Jvd1s0XSwgInN0ZXAiID0+ICRjcm93WzVd KSkuJGNyb3dbNl0uc3RydHIoJGNyb3dbN10sIGFycmF5KCRmcm9tID0+ICRyb3dbJGNvbF0p KTsNCgkJCQkJCQl9IGVsc2Ugew0KCQkJCQkJCQkkdmFycyA9IGpvaW5fcXMoYXJyYXkoImV2 ZW50IiA9PiAkY3Jvd1s0XSwgInN0ZXAiID0+ICRjcm93WzVdLCAkY3Jvd1s2XSA9PiBzdHJ0 cigkY3Jvd1s3XSwgYXJyYXkoJGZyb20gPT4gJHJvd1skY29sXSkpKSk7DQoJCQkJCQkJfQ0K CQkJCQkJfQ0KCQkJCQkJJGhsaW5rIC49ICRyb3dbJGNvbF0uIiAiOw0KCQkJCQl9DQoJCQkJ CSRvdXQgLj0gKCRobGluaykgPyAnPGxpPicgLiAoKCR2YXJzKSA/ICc8YSBocmVmPSJpbmRl eC5waHAnLiR2YXJzLiciPicuJGhsaW5rLic8L2E+ICcgOiAkaGxpbmspIC4gJzwvbGk+Jzog Jyc7DQoJCQkJfQ0KCQkJCSRvdXQgLj0gJzwvdWw+JzsNCgkJCQkkY29sQm9keVtdID0gdGQo JG91dCk7DQoJCQl9IGVsc2Ugew0KCQkJCSRjb2xCb2R5W10gPSB0ZChzbWRfd3VfZ1R4dCgn bm9fb3JwaGFuc19mb3VuZCcpKTsNCgkJCX0NCgkJfQ0KCQllY2hvIHRyKGpvaW4oIiAiLCAk Y29sSGVhZCkpOw0KCQllY2hvIHRyKGpvaW4oIiAiLCAkY29sQm9keSkpOw0KCX0NCgllY2hv IGVuZFRhYmxlKCk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIFBsdWdpbi1zcGVjaWZpYyByZXBs YWNlbWVudCBzdHJpbmdzIC0gbG9jYWxpc2UgYXMgcmVxdWlyZWQNCi8vIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1 bmN0aW9uIHNtZF93dV9nVHh0KCR3aGF0LCAkYXR0cyA9IGFycmF5KCkpIHsNCgkkbGFuZyA9 IGFycmF5KA0KCQknYWRtaW5fcGx1Z2lucycgPT4gJyBbIEErQyBdJywNCgkJJ2NsaWVudF9w bHVnaW5zJyA9PiAnIFsgQyBdJywNCgkJJ2V4Y2x1c2lvbicgPT4gJ0V4Y2x1ZGUnLA0KCQkn aW5jbHVzaW9uJyA9PiAnSW5jbHVkZScsDQoJCSdmaWx0ZXInID0+ICdGaWx0ZXI6JywNCgkJ J21hdGNoX2Nhc2UnID0+ICdNYXRjaCBjYXNlJywNCgkJJ25vX29ycGhhbnNfZm91bmQnID0+ ICdObyBvcnBoYW5zIGZvdW5kLicsDQoJCSdvcnBoYW5fcmVzdWx0cycgPT4gJ1Bvc3NpYmxl IG9ycGhhbnMnLA0KCQkncHJlZnNfbGluaycgPT4gJ0FydGljbGUgc2VhcmNoIGZpZWxkcycs DQoJCSdzZWFyY2hfbGJsJyA9PiAnRmluZDonLA0KCQknc2VhcmNoX3doZXJlX2xibCcgPT4g J0xvb2sgaW46JywNCgkJJ3N0eWxlc2hlZXRzJyA9PiAnU3R5bGVzaGVldHMnLA0KCQknc21k X3d1JyA9PiAnV2hlcmUgdXNlZCcsDQoJCSd3aG9sZV93b3JkJyA9PiAnV2hvbGUgd29yZHMn LA0KCSk7DQoJcmV0dXJuIHN0cnRyKCRsYW5nWyR3aGF0XSwgJGF0dHMpOw0KfSI7czo0OiJ0 eXBlIjtzOjE6IjMiO3M6NToib3JkZXIiO3M6MToiNSI7czo1OiJmbGFncyI7czoxOiIwIjtz OjQ6ImhlbHAiO3M6Njg2MjoiCTxwPjxkaXYgaWQ9InNtZF9oZWxwIj48L3A+CgoJPGgxPnNt ZF93aGVyZV91c2VkPC9oMT4KCgk8cD5SZWFsbHkgc2ltcGxlIGFkbWluLXNpZGUgcGx1Z2lu IHRvIGhlbHAgZmluZCB3aGF0IHlvdSBuZWVkIHRvIGVkaXQvZGVsZXRlLiBJZiB5b3UgaGF2 ZSBhIHRvbm5lIG9mIGZvcm1zIG9yIHBhZ2VzIGFuZCB3YW50IHRvIHRpZHkgc3R1ZmYgdXAg aXQgY2FuIGJlIGEgYml0IG9mIGEgcGFpbiB0byBmaW5kIHdoYXQmIzgyMTc7cyBhY3R1YWxs eSBpbiB1c2UuPC9wPgoKCTxwPlNvIHVzZSB0aGlzIHBsdWdpbiB0byBzZWFyY2ggeW91ciBz ZWN0aW9ucywgcGFnZXMsIGZvcm1zIG9yIGFydGljbGVzIGZvciByZWZlcmVuY2VzIHRvIHBs dWdpbnMsIG9yIG90aGVyIHBhZ2VzL2Zvcm1zIG9yIGV2ZW4ganVzdCBwbGFpbiB0ZXh0IGlu IGFydGljbGVzLjwvcD4KCgk8aDIgY2xhc3M9ImF1dGhvciI+QXV0aG9yPC9oMj4KCgk8cD48 YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vY29tbWVudEZvcm0iPlN0ZWYgRGF3c29u PC9hPjwvcD4KCgk8aDIgY2xhc3M9Imluc3RhbGwiPkluc3RhbGxhdGlvbiAvIFVuaW5zdGFs bGF0aW9uPC9oMj4KCgk8cD5Eb3dubG9hZCB0aGUgcGx1Z2luIGZyb20gZWl0aGVyIDxhIGhy ZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5vcmcvcGx1Z2lucy85ODQvc21kX3doZXJlX3VzZWQi PnRleHRwYXR0ZXJuLm9yZzwvYT4sIG9yIHRoZSA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nv bi5jb20vc3ciPnNvZnR3YXJlIHBhZ2U8L2E+LCBwYXN0ZSB0aGUgY29kZSBpbnRvIHRoZSA8 c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBBZG1pbiAtJmd0OyBQbHVnaW5zIHBhbmUs IGluc3RhbGwgYW5kIGVuYWJsZSB0aGUgcGx1Z2luLiBWaXNpdCB0aGUgPGEgaHJlZj0iaHR0 cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP2lkPTI3NDkzIj5mb3J1 bSB0aHJlYWQ8L2E+IGZvciBtb3JlIGluZm8gYW5kIHRvIHJlcG9ydCB0aGUgc3VjY2VzcyAo b3Igb3RoZXJ3aXNlKSBvZiB0aGlzIHBsdWdpbi48L3A+CgoJPHA+VW5pbnN0YWxsIGJ5IHNp bXBseSBkZWxldGluZyB0aGUgcGx1Z2luIGZyb20gdGhlIEFkbWluLSZndDtQbHVnaW5zIHBh bmUuPC9wPgoKCTxoMiBjbGFzcz0idXNhZ2UiPlVzYWdlPC9oMj4KCgk8cD5WaXNpdCB0aGUg RXh0ZW5zaW9ucyB0YWIgYW5kIENsaWNrICYjODIxNjtXaGVyZSB1c2VkJiM4MjE3OyB0byBh Y2Nlc3MgdGhlIHNlYXJjaCBmb3JtLiBUeXBlIHNvbWUgc3R1ZmYgdG8gZmluZCwgc2VsZWN0 IHdoZXJlIHlvdSB3YW50IHRvIGxvb2sgYW5kIGhpdCAmIzgyMTY7U2VhcmNoJiM4MjE3OyBv ciBwcmVzcyBFbnRlci4gWW91ciByZXF1ZXN0ZWQgbG9jYXRpb25zIHdpbGwgYmUgc2VhcmNo ZWQgZm9yIHRoYXQgdGVybSBhbmQgdGhlIHJlc3VsdHMgdGFidWxhdGVkLCB3aXRoIGh5cGVy bGlua3MgdG8gdGhlIG9mZmVuZGluZyBpdGVtcyBzbyB5b3UgY2FuIHF1aWNrbHkgZWRpdCB0 aGVtLjwvcD4KCgk8cD5Zb3UgY2FuIGRlY2lkZSB3aGV0aGVyIHRvIHNlYXJjaCBmb3IgdGhl IHRlcm0gKCYjODIyMDtJbmNsdWRlJiM4MjIxOykgb3IgdG8gc2VhcmNoIGZvciBzdHVmZiA8 c3BhbiBjbGFzcz0iY2FwcyI+Tk9UPC9zcGFuPiBjb250YWluaW5nIHRoYXQgdGVybSAoJiM4 MjIwO0V4Y2x1ZGUmIzgyMjE7KS4gWW91IG1heSBhbHNvIGNob29zZSB3aGV0aGVyIHlvdXIg c2VhcmNoIHRlcm0gbWF0Y2hlcy9kb2VzIG5vdCBtYXRjaCBhIHdob2xlIHdvcmQgb3IgaXMg Y2FzZSBzZW5zaXRpdmUuPC9wPgoKCTxwPlRoaXMgaXMgd2hhdCB0aGUgcGx1Z2luIGxvb2tz IGF0IHdoZW4geW91IHNlbGVjdCBhIHBhcnRpY3VsYXIgY2hlY2tib3ggZnJvbSB0aGUgJiM4 MjIwO0xvb2sgaW4mIzgyMjE7IHJvdzo8L3A+CgoJPHVsPgoJCTxsaT4mIzgyMTY7U2VjdGlv bnMmIzgyMTc7IHNlYXJjaGVzIGV2ZXJ5IFNlY3Rpb24gZm9yIHBhZ2VzIG9yIHN0eWxlc2hl ZXRzIHdpdGggdGhlIG1hdGNoaW5nIG5hbWU8L2xpPgoJCTxsaT4mIzgyMTY7UGFnZXMmIzgy MTc7IHNlYXJjaGVzIGV2ZXJ5IFBhZ2UgZm9yIGZvcm1zIC8gcGx1Z2lucyAvIHRleHQgd2l0 aCB0aGUgbWF0Y2hpbmcgbmFtZTwvbGk+CgkJPGxpPiYjODIxNjtGb3JtcyYjODIxNzsgc2Vh cmNoZXMgZXZlcnkgRm9ybSBmb3IgcGx1Z2lucyAvIG90aGVyIGZvcm1zIC8gdGV4dCB3aXRo IHRoZSBtYXRjaGluZyBuYW1lPC9saT4KCQk8bGk+JiM4MjE2O0FydGljbGVzJiM4MjE3OyBz ZWFyY2hlcyAoYnkgZGVmYXVsdCkgZXZlcnkgQXJ0aWNsZSBzZWN0aW9uLCBib2R5LCBleGNl cnB0LCBvdmVycmlkZV9mb3JtLCB0aXRsZSBhbmQga2V5d29yZCBmb3IgbWVudGlvbiBvZiB0 aGUgdGV4dCB5b3Ugc3BlY2lmeS4gQ2xpY2sgdGhlIDxlbT5BcnRpY2xlIHNlYXJjaCBmaWVs ZHM8L2VtPiBidXR0b24gdG8gc2VlIGEgbGlzdCBvZiBkYXRhYmFzZSBjb2x1bW5zIHRoYXQg eW91IG1heSBzZWFyY2guIENoZWNrIHRoZSBvbmVzIHlvdSB3aXNoIHRvIGNvbnNpZGVyIGFu ZCBjbGljayA8ZW0+U2F2ZTwvZW0+PC9saT4KCTwvdWw+CgoJPHA+SWYsIGhvd2V2ZXIsIHlv dSBsZWF2ZSB0aGUgJiM4MjE2O0ZpbmQmIzgyMTc7IGJveCBlbXB0eSBhbmQgY2xpY2sgJiM4 MjE2O1NlYXJjaCYjODIxNzsgdGhlIHBsdWdpbiB3aWxsIHNlYXJjaCBmb3Igb3JwaGFucy4g T3JwaGFucyBhcmUgZGVmaW5lZCBhcyBmb2xsb3dzOjwvcD4KCgk8dWw+CgkJPGxpPkFueSBQ YWdlIHRoYXQgaXMgbm90IGFzc2lnbmVkIHRvIGEgU2VjdGlvbjwvbGk+CgkJPGxpPkFueSBT dHlsZXNoZWV0IHRoYXQgaXMgbm90IGFzc2lnbmVkIHRvIGEgU2VjdGlvbjwvbGk+CgkJPGxp PkFueSBTZWN0aW9uIHRoYXQgaGFzIG5vIEFydGljbGVzIGluIGl0IChleGNsdWRpbmcg4oCY ZGVmYXVsdOKAmSB3aGljaCBjYW5ub3QgaGF2ZSBhbiBhcnRpY2xlIGFueXdheSk8L2xpPgoJ CTxsaT5BbnkgUGx1Z2luIHRoYXQgaXMgbm90IHJlZmVyZW5jZWQgZnJvbSBhbiBBcnRpY2xl IChib2R5L2V4Y2VycHQpIG9yIGFub3RoZXIgRm9ybSBvciBQYWdlPC9saT4KCQk8bGk+QW55 IEZvcm0gdGhhdCBoYXMgbm8gcmVmZXJlbmNlIHRvIGl0IGluIGFueSBBcnRpY2xlIChib2R5 L2V4Y2VycHQvb3ZlcnJpZGVfZm9ybSkgb3IgYW5vdGhlciBGb3JtIG9yIFBhZ2U8L2xpPgoJ PC91bD4KCgk8cD5Ob3Rlczo8L3A+CgoJPHVsPgoJCTxsaT5PcnBoYW5lZCBhcnRpY2xlcyBk b24mIzgyMTc7dCBtYWtlIHNlbnNlIHNvIHRoZXkgYXJlIG9taXR0ZWQuIFRoZSBjaGVja2Jv eCBpcyBpZ25vcmVkPC9saT4KCQk8bGk+RXNzZW50aWFsIHNlY3Rpb25zIC8gcGFnZXMgLyBm b3JtcyB0aGF0IGNhbm5vdCBiZSBkZWxldGVkIGFyZSBub3QgbGlzdGVkPC9saT4KCQk8bGk+ U3R5bGVzaGVldHMgYW5kIFBsdWdpbnMgYXJlIGFsd2F5cyBkaXNwbGF5ZWQgYmVjYXVzZSB0 aGVyZSBhcmUgbm8gY2hlY2sgYm94ZXMgZm9yIHRoZW0uIFRoZSByZWFzb24gaXMgdGhhdCB0 aGUgcGx1Z2luIGRvZXMgbm90IGFsbG93IHNlYXJjaGluZyB3aXRoaW4gYSBwbHVnaW4gb3Ig YSBzdHlsZXNoZWV0IGZvciBhIHJlZmVyZW5jZSB0byBhIHdvcmQsIGJ1dCBpdCBkb2VzIGNo ZWNrIG90aGVyIHBsYWNlcyBmb3IgcmVmZXJlbmNlcyA8ZW0+dG88L2VtPiBwbHVnaW5zIGFu ZCBzdHlsZXNoZWV0czwvbGk+CgkJPGxpPlBsdWdpbiBsaXN0IGNhbiBiZSB0b2dnbGVkIGJl dHdlZW4gdGhlIGRlZmF1bHQgY2xpZW50LW9ubHkgcGx1Z2lucyBvciBib3RoIGNsaWVudCBh bmQgYWRtaW4gcGx1Z2lucy4gQ2xpY2sgJiM4MjE2O1NlYXJjaCYjODIxNzsgYWdhaW4gdG8g dG9nZ2xlPC9saT4KCQk8bGk+SnVzdCBiZWNhdXNlIGFuIGl0ZW0gaXMgbGlzdGVkIGFzIG9y cGhhbmVkIGRvZXMgPGVtPm5vdCBuZWNlc3NhcmlseSBtZWFuIGl0IGlzIG5vdCB1c2VkPC9l bT4hIEZvciBleGFtcGxlLCBydm1fbWFpbnRlbmFuY2UgY2hlY2tzIGZvciB0aGUgZXhpc3Rl bmNlIG9mIGFuIDxjb2RlPmVycm9yXzUwMzwvY29kZT4gUGFnZS4gU2luY2UgaXQgaXMgbmV2 ZXIgYXNzaWduZWQgdG8gYSBTZWN0aW9uIGl0IHdpbGwgYmUgbGlzdGVkIGFzIG9ycGhhbmVk LiBJZiB5b3UgaGF2ZSBhIGRlZGljYXRlZCBzdHlsZXNoZWV0IGZvciBtYWludGVuYW5jZSBt b2RlIHRoYXQsIHRvbywgd2lsbCBiZSBzaG93biBhcyBvcnBoYW5lZC4gSW4gc2hvcnQsIGJl IGNhcmVmdWwgYW5kIG1ha2UgYSBiYWNrdXAgOi0pPC9saT4KCQk8bGk+UGx1Z2lucyBzdWNo IGFzIHBhcF9jb250YWN0X2NsZWFuZXIgYW5kIHJ2bV9tYWludGVuYW5jZSBhcmUgbGlzdGVk IGFzIG9ycGhhbnMgZXZlbiB0aG91Z2ggdGhleSBhcmUgdXNlZCBieSBvdGhlciBwbHVnaW5z IC8gdXN1YWxseSBkaXNhYmxlZC4gSWYgeW91IGFyZSB1bnN1cmUgYWJvdXQgYSBwbHVnaW4s IGNoZWNrIGl0IGJ5IHR5cGluZyBhIHBhcnRpYWwgdGFnIG5hbWUgaW50byB0aGUgc2VhcmNo IGJveDwvbGk+Cgk8L3VsPgoKCTxoMiBjbGFzcz0iY2hhbmdlbG9nIj5DaGFuZ2Vsb2c8L2gy PgoKCTx1bD4KCQk8bGk+MTYgSnVuIDA4IHwgdjAuMSB8IEluaXRpYWwgcmVsZWFzZTwvbGk+ CgkJPGxpPjE2IEp1biAwOCB8IHYwLjExIHwgQWRkZWQgc2VjdGlvbiBzZWFyY2ggYW5kIG92 ZXJyaWRlX2Zvcm08L2xpPgoJCTxsaT4xNiBKdW4gMDggfCB2MC4xMiB8IEFkZGVkIGluY2x1 ZGUvZXhjbHVkZSAodGhhbmtzIG1yZGFsZSk8L2xpPgoJCTxsaT4xNiBKdW4gMDggfCB2MC4x MyB8IEFkZGVkIGFiaWxpdHkgdG8gbWF0Y2ggd2hvbGUgd29yZHMgKHRoYW5rcyB6YW56YSk8 L2xpPgoJCTxsaT4xNyBKdW4gMDggfCB2MC4xNCB8IEFkZGVkIG9ycGhhbiBzZWFyY2ggKHRo YW5rcyB1bGkvbmV0LWNhcnZlcik8L2xpPgoJCTxsaT4xOCBKdW4gMDggfCB2MC4xNSB8IEZp eGVkIHBsdWdpbiBsaXN0IHNvIGl0IGRvZXMgYSBkZWVwIHNlYXJjaCBpbnNpZGUgdGhlIHNv dXJjZSBjb2RlIGZvciB0YWcgbmFtZXM8L2xpPgoJCTxsaT4xOCBKdW4gMDggfCB2MC4xNiB8 IEFkZGVkIGFkbWluL2NsaWVudCBzaWRlIHBsdWdpbiB0b2dnbGUgOyBzZWFyY2hlcyBub3cg ZXh0ZW5kZWQgdG8gdGl0bGUgYW5kIGtleXdvcmRzIChib3RoIHRoYW5rcyB1bGkpPC9saT4K CQk8bGk+MTggSnVuIDA4IHwgdjAuMTcgfCBBcnRpY2xlcyBhcmUgbGlua2VkIHdpdGggSUQg YW5kIHRpdGxlICh0aGFua3MgdWxpKTwvbGk+CgkJPGxpPjE4IEp1biAwOCB8IHYwLjE4IHwg QWRkZWQgY2FzZSBzZW5zaXRpdmUgc2VhcmNoZXMgKHRoYW5rcyBnZW9mZjc3Nyk8L2xpPgoJ CTxsaT4xMSBNYXIgMDkgfCB2MC4xOSB8IEFkZGVkIGF1dG8tZm9jdXMgdG8gc2VhcmNoIGJv eDwvbGk+CgkJPGxpPjEyIEF1ZyAwOSB8IHYwLjIgfCBSZXF1aXJlcyA8c3BhbiBjbGFzcz0i Y2FwcyI+VFhQPC9zcGFuPiA0LjIuMCA7IGFkZGVkIGF1dG8tcHJlZnMgZm9yICYjODIxNjts b29rIGluJiM4MjE3OyBhbmQgYXJ0aWNsZSBzZWFyY2ggZmllbGRzIHByZWYgKHRoYW5rcyB1 bGkpPC9saT4KCTwvdWw+CgoJPHA+PC9kaXY+PC9wPgo8IS0tICoqKiBCRUdJTiBQTFVHSU4g Q1NTICoqKiAtLT4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KI3NtZF9oZWxwIHsgbGluZS1o ZWlnaHQ6MS4zIDt9CiNzbWRfaGVscCBjb2RlIHsgZm9udC13ZWlnaHQ6Ym9sZDsgZm9udDog MTA1JS8xMzAlICJDb3VyaWVyIE5ldyIsIGNvdXJpZXIsIG1vbm9zcGFjZTsgYmFja2dyb3Vu ZC1jb2xvcjogI0ZGRkZDQzt9CiNzbWRfaGVscCBjb2RlLmJsb2NrIHsgZm9udC13ZWlnaHQ6 bm9ybWFsOyBib3JkZXI6MXB4IGRvdHRlZCAjOTk5OyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBl NjhjOyBkaXNwbGF5OmJsb2NrOyBtYXJnaW46MTBweCAxMHB4IDIwcHg7IHBhZGRpbmc6MTBw eDsgfQojc21kX2hlbHAgYTpsaW5rLCAjc21kX2hlbHAgYTp2aXNpdGVkIHsgY29sb3I6IGJs dWU7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJs dWU7IHBhZGRpbmctYm90dG9tOjFweDt9CiNzbWRfaGVscCBhOmhvdmVyLCAjc21kX2hlbHAg YTphY3RpdmUgeyBjb2xvcjogYmx1ZTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBib3JkZXIt Ym90dG9tOiAycHggc29saWQgYmx1ZTsgcGFkZGluZy1ib3R0b206MXB4O30KI3NtZF9oZWxw IGgxIHsgY29sb3I6ICMzNjk7IGZvbnQ6IDIwcHggR2VvcmdpYSwgc2Fucy1zZXJpZjsgbWFy Z2luOiAwOyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KI3NtZF9oZWxwIGgyIHsgYm9yZGVyLWJv dHRvbTogMXB4IHNvbGlkIGJsYWNrOyBwYWRkaW5nOjEwcHggMCAwOyBjb2xvcjogIzM2OTsg Zm9udDogMTdweCBHZW9yZ2lhLCBzYW5zLXNlcmlmOyB9CiNzbWRfaGVscCBoMyB7IGNvbG9y OiAjNjkzOyBmb250OiBib2xkIDEycHggQXJpYWwsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFj aW5nOiAxcHg7IG1hcmdpbjogMTBweCAwIDA7dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTt9 CiNzbWRfaGVscCBoNCB7IGZvbnQ6IGJvbGQgMTFweCBBcmlhbCwgc2Fucy1zZXJpZjsgbGV0 dGVyLXNwYWNpbmc6IDFweDsgbWFyZ2luOiAxMHB4IDAgMCA7dGV4dC10cmFuc2Zvcm06IHVw cGVyY2FzZTsgfQojc21kX2hlbHAgLmF0dC1uYW1lIHsgZm9udC13ZWlnaHQ6Ym9sZDsgfQoj c21kX2hlbHAgLm1hbmQgeyBiYWNrZ3JvdW5kOiNlZWU7IGJvcmRlcjoxcHggZG90dGVkICM5 OTk7IH0KI3NtZF9oZWxwIHRhYmxlIHt3aWR0aDoxMDAlOyB0ZXh0LWFsaWduOmNlbnRlcjsg cGFkZGluZy1ib3R0b206MWVtO30KI3NtZF9oZWxwIHRkLCAjc21kX2hlbHAgdGgge2JvcmRl cjoxcHggc29saWQgIzk5OTsgcGFkZGluZzouNWVtIDA7fQo8L3N0eWxlPgo8IS0tICoqKiBF TkQgUExVR0lOIENTUyAqKiogLS0+CiI7czozOiJtZDUiO3M6MzI6IjczY2UzOGMwMmY1OGM2 NTYxZGM4YmNjYTRhMDA4MTVjIjt9