# Name: ied_plugin_composer v0.9 # Type: Admin side plugin # Write and publish plugins easily # Author: Yura Linnyk / Stef Dawson / Steve Dickinson # URL: http://stefdawson.com/ # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjE5OiJpZWRfcGx1Z2luX2NvbXBvc2VyIjtzOjY6ImF1dGhv ciI7czo0MzoiWXVyYSBMaW5ueWsgLyBTdGVmIERhd3NvbiAvIFN0ZXZlIERpY2tpbnNvbiI7 czoxMDoiYXV0aG9yX3VyaSI7czoyMjoiaHR0cDovL3N0ZWZkYXdzb24uY29tLyI7czo3OiJ2 ZXJzaW9uIjtzOjM6IjAuOSI7czoxMToiZGVzY3JpcHRpb24iO3M6MzI6IldyaXRlIGFuZCBw dWJsaXNoIHBsdWdpbnMgZWFzaWx5IjtzOjQ6ImNvZGUiO3M6NTUwNDY6ImlmKEB0eHBpbnRl cmZhY2UgPT0gJ2FkbWluJykgew0KCWFkZF9wcml2cygnaWVkX3BsdWdpbl9jb21wb3Nlcics JzEsMicpOw0KCWFkZF9wcml2cygncGx1Z2luX3ByZWZzLmllZF9wbHVnaW5fY29tcG9zZXIn LCcxLDInKTsNCglyZWdpc3Rlcl90YWIoJ2V4dGVuc2lvbnMnLCAnaWVkX3BsdWdpbl9jb21w b3NlcicsIGllZF9wbHVnaW5fZ1R4dCgnaWVkX3BsdWdpbl9jb21wb3NlcicpKTsNCglyZWdp c3Rlcl9jYWxsYmFjaygnaWVkX3BsdWdpbl9jb21wb3NlcicsICdpZWRfcGx1Z2luX2NvbXBv c2VyJyk7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ2llZF9wbHVnaW5fc2V0dXAnLCAncGx1Z2lu X3ByZWZzLmllZF9wbHVnaW5fY29tcG9zZXInKTsNCglyZWdpc3Rlcl9jYWxsYmFjaygnaWVk X3BsdWdpbl93ZWxjb21lJywgJ3BsdWdpbl9saWZlY3ljbGUuaWVkX3BsdWdpbl9jb21wb3Nl cicpOw0KDQoJZ2xvYmFsICRpZWRfcGx1Z2luX2NvbXBvc2VyLCAkaWVkX3BsdWdpbl9wcmVm cywgJGllZF9wbHVnaW5fZ2xvYmFscywgJHByZWZzOw0KCSRpZWRfcGx1Z2luX2dsb2JhbHMg PSBhcnJheSgNCgkJJ2Nzc19zdGFydCcgPT4gJzwhLS0nLA0KCQknY3NzX2VuZCcgPT4gJy0t PicsDQoJCSdkbG1fc3RhcnQnID0+ICcjJywNCgkJJ2RsbV9lbmQnID0+ICcnLA0KCQknc3Rh cnQnID0+ICcgLS0tIEJFR0lOIFBMVUdJTiBTRUNUSU9OIC0tLScsDQoJCSdlbmQnID0+ICcg LS0tIEVORCBQTFVHSU4gU0VDVElPTiAtLS0nLA0KCQknc2l6ZV9oZWxwJyA9PiAnNjM1MzUn LA0KCQknc2l6ZV9jc3MnID0+ICcyMDAwJywNCgkJJ3NpemVfY29kZScgPT4gJzE2Nzc3MjE1 JywNCgkpOw0KCS8vIERvdWJsZSBhcnJheTogMXN0IGlzIGEgbGlzdCBvZiBjdXJyZW50IHBy ZWZzIGFuZCB0aGVpciBkZWZhdWx0cywNCgkvLyAybmQgaXMgYSBsaXN0IG9mIGxlZ2FjeSBw cmVmcyB0aGF0IG1heSBuZWVkIHJlbW92aW5nIGluIGZ1dHVyZSAoZGVmYXVsdHMgYWxsIHNl dCBlbXB0eSkNCgkkaWVkX3BsdWdpbl9wcmVmcyA9IGFycmF5KA0KCQlhcnJheSgNCgkJCSdp ZWRfcGx1Z2luX2VkaXRvcicgPT4gJ25vbmUnLA0KCQkJJ2llZF9wbHVnaW5fZWRpdG9yX3Bh dGgnID0+IGh1LidqcycuRFMsDQoJCQknaWVkX3BsdWdpbl9lZGl0b3Jfd2lkdGgnID0+ICcx MTAnLA0KCQkJJ2llZF9wbHVnaW5faGVscF9lZGl0b3InID0+ICd0ZXh0aWxlJywNCgkJCSdp ZWRfcGx1Z2luX2hlbHBfZWRpdG9yX3BhdGgnID0+IGh1LidqcycuRFMsDQoJCQknaWVkX3Bs dWdpbl9vdXRwdXRfb3JkZXInID0+ICcwJywNCgkJCSdpZWRfcGx1Z2luX291dHB1dF9zZmls ZScgPT4gJ3tuYW1lfV92e3ZlcnNpb259LnR4dCcsDQoJCQknaWVkX3BsdWdpbl9vdXRwdXRf c2ZpbGVjJyA9PiAne25hbWV9X3Z7dmVyc2lvbn1femlwLnR4dCcsDQoJCQknaWVkX3BsdWdp bl9vdXRwdXRfc2ZpbGVwJyA9PiAne25hbWV9X3Z7dmVyc2lvbn0ucGhwJywNCgkJCSdpZWRf cGx1Z2luX291dHB1dF90bXBjYWNoZScgPT4gJHByZWZzWyd0ZW1wZGlyJ10sDQoJCSksDQoJ CWFycmF5KA0KCQkJJ2llZF9wbHVnaW5fbm90X3VzZWRfYW55X21vcmVfcGxhY2Vob2xkZXIn ID0+ICcnLA0KCQkpDQoJKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gaWVkX3BsdWdp bl9jb21wb3NlcigkZXZlbnQsICRzdGVwKSB7DQoJaWYoISRzdGVwIG9yICFpbl9hcnJheSgk c3RlcCwgYXJyYXkoDQoJCQknaWVkX3BsdWdpbl9kZWxldGUnLA0KCQkJJ2llZF9wbHVnaW5f ZWRpdCcsDQoJCQknaWVkX3BsdWdpbl9oZWxwJywNCgkJCSdpZWRfcGx1Z2luX2xpc3QnLA0K CQkJJ2llZF9wbHVnaW5faW5zdGFsbCcsDQoJCQknaWVkX3BsdWdpbl9zYXZlJywNCgkJCSdp ZWRfcGx1Z2luX3Jlc3RvcmUnLA0KCQkJJ2llZF9zd2l0Y2hfc3RhdHVzJywNCgkJCSdpZWRf c2V0X29yZGVyJywNCgkJCSdpZWRfcGx1Z2luX3NldHVwJywNCgkJCSdpZWRfcGx1Z2luX3By ZWZzX2luc3RhbGwnLA0KCQkJJ2llZF9wbHVnaW5fcHJlZnNfcmVtb3ZlJywNCgkJCSdpZWRf cGx1Z2luX3ByZWZzX3VwZGF0ZScsDQoJCQknaWVkX3BsdWdpbl9jcmVhdGVfbmV3JywNCgkJ CSdpZWRfcGx1Z2luX3NhdmVfYXNfZmlsZScsDQoJCQknaWVkX3BsdWdpbl9zYXZlX2FzX3Bo cF9maWxlJywNCgkJCSdpZWRfcGx1Z2luX3VwbG9hZCcsDQoJCQknaWVkX3BsdWdpbl9oZWxw X3ZpZXdlcicsDQoJCSkpKSB7DQoJCWllZF9wbHVnaW5fbGlzdCgpOw0KCX0gZWxzZSAkc3Rl cCgpOw0KfQ0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gaWVkX3BsdWdpbl93ZWxjb21lKCRldmVu dCwgJHN0ZXApIHsNCgkkbXNnID0gJyc7DQoJc3dpdGNoICgkc3RlcCkgew0KCQljYXNlICdp bnN0YWxsZWQnOg0KCQkJaWVkX3BsdWdpbl9wcmVmc19pbnN0YWxsKDApOw0KCQkJJG1zZyA9 ICdUaGFua3MgZm9yIGluc3RhbGxpbmcgdGhlIHBsdWdpbiBjb21wb3Nlci4gUGxlYXNlIHJl YWQgdGhlIGRvY3MgOi0pJzsNCgkJCWJyZWFrOw0KCQljYXNlICdkZWxldGVkJzoNCgkJCWll ZF9wbHVnaW5fcHJlZnNfcmVtb3ZlKDApOw0KCQkJYnJlYWs7DQoJfQ0KCXJldHVybiAkbXNn Ow0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQovLyBSZXVybnMgYW4gYXJyYXkgb2YgZmlsZW5hbWVzOyAx c3QgaXMgdGhlIHN0YW5kYXJkIHBsdWdpbiwgMm5kIGlzIHRoZSBjb21wcmVzc2VkIHBsdWdp biwgM3JkIGlzIHRoZSBQSFAgdGVtcGxhdGUNCmZ1bmN0aW9uIGllZF9wbHVnaW5fZ2V0X25h bWUoJG5hbWUsICR2ZXJzaW9uKSB7DQoJZ2xvYmFsICRpZWRfcGx1Z2luX3ByZWZzLCAkcHJl ZnM7DQoNCgkkb3V0ID0gYXJyYXkoDQoJCSgoaXNzZXQoJHByZWZzWydpZWRfcGx1Z2luX291 dHB1dF9zZmlsZSddKSAmJiAhZW1wdHkoJHByZWZzWydpZWRfcGx1Z2luX291dHB1dF9zZmls ZSddKSkgPyAkcHJlZnNbJ2llZF9wbHVnaW5fb3V0cHV0X3NmaWxlJ10gOiAkaWVkX3BsdWdp bl9wcmVmc1swXVsnaWVkX3BsdWdpbl9vdXRwdXRfc2ZpbGUnXSksDQoJCSgoaXNzZXQoJHBy ZWZzWydpZWRfcGx1Z2luX291dHB1dF9zZmlsZWMnXSkgJiYgIWVtcHR5KCRwcmVmc1snaWVk X3BsdWdpbl9vdXRwdXRfc2ZpbGVjJ10pKSA/ICRwcmVmc1snaWVkX3BsdWdpbl9vdXRwdXRf c2ZpbGVjJ10gOiAkaWVkX3BsdWdpbl9wcmVmc1swXVsnaWVkX3BsdWdpbl9vdXRwdXRfc2Zp bGVjJ10pLA0KCQkoKGlzc2V0KCRwcmVmc1snaWVkX3BsdWdpbl9vdXRwdXRfc2ZpbGVwJ10p ICYmICFlbXB0eSgkcHJlZnNbJ2llZF9wbHVnaW5fb3V0cHV0X3NmaWxlcCddKSkgPyAkcHJl ZnNbJ2llZF9wbHVnaW5fb3V0cHV0X3NmaWxlcCddIDogJGllZF9wbHVnaW5fcHJlZnNbMF1b J2llZF9wbHVnaW5fb3V0cHV0X3NmaWxlcCddKSwNCgkpOw0KDQoJJHJlcCA9IGFycmF5KA0K CQkie25hbWV9IiA9PiAkbmFtZSwNCgkJInt2ZXJzaW9ufSIgPT4gJHZlcnNpb24sDQoJKTsN Cg0KCWZvcmVhY2ggKCRvdXQgYXMgJGZpZHggPT4gJGZuYW1lKSB7DQoJCSRmbmFtZSA9IHN0 cnRyKCRmbmFtZSwgJHJlcCk7DQoJCSRvdXRbJGZpZHhdID0gc2FuaXRpemVGb3JGaWxlKCRm bmFtZSk7DQoJfQ0KDQoJcmV0dXJuICRvdXQ7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9u IGllZF9wbHVnaW5fbGlzdCgkbWVzc2FnZT0nJykgew0KCWdsb2JhbCAkcHJlZnM7DQoNCglw YWdldG9wKGdUeHQoJ2VkaXRfcGx1Z2lucycpLCRtZXNzYWdlKTsNCgllY2hvIHN0YXJ0VGFi bGUoJ2xpc3QnKS4NCnRyKHRkYSgNCmZvcm0oDQpmSW5wdXQoJ3RleHQnLCduYW1lJywnJywn JywnJywnJywnMzAnLCcwJykNCi4gZklucHV0KCdzdWJtaXQnLCdzdWJtaXQnLGllZF9wbHVn aW5fZ1R4dCgnY3JlYXRlX25ldycpLCdzbWFsbGVyYm94JykNCi4gc0lucHV0KCdpZWRfcGx1 Z2luX2NyZWF0ZV9uZXcnKQ0KLiBlSW5wdXQoJ2llZF9wbHVnaW5fY29tcG9zZXInKQ0KKQ0K LCcgY29sc3Bhbj0iNiIgc3R5bGU9ImJvcmRlcjowO2hlaWdodDo1MHB4IicpDQoudGRhKGZv cm0oZklucHV0KCdzdWJtaXQnLCAnc3VibWl0JywgaWVkX3BsdWdpbl9nVHh0KCdzZXR1cCcp LCAncHVibGlzaCcpLnNJbnB1dCgnaWVkX3BsdWdpbl9zZXR1cCcpLmVJbnB1dCgnaWVkX3Bs dWdpbl9jb21wb3NlcicpKSwnIGNvbHNwYW49IjYiIHN0eWxlPSJib3JkZXI6MDtoZWlnaHQ6 NTBweCInKSkuDQphc3NIZWFkKCdwbHVnaW4nLCdhdXRob3InLGdUeHQoJ3ZlcnNpb24nKS4n ICgnLmdUeHQoJ3BsdWdpbl9tb2RpZmllZCcpLicpJywnZGVzY3JpcHRpb24nLCdwdWJsaXNo Jywnb3JkZXInLCdhY3RpdmUnLCcnKTsNCg0KCSRycyA9IHNhZmVfcm93c19zdGFydCgiKiIs InR4cF9wbHVnaW4iLCAiMT0xIG9yZGVyIGJ5IG5hbWUiKTsNCg0KCXdoaWxlICgkYSA9IG5l eHRSb3coJHJzKSkgew0KCQlleHRyYWN0KCRhKTsNCgkJJGVuYW1lID0gJzxhIGhyZWY9Ij9l dmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtzdGVwPWllZF9wbHVnaW5fZWRpdCYjMzg7 bmFtZT0nLiRuYW1lLiciPicuJG5hbWUuJzwvYT4nOw0KCQkkaGxpbmsgPSAoJGhlbHApID8g JzxhIGhyZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtzdGVwPWllZF9wbHVn aW5faGVscF92aWV3ZXImIzM4O25hbWU9Jy4kbmFtZS4nIj4nLmdUeHQoJ2hlbHAnKS4nPC9h PicgOiAnTm9uZSc7DQoJCSRvTGluayA9IGllZF9wbHVnaW5fb3JkZXJfZm9ybSgkbmFtZSwg JGxvYWRfb3JkZXIpOw0KCQkkZm5hbWVzID0gaWVkX3BsdWdpbl9nZXRfbmFtZSgkbmFtZSwg JHZlcnNpb24pOw0KCQkkcHVidGFnID0gdGFnKGdUeHQoJ3B1Ymxpc2gnKSwnYScsJyBocmVm PSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2luX3NhdmVf YXNfZmlsZSYjMzg7bmFtZT0nLiRuYW1lLiciIHRpdGxlPSInIC4gaWVkX3BsdWdpbl9nVHh0 KCdleHBvcnQnKSAuJyAnLiRmbmFtZXNbMF0uICciJyk7DQoJCSRwdWJ6dGFnID0gdGFnKGll ZF9wbHVnaW5fZ1R4dCgnY29tcHJlc3MnKSwnYScsJyBocmVmPSI/ZXZlbnQ9aWVkX3BsdWdp bl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2luX3NhdmVfYXNfZmlsZSYjMzg7bmFtZT0n LiRuYW1lLicmIzM4O3ppcD10cnVlIiB0aXRsZT0iJyAuIGllZF9wbHVnaW5fZ1R4dCgnZXhw b3J0JykgLicgJy4kZm5hbWVzWzFdLiAnIicpOw0KCQkkbW9kaWZpZWQgPSAoc3RydG9sb3dl cigkY29kZSkgIT0gKHN0cnRvbG93ZXIoJGNvZGVfcmVzdG9yZSkpKTsNCgkJJHBsdWdwcmVm ID0gKCgkZmxhZ3MgJiBQTFVHSU5fSEFTX1BSRUZTKSAmJiAkc3RhdHVzKSA/ICcgJy50YWco ICdbJy5nVHh0KCdwbHVnaW5fcHJlZnMnKS4nXScgLCAnYScsICcgaHJlZj0iP2V2ZW50PXBs dWdpbl9wcmVmcy4nLnVybGVuY29kZSgkbmFtZSkuJyInKSA6ICcnOw0KDQoJCWVjaG8gdHIo dGQoJGVuYW1lLiRwbHVncHJlZikNCi50ZCgoICgkYXV0aG9yX3VyaSkgPyAnPGEgaHJlZj0i Jy4kYXV0aG9yX3VyaS4nIj4nLiRhdXRob3IuJzwvYT4nIDogJGF1dGhvciksMTYwKQ0KLnRk KCgoJG1vZGlmaWVkKSA/ICc8YSBocmVmPSJpbmRleC5waHA/ZXZlbnQ9aWVkX3BsdWdpbl9j b21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2luX3Jlc3RvcmUmIzM4O25hbWU9Jy4kbmFtZS4n IiB0aXRsZT0iJy5pZWRfcGx1Z2luX2dUeHQoJ3Jlc3RvcmVfaGVscCcpLiciIG9uY2xpY2s9 InJldHVybiB2ZXJpZnkoXCcnLmllZF9wbHVnaW5fZ1R4dCgncmVzdG9yZV92ZXJpZnknLCBh cnJheSgne25hbWV9JyA9PiAkbmFtZSkpLidcJyk7Ij4nLiR2ZXJzaW9uLic8L2E+JyA6ICR2 ZXJzaW9uKSAuICgoJG1vZGlmaWVkKSA/ICcmbmJzcDsoJy5nVHh0KCd5ZXMnKS4nKScgOiAn JyksMTApDQoudGQoJGRlc2NyaXB0aW9uLDI2MCkNCi50ZCgkcHVidGFnIC4nIHwgJy4gJHB1 Ynp0YWcgLicgfCAnLiAkaGxpbmspDQoudGQoJG9MaW5rLCA0MCkNCi50ZChpZWRfc3RhdHVz X2xpbmsoJHN0YXR1cywkbmFtZSx5ZXNfbm8oJHN0YXR1cykpLDMwKQ0KDQoudGQoZExpbmso J2llZF9wbHVnaW5fY29tcG9zZXInLCdpZWRfcGx1Z2luX2RlbGV0ZScsJ25hbWUnLCRuYW1l KSwzMCkNCik7DQoJCXVuc2V0KCRuYW1lLCRwYWdlLCRkZWxldGVsaW5rKTsNCgl9DQoNCglp ZiAoIWVtcHR5KCRwcmVmc1sncGx1Z2luX2NhY2hlX2RpciddKSAmJiBmaWxlX2V4aXN0cygk cHJlZnNbJ3BsdWdpbl9jYWNoZV9kaXInXSkpIHsNCgkJJGZpbGVuYW1lcyA9IGFycmF5KCk7 DQoJCSRkaXIgPSBkaXIoJHByZWZzWydwbHVnaW5fY2FjaGVfZGlyJ10pOw0KCQl3aGlsZSAo JGZpbGUgPSAkZGlyLT5yZWFkKCkpIHsNCgkJCWlmKCRmaWxlICE9ICIuIiAmJiAkZmlsZSAh PSAiLi4iKSB7DQoJCQkJJGZpbGVhZGRyID0gJHByZWZzWydwbHVnaW5fY2FjaGVfZGlyJ10u RFMuJGZpbGU7DQoJCQkJaWYgKCFpc19kaXIoJGZpbGVhZGRyKSkgew0KCQkJCQkkZmlsZW5h bWVzW109JGZpbGU7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCSRkaXItPmNsb3NlKCk7DQoJCSgk ZmlsZW5hbWVzKT9uYXRjYXNlc29ydCgkZmlsZW5hbWVzKTonJzsNCgkJZWNobyB0cigNCgkJ dGRhKA0KCQl0YWcoaWVkX3BsdWdpbl9nVHh0KCdydW5fZnJvbScpLicgJy50YWcoJ3BsdWdp bl9jYWNoZV9kaXInLCdhY3JvbnltJywnIHRpdGxlPSInLiRwcmVmc1sncGx1Z2luX2NhY2hl X2RpciddLiciIHN0eWxlPSJib3JkZXItYm90dG9tOjFweCBkYXNoZWQgYmxhY2siJykuJzon LCdoMScpDQoJCSwnIGNvbHNwYW49IjgiIHN0eWxlPSJib3JkZXI6MDtoZWlnaHQ6NTBweDt0 ZXh0LWFsaWduOmxlZnQiJykNCg0KCQkpOw0KDQoJCWVjaG8gYXNzSGVhZCgncGx1Z2luJywn YXV0aG9yJywndmVyc2lvbicsJ2Rlc2NyaXB0aW9uJywncHVibGlzaCcsJycsJycpOw0KCQlm b3JlYWNoKCRmaWxlbmFtZXMgYXMgJGZpbGVuYW1lKSB7DQoJCQkkZmlsZWV4dD0gYXJyYXlf cG9wKGV4cGxvZGUgKCcuJywkZmlsZW5hbWUpKTsNCgkJCWlmICgkZmlsZWV4dD09J3BocCcp IHsNCgkJCQkkYmFzZW5hbWU9YmFzZW5hbWUoJGZpbGVuYW1lKTsNCgkJCQkkcGx1Z2luID0g aWVkX3BsdWdpbl9yZWFkX2ZpbGUoJHByZWZzWydwbHVnaW5fY2FjaGVfZGlyJ10uRFMuJGZp bGVuYW1lKTsNCgkJCQkkaGxpbmsgPSAoJHBsdWdpblsnaGVscCddKSA/ICc8YSBocmVmPSI/ ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2luX2hlbHBfdmll d2VyJiMzODtmaWxlbmFtZT0nLiRmaWxlbmFtZS4nIj4nLmdUeHQoJ2hlbHAnKS4nPC9hPicg OiAnTm9uZSc7DQoJCQkJJGVmaWxlID0gJzxhIGhyZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2Nv bXBvc2VyJiMzODtzdGVwPWllZF9wbHVnaW5fZWRpdCYjMzg7ZmlsZW5hbWU9Jy4kZmlsZW5h bWUuJyI+Jy4kcGx1Z2luWyduYW1lJ10uJzwvYT4nOw0KCQkJCSRmbmFtZXMgPSBpZWRfcGx1 Z2luX2dldF9uYW1lKCRwbHVnaW5bJ25hbWUnXSwgJHBsdWdpblsndmVyc2lvbiddKTsNCgkJ CQkkcGx1Z3ByZWYgPSAoKCRwbHVnaW5bJ2ZsYWdzJ10gJiBQTFVHSU5fSEFTX1BSRUZTKSkg PyAnICcudGFnKCAnWycuZ1R4dCgncGx1Z2luX3ByZWZzJykuJ10nICwgJ2EnLCAnIGhyZWY9 Ij9ldmVudD1wbHVnaW5fcHJlZnMuJy51cmxlbmNvZGUoJHBsdWdpblsnbmFtZSddKS4nIicp IDogJyc7DQoNCgkJCQllY2hvIHRyKA0KCQkJCXRkKA0KCQkJCXRhZygkZmlsZW5hbWUsJ2Rp dicsJyBzdHlsZT0iY29sb3I6Z3JheTtib3JkZXI6MDtwYWRkaW5nOjFweCAycHggMnB4IDFw eDsiJykNCgkJCQkuKGlzc2V0KCRwbHVnaW5bJ25hbWUnXSk/JGVmaWxlLiRwbHVncHJlZi4n PGJyIC8+JzonJykuJyAnDQoJCQkJKQ0KCQkJCS50ZCgNCgkJCQkoIGlzc2V0KCRwbHVnaW5b J2F1dGhvcl91cmknXSk/JzxhIGhyZWY9IicuJHBsdWdpblsnYXV0aG9yX3VyaSddLiciPic6 JycgKSAuDQoJCQkJKCBpc3NldCgkcGx1Z2luWydhdXRob3InXSk/JHBsdWdpblsnYXV0aG9y J106JyZuYnNwOycgKS4NCgkJCQkoIGlzc2V0KCRwbHVnaW5bJ2F1dGhvcl91cmknXSk/Jzwv YT4nOicnICksIDE2MA0KCQkJCSkNCgkJCQkudGQoKGlzc2V0KCRwbHVnaW5bJ3ZlcnNpb24n XSk/JHBsdWdpblsndmVyc2lvbiddOicmbmJzcDsnKSwxMCkNCgkJCQkudGQoKGlzc2V0KCRw bHVnaW5bJ2Rlc2NyaXB0aW9uJ10pPyRwbHVnaW5bJ2Rlc2NyaXB0aW9uJ106JyZuYnNwOycp LDI2MCkNCgkJCQkudGQoKGlzc2V0KCRwbHVnaW5bJ25hbWUnXSk/DQoJCQkJdGFnKGdUeHQo J3B1Ymxpc2gnKSwnYScsJyBocmVmPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7 c3RlcD1pZWRfcGx1Z2luX3NhdmVfYXNfZmlsZSYjMzg7ZmlsZW5hbWU9Jy4kZmlsZW5hbWUu JyIgdGl0bGU9IicgLiBpZWRfcGx1Z2luX2dUeHQoJ2V4cG9ydCcpIC4nICcuJGZuYW1lc1sw XS4gJyInKQ0KCQkJCQkJLicgfCAnLnRhZyhpZWRfcGx1Z2luX2dUeHQoJ2NvbXByZXNzJyks J2EnLCcgaHJlZj0iP2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3Bs dWdpbl9zYXZlX2FzX2ZpbGUmIzM4O2ZpbGVuYW1lPScuJGZpbGVuYW1lLicmIzM4O3ppcD10 cnVlIiB0aXRsZT0iJyAuIGllZF9wbHVnaW5fZ1R4dCgnZXhwb3J0JykgLicgJy4kZm5hbWVz WzFdLiAnIicpOg0KCQkJCXRhZygnJm5ic3A7Jywnc3BhbicsJyBzdHlsZT0iY29sb3I6Z3Jh eSInKQ0KCQkJCSkuJyB8ICcuJGhsaW5rKQ0KCQkJCS50ZCgnJykNCgkJCQkudGQoJycpDQoJ CQkJKTsNCgkJCX0NCgkJfQ0KCX0NCg0KCWVjaG8gdHIoDQp0ZGEoDQonPGZvcm0gZW5jdHlw ZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgYWN0aW9uPSJpbmRleC5waHAiIG1ldGhvZD0icG9z dCI+Jy4NCnN0YXJ0VGFibGUoJ2VkaXQnLCdsZWZ0JykuDQp0cih0ZGEoIGhJbnB1dCgnTUFY X0ZJTEVfU0laRScsMTAwMDAwMCkuDQpncmFmKGllZF9wbHVnaW5fZ1R4dCgndXBsb2FkX3Bo cCcpLic6ICcuDQpmSW5wdXQoJ2ZpbGUnLCd0aGVmaWxlJywnJywnZWRpdCcpLg0KZklucHV0 KCdzdWJtaXQnLCdzdWJtaXQnLGdUeHQoJ3VwbG9hZCcpLCdzbWFsbGVyYm94JykpLg0KZUlu cHV0KCdpZWRfcGx1Z2luX2NvbXBvc2VyJykuDQpzSW5wdXQoJ2llZF9wbHVnaW5fdXBsb2Fk JykgLCAnIHN0eWxlPSJib3JkZXI6MHB4IHNvbGlkIGdyYXkiJyApLg0KdGRhKCB0YWcoaWVk X3BsdWdpbl9nVHh0KCduYW1lJyksICdhY3JvbnltJywnIHRpdGxlPSInLmllZF9wbHVnaW5f Z1R4dCgnbmFtZV90b29sdGlwJykuJyIgc3R5bGU9ImJvcmRlci1ib3R0b206MXB4IGRhc2hl ZCBibGFjayInKS4nOiAnLiBmSW5wdXQoJ3RleHQnLCduYW1lJywneHh4X3h4eHh4eCcsJycs JycsJycsJzMwJywnMCcpICwgJyBzdHlsZT0iYm9yZGVyOjBweCBzb2xpZCBncmF5O3ZlcnRp Y2FsLWFsaWduOm1pZGRsZTsiJyApKS4NCmVuZFRhYmxlKCkuDQonPC9mb3JtPicNCiwnIGNv bHNwYW49IjgiIHN0eWxlPSJib3JkZXI6MDtoZWlnaHQ6NTBweDt0ZXh0LWFsaWduOmxlZnQi JykNCik7DQoJZWNobyBlbmRUYWJsZSgpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBp ZWRfc3RhdHVzX2xpbmsoJHN0YXR1cywkbmFtZSwkbGlua3RleHQpIHsNCgkkb3V0ID0gJzxh IGhyZWY9ImluZGV4LnBocD8nOw0KCSRvdXQgLj0gJ2V2ZW50PWllZF9wbHVnaW5fY29tcG9z ZXImIzM4O3N0ZXA9aWVkX3N3aXRjaF9zdGF0dXMmIzM4O3N0YXR1cz0nLg0KCSRzdGF0dXMu JyYjMzg7bmFtZT0nLnVybGVuY29kZSgkbmFtZSkuJyInOw0KCSRvdXQgLj0gJz4nLiRsaW5r dGV4dC4nPC9hPic7DQoJcmV0dXJuICRvdXQ7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9u IGllZF9zd2l0Y2hfc3RhdHVzKCkgew0KCWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCdu YW1lJywnc3RhdHVzJykpKSk7DQoJJGNoYW5nZSA9ICgkc3RhdHVzKSA/IDAgOiAxOw0KCXNh ZmVfdXBkYXRlKCJ0eHBfcGx1Z2luIiwgInN0YXR1cz0kY2hhbmdlIiwgIm5hbWU9JyRuYW1l JyIpOw0KCWllZF9wbHVnaW5fbGlzdChnVHh0KCdwbHVnaW5fc2F2ZWQnLCBhcnJheSgne25h bWV9JyA9PiAkbmFtZSkpKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gaWVkX3NldF9v cmRlcigpIHsNCglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgnbmFtZScsICdsb2FkX29y ZGVyJykpKSk7DQoJJG9yZGVyID0gbWluKG1heCggaW50dmFsKCRsb2FkX29yZGVyKSwgMSks IDkpOw0KCXNhZmVfdXBkYXRlKCd0eHBfcGx1Z2luJywgImxvYWRfb3JkZXIgPSAkbG9hZF9v cmRlciIsICJuYW1lID0gJyRuYW1lJyIpOw0KCWllZF9wbHVnaW5fbGlzdChnVHh0KCdwbHVn aW5fc2F2ZWQnLCBhcnJheSgne25hbWV9JyA9PiAkbmFtZSkpKTsNCn0NCg0KLy8gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQ0KZnVuY3Rpb24gaWVkX3BsdWdpbl9vcmRlcl9mb3JtKCRuYW1lLCAkbG9hZF9vcmRlcikg ew0KCWZvciAoJGkgPSAxOyAkaSA8PSA5OyAkaSsrKSAkb3JkZXJzWyRpXSA9ICRpOw0KCXJl dHVybiBmb3JtKA0KCQllSW5wdXQoJ2llZF9wbHVnaW5fY29tcG9zZXInKS5uLg0KCQlzSW5w dXQoJ2llZF9zZXRfb3JkZXInKS5uLg0KCQloSW5wdXQoJ25hbWUnLCAkbmFtZSkubi4NCgkJ c2VsZWN0SW5wdXQoJ2xvYWRfb3JkZXInLCAkb3JkZXJzLCAkbG9hZF9vcmRlciwgMCwgMSkN CgkJLCdkaXNwbGF5OmlubGluZScNCgkpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBp ZWRfcGx1Z2luX2RlbGV0ZSgpIHsNCgkkbmFtZSA9IGRvU2xhc2gocHMoJ25hbWUnKSk7DQoJ c2FmZV9kZWxldGUoInR4cF9wbHVnaW4iLCJuYW1lPSckbmFtZSciKTsNCglpZWRfcGx1Z2lu X2xpc3QoZ1R4dCgncGx1Z2luX2RlbGV0ZWQnLCBhcnJheSgne25hbWV9JyA9PiAkbmFtZSkp KTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gaWVkX3BsdWdpbl9yZXN0b3JlKCkgew0K CSRuYW1lID0gZG9TbGFzaChncHMoJ25hbWUnKSk7DQoJc2FmZV91cGRhdGUoInR4cF9wbHVn aW4iLCJjb2RlID0gY29kZV9yZXN0b3JlIiwibmFtZT0nJG5hbWUnIik7DQoJaWVkX3BsdWdp bl9saXN0KGllZF9wbHVnaW5fZ1R4dCgncmVzdG9yZWQnLCBhcnJheSgne25hbWV9JyA9PiAk bmFtZSkpKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gaWVkX3BsdWdpbl9lZGl0KCRt ZXNzYWdlPScnLCRuZXdmaWxlPScnKSB7DQoJJHNpdGVfZGlyID0gaHU7DQoJJG5ld25hbWUg PSB0cmltKGdwcygnbmV3bmFtZScpKTsNCgkkbmFtZSA9IGVtcHR5KCRuZXduYW1lKSA/IGdw cygnbmFtZScpIDogJG5ld25hbWU7DQoJcGFnZXRvcChnVHh0KCdlZGl0X3BsdWdpbnMnKSwk bWVzc2FnZSk7DQoJZWNobyBpZWRfaW5zZXJ0X2VkaXRvcnMoKTsNCgkkdGhlRmlsZSA9ICgk bmV3ZmlsZSkgPyAkbmV3ZmlsZSA6ICgoZ3BzKCdmaWxlbmFtZScpKSA/IGdwcygnZmlsZW5h bWUnKSA6ICRuYW1lKTsNCgllY2hvIGllZF9wbHVnaW5fZWRpdF9mb3JtKCR0aGVGaWxlLCBn cHMoJ2ZpbGVuYW1lJyk/IDE6IDApOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBpZWRf cGx1Z2luX2VkaXRfZm9ybSgkbmFtZT0nJywkZWRpdGZpbGU9MCkgew0KCWdsb2JhbCAkcHJl ZnMsICRpZWRfcGx1Z2luX3ByZWZzLCAkaWVkX3BsdWdpbl9nbG9iYWxzOw0KCWlmICghJGVk aXRmaWxlKSB7DQoJCSRycyA9IHNhZmVfcm93KCJhdXRob3IsIGF1dGhvcl91cmksIHZlcnNp b24sIGRlc2NyaXB0aW9uLCBjb2RlLCBoZWxwLCBzdGF0dXMsIHR5cGUsIGxvYWRfb3JkZXIs IGZsYWdzIiwgInR4cF9wbHVnaW4iLCAibmFtZT0nJG5hbWUnIik7DQoJCWV4dHJhY3QoJHJz KTsNCgkJbGlzdCgkY3NzLCRoZWxwKSA9ICgkaGVscCkgPyBpZWRfcGx1Z2luX2V4dHJhY3Rf aHVuaygkaGVscCwgIkNTUyIsICI8IS0tfC0tPiIsIHRydWUpIDogYXJyYXkoJycsJGhlbHAp Ow0KCX0gZWxzZSB7DQoJCSRwbHVnaW4gPSBpZWRfcGx1Z2luX3JlYWRfZmlsZSgkcHJlZnNb J3BsdWdpbl9jYWNoZV9kaXInXS5EUy4kbmFtZSk7DQoJCSRmaWxlbmFtZSA9ICRuYW1lOw0K CQkkZmlsZWV4dCA9IGFycmF5X3BvcCgkbmFtZT1leHBsb2RlICgnLicsJG5hbWUpKTsNCgkJ JG5hbWUgPSBpbXBsb2RlKCRuYW1lKTsNCgkJZXh0cmFjdCgkcGx1Z2luKTsNCgkJJHN0YXR1 cyA9ICgkZmlsZWV4dD09J3BocCcpPyAxOiAwOw0KCX0NCgkkZWR3aWR0aCA9IChpc3NldCgk cHJlZnNbJ2llZF9wbHVnaW5fZWRpdG9yX3dpZHRoJ10pICYmIGlzX251bWVyaWMoJHByZWZz WydpZWRfcGx1Z2luX2VkaXRvcl93aWR0aCddKSkgPyAkcHJlZnNbJ2llZF9wbHVnaW5fZWRp dG9yX3dpZHRoJ10gOiAkaWVkX3BsdWdpbl9wcmVmc1swXVsnaWVkX3BsdWdpbl9lZGl0b3Jf d2lkdGgnXTsNCglsaXN0ICgkc3RhcnRfY3NzLCAkZW5kX2NzcykgPSBpZWRfcGx1Z2luX21h a2VfbWFya2VycygiQ1NTIiwgJGllZF9wbHVnaW5fZ2xvYmFsc1snY3NzX3N0YXJ0J10sICRp ZWRfcGx1Z2luX2dsb2JhbHNbJ2Nzc19lbmQnXSk7DQoJJHBsdWdpblsnbmFtZSddID0gJG5h bWU7DQoJJHBsdWdpblsnYXV0aG9yJ10gPSAkYXV0aG9yOw0KCSRwbHVnaW5bJ2F1dGhvcl91 cmknXSA9ICRhdXRob3JfdXJpOw0KCSRwbHVnaW5bJ3ZlcnNpb24nXSA9ICR2ZXJzaW9uOw0K CSRwbHVnaW5bJ2Rlc2NyaXB0aW9uJ10gPSAkZGVzY3JpcHRpb247DQoJJHBsdWdpblsnaGVs cCddID0gaWVkX3BsdWdpbl90ZXh0aWxlKCRuYW1lLCAkaGVscCwgJGNzcywgJHN0YXJ0X2Nz cywgJGVuZF9jc3MpOw0KCSRwbHVnaW5bJ2NvZGUnXSA9ICRjb2RlOw0KCSRwbHVnaW5bJ3R5 cGUnXSA9ICR0eXBlOw0KCSRwbHVnaW5bJ29yZGVyJ10gPSAkbG9hZF9vcmRlcjsNCgkkcGx1 Z2luWydmbGFncyddID0gJGZsYWdzOw0KCSRwbHVnaW5bJ21kNSddID0gbWQ1KCAkcGx1Z2lu Wydjb2RlJ10gKTsNCglmb3IgKCRpID0gMTsgJGkgPD0gOTsgJGkrKykgJG9yZGVyc1skaV0g PSAkaTsNCg0KCSRkaXN0cmlidXRpb249Jzx0ZXh0YXJlYSBuYW1lPSJkaXN0cmlidXRpb24i IHJvd3M9IjEiIGNvbHM9IicuJGVkd2lkdGguJyIgb25jbGljaz0idGhpcy5zZWxlY3QoKSI+ Jy5iYXNlNjRfZW5jb2RlKHNlcmlhbGl6ZSgkcGx1Z2luKSkuJzwvdGV4dGFyZWE+JzsNCg0K CSRmbmFtZXMgPSBpZWRfcGx1Z2luX2dldF9uYW1lKCRwbHVnaW5bJ25hbWUnXSwgJHBsdWdp blsndmVyc2lvbiddKTsNCgkkbmFtZWRMaW5rID0gKGlzc2V0KCRmaWxlbmFtZSkpID8gJ2Zp bGVuYW1lPScuJGZpbGVuYW1lIDogJ25hbWU9Jy4kbmFtZTsNCg0KCSRzbGluayA9ICc8YSBo cmVmPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2luX3Nh dmVfYXNfZmlsZSYjMzg7Jy4kbmFtZWRMaW5rLiciPicgLmllZF9wbHVnaW5fZ1R4dCgnZXhw b3J0JykgLicgJy4gJGZuYW1lc1swXS4gJzwvYT4nOw0KCSRzemlwbGluayA9ICc8YSBocmVm PSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2luX3NhdmVf YXNfZmlsZSYjMzg7Jy4kbmFtZWRMaW5rLicmIzM4O3ppcD10cnVlIj4nIC4gaWVkX3BsdWdp bl9nVHh0KCdleHBvcnQnKSAuJyAnLiAkZm5hbWVzWzFdLiAnIChjb21wcmVzc2VkKTwvYT4n Ow0KCSRzcGhwbGluayA9ICc8YSBocmVmPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYj Mzg7c3RlcD1pZWRfcGx1Z2luX3NhdmVfYXNfcGhwX2ZpbGUmIzM4OycuJG5hbWVkTGluay4n Ij4nIC4gaWVkX3BsdWdpbl9nVHh0KCdzYXZlX2FzJykgLicgJy4gJGZuYW1lc1syXS4gJzwv YT4nOw0KCSR2aGVscGxpbmtmdWxsID0gKCRoZWxwKSA/ICc8YSBocmVmPSI/ZXZlbnQ9aWVk X3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2luX2hlbHBfdmlld2VyJiMzODsn LiRuYW1lZExpbmsuJyI+WyAnLnN0cm9uZyhnVHh0KCd2aWV3JykuJyAnLmdUeHQoJ2hlbHAn KSkuJyBdPC9hPicgOiAnJzsNCg0KCSRuZXduYW1lID0gZklucHV0KCd0ZXh0JywnbmV3bmFt ZScsJG5hbWUsJ2VkaXQnLCcnLCcnLCRlZHdpZHRoIC0gKGludCkoJGVkd2lkdGgqMC4zKSwn MicpOw0KCSRhdXRob3IgPSBmSW5wdXQoJ3RleHQnLCdhdXRob3InLCRhdXRob3IsJ2VkaXQn LCcnLCcnLCRlZHdpZHRoLCcyJyk7DQoJJGF1dGhvcl91cmkgPSBmSW5wdXQoJ3RleHQnLCdh dXRob3JfdXJpJywkYXV0aG9yX3VyaSwnZWRpdCcsJycsJycsJGVkd2lkdGgsJzInKTsNCgkk dmVyc2lvbiA9IGZJbnB1dCgndGV4dCcsJ3ZlcnNpb24nLCR2ZXJzaW9uLCdlZGl0JywnJywn JywkZWR3aWR0aCAtIChpbnQpKCRlZHdpZHRoKjAuMyksJzInKSAuICcmIzE2MDsmIzE2MDsn LiAoKCRlZGl0ZmlsZSkgPyBjaGVja2JveCgncmVuYW1lX2ZpbGUnLCAnMScsIDAsICcnLCdy ZW5hbWVfZmlsZScpIC4gJyA8bGFiZWwgZm9yPSJyZW5hbWVfZmlsZSI+Jy5pZWRfcGx1Z2lu X2dUeHQoJ3JlbmFtZV9maWxlJykuJzwvbGFiZWw+JyA6IGNoZWNrYm94KCdyZXN0b3JlX3Bv aW50JywgJzEnLCAwLCAnJywncmVzdG9yZV9wb2ludCcpIC4gJyA8bGFiZWwgZm9yPSJyZXN0 b3JlX3BvaW50Ij4nLmllZF9wbHVnaW5fZ1R4dCgncmVzdG9yZV9wb2ludCcpLic8L2xhYmVs PicpOw0KCSRkZXNjcmlwdGlvbiA9ZklucHV0KCd0ZXh0JywnZGVzY3JpcHRpb24nLCRkZXNj cmlwdGlvbiwnZWRpdCcsJycsJycsJGVkd2lkdGgsJzInKTsNCgkkY29kZSA9ICc8dGV4dGFy ZWEgbmFtZT0iY29kZSIgaWQ9InBsdWdpbl9lZGl0b3IiIHJvd3M9IjMwIiBjb2xzPSInLiRl ZHdpZHRoLiciIGNsYXNzPSJjb2RlIGNvZGVwcmVzcyBwaHAiIG1heGxlbmd0aD0iJy4kaWVk X3BsdWdpbl9nbG9iYWxzWydzaXplX2NvZGUnXS4nIj4nLmh0bWxzcGVjaWFsY2hhcnMoJGNv ZGUpLic8L3RleHRhcmVhPjxkaXYgY2xhc3M9ImNoYXJzUmVtYWluIj48L2Rpdj4nOw0KCSRo ZWxwID0gJzx0ZXh0YXJlYSBuYW1lPSJoZWxwIiByb3dzPSIzMCIgY29scz0iJy4kZWR3aWR0 aC4nIiBjbGFzcz0ibWNlRWRpdG9yIiBtYXhsZW5ndGg9IicuJGllZF9wbHVnaW5fZ2xvYmFs c1snc2l6ZV9oZWxwJ10uJyI+Jy5odG1sc3BlY2lhbGNoYXJzKCRoZWxwKS4nPC90ZXh0YXJl YT48ZGl2IGNsYXNzPSJjaGFyc1JlbWFpbiI+PC9kaXY+JzsNCgkkY3NzID0gJzx0ZXh0YXJl YSBuYW1lPSJjc3MiIHJvd3M9IjE1IiBjb2xzPSInLiRlZHdpZHRoLiciIGNsYXNzPSJjb2Rl IiBtYXhsZW5ndGg9IicuJGllZF9wbHVnaW5fZ2xvYmFsc1snc2l6ZV9jc3MnXS4nIj4nLmh0 bWxzcGVjaWFsY2hhcnMoJGNzcykuJzwvdGV4dGFyZWE+PGRpdiBjbGFzcz0iY2hhcnNSZW1h aW4iPjwvZGl2Pic7DQoJJHBsdWdzdGF0dXMgPSAoISRlZGl0ZmlsZSkgPyAnJiMxNjA7JiMx NjA7Jy5jaGVja2JveCgnc3RhdHVzJywxLCRzdGF0dXMsICcnLCdzdGF0dXMnKS4gJyA8bGFi ZWwgZm9yPSJzdGF0dXMiPicuaWVkX3BsdWdpbl9nVHh0KCdlbmFibGUnKS4nPC9sYWJlbD4n IDogJyc7DQoJJHBsdWd0eXBlID0gcmFkaW8oJ3R5cGUnLDAsKCgkdHlwZT09MCk/MTowKSku aWVkX3BsdWdpbl9nVHh0KCd0eXBlXzAnKS4iICINCgkJLiByYWRpbygndHlwZScsMSwoKCR0 eXBlPT0xKT8xOjApKS5pZWRfcGx1Z2luX2dUeHQoJ3R5cGVfMScpLiIgIg0KCQkuIHJhZGlv KCd0eXBlJywyLCgoJHR5cGU9PTIpPzE6MCkpLmllZF9wbHVnaW5fZ1R4dCgndHlwZV8yJyku IiAiDQoJCS4gcmFkaW8oJ3R5cGUnLDMsKCgkdHlwZT09Myk/MTowKSkuaWVkX3BsdWdpbl9n VHh0KCd0eXBlXzMnKTsNCgkkcGx1Z29yZGVyID0gc2VsZWN0SW5wdXQoJ2xvYWRfb3JkZXIn LCAkb3JkZXJzLCAkbG9hZF9vcmRlciwgMCwgMCk7DQoJJGZsYWdsaXN0ID0gY2hlY2tib3go J2ZsYWdzW10nLFBMVUdJTl9IQVNfUFJFRlMsKCgkZmxhZ3MgJiBQTFVHSU5fSEFTX1BSRUZT KT8xOjApKSAuICc8bGFiZWw+Jy5pZWRfcGx1Z2luX2dUeHQoJ2ZsYWdfaGFzX3ByZWZzJyku JzwvbGFiZWw+Jm5ic3A7Jm5ic3A7Jw0KCQkuY2hlY2tib3goJ2ZsYWdzW10nLFBMVUdJTl9M SUZFQ1lDTEVfTk9USUZZLCgoJGZsYWdzICYgUExVR0lOX0xJRkVDWUNMRV9OT1RJRlkpPzE6 MCkpIC4gJzxsYWJlbD4nLmllZF9wbHVnaW5fZ1R4dCgnZmxhZ19saWZlY3ljbGVfbm90aWZ5 JykuJzwvbGFiZWw+Jm5ic3A7Jm5ic3A7JzsNCi8vCQkuY2hlY2tib3goJ2ZsYWdzW10nLDB4 MDAwNCwoKCRmbGFncyAmIDB4MDAwNCk/MTowKSkgLiAnPGxhYmVsPlN1bW1hdCBlbHNlPC9s YWJlbD4mbmJzcDsmbmJzcDsnOw0KDQoJJHN1YiA9IGZJbnB1dCgnc3VibWl0JywnJyxnVHh0 KCdzYXZlJyksJ3B1Ymxpc2gnKTsNCglyZXR1cm4gZm9ybShzdGFydFRhYmxlKCdlZGl0JykN CgkuIHRyKCBmTGFiZWxDZWxsKCcmbmJzcDsnKSAuIHRkKCRzdWIgLiAkdmhlbHBsaW5rZnVs bCkpDQoJLiB0ciggZkxhYmVsQ2VsbCggJ3BsdWdpbicgKSAuIHRkKCRuZXduYW1lIC4gJHBs dWdzdGF0dXMgLiAoIChpc3NldCgkZmlsZW5hbWUpKSA/IHRhZygnJiMxNjA7JiMxNjA7KCcu JGZpbGVuYW1lLicpJywnc3BhbicsJyBzdHlsZT0iY29sb3I6Z3JheTsiJykuaElucHV0KCdm aWxlbmFtZScsJGZpbGVuYW1lKSA6ICcnICkgKSkNCgkuIHRyKCBmTGFiZWxDZWxsKCBpZWRf cGx1Z2luX2dUeHQoJ3BsdWdpbl9jb2RlJykgKSAuIHRkKCRjb2RlKSkNCgkuIHRyKCBmTGFi ZWxDZWxsKCBpZWRfcGx1Z2luX2dUeHQoJ3R5cGUnKSApIC4gdGQoJHBsdWd0eXBlKSkNCgku IHRyKCBmTGFiZWxDZWxsKCBpZWRfcGx1Z2luX2dUeHQoJ2ZsYWdzJykgKSAuIHRkKCRmbGFn bGlzdCkpDQoJLiB0ciggZkxhYmVsQ2VsbCggaWVkX3BsdWdpbl9nVHh0KCdsb2FkX29yZGVy JykgKSAuIHRkKCRwbHVnb3JkZXIuJyYjMTYwOyYjMTYwOycuaWVkX3BsdWdpbl9nVHh0KCds b2FkX29yZGVyX2hlbHAnKSkpDQoJLiB0ciggZkxhYmVsQ2VsbCggJ3ZlcnNpb24nICkgLiB0 ZCgkdmVyc2lvbikpDQoJLiB0ciggZkxhYmVsQ2VsbCggJ2F1dGhvcicgKSAuIHRkKCRhdXRo b3IpKQ0KCS4gdHIoIGZMYWJlbENlbGwoICd3ZWJzaXRlJyApIC4gdGQoJGF1dGhvcl91cmkp KQ0KCS4gdHIoIGZMYWJlbENlbGwoICdkZXNjcmlwdGlvbicgKSAuIHRkKCRkZXNjcmlwdGlv bikpDQoJLiB0ciggdGRhKGdUeHQoJ3BsdWdpbl9oZWxwJyksICcgY2xhc3M9Im5vbGluZSIg c3R5bGU9InRleHQtYWxpZ246IHJpZ2h0OyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyInKSAu IHRkKCRoZWxwKSkNCgkuIHRyKCBmTGFiZWxDZWxsKCAnY3NzJyApIC4gdGQoJGNzcykpDQoJ LiB0ciggZkxhYmVsQ2VsbCgnJm5ic3A7JykgLiB0ZCgkc3ViKSkNCg0KCS4gdHIoIHRkY3Mo Jzxocj4nLDIpKQ0KCS4gdHIoIGZMYWJlbENlbGwoJyZuYnNwOycpIC4gdGQoaWVkX3BsdWdp bl9nVHh0KCd1dGlsaXRpZXMnKS4nOicpKQ0KDQoJLiB0ciggZkxhYmVsQ2VsbCggaWVkX3Bs dWdpbl9nVHh0KCdjb2RlX2Rpc3QnKSApIC4gdGQoJGRpc3RyaWJ1dGlvbikpDQoJLiB0cigg ZkxhYmVsQ2VsbCgnJm5ic3A7JykgLiB0ZCgkc2xpbmspKQ0KCS4gdHIoIGZMYWJlbENlbGwo JyZuYnNwOycpIC4gdGQoJHN6aXBsaW5rKSkNCgkuIHRyKCBmTGFiZWxDZWxsKCcmbmJzcDsn KSAuIHRkKCRzcGhwbGluaykpDQoJLiBlbmRUYWJsZSgpDQoJLiBzSW5wdXQoJ2llZF9wbHVn aW5fc2F2ZScpDQoJLiBlSW5wdXQoJ2llZF9wbHVnaW5fY29tcG9zZXInKQ0KCS4gaElucHV0 KCduYW1lJywkbmFtZSkpCS4gPDw8RU9GDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw dCI+DQpqUXVlcnkuZm4ucmVzaXplaGFuZGxlID0gZnVuY3Rpb24oY3VyaCkgew0KCXJldHVy biB0aGlzLmVhY2goZnVuY3Rpb24oKSB7DQoJCXZhciBtZSA9IGpRdWVyeSh0aGlzKTsNCgkJ bWUuYW5pbWF0ZSh7aGVpZ2h0OiBjdXJofSk7DQoJCW1lLmFmdGVyKA0KCQkJalF1ZXJ5KCc8 ZGl2IGNsYXNzPSJyZXNpemVoYW5kbGUiPi0tLSArIC0tLTwvZGl2PicpLmJpbmQoIm1vdXNl ZG93biIsIGZ1bmN0aW9uKGUpIHsNCgkJCQl2YXIgaCA9IG1lLmhlaWdodCgpOw0KCQkJCXZh ciB5ID0gZS5jbGllbnRZOw0KCQkJCXZhciBtb3ZlSGFuZGxlciA9IGZ1bmN0aW9uKGUpIHsN CgkJCQkJbWUuaGVpZ2h0KE1hdGgubWF4KDIwLCBlLmNsaWVudFkgKyBoIC0geSkpOw0KCQkJ CX07DQoJCQkJdmFyIHVwSGFuZGxlciA9IGZ1bmN0aW9uKGUpIHsNCgkJCQkJalF1ZXJ5KCJo dG1sIikudW5iaW5kKCJtb3VzZW1vdmUiLG1vdmVIYW5kbGVyKS51bmJpbmQoIm1vdXNldXAi LHVwSGFuZGxlcik7DQoJCQkJCW5ld2ggPSBtZS5oZWlnaHQoKTsNCgkJCQkJc2V0Q29va2ll KCdpZWRfcGx1Z2luX2VkaGVpZ2h0JywgbmV3aCwgMzApOw0KCQkJCX07DQoJCQkJalF1ZXJ5 KCJodG1sIikuYmluZCgibW91c2Vtb3ZlIiwgbW92ZUhhbmRsZXIpLmJpbmQoIm1vdXNldXAi LCB1cEhhbmRsZXIpOw0KCQkJfSkNCgkJKTsNCgl9KTsNCn0NCmpRdWVyeShmdW5jdGlvbigp IHsNCgljdXJoID0gZ2V0Q29va2llKCdpZWRfcGx1Z2luX2VkaGVpZ2h0Jyk7DQoJY3VyaCA9 IChjdXJoID09IG51bGwpID8gJzQ4MCcgOiBjdXJoOw0KCWpRdWVyeSgiI3BsdWdpbl9lZGl0 b3IiKS5yZXNpemVoYW5kbGUocGFyc2VJbnQoY3VyaCkpOw0KCWpRdWVyeSgndGV4dGFyZWFb bWF4bGVuZ3RoXScpLmtleXVwKGZ1bmN0aW9uKCl7DQoJCXZhciBtYXggPSBwYXJzZUludChq UXVlcnkodGhpcykuYXR0cignbWF4bGVuZ3RoJykpOw0KCQlpZihqUXVlcnkodGhpcykudmFs KCkubGVuZ3RoID4gbWF4KXsNCgkJCWpRdWVyeSh0aGlzKS52YWwoalF1ZXJ5KHRoaXMpLnZh bCgpLnN1YnN0cigwLCBqUXVlcnkodGhpcykuYXR0cignbWF4bGVuZ3RoJykpKTsNCgkJfQ0K CQlqUXVlcnkodGhpcykucGFyZW50KCkuZmluZCgnLmNoYXJzUmVtYWluJykuaHRtbCgnQ2hh cnMgcmVtYWluaW5nOiAnKyAobWF4IC0galF1ZXJ5KHRoaXMpLnZhbCgpLmxlbmd0aCkpOw0K CX0pOw0KCWpRdWVyeSgndGV4dGFyZWFbbWF4bGVuZ3RoXScpLmtleXVwKCk7DQp9KTsNCjwv c2NyaXB0Pg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCi5yZXNpemVoYW5kbGUgew0KCWN1 cnNvcjpzLXJlc2l6ZTsNCglmbG9hdDpsZWZ0Ow0KCXRleHQtYWxpZ246Y2VudGVyOw0KCWZv bnQtc2l6ZToxZW07DQoJd2lkdGg6ODIlOw0KCXBhZGRpbmc6MnB4IDAgNnB4Ow0KfQ0KLmNo YXJzUmVtYWluIHsNCgl0ZXh0LWFsaWduOnJpZ2h0Ow0KCWNvbG9yOmdyYXk7DQp9DQo8L3N0 eWxlPg0KRU9GOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBpZWRfcGx1Z2luX3NhdmUo KSB7DQoJZ2xvYmFsICRpZWRfcGx1Z2luX2dsb2JhbHMsICRwcmVmczsNCglleHRyYWN0KGRv U2xhc2goZ3BzYShhcnJheSgnbmFtZScsJ25ld25hbWUnLCdmaWxlbmFtZScsJ2NvZGUnLCdh dXRob3InLCdhdXRob3JfdXJpJywndmVyc2lvbicsJ2Rlc2NyaXB0aW9uJywnaGVscCcsJ2Nz cycsJ3N0YXR1cycsJ3R5cGUnLCdsb2FkX29yZGVyJywncmVuYW1lX2ZpbGUnLCdyZXN0b3Jl X3BvaW50JykpKSk7DQoJJGZsYWdzID0gZ3BzKCdmbGFncycpOw0KDQoJbGlzdCAoJHN0YXJ0 X2NzcywgJGVuZF9jc3MpID0gaWVkX3BsdWdpbl9tYWtlX21hcmtlcnMoIkNTUyIsICRpZWRf cGx1Z2luX2dsb2JhbHNbJ2Nzc19zdGFydCddLCAkaWVkX3BsdWdpbl9nbG9iYWxzWydjc3Nf ZW5kJ10pOw0KCSRleHRyYU1zZyA9ICRuZXdmaWxlbmFtZSA9ICRtc2cxID0gJG1zZzIgPSAn JzsNCgkkbmV3bmFtZSA9IHRyaW0oJG5ld25hbWUpOw0KCWlmICgkZmxhZ3MpIHsNCgkJJGZs YWdvdXQgPSAwOw0KCQlmb3JlYWNoICgkZmxhZ3MgYXMgJGZsYWcpIHsNCgkJCSRmbGFnb3V0 IHw9ICRmbGFnOw0KCQl9DQoJCSRmbGFncyA9ICRmbGFnb3V0Ow0KCX0NCg0KCWlmIChlbXB0 eSgkbmV3bmFtZSkpIHsNCgkJJG1zZzEgPSBpZWRfcGx1Z2luX2dUeHQoJ25hbWVfZmlyc3Qn KTsNCgl9IGVsc2Ugew0KCQlpZiAoZW1wdHkoJGZpbGVuYW1lKSkgew0KCQkJJGhvdXQgPSBh cnJheSgpOw0KCQkJJGhvdXRbMF0gPSAkaGVscDsNCgkJCWlmICgkY3NzKSB7ICRob3V0WzFd ID0gbi4kc3RhcnRfY3NzLm4uJGNzcy5uLiRlbmRfY3NzOyB9DQoJCQlzYWZlX3VwZGF0ZSgN CgkJCQkndHhwX3BsdWdpbicsDQoJCQkJIm5hbWU9JyIuJG5ld25hbWUuIicsDQoJCQkJc3Rh dHVzID0gIi5pbnR2YWwoJHN0YXR1cykuIiwNCgkJCQl0eXBlID0gIi5pbnR2YWwoJHR5cGUp LiIsDQoJCQkJYXV0aG9yID0gJyIuJGF1dGhvci4iJywNCgkJCQlhdXRob3JfdXJpID0gJyIu JGF1dGhvcl91cmkuIicsDQoJCQkJdmVyc2lvbiA9ICciLiR2ZXJzaW9uLiInLA0KCQkJCWRl c2NyaXB0aW9uID0gJyIuJGRlc2NyaXB0aW9uLiInLA0KCQkJCWhlbHAgPSAnIi5qb2luKCcn LCRob3V0KS4iJywNCgkJCQljb2RlID0gJyIuJGNvZGUuIicsDQoJCQkJZmxhZ3MgPSAiLmlu dHZhbCgkZmxhZ3MpLiIsDQoJCQkJIi4oKCRyZXN0b3JlX3BvaW50ID09IDEpPyAiY29kZV9y ZXN0b3JlID0gJyIuJGNvZGUuIicsIiA6ICcnKS4iDQoJCQkJbG9hZF9vcmRlciA9ICIuJGxv YWRfb3JkZXIsDQoJCQkJIm5hbWUgPSAnIi4kbmFtZS4iJyIpOw0KCQkJJG1zZzEgPSBnVHh0 KCdwbHVnaW5fc2F2ZWQnLCBhcnJheSgne25hbWV9JyA9PiAkbmV3bmFtZSkpOw0KCQl9IGVs c2Ugew0KCQkJJGRpciA9ICRwcmVmc1sncGx1Z2luX2NhY2hlX2RpciddLkRTOw0KCQkJaWYg KGZpbGVfZXhpc3RzKCRkaXIuJGZpbGVuYW1lKSkgew0KCQkJCSRmaWxlY29udGVudCA9IGZp bGUoJGRpci4kZmlsZW5hbWUpOw0KCQkJfSBlbHNlIHsNCgkJCQlpZiAoZW1wdHkoJHByZWZz WydwbHVnaW5fY2FjaGVfZGlyJ10pKSB7DQoJCQkJCSRmaWxlY29udGVudCA9ICcnOw0KCQkJ CQkkbXNnMiA9IGllZF9wbHVnaW5fZ1R4dCgnY2FjaGVfbm90X3NldCcpOw0KCQkJCX0gZWxz ZSB7DQoJCQkJCSRvcG9yZGVyID0gKGlzc2V0KCRwcmVmc1snaWVkX3BsdWdpbl9vdXRwdXRf b3JkZXInXSkgJiYgaXNfbnVtZXJpYygkcHJlZnNbJ2llZF9wbHVnaW5fb3V0cHV0X29yZGVy J10pKSA/ICRwcmVmc1snaWVkX3BsdWdpbl9vdXRwdXRfb3JkZXInXSA6IDA7DQoJCQkJCSRo ZWxwY2h1bmsgPSBpZWRfcGx1Z2luX2J1aWxkX3RlbXBsYXRlKCdoZWxwJywgYXJyYXkoJGhl bHAsICcgJykpOyAvLyBVc2UgYSBzcGFjZSB0byBmb3JjZSBhIENTUyBodW5rIGluIHRoZSBm aWxlDQoJCQkJCSRjb2RlY2h1bmsgPSBpZWRfcGx1Z2luX2J1aWxkX3RlbXBsYXRlKCdjb2Rl JywgJGNvZGUpOw0KCQkJCQkkZmlsZWNvbnRlbnQgPSBpZWRfcGx1Z2luX2J1aWxkX3RlbXBs YXRlKCJwcmVhbWJsZSIpDQoJCQkJCQkuaWVkX3BsdWdpbl9idWlsZF90ZW1wbGF0ZSgibmFt ZSIsICRuZXduYW1lKQ0KCQkJCQkJLmllZF9wbHVnaW5fYnVpbGRfdGVtcGxhdGUoImh0bWxf aGVscCIpDQoJCQkJCQkuaWVkX3BsdWdpbl9idWlsZF90ZW1wbGF0ZSgidmVyc2lvbiIsICR2 ZXJzaW9uKQ0KCQkJCQkJLmllZF9wbHVnaW5fYnVpbGRfdGVtcGxhdGUoImF1dGhvciIsICRh dXRob3IpDQoJCQkJCQkuaWVkX3BsdWdpbl9idWlsZF90ZW1wbGF0ZSgiYXV0aG9yX3VyaSIs ICRhdXRob3JfdXJpKQ0KCQkJCQkJLmllZF9wbHVnaW5fYnVpbGRfdGVtcGxhdGUoImRlc2Ny aXB0aW9uIiwgJGRlc2NyaXB0aW9uKQ0KCQkJCQkJLmllZF9wbHVnaW5fYnVpbGRfdGVtcGxh dGUoImxvYWRfb3JkZXIiLCAkbG9hZF9vcmRlcikNCgkJCQkJCS5pZWRfcGx1Z2luX2J1aWxk X3RlbXBsYXRlKCJ0eXBlIiwgJHR5cGUpDQoJCQkJCQkuaWVkX3BsdWdpbl9idWlsZF90ZW1w bGF0ZSgiZmxhZ3MiLCAkZmxhZ3MpDQoJCQkJCQkuaWVkX3BsdWdpbl9idWlsZF90ZW1wbGF0 ZSgiaW5jbHVkZSIpDQoJCQkJCQkuKCgkb3BvcmRlciA9PSAwKSA/ICRjb2RlY2h1bmsgOiAk aGVscGNodW5rKQ0KCQkJCQkJLigoJG9wb3JkZXIgPT0gMSkgPyAkY29kZWNodW5rIDogJGhl bHBjaHVuaykNCgkJCQkJCS5pZWRfcGx1Z2luX2J1aWxkX3RlbXBsYXRlKCJwb3N0YW1ibGUi KTsNCgkJCQkJJG1zZzEgPSBpZWRfcGx1Z2luX2dUeHQoJ2VkaXRfbmV3Jyk7DQoJCQkJfQ0K CQkJfQ0KDQoJCQkkZmlsZWNvbnRlbnQgPSBpZWRfcGx1Z2luX21ha2VfYXJyYXkoJGZpbGVj b250ZW50KTsNCgkJCSRtZXRhdmFycyA9IGFycmF5KCJuYW1lIiA9PiAiJG5ld25hbWUiLA0K CQkJCQkJCQkJInZlcnNpb24iID0+ICIkdmVyc2lvbiIsDQoJCQkJCQkJCQkiYXV0aG9yIiA9 PiAiJGF1dGhvciIsDQoJCQkJCQkJCQkiYXV0aG9yX3VyaSIgPT4gIiRhdXRob3JfdXJpIiwN CgkJCQkJCQkJCSJkZXNjcmlwdGlvbiIgPT4gIiRkZXNjcmlwdGlvbiIsDQoJCQkJCQkJCQki dHlwZSIgPT4gIiR0eXBlIiwNCgkJCQkJCQkJCSJmbGFncyIgPT4gIiRmbGFncyIsDQoJCQkJ CQkJCQkib3JkZXIiID0+ICIkbG9hZF9vcmRlciIsDQoJCQkJCQkJKTsNCgkJCSRodW5rdmFy cyA9IGFycmF5KCJDT0RFIiA9PiBkb1N0cmlwKHN0cl9yZXBsYWNlKCdcclxuJywnDQonLCRj b2RlKSksIC8vIG5ld2xpbmUgd29ya2Fyb3VuZA0KCQkJCQkJIkhFTFAiID0+IGRvU3RyaXAo c3RyX3JlcGxhY2UoJ1xyXG4nLCcNCicsJGhlbHApKSwNCgkJCQkJCSJDU1MiID0+IGRvU3Ry aXAoc3RyX3JlcGxhY2UoJ1xyXG4nLCcNCicsJGNzcykpLA0KCQkJCQkJCSk7DQoJCQlmb3Jl YWNoICgkbWV0YXZhcnMgYXMgJHZhcm5hbWUgPT4gJHZhbHVlKSB7DQoJCQkJZm9yKCRpZHgg PSAwOyAkaWR4IDwgY291bnQoJGZpbGVjb250ZW50KTsgJGlkeCsrKSB7DQoJCQkJCWlmIChz dHJwb3MoJGZpbGVjb250ZW50WyRpZHhdLCAnJHBsdWdpbltcJycuJHZhcm5hbWUuJ1wnXScp ID09PSAwKSB7DQoJCQkJCQkkZmlsZWNvbnRlbnRbJGlkeF0gPSAnJHBsdWdpbltcJycuJHZh cm5hbWUuJ1wnXSA9ICcuZG9RdW90ZSgkdmFsdWUpLic7JzsNCgkJCQkJCWJyZWFrOw0KCQkJ CQl9DQoJCQkJfQ0KCQkJfQ0KCQkJZm9yZWFjaCAoJGh1bmt2YXJzIGFzICR2YXJuYW1lID0+ ICRodW5rKSB7DQoJCQkJbGlzdCAoJHN0YXJ0X2RlbGltLCAkZW5kX2RlbGltKSA9IGllZF9w bHVnaW5fbWFrZV9tYXJrZXJzKCR2YXJuYW1lLCAkaWVkX3BsdWdpbl9nbG9iYWxzWydkbG1f c3RhcnQnXSwgJGllZF9wbHVnaW5fZ2xvYmFsc1snZGxtX2VuZCddKTsNCgkJCQkkc3RhcnQg PSBhcnJheV9zZWFyY2goJHN0YXJ0X2RlbGltLCAkZmlsZWNvbnRlbnQpICsgMTsNCgkJCQkk ZW5kID0gYXJyYXlfc2VhcmNoKCRlbmRfZGVsaW0sICRmaWxlY29udGVudCk7DQoJCQkJaWYg KGlzX251bWVyaWMoJHN0YXJ0KSAmJiBpc19udW1lcmljKCRlbmQpICYmICRlbmQgPj0gJHN0 YXJ0KSB7DQoJCQkJCWFycmF5X3NwbGljZSgkZmlsZWNvbnRlbnQsICRzdGFydCwgJGVuZC0k c3RhcnQsICRodW5rKTsNCgkJCQl9DQoJCQl9DQoJCQkkZmlsZWNvbnRlbnQgPSBpbXBsb2Rl KCJcbiIsICRmaWxlY29udGVudCk7DQoNCgkJCWlmICgkZmlsZWNvbnRlbnQpIHsNCgkJCQkk ZmggPSBmb3BlbigkZGlyLiRmaWxlbmFtZSwgJ3crJyk7DQoJCQkJZndyaXRlKCRmaCwgJGZp bGVjb250ZW50KTsNCgkJCQlmY2xvc2UoJGZoKTsNCgkJCX0NCgkJCSRtc2cxID0gKGVtcHR5 KCRtc2cxKSkgPyBnVHh0KCdwbHVnaW5fc2F2ZWQnLCBhcnJheSgne25hbWV9JyA9PiAkbmV3 bmFtZSkpIDogJG1zZzE7DQoNCgkJCS8vIE1ha2UgbmV3IGZpbGUgaWYgcmVxdWlyZWQNCgkJ CWlmICgkcmVuYW1lX2ZpbGUgPT0gMSkgew0KCQkJCSRmbmFtZXMgPSBpZWRfcGx1Z2luX2dl dF9uYW1lKCRuZXduYW1lLCAkdmVyc2lvbik7DQoJCQkJJG5ld2ZpbGVuYW1lID0gJGZuYW1l c1syXTsNCgkJCQkkcmVzID0gcmVuYW1lKCRkaXIuJGZpbGVuYW1lLCAkZGlyLiRuZXdmaWxl bmFtZSk7DQoJCQkJJGV4dHJhTXNnID0gKCRyZXMpID8gaWVkX3BsdWdpbl9nVHh0KCdyZW5h bWVkJykgOiBpZWRfcGx1Z2luX2dUeHQoJ3JlbmFtZV9mYWlsZWQnKTsNCgkJCX0NCgkJfQ0K CX0NCglpZiAoJG1zZzIpIHsNCgkJaWVkX3BsdWdpbl9saXN0KCRtc2cyKTsNCgl9IGVsc2Ug ew0KCQkvLyBDaGVjayB0aGUgcGx1Z2luIHR5cGUgbWF0Y2hlcyB0aGUgY29kZSB1c2VkDQoJ CSRleHRyYU1zZyAuPSAoaWVkX3BsdWdpbl9hZG1pbl9jaGVjaygkY29kZSwgJHR5cGUpKSA/ ICcnIDogc3Ryb25nKGllZF9wbHVnaW5fZ1R4dCgnY2hlY2tfdHlwZScpKTsNCgkJJG1lc3Nh Z2UgPSAkbXNnMS5ici4kZXh0cmFNc2c7DQoJCWllZF9wbHVnaW5fZWRpdCgkbWVzc2FnZSwg JG5ld2ZpbGVuYW1lKTsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIGllZF9wbHVn aW5fY3JlYXRlX25ldygpIHsNCglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgnbmFtZScp KSkpOw0KCSRmbmFtZSA9ICcnOw0KCWlmICgkbmFtZT09JycpIHsNCgkJaWVkX3BsdWdpbl9s aXN0KGllZF9wbHVnaW5fZ1R4dCgnbmFtZV9maXJzdCcpKTsNCgkJcmV0dXJuOw0KCX0NCglp ZiAoc3RycG9zKCRuYW1lLCAiLnBocCIpICE9PSBmYWxzZSkgew0KCQkkZm5hbWUgPSAkbmFt ZTsNCgkJJG5hbWUgPSBiYXNlbmFtZSgkbmFtZSwgIi5waHAiKTsNCgl9DQoJJGV4aXN0cyA9 IGZldGNoKCduYW1lJywndHhwX3BsdWdpbicsJ25hbWUnLCRuYW1lKTsNCglpZiAoISRleGlz dHMpIHsNCgkJaWYgKCRmbmFtZSkgew0KCQkJLy8gUHV0IHBsdWdpbiBpbiBjYWNoZSBkaXIg YnkgZmFraW5nIGEgUE9TVCBzdWJtaXNzaW9uIGFuZCBzYXZpbmcNCgkJCSRfUE9TVFsnZmls ZW5hbWUnXSA9ICRmbmFtZTsNCgkJCSRfUE9TVFsnbmV3bmFtZSddID0gJG5hbWU7DQoJCQkk X1BPU1RbJ3N0YXR1cyddID0gMDsNCgkJCSRfUE9TVFsndHlwZSddID0gMDsNCgkJCSRfUE9T VFsndmVyc2lvbiddID0gJzAuMSc7DQoJCQkkX1BPU1RbJ2xvYWRfb3JkZXInXSA9IDU7DQoJ CQkkX1BPU1RbJ2ZsYWdzJ10gPSAwOw0KCQkJaWVkX3BsdWdpbl9zYXZlKCk7DQoJCX0gZWxz ZSB7DQoJCQlzYWZlX2luc2VydCgidHhwX3BsdWdpbiIsICINCgkJCQluYW1lPSckbmFtZScs DQoJCQkJc3RhdHVzPTAsDQoJCQkJdHlwZT0wLA0KCQkJCXZlcnNpb249JzAuMScsDQoJCQkJ bG9hZF9vcmRlcj01LA0KCQkJCWZsYWdzPTAsDQoJCQkJZGVzY3JpcHRpb249JycsDQoJCQkJ aGVscD0nJywNCgkJCQljb2RlPScnLA0KCQkJCWNvZGVfcmVzdG9yZT0nJw0KCQkJIik7DQoJ CQlwYWdldG9wKGdUeHQoJ2VkaXRfcGx1Z2lucycpLCBpZWRfcGx1Z2luX2dUeHQoJ2VkaXRf bmV3JykpOw0KCQkJZWNobyBpZWRfcGx1Z2luX2VkaXRfZm9ybSgkbmFtZSk7DQoJCX0NCgl9 IGVsc2Ugew0KCQlpZWRfcGx1Z2luX2xpc3QoZ1R4dCgncGx1Z2luJykuJyA8c3Ryb25nPicu JG5hbWUuJzwvc3Ryb25nPiAnLmdUeHQoJ2FscmVhZHlfZXhpc3RzJykpOw0KCX0NCn0NCg0K Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQ0KZnVuY3Rpb24gaWVkX3BsdWdpbl9zYXZlX2FzX2ZpbGUoKSB7DQoJZ2xv YmFsICRwcmVmcywgJGllZF9wbHVnaW5fZ2xvYmFsczsNCglpZiAoZ3BzKCduYW1lJykpIHsN CgkJJG5hbWUgPSBncHMoJ25hbWUnKTsNCgkJJHJzID0gc2FmZV9yb3coImRlc2NyaXB0aW9u LCBhdXRob3IsIGF1dGhvcl91cmksIHZlcnNpb24sIGNvZGUsIGhlbHAsIHR5cGUsIGxvYWRf b3JkZXIsIGZsYWdzIiwgInR4cF9wbHVnaW4iLCAibmFtZT0nJG5hbWUnIik7DQoJCWV4dHJh Y3QoJHJzKTsNCg0KCQlsaXN0KCRjc3MsJGhlbHApID0gKCRoZWxwKSA/IGllZF9wbHVnaW5f ZXh0cmFjdF9odW5rKCRoZWxwLCAiQ1NTIiwgIjwhLS18LS0+IiwgdHJ1ZSkgOiBhcnJheSgn JywkaGVscCk7DQoJfSBlbHNlaWYgKGdwcygnZmlsZW5hbWUnKSkgew0KCQkkcGx1Z2luPWll ZF9wbHVnaW5fcmVhZF9maWxlKCRwcmVmc1sncGx1Z2luX2NhY2hlX2RpciddLkRTLmdwcygn ZmlsZW5hbWUnKSk7DQoJCWV4dHJhY3QoJHBsdWdpbik7DQoJfQ0KDQoJJHppcCA9IGdwcygn emlwJyk7DQoJaWYgKGdwcygndHJpbScpPT0xKSB7DQoJCSRjb2RlPWV4cGxvZGUoIlxyXG4i LCRjb2RlKTsNCgkJJGNvZGU9YXJyYXlfbWFwKCd0cmltJywkY29kZSk7DQoJCSRjb2RlPWlt cGxvZGUoIlxyXG4iLCRjb2RlKTsNCgl9DQoNCglsaXN0ICgkc3RhcnRfY3NzLCAkZW5kX2Nz cykgPSBpZWRfcGx1Z2luX21ha2VfbWFya2VycygiQ1NTIiwgJGllZF9wbHVnaW5fZ2xvYmFs c1snY3NzX3N0YXJ0J10sICRpZWRfcGx1Z2luX2dsb2JhbHNbJ2Nzc19lbmQnXSk7DQoJJGZu YW1lcyA9IGllZF9wbHVnaW5fZ2V0X25hbWUoJG5hbWUsICR2ZXJzaW9uKTsNCg0KCWhlYWRl cigiQ29udGVudC10eXBlOiB0ZXh0L3BsYWluIik7DQoJaGVhZGVyKCdDb250ZW50LURpc3Bv c2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0nIC4gKCgkemlwKSA/ICRmbmFtZXNbMV0g OiAkZm5hbWVzWzBdKSk7DQoNCgkkdHlwZXMgPSBhcnJheSggJ0NsaWVudCBzaWRlJyAsICdB ZG1pbi9DbGllbnQgc2lkZScgLCAnTGlicmFyeScgLCAnQWRtaW4gc2lkZScpOw0KCSRwbHVn aW5bJ25hbWUnXSA9ICRuYW1lOw0KCSRwbHVnaW5bJ2F1dGhvciddID0gJGF1dGhvcjsNCgkk cGx1Z2luWydhdXRob3JfdXJpJ10gPSAkYXV0aG9yX3VyaTsNCgkkcGx1Z2luWyd2ZXJzaW9u J10gPSAkdmVyc2lvbjsNCgkkcGx1Z2luWydkZXNjcmlwdGlvbiddID0gJGRlc2NyaXB0aW9u Ow0KCSRwbHVnaW5bJ2NvZGUnXSA9ICRjb2RlOw0KCSRwbHVnaW5bJ3R5cGUnXSA9ICR0eXBl Ow0KCSRwbHVnaW5bJ29yZGVyJ10gPSAkbG9hZF9vcmRlcjsNCgkkcGx1Z2luWydmbGFncydd ID0gJGZsYWdzOw0KLy8JJHBsdWdpblsnYWxsb3dfaHRtbF9oZWxwJ10gPSB0cnVlOw0KLy8J JHBsdWdpblsnaGVscF9yYXcnXSA9ICRoZWxwLiRzdGFydF9jc3MuJGNzcy4kZW5kX2NzczsN CgkkcGx1Z2luWydoZWxwJ10gPSBpZWRfcGx1Z2luX3RleHRpbGUoJG5hbWUsICRoZWxwLCAk Y3NzLCAkc3RhcnRfY3NzLCAkZW5kX2Nzcyk7DQoJJHBsdWdpblsnbWQ1J10gPSBtZDUoICRw bHVnaW5bJ2NvZGUnXSApOw0KDQoJZWNobyAnIyBOYW1lOiAnLiRuYW1lLicgdicuJHZlcnNp b24uJyAnLigoJHppcCkgPyAiKGNvbXByZXNzZWQpIiA6ICIiKS4nDQojIFR5cGU6ICcuJHR5 cGVzWyR0eXBlXS4nIHBsdWdpbg0KIyAnLiRkZXNjcmlwdGlvbi4nDQojIEF1dGhvcjogJy4k YXV0aG9yLicNCiMgVVJMOiAnLiRhdXRob3JfdXJpLicNCiMgUmVjb21tZW5kZWQgbG9hZCBv cmRlcjogJy4kbG9hZF9vcmRlci4nDQoNCiMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uDQojIFRoaXMgaXMg YSBwbHVnaW4gZm9yIFRleHRwYXR0ZXJuIC0gaHR0cDovL3RleHRwYXR0ZXJuLmNvbS8NCiMg VG8gaW5zdGFsbDogdGV4dHBhdHRlcm4gPiBhZG1pbiA+IHBsdWdpbnMNCiMgUGFzdGUgdGhl IGZvbGxvd2luZyB0ZXh0IGludG8gdGhlIFwnSW5zdGFsbCBwbHVnaW5cJyBib3g6DQojIC4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLg0KDQonLigoJHppcCkgPyBjaHVua19zcGxpdChiYXNlNjRfZW5jb2Rl KGd6ZW5jb2RlKHNlcmlhbGl6ZSgkcGx1Z2luKSkpLCA3MikgOiBjaHVua19zcGxpdChiYXNl NjRfZW5jb2RlKHNlcmlhbGl6ZSgkcGx1Z2luKSksIDcyKSk7DQoNCglkaWUoKTsNCn0NCg0K Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQ0KZnVuY3Rpb24gaWVkX3BsdWdpbl9zYXZlX2FzX3BocF9maWxlKCkgew0K CWdsb2JhbCAkcHJlZnM7DQoJaWYgKGdwcygnbmFtZScpKSB7DQoJCSRuYW1lID0gZ3BzKCdu YW1lJyk7DQoJCSRycyA9IHNhZmVfcm93KCJkZXNjcmlwdGlvbiwgYXV0aG9yLCBhdXRob3Jf dXJpLCB2ZXJzaW9uLCBjb2RlLCBoZWxwLCB0eXBlLCBsb2FkX29yZGVyLCBmbGFncyIsICJ0 eHBfcGx1Z2luIiwgIm5hbWU9JyRuYW1lJyIpOw0KCQlleHRyYWN0KCRycyk7DQoNCgkJbGlz dCgkY3NzLCRoZWxwKSA9ICgkaGVscCkgPyBpZWRfcGx1Z2luX2V4dHJhY3RfaHVuaygkaGVs cCwgIkNTUyIsICI8IS0tfC0tPiIsIHRydWUpIDogYXJyYXkoJycsJGhlbHApOw0KCX0gZWxz ZWlmIChncHMoJ2ZpbGVuYW1lJykpIHsNCgkJJHBsdWdpbj1pZWRfcGx1Z2luX3JlYWRfZmls ZSgkcHJlZnNbJ3BsdWdpbl9jYWNoZV9kaXInXS5EUy5ncHMoJ2ZpbGVuYW1lJykpOw0KCQll eHRyYWN0KCRwbHVnaW4pOw0KCX0NCg0KCSRvcG9yZGVyID0gKGlzc2V0KCRwcmVmc1snaWVk X3BsdWdpbl9vdXRwdXRfb3JkZXInXSkgJiYgaXNfbnVtZXJpYygkcHJlZnNbJ2llZF9wbHVn aW5fb3V0cHV0X29yZGVyJ10pKSA/ICRwcmVmc1snaWVkX3BsdWdpbl9vdXRwdXRfb3JkZXIn XSA6IDA7DQoJJGZuYW1lcyA9IGllZF9wbHVnaW5fZ2V0X25hbWUoJG5hbWUsICR2ZXJzaW9u KTsNCg0KCWhlYWRlcigiQ29udGVudC10eXBlOiB0ZXh0L3BocCIpOw0KCWhlYWRlcignQ29u dGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9JyAuJGZuYW1lc1syXSk7 DQoNCgkkaGVscGNodW5rID0gaWVkX3BsdWdpbl9idWlsZF90ZW1wbGF0ZSgnaGVscCcsIGFy cmF5KCRoZWxwLCAkY3NzKSk7DQoJJGNvZGVjaHVuayA9IGllZF9wbHVnaW5fYnVpbGRfdGVt cGxhdGUoJ2NvZGUnLCBzdHJfcmVwbGFjZSgiXHJcbiIsIlxuIiwkY29kZSkpOw0KDQoJZWNo byBpZWRfcGx1Z2luX2J1aWxkX3RlbXBsYXRlKCJwcmVhbWJsZSIpOw0KCWVjaG8gaWVkX3Bs dWdpbl9idWlsZF90ZW1wbGF0ZSgibmFtZSIsICRuYW1lKTsNCgllY2hvIGllZF9wbHVnaW5f YnVpbGRfdGVtcGxhdGUoImh0bWxfaGVscCIpOw0KCWVjaG8gaWVkX3BsdWdpbl9idWlsZF90 ZW1wbGF0ZSgidmVyc2lvbiIsICR2ZXJzaW9uKTsNCgllY2hvIGllZF9wbHVnaW5fYnVpbGRf dGVtcGxhdGUoImF1dGhvciIsICRhdXRob3IpOw0KCWVjaG8gaWVkX3BsdWdpbl9idWlsZF90 ZW1wbGF0ZSgiYXV0aG9yX3VyaSIsICRhdXRob3JfdXJpKTsNCgllY2hvIGllZF9wbHVnaW5f YnVpbGRfdGVtcGxhdGUoImRlc2NyaXB0aW9uIiwgJGRlc2NyaXB0aW9uKTsNCgllY2hvIGll ZF9wbHVnaW5fYnVpbGRfdGVtcGxhdGUoImxvYWRfb3JkZXIiLCAkbG9hZF9vcmRlcik7DQoJ ZWNobyBpZWRfcGx1Z2luX2J1aWxkX3RlbXBsYXRlKCJ0eXBlIiwgJHR5cGUpOw0KCWVjaG8g aWVkX3BsdWdpbl9idWlsZF90ZW1wbGF0ZSgiZmxhZ3MiLCAkZmxhZ3MpOw0KCWVjaG8gaWVk X3BsdWdpbl9idWlsZF90ZW1wbGF0ZSgiaW5jbHVkZSIpOw0KCWVjaG8gKCgkb3BvcmRlciA9 PSAwKSA/ICRjb2RlY2h1bmsgOiAkaGVscGNodW5rKTsNCgllY2hvICgoJG9wb3JkZXIgPT0g MSkgPyAkY29kZWNodW5rIDogJGhlbHBjaHVuayk7DQoJZWNobyBpZWRfcGx1Z2luX2J1aWxk X3RlbXBsYXRlKCJwb3N0YW1ibGUiKTsNCg0KCWRpZSgpOw0KfQ0KDQovLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpm dW5jdGlvbiBpZWRfcGx1Z2luX2J1aWxkX3RlbXBsYXRlKCRwcnQsICR2YWw9JycpIHsNCgkk Y3NzID0gJGhlbHAgPSAnJzsNCglpZiAoaXNfYXJyYXkoJHZhbCkpIHsNCgkJJGhlbHAgPSAk dmFsWzBdOw0KCQkkY3NzID0gaXNzZXQoJHZhbFsxXSkgPyAkdmFsWzFdIDogJyc7DQoJCSR2 YWwgPSAnJzsNCgl9DQoJJHRlbXBsYXRlID0gYXJyYXkoDQoJCSJwcmVhbWJsZSIgPT4gJzw/ cGhwJy5uLm4NCgkJCQkJCS4nLy8gVGhpcyBpcyBhIFBMVUdJTiBURU1QTEFURS4nLm4ubg0K CQkJCQkJLicvLyBDb3B5IHRoaXMgZmlsZSB0byBhIG5ldyBuYW1lIGxpa2UgYWJjX215cGx1 Z2luLnBocC4gIEVkaXQgdGhlIGNvZGUsIHRoZW4nLm4NCgkJCQkJCS4nLy8gcnVuIHRoaXMg ZmlsZSBhdCB0aGUgY29tbWFuZCBsaW5lIHRvIHByb2R1Y2UgYSBwbHVnaW4gZm9yIGRpc3Ry aWJ1dGlvbjonLm4NCgkJCQkJCS4nLy8gJCBwaHAgYWJjX215cGx1Z2luLnBocCA+IGFiY19t eXBsdWdpbi0wLjEudHh0Jy5uLm4sDQoJCSJuYW1lIiA9PiAnLy8gUGx1Z2luIG5hbWUgaXMg b3B0aW9uYWwuICBJZiB1bnNldCwgaXQgd2lsbCBiZSBleHRyYWN0ZWQgZnJvbSB0aGUgY3Vy cmVudCcubg0KCQkJCQkJLicvLyBmaWxlIG5hbWUuIFBsdWdpbiBuYW1lcyBzaG91bGQgc3Rh cnQgd2l0aCBhIHRocmVlIGxldHRlciBwcmVmaXggd2hpY2ggaXMnLm4NCgkJCQkJCS4nLy8g dW5pcXVlIGFuZCByZXNlcnZlZCBmb3IgZWFjaCBwbHVnaW4gYXV0aG9yICgiYWJjIiBpcyBq dXN0IGFuIGV4YW1wbGUpLicubg0KCQkJCQkJLicvLyBVbmNvbW1lbnQgYW5kIGVkaXQgdGhp cyBsaW5lIHRvIG92ZXJyaWRlOicubg0KCQkJCQkJLickcGx1Z2luW1wnbmFtZVwnXSA9ICcu ZG9RdW90ZSgkdmFsKS4nOycubi5uLA0KCQkiaHRtbF9oZWxwIiA9PiAnLy8gQWxsb3cgcmF3 IEhUTUwgaGVscCwgYXMgb3Bwb3NlZCB0byBUZXh0aWxlLicubg0KCQkJCQkJLicvLyAwID0g UGx1Z2luIGhlbHAgaXMgaW4gVGV4dGlsZSBmb3JtYXQsIG5vIHJhdyBIVE1MIGFsbG93ZWQg KGRlZmF1bHQpLicubg0KCQkJCQkJLicvLyAxID0gUGx1Z2luIGhlbHAgaXMgaW4gcmF3IEhU TUwuICBOb3QgcmVjb21tZW5kZWQuJy5uDQoJCQkJCQkuJyMgJHBsdWdpbltcJ2FsbG93X2h0 bWxfaGVscFwnXSA9IDE7Jy5uLm4sDQoJCSJ2ZXJzaW9uIiA9PiAnJHBsdWdpbltcJ3ZlcnNp b25cJ10gPSAnLmRvUXVvdGUoJHZhbCkuJzsnLm4sDQoJCSJmbGFncyIgPT4gJy8vIFBsdWdp biAiZmxhZ3MiIHNpZ25hbCB0aGUgcHJlc2VuY2Ugb2Ygb3B0aW9uYWwgY2FwYWJpbGl0aWVz IHRvIHRoZSBjb3JlIHBsdWdpbiBsb2FkZXIuJy5uDQoJCQkJCQkuJy8vIFVzZSBhbiBhcHBy b3ByaWF0ZWx5IE9SLWVkIGNvbWJpbmF0aW9uIG9mIHRoZXNlIGZsYWdzLicubg0KCQkJCQkJ LicvLyBUaGUgZm91ciBoaWdoLW9yZGVyIGJpdHMgMHhmMDAwIGFyZSBhdmFpbGFibGUgZm9y IHRoaXMgcGx1Z2luXCdzIHByaXZhdGUgdXNlJy5uDQoJCQkJCQkuJ2lmICghZGVmaW5lZChc J1BMVUdJTl9IQVNfUFJFRlNcJykpIGRlZmluZShcJ1BMVUdJTl9IQVNfUFJFRlNcJywgMHgw MDAxKTsgLy8gVGhpcyBwbHVnaW4gd2FudHMgdG8gcmVjZWl2ZSAicGx1Z2luX3ByZWZzLnsk cGx1Z2luW1wnbmFtZVwnXX0iIGV2ZW50cycubg0KCQkJCQkJLidpZiAoIWRlZmluZWQoXCdQ TFVHSU5fTElGRUNZQ0xFX05PVElGWVwnKSkgZGVmaW5lKFwnUExVR0lOX0xJRkVDWUNMRV9O T1RJRllcJywgMHgwMDAyKTsgLy8gVGhpcyBwbHVnaW4gd2FudHMgdG8gcmVjZWl2ZSAicGx1 Z2luX2xpZmVjeWNsZS57JHBsdWdpbltcJ25hbWVcJ119IiBldmVudHMnLm4ubg0KCQkJCQkJ LickcGx1Z2luW1wnZmxhZ3NcJ10gPSAnLmRvUXVvdGUoJHZhbCkuJzsnLm4ubiwNCgkJImF1 dGhvciIgPT4gJyRwbHVnaW5bXCdhdXRob3JcJ10gPSAnLmRvUXVvdGUoJHZhbCkuJzsnLm4s DQoJCSJhdXRob3JfdXJpIiA9PiAnJHBsdWdpbltcJ2F1dGhvcl91cmlcJ10gPSAnLmRvUXVv dGUoJHZhbCkuJzsnLm4sDQoJCSJkZXNjcmlwdGlvbiIgPT4gJyRwbHVnaW5bXCdkZXNjcmlw dGlvblwnXSA9ICcuZG9RdW90ZSgkdmFsKS4nOycubi5uLA0KCQkibG9hZF9vcmRlciIgPT4g Jy8vIFBsdWdpbiBsb2FkIG9yZGVyOicubg0KCQkJCQkJLicvLyBUaGUgZGVmYXVsdCB2YWx1 ZSBvZiA1IHdvdWxkIGZpdCBtb3N0IHBsdWdpbnMsIHdoaWxlIGZvciBpbnN0YW5jZSBjb21t ZW50Jy5uDQoJCQkJCQkuJy8vIHNwYW0gZXZhbHVhdG9ycyBvciBVUkwgcmVkaXJlY3RvcnMg d291bGQgcHJvYmFibHkgd2FudCB0byBydW4gZWFybGllcicubg0KCQkJCQkJLicvLyAoMS4u LjQpIHRvIHByZXBhcmUgdGhlIGVudmlyb25tZW50IGZvciBldmVyeXRoaW5nIGVsc2UgdGhh dCBmb2xsb3dzLicubg0KCQkJCQkJLicvLyBWYWx1ZXMgNi4uLjkgc2hvdWxkIGJlIGNvbnNp ZGVyZWQgZm9yIHBsdWdpbnMgd2hpY2ggd291bGQgd29yayBsYXRlLicubg0KCQkJCQkJLicv LyBUaGlzIG9yZGVyIGlzIHVzZXItb3ZlcnJpZGVhYmxlLicubg0KCQkJCQkJLickcGx1Z2lu W1wnb3JkZXJcJ10gPSAnLmRvUXVvdGUoJHZhbCkuJzsnLm4ubiwNCgkJInR5cGUiID0+ICcv LyBQbHVnaW4gXCd0eXBlXCcgZGVmaW5lcyB3aGVyZSB0aGUgcGx1Z2luIGlzIGxvYWRlZCcu bg0KCQkJCQkJLicvLyAwID0gcHVibGljICAgICAgIDogb25seSBvbiB0aGUgcHVibGljIHNp ZGUgb2YgdGhlIHdlYnNpdGUgKGRlZmF1bHQpJy5uDQoJCQkJCQkuJy8vIDEgPSBwdWJsaWMr YWRtaW4gOiBvbiBib3RoIHRoZSBwdWJsaWMgYW5kIGFkbWluIHNpZGUnLm4NCgkJCQkJCS4n Ly8gMiA9IGxpYnJhcnkgICAgICA6IG9ubHkgd2hlbiBpbmNsdWRlX3BsdWdpbigpIG9yIHJl cXVpcmVfcGx1Z2luKCkgaXMgY2FsbGVkJy5uDQoJCQkJCQkuJy8vIDMgPSBhZG1pbiAgICAg ICAgOiBvbmx5IG9uIHRoZSBhZG1pbiBzaWRlJy5uDQoJCQkJCQkuJyRwbHVnaW5bXCd0eXBl XCddID0gJy5kb1F1b3RlKCR2YWwpLic7Jy5uLm4sDQoJCSJpbmNsdWRlIiA9PiAnaWYgKCFk ZWZpbmVkKFwndHhwaW50ZXJmYWNlXCcpKScubg0KCQkJCQkJLicgICAgICAgIEBpbmNsdWRl X29uY2UoXCd6ZW1fdHBsLnBocFwnKTsnLm4ubiwNCgkJImhlbHAiID0+ICdpZiAoMCkgeycu bg0KCQkJCQkJLic/Picubg0KCQkJCQkJLiAoKCRjc3MpID8gJzwhLS0nLm4NCgkJCQkJCS4n IyAtLS0gQkVHSU4gUExVR0lOIENTUyAtLS0nLm4NCgkJCQkJCS4kY3NzLm4NCgkJCQkJCS4n IyAtLS0gRU5EIFBMVUdJTiBDU1MgLS0tJy5uDQoJCQkJCQkuJy0tPicubiA6ICcnKQ0KCQkJ CQkJLic8IS0tJy5uDQoJCQkJCQkuJyMgLS0tIEJFR0lOIFBMVUdJTiBIRUxQIC0tLScubg0K CQkJCQkJLiRoZWxwLm4NCgkJCQkJCS4nIyAtLS0gRU5EIFBMVUdJTiBIRUxQIC0tLScubg0K CQkJCQkJLictLT4nLm4NCgkJCQkJCS4nPD9waHAnLm4NCgkJCQkJCS4nfScubiwNCgkJImNv ZGUiID0+ICcjIC0tLSBCRUdJTiBQTFVHSU4gQ09ERSAtLS0nLm4NCgkJCQkJCS4kdmFsLm4N CgkJCQkJCS4nIyAtLS0gRU5EIFBMVUdJTiBDT0RFIC0tLScubiwNCgkJInBvc3RhbWJsZSIg PT4gJz8+JywNCgkpOw0KDQoJcmV0dXJuIChhcnJheV9rZXlfZXhpc3RzKCRwcnQsICR0ZW1w bGF0ZSkgPyAkdGVtcGxhdGVbJHBydF0gOiAnJyk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0 aW9uIGllZF9wbHVnaW5fdXBsb2FkKCkgew0KCWdsb2JhbCAkaWVkX3BsdWdpbl9nbG9iYWxz Ow0KCWxpc3QgKCRzdGFydF9jc3MsICRlbmRfY3NzKSA9IGllZF9wbHVnaW5fbWFrZV9tYXJr ZXJzKCJDU1MiLCAkaWVkX3BsdWdpbl9nbG9iYWxzWydjc3Nfc3RhcnQnXSwgJGllZF9wbHVn aW5fZ2xvYmFsc1snY3NzX2VuZCddKTsNCg0KCWlmICghJF9GSUxFU1sndGhlZmlsZSddWyd0 bXBfbmFtZSddKSB7DQoJCWllZF9wbHVnaW5fbGlzdChpZWRfcGx1Z2luX2dUeHQoJ2Nob29z ZV9maWxlJykpO3JldHVybjsNCgl9DQoJJHBsdWdpbiA9IGllZF9wbHVnaW5fcmVhZF9maWxl KCRfRklMRVNbJ3RoZWZpbGUnXVsndG1wX25hbWUnXSk7DQovLwkkbmV3bmFtZSA9IChlbXB0 eSgkcGx1Z2luWyduYW1lJ10pKSA/IGJhc2VuYW1lKCRfRklMRVNbJ3RoZWZpbGUnXVsnbmFt ZSddLCAnLnBocCcpIDogJHBsdWdpblsnbmFtZSddOw0KCSRuZXduYW1lID0gJHBsdWdpblsn bmFtZSddOw0KCWlmIChncHMoJ25hbWUnKSBhbmQgZ3BzKCduYW1lJykhPSd4eHhfeHh4eHh4 Jykgew0KCQkkbmV3bmFtZT1ncHMoJ25hbWUnKTsNCgl9DQoJaWYgKGVtcHR5KCRwbHVnaW5b J2NvZGUnXSkpIHsNCgkJJHBsdWdpblsnY29kZSddID0gaW1wbG9kZSAoIiIsIGZpbGUoJF9G SUxFU1sndGhlZmlsZSddWyd0bXBfbmFtZSddKSk7DQoJfQ0KDQoJaWYgKE1BR0lDX1FVT1RF U19HUEMpIHsNCgkJJHBsdWdpbiA9IGRvU3RyaXAoJHBsdWdpbik7DQoJfQ0KCWV4dHJhY3Qo ZG9TbGFzaCgkcGx1Z2luKSk7DQoJJG1kNT1tZDUoJGNvZGUpOw0KCSR2ZXJzaW9uID0gKGVt cHR5KCR2ZXJzaW9uKSkgPyAiMC4xIiA6ICR2ZXJzaW9uOw0KCSRoZWxwID0gJGhlbHAuKCgk Y3NzKSA/IG4uJHN0YXJ0X2Nzcy5uLiRjc3Mubi4kZW5kX2NzcyA6ICcnKTsNCgkkZXhpc3Rz ID0gZmV0Y2goJ25hbWUnLCd0eHBfcGx1Z2luJywnbmFtZScsJG5ld25hbWUpOw0KCWlmICgk ZXhpc3RzKSB7DQoJCSRzdGF0dXMgPSBmZXRjaCgnc3RhdHVzJywndHhwX3BsdWdpbicsJ25h bWUnLCRuZXduYW1lKTsNCgkJJHJzID0gc2FmZV91cGRhdGUoDQoJCQkidHhwX3BsdWdpbiIs DQoJCQkic3RhdHVzID0gIi5pbnR2YWwoJHN0YXR1cykuIiwNCgkJCXR5cGUgPSAiLmludHZh bCgkdHlwZSkuIiwNCgkJCWF1dGhvciA9ICckYXV0aG9yJywNCgkJCWF1dGhvcl91cmkgPSAn JGF1dGhvcl91cmknLA0KCQkJdmVyc2lvbiA9ICckdmVyc2lvbicsDQoJCQlkZXNjcmlwdGlv biA9ICckZGVzY3JpcHRpb24nLA0KCQkJaGVscCA9ICckaGVscCcsDQoJCQljb2RlID0gJyRj b2RlJywNCgkJCWNvZGVfcmVzdG9yZSA9ICckY29kZScsDQoJCQljb2RlX21kNSA9ICckbWQ1 JywNCgkJCWZsYWdzID0gIi5pbnR2YWwoJGZsYWdzKS4iLA0KCQkJbG9hZF9vcmRlciA9ICIu aW50dmFsKCRsb2FkX29yZGVyKSwNCgkJCSJuYW1lID0gJyRuZXduYW1lJyINCgkJKTsNCgl9 IGVsc2Ugew0KCQkkcnMgPSBzYWZlX2luc2VydCgNCgkJCSJ0eHBfcGx1Z2luIiwNCgkJCSJu YW1lID0gJyRuZXduYW1lJywNCgkJCXN0YXR1cyA9IDAsDQoJCQl0eXBlID0gIi5pbnR2YWwo JHR5cGUpLiIsDQoJCQlhdXRob3IgPSAnJGF1dGhvcicsDQoJCQlhdXRob3JfdXJpID0gJyRh dXRob3JfdXJpJywNCgkJCXZlcnNpb24gPSAnJHZlcnNpb24nLA0KCQkJZGVzY3JpcHRpb24g PSAnJGRlc2NyaXB0aW9uJywNCgkJCWhlbHAgPSAnJGhlbHAnLA0KCQkJY29kZSA9ICckY29k ZScsDQoJCQljb2RlX3Jlc3RvcmUgPSAnJGNvZGUnLA0KCQkJY29kZV9tZDUgPSAnJG1kNScs DQoJCQlmbGFncyA9ICIuaW50dmFsKCRmbGFncykuIiwNCgkJCWxvYWRfb3JkZXIgPSAiLmlu dHZhbCgkbG9hZF9vcmRlcikNCgkJKTsNCgl9DQoNCglwYWdldG9wKGdUeHQoJ2VkaXRfcGx1 Z2lucycpLCBtZXNzZW5nZXIoJ3BsdWdpbicsJG5ld25hbWUsKCRleGlzdHMpPyd1cGRhdGVk JzondXBsb2FkZWQnKSk7DQoJZWNobyBpZWRfcGx1Z2luX2VkaXRfZm9ybSgkbmV3bmFtZSk7 DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIGllZF9wbHVnaW5fcmVhZF9maWxlKCRmaWxl cGF0aCkgew0KCSRjb250ZW50ID0gZmlsZSgkZmlsZXBhdGgpOw0KCSRqdXN0ZmlsZSA9IGJh c2VuYW1lKCRmaWxlcGF0aCk7DQoJJGV4dCA9IGFycmF5X3BvcChleHBsb2RlICgnLicsJGp1 c3RmaWxlKSk7DQoJJGV4dCA9ICgkZXh0PT0kanVzdGZpbGUpID8gJycgOiAnLicuJGV4dDsg Ly8gT25seSBhc3NpZ24gYW4gZXh0ZW5zaW9uIGlmIG9uZSBleGlzdHMNCgkkc291cmNlX2xp bmVzID0gY291bnQoJGNvbnRlbnQpOw0KCSRtZXRhZGF0YSA9IGFycmF5KA0KCQkJCQkJJ25h bWUnID0+ICcnLA0KCQkJCQkJJ3ZlcnNpb24nID0+ICcnLA0KCQkJCQkJJ3JldmlzaW9uJyA9 PiAnJywNCgkJCQkJCSdhdXRob3InID0+ICcnLA0KCQkJCQkJJ2F1dGhvcl91cmknID0+ICcn LA0KCQkJCQkJJ2Rlc2NyaXB0aW9uJyA9PiAnJywNCgkJCQkJCSdvcmRlcicgPT4gJzUnLA0K CQkJCQkJJ3R5cGUnID0+ICcnLA0KCQkJCQkJJ2ZsYWdzJyA9PiAnJywNCgkJCQkJKTsNCglm b3IgKCRpZHg9MDsgJGlkeCA8ICRzb3VyY2VfbGluZXM7ICRpZHgrKykgew0KCQkkY29udGVu dFskaWR4XSA9IHJ0cmltKCRjb250ZW50WyRpZHhdKTsNCgkJLy8gQm9tYiBvdXQgaWYgd2Ug cmVhY2ggdGhlIGVuZCBvZiB0aGUgZGVmaW5pdGlvbiBhcmVhDQoJCWlmIChzdHJwb3MoICRj b250ZW50WyRpZHhdLCAnaWYgKCFkZWZpbmVkJyApID09PSAwKSB7DQoJCQlicmVhazsNCgkJ fQ0KCQlpZiAoc3RycG9zKCRjb250ZW50WyRpZHhdLCAnJHBsdWdpblsnKSA9PT0gMCkgew0K CQkJLy8gRm91bmQgYSBwbHVnaW4gdmFyaWFibGUgc28gZXh0cmFjdCBpdA0KCQkJJHBhcnRz ID0gZXhwbG9kZSgiID0gIiwgJGNvbnRlbnRbJGlkeF0pOw0KCQkJJHBhcnRzWzBdID0gc3Ry X3JlcGxhY2UoIiciLCAiIiwgJHBhcnRzWzBdKTsgLy8gTWFrZSB0aGUgbWF0Y2ggZWFzaWVy IQ0KCQkJJHBhcnRzWzFdID0gc3RyX3JlcGxhY2UoIjsiLCAiIiwgJHBhcnRzWzFdKTsgLy8g RGl0dG8NCgkJCXByZWdfbWF0Y2goIi9wbHVnaW5cWyguKilcXS8iLCAkcGFydHNbMF0sICR2 YXIpOyAvLyBFeHRyYWN0IGp1c3QgdGhlIHZhcmlhYmxlIG5hbWUNCgkJCWlmIChpc19udW1l cmljKCRwYXJ0c1sxXSkpIHsNCgkJCQkkcGFydHNbMV0gPSAiJyIuJHBhcnRzWzFdLiInIjsN CgkJCX0NCgkJCXByZWdfbWF0Y2goIi8uKicoLiopJy4qLyIsICRwYXJ0c1sxXSwgJHZhbCk7 IC8vIFJlbW92ZSBhbnl0aGluZyBvdXRzaWRlIHRoZSBxdW90ZXMgKGUuZy4gJHJldmlzaW9u KQ0KCQkJaWYgKCR2YXJbMV0gPT0gJ3JldmlzaW9uJyAmJiAhZW1wdHkoJHZhbFsxXSkpIHsN CgkJCQkkcmV2cGFydHMgPSBleHBsb2RlKCcgJywgdHJpbSgkdmFsWzFdLCAnJCAnKSk7DQoJ CQkJJHZhbFsxXSA9ICRyZXZwYXJ0c1tjb3VudCgkcmV2cGFydHMpLTFdOw0KCQkJCSR2YWxb MV0gPSAoZW1wdHkoJHZhbFsxXSkpID8gJycgOiAnLicgLiR2YWxbMV07DQoJCQl9DQoJCQkk bWV0YWRhdGFbJHZhclsxXV0gPSAkdmFsWzFdOw0KCQl9DQoJfQ0KDQoJJG1ldGFkYXRhWydu YW1lJ10gPSAoZW1wdHkoJG1ldGFkYXRhWyduYW1lJ10pKSA/IGJhc2VuYW1lKCRqdXN0Zmls ZSwgJGV4dCkgOiAkbWV0YWRhdGFbJ25hbWUnXTsNCgkkbWV0YWRhdGFbJ2xvYWRfb3JkZXIn XSA9ICRtZXRhZGF0YVsnb3JkZXInXTsNCgkkbWV0YWRhdGFbJ3ZlcnNpb24nXSAuPSAkbWV0 YWRhdGFbJ3JldmlzaW9uJ107DQoJJG1ldGFkYXRhWydoZWxwJ10gPSBpZWRfcGx1Z2luX2V4 dHJhY3RfaHVuaygkY29udGVudCwgJ0hFTFAnKTsNCgkkbWV0YWRhdGFbJ2NzcyddICA9IGll ZF9wbHVnaW5fZXh0cmFjdF9odW5rKCRjb250ZW50LCAnQ1NTJyApOw0KCSRtZXRhZGF0YVsn Y29kZSddID0gaWVkX3BsdWdpbl9leHRyYWN0X2h1bmsoJGNvbnRlbnQsICdDT0RFJyk7DQoN CglyZXR1cm4gJG1ldGFkYXRhOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyByaXBwZWQgYW5kIG1v ZGRlZCBmcm9tIG5ldC1jYXJ2ZXIncyB6ZW1fdHBsIHRlbXBsYXRlDQpmdW5jdGlvbiBpZWRf cGx1Z2luX2V4dHJhY3RfaHVuaygkY29udGVudCwgJGh1bmssICRjbW50PSIjIiwgJGRlbGV0 ZT1mYWxzZSkgew0KCSRkbG0gPSBleHBsb2RlKCJ8IiwgJGNtbnQpOw0KCSRkbG1TdGFydCA9 ICRkbG1bMF07DQoJJGRsbUVuZCA9IChjb3VudCgkZGxtKSA+IDEpID8gJGRsbVsxXSA6ICcn Ow0KCSRsaW5lcyA9IGllZF9wbHVnaW5fbWFrZV9hcnJheSgkY29udGVudCk7DQoNCglsaXN0 ICgkc3RhcnRfZGVsaW0sICRlbmRfZGVsaW0pID0gaWVkX3BsdWdpbl9tYWtlX21hcmtlcnMo JGh1bmssICRkbG1TdGFydCwgJGRsbUVuZCk7DQoJJHN0YXJ0ID0gYXJyYXlfc2VhcmNoKCRz dGFydF9kZWxpbSwgJGxpbmVzKSArIDE7DQoJJGVuZCA9IGFycmF5X3NlYXJjaCgkZW5kX2Rl bGltLCAkbGluZXMpOw0KDQoJLy8gS2x1ZGdlIHRvIGdldCByb3VuZCB0aGUgZGVsaW1pdGVy IGNoYW5nZSBpbiB2MC44Mw0KCWlmICgkaHVuayA9PSAnQ1NTJyAmJiAkZW5kID09PSBmYWxz ZSkgew0KCQkkc3RhcnRfZGVsaW0gPSBzdHJfcmVwbGFjZSgnLS0tJywgJyoqKicsICRzdGFy dF9kZWxpbSk7DQoJCSRlbmRfZGVsaW0gPSBzdHJfcmVwbGFjZSgnLS0tJywgJyoqKicsICRl bmRfZGVsaW0pOw0KCQkkc3RhcnQgPSBhcnJheV9zZWFyY2goJHN0YXJ0X2RlbGltLCAkbGlu ZXMpICsgMTsNCgkJJGVuZCA9IGFycmF5X3NlYXJjaCgkZW5kX2RlbGltLCAkbGluZXMpOw0K CX0NCg0KCSRleHRyYWN0ZWQgPSBhcnJheSgpOw0KCWlmIChjb3VudCgkbGluZXMpID4gMCAm JiBpc19udW1lcmljKCRzdGFydCkgJiYgaXNfbnVtZXJpYygkZW5kKSAmJiAkZW5kID4gJHN0 YXJ0KSB7DQoJCSRleHRyYWN0ZWQgPSBhcnJheV9zbGljZSgkbGluZXMsICRzdGFydCwgJGVu ZC0kc3RhcnQpOw0KCQkkbGluZU51bSA9IGNvdW50KCRleHRyYWN0ZWQpLTE7DQoJCXdoaWxl ICgkbGluZU51bSA+IDAgJiYgdHJpbSgkZXh0cmFjdGVkWyRsaW5lTnVtLS1dKSA9PSAiIikg ew0KCQkJYXJyYXlfcG9wKCRleHRyYWN0ZWQpOw0KCQl9DQoJCXdoaWxlIChjb3VudCgkZXh0 cmFjdGVkKSA+IDAgJiYgdHJpbSgkZXh0cmFjdGVkWzBdKSA9PSAiIikgew0KCQkJYXJyYXlf c2hpZnQoJGV4dHJhY3RlZCk7DQoJCX0NCgkJaWYgKCRkZWxldGUpIHsNCgkJCSRjaG9wcGVk ID0gYXJyYXlfc3BsaWNlKCRsaW5lcywgJHN0YXJ0LTEsICRlbmQtJHN0YXJ0KzIsICIiKTsN CgkJfQ0KCX0NCgkkcmVtYWlucyA9ICRsaW5lczsNCgkvLyBDaGVjayBpZiB0aGUgQ1NTIHNl Y3Rpb24gaGFzIDxzdHlsZT4gdGFncyBhcm91bmQgaXQ7IGFkZCB0aGVtIGlmIG5vdA0KCWlm ICgkaHVuayA9PSAiQ1NTIikgew0KCQkkbnVtcm93cyA9IGNvdW50KCRleHRyYWN0ZWQpOw0K CQlpZiAoJG51bXJvd3MgPiAxKSB7DQoJCQlpZiAoc3RycG9zKCRleHRyYWN0ZWRbJG51bXJv d3MtMV0sICc8L3N0eWxlPicpID09PSBmYWxzZSkgew0KCQkJCSRleHRyYWN0ZWRbXSA9ICc8 L3N0eWxlPic7DQoJCQl9DQoJCQlpZiAoc3RycG9zKCRleHRyYWN0ZWRbMF0sICc8c3R5bGUg JykgPT09IGZhbHNlKSB7DQoJCQkJYXJyYXlfdW5zaGlmdCgkZXh0cmFjdGVkLCAnPHN0eWxl IHR5cGU9InRleHQvY3NzIj4nKTsNCgkJCX0NCgkJfQ0KCX0NCglpZiAoJGRlbGV0ZSkgew0K CQlyZXR1cm4gYXJyYXkodHJpbShqb2luKCJcbiIsICRleHRyYWN0ZWQpKSwgdHJpbShqb2lu KCJcbiIsICRyZW1haW5zKSkpOw0KCX0gZWxzZSB7DQoJCXJldHVybiB0cmltKGpvaW4oIlxu IiwgJGV4dHJhY3RlZCkpOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gaWVkX3Bs dWdpbl9tYWtlX2FycmF5KCRhcnIpIHsNCglpZiAoIWlzX2FycmF5KCRhcnIpKSB7DQoJCSRh cnIgPSBleHBsb2RlKCJcbiIsICRhcnIpOw0KCX0NCgkkc291cmNlX2xpbmVzID0gY291bnQo JGFycik7DQoJZm9yICgkaWR4PTA7ICRpZHggPCAkc291cmNlX2xpbmVzOyAkaWR4KyspIHsN CgkJJGFyclskaWR4XSA9IHJ0cmltKCRhcnJbJGlkeF0pOw0KCX0NCglyZXR1cm4gJGFycjsN Cn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gaWVkX3BsdWdpbl9tYWtlX21hcmtlcnMoJGh1 bmssICRzdGFydCwgJGVuZCkgew0KCWdsb2JhbCAkaWVkX3BsdWdpbl9nbG9iYWxzOw0KCSRz bWFya2VyID0gJHN0YXJ0IC4gc3RyX3JlcGxhY2UoIlNFQ1RJT04iLCAkaHVuaywgJGllZF9w bHVnaW5fZ2xvYmFsc1snc3RhcnQnXSkgLiAoKCRlbmQpPycgJy4kZW5kOicnKTsNCgkkZW1h cmtlciA9ICRzdGFydCAuIHN0cl9yZXBsYWNlKCJTRUNUSU9OIiwgJGh1bmssICRpZWRfcGx1 Z2luX2dsb2JhbHNbJ2VuZCddKSAuICgoJGVuZCk/JyAnLiRlbmQ6JycpOw0KCXJldHVybiAo YXJyYXkoJHNtYXJrZXIsICRlbWFya2VyKSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIHJpcHBl ZCBhbmQgbW9kZGVkIGZyb20gbmV0LWNhcnZlcidzIHplbV90cGwgdGVtcGxhdGUNCmZ1bmN0 aW9uIGllZF9wbHVnaW5fYWRtaW5fY2hlY2soJGNvZGVibG9jaywgJHR5cGUpIHsNCgkvLyBT aG9ydCBjaXJjdWl0IHNpbmNlIHdlJ3JlIG9ubHkgaW50ZXJlc3RlZCBpbiBjbGllbnQgcGx1 Z2lucw0KCWlmICgkdHlwZSAhPSAnMCcgfHwgc3RycG9zKCRjb2RlYmxvY2ssICd0eHBpbnRl cmZhY2UnKT09PWZhbHNlKSB7DQoJCXJldHVybiB0cnVlOw0KCX0NCg0KCS8vIEJlbGlldmUg aXQgb3Igbm90IHRoaXMgaXMgc2V2ZXJhbCBvcmRlcnMgb2YgbWFnbml0dWRlIHF1aWNrZXIg dGhhbiBhIHNpbmdsZSBwcmVnX21hdGNoDQoJJGNiID0gc3RyX3JlcGxhY2UoYXJyYXkoJ1x0 JywgJyAnKSwgJycsICRjb2RlYmxvY2spOw0KCSRjYiA9IHN0cl9yZXBsYWNlKCc9PT0nLCAn PT0nLCAkY2IpOw0KCWlmIChzdHJwb3MoJGNiLCAndHhwaW50ZXJmYWNlPT1cImFkbWluJykp IHJldHVybiBmYWxzZTsNCglpZiAoc3RycG9zKCRjYiwgInR4cGludGVyZmFjZT09XCdhZG1p biIpKSByZXR1cm4gZmFsc2U7DQoJaWYgKHN0cnBvcygkY2IsICdhZG1pblwiPT10eHBpbnRl cmZhY2UnKSkgcmV0dXJuIGZhbHNlOw0KCWlmIChzdHJwb3MoJGNiLCAiYWRtaW5cJz09dHhw aW50ZXJmYWNlIikpIHJldHVybiBmYWxzZTsNCglpZiAoc3RycG9zKCRjYiwgJ2FkbWluXCI9 PUB0eHBpbnRlcmZhY2UnKSkgcmV0dXJuIGZhbHNlOw0KCWlmIChzdHJwb3MoJGNiLCAiYWRt aW5cJz09QHR4cGludGVyZmFjZSIpKSByZXR1cm4gZmFsc2U7DQoJcmV0dXJuIHRydWU7DQp9 DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIGllZF9wbHVnaW5fdGV4dGlsZSgkbmFtZSwgJGhl bHAsICRjc3MsICRzdGFydF9kbG0sICRlbmRfZGxtKSB7DQoJZ2xvYmFsICRwcmVmcywgJGll ZF9wbHVnaW5fZ2xvYmFsczsNCg0KCSR0bXBkaXIgPSAkaGxwZmlsZSA9ICcnOw0KCSRjaGFu Z2VkID0gdHJ1ZTsNCgkkb3V0ID0gYXJyYXkoKTsNCglpZiAoaXNzZXQoJHByZWZzWydpZWRf cGx1Z2luX291dHB1dF90bXBjYWNoZSddKSAmJiAhZW1wdHkoJHByZWZzWydpZWRfcGx1Z2lu X291dHB1dF90bXBjYWNoZSddKSAmJiBpc193cml0YWJsZSgkcHJlZnNbJ2llZF9wbHVnaW5f b3V0cHV0X3RtcGNhY2hlJ10pKSB7DQoJCSR0bXBkaXIgPSAkcHJlZnNbJ2llZF9wbHVnaW5f b3V0cHV0X3RtcGNhY2hlJ107DQoJCSRjYWNoZSA9IGJ1aWxkX2ZpbGVfcGF0aCgkdG1wZGly LCAnaWVkX3BsdWdpbl9jb21wb3Nlci5jYWNoZScpOw0KCQlpZiAoIWZpbGVfZXhpc3RzKCRj YWNoZSkpIHsNCgkJCXRvdWNoKCRjYWNoZSk7IC8vIENyZWF0ZSBmaWxlIGlmIGl0IGRvZXNu J3QgZXhpc3QNCgkgIH0NCgkJJHBsdWdzID0gcGFyc2VfaW5pX2ZpbGUoJGNhY2hlKTsNCg0K CQkkb2xkX21kNSA9IChhcnJheV9rZXlfZXhpc3RzKCRuYW1lLCAkcGx1Z3MpKSA/ICRwbHVn c1skbmFtZV0gOiAnJzsNCgkJJGN1cnJfbWQ1ID0gbWQ1KCRoZWxwKTsNCgkJJGhscGZpbGUg PSBidWlsZF9maWxlX3BhdGgoJHRtcGRpciwgJG5hbWUuJ19oZWxwLnR4dGwnKTsNCgkJaWYg KCRvbGRfbWQ1ID09ICRjdXJyX21kNSkgew0KCQkJJG91dFswXSA9IGZpbGVfZ2V0X2NvbnRl bnRzKCRobHBmaWxlKTsNCgkJCSRjaGFuZ2VkID0gZmFsc2U7DQoJCX0gZWxzZSB7DQoJCQkk cGx1Z3NbJG5hbWVdID0gJGN1cnJfbWQ1Ow0KCQkJJGZkID0gZm9wZW4oJGNhY2hlLCAidyIp Ow0KCQkJZm9yZWFjaCAoJHBsdWdzIGFzICRpZHggPT4gJHZhbCkgew0KCQkJCWZ3cml0ZSgk ZmQsICRpZHguJyA9ICcuJHZhbC5uKTsNCgkJCX0NCgkJCWZjbG9zZSgkZmQpOw0KCQl9DQog ICB9DQoNCglpZiAoISRvdXQpIHsNCgkJQGluY2x1ZGVfb25jZSB0eHBhdGguJy9saWIvY2xh c3NUZXh0aWxlLnBocCc7DQoJCSRvdXRbMF0gPSAkaGVscDsNCgkJaWYgKGNsYXNzX2V4aXN0 cygnVGV4dGlsZScpKSB7DQoJCQkvLyBUcnkgYW5kIGJlIGEgbGl0dGxlIG1vcmUgaW50ZWxs aWdlbnQgYWJvdXQgYXBwbHlpbmcgdGV4dGlsZSBvciBub3QNCgkJCSRyZSA9ICcvaFswLTZd KFwoLipcKSk/XC4vJzsNCgkJCWlmIChwcmVnX21hdGNoKCRyZSwgJGhlbHApKSB7DQoJCQkJ JHRleHRpbGUgPSBuZXcgVGV4dGlsZSgpOw0KCQkJCSRvdXRbMF0gPSAkdGV4dGlsZS0+VGV4 dGlsZVRoaXMoJGhlbHApOw0KCQkJfQ0KCQl9DQoJfQ0KDQoJaWYgKCR0bXBkaXIgJiYgJGNo YW5nZWQpIHsNCgkJaWYgKCFmaWxlX2V4aXN0cygkaGxwZmlsZSkpIHsNCgkJCXRvdWNoKCRo bHBmaWxlKTsNCgkJIH0NCgkJJGZkID0gZm9wZW4oJGhscGZpbGUsICJ3Iik7DQoJCWZ3cml0 ZSgkZmQsICRvdXRbMF0pOw0KCQlmY2xvc2UoJGZkKTsNCgl9DQoNCgkvLyBSZXBsYWNlIHRo ZSB0cmlwbGUgJy0tLScgaW4gdGhlIGRlbGltaXRlcnMgc28gdGhlIGhlbHAgZmlsZSBjYW4g dmFsaWRhdGUNCgkkc3RhcnRfZGxtID0gc3RyX3JlcGxhY2UoJy0tLScsICcqKionLCAkc3Rh cnRfZGxtKTsNCgkkZW5kX2RsbSA9IHN0cl9yZXBsYWNlKCctLS0nLCAnKioqJywgJGVuZF9k bG0pOw0KDQoJJG91dFsxXSA9ICgkY3NzKSA/ICJcbiRzdGFydF9kbG1cbiRjc3NcbiRlbmRf ZGxtXG4iIDogJyc7DQoJcmV0dXJuIHN1YnN0cihqb2luKCcnLCAkb3V0KSwgMCwgJGllZF9w bHVnaW5fZ2xvYmFsc1snc2l6ZV9oZWxwJ10rJGllZF9wbHVnaW5fZ2xvYmFsc1snc2l6ZV9j c3MnXSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIGllZF9pbnNlcnRfZWRpdG9ycygp IHsNCglnbG9iYWwgJHByZWZzLCAkaWVkX3BsdWdpbl9wcmVmczsNCgkkb3V0ID0gYXJyYXko KTsNCg0KCSRwcmVma2V5cyA9IGRvUXVvdGUoaW1wbG9kZSgiJywnIixhcnJheV9rZXlzKCRp ZWRfcGx1Z2luX3ByZWZzWzBdKSkpOw0KCSRycyA9IHNhZmVfcm93cygnbmFtZSx2YWwsaHRt bCcsJ3R4cF9wcmVmcycsJ25hbWUgaW4gKCcuJHByZWZrZXlzLicpJyk7DQoJaWYgKGNvdW50 KCRycykgPT0gY291bnQoJGllZF9wbHVnaW5fcHJlZnNbMF0pKSB7DQoJCSRlZCA9IGFycmF5 KCk7DQoJCSRlZFskcHJlZnNbJ2llZF9wbHVnaW5fZWRpdG9yJ11dID0gJHByZWZzWydpZWRf cGx1Z2luX2VkaXRvcl9wYXRoJ107DQoJCSRlZFskcHJlZnNbJ2llZF9wbHVnaW5faGVscF9l ZGl0b3InXV0gPSAkcHJlZnNbJ2llZF9wbHVnaW5faGVscF9lZGl0b3JfcGF0aCddOw0KDQoJ CWZvcmVhY2ggKCRlZCBhcyAkZWRpdG9yID0+ICRlZGl0b3JfZGlyKSB7DQoJCQlzd2l0Y2gg KCRlZGl0b3IpIHsNCgkJCQljYXNlICJ0aW55X21jZSI6DQoJCQkJCSRvdXRbXSA9IDw8PEVP Rg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJy4kZWRpdG9yX2Rpci4n L3RpbnlfbWNlLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0 Ij4NCgl0aW55TUNFLmluaXQoew0KCQltb2RlIDogInNwZWNpZmljX3RleHRhcmVhcyIsDQoJ CWVkaXRvcl9zZWxlY3RvciA6ICJtY2VFZGl0b3IiLA0KCQl0aGVtZV9hZHZhbmNlZF90b29s YmFyX2xvY2F0aW9uIDogInRvcCIsDQoJCXRoZW1lX2FkdmFuY2VkX2J1dHRvbnMxIDogImJv bGQsaXRhbGljLHVuZGVybGluZSxzdHJpa2V0aHJvdWdoLGZvcmVjb2xvcixiYWNrY29sb3Is cmVtb3ZlZm9ybWF0LG51bWxpc3QsYnVsbGlzdCxvdXRkZW50LGluZGVudCxqdXN0aWZ5bGVm dCxqdXN0aWZ5Y2VudGVyLGp1c3RpZnlyaWdodCxqdXN0aWZ5ZnVsbCIsDQoJCXRoZW1lX2Fk dmFuY2VkX2J1dHRvbnMyIDogImxpbmssdW5saW5rLHNlcGFyYXRvcixpYnJvd3NlcixzZXBh cmF0b3Isc2VhcmNoLHJlcGxhY2Usc2VwYXJhdG9yLGN1dCxjb3B5LHBhc3RlLHNlcGFyYXRv cixjb2RlLHNlcGFyYXRvcixmb3JtYXRzZWxlY3QiLA0KCQl0aGVtZV9hZHZhbmNlZF9idXR0 b25zMyA6ICIiDQoJfSk7DQo8L3NjcmlwdD47DQpFT0Y7DQoJCQkJCWJyZWFrOw0KCQkJCWNh c2UgImVkaXRfYXJlYSI6DQoJCQkJCSRvdXRbXSA9IDw8PEVPRg0KPHNjcmlwdCB0eXBlPSJ0 ZXh0L2phdmFzY3JpcHQiIHNyYz0iJGVkaXRvcl9kaXIvZWRpdF9hcmVhX2Z1bGwuanMiPjwv c2NyaXB0Pg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KCS8vIGluaXRpYWxp c2F0aW9uDQoJZWRpdEFyZWFMb2FkZXIuaW5pdCh7DQoJCWlkOiAicGx1Z2luX2VkaXRvciIJ Ly8gaWQgb2YgdGhlIHRleHRhcmVhIHRvIHRyYW5zZm9ybQ0KCQksc3RhcnRfaGlnaGxpZ2h0 OiB0cnVlCS8vIGlmIHN0YXJ0IHdpdGggaGlnaGxpZ2h0DQoJCSxhbGxvd19yZXNpemU6ICJi b3RoIg0KCQksYWxsb3dfdG9nZ2xlOiB0cnVlDQoJCSxsYW5ndWFnZTogImVuIg0KCQksc3lu dGF4OiAicGhwIg0KCX0pOw0KPC9zY3JpcHQ+DQpFT0Y7DQoJCQkJCWJyZWFrOw0KCQkJCWNh c2UgImNvZGVwcmVzcyI6DQoJCQkJCSRvdXRbXSA9ICc8c2NyaXB0IHR5cGU9InRleHQvamF2 YXNjcmlwdCIgc3JjPSInLiRlZGl0b3JfZGlyLicvY29kZXByZXNzLmpzIj48L3NjcmlwdD4n Ow0KCQkJCQlicmVhazsNCgkJCX0NCgkJfQ0KCX0NCg0KCXJldHVybiBpbXBsb2RlKCJcbiIs ICRvdXQpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBpZWRfcGx1Z2luX2hlbHBfdmll d2VyKCRtZXNzYWdlPScnKSB7DQoJZ2xvYmFsICRwcmVmcywgJGllZF9wbHVnaW5fZ2xvYmFs czsNCglwYWdldG9wKGdUeHQoJ2VkaXRfcGx1Z2lucycpLCRtZXNzYWdlKTsNCg0KCWlmIChn cHMoJ25hbWUnKSkgew0KCQkkbmFtZSA9IGdwcygnbmFtZScpOw0KCQkkaGVscCA9ICgkbmFt ZSkgPyBmZXRjaCgnaGVscCcsJ3R4cF9wbHVnaW4nLCduYW1lJywkbmFtZSkgOiAnJzsNCgkJ bGlzdCgkY3NzLCRoZWxwKSA9ICgkaGVscCkgPyBpZWRfcGx1Z2luX2V4dHJhY3RfaHVuaygk aGVscCwgIkNTUyIsICI8IS0tfC0tPiIsIHRydWUpIDogYXJyYXkoJycsJGhlbHApOw0KCX0g ZWxzZSBpZiAoZ3BzKCdmaWxlbmFtZScpKSB7DQoJCSRwbHVnaW49aWVkX3BsdWdpbl9yZWFk X2ZpbGUoJHByZWZzWydwbHVnaW5fY2FjaGVfZGlyJ10uRFMuZ3BzKCdmaWxlbmFtZScpKTsN CgkJZXh0cmFjdCgkcGx1Z2luKTsNCgl9DQoJZWNobyBzdGFydFRhYmxlKCdlZGl0Jyk7DQoJ aWYgKGVtcHR5KCRoZWxwKSkgew0KCQllY2hvIHRyKHRkYSgnPHA+SGVscCBub3QgYWNjZXNz aWJsZSBmcm9tIHRoaXMgZmlsZS48L3A+JykpOw0KCX0gZWxzZSB7DQoJCWxpc3QgKCRzdGFy dF9jc3MsICRlbmRfY3NzKSA9IGllZF9wbHVnaW5fbWFrZV9tYXJrZXJzKCJDU1MiLCAkaWVk X3BsdWdpbl9nbG9iYWxzWydjc3Nfc3RhcnQnXSwgJGllZF9wbHVnaW5fZ2xvYmFsc1snY3Nz X2VuZCddKTsNCgkJJHBsdWdpblsnaGVscCddID0gaWVkX3BsdWdpbl90ZXh0aWxlKCRuYW1l LCAkaGVscCwgJGNzcywgJHN0YXJ0X2NzcywgJGVuZF9jc3MpOw0KCQllY2hvIHRyKHRkYSgg JzxwPkV4dHJhY3RlZCAnLighZW1wdHkoJHBsdWdpblsnaGVscCddKSA/ICdhbmQgVGV4dGls ZSBwcm9jZXNzZWQnIDogJycpLicgaGVscCBzZWN0aW9uIGZvbGxvd3MmIzgyMzA7PC9wPjxo cj4nLCAnIHdpZHRoPSI2MDAiJykpOw0KCQllY2hvIHRyKHRkYSgkcGx1Z2luWydoZWxwJ10s ICcgd2lkdGg9IjYwMCInKSk7DQoJfQ0KCWVjaG8gZW5kVGFibGUoKTsNCn0NCg0KLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KZnVuY3Rpb24gaWVkX3BsdWdpbl9zZXR1cCgkZXZlbnQ9JycsICRzdGVwPScnLCAk bWVzc2FnZT0nJykgew0KCWdsb2JhbCAkaWVkX3BsdWdpbl9wcmVmczsNCgkkbnVtUmVxUHJl ZnMgPSBjb3VudCgkaWVkX3BsdWdpbl9wcmVmc1swXSk7DQoNCglwYWdldG9wKGdUeHQoJ2Vk aXRfcGx1Z2lucycpLCRtZXNzYWdlKTsNCgkkcHJlZmtleXMgPSBkb1F1b3RlKGltcGxvZGUo IicsJyIsYXJyYXlfa2V5cygkaWVkX3BsdWdpbl9wcmVmc1swXSkpKTsNCgkkcnMgPSBzYWZl X3Jvd3MoJ25hbWUsdmFsLGh0bWwnLCd0eHBfcHJlZnMnLCduYW1lIGluICgnLiRwcmVma2V5 cy4nKScpOw0KCSRudW1Sb3dzID0gY291bnQoJHJzKTsNCg0KCSRidG5TYXZlID0gZklucHV0 KCdzdWJtaXQnLCAnc3VibWl0JywgZ1R4dCgnc2F2ZScpLCAncHVibGlzaCcpOw0KCSRidG5J bnN0YWxsID0gJzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9aWVkX3BsdWdp bl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2luX3ByZWZzX2luc3RhbGwiIHN0eWxlPSJk aXNwbGF5OmlubGluZSI+Jy5mSW5wdXQoJ3N1Ym1pdCcsICdzdWJtaXQnLCBnVHh0KCdpbnN0 YWxsJyksICdwdWJsaXNoJykuJzwvZm9ybT4nOw0KCSRidG5SZW1vdmUgPSAnPGZvcm0gbWV0 aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtzdGVw PWllZF9wbHVnaW5fcHJlZnNfcmVtb3ZlIiBzdHlsZT0iZGlzcGxheTppbmxpbmUiPicuZklu cHV0KCdzdWJtaXQnLCAnc3VibWl0JywgZ1R4dCgnZGVsZXRlJyksICdwdWJsaXNoJykuJzwv Zm9ybT4nOw0KCSRidG5TdHlsZSA9ICcgc3R5bGU9ImJvcmRlcjowO2hlaWdodDoyNXB4Iic7 DQoNCgllY2hvIHN0YXJ0VGFibGUoJ2xpc3QnKTsNCglpZiAoJG51bVJvd3MgPT0gJG51bVJl cVByZWZzKSB7DQoJCS8vIFByZWZzIGFsbCBpbnN0YWxsZWQNCgkJZWNobyB0cih0ZGEoc3Ry b25nKGllZF9wbHVnaW5fZ1R4dCgncHJlZnNfdGl0bGUnKSksICcgY29sc3Bhbj0iMiInKSAu IHRkYSgkYnRuUmVtb3ZlLCAkYnRuU3R5bGUpICk7DQoJCWVjaG8gJzxmb3JtIG1ldGhvZD0i cG9zdCIgYWN0aW9uPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRf cGx1Z2luX3ByZWZzX3VwZGF0ZSI+JzsNCgkJZm9yICgkaWR4ID0gMDsgJGlkeCA8ICRudW1S b3dzOyAkaWR4KyspIHsNCgkJCSRhID0gJHJzWyRpZHhdOw0KCQkJJGxhYmVsID0gJzxsYWJl bCBmb3I9IicuJGFbJ25hbWUnXS4nIj4nLmllZF9wbHVnaW5fZ1R4dCgkYVsnbmFtZSddKS4n OjwvbGFiZWw+JzsNCgkJCSRvdXQgPSB0ZGEoJGxhYmVsLCAnIHN0eWxlPSJ0ZXh0LWFsaWdu OiByaWdodDsgdmVydGljYWwtYWxpZ246IG1pZGRsZTsiJyk7DQoJCQlzd2l0Y2goJGFbJ25h bWUnXSkgew0KCQkJCWNhc2UgImllZF9wbHVnaW5fZWRpdG9yX3BhdGgiOg0KCQkJCWNhc2Ug ImllZF9wbHVnaW5faGVscF9lZGl0b3JfcGF0aCI6DQoJCQkJY2FzZSAiaWVkX3BsdWdpbl9v dXRwdXRfc2ZpbGUiOg0KCQkJCWNhc2UgImllZF9wbHVnaW5fb3V0cHV0X3NmaWxlYyI6DQoJ CQkJY2FzZSAiaWVkX3BsdWdpbl9vdXRwdXRfc2ZpbGVwIjoNCgkJCQljYXNlICJpZWRfcGx1 Z2luX291dHB1dF90bXBjYWNoZSI6DQoJCQkJCSRvdXQgLj0gdGQoZklucHV0KCd0ZXh0Jywg JGFbJ25hbWUnXSwgJGFbJ3ZhbCddLCAnZWRpdCcsICcnLCAnJywgNTAsICcnLCAkYVsnbmFt ZSddKSk7DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgImllZF9wbHVnaW5fZWRpdG9yIjoNCi8v CQkJCQkkb3V0IC49IHRkKHNlbGVjdElucHV0KCRhWyduYW1lJ10sIGFycmF5KCdub25lJyA9 PiAnTm9uZScsICdlZGl0X2FyZWEnID0+ICdFZGl0IEFyZWEnLCAnY29kZXByZXNzJyA9PiAn Q29kZVByZXNzJyksICRhWyd2YWwnXSwgJycsICcgb25jaGFuZ2U9ImllZF9wbHVnaW5fcHJl ZnN3YXAodGhpcy5pZCwgdGhpcy52YWx1ZSk7IicsICRhWyduYW1lJ10pKTsNCgkJCQkJJG91 dCAuPSB0ZChzZWxlY3RJbnB1dCgkYVsnbmFtZSddLCBhcnJheSgnbm9uZScgPT4gJ05vbmUn LCAnZWRpdF9hcmVhJyA9PiAnRWRpdCBBcmVhJyksICRhWyd2YWwnXSwgJycsICcgb25jaGFu Z2U9ImllZF9wbHVnaW5fcHJlZnN3YXAodGhpcy5pZCwgdGhpcy52YWx1ZSk7IicsICRhWydu YW1lJ10pKTsNCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAiaWVkX3BsdWdpbl9oZWxwX2VkaXRv ciI6DQoJCQkJCSRvdXQgLj0gdGQoc2VsZWN0SW5wdXQoJGFbJ25hbWUnXSwgYXJyYXkoJ3Rl eHRpbGUnID0+ICdOb25lIChUZXh0aWxlKScsICd0aW55X21jZScgPT4gJ1RpbnkgTUNFJyks ICRhWyd2YWwnXSwgJycsICcgb25jaGFuZ2U9ImllZF9wbHVnaW5fcHJlZnN3YXAodGhpcy5p ZCwgdGhpcy52YWx1ZSk7IicsICRhWyduYW1lJ10pKTsNCgkJCQkJYnJlYWs7DQoJCQkJY2Fz ZSAiaWVkX3BsdWdpbl9vdXRwdXRfb3JkZXIiOg0KCQkJCQkkb3V0IC49IHRkKHJhZGlvKCRh WyduYW1lJ10sMCwoKCRhWyd2YWwnXT09MCk/MTowKSkuaWVkX3BsdWdpbl9nVHh0KCdvdXRw dXRfY29kZV9maXJzdCcpLiIgIiAuIHJhZGlvKCRhWyduYW1lJ10sMSwoKCRhWyd2YWwnXT09 MSk/MTowKSkuaWVkX3BsdWdpbl9nVHh0KCdvdXRwdXRfaGVscF9maXJzdCcpLiIgIik7DQoJ CQkJCWJyZWFrOw0KCQkJCWNhc2UgImllZF9wbHVnaW5fZWRpdG9yX3dpZHRoIjoNCgkJCQkJ JG91dCAuPSB0ZChmSW5wdXQoJ3RleHQnLCAkYVsnbmFtZSddLCAkYVsndmFsJ10sICdlZGl0 JywgJycsICcnLCA1LCAnJywgJGFbJ25hbWUnXSkpOw0KCQkJCQlicmVhazsNCgkJCX0NCgkJ CWVjaG8gdHIoJG91dCk7DQoJCX0NCgkJZWNobyB0cih0ZGEoJGJ0blNhdmUsICRidG5TdHls ZSkpOw0KCQllY2hvICc8L2Zvcm0+JzsNCgl9IGVsc2UgaWYgKCRudW1Sb3dzID4gMCAmJiAk bnVtUm93cyA8ICRudW1SZXFQcmVmcykgew0KCQllY2hvIHRyKHRkYShzdHJvbmcoaWVkX3Bs dWdpbl9nVHh0KCdwcmVmc190aXRsZScpKSwgJyBjb2xzcGFuPSIyIicpKTsNCgkJZWNobyB0 cih0ZGEoc3Ryb25nKGllZF9wbHVnaW5fZ1R4dCgncHJlZnNfc29tZScpKS5ici5icg0KCQkJ CQkJLmllZF9wbHVnaW5fZ1R4dCgncHJlZnNfc29tZV9leHBsYWluJykuYnIuYnINCgkJCQkJ CS5pZWRfcGx1Z2luX2dUeHQoJ3ByZWZzX3NvbWVfb3B0aW9ucycpLCAnIGNvbHNwYW49IjIi JykpOw0KCQllY2hvIHRyKHRkYSgkYnRuUmVtb3ZlLCRidG5TdHlsZSkgLiB0ZGEoJGJ0bklu c3RhbGwsICRidG5TdHlsZSkpOw0KCX0gZWxzZSB7DQoJCWVjaG8gdHIodGRhKHN0cm9uZyhp ZWRfcGx1Z2luX2dUeHQoJ3ByZWZzX3RpdGxlJykpLCAnIGNvbHNwYW49IjIiJykpOw0KCQll Y2hvIHRyKHRkYShpZWRfcGx1Z2luX2dUeHQoJ3ByZWZzX25vdF9pbnN0YWxsZWQnKSwgJyBj b2xzcGFuPSIyIicpKTsNCgkJZWNobyB0cih0ZGEoJGJ0bkluc3RhbGwsICRidG5TdHlsZSkp Ow0KCX0NCgllY2hvIGVuZFRhYmxlKCk7DQoNCgllY2hvIDw8PEVPRg0KPHNjcmlwdCB0eXBl PSJ0ZXh0L2phdmFzY3JpcHQiPg0KdmFyIGllZF9wbHVnaW5fcGF0aF9yZSA9IG5ldyBSZWdF eHAoIl4uKlsvXFxdIiwgImciKQ0KZnVuY3Rpb24gaWVkX3BsdWdpbl9wcmVmc3dhcChzZWxJ RCwgc2VsVmFsdWUpIHsNCgl2YXIgaWQgPSBzZWxJRCsnX3BhdGgnOw0KCXZhciBudXZhbCA9 ICgoYmFzZW5hbWUoJCgiIyIraWQpLnZhbCgpKSA9PSBzZWxWYWx1ZSkgPyAkKCIjIitpZCku dmFsKCkgOiBkaXJuYW1lKCQoIiMiK2lkKS52YWwoKSkrc2VsVmFsdWUpOw0KCWlmICgkKCIj IitzZWxJRClbMF0uc2VsZWN0ZWRJbmRleCA9PSAwKSB7DQoJCSQoIiMiK2lkKS5hdHRyKCJk aXNhYmxlZCIsIHRydWUpOyA7DQoJfSBlbHNlIHsNCgkJJCgiIyIraWQpLmF0dHIoImRpc2Fi bGVkIiwgZmFsc2UpOyA7DQoJCSQoIiMiK2lkKS52YWwobnV2YWwpOw0KCX0NCn0NCmZ1bmN0 aW9uIGJhc2VuYW1lKHBhdGgsIHN1ZmZpeCkgew0KCXJldHVybiBwYXRoLnJlcGxhY2UoaWVk X3BsdWdpbl9wYXRoX3JlLCAnJyk7DQp9DQpmdW5jdGlvbiBkaXJuYW1lKHBhdGgpIHsNCgly ZXR1cm4gcGF0aC5tYXRjaChpZWRfcGx1Z2luX3BhdGhfcmUpOw0KfQ0KJChmdW5jdGlvbigp IHsNCgkkKCJzZWxlY3QubGlzdCIpLmVhY2goZnVuY3Rpb24oKSB7DQoJCWllZF9wbHVnaW5f cHJlZnN3YXAodGhpcy5pZCwgdGhpcy52YWx1ZSk7DQoJfSk7DQp9KTsNCjwvc2NyaXB0Pg0K RU9GOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBpZWRfcGx1Z2luX3ByZWZzX2luc3Rh bGwoJHNob3dwYW5lPScxJykgew0KCWdsb2JhbCAkaWVkX3BsdWdpbl9wcmVmczsNCgkkbWVz c2FnZSA9ICcnOw0KCWZvcmVhY2ggKCRpZWRfcGx1Z2luX3ByZWZzWzBdIGFzICRwcmVmID0+ ICRkZmx0KSB7DQoJCWlmICghZmV0Y2goJ25hbWUnLCd0eHBfcHJlZnMnLCduYW1lJywkcHJl ZikpIHsNCgkJCSRpZCA9IHNhZmVfaW5zZXJ0KCd0eHBfcHJlZnMnLCdwcmVmc19pZD0xLCBu YW1lPScuZG9RdW90ZShkb1NsYXNoKCRwcmVmKSkuJywgdmFsPScuZG9RdW90ZShkb1NsYXNo KCRkZmx0KSkuJyxldmVudD0iaWVkX3BsdWdpbiInKTsNCgkJfQ0KCX0NCglpZiAoJHNob3dw YW5lKSB7DQoJCSRtZXNzYWdlID0gaWVkX3BsdWdpbl9nVHh0KCdwcmVmc19pbnN0YWxsZWQn KTsNCgkJaWVkX3BsdWdpbl9zZXR1cCgnJywnJywkbWVzc2FnZSk7DQoJfQ0KfQ0KDQovLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tDQpmdW5jdGlvbiBpZWRfcGx1Z2luX3ByZWZzX3JlbW92ZSgkc2hvd3BhbmU9JzEn KSB7DQoJZ2xvYmFsICRpZWRfcGx1Z2luX3ByZWZzOw0KCSRtZXNzYWdlID0gJyc7DQoJZm9y ZWFjaCAoYXJyYXlfbWVyZ2UoJGllZF9wbHVnaW5fcHJlZnNbMF0sJGllZF9wbHVnaW5fcHJl ZnNbMV0pIGFzICRwcmVmID0+ICRkZmx0KSB7DQoJCWlmIChmZXRjaCgnbmFtZScsJ3R4cF9w cmVmcycsJ25hbWUnLCRwcmVmKSkgew0KCQkJJGlkID0gc2FmZV9kZWxldGUoJ3R4cF9wcmVm cycsJ25hbWU9Jy5kb1F1b3RlKGRvU2xhc2goJHByZWYpKSk7DQoJCX0NCgl9DQoJaWYgKCRz aG93cGFuZSkgew0KCQkkbWVzc2FnZSA9IGllZF9wbHVnaW5fZ1R4dCgncHJlZnNfZGVsZXRl ZCcpOw0KCQlpZWRfcGx1Z2luX3NldHVwKCcnLCcnLCRtZXNzYWdlKTsNCgl9DQp9DQoNCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0NCmZ1bmN0aW9uIGllZF9wbHVnaW5fcHJlZnNfdXBkYXRlKCkgew0KCWdsb2Jh bCAkaWVkX3BsdWdpbl9wcmVmczsNCgkkbWVzc2FnZSA9ICcnOw0KCSRwb3N0ID0gZG9TbGFz aChzdHJpcFBvc3QoKSk7DQoJZm9yZWFjaCAoJGllZF9wbHVnaW5fcHJlZnNbMF0gYXMgJHBy ZWYgPT4gJGRmbHQpIHsNCgkJaWYgKGlzc2V0KCRwb3N0WyRwcmVmXSkpIHsNCgkJCXNhZmVf dXBkYXRlKCJ0eHBfcHJlZnMiLCAidmFsID0gJyIuJHBvc3RbJHByZWZdLiInIiwgIm5hbWUg PSAnIi5kb1NsYXNoKCRwcmVmKS4iJyBhbmQgcHJlZnNfaWQgPSAxIik7DQoJCX0NCgl9DQoJ JG1lc3NhZ2UgPSBnVHh0KCdwcmVmZXJlbmNlc19zYXZlZCcpOw0KCWllZF9wbHVnaW5fc2V0 dXAoJycsJycsJG1lc3NhZ2UpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBpZWRfcGx1 Z2luX2dUeHQoJHdoYXQsICRhdHRzID0gYXJyYXkoKSkgew0KCSRsYW5nID0gYXJyYXkoDQoJ CSdjYWNoZV9ub3Rfc2V0JyA9PiAnQWR2YW5jZWQgcHJlZiAicGx1Z2luIGNhY2hlIGRpcmVj dG9yeSIgbm90IGRlZmluZWQnLA0KCQknY2hlY2tfdHlwZScgPT4gJ0NoZWNrIHlvdXIgcGx1 Z2luIHR5cGUhJywNCgkJJ2Nob29zZV9maWxlJyA9PiAnWW91IGFyZSBzdXBwb3NlZCB0byBj aG9vc2UgdGhlIGZpbGUgOyknLA0KCQknY29kZV9kaXN0JyA9PiAnUGx1Z2luIGNvZGU8YnI+ Zm9yIGRpc3RyaWJ1dGlvbicsDQoJCSdpZWRfcGx1Z2luX2NvbXBvc2VyJyA9PiAnUGx1Z2lu IENvbXBvc2VyJywNCgkJJ2NvbXByZXNzJyA9PiAnWmlwJywNCgkJJ2NyZWF0ZV9uZXcnID0+ ICdDcmVhdGUgbmV3IHBsdWdpbicsDQoJCSdlZGl0X25ldycgPT4gJ0VkaXQgeW91ciBuZXcg cGx1Z2luJywNCgkJJ2VuYWJsZScgPT4gJ0VuYWJsZWQnLA0KCQknZXhwb3J0JyA9PiAnRXhw b3J0IGFzJywNCgkJJ2ZsYWdfaGFzX3ByZWZzJyA9PiAnSGFzIHByZWZzJywNCgkJJ2ZsYWdf bGlmZWN5Y2xlX25vdGlmeScgPT4gJ0V2ZW50IG5vdGlmeScsDQoJCSdmbGFncycgPT4gJ0Zs YWdzJywNCgkJJ2llZF9wbHVnaW5fZWRpdG9yJyA9PiAnUGx1Z2luIGVkaXRvcicsDQoJCSdp ZWRfcGx1Z2luX2VkaXRvcl9wYXRoJyA9PiAnUGx1Z2luIGVkaXRvciBwYXRoIFVSTCcsDQoJ CSdpZWRfcGx1Z2luX2VkaXRvcl93aWR0aCcgPT4gJ1BsdWdpbiBlZGl0b3Igd2lkdGggKGNo YXJzKScsDQoJCSdpZWRfcGx1Z2luX2hlbHBfZWRpdG9yJyA9PiAnSGVscCBlZGl0b3InLA0K CQknaWVkX3BsdWdpbl9oZWxwX2VkaXRvcl9wYXRoJyA9PiAnSGVscCBlZGl0b3IgcGF0aCBV UkwnLA0KCQknaWVkX3BsdWdpbl9vdXRwdXRfb3JkZXInID0+ICdQSFAgZXhwb3J0IG9yZGVy JywNCgkJJ2llZF9wbHVnaW5fb3V0cHV0X3NmaWxlJyA9PiAnRXhwb3J0IHBsdWdpbiBmaWxl bmFtZSBmb3JtYXQnLA0KCQknaWVkX3BsdWdpbl9vdXRwdXRfc2ZpbGVjJyA9PiAnRXhwb3J0 IGNvbXByZXNzZWQgZmlsZW5hbWUgZm9ybWF0JywNCgkJJ2llZF9wbHVnaW5fb3V0cHV0X3Nm aWxlcCcgPT4gJ1BsdWdpbiB0ZW1wbGF0ZSBmaWxlbmFtZSBmb3JtYXQnLA0KCQknaWVkX3Bs dWdpbl9vdXRwdXRfdG1wY2FjaGUnID0+ICdDYWNoZSB0ZXh0aWxlZCBoZWxwIGhlcmUnLA0K CQknbmFtZScgPT4gJ1BsdWdpbiBuYW1lJywNCgkJJ25hbWVfZmlyc3QnID0+ICdZb3UgYXJl IHN1cHBvc2VkIHRvIG5hbWUgdGhlIHBsdWdpbiA7KScsDQoJCSduYW1lX3Rvb2x0aXAnID0+ ICdPbmx5IG5lZWRlZCBpZiB0aGUgUEhQIGZpbGUgeW91IGFyZSB1cGxvYWRpbmcgaXMgTk9U IGluIHRoZSBzdGFuZGFyZCB0ZW1wbGF0ZSBmb3JtYXQnLA0KCQknbG9hZF9vcmRlcicgPT4g J0xvYWQgb3JkZXInLA0KCQknbG9hZF9vcmRlcl9oZWxwJyA9PiAnKDE9Zmlyc3QsIDU9bm9y bWFsLCA5PWxhc3QpJywNCgkJJ291dHB1dF9jb2RlX2ZpcnN0JyA9PiAnQ29kZSBmaXJzdCcs DQoJCSdvdXRwdXRfaGVscF9maXJzdCcgPT4gJ0hlbHAgZmlyc3QnLA0KCQkncGx1Z2luX2Nv ZGUnID0+ICdTb3VyY2UgY29kZScsDQoJCSdwcmVmc19kZWxldGVkJyA9PiAnUHJlZmVyZW5j ZXMgZGVsZXRlZCcsDQoJCSdwcmVmc19pbnN0YWxsZWQnID0+ICdQcmVmZXJlbmNlcyBpbnN0 YWxsZWQnLA0KCQkncHJlZnNfbm90X2luc3RhbGxlZCcgPT4gJ1ByZWZlcmVuY2VzIG5vdCBp bnN0YWxsZWQuJywNCgkJJ3ByZWZzX3NvbWUnID0+ICdOb3QgYWxsIHByZWZlcmVuY2VzIGF2 YWlsYWJsZS4nLA0KCQkncHJlZnNfc29tZV9leHBsYWluJyA9PiAnSXQgaXMgZWl0aGVyIGJl Y2F1c2UgdGhpcyBpcyBhIGRpZmZlcmVudCB2ZXJzaW9uIG9mIHRoZScuYnIuJ3BsdWdpbiB0 byBvbmUgeW91IGhhZCBiZWZvcmUgb3IgdGhlIHByZWZlcmVuY2VzJy5ici4naGF2ZSBiZWNv bWUgY29ycnVwdCBzb21laG93LicsDQoJCSdwcmVmc19zb21lX29wdGlvbnMnID0+ICdDaG9v c2UgJy5nVHh0KCdkZWxldGUnKS4nIHRvIHJlbW92ZSB0aGVtIGFsbCBvciAnLmdUeHQoJ2lu c3RhbGwnKS4nIHRvIGFkZCcuYnIuJ2FueSBuZXcgb25lcywgbGVhdmluZyBhbGwgZXhpc3Rp bmcgcHJlZmVyZW5jZXMgdW50b3VjaGVkLicsDQoJCSdwcmVmc190aXRsZScgPT4gJ1BsdWdp biBDb21wb3NlciBwcmVmZXJlbmNlcycsDQoJCSdyZW5hbWVfZmFpbGVkJyA9PiAnIChyZW5h bWUgZmFpbGVkKSAnLA0KCQkncmVuYW1lX2ZpbGUnID0+ICdSZW5hbWUgZmlsZScsDQoJCSdy ZW5hbWVkJyA9PiAnIChyZW5hbWVkKSAnLA0KCQkncmVzdG9yZV9oZWxwJyA9PiAnUm9sbCBi YWNrIHRoZSBwbHVnaW4gY29kZSB0byB0aGUgbW9zdCByZWNlbnQgcmVzdG9yZSBwb2ludCcs DQoJCSdyZXN0b3JlX3BvaW50JyA9PiAnUmVzdG9yZSBwb2ludCcsDQoJCSdyZXN0b3JlX3Zl cmlmeScgPT4gJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByb2xsYmFjayB0aGUge25hbWV9 IHNvdXJjZSBjb2RlIHRvIGl0cyBsYXN0IHJlc3RvcmUgcG9pbnQ/JywNCgkJJ3Jlc3RvcmVk JyA9PiAnUGx1Z2luIHtuYW1lfSByZXN0b3JlZC4nLA0KCQkncnVuX2Zyb20nID0+ICdQbHVn aW5zIHRoYXQgcnVuIGZyb20nLA0KCQknc2F2ZV9hcycgPT4gJ1NhdmUgYXMnLA0KCQknc2V0 dXAnID0+ICdTZXR1cCcsDQoJCSd0eXBlJyA9PiAnUGx1Z2luIHR5cGUnLA0KCQkndHlwZV8w JyA9PiAnQ2xpZW50JywNCgkJJ3R5cGVfMScgPT4gJ0FkbWluICsgQ2xpZW50JywNCgkJJ3R5 cGVfMicgPT4gJ0xpYnJhcnknLA0KCQkndHlwZV8zJyA9PiAnQWRtaW4nLA0KCQkndXBsb2Fk X3BocCcgPT4gJ1VwbG9hZCBwbHVnaW4gZnJvbSBQSFAgZmlsZScsDQoJCSd1dGlsaXRpZXMn ID0+ICdVdGlsaXRpZXMgKDxzdHJvbmc+dXNlIG9ubHkgYWZ0ZXIgc2F2aW5nIHRoZSBkYXRh IGFib3ZlPC9zdHJvbmc+KScsDQoJKTsNCglyZXR1cm4gc3RydHIoJGxhbmdbJHdoYXRdLCAk YXR0cyk7DQp9IjtzOjQ6InR5cGUiO3M6MToiMyI7czo1OiJvcmRlciI7czoxOiI1IjtzOjU6 ImZsYWdzIjtzOjE6IjMiO3M6NDoiaGVscCI7czoyODYwMDoiPGRpdiBpZD0iaWVkX2hlbHAi PgoKCTxoMT5JbnNwaXJlZCBwbHVnaW4gY29tcG9zZXI8L2gxPgoKCTxwPlRoaXMgcGx1Z2lu IGNyZWF0ZXMgYSBuZXcgcGFnZSB1bmRlciB0aGUgJiM4MjE2O0V4dGVuc2lvbnMmIzgyMTc7 IHRhYiB3aGVyZSB5b3UgY2FuIGVkaXQgcGx1Z2lucyB0aGF0IGFyZSBhbHJlYWR5IGluc3Rh bGxlZCBpbiBUZXh0cGF0dGVybiBhbmQgcmVnaXN0ZXIgbmV3IHBsdWdpbnMuPC9wPgoKCTxo MiBpZD0iZmVhdHVyZXMiPkZlYXR1cmVzPC9oMj4KCgk8dWw+CgkJPGxpPkNyZWF0ZSwgZWRp dCBvciB1cGxvYWQgcGx1Z2luIGNvZGUgYW5kIGRvY3VtZW50YXRpb24sIHRoZW4gcHVibGlz aCB5b3VyIHdhcmVzIGluIHRoZSBzdGFuZGFyZCA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9z cGFuPiBwbHVnaW4gZm9ybWF0IChzZWUgYW4gPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24u Y29tL2Rvd25sb2Fkcy9leGFtcGxlX3BsdWdpbl90ZW1wbGF0ZS50eHQiPmV4YW1wbGU8L2E+ KTwvbGk+CgkJPGxpPkZ1bGwgc3VwcG9ydCBmb3IgdGhlIG9mZmljaWFsIDxhIGhyZWY9Imh0 dHA6Ly9zdGVmZGF3c29uLmNvbS9kb3dubG9hZHMvZW1wdHlfcGx1Z2luX3RlbXBsYXRlLnR4 dCI+emVtX3RwbC5waHAgcGx1Z2luIHRlbXBsYXRlPC9hPi4gVGhlIDxhIGhyZWY9Imh0dHA6 Ly9zdGVmZGF3c29uLmNvbS9kb3dubG9hZHMvZW1wdHlfcGx1Z2luX3RlbXBsYXRlX2NvZGVf Zmlyc3QudHh0Ij5tb2RpZmllZCB2ZXJzaW9uPC9hPiBieSA8YSBocmVmPSJodHRwOi8vdHhw LXBsdWdpbnMubmV0Y2FydmluZy5jb20vcGx1Z2lucy9tb2RpZmllZC1wbHVnaW4tY29tcGls ZXIiPm5ldC1jYXJ2ZXI8L2E+IGFsc28gaW5jb3Jwb3JhdGVzIGEgJiM4MjE2O3N0eWxlJiM4 MjE3OyBzZWN0aW9uIGZvciBlYXN5IHN0eWxpbmcgb2YgeW91ciBoZWxwIHRleHQuIFRoZSBQ bHVnaW4gQ29tcG9zZXIgbG9va3MgZm9yIDxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+ IHNlY3Rpb25zIGluIHRoZSB0ZW1wbGF0ZSBhbmQgd2lsbCB1c2UgdGhlbSBhY2NvcmRpbmds eS4gSXQgd2lsbCBhbHNvIHJlYWQgPHNwYW4gY2xhc3M9ImNhcHMiPlNWTjwvc3Bhbj4gJExh c3RDaGFuZ2VkUmV2aXNpb24gZW50cmllcyAodGhhbmtzIG5ldC1jYXJ2ZXIpPC9saT4KCQk8 bGk+RXhwb3J0IHBsdWdpbnMgaW4gYSB2YXJpZXR5IG9mIGZvcm1hdHMsIGFsbG93aW5nIHlv dSB0byBzd2l0Y2ggYmV0d2VlbiBlZGl0aW5nIGluIHRoZSBwbHVnaW4gY29tcG9zZXIgb3Ig eW91ciBmYXZvdXJpdGUgZWRpdGluZyBwcm9ncmFtLCB0ZXN0IHRoZSBmaWxlIGluIHRoZSBw bHVnaW5fY2FjaGVfZGlyLCB0aGVuIGltcG9ydCBpdCBiYWNrIGludG8gPHNwYW4gY2xhc3M9 ImNhcHMiPlRYUDwvc3Bhbj4gd2l0aCB0aGUgaGVscCBvZiB0aGUgQ29tcG9zZXIgYW5kIHB1 Ymxpc2ggeW91ciBwbHVnaW4gZm9yIGV2ZXJ5b25lLiBMb29rIGF0IHRoZSBib3R0b20gb2Yg dGhlIFBsdWdpbiBDb21wb3NlciYjODIxNztzIDxhIGhyZWY9IiNlZGl0cGFnZSI+RWRpdCBw YWdlPC9hPiBmb3IgdGhlIG9wdGlvbnM7IGp1c3QgcmVtZW1iZXIgdG8gc2F2ZSB5b3VyIGNo YW5nZXMgYmVmb3JlIGV4cG9ydGluZyBvciBjb3B5aW5nL3Bhc3RpbmcgdGhlIGNvZGUhIFlv dSBjYW4gZXhwb3J0IGFzOgoJPHVsPgoJCTxsaT5hIHN0YW5kYXJkIEJBU0U2NC1lbmNvZGVk IHRleHQgZmlsZTwvbGk+CgkJPGxpPmEgZ3ppcHBlZCB2ZXJzaW9uICh1c2VmdWwgZm9yIGxh cmdlIHBsdWdpbnMpPC9saT4KCQk8bGk+YSBwaHAgZmlsZSBpbiB0aGUgc3RhbmRhcmQgdGVt cGxhdGUgZm9ybWF0PC9saT4KCTwvdWw+PC9saT4KCQk8bGk+V2hlbiBleHBvcnRpbmcsIGZp bGVzIGNhbiBiZSBzYXZlZCB3aXRoIGVpdGhlciB0aGUgY29kZSBibG9jayBmaXJzdCBvciB0 aGUgaGVscCBibG9jayBmaXJzdCwgYW5kIHlvdSBjYW4gY2hhbmdlIHRoZSBvdXRwdXQgZmls ZW5hbWUgZm9ybWF0IHRvIHRhc3RlLiBVc2UgdGhlIDxhIGhyZWY9IiNzZXR1cHBhZ2UiPlNl dHVwIGJ1dHRvbjwvYT4gdG8gY29uZmlndXJlPC9saT4KCQk8bGk+U3VwcG9ydCBmb3IgYWxs IHBsdWdpbiB0eXBlczoKCTx1bD4KCQk8bGk+Q2xpZW50ICsgQWRtaW48L2xpPgoJCTxsaT5D bGllbnQtc2lkZSBvbmx5PC9saT4KCQk8bGk+QWRtaW4tc2lkZSBvbmx5PC9saT4KCQk8bGk+ TGlicmFyeSBwbHVnaW5zPC9saT4KCTwvdWw+PC9saT4KCQk8bGk+U3VwcG9ydCBmb3Igc3Bl Y2lmeWluZyBhIHJlY29tbWVuZGVkIHBsdWdpbiBsb2FkIG9yZGVyIGlmIHlvdXIgcGx1Z2lu IG5lZWRzIHNwZWNpYWwgcG93ZXJzLiAmIzgyMTY7NSYjODIxNzsgaXMgdGhlIGRlZmF1bHQu IE5vdGUgdGhhdCBpZiB1c2luZyB0aGUgcGx1Z2luIGNhY2hlIGRpcmVjdG9yeSB0aGlzIGZl YXR1cmUgaXMgPGVtPm9ubHkgYXZhaWxhYmxlIGlmIHRoZSA8Y29kZT4kcGx1Z2luWyYjMzk7 b3JkZXImIzM5O108L2NvZGU+IHN0cmluZyBpcyBpbiB0aGUgdGVtcGxhdGUgdG8gYmVnaW4g d2l0aC48L2VtPiBTbyBpZiB5b3VyIGxvYWQgb3JkZXIga2VlcHMgcmV0dXJuaW5nIHRvICYj ODIxNjs1JiM4MjE3OywgZWRpdCB5b3VyIHRlbXBsYXRlIGRpcmVjdGx5IHRvIGFkZCB0aGF0 IHN0cmluZyBvciBwYXN0ZSB5b3VyIHBsdWdpbiBpbnRvIHRoZSByZWxldmFudCBwYXJ0cyBv ZiB0aGUgPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL2Rvd25sb2Fkcy9lbXB0eV9w bHVnaW5fdGVtcGxhdGUudHh0Ij5lbXB0eSBwbHVnaW4gdGVtcGxhdGU8L2E+IGFuZCB1cGxv YWQgaXQ8L2xpPgoJCTxsaT5IZWxwIHRleHQgY2FuIGJlIHdyaXR0ZW4gaW4gVGV4dGlsZSBv ciAoWClIVE1MLiBTdHlsZXMgY2FuIGJlIGFkZGVkIHRvIHRoZSBoZWxwIHNlY3Rpb248L2xp PgoJCTxsaT5UYWtlIGFkdmFudGFnZSBvZiB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRl eHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP2lkPTEzMDg5Ij5UaW55TUNFIDxzcGFuIGNs YXNzPSJjYXBzIj5XWVNJV1lHPC9zcGFuPiBlZGl0b3I8L2E+IGZvciB0aGUgaGVscCBzZWN0 aW9uIG9yIDxhIGhyZWY9Imh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93Zmls ZXMucGhwP2dyb3VwX2lkPTE2NDAwOCI+RWRpdCBBcmVhPC9hPiBmb3IgY29kZSBtYXJrdXAg KHRoYW5rcyB2YXJpYWFzKS4gU2VlIHRoZSA8YSBocmVmPSIjc2V0dXBwYWdlIj5zZXR1cDwv YT4gYW5kIDxhIGhyZWY9IiNub3RlcyI+bm90ZXM8L2E+IHNlY3Rpb25zIGZvciBtb3JlIG9u IHRoZXNlIGVkaXRvcnM8L2xpPgoJCTxsaT5CdWlsdC1pbiBUZXh0aWxlIGhlbHAgdmlld2Vy ICh0aGFua3MgdG8gbmV0LWNhcnZlciYjODIxNztzIDxhIGhyZWY9Imh0dHA6Ly90eHAtcGx1 Z2lucy5uZXRjYXJ2aW5nLmNvbS9wbHVnaW5zL3BsdWdpbi1oZWxwLXZpZXdlciI+UGx1Z2lu IEhlbHAgVmlld2VyPC9hPikgdG8gYWxsb3cgeW91IHRvIHByZXZpZXcgeW91ciBIZWxwIHRl eHQgZHVyaW5nIGRldmVsb3BtZW50ICh0aGUgdHdvIHZpZXdlcnMgd2lsbCBoYXBwaWx5IGNv LWV4aXN0IGlmIHlvdSB3aXNoKTwvbGk+CgkJPGxpPlJlc2l6YWJsZSB0ZXh0YXJlYSwgcGx1 cyBjaGFyYWN0ZXIgbGltaXQvY291bnRlcnMgc28gdGhlcmUmIzgyMTc7cyBsZXNzIGNoYW5j ZSBvZiB5b3UgbWFraW5nIHRoZSBwbHVnaW4gb3IgZG9jcyB0b28gYmlnIHRvIGZpdCBpbiB0 aGUgZGF0YWJhc2U8L2xpPgoJCTxsaT5TdXBwb3J0IGZvciBzZXR0aW5nIGEgY29kZSAmIzgy MjA7cmVzdG9yZSBwb2ludCYjODIyMTsgYW5kIHJvbGxpbmcgYmFjayB0byB0aGF0IHBvaW50 IGlmIHRoaW5ncyBnbyBzaWRld2F5cy4gQWxzbyB1c2VmdWwgZm9yIHJldHVybmluZyBwbHVn aW4gc291cmNlIGNvZGUgdG8gaXRzIGFzLWluc3RhbGxlZCBzdGF0ZTwvbGk+Cgk8L3VsPgoK CTxoMiBpZD0iYXV0aG9ycyI+QXV0aG9yczwvaDI+CgoJPHA+T3JpZ2luYWwgcGx1Z2luOiA8 YSBocmVmPSJodHRwOi8vaW5zcGlyZWQua2lldi51YS9mZWVkYmFjay8iPll1cmEgTGlubnlr PC9hPjxiciAvPgpNb2RpZmljYXRpb25zICh2MC41Kyk6IDxhIGhyZWY9Imh0dHA6Ly9zdGVm ZGF3c29uLmNvbS9jb21tZW50Rm9ybSI+U3RlZiBEYXdzb248L2E+PGJyIC8+CkEgdG91Y2gg b2YgY2xhc3M6IDxhIGhyZWY9Imh0dHA6Ly90eHAtcGx1Z2lucy5uZXRjYXJ2aW5nLmNvbS9j b250YWN0Ij5TdGV2ZSBEaWNraW5zb248L2E+PGJyIC8+ClBsdXMgaGVscCBmcm9tIGEgaG9z dCBvZiBmb3J1bSBjb250cmlidXRvcnMgdG9vIG51bWVyb3VzIHRvIG1lbnRpb24uIFlvdSBr bm93IHdobyB5b3UgYXJlIDstKTwvcD4KCgk8aDIgaWQ9Imluc3RhbGwiPkluc3RhbGxhdGlv biAvIFVuaW5zdGFsbGF0aW9uPC9oMj4KCgk8cCBjbGFzcz0icmVxdWlyZWQiPlJlcXVpcmVz IDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IDQuMi4wKzwvcD4KCgk8cD5Eb3dubG9h ZCB0aGUgcGx1Z2luICh2MC41IGFuZCBhYm92ZSkgZnJvbSA8YSBocmVmPSJodHRwOi8vc3Rl ZmRhd3Nvbi5jb20vc3ciPnN0ZWZkYXdzb24uY29tPC9hPiAocHJldmlvdXMgdmVyc2lvbnMg YXJlIHN0aWxsIGF2YWlsYWJsZSBvbiB0aGUgPGEgaHJlZj0iaHR0cDovL2luc3BpcmVkLmtp ZXYudWEvdHhwL2llZF9wbHVnaW5fY29tcG9zZXIiPkluc3BpcmVkIGhvbWVwYWdlPC9hPiks IHBhc3RlIHRoZSBjb2RlIGludG8gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+ IEFkbWluIC0mZ3Q7IFBsdWdpbnMgcGFnZSwgaW5zdGFsbCBhbmQgZW5hYmxlIHRoZSBwbHVn aW4uPC9wPgoKCTxwPlRoZSBkZWZhdWx0IHByZWZlcmVuY2VzIGFyZSBhdXRvbWF0aWNhbGx5 IGluc3RhbGxlZC4gVmlzaXQgdGhlIEV4dGVuc2lvbnMgLSZndDsgUGx1Z2luIENvbXBvc2Vy IHRhYiBhbmQgY2xpY2sgdGhlIFNldHVwIGJ1dHRvbiBpbiB0aGUgdG9wLXJpZ2h0IG9mIHRo ZSBzY3JlZW4gdG8gcmVpbnN0YWxsLCBkZWxldGUgYW5kIHNhdmUgdGhlIHBsdWdpbiBwcmVm ZXJlbmNlcy4gU2VlIHRoZSA8YSBocmVmPSIjc2V0dXBwYWdlIj5zZXR1cCBzZWN0aW9uPC9h PiBmb3IgZGV0YWlscy48L3A+CgoJPHA+VG8gcmVtb3ZlIHRoZSBQbHVnaW4gQ29tcG9zZXIg KG5vb29vISkgc2ltcGx5IGRlbGV0ZSB0aGUgcGx1Z2luIGFzIG5vcm1hbCBmcm9tIHRoZSBB ZG1pbiAtJmd0OyBQbHVnaW5zIHBhZ2UuIEFsbCB0aGUgcHJlZmVyZW5jZXMgd2lsbCBhdXRv bWF0aWNhbGx5IGJlIHJlbW92ZWQgYXMgd2VsbC4gPHNwYW4gY2xhc3M9ImNhcHMiPk5PVEU8 L3NwYW4+OiBkZWxldGluZyB0aGUgcGx1Z2luIGZyb20gdGhlIHBsdWdpbiBjb21wb3NlciB3 aW5kb3cgaXRzZWxmIDxlbT53aWxsIG5vdDwvZW0+IGRlbGV0ZSB0aGUgcHJlZmVyZW5jZXMu PC9wPgoKCTxoMiBpZD0idXNhZ2UiPlVzYWdlPC9oMj4KCgk8aDMgaWQ9Imxpc3RwYWdlIj5M aXN0IHBhZ2U8L2gzPgoKCTxwPlRoZXJlIGlzIGEgPGEgaHJlZj0iI3NldHVwcGFnZSI+c2V0 dXA8L2E+IGJ1dHRvbiB0byBhbGxvdyB5b3UgdG8gY29uZmlndXJlIHZhcmlvdXMgb3B0aW9u cyBpbiB0aGUgQ29tcG9zZXIsIHRoZSByZXN0IG9mIHRoZSBwYWdlIGxpc3RzIGFsbCBpbnN0 YWxsZWQgcGx1Z2lucy4gVGhlIGNvbHVtbnMgYXJlOjwvcD4KCgk8dWw+CgkJPGxpPjxzdHJv bmc+UGx1Z2luPC9zdHJvbmc+IDogY2xpY2sgdGhlIHBsdWdpbiBuYW1lIHRvIDxhIGhyZWY9 IiNlZGl0cGFnZSI+ZWRpdDwvYT4gaXQuIElmIHRoZSBwbHVnaW4gaGFzIHByZWZlcmVuY2Vz IGFzc29jaWF0ZWQgd2l0aCBpdCwgeW91IHdpbGwgYWxzbyBzZWUgYW4gPGVtPltPcHRpb25z XTwvZW0+IGxpbms8L2xpPgoJCTxsaT48c3Ryb25nPkF1dGhvcjwvc3Ryb25nPiA6IGlmIGF2 YWlsYWJsZSwgY2xpY2sgdGhlIGF1dGhvciB0byBnbyB0byB0aGVpciBzaXRlPC9saT4KCQk8 bGk+PHN0cm9uZz5WZXJzaW9uIChNb2RpZmllZCk8L3N0cm9uZz4gOiBzaG93cyB0aGUgY3Vy cmVudCB2ZXJzaW9uIG51bWJlciBhbmQgd2hldGhlciB0aGUgcGx1Z2luIGhhcyBiZWVuIG1v ZGlmaWVkIGZyb20gd2hlbiBpdCB3YXMgZWl0aGVyIGNyZWF0ZWQgb3IgaW5zdGFsbGVkLiBJ ZiBpdCBoYXMsIHlvdSBjYW4gY2xpY2sgdGhlIHZlcnNpb24gbnVtYmVyIHRvIHJlc3RvcmUg dGhlIHBsdWdpbiBjb2RlIHRvIGl0cyBpbnN0YWxsZWQgc3RhdGUgb3IgbGFzdCA8YSBocmVm PSIjcmVzdG9yZSI+cmVzdG9yZSBwb2ludDwvYT48L2xpPgoJCTxsaT48c3Ryb25nPkRlc2Ny aXB0aW9uPC9zdHJvbmc+IDogYnJpZWZseSwgd2hhdCB0aGUgcGx1Z2luIGRvZXM8L2xpPgoJ CTxsaT48c3Ryb25nPlB1Ymxpc2g8L3N0cm9uZz4gOiB0aHJlZSBsaW5rcwoJPHVsPgoJCTxs aT48ZW0+UHVibGlzaDwvZW0+IDogZXhwb3J0cyB0aGUgcGx1Z2luIGFzIGEgLnR4dCBmaWxl IGZvciBkaXN0cmlidXRpb24gdG8gb3RoZXIgVGV4dHBhdHRlcm4gdXNlcnM8L2xpPgoJCTxs aT48ZW0+WmlwPC9lbT4gOiBleHBvcnRzIHRoZSBwbHVnaW4gYXMgYSBjb21wcmVzc2VkIChn emlwcGVkKSAudHh0IGZpbGUgZm9yIGRpc3RyaWJ1dGlvbjwvbGk+CgkJPGxpPjxlbT5IZWxw PC9lbT4gOiBkaXNwbGF5cyB0aGUgKHRleHRpbGUgcHJvY2Vzc2VkKSBwbHVnaW4gZG9jdW1l bnRhdGlvbiwgaWYgdGhlcmUgaXMgYW55LiBDYW4gYWxzbyBiZSB2aWV3ZWQgZnJvbSB0aGUg RWRpdCBwYWdlPC9saT4KCTwvdWw+PC9saT4KCQk8bGk+PHN0cm9uZz5PcmRlcjwvc3Ryb25n PiA6IHRoZSByZWNvbW1lbmRlZCBwbHVnaW4gbG9hZCBvcmRlciBmcm9tIDEgKGxvYWRlZCBm aXJzdCkgdG8gOSAobG9hZGVkIGxhc3QpLiA1IGlzIGRlZmF1bHQ8L2xpPgoJCTxsaT48c3Ry b25nPkFjdGl2ZTwvc3Ryb25nPiA6IGVuYWJsZSBvciBkaXNhYmxlIGEgcGx1Z2luIGJ5IGNs aWNraW5nIGVudHJpZXMgaW4gdGhpcyBjb2x1bW4gJiM4MjEyOyB0aGlzIHdpbGwgPGVtPm5v dDwvZW0+IHRyaWdnZXIgYW55IGVuYWJsZWQvZGlzYWJsZWQgbm90aWZpY2F0aW9uIGV2ZW50 IGluIHlvdXIgcGx1Z2luLiBVc2UgdGhlIEFkbWluIC0mZ3Q7IFBsdWdpbnMgdGFiIGZvciB0 ZXN0aW5nIHRoaXM8L2xpPgoJCTxsaT48c3Ryb25nPng8L3N0cm9uZz4gOiBkZWxldGUgdGhl IHBsdWdpbiAmIzgyMTI7IHRoaXMgd2lsbCA8ZW0+bm90PC9lbT4gdHJpZ2dlciB0aGUgJiM4 MjE2O2RlbGV0ZWQmIzgyMTc7IG5vdGlmaWNhdGlvbiBldmVudC4gVXNlIHRoZSBBZG1pbiAt Jmd0OyBQbHVnaW5zIHRhYiBmb3IgdGVzdGluZyB0aGlzPC9saT4KCTwvdWw+CgoJPHA+SWYg eW91IGFyZSB1c2luZyB0aGUgcGx1Z2luX2NhY2hlX2RpciAoQWRtaW4gLSZndDsgQWR2YW5j ZWQgUHJlZnMpLCBhbnkgcGx1Z2lucyBpbiB0aGUgc3RhbmRhcmQgdGVtcGxhdGUgZm9ybWF0 IHVwbG9hZGVkIHRvIHRoaXMgZGlyZWN0b3J5IHdpbGwgYmUgYXZhaWxhYmxlIGltbWVkaWF0 ZWx5IGZvciBlZGl0aW5nIGFuZCB0ZXN0aW5nLiBZb3UgY2FuIGVkaXQgYW5kIHB1Ymxpc2gg dGhlIHBsdWdpbnMgaW4gdGhlIHNhbWUgbWFubmVyIGFzIHRoZSByZWd1bGFyLCBpbnN0YWxs ZWQgcGx1Z2lucyBhYm92ZSwgd2l0aCB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbnM6PC9wPgoK CTxvbD4KCQk8bGk+VGhlcmUgaXMgbm8gY29uY2VwdCBvZiAmIzgyMTY7bW9kaWZpZWQmIzgy MTc7IG9yIG9mIHJlc3RvcmUgcG9pbnRzIGFzIHRoZSBmaWxlcyBhbHdheXMgcmVwcmVzZW50 IHRoZSBtb3N0IHVwLXRvLWRhdGUgdmVyc2lvbjwvbGk+CgkJPGxpPkNhY2hlZCBwbHVnaW5z IGFyZSAmIzgyMjA7YWx3YXlzIG9uJiM4MjIxOyBhbmQgZG8gbm90IG5lZWQgdG8gYmUgaW5z dGFsbGVkLiBUbyBkZWFjdGl2YXRlIHRoZSBwbHVnaW4gdGhlIGZpbGUgbXVzdCBiZSByZW1v dmVkIGZyb20gdGhlIHBsdWdpbiBjYWNoZSBkaXJlY3Rvcnk8L2xpPgoJCTxsaT5JdCBmb2xs b3dzIHRoYXQgdGhlICYjODIxNjtpbnN0YWxsZWQmIzgyMTc7IG5vdGlmaWNhdGlvbiBldmVu dCBpcyBub3QgdHJpZ2dlcmVkIGZyb20gcGx1Z2lucyBpbiB0aGUgY2FjaGUgZGlyZWN0b3J5 PC9saT4KCQk8bGk+VGhlIHJlY29tbWVuZGVkIGxvYWQgb3JkZXIgY2Fubm90IGJlIGNoYW5n ZWQgZnJvbSB0aGUgbGlzdCBwYWdlOyBpdCBjYW4gb25seSBiZSBhbHRlcmVkIHZpYSB0aGUg PGEgaHJlZj0iI2VkaXRwYWdlIj5FZGl0PC9hPiBwYWdlLiBUaGUgbG9hZCBvcmRlciBpcyBv bmx5IHRha2VuIGludG8gYWNjb3VudCB3aGVuIHRoZSBwbHVnaW4gaXMgZXhwb3J0ZWQ8L2xp PgoJPC9vbD4KCgk8aDM+Q3JlYXRpbmcgYW5kIG5hbWluZyBwbHVnaW5zPC9oMz4KCgk8cD5U aGVyZSBhcmUgdHdvIHdheXMgb2YgY3JlYXRpbmcgcGx1Z2lucyBmcm9tIHRoZSBQbHVnaW4g Q29tcG9zZXIgbGlzdCBwYWdlLiBUaGUgZmlyc3QgaXMgdG8gY3JlYXRlIGEgYmxhbmssIGVt cHR5IHBsdWdpbjsgdXNlIHRoZSB0ZXh0IGJveCBhdCB0aGUgdG9wIGZvciB0aGlzLiBQb2lu dHMgdG8gbm90ZTo8L3A+CgoJPHVsPgoJCTxsaT5JZiB5b3UgdXNlIGEgc3RhbmRhcmQgcGx1 Z2luIG5hbWUgKGUuZy4gPGNvZGU+YWJjX215X3BsdWdpbjwvY29kZT4pIGl0IHdpbGwgYmUg Y3JlYXRlZCBpbiB0aGUgZGF0YWJhc2U8L2xpPgoJCTxsaT5JZiB5b3UgYWRkIDxjb2RlPi5w aHA8L2NvZGU+IHRvIHRoZSBwbHVnaW4gbmFtZSwgaXQgd2lsbCBiZSBjcmVhdGVkIGluIHRo ZSBwbHVnaW4gY2FjaGUgZGlyZWN0b3J5IGluIGEgc3RhbmRhcmQgdGVtcGxhdGUgZm9ybWF0 PC9saT4KCQk8bGk+QXZvaWQgc3BlY2lmeWluZyB0aGUgdmVyc2lvbiBvZiB0aGUgcGx1Z2lu IGluIHRoZSBuYW1lICYjODIxMjsgeW91IHNob3VsZCB1c2UgdGhlIDxlbT5SZW5hbWUgZmls ZTwvZW0+IG9yIDxlbT5FeHBvcnQ8L2VtPiBvcHRpb25zIGluIHRoZSBFZGl0IHBhZ2UgdG8g YWx0ZXIgdGhlIGZpbGVuYW1lIGludG8geW91ciBwcmVmZXJyZWQgZmlsZW5hbWUgZm9ybWF0 IChzZWUgPGEgaHJlZj0iI3NldHVwcGFnZSI+c2V0dXA8L2E+KTwvbGk+Cgk8L3VsPgoKCTxw PlRoZSBzZWNvbmQgbWV0aG9kIG9mIGNyZWF0aW5nIGEgcGx1Z2luIGlzIHRvIHVwbG9hZCBv bmUgdXNpbmcgdGhlIEJyb3dzZS91cGxvYWQgYm94IGF0IHRoZSBib3R0b20gb2YgdGhlIGxp c3QuIFBsZWFzZSBub3RlOjwvcD4KCgk8dWw+CgkJPGxpPllvdSBjYW4gdXBsb2FkIGNvZGUg aW4gZWl0aGVyIHN0YW5kYXJkIHBsdWdpbiB0ZW1wbGF0ZSBmb3JtYXQgKGVpdGhlciBjb2Rl LWZpcnN0IG9yIGhlbHAtZmlyc3QsIGNvbXBsZXRlIHdpdGggPHNwYW4gY2xhc3M9ImNhcHMi PkNTUzwvc3Bhbj4gYXJlYXMpIG9yIHNpbXBseSB1cGxvYWQgYSA8c3BhbiBjbGFzcz0iY2Fw cyI+UEhQPC9zcGFuPiBmaWxlIGNvbnRhaW5pbmcgY29kZSBvbmx5PC9saT4KCQk8bGk+VGhl IHBsdWdpbiB3aWxsIGFsd2F5cyBiZSBpbnN0YWxsZWQgaW4gdGhlIGRhdGFiYXNlIHdoZW4g dXNpbmcgdGhpcyBtZXRob2QgKHVwbG9hZCB0aGUgdGVtcGxhdGUgbWFudWFsbHkgdmlhIDxz cGFuIGNsYXNzPSJjYXBzIj5GVFA8L3NwYW4+IG9yIGNyZWF0ZSBhIG5ldyBvbmUgd2l0aCBh IC5waHAgZXh0ZW5zaW9uIGFuZCBwYXN0ZSB0aGUgY29kZSBpbnRvIGl0IGlmIHlvdSB3YW50 IGl0IGluIHRoZSBwbHVnaW4gY2FjaGUpPC9saT4KCQk8bGk+SWYgdGhlIHBsdWdpbiBleGlz dHMgaXQgd2lsbCBiZSB1cGRhdGVkIHdpdGggeW91ciBuZXcgaW5mbzwvbGk+CgkJPGxpPlRo aXMgaXMgdGhlIG9ubHkgcGxhY2UgeW91IGNhbiB1cGxvYWQgcmF3IDxzcGFuIGNsYXNzPSJj YXBzIj5QSFA8L3NwYW4+IHdpdGggdGhlIDxjb2RlPiZsdDs/cGhwID8mZ3Q7PC9jb2RlPiBt YXJrZXJzLiBFdmVyeXdoZXJlIGVsc2UgeW91IHNob3VsZCB1c2UgYSBmdWxsIHRlbXBsYXRl PC9saT4KCTwvdWw+CgoJPHA+RXZlcnkgcGx1Z2luIHNob3VsZCBiZSBjcmVhdGVkIHdpdGgg YSB0aHJlZS1sZXR0ZXIgcHJlZml4LCBhbiB1bmRlcnNjb3JlLCB0aGVuIHRoZSBuYW1lIG9m IHRoZSBwbHVnaW4uIFlvdSBhcmUgZnJlZSB0byBjaG9vc2UgeW91ciBvd24gdGhyZWUtbGV0 dGVyIHByZWZpeCAodXN1YWxseSB5b3VyIGluaXRpYWxzKSBzdWJqZWN0IHRvIDxhIGhyZWY9 Imh0dHA6Ly93d3cudGV4dHBhdHRlcm4ubmV0L3dpa2kvaW5kZXgucGhwP3RpdGxlPVJlc2Vy dmVkX1BsdWdpbl9QcmVmaXhlcyI+YXZvaWRpbmcgb25lcyBhbHJlYWR5IHRha2VuIGJ5IG90 aGVyIHBsdWdpbiBhdXRob3JzPC9hPiBzbyBwZW9wbGUgY2FuIGdldCB0byBrbm93IHlvdXIg d29yay4gUGx1cywgaXQgZ3JvdXBzIHlvdXIgcGx1Z2lucyB0b2dldGhlciBpbiB0aGUgcGx1 Z2luIGFyY2hpdmUuPC9wPgoKCTxwPkFsbCBmdW5jdGlvbnMsIHZhcmlhYmxlcyAoaW5jbHVk aW5nIDxzcGFuIGNsYXNzPSJjYXBzIj5ET008L3NwYW4+IG5vZGVzKSwgPHNwYW4gY2xhc3M9 ImNhcHMiPkNTUzwvc3Bhbj4gY2xhc3NlcywgYW5kIGFueXRoaW5nIGVsc2UgeW91IGluamVj dCBpbnRvIHRoZSBnbG9iYWwgc2NvcGUgc2hvdWxkIGJlIHByZWZpeGVkIGJ5IDxzdHJvbmc+ YXQgbGVhc3Q8L3N0cm9uZz4geW91ciB0aHJlZSBsZXR0ZXIgY29kZTsgcHJlZmVyYWJseSB0 aGUgd2hvbGUgcGx1Z2luIG5hbWUgKG9yIGFicmlkZ2VkIHZlcnNpb24gdGhlcmVvZikgdG8g YXZvaWQgbmFtZXNwYWNlIGNsYXNoZXMgd2l0aCB5b3VyIG93biBhbmQgb3RoZXIgcGx1Z2lu cy48L3A+CgoJPGgzIGlkPSJlZGl0cGFnZSI+RWRpdCBwYWdlPC9oMz4KCgk8cD5UaGUgRWRp dCBwYWdlIGlzIHdoZXJlIHlvdSBjcmFmdCB5b3VyIG1hc3RlcnBpZWNlLiBJdCBpcyBkaXZp ZGVkIGludG8gdmFyaW91cyBzZWN0aW9ucyBhbmQgYm94ZXMsIGFzIGRldGFpbGVkIGhlcmU6 PC9wPgoKCTx1bD4KCQk8bGk+PHN0cm9uZz5QbHVnaW48L3N0cm9uZz4gOiB0aGUgbmFtZSBv ZiB5b3VyIHBsdWdpbiwgd2hpY2ggeW91IGNhbiBjaGFuZ2UgYXQgYW55IHRpbWUuIE5vdGUg dGhhdCBpZiB5b3UgYXJlIGVkaXRpbmcgYSBmaWxlIGZyb20gdGhlIHBsdWdpbiBjYWNoZSBk aXJlY3RvcnkgYW5kIHRoZSA8Y29kZT4kcGx1Z2luWyYjMzk7bmFtZSYjMzk7XTwvY29kZT4g cm93IGlzIGNvbW1lbnRlZCBvdXQgaW4gdGhlIGZpbGUsIHlvdSB3aWxsIG5vdCBiZSBhYmxl IHRvIGNoYW5nZSB0aGUgcGx1Z2luIG5hbWU7IGl0IHdpbGwgYWx3YXlzIGJlIHRoZSBuYW1l IG9mIHRoZSBmaWxlLjxiciAvPgpUbyB0aGUgcmlnaHQgb2YgdGhpcyBib3ggd2lsbCBiZSBv bmUgb2YgdHdvIGl0ZW1zOgoJPHVsPgoJCTxsaT48c3Ryb25nPkVuYWJsZTwvc3Ryb25nPiA6 IGlmIHRoZSBwbHVnaW4gaXMgYSByZWd1bGFyIChpbnN0YWxsZWQpIHBsdWdpbiwgdGhpcyBj aGVja2JveCBhbGxvd3MgeW91IHRvIHN3aXRjaCB0aGUgcGx1Z2luIG9uIGFuZCBvZmY8L2xp PgoJCTxsaT48c3Ryb25nPihmaWxlIG5hbWUpPC9zdHJvbmc+IDogaWYgeW91IGFyZSBlZGl0 aW5nIGEgcGx1Z2luIGluIHRoZSBjYWNoZSBkaXJlY3RvcnksIHRoZSBjdXJyZW50IGZpbGVu YW1lIHlvdSBhcmUgd3JpdGluZyB0byB3aWxsIGJlIGRpc3BsYXllZCBpbnN0ZWFkPC9saT4K CTwvdWw+PC9saT4KCQk8bGk+PHN0cm9uZz5Tb3VyY2UgY29kZTwvc3Ryb25nPiA6IHlvdXIg cGx1Z2luIGNvZGUgZ29lcyBoZXJlLiBUaGUgYm94IGlzIHJlc2l6YWJsZSBieSBncmFiYmlu ZyB0aGUgPGNvZGU+LS0tICsgLS0tPC9jb2RlPiBiZWxvdyB0aGUgYm94IGFuZCBkcmFnZ2lu Zy4gVGhlIGJveCBzaXplIHdpbGwgYmUgcmVtZW1iZXJlZCB2aWEgYSBjb29raWUgZm9yIDMw IGRheXMgZnJvbSB5b3VyIGxhc3QgYWRqdXN0bWVudC48YnIgLz4KUGx1Z2lucyBhcmUgbGlt aXRlZCB0byAxNk1iIG9mIGNvZGUgc28gdGhlcmUgaXMgYWxzbyBhIGNoYXJhY3RlciBjb3Vu dGRvd24ganVzdCBiZWxvdyB0aGUgZWRpdCBib3guIElmIHlvdSBzdGFydCBhcHByb2FjaGlu ZyB0aGUgbGltaXQoISksIGl0IG1pZ2h0IGJlIHdvcnRoIGNvbnNpZGVyaW5nIHNwbGl0dGlu ZyB5b3VyIHBsdWdpbiBpbnRvIGEgZmV3IHBhcnRzIG9yIHdvcmtpbmcgZm9yIE1pY3JvJG9m dCwgd2hlcmUgY29kZSBibG9hdCBpcyBhY2NlcHRhYmxlPC9saT4KCQk8bGk+PHN0cm9uZz5Q bHVnaW4gdHlwZTwvc3Ryb25nPiA6IGNob29zZSBvbmUgb2YgdGhlIHR5cGVzIHRoYXQgYmVz dCBmaXRzIHRoZSBpbnRlbmRlZCB1c2Ugb2YgeW91ciBwbHVnaW4uIElmIHlvdSBjaG9vc2Ug JiM4MjE2O0NsaWVudCYjODIxNzsgYW5kIHRyeSB0byBhY2Nlc3MgdGhlIGFkbWluIHNpZGUg aW4geW91ciBjb2RlLCBhIHdhcm5pbmcgd2lsbCBiZSBpc3N1ZWQgd2hlbiB0aGUgcGx1Z2lu IGlzIHNhdmVkIHNvIHlvdSBjYW4gY2hvb3NlIGEgbW9yZSBhcHByb3ByaWF0ZSB0eXBlPC9s aT4KCQk8bGk+PHN0cm9uZz5GbGFnczwvc3Ryb25nPiA6IGNob29zZSB3aGljaCBwbHVnaW4g ZmxhZ3MgYXJlIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcGx1Z2luOgoJPHVsPgoJCTxs aT48c3Ryb25nPkhhcyBwcmVmczwvc3Ryb25nPiA6IGNoZWNrIHRoaXMgdG8gaW5kaWNhdGUg eW91ciBwbHVnaW4gcmVzcG9uZHMgdG8gdGhlIDxlbT5wbHVnaW5fcHJlZnMueW91cl9wbHVn aW5fbmFtZTwvZW0+IGV2ZW50PC9saT4KCQk8bGk+PHN0cm9uZz5ldmVudCBub3RpZnk8L3N0 cm9uZz4gOiBjaGVjayB0aGlzIHRvIGluZGljYXRlIHlvdXIgcGx1Z2luIHJlc3BvbmRzIHRv IHRoZSA8ZW0+cGx1Z2luX2xpZmVjeWNsZS55b3VyX3BsdWdpbl9uYW1lPC9lbT4gZXZlbnQv c3RlcHM8L2xpPgoJPC91bD48L2xpPgoJPC91bD4KPHN0cm9uZz5Mb2FkIG9yZGVyPC9zdHJv bmc+IDogY2hvb3NlIHRoZSByZWNvbW1lbmRlZCBvcmRlciBpbiB3aGljaCB5b3UgdGhpbmsg eW91ciBwbHVnaW4gc2hvdWxkIGJlIGxvYWRlZCBieSB1c2Vycy4gTW9zdCBvZiB0aGUgdGlt ZSwgdGhlIGRlZmF1bHQgb2YgJiM4MjE2OzUmIzgyMTc7IGlzIGZpbmUgYnV0IGZvciBzcGVj aWFsIGNhc2VzIHdoZXJlIHlvdXIgcGx1Z2luIGhhcyB0byBzZXQgdXAgYW4gZW52aXJvbm1l bnQgb3IgaGFzIHRvIHdhaXQgZm9yIG90aGVyIHBsdWdpbnMgdG8gbG9hZCBmaXJzdCwgeW91 IG1pZ2h0IHJlcXVpcmUgb25lIG9mIHRoZSBudW1iZXJzIGVpdGhlciBzaWRlLiBCZSBhd2Fy ZSB0aGF0IHRoaXMgaXMgYSA8ZW0+cmVjb21tZW5kYXRpb248L2VtPiBhbmQgaXMgb3ZlcnJp ZGFibGUgYnkgdGhlIHNpdGUgYWRtaW4uIElmIHRoZSBwbHVnaW4gaXMgYWxyZWFkeSBkZXBs b3llZCBvbiBhIHNpdGUsIHRoZSBsb2FkIG9yZGVyIGFscmVhZHkgc2V0IHdpbGwgYmUgdXNl ZCByZWdhcmRsZXNzIG9mIHRoZSBzZXR0aW5nIG9mIHRoaXMgdmFsdWUuIE9ubHkgbmV3IGlu c3RhbGxhdGlvbnMgd2lsbCBiZSBzZXQgdG8gdGhpcyB2YWx1ZSBieSBkZWZhdWx0CgoJPHVs PgoJCTxsaT48c3Ryb25nPlZlcnNpb248L3N0cm9uZz4gOiB0aGUgY3VycmVudCB2ZXJzaW9u IG9mIHlvdXIgcGx1Z2luLiBUbyB0aGUgcmlnaHQgb2YgdGhpcyBib3ggd2lsbCBiZSBvbmUg b2YgdHdvIGl0ZW1zOgoJPHVsPgoJCTxsaT48c3Ryb25nPlJlc3RvcmUgcG9pbnQ8L3N0cm9u Zz4gOiBzZWxlY3RpbmcgdGhpcyBjaGVja2JveCB3aWxsICh1cG9uIHNhdmUpIHN0b3JlIHRo ZSBjdXJyZW50IGNvZGUgYXMgYSBiYXNlbGluZSB0byB3aGljaCB5b3UgbWF5ICYjODIyMDty b2xsIGJhY2smIzgyMjE7IHRvIGF0IGEgbGF0ZXIgZGF0ZS4gU2VlIDxhIGhyZWY9IiNyZXN0 b3JlIj5yZXN0b3JlIHBvaW50czwvYT4gZm9yIG1vcmU8L2xpPgoJCTxsaT48c3Ryb25nPlJl bmFtZSBmaWxlPC9zdHJvbmc+IDogYnkgZGVmYXVsdCwgd2hlbiB5b3Ugc2F2ZSBhIGZpbGUg dGhhdCBpcyBiZWluZyBlZGl0ZWQgaW4gdGhlIHBsdWdpbiBjYWNoZSBkaXJlY3RvcnksIGl0 IGlzIG92ZXJ3cml0dGVuIHdpdGggeW91ciBjaGFuZ2VzLiBPbmNlIGEgcGx1Z2luIGlzIHJl bGVhc2VkIHlvdSB3b3VsZCBub3JtYWxseSBkb3dubG9hZCBhIGNvcHkgdmlhIDxzcGFuIGNs YXNzPSJjYXBzIj5GVFA8L3NwYW4+IGZyb20gdGhlIHBsdWdpbl9jYWNoZV9kaXIgZm9yIHNh ZmVrZWVwaW5nLiBJZiB5b3UgdGhlbiBzdWJzZXF1ZW50bHkgbW9kaWZ5IHRoZSBwbHVnaW4g YW5kIGluY3JlYXNlIHRoZSB2ZXJzaW9uIG51bWJlciwgeW91IG1heSB3aXNoIHRvIGFsdGVy IHRoZSBmaWxlbmFtZSBhcyB3ZWxsLiBDaGVja2luZyB0aGlzIGJveCB3aWxsICh1cG9uIHNh dmUpIHJlbmFtZSB0aGUgZmlsZSBpbiB0aGUgcGx1Z2luIGNhY2hlIGRpcmVjdG9yeSB0byBy ZWZsZWN0IHRoZSBjdXJyZW50IHZlcnNpb24gbnVtYmVyLiBTZWUgdGhlIDxhIGhyZWY9IiNz ZXR1cHBhZ2UiPnNldHVwIHBhZ2U8L2E+IGZvciBkZXRhaWxzIG9uIGN1c3RvbWlzaW5nIHRo ZSBmaWxlbmFtZSBmb3JtYXQ8L2xpPgoJPC91bD48L2xpPgoJCTxsaT48c3Ryb25nPkF1dGhv cjwvc3Ryb25nPiA6IHlvdSE8L2xpPgoJCTxsaT48c3Ryb25nPldlYnNpdGU8L3N0cm9uZz4g OiB5b3VyIGhvbWUgcGFnZSBvciBwbHVnaW4gcGFnZS4gV2lsbCBiZSBoeXBlcmxpbmtlZCB0 byB5b3VyIEF1dGhvciBuYW1lIGluIHRoZSBsaXN0IHBhZ2U8L2xpPgoJCTxsaT48c3Ryb25n PkRlc2NyaXB0aW9uPC9zdHJvbmc+IDogdmVyeSBicmllZiBvbmUtbGluZXIgZGVzY3JpYmlu ZyB5b3VyIHBsdWdpbiYjODIxNztzIGNvcmUgZnVuY3Rpb24gLyByZWFzb24gZm9yIGV4aXN0 ZW5jZTwvbGk+CgkJPGxpPjxzdHJvbmc+UGx1Z2luIEhlbHA8L3N0cm9uZz4gOiBkb2N1bWVu dGF0aW9uIGZvciBkZXRhaWxpbmcgdGhlIHBsdWdpbiB1c2FnZS4gQ2FuIChwcm9iYWJseSBz aG91bGQhKSBiZSB3cml0dGVuIHVzaW5nIDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5j b20vdGV4dGlsZS1zYW5kYm94Ij5UZXh0aWxlPC9hPi4gVGhlcmUgd2VyZSBzb21lIDxhIGhy ZWY9Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD0yNTMy NyI+bG9vc2UgZG9jdW1lbnRhdGlvbiBndWlkZWxpbmVzPC9hPiBwcm9wb3NlZCB0aGF0IHNl cnZlIGFzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm90ZSB0aGF0IHRoZSBjaGFyYWN0ZXIg Y291bnRkb3duIGhlcmUgaXMgb25seSBhcHByb3hpbWF0ZSBiZWNhdXNlIHdoZW4geW91ciBw bHVnaW4gaXMgc2F2ZWQgYW5kIHRoZSBoZWxwIGlzIGNvbnZlcnRlZCB0byA8c3BhbiBjbGFz cz0iY2FwcyI+SFRNTDwvc3Bhbj4sIGl0IHVzdWFsbHkgdGFrZXMgdXAgbW9yZSBzcGFjZSB0 aGFuIFRleHRpbGU7IHBsZWFzZSBjaGVjayB0aGF0IHlvdXIgaGVscCBmaWxlIHJlbmRlcnMg Y29ycmVjdGx5IHdoZW4geW91ciBwbHVnaW4gaXMgZXhwb3J0ZWQ8L2xpPgoJCTxsaT48c3Ry b25nPlN0eWxlPC9zdHJvbmc+IDogQW55IDxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+ IHN0eWxlIHJ1bGVzIHlvdSB3aXNoIHRvIGFwcGx5IHRvIHlvdXIgZG9jdW1lbnRhdGlvbiB0 byBtYWtlIGl0IG1vcmUgcHJldHR5LiBJdCYjODIxNztzIGJlc3QgdG8gdGFyZ2V0IHlvdXIg ZG9jdW1lbnRhdGlvbiBzcGVjaWZpY2FsbHkgYnkgc3Vycm91bmRpbmcgdGhlIGVudGlyZSBQ bHVnaW4gSGVscCBzZWN0aW9uIHdpdGggc29tZXRoaW5nIGxpa2U6IDxjb2RlPiZsdDtkaXYg aWQ9JnF1b3Q7YWJjX2hlbHAmcXVvdDsmZ3Q7aDEuIERvY3MgZ28gaGVyZS4uLiZsdDsvZGl2 Jmd0OzwvY29kZT4uPGJyIC8+Ck5vdGUgdGhhdCBib3RoIHRoZSBQbHVnaW4gSGVscCBhbmQg U3R5bGUgYXJlIGdvdmVybmVkIGJ5IGEgc2l6ZSBsaW1pdC4gU2luY2UgdGhleSBhcmUgYm90 aCBzdG9yZWQgaW4gdGhlIHNhbWUgNjRrQiBmaWVsZCwgdGhlIHNpemUgaXMgc2hhcmVkIGJl dHdlZW4gdGhlbS4gU3R5bGVzIGFyZSA8ZW0+bm90PC9lbT4gcGFzc2VkIHRocm91Z2ggdGhl IFRleHRpbGUgcHJvY2Vzc29yIGFuZCB5b3UgZG9uJiM4MjE3O3QgbmVlZCB0byBhZGQgdGhl IDxjb2RlPiZsdDtzdHlsZSZndDs8L2NvZGU+IHRhZ3M7IHRoZSBDb21wb3NlciB3aWxsIGRv IHRoYXQgZm9yIHlvdSAoYnV0IHNlZSA8YSBocmVmPSIjbm90ZXMiPk5vdGVzPC9hPik8L2xp PgoJCTxsaT48c3Ryb25nPlNhdmU8L3N0cm9uZz4gOiBjb21taXRzIHRoZSBjaGFuZ2VzPC9s aT4KCQk8bGk+PHN0cm9uZz5bIFZpZXcgSGVscCBdPC9zdHJvbmc+IDogc2hvd3MgdGhlIGRv Y3VtZW50YXRpb24gYXMgdXNlcnMgd2lsbCBzZWUgaXQgKGkuZS4gVGV4dGlsZSBwcm9jZXNz ZWQgaW50byA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4pLiBBbnkgaGVscCB0ZXh0 IG92ZXIgNjRrQiBpbiBsZW5ndGggaXMgdHJ1bmNhdGVkIHNvIHlvdSBjYW4gdmVyaWZ5IHRo YXQgYWxsIHlvdXIgZG9jdW1lbnRhdGlvbiBmaXRzPC9saT4KCTwvdWw+CgoJPHA+T25jZSB5 b3UgaGF2ZSBzYXZlZCB5b3VyIHBsdWdpbiwgdGhlcmUgaXMgYSBzZWN0aW9uIHJpZ2h0IGF0 IHRoZSBib3R0b20gdGhhdCBhbGxvd3MgeW91IHRvIGV4cG9ydCB5b3VyIHBsdWdpbiBpbiBh IHZhcmlldHkgb2YgZm9ybWF0czo8L3A+CgoJPHVsPgoJCTxsaT48c3Ryb25nPlBsdWdpbiBj b2RlIGZvciBkaXN0cmlidXRpb248L3N0cm9uZz4gOiBpcyBhIGRpcmVjdCBjb3B5ICYjODIx NjtuJiM4MjE3OyBwYXN0ZSBhcmVhIHRoYXQgY29udGFpbnMgeW91ciBlbnRpcmUgcGx1Z2lu ICsgZG9jcy4gWW91IGNhbiB0YWtlIHRoaXMgZW50aXJlIGFyZWEgYW5kIHBhc3RlIGl0IGlu dG8gdGhlICYjODIxNjtJbnN0YWxsIHBsdWdpbiYjODIxNzsgYm94IG9uIHRoZSBBZG1pbiAt Jmd0OyBQbHVnaW5zIHBhZ2U8L2xpPgoJCTxsaT48c3Ryb25nPkV4cG9ydCBhcyBhYmNfbXlw bHVnaW4udHh0PC9zdHJvbmc+IDogY29udmVydHMgdGhlIHBsdWdpbiBoZWxwIHRvIDxzcGFu IGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiBhbmQgc2F2ZXMgdGhlIHBsdWdpbiB0byB5b3Vy IGNvbXB1dGVyIGFzIGEgcmVkaXN0cmlidXRhYmxlIHRleHQgZmlsZSBmb3Igb3RoZXIgVGV4 dHBhdHRlcm4gdXNlcnMgdG8gaW5zdGFsbDwvbGk+CgkJPGxpPjxzdHJvbmc+RXhwb3J0IGFz IGFiY19teXBsdWdpbi50eHQgKGNvbXByZXNzZWQpPC9zdHJvbmc+IDogY29udmVydHMgdGhl IHBsdWdpbiBoZWxwIHRvIDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiBhbmQgc2F2 ZXMgdGhlIHBsdWdpbiBhcyBhIHJlZGlzdHJpYnV0YWJsZSwgZ3ppcHBlZCB0ZXh0IGZpbGUg Zm9yIG90aGVyIFRleHRwYXR0ZXJuIHVzZXJzIHRvIGluc3RhbGwuIFVzZWZ1bCBmb3IgbGFy Z2UgcGx1Z2lucyBvciB0byBvZmZlciBhbiBhbHRlcm5hdGl2ZSBmb3IgcGVvcGxlIHdobyBo YXZlIHN0cmluZ2VudCBzaXplIGxpbWl0cyBpbXBvc2VkIGJ5IHRoZWlyIGhvc3Q8L2xpPgoJ CTxsaT48c3Ryb25nPkV4cG9ydCBhcyBhYmNfbXlwbHVnaW4ucGhwPC9zdHJvbmc+IDogc2F2 ZXMgdGhlIHBsdWdpbiBpbiBhIFRleHRwYXR0ZXJuIHN0YW5kYXJkIHRlbXBsYXRlIGZvcm1h dC4gVXNlZnVsIGZvciBrZWVwaW5nIHRoZSBwbHVnaW4gZm9yIHlvdXJzZWxmICYjODIxMjsg Y29tcGxldGUgd2l0aCBUZXh0aWxlIG1hcmt1cCAmIzgyMTI7IHNvIGl0IGNhbiBiZSBsYXRl ciBlZGl0ZWQgYW5kIHJlLWlzc3VlZCAvIHVwZGF0ZWQgb3Igc2hhcmVkIHdpdGggb3RoZXIg ZGV2ZWxvcGVycyB3aG8gaGF2ZSB0aGUgUGx1Z2luIENvbXBvc2VyIG9yIHplbV90cGwucGhw IGNvbXBpbGVyPC9saT4KCTwvdWw+CgoJPHA+Tm90ZSB0aGF0IHdoZW4gZXhwb3J0aW5nIGFz IGEgc3RhbmRhcmQgcGx1Z2luLCB0aGUgVGV4dGlsZSBwcm9jZXNzb3IgYXR0ZW1wdHMgdG8g ZGVjaWRlIGlmIHlvdSBoYXZlIHVzZWQgVGV4dGlsZSBvciBub3Q7IGl0IHNpbXBseSBsb29r cyBmb3IgYSB0ZXh0aWxlZCBoZWFkZXIgKDxjb2RlPmgxLjwvY29kZT4gdGhyb3VnaCA8Y29k ZT5oNi48L2NvZGU+KS4gUnVubmluZyBwdXJlIDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9z cGFuPiB0aHJvdWdoIFRleHRpbGUgbWF5IG9jY2FzaW9uYWxseSBjYXVzZSBlbmNvZGluZyBp c3N1ZXMgZGVwZW5kaW5nIG9uIHRoZSBvcmlnaW5hbCBjaGFyYWN0ZXIgc2V0IHVzZWQgc28g aXQgaXMgYWx3YXlzIGJlc3QgdG8gdHJ5IGFuZCBzdGljayB0byBUZXh0aWxlIGFzIHRoZSBk b2N1bWVudGF0aW9uIHN5c3RlbS48L3A+CgoJPGgzIGlkPSJyZXN0b3JlIj5SZXN0b3JlIHBv aW50czwvaDM+CgoJPHA+V2hlbiBhIHBsdWdpbiBpcyBpbnN0YWxsZWQsIGEgY29weSBpcyBr ZXB0IGluIHRoZSBkYXRhYmFzZS4gSWYgdGhlIHBsdWdpbiBjb2RlIChub3QgaGVscCB0ZXh0 KSBpcyBzdWJzZXF1ZW50bHkgZWRpdGVkLCB0aGUgcGx1Z2luIGlzIGNvbnNpZGVyZWQgJiM4 MjIwO21vZGlmaWVkJiM4MjIxOzsgaW5kaWNhdGVkIGluIHRoZSBQbHVnaW4gQ29tcG9zZXIg bGlzdCBwYWdlIGFuZCBBZG1pbiAtJmd0OyBQbHVnaW5zIHBhZ2UuIFNvbWV0aW1lcyB5b3Ug bWF5IHdpc2ggdG8gcmV2ZXJ0IGFueSBjaGFuZ2VzIGJhY2sgdG8gdGhlIGFzLWluc3RhbGxl ZCBzdGF0ZSBhbmQgdGhlIENvbXBvc2VyIGFsbG93cyB0aGlzLjwvcD4KCgk8cD5BbnkgdGlt ZSBhIHBsdWdpbiBpcyBtYXJrZWQgYXMgJiM4MjE2O21vZGlmaWVkJiM4MjE3OywgdGhlIHZl cnNpb24gbnVtYmVyIGJlY29tZXMgY2xpY2thYmxlIGluIHRoZSA8YSBocmVmPSIjbGlzdHBh Z2UiPmxpc3Q8L2E+IHBhZ2UuIENsaWNraW5nIGl0IChhbmQgY29uZmlybWluZyB5b3UgYXJl IHN1cmUpIHdpbGwgd2lwZSBvdXQgYW55IGNoYW5nZXMgeW91IG1hZGUgYW5kIHJldHVybiB0 aGUgcGx1Z2luIHRvIGl0cyBpbnN0YWxsZWQgc3RhdGUuPC9wPgoKCTxwPkR1cmluZyB0aGUg ZWRpdGluZyBwcm9jZXNzIG9mIHlvdXIgb3duIHBsdWdpbnMsIGl0IG1heSBiZSB0aGF0IGF0 IGNlcnRhaW4gdGltZXMgeW91IHdpc2ggdG8gcHV0IGEgc3Rha2UgaW4gdGhlIGdyb3VuZCBh bmQgc2F5ICYjODIyMDt0aGlzIGlzIG15IGN1cnJlbnQgYmFzZWxpbmUgdGhhdCBJIG1pZ2h0 IHdhbnQgdG8gcmV0dXJuIHRvIGxhdGVyJiM4MjIxOy4gUGVyaGFwcyB5b3UgYXJlIGFib3V0 IHRvIG1ha2Ugc29tZSBtb25zdGVyIGVkaXRzIG9yIHRyeSBzb21ldGhpbmcgZXhwZXJpbWVu dGFsIGFuZCB3YW50IGFuIGVhc3kgZmFsbGJhY2sgbWVjaGFuaXNtLiBUaGF0JiM4MjE3O3Mg d2hlcmUgdGhlICYjODIyMDtSZXN0b3JlIHBvaW50JiM4MjIxOyBjaGVja2JveCBjb21lcyBp bi48L3A+CgoJPHA+QnkgY2hlY2tpbmcgdGhlIGJveCB3aGVuIHlvdSBzYXZlIHlvdXIgcGx1 Z2luLCB0aGUgY3VycmVudCBjb2RlIHdpbGwgYmVjb21lIHlvdXIgbmV3IHJvbGxiYWNrIHBv aW50IGFuZCB0aGUgcGx1Z2luIHdpbGwgbm8gbG9uZ2VyIGJlIG1hcmtlZCAmIzgyMjA7bW9k aWZpZWQmIzgyMjE7LiBBbnkgY2hhbmdlcyBtYWRlIGJlZm9yZWhhbmQgd2lsbCBub3QgYmUg cmVjb3ZlcmFibGUgc28geW91IHdpbGwgaGF2ZSB0byByZWx5IG9uIHlvdXIgb3duIGJhY2t1 cHMgaWYgeW91IHdpc2ggdG8gZ28gYmFjayBmdXJ0aGVyLiBBbnkgZWRpdHMgeW91IG1ha2Ug YWZ0ZXIgY3JlYXRpbmcgYSByZXN0b3JlIHBvaW50IGNhbiBiZSB1bmRvbmUgYnkgdmlzaXRp bmcgdGhlIGxpc3QgcGFnZSBhbmQgY2xpY2tpbmcgdGhlIHZlcnNpb24gbnVtYmVyIG5leHQg dG8geW91ciBwbHVnaW4uIEN1cnJlbnRseSwgb25seSBvbmUgcm9sbGJhY2sgcG9pbnQgY2Fu IGJlIHN0b3JlZCBpbiB0aGUgZGF0YWJhc2UuPC9wPgoKCTxoMyBpZD0ic2V0dXBwYWdlIj5T ZXR1cCBwYWdlPC9oMz4KCgk8cD5DbGlja2luZyBTZXR1cCBmcm9tIHRoZSBtYWluIDxhIGhy ZWY9IiNsaXN0cGFnZSI+bGlzdDwvYT4gcGFnZSBhbGxvd3MgYWNjZXNzIHRvIHRoZSBwbHVn aW4gcHJlZmVyZW5jZXMuPC9wPgoKCTxwPllvdSBjYW4gSW5zdGFsbCB0aGVtICYjODIxMjsg d2hpY2ggcmV0YWlucyBhbnkgcHJldmlvdXMgc2V0dGluZ3MgYW5kIGFkZHMgbmV3IG9uZXMg d2hlbiB1cGRhdGluZyB0aGUgcGx1Z2luICYjODIxMjsgb3IgRGVsZXRlIHRoZW0uIFRoZSBw bHVnaW4gY2hlY2tzIGlmIGFsbCByZXF1aXJlZCBwcmVmZXJlbmNlcyBhcmUgYXZhaWxhYmxl IGFuZCBvZmZlcnMgeW91IHRoZSBjaG9pY2Ugb2YgZGVsZXRpbmcvcmVpbnN0YWxsaW5nIGlu IGNhc2UgdGhlIHByZWZzIGJlY29tZSBjb3JydXB0ZWQgb3IgbmVlZCB1cGRhdGluZy48L3A+ CgoJPHA+T25jZSB0aGUgcHJlZnMgYXJlIGluc3RhbGxlZCB5b3Ugd2lsbCBzZWUgdGhlIGF2 YWlsYWJsZSBvcHRpb25zOjwvcD4KCgk8dWw+CgkJPGxpPjxzdHJvbmc+UGx1Z2luIGVkaXRv cjwvc3Ryb25nPiA6IHlvdSBtYXkgY2hvb3NlIHRvIGVkaXQgdGhlIGNvZGUgdXNpbmcgYSAz cmQgcGFydHkgc3ludGF4IGhpZ2hsaWdodGVyLiBDdXJyZW50IHN1cHBvcnQgaXMgZm9yIEVk aXQgQXJlYSBhbmQgKHNvcnQgb2YpIENvZGVQcmVzcyAoc2VlIHRoZSA8YSBocmVmPSIjbm90 ZXMiPm5vdGVzPC9hPikuIENob29zZSB0aGUgc3lzdGVtIGhlcmUsIHdoZXJlYnkgdGhlIGJv eCBiZW5lYXRoIGJlY29tZXMgYXZhaWxhYmxlIHNvIHlvdSBjYW4gc3BlY2lmeSB0aGUgPHNw YW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gcGF0aCBvZiB0aGUgRWRpdEFyZWEgaW5zdGFs bGF0aW9uIG9uIHlvdXIgc2VydmVyOyB0aGlzIGlzIG5vcm1hbGx5IGV2ZXJ5dGhpbmcgdXAg dG8gYW5kIGluY2x1ZGluZyAvZWRpdF9hcmVhLiBObyB0cmFpbGluZyBzbGFzaCBpcyByZXF1 aXJlZDwvbGk+CgkJPGxpPjxzdHJvbmc+UGx1Z2luIGVkaXRvciB3aWR0aDwvc3Ryb25nPiA6 IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB3aWRlIHRvIG1ha2UgdGhlIGJveGVzIG9uIHRo ZSA8YSBocmVmPSIjZWRpdHBhZ2UiPkVkaXQ8L2E+IHBhZ2UgdG8gc3VpdCB5b3VyIHNjcmVl biByZXNvbHV0aW9uPC9saT4KCQk8bGk+PHN0cm9uZz5IZWxwIGVkaXRvcjwvc3Ryb25nPiA6 IHlvdSBtYXkgY2hvb3NlIHRvIGVkaXQgdGhlIGhlbHAgbWFudWFsbHkgdmlhIFRleHRpbGUg b3IgdXNlIFRpbnlNQ0UgZm9yIGEgbW9yZSA8c3BhbiBjbGFzcz0iY2FwcyI+V1lTSVdZRzwv c3Bhbj4gZXhwZXJpZW5jZS4gVGhpcyBpcyBleHBlcmltZW50YWwgYW5kIHByb2JhYmx5IHdv biYjODIxNzt0IHdvcmsgcmlnaHQgbm93PC9saT4KCQk8bGk+PHN0cm9uZz48c3BhbiBjbGFz cz0iY2FwcyI+UEhQPC9zcGFuPiBleHBvcnQgb3JkZXI8L3N0cm9uZz4gOiB3aGVuIHNhdmlu ZyB5b3VyIHBsdWdpbiBpbiB0aGUgc3RhbmRhcmQgdGVtcGxhdGUgZm9ybWF0LCB0aGlzIGdv dmVybnMgd2hldGhlciB5b3UgcHJlZmVyIHRoZSBjb2RlIGJsb2NrIHRvIGJlIGF0IHRoZSB0 b3Agb2YgdGhlIGZpbGUgYW5kIHRoZSBoZWxwIGJsb2NrIGJlbG93LCBvciB2aWNlIHZlcnNh PC9saT4KCTwvdWw+CgoJPHA+VGhlIG5leHQgdGhyZWUgdGV4dGJveGVzIGFyZSBhbGwgdmVy eSBzaW1pbGFyOyB0aGV5IGRlZmluZSB0aGUgZm9ybWF0IG9mIHRoZSBmaWxlbmFtZXMgd2hl biB5b3UgZXhwb3J0IHBsdWdpbnMuIFRoZSBmaXJzdCBpcyBmb3Igd2hlbiB5b3UgZXhwb3J0 IHN0YW5kYXJkIDxzcGFuIGNsYXNzPSJjYXBzIj5CQVNFPC9zcGFuPi02NCBwbHVnaW5zOyB0 aGUgc2Vjb25kIGlzIGZvciBjb21wcmVzc2VkIHBsdWdpbnM7IHRoZSB0aGlyZCBpcyBmb3Ig ZXhwb3J0aW5nIGEgc3RhbmRhcmQgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gdGVt cGxhdGUuPC9wPgoKCTxwPldoZXJldmVyIHlvdSB0eXBlIDxjb2RlPntuYW1lfTwvY29kZT4s IHRoZSBwbHVnaW4gbmFtZSB3aWxsIGFwcGVhci4gU2ltaWxhcmx5LCA8Y29kZT57dmVyc2lv bn08L2NvZGU+IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB0aGUgY3VycmVudCBwbHVnaW4gdmVy c2lvbiBudW1iZXIuIFlvdSBjYW4gdHlwZSBhbnl0aGluZyB5b3UgbGlrZSBpbiB0aGVzZSBi b3hlcywgYnV0IGl0JiM4MjE3O3MgbW9yZSB1c2VmdWwgdG8gaW5jbHVkZSBib3RoIG9mIHRo ZSByZXBsYWNlbWVudCBzdHJpbmdzIHNvbWV3aGVyZSBpbiBlYWNoIGJveCBzbyB5b3UgZG9u JiM4MjE3O3QgZ2V0IG5hbWUgLyB2ZXJzaW9uIGNsYXNoZXMuPC9wPgoKCTxwPkZvciBleGFt cGxlLCBpZiB5b3UgZG9uJiM4MjE3O3QgbGlrZSB0aGUgZmFjdCB0aGF0IHppcHBlZCBwbHVn aW5zIGFyZSBleHBvcnRlZCBhcyA8Y29kZT5wZnhfbXlfcGx1Z2luX3YwLjFfemlwLnR4dDwv Y29kZT4sIHlvdSBjYW4gY2hhbmdlIGl0LiBQZXJoYXBzIHlvdSBtYXkgcHJlZmVyIDxjb2Rl PnBmeF9teV9wbHVnaW4tY29tcHJlc3NlZC0wLjEudHh0PC9jb2RlPi4gSW4gd2hpY2ggY2Fz ZSwgc2V0IHRoZSAybmQgYm94IHRvIDxjb2RlPntuYW1lfS1jb21wcmVzc2VkLXt2ZXJzaW9u fS50eHQ8L2NvZGU+LjwvcD4KCgk8cD5UaGUgZXh0ZW5zaW9uIHNob3VsZCB1c3VhbGx5IGJl IHNwZWNpZmllZCBzbyB5b3VyIHN5c3RlbS9icm93c2VyIGtub3dzIHRoZSBmaWxlJiM4MjE3 O3MgdHlwZSB3aGVuIGl0IGlzIGV4cG9ydGVkLCBidXQgaXQmIzgyMTc7cyBub3QgbWFuZGF0 b3J5IGFzIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+TUlNRTwvc3Bhbj4gdHlwZSBpcyBnaXZl biBzbyAoZ29vZCkgYnJvd3NlcnMgc2hvdWxkIHJlYWQgdGhhdC48L3A+CgoJPHA+RmluYWxs eSwgaWYgeW91IHdpc2ggdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgaGVscCBjYWNoZWluZywgcHV0 IHRoZSBwYXRoIHRvIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiB0aGUgPHN0cm9uZz5DYWNo ZSBkaXI8L3N0cm9uZz4gYm94LiBFbXB0eSB0aGUgYm94IGlmIHlvdSBwcmVmZXIgc2F2ZXMg YW5kIGV4cG9ydHMgdG8gYmUgc2xvd2VyISBEZWZhdWx0cyB0byA8c3BhbiBjbGFzcz0iY2Fw cyI+VFhQPC9zcGFuPiYjODIxNztzIHRlbXBvcmFyeSBkaXJlY3RvcnkuPC9wPgoKCTxoMyBp ZD0ibm90ZXMiPk5vdGVzIC8ga25vd24gaXNzdWVzPC9oMz4KCgk8b2w+CgkJPGxpPk1vcmUg ZWRpdG9ycyBjYW4gYmUgaW50ZWdyYXRlZCBpbnRvIHRoZSBDb21wb3NlciBmYWlybHkgZWFz aWx5LiBJZiB5b3UgZmluZCBhIGdvb2Qgb25lLCBnZXQgaW4gY29udGFjdC4gQmUgd2FybmVk IHRoYXQgdGhlIGVkaXRvcnMgZG8gdGVuZCB0byBzbG93IHRoZSBwbHVnaW4gZG93biwgZXNw ZWNpYWxseSBhcyBjb2RlIHNpemUgaW5jcmVhc2VzLjwvbGk+CgkJPGxpPlRlbnRhdGl2ZSBz dXBwb3J0IGZvciBDb2RlUHJlc3MgaXMgYXZhaWxhYmxlIGJ1dCBpdCBpbmV4cGxpY2FibHkg YmxhbmtzIG91dCB0aGUgcGx1Z2luIGNvZGUgd2hlbiBzYXZlZCwgc28gc3VwcG9ydCBpcyBk aXNhYmxlZCBmb3Igbm93LiBJZiBhbnlvbmUgY2FuIHNoZWQgYW55IGxpZ2h0IG9uIHdoeSBp dCBkb2VzIHRoaXMsIHBsZWFzZSBzcGVhayB1cCEgTG9vayBpbiB0aGUgaWVkX3BsdWdpbl9z ZXR1cCgpIGZ1bmN0aW9uIHRvd2FyZHMgdGhlIGJvdHRvbSBvZiB0aGUgZmlsZSwgdW5jb21t ZW50IHRoZSBjb21tZW50ZWQgb3V0IGxpbmUgYW5kIGNvbW1lbnQgb3V0IHRoZSBvbmUgYmVu ZWF0aCBpdCB0byBlbmFibGUgc3VwcG9ydCwgdGhlbiB2aXNpdCB0aGUgU2V0dXAgcGFnZSBh bmQgc2VsZWN0IENvZGVQcmVzcyBmcm9tIHRoZSBsaXN0LiBEb24mIzgyMTc7dCBleHBlcmlt ZW50IHdpdGggdGhpcyBzZXR0aW5nIG9uIGFuIGltcG9ydGFudCBwbHVnaW4gOi0pPC9saT4K CQk8bGk+V2hlbiBhIHBsdWdpbiBpcyBzYXZlZCB0byB0aGUgcGx1Z2luX2NhY2hlX2Rpciwg aWYgeW91IGhhdmUgbm90IHB1dCA8Y29kZT4mbHQ7c3R5bGUmZ3Q7PC9jb2RlPiBtYXJrZXJz IGluIHlvdXIgPHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4gYmxvY2sgdGhleSB3aWxs IGJlIGFkZGVkIGZvciB5b3UgaW4gdGhlIHRleHQgYXJlYSBidXQgPGVtPm5vdDwvZW0+IHNh dmVkIGluIHRoZSBhY3R1YWwgdGVtcGxhdGUgdW50aWwgeW91IHNhdmUgaXQgYWdhaW4gKGV4 cG9ydGluZyBhcyBhIDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+IGZpbGUgaXMgdW5h ZmZlY3RlZCkuIFNvIGlmIHlvdSBhcmUgaW4gdGhlIGhhYml0IG9mIG1hbnVhbGx5IGRvd25s b2FkaW5nIHRoZSBmaWxlIGZyb20geW91ciA8c3BhbiBjbGFzcz0iY2FwcyI+RlRQPC9zcGFu PiBjbGllbnQgaW1tZWRpYXRlbHkgYWZ0ZXIgYSBzYXZlLCBqdXN0IHNhdmUgdGhlIHBsdWdp biBhZ2FpbiB0byBiZSBzdXJlPC9saT4KCTwvb2w+CgoJPGgzIGlkPSJjaGFuZ2Vsb2ciPkNo YW5nZWxvZzwvaDM+CgoJPHVsPgoJCTxsaT4yNSBGZWIgMDYgfCAwLjEgfCBJbml0aWFsIHJl bGVhc2U8L2xpPgoJCTxsaT4yNSBGZWIgMDYgfCAwLjIgfCBBZGRlZCAmIzgyMTY7c2F2ZSBh cyYjODIxNzsgb3B0aW9uPC9saT4KCQk8bGk+MTcgTWFyIDA2IHwgMC4zIHwgQWRkZWQgJiM4 MjE2O3NhdmUgYXMgcGhwJiM4MjE3OzwvbGk+CgkJPGxpPjEwIEFwciAwNiB8IDAuNCB8IEFk ZGVkIHN1cHBvcnQgZm9yIHBsdWdpbl9jYWNoZV9kaXI8L2xpPgoJCTxsaT4wNCBKYW4gMDgg fCAwLjUgfCBGdWxsIHN1cHBvcnQgZm9yIHN0ZCB0ZW1wbGF0ZTsgY29tcHJlc3NlZCBwbHVn aW5zOyBMaWJyYXJ5IHBsdWdpbnM7IFRleHRpbGUgaGVscCBhbmQgc3R5bGluZzsgaW50ZWdy YXRpb24gd2l0aCBuZXQtY2FydmVyJiM4MjE3O3MgUGx1Z2luIEhlbHAgVmlld2VyPC9saT4K CQk8bGk+MDcgSmFuIDA4IHwgMC42IHwgQnVpbHQtaW4gaGVscCB2aWV3ZXIgKHRoYW5rcyBu ZXQtY2FydmVyKTsgc3VwcG9ydCBmb3IgRWRpdCBBcmVhICZhbXA7IENvZGVQcmVzcyhpc2gp ICh0aGFua3MgdmFyaWFhcyk7IEhlbHAgYmxvY2svQ29kZSBibG9jayBwb3NpdGlvbiBzd2l0 Y2hhYmxlIG9uIGV4cG9ydDsgYWRkZWQgU2V0dXAgcHJlZnMgcGFnZTsgbGluZSBicmVhay9z dHlsZSBidWdmaXhlczwvbGk+CgkJPGxpPjA4IEphbiAwOCB8IDAuNyB8IFJlLWltcG9ydGlu ZyBwbHVnaW5zIG5vdyByZXRhaW5zIHN0eWxlIGJsb2NrOyBhZGRlZCAmIzgyMTY7YWRtaW4g c2lkZSBwbHVnaW4gd2l0aCBjbGllbnQtc2lkZSB0eXBlJiM4MjE3OyB3YXJuaW5nOyBjaGFu Z2VkIGJ1dHRvbiBzdHlsaW5nIGFuZCBwb3NpdGlvbnMgKGFsbCB0aGFua3MgbmV0LWNhcnZl cik7IGdUeHQoKSBwcmVmIGxhYmVscyBhbmQgJiM4MjE2O2ludGVsbGlnZW50JiM4MjE3OyBw cmVmcyAoZ28galF1ZXJ5IGdvISk7IGNhY2hlZCBwbHVnaW5zIG5vdyBhbHNvIGhhdmUgZGly ZWN0IGV4cG9ydCBmcm9tIEVkaXQgcGFnZTsgJiM4MjE2O2RvbiYjODIxNzt0IHRleHRpbGUg PHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+JiM4MjE3OyBjaGVjazsgbWlub3IgYnVn Zml4ZXM8L2xpPgoJCTxsaT4wOSBKYW4gMDggfCAwLjcxIHwgVGV4dGFyZWEgd2lkdGggY2Fu IG5vdyBiZSBjb250cm9sbGVkIGZyb20gcHJlZnMsIGFuZCBoZWlnaHQgZnJvbSBhIGRyYWcg YmFyOyBkZWZhdWx0IHdpZHRoIGluY3JlYXNlZCB0byAxMTAgY2hhcnM7IHB1Ymxpc2ggcGx1 Z2lucyBmcm9tIHRoZSBsaXN0IHBhZ2U7IEluc3RhbGwgYnV0dG9uIHJlbW92ZWQgd2hlbiBw cmVmcyBhbGwgY29ycmVjdGx5IGluc3RhbGxlZCAoYWxsIHRoYW5rcyB2YXJpYWFzIC8gaWJs YXN0b2ZmKTwvbGk+CgkJPGxpPjEwIEphbiAwOCB8IDAuNzIgfCBGaXhlZCBidWcgaWYgcGx1 Z2luIGhhcyBubyBoZWxwOyBzdHlsZSBzZWN0aW9uIG5vIGxvbmdlciBzdG9yZWQvZXhwb3J0 ZWQgaWYgaXQmIzgyMTc7cyBub3QgaW4gdXNlICh0aGFua3MgdGhlX2dob3N0IC8gaWJsYXN0 b2ZmKTwvbGk+CgkJPGxpPjExIEphbiAwOCB8IDAuNzMgfCBBZGRlZCBzdXBwb3J0IGZvciA8 ZW0+cmVhZGluZzwvZW0+IGFuIG9wdGlvbmFsIHJldmlzaW9uIGZyb20gdGhlIHRlbXBsYXRl IHBhcnNlciBhbmQgYXBwZW5kaW5nIGl0IHRvIHRoZSB2ZXJzaW9uICh0aGFua3MgbmV0LWNh cnZlcik7IG1vcmUgZ1R4dCgpIHN0cmluZ3MgY29udmVydGVkPC9saT4KCQk8bGk+MjggTWFy IDA4IHwgMC43NCB8IEZpeGVkIGVtcHR5IHBsdWdpbiBjb2RlIGlmIFN0eWxlIGJsb2NrIGxl ZnQgYmxhbmsgOyBmaXhlZCBzdHJpcC9zbGFzaC9lbmNvZGluZyBlcnJvcnMgKHRoYW5rcyB0 aGVfZ2hvc3QvcnV1ZCkgOyBmaXhlZCBjcmxmIG5ld2xpbmVzIGluIGNvZGUgYmxvY2sgKHRo YW5rcyBoYWtqb29uL3J1dWQpPC9saT4KCQk8bGk+MjggTWF5IDA4IHwgMC43NSB8IEFkZGVk ICYjODIxNjttb2RpZmllZCYjODIxNzsgdG8gdGhlIFZlcnNpb24gY29sdW1uICh0aGFua3Mg dWxpKSA7IGFkZGVkIGFiaWxpdHkgdG8gcmVuYW1lIGZpbGVzIGluIHRoZSBwbHVnaW4gY2Fj aGUgZGlyIHdoZW4gdGhlIHZlcnNpb24gY2hhbmdlczwvbGk+CgkJPGxpPjAzIE5vdiAwOCB8 IDAuOCB8IEFkZGVkIHN1cHBvcnQgZm9yIHJlY29tbWVuZGVkIHBsdWdpbiBsb2FkIG9yZGVy IDsgYWRkZWQgQWRtaW4tb25seSBwbHVnaW4gdHlwZTsgYWRkZWQgYWJpbGl0eSB0byBvdmVy cmlkZSBmaWxlbmFtZSBmb3JtYXQgb24gZXhwb3J0IDsgYWRkZWQgcmVzdG9yZSBwb2ludC9y b2xsYmFjayAodGhhbmtzIG1hdmVyaWNrKSA7IGFkZGVkIGNoYXJhY3RlciBjb3VudCAodGhh bmtzIHBlcGViZSkgOyByYXRpb25hbGlzZWQgdGhlIGxpc3QgYW5kIGVkaXQgcGFnZXMgOyBz cGVkIHVwIGV4cG9ydC9zYXZlIHJvdXRpbmVzIDsgZml4ZWQgYSBmZXcgY29ybmVyIGNhc2Ug YnVncyAoZS5nLiBlbXB0eSBwbHVnaW4gbmFtZSwgbWlzc2luZyBxdW90ZXMgaW4gdGVtcGxh dGUgb3B0aW9ucyk8L2xpPgoJCTxsaT4wMyBKYW4gMDkgfCAwLjgxIHwgQWRkZWQgdGV4dGls ZSBjYWNoZWluZyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIHdpdGggbGFyZ2UgaGVscCBmaWxl cyA7IHByb2ZpbGVkIGNvZGUgYW5kIGltcHJvdmVkIHNwZWVkIGluIHZhcmlvdXMgZnVuY3Rp b25zPC9saT4KCQk8bGk+MjMgRmViIDA5IHwgMC44MiB8IENhbiBub3cgY3JlYXRlIG5ldyB0 ZW1wbGF0ZSBmaWxlcyBvbiB0aGUgZmx5ICh0aGFua3MgYXp3KSA7IGZpeGVkIFRleHRpbGUg bGltaXQgb24gbGFyZ2UgaGVscCBmaWxlcyA7IGZpeGVkIGRhdGFiYXNlIGNhbGxzIGZvciBN eVNRTCBzdHJpY3QgbW9kZSAodGhhbmtzIEdvY29tIC8gYXp3KTwvbGk+CgkJPGxpPjExIEFw ciAwOSB8IDAuODMgfCBGaXhlZCBoZWxwIGZpbGUgPHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwv c3Bhbj4gb3V0cHV0IHNvIGl0IHZhbGlkYXRlcyA7IHVzZSA8Y29kZT4kcHJlZnM8L2NvZGU+ IGluc3RlYWQgb2YgPGNvZGU+JEdMT0JBTFM8L2NvZGU+IGludGVybmFsbHkgOyBjaGVjayBp ZiBwbHVnaW5fY2FjaGVfZGlyIGV4aXN0cyBiZWZvcmUgdHJ5aW5nIHRvIHVzZSBpdCBvbiB0 aGUgbGlzdCBwYWdlPC9saT4KCQk8bGk+MjkgQXVnIDA5IHwgMC45IHwgUmVxdWlyZXMgPHNw YW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gNC4yLjArIDsgYWRkZWQgc3VwcG9ydCBmb3Ig cGx1Z2luIHByZWZzL2xpZmVjeWNsZSBhbmQgbGFyZ2VyIHBsdWdpbiBjb2RlIDsgZml4ZWQg PHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4gZGVsaW1pdGVyIGZvciBiYWNrd2FyZHMg Y29tcGF0aWJpbGl0eSA7IG5ldyBwbHVnaW4gdGVtcGxhdGUgZGV0YWlscyB1c2VkPC9saT4K CTwvdWw+CgoJPGgyIGlkPSJ3cml0aW5nIj5Xcml0aW5nIGEgcGx1Z2luPC9oMj4KCgk8cD5Z b3Ugc2hvdWxkIGJlIGF3YXJlIG9mIHRoZSA8YSBocmVmPSJodHRwOi8vZm9ydW0udGV4dHBh dHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/aWQ9OTg4MSI+UGx1Z2luIEF1dGhvciBSZXNvdXJj ZXM8L2E+IHRvcGljIG9uIHRoZSBUZXh0cGF0dGVybiBTdXBwb3J0IEZvcnVtLCBhbmQgeW91 IG1pZ2h0IGFsc28gd2FudCB0byBoYXZlIGEgbG9vayBhdCB0aGUgPGEgaHJlZj0iaHR0cDov L2luc3BpcmVkLmtpZXYudWEvdHhwLXBsdWdpbi1jaGVhdHNoZWV0Ij5UZXh0UGF0dGVybiBw bHVnaW4gY2hlYXQgc2hlZXQ8L2E+IGFuZCB0aGUgdHV0b3JpYWxzIGFuZCBndWlkZXMgZm9y IDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5uZXQvd2lraS9pbmRleC5waHA/dGl0bGU9 RXh0ZW5kaW5nX1RleHRwYXR0ZXJuIj5FeHRlbmRpbmcgVGV4dHBhdHRlcm48L2E+IG9uIFRl eHRCb29rLjwvcD4KCgk8cD5IYXBweSBwbHVnaW4gYXV0aG9yaW5nIDotKTwvcD4KCjwvZGl2 Pgo8IS0tICoqKiBCRUdJTiBQTFVHSU4gQ1NTICoqKiAtLT4KPHN0eWxlIHR5cGU9InRleHQv Y3NzIj4KI2llZF9oZWxwIHsgbGluZS1oZWlnaHQ6MS41IDt9CiNpZWRfaGVscCAucmVxdWly ZWQge2NvbG9yOnJlZDt9CiNpZWRfaGVscCBjb2RlIHsgZm9udDogMTA1JS8xMzAlICYjODIy MDtDb3VyaWVyIE5ldyYjODIyMTssIGNvdXJpZXIsIG1vbm9zcGFjZTsgYmFja2dyb3VuZC1j b2xvcjogI0ZGRkZDQzt9CiNpZWRfaGVscCBoMSB7IGNvbG9yOiAjMzY5OyBmb250OiAyMHB4 IEdlb3JnaWEsIHNhbnMtc2VyaWY7IG1hcmdpbjogMDsgdGV4dC1hbGlnbjogY2VudGVyOyB9 CiNpZWRfaGVscCBoMiB7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazsgcGFkZGlu ZzoxMHB4IDAgMDsgY29sb3I6ICMzNjk7IGZvbnQ6IDE3cHggR2VvcmdpYSwgc2Fucy1zZXJp ZjsgfQojaWVkX2hlbHAgaDMgeyBjb2xvcjogIzI3NTY4NTsgZm9udDogYm9sZCAxMnB4IEFy aWFsLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMXB4OyBtYXJnaW46IDE1cHggMCAw O3RleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7fQo8L3N0eWxlPgo8IS0tICoqKiBFTkQgUExV R0lOIENTUyAqKiogLS0+CiI7czozOiJtZDUiO3M6MzI6IjY5OTU4NzdhMzY0ODQ1MDdlYzRj MzBjNmVkMTBjMTY5Ijt9