# Name: etc_search v0.9.5 # Type: Admin/Public plugin # Search in any table(s) # Author: Oleg Loukianov # URL: http://www.iut-fbleau.fr/projet/etc/ # Recommended load order: 7 # ..................................................................... # This is a plugin for Textpattern CMS - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjEwOiJldGNfc2VhcmNoIjtzOjY6ImF1dGhvciI7czoxNDoi T2xlZyBMb3VraWFub3YiO3M6MTA6ImF1dGhvcl91cmkiO3M6MzY6Imh0dHA6Ly93d3cuaXV0 LWZibGVhdS5mci9wcm9qZXQvZXRjLyI7czo3OiJ2ZXJzaW9uIjtzOjU6IjAuOS41IjtzOjEx OiJkZXNjcmlwdGlvbiI7czoyMjoiU2VhcmNoIGluIGFueSB0YWJsZShzKSI7czo0OiJjb2Rl IjtzOjI0OTE4OiIvLyBUWFAgNC42IHRhZyByZWdpc3RyYXRpb24NCmlmIChjbGFzc19leGlz dHMoJ1xUZXh0cGF0dGVyblxUYWdcUmVnaXN0cnknKSkgew0KCVR4cDo6Z2V0KCdcVGV4dHBh dHRlcm5cVGFnXFJlZ2lzdHJ5JykNCgkJLT5yZWdpc3RlcignZXRjX3NlYXJjaCcpDQoJCS0+ cmVnaXN0ZXIoJ2V0Y19zZWFyY2hfcmVzdWx0cycpDQoJCS0+cmVnaXN0ZXIoJ2V0Y19zZWFy Y2hfcmVzdWx0X2V4Y2VycHQnKQ0KCQktPnJlZ2lzdGVyKCdldGNfc2VhcmNoX3Jlc3VsdF9j b3VudCcpDQoJCS0+cmVnaXN0ZXIoJ2V0Y19zZWFyY2hfcmVzdWx0X2NvdW50JywgJ3NlYXJj aF9yZXN1bHRfY291bnQnKQ0KCTsNCn0NCg0KaWYoQHR4cGludGVyZmFjZSA9PSAnYWRtaW4n KSB7DQoJYWRkX3ByaXZzKCdldGNfc2VhcmNoJywgJzEsMicpOw0KCXJlZ2lzdGVyX3RhYigi ZXh0ZW5zaW9ucyIsICJldGNfc2VhcmNoIiwgIlNlYXJjaCBzZXR0aW5ncyIpOw0KCXJlZ2lz dGVyX2NhbGxiYWNrKCJldGNfc2VhcmNoX3RhYiIsICJldGNfc2VhcmNoIik7DQoJYWRkX3By aXZzKCdwbHVnaW5fcHJlZnMuZXRjX3NlYXJjaCcsJzEsMicpOw0KCXJlZ2lzdGVyX2NhbGxi YWNrKCdldGNfc2VhcmNoX3RhYicsICdwbHVnaW5fcHJlZnMuZXRjX3NlYXJjaCcpOw0KCXJl Z2lzdGVyX2NhbGxiYWNrKCdldGNfc2VhcmNoX2luc3RhbGwnLCAncGx1Z2luX2xpZmVjeWNs ZS5ldGNfc2VhcmNoJyk7DQp9DQplbHNlaWYoZ3BzKCdldGNfc2VhcmNoJykgIT09ICcnKSB7 DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ2V0Y19zZWFyY2hfdGVybScsICdwcmV0ZXh0X2VuZCcp Ow0KCWlmKHBzKCdldGNfc2VhcmNoJykgIT09ICcnKSByZWdpc3Rlcl9jYWxsYmFjaygnZXRj X3NlYXJjaF9jYWxsYmFjaycsICdsb2dfaGl0Jyk7DQp9DQoNCmZ1bmN0aW9uIGV0Y19zZWFy Y2hfaW5zdGFsbCgkZXZlbnQ9JycsICRzdGVwPScnKQ0Kew0KCWlmKCRzdGVwID09ICdkZWxl dGVkJykgew0KCQlzYWZlX2RlbGV0ZSgndHhwX3ByZWZzJywgIm5hbWUgTElLRSAnZXRjXF9z ZWFyY2hcXyUnIik7DQoJCXNhZmVfZGVsZXRlKCJ0eHBfZm9ybSIsICJuYW1lID0gJ2V0Y19z ZWFyY2hfcmVzdWx0cyciKTsNCgkJc2FmZV9xdWVyeSgnRFJPUCBUQUJMRSBJRiBFWElTVFMg Jy5zYWZlX3BmeCgnZXRjX3NlYXJjaCcpKTsNCgkJcmV0dXJuOw0KCX0NCglpZigkc3RlcCA9 PSAnZW5hYmxlZCcpIHsNCgkJaWYoIWdldF9wcmVmKCdldGNfc2VhcmNoX2hhc2gnKSkgDQoJ CQlzZXRfcHJlZignZXRjX3NlYXJjaF9oYXNoJywgdW5pcWlkKCcnLCB0cnVlKSwgJ2V0Y19z ZWFyY2gnLCBQUkVGX0hJRERFTik7DQoJCWlmKCFnZXRfcHJlZignZXRjX3NlYXJjaF9vcHMn KSkgDQoJCQlzZXRfcHJlZignZXRjX3NlYXJjaF9vcHMnLCAneyJOT1QiOiItIiwiQU5EIjoi ICIsIk9SIjoiLCJ9JywgJ2V0Y19zZWFyY2gnLCBQUkVGX0hJRERFTik7DQoJCWlmKCFzYWZl X2NvdW50KCd0eHBfZm9ybScsICJuYW1lID0gJ2V0Y19zZWFyY2hfcmVzdWx0cycgQU5EIHR5 cGUgPSAnYXJ0aWNsZSciKSkNCgkJCXNhZmVfaW5zZXJ0KCJ0eHBfZm9ybSIsICJuYW1lID0g J2V0Y19zZWFyY2hfcmVzdWx0cycsIHR5cGUgPSAnYXJ0aWNsZScsIEZvcm0gPSAnPHR4cDpw ZXJtbGluaz48dHhwOnRpdGxlIC8+PC90eHA6cGVybWxpbms+JyIpOw0KDQoJCSRxYz0iQ1JF QVRFIFRBQkxFIElGIE5PVCBFWElTVFMgIi5zYWZlX3BmeCgnZXRjX3NlYXJjaCcpLiIgKCI7 DQoJCSRxYy49IDw8PEVPRg0KCQkJYGlkYCBpbnQoNCkgTk9UIE5VTEwgQVVUT19JTkNSRU1F TlQsDQoJCQlgcXVlcnlgIHZhcmNoYXIoMjU1KSBOT1QgTlVMTCwNCgkJCWBmb3JtMWAgdmFy Y2hhcig2NCkgTk9UIE5VTEwsDQoJCQlgZm9ybTJgIHZhcmNoYXIoNjQpIE5PVCBOVUxMLA0K CQkJYHRoaW5nMWAgdGV4dCBOT1QgTlVMTCwNCgkJCWB0aGluZzJgIHRleHQgTk9UIE5VTEws DQoJCQlgdHlwZWAgZW51bSgnYXJ0aWNsZScsJ2ltYWdlJywnZmlsZScsJ2xpbmsnLCdjYXRl Z29yeScsJ3NlY3Rpb24nKSBOT1QgTlVMTCwNCgkJCVBSSU1BUlkgS0VZIChgaWRgKQ0KCQkJ KSBFTkdJTkU9TXlJU0FNIENIQVJBQ1RFUiBTRVQ9dXRmOCA7DQpFT0Y7DQoJCXNhZmVfcXVl cnkoJHFjKTsNCgkJc2FmZV9hbHRlcignZXRjX3NlYXJjaCcsICJNT0RJRlkgYHR5cGVgIGVu dW0oJ2FydGljbGUnLCdpbWFnZScsJ2ZpbGUnLCdsaW5rJywnY2F0ZWdvcnknLCdzZWN0aW9u JykgTk9UIE5VTEwiKTsNCgkJcmV0dXJuOw0KCX0NCn0NCg0KZnVuY3Rpb24gZXRjX3NlYXJj aF90YWIoJGV2ZW50LCAkc3RlcCkgew0KCWdsb2JhbCAkcHJlZnM7DQoJJGlkID0gaW50dmFs KGdwcygnaWQnKSk7DQoJaWYoJHN0ZXAgJiYgYm91bmNlcigkc3RlcCwgYXJyYXkoJ3NhdmUn PT50cnVlLCAnb3BzJz0+dHJ1ZSkpKSBpZigkc3RlcCA9PSAnc2F2ZScpIHN3aXRjaChncHMo J3NhdmUnKSkgew0KCQljYXNlICdTYXZlJyA6IHNhZmVfdXBzZXJ0KCdldGNfc2VhcmNoJywN CgkJCSJxdWVyeT0nIi5kb1NsYXNoKGdwcygncXVlcnknKSkuIicsDQoJCQlmb3JtMT0nIi5k b1NsYXNoKGdwcygnZm9ybTEnKSkuIicsDQoJCQlmb3JtMj0nIi5kb1NsYXNoKGdwcygnZm9y bTInKSkuIicsDQoJCQl0aGluZzE9JyIuZG9TbGFzaChncHMoJ3RoaW5nMScpKS4iJywNCgkJ CXRoaW5nMj0nIi5kb1NsYXNoKGdwcygndGhpbmcyJykpLiInLA0KCQkJdHlwZT0nIi5kb1Ns YXNoKGdwcygndHlwZScpKS4iJyIsDQoJCQkiaWQ9Ii4kaWQpOw0KCQkJJG9wcyA9IGdwcygn ZXRjX29wc18nLiRpZCk7DQoJCQlpZighJGlkKSAkaWQgPSBpbnR2YWwoZ2V0VGhpbmcoJ1NF TEVDVCBMQVNUX0lOU0VSVF9JRCgpJykpOw0KCQkJaWYoJG9wcyA9PT0gJycpIHtzYWZlX2Rl bGV0ZSgndHhwX3ByZWZzJywgIm5hbWU9J2V0Y19zZWFyY2hfb3BzXyRpZCciKTsgJHByZWZz WydldGNfc2VhcmNoX29wc18nLiRpZF0gPSAnJzt9DQoJCQllbHNlIHNldF9wcmVmKCdldGNf c2VhcmNoX29wc18nLiRpZCwgJHByZWZzWydldGNfc2VhcmNoX29wc18nLiRpZF0gPSBncHMo J2V0Y19vcHNfJy4kaWQpLCAnZXRjX3NlYXJjaCcsIFBSRUZfSElEREVOKTsNCgkJYnJlYWs7 DQoJCWNhc2UgJ0RlbGV0ZScgOiBzYWZlX2RlbGV0ZSgnZXRjX3NlYXJjaCcsICJpZD0kaWQi KTsgc2FmZV9kZWxldGUoJ3R4cF9wcmVmcycsICJuYW1lPSdldGNfc2VhcmNoX29wc18kaWQn Iik7DQoJCWJyZWFrOw0KCX0gZWxzZWlmKCRzdGVwID09ICdvcHMnKSB7DQoJCQlzZXRfcHJl ZignZXRjX3NlYXJjaF9vcHMnLCAkcHJlZnNbJ2V0Y19zZWFyY2hfb3BzJ10gPSBncHMoJ2V0 Y19vcHMnKSwgJ2V0Y19zZWFyY2gnLCBQUkVGX0hJRERFTik7DQoJCX0NCg0KCSRvcHMgPSBn ZXRfcHJlZignZXRjX3NlYXJjaF9vcHMnKTsNCg0KCSRycyA9IHNhZmVfcm93cygnKicsICdl dGNfc2VhcmNoJywgJzEnKTsNCglwYWdldG9wKCJldGNfc2VhcmNoIiwgIjxzdHJvbmc+ZXRj X3NlYXJjaDwvc3Ryb25nPiBwcmVmZXJlbmNlcyIpOw0KDQoJZWNobyAnPHN0eWxlPi5ldGMt c2VhcmNoLWZvcm0gaW5wdXRbdHlwZT0idGV4dCJde3dpZHRoOjEwMCV9DQoJCS5ldGMtdHdv LWNvbHVtbnt3aWR0aDoxMDAlO2JvcmRlci1zcGFjaW5nOjFlbSAwO2JvcmRlci1jb2xsYXBz ZTpzZXBhcmF0ZTt9DQoJCS5ldGMtc2VhcmNoLWZvcm17cGFkZGluZzowIDFlbTt9DQoJPC9z dHlsZT4nOw0KCWVjaG8gJzxoMT5ldGNfc2VhcmNoIHNldHVwPC9oMT4nLm47DQoNCgllY2hv ICc8aDI+U2VhcmNoIHNldHRpbmdzPC9oMj4nLm47DQoJZWNobyAnPGRpdiBjbGFzcz0ic3Vt bWFyeS1kZXRhaWxzIj48aDMgY2xhc3M9ImxldmVyIHR4cC1zdW1tYXJ5Ij48YSBocmVmPSIj ZXRjLWxvZ2ljIj5Mb2dpY2FsIG9wZXJhdG9yczwvYT48L2gzPicubjsNCgllY2hvICc8Zm9y bSBpZD0iZXRjLWxvZ2ljIiBjbGFzcz0iZXRjLXNlYXJjaC1mb3JtIiBhY3Rpb249Ij9ldmVu dD1ldGNfc2VhcmNoJnN0ZXA9b3BzIiBtZXRob2Q9InBvc3QiPicsIG4sICc8cD48bGFiZWwg Zm9yPSJvcHMiPkpTT04tZW5jb2RlZCBvYmplY3QgKGhhbmRsZSB3aXRoIGNhcmUpPC9sYWJl bD48YnIgLz4nLCBmSW5wdXQoJ3RleHQnLCAnZXRjX29wcycsICRvcHMpLCB0SW5wdXQoKSwg c0lucHV0KCdvcHMnKSwgJzwvcD48cD4nLCBmSW5wdXQoJ3N1Ym1pdCcsICdzYXZlJywgJ1Nh dmUnLCAncHVibGlzaCcpLCBuLCAnPC9wPjwvZm9ybT48L2Rpdj4nLCBuOw0KDQoJZWNobyAn PGgyPlNlYXJjaCBmb3JtczwvaDI+Jy5uLic8ZGl2IGNsYXNzPSJzdW1tYXJ5LWRldGFpbHMi PicubjsNCglmb3JlYWNoKCRycyBhcyAkcm93KSBlY2hvIGV0Y19zZWFyY2hfZm9ybShkb1Nw ZWNpYWwoJHJvdykpOw0KCWVjaG8gZXRjX3NlYXJjaF9mb3JtKGFycmF5KCdpZCc9PjAsICdx dWVyeSc9PicnLCAnZm9ybTEnPT4nJywgJ2Zvcm0yJz0+JycsICd0aGluZzEnPT4nJywgJ3Ro aW5nMic9PicnLCAndHlwZSc9PicnKSkubi4nPC9kaXY+JzsNCg0KCWVjaG8gJzxzY3JpcHQ+ JChmdW5jdGlvbiAoKSB7DQoJCSQoIi5sZXZlciBhW2hyZWYhPScsIicjZXRjLWZvcm0tIi5p bnR2YWwoZ3BzKCdpZCcpKS4iJyIsICddIikudHJpZ2dlcigiY2xpY2siKTsNCgl9KTs8L3Nj cmlwdD4nOw0KfQ0KDQpmdW5jdGlvbiBldGNfc2VhcmNoX2Zvcm0oJHJvdykgew0KCWdsb2Jh bCAkcHJlZnM7DQoJaWYoISgkc2VhcmNoX2ZpZWxkcyA9ICRwcmVmc1snc2VhcmNoYWJsZV9h cnRpY2xlX2ZpZWxkcyddKSkgJHNlYXJjaF9maWVsZHMgPSAnVGl0bGUsQm9keSc7DQoJJGNv bnRleHQgPSBhcnJheSgpOw0KCWVjaG8gJzxoMyBjbGFzcz0ibGV2ZXIgdHhwLXN1bW1hcnki PjxhIGhyZWY9IiNldGMtZm9ybS0nLiRyb3dbJ2lkJ10uJyI+JywgKCRyb3dbJ2lkJ10gPyAn U2VhcmNoIGZvcm0gJy4kcm93WydpZCddIDogJ05ldyBzZWFyY2ggZm9ybScpLCAnPC9hPjwv aDM+JywgbjsNCgllY2hvICc8Zm9ybSBpZD0iZXRjLWZvcm0tJy4kcm93WydpZCddLiciIGNs YXNzPSJldGMtc2VhcmNoLWZvcm0iIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9ZXRj X3NlYXJjaCInLCAoJHJvd1snaWQnXSA/ICcgZGF0YS1pZD0iJy4kcm93WydpZCddLiciJyA6 ICcnKSwgJz4nLCBuOw0KCWVjaG8gJzxwPjxsYWJlbD5jb250ZXh0PC9sYWJlbD48YnIgLz4n LCAvKmltcGxvZGUoJyZuYnNwOyZuYnNwOyAnLCAkY29udGV4dCkqLyANCglyYWRpb1NldChh cnJheSgnYXJ0aWNsZSc9PmdUeHQoJ2FydGljbGVfY29udGV4dCcpLCAnaW1hZ2UnPT5nVHh0 KCdpbWFnZV9jb250ZXh0JyksICdmaWxlJz0+Z1R4dCgnZmlsZV9jb250ZXh0JyksICdsaW5r Jz0+Z1R4dCgnbGlua19jb250ZXh0JyksICdjYXRlZ29yeSc9PmdUeHQoJ2NhdGVnb3J5Jyks ICdzZWN0aW9uJz0+Z1R4dCgnc2VjdGlvbicpLCAnJz0+J2N1c3RvbScpLCAndHlwZScsICRy b3dbJ3R5cGUnXSwgJycsICdldGMtJy4kcm93WydpZCddKSwgJzwvcD4nLCBuOw0KCWVjaG8g JzxwPjxsYWJlbD5xdWVyeTwvbGFiZWw+PGJyIC8+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9 InF1ZXJ5IiB2YWx1ZT0iJywgJHJvd1sncXVlcnknXSwgJyIgcGxhY2Vob2xkZXI9InsnLCAk c2VhcmNoX2ZpZWxkcywgJ30iIC8+PC9wPicsIG47DQoJZWNobyAnPHA+PGxhYmVsPmxvZ2lj YWwgb3BlcmF0b3JzIChKU09OLWVuY29kZWQpPC9sYWJlbD48YnIgLz48aW5wdXQgdHlwZT0i dGV4dCIgbmFtZT0iZXRjX29wc18nLCRyb3dbJ2lkJ10sJyIgdmFsdWU9IicsICRyb3dbJ2lk J10gPyBkb1NwZWNpYWwoZ2V0X3ByZWYoJ2V0Y19zZWFyY2hfb3BzXycuJHJvd1snaWQnXSkp IDogJycsICciIHBsYWNlaG9sZGVyPSInLGRvU3BlY2lhbChnZXRfcHJlZignZXRjX3NlYXJj aF9vcHMnKSksJyIgLz48L3A+JywgbjsNCgllY2hvICc8dGFibGUgY2xhc3M9ImV0Yy10d28t Y29sdW1uIj48dHI+JywgbjsNCgllY2hvICc8dGQ+PGZpZWxkc2V0PjxsZWdlbmQ+TGl2ZSBz ZWFyY2g8L2xlZ2VuZD4nLCBuOw0KCWVjaG8gJzxwPjxsYWJlbD5mb3JtPC9sYWJlbD48YnIg Lz48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZm9ybTEiIHZhbHVlPSInLCAkcm93Wydmb3Jt MSddLCAnIiBwbGFjZWhvbGRlcj0iZXRjX3NlYXJjaF9yZXN1bHRzIiAvPjwvcD4nLCBuOw0K CWVjaG8gJzxwPjxsYWJlbD5vciBjb250ZW50PC9sYWJlbD48YnIgLz48dGV4dGFyZWEgbmFt ZT0idGhpbmcxIiBzcGVsbGNoZWNrPSJmYWxzZSI+JywgJHJvd1sndGhpbmcxJ10sICc8L3Rl eHRhcmVhPjwvcD4nLCBuOw0KCWVjaG8gJzwvZmllbGRzZXQ+PC90ZD4nLCBuOw0KCWVjaG8g Jzx0ZD48ZmllbGRzZXQ+PGxlZ2VuZD5TdGF0aWMgc2VhcmNoPC9sZWdlbmQ+JywgbjsNCgll Y2hvICc8cD48bGFiZWw+Zm9ybTwvbGFiZWw+PGJyIC8+PGlucHV0IHR5cGU9InRleHQiIG5h bWU9ImZvcm0yIiB2YWx1ZT0iJywgJHJvd1snZm9ybTInXSwgJyIgcGxhY2Vob2xkZXI9InNl YXJjaF9yZXN1bHRzIiAvPjwvcD4nLCBuOw0KCWVjaG8gJzxwPjxsYWJlbD5vciBjb250ZW50 PC9sYWJlbD48YnIgLz48dGV4dGFyZWEgbmFtZT0idGhpbmcyIiBzcGVsbGNoZWNrPSJmYWxz ZSI+JywgJHJvd1sndGhpbmcyJ10sICc8L3RleHRhcmVhPjwvcD4nLCBuOw0KCWVjaG8gJzwv ZmllbGRzZXQ+PC90ZD4nLCBuLCAnPC90cj48L3RhYmxlPicsIG47DQoJZWNobyAnPHA+Jywg c0lucHV0KCdzYXZlJyksIGhJbnB1dCgnaWQnLCAkcm93WydpZCddKSwgdElucHV0KCksIGZJ bnB1dCgnc3VibWl0JywgJ3NhdmUnLCAnU2F2ZScsICdwdWJsaXNoJyksICgkcm93WydpZCdd ID8gZklucHV0KCdzdWJtaXQnLCAnc2F2ZScsICdEZWxldGUnLCAncHVibGlzaCcpIDogJycp LCAnPC9wPicsIG47DQoJZWNobyAnPC9mb3JtPic7DQp9DQoNCmZ1bmN0aW9uIGV0Y19zZWFy Y2hfcGFyc2UoJHN0cmluZywgJHBhdHRlcm4sICYkbWF0Y2hlcywgJG9wZW4gPSAnJywgJGNs b3NlID0gJycsICRyZXBsYWNlID0gYXJyYXkoKSkNCnsNCglpZighJHN0cmluZyB8fCAhJHBh dHRlcm4pIHJldHVybiAkc3RyaW5nOw0KCSRtYXRjaGVzID0gYXJyYXkoKTsNCgkkc3RyaW5n ID0gcHJlZ19zcGxpdCgkcGF0dGVybiwgJHN0cmluZywgbnVsbCwgUFJFR19TUExJVF9ERUxJ TV9DQVBUVVJFKTsNCglpZigoJGNvdW50ID0gY291bnQoJHN0cmluZykpID4gMSkgZm9yKCRp ID0gMTsgJGkgPCAkY291bnQ7ICRpICs9IDIpIHsNCgkJJG1hdGNoZXNbJG9wZW4uJGkuJGNs b3NlXSA9ICRyZXBsYWNlID8gc3RydHIoJHN0cmluZ1skaV0sICRyZXBsYWNlKSA6ICRzdHJp bmdbJGldOw0KCQkkc3RyaW5nWyRpXSA9ICRvcGVuLiRpLiRjbG9zZTsNCgl9DQoJcmV0dXJu IGltcGxvZGUoJycsICRzdHJpbmcpOw0KfQ0KDQpmdW5jdGlvbiBldGNfc2VhcmNoX3F1ZXJ5 KCRzdHJpbmcsICRmaWVsZHMsICRvcHM9bnVsbCkNCnsNCglpZighJGZpZWxkcyB8fCAkc3Ry aW5nID09PSAnJykgcmV0dXJuICcxJzsNCglnbG9iYWwgJGV0Y19zZWFyY2hfb3BzLCAkZXRj X3NlYXJjaF9uZWcsICRldGNfc2VhcmNoX21hdGNoX3F1ZXJ5Ow0KCSR3aGVyZSA9IGFycmF5 KCk7DQoJaWYoISRvcHMgfHwgIWlzX2FycmF5KCRvcHMpKSB7DQoJCSRwYXR0ZXJucyA9IGRv X2xpc3QoJGZpZWxkcywgJzsnKTsNCgkJJGZpZWxkcyA9IGFycmF5KCk7DQoJCSRub3QgPSBm YWxzZTsNCgkJd2hpbGUoJHN0cmluZyAmJiAkc3RyaW5nWzBdPT0kZXRjX3NlYXJjaF9uZWcp IHskbm90ID0gISRub3Q7ICRzdHJpbmc9c3Vic3RyKCRzdHJpbmcsIDEpO30NCgkJaWYocHJl Z19tYXRjaCgnL15cW1wiXGQqXCJcXSQvJywgJHN0cmluZykpIHJldHVybiAkbm90ID8gIigg Tk9UICRzdHJpbmcgKSIgOiAkc3RyaW5nOw0KCQkkc3RyaW5nID0gc3RyX3JlcGxhY2UoJ3sq fScsICd7eyp9fScsICRzdHJpbmcpOw0KCQlpZigkc3RyaW5nID4gJycpIGZvcmVhY2goJHBh dHRlcm5zIGFzICRwYXR0ZXJuKSB7DQoJCQl1bnNldCgkZmxkcywgJHBhdCwgJGNvbmQpOw0K CQkJJGl0ZW1zID0gZXhwbG9kZSgnOjonLCAkcGF0dGVybik7IC8vKyBhcnJheShudWxsLCBu dWxsLCBudWxsKQ0KCQkJaWYoY291bnQoJGl0ZW1zKSA9PSAzKSBsaXN0KCRmbGRzLCAkcGF0 LCAkY29uZCkgPSAkaXRlbXM7DQoJCQllbHNlIGZvcmVhY2goJGl0ZW1zIGFzICRpdGVtKSB7 DQoJCQkJaWYoJGl0ZW0gJiYgJGl0ZW1bMF0gPT09ICcvJykgJHBhdCA9ICRpdGVtOw0KCQkJ CWVsc2VpZihwcmVnX21hdGNoKCcvXlxzKltcd1wuXStccyooPzosXHMqW1x3XC5dK1xzKikq JC8nLCAkaXRlbSkpICRmbGRzID0gJGl0ZW07DQoJCQkJZWxzZSAkY29uZCA9ICRpdGVtOw0K CQkJfQ0KCQkJaWYoZW1wdHkoJHBhdCkpICRwYXQgPSAnL14uKyQvcyc7DQoJCQlpZihwcmVn X21hdGNoKCRwYXQsICRzdHJpbmcsICRtYXRjaCkpIHsNCgkJCQlpZihlbXB0eSgkZmxkcykg JiYgIWlzc2V0KCRjb25kKSkgcmV0dXJuICRzdHJpbmc7DQoJCQkJaWYoIWlzc2V0KCRjb25k KSkgJGZpZWxkc1tdID0gYXJyYXkoJGZsZHMsICJ7Kn0gTElLRSAnJSRzdHJpbmclJyIpOw0K CQkJCWVsc2UgJGZpZWxkc1tdID0gYXJyYXkoZW1wdHkoJGZsZHMpID8gJ05VTEwnIDogJGZs ZHMsIHByZWdfcmVwbGFjZSgkcGF0LCAkY29uZCwgJG1hdGNoWzBdKSk7DQoJCQl9DQoJCX0N CgkJaWYoISRmaWVsZHMpIHJldHVybiAnMCc7DQoJCWVsc2UgJGV0Y19zZWFyY2hfbWF0Y2hf cXVlcnkgPSB0cnVlOyANCgkJZm9yZWFjaCgkZmllbGRzIGFzICRmbGlzdCkgew0KCQkJJHdo ciA9IGFycmF5KCk7DQoJCQkkZmxkcyA9IHN0cnBvcygkZmxpc3RbMF0sICcoJykgIT09IGZh bHNlID8gcHJlZ19zcGxpdCgnLyhbXlwoXClcLF0qKD86XCgoPzpbXlwoXCldfCg/MSkpKlwp KT8pKD86XCx8JCkvJywgJGZsaXN0WzBdLCBudWxsLCBQUkVHX1NQTElUX0RFTElNX0NBUFRV UkUgfCBQUkVHX1NQTElUX05PX0VNUFRZKSA6IGRvX2xpc3QoJGZsaXN0WzBdKTsNCgkJCWZv cmVhY2goJGZsZHMgYXMgJGZpZWxkKSAkd2hyW10gPSAnKCcuc3RydHIoJGZsaXN0WzFdLCBh cnJheSgne3sqfX0nID0+ICd7Kn0nLCAneyp9JyA9PiAkZmllbGQpICkuJyknOw0KCQkJJHdo ZXJlW10gPSBpbXBsb2RlKCIgT1IgIiwgJHdocik7DQoJCX0NCgkJJHdoZXJlID0gJyggJy5p bXBsb2RlKCcgT1IgJywgJHdoZXJlKS4nICknOw0KCQlyZXR1cm4gKCRub3QgPyAiKCBOT1Qg JHdoZXJlICkiIDogJHdoZXJlKTsNCgl9DQoNCglAbGlzdCgkc2VwLCAkb3ApID0gYXJyYXko ZW5kKCRvcHMpLCBrZXkoJG9wcykpOw0KCXVuc2V0KCRvcHNbJG9wXSk7DQoNCgkkcXVvdGVz ID0gJGJyYWNlcyA9IGFycmF5KCk7DQoJaWYoc3RycG9zKCRzdHJpbmcsICdcIicpICE9PSBm YWxzZSkgJHN0cmluZyA9IGV0Y19zZWFyY2hfcGFyc2UoJHN0cmluZywgJy9cXFwiKC4qKVxc XCIvVXMnLCAkcXVvdGVzLCAnfCInLCAnInwnKTsNCglpZihzdHJwb3MoJHN0cmluZywgJygn KSAhPT0gZmFsc2UpICRzdHJpbmcgPSBldGNfc2VhcmNoX3BhcnNlKCRzdHJpbmcsICcvXCgo KD86W14oKV18KD8wKSkqKVwpL1UnLCAkYnJhY2VzLCAnWyInLCAnIl0nKTsNCglmb3JlYWNo KGRvX2xpc3QoJHN0cmluZywgJHNlcCkgYXMgJHZhbHVlKSBpZihzdHJsZW4oJHZhbHVlKSA+ IDApDQoJCSR3aGVyZVtdID0gZXRjX3NlYXJjaF9xdWVyeSgkdmFsdWUsICRmaWVsZHMsICRv cHMpOw0KCWZvcmVhY2goJGJyYWNlcyBhcyAmJHZhbHVlKSAkdmFsdWUgPSBldGNfc2VhcmNo X3F1ZXJ5KCR2YWx1ZSwgJGZpZWxkcywgJGV0Y19zZWFyY2hfb3BzKTsNCgl1bnNldCgkdmFs dWUpOw0KDQoJc3dpdGNoIChjb3VudCgkd2hlcmUpKSB7DQoJCWNhc2UgMDogcmV0dXJuICcw JzsNCgkJY2FzZSAxOiByZXR1cm4gc3RydHIoc3RydHIoJHdoZXJlWzBdLCAkYnJhY2VzKSwg JHF1b3Rlcyk7DQoJCWRlZmF1bHQ6IHJldHVybiAnKCAnLnN0cnRyKHN0cnRyKGltcGxvZGUo IiAkb3AgIiwgJHdoZXJlKSwgJGJyYWNlcyksICRxdW90ZXMpLicgKSc7DQoJfQ0KfQ0KDQpm dW5jdGlvbiBldGNfc2VhcmNoX2dldF9yZXN1bHRzKCRwYXJhbXMsICRsaXZlPXRydWUpDQp7 DQoJZ2xvYmFsICRwcmVmcywgJHByZXRleHQsICR0aGlzYXJ0aWNsZSwgJHRoaXNwYWdlLCAk dGhpc2ltYWdlLCAkdGhpc2xpbmssICR0aGlzZmlsZSwgJHRoaXNjYXRlZ29yeSwgJHRoaXNz ZWN0aW9uLCAkZXRjX3BhZ2VfY291bnRlciwgJGV0Y19zZWFyY2hfbmVnLCAkZXRjX3NlYXJj aF9vcHMsICRldGNfc2VhcmNoX2Zvcm1zLCAkZXRjX3NlYXJjaF9tYXRjaCwgJGV0Y19zZWFy Y2hfbWF0Y2hfcXVlcnk7DQoNCglpZighKCRzZWFyY2hfZmllbGRzID0gJHByZWZzWydzZWFy Y2hhYmxlX2FydGljbGVfZmllbGRzJ10pKSAkc2VhcmNoX2ZpZWxkcyA9ICdUaXRsZSxCb2R5 JzsNCgkkc2FmZV9zZWFyY2hfZmllbGRzID0gJ2AnLmltcGxvZGUoJ2AsYCcsIGRvX2xpc3Qo JHNlYXJjaF9maWVsZHMpKS4nYCc7DQoNCgkkcHJldGV4dF9xID0gJHByZXRleHRbJ3EnXTsN CgkkcSA9ICRwcmV0ZXh0WydxJ10gPSAkcGFyYW1zWydxJ107DQoJJG1heCA9ICRuZXdtYXgg PSBtYXgoaW50dmFsKCRwYXJhbXNbJ2V0Y19saW1pdCddKSwgMCk7DQoJJHBnID0gbWF4KGlu dHZhbCgkcHJldGV4dFsncGcnXSksIDEpOw0KCSRvZmZzZXQgPSAoJHBnIC0gMSkqJG1heDsN CgkkbyA9IGFycmF5KCk7DQoJJG1hdGNoZWQgPSBmYWxzZTsNCgkkcmMgPSAkbGltX2l0ID0g MDsNCgkkZXRjX3NlYXJjaF9vcHMgPSBncHMoJ20nKSA9PT0gJ2V4YWN0JyA/IG51bGwgOiBn ZXRfcHJlZignZXRjX3NlYXJjaF9vcHMnKTsNCg0KCWZvcmVhY2goJHBhcmFtc1snZXRjX3Nl YXJjaCddIGFzICRpZCkgew0KCQlpZihpc3NldCgkZXRjX3NlYXJjaF9vcHMpKSB7DQoJCQlp ZigkaWQpICRldGNfc2VhcmNoX29wcyA9IGdldF9wcmVmKCdldGNfc2VhcmNoX29wc18nLiRp ZCk7DQoJCQkkZXRjX3NlYXJjaF9vcHMgPSBqc29uX2RlY29kZSgkZXRjX3NlYXJjaF9vcHMg PT09ICcnID8gZ2V0X3ByZWYoJ2V0Y19zZWFyY2hfb3BzJykgOiAkZXRjX3NlYXJjaF9vcHMs IHRydWUpOw0KCQl9DQoJCWlmKGlzc2V0KCRldGNfc2VhcmNoX29wc1snTk9UJ10pKSB7JGV0 Y19zZWFyY2hfbmVnID0gJGV0Y19zZWFyY2hfb3BzWydOT1QnXTsgdW5zZXQoJGV0Y19zZWFy Y2hfb3BzWydOT1QnXSk7fQ0KCQllbHNlICRldGNfc2VhcmNoX25lZyA9ICcnOw0KDQoJCXVu c2V0KCR0aGlzX2FydGljbGUsICR0aGlzX2ltYWdlLCAkdGhpc19maWxlLCAkdGhpc19saW5r KTsNCgkJaWYoJGlkKSB7DQoJCQkJaWYoaXNzZXQoJGV0Y19zZWFyY2hfZm9ybXNbJGlkXSkp ICRyb3cgPSAkZXRjX3NlYXJjaF9mb3Jtc1skaWRdOw0KCQkJCWVsc2UgJHJvdyA9ICRldGNf c2VhcmNoX2Zvcm1zWyRpZF0gPSBzYWZlX3JvdygncXVlcnksIGZvcm0xLCBmb3JtMiwgdGhp bmcxLCB0aGluZzIsIHR5cGUnLCAnZXRjX3NlYXJjaCcsICJpZD0kaWQiKTsNCgkJCQlpZihl bXB0eSgkcm93KSkgY29udGludWU7DQoJCX0NCgkJZWxzZSAkcm93ID0gYXJyYXkoJ3F1ZXJ5 Jz0+JycsICdmb3JtMSc9PicnLCAnZm9ybTInPT4nJywgJ3RoaW5nMSc9PicnLCAndGhpbmcy Jz0+JycsICd0eXBlJz0+J2FydGljbGUnKTsNCgkJZXh0cmFjdCgkcm93KTsNCgkJDQoJCWlm KCFlbXB0eSgkcGFyYW1zWydldGNfZiddKSkgJGZvcm0gPSAkcGFyYW1zWydldGNfZiddOw0K CQllbHNlICRmb3JtID0gJGxpdmUgPyAoJGZvcm0xID8gJGZvcm0xIDogJ2V0Y19zZWFyY2hf cmVzdWx0cycpIDogKCRmb3JtMiA/ICRmb3JtMiA6ICdzZWFyY2hfcmVzdWx0cycpOw0KCQlp ZighZW1wdHkoJHBhcmFtc1snZXRjX3QnXSkpICR0aGluZyA9ICRwYXJhbXNbJ2V0Y190J107 DQoJCWVsc2UgJHRoaW5nID0gJGxpdmUgPyAoJHRoaW5nMSA/ICR0aGluZzEgOiBmZXRjaF9m b3JtKCRmb3JtKSkgOiAoJHRoaW5nMiA/ICR0aGluZzIgOiBmZXRjaF9mb3JtKCRmb3JtKSk7 DQoNCgkJaWYoISRxdWVyeSkgeyRxdWVyeSA9ICd7Jy4kc2VhcmNoX2ZpZWxkcy4nfSc7ICR0 eXBlID0gJ2FydGljbGUnO30NCgkJZWxzZSAkcXVlcnkgPSB0cmltKHBhcnNlKCRxdWVyeSkp Ow0KDQoJCWlmKHByZWdfbWF0Y2goJy9eKC4rKVxiKExJTUlUXHMrKFxkKylcYlxzKiw/XHMq KFxkKilcYi4qKSQvaScsICRxdWVyeSwgJG1hdGNoZXMpKSB7DQoJCQkkcXVlcnkgPSAkbWF0 Y2hlc1sxXTsgJGxpbWl0ID0gJG1hdGNoZXNbMl07DQoJCQlpZigkbWF0Y2hlc1s0XSkgeyRv ZmYgPSAkbWF0Y2hlc1szXTsgJGxpbSA9ICRtYXRjaGVzWzRdO30NCgkJCWVsc2UgeyRvZmYg PSAwOyAkbGltID0gJG1hdGNoZXNbM107fQ0KCQl9DQoJCWVsc2UgJGxpbWl0ID0gJyc7DQoN CgkJaWYoJG5ld21heCA+IDApICRsaW1faXQgPSAkbGltaXQgPyAiIExJTUlUICIuKCRvZmZz ZXQgKyAkb2ZmKS4iLCAiLm1pbigkbGltIC0gJG9mZnNldCwgJG5ld21heCkgOiAiIExJTUlU ICRvZmZzZXQsICRuZXdtYXgiOw0KCQllbHNlICRsaW1faXQgPSAnJzsNCg0KCQlpZihwcmVn X21hdGNoKCcvXiguKylcYihPUkRFUlxzK0JZXGIuKykkL1VpJywgJHF1ZXJ5LCAkbWF0Y2hl cykpIHsNCgkJCSRxdWVyeSA9ICRtYXRjaGVzWzFdOyAkb3JkZXIgPSAkbWF0Y2hlc1syXTsN CgkJfSBlbHNlICRvcmRlciA9ICcnOw0KCQkNCgkJJGV0Y19zZWFyY2hfbWF0Y2ggPSB0cnVl Ow0KCQkkZXRjX3NlYXJjaF9tYXRjaF9xdWVyeSA9IGZhbHNlOw0KCQkkcXVlcnkgPSBwcmVn X3JlcGxhY2VfY2FsbGJhY2soJy9ceygoPzpbXnt9XXwoPzApKSspXH0vVScsICdldGNfc2Vh cmNoX2dwcycsICRvbGRxdWVyeSA9ICRxdWVyeSk7DQoJCWlmKCEkZXRjX3NlYXJjaF9tYXRj aCB8fCBlbXB0eSgkcXVlcnkpIHx8ICEkZXRjX3NlYXJjaF9tYXRjaF9xdWVyeSAmJiAoJG9s ZHF1ZXJ5ICE9PSAkcXVlcnkpKSBjb250aW51ZTsNCgkJZWxzZSAkbWF0Y2hlZCA9IHRydWU7 DQoNCgkJaWYoISgkY3VzdG9tID0gcHJlZ19tYXRjaCgnL15TRUxFQ1RcYi9pJywgJHF1ZXJ5 KSkpIHN3aXRjaCgkdHlwZSkgey8vZGVmYXVsdCBzZWFyY2gNCgkJCWNhc2UgJ2ltYWdlJyA6 IGNhc2UgJ2ZpbGUnIDogY2FzZSAnbGluaycgOiBjYXNlICdjYXRlZ29yeScgOiBjYXNlICdz ZWN0aW9uJyA6DQoJCQkkdGFibGUgPSBzYWZlX3BmeCgndHhwXycuJHR5cGUpOw0KCQkJJGNv dW50ID0gJ1NFTEVDVCBDT1VOVCgqKSBGUk9NICcuJHRhYmxlLicgV0hFUkUgJy4oJHR5cGUg PT0gJ2ZpbGUnID8gJ3N0YXR1cyA+PSA0IEFORCAnIDogJycpLiRxdWVyeTsNCgkJCSRxdWVy eSA9ICdTRUxFQ1QgKiBGUk9NICcuJHRhYmxlLicgV0hFUkUgJy4oJHR5cGUgPT0gJ2ZpbGUn ID8gJ3N0YXR1cyA+PSA0IEFORCAnIDogJycpLiRxdWVyeTsNCgkJCWJyZWFrOw0KDQoJCQlk ZWZhdWx0IDoNCgkJCSRzX2ZpbHRlciA9ICcnOw0KCQkJJHJzID0gc2FmZV9jb2x1bW4oIm5h bWUiLCAidHhwX3NlY3Rpb24iLCAic2VhcmNoYWJsZSAhPSAnMSciKTsNCgkJCWlmICgkcnMp IHsNCgkJCQlmb3JlYWNoKCRycyBhcyAkbmFtZSkgJHNfZmlsdGVyIC49ICIgQU5EIFNlY3Rp b24gIT0gJyIuZG9TbGFzaCgkbmFtZSkuIiciOw0KCQkJfQ0KCQkJJHRhYmxlID0gc2FmZV9w ZngoJ3RleHRwYXR0ZXJuJyk7DQoJCQkkdHMgPSBzdHJmdGltZSgnJVktJW0tJWQgJUg6JU06 JVMnKTsNCgkJCSRjb3VudCA9ICJTRUxFQ1QgQ09VTlQoKikgRlJPTSAkdGFibGUgV0hFUkUg U3RhdHVzID49IDQgQU5EIFBvc3RlZCA8PSAnJHRzJyBBTkQgKEV4cGlyZXMgSVMgTlVMTCBP UiBFeHBpcmVzPj0nJHRzJykgJHNfZmlsdGVyIEFORCAkcXVlcnkiOw0KCQkJJHF1ZXJ5ID0g IlNFTEVDVCAqIi4oJG9yZGVyID8gJycgOiAiLCBNQVRDSCAoJHNhZmVfc2VhcmNoX2ZpZWxk cykgQUdBSU5TVCAoJyRxJykgQVMgc2NvcmUiKS4iIEZST00gJHRhYmxlIFdIRVJFIFN0YXR1 cyA+PSA0IEFORCBQb3N0ZWQgPD0gJyR0cycgQU5EIChFeHBpcmVzIElTIE5VTEwgT1IgRXhw aXJlcz49JyR0cycpICRzX2ZpbHRlciBBTkQgJHF1ZXJ5IjsNCgkJCWlmKCEkb3JkZXIpICRv cmRlciA9ICcgT1JERVIgQlkgc2NvcmUgREVTQyc7DQoJCX0NCg0KCQkkY291bnQgPSAhJGN1 c3RvbSA/ICRjb3VudCA6ICgNCgkJCSRsaW1pdCA/ICJTRUxFQ1QgY291bnQoKikgRlJPTSAo Ii5wcmVnX3JlcGxhY2UoIi9eU0VMRUNUXGIoPzpbXlwnXXxcJy4qXCcpK1xiRlJPTVxiL1Vp IiwgJ1NFTEVDVCAxIEZST00nLCAkcXVlcnkuJGxpbWl0KS4iKSBjb3VudCIgDQoJCQkJOiBw cmVnX3JlcGxhY2UoIi9eU0VMRUNUXGIoPzpbXlwnXXxcJy4qXCcpK1xiRlJPTVxiL1VpIiwg J1NFTEVDVCBjb3VudCgqKSBGUk9NJywgJHF1ZXJ5KQ0KCQkpOw0KDQovLwkJaWYoISRsaXZl KSAkb1tdPSc8IS0tJy4kcXVlcnkuJy0tPic7DQoNCgkJJGNvdW50ID0gaW50dmFsKGdldFRo aW5nKCRjb3VudCkpOw0KCQkkcmMgKz0gJGNvdW50Ow0KCQlpZigkY291bnQgPD0gJG9mZnNl dCkgeyRvZmZzZXQgLT0gJGNvdW50OyBjb250aW51ZTt9IGVsc2UgJG9mZnNldCA9IDA7DQoJ CSRycyA9ICgkbWF4IDw9IDAgfHwgJG5ld21heCA+IDAgPyBnZXRSb3dzKCRxdWVyeS4kb3Jk ZXIuKCRsaW1faXQgPyAkbGltX2l0IDogJGxpbWl0KSkgOiBhcnJheSgpKTsNCgkJJHJlcGxh Y2VtZW50cyA9IGFycmF5KCk7DQoJCXByZWdfbWF0Y2hfYWxsKCIvXHsoLispXH0vVSIsICR0 aGluZywgJG1hdGNoZXMsIFBSRUdfU0VUX09SREVSKTsNCg0KCQlpZigkdHlwZSAmJiBpc3Nl dCgkeyd0aGlzJy4kdHlwZX0pKSAkeyd0aGlzXycuJHR5cGV9ID0gJHsndGhpcycuJHR5cGV9 Ow0KCQkkY291bnQgPSBjb3VudCgkcnMpIC0gMTsNCgkJaWYoIWVtcHR5KCRycykpIGZvcmVh Y2goJHJzIGFzICRpID0+ICRhKSB7DQoJCQlmb3JlYWNoKCRtYXRjaGVzIGFzICRtYXRjaCkg ew0KCQkJCWlmKCRtYXRjaFsxXVswXSA9PT0gJyonKSB7JG1hdGNoWzFdID0gc3Vic3RyKCRt YXRjaFsxXSwgMSk7ICRlc2NhcGUgPSBmYWxzZTt9DQoJCQkJZWxzZSAkZXNjYXBlID0gdHJ1 ZTsNCgkJCQlpZihpc3NldCgkYVskbWF0Y2hbMV1dKSkgJHJlcGxhY2VtZW50c1skbWF0Y2hb MF1dID0gJGVzY2FwZSA/IGh0bWxzcGVjaWFsY2hhcnMoJGFbJG1hdGNoWzFdXSwgRU5UX1FV T1RFUykgOiAkYVskbWF0Y2hbMV1dOw0KCQkJfQ0KCQkJaWYoJHR5cGUpIHsNCgkJCQkkdmFs ID0gJHR5cGUuKCR0eXBlID09PSAnZmlsZScgPyAnX2Rvd25sb2FkJyA6ICcnKS4nX2Zvcm1h dF9pbmZvJzsNCgkJCQlpZigkdHlwZSA9PSAnYXJ0aWNsZScpIGFydGljbGVfZm9ybWF0X2lu Zm8oJGEpOw0KCQkJCWVsc2VpZigkdHlwZSA9PSAnZmlsZScgfHwgJHR5cGUgPT0gJ2ltYWdl JyB8fCAkdHlwZSA9PSAnbGluaycpICR7J3RoaXMnLiR0eXBlfSA9ICR2YWwoJGEpOw0KCQkJ CWVsc2UgJHsndGhpcycuJHR5cGV9ID0gJGE7DQoJCQkJJHsndGhpcycuJHR5cGV9Wydpc19m aXJzdCddID0gJGkgPT0gMDsNCgkJCQkkeyd0aGlzJy4kdHlwZX1bJ2lzX2xhc3QnXSA9ICRp ID09ICRjb3VudDsNCgkJCX0NCgkJCSRvW10gPSBwYXJzZShzdHJ0cigkdGhpbmcsICRyZXBs YWNlbWVudHMpKTsNCgkJfQ0KCQlpZigkdHlwZSAmJiBpc3NldCgkeyd0aGlzXycuJHR5cGV9 KSkgJHsndGhpcycuJHR5cGV9ID0gJHsndGhpc18nLiR0eXBlfTsNCgkJaWYoJG1heCA+IDAp ICRuZXdtYXggPSAkbWF4IC0gY291bnQoJG8pOw0KCX0NCg0KCWlmKGVtcHR5KCR0aGlzcGFn ZSkpIHsNCgkJJGV0Y19wYWdlX2NvdW50ZXJbJ2Zyb20nXSA9ICgkcGcgLSAxKSokbWF4ICsg MTsNCgkJJGV0Y19wYWdlX2NvdW50ZXJbJ3RvJ10gPSAkbWF4ID4gMCA/IG1pbigkZXRjX3Bh Z2VfY291bnRlclsnZnJvbSddICsgJG1heCAtIDEsICRyYykgOiAkcmM7DQoJCSR0aGlzcGFn ZVsncGcnXSAgICAgICAgICA9ICRwZzsNCgkJJHRoaXNwYWdlWydudW1QYWdlcyddICAgID0g JG1heCA+IDAgPyBjZWlsKCRyYy8kbWF4KSA6IDE7DQoJCSR0aGlzcGFnZVsncyddICAgICAg ICAgICA9ICRwcmV0ZXh0WydzJ107DQoJCSR0aGlzcGFnZVsnYyddICAgICAgICAgICA9ICRw cmV0ZXh0WydjJ107DQoJCSR0aGlzcGFnZVsnY29udGV4dCddICAgICA9ICdhcnRpY2xlJzsN CgkJJHRoaXNwYWdlWydncmFuZF90b3RhbCddID0gJHJjOw0KCQkkdGhpc3BhZ2VbJ3RvdGFs J10gICAgICAgPSAkcmMgLSAkZXRjX3BhZ2VfY291bnRlclsnZnJvbSddICsgMTsNCgl9DQoJ aWYoJGxpdmUgJiYgJGxpbV9pdCAmJiAkdGhpc3BhZ2VbJ251bVBhZ2VzJ10gPiAkcGcpICRv W10gPSBnVHh0KCdtb3JlJykuJyZoZWxsaXA7JzsNCg0KCSRwcmV0ZXh0WydxJ10gPSAkcHJl dGV4dF9xOw0KLyogIGVjaG8oJzw/eG1sIHZlcnNpb249XCcxLjBcJyBlbmNvZGluZz1cJ3V0 Zi04XCcgPz4nKTsqLw0KCXJldHVybiAkbWF0Y2hlZCA/ICRvIDogbnVsbDsNCn0NCg0KZnVu Y3Rpb24gZXRjX3NlYXJjaF9yZXN1bHRfY291bnQoJGF0dHMpDQp7DQoJZ2xvYmFsICR0aGlz cGFnZSwgJGV0Y19wYWdlX2NvdW50ZXI7DQoJaWYoZW1wdHkoJHRoaXNwYWdlKSB8fCBlbXB0 eSgkZXRjX3BhZ2VfY291bnRlcikpIHJldHVybjsNCg0KCWV4dHJhY3QobEF0dHMoYXJyYXko DQoJCSd0ZXh0JyAgID0+IGdUeHQoJ3Nob3dpbmdfc2VhcmNoX3Jlc3VsdHMnKQ0KCSksICRh dHRzKSk7DQoNCglyZXR1cm4oc3RydHIoJHRleHQsIGFycmF5KCd7ZnJvbX0nID0+ICRldGNf cGFnZV9jb3VudGVyWydmcm9tJ10sICd7dG99JyA9PiAkZXRjX3BhZ2VfY291bnRlclsndG8n XSwgJ3t0b3RhbH0nID0+ICR0aGlzcGFnZVsnZ3JhbmRfdG90YWwnXSwgJ3twYWdlfScgPT4g JHRoaXNwYWdlWydwZyddLCAne3BhZ2VzfScgPT4gJHRoaXNwYWdlWydudW1QYWdlcyddKSkp Ow0KfQ0KDQpmdW5jdGlvbiBldGNfc2VhcmNoX3Jlc3VsdF9leGNlcnB0KCRhdHRzKQ0Kew0K DQoJZXh0cmFjdChsQXR0cyhhcnJheSgNCgkJJ2JyZWFrJyAgID0+ICcgJiM4MjMwOycsDQoJ CSdoaWxpZ2h0JyA9PiAnc3Ryb25nJywNCgkJJ2xpbWl0JyAgID0+IDUsDQoJCSdzaXplJyAg ID0+IDUwLA0KCQknc2hvd2Fsd2F5cycgICA9PiAiMCIsDQoJCSd0eXBlJyAgID0+ICdhcnRp Y2xlJywNCgkJJ2ZpZWxkJyAgID0+ICdib2R5Jw0KCSksICRhdHRzKSk7DQoNCglnbG9iYWwg JHsndGhpcycuJHR5cGV9LCAkcHJldGV4dDsNCglpZihlbXB0eSgkeyd0aGlzJy4kdHlwZX0p IHx8IGVtcHR5KCR7J3RoaXMnLiR0eXBlfVskZmllbGRdKSkgcmV0dXJuICcnOw0KCSRtID0g JHByZXRleHRbJ20nXTsNCglpZigoJHEgPSB0cmltKGdwcygncScpKSkgPT09ICcnKSByZXR1 cm47DQoNCgkkcmVzdWx0ID0gcHJlZ19yZXBsYWNlKCcvXHMrLycsICcgJywgc3RyaXBfdGFn cyhzdHJfcmVwbGFjZSgnPjwnLCAnPiA8JywgJHsndGhpcycuJHR5cGV9WyRmaWVsZF0pKSk7 DQoNCgkkb3BzID0ganNvbl9kZWNvZGUoZ2V0X3ByZWYoJ2V0Y19zZWFyY2hfb3BzJyksIHRy dWUpOw0KCWZvcmVhY2goJG9wcyBhcyAmJHZhbCkgJHZhbCA9IHByZWdfcXVvdGUoJHZhbCwg Jy8nKTsNCgkkb3BzID0gaW1wbG9kZSgnfCcsICRvcHMpOw0KDQoJJHEgPSBwcmVnX3F1b3Rl KHN0cl9yZXBsYWNlKGFycmF5KCcoJywgJyknKSwgJycsICRxKSwgJy8nKTsNCgkkcXVvdGVz ID0gYXJyYXkoKTsNCglpZigkbSAhPT0gJ2V4YWN0JyAmJiBzdHJwb3MoJHEsICciJykgIT09 IGZhbHNlKSAkcSA9IGV0Y19zZWFyY2hfcGFyc2UoJHEsICcvKCIuKiIpL1VzJywgJHF1b3Rl cywgJygnLCAnKScsIGFycmF5KCciJyA9PiAnJykpOw0KCSRxID0gaHRtbHNwZWNpYWxjaGFy cygkcSwgRU5UX1FVT1RFUyk7DQoNCglpZiAoJG0gPT09ICdleGFjdCcpDQoJew0KCQkkcmVn ZXhfc2VhcmNoID0gJy8oPzpcR3xccykuezAsJy4kc2l6ZS4nfScuJHEuJy57MCwnLiRzaXpl Lid9KD86XHN8JCkvaXUnOw0KCQkkcmVnZXhfaGlsaXRlID0gJHE7DQoJfQ0KCWVsc2UNCgl7 DQoJCSRyZWdleF9oaWxpdGUgPSBzdHJ0cihwcmVnX3JlcGxhY2UoIi8oPzokb3BzKSsvIiwg J3wnLCAkcSksIGRvU3BlY2lhbCgkcXVvdGVzKSk7DQoJCSRyZWdleF9zZWFyY2ggPSAnLyg/ OlxHfFxzKS57MCwnLiRzaXplLid9KCcuJHJlZ2V4X2hpbGl0ZS4nKS57MCwnLiRzaXplLid9 KD86XHN8JCkvaXUnOw0KCX0NCg0KCXByZWdfbWF0Y2hfYWxsKCRyZWdleF9zZWFyY2gsICRy ZXN1bHQsICRjb25jYXQpOw0KCSRjb25jYXQgPSAkY29uY2F0WzBdOw0KDQoJJG1pbiA9IG1p bigkbGltaXQsIGNvdW50KCRjb25jYXQpKTsNCglmb3IgKCRpID0gMCwgJHIgPSBhcnJheSgp OyAkaSA8ICRtaW47ICRpKyspDQoJew0KCQkkcltdID0gdHJpbSgkY29uY2F0WyRpXSk7DQoJ fQ0KDQoJJGNvbmNhdCA9IGpvaW4oJGJyZWFrLm4sICRyKTsNCgkkY29uY2F0ID0gcHJlZ19y ZXBsYWNlKCcvXltePl0rPi9VJywgJycsICRjb25jYXQpOw0KDQoJJGNvbmNhdCA9IHByZWdf cmVwbGFjZSgnLygnLiRyZWdleF9oaWxpdGUuJykvaScsICI8JGhpbGlnaHQ+JDE8LyRoaWxp Z2h0PiIsICRjb25jYXQpOw0KDQoJaWYoJGNvbmNhdCkgcmV0dXJuIChzdHJsZW4oJHJlc3Vs dCkgPiAkc2l6ZSA/ICRicmVhay4kY29uY2F0LiRicmVhayA6IHRyaW0oJGNvbmNhdCkpOw0K CWVsc2VpZighJHNob3dhbHdheXMpIHJldHVybiAnJzsNCg0KCSRyZXN1bHQgPSBleHBsb2Rl KCc8Y3V0IC8+Jywgd29yZHdyYXAoJHJlc3VsdCwgMiokc2l6ZSwgJzxjdXQgLz4nLCB0cnVl KSwgMik7DQoJcmV0dXJuICRyZXN1bHRbMF0uKGNvdW50KCRyZXN1bHQpID4gMSA/ICRicmVh ayA6ICcnKTsNCn0NCg0KZnVuY3Rpb24gZXRjX3NlYXJjaF9jYWxsYmFjaygkZXZlbnQsICRz dGVwKQ0Kew0KCWdsb2JhbCAkbm9sb2c7DQoJJG5vbG9nID0gdHJ1ZTsNCg0KLy8JaGVhZGVy KCdDb250ZW50LVR5cGU6IHRleHQvaHRtbCcpOw0KCWV4aXQoZXRjX3NlYXJjaF9yZXN1bHRz KGFycmF5KCksIG51bGwsIHRydWUpKTsNCn0NCg0KZnVuY3Rpb24gZXRjX3NlYXJjaF9ncHMo JG1hdGNoZXMpIHsNCglnbG9iYWwgJHByZXRleHQsICRldGNfc2VhcmNoX29wcywgJGV0Y19z ZWFyY2hfbWF0Y2gsICRldGNfc2VhcmNoX25lZzsNCgkkc2xhc2ggPSBpc3NldCgkZXRjX3Nl YXJjaF9uZWcpOy8vcXVlcnkgZGINCgkkY3VzdG9tID0gJG1hdGNoZXNbMV1bMF0gPT09ICc/ JzsNCglpZighJGN1c3RvbSAmJiAkc2xhc2gpIHskcSA9ICRwcmV0ZXh0WydxJ107ICRmaWVs ZHMgPSAkbWF0Y2hlc1sxXTt9DQoJZWxzZSB7DQoJCWlmKCRjdXN0b20pICRtYXRjaGVzWzFd ID0gc3Vic3RyKCRtYXRjaGVzWzFdLCAxKTsNCgkJaWYoJHNsYXNoKSBsaXN0KCRxLCAkZmll bGRzKSA9IGV4cGxvZGUoJzo6JywgJG1hdGNoZXNbMV0sIDIpICsgYXJyYXkobnVsbCwgbnVs bCk7DQoJCWVsc2UgJHEgPSAkbWF0Y2hlc1sxXTsNCgkJbGlzdCgkcSwgJHNlcCkgPSBleHBs b2RlKCcmJywgJHEsIDIpICsgYXJyYXkobnVsbCwgJywnKTsNCgkJbGlzdCgkcSwgJGRlZikg PSBleHBsb2RlKCd8JywgJHEsIDIpICsgYXJyYXkobnVsbCwgbnVsbCk7DQovLwkJJHEgPSBz dHJfcmVwbGFjZSgnICcsICdfJywgJHEpOw0KLyoJCWlmKCFpc3NldCgkX1JFUVVFU1RbJHFd KSkgaWYoaXNzZXQoJGRlZikpICRxID0gJGRlZjsgZWxzZSB7JHEgPSAnJzsgJGV0Y19zZWFy Y2hfbWF0Y2ggPSBmYWxzZTt9DQoJCWVsc2UqLyAkcSA9IChpc19hcnJheSgkcSA9IGdwcygk cSkpID8gaW1wbG9kZSgkc2VwLCAkcSkgOiAkcSk7DQoNCgkJaWYoJHEgPT09ICcnKSB7aWYo aXNzZXQoJGRlZikpICRxID0gJGRlZjsgZWxzZSAkZXRjX3NlYXJjaF9tYXRjaCA9IGZhbHNl O30NCgkJZWxzZWlmKCRzbGFzaCkgJHEgPSBhZGRjc2xhc2hlcyhkb1NsYXNoKCRxKSwgJyVf Jyk7DQoJfQ0KCXJldHVybiAhZW1wdHkoJGZpZWxkcykgPyBldGNfc2VhcmNoX3F1ZXJ5KCRx LCAkZmllbGRzLCAkZXRjX3NlYXJjaF9vcHMpIDogJHE7DQp9DQoNCmZ1bmN0aW9uIGV0Y19z ZWFyY2hfdGVybSgkZXZlbnQsICRzdGVwKQ0Kew0KCWdsb2JhbCAkcHJldGV4dCwgJGV0Y19z ZWFyY2hfbWF0Y2g7DQoJJGV0Y19zZWFyY2hfbWF0Y2ggPSB0cnVlOw0KCWlmKCRwcmV0ZXh0 WydxJ10gPT09ICcnKSAkcHJldGV4dFsncSddID0gZ3BzKCdldGNfc2VhcmNoJyk7DQoJJGV0 Y19mb3JtYXQgPSBodG1sc3BlY2lhbGNoYXJzX2RlY29kZShncHMoJ2V0Y19xJykpOw0KCWlm KCRldGNfZm9ybWF0ID09PSAnJykgcmV0dXJuOw0KCSRwcmV0ZXh0WydxJ10gPSBwcmVnX3Jl cGxhY2VfY2FsbGJhY2soIi9ceyguKylcfS9VcyIsICdldGNfc2VhcmNoX2dwcycsICRldGNf Zm9ybWF0KTsNCglpZighJGV0Y19zZWFyY2hfbWF0Y2gpICRwcmV0ZXh0WydxJ10gPSAnJzsN Cn0NCg0KZnVuY3Rpb24gZXRjX3NlYXJjaF9yZXN1bHRzKCRhdHRzLCAkdGhpbmc9bnVsbCwg JGxpdmU9ZmFsc2UpDQp7DQoJZ2xvYmFsICRoYXNfYXJ0aWNsZV90YWcsICRwcmVmcywgJHBy ZXRleHQ7DQoJJGhhc19hcnRpY2xlX3RhZyA9IHRydWU7DQoNCglleHRyYWN0KGxBdHRzKGFy cmF5KA0KCQknaWQnICAgICAgICAgPT4gJycsDQovLwkJJ2Zvcm1hdCcgICAgICAgICA9PiAn e3F9JywNCgkJJ3F1ZXJ5JyAgICAgICAgID0+IG51bGwsDQovLwkJJ2h0bWxfaWQnICAgICAg ICAgPT4gJycsDQoJCSdmb3JtJyAgICAgICAgID0+ICcnLA0KCQknbGltaXQnICAgICA9PiAx MCwNCgkJJ3dyYXB0YWcnICAgICAgICAgPT4gJycsDQoJCSdjbGFzcycgICAgICAgICA9PiAn JywNCgkJJ2JyZWFrJyAgID0+ICcnDQoJKSwgJGF0dHMpKTsNCg0KCWlmKGlzc2V0KCRxdWVy eSkpICRwYXJhbXMgPSBhcnJheSgnZXRjX3NlYXJjaCcgPT4gZG9fbGlzdCgkaWQpLCAncScg PT4gJHF1ZXJ5KTsNCgllbHNlIHsNCgkJZXh0cmFjdCgkcGFyYW1zID0gZ3BzYShhcnJheSgn ZXRjX3NlYXJjaCcsICdldGNfbGltaXQnLCAnZXRjX3EnLCAnZXRjX2YnLCAnZXRjX3cnLCAn ZXRjX2InKSkpOw0KCQkkcGFyYW1zWydxJ10gPSB0cmltKCRwcmV0ZXh0WydxJ10pOw0KCQlp ZigkcGFyYW1zWydxJ10gPT09ICcnKSByZXR1cm4gJyc7DQoNCgkJaWYoJGV0Y19zZWFyY2gp IHsNCgkJCUBsaXN0KCRoYXNoLCAkc2VhcmNoKSA9IGV4cGxvZGUoJy4nLCAkZXRjX3NlYXJj aCwgMik7DQoJCQlpZihtZDUoZ2V0X3ByZWYoJ2V0Y19zZWFyY2hfaGFzaCcpLigkbGl2ZSA/ ICRldGNfZi4kZXRjX3cuJGV0Y19iLmludHZhbCgkZXRjX2xpbWl0KTogJycpLiRldGNfcS4k c2VhcmNoKSAhPT0gJGhhc2gpIHJldHVybiAnJzsNCgkJCSRwYXJhbXNbJ2V0Y19zZWFyY2gn XSA9ICRzZWFyY2g7DQoJCX0NCgkJJHBhcmFtc1snZXRjX3NlYXJjaCddID0gYXJyYXlfbWFw KCdpbnR2YWwnLCBkb19saXN0KCRwYXJhbXNbJ2V0Y19zZWFyY2gnXSwgJy4nKSk7DQoJCWlm KCRpZCAhPT0gJycpICRwYXJhbXNbJ2V0Y19zZWFyY2gnXSA9ICRpZFswXSA9PT0gJy0nID8g YXJyYXlfZGlmZigkcGFyYW1zWydldGNfc2VhcmNoJ10sIGRvX2xpc3Qoc3Vic3RyKCRpZCwg MSkpKSA6IGFycmF5X2ludGVyc2VjdCgkcGFyYW1zWydldGNfc2VhcmNoJ10sIGRvX2xpc3Qo JGlkKSk7DQoJfQ0KCWlmKCRwYXJhbXNbJ3EnXSA9PT0gJycgfHwgZW1wdHkoJHBhcmFtc1sn ZXRjX3NlYXJjaCddKSkgcmV0dXJuICcnOw0KCWlmKCRsaXZlKSB7JHdyYXB0YWcgPSAkcGFy YW1zWydldGNfdyddOyAkYnJlYWsgPSAkcGFyYW1zWydldGNfYiddOyAkZm9ybSA9ICRwYXJh bXNbJ2V0Y19mJ107ICRsaW1pdCA9ICRwYXJhbXNbJ2V0Y19saW1pdCddO30NCg0KCSRmYWxz ZVBhcnQgPSBpc3NldCgkdGhpbmcpID8gRXZhbEVsc2UoJHRoaW5nLCAwKSA6IGdUeHQoJ25v X3NlYXJjaF9tYXRjaGVzJyk7DQoJaWYoJGZvcm0pICR0aGluZyA9IGZldGNoX2Zvcm0oJGZv cm0pOw0KCSR0aGluZyA9IGlzc2V0KCR0aGluZykgPyBFdmFsRWxzZSgkdGhpbmcsIDEpIDog Jyc7DQoNCglpZigkbGltaXQpICRwYXJhbXNbJ2V0Y19saW1pdCddID0gJGxpbWl0Ow0KCWlm KCRmb3JtKSAkcGFyYW1zWydldGNfZiddID0gJGZvcm07DQoJaWYoJHRoaW5nKSAkcGFyYW1z WydldGNfdCddID0gJHRoaW5nOw0KDQoJJHBhcmFtc1sncSddID0gZG9TbGFzaCgkcGFyYW1z WydxJ10pOw0KCWlmKCFpc3NldCgkcXVlcnkpKSAkcGFyYW1zWydxJ10gPSBhZGRjc2xhc2hl cygkcGFyYW1zWydxJ10sICclXycpOw0KDQoJJG8gPSBldGNfc2VhcmNoX2dldF9yZXN1bHRz KCRwYXJhbXMsICRsaXZlKTsNCglyZXR1cm4gKCRvID8gZG9XcmFwKCRvLCAkd3JhcHRhZywg JGJyZWFrLCAkY2xhc3MpIDogKCRvID09PSBudWxsID8gJycgOiBwYXJzZSgkZmFsc2VQYXJ0 KSkpOw0KfQ0KDQpmdW5jdGlvbiBldGNfc2VhcmNoKCRhdHRzLCAkdGhpbmcgPSAnJykNCnsN CglnbG9iYWwgJHByZWZzOw0KCWV4dHJhY3QobEF0dHMoYXJyYXkoDQoJCSdpZCcgICAgICAg ICA9PiAnMCcsDQoJCSd0YXJnZXQnICAgICAgICAgPT4gJycsDQoJCSdsaXZlJyAgICAgICAg ID0+ICc2MDAnLA0KCQknbWF0Y2gnICAgICAgICAgPT4gJycsDQoJCSdhY3Rpb24nICAgICAg ICAgPT4gbnVsbCwNCgkJJ2Zvcm1hdCcgICAgICAgICA9PiAnJywNCgkJJ21pbmxlbmd0aCcg ICAgICAgICAgICA9PiAxLA0KCQknaHRtbF9pZCcgICAgICAgICA9PiBzdHJfcmVwbGFjZSgn LicsICcnLCB1bmlxaWQoImxpdmVfc2VhcmNoXyIsIHRydWUpKSwNCgkJJ2xhYmVsJyAgICAg ICAgICAgPT4gZ1R4dCgnc2VhcmNoJyksDQoJCSdzaXplJyAgICAgICAgICAgID0+IDAsDQoJ CSdwbGFjZWhvbGRlcicgICA9PiAnJywNCgkJJ2xpbWl0JyAgICAgPT4gMCwNCgkJJ2Zvcm0n ICAgICAgICAgPT4gJycsDQoJCSdjbGFzcycgICAgICAgICA9PiAnJywNCgkJJ3dyYXB0YWcn ICAgICAgICAgPT4gJycsDQoJCSdicmVhaycgICA9PiAnYnInDQoJKSwgJGF0dHMpKTsNCg0K CSRpZCA9IGltcGxvZGUoJy4nLCBkb19saXN0KCRpZCkpOw0KCSRsaXZlID0gLyokdGhpbmcg PyAwIDoqLyBpbnR2YWwoJGxpdmUpOw0KCSRsaW1pdCA9IGludHZhbCgkbGltaXQpOw0KCSRt aW5sZW5ndGggPSBpbnR2YWwoJG1pbmxlbmd0aCk7DQoJJHFzID0gYXJyYXkoKTsNCglpZigk YWN0aW9uID09PSBudWxsKSAkYWN0aW9uID0gcmh1Ow0KCWVsc2UgcGFyc2Vfc3RyKHBhcnNl X3VybCgkYWN0aW9uLCBQSFBfVVJMX1FVRVJZKSwgJHFzKTsNCgl1bnNldCgkcXNbJ3EnXSwg JHFzWydtJ10sICRxc1sncGcnXSwgJHFzWydldGNfc2VhcmNoJ10sICRxc1snZXRjX2xpbWl0 J10sICRxc1snZXRjX3EnXSk7DQovLwkkaGFzaCA9ICRpZCB8fCAkbGltaXQgPyBtZDUoJHBy ZWZzWydldGNfc2VhcmNoX2hhc2gnXS4kbGltaXQuJGlkKS4nLicuJGlkIDogJyc7DQoJJGhh c2ggPSAkaWQgPyBtZDUoJHByZWZzWydldGNfc2VhcmNoX2hhc2gnXS4kZm9ybWF0LiRpZCku Jy4nLiRpZCA6ICcnOw0KCSRxID0gKCEkaWQgfHwgZ3BzKCdldGNfc2VhcmNoJykgPT0gJGhh c2ggPyBodG1sc3BlY2lhbGNoYXJzKGdwcygncScpKSA6ICcnKTsNCg0KCSRpbnB1dHMgPSAn JzsNCglpZigkaGFzaCkgJGlucHV0cyAuPSAnPGlucHV0IHR5cGU9ImhpZGRlbiIgZGF0YS1l dGM9InNlYXJjaCIgbmFtZT0iZXRjX3NlYXJjaCIgdmFsdWU9IicuJGhhc2guJyIgLz4nLm47 DQoJaWYoJGZvcm1hdCkgJGlucHV0cyAuPSAnPGlucHV0IHR5cGU9ImhpZGRlbiIgZGF0YS1l dGM9InNlYXJjaCIgbmFtZT0iZXRjX3EiIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJGZv cm1hdCkuJyIgLz4nLm47DQovLwlpZigkbGltaXQpICRpbnB1dHMgLj0gJzxpbnB1dCB0eXBl PSJoaWRkZW4iIGRhdGEtZXRjPSJzZWFyY2giIG5hbWU9ImV0Y19saW1pdCIgdmFsdWU9Iicu JGxpbWl0LiciIC8+Jy5uOw0KCWlmKCRtYXRjaCkgJGlucHV0cyAuPSAnPGlucHV0IHR5cGU9 ImhpZGRlbiIgZGF0YS1ldGM9InNlYXJjaCIgbmFtZT0ibSIgdmFsdWU9IicuJG1hdGNoLici IC8+Jy5uOw0KCWZvcmVhY2goJHFzIGFzICRrZXkgPT4gJHZhbCkgJGlucHV0cyAuPSAnPGlu cHV0IHR5cGU9ImhpZGRlbiIgZGF0YS1ldGM9InNlYXJjaCIgbmFtZT0iJy5odG1sc3BlY2lh bGNoYXJzKCRrZXkpLiciIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJHZhbCkuJyIgLz4n Lm47DQoJJGlucHV0cyAuPSAkdGhpbmcgPyBwYXJzZSgkdGhpbmcpIDogJzxpbnB1dCB0eXBl PSJzZWFyY2giIG5hbWU9InEiJy4oJHNpemUgPyAnIHNpemU9IicuaW50dmFsKCRzaXplKS4n IicgOiAnJykuJyB2YWx1ZT0iJy4kcS4nIiBwbGFjZWhvbGRlcj0iJy4kcGxhY2Vob2xkZXIu JyIgYXV0b2NvbXBsZXRlPSJvZmYiIC8+Jy5uOw0KDQoJJG91dCA9ICc8Zm9ybSBpZD0iJy4k aHRtbF9pZC4nIiBjbGFzcz0iJy4kY2xhc3MuJyIgbWV0aG9kPSJnZXQiIGFjdGlvbj0iJy4k YWN0aW9uLiciPicubg0KCS4oJGxhYmVsID8gJzxsYWJlbD4nLiRsYWJlbC4nPGJyIC8+PC9s YWJlbD4nIDogJycpLiRpbnB1dHMNCgkuJzwvZm9ybT4nOw0KDQoJaWYoJGxpdmUpIHsNCgkJ JGhhc2ggPSBtZDUoJHByZWZzWydldGNfc2VhcmNoX2hhc2gnXS4kZm9ybS4kd3JhcHRhZy4k YnJlYWsuJGxpbWl0LiRmb3JtYXQuJGlkKS4nLicuJGlkOw0KCQkkcmVzdWx0c19vcHRzID0g YXJyYXkoKTsNCgkJJHJlc3VsdHNfb3B0c1tdID0nZXRjX3NlYXJjaDoiJy4kaGFzaC4nIic7 DQoJCWlmKCRmb3JtKSAkcmVzdWx0c19vcHRzW10gPSAnZXRjX2Y6IicuJGZvcm0uJyInOw0K CQlpZigkYnJlYWspICRyZXN1bHRzX29wdHNbXSA9J2V0Y19iOiInLiRicmVhay4nIic7DQoJ CWlmKCR3cmFwdGFnKSAkcmVzdWx0c19vcHRzW10gPSAnZXRjX3c6IicuJHdyYXB0YWcuJyIn Ow0KCQlpZigkbGltaXQpICRyZXN1bHRzX29wdHNbXSA9ICdldGNfbGltaXQ6IicuJGxpbWl0 LiciJzsNCg0KCQkkb3V0IC49ICc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88 IVtDREFUQVsnLm4uJyQoZnVuY3Rpb24gKCkgeycubg0KCQkuJ2V0Y19saXZlX3NlYXJjaCgn LiRsaXZlLicsJy4kbWlubGVuZ3RoLicsIicuJGh0bWxfaWQuJyIsIicuJHRhcmdldC4nIix7 Jy5pbXBsb2RlKCcsJywgJHJlc3VsdHNfb3B0cykuJ30pOycubg0KCQkuJ30pOycubi4nLy9d XT48L3NjcmlwdD4nOw0KCX0NCglyZXR1cm4gJG91dDsNCn0iO3M6NDoidHlwZSI7czoxOiIx IjtzOjU6Im9yZGVyIjtzOjE6IjciO3M6NToiZmxhZ3MiO3M6MToiMyI7czo0OiJoZWxwIjtz OjEzMTM2OiI8aDM+RGVzY3JpcHRpb248L2gzPgoKCTxwPlRoaXMgcGx1Z2luIGRpc3BsYXlz IGEgc2VhcmNoIGZvcm0gc2ltaWxhcmx5IHRvIDxjb2RlPiZsdDt0eHA6c2VhcmNoX2lucHV0 IC8mZ3Q7PC9jb2RlPi4gSWYgSmF2YXNjcmlwdCBpcyBlbmFibGVkLCBhIHJlc3VsdHMgbGlz dCB3aWxsIGZhZGUgaW4gYW5kIHJlc2l6ZSBpbiByZWFsIHRpbWUgYmVsb3cgdGhlIHNlYXJj aCBib3ggd2l0aCBhIG5pY2UgYW5pbWF0aW9uIGVmZmVjdCBhcyB0aGUgdXNlciB0eXBlcyBo aXMgcXVlcnkuIFdoZW4gdGhlIHNlYXJjaCBib3ggaXMgZW1wdHksIHRoZSByZXN1bHRzIGxp c3Qgc2hyaW5rcyBhbmQgZmFkZXMgb3V0LjwvcD4KCgk8cD5UaGUgc2VhcmNoIGlzIGFkdmFu Y2VkLCBpLmUuICJqYWd1YXIgc3BlZWQgLWNhciIgd2lsbCBkaXNwbGF5IHRoZSByZXN1bHRz IGNvbnRhaW5pbmcgdGhlIHN0cmluZ3MgImphZ3VhciIgYW5kICJzcGVlZCIsIGJ1dCBub3Qg ImNhciIuIFRoZSBzeW50YXggaXMgY3VzdG9taXphYmxlIGJ5IG1vZGlmeWluZyA8Y29kZT5T ZWFyY2ggc2V0dGluZ3M8L2NvZGU+IEpTT04gZW5jb2RlZCBwcmVmZXJlbmNlLiBNb3Jlb3Zl ciwgeW91IGNhbiBpbnN0cnVjdCB0aGUgcGx1Z2luIHRvIGRvIGZhY2V0ZWQgc2VhcmNoZXMg YW5kIHF1ZXJ5IGFueSBmaWVsZHMgaW4geW91ciB0eHAgZGF0YWJhc2UuPC9wPgoKCTxwPldo ZW4gdGhlIHVzZXIgaGl0cyB0aGUgRW50ZXIga2V5IGhlIGdldHMgcmVkaXJlY3RlZCB0byBh IHRyYWRpdGlvbmFsIHNlYXJjaCByZXN1bHRzIHBhZ2UsIHNvIHRoZSBwbHVnaW4gYWxzbyBk ZWdyYWRlcyBuaWNlbHkgaW4gbm9uLUphdmFzY3JpcHQgYnJvd3NlcnMuPC9wPgoKCTxwPk5l YXJseSBldmVyeXRoaW5nIChpbnB1dCBmb3JtLCBvdXRwdXQgZm9ybSwgYW5pbWF0aW9uLCBz ZWFyY2ggcXVlcnkpIGlzIGN1c3RvbWl6YWJsZS4gTW9yZW92ZXIsIHlvdSBjYW4gdXNlIDxj b2RlPmV0Y19zZWFyY2g8L2NvZGU+IHRvIHF1ZXJ5IHlvdXIgdHhwIGRhdGFiYXNlIHdpdGhv dXQgdXNlciBpbnRlcmFjdGlvbiwgZXh0ZW5kaW5nIHRoZSBjYXBhYmlsaXRpZXMgb2YgPGNv ZGU+YXJ0aWNsZV9jdXN0b208L2NvZGU+IGFuZCBvdGhlciBsaXN0IHRhZ3MuLjwvcD4KCgk8 aDM+UmVxdWlyZW1lbnRzPC9oMz4KCjxwPlRoZSBwbHVnaW4gaXMgY29tcG9zZWQgb2YgdHdv IGZpbGVzOiA8Y29kZT5ldGNfc2VhcmNoLnR4dDwvY29kZT4gYW5kIDxjb2RlPmxpdmVzZWFy Y2guanF1ZXJ5LmpzPC9jb2RlPi4gVGhlIGZpcnN0IG9uZSBpcyBjb21wcmVzc2VkIDxjb2Rl PnBocDwvY29kZT4gZmlsZSB0byBiZSBpbnN0YWxsZWQgYXMgdXN1YWwgaW4gPGNvZGU+UGx1 Z2luczwvY29kZT4gdGFiLiBPbiBpbnN0YWxsIGl0IHdpbGwgY3JlYXRlIGEgPGNvZGU+ZXRj X3NlYXJjaDwvY29kZT4gdGFibGUgYW5kIHR3byBwcmVmZXJlbmNlcyB0aGF0IHdpbGwgYmUg cmVtb3ZlZCBvbiB1bmluc3RhbGwuIEl0IHdpbGwgYWxzbyBjcmVhdGUgYW4gYXJ0aWNsZSBm b3JtICh0aGF0IHlvdSBjYW4gbW9kaWZ5KSBuYW1lZCA8Y29kZT5ldGNfc2VhcmNoX3Jlc3Vs dHM8L2NvZGU+IHRoYXQgd2lsbCBiZSB1c2VkIGFzIGRlZmF1bHQgbGl2ZSBzZWFyY2ggb3V0 cHV0LjwvcD4KCgk8aDQ+SmF2YXNjcmlwdDwvaDQ+CgoJPHA+alF1ZXJ5IDxzdHJvbmc+MS4y PC9zdHJvbmc+IG9yIG1vcmUgcmVjZW50IGlzIHJlcXVpcmVkLjwvcD4KCgk8cD5Zb3UgY2Fu IHVzZSB0aGUgPGNvZGU+anF1ZXJ5LmpzPC9jb2RlPiBqYXZhc2NyaXB0IGZpbGUgd2hpY2gg aXMgYnVuZGxlZCB3aXRoIFRleHRwYXR0ZXJuIGFuZCB5b3UgbmVlZCB0byB1cGxvYWQgdGhl IHByb3ZpZGVkIDxjb2RlPmxpdmVzZWFyY2guanF1ZXJ5LmpzPC9jb2RlPiBmaWxlIHRvIHlv dXIgd2ViIHNlcnZlciAoZm9yIGV4YW1wbGUgaW4gYSBmb2xkZXIgY2FsbGVkICYjODIyMDsv anMvJiM4MjIxOykgYW5kIGluY2x1ZGUgYm90aCBvZiB0aGVzZSBmaWxlcyBpbiB0aGUgaGVh ZGVyIG9mIHRoZSB3ZWIgcGFnZXMgd2hlcmUgeW91IHdhbnQgdG8gdXNlIHRoZSBwbHVnaW46 PC9wPgoKPHByZT48Y29kZT4mbHQ7c2NyaXB0IHR5cGU9JnF1b3Q7dGV4dC9qYXZhc2NyaXB0 JnF1b3Q7IHNyYz0mcXVvdDt0ZXh0cGF0dGVybi9qcXVlcnkuanMmcXVvdDsmZ3Q7Jmx0Oy9z Y3JpcHQmZ3Q7CiZsdDtzY3JpcHQgdHlwZT0mcXVvdDt0ZXh0L2phdmFzY3JpcHQmcXVvdDsg c3JjPSZxdW90O2pzL2xpdmVzZWFyY2guanF1ZXJ5LmpzJnF1b3Q7Jmd0OyZsdDsvc2NyaXB0 Jmd0Owo8L2NvZGU+PC9wcmU+CgoJPGgzPlN5bnRheDwvaDM+Cgo8aDQ+SW5wdXQgZm9ybS9s aXZlIHNlYXJjaDwvaDQ+CjxwcmU+PGNvZGU+Jmx0O3R4cDpldGNfc2VhcmNoIC8mZ3Q7Cjwv Y29kZT48L3ByZT4KPHA+b3IgYXMgY29udGFpbmVyOjwvcD4KPHByZT48Y29kZT4mbHQ7dHhw OmV0Y19zZWFyY2gmZ3Q7CiAgJmx0O2lucHV0IG5hbWU9ImEiIC8mZ3Q7CiAgJmx0O2lucHV0 IG5hbWU9ImIiIC8mZ3Q7CiAgLi4uCiZsdDsvdHhwOmV0Y19zZWFyY2gmZ3Q7CjwvY29kZT48 L3ByZT4KCjxoND5PdXRwdXQgcmVzdWx0czwvaDQ+CjxwcmU+PGNvZGU+Jmx0O3R4cDpldGNf c2VhcmNoX3Jlc3VsdHMgLyZndDsKPC9jb2RlPjwvcHJlPgo8cD5vciBhcyBjb250YWluZXI6 PC9wPgo8cHJlPjxjb2RlPiZsdDt0eHA6ZXRjX3NlYXJjaF9yZXN1bHRzJmd0OwogIG91dHB1 dCBwYXR0ZXJuCiZsdDt0eHA6ZWxzZSAvJmd0OwogICZsdDt0eHA6dGV4dCBpdGVtPSJub19z ZWFyY2hfbWF0Y2hlcyIgLyZndDsKJmx0Oy90eHA6ZXRjX3NlYXJjaF9yZXN1bHRzJmd0Owo8 L2NvZGU+PC9wcmU+CgoJPGgzPkF0dHJpYnV0ZXMgb2YgPGNvZGU+ZXRjX3NlYXJjaDwvY29k ZT4gdGFnPC9oMz4KCgk8aDQ+UmVxdWlyZWQ8L2g0PgoKCTxwPm5vbmUuPC9wPgoKCTxoND5P cHRpb25hbDwvaDQ+CgoJPHVsPgoJCTxsaT48c3Ryb25nPmlkPC9zdHJvbmc+OiBDb21tYS1z ZXBhcmF0ZWQgbGlzdCBvZiBxdWVyeSBpZGVudGlmaWVycyAoc2VlIGJlbG93KSwgZGVmYXVs dCBpcyA8Y29kZT4wPC9jb2RlPiAoZGVmYXVsdCBzZWFyY2gpLjwvbGk+CgkJPGxpPjxzdHJv bmc+bGl2ZTwvc3Ryb25nPjogTWlsbGlzZWNvbmRzIG9mIHVzZXIgaW5hY3Rpdml0eSBiZWZv cmUgbGl2ZSBzZWFyY2ggc3RhcnRzLCA8Y29kZT42MDA8L2NvZGU+IGJ5IGRlZmF1bHQuIFNl dCBpdCB0byA8Y29kZT4wPC9jb2RlPiB0byBkaXNhYmxlIHRoZSBsaXZlIHNlYXJjaCwgb3Ig dG8gPGNvZGU+LTYwMDwvY29kZT4gdG8gbWFrZSB0aGUgcmVzdWx0cyBwZXJzaXN0IG9uIHRo ZSBzY3JlZW4gZXZlbiBhZnRlciBsb29zaW5nIHRoZSBmb2N1cy48L2xpPgoJCTxsaT48c3Ry b25nPm1pbmxlbmd0aDwvc3Ryb25nPjogTWluaW1hbCBsZW5ndGggb2YgdXNlciBpbnB1dCBi ZWZvcmUgbGl2ZSBzZWFyY2ggc3RhcnRzLCA8Y29kZT4xPC9jb2RlPiBieSBkZWZhdWx0Ljwv bGk+CgkJPGxpPjxzdHJvbmc+bWF0Y2g8L3N0cm9uZz46IFNlYXJjaCBtb2RlLCBzZXQgaXQg dG8gPGNvZGU+ZXhhY3Q8L2NvZGU+IGlmIG5lY2Vzc2FyeS48L2xpPgoJCTxsaT48c3Ryb25n PmZvcm1hdDwvc3Ryb25nPjogQWxsb3dzIHRvIGdsdWUgbXVsdGlwbGUgVVJMIDxjb2RlPnt2 YXJpYWJsZXN9PC9jb2RlPiAoZ2VuZXJhbGx5IHByb2R1Y2VkIGJ5IDxjb2RlPiZsdDt0eHA6 ZXRjX3NlYXJjaCAvJmd0OzwvY29kZT4gdXNlZCBhcyBjb250YWluZXIpIGludG8gb25lIHNl YXJjaCBzdHJpbmcuIEZvciBleGFtcGxlLCA8Y29kZT5mb3JtYXQ9IntxfSBAe2N9IjwvY29k ZT4gd2lsbCBwYXNzIHRoZSBzdHJpbmcgPGNvZGU+P2M9dGlwcyZxPXBhZyYuLi48L2NvZGU+ IGFzICJwYWcgQHRpcHMiIHNlYXJjaCBxdWVyeSB0byA8Y29kZT5ldGNfc2VhcmNoPC9jb2Rl Pi4gRGVmYXVsdCBpcyA8Y29kZT57cX08L2NvZGU+LCB0aGUgdmFsdWUgb2YgdHhwIHNlYXJj aCBzdHJpbmcgcGFyYW1ldGVyLjwvbGk+CgkJPGxpPjxzdHJvbmc+YWN0aW9uPC9zdHJvbmc+ OiBVUkwgb2YgdGhlIHBhZ2UgdG8gcmVkaXJlY3QgdGhlIHVzZXIgdG8gd2hlbiBoZSBoaXRz IHRoZSBFbnRlciBrZXksIGluIG9yZGVyIHRvIGRpc3BsYXkgdGhlIHN0YW5kYXJkIHNlYXJj aCByZXN1bHRzIHBhZ2UuIERlZmF1bHQgaXMgdGhlIGhvbWUgcGFnZS48L2xpPgoJCTxsaT48 c3Ryb25nPmh0bWxfaWQ8L3N0cm9uZz46IDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFu PiA8Y29kZT5pZDwvY29kZT4gYXR0cmlidXRlIHRoYXQgd2lsbCBiZSBhcHBsaWVkIHRvIHRo ZSBzZWFyY2ggZm9ybS4gRGVmYXVsdCBpcyA8Y29kZT5saXZlX3NlYXJjaF9bc29tZV9yYW5k b21faWRdPC9jb2RlPi48L2xpPgoJCTxsaT48c3Ryb25nPmNsYXNzPC9zdHJvbmc+OiA8c3Bh biBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gPGNvZGU+Y2xhc3M8L2NvZGU+IGF0dHJpYnV0 ZSBvZiB0aGUgc2VhcmNoIGZvcm0sIDxjb2RlPmxzX3NlYXJjaDwvY29kZT4gYnkgZGVmYXVs dC48L2xpPgoJCTxsaT48c3Ryb25nPnRhcmdldDwvc3Ryb25nPjogalF1ZXJ5IHNlbGVjdG9y LCBzZXQgaXQgaWYgeW91IHdhbnQgdG8gZGlzcGxheSBsaXZlIHNlYXJjaCByZXN1bHRzIGVs c2V3aGVyZS48L2xpPgoJCTxsaT48c3Ryb25nPmZvcm08L3N0cm9uZz46IE9wdGlvbmFsIFRl eHRwYXR0ZXJuIGZvcm0gZm9yIGxpdmUgc2VhcmNoIHJlc3VsdHMgb3V0cHV0LjwvbGk+CgkJ PGxpPjxzdHJvbmc+bGFiZWw8L3N0cm9uZz46IERpc3BsYXlzIGEgbGFiZWwgYWJvdmUgdGhl IHNlYXJjaCBib3ggd2l0aCB0aGUgc3BlY2lmaWVkIHRleHQuIERlZmF1bHQgaXMgJiM4MjIw O3NlYXJjaCYjODIyMTsgc3RyaW5nIGxvY2FsaXplZCBpbiB0aGUgbGFuZ3VhZ2Ugb2YgeW91 ciBUZXh0cGF0dGVybiBpbnN0YWxsYXRpb24uPC9saT4KCQk8bGk+PHN0cm9uZz5zaXplPC9z dHJvbmc+OiBTaXplIG9mIHRoZSBzZWFyY2ggYm94IChudW1iZXIgb2YgY2hhcmFjdGVycyku PC9saT4KCQk8bGk+PHN0cm9uZz5wbGFjZWhvbGRlcjwvc3Ryb25nPjogSW52aXRhdGlvbiB0 ZXh0IHRoYXQgd2lsbCBkZSBkaXNwbGF5ZWQgaW4gdGhlIGJveC4gVGhpcyB0ZXh0IGRpc2Fw cGVhcnMgd2hlbiB1c2VyIGhhcyB0eXBlZCBzb21ldGhpbmcgaW50byBpdC4gRGVmYXVsdCBp cyBlbXB0eS48L2xpPgoJCTxsaT48c3Ryb25nPmxpbWl0PC9zdHJvbmc+OiBNYXhpbXVtIG51 bWJlciBvZiByZXN1bHRzIGluIHRoZSBsaXZlIHJlc3VsdHMgbGlzdC4gRGVmYXVsdCBpcyA8 Y29kZT4wPC9jb2RlPiAobm8gbGltaXQpLjwvbGk+CgkJPGxpPjxzdHJvbmc+d3JhcHRhZzwv c3Ryb25nPjogPHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IHRhZyB0byB3cmFwIHRo ZSBzZWFyY2ggcmVzdWx0cyB3aXRoLCBpbnNpZGUgdGhlIGZvcm0uIERlZmF1bHQgaXMgZW1w dHkuPC9saT4KCQk8bGk+PHN0cm9uZz5icmVhazwvc3Ryb25nPjogPHNwYW4gY2xhc3M9ImNh cHMiPkhUTUw8L3NwYW4+IHRhZyB0byBiZSB1c2VkIGZvciBsaW5lIGJyZWFrcyBpbiB0aGUg Y29udGVudCBpbnNpZGUgdGhlIGxpdmUgcmVzdWx0cyBsaXN0LCB3aXRob3V0IGJyYWNrZXRz LiBEZWZhdWx0IGlzIDxjb2RlPmJyPC9jb2RlPi48L2xpPgoJPC91bD4KCjxoMz5BZG1pbi1z aWRlIHNldHRpbmdzPC9oMz4KCjxwPkdvIHRvIDxjb2RlPkV4dGVuc2lvbnMvZXRjX3NlYXJj aDwvY29kZT4gdG8gY2hhbmdlIHRoZW0uPC9wPgoKPGg0PlNlYXJjaCBzZXR0aW5nczwvaDQ+ Cjx1bD4KPGxpPjxzdHJvbmc+TG9naWNhbCBvcGVyYXRpb25zPC9zdHJvbmc+OiBKU09OLWVu Y29kZWQgb2JqZWN0IGNvbnRhaW5pbmcgTXlTUUwgb3BlcmF0b3JzIHRvIGJlIHVzZWQgaW4g c2VhcmNoIHF1ZXJpZXMuPC9saT4KPC91bD4KCjxoND5TZWFyY2ggZm9ybXM8L2g0Pgo8dWw+ CjxsaT48c3Ryb25nPmNvbnRleHQ8L3N0cm9uZz46IE9uZSBvZiA8Y29kZT5hcnRpY2xlIHwg ZmlsZSB8IGltYWdlIHwgbGluazwvY29kZT4sIHJlcHJlc2VudGluZyB0aGUgdGFibGUgdG8g c2VhcmNoIGluLCBvciA8Y29kZT5jdXN0b208L2NvZGU+LiBJZiBub3QgY3VzdG9tLCB5b3Ug Y2FuIHVzZSAoc29tZSBvZikgY29udGV4dCB0YWdzIGluIGZvcm1zLCBzZWUgYmVsb3cuPC9s aT4KCQk8bGk+PHN0cm9uZz5xdWVyeTwvc3Ryb25nPjogQSBzdHJpbmcgcGF0dGVybnMgcmVw cmVzZW50aW5nIGEgdmFsaWQgTXlTUUwgU0VMRUNUIHF1ZXJ5LCB3aXRoIHNwZWNpYWxseSBj cmFmdGVkIFdIRVJFIGNsYXVzZS4gSXQgaXMgb2YgdGhlIGZvcm0gPGNvZGU+U0VMRUNUIC4u LiBXSEVSRSB7Wz9wYXJhbTo6XW1hdGNoMTttYXRjaDI7Li4ufSBBTkQvT1Igb3RoZXJfY3Jp dGVyaWEgLi4uPC9jb2RlPi4gVGhlIDxjb2RlPnttYXRjaH08L2NvZGU+IHRva2VuIHdpbGwg YmUgcmVwbGFjZWQgYnkgdGhlIHBsdWdpbiB3aXRoIGFwcHJvcHJpYXRlIHN0cmluZy4gQSBx dWVyeSBwYXR0ZXJuIGNhbiBiZSByZWR1Y2VkIHRvIDxjb2RlPnttYXRjaDE7bWF0Y2gyOy4u Ln0gLi4uPC9jb2RlPiBpZiBzb21lIG5vbi1jdXN0b20gY29udGV4dCBpcyBzZXQuPGJyIC8+ CkhlcmUgPGNvZGU+cGFyYW08L2NvZGU+IGlzIGEgdXJsIHZhcmlhYmxlIHRvIGJlIHVzZWQg aW4gdGhlIGl0ZW0uIElmIG9taXR0ZWQsIHRoZSBkZWZhdWx0IHNlYXJjaCBwYXJhbWV0ZXIg PGNvZGU+cTwvY29kZT4gd2lsbCBiZSB1c2VkLjxiciAvPgpFYWNoIDxjb2RlPm1hdGNoPC9j b2RlPiBpdGVtIGlzIGEgc3RyaW5nIDxjb2RlPmZpZWxkczo6cGF0dGVybjo6Y29uZGl0aW9u PC9jb2RlPiwgd2hlcmUKPHVsPgo8bGk+PGNvZGU+ZmllbGRzPC9jb2RlPiBpcyBhIGNvbW1h LXNlcGFyYXRlZCBsaXN0IG9mIGRiIGZpZWxkczs8L2xpPgo8bGk+PGNvZGU+cGF0dGVybjwv Y29kZT4gaXMgYSByZWdleHAgdG8gbWF0Y2ggc2VhcmNoIHF1ZXJ5IGFnYWluc3QsIDxjb2Rl Pi9eLiskL3M8L2NvZGU+IChhbnkgcXVlcnkpIGJ5IGRlZmF1bHQ7PC9saT4KPGxpPjxjb2Rl PmNvbmRpdGlvbjwvY29kZT4gaXMgYSBNeVNRTCBXSEVSRSBjbGF1c2UgKGl0cyBkZWZhdWx0 IHZhbHVlIGlzIDxjb2RlPnsqfSBMSUtFICVzZWFyY2hfdGVybSU8L2NvZGU+KSB0byBmaWx0 ZXIgPGNvZGU+ZmllbGRzPC9jb2RlPiB3aXRoLiBIZXJlLCAgdGhlIDxjb2RlPnsqfTwvY29k ZT4gdG9rZW4gd2lsbCBiZSByZXBsYWNlZCBieSA8Y29kZT5maWVsZHM8L2NvZGU+IG5hbWVz LCBhbmQgPGNvZGU+JG48L2NvZGU+IHRva2VucyB3aWxsIGJlIHRha2VuIGZyb20gc2VhcmNo IHF1ZXJpZXMgbWF0Y2hpbmcgPGNvZGU+cGF0dGVybjwvY29kZT4uPC9saT4KPC91bD4KCQk8 bGk+PHN0cm9uZz5mb3JtPC9zdHJvbmc+OiBUd28gb3V0cHV0IGZvcm1zIHRvIHVzZSBmb3Ig ZGlzcGxheWluZyB0aGUgcmVzdWx0cywgaW4gbGl2ZSBhbmQgc3RhbmRhcmQgbW9kZS4gSWYg ZW1wdHksIHdpbGwgYmUgYXNzaWduZWQgdGhlIHZhbHVlIG9mIDxjb2RlPmV0Y19zZWFyY2hf cmVzdWx0cywgc2VhcmNoX3Jlc3VsdHM8L2NvZGU+LjwvbGk+CjxsaT5GaW5hbGx5LCA8c3Ry b25nPmNvbnRlbnQ8L3N0cm9uZz4gY29uc2lzdHMgb2YgdHdvIG91dHB1dCBwYXR0ZXJucyB3 aGVyZSBhbGwgb2NjdXJyZW5jZXMgb2YgPGNvZGU+e2ZpZWxkfTwvY29kZT4gd2lsbCBiZSBy ZXBsYWNlZCBieSB0aGUgY29ycmVzcG9uZGluZyAoZXNjYXBlZCkgZmllbGQgdmFsdWUuIFRo ZSBmaXJzdCBwYXR0ZXJuIHdpbGwgYmUgdXNlZCBmb3IgdGhlIGxpdmUgc2VhcmNoLCB0aGUg c2Vjb25kIG9uZSBmb3IgdGhlIHN0YW5kYXJkIHNlYXJjaC48L2xpPjwvdWw+CjwvbGk+Cjwv dWw+CgoJPGgzPkV4YW1wbGVzPC9oMz4KPHA+QnkgZGVmYXVsdCwgPGNvZGU+ZXRjX3NlYXJj aDwvY29kZT4gYWN0cyBsaWtlIHRoZSBidWlsdC1pbiBUZXh0cGF0dGVybiBzZWFyY2gsIHF1 ZXJ5aW5nIGFydGljbGVzIDxjb2RlPlRpdGxlPC9jb2RlPiBhbmQgPGNvZGU+Qm9keTwvY29k ZT4uIElmIHlvdSB3YW50IHRvIG1ha2Ugc2VhcmNoYWJsZSBhbHNvIDxjb2RlPktleXdvcmRz PC9jb2RlPiBhbmQgPGNvZGU+RXhjZXJwdDwvY29kZT4sIGNyZWF0ZSBhbiBhcnRpY2xlIHF1 ZXJ5IDxjb2RlPntUaXRsZSxCb2R5LEtleXdvcmRzLEV4Y2VycHR9PC9jb2RlPiAoc2F5LCBu dW1iZXIgMSksIGFuZCBjYWxsPC9wPgo8cHJlPjxjb2RlPiZsdDt0eHA6ZXRjX3NlYXJjaCBp ZD0iMSIgLyZndDs8L2NvZGU+PC9wcmU+Cgo8cD5TdXBwb3NlIG5vdyB0aGF0IHlvdSB3aXNo IHRvIGV4dGVuZCB0aGUgZGVmYXVsdCBUZXh0cGF0dGVybiBzZWFyY2ggd2l0aCBmYWNldGVk IHNlYXJjaCBmb3Igc29tZSB0ZXh0IGluIGltYWdlcyA8Y29kZT5jYXB0aW9uPC9jb2RlPiBh dHRyaWJ1dGUsIGFuZCBkaXNwbGF5IHRoZSB0aXRsZXMgb2YgdGhlIGFydGljbGVzIHdoaWNo IGFyZSBhc3NvY2lhdGVkICh2aWEgQXJ0aWNsZSBpbWFnZSkgd2l0aCB0aGUgbWF0Y2hpbmcg aW1hZ2VzLiBUbyBpbmRpY2F0ZSB0aGF0IHlvdSBhcmUgc2VhcmNoaW5nIGluIGNhcHRpb25z LCB5b3UgZGVjaWRlIHRvIHByZWZpeCB0ZXJtcyBieSA8Y29kZT5jYXA6PC9jb2RlPi4gVGhl biB5b3UgY2FuIGNyZWF0ZSB0aGUgZm9sbG93aW5nIGFydGljbGUgY29udGV4dCBxdWVyeSAo c2F5LCBudW1iZXIgMikgYW5kIGZvcm1zOjwvcD4KCjxwcmU+PGNvZGU+cXVlcnk6IFNFTEVD VCB0eHAuKixpbWcuY2FwdGlvbiBGUk9NIHRleHRwYXR0ZXJuIHR4cCBKT0lOIHR4cF9pbWFn ZSBpbWcgT04gRklORF9JTl9TRVQoaW1nLmlkLHR4cC5JbWFnZSkgV0hFUkUge2ltZy5jYXB0 aW9uOjovXmNhcDooLispJC86OnsqfSBMSUtFICclJDElJ30KbGl2ZSBmb3JtOiAmbHQ7YSBo cmVmPScmbHQ7dHhwOnBlcm1saW5rIC8mZ3Q7JyB0aXRsZT0ne2NhcHRpb259JyZndDsmbHQ7 dHhwOnRpdGxlIC8mZ3Q7Jmx0Oy9hJmd0OwpzdGF0aWMgZm9ybTogJmx0O2gzJmd0OyZsdDt0 eHA6cGVybWxpbmsmZ3Q7Jmx0O3R4cDp0aXRsZSAvJmd0OyZsdDsvdHhwOnBlcm1saW5rJmd0 OyZsdDsvaDMmZ3Q7Jmx0O3R4cDpleGNlcnB0IC8mZ3Q7CjwvY29kZT48L3ByZT4KIDxwPmFu ZCB1c2UgPGNvZGU+Jmx0O3R4cDpldGNfc2VhcmNoIGlkPSIwLDIiIC8mZ3Q7PC9jb2RlPi48 L3A+Cgo8aDM+VGhlIDxjb2RlPmV0Y19zZWFyY2hfcmVzdWx0czwvY29kZT4gdGFnPC9oMz4K CjxwPllvdSBjYW4gcmVwbGFjZSB0aGUgZGVmYXVsdCAobm9uLWxpdmUpIFRYUCBzZWFyY2gg d2l0aCA8Y29kZT4mbHQ7dHhwOmV0Y19zZWFyY2hfcmVzdWx0cyAvJmd0OzwvY29kZT4gYnkg cGxhY2luZyB0aGlzIHRhZyBpbnN0ZWFkIG9mIDxjb2RlPiZsdDt0eHA6YXJ0aWNsZSAvJmd0 OzwvY29kZT4gaW4gPGNvZGU+aWZfc2VhcmNoPC9jb2RlPiBzZWN0aW9uIG9mIHlvdXIgcGFn ZXMuIFRoZSB0YWcgY3VycmVudGx5IGFjY2VwdHMgdGhlIHN0YW5kYXJkIDxjb2RlPmh0bWxf aWQ8L2NvZGU+LCA8Y29kZT5mb3JtPC9jb2RlPiwgPGNvZGU+d3JhcHRhZzwvY29kZT4sIDxj b2RlPmJyZWFrPC9jb2RlPiBhbmQgPGNvZGU+bGltaXQ8L2NvZGU+IGF0dHJpYnV0ZXMuIElm IDxjb2RlPmZvcm08L2NvZGU+IG9yIDxjb2RlPmNvbnRlbnQ8L2NvZGU+IGFyZSBzZXQsIHRo ZXkgd2lsbCBiZSBjb21tb24gdG8gYWxsIHNlYXJjaCBxdWVyaWVzLCBvdmVyd3JpdGluZyB0 aGVpciBvd24gZm9ybXMuPC9wPgoKPHA+VGhlIDxjb2RlPmlkPC9jb2RlPiBhdHRyaWJ1dGUg YWxsb3dzIHRvIHJlc3RyaWN0IHNlYXJjaCB0byBhIGxpc3Qgb2YgY29tbWEtc2VwYXJhdGVk IHNlYXJjaCBmb3JtIGlkcy4gSWYgdGhpcyBsaXN0IGlzIHByZWNlZGVkIGJ5IDxjb2RlPi08 L2NvZGU+LCB0aGUgY29ycmVzcG9uZGluZyBmb3JtcyB3aWxsIGJlIGV4Y2x1ZGVkLiBZb3Ug Y2FuIHBsYWNlIHR3byBvciBtb3JlIG11dHVhbGx5IGV4Y2x1c2l2ZSA8Y29kZT4mbHQ7dHhw OmV0Y19zZWFyY2hfcmVzdWx0cyAvJmd0OzwvY29kZT4gdGFncyBvbiB0aGUgcGFnZTo8L3A+ CjxwcmU+PGNvZGU+Jmx0O3R4cDpldGNfc2VhcmNoX3Jlc3VsdHMgaWQ9IjEsMiIgZm9ybT0i Zm9ybTEiIC8mZ3Q7CiZsdDt0eHA6ZXRjX3NlYXJjaF9yZXN1bHRzIGlkPSIzIiBmb3JtPSJm b3JtMiIgLyZndDsKPC9jb2RlPjwvcHJlPgoKPHA+VGhlIDxjb2RlPnF1ZXJ5PC9jb2RlPiBh dHRyaWJ1dGUgYWxsb3dzIHRvIHBhc3MgYSBzZWFyY2ggc3RyaW5nIGRpcmVjdGx5IHRvIDxj b2RlPiZsdDt0eHA6ZXRjX3NlYXJjaF9yZXN1bHRzIC8mZ3Q7PC9jb2RlPi4gRm9yIGV4YW1w bGUsIDxjb2RlPnF1ZXJ5PSJyZWQgYmx1ZSI8L2NvZGU+IHdpbGwgYmUgdHJlYXRlZCBhcyA8 Y29kZT4/cT1yZWQrYmx1ZTwvY29kZT4gYW5kIG91dHB1dCAod2l0aCB0aGUgZGVmYXVsdCBz ZWFyY2gpIGFsbCB0aGUgYXJ0aWNsZXMgY29udGFpbmluZyBib3RoICJyZWQiIGFuZCAiYmx1 ZSIuIFRoaXMgYWxsb3dzIHRvIHVzZSA8Y29kZT4mbHQ7dHhwOmV0Y19zZWFyY2hfcmVzdWx0 cyAvJmd0OzwvY29kZT4gYXMgPGNvZGU+Jmx0O3R4cDphcnRpY2xlX2N1c3RvbSAvJmd0Ozwv Y29kZT4gd2l0aCB2ZXJ5IGN1c3RvbWl6YWJsZSA8Y29kZT53aGVyZTwvY29kZT4gYXR0cmli dXRlLjwvcD4KCjxoMz5UaGUgPGNvZGU+ZXRjX3NlYXJjaF9yZXN1bHRfZXhjZXJwdDwvY29k ZT4gdGFnPC9oMz4KCjxwPllvdSBjYW4gYWxzbyByZXBsYWNlIDxjb2RlPiZsdDt0eHA6c2Vh cmNoX3Jlc3VsdF9leGNlcnB0IC8mZ3Q7PC9jb2RlPiB3aXRoIDxjb2RlPiZsdDt0eHA6ZXRj X3NlYXJjaF9yZXN1bHRfZXhjZXJwdCAvJmd0OzwvY29kZT4gd2hlcmUgYXBwcm9wcmlhdGUu IEl0IGFjY2VwdHMgc29tZSBhZGRpdGlvbmFsIGF0dHJpYnV0ZXM6PC9wPgo8dWw+CjxsaT48 Y29kZT50eXBlPSJhcnRpY2xlIjwvY29kZT47PC9saT4KPGxpPjxjb2RlPmZpZWxkPSJib2R5 IjwvY29kZT47PC9saT4KPGxpPjxjb2RlPnNpemU9IjUwIjwvY29kZT46IHRoZSBtYXhpbXVt IG51bWJlciBvZiBzdXJyb3VuZGluZyBjaGFyYWN0ZXJzOzwvbGk+CjxsaT48Y29kZT5zaG93 YWx3YXlzPSIwIjwvY29kZT46IHNob3cgYW4gZXhjZXJwdCBldmVuIGlmIHRoZXJlIGlzIG5v IG1hdGNoLjwvbGk+CjwvdWw+CgoKPGgzPlRoZSA8Y29kZT5ldGNfc2VhcmNoX3Jlc3VsdF9j b3VudDwvY29kZT4gdGFnPC9oMz4KPHA+QWNjZXB0cyBvbmx5IDxjb2RlPnRleHQ8L2NvZGU+ IGF0dHJpYnV0ZS4gVGhlIHRva2VucyA8Y29kZT57ZnJvbX0sIHt0b30sIHt0b3RhbH0sIHtw YWdlfSwge3BhZ2VzfTwvY29kZT4gdGhlcmVpbiB3aWxsIGJlIHJlcGxhY2VkIGJ5IGNvcnJl c3BvbmRpbmcgdmFsdWVzLCB0byBkaXNwbGF5IGEgc3RyaW5nIGxpa2UgPGNvZGU+UmVzdWx0 cyA2IHRvIDEwIG9mIDI3PC9jb2RlPi48L3A+CgoJPGgzPjxzcGFuIGNsYXNzPSJjYXBzIj5D U1M8L3NwYW4+U3R5bGluZzwvaDM+CgoJPHA+VGhlIGxpdmUgc2VhcmNoIGNvbnNpc3RzIG9m IGEgZm9ybSB3aXRoIHRoZSA8Y29kZT5pZDwvY29kZT4gYXR0cmlidXRlIHZhbHVlIHNldCBi eSB0aGUgJiM4MjIwO2h0bWxfaWQmIzgyMjE7IHBhcmFtZXRlci4gVGhpcyBmb3JtIGNvbnRh aW5zIHR3byB6b25lcy4gWW91IGNhbiBzdHlsZSBhbnkgZWxlbWVudCBieSByZWZlcmVuY2lu ZyB0aGUgaWQgYXR0cmlidXRlIG9mIHRoZSBmb3JtIGFuZCB0aGUgPHNwYW4gY2xhc3M9ImNh cHMiPkNTUzwvc3Bhbj4gY2xhc3Mgb2YgdGhlIGVsZW1lbnQgKG9yIGl0cyB0YWcpIGluIHlv dXIgPHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4uPC9wPgoKCTxoND5UaGUgc2VhcmNo IHpvbmU8L2g0PgoKCTxwPlRoZSBmaXJzdCB6b25lIGlzIGEgYmxvY2sgd2l0aCB0aGUgYXBw bGllZCBjbGFzcyAmIzgyMjA7bHNfc2VhcmNoJiM4MjIxOyB3aGljaCBjb250YWluczogdGhl IG9wdGlvbmFsIGxhYmVsIChmb2xsb3dlZCBieSBhIGxpbmUgYnJlYWsgaWYgZGVmaW5lZCkg YW5kIHRoZSB0ZXh0IGlucHV0IGJveC4gVGhlIHRhZyBvZiB0aGlzIGJsb2NrIGlzIGRlZmlu ZWQgYnkgdGhlICYjODIyMDt3cmFwdGFnJiM4MjIxOyBwYXJhbWV0ZXIgKGRlZmF1bHQgaXMg PGNvZGU+ZGl2PC9jb2RlPikuPC9wPgoKCTxwPlRoZSBkZWZhdWx0IHNlYXJjaCBib3ggaXMg YW4gaW5wdXQgdGFnLiBJZiB5b3Ugd2FudCwgeW91IGNhbiBzdHlsZSBpdCB1c2luZyBhIDxz cGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+IHJ1bGUgbGlrZSB0aGlzIG9uZTo8L3A+Cgo8 cHJlPjxjb2RlPiNsaXZlX3NlYXJjaCBpbnB1dCB7CiAgICBmb250LXNpemU6IDEwcHg7CiAg ICBjb2xvcjogIzAwMDsKfQo8L2NvZGU+PC9wcmU+CgoJPGg0PlRoZSByZXN1bHRzIHpvbmU8 L2g0PgoKCTxwPlRoZSByZXN1bHRzIHpvbmUgaXMgYSA8Y29kZT5kaXY8L2NvZGU+IGJsb2Nr IHdpdGggdGhlIGNsYXNzICYjODIyMDtsc19zZWFyY2gmIzgyMjE7LCBjb250YWluaW5nIHRo ZSByZXN1bHRzIGxpc3QuIFlvdSBjYW4gY2hvb3NlIHRvIHBvc2l0aW9uIHRoaXMgYmxvY2sg YWJzb2x1dGVseSwgb3IgZXZlbiByZXBsYWNlIGl0IHdpdGggYW55IGJsb2NrLCBzZXR0aW5n IDxjb2RlPnRhcmdldDwvY29kZT4gYXR0cmlidXRlLjwvcD4KCgk8cD5JZiB5b3UgYXJlIG5v dCBoYXBweSB3aXRoIHRoZSBkZWZhdWx0IGFuaW1hdGlvbiwgdW5iaW5kIDxjb2RlPnVwZGF0 ZS5odG1sX2lkPC9jb2RlPiBldmVudCBvZiB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPiBhbmQg cmVwbGFjZSB0aGVtIHdpdGggeW91ciBvd24galF1ZXJ5IGFuaW1hdGlvbnMuIFlvdSBjYW4g YWxzbyBzZXQgPGNvZGU+c3RhcnQ8L2NvZGU+IGFuZCA8Y29kZT5zdG9wPC9jb2RlPiBldmVu dHMsIGZpcmVkIGF0IHRoZSBiZWdpbm5pbmcgYW5kIHRoZSBlbmQgb2YgbGl2ZSBBSkFYIHJl cXVlc3RzLjwvcD4KCgk8cD5UaGUgY29udGVudCBvZiB0aGUgcmVzdWx0cyBibG9jayB3aWxs IGJlIGVpdGhlcjo8L3A+CgoJPG9sPgoJCTxsaT48ZW0+QXQgbGVhc3Qgb25lIHJlc3VsdCBp cyBmb3VuZDo8L2VtPiBBIGxpc3Qgd2l0aCB3cmFwIGFuZCBicmVhayB0YWdzIGFjY29yZGlu ZyB0byB5b3VyICYjODIyMDt3cmFwdGFnJiM4MjIxOyBhbmQgJiM4MjIwO2JyZWFrJiM4MjIx OyBwYXJhbWV0ZXJzIChzZWUgYWJvdmUpLjwvbGk+CgkJPGxpPjxlbT5ObyByZXN1bHRzIGZv dW5kOjwvZW0+IFRoZSBsb2NhbGl6ZWQgJiM4MjIwO25vX3NlYXJjaF9tYXRjaGVzJiM4MjIx OyBtZXNzYWdlLjwvbGk+Cgk8L29sPiI7czozOiJtZDUiO3M6MzI6IjdlMjk0MDkyMWNmZjZl NDliN2EwZmM4NGQzY2E1NWNhIjt9