# Name: ied_plugin_composer v0.83 # 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: # ..................................................................... YToxMDp7czo0OiJuYW1lIjtzOjE5OiJpZWRfcGx1Z2luX2NvbXBvc2VyIjtzOjY6ImF1dGhv ciI7czo0MzoiWXVyYSBMaW5ueWsgLyBTdGVmIERhd3NvbiAvIFN0ZXZlIERpY2tpbnNvbiI7 czoxMDoiYXV0aG9yX3VyaSI7czoyMjoiaHR0cDovL3N0ZWZkYXdzb24uY29tLyI7czo3OiJ2 ZXJzaW9uIjtzOjQ6IjAuODMiO3M6MTE6ImRlc2NyaXB0aW9uIjtzOjMyOiJXcml0ZSBhbmQg cHVibGlzaCBwbHVnaW5zIGVhc2lseSI7czo0OiJjb2RlIjtzOjUxNjAzOiJpZihAdHhwaW50 ZXJmYWNlID09ICdhZG1pbicpIHsNCglhZGRfcHJpdnMoJ2llZF9wbHVnaW5fY29tcG9zZXIn LCcxLDInKTsNCglyZWdpc3Rlcl90YWIoJ2V4dGVuc2lvbnMnLCAnaWVkX3BsdWdpbl9jb21w b3NlcicsIGllZF9wbHVnaW5fZ1R4dCgnaWVkX3BsdWdpbl9jb21wb3NlcicpKTsNCglyZWdp c3Rlcl9jYWxsYmFjaygnaWVkX3BsdWdpbl9jb21wb3NlcicsICdpZWRfcGx1Z2luX2NvbXBv c2VyJyk7DQoJZ2xvYmFsICRpZWRfcGx1Z2luX2NvbXBvc2VyLCAkaWVkX3BsdWdpbl9wcmVm cywgJGllZF9wbHVnaW5fZ2xvYmFscywgJHByZWZzOw0KCSRpZWRfcGx1Z2luX2dsb2JhbHMg PSBhcnJheSgNCgkJJ2Nzc19zdGFydCcgPT4gJzwhLS0nLA0KCQknY3NzX2VuZCcgPT4gJy0t PicsDQoJCSdkbG1fc3RhcnQnID0+ICcjJywNCgkJJ2RsbV9lbmQnID0+ICcnLA0KCQknc3Rh cnQnID0+ICcgLS0tIEJFR0lOIFBMVUdJTiBTRUNUSU9OIC0tLScsDQoJCSdlbmQnID0+ICcg LS0tIEVORCBQTFVHSU4gU0VDVElPTiAtLS0nLA0KCSk7DQoJLy8gRG91YmxlIGFycmF5OiAx c3QgaXMgYSBsaXN0IG9mIGN1cnJlbnQgcHJlZnMgYW5kIHRoZWlyIGRlZmF1bHRzLA0KCS8v IDJuZCBpcyBhIGxpc3Qgb2YgbGVnYWN5IHByZWZzIHRoYXQgbWF5IG5lZWQgcmVtb3Zpbmcg aW4gZnV0dXJlIChkZWZhdWx0cyBhbGwgc2V0IGVtcHR5KQ0KCSRpZWRfcGx1Z2luX3ByZWZz ID0gYXJyYXkoDQoJCWFycmF5KA0KCQkJJ2llZF9wbHVnaW5fZWRpdG9yJyA9PiAnbm9uZScs DQoJCQknaWVkX3BsdWdpbl9lZGl0b3JfcGF0aCcgPT4gaHUuJ2pzJy5EUywNCgkJCSdpZWRf cGx1Z2luX2VkaXRvcl93aWR0aCcgPT4gJzExMCcsDQoJCQknaWVkX3BsdWdpbl9oZWxwX2Vk aXRvcicgPT4gJ3RleHRpbGUnLA0KCQkJJ2llZF9wbHVnaW5faGVscF9lZGl0b3JfcGF0aCcg PT4gaHUuJ2pzJy5EUywNCgkJCSdpZWRfcGx1Z2luX291dHB1dF9vcmRlcicgPT4gJzAnLA0K CQkJJ2llZF9wbHVnaW5fb3V0cHV0X3NmaWxlJyA9PiAne25hbWV9X3Z7dmVyc2lvbn0udHh0 JywNCgkJCSdpZWRfcGx1Z2luX291dHB1dF9zZmlsZWMnID0+ICd7bmFtZX1fdnt2ZXJzaW9u fV96aXAudHh0JywNCgkJCSdpZWRfcGx1Z2luX291dHB1dF9zZmlsZXAnID0+ICd7bmFtZX1f dnt2ZXJzaW9ufS5waHAnLA0KCQkJJ2llZF9wbHVnaW5fb3V0cHV0X3RtcGNhY2hlJyA9PiAk cHJlZnNbJ3RlbXBkaXInXSwNCgkJKSwNCgkJYXJyYXkoDQoJCQknaWVkX3BsdWdpbl9ub3Rf dXNlZF9hbnlfbW9yZV9wbGFjZWhvbGRlcicgPT4gJycsDQoJCSkNCgkpOw0KfQ0KDQovLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tDQpmdW5jdGlvbiBpZWRfcGx1Z2luX2NvbXBvc2VyKCRldmVudCwgJHN0ZXApIHsN CglpZighJHN0ZXAgb3IgIWluX2FycmF5KCRzdGVwLCBhcnJheSgNCgkJCSdpZWRfcGx1Z2lu X2RlbGV0ZScsDQoJCQknaWVkX3BsdWdpbl9lZGl0JywNCgkJCSdpZWRfcGx1Z2luX2hlbHAn LA0KCQkJJ2llZF9wbHVnaW5fbGlzdCcsDQoJCQknaWVkX3BsdWdpbl9pbnN0YWxsJywNCgkJ CSdpZWRfcGx1Z2luX3NhdmUnLA0KCQkJJ2llZF9wbHVnaW5fcmVzdG9yZScsDQoJCQknaWVk X3N3aXRjaF9zdGF0dXMnLA0KCQkJJ2llZF9zZXRfb3JkZXInLA0KCQkJJ2llZF9wbHVnaW5f c2V0dXAnLA0KCQkJJ2llZF9wbHVnaW5fcHJlZnNfaW5zdGFsbCcsDQoJCQknaWVkX3BsdWdp bl9wcmVmc19yZW1vdmUnLA0KCQkJJ2llZF9wbHVnaW5fcHJlZnNfdXBkYXRlJywNCgkJCSdp ZWRfcGx1Z2luX2NyZWF0ZV9uZXcnLA0KCQkJJ2llZF9wbHVnaW5fc2F2ZV9hc19maWxlJywN CgkJCSdpZWRfcGx1Z2luX3NhdmVfYXNfcGhwX2ZpbGUnLA0KCQkJJ2llZF9wbHVnaW5fdXBs b2FkJywNCgkJCSdpZWRfcGx1Z2luX2hlbHBfdmlld2VyJywNCgkJKSkpIHsNCgkJaWVkX3Bs dWdpbl9saXN0KCk7DQoJfSBlbHNlICRzdGVwKCk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIFJl dXJucyBhbiBhcnJheSBvZiBmaWxlbmFtZXM7IDFzdCBpcyB0aGUgc3RhbmRhcmQgcGx1Z2lu LCAybmQgaXMgdGhlIGNvbXByZXNzZWQgcGx1Z2luLCAzcmQgaXMgdGhlIFBIUCB0ZW1wbGF0 ZQ0KZnVuY3Rpb24gaWVkX3BsdWdpbl9nZXRfbmFtZSgkbmFtZSwgJHZlcnNpb24pIHsNCgln bG9iYWwgJGllZF9wbHVnaW5fcHJlZnMsICRwcmVmczsNCg0KCSRvdXQgPSBhcnJheSgNCgkJ KChpc3NldCgkcHJlZnNbJ2llZF9wbHVnaW5fb3V0cHV0X3NmaWxlJ10pICYmICFlbXB0eSgk cHJlZnNbJ2llZF9wbHVnaW5fb3V0cHV0X3NmaWxlJ10pKSA/ICRwcmVmc1snaWVkX3BsdWdp bl9vdXRwdXRfc2ZpbGUnXSA6ICRpZWRfcGx1Z2luX3ByZWZzWzBdWydpZWRfcGx1Z2luX291 dHB1dF9zZmlsZSddKSwNCgkJKChpc3NldCgkcHJlZnNbJ2llZF9wbHVnaW5fb3V0cHV0X3Nm aWxlYyddKSAmJiAhZW1wdHkoJHByZWZzWydpZWRfcGx1Z2luX291dHB1dF9zZmlsZWMnXSkp ID8gJHByZWZzWydpZWRfcGx1Z2luX291dHB1dF9zZmlsZWMnXSA6ICRpZWRfcGx1Z2luX3By ZWZzWzBdWydpZWRfcGx1Z2luX291dHB1dF9zZmlsZWMnXSksDQoJCSgoaXNzZXQoJHByZWZz WydpZWRfcGx1Z2luX291dHB1dF9zZmlsZXAnXSkgJiYgIWVtcHR5KCRwcmVmc1snaWVkX3Bs dWdpbl9vdXRwdXRfc2ZpbGVwJ10pKSA/ICRwcmVmc1snaWVkX3BsdWdpbl9vdXRwdXRfc2Zp bGVwJ10gOiAkaWVkX3BsdWdpbl9wcmVmc1swXVsnaWVkX3BsdWdpbl9vdXRwdXRfc2ZpbGVw J10pLA0KCSk7DQoNCgkkcmVwID0gYXJyYXkoDQoJCSJ7bmFtZX0iID0+ICRuYW1lLA0KCQki e3ZlcnNpb259IiA9PiAkdmVyc2lvbiwNCgkpOw0KDQoJZm9yZWFjaCAoJG91dCBhcyAkZmlk eCA9PiAkZm5hbWUpIHsNCgkJJGZuYW1lID0gc3RydHIoJGZuYW1lLCAkcmVwKTsNCgkJJG91 dFskZmlkeF0gPSBzbWRfc2FuaXRpemVGb3JGaWxlKCRmbmFtZSk7DQoJfQ0KDQoJcmV0dXJu ICRvdXQ7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIGllZF9wbHVnaW5fbGlzdCgkbWVz c2FnZT0nJykgew0KCWdsb2JhbCAkcHJlZnM7DQoNCglwYWdldG9wKGdUeHQoJ2VkaXRfcGx1 Z2lucycpLCRtZXNzYWdlKTsNCgllY2hvIHN0YXJ0VGFibGUoJ2xpc3QnKS4NCnRyKHRkYSgN CmZvcm0oDQpmSW5wdXQoJ3RleHQnLCduYW1lJywnJywnJywnJywnJywnMzAnLCcwJykNCi4g ZklucHV0KCdzdWJtaXQnLCdzdWJtaXQnLGllZF9wbHVnaW5fZ1R4dCgnY3JlYXRlX25ldycp LCdzbWFsbGVyYm94JykNCi4gc0lucHV0KCdpZWRfcGx1Z2luX2NyZWF0ZV9uZXcnKQ0KLiBl SW5wdXQoJ2llZF9wbHVnaW5fY29tcG9zZXInKQ0KKQ0KLCcgY29sc3Bhbj0iNiIgc3R5bGU9 ImJvcmRlcjowO2hlaWdodDo1MHB4IicpDQoudGRhKGZvcm0oZklucHV0KCdzdWJtaXQnLCAn c3VibWl0JywgaWVkX3BsdWdpbl9nVHh0KCdzZXR1cCcpLCAncHVibGlzaCcpLnNJbnB1dCgn aWVkX3BsdWdpbl9zZXR1cCcpLmVJbnB1dCgnaWVkX3BsdWdpbl9jb21wb3NlcicpKSwnIGNv bHNwYW49IjYiIHN0eWxlPSJib3JkZXI6MDtoZWlnaHQ6NTBweCInKSkuDQphc3NIZWFkKCdw bHVnaW4nLCdhdXRob3InLGdUeHQoJ3ZlcnNpb24nKS4nICgnLmdUeHQoJ3BsdWdpbl9tb2Rp ZmllZCcpLicpJywnZGVzY3JpcHRpb24nLCdwdWJsaXNoJywnb3JkZXInLCdhY3RpdmUnLCcn KTsNCg0KCSRycyA9IHNhZmVfcm93c19zdGFydCgiKiIsInR4cF9wbHVnaW4iLCAiMT0xIG9y ZGVyIGJ5IG5hbWUiKTsNCg0KCXdoaWxlICgkYSA9IG5leHRSb3coJHJzKSkgew0KCQlleHRy YWN0KCRhKTsNCgkJJGVuYW1lID0gJzxhIGhyZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBv c2VyJiMzODtzdGVwPWllZF9wbHVnaW5fZWRpdCYjMzg7bmFtZT0nLiRuYW1lLiciPicuJG5h bWUuJzwvYT4nOw0KCQkkaGxpbmsgPSAoJGhlbHApID8gJzxhIGhyZWY9Ij9ldmVudD1pZWRf cGx1Z2luX2NvbXBvc2VyJiMzODtzdGVwPWllZF9wbHVnaW5faGVscF92aWV3ZXImIzM4O25h bWU9Jy4kbmFtZS4nIj4nLmdUeHQoJ2hlbHAnKS4nPC9hPicgOiAnTm9uZSc7DQoJCSRvTGlu ayA9IGllZF9wbHVnaW5fb3JkZXJfZm9ybSgkbmFtZSwgJGxvYWRfb3JkZXIpOw0KCQkkZm5h bWVzID0gaWVkX3BsdWdpbl9nZXRfbmFtZSgkbmFtZSwgJHZlcnNpb24pOw0KCQkkcHVidGFn ID0gdGFnKGdUeHQoJ3B1Ymxpc2gnKSwnYScsJyBocmVmPSI/ZXZlbnQ9aWVkX3BsdWdpbl9j b21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2luX3NhdmVfYXNfZmlsZSYjMzg7bmFtZT0nLiRu YW1lLiciIHRpdGxlPSInIC4gaWVkX3BsdWdpbl9nVHh0KCdleHBvcnQnKSAuJyAnLiRmbmFt ZXNbMF0uICciJyk7DQoJCSRwdWJ6dGFnID0gdGFnKGllZF9wbHVnaW5fZ1R4dCgnY29tcHJl c3MnKSwnYScsJyBocmVmPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1p ZWRfcGx1Z2luX3NhdmVfYXNfZmlsZSYjMzg7bmFtZT0nLiRuYW1lLicmIzM4O3ppcD10cnVl IiB0aXRsZT0iJyAuIGllZF9wbHVnaW5fZ1R4dCgnZXhwb3J0JykgLicgJy4kZm5hbWVzWzFd LiAnIicpOw0KCQkkbW9kaWZpZWQgPSAoc3RydG9sb3dlcigkY29kZSkgIT0gKHN0cnRvbG93 ZXIoJGNvZGVfcmVzdG9yZSkpKTsNCg0KCQllY2hvIHRyKHRkKCRlbmFtZSkNCi50ZCgoICgk YXV0aG9yX3VyaSkgPyAnPGEgaHJlZj0iJy4kYXV0aG9yX3VyaS4nIj4nLiRhdXRob3IuJzwv YT4nIDogJGF1dGhvciksMTYwKQ0KLnRkKCgoJG1vZGlmaWVkKSA/ICc8YSBocmVmPSJpbmRl eC5waHA/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2luX3Jl c3RvcmUmIzM4O25hbWU9Jy4kbmFtZS4nIiB0aXRsZT0iJy5pZWRfcGx1Z2luX2dUeHQoJ3Jl c3RvcmVfaGVscCcpLiciIG9uY2xpY2s9InJldHVybiB2ZXJpZnkoXCcnLmllZF9wbHVnaW5f Z1R4dCgncmVzdG9yZV92ZXJpZnknLCBhcnJheSgne25hbWV9JyA9PiAkbmFtZSkpLidcJyk7 Ij4nLiR2ZXJzaW9uLic8L2E+JyA6ICR2ZXJzaW9uKSAuICgoJG1vZGlmaWVkKSA/ICcmbmJz cDsoJy5nVHh0KCd5ZXMnKS4nKScgOiAnJyksMTApDQoudGQoJGRlc2NyaXB0aW9uLDI2MCkN Ci50ZCgkcHVidGFnIC4nIHwgJy4gJHB1Ynp0YWcgLicgfCAnLiAkaGxpbmspDQoudGQoJG9M aW5rLCA0MCkNCi50ZChpZWRfc3RhdHVzX2xpbmsoJHN0YXR1cywkbmFtZSx5ZXNfbm8oJHN0 YXR1cykpLDMwKQ0KDQoudGQoZExpbmsoJ2llZF9wbHVnaW5fY29tcG9zZXInLCdpZWRfcGx1 Z2luX2RlbGV0ZScsJ25hbWUnLCRuYW1lKSwzMCkNCik7DQoJCXVuc2V0KCRuYW1lLCRwYWdl LCRkZWxldGVsaW5rKTsNCgl9DQoNCglpZiAoIWVtcHR5KCRwcmVmc1sncGx1Z2luX2NhY2hl X2RpciddKSAmJiBmaWxlX2V4aXN0cygkcHJlZnNbJ3BsdWdpbl9jYWNoZV9kaXInXSkpIHsN CgkJJGZpbGVuYW1lcyA9IGFycmF5KCk7DQoJCSRkaXIgPSBkaXIoJHByZWZzWydwbHVnaW5f Y2FjaGVfZGlyJ10pOw0KCQl3aGlsZSAoJGZpbGUgPSAkZGlyLT5yZWFkKCkpIHsNCgkJCWlm KCRmaWxlICE9ICIuIiAmJiAkZmlsZSAhPSAiLi4iKSB7DQoJCQkJJGZpbGVhZGRyID0gJHBy ZWZzWydwbHVnaW5fY2FjaGVfZGlyJ10uRFMuJGZpbGU7DQoJCQkJaWYgKCFpc19kaXIoJGZp bGVhZGRyKSkgew0KCQkJCQkkZmlsZW5hbWVzW109JGZpbGU7DQoJCQkJfQ0KCQkJfQ0KCQl9 DQoJCSRkaXItPmNsb3NlKCk7DQoJCSgkZmlsZW5hbWVzKT9uYXRjYXNlc29ydCgkZmlsZW5h bWVzKTonJzsNCgkJZWNobyB0cigNCgkJdGRhKA0KCQl0YWcoaWVkX3BsdWdpbl9nVHh0KCdy dW5fZnJvbScpLicgJy50YWcoJ3BsdWdpbl9jYWNoZV9kaXInLCdhY3JvbnltJywnIHRpdGxl PSInLiRwcmVmc1sncGx1Z2luX2NhY2hlX2RpciddLiciIHN0eWxlPSJib3JkZXItYm90dG9t OjFweCBkYXNoZWQgYmxhY2siJykuJzonLCdoMScpDQoJCSwnIGNvbHNwYW49IjgiIHN0eWxl PSJib3JkZXI6MDtoZWlnaHQ6NTBweDt0ZXh0LWFsaWduOmxlZnQiJykNCg0KCQkpOw0KDQoJ CWVjaG8gYXNzSGVhZCgncGx1Z2luJywnYXV0aG9yJywndmVyc2lvbicsJ2Rlc2NyaXB0aW9u JywncHVibGlzaCcsJycsJycpOw0KCQlmb3JlYWNoKCRmaWxlbmFtZXMgYXMgJGZpbGVuYW1l KSB7DQoJCQkkZmlsZWV4dD0gYXJyYXlfcG9wKGV4cGxvZGUgKCcuJywkZmlsZW5hbWUpKTsN CgkJCWlmICgkZmlsZWV4dD09J3BocCcpIHsNCgkJCQkkYmFzZW5hbWU9YmFzZW5hbWUoJGZp bGVuYW1lKTsNCgkJCQkkcGx1Z2luID0gaWVkX3BsdWdpbl9yZWFkX2ZpbGUoJHByZWZzWydw bHVnaW5fY2FjaGVfZGlyJ10uRFMuJGZpbGVuYW1lKTsNCgkJCQkkaGxpbmsgPSAoJHBsdWdp blsnaGVscCddKSA/ICc8YSBocmVmPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7 c3RlcD1pZWRfcGx1Z2luX2hlbHBfdmlld2VyJiMzODtmaWxlbmFtZT0nLiRmaWxlbmFtZS4n Ij4nLmdUeHQoJ2hlbHAnKS4nPC9hPicgOiAnTm9uZSc7DQoJCQkJJGVmaWxlID0gJzxhIGhy ZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtzdGVwPWllZF9wbHVnaW5fZWRp dCYjMzg7ZmlsZW5hbWU9Jy4kZmlsZW5hbWUuJyI+Jy4kcGx1Z2luWyduYW1lJ10uJzwvYT4n Ow0KCQkJCSRmbmFtZXMgPSBpZWRfcGx1Z2luX2dldF9uYW1lKCRwbHVnaW5bJ25hbWUnXSwg JHBsdWdpblsndmVyc2lvbiddKTsNCg0KCQkJCWVjaG8gdHIoDQoJCQkJdGQoDQoJCQkJdGFn KCRmaWxlbmFtZSwnZGl2JywnIHN0eWxlPSJjb2xvcjpncmF5O2JvcmRlcjowO3BhZGRpbmc6 MXB4IDJweCAycHggMXB4OyInKQ0KCQkJCS4oaXNzZXQoJHBsdWdpblsnbmFtZSddKT8kZWZp bGUuJzxiciAvPic6JycpLicgJw0KCQkJCSkNCgkJCQkudGQoDQoJCQkJKCBpc3NldCgkcGx1 Z2luWydhdXRob3JfdXJpJ10pPyc8YSBocmVmPSInLiRwbHVnaW5bJ2F1dGhvcl91cmknXS4n Ij4nOicnICkgLg0KCQkJCSggaXNzZXQoJHBsdWdpblsnYXV0aG9yJ10pPyRwbHVnaW5bJ2F1 dGhvciddOicmbmJzcDsnICkuDQoJCQkJKCBpc3NldCgkcGx1Z2luWydhdXRob3JfdXJpJ10p Pyc8L2E+JzonJyApLCAxNjANCgkJCQkpDQoJCQkJLnRkKChpc3NldCgkcGx1Z2luWyd2ZXJz aW9uJ10pPyRwbHVnaW5bJ3ZlcnNpb24nXTonJm5ic3A7JyksMTApDQoJCQkJLnRkKChpc3Nl dCgkcGx1Z2luWydkZXNjcmlwdGlvbiddKT8kcGx1Z2luWydkZXNjcmlwdGlvbiddOicmbmJz cDsnKSwyNjApDQoJCQkJLnRkKChpc3NldCgkcGx1Z2luWyduYW1lJ10pPw0KCQkJCXRhZyhn VHh0KCdwdWJsaXNoJyksJ2EnLCcgaHJlZj0iP2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXIm IzM4O3N0ZXA9aWVkX3BsdWdpbl9zYXZlX2FzX2ZpbGUmIzM4O2ZpbGVuYW1lPScuJGZpbGVu YW1lLiciIHRpdGxlPSInIC4gaWVkX3BsdWdpbl9nVHh0KCdleHBvcnQnKSAuJyAnLiRmbmFt ZXNbMF0uICciJykNCgkJCQkJCS4nIHwgJy50YWcoaWVkX3BsdWdpbl9nVHh0KCdjb21wcmVz cycpLCdhJywnIGhyZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtzdGVwPWll ZF9wbHVnaW5fc2F2ZV9hc19maWxlJiMzODtmaWxlbmFtZT0nLiRmaWxlbmFtZS4nJiMzODt6 aXA9dHJ1ZSIgdGl0bGU9IicgLiBpZWRfcGx1Z2luX2dUeHQoJ2V4cG9ydCcpIC4nICcuJGZu YW1lc1sxXS4gJyInKToNCgkJCQl0YWcoJyZuYnNwOycsJ3NwYW4nLCcgc3R5bGU9ImNvbG9y OmdyYXkiJykNCgkJCQkpLicgfCAnLiRobGluaykNCgkJCQkudGQoJycpDQoJCQkJLnRkKCcn KQ0KCQkJCSk7DQoJCQl9DQoJCX0NCgl9DQoNCgllY2hvIHRyKA0KdGRhKA0KJzxmb3JtIGVu Y3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIGFjdGlvbj0iaW5kZXgucGhwIiBtZXRob2Q9 InBvc3QiPicuDQpzdGFydFRhYmxlKCdlZGl0JywnbGVmdCcpLg0KdHIodGRhKCBoSW5wdXQo J01BWF9GSUxFX1NJWkUnLDEwMDAwMDApLg0KZ3JhZihpZWRfcGx1Z2luX2dUeHQoJ3VwbG9h ZF9waHAnKS4nOiAnLg0KZklucHV0KCdmaWxlJywndGhlZmlsZScsJycsJ2VkaXQnKS4NCmZJ bnB1dCgnc3VibWl0Jywnc3VibWl0JyxnVHh0KCd1cGxvYWQnKSwnc21hbGxlcmJveCcpKS4N CmVJbnB1dCgnaWVkX3BsdWdpbl9jb21wb3NlcicpLg0Kc0lucHV0KCdpZWRfcGx1Z2luX3Vw bG9hZCcpICwgJyBzdHlsZT0iYm9yZGVyOjBweCBzb2xpZCBncmF5IicgKS4NCnRkYSggdGFn KGllZF9wbHVnaW5fZ1R4dCgnbmFtZScpLCAnYWNyb255bScsJyB0aXRsZT0iJy5pZWRfcGx1 Z2luX2dUeHQoJ25hbWVfdG9vbHRpcCcpLiciIHN0eWxlPSJib3JkZXItYm90dG9tOjFweCBk YXNoZWQgYmxhY2siJykuJzogJy4gZklucHV0KCd0ZXh0JywnbmFtZScsJ3h4eF94eHh4eHgn LCcnLCcnLCcnLCczMCcsJzAnKSAsICcgc3R5bGU9ImJvcmRlcjowcHggc29saWQgZ3JheTt2 ZXJ0aWNhbC1hbGlnbjptaWRkbGU7IicgKSkuDQplbmRUYWJsZSgpLg0KJzwvZm9ybT4nDQos JyBjb2xzcGFuPSI4IiBzdHlsZT0iYm9yZGVyOjA7aGVpZ2h0OjUwcHg7dGV4dC1hbGlnbjps ZWZ0IicpDQopOw0KCWVjaG8gZW5kVGFibGUoKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rp b24gaWVkX3N0YXR1c19saW5rKCRzdGF0dXMsJG5hbWUsJGxpbmt0ZXh0KSB7DQoJJG91dCA9 ICc8YSBocmVmPSJpbmRleC5waHA/JzsNCgkkb3V0IC49ICdldmVudD1pZWRfcGx1Z2luX2Nv bXBvc2VyJiMzODtzdGVwPWllZF9zd2l0Y2hfc3RhdHVzJiMzODtzdGF0dXM9Jy4NCgkkc3Rh dHVzLicmIzM4O25hbWU9Jy51cmxlbmNvZGUoJG5hbWUpLiciJzsNCgkkb3V0IC49ICc+Jy4k bGlua3RleHQuJzwvYT4nOw0KCXJldHVybiAkb3V0Ow0KfQ0KDQovLyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5j dGlvbiBpZWRfc3dpdGNoX3N0YXR1cygpIHsNCglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJh eSgnbmFtZScsJ3N0YXR1cycpKSkpOw0KCSRjaGFuZ2UgPSAoJHN0YXR1cykgPyAwIDogMTsN CglzYWZlX3VwZGF0ZSgidHhwX3BsdWdpbiIsICJzdGF0dXM9JGNoYW5nZSIsICJuYW1lPSck bmFtZSciKTsNCglpZWRfcGx1Z2luX2xpc3QoZ1R4dCgncGx1Z2luX3NhdmVkJywgYXJyYXko J3tuYW1lfScgPT4gJG5hbWUpKSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIGllZF9z ZXRfb3JkZXIoKSB7DQoJZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXkoJ25hbWUnLCAnbG9h ZF9vcmRlcicpKSkpOw0KCSRvcmRlciA9IG1pbihtYXgoIGludHZhbCgkbG9hZF9vcmRlciks IDEpLCA5KTsNCglzYWZlX3VwZGF0ZSgndHhwX3BsdWdpbicsICJsb2FkX29yZGVyID0gJGxv YWRfb3JkZXIiLCAibmFtZSA9ICckbmFtZSciKTsNCglpZWRfcGx1Z2luX2xpc3QoZ1R4dCgn cGx1Z2luX3NhdmVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJG5hbWUpKSk7DQp9DQoNCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCmZ1bmN0aW9uIGllZF9wbHVnaW5fb3JkZXJfZm9ybSgkbmFtZSwgJGxvYWRfb3Jk ZXIpIHsNCglmb3IgKCRpID0gMTsgJGkgPD0gOTsgJGkrKykgJG9yZGVyc1skaV0gPSAkaTsN CglyZXR1cm4gZm9ybSgNCgkJZUlucHV0KCdpZWRfcGx1Z2luX2NvbXBvc2VyJykubi4NCgkJ c0lucHV0KCdpZWRfc2V0X29yZGVyJykubi4NCgkJaElucHV0KCduYW1lJywgJG5hbWUpLm4u DQoJCXNlbGVjdElucHV0KCdsb2FkX29yZGVyJywgJG9yZGVycywgJGxvYWRfb3JkZXIsIDAs IDEpDQoJCSwnZGlzcGxheTppbmxpbmUnDQoJKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rp b24gaWVkX3BsdWdpbl9kZWxldGUoKSB7DQoJJG5hbWUgPSBkb1NsYXNoKHBzKCduYW1lJykp Ow0KCXNhZmVfZGVsZXRlKCJ0eHBfcGx1Z2luIiwibmFtZT0nJG5hbWUnIik7DQoJaWVkX3Bs dWdpbl9saXN0KGdUeHQoJ3BsdWdpbl9kZWxldGVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJG5h bWUpKSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIGllZF9wbHVnaW5fcmVzdG9yZSgp IHsNCgkkbmFtZSA9IGRvU2xhc2goZ3BzKCduYW1lJykpOw0KCXNhZmVfdXBkYXRlKCJ0eHBf cGx1Z2luIiwiY29kZSA9IGNvZGVfcmVzdG9yZSIsIm5hbWU9JyRuYW1lJyIpOw0KCWllZF9w bHVnaW5fbGlzdChpZWRfcGx1Z2luX2dUeHQoJ3Jlc3RvcmVkJywgYXJyYXkoJ3tuYW1lfScg PT4gJG5hbWUpKSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIGllZF9wbHVnaW5fZWRp dCgkbWVzc2FnZT0nJywkbmV3ZmlsZT0nJykgew0KCSRzaXRlX2RpciA9IGh1Ow0KCSRuZXdu YW1lID0gdHJpbShncHMoJ25ld25hbWUnKSk7DQoJJG5hbWUgPSBlbXB0eSgkbmV3bmFtZSkg PyBncHMoJ25hbWUnKSA6ICRuZXduYW1lOw0KCXBhZ2V0b3AoZ1R4dCgnZWRpdF9wbHVnaW5z JyksJG1lc3NhZ2UpOw0KCWVjaG8gaWVkX2luc2VydF9lZGl0b3JzKCk7DQoJJHRoZUZpbGUg PSAoJG5ld2ZpbGUpID8gJG5ld2ZpbGUgOiAoKGdwcygnZmlsZW5hbWUnKSkgPyBncHMoJ2Zp bGVuYW1lJykgOiAkbmFtZSk7DQoJZWNobyBpZWRfcGx1Z2luX2VkaXRfZm9ybSgkdGhlRmls ZSwgZ3BzKCdmaWxlbmFtZScpPyAxOiAwKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24g aWVkX3BsdWdpbl9lZGl0X2Zvcm0oJG5hbWU9JycsJGVkaXRmaWxlPTApIHsNCglnbG9iYWwg JHByZWZzLCAkaWVkX3BsdWdpbl9wcmVmcywgJGllZF9wbHVnaW5fZ2xvYmFsczsNCglpZiAo ISRlZGl0ZmlsZSkgew0KCQkkcnMgPSBzYWZlX3JvdygiYXV0aG9yLCBhdXRob3JfdXJpLCB2 ZXJzaW9uLCBkZXNjcmlwdGlvbiwgY29kZSwgaGVscCwgc3RhdHVzLCB0eXBlLCBsb2FkX29y ZGVyIiwgInR4cF9wbHVnaW4iLCAibmFtZT0nJG5hbWUnIik7DQoJCWV4dHJhY3QoJHJzKTsN CgkJbGlzdCgkY3NzLCRoZWxwKSA9ICgkaGVscCkgPyBpZWRfcGx1Z2luX2V4dHJhY3RfaHVu aygkaGVscCwgIkNTUyIsICI8IS0tfC0tPiIsIHRydWUpIDogYXJyYXkoJycsJGhlbHApOw0K CX0gZWxzZSB7DQoJCSRwbHVnaW4gPSBpZWRfcGx1Z2luX3JlYWRfZmlsZSgkcHJlZnNbJ3Bs dWdpbl9jYWNoZV9kaXInXS5EUy4kbmFtZSk7DQoJCSRmaWxlbmFtZSA9ICRuYW1lOw0KCQkk ZmlsZWV4dCA9IGFycmF5X3BvcCgkbmFtZT1leHBsb2RlICgnLicsJG5hbWUpKTsNCgkJJG5h bWUgPSBpbXBsb2RlKCRuYW1lKTsNCgkJZXh0cmFjdCgkcGx1Z2luKTsNCgkJJHN0YXR1cyA9 ICgkZmlsZWV4dD09J3BocCcpPyAxOiAwOw0KCX0NCgkkZWR3aWR0aCA9IChpc3NldCgkcHJl ZnNbJ2llZF9wbHVnaW5fZWRpdG9yX3dpZHRoJ10pICYmIGlzX251bWVyaWMoJHByZWZzWydp ZWRfcGx1Z2luX2VkaXRvcl93aWR0aCddKSkgPyAkcHJlZnNbJ2llZF9wbHVnaW5fZWRpdG9y X3dpZHRoJ10gOiAkaWVkX3BsdWdpbl9wcmVmc1swXVsnaWVkX3BsdWdpbl9lZGl0b3Jfd2lk dGgnXTsNCglsaXN0ICgkc3RhcnRfY3NzLCAkZW5kX2NzcykgPSBpZWRfcGx1Z2luX21ha2Vf bWFya2VycygiQ1NTIiwgJGllZF9wbHVnaW5fZ2xvYmFsc1snY3NzX3N0YXJ0J10sICRpZWRf cGx1Z2luX2dsb2JhbHNbJ2Nzc19lbmQnXSk7DQoJJHBsdWdpblsnbmFtZSddID0gJG5hbWU7 DQoJJHBsdWdpblsnYXV0aG9yJ10gPSAkYXV0aG9yOw0KCSRwbHVnaW5bJ2F1dGhvcl91cmkn XSA9ICRhdXRob3JfdXJpOw0KCSRwbHVnaW5bJ3ZlcnNpb24nXSA9ICR2ZXJzaW9uOw0KCSRw bHVnaW5bJ2Rlc2NyaXB0aW9uJ10gPSAkZGVzY3JpcHRpb247DQoJJHBsdWdpblsnaGVscCdd ID0gaWVkX3BsdWdpbl90ZXh0aWxlKCRuYW1lLCAkaGVscCwgJGNzcywgJHN0YXJ0X2Nzcywg JGVuZF9jc3MpOw0KCSRwbHVnaW5bJ2NvZGUnXSA9ICRjb2RlOw0KCSRwbHVnaW5bJ3R5cGUn XSA9ICR0eXBlOw0KCSRwbHVnaW5bJ29yZGVyJ10gPSAkbG9hZF9vcmRlcjsNCgkkcGx1Z2lu WydtZDUnXSA9IG1kNSggJHBsdWdpblsnY29kZSddICk7DQoJZm9yICgkaSA9IDE7ICRpIDw9 IDk7ICRpKyspICRvcmRlcnNbJGldID0gJGk7DQoNCgkkZGlzdHJpYnV0aW9uPSc8dGV4dGFy ZWEgbmFtZT0iZGlzdHJpYnV0aW9uIiByb3dzPSIxIiBjb2xzPSInLiRlZHdpZHRoLiciIG9u Y2xpY2s9InRoaXMuc2VsZWN0KCkiPicuYmFzZTY0X2VuY29kZShzZXJpYWxpemUoJHBsdWdp bikpLic8L3RleHRhcmVhPic7DQoNCgkkZm5hbWVzID0gaWVkX3BsdWdpbl9nZXRfbmFtZSgk cGx1Z2luWyduYW1lJ10sICRwbHVnaW5bJ3ZlcnNpb24nXSk7DQoJJG5hbWVkTGluayA9IChp c3NldCgkZmlsZW5hbWUpKSA/ICdmaWxlbmFtZT0nLiRmaWxlbmFtZSA6ICduYW1lPScuJG5h bWU7DQoNCgkkc2xpbmsgPSAnPGEgaHJlZj0iP2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXIm IzM4O3N0ZXA9aWVkX3BsdWdpbl9zYXZlX2FzX2ZpbGUmIzM4OycuJG5hbWVkTGluay4nIj4n IC5pZWRfcGx1Z2luX2dUeHQoJ2V4cG9ydCcpIC4nICcuICRmbmFtZXNbMF0uICc8L2E+JzsN Cgkkc3ppcGxpbmsgPSAnPGEgaHJlZj0iP2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXImIzM4 O3N0ZXA9aWVkX3BsdWdpbl9zYXZlX2FzX2ZpbGUmIzM4OycuJG5hbWVkTGluay4nJiMzODt6 aXA9dHJ1ZSI+JyAuIGllZF9wbHVnaW5fZ1R4dCgnZXhwb3J0JykgLicgJy4gJGZuYW1lc1sx XS4gJyAoY29tcHJlc3NlZCk8L2E+JzsNCgkkc3BocGxpbmsgPSAnPGEgaHJlZj0iP2V2ZW50 PWllZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9zYXZlX2FzX3BocF9m aWxlJiMzODsnLiRuYW1lZExpbmsuJyI+JyAuIGllZF9wbHVnaW5fZ1R4dCgnc2F2ZV9hcycp IC4nICcuICRmbmFtZXNbMl0uICc8L2E+JzsNCgkkdmhlbHBsaW5rZnVsbCA9ICgkaGVscCkg PyAnPGEgaHJlZj0iP2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3Bs dWdpbl9oZWxwX3ZpZXdlciYjMzg7Jy4kbmFtZWRMaW5rLiciPlsgJy5zdHJvbmcoZ1R4dCgn dmlldycpLicgJy5nVHh0KCdoZWxwJykpLicgXTwvYT4nIDogJyc7DQoNCgkkbmV3bmFtZSA9 IGZJbnB1dCgndGV4dCcsJ25ld25hbWUnLCRuYW1lLCdlZGl0JywnJywnJywkZWR3aWR0aCAt IChpbnQpKCRlZHdpZHRoKjAuMyksJzInKTsNCgkkYXV0aG9yID0gZklucHV0KCd0ZXh0Jywn YXV0aG9yJywkYXV0aG9yLCdlZGl0JywnJywnJywkZWR3aWR0aCwnMicpOw0KCSRhdXRob3Jf dXJpID0gZklucHV0KCd0ZXh0JywnYXV0aG9yX3VyaScsJGF1dGhvcl91cmksJ2VkaXQnLCcn LCcnLCRlZHdpZHRoLCcyJyk7DQoJJHZlcnNpb24gPSBmSW5wdXQoJ3RleHQnLCd2ZXJzaW9u JywkdmVyc2lvbiwnZWRpdCcsJycsJycsJGVkd2lkdGggLSAoaW50KSgkZWR3aWR0aCowLjMp LCcyJykgLiAnJiMxNjA7JiMxNjA7Jy4gKCgkZWRpdGZpbGUpID8gY2hlY2tib3goJ3JlbmFt ZV9maWxlJywgJzEnLCAwLCAnJywncmVuYW1lX2ZpbGUnKSAuICcgPGxhYmVsIGZvcj0icmVu YW1lX2ZpbGUiPicuaWVkX3BsdWdpbl9nVHh0KCdyZW5hbWVfZmlsZScpLic8L2xhYmVsPicg OiBjaGVja2JveCgncmVzdG9yZV9wb2ludCcsICcxJywgMCwgJycsJ3Jlc3RvcmVfcG9pbnQn KSAuICcgPGxhYmVsIGZvcj0icmVzdG9yZV9wb2ludCI+Jy5pZWRfcGx1Z2luX2dUeHQoJ3Jl c3RvcmVfcG9pbnQnKS4nPC9sYWJlbD4nKTsNCgkkZGVzY3JpcHRpb24gPWZJbnB1dCgndGV4 dCcsJ2Rlc2NyaXB0aW9uJywkZGVzY3JpcHRpb24sJ2VkaXQnLCcnLCcnLCRlZHdpZHRoLCcy Jyk7DQoJJGNvZGUgPSAnPHRleHRhcmVhIG5hbWU9ImNvZGUiIGlkPSJwbHVnaW5fZWRpdG9y IiByb3dzPSIzMCIgY29scz0iJy4kZWR3aWR0aC4nIiBjbGFzcz0iY29kZXByZXNzIHBocCIg bWF4bGVuZ3RoPSI2NTUzNSI+Jy5odG1sc3BlY2lhbGNoYXJzKCRjb2RlKS4nPC90ZXh0YXJl YT48ZGl2IGNsYXNzPSJjaGFyc1JlbWFpbiI+PC9kaXY+JzsNCgkkaGVscCA9ICc8dGV4dGFy ZWEgbmFtZT0iaGVscCIgcm93cz0iMzAiIGNvbHM9IicuJGVkd2lkdGguJyIgY2xhc3M9Im1j ZUVkaXRvciIgbWF4bGVuZ3RoPSI2MzUzNSI+Jy5odG1sc3BlY2lhbGNoYXJzKCRoZWxwKS4n PC90ZXh0YXJlYT48ZGl2IGNsYXNzPSJjaGFyc1JlbWFpbiI+PC9kaXY+JzsNCgkkY3NzID0g Jzx0ZXh0YXJlYSBuYW1lPSJjc3MiIHJvd3M9IjE1IiBjb2xzPSInLiRlZHdpZHRoLiciIG1h eGxlbmd0aD0iMjAwMCI+Jy5odG1sc3BlY2lhbGNoYXJzKCRjc3MpLic8L3RleHRhcmVhPjxk aXYgY2xhc3M9ImNoYXJzUmVtYWluIj48L2Rpdj4nOw0KCSRwbHVnc3RhdHVzID0gKCEkZWRp dGZpbGUpID8gJyYjMTYwOyYjMTYwOycuY2hlY2tib3goJ3N0YXR1cycsMSwkc3RhdHVzLCAn Jywnc3RhdHVzJykuICcgPGxhYmVsIGZvcj0ic3RhdHVzIj4nLmllZF9wbHVnaW5fZ1R4dCgn ZW5hYmxlJykuJzwvbGFiZWw+JyA6ICcnOw0KCSRwbHVndHlwZSA9IHJhZGlvKCd0eXBlJyww LCgoJHR5cGU9PTApPzE6MCkpLmllZF9wbHVnaW5fZ1R4dCgndHlwZV8wJykuIiAiDQoJCS4g cmFkaW8oJ3R5cGUnLDEsKCgkdHlwZT09MSk/MTowKSkuaWVkX3BsdWdpbl9nVHh0KCd0eXBl XzEnKS4iICINCgkJLiByYWRpbygndHlwZScsMiwoKCR0eXBlPT0yKT8xOjApKS5pZWRfcGx1 Z2luX2dUeHQoJ3R5cGVfMicpLiIgIg0KCQkuIHJhZGlvKCd0eXBlJywzLCgoJHR5cGU9PTMp PzE6MCkpLmllZF9wbHVnaW5fZ1R4dCgndHlwZV8zJyk7DQoJJHBsdWdvcmRlciA9IHNlbGVj dElucHV0KCdsb2FkX29yZGVyJywgJG9yZGVycywgJGxvYWRfb3JkZXIsIDAsIDApOw0KDQoJ JHN1YiA9IGZJbnB1dCgnc3VibWl0JywnJyxnVHh0KCdzYXZlJyksJ3B1Ymxpc2gnKTsNCgly ZXR1cm4gZm9ybShzdGFydFRhYmxlKCdlZGl0JykNCgkuIHRyKCBmTGFiZWxDZWxsKCcmbmJz cDsnKSAuIHRkKCRzdWIgLiAkdmhlbHBsaW5rZnVsbCkpDQoJLiB0ciggZkxhYmVsQ2VsbCgg J3BsdWdpbicgKSAuIHRkKCRuZXduYW1lIC4gJHBsdWdzdGF0dXMgLiAoIChpc3NldCgkZmls ZW5hbWUpKSA/IHRhZygnJiMxNjA7JiMxNjA7KCcuJGZpbGVuYW1lLicpJywnc3BhbicsJyBz dHlsZT0iY29sb3I6Z3JheTsiJykuaElucHV0KCdmaWxlbmFtZScsJGZpbGVuYW1lKSA6ICcn ICkgKSkNCgkuIHRyKCBmTGFiZWxDZWxsKCBpZWRfcGx1Z2luX2dUeHQoJ3BsdWdpbl9jb2Rl JykgKSAuIHRkKCRjb2RlKSkNCgkuIHRyKCBmTGFiZWxDZWxsKCBpZWRfcGx1Z2luX2dUeHQo J3R5cGUnKSApIC4gdGQoJHBsdWd0eXBlKSkNCgkuIHRyKCBmTGFiZWxDZWxsKCBpZWRfcGx1 Z2luX2dUeHQoJ2xvYWRfb3JkZXInKSApIC4gdGQoJHBsdWdvcmRlci4nJiMxNjA7JiMxNjA7 Jy5pZWRfcGx1Z2luX2dUeHQoJ2xvYWRfb3JkZXJfaGVscCcpKSkNCgkuIHRyKCBmTGFiZWxD ZWxsKCAndmVyc2lvbicgKSAuIHRkKCR2ZXJzaW9uKSkNCgkuIHRyKCBmTGFiZWxDZWxsKCAn YXV0aG9yJyApIC4gdGQoJGF1dGhvcikpDQoJLiB0ciggZkxhYmVsQ2VsbCggJ3dlYnNpdGUn ICkgLiB0ZCgkYXV0aG9yX3VyaSkpDQoJLiB0ciggZkxhYmVsQ2VsbCggJ2Rlc2NyaXB0aW9u JyApIC4gdGQoJGRlc2NyaXB0aW9uKSkNCgkuIHRyKCB0ZGEoZ1R4dCgncGx1Z2luX2hlbHAn KSwgJyBjbGFzcz0ibm9saW5lIiBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7IHZlcnRpY2Fs LWFsaWduOiBtaWRkbGU7IicpIC4gdGQoJGhlbHApKQ0KCS4gdHIoIGZMYWJlbENlbGwoICdj c3MnICkgLiB0ZCgkY3NzKSkNCgkuIHRyKCBmTGFiZWxDZWxsKCcmbmJzcDsnKSAuIHRkKCRz dWIpKQ0KDQoJLiB0ciggdGRjcygnPGhyPicsMikpDQoJLiB0ciggZkxhYmVsQ2VsbCgnJm5i c3A7JykgLiB0ZChpZWRfcGx1Z2luX2dUeHQoJ3V0aWxpdGllcycpLic6JykpDQoNCgkuIHRy KCBmTGFiZWxDZWxsKCBpZWRfcGx1Z2luX2dUeHQoJ2NvZGVfZGlzdCcpICkgLiB0ZCgkZGlz dHJpYnV0aW9uKSkNCgkuIHRyKCBmTGFiZWxDZWxsKCcmbmJzcDsnKSAuIHRkKCRzbGluaykp DQoJLiB0ciggZkxhYmVsQ2VsbCgnJm5ic3A7JykgLiB0ZCgkc3ppcGxpbmspKQ0KCS4gdHIo IGZMYWJlbENlbGwoJyZuYnNwOycpIC4gdGQoJHNwaHBsaW5rKSkNCgkuIGVuZFRhYmxlKCkN CgkuIHNJbnB1dCgnaWVkX3BsdWdpbl9zYXZlJykNCgkuIGVJbnB1dCgnaWVkX3BsdWdpbl9j b21wb3NlcicpDQoJLiBoSW5wdXQoJ25hbWUnLCRuYW1lKSkJLiA8PDxFT0YNCjxzY3JpcHQg dHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCmpRdWVyeS5mbi5yZXNpemVoYW5kbGUgPSBmdW5j dGlvbihjdXJoKSB7DQoJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsNCgkJdmFyIG1l ID0galF1ZXJ5KHRoaXMpOw0KCQltZS5hbmltYXRlKHtoZWlnaHQ6IGN1cmh9KTsNCgkJbWUu YWZ0ZXIoDQoJCQlqUXVlcnkoJzxkaXYgY2xhc3M9InJlc2l6ZWhhbmRsZSI+LS0tICsgLS0t PC9kaXY+JykuYmluZCgibW91c2Vkb3duIiwgZnVuY3Rpb24oZSkgew0KCQkJCXZhciBoID0g bWUuaGVpZ2h0KCk7DQoJCQkJdmFyIHkgPSBlLmNsaWVudFk7DQoJCQkJdmFyIG1vdmVIYW5k bGVyID0gZnVuY3Rpb24oZSkgew0KCQkJCQltZS5oZWlnaHQoTWF0aC5tYXgoMjAsIGUuY2xp ZW50WSArIGggLSB5KSk7DQoJCQkJfTsNCgkJCQl2YXIgdXBIYW5kbGVyID0gZnVuY3Rpb24o ZSkgew0KCQkJCQlqUXVlcnkoImh0bWwiKS51bmJpbmQoIm1vdXNlbW92ZSIsbW92ZUhhbmRs ZXIpLnVuYmluZCgibW91c2V1cCIsdXBIYW5kbGVyKTsNCgkJCQkJbmV3aCA9IG1lLmhlaWdo dCgpOw0KCQkJCQlzZXRDb29raWUoJ2llZF9wbHVnaW5fZWRoZWlnaHQnLCBuZXdoLCAzMCk7 DQoJCQkJfTsNCgkJCQlqUXVlcnkoImh0bWwiKS5iaW5kKCJtb3VzZW1vdmUiLCBtb3ZlSGFu ZGxlcikuYmluZCgibW91c2V1cCIsIHVwSGFuZGxlcik7DQoJCQl9KQ0KCQkpOw0KCX0pOw0K fQ0KalF1ZXJ5KGZ1bmN0aW9uKCkgew0KCWN1cmggPSBnZXRDb29raWUoJ2llZF9wbHVnaW5f ZWRoZWlnaHQnKTsNCgljdXJoID0gKGN1cmggPT0gbnVsbCkgPyAnNDgwJyA6IGN1cmg7DQoJ alF1ZXJ5KCIjcGx1Z2luX2VkaXRvciIpLnJlc2l6ZWhhbmRsZShwYXJzZUludChjdXJoKSk7 DQoJalF1ZXJ5KCd0ZXh0YXJlYVttYXhsZW5ndGhdJykua2V5dXAoZnVuY3Rpb24oKXsNCgkJ dmFyIG1heCA9IHBhcnNlSW50KGpRdWVyeSh0aGlzKS5hdHRyKCdtYXhsZW5ndGgnKSk7DQoJ CWlmKGpRdWVyeSh0aGlzKS52YWwoKS5sZW5ndGggPiBtYXgpew0KCQkJalF1ZXJ5KHRoaXMp LnZhbChqUXVlcnkodGhpcykudmFsKCkuc3Vic3RyKDAsIGpRdWVyeSh0aGlzKS5hdHRyKCdt YXhsZW5ndGgnKSkpOw0KCQl9DQoJCWpRdWVyeSh0aGlzKS5wYXJlbnQoKS5maW5kKCcuY2hh cnNSZW1haW4nKS5odG1sKCdDaGFycyByZW1haW5pbmc6ICcrIChtYXggLSBqUXVlcnkodGhp cykudmFsKCkubGVuZ3RoKSk7DQoJfSk7DQoJalF1ZXJ5KCd0ZXh0YXJlYVttYXhsZW5ndGhd Jykua2V5dXAoKTsNCn0pOw0KPC9zY3JpcHQ+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0K LnJlc2l6ZWhhbmRsZSB7DQoJY3Vyc29yOnMtcmVzaXplOw0KCWZsb2F0OmxlZnQ7DQoJdGV4 dC1hbGlnbjpjZW50ZXI7DQoJZm9udC1zaXplOjFlbTsNCgl3aWR0aDo4MiU7DQoJcGFkZGlu ZzoycHggMCA2cHg7DQp9DQouY2hhcnNSZW1haW4gew0KCXRleHQtYWxpZ246cmlnaHQ7DQoJ Y29sb3I6Z3JheTsNCn0NCjwvc3R5bGU+DQpFT0Y7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0 aW9uIGllZF9wbHVnaW5fc2F2ZSgpIHsNCglnbG9iYWwgJGllZF9wbHVnaW5fZ2xvYmFscywg JHByZWZzOw0KCWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCduYW1lJywnbmV3bmFtZScs J2ZpbGVuYW1lJywnY29kZScsJ2F1dGhvcicsJ2F1dGhvcl91cmknLCd2ZXJzaW9uJywnZGVz Y3JpcHRpb24nLCdoZWxwJywnY3NzJywnc3RhdHVzJywndHlwZScsJ2xvYWRfb3JkZXInLCdy ZW5hbWVfZmlsZScsJ3Jlc3RvcmVfcG9pbnQnKSkpKTsNCg0KCWxpc3QgKCRzdGFydF9jc3Ms ICRlbmRfY3NzKSA9IGllZF9wbHVnaW5fbWFrZV9tYXJrZXJzKCJDU1MiLCAkaWVkX3BsdWdp bl9nbG9iYWxzWydjc3Nfc3RhcnQnXSwgJGllZF9wbHVnaW5fZ2xvYmFsc1snY3NzX2VuZCdd KTsNCgkkZXh0cmFNc2cgPSAkbmV3ZmlsZW5hbWUgPSAkbXNnMSA9ICRtc2cyID0gJyc7DQoJ JG5ld25hbWUgPSB0cmltKCRuZXduYW1lKTsNCg0KCWlmIChlbXB0eSgkbmV3bmFtZSkpIHsN CgkJJG1zZzEgPSBpZWRfcGx1Z2luX2dUeHQoJ25hbWVfZmlyc3QnKTsNCgl9IGVsc2Ugew0K CQlpZiAoZW1wdHkoJGZpbGVuYW1lKSkgew0KCQkJJGhvdXQgPSBhcnJheSgpOw0KCQkJJGhv dXRbMF0gPSAkaGVscDsNCgkJCWlmICgkY3NzKSB7ICRob3V0WzFdID0gbi4kc3RhcnRfY3Nz Lm4uJGNzcy5uLiRlbmRfY3NzOyB9DQoJCQlzYWZlX3VwZGF0ZSgNCgkJCQkndHhwX3BsdWdp bicsDQoJCQkJIm5hbWU9JyIuJG5ld25hbWUuIicsDQoJCQkJc3RhdHVzID0gIi5pbnR2YWwo JHN0YXR1cykuIiwNCgkJCQl0eXBlID0gIi5pbnR2YWwoJHR5cGUpLiIsDQoJCQkJYXV0aG9y ID0gJyIuJGF1dGhvci4iJywNCgkJCQlhdXRob3JfdXJpID0gJyIuJGF1dGhvcl91cmkuIics DQoJCQkJdmVyc2lvbiA9ICciLiR2ZXJzaW9uLiInLA0KCQkJCWRlc2NyaXB0aW9uID0gJyIu JGRlc2NyaXB0aW9uLiInLA0KCQkJCWhlbHAgPSAnIi5qb2luKCcnLCRob3V0KS4iJywNCgkJ CQljb2RlID0gJyIuJGNvZGUuIicsDQoJCQkJIi4oKCRyZXN0b3JlX3BvaW50ID09IDEpPyAi Y29kZV9yZXN0b3JlID0gJyIuJGNvZGUuIicsIiA6ICcnKS4iDQoJCQkJbG9hZF9vcmRlciA9 ICIuJGxvYWRfb3JkZXIsDQoJCQkJIm5hbWUgPSAnIi4kbmFtZS4iJyIpOw0KCQkJJG1zZzEg PSBnVHh0KCdwbHVnaW5fc2F2ZWQnLCBhcnJheSgne25hbWV9JyA9PiAkbmV3bmFtZSkpOw0K CQl9IGVsc2Ugew0KCQkJJGRpciA9ICRwcmVmc1sncGx1Z2luX2NhY2hlX2RpciddLkRTOw0K CQkJaWYgKGZpbGVfZXhpc3RzKCRkaXIuJGZpbGVuYW1lKSkgew0KCQkJCSRmaWxlY29udGVu dCA9IGZpbGUoJGRpci4kZmlsZW5hbWUpOw0KCQkJfSBlbHNlIHsNCgkJCQlpZiAoZW1wdHko JHByZWZzWydwbHVnaW5fY2FjaGVfZGlyJ10pKSB7DQoJCQkJCSRmaWxlY29udGVudCA9ICcn Ow0KCQkJCQkkbXNnMiA9IGllZF9wbHVnaW5fZ1R4dCgnY2FjaGVfbm90X3NldCcpOw0KCQkJ CX0gZWxzZSB7DQoJCQkJCSRvcG9yZGVyID0gKGlzc2V0KCRwcmVmc1snaWVkX3BsdWdpbl9v dXRwdXRfb3JkZXInXSkgJiYgaXNfbnVtZXJpYygkcHJlZnNbJ2llZF9wbHVnaW5fb3V0cHV0 X29yZGVyJ10pKSA/ICRwcmVmc1snaWVkX3BsdWdpbl9vdXRwdXRfb3JkZXInXSA6IDA7DQoJ CQkJCSRoZWxwY2h1bmsgPSBpZWRfcGx1Z2luX2J1aWxkX3RlbXBsYXRlKCdoZWxwJywgYXJy YXkoJGhlbHAsICcgJykpOyAvLyBVc2UgYSBzcGFjZSB0byBmb3JjZSBhIENTUyBodW5rIGlu IHRoZSBmaWxlDQoJCQkJCSRjb2RlY2h1bmsgPSBpZWRfcGx1Z2luX2J1aWxkX3RlbXBsYXRl KCdjb2RlJywgJGNvZGUpOw0KCQkJCQkkZmlsZWNvbnRlbnQgPSBpZWRfcGx1Z2luX2J1aWxk X3RlbXBsYXRlKCJwcmVhbWJsZSIpDQoJCQkJCQkuaWVkX3BsdWdpbl9idWlsZF90ZW1wbGF0 ZSgibmFtZSIsICRuZXduYW1lKQ0KCQkJCQkJLmllZF9wbHVnaW5fYnVpbGRfdGVtcGxhdGUo Imh0bWxfaGVscCIpDQoJCQkJCQkuaWVkX3BsdWdpbl9idWlsZF90ZW1wbGF0ZSgidmVyc2lv biIsICR2ZXJzaW9uKQ0KCQkJCQkJLmllZF9wbHVnaW5fYnVpbGRfdGVtcGxhdGUoImF1dGhv ciIsICRhdXRob3IpDQoJCQkJCQkuaWVkX3BsdWdpbl9idWlsZF90ZW1wbGF0ZSgiYXV0aG9y X3VyaSIsICRhdXRob3JfdXJpKQ0KCQkJCQkJLmllZF9wbHVnaW5fYnVpbGRfdGVtcGxhdGUo ImRlc2NyaXB0aW9uIiwgJGRlc2NyaXB0aW9uKQ0KCQkJCQkJLmllZF9wbHVnaW5fYnVpbGRf dGVtcGxhdGUoImxvYWRfb3JkZXIiLCAkbG9hZF9vcmRlcikNCgkJCQkJCS5pZWRfcGx1Z2lu X2J1aWxkX3RlbXBsYXRlKCJ0eXBlIiwgJHR5cGUpDQoJCQkJCQkuaWVkX3BsdWdpbl9idWls ZF90ZW1wbGF0ZSgiaW5jbHVkZSIpDQoJCQkJCQkuKCgkb3BvcmRlciA9PSAwKSA/ICRjb2Rl Y2h1bmsgOiAkaGVscGNodW5rKQ0KCQkJCQkJLigoJG9wb3JkZXIgPT0gMSkgPyAkY29kZWNo dW5rIDogJGhlbHBjaHVuaykNCgkJCQkJCS5pZWRfcGx1Z2luX2J1aWxkX3RlbXBsYXRlKCJw b3N0YW1ibGUiKTsNCgkJCQkJJG1zZzEgPSBpZWRfcGx1Z2luX2dUeHQoJ2VkaXRfbmV3Jyk7 DQoJCQkJfQ0KCQkJfQ0KDQoJCQkkZmlsZWNvbnRlbnQgPSBpZWRfcGx1Z2luX21ha2VfYXJy YXkoJGZpbGVjb250ZW50KTsNCgkJCSRtZXRhdmFycyA9IGFycmF5KCJuYW1lIiA9PiAiJG5l d25hbWUiLA0KCQkJCQkJCQkJInZlcnNpb24iID0+ICIkdmVyc2lvbiIsDQoJCQkJCQkJCQki YXV0aG9yIiA9PiAiJGF1dGhvciIsDQoJCQkJCQkJCQkiYXV0aG9yX3VyaSIgPT4gIiRhdXRo b3JfdXJpIiwNCgkJCQkJCQkJCSJkZXNjcmlwdGlvbiIgPT4gIiRkZXNjcmlwdGlvbiIsDQoJ CQkJCQkJCQkidHlwZSIgPT4gIiR0eXBlIiwNCgkJCQkJCQkJCSJvcmRlciIgPT4gIiRsb2Fk X29yZGVyIiwNCgkJCQkJCQkpOw0KCQkJJGh1bmt2YXJzID0gYXJyYXkoIkNPREUiID0+IGRv U3RyaXAoc3RyX3JlcGxhY2UoJ1xyXG4nLCcNCicsJGNvZGUpKSwgLy8gbmV3bGluZSB3b3Jr YXJvdW5kDQoJCQkJCQkiSEVMUCIgPT4gZG9TdHJpcChzdHJfcmVwbGFjZSgnXHJcbicsJw0K JywkaGVscCkpLA0KCQkJCQkJIkNTUyIgPT4gZG9TdHJpcChzdHJfcmVwbGFjZSgnXHJcbics Jw0KJywkY3NzKSksDQoJCQkJCQkJKTsNCgkJCWZvcmVhY2ggKCRtZXRhdmFycyBhcyAkdmFy bmFtZSA9PiAkdmFsdWUpIHsNCgkJCQlmb3IoJGlkeCA9IDA7ICRpZHggPCBjb3VudCgkZmls ZWNvbnRlbnQpOyAkaWR4KyspIHsNCgkJCQkJaWYgKHN0cnBvcygkZmlsZWNvbnRlbnRbJGlk eF0sICckcGx1Z2luW1wnJy4kdmFybmFtZS4nXCddJykgPT09IDApIHsNCgkJCQkJCSRmaWxl Y29udGVudFskaWR4XSA9ICckcGx1Z2luW1wnJy4kdmFybmFtZS4nXCddID0gJy5kb1F1b3Rl KCR2YWx1ZSkuJzsnOw0KCQkJCQkJYnJlYWs7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCQlm b3JlYWNoICgkaHVua3ZhcnMgYXMgJHZhcm5hbWUgPT4gJGh1bmspIHsNCgkJCQlsaXN0ICgk c3RhcnRfZGVsaW0sICRlbmRfZGVsaW0pID0gaWVkX3BsdWdpbl9tYWtlX21hcmtlcnMoJHZh cm5hbWUsICRpZWRfcGx1Z2luX2dsb2JhbHNbJ2RsbV9zdGFydCddLCAkaWVkX3BsdWdpbl9n bG9iYWxzWydkbG1fZW5kJ10pOw0KCQkJCSRzdGFydCA9IGFycmF5X3NlYXJjaCgkc3RhcnRf ZGVsaW0sICRmaWxlY29udGVudCkgKyAxOw0KCQkJCSRlbmQgPSBhcnJheV9zZWFyY2goJGVu ZF9kZWxpbSwgJGZpbGVjb250ZW50KTsNCgkJCQlpZiAoaXNfbnVtZXJpYygkc3RhcnQpICYm IGlzX251bWVyaWMoJGVuZCkgJiYgJGVuZCA+PSAkc3RhcnQpIHsNCgkJCQkJYXJyYXlfc3Bs aWNlKCRmaWxlY29udGVudCwgJHN0YXJ0LCAkZW5kLSRzdGFydCwgJGh1bmspOw0KCQkJCX0N CgkJCX0NCgkJCSRmaWxlY29udGVudCA9IGltcGxvZGUoIlxuIiwgJGZpbGVjb250ZW50KTsN Cg0KCQkJaWYgKCRmaWxlY29udGVudCkgew0KCQkJCSRmaCA9IGZvcGVuKCRkaXIuJGZpbGVu YW1lLCAndysnKTsNCgkJCQlmd3JpdGUoJGZoLCAkZmlsZWNvbnRlbnQpOw0KCQkJCWZjbG9z ZSgkZmgpOw0KCQkJfQ0KCQkJJG1zZzEgPSAoZW1wdHkoJG1zZzEpKSA/IGdUeHQoJ3BsdWdp bl9zYXZlZCcsIGFycmF5KCd7bmFtZX0nID0+ICRuZXduYW1lKSkgOiAkbXNnMTsNCg0KCQkJ Ly8gTWFrZSBuZXcgZmlsZSBpZiByZXF1aXJlZA0KCQkJaWYgKCRyZW5hbWVfZmlsZSA9PSAx KSB7DQoJCQkJJGZuYW1lcyA9IGllZF9wbHVnaW5fZ2V0X25hbWUoJG5ld25hbWUsICR2ZXJz aW9uKTsNCgkJCQkkbmV3ZmlsZW5hbWUgPSAkZm5hbWVzWzJdOw0KCQkJCSRyZXMgPSByZW5h bWUoJGRpci4kZmlsZW5hbWUsICRkaXIuJG5ld2ZpbGVuYW1lKTsNCgkJCQkkZXh0cmFNc2cg PSAoJHJlcykgPyBpZWRfcGx1Z2luX2dUeHQoJ3JlbmFtZWQnKSA6IGllZF9wbHVnaW5fZ1R4 dCgncmVuYW1lX2ZhaWxlZCcpOw0KCQkJfQ0KCQl9DQoJfQ0KCWlmICgkbXNnMikgew0KCQlp ZWRfcGx1Z2luX2xpc3QoJG1zZzIpOw0KCX0gZWxzZSB7DQoJCS8vIENoZWNrIHRoZSBwbHVn aW4gdHlwZSBtYXRjaGVzIHRoZSBjb2RlIHVzZWQNCgkJJGV4dHJhTXNnIC49IChpZWRfcGx1 Z2luX2FkbWluX2NoZWNrKCRjb2RlLCAkdHlwZSkpID8gJycgOiBzdHJvbmcoaWVkX3BsdWdp bl9nVHh0KCdjaGVja190eXBlJykpOw0KCQkkbWVzc2FnZSA9ICRtc2cxLmJyLiRleHRyYU1z ZzsNCgkJaWVkX3BsdWdpbl9lZGl0KCRtZXNzYWdlLCAkbmV3ZmlsZW5hbWUpOw0KCX0NCn0N Cg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gaWVkX3BsdWdpbl9jcmVhdGVfbmV3KCkgew0KCWV4 dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCduYW1lJykpKSk7DQoJJGZuYW1lID0gJyc7DQoJ aWYgKCRuYW1lPT0nJykgew0KCQlpZWRfcGx1Z2luX2xpc3QoaWVkX3BsdWdpbl9nVHh0KCdu YW1lX2ZpcnN0JykpOw0KCQlyZXR1cm47DQoJfQ0KCWlmIChzdHJwb3MoJG5hbWUsICIucGhw IikgIT09IGZhbHNlKSB7DQoJCSRmbmFtZSA9ICRuYW1lOw0KCQkkbmFtZSA9IGJhc2VuYW1l KCRuYW1lLCAiLnBocCIpOw0KCX0NCgkkZXhpc3RzID0gZmV0Y2goJ25hbWUnLCd0eHBfcGx1 Z2luJywnbmFtZScsJG5hbWUpOw0KCWlmICghJGV4aXN0cykgew0KCQlpZiAoJGZuYW1lKSB7 DQoJCQkvLyBQdXQgcGx1Z2luIGluIGNhY2hlIGRpciBieSBmYWtpbmcgYSBQT1NUIHN1Ym1p c3Npb24gYW5kIHNhdmluZw0KCQkJJF9QT1NUWydmaWxlbmFtZSddID0gJGZuYW1lOw0KCQkJ JF9QT1NUWyduZXduYW1lJ10gPSAkbmFtZTsNCgkJCSRfUE9TVFsnc3RhdHVzJ10gPSAwOw0K CQkJJF9QT1NUWyd0eXBlJ10gPSAwOw0KCQkJJF9QT1NUWyd2ZXJzaW9uJ10gPSAnMC4xJzsN CgkJCSRfUE9TVFsnbG9hZF9vcmRlciddID0gNTsNCgkJCWllZF9wbHVnaW5fc2F2ZSgpOw0K CQl9IGVsc2Ugew0KCQkJc2FmZV9pbnNlcnQoInR4cF9wbHVnaW4iLCAiDQoJCQkJbmFtZT0n JG5hbWUnLA0KCQkJCXN0YXR1cz0wLA0KCQkJCXR5cGU9MCwNCgkJCQl2ZXJzaW9uPScwLjEn LA0KCQkJCWxvYWRfb3JkZXI9NSwNCgkJCQlkZXNjcmlwdGlvbj0nJywNCgkJCQloZWxwPScn LA0KCQkJCWNvZGU9JycsDQoJCQkJY29kZV9yZXN0b3JlPScnDQoJCQkiKTsNCgkJCXBhZ2V0 b3AoZ1R4dCgnZWRpdF9wbHVnaW5zJyksIGllZF9wbHVnaW5fZ1R4dCgnZWRpdF9uZXcnKSk7 DQoJCQllY2hvIGllZF9wbHVnaW5fZWRpdF9mb3JtKCRuYW1lKTsNCgkJfQ0KCX0gZWxzZSB7 DQoJCWllZF9wbHVnaW5fbGlzdChnVHh0KCdwbHVnaW4nKS4nIDxzdHJvbmc+Jy4kbmFtZS4n PC9zdHJvbmc+ICcuZ1R4dCgnYWxyZWFkeV9leGlzdHMnKSk7DQoJfQ0KfQ0KDQovLyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQpmdW5jdGlvbiBpZWRfcGx1Z2luX3NhdmVfYXNfZmlsZSgpIHsNCglnbG9iYWwgJHBy ZWZzLCAkaWVkX3BsdWdpbl9nbG9iYWxzOw0KCWlmIChncHMoJ25hbWUnKSkgew0KCQkkbmFt ZSA9IGdwcygnbmFtZScpOw0KCQkkcnMgPSBzYWZlX3JvdygiZGVzY3JpcHRpb24sIGF1dGhv ciwgYXV0aG9yX3VyaSwgdmVyc2lvbiwgY29kZSwgaGVscCwgdHlwZSwgbG9hZF9vcmRlciIs ICJ0eHBfcGx1Z2luIiwgIm5hbWU9JyRuYW1lJyIpOw0KCQlleHRyYWN0KCRycyk7DQoNCgkJ bGlzdCgkY3NzLCRoZWxwKSA9ICgkaGVscCkgPyBpZWRfcGx1Z2luX2V4dHJhY3RfaHVuaygk aGVscCwgIkNTUyIsICI8IS0tfC0tPiIsIHRydWUpIDogYXJyYXkoJycsJGhlbHApOw0KCX0g ZWxzZWlmIChncHMoJ2ZpbGVuYW1lJykpIHsNCgkJJHBsdWdpbj1pZWRfcGx1Z2luX3JlYWRf ZmlsZSgkcHJlZnNbJ3BsdWdpbl9jYWNoZV9kaXInXS5EUy5ncHMoJ2ZpbGVuYW1lJykpOw0K CQlleHRyYWN0KCRwbHVnaW4pOw0KCX0NCg0KCSR6aXAgPSBncHMoJ3ppcCcpOw0KCWlmIChn cHMoJ3RyaW0nKT09MSkgew0KCQkkY29kZT1leHBsb2RlKCJcclxuIiwkY29kZSk7DQoJCSRj b2RlPWFycmF5X21hcCgndHJpbScsJGNvZGUpOw0KCQkkY29kZT1pbXBsb2RlKCJcclxuIiwk Y29kZSk7DQoJfQ0KDQoJbGlzdCAoJHN0YXJ0X2NzcywgJGVuZF9jc3MpID0gaWVkX3BsdWdp bl9tYWtlX21hcmtlcnMoIkNTUyIsICRpZWRfcGx1Z2luX2dsb2JhbHNbJ2Nzc19zdGFydCdd LCAkaWVkX3BsdWdpbl9nbG9iYWxzWydjc3NfZW5kJ10pOw0KCSRmbmFtZXMgPSBpZWRfcGx1 Z2luX2dldF9uYW1lKCRuYW1lLCAkdmVyc2lvbik7DQoNCgloZWFkZXIoIkNvbnRlbnQtdHlw ZTogdGV4dC9wbGFpbiIpOw0KCWhlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNo bWVudDsgZmlsZW5hbWU9JyAuICgoJHppcCkgPyAkZm5hbWVzWzFdIDogJGZuYW1lc1swXSkp Ow0KDQoJJHR5cGVzID0gYXJyYXkoICdDbGllbnQgc2lkZScgLCAnQWRtaW4vQ2xpZW50IHNp ZGUnICwgJ0xpYnJhcnknICwgJ0FkbWluIHNpZGUnKTsNCgkkcGx1Z2luWyduYW1lJ10gPSAk bmFtZTsNCgkkcGx1Z2luWydhdXRob3InXSA9ICRhdXRob3I7DQoJJHBsdWdpblsnYXV0aG9y X3VyaSddID0gJGF1dGhvcl91cmk7DQoJJHBsdWdpblsndmVyc2lvbiddID0gJHZlcnNpb247 DQoJJHBsdWdpblsnZGVzY3JpcHRpb24nXSA9ICRkZXNjcmlwdGlvbjsNCgkkcGx1Z2luWydj b2RlJ10gPSAkY29kZTsNCgkkcGx1Z2luWyd0eXBlJ10gPSAkdHlwZTsNCgkkcGx1Z2luWydv cmRlciddID0gJGxvYWRfb3JkZXI7DQovLwkkcGx1Z2luWydhbGxvd19odG1sX2hlbHAnXSA9 IHRydWU7DQovLwkkcGx1Z2luWydoZWxwX3JhdyddID0gJGhlbHAuJHN0YXJ0X2Nzcy4kY3Nz LiRlbmRfY3NzOw0KCSRwbHVnaW5bJ2hlbHAnXSA9IGllZF9wbHVnaW5fdGV4dGlsZSgkbmFt ZSwgJGhlbHAsICRjc3MsICRzdGFydF9jc3MsICRlbmRfY3NzKTsNCgkkcGx1Z2luWydtZDUn XSA9IG1kNSggJHBsdWdpblsnY29kZSddICk7DQoNCgllY2hvICcjIE5hbWU6ICcuJG5hbWUu JyB2Jy4kdmVyc2lvbi4nICcuKCgkemlwKSA/ICIoY29tcHJlc3NlZCkiIDogIiIpLicNCiMg VHlwZTogJy4kdHlwZXNbJHR5cGVdLicgcGx1Z2luDQojICcuJGRlc2NyaXB0aW9uLicNCiMg QXV0aG9yOiAnLiRhdXRob3IuJw0KIyBVUkw6ICcuJGF1dGhvcl91cmkuJw0KIyBSZWNvbW1l bmRlZCBsb2FkIG9yZGVyOiAnLiRsb2FkX29yZGVyLicNCg0KIyAuLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4N CiMgVGhpcyBpcyBhIHBsdWdpbiBmb3IgVGV4dHBhdHRlcm4gLSBodHRwOi8vdGV4dHBhdHRl cm4uY29tLw0KIyBUbyBpbnN0YWxsOiB0ZXh0cGF0dGVybiA+IGFkbWluID4gcGx1Z2lucw0K IyBQYXN0ZSB0aGUgZm9sbG93aW5nIHRleHQgaW50byB0aGUgXCdJbnN0YWxsIHBsdWdpblwn IGJveDoNCiMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uDQoNCicuKCgkemlwKSA/IGNodW5rX3NwbGl0KGJh c2U2NF9lbmNvZGUoZ3plbmNvZGUoc2VyaWFsaXplKCRwbHVnaW4pKSksIDcyKSA6IGNodW5r X3NwbGl0KGJhc2U2NF9lbmNvZGUoc2VyaWFsaXplKCRwbHVnaW4pKSwgNzIpKTsNCg0KCWRp ZSgpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBpZWRfcGx1Z2luX3NhdmVfYXNfcGhw X2ZpbGUoKSB7DQoJZ2xvYmFsICRwcmVmczsNCglpZiAoZ3BzKCduYW1lJykpIHsNCgkJJG5h bWUgPSBncHMoJ25hbWUnKTsNCgkJJHJzID0gc2FmZV9yb3coImRlc2NyaXB0aW9uLCBhdXRo b3IsIGF1dGhvcl91cmksIHZlcnNpb24sIGNvZGUsIGhlbHAsIHR5cGUsIGxvYWRfb3JkZXIi LCAidHhwX3BsdWdpbiIsICJuYW1lPSckbmFtZSciKTsNCgkJZXh0cmFjdCgkcnMpOw0KDQoJ CWxpc3QoJGNzcywkaGVscCkgPSAoJGhlbHApID8gaWVkX3BsdWdpbl9leHRyYWN0X2h1bmso JGhlbHAsICJDU1MiLCAiPCEtLXwtLT4iLCB0cnVlKSA6IGFycmF5KCcnLCRoZWxwKTsNCgl9 IGVsc2VpZiAoZ3BzKCdmaWxlbmFtZScpKSB7DQoJCSRwbHVnaW49aWVkX3BsdWdpbl9yZWFk X2ZpbGUoJHByZWZzWydwbHVnaW5fY2FjaGVfZGlyJ10uRFMuZ3BzKCdmaWxlbmFtZScpKTsN CgkJZXh0cmFjdCgkcGx1Z2luKTsNCgl9DQoNCgkkb3BvcmRlciA9IChpc3NldCgkcHJlZnNb J2llZF9wbHVnaW5fb3V0cHV0X29yZGVyJ10pICYmIGlzX251bWVyaWMoJHByZWZzWydpZWRf cGx1Z2luX291dHB1dF9vcmRlciddKSkgPyAkcHJlZnNbJ2llZF9wbHVnaW5fb3V0cHV0X29y ZGVyJ10gOiAwOw0KCSRmbmFtZXMgPSBpZWRfcGx1Z2luX2dldF9uYW1lKCRuYW1lLCAkdmVy c2lvbik7DQoNCgloZWFkZXIoIkNvbnRlbnQtdHlwZTogdGV4dC9waHAiKTsNCgloZWFkZXIo J0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPScgLiRmbmFtZXNb Ml0pOw0KDQoJJGhlbHBjaHVuayA9IGllZF9wbHVnaW5fYnVpbGRfdGVtcGxhdGUoJ2hlbHAn LCBhcnJheSgkaGVscCwgJGNzcykpOw0KCSRjb2RlY2h1bmsgPSBpZWRfcGx1Z2luX2J1aWxk X3RlbXBsYXRlKCdjb2RlJywgc3RyX3JlcGxhY2UoIlxyXG4iLCJcbiIsJGNvZGUpKTsNCg0K CWVjaG8gaWVkX3BsdWdpbl9idWlsZF90ZW1wbGF0ZSgicHJlYW1ibGUiKTsNCgllY2hvIGll ZF9wbHVnaW5fYnVpbGRfdGVtcGxhdGUoIm5hbWUiLCAkbmFtZSk7DQoJZWNobyBpZWRfcGx1 Z2luX2J1aWxkX3RlbXBsYXRlKCJodG1sX2hlbHAiKTsNCgllY2hvIGllZF9wbHVnaW5fYnVp bGRfdGVtcGxhdGUoInZlcnNpb24iLCAkdmVyc2lvbik7DQoJZWNobyBpZWRfcGx1Z2luX2J1 aWxkX3RlbXBsYXRlKCJhdXRob3IiLCAkYXV0aG9yKTsNCgllY2hvIGllZF9wbHVnaW5fYnVp bGRfdGVtcGxhdGUoImF1dGhvcl91cmkiLCAkYXV0aG9yX3VyaSk7DQoJZWNobyBpZWRfcGx1 Z2luX2J1aWxkX3RlbXBsYXRlKCJkZXNjcmlwdGlvbiIsICRkZXNjcmlwdGlvbik7DQoJZWNo byBpZWRfcGx1Z2luX2J1aWxkX3RlbXBsYXRlKCJsb2FkX29yZGVyIiwgJGxvYWRfb3JkZXIp Ow0KCWVjaG8gaWVkX3BsdWdpbl9idWlsZF90ZW1wbGF0ZSgidHlwZSIsICR0eXBlKTsNCgll Y2hvIGllZF9wbHVnaW5fYnVpbGRfdGVtcGxhdGUoImluY2x1ZGUiKTsNCgllY2hvICgoJG9w b3JkZXIgPT0gMCkgPyAkY29kZWNodW5rIDogJGhlbHBjaHVuayk7DQoJZWNobyAoKCRvcG9y ZGVyID09IDEpID8gJGNvZGVjaHVuayA6ICRoZWxwY2h1bmspOw0KCWVjaG8gaWVkX3BsdWdp bl9idWlsZF90ZW1wbGF0ZSgicG9zdGFtYmxlIik7DQoNCglkaWUoKTsNCn0NCg0KLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KZnVuY3Rpb24gaWVkX3BsdWdpbl9idWlsZF90ZW1wbGF0ZSgkcHJ0LCAkdmFsPScn KSB7DQoJJGNzcyA9ICRoZWxwID0gJyc7DQoJaWYgKGlzX2FycmF5KCR2YWwpKSB7DQoJCSRo ZWxwID0gJHZhbFswXTsNCgkJJGNzcyA9IGlzc2V0KCR2YWxbMV0pID8gJHZhbFsxXSA6ICcn Ow0KCQkkdmFsID0gJyc7DQoJfQ0KCSR0ZW1wbGF0ZSA9IGFycmF5KA0KCQkicHJlYW1ibGUi ID0+ICc8P3BocCcubg0KCQkJCQkJLicvLyBUaGlzIGlzIGEgUExVR0lOIFRFTVBMQVRFLicu bg0KCQkJCQkJLicvLyBDb3B5IHRoaXMgZmlsZSB0byBhIG5ldyBuYW1lIGxpa2UgYWJjX215 cGx1Z2luLnBocC4gIEVkaXQgdGhlIGNvZGUsIHRoZW4nLm4NCgkJCQkJCS4nLy8gcnVuIHRo aXMgZmlsZSBhdCB0aGUgY29tbWFuZCBsaW5lIHRvIHByb2R1Y2UgYSBwbHVnaW4gZm9yIGRp c3RyaWJ1dGlvbjonLm4NCgkJCQkJCS4nLy8gJCBwaHAgYWJjX215cGx1Z2luLnBocCA+IGFi Y19teXBsdWdpbi0wLjEudHh0Jy5uLm4sDQoJCSJuYW1lIiA9PiAnLy8gUGx1Z2luIG5hbWUg aXMgb3B0aW9uYWwuICBJZiB1bnNldCwgaXQgd2lsbCBiZSBleHRyYWN0ZWQgZnJvbSB0aGUg Y3VycmVudCcubg0KCQkJCQkJLicvLyBmaWxlIG5hbWUuIFVuY29tbWVudCBhbmQgZWRpdCB0 aGlzIGxpbmUgdG8gb3ZlcnJpZGU6Jy5uDQoJCQkJCQkuJyRwbHVnaW5bXCduYW1lXCddID0g Jy5kb1F1b3RlKCR2YWwpLic7Jy5uLm4sDQoJCSJodG1sX2hlbHAiID0+ICcvLyAwID0gUGx1 Z2luIGhlbHAgaXMgaW4gVGV4dGlsZSBmb3JtYXQsIG5vIHJhdyBIVE1MIGFsbG93ZWQgKGRl ZmF1bHQpLicubg0KCQkJCQkJLicvLyAxID0gUGx1Z2luIGhlbHAgaXMgaW4gcmF3IEhUTUwu ICBOb3QgcmVjb21tZW5kZWQuJy5uDQoJCQkJCQkuJyMgJHBsdWdpbltcJ2FsbG93X2h0bWxf aGVscFwnXSA9IDE7Jy5uLm4sDQoJCSJ2ZXJzaW9uIiA9PiAnJHBsdWdpbltcJ3ZlcnNpb25c J10gPSAnLmRvUXVvdGUoJHZhbCkuJzsnLm4sDQoJCSJhdXRob3IiID0+ICckcGx1Z2luW1wn YXV0aG9yXCddID0gJy5kb1F1b3RlKCR2YWwpLic7Jy5uLA0KCQkiYXV0aG9yX3VyaSIgPT4g JyRwbHVnaW5bXCdhdXRob3JfdXJpXCddID0gJy5kb1F1b3RlKCR2YWwpLic7Jy5uLA0KCQki ZGVzY3JpcHRpb24iID0+ICckcGx1Z2luW1wnZGVzY3JpcHRpb25cJ10gPSAnLmRvUXVvdGUo JHZhbCkuJzsnLm4ubiwNCgkJImxvYWRfb3JkZXIiID0+ICcvLyBQbHVnaW4gbG9hZCBvcmRl cjonLm4NCgkJCQkJCS4nLy8gVGhlIGRlZmF1bHQgdmFsdWUgb2YgNSB3b3VsZCBmaXQgbW9z dCBwbHVnaW5zLCB3aGlsZSBmb3IgaW5zdGFuY2UgY29tbWVudCBzcGFtIGV2YWx1YXRvcnMg b3IgVVJMIHJlZGlyZWN0b3JzJy5uDQoJCQkJCQkuJy8vIHdvdWxkIHByb2JhYmx5IHdhbnQg dG8gcnVuIGVhcmxpZXIgKDEuLi40KSB0byBwcmVwYXJlIHRoZSBlbnZpcm9ubWVudCBmb3Ig ZXZlcnl0aGluZyBlbHNlIHRoYXQgZm9sbG93cy4nLm4NCgkJCQkJCS4nLy8gT3JkZXJzIDYu Li45IHNob3VsZCBiZSBjb25zaWRlcmVkIGZvciBwbHVnaW5zIHdoaWNoIHdvdWxkIHdvcmsg bGF0ZS4gVGhpcyBvcmRlciBpcyB1c2VyLW92ZXJyaWRlYWJsZS4nLm4NCgkJCQkJCS4nJHBs dWdpbltcJ29yZGVyXCddID0gJy5kb1F1b3RlKCR2YWwpLic7Jy5uLm4sDQoJCSJ0eXBlIiA9 PiAnLy8gUGx1Z2luIFwndHlwZVwnIGRlZmluZXMgd2hlcmUgdGhlIHBsdWdpbiBpcyBsb2Fk ZWQnLm4NCgkJCQkJCS4nLy8gMCA9IHB1YmxpYyAgICAgICA6IG9ubHkgb24gdGhlIHB1Ymxp YyBzaWRlIG9mIHRoZSB3ZWJzaXRlIChkZWZhdWx0KScubg0KCQkJCQkJLicvLyAxID0gcHVi bGljK2FkbWluIDogb24gYm90aCB0aGUgcHVibGljIGFuZCBhZG1pbiBzaWRlJy5uDQoJCQkJ CQkuJy8vIDIgPSBsaWJyYXJ5ICAgICAgOiBvbmx5IHdoZW4gaW5jbHVkZV9wbHVnaW4oKSBv ciByZXF1aXJlX3BsdWdpbigpIGlzIGNhbGxlZCcubg0KCQkJCQkJLicvLyAzID0gYWRtaW4g ICAgICAgIDogb25seSBvbiB0aGUgYWRtaW4gc2lkZScubg0KCQkJCQkJLickcGx1Z2luW1wn dHlwZVwnXSA9ICcuZG9RdW90ZSgkdmFsKS4nOycubi5uLA0KCQkiaW5jbHVkZSIgPT4gJ2lm ICghZGVmaW5lZChcJ3R4cGludGVyZmFjZVwnKSknLm4NCgkJCQkJCS4nICAgICAgICBAaW5j bHVkZV9vbmNlKFwnemVtX3RwbC5waHBcJyk7Jy5uLm4sDQoJCSJoZWxwIiA9PiAnaWYgKDAp IHsnLm4NCgkJCQkJCS4nPz4nLm4NCgkJCQkJCS4gKCgkY3NzKSA/ICc8IS0tJy5uDQoJCQkJ CQkuJyMgLS0tIEJFR0lOIFBMVUdJTiBDU1MgLS0tJy5uDQoJCQkJCQkuJGNzcy5uDQoJCQkJ CQkuJyMgLS0tIEVORCBQTFVHSU4gQ1NTIC0tLScubg0KCQkJCQkJLictLT4nLm4gOiAnJykN CgkJCQkJCS4nPCEtLScubg0KCQkJCQkJLicjIC0tLSBCRUdJTiBQTFVHSU4gSEVMUCAtLS0n Lm4NCgkJCQkJCS4kaGVscC5uDQoJCQkJCQkuJyMgLS0tIEVORCBQTFVHSU4gSEVMUCAtLS0n Lm4NCgkJCQkJCS4nLS0+Jy5uDQoJCQkJCQkuJzw/cGhwJy5uDQoJCQkJCQkuJ30nLm4sDQoJ CSJjb2RlIiA9PiAnIyAtLS0gQkVHSU4gUExVR0lOIENPREUgLS0tJy5uDQoJCQkJCQkuJHZh bC5uDQoJCQkJCQkuJyMgLS0tIEVORCBQTFVHSU4gQ09ERSAtLS0nLm4sDQoJCSJwb3N0YW1i bGUiID0+ICc/PicsDQoJKTsNCg0KCXJldHVybiAoYXJyYXlfa2V5X2V4aXN0cygkcHJ0LCAk dGVtcGxhdGUpID8gJHRlbXBsYXRlWyRwcnRdIDogJycpOw0KfQ0KDQovLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpm dW5jdGlvbiBpZWRfcGx1Z2luX3VwbG9hZCgpIHsNCglnbG9iYWwgJGllZF9wbHVnaW5fZ2xv YmFsczsNCglsaXN0ICgkc3RhcnRfY3NzLCAkZW5kX2NzcykgPSBpZWRfcGx1Z2luX21ha2Vf bWFya2VycygiQ1NTIiwgJGllZF9wbHVnaW5fZ2xvYmFsc1snY3NzX3N0YXJ0J10sICRpZWRf cGx1Z2luX2dsb2JhbHNbJ2Nzc19lbmQnXSk7DQoNCglpZiAoISRfRklMRVNbJ3RoZWZpbGUn XVsndG1wX25hbWUnXSkgew0KCQlpZWRfcGx1Z2luX2xpc3QoaWVkX3BsdWdpbl9nVHh0KCdj aG9vc2VfZmlsZScpKTtyZXR1cm47DQoJfQ0KCSRwbHVnaW4gPSBpZWRfcGx1Z2luX3JlYWRf ZmlsZSgkX0ZJTEVTWyd0aGVmaWxlJ11bJ3RtcF9uYW1lJ10pOw0KLy8JJG5ld25hbWUgPSAo ZW1wdHkoJHBsdWdpblsnbmFtZSddKSkgPyBiYXNlbmFtZSgkX0ZJTEVTWyd0aGVmaWxlJ11b J25hbWUnXSwgJy5waHAnKSA6ICRwbHVnaW5bJ25hbWUnXTsNCgkkbmV3bmFtZSA9ICRwbHVn aW5bJ25hbWUnXTsNCglpZiAoZ3BzKCduYW1lJykgYW5kIGdwcygnbmFtZScpIT0neHh4X3h4 eHh4eCcpIHsNCgkJJG5ld25hbWU9Z3BzKCduYW1lJyk7DQoJfQ0KCWlmIChlbXB0eSgkcGx1 Z2luWydjb2RlJ10pKSB7DQoJCSRwbHVnaW5bJ2NvZGUnXSA9IGltcGxvZGUgKCIiLCBmaWxl KCRfRklMRVNbJ3RoZWZpbGUnXVsndG1wX25hbWUnXSkpOw0KCX0NCg0KCWlmIChNQUdJQ19R VU9URVNfR1BDKSB7DQoJCSRwbHVnaW4gPSBkb1N0cmlwKCRwbHVnaW4pOw0KCX0NCglleHRy YWN0KGRvU2xhc2goJHBsdWdpbikpOw0KCSRtZDU9bWQ1KCRjb2RlKTsNCgkkdmVyc2lvbiA9 IChlbXB0eSgkdmVyc2lvbikpID8gIjAuMSIgOiAkdmVyc2lvbjsNCgkkaGVscCA9ICRoZWxw LigoJGNzcykgPyBuLiRzdGFydF9jc3Mubi4kY3NzLm4uJGVuZF9jc3MgOiAnJyk7DQoJJGV4 aXN0cyA9IGZldGNoKCduYW1lJywndHhwX3BsdWdpbicsJ25hbWUnLCRuZXduYW1lKTsNCglp ZiAoJGV4aXN0cykgew0KCQkkc3RhdHVzID0gZmV0Y2goJ3N0YXR1cycsJ3R4cF9wbHVnaW4n LCduYW1lJywkbmV3bmFtZSk7DQoJCSRycyA9IHNhZmVfdXBkYXRlKA0KCQkJInR4cF9wbHVn aW4iLA0KCQkJInN0YXR1cyA9ICIuaW50dmFsKCRzdGF0dXMpLiIsDQoJCQl0eXBlID0gIi5p bnR2YWwoJHR5cGUpLiIsDQoJCQlhdXRob3IgPSAnJGF1dGhvcicsDQoJCQlhdXRob3JfdXJp ID0gJyRhdXRob3JfdXJpJywNCgkJCXZlcnNpb24gPSAnJHZlcnNpb24nLA0KCQkJZGVzY3Jp cHRpb24gPSAnJGRlc2NyaXB0aW9uJywNCgkJCWhlbHAgPSAnJGhlbHAnLA0KCQkJY29kZSA9 ICckY29kZScsDQoJCQljb2RlX3Jlc3RvcmUgPSAnJGNvZGUnLA0KCQkJY29kZV9tZDUgPSAn JG1kNScsDQoJCQlsb2FkX29yZGVyID0gIi5pbnR2YWwoJGxvYWRfb3JkZXIpLA0KCQkJIm5h bWUgPSAnJG5ld25hbWUnIg0KCQkpOw0KCX0gZWxzZSB7DQoJCSRycyA9IHNhZmVfaW5zZXJ0 KA0KCQkJInR4cF9wbHVnaW4iLA0KCQkJIm5hbWUgPSAnJG5ld25hbWUnLA0KCQkJc3RhdHVz ID0gMCwNCgkJCXR5cGUgPSAiLmludHZhbCgkdHlwZSkuIiwNCgkJCWF1dGhvciA9ICckYXV0 aG9yJywNCgkJCWF1dGhvcl91cmkgPSAnJGF1dGhvcl91cmknLA0KCQkJdmVyc2lvbiA9ICck dmVyc2lvbicsDQoJCQlkZXNjcmlwdGlvbiA9ICckZGVzY3JpcHRpb24nLA0KCQkJaGVscCA9 ICckaGVscCcsDQoJCQljb2RlID0gJyRjb2RlJywNCgkJCWNvZGVfcmVzdG9yZSA9ICckY29k ZScsDQoJCQljb2RlX21kNSA9ICckbWQ1JywNCgkJCWxvYWRfb3JkZXIgPSAiLmludHZhbCgk bG9hZF9vcmRlcikNCgkJKTsNCgl9DQoNCglwYWdldG9wKGdUeHQoJ2VkaXRfcGx1Z2lucycp LCBtZXNzZW5nZXIoJ3BsdWdpbicsJG5ld25hbWUsKCRleGlzdHMpPyd1cGRhdGVkJzondXBs b2FkZWQnKSk7DQoJZWNobyBpZWRfcGx1Z2luX2VkaXRfZm9ybSgkbmV3bmFtZSk7DQp9DQoN Ci8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0NCmZ1bmN0aW9uIGllZF9wbHVnaW5fcmVhZF9maWxlKCRmaWxlcGF0aCkg ew0KCSRjb250ZW50ID0gZmlsZSgkZmlsZXBhdGgpOw0KCSRqdXN0ZmlsZSA9IGJhc2VuYW1l KCRmaWxlcGF0aCk7DQoJJGV4dCA9IGFycmF5X3BvcChleHBsb2RlICgnLicsJGp1c3RmaWxl KSk7DQoJJGV4dCA9ICgkZXh0PT0kanVzdGZpbGUpID8gJycgOiAnLicuJGV4dDsgLy8gT25s eSBhc3NpZ24gYW4gZXh0ZW5zaW9uIGlmIG9uZSBleGlzdHMNCgkkc291cmNlX2xpbmVzID0g Y291bnQoJGNvbnRlbnQpOw0KCSRtZXRhZGF0YSA9IGFycmF5KA0KCQkJCQkJJ25hbWUnID0+ ICcnLA0KCQkJCQkJJ3ZlcnNpb24nID0+ICcnLA0KCQkJCQkJJ3JldmlzaW9uJyA9PiAnJywN CgkJCQkJCSdhdXRob3InID0+ICcnLA0KCQkJCQkJJ2F1dGhvcl91cmknID0+ICcnLA0KCQkJ CQkJJ2Rlc2NyaXB0aW9uJyA9PiAnJywNCgkJCQkJCSdvcmRlcicgPT4gJzUnLA0KCQkJCQkJ J3R5cGUnID0+ICcnLA0KCQkJCQkpOw0KCWZvciAoJGlkeD0wOyAkaWR4IDwgJHNvdXJjZV9s aW5lczsgJGlkeCsrKSB7DQoJCSRjb250ZW50WyRpZHhdID0gcnRyaW0oJGNvbnRlbnRbJGlk eF0pOw0KCQkvLyBCb21iIG91dCBpZiB3ZSByZWFjaCB0aGUgZW5kIG9mIHRoZSBkZWZpbml0 aW9uIGFyZWENCgkJaWYgKHN0cnBvcyggJGNvbnRlbnRbJGlkeF0sICdpZiAoIWRlZmluZWQn ICkgPT09IDApIHsNCgkJCWJyZWFrOw0KCQl9DQoJCWlmIChzdHJwb3MoJGNvbnRlbnRbJGlk eF0sICckcGx1Z2luWycpID09PSAwKSB7DQoJCQkvLyBGb3VuZCBhIHBsdWdpbiB2YXJpYWJs ZSBzbyBleHRyYWN0IGl0DQoJCQkkcGFydHMgPSBleHBsb2RlKCIgPSAiLCAkY29udGVudFsk aWR4XSk7DQoJCQkkcGFydHNbMF0gPSBzdHJfcmVwbGFjZSgiJyIsICIiLCAkcGFydHNbMF0p OyAvLyBNYWtlIHRoZSBtYXRjaCBlYXNpZXIhDQoJCQkkcGFydHNbMV0gPSBzdHJfcmVwbGFj ZSgiOyIsICIiLCAkcGFydHNbMV0pOyAvLyBEaXR0bw0KCQkJcHJlZ19tYXRjaCgiL3BsdWdp blxbKC4qKVxdLyIsICRwYXJ0c1swXSwgJHZhcik7IC8vIEV4dHJhY3QganVzdCB0aGUgdmFy aWFibGUgbmFtZQ0KCQkJaWYgKGlzX251bWVyaWMoJHBhcnRzWzFdKSkgew0KCQkJCSRwYXJ0 c1sxXSA9ICInIi4kcGFydHNbMV0uIiciOw0KCQkJfQ0KCQkJcHJlZ19tYXRjaCgiLy4qJygu KiknLiovIiwgJHBhcnRzWzFdLCAkdmFsKTsgLy8gUmVtb3ZlIGFueXRoaW5nIG91dHNpZGUg dGhlIHF1b3RlcyAoZS5nLiAkcmV2aXNpb24pDQoJCQlpZiAoJHZhclsxXSA9PSAncmV2aXNp b24nICYmICFlbXB0eSgkdmFsWzFdKSkgew0KCQkJCSRyZXZwYXJ0cyA9IGV4cGxvZGUoJyAn LCB0cmltKCR2YWxbMV0sICckICcpKTsNCgkJCQkkdmFsWzFdID0gJHJldnBhcnRzW2NvdW50 KCRyZXZwYXJ0cyktMV07DQoJCQkJJHZhbFsxXSA9IChlbXB0eSgkdmFsWzFdKSkgPyAnJyA6 ICcuJyAuJHZhbFsxXTsNCgkJCX0NCgkJCSRtZXRhZGF0YVskdmFyWzFdXSA9ICR2YWxbMV07 DQoJCX0NCgl9DQoNCgkkbWV0YWRhdGFbJ25hbWUnXSA9IChlbXB0eSgkbWV0YWRhdGFbJ25h bWUnXSkpID8gYmFzZW5hbWUoJGp1c3RmaWxlLCAkZXh0KSA6ICRtZXRhZGF0YVsnbmFtZSdd Ow0KCSRtZXRhZGF0YVsnbG9hZF9vcmRlciddID0gJG1ldGFkYXRhWydvcmRlciddOw0KCSRt ZXRhZGF0YVsndmVyc2lvbiddIC49ICRtZXRhZGF0YVsncmV2aXNpb24nXTsNCgkkbWV0YWRh dGFbJ2hlbHAnXSA9IGllZF9wbHVnaW5fZXh0cmFjdF9odW5rKCRjb250ZW50LCAnSEVMUCcp Ow0KCSRtZXRhZGF0YVsnY3NzJ10gID0gaWVkX3BsdWdpbl9leHRyYWN0X2h1bmsoJGNvbnRl bnQsICdDU1MnICk7DQoJJG1ldGFkYXRhWydjb2RlJ10gPSBpZWRfcGx1Z2luX2V4dHJhY3Rf aHVuaygkY29udGVudCwgJ0NPREUnKTsNCg0KCXJldHVybiAkbWV0YWRhdGE7DQp9DQoNCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0NCi8vIHJpcHBlZCBhbmQgbW9kZGVkIGZyb20gbmV0LWNhcnZlcidzIHplbV90 cGwgdGVtcGxhdGUNCmZ1bmN0aW9uIGllZF9wbHVnaW5fZXh0cmFjdF9odW5rKCRjb250ZW50 LCAkaHVuaywgJGNtbnQ9IiMiLCAkZGVsZXRlPWZhbHNlKSB7DQoJJGRsbSA9IGV4cGxvZGUo InwiLCAkY21udCk7DQoJJGRsbVN0YXJ0ID0gJGRsbVswXTsNCgkkZGxtRW5kID0gKGNvdW50 KCRkbG0pID4gMSkgPyAkZGxtWzFdIDogJyc7DQoJJGxpbmVzID0gaWVkX3BsdWdpbl9tYWtl X2FycmF5KCRjb250ZW50KTsNCg0KCWxpc3QgKCRzdGFydF9kZWxpbSwgJGVuZF9kZWxpbSkg PSBpZWRfcGx1Z2luX21ha2VfbWFya2VycygkaHVuaywgJGRsbVN0YXJ0LCAkZGxtRW5kKTsN Cgkkc3RhcnQgPSBhcnJheV9zZWFyY2goJHN0YXJ0X2RlbGltLCAkbGluZXMpICsgMTsNCgkk ZW5kID0gYXJyYXlfc2VhcmNoKCRlbmRfZGVsaW0sICRsaW5lcyk7DQoJJGV4dHJhY3RlZCA9 IGFycmF5KCk7DQoJaWYgKGNvdW50KCRsaW5lcykgPiAwICYmIGlzX251bWVyaWMoJHN0YXJ0 KSAmJiBpc19udW1lcmljKCRlbmQpICYmICRlbmQgPiAkc3RhcnQpIHsNCgkJJGV4dHJhY3Rl ZCA9IGFycmF5X3NsaWNlKCRsaW5lcywgJHN0YXJ0LCAkZW5kLSRzdGFydCk7DQoJCSRsaW5l TnVtID0gY291bnQoJGV4dHJhY3RlZCktMTsNCgkJd2hpbGUgKCRsaW5lTnVtID4gMCAmJiB0 cmltKCRleHRyYWN0ZWRbJGxpbmVOdW0tLV0pID09ICIiKSB7DQoJCQlhcnJheV9wb3AoJGV4 dHJhY3RlZCk7DQoJCX0NCgkJd2hpbGUgKGNvdW50KCRleHRyYWN0ZWQpID4gMCAmJiB0cmlt KCRleHRyYWN0ZWRbMF0pID09ICIiKSB7DQoJCQlhcnJheV9zaGlmdCgkZXh0cmFjdGVkKTsN CgkJfQ0KCQlpZiAoJGRlbGV0ZSkgew0KCQkJJGNob3BwZWQgPSBhcnJheV9zcGxpY2UoJGxp bmVzLCAkc3RhcnQtMSwgJGVuZC0kc3RhcnQrMiwgIiIpOw0KCQl9DQoJfQ0KCSRyZW1haW5z ID0gJGxpbmVzOw0KCS8vIENoZWNrIGlmIHRoZSBDU1Mgc2VjdGlvbiBoYXMgPHN0eWxlPiB0 YWdzIGFyb3VuZCBpdDsgYWRkIHRoZW0gaWYgbm90DQoJaWYgKCRodW5rID09ICJDU1MiKSB7 DQoJCSRudW1yb3dzID0gY291bnQoJGV4dHJhY3RlZCk7DQoJCWlmICgkbnVtcm93cyA+IDEp IHsNCgkJCWlmIChzdHJwb3MoJGV4dHJhY3RlZFskbnVtcm93cy0xXSwgJzwvc3R5bGU+Jykg PT09IGZhbHNlKSB7DQoJCQkJJGV4dHJhY3RlZFtdID0gJzwvc3R5bGU+JzsNCgkJCX0NCgkJ CWlmIChzdHJwb3MoJGV4dHJhY3RlZFswXSwgJzxzdHlsZSAnKSA9PT0gZmFsc2UpIHsNCgkJ CQlhcnJheV91bnNoaWZ0KCRleHRyYWN0ZWQsICc8c3R5bGUgdHlwZT0idGV4dC9jc3MiPicp Ow0KCQkJfQ0KCQl9DQoJfQ0KCWlmICgkZGVsZXRlKSB7DQoJCXJldHVybiBhcnJheSh0cmlt KGpvaW4oIlxuIiwgJGV4dHJhY3RlZCkpLCB0cmltKGpvaW4oIlxuIiwgJHJlbWFpbnMpKSk7 DQoJfSBlbHNlIHsNCgkJcmV0dXJuIHRyaW0oam9pbigiXG4iLCAkZXh0cmFjdGVkKSk7DQoJ fQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBpZWRfcGx1Z2luX21ha2VfYXJyYXkoJGFy cikgew0KCWlmICghaXNfYXJyYXkoJGFycikpIHsNCgkJJGFyciA9IGV4cGxvZGUoIlxuIiwg JGFycik7DQoJfQ0KCSRzb3VyY2VfbGluZXMgPSBjb3VudCgkYXJyKTsNCglmb3IgKCRpZHg9 MDsgJGlkeCA8ICRzb3VyY2VfbGluZXM7ICRpZHgrKykgew0KCQkkYXJyWyRpZHhdID0gcnRy aW0oJGFyclskaWR4XSk7DQoJfQ0KCXJldHVybiAkYXJyOw0KfQ0KDQovLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpm dW5jdGlvbiBpZWRfcGx1Z2luX21ha2VfbWFya2VycygkaHVuaywgJHN0YXJ0LCAkZW5kKSB7 DQoJZ2xvYmFsICRpZWRfcGx1Z2luX2dsb2JhbHM7DQoJJHNtYXJrZXIgPSAkc3RhcnQgLiBz dHJfcmVwbGFjZSgiU0VDVElPTiIsICRodW5rLCAkaWVkX3BsdWdpbl9nbG9iYWxzWydzdGFy dCddKSAuICgoJGVuZCk/JyAnLiRlbmQ6JycpOw0KCSRlbWFya2VyID0gJHN0YXJ0IC4gc3Ry X3JlcGxhY2UoIlNFQ1RJT04iLCAkaHVuaywgJGllZF9wbHVnaW5fZ2xvYmFsc1snZW5kJ10p IC4gKCgkZW5kKT8nICcuJGVuZDonJyk7DQoJcmV0dXJuIChhcnJheSgkc21hcmtlciwgJGVt YXJrZXIpKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gcmlwcGVkIGFuZCBtb2RkZWQgZnJvbSBu ZXQtY2FydmVyJ3MgemVtX3RwbCB0ZW1wbGF0ZQ0KZnVuY3Rpb24gaWVkX3BsdWdpbl9hZG1p bl9jaGVjaygkY29kZWJsb2NrLCAkdHlwZSkgew0KCS8vIFNob3J0IGNpcmN1aXQgc2luY2Ug d2UncmUgb25seSBpbnRlcmVzdGVkIGluIGNsaWVudCBwbHVnaW5zDQoJaWYgKCR0eXBlICE9 ICcwJyB8fCBzdHJwb3MoJGNvZGVibG9jaywgJ3R4cGludGVyZmFjZScpPT09ZmFsc2UpIHsN CgkJcmV0dXJuIHRydWU7DQoJfQ0KDQoJLy8gQmVsaWV2ZSBpdCBvciBub3QgdGhpcyBpcyBz ZXZlcmFsIG9yZGVycyBvZiBtYWduaXR1ZGUgcXVpY2tlciB0aGFuIGEgc2luZ2xlIHByZWdf bWF0Y2gNCgkkY2IgPSBzdHJfcmVwbGFjZShhcnJheSgnXHQnLCAnICcpLCAnJywgJGNvZGVi bG9jayk7DQoJJGNiID0gc3RyX3JlcGxhY2UoJz09PScsICc9PScsICRjYik7DQoJaWYgKHN0 cnBvcygkY2IsICd0eHBpbnRlcmZhY2U9PVwiYWRtaW4nKSkgcmV0dXJuIGZhbHNlOw0KCWlm IChzdHJwb3MoJGNiLCAidHhwaW50ZXJmYWNlPT1cJ2FkbWluIikpIHJldHVybiBmYWxzZTsN CglpZiAoc3RycG9zKCRjYiwgJ2FkbWluXCI9PXR4cGludGVyZmFjZScpKSByZXR1cm4gZmFs c2U7DQoJaWYgKHN0cnBvcygkY2IsICJhZG1pblwnPT10eHBpbnRlcmZhY2UiKSkgcmV0dXJu IGZhbHNlOw0KCWlmIChzdHJwb3MoJGNiLCAnYWRtaW5cIj09QHR4cGludGVyZmFjZScpKSBy ZXR1cm4gZmFsc2U7DQoJaWYgKHN0cnBvcygkY2IsICJhZG1pblwnPT1AdHhwaW50ZXJmYWNl IikpIHJldHVybiBmYWxzZTsNCglyZXR1cm4gdHJ1ZTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVu Y3Rpb24gaWVkX3BsdWdpbl90ZXh0aWxlKCRuYW1lLCAkaGVscCwgJGNzcywgJHN0YXJ0X2Rs bSwgJGVuZF9kbG0pIHsNCglnbG9iYWwgJHByZWZzOw0KDQoJJHRtcGRpciA9ICRobHBmaWxl ID0gJyc7DQoJJGNoYW5nZWQgPSB0cnVlOw0KCSRvdXQgPSBhcnJheSgpOw0KCWlmIChpc3Nl dCgkcHJlZnNbJ2llZF9wbHVnaW5fb3V0cHV0X3RtcGNhY2hlJ10pICYmICFlbXB0eSgkcHJl ZnNbJ2llZF9wbHVnaW5fb3V0cHV0X3RtcGNhY2hlJ10pICYmIGlzX3dyaXRhYmxlKCRwcmVm c1snaWVkX3BsdWdpbl9vdXRwdXRfdG1wY2FjaGUnXSkpIHsNCgkJJHRtcGRpciA9ICRwcmVm c1snaWVkX3BsdWdpbl9vdXRwdXRfdG1wY2FjaGUnXTsNCgkJJGNhY2hlID0gYnVpbGRfZmls ZV9wYXRoKCR0bXBkaXIsICdpZWRfcGx1Z2luX2NvbXBvc2VyLmNhY2hlJyk7DQoJCWlmICgh ZmlsZV9leGlzdHMoJGNhY2hlKSkgew0KCQkJdG91Y2goJGNhY2hlKTsgLy8gQ3JlYXRlIGZp bGUgaWYgaXQgZG9lc24ndCBleGlzdA0KICAgICAgfQ0KCQkkcGx1Z3MgPSBwYXJzZV9pbmlf ZmlsZSgkY2FjaGUpOw0KDQoJCSRvbGRfbWQ1ID0gKGFycmF5X2tleV9leGlzdHMoJG5hbWUs ICRwbHVncykpID8gJHBsdWdzWyRuYW1lXSA6ICcnOw0KCQkkY3Vycl9tZDUgPSBtZDUoJGhl bHApOw0KCQkkaGxwZmlsZSA9IGJ1aWxkX2ZpbGVfcGF0aCgkdG1wZGlyLCAkbmFtZS4nX2hl bHAudHh0bCcpOw0KCQlpZiAoJG9sZF9tZDUgPT0gJGN1cnJfbWQ1KSB7DQoJCQkkb3V0WzBd ID0gZmlsZV9nZXRfY29udGVudHMoJGhscGZpbGUpOw0KCQkJJGNoYW5nZWQgPSBmYWxzZTsN CgkJfSBlbHNlIHsNCgkJCSRwbHVnc1skbmFtZV0gPSAkY3Vycl9tZDU7DQoJCQkkZmQgPSBm b3BlbigkY2FjaGUsICJ3Iik7DQoJCQlmb3JlYWNoICgkcGx1Z3MgYXMgJGlkeCA9PiAkdmFs KSB7DQoJCQkJZndyaXRlKCRmZCwgJGlkeC4nID0gJy4kdmFsLm4pOw0KCQkJfQ0KCQkJZmNs b3NlKCRmZCk7DQoJCX0NCiAgIH0NCg0KCWlmICghJG91dCkgew0KCQlAaW5jbHVkZV9vbmNl IHR4cGF0aC4nL2xpYi9jbGFzc1RleHRpbGUucGhwJzsNCgkJJG91dFswXSA9ICRoZWxwOw0K CQlpZiAoY2xhc3NfZXhpc3RzKCdUZXh0aWxlJykpIHsNCgkJCS8vIFRyeSBhbmQgYmUgYSBs aXR0bGUgbW9yZSBpbnRlbGxpZ2VudCBhYm91dCBhcHBseWluZyB0ZXh0aWxlIG9yIG5vdA0K CQkJJHJlID0gJy9oWzAtNl0oXCguKlwpKT9cLi8nOw0KCQkJaWYgKHByZWdfbWF0Y2goJHJl LCAkaGVscCkpIHsNCgkJCQkkdGV4dGlsZSA9IG5ldyBUZXh0aWxlKCk7DQoJCQkJJG91dFsw XSA9ICR0ZXh0aWxlLT5UZXh0aWxlVGhpcygkaGVscCk7DQoJCQl9DQoJCX0NCgl9DQoNCglp ZiAoJHRtcGRpciAmJiAkY2hhbmdlZCkgew0KCQlpZiAoIWZpbGVfZXhpc3RzKCRobHBmaWxl KSkgew0KCQkJdG91Y2goJGhscGZpbGUpOw0KICAgICAJfQ0KCQkkZmQgPSBmb3BlbigkaGxw ZmlsZSwgInciKTsNCgkJZndyaXRlKCRmZCwgJG91dFswXSk7DQoJCWZjbG9zZSgkZmQpOw0K CX0NCg0KCS8vIFJlcGxhY2UgdGhlIHRyaXBsZSAnLS0tJyBpbiB0aGUgZGVsaW1pdGVycyBz byB0aGUgaGVscCBmaWxlIGNhbiB2YWxpZGF0ZQ0KCSRzdGFydF9kbG0gPSBzdHJfcmVwbGFj ZSgnLS0tJywgJyoqKicsICRzdGFydF9kbG0pOw0KCSRlbmRfZGxtID0gc3RyX3JlcGxhY2Uo Jy0tLScsICcqKionLCAkZW5kX2RsbSk7DQoJJG91dFsxXSA9ICgkY3NzKSA/ICJcbiRzdGFy dF9kbG1cbiRjc3NcbiRlbmRfZGxtXG4iIDogJyc7DQoJcmV0dXJuIHN1YnN0cihqb2luKCcn LCAkb3V0KSwgMCwgNjU1MzUpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBpZWRfaW5z ZXJ0X2VkaXRvcnMoKSB7DQoJZ2xvYmFsICRwcmVmcywgJGllZF9wbHVnaW5fcHJlZnM7DQoJ JG91dCA9IGFycmF5KCk7DQoNCgkkcHJlZmtleXMgPSBkb1F1b3RlKGltcGxvZGUoIicsJyIs YXJyYXlfa2V5cygkaWVkX3BsdWdpbl9wcmVmc1swXSkpKTsNCgkkcnMgPSBzYWZlX3Jvd3Mo J25hbWUsdmFsLGh0bWwnLCd0eHBfcHJlZnMnLCduYW1lIGluICgnLiRwcmVma2V5cy4nKScp Ow0KCWlmIChjb3VudCgkcnMpID09IGNvdW50KCRpZWRfcGx1Z2luX3ByZWZzWzBdKSkgew0K CQkkZWQgPSBhcnJheSgpOw0KCQkkZWRbJHByZWZzWydpZWRfcGx1Z2luX2VkaXRvciddXSA9 ICRwcmVmc1snaWVkX3BsdWdpbl9lZGl0b3JfcGF0aCddOw0KCQkkZWRbJHByZWZzWydpZWRf cGx1Z2luX2hlbHBfZWRpdG9yJ11dID0gJHByZWZzWydpZWRfcGx1Z2luX2hlbHBfZWRpdG9y X3BhdGgnXTsNCg0KCQlmb3JlYWNoICgkZWQgYXMgJGVkaXRvciA9PiAkZWRpdG9yX2Rpcikg ew0KCQkJc3dpdGNoICgkZWRpdG9yKSB7DQoJCQkJY2FzZSAidGlueV9tY2UiOg0KCQkJCQkk b3V0W10gPSA8PDxFT0YNCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Iicu JGVkaXRvcl9kaXIuJy90aW55X21jZS5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHR5cGU9InRl eHQvamF2YXNjcmlwdCI+DQoJdGlueU1DRS5pbml0KHsNCgkJbW9kZSA6ICJzcGVjaWZpY190 ZXh0YXJlYXMiLA0KCQllZGl0b3Jfc2VsZWN0b3IgOiAibWNlRWRpdG9yIiwNCgkJdGhlbWVf YWR2YW5jZWRfdG9vbGJhcl9sb2NhdGlvbiA6ICJ0b3AiLA0KCQl0aGVtZV9hZHZhbmNlZF9i dXR0b25zMSA6ICJib2xkLGl0YWxpYyx1bmRlcmxpbmUsc3RyaWtldGhyb3VnaCxmb3JlY29s b3IsYmFja2NvbG9yLHJlbW92ZWZvcm1hdCxudW1saXN0LGJ1bGxpc3Qsb3V0ZGVudCxpbmRl bnQsanVzdGlmeWxlZnQsanVzdGlmeWNlbnRlcixqdXN0aWZ5cmlnaHQsanVzdGlmeWZ1bGwi LA0KCQl0aGVtZV9hZHZhbmNlZF9idXR0b25zMiA6ICJsaW5rLHVubGluayxzZXBhcmF0b3Is aWJyb3dzZXIsc2VwYXJhdG9yLHNlYXJjaCxyZXBsYWNlLHNlcGFyYXRvcixjdXQsY29weSxw YXN0ZSxzZXBhcmF0b3IsY29kZSxzZXBhcmF0b3IsZm9ybWF0c2VsZWN0IiwNCgkJdGhlbWVf YWR2YW5jZWRfYnV0dG9uczMgOiAiIg0KCX0pOw0KPC9zY3JpcHQ+Ow0KRU9GOw0KCQkJCQli cmVhazsNCgkJCQljYXNlICJlZGl0X2FyZWEiOg0KCQkJCQkkb3V0W10gPSA8PDxFT0YNCjxz Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IiRlZGl0b3JfZGlyL2VkaXRfYXJl YV9mdWxsLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4N CgkvLyBpbml0aWFsaXNhdGlvbg0KCWVkaXRBcmVhTG9hZGVyLmluaXQoew0KCQlpZDogInBs dWdpbl9lZGl0b3IiCS8vIGlkIG9mIHRoZSB0ZXh0YXJlYSB0byB0cmFuc2Zvcm0NCgkJLHN0 YXJ0X2hpZ2hsaWdodDogdHJ1ZQkvLyBpZiBzdGFydCB3aXRoIGhpZ2hsaWdodA0KCQksYWxs b3dfcmVzaXplOiAiYm90aCINCgkJLGFsbG93X3RvZ2dsZTogdHJ1ZQ0KCQksbGFuZ3VhZ2U6 ICJlbiINCgkJLHN5bnRheDogInBocCINCgl9KTsNCjwvc2NyaXB0Pg0KRU9GOw0KCQkJCQli cmVhazsNCgkJCQljYXNlICJjb2RlcHJlc3MiOg0KCQkJCQkkb3V0W10gPSAnPHNjcmlwdCB0 eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJy4kZWRpdG9yX2Rpci4nL2NvZGVwcmVzcy5q cyI+PC9zY3JpcHQ+JzsNCgkJCQkJYnJlYWs7DQoJCQl9DQoJCX0NCgl9DQoNCglyZXR1cm4g aW1wbG9kZSgiXG4iLCAkb3V0KTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gaWVkX3Bs dWdpbl9oZWxwX3ZpZXdlcigkbWVzc2FnZT0nJykgew0KCWdsb2JhbCAkcHJlZnMsICRpZWRf cGx1Z2luX2dsb2JhbHM7DQoJcGFnZXRvcChnVHh0KCdlZGl0X3BsdWdpbnMnKSwkbWVzc2Fn ZSk7DQoNCglpZiAoZ3BzKCduYW1lJykpIHsNCgkJJG5hbWUgPSBncHMoJ25hbWUnKTsNCgkJ JGhlbHAgPSAoJG5hbWUpID8gZmV0Y2goJ2hlbHAnLCd0eHBfcGx1Z2luJywnbmFtZScsJG5h bWUpIDogJyc7DQoJCWxpc3QoJGNzcywkaGVscCkgPSAoJGhlbHApID8gaWVkX3BsdWdpbl9l eHRyYWN0X2h1bmsoJGhlbHAsICJDU1MiLCAiPCEtLXwtLT4iLCB0cnVlKSA6IGFycmF5KCcn LCRoZWxwKTsNCgl9IGVsc2UgaWYgKGdwcygnZmlsZW5hbWUnKSkgew0KCQkkcGx1Z2luPWll ZF9wbHVnaW5fcmVhZF9maWxlKCRwcmVmc1sncGx1Z2luX2NhY2hlX2RpciddLkRTLmdwcygn ZmlsZW5hbWUnKSk7DQoJCWV4dHJhY3QoJHBsdWdpbik7DQoJfQ0KCWVjaG8gc3RhcnRUYWJs ZSgnZWRpdCcpOw0KCWlmIChlbXB0eSgkaGVscCkpIHsNCgkJZWNobyB0cih0ZGEoJzxwPkhl bHAgbm90IGFjY2Vzc2libGUgZnJvbSB0aGlzIGZpbGUuPC9wPicpKTsNCgl9IGVsc2Ugew0K CQlsaXN0ICgkc3RhcnRfY3NzLCAkZW5kX2NzcykgPSBpZWRfcGx1Z2luX21ha2VfbWFya2Vy cygiQ1NTIiwgJGllZF9wbHVnaW5fZ2xvYmFsc1snY3NzX3N0YXJ0J10sICRpZWRfcGx1Z2lu X2dsb2JhbHNbJ2Nzc19lbmQnXSk7DQoJCSRwbHVnaW5bJ2hlbHAnXSA9IGllZF9wbHVnaW5f dGV4dGlsZSgkbmFtZSwgJGhlbHAsICRjc3MsICRzdGFydF9jc3MsICRlbmRfY3NzKTsNCgkJ ZWNobyB0cih0ZGEoICc8cD5FeHRyYWN0ZWQgJy4oIWVtcHR5KCRwbHVnaW5bJ2hlbHAnXSkg PyAnYW5kIFRleHRpbGUgcHJvY2Vzc2VkJyA6ICcnKS4nIGhlbHAgc2VjdGlvbiBmb2xsb3dz JiM4MjMwOzwvcD48aHI+JywgJyB3aWR0aD0iNjAwIicpKTsNCgkJZWNobyB0cih0ZGEoJHBs dWdpblsnaGVscCddLCAnIHdpZHRoPSI2MDAiJykpOw0KCX0NCgllY2hvIGVuZFRhYmxlKCk7 DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIGllZF9wbHVnaW5fc2V0dXAoJG1lc3NhZ2U9 JycpIHsNCglnbG9iYWwgJGllZF9wbHVnaW5fcHJlZnM7DQoJJG51bVJlcVByZWZzID0gY291 bnQoJGllZF9wbHVnaW5fcHJlZnNbMF0pOw0KDQoJcGFnZXRvcChnVHh0KCdlZGl0X3BsdWdp bnMnKSwkbWVzc2FnZSk7DQoJJHByZWZrZXlzID0gZG9RdW90ZShpbXBsb2RlKCInLCciLGFy cmF5X2tleXMoJGllZF9wbHVnaW5fcHJlZnNbMF0pKSk7DQoJJHJzID0gc2FmZV9yb3dzKCdu YW1lLHZhbCxodG1sJywndHhwX3ByZWZzJywnbmFtZSBpbiAoJy4kcHJlZmtleXMuJyknKTsN CgkkbnVtUm93cyA9IGNvdW50KCRycyk7DQoNCgkkYnRuU2F2ZSA9IGZJbnB1dCgnc3VibWl0 JywgJ3N1Ym1pdCcsIGdUeHQoJ3NhdmUnKSwgJ3B1Ymxpc2gnKTsNCgkkYnRuSW5zdGFsbCA9 ICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iP2V2ZW50PWllZF9wbHVnaW5fY29tcG9z ZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9wcmVmc19pbnN0YWxsIiBzdHlsZT0iZGlzcGxheTpp bmxpbmUiPicuZklucHV0KCdzdWJtaXQnLCAnc3VibWl0JywgZ1R4dCgnaW5zdGFsbCcpLCAn cHVibGlzaCcpLic8L2Zvcm0+JzsNCgkkYnRuUmVtb3ZlID0gJzxmb3JtIG1ldGhvZD0icG9z dCIgYWN0aW9uPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1 Z2luX3ByZWZzX3JlbW92ZSIgc3R5bGU9ImRpc3BsYXk6aW5saW5lIj4nLmZJbnB1dCgnc3Vi bWl0JywgJ3N1Ym1pdCcsIGdUeHQoJ2RlbGV0ZScpLCAncHVibGlzaCcpLic8L2Zvcm0+JzsN CgkkYnRuU3R5bGUgPSAnIHN0eWxlPSJib3JkZXI6MDtoZWlnaHQ6MjVweCInOw0KDQoJZWNo byBzdGFydFRhYmxlKCdsaXN0Jyk7DQoJaWYgKCRudW1Sb3dzID09ICRudW1SZXFQcmVmcykg ew0KCQkvLyBQcmVmcyBhbGwgaW5zdGFsbGVkDQoJCWVjaG8gdHIodGRhKHN0cm9uZyhpZWRf cGx1Z2luX2dUeHQoJ3ByZWZzX3RpdGxlJykpLCAnIGNvbHNwYW49IjIiJykgLiB0ZGEoJGJ0 blJlbW92ZSwgJGJ0blN0eWxlKSApOw0KCQllY2hvICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFj dGlvbj0iP2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9w cmVmc191cGRhdGUiPic7DQoJCWZvciAoJGlkeCA9IDA7ICRpZHggPCAkbnVtUm93czsgJGlk eCsrKSB7DQoJCQkkYSA9ICRyc1skaWR4XTsNCgkJCSRsYWJlbCA9ICc8bGFiZWwgZm9yPSIn LiRhWyduYW1lJ10uJyI+Jy5pZWRfcGx1Z2luX2dUeHQoJGFbJ25hbWUnXSkuJzo8L2xhYmVs Pic7DQoJCQkkb3V0ID0gdGRhKCRsYWJlbCwgJyBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7 IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IicpOw0KCQkJc3dpdGNoKCRhWyduYW1lJ10pIHsN CgkJCQljYXNlICJpZWRfcGx1Z2luX2VkaXRvcl9wYXRoIjoNCgkJCQljYXNlICJpZWRfcGx1 Z2luX2hlbHBfZWRpdG9yX3BhdGgiOg0KCQkJCWNhc2UgImllZF9wbHVnaW5fb3V0cHV0X3Nm aWxlIjoNCgkJCQljYXNlICJpZWRfcGx1Z2luX291dHB1dF9zZmlsZWMiOg0KCQkJCWNhc2Ug ImllZF9wbHVnaW5fb3V0cHV0X3NmaWxlcCI6DQoJCQkJY2FzZSAiaWVkX3BsdWdpbl9vdXRw dXRfdG1wY2FjaGUiOg0KCQkJCQkkb3V0IC49IHRkKGZJbnB1dCgndGV4dCcsICRhWyduYW1l J10sICRhWyd2YWwnXSwgJ2VkaXQnLCAnJywgJycsIDUwLCAnJywgJGFbJ25hbWUnXSkpOw0K CQkJCQlicmVhazsNCgkJCQljYXNlICJpZWRfcGx1Z2luX2VkaXRvciI6DQovLwkJCQkJJG91 dCAuPSB0ZChzZWxlY3RJbnB1dCgkYVsnbmFtZSddLCBhcnJheSgnbm9uZScgPT4gJ05vbmUn LCAnZWRpdF9hcmVhJyA9PiAnRWRpdCBBcmVhJywgJ2NvZGVwcmVzcycgPT4gJ0NvZGVQcmVz cycpLCAkYVsndmFsJ10sICcnLCAnIG9uY2hhbmdlPSJpZWRfcGx1Z2luX3ByZWZzd2FwKHRo aXMuaWQsIHRoaXMudmFsdWUpOyInLCAkYVsnbmFtZSddKSk7DQoJCQkJCSRvdXQgLj0gdGQo c2VsZWN0SW5wdXQoJGFbJ25hbWUnXSwgYXJyYXkoJ25vbmUnID0+ICdOb25lJywgJ2VkaXRf YXJlYScgPT4gJ0VkaXQgQXJlYScpLCAkYVsndmFsJ10sICcnLCAnIG9uY2hhbmdlPSJpZWRf cGx1Z2luX3ByZWZzd2FwKHRoaXMuaWQsIHRoaXMudmFsdWUpOyInLCAkYVsnbmFtZSddKSk7 DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgImllZF9wbHVnaW5faGVscF9lZGl0b3IiOg0KCQkJ CQkkb3V0IC49IHRkKHNlbGVjdElucHV0KCRhWyduYW1lJ10sIGFycmF5KCd0ZXh0aWxlJyA9 PiAnTm9uZSAoVGV4dGlsZSknLCAndGlueV9tY2UnID0+ICdUaW55IE1DRScpLCAkYVsndmFs J10sICcnLCAnIG9uY2hhbmdlPSJpZWRfcGx1Z2luX3ByZWZzd2FwKHRoaXMuaWQsIHRoaXMu dmFsdWUpOyInLCAkYVsnbmFtZSddKSk7DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgImllZF9w bHVnaW5fb3V0cHV0X29yZGVyIjoNCgkJCQkJJG91dCAuPSB0ZChyYWRpbygkYVsnbmFtZSdd LDAsKCgkYVsndmFsJ109PTApPzE6MCkpLmllZF9wbHVnaW5fZ1R4dCgnb3V0cHV0X2NvZGVf Zmlyc3QnKS4iICIgLiByYWRpbygkYVsnbmFtZSddLDEsKCgkYVsndmFsJ109PTEpPzE6MCkp LmllZF9wbHVnaW5fZ1R4dCgnb3V0cHV0X2hlbHBfZmlyc3QnKS4iICIpOw0KCQkJCQlicmVh azsNCgkJCQljYXNlICJpZWRfcGx1Z2luX2VkaXRvcl93aWR0aCI6DQoJCQkJCSRvdXQgLj0g dGQoZklucHV0KCd0ZXh0JywgJGFbJ25hbWUnXSwgJGFbJ3ZhbCddLCAnZWRpdCcsICcnLCAn JywgNSwgJycsICRhWyduYW1lJ10pKTsNCgkJCQkJYnJlYWs7DQoJCQl9DQoJCQllY2hvIHRy KCRvdXQpOw0KCQl9DQoJCWVjaG8gdHIodGRhKCRidG5TYXZlLCAkYnRuU3R5bGUpKTsNCgkJ ZWNobyAnPC9mb3JtPic7DQoJfSBlbHNlIGlmICgkbnVtUm93cyA+IDAgJiYgJG51bVJvd3Mg PCAkbnVtUmVxUHJlZnMpIHsNCgkJZWNobyB0cih0ZGEoc3Ryb25nKGllZF9wbHVnaW5fZ1R4 dCgncHJlZnNfc29tZScpKS5ici5icg0KCQkJCQkJLmllZF9wbHVnaW5fZ1R4dCgncHJlZnNf c29tZV9leHBsYWluJykuYnIuYnINCgkJCQkJCS5pZWRfcGx1Z2luX2dUeHQoJ3ByZWZzX3Nv bWVfb3B0aW9ucycpLCAnIGNvbHNwYW49IjIiJykpOw0KCQllY2hvIHRyKHRkYSgkYnRuUmVt b3ZlLCRidG5TdHlsZSkgLiB0ZGEoJGJ0bkluc3RhbGwsICRidG5TdHlsZSkpOw0KCX0gZWxz ZSB7DQoJCWVjaG8gdHIodGRhKGllZF9wbHVnaW5fZ1R4dCgncHJlZnNfbm90X2luc3RhbGxl ZCcpLCAnIGNvbHNwYW49IjIiJykpOw0KCQllY2hvIHRyKHRkYSgkYnRuSW5zdGFsbCwgJGJ0 blN0eWxlKSk7DQoJfQ0KCWVjaG8gZW5kVGFibGUoKTsNCg0KCWVjaG8gPDw8RU9GDQo8c2Ny aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQp2YXIgaWVkX3BsdWdpbl9wYXRoX3JlID0g bmV3IFJlZ0V4cCgiXi4qWy9cXF0iLCAiZyIpDQpmdW5jdGlvbiBpZWRfcGx1Z2luX3ByZWZz d2FwKHNlbElELCBzZWxWYWx1ZSkgew0KCXZhciBpZCA9IHNlbElEKydfcGF0aCc7DQoJdmFy IG51dmFsID0gKChiYXNlbmFtZSgkKCIjIitpZCkudmFsKCkpID09IHNlbFZhbHVlKSA/ICQo IiMiK2lkKS52YWwoKSA6IGRpcm5hbWUoJCgiIyIraWQpLnZhbCgpKStzZWxWYWx1ZSk7DQoJ aWYgKCQoIiMiK3NlbElEKVswXS5zZWxlY3RlZEluZGV4ID09IDApIHsNCgkJJCgiIyIraWQp LmF0dHIoImRpc2FibGVkIiwgdHJ1ZSk7IDsNCgl9IGVsc2Ugew0KCQkkKCIjIitpZCkuYXR0 cigiZGlzYWJsZWQiLCBmYWxzZSk7IDsNCgkJJCgiIyIraWQpLnZhbChudXZhbCk7DQoJfQ0K fQ0KZnVuY3Rpb24gYmFzZW5hbWUocGF0aCwgc3VmZml4KSB7DQoJcmV0dXJuIHBhdGgucmVw bGFjZShpZWRfcGx1Z2luX3BhdGhfcmUsICcnKTsNCn0NCmZ1bmN0aW9uIGRpcm5hbWUocGF0 aCkgew0KCXJldHVybiBwYXRoLm1hdGNoKGllZF9wbHVnaW5fcGF0aF9yZSk7DQp9DQokKGZ1 bmN0aW9uKCkgew0KCSQoInNlbGVjdC5saXN0IikuZWFjaChmdW5jdGlvbigpIHsNCgkJaWVk X3BsdWdpbl9wcmVmc3dhcCh0aGlzLmlkLCB0aGlzLnZhbHVlKTsNCgl9KTsNCn0pOw0KPC9z Y3JpcHQ+DQpFT0Y7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIGllZF9wbHVnaW5fcHJl ZnNfaW5zdGFsbCgpIHsNCglnbG9iYWwgJGllZF9wbHVnaW5fcHJlZnM7DQoJJG1lc3NhZ2Ug PSAnJzsNCglmb3JlYWNoICgkaWVkX3BsdWdpbl9wcmVmc1swXSBhcyAkcHJlZiA9PiAkZGZs dCkgew0KCQlpZiAoIWZldGNoKCduYW1lJywndHhwX3ByZWZzJywnbmFtZScsJHByZWYpKSB7 DQoJCQkkaWQgPSBzYWZlX2luc2VydCgndHhwX3ByZWZzJywncHJlZnNfaWQ9MSwgbmFtZT0n LmRvUXVvdGUoZG9TbGFzaCgkcHJlZikpLicsIHZhbD0nLmRvUXVvdGUoZG9TbGFzaCgkZGZs dCkpLicsZXZlbnQ9ImllZF9wbHVnaW4iJyk7DQoJCX0NCgl9DQoJJG1lc3NhZ2UgPSBpZWRf cGx1Z2luX2dUeHQoJ3ByZWZzX2luc3RhbGxlZCcpOw0KCWllZF9wbHVnaW5fc2V0dXAoJG1l c3NhZ2UpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBpZWRfcGx1Z2luX3ByZWZzX3Jl bW92ZSgpIHsNCglnbG9iYWwgJGllZF9wbHVnaW5fcHJlZnM7DQoJJG1lc3NhZ2UgPSAnJzsN Cglmb3JlYWNoIChhcnJheV9tZXJnZSgkaWVkX3BsdWdpbl9wcmVmc1swXSwkaWVkX3BsdWdp bl9wcmVmc1sxXSkgYXMgJHByZWYgPT4gJGRmbHQpIHsNCgkJaWYgKGZldGNoKCduYW1lJywn dHhwX3ByZWZzJywnbmFtZScsJHByZWYpKSB7DQoJCQkkaWQgPSBzYWZlX2RlbGV0ZSgndHhw X3ByZWZzJywnbmFtZT0nLmRvUXVvdGUoZG9TbGFzaCgkcHJlZikpKTsNCgkJfQ0KCX0NCgkk bWVzc2FnZSA9IGllZF9wbHVnaW5fZ1R4dCgncHJlZnNfZGVsZXRlZCcpOw0KCWllZF9wbHVn aW5fc2V0dXAoJG1lc3NhZ2UpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBpZWRfcGx1 Z2luX3ByZWZzX3VwZGF0ZSgpIHsNCglnbG9iYWwgJGllZF9wbHVnaW5fcHJlZnM7DQoJJG1l c3NhZ2UgPSAnJzsNCgkkcG9zdCA9IGRvU2xhc2goc3RyaXBQb3N0KCkpOw0KCWZvcmVhY2gg KCRpZWRfcGx1Z2luX3ByZWZzWzBdIGFzICRwcmVmID0+ICRkZmx0KSB7DQoJCWlmIChpc3Nl dCgkcG9zdFskcHJlZl0pKSB7DQoJCQlzYWZlX3VwZGF0ZSgidHhwX3ByZWZzIiwgInZhbCA9 ICciLiRwb3N0WyRwcmVmXS4iJyIsICJuYW1lID0gJyIuZG9TbGFzaCgkcHJlZikuIicgYW5k IHByZWZzX2lkID0gMSIpOw0KCQl9DQoJfQ0KCSRtZXNzYWdlID0gZ1R4dCgncHJlZmVyZW5j ZXNfc2F2ZWQnKTsNCglpZWRfcGx1Z2luX3NldHVwKCRtZXNzYWdlKTsNCn0NCg0KLy8gQm9v byEgc2FuaXRpemVGb3JGaWxlKCkgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBjb3JlIHNv IGR1cGxpY2F0ZSBpdHMgZnVuY3Rpb25hbGl0eQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoInNt ZF9zYW5pdGl6ZUZvckZpbGUiKSkgew0KZnVuY3Rpb24gc21kX3Nhbml0aXplRm9yRmlsZSgk bmFtZSkgew0KCSRuZXduYW1lID0gcHJlZ19yZXBsYWNlKCcvW1x4MDAtXHgxZlx4MjJceDJh XHgyZlx4M2FceDNjXHgzZVx4M2ZceDVjXHg3Y1x4N2ZdKy8nLCAnJywgJG5hbWUpOw0KCSRu ZXduYW1lID0gcHJlZ19yZXBsYWNlKCcvWy5dezIsfS8nLCAnLicsIHRyaW0oJG5ld25hbWUs ICcuICcpKTsNCglyZXR1cm4gJG5ld25hbWU7DQp9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0 aW9uIGllZF9wbHVnaW5fZ1R4dCgkd2hhdCwgJGF0dHMgPSBhcnJheSgpKSB7DQoJJGxhbmcg PSBhcnJheSgNCgkJJ2NhY2hlX25vdF9zZXQnID0+ICdBZHZhbmNlZCBwcmVmICJwbHVnaW4g Y2FjaGUgZGlyZWN0b3J5IiBub3QgZGVmaW5lZCcsDQoJCSdjaGVja190eXBlJyA9PiAnQ2hl Y2sgeW91ciBwbHVnaW4gdHlwZSEnLA0KCQknY2hvb3NlX2ZpbGUnID0+ICdZb3UgYXJlIHN1 cHBvc2VkIHRvIGNob29zZSB0aGUgZmlsZSA7KScsDQoJCSdjb2RlX2Rpc3QnID0+ICdQbHVn aW4gY29kZTxicj5mb3IgZGlzdHJpYnV0aW9uJywNCgkJJ2llZF9wbHVnaW5fY29tcG9zZXIn ID0+ICdQbHVnaW4gQ29tcG9zZXInLA0KCQknY29tcHJlc3MnID0+ICdaaXAnLA0KCQknY3Jl YXRlX25ldycgPT4gJ0NyZWF0ZSBuZXcgcGx1Z2luJywNCgkJJ2VkaXRfbmV3JyA9PiAnRWRp dCB5b3VyIG5ldyBwbHVnaW4nLA0KCQknZW5hYmxlJyA9PiAnRW5hYmxlZCcsDQoJCSdleHBv cnQnID0+ICdFeHBvcnQgYXMnLA0KCQknaWVkX3BsdWdpbl9lZGl0b3InID0+ICdQbHVnaW4g ZWRpdG9yJywNCgkJJ2llZF9wbHVnaW5fZWRpdG9yX3BhdGgnID0+ICdQbHVnaW4gZWRpdG9y IHBhdGggVVJMJywNCgkJJ2llZF9wbHVnaW5fZWRpdG9yX3dpZHRoJyA9PiAnUGx1Z2luIGVk aXRvciB3aWR0aCAoY2hhcnMpJywNCgkJJ2llZF9wbHVnaW5faGVscF9lZGl0b3InID0+ICdI ZWxwIGVkaXRvcicsDQoJCSdpZWRfcGx1Z2luX2hlbHBfZWRpdG9yX3BhdGgnID0+ICdIZWxw IGVkaXRvciBwYXRoIFVSTCcsDQoJCSdpZWRfcGx1Z2luX291dHB1dF9vcmRlcicgPT4gJ1BI UCBleHBvcnQgb3JkZXInLA0KCQknaWVkX3BsdWdpbl9vdXRwdXRfc2ZpbGUnID0+ICdFeHBv cnQgcGx1Z2luIGZpbGVuYW1lIGZvcm1hdCcsDQoJCSdpZWRfcGx1Z2luX291dHB1dF9zZmls ZWMnID0+ICdFeHBvcnQgY29tcHJlc3NlZCBmaWxlbmFtZSBmb3JtYXQnLA0KCQknaWVkX3Bs dWdpbl9vdXRwdXRfc2ZpbGVwJyA9PiAnUGx1Z2luIHRlbXBsYXRlIGZpbGVuYW1lIGZvcm1h dCcsDQoJCSdpZWRfcGx1Z2luX291dHB1dF90bXBjYWNoZScgPT4gJ0NhY2hlIHRleHRpbGVk IGhlbHAgaGVyZScsDQoJCSduYW1lJyA9PiAnUGx1Z2luIG5hbWUnLA0KCQknbmFtZV9maXJz dCcgPT4gJ1lvdSBhcmUgc3VwcG9zZWQgdG8gbmFtZSB0aGUgcGx1Z2luIDspJywNCgkJJ25h bWVfdG9vbHRpcCcgPT4gJ09ubHkgbmVlZGVkIGlmIHRoZSBQSFAgZmlsZSB5b3UgYXJlIHVw bG9hZGluZyBpcyBOT1QgaW4gdGhlIHN0YW5kYXJkIHRlbXBsYXRlIGZvcm1hdCcsDQoJCSds b2FkX29yZGVyJyA9PiAnTG9hZCBvcmRlcicsDQoJCSdsb2FkX29yZGVyX2hlbHAnID0+ICco MT1maXJzdCwgNT1ub3JtYWwsIDk9bGFzdCknLA0KCQknb3V0cHV0X2NvZGVfZmlyc3QnID0+ ICdDb2RlIGZpcnN0JywNCgkJJ291dHB1dF9oZWxwX2ZpcnN0JyA9PiAnSGVscCBmaXJzdCcs DQoJCSdwbHVnaW5fY29kZScgPT4gJ1NvdXJjZSBjb2RlJywNCgkJJ3ByZWZzX2RlbGV0ZWQn ID0+ICdQcmVmZXJlbmNlcyBkZWxldGVkJywNCgkJJ3ByZWZzX2luc3RhbGxlZCcgPT4gJ1By ZWZlcmVuY2VzIGluc3RhbGxlZCcsDQoJCSdwcmVmc19ub3RfaW5zdGFsbGVkJyA9PiAnUHJl ZmVyZW5jZXMgbm90IGluc3RhbGxlZC4nLA0KCQkncHJlZnNfc29tZScgPT4gJ05vdCBhbGwg cHJlZmVyZW5jZXMgYXZhaWxhYmxlLicsDQoJCSdwcmVmc19zb21lX2V4cGxhaW4nID0+ICdJ dCBpcyBlaXRoZXIgYmVjYXVzZSB0aGlzIGlzIGEgZGlmZmVyZW50IHZlcnNpb24gb2YgdGhl Jy5ici4ncGx1Z2luIHRvIG9uZSB5b3UgaGFkIGJlZm9yZSBvciB0aGUgcHJlZmVyZW5jZXMn LmJyLidoYXZlIGJlY29tZSBjb3JydXB0IHNvbWVob3cuJywNCgkJJ3ByZWZzX3NvbWVfb3B0 aW9ucycgPT4gJ0Nob29zZSAnLmdUeHQoJ2RlbGV0ZScpLicgdG8gcmVtb3ZlIHRoZW0gYWxs IG9yICcuZ1R4dCgnaW5zdGFsbCcpLicgdG8gYWRkJy5ici4nYW55IG5ldyBvbmVzLCBsZWF2 aW5nIGFsbCBleGlzdGluZyBwcmVmZXJlbmNlcyB1bnRvdWNoZWQuJywNCgkJJ3ByZWZzX3Rp dGxlJyA9PiAnUGx1Z2luIENvbXBvc2VyIHByZWZlcmVuY2VzJywNCgkJJ3JlbmFtZV9mYWls ZWQnID0+ICcgKHJlbmFtZSBmYWlsZWQpICcsDQoJCSdyZW5hbWVfZmlsZScgPT4gJ1JlbmFt ZSBmaWxlJywNCgkJJ3JlbmFtZWQnID0+ICcgKHJlbmFtZWQpICcsDQoJCSdyZXN0b3JlX2hl bHAnID0+ICdSb2xsIGJhY2sgdGhlIHBsdWdpbiBjb2RlIHRvIHRoZSBtb3N0IHJlY2VudCBy ZXN0b3JlIHBvaW50JywNCgkJJ3Jlc3RvcmVfcG9pbnQnID0+ICdSZXN0b3JlIHBvaW50JywN CgkJJ3Jlc3RvcmVfdmVyaWZ5JyA9PiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJvbGxi YWNrIHRoZSB7bmFtZX0gc291cmNlIGNvZGUgdG8gaXRzIGxhc3QgcmVzdG9yZSBwb2ludD8n LA0KCQkncmVzdG9yZWQnID0+ICdQbHVnaW4ge25hbWV9IHJlc3RvcmVkLicsDQoJCSdydW5f ZnJvbScgPT4gJ1BsdWdpbnMgdGhhdCBydW4gZnJvbScsDQoJCSdzYXZlX2FzJyA9PiAnU2F2 ZSBhcycsDQoJCSdzZXR1cCcgPT4gJ1NldHVwJywNCgkJJ3R5cGUnID0+ICdQbHVnaW4gdHlw ZScsDQoJCSd0eXBlXzAnID0+ICdDbGllbnQnLA0KCQkndHlwZV8xJyA9PiAnQWRtaW4gKyBD bGllbnQnLA0KCQkndHlwZV8yJyA9PiAnTGlicmFyeScsDQoJCSd0eXBlXzMnID0+ICdBZG1p bicsDQoJCSd1cGxvYWRfcGhwJyA9PiAnVXBsb2FkIHBsdWdpbiBmcm9tIFBIUCBmaWxlJywN CgkJJ3V0aWxpdGllcycgPT4gJ1V0aWxpdGllcyAoPHN0cm9uZz51c2Ugb25seSBhZnRlciBz YXZpbmcgdGhlIGRhdGEgYWJvdmU8L3N0cm9uZz4pJywNCgkpOw0KCXJldHVybiBzdHJ0cigk bGFuZ1skd2hhdF0sICRhdHRzKTsNCn0iO3M6NDoidHlwZSI7czoxOiIzIjtzOjU6Im9yZGVy IjtzOjE6IjUiO3M6NDoiaGVscCI7czoyODAyNDoiCTxwPjxkaXYgaWQ9ImllZF9oZWxwIj48 L3A+CgoJPGgxPkluc3BpcmVkIHBsdWdpbiBjb21wb3NlcjwvaDE+CgoJPHA+VGhpcyBwbHVn aW4gY3JlYXRlcyBhIG5ldyBwYWdlIHVuZGVyIHRoZSAmIzgyMTY7RXh0ZW5zaW9ucyYjODIx NzsgdGFiIHdoZXJlIHlvdSBjYW4gZWRpdCBwbHVnaW5zIHRoYXQgYXJlIGFscmVhZHkgaW5z dGFsbGVkIGluIFRleHRwYXR0ZXJuIGFuZCByZWdpc3RlciBuZXcgcGx1Z2lucy48L3A+CgoJ PGgyIGlkPSJmZWF0dXJlcyI+RmVhdHVyZXM8L2gyPgoKCTx1bD4KCQk8bGk+Q3JlYXRlLCBl ZGl0IG9yIHVwbG9hZCBwbHVnaW4gY29kZSBhbmQgZG9jdW1lbnRhdGlvbiwgdGhlbiBwdWJs aXNoIHlvdXIgd2FyZXMgaW4gdGhlIHN0YW5kYXJkIDxzcGFuIGNsYXNzPSJjYXBzIj48c3Bh biBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPjwvc3Bhbj4gcGx1Z2luIGZvcm1hdCAoc2VlIGFu IDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9kb3dubG9hZHMvZXhhbXBsZV9wbHVn aW5fdGVtcGxhdGUudHh0Ij5leGFtcGxlPC9hPik8L2xpPgoJCTxsaT5GdWxsIHN1cHBvcnQg Zm9yIHRoZSBvZmZpY2lhbCA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vZG93bmxv YWRzL2VtcHR5X3BsdWdpbl90ZW1wbGF0ZS50eHQiPnplbV90cGwucGhwIHBsdWdpbiB0ZW1w bGF0ZTwvYT4uIFRoZSA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vZG93bmxvYWRz L2VtcHR5X3BsdWdpbl90ZW1wbGF0ZV9jb2RlX2ZpcnN0LnR4dCI+bW9kaWZpZWQgdmVyc2lv bjwvYT4gYnkgPGEgaHJlZj0iaHR0cDovL3R4cC1wbHVnaW5zLm5ldGNhcnZpbmcuY29tL3Bs dWdpbnMvbW9kaWZpZWQtcGx1Z2luLWNvbXBpbGVyIj5uZXQtY2FydmVyPC9hPiBhbHNvIGlu Y29ycG9yYXRlcyBhICYjODIxNjtzdHlsZSYjODIxNzsgc2VjdGlvbiBmb3IgZWFzeSBzdHls aW5nIG9mIHlvdXIgaGVscCB0ZXh0LiBUaGUgUGx1Z2luIENvbXBvc2VyIGxvb2tzIGZvciA8 c3BhbiBjbGFzcz0iY2FwcyI+PHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj48L3NwYW4+ IHNlY3Rpb25zIGluIHRoZSB0ZW1wbGF0ZSBhbmQgd2lsbCB1c2UgdGhlbSBhY2NvcmRpbmds eS4gSXQgd2lsbCBhbHNvIHJlYWQgPHNwYW4gY2xhc3M9ImNhcHMiPjxzcGFuIGNsYXNzPSJj YXBzIj5TVk48L3NwYW4+PC9zcGFuPiAkTGFzdENoYW5nZWRSZXZpc2lvbiBlbnRyaWVzICh0 aGFua3MgbmV0LWNhcnZlcik8L2xpPgoJCTxsaT5FeHBvcnQgcGx1Z2lucyBpbiBhIHZhcmll dHkgb2YgZm9ybWF0cywgYWxsb3dpbmcgeW91IHRvIHN3aXRjaCBiZXR3ZWVuIGVkaXRpbmcg aW4gdGhlIHBsdWdpbiBjb21wb3NlciBvciB5b3VyIGZhdm91cml0ZSBlZGl0aW5nIHByb2dy YW0sIHRlc3QgdGhlIGZpbGUgaW4gdGhlIHBsdWdpbl9jYWNoZV9kaXIsIHRoZW4gaW1wb3J0 IGl0IGJhY2sgaW50byA8c3BhbiBjbGFzcz0iY2FwcyI+PHNwYW4gY2xhc3M9ImNhcHMiPlRY UDwvc3Bhbj48L3NwYW4+IHdpdGggdGhlIGhlbHAgb2YgdGhlIENvbXBvc2VyIGFuZCBwdWJs aXNoIHlvdXIgcGx1Z2luIGZvciBldmVyeW9uZS4gTG9vayBhdCB0aGUgYm90dG9tIG9mIHRo ZSBQbHVnaW4gQ29tcG9zZXImIzgyMTc7cyA8YSBocmVmPSIjZWRpdHBhZ2UiPkVkaXQgcGFn ZTwvYT4gZm9yIHRoZSBvcHRpb25zOyBqdXN0IHJlbWVtYmVyIHRvIHNhdmUgeW91ciBjaGFu Z2VzIGJlZm9yZSBleHBvcnRpbmcgb3IgY29weWluZy9wYXN0aW5nIHRoZSBjb2RlISBZb3Ug Y2FuIGV4cG9ydCBhczoKCTx1bD4KCQk8bGk+YSBzdGFuZGFyZCBCQVNFNjQtZW5jb2RlZCB0 ZXh0IGZpbGU8L2xpPgoJCTxsaT5hIGd6aXBwZWQgdmVyc2lvbiAodXNlZnVsIGZvciBsYXJn ZSBwbHVnaW5zKTwvbGk+CgkJPGxpPmEgcGhwIGZpbGUgaW4gdGhlIHN0YW5kYXJkIHRlbXBs YXRlIGZvcm1hdDwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxpPldoZW4gZXhwb3J0aW5nLCBmaWxl cyBjYW4gYmUgc2F2ZWQgd2l0aCBlaXRoZXIgdGhlIGNvZGUgYmxvY2sgZmlyc3Qgb3IgdGhl IGhlbHAgYmxvY2sgZmlyc3QsIGFuZCB5b3UgY2FuIGNoYW5nZSB0aGUgb3V0cHV0IGZpbGVu YW1lIGZvcm1hdCB0byB0YXN0ZS4gVXNlIHRoZSA8YSBocmVmPSIjc2V0dXBwYWdlIj5TZXR1 cCBidXR0b248L2E+IHRvIGNvbmZpZ3VyZTwvbGk+CgkJPGxpPlN1cHBvcnQgZm9yIGFsbCBw bHVnaW4gdHlwZXM6Cgk8dWw+CgkJPGxpPkNsaWVudCArIEFkbWluPC9saT4KCQk8bGk+Q2xp ZW50LXNpZGUgb25seTwvbGk+CgkJPGxpPkFkbWluLXNpZGUgb25seTwvbGk+CgkJPGxpPkxp YnJhcnkgcGx1Z2luczwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxpPlN1cHBvcnQgZm9yIHNwZWNp ZnlpbmcgYSByZWNvbW1lbmRlZCBwbHVnaW4gbG9hZCBvcmRlciBpZiB5b3VyIHBsdWdpbiBu ZWVkcyBzcGVjaWFsIHBvd2Vycy4gJiM4MjE2OzUmIzgyMTc7IGlzIHRoZSBkZWZhdWx0LiBO b3RlIHRoYXQgaWYgdXNpbmcgdGhlIHBsdWdpbiBjYWNoZSBkaXJlY3RvcnkgdGhpcyBmZWF0 dXJlIGlzIDxlbT5vbmx5IGF2YWlsYWJsZSBpZiB0aGUgPGNvZGU+JHBsdWdpblsmYW1wOyMz OTtvcmRlciZhbXA7IzM5O108L2NvZGU+IHN0cmluZyBpcyBpbiB0aGUgdGVtcGxhdGUgdG8g YmVnaW4gd2l0aC48L2VtPiBTbyBpZiB5b3VyIGxvYWQgb3JkZXIga2VlcHMgcmV0dXJuaW5n IHRvICYjODIxNjs1JiM4MjE3OywgZWRpdCB5b3VyIHRlbXBsYXRlIGRpcmVjdGx5IHRvIGFk ZCB0aGF0IHN0cmluZyBvciBwYXN0ZSB5b3VyIHBsdWdpbiBpbnRvIHRoZSByZWxldmFudCBw YXJ0cyBvZiB0aGUgPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL2Rvd25sb2Fkcy9l bXB0eV9wbHVnaW5fdGVtcGxhdGUudHh0Ij5lbXB0eSBwbHVnaW4gdGVtcGxhdGU8L2E+IGFu ZCB1cGxvYWQgaXQ8L2xpPgoJCTxsaT5IZWxwIHRleHQgY2FuIGJlIHdyaXR0ZW4gaW4gVGV4 dGlsZSBvciAoWClIVE1MPC9saT4KCQk8bGk+VGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIDxhIGhy ZWY9Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD0xMzA4 OSI+VGlueU1DRSA8c3BhbiBjbGFzcz0iY2FwcyI+PHNwYW4gY2xhc3M9ImNhcHMiPldZU0lX WUc8L3NwYW4+PC9zcGFuPiBlZGl0b3I8L2E+IGZvciB0aGUgaGVscCBzZWN0aW9uIG9yIDxh IGhyZWY9Imh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dy b3VwX2lkPTE2NDAwOCI+RWRpdCBBcmVhPC9hPiBmb3IgY29kZSBtYXJrdXAgKHRoYW5rcyB2 YXJpYWFzKS4gU2VlIHRoZSA8YSBocmVmPSIjc2V0dXBwYWdlIj5zZXR1cDwvYT4gYW5kIDxh IGhyZWY9IiNub3RlcyI+bm90ZXM8L2E+IHNlY3Rpb25zIGZvciBtb3JlIG9uIHRoZXNlIGVk aXRvcnM8L2xpPgoJCTxsaT5CdWlsdC1pbiBUZXh0aWxlIGhlbHAgdmlld2VyICh0aGFua3Mg dG8gbmV0LWNhcnZlciYjODIxNztzIDxhIGhyZWY9Imh0dHA6Ly90eHAtcGx1Z2lucy5uZXRj YXJ2aW5nLmNvbS9wbHVnaW5zL3BsdWdpbi1oZWxwLXZpZXdlciI+UGx1Z2luIEhlbHAgVmll d2VyPC9hPikgdG8gYWxsb3cgeW91IHRvIHByZXZpZXcgeW91ciBIZWxwIHRleHQgZHVyaW5n IGRldmVsb3BtZW50ICh0aGUgdHdvIHZpZXdlcnMgd2lsbCBoYXBwaWx5IGNvLWV4aXN0IGlm IHlvdSB3aXNoKTwvbGk+CgkJPGxpPlJlc2l6YWJsZSB0ZXh0YXJlYSwgcGx1cyBjaGFyYWN0 ZXIgbGltaXQvY291bnRlcnMgc28gdGhlcmUmIzgyMTc7cyBsZXNzIGNoYW5jZSBvZiB5b3Ug bWFraW5nIHRoZSBwbHVnaW4gb3IgZG9jcyB0b28gYmlnIHRvIGZpdCBpbiB0aGUgZGF0YWJh c2U8L2xpPgoJCTxsaT5TdXBwb3J0IGZvciBzZXR0aW5nIGEgY29kZSAmIzgyMjA7cmVzdG9y ZSBwb2ludCYjODIyMTsgYW5kIHJvbGxpbmcgYmFjayB0byB0aGF0IHBvaW50IGlmIHRoaW5n cyBnbyBzaWRld2F5cy4gQWxzbyB1c2VmdWwgZm9yIHJldHVybmluZyBwbHVnaW4gc291cmNl IGNvZGUgdG8gaXRzIGFzLWluc3RhbGxlZCBzdGF0ZTwvbGk+Cgk8L3VsPgoKCTxoMiBpZD0i YXV0aG9ycyI+QXV0aG9yczwvaDI+CgoJPHA+T3JpZ2luYWwgcGx1Z2luOiA8YSBocmVmPSJo dHRwOi8vaW5zcGlyZWQua2lldi51YS9mZWVkYmFjay8iPll1cmEgTGlubnlrPC9hPjxiciAv PgoKTW9kaWZpY2F0aW9ucyAodjAuNSspOiA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5j b20vY29tbWVudEZvcm0iPlN0ZWYgRGF3c29uPC9hPjxiciAvPgoKQSB0b3VjaCBvZiBjbGFz czogPGEgaHJlZj0iaHR0cDovL3R4cC1wbHVnaW5zLm5ldGNhcnZpbmcuY29tL2NvbnRhY3Qi PlN0ZXZlIERpY2tpbnNvbjwvYT48YnIgLz4KClBsdXMgaGVscCBmcm9tIGEgaG9zdCBvZiBm b3J1bSBjb250cmlidXRvcnMgdG9vIG51bWVyb3VzIHRvIG1lbnRpb24uIFlvdSBrbm93IHdo byB5b3UgYXJlIDstKTwvcD4KCgk8aDIgaWQ9Imluc3RhbGwiPkluc3RhbGxhdGlvbiAvIFVu aW5zdGFsbGF0aW9uPC9oMj4KCgk8cD5Eb3dubG9hZCB0aGUgcGx1Z2luICh2MC41IGFuZCBh Ym92ZSkgZnJvbSA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vc3ciPnN0ZWZkYXdz b24uY29tPC9hPiAocHJldmlvdXMgdmVyc2lvbnMgYXJlIHN0aWxsIGF2YWlsYWJsZSBvbiB0 aGUgPGEgaHJlZj0iaHR0cDovL2luc3BpcmVkLmtpZXYudWEvdHhwL2llZF9wbHVnaW5fY29t cG9zZXIiPkluc3BpcmVkIGhvbWVwYWdlPC9hPiksIHBhc3RlIHRoZSBjb2RlIGludG8gdGhl IDxzcGFuIGNsYXNzPSJjYXBzIj48c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPjwvc3Bh bj4gQWRtaW4gLSZndDsgUGx1Z2lucyBwYWdlLCBpbnN0YWxsIGFuZCBlbmFibGUgdGhlIHBs dWdpbi48L3A+CgoJPHA+VmlzaXQgdGhlIEV4dGVuc2lvbnMgLSZndDsgUGx1Z2luIENvbXBv c2VyIHRhYiBhbmQgY2xpY2sgdGhlIFNldHVwIGJ1dHRvbiBpbiB0aGUgdG9wLXJpZ2h0IG9m IHRoZSBzY3JlZW4uIEZyb20gaGVyZSB5b3UgY2FuIEluc3RhbGwsIERlbGV0ZSBhbmQgU2F2 ZSB0aGUgcGx1Z2luIHByZWZlcmVuY2VzLiBTZWUgdGhlIDxhIGhyZWY9IiNzZXR1cHBhZ2Ui PnNldHVwIHNlY3Rpb248L2E+IGZvciBkZXRhaWxzLjwvcD4KCgk8cD5UbyByZW1vdmUgdGhl IFBsdWdpbiBDb21wb3NlciAobm9vb28hKSB2aXNpdCB0aGUgU2V0dXAgcGFnZSBhZ2FpbiBm cm9tIHRoZSBQbHVnaW4gQ29tcG9zZXIgdGFiLCBoaXQgRGVsZXRlIHRvIHJlbW92ZSB0aGUg cHJlZmVyZW5jZXMsIHRoZW4gc2ltcGx5IGRlbGV0ZSB0aGUgcGx1Z2luIGFzIG5vcm1hbCBm cm9tIHRoZSBBZG1pbiAtJmd0OyBQbHVnaW5zIHBhZ2UuPC9wPgoKCTxoMiBpZD0idXNhZ2Ui PlVzYWdlPC9oMj4KCgk8aDMgaWQ9Imxpc3RwYWdlIj5MaXN0IHBhZ2U8L2gzPgoKCTxwPlRo ZXJlIGlzIGEgPGEgaHJlZj0iI3NldHVwcGFnZSI+c2V0dXA8L2E+IGJ1dHRvbiB0byBhbGxv dyB5b3UgdG8gY29uZmlndXJlIHZhcmlvdXMgb3B0aW9ucyBpbiB0aGUgQ29tcG9zZXI7IHRo ZSByZXN0IG9mIHRoZSBwYWdlIGxpc3RzIGFsbCBpbnN0YWxsZWQgcGx1Z2lucy4gVGhlIGNv bHVtbnMgYXJlOjwvcD4KCgk8dWw+CgkJPGxpPjxzdHJvbmc+UGx1Z2luPC9zdHJvbmc+IDog Y2xpY2sgdGhlIHBsdWdpbiBuYW1lIHRvIDxhIGhyZWY9IiNlZGl0cGFnZSI+ZWRpdDwvYT4g aXQ8L2xpPgoJCTxsaT48c3Ryb25nPkF1dGhvcjwvc3Ryb25nPiA6IGlmIGF2YWlsYWJsZSwg Y2xpY2sgdGhlIGF1dGhvciB0byBnbyB0byB0aGVpciBzaXRlPC9saT4KCQk8bGk+PHN0cm9u Zz5WZXJzaW9uIChNb2RpZmllZCk8L3N0cm9uZz4gOiBzaG93cyB0aGUgY3VycmVudCB2ZXJz aW9uIG51bWJlciBhbmQgd2hldGhlciB0aGUgcGx1Z2luIGhhcyBiZWVuIG1vZGlmaWVkIGZy b20gd2hlbiBpdCB3YXMgZWl0aGVyIGNyZWF0ZWQgb3IgaW5zdGFsbGVkLiBJZiBpdCBoYXMs IHlvdSBjYW4gY2xpY2sgdGhlIHZlcnNpb24gbnVtYmVyIHRvIHJlc3RvcmUgdGhlIHBsdWdp biBjb2RlIHRvIGl0cyBpbnN0YWxsZWQgc3RhdGUgb3IgbGFzdCA8YSBocmVmPSIjcmVzdG9y ZSI+cmVzdG9yZSBwb2ludDwvYT48L2xpPgoJCTxsaT48c3Ryb25nPkRlc2NyaXB0aW9uPC9z dHJvbmc+IDogYnJpZWZseSwgd2hhdCB0aGUgcGx1Z2luIGRvZXM8L2xpPgoJCTxsaT48c3Ry b25nPlB1Ymxpc2g8L3N0cm9uZz4gOiB0aHJlZSBsaW5rcwoJPHVsPgoJCTxsaT48ZW0+UHVi bGlzaDwvZW0+IDogZXhwb3J0cyB0aGUgcGx1Z2luIGFzIGEgLnR4dCBmaWxlIGZvciBkaXN0 cmlidXRpb24gdG8gb3RoZXIgVGV4dHBhdHRlcm4gdXNlcnM8L2xpPgoJCTxsaT48ZW0+Wmlw PC9lbT4gOiBleHBvcnRzIHRoZSBwbHVnaW4gYXMgYSBjb21wcmVzc2VkIChnemlwcGVkKSAu dHh0IGZpbGUgZm9yIGRpc3RyaWJ1dGlvbjwvbGk+CgkJPGxpPjxlbT5IZWxwPC9lbT4gOiBk aXNwbGF5cyB0aGUgKHRleHRpbGUgcHJvY2Vzc2VkKSBwbHVnaW4gZG9jdW1lbnRhdGlvbiwg aWYgdGhlcmUgaXMgYW55LiBDYW4gYWxzbyBiZSB2aWV3ZWQgZnJvbSB0aGUgRWRpdCBwYWdl PC9saT4KCTwvdWw+PC9saT4KCQk8bGk+PHN0cm9uZz5PcmRlcjwvc3Ryb25nPiA6IHRoZSBy ZWNvbW1lbmRlZCBwbHVnaW4gbG9hZCBvcmRlciBmcm9tIDEgKGxvYWRlZCBmaXJzdCkgdG8g OSAobG9hZGVkIGxhc3QpLiA1IGlzIGRlZmF1bHQ8L2xpPgoJCTxsaT48c3Ryb25nPkFjdGl2 ZTwvc3Ryb25nPiA6IGVuYWJsZSBvciBkaXNhYmxlIGEgcGx1Z2luIGJ5IGNsaWNraW5nIGVu dHJpZXMgaW4gdGhpcyBjb2x1bW48L2xpPgoJCTxsaT48c3Ryb25nPng8L3N0cm9uZz4gOiBk ZWxldGUgdGhlIHBsdWdpbjwvbGk+Cgk8L3VsPgoKCTxwPklmIHlvdSBhcmUgdXNpbmcgdGhl IHBsdWdpbl9jYWNoZV9kaXIgKEFkbWluIC0mZ3Q7IEFkdmFuY2VkIFByZWZzKSwgYW55IHBs dWdpbnMgaW4gdGhlIHN0YW5kYXJkIHRlbXBsYXRlIGZvcm1hdCB1cGxvYWRlZCB0byB0aGlz IGRpcmVjdG9yeSB3aWxsIGJlIGF2YWlsYWJsZSBpbW1lZGlhdGVseSBmb3IgZWRpdGluZyBh bmQgdGVzdGluZy4gWW91IGNhbiBlZGl0IGFuZCBwdWJsaXNoIHRoZSBwbHVnaW5zIGluIHRo ZSBzYW1lIG1hbm5lciBhcyB0aGUgcmVndWxhciwgaW5zdGFsbGVkIHBsdWdpbnMgYWJvdmUs IHdpdGggdGhlIGZvbGxvd2luZyBleGNlcHRpb25zOjwvcD4KCgk8b2w+CgkJPGxpPlRoZXJl IGlzIG5vIGNvbmNlcHQgb2YgJiM4MjE2O21vZGlmaWVkJiM4MjE3OyBvciBvZiByZXN0b3Jl IHBvaW50cyBhcyB0aGUgZmlsZXMgYWx3YXlzIHJlcHJlc2VudCB0aGUgbW9zdCB1cC10by1k YXRlIHZlcnNpb248L2xpPgoJCTxsaT5DYWNoZWQgcGx1Z2lucyBhcmUgJiM4MjIwO2Fsd2F5 cyBvbiYjODIyMTsgYW5kIGRvIG5vdCBuZWVkIHRvIGJlIGluc3RhbGxlZC4gVG8gZGVhY3Rp dmF0ZSB0aGUgcGx1Z2luIHRoZSBmaWxlIG11c3QgYmUgcmVtb3ZlZCBmcm9tIHRoZSBwbHVn aW4gY2FjaGUgZGlyZWN0b3J5PC9saT4KCQk8bGk+VGhlIHJlY29tbWVuZGVkIGxvYWQgb3Jk ZXIgY2Fubm90IGJlIGNoYW5nZWQgZnJvbSB0aGUgbGlzdCBwYWdlOyBpdCBjYW4gb25seSBi ZSBhbHRlcmVkIHZpYSB0aGUgPGEgaHJlZj0iI2VkaXRwYWdlIj5FZGl0PC9hPiBwYWdlLiBU aGUgbG9hZCBvcmRlciBpcyBvbmx5IHRha2VuIGludG8gYWNjb3VudCB3aGVuIHRoZSBwbHVn aW4gaXMgZXhwb3J0ZWQ8L2xpPgoJPC9vbD4KCgk8aDM+Q3JlYXRpbmcgYW5kIG5hbWluZyBw bHVnaW5zPC9oMz4KCgk8cD5UaGVyZSBhcmUgdHdvIHdheXMgb2YgY3JlYXRpbmcgcGx1Z2lu cyBmcm9tIHRoZSBQbHVnaW4gQ29tcG9zZXIgbGlzdCBwYWdlLiBUaGUgZmlyc3QgaXMgdG8g Y3JlYXRlIGEgYmxhbmssIGVtcHR5IHBsdWdpbjsgdXNlIHRoZSB0ZXh0IGJveCBhdCB0aGUg dG9wIGZvciB0aGlzLiBQb2ludHMgdG8gbm90ZTo8L3A+CgoJPHVsPgoJCTxsaT5JZiB5b3Ug dXNlIGEgc3RhbmRhcmQgcGx1Z2luIG5hbWUgKGUuZy4gPGNvZGU+YWJjX215X3BsdWdpbjwv Y29kZT4pIGl0IHdpbGwgYmUgY3JlYXRlZCBpbiB0aGUgZGF0YWJhc2U8L2xpPgoJCTxsaT5J ZiB5b3UgYWRkIDxjb2RlPi5waHA8L2NvZGU+IHRvIHRoZSBwbHVnaW4gbmFtZSwgaXQgd2ls bCBiZSBjcmVhdGVkIGluIHRoZSBwbHVnaW4gY2FjaGUgZGlyZWN0b3J5IGluIGEgc3RhbmRh cmQgdGVtcGxhdGUgZm9ybWF0PC9saT4KCQk8bGk+QXZvaWQgc3BlY2lmeWluZyB0aGUgdmVy c2lvbiBvZiB0aGUgcGx1Z2luIGluIHRoZSBuYW1lICYjODIxMjsgeW91IHNob3VsZCB1c2Ug dGhlIDxlbT5SZW5hbWUgZmlsZTwvZW0+IG9yIDxlbT5FeHBvcnQ8L2VtPiBvcHRpb25zIGlu IHRoZSBFZGl0IHBhZ2UgdG8gYWx0ZXIgdGhlIGZpbGVuYW1lIGludG8geW91ciBwcmVmZXJy ZWQgZmlsZW5hbWUgZm9ybWF0IChzZWUgPGEgaHJlZj0iI3NldHVwcGFnZSI+c2V0dXA8L2E+ KTwvbGk+Cgk8L3VsPgoKCTxwPlRoZSBzZWNvbmQgbWV0aG9kIG9mIGNyZWF0aW5nIGEgcGx1 Z2luIGlzIHRvIHVwbG9hZCBvbmUgdXNpbmcgdGhlIEJyb3dzZS91cGxvYWQgYm94IGF0IHRo ZSBib3R0b20gb2YgdGhlIGxpc3QuIFBsZWFzZSBub3RlOjwvcD4KCgk8dWw+CgkJPGxpPllv dSBjYW4gdXBsb2FkIGNvZGUgaW4gZWl0aGVyIHN0YW5kYXJkIHBsdWdpbiB0ZW1wbGF0ZSBm b3JtYXQgKGVpdGhlciBjb2RlLWZpcnN0IG9yIGhlbHAtZmlyc3QsIGNvbXBsZXRlIHdpdGgg PHNwYW4gY2xhc3M9ImNhcHMiPjxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+PC9zcGFu PiBhcmVhcykgb3Igc2ltcGx5IHVwbG9hZCBhIDxzcGFuIGNsYXNzPSJjYXBzIj48c3BhbiBj bGFzcz0iY2FwcyI+UEhQPC9zcGFuPjwvc3Bhbj4gZmlsZSBjb250YWluaW5nIGNvZGUgb25s eTwvbGk+CgkJPGxpPlRoZSBwbHVnaW4gd2lsbCBhbHdheXMgYmUgaW5zdGFsbGVkIGluIHRo ZSBkYXRhYmFzZSB3aGVuIHVzaW5nIHRoaXMgbWV0aG9kICh1cGxvYWQgdGhlIHRlbXBsYXRl IG1hbnVhbGx5IHZpYSA8c3BhbiBjbGFzcz0iY2FwcyI+PHNwYW4gY2xhc3M9ImNhcHMiPkZU UDwvc3Bhbj48L3NwYW4+IG9yIGNyZWF0ZSBhIG5ldyBvbmUgd2l0aCBhIC5waHAgZXh0ZW5z aW9uIGFuZCBwYXN0ZSB0aGUgY29kZSBpbnRvIGl0IGlmIHlvdSB3YW50IGl0IGluIHRoZSBw bHVnaW4gY2FjaGUpPC9saT4KCQk8bGk+SWYgdGhlIHBsdWdpbiBleGlzdHMgaXQgd2lsbCBi ZSB1cGRhdGVkIHdpdGggeW91ciBuZXcgaW5mbzwvbGk+CgkJPGxpPlRoaXMgaXMgdGhlIG9u bHkgcGxhY2UgeW91IGNhbiB1cGxvYWQgcmF3IDxzcGFuIGNsYXNzPSJjYXBzIj48c3BhbiBj bGFzcz0iY2FwcyI+UEhQPC9zcGFuPjwvc3Bhbj4gd2l0aCB0aGUgPGNvZGU+JmFtcDtsdDs/ cGhwID8mYW1wO2d0OzwvY29kZT4gbWFya2Vycy4gRXZlcnl3aGVyZSBlbHNlIHlvdSBzaG91 bGQgdXNlIGEgZnVsbCB0ZW1wbGF0ZTwvbGk+Cgk8L3VsPgoKCTxwPkV2ZXJ5IHBsdWdpbiBz aG91bGQgYmUgY3JlYXRlZCB3aXRoIGEgdGhyZWUtbGV0dGVyIHByZWZpeCwgYW4gdW5kZXJz Y29yZSwgdGhlbiB0aGUgbmFtZSBvZiB0aGUgcGx1Z2luLiBZb3UgYXJlIGZyZWUgdG8gY2hv b3NlIHlvdXIgb3duIHRocmVlLWxldHRlciBwcmVmaXggKHVzdWFsbHkgeW91ciBpbml0aWFs cykgc3ViamVjdCB0byA8YSBocmVmPSJodHRwOi8vd3d3LnRleHRwYXR0ZXJuLm5ldC93aWtp L2luZGV4LnBocD90aXRsZT1SZXNlcnZlZF9QbHVnaW5fUHJlZml4ZXMiPmF2b2lkaW5nIG9u ZXMgYWxyZWFkeSB0YWtlbiBieSBvdGhlciBwbHVnaW4gYXV0aG9yczwvYT4gc28gcGVvcGxl IGNhbiBnZXQgdG8ga25vdyB5b3VyIHdvcmsuIFBsdXMsIGl0IGdyb3VwcyB5b3VyIHBsdWdp bnMgdG9nZXRoZXIgaW4gdGhlIHBsdWdpbiBhcmNoaXZlLjwvcD4KCgk8cD5BbGwgZnVuY3Rp b25zLCB2YXJpYWJsZXMgKGluY2x1ZGluZyA8c3BhbiBjbGFzcz0iY2FwcyI+PHNwYW4gY2xh c3M9ImNhcHMiPkRPTTwvc3Bhbj48L3NwYW4+IG5vZGVzKSwgPHNwYW4gY2xhc3M9ImNhcHMi PjxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+PC9zcGFuPiBjbGFzc2VzLCBhbmQgYW55 dGhpbmcgZWxzZSB5b3UgaW5qZWN0IGludG8gdGhlIGdsb2JhbCBzY29wZSBzaG91bGQgYmUg cHJlZml4ZWQgYnkgPHN0cm9uZz5hdCBsZWFzdDwvc3Ryb25nPiB5b3VyIHRocmVlIGxldHRl ciBjb2RlOyBwcmVmZXJhYmx5IHRoZSB3aG9sZSBwbHVnaW4gbmFtZSAob3IgYWJyaWRnZWQg dmVyc2lvbiB0aGVyZW9mKSB0byBhdm9pZCBuYW1lc3BhY2UgY2xhc2hlcyB3aXRoIHlvdXIg b3duIGFuZCBvdGhlciBwbHVnaW5zLjwvcD4KCgk8aDMgaWQ9ImVkaXRwYWdlIj5FZGl0IHBh Z2U8L2gzPgoKCTxwPlRoZSBFZGl0IHBhZ2UgaXMgd2hlcmUgeW91IGNyYWZ0IHlvdXIgbWFz dGVycGllY2UuIEl0IGlzIGRpdmlkZWQgaW50byB2YXJpb3VzIHNlY3Rpb25zIGFuZCBib3hl cywgYXMgZGV0YWlsZWQgaGVyZTo8L3A+CgoJPHVsPgoJCTxsaT48c3Ryb25nPlBsdWdpbjwv c3Ryb25nPiA6IHRoZSBuYW1lIG9mIHlvdXIgcGx1Z2luLCB3aGljaCB5b3UgY2FuIGNoYW5n ZSBhdCBhbnkgdGltZS4gTm90ZSB0aGF0IGlmIHlvdSBhcmUgZWRpdGluZyBhIGZpbGUgZnJv bSB0aGUgcGx1Z2luIGNhY2hlIGRpcmVjdG9yeSBhbmQgdGhlIDxjb2RlPiRwbHVnaW5bJmFt cDsjMzk7bmFtZSZhbXA7IzM5O108L2NvZGU+IHJvdyBpcyBjb21tZW50ZWQgb3V0IGluIHRo ZSBmaWxlLCB5b3Ugd2lsbCBub3QgYmUgYWJsZSB0byBjaGFuZ2UgdGhlIHBsdWdpbiBuYW1l OyBpdCB3aWxsIGFsd2F5cyBiZSB0aGUgbmFtZSBvZiB0aGUgZmlsZS48YnIgLz4KClRvIHRo ZSByaWdodCBvZiB0aGlzIGJveCB3aWxsIGJlIG9uZSBvZiB0d28gaXRlbXM6Cgk8dWw+CgkJ PGxpPjxzdHJvbmc+RW5hYmxlPC9zdHJvbmc+IDogaWYgdGhlIHBsdWdpbiBpcyBhIHJlZ3Vs YXIgKGluc3RhbGxlZCkgcGx1Z2luLCB0aGlzIGNoZWNrYm94IGFsbG93cyB5b3UgdG8gc3dp dGNoIHRoZSBwbHVnaW4gb24gYW5kIG9mZjwvbGk+CgkJPGxpPjxzdHJvbmc+KGZpbGUgbmFt ZSk8L3N0cm9uZz4gOiBpZiB5b3UgYXJlIGVkaXRpbmcgYSBwbHVnaW4gaW4gdGhlIGNhY2hl IGRpcmVjdG9yeSwgdGhlIGN1cnJlbnQgZmlsZW5hbWUgeW91IGFyZSB3cml0aW5nIHRvIHdp bGwgYmUgZGlzcGxheWVkIGluc3RlYWQ8L2xpPgoJPC91bD48L2xpPgoJCTxsaT48c3Ryb25n PlNvdXJjZSBjb2RlPC9zdHJvbmc+IDogeW91ciBwbHVnaW4gY29kZSBnb2VzIGhlcmUuIFRo ZSBib3ggaXMgcmVzaXphYmxlIGJ5IGdyYWJiaW5nIHRoZSA8Y29kZT4tLS0gKyAtLS08L2Nv ZGU+IGJlbG93IHRoZSBib3ggYW5kIGRyYWdnaW5nLiBUaGUgYm94IHNpemUgd2lsbCBiZSBy ZW1lbWJlcmVkIHZpYSBhIGNvb2tpZSBmb3IgMzAgZGF5cyBmcm9tIHlvdXIgbGFzdCBhZGp1 c3RtZW50LjxiciAvPgoKUGx1Z2lucyBhcmUgbGltaXRlZCB0byA2NGtCIG9mIGNvZGUgc28g dGhlcmUgaXMgYWxzbyBhIGNoYXJhY3RlciBjb3VudGRvd24ganVzdCBiZWxvdyB0aGUgZWRp dCBib3guIElmIHlvdSBzdGFydCBhcHByb2FjaGluZyB0aGUgbGltaXQsIGl0IG1pZ2h0IGJl IHdvcnRoIGNvbnNpZGVyaW5nIHNwbGl0dGluZyB5b3VyIHBsdWdpbiBpbnRvIGEgZmV3IHBh cnRzPC9saT4KCQk8bGk+PHN0cm9uZz5QbHVnaW4gdHlwZTwvc3Ryb25nPiA6IGNob29zZSBv bmUgb2YgdGhlIHR5cGVzIHRoYXQgYmVzdCBmaXRzIHRoZSBpbnRlbmRlZCB1c2Ugb2YgeW91 ciBwbHVnaW4uIElmIHlvdSBjaG9vc2UgJiM4MjE2O0NsaWVudCYjODIxNzsgYW5kIHRyeSB0 byBhY2Nlc3MgdGhlIGFkbWluIHNpZGUgaW4geW91ciBjb2RlLCBhIHdhcm5pbmcgd2lsbCBi ZSBpc3N1ZWQgd2hlbiB0aGUgcGx1Z2luIGlzIHNhdmVkIHNvIHlvdSBjYW4gY2hvb3NlIGEg bW9yZSBhcHByb3ByaWF0ZSB0eXBlPC9saT4KCQk8bGk+PHN0cm9uZz5Mb2FkIG9yZGVyPC9z dHJvbmc+IDogY2hvb3NlIHRoZSByZWNvbW1lbmRlZCBvcmRlciBpbiB3aGljaCB5b3UgdGhp bmsgeW91ciBwbHVnaW4gc2hvdWxkIGJlIGxvYWRlZCBieSB1c2Vycy4gTW9zdCBvZiB0aGUg dGltZSwgdGhlIGRlZmF1bHQgb2YgJiM4MjE2OzUmIzgyMTc7IGlzIGZpbmUgYnV0IGZvciBz cGVjaWFsIGNhc2VzIHdoZXJlIHlvdXIgcGx1Z2luIGhhcyB0byBzZXQgdXAgYW4gZW52aXJv bm1lbnQgb3IgaGFzIHRvIHdhaXQgZm9yIG90aGVyIHBsdWdpbnMgdG8gbG9hZCBmaXJzdCwg eW91IG1pZ2h0IHJlcXVpcmUgb25lIG9mIHRoZSBudW1iZXJzIGVpdGhlciBzaWRlLiBCZSBh d2FyZSB0aGF0IHRoaXMgaXMgYSA8ZW0+cmVjb21tZW5kYXRpb248L2VtPiBhbmQgaXMgb3Zl cnJpZGFibGUgYnkgdGhlIHNpdGUgYWRtaW4uIElmIHRoZSBwbHVnaW4gaXMgYWxyZWFkeSBk ZXBsb3llZCBvbiBhIHNpdGUsIHRoZSBsb2FkIG9yZGVyIGFscmVhZHkgc2V0IHdpbGwgYmUg dXNlZCByZWdhcmRsZXNzIG9mIHRoZSBzZXR0aW5nIG9mIHRoaXMgdmFsdWUuIE9ubHkgbmV3 IGluc3RhbGxhdGlvbnMgd2lsbCBiZSBzZXQgdG8gdGhpcyB2YWx1ZSBieSBkZWZhdWx0PC9s aT4KCQk8bGk+PHN0cm9uZz5WZXJzaW9uPC9zdHJvbmc+IDogdGhlIGN1cnJlbnQgdmVyc2lv biBvZiB5b3VyIHBsdWdpbi4gVG8gdGhlIHJpZ2h0IG9mIHRoaXMgYm94IHdpbGwgYmUgb25l IG9mIHR3byBpdGVtczoKCTx1bD4KCQk8bGk+PHN0cm9uZz5SZXN0b3JlIHBvaW50PC9zdHJv bmc+IDogc2VsZWN0aW5nIHRoaXMgY2hlY2tib3ggd2lsbCAodXBvbiBzYXZlKSBzdG9yZSB0 aGUgY3VycmVudCBjb2RlIGFzIGEgYmFzZWxpbmUgdG8gd2hpY2ggeW91IG1heSAmIzgyMjA7 cm9sbCBiYWNrJiM4MjIxOyB0byBhdCBhIGxhdGVyIGRhdGUuIFNlZSA8YSBocmVmPSIjcmVz dG9yZSI+cmVzdG9yZSBwb2ludHM8L2E+IGZvciBtb3JlPC9saT4KCQk8bGk+PHN0cm9uZz5S ZW5hbWUgZmlsZTwvc3Ryb25nPiA6IGJ5IGRlZmF1bHQsIHdoZW4geW91IHNhdmUgYSBmaWxl IHRoYXQgaXMgYmVpbmcgZWRpdGVkIGluIHRoZSBwbHVnaW4gY2FjaGUgZGlyZWN0b3J5LCBp dCBpcyBvdmVyd3JpdHRlbiB3aXRoIHlvdXIgY2hhbmdlcy4gT25jZSBhIHBsdWdpbiBpcyBy ZWxlYXNlZCB5b3Ugd291bGQgbm9ybWFsbHkgZG93bmxvYWQgYSBjb3B5IHZpYSA8c3BhbiBj bGFzcz0iY2FwcyI+PHNwYW4gY2xhc3M9ImNhcHMiPkZUUDwvc3Bhbj48L3NwYW4+IGZyb20g dGhlIHBsdWdpbl9jYWNoZV9kaXIgZm9yIHNhZmVrZWVwaW5nLiBJZiB5b3UgdGhlbiBzdWJz ZXF1ZW50bHkgbW9kaWZ5IHRoZSBwbHVnaW4gYW5kIGluY3JlYXNlIHRoZSB2ZXJzaW9uIG51 bWJlciwgeW91IG1heSB3aXNoIHRvIGFsdGVyIHRoZSBmaWxlbmFtZSBhcyB3ZWxsLiBDaGVj a2luZyB0aGlzIGJveCB3aWxsICh1cG9uIHNhdmUpIHJlbmFtZSB0aGUgZmlsZSBpbiB0aGUg cGx1Z2luIGNhY2hlIGRpcmVjdG9yeSB0byByZWZsZWN0IHRoZSBjdXJyZW50IHZlcnNpb24g bnVtYmVyLiBTZWUgdGhlIDxhIGhyZWY9IiNzZXR1cHBhZ2UiPnNldHVwIHBhZ2U8L2E+IGZv ciBkZXRhaWxzIG9uIGN1c3RvbWlzaW5nIHRoZSBmaWxlbmFtZSBmb3JtYXQ8L2xpPgoJPC91 bD48L2xpPgoJCTxsaT48c3Ryb25nPkF1dGhvcjwvc3Ryb25nPiA6IHlvdSE8L2xpPgoJCTxs aT48c3Ryb25nPldlYnNpdGU8L3N0cm9uZz4gOiB5b3VyIGhvbWUgcGFnZSBvciBwbHVnaW4g cGFnZS4gV2lsbCBiZSBoeXBlcmxpbmtlZCB0byB5b3VyIEF1dGhvciBuYW1lIGluIHRoZSBs aXN0IHBhZ2U8L2xpPgoJCTxsaT48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+IDogdmVy eSBicmllZiBvbmUtbGluZXIgZGVzY3JpYmluZyB5b3VyIHBsdWdpbiYjODIxNztzIGNvcmUg ZnVuY3Rpb24gLyByZWFzb24gZm9yIGV4aXN0ZW5jZTwvbGk+CgkJPGxpPjxzdHJvbmc+UGx1 Z2luIEhlbHA8L3N0cm9uZz4gOiBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxpbmcgdGhlIHBs dWdpbiB1c2FnZS4gQ2FuIChwcm9iYWJseSBzaG91bGQhKSBiZSB3cml0dGVuIHVzaW5nIDxh IGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5jb20vdGV4dGlsZS1zYW5kYm94Ij5UZXh0aWxl PC9hPi4gVGhlcmUgd2VyZSBzb21lIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVy bi5jb20vdmlld3RvcGljLnBocD9pZD0yNTMyNyI+bG9vc2UgZG9jdW1lbnRhdGlvbiBndWlk ZWxpbmVzPC9hPiBwcm9wb3NlZCB0aGF0IHNlcnZlIGFzIGEgZ29vZCBzdGFydGluZyBwb2lu dC4gTm90ZSB0aGF0IHRoZSBjaGFyYWN0ZXIgY291bnRkb3duIGhlcmUgaXMgb25seSBhcHBy b3hpbWF0ZSBiZWNhdXNlIHdoZW4geW91ciBwbHVnaW4gaXMgc2F2ZWQgYW5kIHRoZSBoZWxw IGlzIGNvbnZlcnRlZCB0byA8c3BhbiBjbGFzcz0iY2FwcyI+PHNwYW4gY2xhc3M9ImNhcHMi PkhUTUw8L3NwYW4+PC9zcGFuPiwgaXQgdXN1YWxseSB0YWtlcyB1cCBtb3JlIHNwYWNlIHRo YW4gVGV4dGlsZTsgcGxlYXNlIGNoZWNrIHRoYXQgeW91ciBoZWxwIGZpbGUgcmVuZGVycyBj b3JyZWN0bHkgd2hlbiB5b3VyIHBsdWdpbiBpcyBleHBvcnRlZDwvbGk+CgkJPGxpPjxzdHJv bmc+U3R5bGU8L3N0cm9uZz4gOiBBbnkgPHNwYW4gY2xhc3M9ImNhcHMiPjxzcGFuIGNsYXNz PSJjYXBzIj5DU1M8L3NwYW4+PC9zcGFuPiBzdHlsZSBydWxlcyB5b3Ugd2lzaCB0byBhcHBs eSB0byB5b3VyIGRvY3VtZW50YXRpb24gdG8gbWFrZSBpdCBtb3JlIHByZXR0eS4gSXQmIzgy MTc7cyBiZXN0IHRvIHRhcmdldCB5b3VyIGRvY3VtZW50YXRpb24gc3BlY2lmaWNhbGx5IGJ5 IHN1cnJvdW5kaW5nIHRoZSBlbnRpcmUgUGx1Z2luIEhlbHAgc2VjdGlvbiB3aXRoIHNvbWV0 aGluZyBsaWtlOiA8Y29kZT4mYW1wO2x0O2RpdiBpZD0mYW1wO3F1b3Q7YWJjX2hlbHAmYW1w O3F1b3Q7JmFtcDtndDtoMS4gRG9jcyBnbyBoZXJlLi4uJmFtcDtsdDsvZGl2JmFtcDtndDs8 L2NvZGU+LjxiciAvPgoKTm90ZSB0aGF0IGJvdGggdGhlIFBsdWdpbiBIZWxwIGFuZCBTdHls ZSBhcmUgZ292ZXJuZWQgYnkgYSBzaXplIGxpbWl0LiBTaW5jZSB0aGV5IGFyZSBib3RoIHN0 b3JlZCBpbiB0aGUgc2FtZSA2NGtCIGZpZWxkLCB0aGUgc2l6ZSBpcyBzaGFyZWQgYmV0d2Vl biB0aGVtLiBTdHlsZXMgYXJlIDxlbT5ub3Q8L2VtPiBwYXNzZWQgdGhyb3VnaCB0aGUgVGV4 dGlsZSBwcm9jZXNzb3IgYW5kIHlvdSBkb24mIzgyMTc7dCBuZWVkIHRvIGFkZCB0aGUgPGNv ZGU+JmFtcDtsdDtzdHlsZSZhbXA7Z3Q7PC9jb2RlPiB0YWdzOyB0aGUgQ29tcG9zZXIgd2ls bCBkbyB0aGF0IGZvciB5b3UgKGJ1dCBzZWUgPGEgaHJlZj0iI25vdGVzIj5Ob3RlczwvYT4p PC9saT4KCQk8bGk+PHN0cm9uZz5TYXZlPC9zdHJvbmc+IDogY29tbWl0cyB0aGUgY2hhbmdl czwvbGk+CgkJPGxpPjxzdHJvbmc+WyBWaWV3IEhlbHAgXTwvc3Ryb25nPiA6IHNob3dzIHRo ZSBkb2N1bWVudGF0aW9uIGFzIHVzZXJzIHdpbGwgc2VlIGl0IChpLmUuIFRleHRpbGUgcHJv Y2Vzc2VkIGludG8gPHNwYW4gY2xhc3M9ImNhcHMiPjxzcGFuIGNsYXNzPSJjYXBzIj5IVE1M PC9zcGFuPjwvc3Bhbj4pLiBBbnkgaGVscCB0ZXh0IG92ZXIgNjRrQiBpbiBsZW5ndGggaXMg dHJ1bmNhdGVkIHNvIHlvdSBjYW4gdmVyaWZ5IHRoYXQgYWxsIHlvdXIgZG9jdW1lbnRhdGlv biBmaXRzPC9saT4KCTwvdWw+CgoJPHA+T25jZSB5b3UgaGF2ZSBzYXZlZCB5b3VyIHBsdWdp biwgdGhlcmUgaXMgYSBzZWN0aW9uIHJpZ2h0IGF0IHRoZSBib3R0b20gdGhhdCBhbGxvd3Mg eW91IHRvIGV4cG9ydCB5b3VyIHBsdWdpbiBpbiBhIHZhcmlldHkgb2YgZm9ybWF0czo8L3A+ CgoJPHVsPgoJCTxsaT48c3Ryb25nPlBsdWdpbiBjb2RlIGZvciBkaXN0cmlidXRpb248L3N0 cm9uZz4gOiBpcyBhIGRpcmVjdCBjb3B5ICYjODIxNjtuJiM4MjE3OyBwYXN0ZSBhcmVhIHRo YXQgY29udGFpbnMgeW91ciBlbnRpcmUgcGx1Z2luICsgZG9jcy4gWW91IGNhbiB0YWtlIHRo aXMgZW50aXJlIGFyZWEgYW5kIHBhc3RlIGl0IGludG8gdGhlICYjODIxNjtJbnN0YWxsIHBs dWdpbiYjODIxNzsgYm94IG9uIHRoZSBBZG1pbiAtJmd0OyBQbHVnaW5zIHBhZ2U8L2xpPgoJ CTxsaT48c3Ryb25nPkV4cG9ydCBhcyBhYmNfbXlwbHVnaW4udHh0PC9zdHJvbmc+IDogY29u dmVydHMgdGhlIHBsdWdpbiBoZWxwIHRvIDxzcGFuIGNsYXNzPSJjYXBzIj48c3BhbiBjbGFz cz0iY2FwcyI+SFRNTDwvc3Bhbj48L3NwYW4+IGFuZCBzYXZlcyB0aGUgcGx1Z2luIHRvIHlv dXIgY29tcHV0ZXIgYXMgYSByZWRpc3RyaWJ1dGFibGUgdGV4dCBmaWxlIGZvciBvdGhlciBU ZXh0cGF0dGVybiB1c2VycyB0byBpbnN0YWxsPC9saT4KCQk8bGk+PHN0cm9uZz5FeHBvcnQg YXMgYWJjX215cGx1Z2luLnR4dCAoY29tcHJlc3NlZCk8L3N0cm9uZz4gOiBjb252ZXJ0cyB0 aGUgcGx1Z2luIGhlbHAgdG8gPHNwYW4gY2xhc3M9ImNhcHMiPjxzcGFuIGNsYXNzPSJjYXBz Ij5IVE1MPC9zcGFuPjwvc3Bhbj4gYW5kIHNhdmVzIHRoZSBwbHVnaW4gYXMgYSByZWRpc3Ry aWJ1dGFibGUsIGd6aXBwZWQgdGV4dCBmaWxlIGZvciBvdGhlciBUZXh0cGF0dGVybiB1c2Vy cyB0byBpbnN0YWxsLiBVc2VmdWwgZm9yIGxhcmdlIHBsdWdpbnMgb3IgdG8gb2ZmZXIgYW4g YWx0ZXJuYXRpdmUgZm9yIHBlb3BsZSB3aG8gaGF2ZSBzdHJpbmdlbnQgc2l6ZSBsaW1pdHMg aW1wb3NlZCBieSB0aGVpciBob3N0PC9saT4KCQk8bGk+PHN0cm9uZz5FeHBvcnQgYXMgYWJj X215cGx1Z2luLnBocDwvc3Ryb25nPiA6IHNhdmVzIHRoZSBwbHVnaW4gaW4gYSBUZXh0cGF0 dGVybiBzdGFuZGFyZCB0ZW1wbGF0ZSBmb3JtYXQuIFVzZWZ1bCBmb3Iga2VlcGluZyB0aGUg cGx1Z2luIGZvciB5b3Vyc2VsZiAmIzgyMTI7IGNvbXBsZXRlIHdpdGggVGV4dGlsZSBtYXJr dXAgJiM4MjEyOyBzbyBpdCBjYW4gYmUgbGF0ZXIgZWRpdGVkIGFuZCByZS1pc3N1ZWQgLyB1 cGRhdGVkIG9yIHNoYXJlZCB3aXRoIG90aGVyIGRldmVsb3BlcnMgd2hvIGhhdmUgdGhlIFBs dWdpbiBDb21wb3NlciBvciB6ZW1fdHBsLnBocCBjb21waWxlcjwvbGk+Cgk8L3VsPgoKCTxw Pk5vdGUgdGhhdCB3aGVuIGV4cG9ydGluZyBhcyBhIHN0YW5kYXJkIHBsdWdpbiwgdGhlIFRl eHRpbGUgcHJvY2Vzc29yIGF0dGVtcHRzIHRvIGRlY2lkZSBpZiB5b3UgaGF2ZSB1c2VkIFRl eHRpbGUgb3Igbm90OyBpdCBzaW1wbHkgbG9va3MgZm9yIGEgdGV4dGlsZWQgaGVhZGVyICg8 Y29kZT5oMS48L2NvZGU+IHRocm91Z2ggPGNvZGU+aDYuPC9jb2RlPikuIFJ1bm5pbmcgcHVy ZSA8c3BhbiBjbGFzcz0iY2FwcyI+PHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+PC9z 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 YW4gY2xhc3M9ImNhcHMiPjxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+PC9zcGFuPiBw YXRoIG9mIHRoZSBFZGl0QXJlYSBpbnN0YWxsYXRpb24gb24geW91ciBzZXJ2ZXI7IHRoaXMg aXMgbm9ybWFsbHkgZXZlcnl0aGluZyB1cCB0byBhbmQgaW5jbHVkaW5nIC9lZGl0X2FyZWEu IE5vIHRyYWlsaW5nIHNsYXNoIGlzIHJlcXVpcmVkPC9saT4KCQk8bGk+PHN0cm9uZz5QbHVn aW4gZWRpdG9yIHdpZHRoPC9zdHJvbmc+IDogdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdp ZGUgdG8gbWFrZSB0aGUgYm94ZXMgb24gdGhlIDxhIGhyZWY9IiNlZGl0cGFnZSI+RWRpdDwv YT4gcGFnZSB0byBzdWl0IHlvdXIgc2NyZWVuIHJlc29sdXRpb248L2xpPgoJCTxsaT48c3Ry b25nPkhlbHAgZWRpdG9yPC9zdHJvbmc+IDogeW91IG1heSBjaG9vc2UgdG8gZWRpdCB0aGUg aGVscCBtYW51YWxseSB2aWEgVGV4dGlsZSBvciB1c2UgVGlueU1DRSBmb3IgYSBtb3JlIDxz cGFuIGNsYXNzPSJjYXBzIj48c3BhbiBjbGFzcz0iY2FwcyI+V1lTSVdZRzwvc3Bhbj48L3Nw YW4+IGV4cGVyaWVuY2UuIFRoaXMgaXMgZXhwZXJpbWVudGFsIGFuZCBwcm9iYWJseSB3b24m IzgyMTc7dCB3b3JrIHJpZ2h0IG5vdzwvbGk+CgkJPGxpPjxzdHJvbmc+PHNwYW4gY2xhc3M9 ImNhcHMiPjxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+PC9zcGFuPiBleHBvcnQgb3Jk ZXI8L3N0cm9uZz4gOiB3aGVuIHNhdmluZyB5b3VyIHBsdWdpbiBpbiB0aGUgc3RhbmRhcmQg dGVtcGxhdGUgZm9ybWF0LCB0aGlzIGdvdmVybnMgd2hldGhlciB5b3UgcHJlZmVyIHRoZSBj b2RlIGJsb2NrIHRvIGJlIGF0IHRoZSB0b3Agb2YgdGhlIGZpbGUgYW5kIHRoZSBoZWxwIGJs b2NrIGJlbG93LCBvciB2aWNlIHZlcnNhPC9saT4KCTwvdWw+CgoJPHA+VGhlIG5leHQgdGhy ZWUgdGV4dGJveGVzIGFyZSBhbGwgdmVyeSBzaW1pbGFyOyB0aGV5IGRlZmluZSB0aGUgZm9y bWF0IG9mIHRoZSBmaWxlbmFtZXMgd2hlbiB5b3UgZXhwb3J0IHBsdWdpbnMuIFRoZSBmaXJz dCBpcyBmb3Igd2hlbiB5b3UgZXhwb3J0IHN0YW5kYXJkIDxzcGFuIGNsYXNzPSJjYXBzIj48 c3BhbiBjbGFzcz0iY2FwcyI+QkFTRTwvc3Bhbj48L3NwYW4+LTY0IHBsdWdpbnM7IHRoZSBz ZWNvbmQgaXMgZm9yIGNvbXByZXNzZWQgcGx1Z2luczsgdGhlIHRoaXJkIGlzIGZvciBleHBv cnRpbmcgYSBzdGFuZGFyZCA8c3BhbiBjbGFzcz0iY2FwcyI+PHNwYW4gY2xhc3M9ImNhcHMi PlBIUDwvc3Bhbj48L3NwYW4+IHRlbXBsYXRlLjwvcD4KCgk8cD5XaGVyZXZlciB5b3UgdHlw ZSA8Y29kZT57bmFtZX08L2NvZGU+LCB0aGUgcGx1Z2luIG5hbWUgd2lsbCBhcHBlYXIuIFNp bWlsYXJseSwgPGNvZGU+e3ZlcnNpb259PC9jb2RlPiB3aWxsIGJlIHJlcGxhY2VkIHdpdGgg dGhlIGN1cnJlbnQgcGx1Z2luIHZlcnNpb24gbnVtYmVyLiBZb3UgY2FuIHR5cGUgYW55dGhp bmcgeW91IGxpa2UgaW4gdGhlc2UgYm94ZXMsIGJ1dCBpdCYjODIxNztzIG1vcmUgdXNlZnVs IHRvIGluY2x1ZGUgYm90aCBvZiB0aGUgcmVwbGFjZW1lbnQgc3RyaW5ncyBzb21ld2hlcmUg aW4gZWFjaCBib3ggc28geW91IGRvbiYjODIxNzt0IGdldCBuYW1lIC8gdmVyc2lvbiBjbGFz aGVzLjwvcD4KCgk8cD5Gb3IgZXhhbXBsZSwgaWYgeW91IGRvbiYjODIxNzt0IGxpa2UgdGhl IGZhY3QgdGhhdCB6aXBwZWQgcGx1Z2lucyBhcmUgZXhwb3J0ZWQgYXMgPGNvZGU+cGZ4X215 X3BsdWdpbl92MC4xX3ppcC50eHQ8L2NvZGU+LCB5b3UgY2FuIGNoYW5nZSBpdC4gUGVyaGFw cyB5b3UgbWF5IHByZWZlciA8Y29kZT5wZnhfbXlfcGx1Z2luLWNvbXByZXNzZWQtMC4xLnR4 dDwvY29kZT4uIEluIHdoaWNoIGNhc2UsIHNldCB0aGUgMm5kIGJveCB0byA8Y29kZT57bmFt ZX0tY29tcHJlc3NlZC17dmVyc2lvbn0udHh0PC9jb2RlPi48L3A+CgoJPHA+VGhlIGV4dGVu c2lvbiBzaG91bGQgdXN1YWxseSBiZSBzcGVjaWZpZWQgc28geW91ciBzeXN0ZW0vYnJvd3Nl ciBrbm93cyB0aGUgZmlsZSYjODIxNztzIHR5cGUgd2hlbiBpdCBpcyBleHBvcnRlZCwgYnV0 IGl0JiM4MjE3O3Mgbm90IG1hbmRhdG9yeSBhcyB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPjxz cGFuIGNsYXNzPSJjYXBzIj5NSU1FPC9zcGFuPjwvc3Bhbj4gdHlwZSBpcyBnaXZlbiBzbyAo Z29vZCkgYnJvd3NlcnMgc2hvdWxkIHJlYWQgdGhhdC48L3A+CgoJPHA+RmluYWxseSwgaWYg eW91IHdpc2ggdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgaGVscCBjYWNoZWluZywgcHV0IHRoZSBw YXRoIHRvIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiB0aGUgPHN0cm9uZz5DYWNoZSBkaXI8 L3N0cm9uZz4gYm94LiBFbXB0eSB0aGUgYm94IGlmIHlvdSBwcmVmZXIgc2F2ZXMgYW5kIGV4 cG9ydHMgdG8gYmUgc2xvd2VyISBEZWZhdWx0cyB0byA8c3BhbiBjbGFzcz0iY2FwcyI+PHNw YW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj48L3NwYW4+JiM4MjE3O3MgdGVtcG9yYXJ5IGRp cmVjdG9yeS48L3A+CgoJPGgzIGlkPSJub3RlcyI+Tm90ZXMgLyBrbm93biBpc3N1ZXM8L2gz PgoKCTxvbD4KCQk8bGk+TW9yZSBlZGl0b3JzIGNhbiBiZSBpbnRlZ3JhdGVkIGludG8gdGhl IENvbXBvc2VyIGZhaXJseSBlYXNpbHkuIElmIHlvdSBmaW5kIGEgZ29vZCBvbmUsIGdldCBp biBjb250YWN0LiBCZSB3YXJuZWQgdGhhdCB0aGUgZWRpdG9ycyBkbyB0ZW5kIHRvIHNsb3cg dGhlIHBsdWdpbiBkb3duLCBlc3BlY2lhbGx5IGFzIGNvZGUgc2l6ZSBpbmNyZWFzZXMuPC9s aT4KCQk8bGk+VGVudGF0aXZlIHN1cHBvcnQgZm9yIENvZGVQcmVzcyBpcyBhdmFpbGFibGUg YnV0IGl0IGluZXhwbGljYWJseSBibGFua3Mgb3V0IHRoZSBwbHVnaW4gY29kZSB3aGVuIHNh dmVkLCBzbyBzdXBwb3J0IGlzIGRpc2FibGVkIGZvciBub3cuIElmIGFueW9uZSBjYW4gc2hl ZCBhbnkgbGlnaHQgb24gd2h5IGl0IGRvZXMgdGhpcywgcGxlYXNlIHNwZWFrIHVwISBMb29r IGluIHRoZSBpZWRfcGx1Z2luX3NldHVwKCkgZnVuY3Rpb24gdG93YXJkcyB0aGUgYm90dG9t IG9mIHRoZSBmaWxlLCB1bmNvbW1lbnQgdGhlIGNvbW1lbnRlZCBvdXQgbGluZSBhbmQgY29t bWVudCBvdXQgdGhlIG9uZSBiZW5lYXRoIGl0IHRvIGVuYWJsZSBzdXBwb3J0LCB0aGVuIHZp c2l0IHRoZSBTZXR1cCBwYWdlIGFuZCBzZWxlY3QgQ29kZVByZXNzIGZyb20gdGhlIGxpc3Qu IERvbiYjODIxNzt0IGV4cGVyaW1lbnQgd2l0aCB0aGlzIHNldHRpbmcgb24gYW4gaW1wb3J0 YW50IHBsdWdpbiA6LSk8L2xpPgoJCTxsaT5XaGVuIGEgcGx1Z2luIGlzIHNhdmVkIHRvIHRo ZSBwbHVnaW5fY2FjaGVfZGlyLCBpZiB5b3UgaGF2ZSBub3QgcHV0IDxjb2RlPiZhbXA7bHQ7 c3R5bGUmYW1wO2d0OzwvY29kZT4gbWFya2VycyBpbiB5b3VyIDxzcGFuIGNsYXNzPSJjYXBz Ij48c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPjwvc3Bhbj4gYmxvY2sgdGhleSB3aWxs IGJlIGFkZGVkIGZvciB5b3UgaW4gdGhlIHRleHQgYXJlYSBidXQgPGVtPm5vdDwvZW0+IHNh dmVkIGluIHRoZSBhY3R1YWwgdGVtcGxhdGUgdW50aWwgeW91IHNhdmUgaXQgYWdhaW4gKGV4 cG9ydGluZyBhcyBhIDxzcGFuIGNsYXNzPSJjYXBzIj48c3BhbiBjbGFzcz0iY2FwcyI+UEhQ PC9zcGFuPjwvc3Bhbj4gZmlsZSBpcyB1bmFmZmVjdGVkKS4gU28gaWYgeW91IGFyZSBpbiB0 aGUgaGFiaXQgb2YgbWFudWFsbHkgZG93bmxvYWRpbmcgdGhlIGZpbGUgZnJvbSB5b3VyIDxz cGFuIGNsYXNzPSJjYXBzIj48c3BhbiBjbGFzcz0iY2FwcyI+RlRQPC9zcGFuPjwvc3Bhbj4g Y2xpZW50IGltbWVkaWF0ZWx5IGFmdGVyIGEgc2F2ZSwganVzdCBzYXZlIHRoZSBwbHVnaW4g YWdhaW4gdG8gYmUgc3VyZTwvbGk+Cgk8L29sPgoKCTxoMyBpZD0iY2hhbmdlbG9nIj5DaGFu Z2Vsb2c8L2gzPgoKCTx1bD4KCQk8bGk+MjUgRmViIDA2IHwgMC4xIHwgSW5pdGlhbCByZWxl YXNlPC9saT4KCQk8bGk+MjUgRmViIDA2IHwgMC4yIHwgQWRkZWQgJiM4MjE2O3NhdmUgYXMm IzgyMTc7IG9wdGlvbjwvbGk+CgkJPGxpPjE3IE1hciAwNiB8IDAuMyB8IEFkZGVkICYjODIx NjtzYXZlIGFzIHBocCYjODIxNzs8L2xpPgoJCTxsaT4xMCBBcHIgMDYgfCAwLjQgfCBBZGRl ZCBzdXBwb3J0IGZvciBwbHVnaW5fY2FjaGVfZGlyPC9saT4KCQk8bGk+MDQgSmFuIDA4IHwg MC41IHwgRnVsbCBzdXBwb3J0IGZvciBzdGQgdGVtcGxhdGU7IGNvbXByZXNzZWQgcGx1Z2lu czsgTGlicmFyeSBwbHVnaW5zOyBUZXh0aWxlIGhlbHAgYW5kIHN0eWxpbmc7IGludGVncmF0 aW9uIHdpdGggbmV0LWNhcnZlciYjODIxNztzIFBsdWdpbiBIZWxwIFZpZXdlcjwvbGk+CgkJ PGxpPjA3IEphbiAwOCB8IDAuNiB8IEJ1aWx0LWluIGhlbHAgdmlld2VyICh0aGFua3MgbmV0 LWNhcnZlcik7IHN1cHBvcnQgZm9yIEVkaXQgQXJlYSAmYW1wOyBDb2RlUHJlc3MoaXNoKSAo dGhhbmtzIHZhcmlhYXMpOyBIZWxwIGJsb2NrL0NvZGUgYmxvY2sgcG9zaXRpb24gc3dpdGNo YWJsZSBvbiBleHBvcnQ7IGFkZGVkIFNldHVwIHByZWZzIHBhZ2U7IGxpbmUgYnJlYWsvc3R5 bGUgYnVnZml4ZXM8L2xpPgoJCTxsaT4wOCBKYW4gMDggfCAwLjcgfCBSZS1pbXBvcnRpbmcg cGx1Z2lucyBub3cgcmV0YWlucyBzdHlsZSBibG9jazsgYWRkZWQgJiM4MjE2O2FkbWluIHNp ZGUgcGx1Z2luIHdpdGggY2xpZW50LXNpZGUgdHlwZSYjODIxNzsgd2FybmluZzsgY2hhbmdl ZCBidXR0b24gc3R5bGluZyBhbmQgcG9zaXRpb25zIChhbGwgdGhhbmtzIG5ldC1jYXJ2ZXIp OyBnVHh0KCkgcHJlZiBsYWJlbHMgYW5kICYjODIxNjtpbnRlbGxpZ2VudCYjODIxNzsgcHJl ZnMgKGdvIGpRdWVyeSBnbyEpOyBjYWNoZWQgcGx1Z2lucyBub3cgYWxzbyBoYXZlIGRpcmVj dCBleHBvcnQgZnJvbSBFZGl0IHBhZ2U7ICYjODIxNjtkb24mIzgyMTc7dCB0ZXh0aWxlIDxz cGFuIGNsYXNzPSJjYXBzIj48c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj48L3NwYW4+ JiM4MjE3OyBjaGVjazsgbWlub3IgYnVnZml4ZXM8L2xpPgoJCTxsaT4wOSBKYW4gMDggfCAw LjcxIHwgVGV4dGFyZWEgd2lkdGggY2FuIG5vdyBiZSBjb250cm9sbGVkIGZyb20gcHJlZnMs IGFuZCBoZWlnaHQgZnJvbSBhIGRyYWcgYmFyOyBkZWZhdWx0IHdpZHRoIGluY3JlYXNlZCB0 byAxMTAgY2hhcnM7IHB1Ymxpc2ggcGx1Z2lucyBmcm9tIHRoZSBsaXN0IHBhZ2U7IEluc3Rh bGwgYnV0dG9uIHJlbW92ZWQgd2hlbiBwcmVmcyBhbGwgY29ycmVjdGx5IGluc3RhbGxlZCAo YWxsIHRoYW5rcyB2YXJpYWFzIC8gaWJsYXN0b2ZmKTwvbGk+CgkJPGxpPjEwIEphbiAwOCB8 IDAuNzIgfCBGaXhlZCBidWcgaWYgcGx1Z2luIGhhcyBubyBoZWxwOyBzdHlsZSBzZWN0aW9u IG5vIGxvbmdlciBzdG9yZWQvZXhwb3J0ZWQgaWYgaXQmIzgyMTc7cyBub3QgaW4gdXNlICh0 aGFua3MgdGhlX2dob3N0IC8gaWJsYXN0b2ZmKTwvbGk+CgkJPGxpPjExIEphbiAwOCB8IDAu NzMgfCBBZGRlZCBzdXBwb3J0IGZvciA8ZW0+cmVhZGluZzwvZW0+IGFuIG9wdGlvbmFsIHJl dmlzaW9uIGZyb20gdGhlIHRlbXBsYXRlIHBhcnNlciBhbmQgYXBwZW5kaW5nIGl0IHRvIHRo ZSB2ZXJzaW9uICh0aGFua3MgbmV0LWNhcnZlcik7IG1vcmUgZ1R4dCgpIHN0cmluZ3MgY29u dmVydGVkPC9saT4KCQk8bGk+MjggTWFyIDA4IHwgMC43NCB8IEZpeGVkIGVtcHR5IHBsdWdp biBjb2RlIGlmIFN0eWxlIGJsb2NrIGxlZnQgYmxhbmsgOyBmaXhlZCBzdHJpcC9zbGFzaC9l bmNvZGluZyBlcnJvcnMgKHRoYW5rcyB0aGVfZ2hvc3QvcnV1ZCkgOyBmaXhlZCBjcmxmIG5l d2xpbmVzIGluIGNvZGUgYmxvY2sgKHRoYW5rcyBoYWtqb29uL3J1dWQpPC9saT4KCQk8bGk+ MjggTWF5IDA4IHwgMC43NSB8IEFkZGVkICYjODIxNjttb2RpZmllZCYjODIxNzsgdG8gdGhl IFZlcnNpb24gY29sdW1uICh0aGFua3MgdWxpKSA7IGFkZGVkIGFiaWxpdHkgdG8gcmVuYW1l IGZpbGVzIGluIHRoZSBwbHVnaW4gY2FjaGUgZGlyIHdoZW4gdGhlIHZlcnNpb24gY2hhbmdl czwvbGk+CgkJPGxpPjAzIE5vdiAwOCB8IDAuOCB8IEFkZGVkIHN1cHBvcnQgZm9yIHJlY29t bWVuZGVkIHBsdWdpbiBsb2FkIG9yZGVyIDsgYWRkZWQgQWRtaW4tb25seSBwbHVnaW4gdHlw ZTsgYWRkZWQgYWJpbGl0eSB0byBvdmVycmlkZSBmaWxlbmFtZSBmb3JtYXQgb24gZXhwb3J0 IDsgYWRkZWQgcmVzdG9yZSBwb2ludC9yb2xsYmFjayAodGhhbmtzIG1hdmVyaWNrKSA7IGFk ZGVkIGNoYXJhY3RlciBjb3VudCAodGhhbmtzIHBlcGViZSkgOyByYXRpb25hbGlzZWQgdGhl IGxpc3QgYW5kIGVkaXQgcGFnZXMgOyBzcGVkIHVwIGV4cG9ydC9zYXZlIHJvdXRpbmVzIDsg Zml4ZWQgYSBmZXcgY29ybmVyIGNhc2UgYnVncyAoZS5nLiBlbXB0eSBwbHVnaW4gbmFtZSwg bWlzc2luZyBxdW90ZXMgaW4gdGVtcGxhdGUgb3B0aW9ucyk8L2xpPgoJCTxsaT4wMyBKYW4g MDkgfCAwLjgxIHwgQWRkZWQgdGV4dGlsZSBjYWNoZWluZyB0byBpbXByb3ZlIHBlcmZvcm1h bmNlIHdpdGggbGFyZ2UgaGVscCBmaWxlcyA7IHByb2ZpbGVkIGNvZGUgYW5kIGltcHJvdmVk IHNwZWVkIGluIHZhcmlvdXMgZnVuY3Rpb25zPC9saT4KCQk8bGk+MjMgRmViIDA5IHwgMC44 MiB8IENhbiBub3cgY3JlYXRlIG5ldyB0ZW1wbGF0ZSBmaWxlcyBvbiB0aGUgZmx5ICh0aGFu a3MgYXp3KSA7IGZpeGVkIFRleHRpbGUgbGltaXQgb24gbGFyZ2UgaGVscCBmaWxlcyA7IGZp eGVkIGRhdGFiYXNlIGNhbGxzIGZvciBNeVNRTCBzdHJpY3QgbW9kZSAodGhhbmtzIEdvY29t IC8gYXp3KTwvbGk+CgkJPGxpPjExIEFwciAwOSB8IDAuODMgfCBGaXhlZCBoZWxwIGZpbGUg PHNwYW4gY2xhc3M9ImNhcHMiPjxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+PC9zcGFu PiBvdXRwdXQgc28gaXQgdmFsaWRhdGVzIDsgdXNlIDxjb2RlPiRwcmVmczwvY29kZT4gaW5z dGVhZCBvZiA8Y29kZT4kR0xPQkFMUzwvY29kZT4gaW50ZXJuYWxseSA7IGNoZWNrIGlmIHBs dWdpbl9jYWNoZV9kaXIgZXhpc3RzIGJlZm9yZSB0cnlpbmcgdG8gdXNlIGl0IG9uIHRoZSBs aXN0IHBhZ2U8L2xpPgoJPC91bD4KCgk8aDIgaWQ9IndyaXRpbmciPldyaXRpbmcgYSBwbHVn aW48L2gyPgoKCTxwPllvdSBzaG91bGQgYmUgYXdhcmUgb2YgdGhlIDxhIGhyZWY9Imh0dHA6 Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD05ODgxIj5QbHVnaW4g QXV0aG9yIFJlc291cmNlczwvYT4gdG9waWMgb24gdGhlIFRleHRwYXR0ZXJuIFN1cHBvcnQg Rm9ydW0sIGFuZCB5b3UgbWlnaHQgYWxzbyB3YW50IHRvIGhhdmUgYSBsb29rIGF0IHRoZSA8 YSBocmVmPSJodHRwOi8vaW5zcGlyZWQua2lldi51YS90eHAtcGx1Z2luLWNoZWF0c2hlZXQi PlRleHRQYXR0ZXJuIHBsdWdpbiBjaGVhdCBzaGVldDwvYT4gYW5kIHRoZSB0dXRvcmlhbHMg YW5kIGd1aWRlcyBmb3IgPGEgaHJlZj0iaHR0cDovL3RleHRwYXR0ZXJuLm5ldC93aWtpL2lu ZGV4LnBocD90aXRsZT1FeHRlbmRpbmdfVGV4dHBhdHRlcm4iPkV4dGVuZGluZyBUZXh0cGF0 dGVybjwvYT4gb24gVGV4dEJvb2suPC9wPgoKCTxwPkhhcHB5IHBsdWdpbiBhdXRob3Jpbmcg Oi0pPC9wPgoKCTxwPjwvZGl2PjxiciAvPgo8IS0tICoqKiBCRUdJTiBQTFVHSU4gQ1NTICoq KiAtLT48YnIgLz4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KI2llZF9oZWxwIHsgbGluZS1o ZWlnaHQ6MS41IDt9CiNpZWRfaGVscCBjb2RlIHsgZm9udDogMTA1JS8xMzAlICYjODIyMDtD b3VyaWVyIE5ldyYjODIyMTssIGNvdXJpZXIsIG1vbm9zcGFjZTsgYmFja2dyb3VuZC1jb2xv cjogI0ZGRkZDQzt9CiNpZWRfaGVscCBoMSB7IGNvbG9yOiAjMzY5OyBmb250OiAyMHB4IEdl b3JnaWEsIHNhbnMtc2VyaWY7IG1hcmdpbjogMDsgdGV4dC1hbGlnbjogY2VudGVyOyB9CiNp ZWRfaGVscCBoMiB7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazsgcGFkZGluZzox MHB4IDAgMDsgY29sb3I6ICMzNjk7IGZvbnQ6IDE3cHggR2VvcmdpYSwgc2Fucy1zZXJpZjsg fQojaWVkX2hlbHAgaDMgeyBjb2xvcjogIzI3NTY4NTsgZm9udDogYm9sZCAxMnB4IEFyaWFs LCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMXB4OyBtYXJnaW46IDE1cHggMCAwO3Rl eHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7fTxiciAvPgo8L3N0eWxlPjxiciAvPgo8IS0tICoq KiBFTkQgUExVR0lOIENTUyAqKiogLS0+PC9wPiI7czozOiJtZDUiO3M6MzI6ImI5NGIwMDhm ZWI4YWM1NGMwZTkxNDNlOTMyNjhiNjlkIjt9