# Name: etc_query v1.5.8 # Type: Public plugin # All things Textpattern! # Author: Oleg Loukianov # URL: http://www.iut-fbleau.fr/projet/etc/plugins/etc_query # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern CMS - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjk6ImV0Y19xdWVyeSI7czo2OiJhdXRob3IiO3M6MTQ6Ik9s ZWcgTG91a2lhbm92IjtzOjEwOiJhdXRob3JfdXJpIjtzOjUzOiJodHRwOi8vd3d3Lml1dC1m YmxlYXUuZnIvcHJvamV0L2V0Yy9wbHVnaW5zL2V0Y19xdWVyeSI7czo3OiJ2ZXJzaW9uIjtz OjU6IjEuNS44IjtzOjExOiJkZXNjcmlwdGlvbiI7czoyMzoiQWxsIHRoaW5ncyBUZXh0cGF0 dGVybiEiO3M6NDoiY29kZSI7czo0NDYyODoiLy8gVFhQIDQuNyB0YWcgcmVnaXN0cmF0aW9u DQppZiAoY2xhc3NfZXhpc3RzKCdcVGV4dHBhdHRlcm5cVGFnXFJlZ2lzdHJ5JykpIHsNCglU eHA6OmdldCgnXFRleHRwYXR0ZXJuXFRhZ1xSZWdpc3RyeScpLT5yZWdpc3RlcignZXRjX3F1 ZXJ5Jyk7DQoJaWYobWV0aG9kX2V4aXN0cygnXFRleHRwYXR0ZXJuXFRhZ1xSZWdpc3RyeScs ICdyZWdpc3RlckF0dHInKSkNCgkJVHhwOjpnZXQoJ1xUZXh0cGF0dGVyblxUYWdcUmVnaXN0 cnknKS0+cmVnaXN0ZXJBdHRyKCdldGNfcmVwbGFjZScsICdldGMtcXVlcnksIGV0Yy1yZXBs YWNlJyktPnJlZ2lzdGVyQXR0cihmYWxzZSwgJ2V0Yy1icmVhaycpOw0KfQ0KDQpmdW5jdGlv biBldGNfcmVwbGFjZSgkYXR0cywgJHRoaW5nID0gJycpDQp7DQoJJGF0dHMgPSBsQXR0cyhh cnJheSgNCgkJJ2V0Yy1xdWVyeScgPT4gJy4nLA0KCQknZXRjLXJlcGxhY2UnID0+ICcnLA0K CQknZXRjLWJyZWFrJyA9PiAnJywNCgkpLCAkYXR0cywgZmFsc2UpOw0KDQoJJG91dCA9IHRy aW0oJHRoaW5nKSAhPT0gJycgPyBldGNfcXVlcnkoYXJyYXkoJ2RhdGEnID0+ICR0aGluZywg J3F1ZXJ5JyA9PiAkYXR0c1snZXRjLXF1ZXJ5J10sICdyZXBsYWNlJyA9PiAkYXR0c1snZXRj LXJlcGxhY2UnXSwgJ2JyZWFrJyA9PiAkYXR0c1snZXRjLWJyZWFrJ10sICdtYXJrdXAnID0+ ICdodG1sJywgJ2dsb2JhbHMnID0+ICcnLCAnc3BlY2lhbHMnID0+ICcnLCAncGFyc2UnID0+ ICcnKSkgOiAkdGhpbmc7DQoJcmV0dXJuICRvdXQ7DQp9DQoNCmZ1bmN0aW9uIGV0Y19xdWVy eSgkYXR0cywgJHRoaW5nPScnKSB7DQoJaWYoJGRlYnVnID0gIWVtcHR5KCRhdHRzWydkZWJ1 ZyddKSA/IGRvX2xpc3QoJGF0dHNbJ2RlYnVnJ10pIDogZmFsc2UpIHsNCgkJJHN0YXJ0dGlt ZSA9IG1pY3JvdGltZShUUlVFKTsNCgl9DQoNCgl1bnNldCgkYXR0c1snZGVidWcnXSk7DQoJ JHBocCA9IHBocCgpOw0KDQoJZ2xvYmFsICRldGNfcXVlcnksICRldGNfcXVlcnlfY29udGV4 dCwgJGV0Y19xdWVyeV9nbG9iYWxzLCAkZXRjX3F1ZXJ5X3Nhbml0aXplLCAkZXRjX3F1ZXJ5 X3NwZWNpYWxzOw0KCWlzc2V0KCRldGNfcXVlcnkpIG9yICRldGNfcXVlcnkgPSBhcnJheSgp Ow0KCSRzYWZlX2NvbnRleHQgPSBpc3NldCgkZXRjX3F1ZXJ5X2NvbnRleHQpID8gJGV0Y19x dWVyeV9jb250ZXh0IDogbnVsbDsNCgkkc2FmZV9nbG9iYWxzID0gaXNzZXQoJGV0Y19xdWVy eV9nbG9iYWxzKSA/ICRldGNfcXVlcnlfZ2xvYmFscyA6IG51bGw7DQoJJHNhZmVfc2FuaXRp emUgPSBpc3NldCgkZXRjX3F1ZXJ5X3Nhbml0aXplKSA/ICRldGNfcXVlcnlfc2FuaXRpemUg OiBudWxsOw0KCSRzYWZlX3NwZWNpYWxzID0gaXNzZXQoJGV0Y19xdWVyeV9zcGVjaWFscykg PyAkZXRjX3F1ZXJ5X3NwZWNpYWxzIDogbnVsbDsNCglzdGF0aWMgJHNhZmVfZGVmYXVsdHMg PSBhcnJheSgNCgkJJ3VybCcgPT4gJycsDQoJCSdjb250ZXh0JyA9PiBudWxsLA0KCQknZ2xv YmFscycgPT4gJ3ZhcmlhYmxlLHByZXRleHQsdGhpc2FydGljbGUsdGhpc2ltYWdlLHRoaXNm aWxlLHRoaXNsaW5rJywNCgkJJ3Nhbml0aXplJyA9PiAnJywNCgkJJ2Z1bmN0aW9ucycgPT4g bnVsbA0KCSksDQoJJGF0dHNfZGVmYXVsdHMgPSBhcnJheSgNCgkJJ25hbWUnID0+IG51bGws DQoJCSdzYXZlJyA9PiBudWxsLA0KCQknZGF0YScgPT4gbnVsbCwNCgkJJ3VybCcgPT4gJycs DQoJCSdjb250ZXh0JyA9PiBudWxsLA0KCQknbWFya3VwJyA9PiAnJywNCgkJJ2VuY29kaW5n JyA9PiAnVVRGLTgnLA0KLy8JCSdzdGFydCcgPT4gJycsDQoJCSdxdWVyeScgPT4gbnVsbCwN CgkJJ2Zvcm0nID0+ICcnLA0KCQkncG9wdWxhdGUnID0+ICcnLA0KLy8JCSd0aG9yb3VnaCcg PT4gJycsDQoJCSdyZXBsYWNlJyA9PiAnJywNCgkJJ3NlcGFyYXRvcicgPT4gJzsnLA0KCQkn YXJnc2VwJyA9PiAnfCcsDQoJCSdnbG9iYWxzJyA9PiAndmFyaWFibGUscHJldGV4dCx0aGlz YXJ0aWNsZSx0aGlzaW1hZ2UsdGhpc2ZpbGUsdGhpc2xpbmsnLA0KCQknc3BlY2lhbHMnID0+ ICdkYXRhLHF1ZXJ5JywNCgkJJ3Nhbml0aXplJyA9PiAnJywNCgkJJ3BhcnNlJyA9PiAnYXV0 bycsDQoJCSdmdW5jdGlvbnMnID0+IG51bGwsDQoJCSdsaW1pdCcgPT4gbnVsbCwNCgkJJ29m ZnNldCcgPT4gJzAnLA0KCQknc29ydCcgPT4gJycsDQoJCSdsYWJlbCcgPT4gJycsDQoJCSds YWJlbHRhZycgPT4gJycsDQoJCSd3cmFwdGFnJyA9PiAnJywNCgkJJ2JyZWFrJyA9PiAnJywN CgkJJ2NsYXNzJyA9PiAnJywNCgkJJ2h0bWxfaWQnID0+ICcnDQoJKTsNCg0KCWV4dHJhY3Qo bEF0dHMoJGF0dHNfZGVmYXVsdHMsICRwaHAgPyAkYXR0cyA6ICRzYWZlX2RlZmF1bHRzICsg JGF0dHMpKTsNCg0KCS8vIEdyYWIgdGhlIGZvcm0gb3IgZW1iZWRkZWQgJHRoaW5nDQoJJG9s ZFRoaW5nID0gJHRoaW5nOw0KCWlmKCRmb3JtICYmICRmb3JtID0gZmV0Y2hfZm9ybSgkZm9y bSkpICR0aGluZyA9ICRjb250ZW50ID0gJGZvcm07DQoJZWxzZSAkY29udGVudCA9IGlzc2V0 KCR0aGluZykgPyBFdmFsRWxzZSgkdGhpbmcsIDEpIDogJyc7DQoNCgkkbm9kYXRhID0gISR1 cmwgJiYgKCRkYXRhID09PSBudWxsKTsNCglsaXN0KCRlbmNvZGluZywgJGVuY19mcm9tKSA9 IGV4cGxvZGUoJzonLCAkZW5jb2RpbmcpICsgYXJyYXkobnVsbCwgbnVsbCk7DQoNCgkkZXRj X3F1ZXJ5X2NvbnRleHQgPSBhcnJheSgnYXJnc2VwJz0+JGFyZ3NlcCwgJ2VuY29kaW5nJz0+ JGVuY29kaW5nLCAnZnVuY3Rpb25zJz0+JycsICdzdHJpcCc9PmFycmF5KCdfQ09PS0lFJywg J19HRVQnLCAnX1BPU1QnLCAnX1JFUVVFU1QnKSwgJ3BocCc9PiRwaHApOw0KDQoJJGV0Y19x dWVyeV9nbG9iYWxzID0gJGdsb2JhbHMgPyBkb19saXN0KCRnbG9iYWxzKSA6IGZhbHNlOw0K CSRzcGVjaWFsY2hhcnMgPSBpc19jYWxsYWJsZSgndHhwc3BlY2lhbGNoYXJzJykgPyAndHhw c3BlY2lhbGNoYXJzJyA6ICdodG1sc3BlY2lhbGNoYXJzJzsNCgkkZXRjX3F1ZXJ5X3Nhbml0 aXplID0gYXJyYXlfZmlsbF9rZXlzKCRldGNfcXVlcnlfY29udGV4dFsnc3RyaXAnXSwgJHNw ZWNpYWxjaGFycyk7DQoJaWYoJHNhbml0aXplKSBmb3JlYWNoKGRvX2xpc3QoJHNhbml0aXpl KSBhcyAkaXRlbSkgew0KCQlsaXN0KCRrZXksICR2YWwpID0gZXhwbG9kZSgnOicsICRpdGVt LCAyKSArIGFycmF5KG51bGwsIG51bGwpOw0KCQlpZighaXNzZXQoJHZhbCkpICRldGNfcXVl cnlfc2FuaXRpemVbJGtleV0gPSAkc3BlY2lhbGNoYXJzOw0KCQllbHNlaWYoISR2YWwgfHwg aXNfY2FsbGFibGUoJHZhbCkpICRldGNfcXVlcnlfc2FuaXRpemVbJGtleV0gPSAkdmFsOw0K CX0NCi8vCSRldGNfcXVlcnlfc2FuaXRpemUgPSAkc2FuaXRpemUgPyBhcnJheV9maWxsX2tl eXMoZG9fbGlzdCgkc2FuaXRpemUpLCB0cnVlKSA6IG51bGw7DQoNCglpZigkc3BlY2lhbHMp IGZvcmVhY2goZG9fbGlzdCgkc3BlY2lhbHMpIGFzICRzcGVjaWFsKSBpZighZW1wdHkoJCRz cGVjaWFsKSkgew0KCQkkJHNwZWNpYWwgPSBwcmVnX3JlcGxhY2VfY2FsbGJhY2soRVRDX1BS RUdfU1BFQywgJ2V0Y19wYXJzZV92YXJpYWJsZScsICQkc3BlY2lhbCk7DQoJfQ0KDQoJaWYo JGZ1bmN0aW9ucykgew0KCQkkZnVuY3Rpb25zID0gZG9fbGlzdCgkZnVuY3Rpb25zKTsNCgkJ JGZ1bmMgPSBpbXBsb2RlKCd8JywgJGZ1bmN0aW9ucyk7DQoJCSFpbl9hcnJheSgnZHVtcCcs ICRmdW5jdGlvbnMpIG9yICRmdW5jdGlvbnNbXSA9ICdldGNfZHVtcCc7DQoJfQ0KCSRldGNf cXVlcnlfY29udGV4dFsnZnVuY3Rpb25zJ10gPSAkZnVuY3Rpb25zID8gJGZ1bmMgOiAnJzsN Cg0KCWlmKCRtYXJrdXAgIT09ICdkYXRhJykgJGxvYWRlZCA9IGZhbHNlOw0KCWVsc2VpZigk ZGF0YSAmJiBpc3NldCgkZXRjX3F1ZXJ5WyRkYXRhXSkpIHsNCgkJJG1hcmt1cCA9ICRldGNf cXVlcnlbJGRhdGFdLT5tYXJrdXA7DQoJCWlmKGlzc2V0KCRldGNfcXVlcnlbJGRhdGFdLT5k b20pKSAkZG9tID0gJiRldGNfcXVlcnlbJGRhdGFdLT5kb207DQoJCWlmKGlzc2V0KCRldGNf cXVlcnlbJGRhdGFdLT5kYXRhKSkgJGRhdGEgPSAmJGV0Y19xdWVyeVskZGF0YV0tPmRhdGE7 DQoJCSRsb2FkZWQgPSB0cnVlOw0KCX0gZWxzZSAkZGF0YSA9ICcnOw0KDQoJaWYoJGRhdGEg PT09ICcnIHx8ICRxdWVyeSA9PT0gJycpIHJldHVybiBldGNfY2xlYW51cChwYXJzZSgkb2xk VGhpbmcsIGZhbHNlKSwgJHNhZmVfY29udGV4dCwgJHNhZmVfZ2xvYmFscywgJHNhZmVfc2Fu aXRpemUsICRzYWZlX3NwZWNpYWxzKTsNCg0KCWlmKCRjb250ZW50ICE9PSAnJykgew0KCQlp ZigkcGFyc2UgPT09ICdhdXRvJykgJHBhcnNlID0gKHN0cnBvcygkY29udGVudCwgJzx0eHA6 JykgIT09IGZhbHNlID8gJ2FmdGVyJyA6ICcnKTsNCgkJZWxzZWlmKCRwYXJzZSA9PT0gJ2Jl Zm9yZScgfHwgJHBhcnNlID09PSAnYm90aCcpICRjb250ZW50ID0gcGFyc2UoJGNvbnRlbnQp Ow0KCQlpZihzdHJwb3MoJGNvbnRlbnQsICc8eHNsOicpICE9PSBmYWxzZSkgew0KCQkJJHhj b250ZW50ID0gc3RycG9zKCRjb250ZW50LCAnPHhzbDpzdHlsZXNoZWV0JykgPT09IGZhbHNl ID8gJzx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiIHhtbG5zOnhzbD0iaHR0cDovL3d3 dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIj4nLiRjb250ZW50Lic8L3hzbDpzdHlsZXNo ZWV0PicgOiAkY29udGVudDsNCgkJCSRjb250ZW50ID0gJyc7DQoJCX0NCgl9DQoJJHBhcnNl ID0gKCRwYXJzZSA9PT0gJ2FmdGVyJyB8fCAkcGFyc2UgPT09ICdib3RoJyk7DQoNCglpZigh ZW1wdHkoJHBvcHVsYXRlKSkgew0KCQlnbG9iYWwgJHsndGhpcycuJHBvcHVsYXRlfTsNCgkJ JHRoaXNwb3B1bGF0ZSA9IGlzc2V0KCR7J3RoaXMnLiRwb3B1bGF0ZX0pID8gJHsndGhpcycu JHBvcHVsYXRlfSA6IG51bGw7DQoJCSRmb3JtYXRfaW5mbyA9ICRwb3B1bGF0ZS4oJHBvcHVs YXRlID09PSAnZmlsZScgPyAnX2Rvd25sb2FkJyA6ICcnKS4nX2Zvcm1hdF9pbmZvJzsNCgkJ aWYoJHBvcHVsYXRlID09PSAnYXJ0aWNsZScpICRjb2x1bW5fbWFwID0gYXJ0aWNsZV9jb2x1 bW5fbWFwKCk7DQoJfQ0KDQoJJG1hcmt1cHMgPSBkb19saXN0KCRtYXJrdXApOw0KCSRtYXJr dXAgPSBhcnJheV9wb3AoJG1hcmt1cHMpOw0KCWlmKGVtcHR5KCRtYXJrdXApKSB7DQoJCWlm KCRkYXRhID09PSBudWxsKSAkbWFya3VwID0gJHVybCA/ICcnIDogKCRxdWVyeSAhPT0gbnVs bCAmJiAkcXVlcnlbMF0gIT09ICckJyA/ICd4bWwnIDogJ3JhdycpOw0KCQllbHNlICRtYXJr dXAgPSAoc3RydG9sb3dlcihzdWJzdHIoJGRhdGEsIDAsIDcpKSA9PT0gJ3NlbGVjdCAnID8g J2RiJyA6ICgkZGF0YVswXSA9PT0gJ1snIHx8ICRkYXRhWzBdID09PSAneycgJiYgKCRkYXRh WzFdID09PSAnIicgfHwgJGRhdGFbMV0gPT09ICcgJykgPyAnanNvbicgOiAoJHVybCB8fCAk cmVwbGFjZSB8fCBzdHJwb3MoJGRhdGEsICc8JykgIT09IGZhbHNlID8gJ2h0bWwnIDogJ3Jh dycpKSk7DQoJfSBlbHNlIHsNCgkJbGlzdCgkbWFya3VwLCAkcGZ4KSA9IGV4cGxvZGUoJzon LCAkbWFya3VwLCAyKSArIGFycmF5KG51bGwsIG51bGwpOw0KCQlpZihzdWJzdHIoJG1hcmt1 cCwgLTEpID09PSAnKicpIHskY2RhdGEgPSB0cnVlOyAkbWFya3VwID0gc3Vic3RyKCRtYXJr dXAsIDAsIC0xKTt9DQoJfQ0KCSRtYXJrdXBzW10gPSAkbWFya3VwLihpc3NldCgkY2RhdGEp ID8gJyonIDogJycpLihpc3NldCgkcGZ4KSA/ICc6Jy4kcGZ4IDogJycpOw0KDQoJJGZsYXQg PSAoJG1hcmt1cCAhPT0gJ2h0bWwnICYmICRtYXJrdXAgIT09ICd4bWwnICYmICEkcmVwbGFj ZSAmJiAhaXNzZXQoJHhjb250ZW50KSk7Ly9hcnJheSBtb2RlDQoJJHF1ZXJ5X2FycmF5ID0g bnVsbDsvL2FycmF5KCk7DQoJJHF1ZXJ5c29ydCA9IGFycmF5KCk7DQoJaWYoJGZsYXQpIGlm KCRxdWVyeSAhPT0gbnVsbCkgDQoJew0KCQlpZigkcXVlcnlbMF0gPT09ICckJykgew0KCQkJ aWYoJG5vZGF0YSkgJGRhdGEgPSAkY29udGVudDsNCgkJCSRjb250ZW50ID0gJ3snLiRxdWVy eS4nfSc7DQoJCQkkcXVlcnkgPSAnLic7ICRxdWVyeV9hcnJheSA9IGFycmF5KCk7DQoJCX0g ZWxzZSB7DQoJCQkkcXVlcnlfYXJyYXkgPSBldGNfcGFyc2VfeHBhdGgoJHF1ZXJ5Lic/Jywg JGZsYXQpOw0KCQkJaWYoaXNzZXQoJHF1ZXJ5X2FycmF5WydhcnJheSddKSkgJHF1ZXJ5X2Fy cmF5ID0gJHF1ZXJ5X2FycmF5WydhcnJheSddOw0KCQl9DQoJfQ0KCWVsc2VpZigkbWFya3Vw ID09PSAnZGInKQ0KCQlpZigkY29udGVudCA9PT0gJycpIHskcXVlcnkgPSAnKi8qJzsgJHF1 ZXJ5X2FycmF5ID0gYXJyYXkoJyonLCAnKicpO30NCg0KCWlmKCRldGNfcXVlcnlfZ2xvYmFs cyAmJiBzdHJwb3MoJGNvbnRlbnQuJHJlcGxhY2UsICd7PycpID09PSBmYWxzZSAmJiBzdHJw b3MoJGNvbnRlbnQuJHJlcGxhY2UsICd7IScpID09PSBmYWxzZSkgJGV0Y19xdWVyeV9nbG9i YWxzID0gZmFsc2U7DQoJaWYoJGNvbnRlbnQgIT09ICcnKSAkY29udGVudHMgPSBldGNfcGFy c2Vfc3RyaW5nKCRjb250ZW50LCAkZmxhdCk7DQoJZWxzZWlmKCR0aGluZykgJGNvbnRlbnRz ID0gYXJyYXkoJ3RleHQnID0+ICcnKTsNCgllbHNlICRjb250ZW50cyA9IGFycmF5KCk7DQoN CglpZigkcmVwbGFjZSkgaWYoc3RycG9zKCRyZXBsYWNlLCAnPHhzbDonKSAhPT0gZmFsc2Up IHsNCgkJJHhyZXBsYWNlID0gc3RycG9zKCRyZXBsYWNlLCAnPHhzbDpzdHlsZXNoZWV0Jykg PT09IGZhbHNlID8gJzx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiIHhtbG5zOnhzbD0i aHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIj4nLiRyZXBsYWNlLic8L3hz bDpzdHlsZXNoZWV0PicgOiAkcmVwbGFjZTsNCgkJJHJlcGxhY2UgPSAnJzsNCgl9IGVsc2Ug ew0KCQkkcmVwbGFjZV9hcnJheSA9IGFycmF5KCk7DQoJCWZvcmVhY2goZG9fbGlzdCgkcmVw bGFjZSwgJHNlcGFyYXRvcikgYXMgJHBhdCkgaWYoJHBhdCAhPT0gJycpIHsNCgkJCSRyZXBs YWNlX2FycmF5W10gPSBldGNfcGFyc2VfeHBhdGgoJHBhdCwgJGZsYXQpOw0KCQl9DQoJCWlm KCRkZWJ1ZyAmJiBpbl9hcnJheSgncicsICRkZWJ1ZykpIHtlY2hvICdSRVBMQUNFJzsgZG1w KCRyZXBsYWNlX2FycmF5KTt9DQoJfQ0KDQoJaWYoISRsb2FkZWQpIHsNCgkJaWYoJHVybCkg DQoJCQlpZigkbWFya3VwID09PSAnbGRhcCcpIHsNCgkJCQlwcmVnX21hdGNoKCcvXihcdys6 XC8rKT8oPzooLiopQCk/KC4qKSQvJywgJHVybCwgJG1hdGNoZXMpOw0KCQkJCWxpc3QoJHVy bCwgJGxkYXBwcm90LCAkbGRhcGxvZ2luLCAkbGRhcGhvc3QpID0gJG1hdGNoZXM7DQoJCQkJ JGxkYXBob3N0ID0gJGxkYXBwcm90LiRsZGFwaG9zdDsNCgkJCQlsaXN0KCRsZGFwbG9naW4s ICRsZGFwcGFzcykgPSAoJGxkYXBsb2dpbiA/IGV4cGxvZGUoJzonLCAkbGRhcGxvZ2luLCAy KSA6IGFycmF5KCkpICsgYXJyYXkobnVsbCwgbnVsbCk7DQoJCQkJJGxkYXBjb25uID0gbGRh cF9jb25uZWN0KCRsZGFwaG9zdCk7DQoJCQkJbGRhcF9zZXRfb3B0aW9uKCRsZGFwY29ubiwg TERBUF9PUFRfUFJPVE9DT0xfVkVSU0lPTiwgMyk7DQoJCQkJaWYoJGxkYXBjb25uICYmIGxk YXBfYmluZCgkbGRhcGNvbm4sICRsZGFwbG9naW4sICRsZGFwcGFzcykpDQoJCQkJew0KCQkJ CQlsaXN0KCRsZGFwcmRuLCAkbGRhcGZpbHRlciwgJGxkYXBvbmx5KSA9IGRvX2xpc3QoJGRh dGEsICc7JykgKyBhcnJheShudWxsLCAnb2JqZWN0Q2xhc3M9KicsIG51bGwpOw0KCQkJCQkk bGRhcG9ubHkgPSAoIWVtcHR5KCRsZGFwb25seSkgPyBkb19saXN0KCRsZGFwb25seSkgOiBh cnJheSgpKTsNCgkJCQkJJGRhdGEgPSBsZGFwX3NlYXJjaCgkbGRhcGNvbm4sICRsZGFwcmRu LCAkbGRhcGZpbHRlciwgJGxkYXBvbmx5KTsNCgkJCQkJJGRhdGEgPSBsZGFwX2dldF9lbnRy aWVzKCRsZGFwY29ubiwgJGRhdGEpOw0KCQkJCQlsZGFwX2Nsb3NlKCRsZGFwY29ubik7DQoJ CQkJfQ0KCQkJCWVsc2UgJGRhdGEgPSBudWxsOw0KCQkJfSBlbHNlaWYoJG1hcmt1cCAhPT0g J2RiJykgew0KCQkJCSRjb250ZXh0ID0gJGNvbnRleHQgPyBzdHJlYW1fY29udGV4dF9jcmVh dGUoanNvbl9kZWNvZGUoJGNvbnRleHQsIHRydWUpKSA6IG51bGw7DQoJCQkJJGRhdGEgPSBm aWxlX2dldF9jb250ZW50cygkdXJsLCBmYWxzZSwgJGNvbnRleHQpOw0KCQkJCWlmKCFlbXB0 eSgkaHR0cF9yZXNwb25zZV9oZWFkZXIpKSBmb3JlYWNoKCRodHRwX3Jlc3BvbnNlX2hlYWRl ciBhcyAkaGVhZGVyKSBpZihwcmVnX21hdGNoKCcvXkNvbnRlbnRcLVR5cGVcOiguKikvaScs ICRoZWFkZXIsICRtYXRjaGVzKSkgew0KCQkJCQlsaXN0KCRtaW1lLCAkb3B0KSA9IGV4cGxv ZGUoJzsnLCAkbWF0Y2hlc1sxXSkgKyBhcnJheShudWxsLCBudWxsKTsNCgkJCQkJbGlzdCgk dHlwZSwgJHN1YnR5cGUpID0gZXhwbG9kZSgnLycsIHN0cnRvbG93ZXIodHJpbSgkbWltZSkp KSArIGFycmF5KG51bGwsIG51bGwpOw0KCQkJCQlpZighJG1hcmt1cCAmJiBpbl9hcnJheSgk c3VidHlwZSwgYXJyYXkoJ2pzb24nLCAnaHRtbCcsICd4bWwnKSkpICRtYXJrdXAgPSAkc3Vi dHlwZTsNCgkJCQkJaWYoJG9wdCAmJiBwcmVnX21hdGNoKCcvXGJjaGFyc2V0PShbXHdcLSNd KykvaScsICRvcHQsICRtYXRjaGVzKSkgJGVuYyA9IHN0cnRvdXBwZXIoJG1hdGNoZXNbMV0p Ow0KCQkJCQlicmVhazsNCgkJCQl9DQoJCQkJaWYoJGVuY29kaW5nICYmICRkYXRhKSB7DQoJ CQkJCSRlbmNvZGluZyA9IHN0cnRvdXBwZXIoJGVuY29kaW5nKTsNCgkJCQkJaWYoaXNzZXQo JGVuY19mcm9tKSAmJiAkZW5jX2Zyb20gIT09ICcqJykgJGVuYyA9IHN0cnRvdXBwZXIoJGVu Y19mcm9tKTsNCgkJCQkJZWxzZWlmKCFpc3NldCgkZW5jKSAmJiBwcmVnX21hdGNoKCcvPG1l dGFcYltePl0rXGJjaGFyc2V0PSI/KFtcd1wtI10rKSI/W14+XSo+L2knLCAkZGF0YSwgJG1h dGNoZXMpKSAkZW5jID0gc3RydG91cHBlcigkbWF0Y2hlc1sxXSk7DQoJCQkJCWlmKGlzX2Nh bGxhYmxlKCdtYl9kZXRlY3RfZW5jb2RpbmcnKSkgew0KCQkJCQkJaWYoIWlzc2V0KCRlbmMp KSAkZW5jID0gc3RydG91cHBlcihtYl9kZXRlY3RfZW5jb2RpbmcoJGRhdGEpKTsgLy9lbHNl IGRtcCgkZW5jKTsNCgkJCQkJCSRtYl9lbmNvZGluZ3MgPSAkZW5jID8gYXJyYXlfbWFwKCdz dHJ0b3VwcGVyJywgbWJfbGlzdF9lbmNvZGluZ3MoKSkgOiBhcnJheSgpOw0KCQkJCQkJJG1i X2VuY29kaW5ncyA9IGluX2FycmF5KCRlbmNvZGluZywgJG1iX2VuY29kaW5ncykgJiYgaW5f YXJyYXkoJGVuYywgJG1iX2VuY29kaW5ncyk7DQoJCQkJCX0NCgkJCQkJZWxzZSAkbWJfZW5j b2RpbmdzID0gZmFsc2U7DQoJCQkJCWlmKCRlbmMgJiYgKCRlbmMgIT09ICRlbmNvZGluZyB8 fCBpc3NldCgkZW5jX2Zyb20pKSkNCgkJCQkJCWlmKCRtYl9lbmNvZGluZ3MpICRkYXRhID0g bWJfY29udmVydF9lbmNvZGluZygkZGF0YSwgJGVuY29kaW5nLCAkZW5jKTsNCgkJCQkJCWVs c2VpZihpc19jYWxsYWJsZSgnaWNvbnYnKSkgJGRhdGEgPSBpY29udigkZW5jLCAkZW5jb2Rp bmcuJy8vSUdOT1JFJywgJGRhdGEpOw0KCQkJCX0NCgkJCX0NCg0KCQlpZighJG1hcmt1cCkg JG1hcmt1cCA9ICdodG1sJzsNCgkJZWxzZWlmKCFldGNfcXVlcnlfaW1wb3J0KCRkYXRhLCAk bWFya3VwcywgY29tcGFjdCgndXJsJywgJ3BvcHVsYXRlJywgJ3BocCcpKSkNCgkJCXJldHVy biBldGNfY2xlYW51cChwYXJzZSgkb2xkVGhpbmcsIGZhbHNlKSwgJHNhZmVfY29udGV4dCwg JHNhZmVfZ2xvYmFscywgJHNhZmVfc2FuaXRpemUsICRzYWZlX3NwZWNpYWxzKTsNCgl9IGVs c2VpZighJGZsYXQgJiYgIWlzc2V0KCRkb20pKSB7JGxvYWRlZCA9IGZhbHNlO30NCg0KCWlm ICgoc3RyaW5nKSRzb3J0ICE9PSAnJyAmJiAkZGF0YSAmJiBpc19hcnJheSgkZGF0YSkpDQoJ CWlmKCRzb3J0ID09PSB0cnVlKSBhc29ydCgkZGF0YSk7DQoJCWVsc2UgZm9yZWFjaChkb19s aXN0KCRzb3J0KSBhcyAkc29ydCkgew0KCQkJaWYoc3Vic3RyKCRzb3J0LCAwLCAxKSA9PT0g Jy4nKSAkcXVlcnlzb3J0W10gPSAkc29ydCA9PT0gJy4nID8gdHJ1ZSA6IHN1YnN0cigkc29y dCwgMSk7DQoJCQllbHNlIGV0Y19xdWVyeV9zb3J0KCRkYXRhLCAkc29ydCk7DQoJCX0NCg0K CSRpc19odG1sID0gJG1hcmt1cCA9PT0gJ2h0bWwnOw0KCSRpc194bWwgPSAkbWFya3VwID09 PSAneG1sJzsNCgkkZmxhdCA9ICRmbGF0ICYmICEkaXNfaHRtbCAmJiAhJGlzX3htbDsNCg0K CWlmKCRkZWJ1Zykgew0KCQkkZW5kdGltZSA9IG1pY3JvdGltZShUUlVFKTsNCgkJZG1wKCJQ cmVsb2FkZWQgaW4gIiAuICgkZW5kdGltZSAtICRzdGFydHRpbWUpIC4gIiBzZWNvbmRzLlxu Iik7DQoJCSRzdGFydHRpbWUgPSBtaWNyb3RpbWUoVFJVRSk7DQoJfQ0KDQoJaWYoISRub2Rh dGEgJiYgZW1wdHkoJGRhdGEpKSAkcm9vdHMgPSBudWxsOw0KCWVsc2VpZigkZmxhdCkgew0K CQkkcm9vdHMgPSBhcnJheSgkZGF0YSA/ICRkYXRhIDogJycpOyAkeHBhdGggPSBudWxsOw0K CX0gZWxzZSB7DQoJCWlmICghJGlzX2h0bWwgJiYgISRpc194bWwpIHVuc2V0KCRwZngpOw0K CQllbHNlaWYoISRsb2FkZWQgJiYgISRub2RhdGEpICRkYXRhID0gZXRjX3F1ZXJ5X3JlZHVj ZSgkZGF0YSk7DQoJCWlmKCEkbG9hZGVkKSB7DQoJCQkvKioqIGxvYWQgdGhlIGRhdGEgaW50 byBhIG5ldyBkb20gb2JqZWN0ICoqKi8NCgkJCSRkb20gPSBuZXcgRE9NRG9jdW1lbnQ7DQoJ CQkkZG9tLT5wcmVzZXJ2ZVdoaXRlU3BhY2UgPSBmYWxzZTsNCgkJCSRkb20tPnN0cmljdEVy cm9yQ2hlY2tpbmcgPSBmYWxzZTsNCgkJCSRkb20tPmVuY29kaW5nID0gJGVuY29kaW5nOw0K CQkJaWYoISRkZWJ1ZykgbGlieG1sX3VzZV9pbnRlcm5hbF9lcnJvcnModHJ1ZSk7DQoNCgkJ CWlmKGlzc2V0KCRjZGF0YSkgJiYgJGRhdGEpICRkYXRhID0gc3RyX2lyZXBsYWNlKGFycmF5 KCc8IVtDREFUQVsnLCAnXV0+JyksICc8IS0tLS0+JywgJGRhdGEpOw0KCQkJaWYoaXNzZXQo JHBmeCkgJiYgJHBmeCA9PT0gJycpICRkYXRhID0gc3RyX3JlcGxhY2UoJyB4bWxucz0nLCAn IGV0Y25zPScsICRkYXRhKTsNCg0KCQkJaWYoJGlzX2h0bWwpIHsNCi8vCQkJCWlmKCR1cmwp ICRkb20tPmxvYWRIVE1MKHByZWdfcmVwbGFjZSgnLzxoZWFkLio+L1VzaScsICdcXDA8bWV0 YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNl dD0nIC4gJGVuY29kaW5nIC4gJyI+JywgJGRhdGEpKTsNCgkJCQlpZigkdXJsKSAkZG9tLT5s b2FkSFRNTCgnPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0 L2h0bWw7IGNoYXJzZXQ9JyAuICRlbmNvZGluZyAuICciPicgLiAkZGF0YSk7DQoJCQkJZWxz ZSAkZG9tLT5sb2FkSFRNTCgnPD94bWwgZW5jb2Rpbmc9IicuJGVuY29kaW5nLiciPicuJGRh dGEpOw0KCQkJfQ0KCQkJZWxzZWlmKCRpc194bWwpIHtpZighJG5vZGF0YSkgJGRvbS0+bG9h ZFhNTCgkZGF0YSwgTElCWE1MX0NPTVBBQ1QpO30NCgkJCWVsc2VpZigkZGF0YSkgaWYoIWlz X2FycmF5KCRkYXRhKSAmJiAhaXNfb2JqZWN0KCRkYXRhKSkgJGRvbS0+YXBwZW5kQ2hpbGQo JGRvbS0+Y3JlYXRlRWxlbWVudCgncm9vdCcsIChzdHJpbmcpJGRhdGEpKTsgZWxzZSB7DQoJ CQkJZm9yZWFjaCAoJGRhdGEgYXMgJGtleSA9PiAkdmFsKSAkZG9tLT5hcHBlbmRDaGlsZChl dGNfY3JlYXRlX2VsZW1lbnQoJGtleSwgJHZhbCwgJGRvbSkpOw0KCQkJCSRpc194bWwgPSB0 cnVlOw0KCQkJfQ0KCQl9DQoNCgkJaWYoKGlzc2V0KCR4Y29udGVudCkgfHwgaXNzZXQoJHhy ZXBsYWNlKSkgJiYgY2xhc3NfZXhpc3RzKCdYU0xUUHJvY2Vzc29yJykpIHsNCgkJCSR4c2x0 ID0gbmV3IERPTURvY3VtZW50Ow0KCQkJJHByb2MgPSBuZXcgWFNMVFByb2Nlc3NvcjsNCgkJ CWlmKCRmdW5jdGlvbnMpICRwcm9jLT5yZWdpc3RlclBIUEZ1bmN0aW9ucygkZnVuY3Rpb25z KTsNCgkJCSRpc19odG1sID0gZmFsc2U7DQoJCQkkaXNfeG1sID0gdHJ1ZTsNCgkJCWlmKGlz c2V0KCR4cmVwbGFjZSkpIHsNCgkJCQkkeHNsdC0+bG9hZFhNTCgkeHJlcGxhY2UpOw0KCQkJ CSRwcm9jLT5pbXBvcnRTdHlsZVNoZWV0KCR4c2x0KTsNCgkJCQkkZG9tID0gJHByb2MtPnRy YW5zZm9ybVRvRG9jKCRkb20pOw0KCQkJfQ0KCQkJaWYoaXNzZXQoJHhjb250ZW50KSkgew0K CQkJCSR4c2x0LT5sb2FkWE1MKCR4Y29udGVudCk7DQoJCQkJJHByb2MtPmltcG9ydFN0eWxl U2hlZXQoJHhzbHQpOw0KCQkJCWlmKCRzYXZlKSB7DQoJCQkJCSRkb20gPSAkcHJvYy0+dHJh bnNmb3JtVG9Eb2MoJGRvbSk7DQoJCQkJCWlzc2V0KCRldGNfcXVlcnlbJHNhdmVdKSBvciAk ZXRjX3F1ZXJ5WyRzYXZlXSA9IG5ldyBcc3RkQ2xhc3MoKTsNCgkJCQkJJGV0Y19xdWVyeVsk c2F2ZV0tPmRvbSA9ICYkZG9tOw0KCQkJCQkkZXRjX3F1ZXJ5WyRzYXZlXS0+bWFya3VwID0g J3htbCc7DQoJCQkJfQ0KCQkJCXJldHVybiBldGNfY2xlYW51cCgkc2F2ZSA/IG51bGwgOiAk cHJvYy0+dHJhbnNmb3JtVG9YTUwoJGRvbSksICRzYWZlX2NvbnRleHQsICRzYWZlX2dsb2Jh bHMsICRzYWZlX3Nhbml0aXplLCAkc2FmZV9zcGVjaWFscyk7DQoJCQl9DQoJCX0NCg0KCQkk eHBhdGggPSBuZXcgRE9NWHBhdGgoJGRvbSk7DQoJCWlmKCRmdW5jdGlvbnMpIHsNCgkJCSR4 cGF0aC0+cmVnaXN0ZXJOYW1lc3BhY2UoJ3BocCcsICdodHRwOi8vcGhwLm5ldC94cGF0aCcp Ow0KCQkJJHhwYXRoLT5yZWdpc3RlclBIUEZ1bmN0aW9ucygkZnVuY3Rpb25zKTsNCgkJCWlm KCRxdWVyeSkgJHF1ZXJ5ID0gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKCcvXGIoJy4kZnVuYy4n KVxzKlwoXHMqKFwpPykvJywgZnVuY3Rpb24gKCRtYXRjaCkgew0KCQkJCXJldHVybiAicGhw OmZ1bmN0aW9uKCciLigkbWF0Y2hbMV0gPT0gJ2R1bXAnID8gJ2V0Y19kdW1wJyA6ICRtYXRj aFsxXSkuIiciLigkbWF0Y2hbMl0gPyAnKScgOiAnLCcpOw0KCQkJfSwgJHF1ZXJ5KTsvL3By ZWdfcmVwbGFjZSgnL1xiKCcuJGZ1bmMuJylccypcKC8nLCAicGhwOmZ1bmN0aW9uKCckMScs IiwgJHF1ZXJ5KTsNCgkJfQ0KCQlpZighZW1wdHkoJHBmeCkpIHsNCgkJCSR4cGF0aC0+cmVn aXN0ZXJOYW1lc3BhY2UoJHBmeCwgJGRvbS0+bG9va3VwTmFtZXNwYWNlVXJpKCRkb20tPm5h bWVzcGFjZVVSSSkpOw0KCQl9DQoNCgkJaWYoZW1wdHkoJHN0YXJ0KSkgJHN0YXJ0ID0gKCRp c19odG1sID8gJy9odG1sL2JvZHknIDogJy8nKTsNCgkJJHJvb3RzID0gJHhwYXRoLT5xdWVy eSgkc3RhcnQpOw0KDQoJCWlmKCRkZWJ1Zykge2lmKGluX2FycmF5KCdoJywgJGRlYnVnKSkg e2VjaG8gJG1hcmt1cDsgZG1wKCRpc194bWw/ICRkb20tPnNhdmVYTUwoKSA6ICRkb20tPnNh dmVIVE1MKCkpO319DQoJCWVsc2UgbGlieG1sX2NsZWFyX2Vycm9ycygpOw0KCX0vL2RvbQ0K DQoJaWYoZW1wdHkoJGNvbnRlbnRzKSkgey8vJHRoaW5nID09PSBudWxsDQoJCSRwYXRoID0g JGZsYXQgfHwgJHF1ZXJ5ICE9PSBudWxsIHx8ICRpc194bWwgPyAnLicgOiAnbm9kZSgpJzsN CgkJJGNvbnRlbnQgPSAkcGF0aCAhPT0gJy4nOw0KCQkkY29udGVudHMgPSBhcnJheShhcnJh eSgndHlwZScgPT4gJ3hwYXRoJywgJ3RleHQnID0+ICcnLCAndmFsdWUnID0+IGFycmF5KCdw YXRoJyA9PiAkcGF0aCwgJ21vZGUnID0+ICRmbGF0ID8gJz8nIDogJy4nLCAndmFsdWUnID0+ IGFycmF5KCksICdhcnJheScgPT4gYXJyYXkoKSkpKTsNCgl9IGVsc2UgJGNvbnRlbnQgPSB0 cnVlOw0KCWlmKCRxdWVyeSA9PT0gbnVsbCkgJHF1ZXJ5ID0gKCRpc194bWwgJiYgISRub2Rh dGEgPyAnbm9kZSgpJyA6ICcuJyk7DQoJJG91dCA9IGFycmF5KCk7DQoJJGV0Y19xdWVyeV9j b250ZXh0Wyd4cGF0aCddID0gJiR4cGF0aDsNCgkkZXRjX3F1ZXJ5X2NvbnRleHRbJ3htbCdd ID0gJGlzX3htbDsNCg0KCWlmKCRkZWJ1Zykgew0KCQkkZW5kdGltZSA9IG1pY3JvdGltZShU UlVFKTsNCgkJZG1wKCJMb2FkZWQgaW4gIiAuICgkZW5kdGltZSAtICRzdGFydHRpbWUpIC4g IiBzZWNvbmRzLiAkZmxhdFxuIik7DQoJCWlmKGluX2FycmF5KCdkJywgJGRlYnVnKSkge2Vj aG8gJ0RBVEEgJywgJG1hcmt1cDsgZG1wKCRkYXRhKTt9DQoJCWlmKGluX2FycmF5KCdxJywg JGRlYnVnKSkge2VjaG8gJ1FVRVJZJzsgZG1wKCRxdWVyeSk7IGRtcCgkcXVlcnlfYXJyYXkp O30NCgkJaWYoaW5fYXJyYXkoJ2MnLCAkZGVidWcpKSB7ZWNobyAnQ09OVEVOVFMnOyBkbXAo JGNvbnRlbnRzKTt9DQoJCSRzdGFydHRpbWUgPSBtaWNyb3RpbWUoVFJVRSk7DQoJfQ0KDQoJ aWYoIWVtcHR5KCRyb290cykpIHsNCgkJZm9yZWFjaCgkcm9vdHMgYXMgJHJvb3QpIC8qaWYo ISR0aG9yb3VnaCB8fCAkeHBhdGgtPnF1ZXJ5KCRyb290LT5nZXROb2RlUGF0aCgpKS0+bGVu Z3RoKSovIHsNCgkJCS8vIFVnbHkgaGFjayB0byBkZXRlY3QgaWYgdGhlIG5vZGUgaXMgcmVt b3ZlZA0KCQkJJGVsZW1lbnRzID0gJGludGVybmFscyA9IGFycmF5KCk7DQoNCgkJCWlmKCEk ZmxhdCkgew0KCQkJCSRub2RlcyA9ICR4cGF0aC0+ZXZhbHVhdGUoJHF1ZXJ5LCAkcm9vdCk7 DQoJCQkJaWYgKCEoJG5vZGVzIGluc3RhbmNlb2YgRE9NTm9kZUxpc3QpKSB7DQoJCQkJCSRp bnRlcm5hbHNbJ3s/fSddID0gJG5vZGVzOw0KCQkJCQlpZigkbm9kZXMpIHsNCgkJCQkJCSRu ZXdvdXQgPSAhJGNvbnRlbnQgPyAkbm9kZXMgOiAoaXNzZXQoJGNvbnRlbnRzWyd0ZXh0J10p ID8gJGNvbnRlbnRzWyd0ZXh0J10gOiBldGNfZXZhbHVhdGVfc3RyaW5nKCRjb250ZW50cywg JHJvb3QsICRpbnRlcm5hbHMsICRmbGF0KSk7DQoJCQkJCQkkb3V0W10gPSAkcGFyc2UgPyBw YXJzZSgkbmV3b3V0KSA6ICRuZXdvdXQ7DQoJCQkJCX0NCgkJCQkJY29udGludWU7DQoJCQkJ fQ0KCQkJCWZvcmVhY2goJG5vZGVzIGFzICRlbGVtZW50KSAkZWxlbWVudHNbXSA9ICRlbGVt ZW50Ow0KCQkJCWlmKCRzb3J0ID09PSAnPycpIHNodWZmbGUoJGVsZW1lbnRzKTsNCgkJCX0v LyBvciAkcm9vdCA9ICRkYXRhDQoJCQllbHNlaWYoJHF1ZXJ5ID09PSAnKicgfHwgJHF1ZXJ5 X2FycmF5ID09PSBudWxsKSAkZWxlbWVudHMgPSBpc19hcnJheSgkcm9vdCkgPyAkcm9vdCA6 IChhcnJheSkgJHJvb3Q7DQoJCQllbHNlaWYoZW1wdHkoJHF1ZXJ5X2FycmF5KSkgJGVsZW1l bnRzID0gYXJyYXkoJHJvb3QpOy8vcXVlcnkgPSAiLiIgb3IgIi8iDQoJCQllbHNlIHsNCgkJ CQkkcXVlcnlfYXJyYXkgPSBhcnJheShhcnJheSgndHlwZScgPT4gJ3hwYXRoJywgJ3RleHQn ID0+ICcnLCAndmFsdWUnID0+IGFycmF5KCdwYXRoJyA9PiAnLicsICdtb2RlJyA9PiAnPycs ICdhcnJheScgPT4gJHF1ZXJ5X2FycmF5LCAndmFsdWUnID0+IGFycmF5KCkpKSk7DQoJCQkJ JGVsZW1lbnRzID0gZXRjX2V2YWx1YXRlX3N0cmluZygkcXVlcnlfYXJyYXksICRyb290LCAk aW50ZXJuYWxzLCAyKTsNCgkJCX0NCg0KCQkJaWYgKCRmbGF0ICYmICRxdWVyeXNvcnQgJiYg aXNfYXJyYXkoJGVsZW1lbnRzKSkNCgkJCQlmb3JlYWNoKCRxdWVyeXNvcnQgYXMgJHNvcnQp IGlmKCRzb3J0ID09PSB0cnVlKSBhc29ydCgkZWxlbWVudHMpOyBlbHNlIGV0Y19xdWVyeV9z b3J0KCRlbGVtZW50cywgJHNvcnQpOw0KCQkJJG51bXMgPSAkbnVtX3Jvd3MgPSBjb3VudCgk ZWxlbWVudHMpOw0KCQkJJG9mZm51bSA9ICgkb2Zmc2V0IDwgMCA/ICRudW1zICsgJG9mZnNl dCA6ICRvZmZzZXQpOw0KCQkJaWYoJG9mZnNldCB8fCAkbGltaXQpIHsNCgkJCQkkZWxlbWVu dHMgPSBhcnJheV9zbGljZSgkZWxlbWVudHMsICRvZmZzZXQsICRsaW1pdCwgdHJ1ZSk7DQoJ CQkJJG51bV9yb3dzID0gY291bnQoJGVsZW1lbnRzKTsNCgkJCX0NCg0KCQkJaWYoaXNzZXQo JGV0Y19xdWVyeV9zcGVjaWFsc1sneyNyb3dzfSddKSkgJGludGVybmFsc1sneyNyb3dzfSdd ID0gJG51bV9yb3dzOw0KCQkJaWYoaXNzZXQoJGV0Y19xdWVyeV9zcGVjaWFsc1sneyN0b3Rh bH0nXSkpICRpbnRlcm5hbHNbJ3sjdG90YWx9J10gPSAkbnVtczsNCgkJCSRudW0gPSAwOw0K DQoJCQlpZighZW1wdHkoJGVsZW1lbnRzKSkgZm9yZWFjaCgkZWxlbWVudHMgYXMgJHJvdyA9 PiAmJGVsZW1lbnQpIHsNCgkJCQlpZighZW1wdHkoJGZvcm1hdF9pbmZvKSkgew0KCQkJCQln bG9iYWwgJHsndGhpcycuJHBvcHVsYXRlfTsvL2RhbW4gZG9BcnRpY2xlcygpIQ0KCQkJCQlp ZigkZmxhdCkgew0KCQkJCQkJaWYoJHBvcHVsYXRlID09PSAnYXJ0aWNsZScpIGZvcmVhY2gg KCRjb2x1bW5fbWFwIGFzICRrZXkgPT4gJGNvbHVtbikNCgkJCQkJCQkkdGhpc2FydGljbGVb JGtleV0gPSBpc3NldCgkZWxlbWVudFskY29sdW1uXSkgPyAkZWxlbWVudFskY29sdW1uXSA6 ICcnOy8vYXJ0aWNsZV9mb3JtYXRfaW5mbygkZWxlbWVudCk7DQoJCQkJCQllbHNlICR7J3Ro aXMnLiRwb3B1bGF0ZX0gPSAkZm9ybWF0X2luZm8oJGVsZW1lbnQpOw0KCQkJCQl9IGVsc2Vp ZigkcG9wdWxhdGUgPT09ICdhcnRpY2xlJykgew0KCQkJCQkJZm9yZWFjaCAoJGNvbHVtbl9t YXAgYXMgJGtleSA9PiAkY29sdW1uKSB7DQoJCQkJCQkJJG5vZGVzID0gJHhwYXRoLT5xdWVy eSgkaXNfeG1sID8gJGNvbHVtbiA6IHN0cnRvbG93ZXIoJGNvbHVtbiksICRlbGVtZW50KTsN CgkJCQkJCQkkdGhpc2FydGljbGVbJGtleV0gPSAkbm9kZXMtPmxlbmd0aCA/ICRub2Rlcy0+ aXRlbSgwKS0+bm9kZVZhbHVlIDogJyc7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQkJJHsndGhp cycuJHBvcHVsYXRlfVsnaXNfZmlyc3QnXSA9ICgkbnVtID09IDApOw0KCQkJCQkkeyd0aGlz Jy4kcG9wdWxhdGV9Wydpc19sYXN0J10gPSAoJG51bSsxID09ICRudW1fcm93cyk7DQoJCQkJ fQ0KDQoJCQkJaWYoaXNzZXQoJGV0Y19xdWVyeV9zcGVjaWFsc1sneyNyb3d9J10pKSAkaW50 ZXJuYWxzWyd7I3Jvd30nXSA9ICRudW0rMTsNCgkJCQlpZihpc3NldCgkZXRjX3F1ZXJ5X3Nw ZWNpYWxzWyd7I2luZH0nXSkpICRpbnRlcm5hbHNbJ3sjaW5kfSddID0gJG51bSskb2ZmbnVt Ow0KCQkJCWlmKGlzc2V0KCRldGNfcXVlcnlfc3BlY2lhbHNbJ3s/fSddKSkgJGludGVybmFs c1snez99J10gPSAoJGZsYXQgPyAkZWxlbWVudCA6ICRlbGVtZW50LT5ub2RlVmFsdWUpOw0K CQkJCWlmKGlzc2V0KCRldGNfcXVlcnlfc3BlY2lhbHNbJ3sjfSddKSkgJGludGVybmFsc1sn eyN9J10gPSAoJGZsYXQgPyAkcm93IDogJGVsZW1lbnQtPm5vZGVOYW1lKTsNCg0KCQkJCS8v IFJlcGxhY2UvcmVtb3ZlIHZhbHVlcw0KCQkJCWlmKCRyZXBsYWNlKSBmb3JlYWNoKCRyZXBs YWNlX2FycmF5IGFzICR2YWwpIHsNCgkJCQkJJG5vZGVzID0gKCR2YWxbJ3BhdGgnXSA9PT0g Jy4nID8gYXJyYXkoJGVsZW1lbnQpIDogJHhwYXRoLT5xdWVyeSgkaW50ZXJuYWxzID8gc3Ry dHIoJHZhbFsncGF0aCddLCAkaW50ZXJuYWxzKSA6ICR2YWxbJ3BhdGgnXSwgJGVsZW1lbnQp KTsNCgkJCQkJJGluZCA9IGlzc2V0KCRldGNfcXVlcnlfc3BlY2lhbHNbJ3sjI30nXSkgPyAx IDogMDsNCgkJCQkJaWYoJG5vZGVzKSBmb3JlYWNoKCRub2RlcyBhcyAkbm9kZSkgLyppZigh JHRob3JvdWdoIHx8ICR4cGF0aC0+cXVlcnkoJG5vZGUtPmdldE5vZGVQYXRoKCkpLT5sZW5n dGgpKi8gdHJ5DQoJCQkJCXsNCgkJCQkJCWlmKCRpbmQpICRpbnRlcm5hbHNbJ3sjI30nXSA9 ICRpbmQrKzsNCgkJCQkJCWV0Y19wcm9jZXNzX25vZGUoJHZhbFsndmFsdWUnXSwgJG5vZGUs ICRpbnRlcm5hbHMsIGZhbHNlLCB0cnVlKTsNCgkJCQkJfSBjYXRjaChET01FeGNlcHRpb24g JGUpIHtpZigkZGVidWcpIGVjaG8gJGUtPmdldE1lc3NhZ2UoKTt9DQoJCQkJfQ0KDQoJCQkJ Ly8gQ29uc3RydWN0IHRoZSByZXBsYWNlbWVudCBhcnJheXMNCgkJCQlpZihpc3NldCgkZXRj X3F1ZXJ5X3NwZWNpYWxzWyd7IyN9J10pKSAkaW50ZXJuYWxzWyd7IyN9J10gPSAkbnVtKzE7 DQoNCgkJCQkkbmV3b3V0ID0gISRjb250ZW50ICYmICEkc2FuaXRpemUNCgkJCQkJPyAoJGZs YXQgPyAkZWxlbWVudCA6ICgkaXNfaHRtbCA/ICRkb20tPnNhdmVIVE1MKCRlbGVtZW50KSA6 ICRkb20tPnNhdmVYTUwoJGVsZW1lbnQpKSkNCgkJCQkJOiAoaXNzZXQoJGNvbnRlbnRzWyd0 ZXh0J10pID8gJGNvbnRlbnRzWyd0ZXh0J10gOiBldGNfZXZhbHVhdGVfc3RyaW5nKCRjb250 ZW50cywgJGVsZW1lbnQsICRpbnRlcm5hbHMsICRmbGF0KSk7DQoNCgkJCQkkb3V0W10gPSAk cGFyc2UgPyBwYXJzZSgkbmV3b3V0KSA6ICRuZXdvdXQ7DQoJCQkJJG51bSsrOw0KCQkJfQ0K CQkJdW5zZXQoJGVsZW1lbnQsICRlbGVtZW50cyk7DQoJCX0NCgl9DQoNCglpZighZW1wdHko JHBvcHVsYXRlKSkgJHsndGhpcycuJHBvcHVsYXRlfSA9ICR0aGlzcG9wdWxhdGU7DQoJaWYo JHNhdmUpIHsNCgkJaXNzZXQoJGV0Y19xdWVyeVskc2F2ZV0pIG9yICRldGNfcXVlcnlbJHNh dmVdID0gbmV3IFxzdGRDbGFzcygpOw0KCQlpZighJGZsYXQpICRldGNfcXVlcnlbJHNhdmVd LT5kb20gPSAmJGRvbTsgZWxzZSAkZXRjX3F1ZXJ5WyRzYXZlXS0+ZGF0YSA9ICYkZGF0YTsN CgkJJGV0Y19xdWVyeVskc2F2ZV0tPm1hcmt1cCA9ICgkaXNfeG1sID8gJ3htbCcgOiAkbWFy a3VwKTsNCgl9DQoJaWYgKCRvdXQpIGlmKCEkc2F2ZSB8fCAkbmFtZSAhPT0gbnVsbCkgew0K CQkvLyBNYWtlIHVwIHRoZSBmaW5hbCBvdXRwdXQNCgkJJGZpbmFsb3V0ID0gKCRsYWJlbCA/ IGRvTGFiZWwoJGxhYmVsLCAkbGFiZWx0YWcpIDogJycpLigkd3JhcHRhZyB8fCAkYnJlYWsg PyBkb1dyYXAoJG91dCwgJHdyYXB0YWcsICRicmVhaywgJGNsYXNzLCAnJywgJycsICcnLCAk aHRtbF9pZCkgOiBpbXBsb2RlKCRvdXQpKTsNCgl9IGVsc2UgJGZpbmFsb3V0ID0gJyc7DQoJ ZWxzZSAkZmluYWxvdXQgPSBwYXJzZSgkb2xkVGhpbmcsIGZhbHNlKTsvL25vdGhpbmcgZm91 bmQNCg0KCWV0Y19jbGVhbnVwKG51bGwsICRzYWZlX2NvbnRleHQsICRzYWZlX2dsb2JhbHMs ICRzYWZlX3Nhbml0aXplLCAkc2FmZV9zcGVjaWFscyk7DQoJJGVuZHRpbWUgPSBtaWNyb3Rp bWUoVFJVRSk7DQoJaWYoJGRlYnVnKSBkbXAoIlByb2Nlc3NlZCBpbiAiIC4gKCRlbmR0aW1l IC0gJHN0YXJ0dGltZSkgLiAiIHNlY29uZHMuXG4iKTsNCglpZigkZGVidWcgJiYgaW5fYXJy YXkoJ28nLCAkZGVidWcpKSBkbXAoJGZpbmFsb3V0KTsNCglpZigkbmFtZSkge2dsb2JhbCAk dmFyaWFibGU7ICR2YXJpYWJsZVskbmFtZV0gPSAmJGZpbmFsb3V0O30NCglyZXR1cm4gJG5h bWUgPyAnJyA6ICRmaW5hbG91dDsNCn0NCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioq IFBBUlNFICoqKioqKioqKioqKioqKioqKioqKioqKiovDQoNCmZ1bmN0aW9uIGV0Y19wYXJz ZV9zdHJpbmcoJGNvbnRlbnQsICYkZmxhdCkgew0KCWlmKHN0cnBvcygkY29udGVudCwgJ3sn KSA9PT0gZmFsc2UpIHJldHVybiBhcnJheSgndGV4dCcgPT4gJGNvbnRlbnQpOw0KCWdsb2Jh bCAkZXRjX3F1ZXJ5X3NwZWNpYWxzLCAkZXRjX3F1ZXJ5X2NvbnRleHQ7DQovLwkkcHJlZ19z dHJpbmcgPSAnLyhceyg/IVtccyJdKSg/Oltee31dfCg/MSkpK1x9KS9VJzsNCg0KCSRjb250 ZW50cyA9IGFycmF5KCk7DQoJJGNvbnRlbnRzX2FycmF5ID0gcHJlZ19zcGxpdCgnLyhceyg/ Pltee31dfCg/MSkpK1x9KS9VJywgJGNvbnRlbnQsIC0xLCBQUkVHX1NQTElUX0RFTElNX0NB UFRVUkUpOw0KCSRudW0gPSBjb3VudCgkY29udGVudHNfYXJyYXkpOy8vMm4rMQ0KCSR0ZXh0 ID0gJGNvbnRlbnRzX2FycmF5WzBdOw0KCWZvcigkaSA9IDE7ICRpIDwgJG51bTsgJGkrPTIp IHsNCgkJJHN0cmluZyA9IHN1YnN0cigkY29udGVudHNfYXJyYXlbJGldLCAxLCAtMSk7DQoJ CWlmKHN0cnBvcygneyAiJywgJHN0cmluZ1swXSkgIT09IGZhbHNlKSB7DQoJCQkkbCA9IDA7 IHdoaWxlKCRzdHJpbmdbJGxdID09PSAneycpICRsKys7DQoJCQkkY3N0cmluZyA9IGV0Y19w YXJzZV9zdHJpbmcoJGwgPyBzdWJzdHIoJHN0cmluZywgJGwsIC0kbCkgOiAkc3RyaW5nLCAk ZmxhdCk7DQoJCQkkbCA9IG1heCgxLCAkbCk7DQoJCQlpZihpc3NldCgkY3N0cmluZ1sndGV4 dCddKSkgJHRleHQgLj0gc3RyX3JlcGVhdCgneycsICRsKS4kY3N0cmluZ1sndGV4dCddLnN0 cl9yZXBlYXQoJ30nLCAkbCk7DQoJCQllbHNlIHskY29udGVudHNbXSA9IGFycmF5KCd0eXBl JyA9PiAnc3RyaW5nJywgJ3RleHQnID0+ICR0ZXh0LCAndmFsdWUnID0+ICRjc3RyaW5nLCAn bGV2ZWwnID0+ICRsKTsgJHRleHQgPSAnJzt9DQoJCX0NCgkJZWxzZWlmKCRzdHJpbmdbMF0g PT09ICc/JyAmJiBzdHJsZW4oJHN0cmluZykgPiAxKSAkdGV4dCAuPSBldGNfcGFyc2VfdmFy aWFibGUoYXJyYXkoJGNvbnRlbnRzX2FycmF5WyRpXSkpOw0KCQllbHNlIHsNCgkJCXN3aXRj aCgkc3RyaW5nWzBdKSB7DQoJCQkJY2FzZSAnJCcgOiAkdmFsdWUgPSBldGNfcGFyc2VfZnVu Y3Rpb24oc3Vic3RyKCRzdHJpbmcsIDEpLCAkZmxhdCk7DQoJCQkJaWYoJHZhbHVlICYmICR2 YWx1ZVswXVsnZnVuYyddID09PSAnQCcpIHsNCgkJCQkJJGNvbnRlbnRzW10gPSBhcnJheSgn dHlwZScgPT4gJ2RlZmluZScsICd0ZXh0JyA9PiAnJywgJ3ZhbHVlJyA9PiAkdmFsdWVbMF1b J2FyZ3MnXVswXVswXVsndmFsdWUnXSk7DQoJCQkJCSR2YWx1ZSA9IGFycmF5X3NsaWNlKCR2 YWx1ZSwgMSk7DQoJCQkJfQ0KCQkJCSRjb250ZW50c1tdID0gYXJyYXkoJ3R5cGUnID0+ICdm dW5jJywgJ3RleHQnID0+ICR0ZXh0LCAndmFsdWUnID0+ICR2YWx1ZSk7ICR0ZXh0ID0gJyc7 IGJyZWFrOw0KCQkJCWNhc2UgJyMnIDogY2FzZSAnPycgOiAkY29udGVudHNbXSA9ICRldGNf cXVlcnlfc3BlY2lhbHNbJGNvbnRlbnRzX2FycmF5WyRpXV0gPSBhcnJheSgndHlwZScgPT4g J2ludGVybmFsJywgJ3RleHQnID0+ICR0ZXh0LCAndmFsdWUnID0+ICRzdHJpbmcpOyAkdGV4 dCA9ICcnOyBicmVhazsNCgkJCQljYXNlICclJyA6ICR0ZXh0IC49IHN1YnN0cigkc3RyaW5n LCAxKTsgYnJlYWs7DQoJCQkJY2FzZSAnIScgOiAkcGFydHMgPSBleHBsb2RlKCd8JywgJHN0 cmluZywgMyk7DQoJCQkJaWYoY291bnQoJHBhcnRzKSA+IDIpIHskc3RyaW5nID0gJHBhcnRz WzBdLid8Jy4kcGFydHNbMV07ICRmdW5jID0gZXRjX3BhcnNlX2Z1bmN0aW9uKCRwYXJ0c1sy XSwgJGZsYXQpO30NCgkJCQllbHNlICRmdW5jID0gbnVsbDsNCgkJCQkkY29udGVudHNbXSA9 ICRmdW5jID8gYXJyYXkoJ3R5cGUnID0+ICdmdW5jJywgJ3RleHQnID0+ICR0ZXh0LCAndmFs dWUnID0+ICRmdW5jLCAndmFyJyA9PiBhcnJheSgneycuJHN0cmluZy4nfScpKSA6IGFycmF5 KCd0eXBlJyA9PiAndmFyJywgJ3RleHQnID0+ICR0ZXh0LCAndmFsdWUnID0+IGFycmF5KCRj b250ZW50c19hcnJheVskaV0pKSA7ICR0ZXh0ID0gJyc7IGJyZWFrOw0KCQkJCWRlZmF1bHQg OiAkY29udGVudHNbXSA9IGFycmF5KCd0eXBlJyA9PiAneHBhdGgnLCAndGV4dCcgPT4gJHRl eHQsICd2YWx1ZScgPT4gZXRjX3BhcnNlX3hwYXRoKCRzdHJpbmcsICRmbGF0KSk7ICR0ZXh0 ID0gJyc7DQoJCQl9DQoJCX0NCgkJJHRleHQgLj0gJGNvbnRlbnRzX2FycmF5WyRpKzFdOw0K CX0NCglpZigkdGV4dCA+ICcnKSAkY29udGVudHNbXSA9IGFycmF5KCd0eXBlJyA9PiAndGV4 dCcsICd0ZXh0JyA9PiAkdGV4dCk7DQoJaWYoY291bnQoJGNvbnRlbnRzKSA9PT0gMSAmJiAk Y29udGVudHNbMF1bJ3R5cGUnXSA9PT0gJ3RleHQnKSAkY29udGVudHMgPSBhcnJheSgndGV4 dCcgPT4gJGNvbnRlbnRzWzBdWyd0ZXh0J10pOw0KCXJldHVybiAkY29udGVudHM7DQp9DQoN CmZ1bmN0aW9uIGV0Y19wYXJzZV92YXJpYWJsZSgkdmFsKSB7DQoJZ2xvYmFsICRldGNfcXVl cnlfY29udGV4dCwgJGV0Y19xdWVyeV9nbG9iYWxzLCAkZXRjX3F1ZXJ5X3Nhbml0aXplLCAk ZXRjX3F1ZXJ5X3NwZWNpYWxzOw0KCSRwYXQgPSAkdmFsWzBdOw0KCWlmKGlzc2V0KCRldGNf cXVlcnlfc3BlY2lhbHNbJHBhdF0pKSByZXR1cm4gJGV0Y19xdWVyeV9zcGVjaWFsc1skcGF0 XTsNCglsaXN0KCR2YXJzLCAkZGVmLCAkZm9ybWF0KSA9IGV4cGxvZGUoJ3wnLCBzdWJzdHIo JHBhdCwgMiwgLTEpLCAzKSArIGFycmF5KG51bGwsIG51bGwsIG51bGwpOw0KCWlmKCR2YXJz ID09PSAnJyB8fCAhZW1wdHkoJGV0Y19xdWVyeV9nbG9iYWxzKSkgZm9yZWFjaChleHBsb2Rl KCcsJywgJHZhcnMpIGFzICR2YXIpDQoJCWlmKCR2YXIgIT09ICcnKSB7Zm9yZWFjaCgkZXRj X3F1ZXJ5X2dsb2JhbHMgYXMgJGdsb2JhbCkgaWYoaXNzZXQoJEdMT0JBTFNbJGdsb2JhbF1b JHZhcl0pICYmICRHTE9CQUxTWyRnbG9iYWxdWyR2YXJdICE9PSAnJykNCgkJCXskdmFsdWUg PSAkR0xPQkFMU1skZ2xvYmFsXVskdmFyXTsgYnJlYWsgMjt9fQ0KCQllbHNlIHskdmFsdWUg PSAoaXNzZXQoJGRlZikgPyAkZGVmIDogJycpOyAkZ2xvYmFsID0gbnVsbDt9DQoJaWYoIWlz c2V0KCR2YWx1ZSkpICR2YWx1ZSA9IChpc3NldCgkZGVmKSA/ICRkZWYgOiAnJyk7DQoJZWxz ZSB7DQoJCWlmKE1BR0lDX1FVT1RFU19HUEMgJiYgJGdsb2JhbCAmJiBpbl9hcnJheSgkZ2xv YmFsLCAkZXRjX3F1ZXJ5X2NvbnRleHRbJ3N0cmlwJ10pKSAkdmFsdWUgPSBkb1N0cmlwKCR2 YWx1ZSk7DQoJCWlmKCFlbXB0eSgkZm9ybWF0KSkgew0KCQkJJGZsYXQgPSB0cnVlOyAvLyRp bnRlcm5hbHMgPSBudWxsOw0KCQkJaWYgKCRmb3JtYXRbMF0gPT09ICcjJykgew0KCQkJCSRm b3JtYXQgPSBsdHJpbSgkZm9ybWF0LCAnIy4nKTsgJHZhbHVlID0gaXNzZXQoJHZhcikgPyAk dmFyIDogJHZhbHVlOw0KCQkJfQ0KCQkJJGZvcm1hdCA9IGFycmF5KGFycmF5KCd0eXBlJyA9 PiAnZnVuYycsICd0ZXh0JyA9PiAnJywgJ3ZhbHVlJyA9PiBldGNfcGFyc2VfZnVuY3Rpb24o JGZvcm1hdCwgJGZsYXQpKSk7DQoJCQkkdmFsdWUgPSBldGNfZXZhbHVhdGVfc3RyaW5nKCRm b3JtYXQsICR2YWx1ZSwgbnVsbCk7DQoJCX0NCgkJZWxzZWlmKCFlbXB0eSgkZXRjX3F1ZXJ5 X3Nhbml0aXplWyRnbG9iYWxdKSkgJHZhbHVlID0gJGV0Y19xdWVyeV9zYW5pdGl6ZVskZ2xv YmFsXSgkdmFsdWUpOw0KCQllbHNlaWYoIWlzc2V0KCRldGNfcXVlcnlfc2FuaXRpemVbJGds b2JhbF0pICYmICFlbXB0eSgkZXRjX3F1ZXJ5X3Nhbml0aXplWycqJ10pKSAkdmFsdWUgPSAk ZXRjX3F1ZXJ5X3Nhbml0aXplWycqJ10oJHZhbHVlKTsNCgl9DQoJaWYoJHBhdFsxXSA9PT0g Jz8nKSAkZXRjX3F1ZXJ5X3NwZWNpYWxzWyRwYXRdID0gJHZhbHVlOw0KCXJldHVybiAkdmFs dWU7DQp9DQoNCmZ1bmN0aW9uIGV0Y19wYXJzZV9mdW5jdGlvbigkZm9ybWF0LCAmJGZsYXQp IHsNCglnbG9iYWwgJGV0Y19xdWVyeV9jb250ZXh0Ow0KDQoJJHBpcGUgPSAkZXRjX3F1ZXJ5 X2NvbnRleHRbJ2FyZ3NlcCddOw0KCSRyZXMgPSAkcmVwID0gYXJyYXkoKTsNCglpZihzdHJw b3MoJGZvcm1hdCwgJ3snKSAhPT0gZmFsc2UpIHsNCgkJJGZvcm1hdCA9IHByZWdfc3BsaXQo Jy8oXHsoPz5bXnt9XXwoPzEpKSpcfSkvVScsICRmb3JtYXQsIC0xLCBQUkVHX1NQTElUX0RF TElNX0NBUFRVUkUpOy8vMm4rMQ0KCQkkY291bnQgPSBjb3VudCgkZm9ybWF0KTsNCgkJZm9y KCRpPTE7ICRpPCRjb3VudDsgJGkrPTIpIHskcmVwWyd7Jy4kaS4nfSddID0gJGZvcm1hdFsk aV07ICRmb3JtYXRbJGldID0gJ3snLiRpLid9JzsgfQ0KCQkkZm9ybWF0ID0gaW1wbG9kZSgk Zm9ybWF0KTsNCgl9DQovLycvKFteXChcKVwuXSooPzpcKFteXChcKV0qXCkpPykoPzpcLnwk KS9VJw0KCWlmKCRmb3JtYXRbMF0gPT09ICcuJykgJGZvcm1hdCA9ICd+Jy4kZm9ybWF0Ow0K CSRmb3JtYXQgPSBwcmVnX3NwbGl0KCcvKFteXChcKVwuXSopKFwoKD8+W15cKFwpXXwoPzIp KSpcKSk/KD86XC58JCkvJywgJGZvcm1hdCwgLTEsIFBSRUdfU1BMSVRfREVMSU1fQ0FQVFVS RSB8IFBSRUdfU1BMSVRfTk9fRU1QVFkpOw0KDQoJZm9yZWFjaCgkZm9ybWF0IGFzICRpID0+ ICRmb3JtKSB7DQoJCWlmKCRmb3JtWzBdICE9PSAnKCcpIHsvL2Z1bmMNCgkJCWlmKGlzc2V0 KCRmdW5jKSkgJHJlc1tdID0gYXJyYXkoJ2Z1bmMnPT4kZnVuYywgJ3JlZic9PiRyZWYsICdh cmdzJz0+JGFyZ3MpOw0KCQkJJGZ1bmMgPSBsdHJpbSgkZm9ybSk7DQoJCQkkcmVmID0gJGZ1 bmNbMF0gPT09ICdAJzsNCgkJCWlmKCRyZWYpICRmdW5jID0gc3Vic3RyKCRmdW5jLCAxKTsN CgkJCSRhcmdzID0gYXJyYXkoYXJyYXkoJ3RleHQnID0+ICckJykpOw0KCQkJaWYoJGZ1bmMg IT09ICcnKSBzd2l0Y2goJGZ1bmNbMF0pIHsNCgkJCQljYXNlICcrJyA6IGNhc2UgJyonIDog Y2FzZSAnLScgOiBjYXNlICcvJyA6IGNhc2UgJyUnIDogY2FzZSAnXicgOg0KCQkJCWlmKHN0 cmxlbigkZnVuYykgPiAxKSAkYXJnc1tdID0gYXJyYXkoJ3RleHQnID0+IGZsb2F0dmFsKHN1 YnN0cigkZnVuYywgMSkpKTsgJGZ1bmMgPSAkZnVuY1swXTsgYnJlYWs7DQoJCQkJY2FzZSAn ficgOiBpZihzdHJsZW4oJGZ1bmMpID4gMSkgJGFyZ3NbXSA9IGFycmF5KCd0ZXh0JyA9PiBz dWJzdHIoJGZ1bmMsIDEpKTsgJGZ1bmMgPSAkZnVuY1swXTsgYnJlYWs7DQoJCQkJY2FzZSAn PScgOiBjYXNlICc+JyA6IGNhc2UgJzwnIDogY2FzZSAnPycgOiBpZihzdHJsZW4oJGZ1bmMp ID4gMSkgJGFyZ3NbXSA9IGFycmF5KCd0ZXh0JyA9PiBsdHJpbShzdWJzdHIoJGZ1bmMsIDEp KSk7ICRmdW5jID0gJGZ1bmNbMF07IGJyZWFrOw0KCQkJCWNhc2UgJyQnIDogaWYoJGkpIHsk YXJnc1tdID0gYXJyYXkoJ3RleHQnID0+ICRmdW5jID09PSAnJCcgPyAnJyA6ICRmdW5jKTsg JGZ1bmMgPSAnJCc7fQ0KCQkJCWVsc2UgeyRhcmdzID0gYXJyYXkoYXJyYXkoJ3RleHQnID0+ ICcnKSwgYXJyYXkoJ3RleHQnID0+ICRmdW5jKSk7ICRmdW5jID0gJ34nO30NCgkJCQlicmVh azsNCgkJCQlkZWZhdWx0IDogJGZ1bmMgPSB0cmltKCRmdW5jKTsNCgkJCQlpZighJGV0Y19x dWVyeV9jb250ZXh0WydwaHAnXSAmJiAhaW5fYXJyYXkoJGZ1bmMsIGFycmF5KCdkYXRlJywg J3RleHRpbGUnKSkpICRmdW5jID0gJyc7DQoJCQkJaWYoJGZ1bmMgPT09ICd0ZXh0aWxlJykg ew0KCQkJCQkkZnVuYyA9ICdUZXh0aWxlLT5wYXJzZSc7DQoJCQkJfQ0KCQkJCWlmIChzdHJw b3MoJGZ1bmMsICc6OicpKSAkZnVuYyA9IGV4cGxvZGUoJzo6JywgJGZ1bmMpOw0KCQkJCWVs c2VpZihzdHJwb3MoJGZ1bmMsICctPicpKSB7DQoJCQkJCSRmdW5jID0gZXhwbG9kZSgnLT4n LCAkZnVuYyk7DQoJCQkJCWlmKHN0cnRvbG93ZXIoJGZ1bmNbMF0pID09PSAndGV4dGlsZScp IGluY2x1ZGVfb25jZSh0eHBhdGguJy9saWIvY2xhc3NUZXh0aWxlLnBocCcpOw0KCQkJCQlp ZiAoY2xhc3NfZXhpc3RzKCRmdW5jWzBdKSkgJGZ1bmNbMF0gPSBuZXcgJGZ1bmNbMF07DQoJ CQkJfQ0KCQkJCWlmKCFpc19jYWxsYWJsZSgkZnVuYykpIHVuc2V0KCRmdW5jLCAkcmVmKTsN CgkJCX0gZWxzZSB1bnNldCgkZnVuYywgJHJlZik7DQoJCX0gZWxzZSB7Ly9hcmdzDQoJCQkk YXJnc19saXN0ID0gc3Vic3RyKCRmb3JtLCAxLCAtMSk7DQoJCQlpZighaXNzZXQoJGZ1bmMp KSB7DQoJCQkJaWYoISRpKSB7DQoJCQkJCSRmdW5jID0gJ0AnOyAkcmVmID0gZmFsc2U7DQoJ CQkJCSRhcmdzID0gYXJyYXkoYXJyYXkoYXJyYXkoJ3R5cGUnID0+ICd4cGF0aCcsICd0ZXh0 JyA9PiAnJywgJ3ZhbHVlJyA9PiBldGNfcGFyc2VfeHBhdGgoJGFyZ3NfbGlzdCwgJGZsYXQp KSkpOw0KCQkJCX0NCgkJCQljb250aW51ZTsNCgkJCX0NCgkJCWlmKCRmdW5jICE9PSAnPycg JiYgY291bnQoJGFyZ3MpIDwgMikgJGFyZ3MgPSBhcnJheSgpOw0KCQkJaWYoJGFyZ3NfbGlz dCAhPT0gJycpIGZvcmVhY2goZXhwbG9kZSgkcGlwZSwgJGFyZ3NfbGlzdCkgYXMgJGFyZykg JGFyZ3NbXSA9ICRyZXAgPyBldGNfcGFyc2Vfc3RyaW5nKHN0cnRyKCRhcmcsICRyZXApLCAk ZmxhdCkgOiBhcnJheSgndGV4dCcgPT4gJGFyZyk7DQoJCQlpZigkZnVuYyA9PT0gJz8nKSAk YXJncyA9IGFycmF5X3NsaWNlKCRhcmdzLCAtMyk7DQoJCX0NCgl9DQoJaWYoaXNzZXQoJGZ1 bmMpKSAkcmVzW10gPSBhcnJheSgnZnVuYyc9PiRmdW5jLCAncmVmJz0+JHJlZiwgJ2FyZ3Mn PT4kYXJncyk7DQoJcmV0dXJuICRyZXM7DQp9DQoNCmZ1bmN0aW9uIGV0Y19wYXJzZV94cGF0 aCgkcGF0dGVybiwgJiRmbGF0KSB7DQoJZ2xvYmFsICRldGNfcXVlcnlfY29udGV4dCwgJGV0 Y19xdWVyeV9nbG9iYWxzOw0KDQoJJGZ1bmMgPSAkZXRjX3F1ZXJ5X2NvbnRleHRbJ2Z1bmN0 aW9ucyddOw0KDQoJbGlzdCgkcGF0aCwgJHZhbCkgPSBleHBsb2RlKCdAQCcsICRwYXR0ZXJu LCAyKSArIGFycmF5KG51bGwsIG51bGwpOw0KDQoJaWYoaXNzZXQoJHZhbCkpIHsNCgkJJHBh aXJzID0gcHJlZ19zcGxpdCgnLygoPz5bXlxbXF0oKXt9XXxbXFtcKFx7XSg/MSkqW1xdXClc fV0pKylAL1UnLCAkdmFsLCAtMSwgUFJFR19TUExJVF9OT19FTVBUWSB8IFBSRUdfU1BMSVRf REVMSU1fQ0FQVFVSRSk7DQoJCSRmbGF0ID0gZmFsc2U7DQoJCSR2YWwgPSBhcnJheSgpOw0K CQlmb3JlYWNoKCRwYWlycyBhcyAkcGFpcikgew0KCQkJbGlzdCgkbmFtZSwgJGF2YWwpID0g ZXhwbG9kZSgnPScsICRwYWlyLCAyKSArIGFycmF5KG51bGwsIG51bGwpOw0KCQkJaWYoJG5h bWUgPiAnJykgJHZhbFskbmFtZV0gPSAkYXZhbDsNCgkJfQ0KCX0gZWxzZSB7DQoJCWxpc3Qo JHBhdGgsICR2YWwpID0gcHJlZ19zcGxpdCgnL14oKD8+W15cW1xdKCl7fV18W1xbXChce10o PzEpKltcXVwpXH1dKSspPSguKikkL3NEVScsICRwYXR0ZXJuLCAyLCBQUkVHX1NQTElUX0RF TElNX0NBUFRVUkUgfCBQUkVHX1NQTElUX05PX0VNUFRZKSArIGFycmF5KG51bGwsIG51bGwp Ow0KCQlpZighaXNzZXQoJHZhbCkgJiYgc3RybGVuKCRwYXRoKSA8IHN0cmxlbigkcGF0dGVy bikpICR2YWwgPSAnJzsNCgl9DQoNCglpZigkcGF0aCAhPT0gJycgJiYgc3RycG9zKCc6PyMr XiR+Ji8nLCBzdWJzdHIoJHBhdGgsIC0xKSkgIT09IGZhbHNlKSB7DQoJCSRtb2RlID0gc3Vi c3RyKCRwYXRoLCAtMSk7ICRwYXRoID0gc3Vic3RyKCRwYXRoLCAwLCAtMSk7DQoJfSBlbHNl ICRtb2RlID0gJy4nOw0KCWlmKCRtb2RlICE9PSAnPycpICRmbGF0ID0gZmFsc2U7DQoJaWYo JHBhdGggPT09ICcnKSAkcGF0aCA9ICcuJzsNCgllbHNlaWYoJGV0Y19xdWVyeV9nbG9iYWxz KSAkcGF0aCA9IHByZWdfcmVwbGFjZV9jYWxsYmFjayhFVENfUFJFR19TUEVDLCAnZXRjX3Bh cnNlX3ZhcmlhYmxlJywgJHBhdGgpOw0KCWlmKGlzc2V0KCR2YWwpICYmICFpc19hcnJheSgk dmFsKSkgJHZhbCA9IGFycmF5KCRtb2RlID0+ICR2YWwpOw0KDQoJJGF0dHJfYXJyYXkgPSBh cnJheSgpOw0KDQoJaWYoIWVtcHR5KCR2YWwpKSBmb3JlYWNoKCR2YWwgYXMgJGF0dHI9PiR2 YWx1ZSkgaWYoJGF0dHIgIT09ICcmJykgew0KCQkkcmVwWydhdHRyJ10gPSAkZXRjX3F1ZXJ5 X2dsb2JhbHMgPyBwcmVnX3JlcGxhY2VfY2FsbGJhY2soRVRDX1BSRUdfU1BFQywgJ2V0Y19w YXJzZV92YXJpYWJsZScsICRhdHRyKSA6ICRhdHRyOw0KCQkkcmVwWyd2YWx1ZSddID0gJHZh bHVlID09PSBudWxsID8gbnVsbCA6IGV0Y19wYXJzZV9zdHJpbmcoJHZhbHVlLCAkZmxhdCk7 DQoJCSRhdHRyX2FycmF5W10gPSAkcmVwOw0KLy8JCXVuc2V0KCRyZXApOw0KCX0gZWxzZWlm KCR2YWx1ZSAhPT0gbnVsbCkgeyRsYXN0WydhdHRyJ10gPSAnJic7ICRsYXN0Wyd2YWx1ZSdd ID0gZXRjX3BhcnNlX3N0cmluZygkdmFsdWUsICRmbGF0KTt9DQoJaWYoaXNzZXQoJGxhc3Qp KSAkYXR0cl9hcnJheVtdID0gJGxhc3Q7DQoJdW5zZXQoJHBhdHRlcm4pOw0KCSRwYXR0ZXJu WydwYXRoJ10gPSAkZnVuYyA/IHByZWdfcmVwbGFjZV9jYWxsYmFjaygnL1xiKCcuJGZ1bmMu JylccypcKFxzKihcKT8pLycsIGZ1bmN0aW9uICgkbWF0Y2gpIHsNCgkJcmV0dXJuICJwaHA6 ZnVuY3Rpb24oJyIuKCRtYXRjaFsxXSA9PSAnZHVtcCcgPyAnZXRjX2R1bXAnIDogJG1hdGNo WzFdKS4iJyIuKCRtYXRjaFsyXSA/ICcpJyA6ICcsJyk7DQoJfSwgJHBhdGgpIDogJHBhdGg7 DQoJJHBhdHRlcm5bJ21vZGUnXSA9ICRtb2RlOw0KCSRwYXR0ZXJuWyd2YWx1ZSddID0gJGF0 dHJfYXJyYXk7DQoNCglpZigkZmxhdCAmJiAkcGF0aCAhPT0gJy8nKSBpZihzdHJwb3MoJHBh dGgsICcvLycpICE9PSBmYWxzZSkgJGZsYXQgPSBmYWxzZTsgZWxzZSB7DQoJCSRtYXRjaGVz ID0gZXhwbG9kZSgnLycsICRwYXRoKTsNCgkJZm9yZWFjaCgkbWF0Y2hlcyBhcyAkbWF0Y2gp IGlmKCRtYXRjaCAhPT0gJyonICYmICRtYXRjaCAhPT0gJy4nICYmIHByZWdfbWF0Y2goJy9b XChcKVxbXF1cLjpAXS8nLCAkbWF0Y2gpKSB7DQoJCQkkZmxhdCA9IGZhbHNlOyBicmVhazsN CgkJfQ0KCQlpZigkZmxhdCkgJHBhdHRlcm5bJ2FycmF5J10gPSBhcnJheV9kaWZmKCRtYXRj aGVzLCBhcnJheSgnLicpKTsNCgl9DQoJcmV0dXJuICRwYXR0ZXJuOw0KfQ0KDQovKioqKioq KioqKioqKioqKioqKioqKioqKiogRVZBTFVBVEUgKioqKioqKioqKioqKioqKioqKioqKioq Ki8NCg0KZnVuY3Rpb24gZXRjX2V2YWx1YXRlX3N0cmluZygmJGNvbnRlbnRzLCAmJGVsZW1l bnQsICRpbnRlcm5hbHMsICRmbGF0PXRydWUpIHsNCglpZihpc3NldCgkY29udGVudHNbJ3Rl eHQnXSkpIHJldHVybiAkY29udGVudHNbJ3RleHQnXTsNCglnbG9iYWwgJGV0Y19xdWVyeV9j b250ZXh0LCAkZXRjX3F1ZXJ5X3Nhbml0aXplLCAkZXRjX3F1ZXJ5X3NwZWNpYWxzOw0KDQoJ JHdyYXAgPSAkZmxhdCA9PT0gMjsNCgkkcmVzID0gJHdyYXAgPyBhcnJheSgpIDogJyc7DQoJ JGRlZmluZXMgPSBhcnJheSgpOw0KCWlmKCEkZmxhdCkgew0KCQkkaXNfeG1sID0gJGV0Y19x dWVyeV9jb250ZXh0Wyd4bWwnXTsNCgkJJGRvbSA9ICRlbGVtZW50LT5vd25lckRvY3VtZW50 Ow0KCX0NCg0KCWZvcmVhY2goJGNvbnRlbnRzIGFzICRjb250ZW50KSB7DQoJCWlmKCEkd3Jh cCkgJHJlcyAuPSAkY29udGVudFsndGV4dCddOw0KCQlzd2l0Y2goJGNvbnRlbnRbJ3R5cGUn XSkgew0KCQkJY2FzZSAndGV4dCcgOiBicmVhazsNCg0KCQkJY2FzZSAnaW50ZXJuYWwnIDog JHJlcyAuPSAoaXNzZXQoJGludGVybmFsc1sneycuJGNvbnRlbnRbJ3ZhbHVlJ10uJ30nXSkg PyAkaW50ZXJuYWxzWyd7Jy4kY29udGVudFsndmFsdWUnXS4nfSddIDogJGNvbnRlbnRbJ3Zh bHVlJ10pOyBicmVhazsNCg0KCQkJY2FzZSAndmFyJyA6ICRyZXMgLj0gZXRjX3BhcnNlX3Zh cmlhYmxlKCRjb250ZW50Wyd2YWx1ZSddKTsgYnJlYWs7DQoNCgkJCWNhc2UgJ3N0cmluZycg OiAkbCA9ICFlbXB0eSgkY29udGVudFsnbGV2ZWwnXSkgPyAkY29udGVudFsnbGV2ZWwnXSA6 IDA7DQoJCQkkcmVzIC49IHN0cl9yZXBlYXQoJ3snLCAkbCkuZXRjX2V2YWx1YXRlX3N0cmlu ZygkY29udGVudFsndmFsdWUnXSwgJGVsZW1lbnQsICRpbnRlcm5hbHMsICRmbGF0KS5zdHJf cmVwZWF0KCd9JywgJGwpOyBicmVhazsNCg0KCQkJY2FzZSAnZnVuYycgOiBpZighZW1wdHko JHVuZGVmaW5lZCkpIHt1bnNldCgkdW5kZWZpbmVkKTsgYnJlYWs7fQ0KCQkJJHZhbCA9IGlz c2V0KCRjb250ZW50Wyd2YXInXSkgPyBldGNfcGFyc2VfdmFyaWFibGUoJGNvbnRlbnRbJ3Zh ciddKSA6IChpc3NldCgkZGVmaW5lKSA/ICRkZWZpbmUgOiAoJGZsYXQgPyAkZWxlbWVudCA6 ICRlbGVtZW50LT5ub2RlVmFsdWUpKTsNCgkJCXVuc2V0KCRkZWZpbmUpOw0KCQkJaWYoZW1w dHkoJGNvbnRlbnRbJ3ZhbHVlJ10pKSB7JHJlcyAuPSAkdmFsOyBicmVhazt9DQoJCQlmb3Jl YWNoKCRjb250ZW50Wyd2YWx1ZSddIGFzICRmb3JtKSB7DQoJCQkJJGZ1bmMgPSAkZm9ybVsn ZnVuYyddOw0KCQkJCSRyZWYgPSAkZm9ybVsncmVmJ107DQoJCQkJJGFyZ3MgPSBhcnJheSgp Ow0KCQkJCWlmKCRoYXNfYXJncyA9IGNvdW50KCRmb3JtWydhcmdzJ10pKSB7DQoJCQkJCWZv cmVhY2goJGZvcm1bJ2FyZ3MnXSBhcyAka2V5ID0+ICRhcmcpIHsNCgkJCQkJCWlmKCEka2V5 IHx8ICRmdW5jICE9PSAnPycgfHwgJGtleSA9PT0gKCRhcmdzWzBdID8gMSA6IDIpKQ0KCQkJ CQkJCSRhcmcgPSBpc3NldCgkYXJnWyd0ZXh0J10pID8gJGFyZ1sndGV4dCddIDogZXRjX2V2 YWx1YXRlX3N0cmluZygkYXJnLCAkZWxlbWVudCwgJGludGVybmFscywgJGZsYXQpOw0KCQkJ CQkJZWxzZSAkYXJnID0gJyc7DQoJCQkJCQlpZigkYXJnID09PSAnJCcpICRhcmdzW10gPSYg JHZhbDsNCgkJCQkJCWVsc2VpZigkYXJnICYmIGlzX3N0cmluZygkYXJnKSAmJiAkYXJnWzBd ID09PSAnJCcgJiYgaXNzZXQoJGRlZmluZXNbJGFyZ10pKSAkYXJnc1tdID0mICRkZWZpbmVz WyRhcmddOw0KCQkJCQkJZWxzZSAkYXJnc1tdID0gJGFyZzsNCgkJCQkJfQ0KCQkJCX0NCgkJ CQlzd2l0Y2goJGZ1bmMpIHsNCgkJCQkJY2FzZSAnJCcgOiBpZigkYXJnc1sxXSAhPT0gJycp ICRkZWZpbmVzWyRhcmdzWzFdXSA9ICR2YWw7IGVsc2UgJHZhbCA9ICcnOyBicmVhazsgLy8k YXJnc1swXT0nJCcNCgkJCQkJY2FzZSAnficgOiAkdmFsID0gaXNfYXJyYXkoJGFyZ3NbMF0p ID8gaW1wbG9kZSgkaGFzX2FyZ3MgPiAxID8gJGFyZ3NbMV0gOiAnJywgJGFyZ3NbMF0pIDog aW1wbG9kZSgkYXJncyk7IGJyZWFrOw0KCQkJCQljYXNlICcrJyA6ICR2YWwgPSBhcnJheV9z dW0oJGFyZ3MpOyBicmVhazsNCgkJCQkJY2FzZSAnKicgOiAkdmFsID0gYXJyYXlfcHJvZHVj dCgkYXJncyk7IGJyZWFrOw0KCQkJCQljYXNlICctJyA6ICR2YWwgPSAyKiRhcmdzWzBdIC0g YXJyYXlfc3VtKCRhcmdzKTsgYnJlYWs7DQoJCQkJCWNhc2UgJy8nIDogJHZhbCA9ICRhcmdz WzBdID8gJGFyZ3NbMF0qJGFyZ3NbMF0gLyBhcnJheV9wcm9kdWN0KCRhcmdzKSA6IDA7IGJy ZWFrOw0KCQkJCQljYXNlICclJyA6ICR2YWwgPSAkYXJnc1swXSAlICRhcmdzWzFdOyBicmVh azsNCgkJCQkJY2FzZSAnXicgOiAkdmFsID0gcG93KCRhcmdzWzBdLCAkYXJnc1sxXSk7IGJy ZWFrOw0KCQkJCQljYXNlICc/JyA6IHN3aXRjaCgkaGFzX2FyZ3MpIHsNCgkJCQkJCWNhc2Ug MCA6IGJyZWFrOw0KCQkJCQkJY2FzZSAxIDogJHZhbCA9ICgkYXJnc1swXSA/ICcxJyA6ICcw Jyk7IGJyZWFrOw0KCQkJCQkJZGVmYXVsdCA6ICR2YWwgPSAhZW1wdHkoJGFyZ3NbMF0pID8g JGFyZ3NbMV0gOiAoaXNzZXQoJGFyZ3NbMl0pID8gJGFyZ3NbMl0gOiAnJyk7DQoJCQkJCX0g YnJlYWs7DQoJCQkJCWNhc2UgJz0nIDogc3dpdGNoKCRoYXNfYXJncykgew0KCQkJCQkJY2Fz ZSAwIDogY2FzZSAxOiBicmVhazsNCi8vCQkJCQkJY2FzZSAxIDogJHZhbCA9ICgkYXJnc1sw XSA9PSAkdmFsID8gJzEnIDogJzAnKTsgJGJyZWFrOw0KCQkJCQkJY2FzZSAyIDogJHZhbCA9 ICgkYXJnc1swXSA9PSAkYXJnc1sxXSA/ICcxJyA6ICcwJyk7IGJyZWFrOw0KCQkJCQkJZGVm YXVsdCA6ICR2YWwgPSBjb3VudChhcnJheV91bmlxdWUoJGFyZ3MpKTw9MSA/ICcxJyA6ICcw JzsNCgkJCQkJfSBicmVhazsNCgkJCQkJY2FzZSAnPCcgOiBjYXNlICc+JyA6IGlmKCRoYXNf YXJncyA+IDEpIHsNCgkJCQkJCSR2YWwgPSAoJGZ1bmMgPT09ICc8JyA/ICgkYXJnc1swXSA8 ICRhcmdzWzFdID8gJzEnIDogJzAnKSA6ICgkYXJnc1swXSA+ICRhcmdzWzFdID8gJzEnIDog JzAnKSk7DQoJCQkJCX0gYnJlYWs7DQoJCQkJCWNhc2UgJ2RhdGUnIDogaWYoJGhhc19hcmdz KSAkdmFsID0gZGF0ZSgkYXJnc1swXSwgc3RydG90aW1lKGlzc2V0KCRhcmdzWzFdKSA/ICRh cmdzWzFdIDogJHZhbCkpOyBicmVhazsNCi8vCQkJCQljYXNlICdlc2NhcGUnIDogJHZhbCA9 IGRvU2xhc2goJHZhbCk7IGJyZWFrOw0KCQkJCQlkZWZhdWx0IDogJG5ld3ZhbCA9IGNhbGxf dXNlcl9mdW5jX2FycmF5KCRmdW5jLCAkYXJncyk7DQoJCQkJCWlmKCEkcmVmKSAkdmFsID0g JG5ld3ZhbDsNCgkJCQl9DQoJCQl9DQoJCQkkcmVzIC49ICR2YWw7IGJyZWFrOw0KDQoJCQlk ZWZhdWx0IDogaWYoISRmbGF0KSB7DQoJCQkJJHZhbHVlID0gJyc7DQoJCQkJJGluZCA9IGlz c2V0KCRldGNfcXVlcnlfc3BlY2lhbHNbJ3sjI30nXSkgPyAxIDogMDsNCgkJCQkkbm9kZXMg PSAkZXRjX3F1ZXJ5X2NvbnRleHRbJ3hwYXRoJ10tPmV2YWx1YXRlKCRpbnRlcm5hbHMgPyBz dHJ0cigkY29udGVudFsndmFsdWUnXVsncGF0aCddLCAkaW50ZXJuYWxzKSA6ICRjb250ZW50 Wyd2YWx1ZSddWydwYXRoJ10sICRlbGVtZW50KTsNCgkJCQlpZiAoISgkbm9kZXMgaW5zdGFu Y2VvZiBET01Ob2RlTGlzdCkpICR2YWx1ZSA9ICRub2RlczsNCgkJCQllbHNlIGZvcmVhY2go JG5vZGVzIGFzICRub2RlKQ0KCQkJCXsNCgkJCQkJaWYoJGluZCkgJGludGVybmFsc1sneyMj fSddID0gJGluZCsrOw0KCQkJCQkkb3V0ID0gZW1wdHkoJGNvbnRlbnRbJ3ZhbHVlJ11bJ3Zh bHVlJ10pID8gZmFsc2UgOiBldGNfcHJvY2Vzc19ub2RlKCRjb250ZW50Wyd2YWx1ZSddWyd2 YWx1ZSddLCAkbm9kZSwgJGludGVybmFscywgZmFsc2UpOw0KCQkJCQkkdmFsdWUgLj0gJG91 dCA/ICRvdXQgOiAoJGNvbnRlbnRbJ3ZhbHVlJ11bJ21vZGUnXSA9PT0gJz8nID8gJG5vZGUt Pm5vZGVWYWx1ZSA6ICgkY29udGVudFsndmFsdWUnXVsnbW9kZSddID09PSAnIycgPyAkbm9k ZS0+bm9kZU5hbWUgOiAoISRpc194bWwgPyAkZG9tLT5zYXZlSFRNTCgkbm9kZSkgOiAkZG9t LT5zYXZlWE1MKCRub2RlKSkpKTsNCgkJCQl9DQoJCQkJaWYoJGNvbnRlbnRbJ3R5cGUnXSAh PT0gJ2RlZmluZScpICRyZXMgLj0gJHZhbHVlOyBlbHNlICRkZWZpbmUgPSAkdmFsdWU7DQoJ CQl9IGVsc2Ugey8vZmxhdA0KCQkJCSR2YWx1ZSA9ICRlbGVtZW50OyAkY2h1bms9Jyc7DQoJ CQkJaWYoIWVtcHR5KCRjb250ZW50Wyd2YWx1ZSddWydhcnJheSddKSkgZm9yZWFjaCgkY29u dGVudFsndmFsdWUnXVsnYXJyYXknXSBhcyAka2V5ID0+ICRjaHVuaykNCgkJCQl7DQoJCQkJ CWlmKCRjaHVuayAhPT0gJyonKQ0KCQkJCQkJaWYoaXNzZXQoJHZhbHVlWyRjaHVua10pKSAk dmFsdWUgPSAkdmFsdWVbJGNodW5rXTsNCgkJCQkJCWVsc2VpZigoJGNodW5rID09PSAnPycg fHwgJGNodW5rID09PSAnIycpICYmIGlzX2FycmF5KCR2YWx1ZSkpIHsNCgkJCQkJCQkkdmFs dWUgPSAkY2h1bmsgPT09ICc/JyA/ICR2YWx1ZVskY2h1bmsgPSBhcnJheV9yYW5kKCR2YWx1 ZSldIDogJGNodW5rID0gYXJyYXlfcmFuZCgkdmFsdWUpOw0KCQkJCQkJfSBlbHNlIHt1bnNl dCgkY2h1bmspOyBicmVhazt9DQoJCQkJCWVsc2Ugew0KCQkJCQkJJHF1ZXJ5ID0gYXJyYXko YXJyYXkoJ3R5cGUnID0+ICd4cGF0aCcsICd0ZXh0JyA9PiAnJywgJ3ZhbHVlJyA9PiBhcnJh eSgncGF0aCcgPT4gJy4nLCAnbW9kZScgPT4gJz8nLCAnYXJyYXknID0+IGFycmF5X3NsaWNl KCRjb250ZW50Wyd2YWx1ZSddWydhcnJheSddLCAka2V5ICsgMSksICd2YWx1ZScgPT4gJGNv bnRlbnRbJ3ZhbHVlJ11bJ3ZhbHVlJ10pKSk7DQoJCQkJCQkkaW5kID0gaXNzZXQoJGV0Y19x dWVyeV9zcGVjaWFsc1sneyMjfSddKSA/IDEgOiAwOw0KCQkJCQkJZm9yZWFjaCgkdmFsdWUg YXMgJGsgPT4gJHZhbCkgew0KCQkJCQkJCWlmKGlzc2V0KCRldGNfcXVlcnlfc3BlY2lhbHNb J3sjfSddKSkgJGludGVybmFsc1sneyN9J10gPSAkazsNCgkJCQkJCQlpZigkaW5kKSAkaW50 ZXJuYWxzWyd7IyN9J10gPSAkaW5kKys7DQoJCQkJCQkJJG5ld3JlcyA9IGV0Y19ldmFsdWF0 ZV9zdHJpbmcoJHF1ZXJ5LCAkdmFsLCAkaW50ZXJuYWxzLCAkZmxhdCk7DQoJCQkJCQkJaWYo JHdyYXApIGZvcmVhY2goJG5ld3JlcyBhcyAkcm93KSAkcmVzW10gPSAkcm93Ow0KCQkJCQkJ CWVsc2UgJHJlcyAuPSAkbmV3cmVzOw0KCQkJCQkJfQ0KCQkJCQkJdW5zZXQoJGNodW5rKTsg YnJlYWs7DQoJCQkJCX0NCgkJCQl9DQoJCQkJaWYoaXNzZXQoJGNodW5rKSkgew0KCQkJCQlp ZighZW1wdHkoJGNvbnRlbnRbJ3ZhbHVlJ11bJ3ZhbHVlJ10pKSBldGNfcHJvY2Vzc19ub2Rl KCRjb250ZW50Wyd2YWx1ZSddWyd2YWx1ZSddLCAkdmFsdWUsICRpbnRlcm5hbHMpOw0KCQkJ CQllbHNlaWYoISR3cmFwKQ0KCQkJCQkJaWYoaXNzZXQoJGV0Y19xdWVyeV9zYW5pdGl6ZVsk Y2h1bmsuJz8nXSkpIHtpZigkZXRjX3F1ZXJ5X3Nhbml0aXplWyRjaHVuay4nPyddKSAkdmFs dWUgPSAkZXRjX3F1ZXJ5X3Nhbml0aXplWyRjaHVuay4nPyddKCR2YWx1ZSk7fQ0KCQkJCQkJ ZWxzZWlmKCFlbXB0eSgkZXRjX3F1ZXJ5X3Nhbml0aXplWyc/J10pKSAkdmFsdWUgPSAkZXRj X3F1ZXJ5X3Nhbml0aXplWyc/J10oJHZhbHVlKTsNCgkJCQkJaWYoJGNvbnRlbnRbJ3R5cGUn XSAhPT0gJ2RlZmluZScpIGlmKCR3cmFwKSAkcmVzW10gPSAkdmFsdWU7IGVsc2UgJHJlcyAu PSAkdmFsdWU7DQoJCQkJCWVsc2UgJGRlZmluZSA9ICR2YWx1ZTsNCgkJCQl9IGVsc2VpZigk Y29udGVudFsndHlwZSddID09PSAnZGVmaW5lJykgJHVuZGVmaW5lZCA9IHRydWU7DQoJCQl9 DQoJCX0NCgl9DQoJcmV0dXJuICRyZXM7DQp9DQoNCmZ1bmN0aW9uIGV0Y19wcm9jZXNzX25v ZGUoJiRhdHRyLCAmJG5vZGUsICRpbnRlcm5hbHM9bnVsbCwgJGZsYXQ9dHJ1ZSwgJHJlbW92 ZT1mYWxzZSkgew0KCWlmKCRmbGF0KSB7DQoJCWlmKGVtcHR5KCRhdHRyKSAmJiAkcmVtb3Zl KSAkbm9kZSA9IG51bGw7DQoJCWVsc2UgZm9yZWFjaCgkYXR0ciBhcyAkdmFsKSBpZigkdmFs WydhdHRyJ10gPT09ICcuJyB8fCAkdmFsWydhdHRyJ10gPT09ICc/Jykgew0KCQkJaWYoaXNz ZXQoJGludGVybmFsc1snez99J10pKSAkaW50ZXJuYWxzWyd7P30nXSA9ICRub2RlOw0KCQkJ JG5vZGUgPSBldGNfZXZhbHVhdGVfc3RyaW5nKCR2YWxbJ3ZhbHVlJ10sICRub2RlLCAkaW50 ZXJuYWxzLCAkZmxhdCk7DQoJCX0NCgkJcmV0dXJuOw0KCX0NCg0KCWdsb2JhbCAkZXRjX3F1 ZXJ5X2NvbnRleHQ7DQoNCi8vCSRzZWxmX3BhdGggPSBhcnJheSgnLicsICc/JywgJyMnLCAn KycsICdeJywgJyQnLCAnficsICcmJywgJy8nKTsNCgkkaXNfYXR0ciA9ICgkbm9kZS0+bm9k ZVR5cGUgPT09IFhNTF9BVFRSSUJVVEVfTk9ERSk7DQoJaWYoZW1wdHkoJGF0dHIpICYmICRy ZW1vdmUpIHsNCgkJaWYoJGlzX2F0dHIpICRub2RlLT5vd25lckVsZW1lbnQtPnJlbW92ZUF0 dHJpYnV0ZU5vZGUoJG5vZGUpOw0KCQllbHNlICRub2RlLT5wYXJlbnROb2RlLT5yZW1vdmVD aGlsZCgkbm9kZSk7DQoJfQ0KCWVsc2UgZm9yZWFjaCgkYXR0ciBhcyAkdmFsKSB7DQovLwkJ dW5zZXQoJG5hbWUpOw0KCQkkc2VsZiA9IHN0cnBvcygnLj8jK14kfiYvJywgJHZhbFsnYXR0 ciddKSAhPT0gZmFsc2U7Ly9pbl9hcnJheSgkdmFsWydhdHRyJ10sICRzZWxmX3BhdGgpOw0K CQlpZighaXNzZXQoJHZhbFsndmFsdWUnXSkpIHtpZighJHNlbGYgJiYgISRpc19hdHRyKSAk bm9kZS0+cmVtb3ZlQXR0cmlidXRlKCR2YWxbJ2F0dHInXSk7fQ0KCQllbHNlIHsNCgkJCWlm KGlzc2V0KCRpbnRlcm5hbHNbJ3s/fSddKSkgJGludGVybmFsc1snez99J10gPSAkc2VsZiB8 fCAkaXNfYXR0ciA/ICRub2RlLT5ub2RlVmFsdWUgOiAkbm9kZS0+Z2V0QXR0cmlidXRlKCR2 YWxbJ2F0dHInXSk7DQoJCQlpZihpc3NldCgkaW50ZXJuYWxzWyd7I30nXSkpICRpbnRlcm5h bHNbJ3sjfSddID0gJHNlbGYgfHwgJGlzX2F0dHIgPyAkbm9kZS0+bm9kZU5hbWUgOiAkdmFs WydhdHRyJ107DQoJCQkkdmFsdWUgPSBpc3NldCgkdmFsWyd2YWx1ZSddWyd0ZXh0J10pID8g JHZhbFsndmFsdWUnXVsndGV4dCddIDogZXRjX2V2YWx1YXRlX3N0cmluZygkdmFsWyd2YWx1 ZSddLCAkbm9kZSwgJGludGVybmFscywgJGZsYXQpOw0KCQkJc3dpdGNoKCR2YWxbJ2F0dHIn XSkgew0KCQkJCWNhc2UgJyYnIDogaWYoISRyZW1vdmUpIHJldHVybiAkdmFsdWU7DQoJCQkJ Y2FzZSAnLicgOiBjYXNlICcrJyA6IGNhc2UgJ14nIDogY2FzZSAnJCcgOiBpZighJGlzX2F0 dHIpIHsNCgkJCQkJaWYoc3RycG9zKCR2YWx1ZSwgJzwnKSA9PT0gZmFsc2UpDQoJCQkJCQlp ZigkdmFsWydhdHRyJ10gIT09ICcuJykgJGYgPSAkbm9kZS0+b3duZXJEb2N1bWVudC0+Y3Jl YXRlVGV4dE5vZGUoJHZhbHVlKTsNCgkJCQkJCWVsc2UgeyRub2RlLT5ub2RlVmFsdWUgPSAk dmFsdWU7IGJyZWFrO30NCgkJCQkJZWxzZSB7DQoJCQkJCQkkZW5jb2RpbmcgPSAkZXRjX3F1 ZXJ5X2NvbnRleHRbJ2VuY29kaW5nJ107DQoJCQkJCQkkaXNfeG1sID0gJGV0Y19xdWVyeV9j b250ZXh0Wyd4bWwnXTsNCgkJCQkJCWlmKCEkaXNfeG1sKSAkdmFsdWUgPSBwcmVnX3JlcGxh Y2UoJy88KCg/OmFyZWF8YmFzZXxicnxjb2x8Y29tbWFuZHxlbWJlZHxocnxpbWd8aW5wdXR8 a2V5Z2VufGxpbmt8bWV0YXxwYXJhbXxzb3VyY2V8dHJhY2t8d2JyKVxiW14+XSopKD88IVwv KT4vaVUnLCAnPCQxIC8+JywgJHZhbHVlKTsNCgkJCQkJCWlmKCEkaXNfeG1sICYmIHN0cnBv cygkdmFsdWUsICcmJykgIT09IGZhbHNlKSB7DQoJCQkJCQkJaWYoIWlzc2V0KCRldGNfcXVl cnlfY29udGV4dFsnZGVjb2RlJ10pKSAkZXRjX3F1ZXJ5X2NvbnRleHRbJ2RlY29kZSddID0g YXJyYXlfZmxpcChhcnJheV9kaWZmKGdldF9odG1sX3RyYW5zbGF0aW9uX3RhYmxlKEhUTUxf RU5USVRJRVMsIEVOVF9DT01QQVQsICRlbmNvZGluZyksIGdldF9odG1sX3RyYW5zbGF0aW9u X3RhYmxlKEhUTUxfU1BFQ0lBTENIQVJTLCBFTlRfQ09NUEFULCAkZW5jb2RpbmcpKSk7DQoJ CQkJCQkJJHZhbHVlID0gc3RydHIoJHZhbHVlLCAkZXRjX3F1ZXJ5X2NvbnRleHRbJ2RlY29k ZSddKTsNCgkJCQkJCX0NCgkJCQkJCSRmID0gJG5vZGUtPm93bmVyRG9jdW1lbnQtPmNyZWF0 ZURvY3VtZW50RnJhZ21lbnQoKTsNCgkJCQkJCSRmLT5hcHBlbmRYTUwoJHZhbHVlKTsNCgkJ CQkJfQ0KCQkJCQlpZigkdmFsWydhdHRyJ10gPT09ICcuJykgJG5vZGUtPm5vZGVWYWx1ZSA9 IG51bGw7DQoJCQkJCWlmKCR2YWxbJ2F0dHInXSA9PT0gJyYnKSAkbm9kZS0+cGFyZW50Tm9k ZS0+cmVwbGFjZUNoaWxkKCRmLCAkbm9kZSk7DQoJCQkJCWVsc2VpZigkdmFsWydhdHRyJ10g PT09ICdeJykgJG5vZGUtPnBhcmVudE5vZGUtPmluc2VydEJlZm9yZSgkZiwgJG5vZGUpOw0K CQkJCQllbHNlaWYoJHZhbFsnYXR0ciddID09PSAnJCcpDQoJCQkJCQlpZigkbm9kZS0+bmV4 dFNpYmxpbmcpICRub2RlLT5wYXJlbnROb2RlLT5pbnNlcnRCZWZvcmUoJGYsICRub2RlLT5u ZXh0U2libGluZyk7DQoJCQkJCQllbHNlICRub2RlLT5wYXJlbnROb2RlLT5hcHBlbmRDaGls ZCgkZik7DQoJCQkJCWVsc2UgJG5vZGUtPmFwcGVuZENoaWxkKCRmKTsgYnJlYWs7DQoJCQkJ fQ0KDQoJCQkJY2FzZSAnPycgOiAkdmFsdWUgPSBodG1sc3BlY2lhbGNoYXJzKCR2YWx1ZSwg RU5UX0NPTVBBVCwgJGV0Y19xdWVyeV9jb250ZXh0WydlbmNvZGluZyddLCBmYWxzZSk7DQoJ CQkJJG5vZGUtPm5vZGVWYWx1ZSA9ICR2YWxbJ2F0dHInXSA9PT0gJysnIHx8ICR2YWxbJ2F0 dHInXSA9PT0gJyQnID8gJG5vZGUtPm5vZGVWYWx1ZS4kdmFsdWUgOiAoJHZhbFsnYXR0cidd ID09PSAnXicgPyAkdmFsdWUuJG5vZGUtPm5vZGVWYWx1ZSA6ICR2YWx1ZSk7DQoJCQkJYnJl YWs7DQoNCgkJCQljYXNlICd+JyA6IGNhc2UgJy8nIDoNCgkJCQkkbm9kZXMgPSAkZXRjX3F1 ZXJ5X2NvbnRleHRbJ3hwYXRoJ10tPmV2YWx1YXRlKCR2YWx1ZSwgJG5vZGUpOw0KCQkJCWlm ICgkbm9kZXMgaW5zdGFuY2VvZiBET01Ob2RlTGlzdCkgZm9yZWFjaCgkbm9kZXMgYXMgJGVs ZW1lbnQpDQoJCQkJCWlmKCEkaXNfYXR0cikgew0KCQkJCQkJaWYoJHZhbFsnYXR0ciddID09 PSAnficpICRlbGVtZW50LT5wYXJlbnROb2RlLT5pbnNlcnRCZWZvcmUoJG5vZGUsICRlbGVt ZW50KTsNCgkJCQkJCWVsc2UgJGVsZW1lbnQtPmFwcGVuZENoaWxkKCRub2RlKTsNCgkJCQkJ fSBlbHNlICRlbGVtZW50LT5zZXRBdHRyaWJ1dGVOb2RlKCRub2RlKTsNCgkJCQlicmVhazsN Cg0KCQkJCWNhc2UgJyMnIDogaWYoJGlzX2F0dHIgJiYgJHZhbHVlICE9ICRub2RlLT5uYW1l KSB7DQoJCQkJCSRub2RlLT5vd25lckVsZW1lbnQtPnNldEF0dHJpYnV0ZSgkdmFsdWUsICRu b2RlLT52YWx1ZSk7DQoJCQkJCSRub2RlLT5vd25lckVsZW1lbnQtPnJlbW92ZUF0dHJpYnV0 ZU5vZGUoJG5vZGUpOw0KCQkJCX0gYnJlYWs7DQoNCgkJCQlkZWZhdWx0IDogaWYoISRpc19h dHRyKSAkbm9kZS0+c2V0QXR0cmlidXRlKCR2YWxbJ2F0dHInXSwgJHZhbHVlKTsNCgkJCX0N CgkJfQ0KCX0NCn0NCg0KLyoqKioqKioqKioqKioqKiBNSVNDICoqKioqKioqKioqKioqKioq KioqKiovDQoNCmZ1bmN0aW9uIGV0Y19jcmVhdGVfZWxlbWVudCgkbmFtZSwgJiR2YWx1ZSwg JiRkb2MpIHsNCglpZihlbXB0eSgkbmFtZSkgfHwgaXNfbnVtZXJpYygkbmFtZSkpIHskYXR0 ciA9ICRuYW1lOyAkbmFtZSA9ICdyb3cnO30NCgllbHNlIHVuc2V0KCRhdHRyKTsNCglpZigh aXNfYXJyYXkoJHZhbHVlKSAmJiAhaXNfb2JqZWN0KCR2YWx1ZSkpIHsNCgkJJHZhbHVlID0g KHN0cmluZykkdmFsdWU7DQoJCWlmKHN0cnBvcygkdmFsdWUsICcmJykgIT09IGZhbHNlKSAk dmFsdWUgPSBwcmVnX3JlcGxhY2UoJy8mKCM/XHcrXGIoPyE7KXwoPyFbI1x3XSkpLycsICcm YW1wOyQxJywgJHZhbHVlKTsNCgkJJGVsZW1lbnQgPSAkZG9jLT5jcmVhdGVFbGVtZW50KCRu YW1lLCAkdmFsdWUpOw0KLyoJCSRlbGVtZW50ID0gJGRvYy0+Y3JlYXRlRWxlbWVudCgkbmFt ZSk7DQoJCSRlbGVtZW50LT5hcHBlbmRDaGlsZCgkZG9jLT5jcmVhdGVUZXh0Tm9kZSgoc3Ry aW5nKSR2YWx1ZSkpOw0KKi8JfQ0KCWVsc2Ugew0KCQkkZWxlbWVudCA9ICRkb2MtPmNyZWF0 ZUVsZW1lbnQoJG5hbWUpOw0KCQlmb3JlYWNoKCR2YWx1ZSBhcyAka2V5PT4kdmFsKSAkZWxl bWVudC0+YXBwZW5kQ2hpbGQoZXRjX2NyZWF0ZV9lbGVtZW50KCRrZXksICR2YWwsICRkb2Mp KTsNCgl9DQoJaWYoaXNzZXQoJGF0dHIpKSAkZWxlbWVudC0+c2V0QXR0cmlidXRlKCdpbmRl eCcsICRhdHRyKTsNCglyZXR1cm4gJGVsZW1lbnQ7DQp9DQoNCmZ1bmN0aW9uIGV0Y19xdWVy eV9pbXBvcnQoJiRkYXRhLCAkbWFya3VwcywgJHBhcmFtcyA9IGFycmF5KCd1cmwnID0+ICcn LCAncG9wdWxhdGUnID0+ICcnLCAncGhwJyA9PiBmYWxzZSkpIHsNCglpZiAoZW1wdHkoJG1h cmt1cHMpIHx8ICFpc19zY2FsYXIoJGRhdGEpKSByZXR1cm4gdHJ1ZTsNCglleHRyYWN0KCRw YXJhbXMpOw0KCSRtYXJrdXAgPSBhcnJheV9zaGlmdCgkbWFya3Vwcyk7DQoJbGlzdCgkbWFy a3VwLCAkcGZ4KSA9IGV4cGxvZGUoJzonLCAkbWFya3VwLCAyKSArIGFycmF5KG51bGwsIG51 bGwpOw0KCWlmKCRjZGF0YSA9IChzdWJzdHIoJG1hcmt1cCwgLTEpID09PSAnKicpKSAkbWFy a3VwID0gc3Vic3RyKCRtYXJrdXAsIDAsIC0xKTsNCglpZigkbWFya3VwID09PSAnanNvbicp IGlmKHByZWdfbWF0Y2goJy9eXFsoXC0/XHcrKVwuXC4oXC0/XHcrKTo/KFtcK1wtXT8pKFxk KilcXSQvJywgJGRhdGEsICRtYXRjaGVzKSkgc3dpdGNoKCRtYXRjaGVzWzNdKSB7DQoJCWNh c2UgJysnIDogaWYoJG1hdGNoZXNbMV0gPD0gJG1hdGNoZXNbMl0pICRkYXRhID0gcmFuZ2Uo JG1hdGNoZXNbMV0sICRtYXRjaGVzWzJdLCAkbWF0Y2hlc1s0XSA/ICRtYXRjaGVzWzRdIDog MSk7IGVsc2UgJGRhdGEgPSBudWxsOyBicmVhazsNCgkJY2FzZSAnLScgOiBpZigkbWF0Y2hl c1sxXSA+PSAkbWF0Y2hlc1syXSkgJGRhdGEgPSByYW5nZSgkbWF0Y2hlc1sxXSwgJG1hdGNo ZXNbMl0sICRtYXRjaGVzWzRdID8gJG1hdGNoZXNbNF0gOiAxKTsgZWxzZSAkZGF0YSA9IG51 bGw7IGJyZWFrOw0KCQlkZWZhdWx0IDogJGRhdGEgPSByYW5nZSgkbWF0Y2hlc1sxXSwgJG1h dGNoZXNbMl0sICRtYXRjaGVzWzRdID8gJG1hdGNoZXNbNF0gOiAxKTsNCgl9IGVsc2UgJGRh dGEgPSBqc29uX2RlY29kZSgkZGF0YSwgdHJ1ZSk7IC8vYXJyYXkNCgllbHNlaWYoJG1hcmt1 cCA9PT0gJ2FycmF5JykgJGRhdGEgPSB1bnNlcmlhbGl6ZSgkZGF0YSk7DQoJZWxzZWlmKCRt YXJrdXAgPT09ICdpbmknKSAkZGF0YSA9IHBhcnNlX2luaV9zdHJpbmcoJGNkYXRhID8gcHJl Z19yZXBsYWNlKCcvXiguKylcPSguKikkL1VtJywgJyQxPSIkMiInLCBzdHJfcmVwbGFjZSgn IicsICdcIicsICRkYXRhKSkgOiAkZGF0YSwgIWlzc2V0KCRwZngpIHx8ICRwZngpOw0KCWVs c2VpZigkbWFya3VwID09PSAnbGlzdCcpDQoJCSRkYXRhID0gYXJyYXlfZmlsdGVyKGRvX2xp c3QoJGRhdGEsIGlzc2V0KCRwZngpID8gJHBmeCA6ICcsJyksIGZ1bmN0aW9uKCRhKSB7cmV0 dXJuIChzdHJpbmcpJGEgIT09ICcnO30pOw0KCWVsc2VpZigkbWFya3VwID09PSAnY3N2Jykg ew0KCQkkZGF0YSA9IHByZWdfc3BsaXQoJy9bXHJcbl17MSwyfSg/PSg/OlteXCJdKlwiW15c Il0qXCIpKig/IVteXCJdKlwiKSkvJywgJGRhdGEpOw0KCQlmb3JlYWNoKCRkYXRhIGFzICYk cm93KSAkcm93ID0gc3RyX2dldGNzdigkcm93LCBpc3NldCgkcGZ4KSA/ICRwZnggOiAnLCcp Ow0KCQlpZiAoJGNkYXRhICYmICRuID0gY291bnQoJGRhdGEpKSB7DQoJCQkkZmlsbCA9IGFy cmF5X2ZpbGwoMCwgJG4sIG51bGwpOw0KCQkJZm9yICgkaT0xOyAkaTwkbjsgJGkrKykgJGRh dGFbJGldID0gYXJyYXlfY29tYmluZSgkZGF0YVswXSwgYXJyYXlfc2xpY2UoJGRhdGFbJGld ICsgJGZpbGwsIDAsICRuKSk7DQoJCX0NCgl9DQoJZWxzZWlmKCRtYXJrdXAgPT09ICdkYicv KiAmJiAkZGF0YSovKSB7DQoJCWlmKCEkcGhwKSByZXR1cm4gZmFsc2U7DQoJCWdsb2JhbCAk REI7DQoJCWlmKHN0cnRvbG93ZXIoc3Vic3RyKCRkYXRhLCAwLCA3KSkgIT09ICdzZWxlY3Qg Jykgew0KCQkJc3dpdGNoKCRwb3B1bGF0ZSkgew0KCQkJCWNhc2UgJ2ZpbGUnIDogJGZpZWxk cyA9ICcqJzsgJGZpbHRlciA9IHNhZmVfcGZ4KCRwb3B1bGF0ZSkuIiBXSEVSRSBzdGF0dXMg Pj0gNCBBTkQgJGRhdGEiOyBicmVhazsNCgkJCQljYXNlICdpbWFnZScgOiBjYXNlICdsaW5r JyA6ICRmaWVsZHMgPSAnKic7ICRmaWx0ZXIgPSBzYWZlX3BmeCgkcG9wdWxhdGUpLicgV0hF UkUgJy4kZGF0YTsgYnJlYWs7DQoJCQkJZGVmYXVsdCA6ICRmaWVsZHMgPSAnKiwgdW5peF90 aW1lc3RhbXAoUG9zdGVkKSBhcyB1UG9zdGVkLCB1bml4X3RpbWVzdGFtcChFeHBpcmVzKSBh cyB1RXhwaXJlcywgdW5peF90aW1lc3RhbXAoTGFzdE1vZCkgYXMgdUxhc3RNb2QnOw0KCQkJ CSRub3dfcG9zdGVkID0gbm93KCdwb3N0ZWQnKTsgJG5vd19leHBpcmVzID0gbm93KCdleHBp cmVzJyk7DQoJCQkJJGZpbHRlciA9IHNhZmVfcGZ4KCd0ZXh0cGF0dGVybicpLiIgV0hFUkUg U3RhdHVzID49IDQgQU5EIFBvc3RlZCA8PSAkbm93X3Bvc3RlZCBBTkQgKEV4cGlyZXMgSVMg TlVMTCBPUiBFeHBpcmVzID49ICRub3dfZXhwaXJlcykgQU5EICRkYXRhIjsNCgkJCQkvL2lm KGVtcHR5KCRwZngpKSAkcGZ4ID0gJ2FydGljbGUnOw0KCQkJfQ0KCQkJJGRhdGEgPSAiU0VM RUNUICRmaWVsZHMgRlJPTSAkZmlsdGVyIjsNCgkJfQ0KCQkkdXJsIGFuZCBteXNxbGlfc2Vs ZWN0X2RiKCREQi0+bGluaywgJHVybCk7DQoJCSRkYXRhID0gZ2V0Um93cygkZGF0YSk7DQoJ CSR1cmwgYW5kIG15c3FsaV9zZWxlY3RfZGIoJERCLT5saW5rLCAkREItPmRiKTsNCgl9DQoJ JHJlcyA9IHRydWU7DQoJaWYgKCRtYXJrdXBzICYmIGlzX2FycmF5KCRkYXRhKSkgZm9yZWFj aCgkZGF0YSBhcyAmJGNodW5rKSAkcmVzID0gJHJlcyAmJiBldGNfcXVlcnlfaW1wb3J0KCRj aHVuaywgJG1hcmt1cHMsICRwYXJhbXMpOw0KCXJldHVybiAkcmVzOw0KfQ0KDQpmdW5jdGlv biBldGNfY2xlYW51cCgkb3V0ID0gbnVsbCwgJHNhZmVfY29udGV4dCA9IG51bGwsICRzYWZl X2dsb2JhbHMgPSBudWxsLCAkc2FmZV9zYW5pdGl6ZSA9IG51bGwsICRzYWZlX3NwZWNpYWxz ID0gbnVsbCkgew0KCWdsb2JhbCAkZXRjX3F1ZXJ5X2NvbnRleHQsICRldGNfcXVlcnlfZ2xv YmFscywgJGV0Y19xdWVyeV9zYW5pdGl6ZSwgJGV0Y19xdWVyeV9zcGVjaWFsczsNCgkkZXRj X3F1ZXJ5X2NvbnRleHQgPSAkc2FmZV9jb250ZXh0Ow0KCSRldGNfcXVlcnlfZ2xvYmFscyA9 ICRzYWZlX2dsb2JhbHM7DQoJJGV0Y19xdWVyeV9zYW5pdGl6ZSA9ICRzYWZlX3Nhbml0aXpl Ow0KCSRldGNfcXVlcnlfc3BlY2lhbHMgPSAkc2FmZV9zcGVjaWFsczsNCglyZXR1cm4oJG91 dCk7DQp9DQoNCmZ1bmN0aW9uIGV0Y19xdWVyeV9zb3J0KCYkZGF0YSwgJHNvcnQpIHsNCglw cmVnX21hdGNoKCcvXiguKikoPzpcXFsoLiopXFxdKT8kL1UnLCAkc29ydCwgJG1hdGNoZXMp Ow0KCWxpc3QoJHNvcnQsICRwYXRoLCAkZmllbGRzKSA9ICRtYXRjaGVzICsgYXJyYXkobnVs bCwgbnVsbCwgJycpOw0KCSRwYXRoID0gZG9fbGlzdCgkcGF0aCwgJy8nKTsNCgkkaXRlbSA9 ICYkZGF0YTsNCgl3aGlsZSgkcGF0aCAmJiBpc3NldCgkaXRlbVskY2h1bmsgPSBhcnJheV9z aGlmdCgkcGF0aCldKSAmJiAkY2h1bmsgIT09ICcnICYmICRjaHVuayAhPT0gJyonKSAkaXRl bSA9ICYkaXRlbVskY2h1bmtdOw0KCSRrZXlzID0gYXJyYXkoKTsNCglpZiAoJGNodW5rID09 ICcqJykgew0KCQlmb3JlYWNoKCRpdGVtIGFzICYkbm9kZSkgZXRjX3F1ZXJ5X3NvcnQoJG5v ZGUsIGltcGxvZGUoJy8nLCAkcGF0aCkuIlt7JGZpZWxkc31dIik7DQoJfSBlbHNlIGZvcmVh Y2ggKGRvX2xpc3QoJGZpZWxkcywgJ3wnKSBhcyAkZmllbGQpIHsNCgkJaWYgKCRmaWVsZCA9 PSAnPycpIHsNCgkJCSRuZXcgPSBhcnJheSgpOw0KCQkJJGlrZXlzID0gYXJyYXlfa2V5cygk aXRlbSk7DQoJCQlzaHVmZmxlKCRpa2V5cyk7DQoJCQlmb3JlYWNoKCRpa2V5cyBhcyAka2V5 KSAkbmV3WyRrZXldID0gJGl0ZW1bJGtleV07DQoJCQkkaXRlbSA9ICRuZXc7DQoJCX0gZWxz ZSB7DQoJCQlsaXN0KCRmaWVsZCwgJGRpciwgJGNtcCkgPSBwcmVnX3NwbGl0KCcvKFs8Pl0p LycsICRmaWVsZCwgLTEsIFBSRUdfU1BMSVRfREVMSU1fQ0FQVFVSRSkgKyBhcnJheSgnJywg JzwnLCAnJyk7DQoJCQkkZmxhZyA9IChzdHJwb3MoJGNtcCwgJ25hdCcpID09PSBmYWxzZSA/ IFNPUlRfU1RSSU5HIDogU09SVF9OQVRVUkFMKXwoc3RycG9zKCRjbXAsICdjYXNlJykgPT09 IGZhbHNlID8gMCA6IFNPUlRfRkxBR19DQVNFKTsNCgkJCWlmICh0cmltKCRmaWVsZCkgPT09 ICcnKSAkZGlyID09ICc8JyA/IGFzb3J0KCRpdGVtLCAkZmxhZykgOiBhcnNvcnQoJGl0ZW0s ICRmbGFnKTsNCgkJCWVsc2UgJGtleXNbXSA9IGFycmF5KCdmaWVsZCcgPT4gZXhwbG9kZSgn LycsICRmaWVsZCksICdkaXInID0+ICRkaXIsICdjbXAnID0+ICdzdHInLiRjbXAuJ2NtcCcp Ow0KCQl9DQoJfQ0KCWlmICgka2V5cykgdWFzb3J0KCRpdGVtLCBldGNfcXVlcnlfY21wKCRr ZXlzKSk7DQp9DQoNCmZ1bmN0aW9uIGV0Y19xdWVyeV9jbXAoJGtleXMgPSBhcnJheSgpKSB7 cmV0dXJuIGZ1bmN0aW9uKCRhLCAkYikgdXNlICgka2V5cykgew0KCWZvcmVhY2ggKCRrZXlz IGFzICRrZXkpIHsNCgkJJGFhID0gJGE7ICRiYiA9ICRiOw0KCQlmb3JlYWNoICgka2V5Wydm aWVsZCddIGFzICRwYXRoKSB7DQoJCQkkYWEgPSBpc3NldCgkYWFbJHBhdGhdKSA/ICRhYVsk cGF0aF0gOiBudWxsOw0KCQkJJGJiID0gaXNzZXQoJGJiWyRwYXRoXSkgPyAkYmJbJHBhdGhd IDogbnVsbDsNCgkJfQ0KCQkkcmVzID0gJGtleVsnY21wJ10oaXNfc2NhbGFyKCRhYSkgPyAk YWEgOiBudWxsLCBpc19zY2FsYXIoJGJiKSA/ICRiYiA6IG51bGwpOw0KCQkka2V5WydkaXIn XSA9PSAnPCcgb3IgJHJlcyA9IC0kcmVzOw0KCQlpZiAoJHJlcykgYnJlYWs7DQoJfQ0KCXJl dHVybiBpc3NldCgkcmVzKSA/ICRyZXMgOiAka2V5WydjbXAnXShpc19zY2FsYXIoJGEpID8g JGEgOiBudWxsLCBpc19zY2FsYXIoJGIpID8gJGIgOiBudWxsKTsNCn07fQ0KDQpmdW5jdGlv biBldGNfcXVlcnlfcmVkdWNlKCRhcnJheSkNCnsNCglpZiAoaXNfc2NhbGFyKCRhcnJheSkp IHJldHVybiAkYXJyYXk7DQoJJHJlcyA9ICcnOw0KCWZvcmVhY2goJGFycmF5IGFzICRlbHQp ICRyZXMgLj0gZXRjX3F1ZXJ5X3JlZHVjZSgkZWx0KTsNCglyZXR1cm4gJHJlczsNCn0NCg0K ZnVuY3Rpb24gZXRjX2R1bXAoJG5vZGVzID0gJycsICRlc2NhcGUgPSBudWxsKSB7DQoJaWYg KGlzX3NjYWxhcigkbm9kZXMpKSAkcmVzID0gKHN0cmluZykkbm9kZXM7DQoJZWxzZSB7DQoJ CWdsb2JhbCAkZXRjX3F1ZXJ5X2NvbnRleHQ7DQoJCSRyZXMgPSAnJzsNCgkJZm9yZWFjaCAo JG5vZGVzIGFzICRub2RlKSB7DQoJCQkkcmVzIC49ICRldGNfcXVlcnlfY29udGV4dFsneG1s J10gPyAkbm9kZS0+b3duZXJEb2N1bWVudC0+c2F2ZVhNTCgkbm9kZSkgOiAkbm9kZS0+b3du ZXJEb2N1bWVudC0+c2F2ZUhUTUwoJG5vZGUpOw0KCQl9DQoJfQ0KCXN3aXRjaChzdHJ0b2xv d2VyKCRlc2NhcGUpKSB7DQoJCWNhc2UgJ2pzb24nOiAkcmVzID0gc3Vic3RyKGpzb25fZW5j b2RlKCRyZXMsIEpTT05fVU5FU0NBUEVEX1VOSUNPREUpLCAxLCAtMSk7IGJyZWFrOw0KCQlj YXNlICdpbmknOiBjYXNlICdjc3YnOiAkcmVzID0gYWRkc2xhc2hlcygkcmVzKTsgYnJlYWs7 DQoJCWNhc2UgJ2h0bWwnOiAkcmVzID0gaHRtbHNwZWNpYWxjaGFycygkcmVzKTsgYnJlYWs7 DQoJCWNhc2UgJ3VybCc6ICRyZXMgPSB1cmxlbmNvZGUoJHJlcyk7IGJyZWFrOw0KCQljYXNl ICdzcWwnOiAkcmVzID0gc2FmZV9lc2NhcGUoJHJlcyk7IGJyZWFrOw0KCX0NCglyZXR1cm4g JHJlczsNCn0NCg0KaWYoIWRlZmluZWQoJ0VUQ19QUkVHX1NQRUMnKSkgZGVmaW5lKCdFVENf UFJFR19TUEVDJywgJy8oPzwhXHspKFx7Wz8hXSg/Pltee31dfCg/MSkpK1x9KS9VJyk7Ijtz OjQ6InR5cGUiO3M6MToiMCI7czo1OiJvcmRlciI7czoxOiI1IjtzOjU6ImZsYWdzIjtzOjE6 IjAiO3M6NDoiaGVscCI7czowOiIiO3M6MzoibWQ1IjtzOjMyOiJlMWE4NTA0NGUyNzAxMGQw NGJkMmY0NTlkMTg3MThiOCI7fQ==