# Name: smd_remote_file v0.41 # Type: Admin/Client side plugin # Allows remote URL files to be handled from the Files tab # Author: Stef Dawson # URL: http://stefdawson.com/ # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YTo5OntzOjQ6Im5hbWUiO3M6MTU6InNtZF9yZW1vdGVfZmlsZSI7czo2OiJhdXRob3IiO3M6 MTE6IlN0ZWYgRGF3c29uIjtzOjEwOiJhdXRob3JfdXJpIjtzOjIyOiJodHRwOi8vc3RlZmRh d3Nvbi5jb20vIjtzOjc6InZlcnNpb24iO3M6NDoiMC40MSI7czoxMToiZGVzY3JpcHRpb24i O3M6NTY6IkFsbG93cyByZW1vdGUgVVJMIGZpbGVzIHRvIGJlIGhhbmRsZWQgZnJvbSB0aGUg RmlsZXMgdGFiIjtzOjQ6ImNvZGUiO3M6MTQ1ODc6Ii8vIHNtZF9yZW1vdGVfZmlsZSBieSBT dGVmIERhd3Nvbg0KDQovLyBZdWsgOi0oDQpnbG9iYWwgJHNtZF9yZW1vdGVfZmlsZV92YXJz Ow0KJHNtZF9yZW1vdGVfZmlsZV92YXJzID0gYXJyYXkoDQoJJ21zZycgPT4gJycsDQoJJ21p bl90eHBfdmVyJyA9PiAnNC4wLjYnLA0KKTsNCg0KaWYgKHR4cGludGVyZmFjZSA9PT0gJ2Fk bWluJyAmJiBncHMoJ2V2ZW50JykgPT09ICJmaWxlIikgew0KCWlmICh2ZXJzaW9uX2NvbXBh cmUodHhwX3ZlcnNpb24sICRzbWRfcmVtb3RlX2ZpbGVfdmFyc1snbWluX3R4cF92ZXInXSwg Ij49IikpIHsNCgkJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9yZW1vdGVfZmlsZV9yZXBsYWNl JywgJ2ZpbGUnLCAnc21kX3JlbW90ZV9maWxlX3JlcGxhY2UnKTsNCgkJcmVnaXN0ZXJfY2Fs bGJhY2soJ3NtZF9yZW1vdGVfZmlsZV91cGRhdGUnLCAnZmlsZScsICdmaWxlX3NhdmUnKTsN CgkJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9yZW1vdGVfZmlsZV9jcmVhdGUnLCAnZmlsZScs ICdzbWRfcmVtb3RlX2ZpbGVfY3JlYXRlJywgMSk7DQoJCXJlZ2lzdGVyX2NhbGxiYWNrKCdz bWRfcmVtb3RlX2ZpbGUnLCAnZmlsZScpOw0KCX0gZWxzZSB7DQoJCXRyaWdnZXJfZXJyb3Io Z1R4dCgndHhwX3ZlcnNpb24nKSAuICIgIiAuJHNtZF9yZW1vdGVfZmlsZV92YXJzWydtaW5f dHhwX3ZlciddLiAiIHJlcXVpcmVkLiIpOw0KCX0NCn0NCg0KaWYgKHR4cGludGVyZmFjZSA9 PT0gJ3B1YmxpYycpIHsNCglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3JlbW90ZV9kb3dubG9h ZCcsICdmaWxlX2Rvd25sb2FkJyk7DQp9DQoNCi8vIEJsb3ctYnktYmxvdyBlcXVpdmFsZW50 IG9mIGZpbGVfZG93bmxvYWRfbGluaywganVzdCBhIHJlbW90ZS1hd2FyZSB2ZXJzaW9uLg0K Ly8gQWRkcyB0aGUgY2hvb3NlIG9wdGlvbi4gRGVmYXVsdHMgdG8gMCAoID0gcmFuZG9tLCBm b3IgbG9hZCBiYWxhbmNpbmcpLiBTcGVjaWZ5DQovLyBhbnkgaGlnaGVyIGludGVnZXIgdG8g Z3JhYiB0aGF0IHBhcnRpY3VsYXIgZW50cnkgZnJvbSB0aGUgZmlsZSAoaWYgaXQgZXhpc3Rz LCBlbHNlIHVzZSAxc3QpDQpmdW5jdGlvbiBzbWRfZmlsZV9kb3dubG9hZF9saW5rKCRhdHRz LCAkdGhpbmcpIHsNCglnbG9iYWwgJHRoaXNmaWxlOw0KCWV4dHJhY3QobEF0dHMoYXJyYXko DQoJCSdmaWxlbmFtZScgPT4gJycsDQoJCSdpZCcgPT4gJycsDQoJCSdjaG9vc2UnID0+ICcw JywNCgkJJ3Nob3dfbGluaycgPT4gJzAnLA0KCSksICRhdHRzKSk7DQoNCgkvLyBSZW1vdmUg dGhlIGV4dHJhIGF0dHJpYnV0ZXMgbm90IGluIHRoZSBvcmlnaW5hbCB0YWcNCgl1bnNldCgk YXR0c1snc2hvd19saW5rJ10pOw0KCXVuc2V0KCRhdHRzWydjaG9vc2UnXSk7DQoNCgkka2V5 cyA9IGFycmF5KCJzbWRfY2hvb3NlIiA9PiAkY2hvb3NlKTsNCgkkb3V0ID0gZmlsZV9kb3du bG9hZF9saW5rKCRhdHRzLCAkdGhpbmcpOw0KCWlmIChzdHJwb3MoJHRoaXNmaWxlWydmaWxl bmFtZSddLCAiLmxpbmsiKSkgew0KCQkkb3JpZ0xpbmsgPSBleHBsb2RlKCciJywgJG91dCk7 DQoJCSRvcmlnTGlua1sxXSA9ICgoJHNob3dfbGluaykgPyAkb3JpZ0xpbmtbMV0gOiBzdHJf cmVwbGFjZSgiLmxpbmsiLCAiIiwgJG9yaWdMaW5rWzFdKSkgLiBqb2luX3FzKCRrZXlzKTsg Ly8gV2lsbCBpZ25vcmUgam9pbl9xcyBpZiBjaG9vc2UgaXMgMA0KCQkkb3V0ID0gaW1wbG9k ZSgnIicsICRvcmlnTGluayk7DQoJfQ0KCXJldHVybiAkb3V0Ow0KfQ0KDQovLyBFcXVpdmFs ZW50IHRvIGZpbGVfZG93bmxvYWRfbmFtZSBidXQgb3B0aW9uYWxseSByZW1vdmVzIHRoZSAu bGluaw0KZnVuY3Rpb24gc21kX2ZpbGVfZG93bmxvYWRfbmFtZSgkYXR0cykgew0KCWdsb2Jh bCAkdGhpc2ZpbGU7DQoJZXh0cmFjdChsQXR0cyhhcnJheSgNCgkJJ3Nob3dfbGluaycgPT4g JzAnLA0KCSksICRhdHRzKSk7DQoJYXNzZXJ0X2ZpbGUoKTsNCglyZXR1cm4gKCRzaG93X2xp bmspID8gJHRoaXNmaWxlWydmaWxlbmFtZSddIDogc3RyX3JlcGxhY2UoIi5saW5rIiwgIiIs ICR0aGlzZmlsZVsnZmlsZW5hbWUnXSk7DQp9DQoNCi8vIEFkZCBhbiBpbWFnZSB0byB0aGUg ZG93bmxvYWQgZm9ybSB3aGljaCwgYnkgZGVmYXVsdCwgaXMgYmFzZWQgb24gdGhlIGZpbGVu YW1lIG9mIHRoZSBkb3dubG9hZCBpdHNlbGYNCmZ1bmN0aW9uIHNtZF9maWxlX2Rvd25sb2Fk X2ltYWdlKCRhdHRzKSB7DQoJZ2xvYmFsICR0aGlzZmlsZTsNCglhc3NlcnRfZmlsZSgpOw0K DQoJZXh0cmFjdChsQXR0cyhhcnJheSgNCgkJJ2ZpbGVuYW1lJyA9PiAnJywNCgkJJ2lkJyA9 PiAnJywNCgkJJ2V4dGVuc2lvbicgPT4gJ2pwZycsDQoJCSdpZm1pc3NpbmcnID0+ICc/cmVm JywNCgkJJ3RodW1iJyA9PiAnMCcsDQoJCSdjbGFzcycgPT4gJycsDQoJCSd3cmFwdGFnJyA9 PiAnJywNCgkpLCAkYXR0cykpOw0KCSRmaWxlbGluayA9ICR0aGlzZmlsZVsnZmlsZW5hbWUn XTsNCglpZiAoJGZpbGVuYW1lID09ICIiKSB7DQoJCSRmaWxlbmFtZSA9ICRmaWxlbGluazsN Cgl9DQoJJGZpbGVuYW1lID0gc3RyX3JlcGxhY2UoIi5saW5rIiwgIiIsICRmaWxlbmFtZSkg LiAoKCRleHRlbnNpb249PSIiKSA/ICcnIDogJy4nLiRleHRlbnNpb24pOw0KDQoJJGltZyA9 ICcnOw0KCWlmICgkaWQpIHsNCgkJJGltZyA9ICgkdGh1bWI9PTApID8gQGltYWdlKGFycmF5 KCJpZCIgPT4gJGlkLCAiY2xhc3MiID0+ICRjbGFzcywgIndyYXB0YWciID0+ICR3cmFwdGFn KSkgOiBAdGh1bWJuYWlsKGFycmF5KCJpZCIgPT4gJGlkLCAiY2xhc3MiID0+ICRjbGFzcywg IndyYXB0YWciID0+ICR3cmFwdGFnKSk7DQoJfSBlbHNlIGlmICgoc3RycG9zKCRmaWxlbmFt ZSwgImh0dHA6Ly8iKSA9PT0gMCkgfHwgKHN0cnBvcygkZmlsZW5hbWUsICIvIikgPT09IDAp KSB7DQoJCSRpbWcgPSAoKCR3cmFwdGFnPT0iIikgPyAnJyA6ICc8Jy4kd3JhcHRhZy4gKCgk Y2xhc3M9PSIiKSA/ICcnIDogJyBjbGFzcz0iJy4kY2xhc3MuJyInKSAuJz4nKSAuICc8aW1n IHNyYz0iJy4kZmlsZW5hbWUuJyInLiAoKCR3cmFwdGFnPT0iIiAmJiAkY2xhc3MpID8gJyBj bGFzcz0iJy4kY2xhc3MuJyInIDogJycpIC4gJy8+Jy4gKCgkd3JhcHRhZz09IiIpID8gJycg OiAnPC8nLiR3cmFwdGFnLic+Jyk7DQoJfSBlbHNlIHsNCgkJJGltZyA9ICgkdGh1bWI9PTAp ID8gQGltYWdlKGFycmF5KCJuYW1lIiA9PiAkZmlsZW5hbWUsICJjbGFzcyIgPT4gJGNsYXNz LCAid3JhcHRhZyIgPT4gJHdyYXB0YWcpKSA6IEB0aHVtYm5haWwoYXJyYXkoIm5hbWUiID0+ ICRmaWxlbmFtZSwgImNsYXNzIiA9PiAkY2xhc3MsICJ3cmFwdGFnIiA9PiAkd3JhcHRhZykp Ow0KCX0NCgkkd3JhcHBlciA9ICgoJHdyYXB0YWc9PSIiKSA/ICdAQFJFUEwnIDogJzwnLiR3 cmFwdGFnLiAoKCRjbGFzcz09IiIpID8gJycgOiAnIGNsYXNzPSInLiRjbGFzcy4nIicpIC4n PkBAUkVQTDwvJy4kd3JhcHRhZy4nPicpOw0KCWlmIChzdHJwb3MoJGlmbWlzc2luZywgIj9y ZWYiKSA9PT0gMCkgew0KCQkkZGlzcGxheSA9ICgkaWQpID8gJGlkIDogJGZpbGVuYW1lOw0K CQkkbWlzc2luZyA9IHN0cl9yZXBsYWNlKCJAQFJFUEwiLCAkZGlzcGxheSwgJHdyYXBwZXIp Ow0KCX0gZWxzZSBpZiAoc3RycG9zKCRpZm1pc3NpbmcsICI/aW1hZ2UiKSA9PT0gMCkgew0K CQkkaW1nUGFydHMgPSBleHBsb2RlKCI6IiwgJGlmbWlzc2luZyk7DQoJCWlmIChjb3VudCgk aW1nUGFydHMpID09IDIpIHsNCgkJCSRpbWdPcHRzID0gYXJyYXkoKTsNCgkJCWlmKGlzX251 bWVyaWMoJGltZ1BhcnRzWzFdKSkgew0KCQkJCSRpbWdPcHRzWyJpZCJdID0gJGltZ1BhcnRz WzFdOw0KCQkJfSBlbHNlIHsNCgkJCQkkaW1nT3B0c1sibmFtZSJdID0gJGltZ1BhcnRzWzFd Ow0KCQkJfQ0KCQkJJG1pc3NpbmcgPSBzdHJfcmVwbGFjZSgiQEBSRVBMIiwgKCgkdGh1bWI9 PTApID8gQGltYWdlKCRpbWdPcHRzKSA6IEB0aHVtYm5haWwoJGltZ09wdHMpKSwgJHdyYXBw ZXIpOw0KCQl9IGVsc2Ugew0KCQkJJG1pc3NpbmcgPSAiIjsNCgkJfQ0KCX0gZWxzZSBpZiAo JGlmbWlzc2luZyA9PSAiIikgew0KCQkkbWlzc2luZyA9ICIiOw0KCX0gZWxzZSB7DQoJCSRt aXNzaW5nID0gc3RyX3JlcGxhY2UoIkBAUkVQTCIsICRpZm1pc3NpbmcsICR3cmFwcGVyKTsN Cgl9DQoJcmV0dXJuICgkaW1nKSA/ICRpbWcgOiAkbWlzc2luZzsNCn0NCg0KLy8gR2VuZXJp YyBjYWxsYmFjayB3aGljaCBpcyBmaXJlZCBfYWZ0ZXJfIHRoZSBGaWxlcyBwYWdlIGhhcyBs b2FkZWQuDQovLyBQZXJmb3JtcyBkaXNwbGF5IGNsZWFudXAvaW5zZXJ0aW9uIGFuZCBwb3N0 IHByb2Nlc3Npbmcgb2YgYW55IGZpbGUgaW5zZXJ0cy9lZGl0cw0KZnVuY3Rpb24gc21kX3Jl bW90ZV9maWxlKCRldmVudCwgJHN0ZXApIHsNCglnbG9iYWwgJHNtZF9yZW1vdGVfZmlsZV92 YXJzOw0KDQoJJGhlbHBMaW5rID0gJzxhIHRhcmdldD0iX2JsYW5rIicuDQoJCQknIGhyZWY9 Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9zbWRfcmVtb3RlX2ZpbGVfdXJsX3BvcHVwIicuDQoJ CQknIG9uY2xpY2s9InBvcFdpbih0aGlzLmhyZWYpOyByZXR1cm4gZmFsc2U7IiBjbGFzcz0i cG9waGVscCI+PzwvYT4nOw0KCWlmICgkc3RlcCA9PSAiZmlsZV9lZGl0IiB8fCAkc3RlcCA9 PSAiZmlsZV9yZXBsYWNlIikgew0KCQkkaWQgPSBhc3NlcnRfaW50KGdwcygnaWQnKSk7DQoJ CSRycyA9IHNhZmVfcm93KCdmaWxlbmFtZScsJ3R4cF9maWxlJywnaWQgPSAnLiAkaWQpOw0K CQlpZiAoc3RycG9zKCRyc1snZmlsZW5hbWUnXSwgIi5saW5rIikgIT09IGZhbHNlKSB7DQoJ CQkkdWxfZm9ybSA9IHRyaW0oZm9ybShlSW5wdXQoJ2ZpbGUnKS4gc0lucHV0KCdzbWRfcmVt b3RlX2ZpbGVfcmVwbGFjZScpLiBoSW5wdXQoJ2lkJywkaWQpLg0KCQkJCQlncmFmKCdBZGQg VVJMJy5zcC4kaGVscExpbmsuc3AuZklucHV0KCd0ZXh0JywgJ3NtZF9yZW1vdGVfdXJsJywg JycsICdlZGl0JywgJ0VudGVyIGEgVVJMIHRvIGFkZCB0byB0aGlzIGZpbGUnLCAnJywgJzMy Jykuc3AuDQoJCQkJCQkiT3ZlcndyaXRlOiIuc3AuY2hlY2tib3goJ3NtZF9yZW1vdGVfYmxh dCcsICdzbWRfcmVtb3RlX2JsYXQnLCAwKS5zcC4NCgkJCQkJCWZJbnB1dCgnc3VibWl0Jywg JycsICdVcGxvYWQnLCAnc21hbGxlcmJveCcpKQ0KCQkJCSwgJ3RleHQtYWxpZ246IGNlbnRl cjsnKSk7DQoJCQllY2hvIHNtZF9yZW1vdGVfanMoJyQoIi51cGxvYWQtZm9ybSIpLnJlcGxh Y2VXaXRoKFwnJy4kdWxfZm9ybS4nXCcpOycpOw0KCQl9DQoJfSBlbHNlIHsNCgkJJHVsX2Zv cm0gPSB0cmltKGZvcm0oZUlucHV0KCdmaWxlJykuIHNJbnB1dCgnc21kX3JlbW90ZV9maWxl X2NyZWF0ZScpLg0KCQkJCQlncmFmKCdvciBVUkwnLnNwLiRoZWxwTGluay5zcC5mSW5wdXQo J3RleHQnLCAnc21kX3JlbW90ZV91cmwnLCAnJywgJ2VkaXQnLCAnRW50ZXIgYSBVUkwgdG8g dXBsb2FkIHRvIFRYUCcsICcnLCAnMzInKS5zcC4NCgkJCQkJCWZJbnB1dCgnc3VibWl0Jywg JycsICdVcGxvYWQnLCAnc21hbGxlcmJveCcpKQ0KCQkJCSwgJ3RleHQtYWxpZ246IGNlbnRl cjsnKSk7DQoJCWVjaG8gc21kX3JlbW90ZV9qcygnJCgiLnVwbG9hZC1mb3JtIikuYXBwZW5k KFwnJy4kdWxfZm9ybS4nXCcpOycpOw0KCX0NCg0KCWlmICgkc21kX3JlbW90ZV9maWxlX3Zh cnNbJ21zZyddICE9ICIiKSB7DQoJCWVjaG8gc21kX3JlbW90ZV9qcygnJCgiI25hdi1wcmlt YXJ5IHRhYmxlIHRkOmVxKDApIikuYXBwZW5kKFwnJy4kc21kX3JlbW90ZV9maWxlX3ZhcnNb J21zZyddLidcJyk7Jyk7DQoJfQ0KfQ0KDQovLyBXaGVuIGEgZmlsZSBpcyAicmVwbGFjZWQi IHdpdGggYSBuZXcgVVJMIHRoZSBleGlzdGluZyBmaWxlIG5hbWUgbXVzdCByZW1haW4NCi8v IHVuY2hhbmdlZC4gQnkgZGVmYXVsdCB0aGUgbmV3IFVSTCBpcyBhcHBlbmRlZCB0byB0aGUg LmxpbmsgZmlsZSB1bmxlc3MgdGhlICdvdmVyd3JpdGUnDQovLyBjaGVja2JveCBpcyBzZXQN CmZ1bmN0aW9uIHNtZF9yZW1vdGVfZmlsZV9yZXBsYWNlKCkgew0KCWdsb2JhbCAkZmlsZV9i YXNlX3BhdGgsICRzbWRfcmVtb3RlX2ZpbGVfdmFyczsNCg0KCWV4dHJhY3QoZ3BzYShhcnJh eSgnc21kX3JlbW90ZV91cmwnLCAnc21kX3JlbW90ZV9ibGF0JywgJ2lkJykpKTsNCgkkaWQg PSBhc3NlcnRfaW50KCRpZCk7DQoJJHVybCA9IHRyaW0oJHNtZF9yZW1vdGVfdXJsKTsNCgkk cnMgPSBzYWZlX3JvdygnZmlsZW5hbWUnLCd0eHBfZmlsZScsJ2lkID0gJy4kaWQpOw0KDQoJ aWYgKHN0cnBvcygkcnNbJ2ZpbGVuYW1lJ10sICIubGluayIpICE9PSBmYWxzZSkgew0KCQlp ZiAoc3RycG9zKCR1cmwsICJodHRwIikgPT09IDApIHsNCgkJCSR3cml0ZU1vZGUgPSAoJHNt ZF9yZW1vdGVfYmxhdCkgPyAidyIgOiAiYSI7DQoJCQkkZGVzdF9maWxlcGF0aCA9IGJ1aWxk X2ZpbGVfcGF0aCgkZmlsZV9iYXNlX3BhdGgsICRyc1snZmlsZW5hbWUnXSk7DQoJCQlzbWRf cmVtb3RlX2ZpbGVfd3JpdGUoJGRlc3RfZmlsZXBhdGgsICRyc1snZmlsZW5hbWUnXSwgJHVy bCwgJHdyaXRlTW9kZSk7DQoJCX0gZWxzZSB7DQoJCQkkc21kX3JlbW90ZV9maWxlX3ZhcnNb J21zZyddID0gZ1R4dCgnZmlsZV91cGxvYWRfZmFpbGVkJykgLiAoKGVtcHR5KCRzbWRfcmVt b3RlX3VybCkpID8gJyAtICcuZ1R4dCgndXBsb2FkX2Vycl9ub19maWxlJykgOiAnJyk7DQoJ CX0NCgl9DQp9DQoNCi8vIEV2ZXJ5IHRpbWUgYSBmaWxlIGlzIHNhdmVkL2VkaXRlZCwgVFhQ IHJlY2FsY3VsYXRlcyBpdHMgc2l6ZSBmcm9tIHRoZSByZWFsIGZpbGUgKGdycnIpLg0KLy8g VGhpcyBpcyB1bmRlc2lyYWJsZSBzbyBpdCBpcyByZXBsYWNlZCB3aXRoIHRoZSBzaXplIG9m IHRoZSByZW1vdGUgVVJMIGZpbGUgaW5zdGVhZC4NCmZ1bmN0aW9uIHNtZF9yZW1vdGVfZmls ZV91cGRhdGUoKSB7DQoJZXh0cmFjdChncHNhKGFycmF5KCdpZCcpKSk7DQoJc21kX3JlbW90 ZV9zZXRfc2l6ZSgkaWQpOw0KfQ0KDQovLyBTZXRzIHRoZSBzaXplIG9mIHRoZSBnaXZlbiBU WFAgZGF0YWJhc2UgZmlsZSB0byB0aGF0IG9mIGl0cyBjb3JyZXNwb25kaW5nICJyZWFsIiBy ZW1vdGUgVVJMIGZpbGUgc2l6ZQ0KZnVuY3Rpb24gc21kX3JlbW90ZV9zZXRfc2l6ZSgkaWRf b3JfZmlsZSkgew0KCWdsb2JhbCAkZmlsZV9iYXNlX3BhdGg7DQoNCglpZiAoaXNfbnVtZXJp YygkaWRfb3JfZmlsZSkpIHsNCgkJJGZpbGVuYW1lID0gdHJpbShzYWZlX2ZpZWxkKCJmaWxl bmFtZSIsICJ0eHBfZmlsZSIsICJpZD0iLmludHZhbCgkaWRfb3JfZmlsZSkpKTsNCgl9IGVs c2Ugew0KCQkkZmlsZW5hbWUgPSB0cmltKGRvU2xhc2goJGlkX29yX2ZpbGUpKTsNCgl9DQoJ aWYgKHN0cnBvcygkZmlsZW5hbWUsICIubGluayIpKSB7DQoJCSRmaWxlcGF0aCA9IGJ1aWxk X2ZpbGVfcGF0aCgkZmlsZV9iYXNlX3BhdGgsICRmaWxlbmFtZSk7DQoJCSR1cmwgPSBzbWRf cmVtb3RlX2ZpbGVfbGlzdCgkZmlsZXBhdGgsIDEsIDEpOw0KCQlpZiAoY291bnQoJHVybCkg PiAwKSB7DQoJCQkkaGRycyA9IHNtZF9nZXRfaGVhZGVycygkdXJsWzBdLCAxKTsNCgkJCSRz aXplID0gKCRoZHJzID09PSBmYWxzZSB8fCAhaXNzZXQoJGhkcnNbJ2NvbnRlbnQtbGVuZ3Ro J10pKSA/IDEgOiAkaGRyc1snY29udGVudC1sZW5ndGgnXTsNCgkJCXNhZmVfdXBkYXRlKCJ0 eHBfZmlsZSIsICJzaXplPSIuJHNpemUsICJmaWxlbmFtZT0nIi4kZmlsZW5hbWUuIiciKTsN CgkJfQ0KCX0NCn0NCg0KLy8gQ2FsbGJhY2sgZm9yIHVwbG9hZGluZyBhIFVSTCBmcm9tIHRo ZSBGaWxlcyB0YWINCmZ1bmN0aW9uIHNtZF9yZW1vdGVfZmlsZV9jcmVhdGUoKSB7DQoJZ2xv YmFsICRmaWxlX2Jhc2VfcGF0aCwgJHNtZF9yZW1vdGVfZmlsZV92YXJzOw0KDQoJZXh0cmFj dChkb1NsYXNoKGdwc2EoYXJyYXkoJ3NtZF9yZW1vdGVfdXJsJywnY2F0ZWdvcnknLCdwZXJt aXNzaW9ucycsJ2Rlc2NyaXB0aW9uJykpKSk7DQoNCgkkdXJsID0gdHJpbSgkc21kX3JlbW90 ZV91cmwpOw0KCS8vIE9ubHkgaW50ZXJjZXB0IHJlbW90ZSBmaWxlczsgbGVhdmUgZXZlcnl0 aGluZyBlbHNlIGZvciBUWFAgdG8gbWFuYWdlDQoJaWYgKHN0cnBvcygkdXJsLCAiaHR0cCIp ID09PSAwKSB7DQoJCSRoZHJzID0gc21kX2dldF9oZWFkZXJzKCR1cmwsIDEpOw0KCQkkc2l6 ZSA9ICgkaGRycyA9PT0gZmFsc2UgfHwgIWlzc2V0KCRoZHJzWydjb250ZW50LWxlbmd0aCdd KSkgPyAxIDogJGhkcnNbJ2NvbnRlbnQtbGVuZ3RoJ107DQoNCgkJLy8gTWFrZSBhIGZpbGVu YW1lIGFuZCBmdWxsIHBhdGg6IHVuZW5jb2RlZA0KCQkkZGVzdF9maWxlbmFtZSA9IGJhc2Vu YW1lKHVybGRlY29kZSgkdXJsKSkuIi5saW5rIjsNCgkJJGRlc3RfZmlsZXBhdGggPSBidWls ZF9maWxlX3BhdGgoJGZpbGVfYmFzZV9wYXRoLCAkZGVzdF9maWxlbmFtZSk7DQoNCgkJaWYg KGZpbGVfZXhpc3RzKCRkZXN0X2ZpbGVwYXRoKSkgew0KCQkJc21kX3JlbW90ZV9maWxlX3dy aXRlKCRkZXN0X2ZpbGVwYXRoLCAkZGVzdF9maWxlbmFtZSwgJHVybCk7DQoJCX0gZWxzZSB7 DQoJCQkvLyBGaWxlIGRvZXNuJ3QgZXhpc3Qgc28gY3JlYXRlIGl0IGFuZCBwdXQgdGhlIFVS TCBpbnNpZGUNCgkJCSR0bXAgPSB0ZW1wbmFtKCIvdG1wIiwgInNtZF8iKTsNCgkJCSRoYW5k bGUgPSBmb3BlbigkdG1wLCAidyIpOw0KCQkJZndyaXRlKCRoYW5kbGUsICR1cmwubik7DQoJ CQlmY2xvc2UoJGhhbmRsZSk7DQoJCQlyZW5hbWUoJHRtcCwgJGRlc3RfZmlsZXBhdGgpOw0K DQoJCQkvLyBBZGQgdGhlIGZpbGUgdG8gVFhQDQoJCQkkcmV0ID0gc2FmZV9pbnNlcnQoInR4 cF9maWxlIiwNCgkJCQkiZmlsZW5hbWUgPSAnJGRlc3RfZmlsZW5hbWUnLA0KCQkJCSBjYXRl Z29yeSA9ICckY2F0ZWdvcnknLA0KCQkJCSBwZXJtaXNzaW9ucyA9ICckcGVybWlzc2lvbnMn LA0KCQkJCSBkZXNjcmlwdGlvbiA9ICckZGVzY3JpcHRpb24nLA0KCQkJCSBzaXplID0gJyRz aXplJywNCgkJCQkgY3JlYXRlZCA9IG5vdygpLA0KCQkJCSBtb2RpZmllZCA9IG5vdygpDQoJ CQkiKTsNCgkJCSRzbWRfcmVtb3RlX2ZpbGVfdmFyc1snbXNnJ10gPSBnVHh0KCdmaWxlX3Vw bG9hZGVkJywgYXJyYXkoJ3tuYW1lfScgPT4gdXJsZGVjb2RlKCR1cmwpKSk7DQoJCX0NCgl9 IGVsc2Ugew0KCQkkc21kX3JlbW90ZV9maWxlX3ZhcnNbJ21zZyddID0gZ1R4dCgnZmlsZV91 cGxvYWRfZmFpbGVkJykgLiAoKGVtcHR5KCRzbWRfcmVtb3RlX3VybCkpID8gJyAtICcuZ1R4 dCgndXBsb2FkX2Vycl9ub19maWxlJykgOiAnJyk7DQoJfQ0KfQ0KDQovLyBBcHBlbmQgYSBV UkwgdG8gdGhlIGdpdmVuIGZpbGUuIElmIHdyaXRlTW9kZT0idyIgdGhlIHdob2xlIGZpbGUg aXMgcmVwbGFjZWQNCmZ1bmN0aW9uIHNtZF9yZW1vdGVfZmlsZV93cml0ZSgkZmlsZXBhdGgs ICRmaWxlbmFtZSwgJHVybCwgJHdyaXRlTW9kZT0iYSIpIHsNCglnbG9iYWwgJHNtZF9yZW1v dGVfZmlsZV92YXJzOw0KDQoJLy8gUmVhZCB0aGUgd2hvbGUgZmlsZSBiZWNhdXNlIHdlIG9u bHkgd2FudCB0byBhZGQgdGhlIFVSTCBpZiBpdCdzIG5vdCB0aGVyZSBhbHJlYWR5DQoJJGxp bmVzID0gc21kX3JlbW90ZV9maWxlX2xpc3QoJGZpbGVwYXRoLCAwLCAxKTsNCglpZiAoIWlu X2FycmF5KCR1cmwsICRsaW5lcykgfHwgJHdyaXRlTW9kZSA9PSAidyIpIHsNCgkJJGhhbmRs ZSA9IGZvcGVuKCRmaWxlcGF0aCwgJHdyaXRlTW9kZSk7DQoJCWZ3cml0ZSgkaGFuZGxlLCAk dXJsLm4pOw0KCQlmY2xvc2UoJGhhbmRsZSk7DQoJCSRzbWRfcmVtb3RlX2ZpbGVfdmFyc1sn bXNnJ10gPSBnVHh0KCdmaWxlX3VwbG9hZGVkJywgYXJyYXkoJ3tuYW1lfScgPT4gdXJsZGVj b2RlKCR1cmwpKSk7DQoJfSBlbHNlIHsNCgkJJHNtZF9yZW1vdGVfZmlsZV92YXJzWydtc2cn XSA9IGdUeHQoJ2ZpbGVfYWxyZWFkeS1leGlzdHMnLCBhcnJheSgne25hbWV9JyA9PiB1cmxk ZWNvZGUoJHVybCkpKTsNCgl9DQoJLy8gU2V0IHRoZSBzaXplIGp1c3QgaW4gY2FzZQ0KCXNt ZF9yZW1vdGVfc2V0X3NpemUoJGZpbGVuYW1lKTsNCn0NCg0KLy8gUmVhZCB0aGUgY29udGVu dHMgb2YgdGhlIGNob3NlbiBmaWxlIChmdWxsIHBhdGggcmVxdWlyZWQpIGFuZCBnZXQgbGlu ZXMgZnJvbSB3aXRoaW4sIGFkZGluZyB0aGVtIHRvIGFuIGFycmF5Lg0KLy8gICRvZmZzZXQg aXMgd2hlcmUgdG8gc3RhcnQgZnJvbS4gTm9ybWFsbHkgMSA9IDFzdCByb3csIDIgPSAybmQg cm93IGFuZCBzbyBvbi4gMCA9IGEgcmFuZG9tIHJvdy4NCi8vICAkcXR5IHNwZWNpZmllcyBo b3cgbWFueSByb3dzIHRvIHB1bGwuIDAgPSB1bmxpbWl0ZWQuDQpmdW5jdGlvbiBzbWRfcmVt b3RlX2ZpbGVfbGlzdCgkZm5hbWUsICRxdHk9MSwgJG9mZnNldD0wKSB7DQoJJG91dCA9IGFy cmF5KCk7DQoJaWYgKGZpbGVfZXhpc3RzKCRmbmFtZSkpIHsNCgkJJGZkID0gZm9wZW4oJGZu YW1lLCAiciIpOw0KCQkvLyBSZWFkIHRoZSB3aG9sZSBmaWxlIGluICh5ZXMgdGhlcmUncyB0 aGUgZmlsZSgpIGNhbGwsIGJ1dCBmZ2V0cygpIGlzIHN1cHBvc2VkbHkgcXVpY2tlciBvbiB0 eHQgZmlsZXMpDQoJCXdoaWxlICghZmVvZigkZmQpKSB7DQoJCQkkbGluZSA9IHJ0cmltKGZn ZXRzKCRmZCkpOw0KCQkJaWYgKCRsaW5lICE9ICIiKSB7DQoJCQkgICAkbGluZXNbXSA9ICRs aW5lOw0KCQkJfQ0KCQl9DQoJCWZjbG9zZSAoJGZkKTsNCgkJaWYgKCRvZmZzZXQgPT0gMCkg ew0KCQkJc2h1ZmZsZSgkbGluZXMpOw0KCQkJJG9mZnNldCA9IDE7DQoJCX0NCgkJJG9mZnNl dCA9ICgkb2Zmc2V0ID4gY291bnQoJGxpbmVzKSkgPyAxIDogJG9mZnNldDsNCgkJJG91dCA9 ICgkcXR5ID09IDApID8gJGxpbmVzIDogYXJyYXlfc2xpY2UoJGxpbmVzLCAkb2Zmc2V0LTEs ICRxdHkpOw0KCX0NCglyZXR1cm4gJG91dDsNCn0NCg0KLy8gQ2FsbGVkIGp1c3QgYmVmb3Jl IGEgZG93bmxvYWQgaXMgaW5pdGlhdGVkDQpmdW5jdGlvbiBzbWRfcmVtb3RlX2Rvd25sb2Fk KCRldmVudCwgJHN0ZXApIHsNCglnbG9iYWwgJHByZXRleHQsICRpZCwgJGZpbGVfYmFzZV9w YXRoLCAkZmlsZV9lcnJvcjsNCg0KCWlmICghaXNzZXQoJGZpbGVfZXJyb3IpKSB7DQoJCS8v IEdldCB0aGUgInRydWUiIGZpbGVuYW1lICh1bmZvcnR1bmF0ZWx5IGZyb20gdGhlIGRhdGFi YXNlID0gMSBleHRyYSBxdWVyeSkuDQoJCSRyZWFsX2ZpbGUgPSBzYWZlX3JvdygiZmlsZW5h bWUsIHNpemUiLCAidHhwX2ZpbGUiLCAiaWQ9Ii5pbnR2YWwoJGlkKSk7DQoJCWlmIChzdHJw b3MoJHJlYWxfZmlsZVsnZmlsZW5hbWUnXSwgIi5saW5rIikgPiAwKSB7DQoJCQkkY2hvb3Nl ID0gMDsNCgkJCS8vIEdldCBhbnkgb3ZlcnJpZGluZyB2YWx1ZSBvZiBzbWRfY2hvb3NlIGZy b20gdGhlIHF1ZXJ5IHN0cmluZw0KCQkJaWYgKCRwcmV0ZXh0WydxcyddKSB7DQoJCQkJbGlz dCgkcWtleSwgJHF2YWwpID0gZXhwbG9kZSgiPSIsICRwcmV0ZXh0WydxcyddKTsNCgkJCQlp ZiAoJHFrZXkgPT0gInNtZF9jaG9vc2UiKSB7DQoJCQkJCWlmICgkcXZhbCA+IDApIHsNCgkJ CQkJCSRjaG9vc2UgPSBpbnR2YWwoJHF2YWwpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJ Ly8gVGhlIGZpbGUgc2l6ZSwgaG93ZXZlciwgaXMgdGhhdCBvZiB0aGUgcmVtb3RlIGZpbGUN CgkJCSRyZW1vdGVVUkwgPSBzbWRfcmVtb3RlX2ZpbGVfbGlzdChidWlsZF9maWxlX3BhdGgo JGZpbGVfYmFzZV9wYXRoLCAkcmVhbF9maWxlWydmaWxlbmFtZSddKSwgMSwgJGNob29zZSk7 DQoJCQlpZiAoY291bnQoJHJlbW90ZVVSTCkgPiAwKSB7DQoJCQkJJHVybCA9ICRyZW1vdGVV UkxbMF07DQoJCQkJLy8gVGVzdCB0aGUgZmlsZSBleGlzdHM6IHNsb3csIGJ1dCByZWR1Y2Vz IGZhbHNlIGRvd25sb2FkIGNvdW50IGluY3JlbWVudHMNCgkJCQkkaGRycyA9IHNtZF9nZXRf aGVhZGVycygkdXJsLCAxKTsNCgkJCQkkYWxsa2V5ID0gc3RydG9sb3dlcihpbXBsb2RlKCIg IiwgYXJyYXlfa2V5cygkaGRycykpKTsNCgkJCQlpZiAoc3RycG9zKCRhbGxrZXksICIyMDAi KSA+IDAgJiYgc3RycG9zKCRhbGxrZXksICJvayIpID4gMCkgew0KCQkJCQloZWFkZXIoJ0Nv bnRlbnQtRGVzY3JpcHRpb246IEZpbGUgRG93bmxvYWQnKTsNCgkJCQkJaGVhZGVyKCdDb250 ZW50LVR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScpOw0KCQkJCQloZWFkZXIoJ0Nv bnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSInIC4gYmFzZW5hbWUo JHJlYWxfZmlsZVsnZmlsZW5hbWUnXSkgLiAnIjsgc2l6ZSA9ICInLiRyZWFsX2ZpbGVbJ3Np emUnXS4nIicpOw0KCQkJCQkvLyBGaXggZm9yIGxhbWUgSUUgNiBwZGYgYnVnIG9uIHNlcnZl cnMgY29uZmlndXJlZCB0byBzZW5kIGNhY2hlIGhlYWRlcnMNCgkJCQkJaGVhZGVyKCdDYWNo ZS1Db250cm9sOiBwcml2YXRlJyk7DQoJCQkJCUBpbmlfc2V0KCJ6bGliLm91dHB1dF9jb21w cmVzc2lvbiIsICJPZmYiKTsNCgkJCQkJQHNldF90aW1lX2xpbWl0KDApOw0KCQkJCQlAaWdu b3JlX3VzZXJfYWJvcnQodHJ1ZSk7DQoNCgkJCQkJLy8gSGFuZC1vZmYgdG8gdGhlIHJlbW90 ZSBmaWxlDQoJCQkJCWhlYWRlcignTG9jYXRpb246ICcgLiAkdXJsKTsNCg0KCQkJCQkvLyBy ZWNvcmQgZG93bmxvYWQgaWYgdGhlIGZpbGUgc2l6ZXMgbWF0Y2gNCgkJCQkJaWYgKGludHZh bCgkaGRyc1snY29udGVudC1sZW5ndGgnXSkgPT0gaW50dmFsKCRyZWFsX2ZpbGVbJ3NpemUn XSkpIHsNCgkJCQkJCXNhZmVfdXBkYXRlKCJ0eHBfZmlsZSIsICJkb3dubG9hZHM9ZG93bmxv YWRzKzEiLCAnaWQ9Jy5pbnR2YWwoJGlkKSk7DQoJCQkJCQlsb2dfaGl0KCcyMDAnKTsNCgkJ CQkJfQ0KCQkJCQkvLyByZW1vdGUgZG93bmxvYWQgZG9uZTogZ2FtZSBvdmVyDQoJCQkJCWV4 aXQoMCk7DQoNCgkJCQl9IGVsc2Ugew0KCQkJCQkkZmlsZV9lcnJvciA9IDQwNDsNCgkJCQl9 DQoJCQl9IGVsc2Ugew0KCQkJCSRmaWxlX2Vycm9yID0gNDA0Ow0KCQkJfQ0KCQl9DQoJfQ0K CS8vIHJlbW90ZSBkb3dubG9hZCBub3QgZG9uZSAtIGxlYXZlIHRvIFRYUCB0byBoYW5kbGUg ZXJyb3Igb3IgImxvY2FsIiBmaWxlIGRvd25sb2FkDQoJcmV0dXJuOw0KfQ0KDQpmdW5jdGlv biBzbWRfcmVtb3RlX2pzKCRjb250ZW50KSB7DQoJJG91dCA9ICc8c2NyaXB0IHR5cGU9InRl eHQvamF2YXNjcmlwdCI+Jy5uOw0KCSRvdXQgLj0gJGNvbnRlbnQubjsNCgkkb3V0IC49ICc8 L3NjcmlwdD4nLm47DQoJcmV0dXJuICRvdXQ7DQp9DQoNCi8vIFBIUDQgZW11bGF0aW9uKGlz aCkgb2YgUEhQNSdzIGdldF9oZWFkZXJzKCkuIFN0b2xlbiBmcm9tIHBocC5uZXQgYW5kIG1v ZGRlZA0KZnVuY3Rpb24gc21kX2dldF9oZWFkZXJzKCR1cmwsICRmb3JtYXQ9MCkgew0KCWlm ICghJHVybCkgew0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCSR1aW5mbz1wYXJzZV91cmwoJHVy bCk7DQoJJGhlYWRlcnMgPSBhcnJheSgpOw0KCWlmIChpc19jYWxsYWJsZSgnY2hlY2tkbnNy cicpICYmICFjaGVja2Ruc3JyKCR1aW5mb1snaG9zdCddLicuJywnTVgnKSAmJiAhY2hlY2tk bnNycigkdWluZm9bJ2hvc3QnXS4nLicsJ0EnKSkgew0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0K CSRwb3J0ID0gaXNzZXQoJHVpbmZvWydwb3J0J10pID8gJHVpbmZvWydwb3J0J10gOiA4MDsN CgkkZnA9ZnNvY2tvcGVuKCR1aW5mb1snaG9zdCddLCAkcG9ydCwgJGVycm5vLCAkZXJyc3Ry LCA1KTsNCg0KCWlmKCRmcCkgew0KCQkkaGVhZCA9ICJHRVQgIi5AJHVpbmZvWydwYXRoJ10u Ij8iLkAkdWluZm9bJ3F1ZXJ5J10uIiBIVFRQLzEuMFxyXG4iOw0KCQkkaGVhZCAuPSAiSG9z dDogIi5AJHVpbmZvWydob3N0J10uIjoiLiRwb3J0LiJcclxuIjsNCgkJJGhlYWQgLj0gIkNv bm5lY3Rpb246IENsb3NlXHJcbiI7DQoJCSRoZWFkIC49ICJBY2NlcHQ6ICovKlxyXG4iOw0K CQlpZiAoQCR1aW5mb1sndXNlciddKSB7DQoJCQkkaGVhZCAuPSAiQXV0aG9yaXphdGlvbjog QmFzaWMgIi5iYXNlNjRfZW5jb2RlKCR1aW5mb1sndXNlciddLic6Jy4kdWluZm9bJ3Bhc3Mn XSkuIlxyXG4iOw0KCQl9DQoJCSRoZWFkIC49ICJcclxuIjsNCgkJZnB1dHMoJGZwLCAkaGVh ZCk7DQoJCSRlb2hlYWRlciA9IGZhbHNlOw0KCQl3aGlsZSghZmVvZigkZnApIG9yICgkZW9o ZWFkZXI9PXRydWUpKSB7DQoJCQlpZigkaGVhZGVyPWZnZXRzKCRmcCwgMTAyNCkpIHsNCgkJ CQlpZiAoJGhlYWRlciA9PSAiXHJcbiIpIHsNCgkJCQkJJGVvaGVhZGVyID0gdHJ1ZTsNCgkJ CQkJYnJlYWs7DQoJCQkJfSBlbHNlIHsNCgkJCQkJJGhlYWRlciA9IHRyaW0oJGhlYWRlcik7 DQoJCQkJfQ0KCQkJCWlmKCRmb3JtYXQgPT0gMSkgew0KCQkJCQkka2V5ID0gc3RydG9sb3dl cihhcnJheV9zaGlmdChleHBsb2RlKCc6ICcsJGhlYWRlcikpKTsNCgkJCQkJaWYoJGtleSA9 PSAkaGVhZGVyKSB7DQoJCQkJCQkkaGVhZGVyc1tdID0gJGhlYWRlcjsNCgkJCQkJfSBlbHNl IHsNCgkJCQkJCSRoZWFkZXJzWyRrZXldPXN1YnN0cigkaGVhZGVyLHN0cmxlbigka2V5KSsy KTsNCgkJCQkJfQ0KCQkJCQl1bnNldCgka2V5KTsNCgkJCQl9IGVsc2Ugew0KCQkJCQkkaGVh ZGVyc1tdID0gJGhlYWRlcjsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJcmV0dXJuICRoZWFkZXJz Ow0KDQoJfSBlbHNlIHsNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0iO3M6NDoidHlwZSI7czox OiIxIjtzOjQ6ImhlbHAiO3M6MTkzNDY6Igk8cD48ZGl2IGlkPSJzbWRfaGVscCI+PC9wPgoK CTxoMSBpZD0idG9wIj5zbWRfcmVtb3RlX2ZpbGU8L2gxPgoKCTxoMiBpZD0ib3ZlcnZpZXci Pk92ZXJ2aWV3PC9oMj4KCgk8cD5VcGxvYWRpbmcgbGFyZ2UgZmlsZXMgdGhyb3VnaCBUZXh0 UGF0dGVybiYjODIxNztzIEZpbGVzIHRhYiBpcyBoaXQgYW5kIG1pc3MgZGVwZW5kaW5nIG9u IHRoZSBzaXplIC8gdHlwZSBvZiBmaWxlLCB0aGUgc2VydmVyIGxpbWl0cyBhbmQgc28gb24u IFNvbWV0aW1lcyB5b3UganVzdCBkb24mIzgyMTc7dCBoYXZlIHRoZSBiYW5kd2lkdGggYXZh aWxhYmxlIHRvIGhvc3QgbWVkaWEgY29udGVudC48L3A+CgoJPHA+VGhpcmQgcGFydHkgc2l0 ZXMgc3VjaCBhcyBmaWxlZGVuLmNvbSBvZmZlciB0aGUgYWJpbGl0eSB0byB1cGxvYWQgZmFp cmx5IHNpemVhYmxlIGZpbGVzIGFuZCB0aGVuIGZyZWVseSBob3RsaW5rIHRvIHRoZW0gKHdp dGhpbiBxdWl0ZSBnZW5lcm91cyBiYW5kd2lkdGggbGltaXRzKSBzbyB0aGV5IGNhbiBiZSBz aGFyZWQuIFRha2UgYWR2YW50YWdlIG9mIHRoaXMgc2VydmljZSBieSBpbnRlZ3JhdGluZyB0 aGUgcmVtb3RlIGZpbGVzIGludG8gPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gd2l0 aCB0aGlzIHBsdWdpbi48L3A+CgoJPGgyIGlkPSJjb250ZW50cyI+Q29udGVudHM8L2gyPgoK CTx1bD4KCQk8bGk+PGEgaHJlZj0iI2ZlYXR1cmVzIj5GZWF0dXJlczwvYT48L2xpPgoJCTxs aT48YSBocmVmPSIjYXV0aG9yIj5BdXRob3I8L2E+PC9saT4KCQk8bGk+PGEgaHJlZj0iI2lu c3RhbGwiPkluc3RhbGxhdGlvbiAvIFVuaW5zdGFsbGF0aW9uPC9hPjwvbGk+CgkJPGxpPjxh IGhyZWY9IiNwcmVyZXEiPlByZS1yZXF1aXNpdGVzPC9hPjwvbGk+CgkJPGxpPjxhIGhyZWY9 IiNmaWxlc3RhYiI+VGhlIEZpbGVzIHRhYjwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIjbXVs dGlwbGVzIj5NdWx0aXBsZSBwZXJzb25hbGl0aWVzPC9hPjwvbGk+CgkJPGxpPjxhIGhyZWY9 IiN1c2FnZSI+VGFnIHVzYWdlPC9hPgoJPHVsPgoJCTxsaT48YSBocmVmPSIjZmRsIj5zbWRf ZmlsZV9kb3dubG9hZF9saW5rPC9hPjwvbGk+CgkJPGxpPjxhIGhyZWY9IiNmZG4iPnNtZF9m aWxlX2Rvd25sb2FkX25hbWU8L2E+PC9saT4KCQk8bGk+PGEgaHJlZj0iI2ZkaSI+c21kX2Zp bGVfZG93bmxvYWRfaW1hZ2U8L2E+PC9saT4KCTwvdWw+PC9saT4KCQk8bGk+PGEgaHJlZj0i I2hvd2l0d29ya3MiPkhvdyBpdCB3b3JrczwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIjZXhh bXBsZXMiPkV4YW1wbGVzPC9hPjwvbGk+CgkJPGxpPjxhIGhyZWY9IiNjaGFuZ2Vsb2ciPkNo YW5nZWxvZzwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIjY3JlZGl0cyI+Q3JlZGl0czwvYT48 L2xpPgoJPC91bD4KCgk8aDIgaWQ9ImZlYXR1cmVzIj5GZWF0dXJlczwvaDI+CgoJPHVsPgoJ CTxsaT5NYW5hZ2UgbGlua3MgdG8gdGhpcmQgcGFydHkgZmlsZXMgZGlyZWN0bHkgZnJvbSB0 aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gRmlsZXMgdGFiLCBhcyBpZiB0aGV5 IHdlcmUgbmF0aXZlbHkgaW5zaWRlIFRleHRQYXR0ZXJuLiBDYXRlZ29yeSAvIGRlc2NyaXB0 aW9uIC8gc3RhdHVzIC8gZG93bmxvYWQgY291bnQgYWxsIHN1cHBvcnRlZDwvbGk+CgkJPGxp PlVzZSBzdGFuZGFyZCA8Y29kZT4mbHQ7dHhwOmZpbGVfZG93bmxvYWRfbGlzdCAvJmd0Ozwv Y29kZT4gdGFncyB0byBidWlsZCBsaXN0cyBvZiBsb2NhbCBhbmQgcmVtb3RlIGZpbGVzPC9s aT4KCQk8bGk+VGhyZWUgbmV3IHRhZ3M6IDxjb2RlPiZsdDt0eHA6c21kX2ZpbGVfZG93bmxv YWRfbGluayZndDs8L2NvZGU+IGZvciBjaG9vc2luZyBzcGVjaWZpYyByZW1vdGUgZmlsZXMs IDxjb2RlPiZsdDt0eHA6c21kX2ZpbGVfZG93bmxvYWRfbmFtZSZndDs8L2NvZGU+IGZvciBz aG93aW5nIHJlbW90ZSBmaWxlIG5hbWVzIGFuZCA8Y29kZT4mbHQ7dHhwOnNtZF9maWxlX2Rv d25sb2FkX2ltYWdlJmd0OzwvY29kZT4gZm9yIHNob3dpbmcgaW1hZ2VzIGJhc2VkIG9uIHRo ZSBmaWxlbmFtZSBvZiB0aGUgZG93bmxvYWQ8L2xpPgoJCTxsaT5VcGxvYWQgaWRlbnRpY2Fs IGZpbGVzIHRvIG1vcmUgdGhhbiBvbmUgcGxhY2Ugb24gdGhlIHdlYiBhbmQgdGVsbCA8c3Bh biBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiB0aGUgdmFyaW91cyBhbHRlcm5hdGl2ZXMuIDxj b2RlPmZpbGVfZG93bmxvYWRfbGluazwvY29kZT4gYW5kIDxjb2RlPnNtZF9maWxlX2Rvd25s b2FkX2xpbms8L2NvZGU+IHdpbGwgY2hvb3NlIGEgcmFuZG9tIGxvY2F0aW9uIHRvIGhlbHAg bG9hZC1iYWxhbmNlIHlvdXIgYXZhaWxhYmxlIGJhbmR3aWR0aDwvbGk+CgkJPGxpPk5vIG1v ZGlmaWNhdGlvbnMgdG8gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IGRhdGFi YXNlOiBqdXN0IGEgYmVhdXRpZnVsIGNoZWF0IHN1Z2dlc3RlZCBieSBydXVkICh0aGFua3Mh KTwvbGk+Cgk8L3VsPgoKCTxoMiBpZD0iYXV0aG9yIj5BdXRob3I8L2gyPgoKCTxwPjxhIGhy ZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9jb21tZW50Rm9ybSI+U3RlZiBEYXdzb248L2E+ LiBGb3Igb3RoZXIgc29mdHdhcmUgYnkgbWUsIG9yIHRvIG1ha2UgYSBkb25hdGlvbiwgc2Vl IHRoZSA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vc3ciPnNvZnR3YXJlIHBhZ2U8 L2E+LjwvcD4KCgk8aDIgaWQ9Imluc3RhbGwiPkluc3RhbGxhdGlvbiBhbmQgVW5pbnN0YWxs YXRpb248L2gyPgoKCTxwIGNsYXNzPSJyZXF1aXJlZCI+UmVxdWlyZXMgVGV4dFBhdHRlcm4g djQuMC42IG9yIGdyZWF0ZXIgaW5zdGFsbGVkLjwvcD4KCgk8cD5Eb3dubG9hZCB0aGUgcGx1 Z2luIGZyb20gZWl0aGVyIDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5vcmcvcGx1Z2lu cy85MDEvc21kX3JlbW90ZV9maWxlIj50ZXh0cGF0dGVybi5vcmc8L2E+LCBvciB0aGUgPGEg aHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL3N3Ij5zb2Z0d2FyZSBwYWdlPC9hPiwgcGFz dGUgdGhlIGNvZGUgaW50byB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gQWRt aW4gLSZndDsgUGx1Z2lucyBwYW5lLCBpbnN0YWxsIGFuZCBlbmFibGUgdGhlIHBsdWdpbi4g VmlzaXQgdGhlIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3Rv cGljLnBocD9pZD0yNDY3MyI+Zm9ydW0gdGhyZWFkPC9hPiBmb3IgbW9yZSBpbmZvIG9yIHRv IHJlcG9ydCBvbiB0aGUgc3VjY2VzcyBvciBvdGhlcndpc2Ugb2YgdGhlIHBsdWdpbi48L3A+ CgoJPHA+VG8gcmVtb3ZlIHRoZSBwbHVnaW4sIHNpbXBseSBkZWxldGUgaXQgZnJvbSB0aGUg QWRtaW4tJmd0O1BsdWdpbnMgdGFiLjwvcD4KCgk8aDIgaWQ9InByZXJlcSI+UHJlLXJlcXVp c2l0ZXM8L2gyPgoKCTxwPkNob29zZSBhbnkgdGhpcmQgcGFydHkgZmlsZSBob3N0ZXIgdGhh dCBvZmZlcnMgZnJlZSBkb3dubG9hZHMgb2YgeW91ciBzdHVmZi4gQ3JlYXRlIGFuIGFjY291 bnQsIHVwbG9hZCBmaWxlcyB0byBpdCwgYW5kIG1ha2Ugc3VyZSB5b3Uga25vdyBob3cgdG8g Z2V0IERpcmVjdCBMaW5rIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+cyBmcm9tIHRo ZWlyIGludGVyZmFjZSAoaXQmIzgyMTc7cyB1c3VhbGx5IGZhaXJseSBvYnZpb3VzKS4gWW91 JiM4MjE3O2xsIG5lZWQgdGhlc2UgdG8gcGFzdGUgaW50byBUZXh0UGF0dGVybi48L3A+CgoJ PHA+VGhlbiBzaW1wbHkgaG9wIG92ZXIgdG8gdGhlIDxhIGhyZWY9IiNmaWxlc3RhYiI+Rmls ZXMgdGFiPC9hPiB0byBnZXQgc3RhcnRlZC48L3A+CgoJPGgyIGlkPSJmaWxlc3RhYiI+VGhl IEZpbGVzIHRhYjwvaDI+CgoJPHA+VGhlIHBsdWdpbiBhZGRzIG9uZSBpbnB1dCBmb3JtIGZp ZWxkIHRvIHRoZSBGaWxlcyB0YWIuIEZyb20geW91ciB0aGlyZCBwYXJ0eSBzaXRlKHMpIG9m IGNob2ljZSwgc2ltcGx5IGNvcHkgYSB3ZWItZnJpZW5kbHkgKGkuZS4gdXJsLWVuY29kZWQp IGhvdGxpbmsgYW5kIHBhc3RlIGl0IGludG8gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8 L3NwYW4+IGJveC4gWW91IGNhbiB1c3VhbGx5IHRlbGwgaWYgdGhlIGxpbmsgaXMgdXJsLWVu Y29kZWQgYmVjYXVzZSBpdCYjODIxNztsbCBwcm9iYWJseSBoYXZlIDxjb2RlPiUyMDwvY29k ZT4gaW4gcGxhY2Ugb2YgYW55IHNwYWNlcyBpbiB0aGUgZmlsZW5hbWUuIFRoZSBkaXJlY3Rv cnkgcGFydCBpcywgaG93ZXZlciwgPGVtPm5vdDwvZW0+IHVzdWFsbHkgZW5jb2RlZCAoaS5l LiBhbnkgZm9yd2FyZCBzbGFzaGVzIGFuZCBjb2xvbnMgZXRjIHJlbWFpbikuPC9wPgoKCTxw PkEgdHlwaWNhbCBmaWxlIG1pZ2h0IGxvb2sgbGlrZSB0aGlzOjwvcD4KCjxwcmU+aHR0cDov L3d3dy5maWxlZGVuLmNvbS9maWxlcy8yMDA3LzExLzEvCiAgICAgMTIzNDU2Ny9IZXJlJTIw aXMlMjBzb21lJTIwbXVzaWMubXAzCjwvcHJlPgoKCTxwPlRoZSBsaW5rIG11c3QgYmUgYW4g YWJzb2x1dGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4sIGJlZ2lubmluZyA8Y29k ZT5odHRwOi8vPC9jb2RlPi4gT25jZSB5b3UgaGF2ZSBwYXN0ZWQgaXQgaW4sIGhpdCBVcGxv YWQgbmV4dCB0byB0aGUgYm94IGFuZCBhIG5ldyBzcGVjaWFsICYjODIxNjtsaW5rJiM4MjE3 OyBmaWxlIHdpbGwgYmUgY3JlYXRlZCBpbiA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFu Pi4gSXQgdGFrZXMgb24gdGhlIGZpbGVuYW1lIGV4YWN0bHkgYXMgaXQgYXBwZWFycyBpbiB5 b3VyIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+ICh3aXRoIDxjb2RlPi5saW5rPC9j b2RlPiBhZGRlZCkuIFNvIGluIHRoZSBleGFtcGxlIGFib3ZlLCBhIG5ldyBmaWxlIGNhbGxl ZCA8Y29kZT5IZXJlIGlzIHNvbWUgbXVzaWMubXAzLmxpbms8L2NvZGU+IHdpbGwgYmUgbWFk ZSBpbiB5b3VyIHN0YW5kYXJkIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IGZpbGVz IGRpcmVjdG9yeS48L3A+CgoJPHA+VGhlIG5ldyAmIzgyMjA7ZmlsZSYjODIyMTsgd2lsbCBh cHBlYXIgaW4gdGhlIGxpc3QganVzdCBsaWtlIGFueSByZWFsIGZpbGUgaW4gVGV4dFBhdHRl cm4uIFlvdSBjYW4gZWRpdCBpdCB0byBhZGQgYSBkZXNjcmlwdGlvbiwgY2F0ZWdvcnksIHNl dCBpdHMgc3RhdHVzOiBldmVyeXRoaW5nIHlvdSBjYW4gZG8gd2l0aCBhIGNvbnZlbnRpb25h bCBmaWxlLiBKdXN0IGRvbiYjODIxNzt0IHJlbmFtZSBpdCE8L3A+CgoJPGgyIGlkPSJtdWx0 aXBsZXMiPk11bHRpcGxlIHBlcnNvbmFsaXRpZXM8L2gyPgoKCTxwPlRoaXJkIHBhcnR5IHNp dGVzIGRvbiYjODIxNzt0IGdpdmUgeW91IHNvbWV0aGluZyBmb3Igbm90aGluZzsgdGhleSBu b3JtYWxseSBoYXZlIGEgYmFuZHdpZHRoIGNhcCwganVzdCBsaWtlIHlvdXIgd2ViIGhvc3Rl ciBwcm9iYWJseSBkb2VzLiBJZiB5b3Ugd2FudCB0byBkaXN0cmlidXRlIHlvdXIgbXVzaWMg b3IgbGF0ZXN0IHZpZGVvLCBhIGZldyB0aG91c2FuZCBoaXRzIHBlciBtb250aCBhbmQgeW91 ciBiYW5kd2lkdGggaXMgZ29uZS48L3A+CgoJPHA+U28gc3ByZWFkIHRoZSBsb2FkIGFyb3Vu ZCB0aGUgSW50ZXJuZXQuIEdldCBhY2NvdW50cyBhdCB2YXJpb3VzIHRoaXJkIHBhcnR5IHNp dGVzIGFuZCB1cGxvYWQgZXhhY3RseSB0aGUgc2FtZSBmaWxlIChtYWtlIHN1cmUgdGhlIGZp bGVuYW1lcyBhcmUgaWRlbnRpY2FsICYjODIxMTsgaW5jbHVkaW5nIGNhU2UgU2Vuc0lUaXZJ dFkpLiBUaGVuIGp1c3QgcGFzdGUgdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+ cyBpbnRvIHRoZSB1cGxvYWQgYm94OiBzbWRfcmVtb3RlX2ZpbGUgd2lsbCBvbmx5IG1haW50 YWluIG9uZSBwaHlzaWNhbCBmaWxlIHdpdGhpbiA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9z cGFuPiBidXQgd2lsbCBob2xkIGRldGFpbHMgb2YgeW91ciBvdGhlciBjb3BpZXMgZm9yIHlv dS4gVXNpbmcgZWl0aGVyIHRoZSBzdGFuZGFyZCA8Y29kZT5maWxlX2Rvd25sb2FkX2xpbms8 L2NvZGU+IG9yIHRoZSBuZXcgPGEgaHJlZj0iI2ZkbCI+c21kX2ZpbGVfZG93bmxvYWRfbGlu azwvYT4gdGFnIHdpbGwgcmFuZG9tbHkgcGljayBvbmUgb2YgeW91ciBkb3dubG9hZCBsb2Nh dGlvbnMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggZmlsZSBldmVyeSB0aW1lIHRoZSBwYWdlIGxv YWRzLCBzcHJlYWRpbmcgeW91ciBiYW5kd2lkdGggdXNhZ2UuPC9wPgoKCTxwPldoZW4geW91 IHNlbGVjdCBhIC5saW5rIGZpbGUgZm9yIGVkaXRpbmcgZnJvbSB0aGUgRmlsZXMgdGFiLCB5 b3Ugd2lsbCBzZWUgYSBkaWFsb2cgYm94IGF0IHRoZSBib3R0b20gZm9yIGFkZGluZyBtb3Jl IDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+cyB0byB5b3VyIGZpbGUuIFBhc3RlIHRo ZSB1cmwtZW5jb2RlZCBkaXJlY3QgbGluayBmaWxlIG5hbWUgaW50byB0aGUgYm94IGFuZCBo aXQgVXBsb2FkIHRvIGFwcGVuZCBpdCB0byB0aGUgZXhpc3Rpbmcgb25lLiBJZiB5b3UgY2hl Y2sgdGhlIE92ZXJ3cml0ZSBib3ggdGhlbiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwv c3Bhbj4geW91IHN1cHBseSB3aWxsIG92ZXJ3cml0ZSA8ZW0+YWxsPC9lbT4gPHNwYW4gY2xh c3M9ImNhcHMiPlVSTDwvc3Bhbj5zIGN1cnJlbnRseSBkZWZpbmVkIGluIHRoZSBmaWxlLiBJ dCBkb2VzIHRoaXMgd2l0aG91dCB3YXJuaW5nLCBzbyBjb25zaWRlciB0aGlzIGEgd2Fybmlu ZyE8L3A+CgoJPGgyIGlkPSJ1c2FnZSI+VGFnIHVzYWdlPC9oMj4KCgk8aDMgY2xhc3M9InRh ZyAiIGlkPSJmZGwiPnNtZF9maWxlX2Rvd25sb2FkX2xpbms8L2gzPgoKCTxwIGNsYXNzPSJ0 YWctc3VtbWFyeSI+QW4gZXhhY3QgZHJvcC1pbiByZXBsYWNlbWVudCBmb3IgdGhlIHN0YW5k YXJkIDxjb2RlPiZsdDt0eHA6ZmlsZV9kb3dubG9hZF9saW5rJmd0OzwvY29kZT4gdGFnLCB3 aXRoIHR3byBleHRyYSBvcHRpb25zLiBVc2UgdGhlIHRhZyBpbiBleGFjdGx5IHRoZSBzYW1l IHdheSBhcyB5b3Ugd291bGQgbm9ybWFsbHkuIFRoZSBvbmx5IHN1YnRsZSBkaWZmZXJlbmNl IGluIHRoaXMgdGFnJiM4MjE3O3MgZGVmYXVsdCBiZWhhdmlvdXIgaXMgdGhhdCBpdCB3aWxs IHJlbW92ZSBhbnkgPGNvZGU+Lmxpbms8L2NvZGU+IG9uIHRoZSBlbmQgb2YgdGhlIGZpbGUg bmFtZXMgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UgKHRoZSA8Y29kZT4ubGluazwvY29kZT4g c3VmZml4ZXMgYWx3YXlzIHJlbWFpbiB2aXNpYmxlIGluIHRoZSBGaWxlcyB0YWIgdG8gcmVt aW5kIHlvdSkuIFRoZSA8Y29kZT4ubGluazwvY29kZT4gY2FuIGJlIHJlaW5zdGF0ZWQgd2l0 aCB0aGUgPGEgaHJlZj0iI2ZkbHNob3dsaW5rIj5zaG93X2xpbms8L2E+IGF0dHJpYnV0ZS48 L3A+CgoJPGg0IGNsYXNzPSJhdHRzICIgaWQ9ImF0dHJpYnV0ZXMiPkF0dHJpYnV0ZXM8L2g0 PgoKCTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+aWQ8 L3NwYW4+IDogdGhlIElEIG9mIHRoZSBmaWxlIHlvdSB3YW50IHRvIGxpbmsgdG8uIElmIGxl ZnQgYmxhbmssIGl0IGNhbiBiZSBzdXBwbGllZCBmcm9tIHdoYXRldmVyIGlzIGJldHdlZW4g dGhlIG9wZW5pbmcgYW5kIGNsb3NpbmcgdGFnPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0 dC1uYW1lIj5maWxlbmFtZTwvc3Bhbj4gOiB0aGUgZmlsZW5hbWUgb2YgdGhlIGZpbGUgeW91 IHdhbnQgdG8gbGluayB0by4gSWYgbGVmdCBibGFuaywgaXQgY2FuIGJlIHN1cHBsaWVkIGZy b20gd2hhdGV2ZXIgaXMgYmV0d2VlbiB0aGUgb3BlbmluZyBhbmQgY2xvc2luZyB0YWcuIElm IGJvdGggZmlsZW5hbWUgYW5kIElEIGFyZSBzcGVjaWZpZWQsIElEIHRha2VzIHByZWNlZGVu Y2U8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPmNob29zZTwvc3Bhbj4gOiBn b3Zlcm5zIGhvdyB0byBjaG9vc2Ugd2hpY2ggcmVtb3RlIDxzcGFuIGNsYXNzPSJjYXBzIj5V Ukw8L3NwYW4+IHRvIHNlcnZlLiBJZiB1c2luZyB0aGUgc3RhbmRhcmQgPGNvZGU+ZmlsZV9k b3dubG9hZF9saW5rPC9jb2RlPiB0YWcgKG9yIGJ5IGRlZmF1bHQgaW4gdGhpcyB0YWcpLCBp dCBpcyBzZXQgdG8gPGNvZGU+MDwvY29kZT4gd2hpY2ggbWVhbnMgJiM4MjE2O3JhbmRvbWx5 IHBpY2sgYSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBmcm9tIHRob3NlIEkmIzgy MTc7dmUgdXBsb2FkZWQgZm9yIHRoaXMgZmlsZSYjODIxNzsgKHdoZXJlIHdvdWxkIGFuIHNt ZF8gcGx1Z2luIGJlIHdpdGhvdXQgYSByYW5kb20gb3B0aW9uLCBlaD8hKS4gWW91IGNhbiBh bHNvIHNwZWNpZnkgYSBoaWdoZXIgbnVtYmVyIHRvIHBpY2sgdGhlIDxzcGFuIGNsYXNzPSJj YXBzIj5VUkw8L3NwYW4+IGZyb20gdGhhdCBwYXJ0aWN1bGFyIHNsb3QuIFNvIDxjb2RlPmNo b29zZT0mcXVvdDsxJnF1b3Q7PC9jb2RlPiB3aWxsIGFsd2F5cyBzZWxlY3QgdGhlIDFzdCBm aWxlIHlvdSB1cGxvYWRlZCBhbmQgZGVsaXZlciB0aGF0OyA8Y29kZT5jaG9vc2U9JnF1b3Q7 MiZxdW90OzwvY29kZT4gdGhlIHNlY29uZDsgYW5kIHNvIG9uLiBJZiB5b3Ugc3BlY2lmeSBh IG51bWJlciBiaWdnZXIgdGhhbiB0aGUgbnVtYmVyIG9mIDxzcGFuIGNsYXNzPSJjYXBzIj5V Ukw8L3NwYW4+cyBzdG9yZWQgYWdhaW5zdCBhIGZpbGUsIGl0IHBpY2tzIHRoZSBmaXJzdCBv bmUgeW91IHVwbG9hZGVkLjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+c2hv d19saW5rPC9zcGFuPiA6IHNldCB0byAwIGJ5IGRlZmF1bHQsIHdoaWNoIGhpZGVzIHRoZSA8 Y29kZT4ubGluazwvY29kZT4gb24gdGhlIGVuZCBvZiA8c3BhbiBjbGFzcz0iY2FwcyI+VVJM PC9zcGFuPnMuIFNldCBpdCB0byAxIHRvIG1ha2UgdGhlIHRhZyBiZWhhdmUgbGlrZSB0aGUg YnVpbHQtaW4gPGNvZGU+ZmlsZV9kb3dubG9hZF9saW5rPC9jb2RlPjwvbGk+Cgk8L3VsPgoK CTxoMyBjbGFzcz0idGFnICIgaWQ9ImZkbiI+c21kX2ZpbGVfZG93bmxvYWRfbmFtZTwvaDM+ CgoJPHAgY2xhc3M9InRhZy1zdW1tYXJ5Ij5BbiBleGFjdCBkcm9wLWluIHJlcGxhY2VtZW50 IGZvciB0aGUgc3RhbmRhcmQgPGNvZGU+Jmx0O3R4cDpmaWxlX2Rvd25sb2FkX25hbWUmZ3Q7 PC9jb2RlPiB0YWcsIGJ1dCB3aXRoIG9uZSBhdHRyaWJ1dGUuIFRoaXMgdGFnJiM4MjE3O3Mg ZGVmYXVsdCBiZWhhdmlvdXIgd2lsbCByZW1vdmUgYW55IDxjb2RlPi5saW5rPC9jb2RlPiBv biB0aGUgZW5kIG9mIGZpbGUgbmFtZXMuPC9wPgoKCTxoNCBjbGFzcz0iYXR0cyAiIGlkPSJh dHRyaWJ1dGVzIj5BdHRyaWJ1dGVzPC9oND4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJh dHQtbmFtZSI+c2hvd19saW5rPC9zcGFuPiA6IHNldCB0byAwIGJ5IGRlZmF1bHQsIHdoaWNo IGhpZGVzIHRoZSA8Y29kZT4ubGluazwvY29kZT4gb24gdGhlIGVuZCBvZiBmaWxlIG5hbWVz LiBTZXQgaXQgdG8gMSB0byBtYWtlIHRoZSB0YWcgYmVoYXZlIGxpa2UgdGhlIGJ1aWx0LWlu IDxjb2RlPmZpbGVfZG93bmxvYWRfbmFtZTwvY29kZT48L2xpPgoJPC91bD4KCgk8aDMgY2xh c3M9InRhZyAiIGlkPSJmZGkiPnNtZF9maWxlX2Rvd25sb2FkX2ltYWdlPC9oMz4KCgk8cCBj bGFzcz0idGFnLXN1bW1hcnkiPldoZW4gbGlua2luZyB0byBleHRlcm5hbCBjb250ZW50IChl c3BlY2lhbGx5IG1lZGlhIGZpbGVzKSBpdCBpcyBvZnRlbiB1c2VmdWwgdG8gbWFrZSBhIG1p bmkgaW1hZ2UgdG8gZ28gd2l0aCBpdCwgc3VjaCBhcyBhIHN0aWxsIGZyb20gYSBtb3ZpZSBv ciBzb21lIGFydHdvcmsgZm9yIGFuIG1wMyB0cmFjay4gWW91IGNhbiBvZiBjb3Vyc2UgZW1i ZWQgYSA8Y29kZT4mbHQ7dHhwOmltYWdlJmd0OzwvY29kZT4gdGFnIGluIHlvdXIgZG93bmxv YWQgZm9ybSwgYnV0IHRoYXQgd2lsbCBnaXZlIGEgc3RhdGljIGltYWdlIGZvciBlYWNoIGZp bGUuIFRoaXMgdGFnIGNhbiBiZSB1c2VkIHRvIGRpc3BsYXkgaW1hZ2VzIHRoYXQgdmFyeSB3 aXRoIHRoZSBmaWxlbmFtZSBvZiB0aGUgcmVtb3RlIChvciBsb2NhbCBvZiBjb3Vyc2UpIGZp bGUuPC9wPgoKCTxwPlRvIHVzZSBpdCwganVzdCB1cGxvYWQgYW4gaW1hZ2UgKGJ5IGRlZmF1 bHQgYSBqcGcpIHZpYSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiYjODIxNztzIElt YWdlcyB0YWIgYW5kIGdpdmUgaXQgdGhlIGV4YWN0IHNhbWUgZmlsZW5hbWUgYXMgdGhlIHJl bW90ZSBmaWxlIGl0IHJlcHJlc2VudHMsIHBsdXMgaXRzIG5vcm1hbCBpbWFnZSBmaWxlIGV4 dGVuc2lvbi4gaS5lLiBpZiB5b3VyIHJlbW90ZSBmaWxlIHdhcyA8Y29kZT5NYW4gYW5kIGJv eS5tcGc8L2NvZGU+IHlvdSB3b3VsZCB1cGxvYWQgYW4gaW1hZ2UgYW5kIG5hbWUgaXQgPGNv ZGU+TWFuIGFuZCBib3kubXBnLmpwZzwvY29kZT4uIERvIHRoaXMgZm9yIGVhY2ggZmlsZSBh bmQgdGhlbiB1c2UgdGhpcyB0YWcgdG8gZGlzcGxheSB0aGVtLjwvcD4KCgk8cD5CeSBkZWZh dWx0LCBpZiBhbnkgaW1hZ2UgZG9lc24mIzgyMTc7dCBleGlzdCwgdGhlIHRhZyBvdXRwdXRz IHRoZSBpbWFnZSBmaWxlbmFtZSBpbnN0ZWFkIChpZiB1c2luZyB0aGUgPGNvZGU+ZmlsZW5h bWU8L2NvZGU+KSBvciB0aGUgaWQgKGlmIHVzaW5nIHRoZSA8Y29kZT5pZDwvY29kZT4pLiBU aGlzIGJlaGF2aW91ciBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZSA8Y29kZT5pZm1pc3Np bmc8L2NvZGU+IG9wdGlvbi48L3A+CgoJPGg0IGNsYXNzPSJhdHRzICIgaWQ9ImF0dHJpYnV0 ZXMiPkF0dHJpYnV0ZXM8L2g0PgoKCTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNs YXNzPSJhdHQtbmFtZSI+aWQ8L3NwYW4+IDogdGhlIElEIG9mIGFuIGltYWdlIHRvIGRpc3Bs YXk8L2xpPgoJPC91bD4KCTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJh dHQtbmFtZSI+ZmlsZW5hbWU8L3NwYW4+IDogdGhlIGZpbGVuYW1lIG9mIGFuIGltYWdlIHRv IGRpc3BsYXkuIElmIGJvdGggZmlsZW5hbWUgYW5kIElEIGFyZSBzcGVjaWZpZWQsIElEIHRh a2VzIHByZWNlZGVuY2UuIE5vdGUgdGhhdCBpbiB0aGlzIGFuZCA8Y29kZT5pZDwvY29kZT4g bW9kZXMsIHRoZSB0YWcgaXMgZXNzZW50aWFsbHkgdGhlIHNhbWUgYXMgPGNvZGU+Jmx0O3R4 cDppbWFnZSZndDs8L2NvZGU+LiBUaGUgZXhjZXB0aW9uIGlzIHRoYXQgeW91IGRvIG5vdCBo YXZlIHRvIHNwZWNpZnkgdGhlIGltYWdlIGZpbGUgPGNvZGU+ZXh0ZW5zaW9uPC9jb2RlPiwg YXMgaXQgZG9lcyB0aGF0IGZvciB5b3UgYnkgZGVmYXVsdCBpZiB5b3UgdXNlIDxzcGFuIGNs YXNzPSJjYXBzIj5KUEc8L3NwYW4+cyBhbmQgeW91IGNhbiBzcGVjaWZ5IHRodW1ibmFpbHMg aW5zdGVhZCB1c2luZyA8Y29kZT50aHVtYjwvY29kZT48L2xpPgoJPC91bD4KCTx1bCBjbGFz cz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+ZXh0ZW5zaW9uPC9zcGFu PiA6IHNhdmVzIHlvdSBoYXZpbmcgdG8gc3BlY2lmeSB0aGUgZmlsZSBleHRlbnNpb24gaW4g dGhlIDxjb2RlPmZpbGVuYW1lPC9jb2RlPiBwYXJhbWV0ZXIuIEVudGVyIGl0IGhlcmUgPGVt PndpdGhvdXQ8L2VtPiB0aGUgZG90LiBCeSBkZWZhdWx0IGl0IGlzIHNldCB0byA8Y29kZT5l eHRlbnNpb249JnF1b3Q7anBnJnF1b3Q7PC9jb2RlPjwvbGk+Cgk8L3VsPgoJPHVsIGNsYXNz PSJhdHRzIj4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj50aHVtYjwvc3Bhbj4gOiBz ZXQgdG8gMCBieSBkZWZhdWx0LCB3aGljaCBtZWFucyB1c2UgdGhlIGZ1bGwgc2l6ZSBpbWFn ZS4gSWYgeW91IGhhdmUgY3JlYXRlZCB0aHVtYm5haWxzIHlvdSBtYXkgdXNlIDxjb2RlPnRo dW1iPSZxdW90OzEmcXVvdDs8L2NvZGU+IHRvIHVzZSB0aG9zZSBpbnN0ZWFkPC9saT4KCTwv dWw+Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPmlm bWlzc2luZzwvc3Bhbj4gOiB3aGVuIGFuIGltYWdlIGZpbGUgaXMgbWlzc2luZywgdGhpcyBv cHRpb24mIzgyMTc7cyBkZWZhdWx0IHNldHRpbmcgb2YgPGNvZGU+aWZtaXNzaW5nPSZxdW90 Oz9yZWYmcXVvdDs8L2NvZGU+IHdpbGwgZGlzcGxheSBlaXRoZXIgdGhlIGltYWdlIGZpbGVu YW1lIG9yIGl0cyBJRCBpZiBpdCB3YXMgdXNlZC4gQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBz cGVjaWZ5IGEgZGVkaWNhdGVkICYjODIxNjtubyBwaWMmIzgyMTc7IGltYWdlIGJ5IHVwbG9h ZGluZyBvbmUgYW5kIHVzaW5nIHRoZSBzcGVjaWFsIGNvZGUgPGNvZGU+aWZtaXNzaW5nPSZx dW90Oz9pbWFnZTpJRF9vcl9uYW1lJnF1b3Q7PC9jb2RlPiAoZS5nLiA8Y29kZT5pZm1pc3Np bmc9JnF1b3Q7P2ltYWdlOjMyJnF1b3Q7PC9jb2RlPiBvciA8Y29kZT5pZm1pc3Npbmc9JnF1 b3Q7P2ltYWdlOk5vUGljLmpwZyZxdW90OzwvY29kZT4pLiBJZiBub3QgdXNpbmcgdGhlIHNw ZWNpYWwgY29kZXMsIHB1dCBhbnkgdGV4dCB5b3UgbGlrZSBoZXJlLCBmb3IgZXhhbXBsZSA8 Y29kZT5pZm1pc3Npbmc9JnF1b3Q7Tm8gaW1hZ2UgeWV0JnF1b3Q7PC9jb2RlPi4gVXNlIDxj b2RlPmlmbWlzc2luZz0mcXVvdDsmcXVvdDs8L2NvZGU+IHRvIG91dHB1dCBub3RoaW5nIGlu IHRoZSBldmVudCBvZiBhIG1pc3NpbmcgaW1hZ2U8L2xpPgoJPC91bD4KCTx1bCBjbGFzcz0i YXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+d3JhcHRhZzwvc3Bhbj4gOiB0 aGUgdGFnIHRvIHdyYXAgYXJvdW5kIHRoZSBvdXRzaWRlIG9mIHRoZSBpbWFnZS4gU3BlY2lm eSBpdCB3aXRoIG5vIGFuZ2xlIG1hcmtlcnMsIGUuZy4gPGNvZGU+d3JhcHRhZz0mcXVvdDtw JnF1b3Q7PC9jb2RlPi4gRGVmYXVsdHMgdG8gZW1wdHkgKGkuZS4gbm8gd3JhcHRhZyk8L2xp PgoJPC91bD4KCTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFt ZSI+Y2xhc3M8L3NwYW4+IDogdGhlIGNsYXNzIG5hbWUgdG8gYXBwbHkgdG8gdGhlIGltYWdl LiBJZiB1c2luZyA8Y29kZT53cmFwdGFnPC9jb2RlPiB0aGUgY2xhc3MgaXMgYXBwbGllZCB0 byB0aGUgc3Vycm91bmRpbmcgdGFnLiBJZiBpdCBpcyBvbWl0dGVkIHRoZSBjbGFzcyBpcyBh cHBsaWVkIGRpcmVjdGx5IHRvIHRoZSBpbWFnZS4gRGVmYXVsdDogZW1wdHkgKGkuZS4gbm8g Y2xhc3MpPC9saT4KCTwvdWw+CgoJPGgyIGlkPSJob3dpdHdvcmtzIj5Ib3cgaXQgd29ya3M8 L2gyPgoKCTxwPkZvciB0aGUgY3VyaW91cywgdGhlIHBsdWdpbiBqdXN0IGNyZWF0ZXMgYSBk dW1teSB0ZXh0IGZpbGUgd2l0aCB0aGUgbmFtZSBvZiB5b3VyIGZpbGUgcGx1cyB0aGUgc3Bl Y2lhbCBzdWZmaXggPGNvZGU+Lmxpbms8L2NvZGU+IHRvIGRpc3Rpbmd1aXNoIGl0IGZyb20g YSBzdGFuZGFyZCBmaWxlLiBFdmVyeSB0aW1lIHlvdSBhZGQgYSA8c3BhbiBjbGFzcz0iY2Fw cyI+VVJMPC9zcGFuPiBvZiB0aGUgc2FtZSBuYW1lIGl0IGlzIGFkZGVkIGFzIGEgbmV3IGxp bmUgd2l0aGluIHRoaXMgZmlsZS48L3A+CgoJPHA+VGhpcyBtZWFucyB5b3UgY2FuIHNodWZm bGUgdGhlIG9yZGVyIG9mIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+cywgZGVsZXRl IHJlbW90ZSBmaWxlcyBvciBlZGl0IHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFu PnMgZGlyZWN0bHkgaWYgeW91IHNvIHdpc2ggYnkgc2ltcGx5IGRvd25sb2FkaW5nIHRoZSBy ZWxldmFudCAubGluayBmaWxlIGZyb20geW91ciA8c3BhbiBjbGFzcz0iY2FwcyI+RlRQPC9z cGFuPiBzZXJ2ZXIsIGVkaXRpbmcgaXQgYW5kIHJlLXVwbG9hZGluZyBpdC4gQXMgbG9uZyBh cyB5b3UgbWFrZSBzdXJlIHlvdSBoYXZlIG9uZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9z cGFuPiBwZXIgbGluZSBldmVyeXRoaW5nIHdpbGwgd29yay48L3A+CgoJPHA+SW5jaWRlbnRh bGx5LCB0aGUgcmVhbCBmaWxlIHNpemUgaXMgcmUtcmVhZCAoZnJvbSB0aGUgMXN0IGZpbGUg bGlzdGVkIGluIHRoZSAubGluayBmaWxlKSBldmVyeSB0aW1lIHRoZSBsb2NhbCBmaWxlIGlz IGVkaXRlZCBiZWNhdXNlIG90aGVyd2lzZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFu PiBvdmVyd3JpdGVzIGl0IHdpdGggdGhlIHNpemUgb2YgdGhlIGR1bW15IHRleHQgZmlsZS4g VGhpcyBoYXMgcG90ZW50aWFsIHJhbWlmaWNhdGlvbnMgd2hlbiBkb3dubG9hZGluZyBiZWNh dXNlIDxlbT50aGUgcGx1Z2luIGNoZWNrcyB0aGF0IHRoZSByZW1vdGUgZmlsZSBzaXplIG1h dGNoZXMgdGhlIG9uZSBpbiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gaW50 ZXJmYWNlIGJlZm9yZSBzZXJ2aW5nIHRoZSBmaWxlPC9lbT4uIElmIG9uZSBvZiB5b3VyIHVw bG9hZGVkIGZpbGVzIGlzIGEgZGlmZmVyZW50IHNpemUgaXQgd2lsbCByZWZ1c2UgdG8gZG93 bmxvYWQuPC9wPgoKCTxwPlRoZSByZWFzb24gZm9yIHRoaXMgaXMgdG8gdHJ5IHRvIG1haW50 YWluIGRvd25sb2FkIGNvdW50IGludGVncml0eS4gSW5zdGVhZCBvZiBkaXNoaW5nIG91dCBh IHN0YW5kYXJkIDQwNCBtZXNzYWdlLCBzb21lIHNlcnZlcnMgd2lsbCByZWRpcmVjdCB0byBh biBpbWFnZSBvciA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gZmlsZSB0byB0ZWxs IHlvdSB0aGF0IGEgZmlsZSBpcyBtaXNzaW5nLiBUaGlzIHJldHVybnMgYSBzdGF0dXMgY29k ZSBvZiAmIzgyMTc7MjAwIE9LJiM4MjE3OyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBkb3dubG9h ZCBvZiB0aGUgcmVwbGFjZW1lbnQgY29udGVudCB3ZW50IG9rLCBidXQgaW4gdGhpcyBjYXNl IHdlIGRvIDxlbT5ub3Q8L2VtPiB3YW50IHRvIGluY3JlbWVudCB0aGUgY291bnRlcjsgdGhl IGZpbGUmIzgyMTc7cyBzdGlsbCBtaXNzaW5nIGFmdGVyIGFsbCEgVW5kZXIgcmFyZSBjaXJj dW1zdGFuY2VzIHlvdSBtaWdodCBmaW5kIHRoYXQgdGhlIHByb3ZpZGVyIHJldHVybnMgY29u dGVudCBleGFjdGx5IHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUgZmlsZSBpdHNlbGYgYW5kIHRo ZSBjb3VudCB3b3VsZCB0aGVuIGJlIHdyb25nbHkgaW5jcmVtZW50ZWQuIFByYWN0aWNhbGx5 LCB5b3VyIGZpbGUgaXMgZ29pbmcgdG8gYmUgbGFyZ2VyIHRoYW4gdGhlaXIgcmVwbGFjZW1l bnQgc28gaXQgd29uJiM4MjE3O3QgbWF0dGVyLjwvcD4KCgk8cD5Ob3RlIHRoYXQgdGhlICYj ODIxNjtkb3dubG9hZCYjODIxNzsgbGluayBuZXh0IHRvIGVhY2ggZmlsZSBvbiB0aGUgRmls ZXMgdGFiIG9mIHRoZSBhZG1pbiBpbnRlcmZhY2UgYWx3YXlzIGNob29zZXMgYSByYW5kb20g ZmlsZSBmcm9tIHRob3NlIHVwbG9hZGVkIHdpdGggdGhhdCBuYW1lLjwvcD4KCgk8cD5Lbm93 biBpc3N1ZTogSWYgZWRpdGluZyBhICYjODIyMDtub3JtYWwmIzgyMjE7IGZpbGUgKG5vdCBh IC5saW5rKSBhbmQgeW91IGhpdCB0aGUgVXBsb2FkIGJ1dHRvbiA8ZW0+d2l0aG91dCBzcGVj aWZ5aW5nIGEgZmlsZTwvZW0+LCB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4g dXBsb2FkIGJveCBkb2VzIG5vdCBhcHBlYXIgb24gdGhlIEZpbGUgTGlzdCBwYWdlLiBIaXR0 aW5nIHRoZSBGaWxlcyB0YWIgYWdhaW4gb3IgcGVyZm9ybWluZyBzb21lIG90aGVyIGFjdGlv biByZS1pbnN0YXRlcyBpdC4gKnNocnVnKjwvcD4KCgk8aDIgaWQ9ImV4YW1wbGVzIj5FeGFt cGxlczwvaDI+CgoJPGgzIGlkPSJlZzEiPkV4YW1wbGUgMTwvaDM+CgoJPHA+SW4geW91ciA8 Y29kZT5maWxlczwvY29kZT4gZm9ybTo8L3A+Cgo8cHJlPiZsdDt0eHA6ZmlsZV9kb3dubG9h ZF9saW5rJmd0OwogJmx0O3R4cDpzbWRfZmlsZV9kb3dubG9hZF9uYW1lIC8mZ3Q7IFsmbHQ7 dHhwOmZpbGVfZG93bmxvYWRfc2l6ZQogICAgIGZvcm1hdD0mcXVvdDthdXRvJnF1b3Q7IGRl Y2ltYWxzPSZxdW90OzImcXVvdDsgLyZndDtdCiZsdDsvdHhwOmZpbGVfZG93bmxvYWRfbGlu ayZndDsKPC9wcmU+CgoJPGgzIGlkPSJlZzIiPkV4YW1wbGUgMjwvaDM+Cgo8cHJlPiZsdDt0 eHA6c21kX2ZpbGVfZG93bmxvYWRfbGluayBjaG9vc2U9JnF1b3Q7MiZxdW90OwogICAgIHNo b3dfbGluaz0mcXVvdDsxJnF1b3Q7IC8mZ3Q7CjwvcHJlPgoKCTxwPldpbGwgYWx3YXlzIHNl bGVjdCB0aGUgMm5kIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IGZyb20gdGhvc2Ug dXBsb2FkZWQgZm9yIGVhY2ggZmlsZS4gU2hvd3MgdGhlIDxjb2RlPi5saW5rPC9jb2RlPiBv biB0aGUgZW5kIG9mIGVhY2ggcmVtb3RlIGZpbGUuPC9wPgoKCTxoMyBpZD0iZWczIj5FeGFt cGxlIDM8L2gzPgoKPHByZT4mbHQ7dHhwOnNtZF9maWxlX2Rvd25sb2FkX2xpbmsmZ3Q7CiAm bHQ7dHhwOnNtZF9maWxlX2Rvd25sb2FkX2ltYWdlIGlmbWlzc2luZz0mcXVvdDtTb3JyeSwg bm8gaW1hZ2UgZm91bmQmcXVvdDsKICAgICB3cmFwdGFnPSZxdW90O3NwYW4mcXVvdDsgY2xh c3M9JnF1b3Q7ZGxvYWQmcXVvdDsgLyZndDsKJmx0Oy90eHA6c21kX2ZpbGVfZG93bmxvYWRf bGluayZndDsKPC9wcmU+CgoJPHA+RGlzcGxheXMgYW4gaW1hZ2Ugd2l0aCB0aGUgc2FtZSBu YW1lIChwbHVzIC5qcGcpIGFzIHRoZSByZW1vdGUgZmlsZS4gVGhlIGltYWdlIGlzIGNsaWNr YWJsZSB0byBhbGxvdyB0aGUgZmlsZSB0byBiZSBkb3dubG9hZGVkIGJ1dCBpZiB0aGUgaW1h Z2UgaXMgbm90IGZvdW5kLCB0aGUgdGV4dCAmIzgyMjA7U29ycnksIG5vIGltYWdlIGZvdW5k JiM4MjIxOyB3aWxsIGJlIGRpc3BsYXllZCBpbnN0ZWFkICh0aGUgdGV4dCBpcyBhbHNvIGNs aWNrYWJsZSkuIFdyYXBzIHRoZSBpbWcgb3IgdGV4dCBpbiA8Y29kZT4mbHQ7c3BhbiZndDs8 L2NvZGU+IHRhZ3Mgd2l0aCBhIGNsYXNzIG9mIDxjb2RlPmRsb2FkPC9jb2RlPi48L3A+CgoJ PGgyIGlkPSJjaGFuZ2Vsb2ciPkNoYW5nZWxvZzwvaDI+CgoJPHVsPgoJCTxsaT4xMiBOb3Yg MDcgfCAwLjEgfCBJbml0aWFsIHJlbGVhc2U8L2xpPgoJCTxsaT4wNCBEZWMgMDcgfCAwLjIg fCBBZGRlZCBkb3dubG9hZCBjb3VudGVyIGFuZCBzb21lIGJldHRlciBzdGF0dXMgbWVzc2Fn ZXM8L2xpPgoJCTxsaT4wNCBEZWMgMDcgfCAwLjMgfCBSZW1vdmVkIC5saW5rIHdoZW4gdXNp bmcgPGNvZGU+c21kX2ZpbGVfZG93bmxvYWRfbGluazwvY29kZT4gOyBhZGRlZCA8Y29kZT5z aG93X2xpbms8L2NvZGU+IGF0dHJpYnV0ZSA7IGltcHJvdmVkIGVycm9yIGhhbmRsaW5nIGNv ZGUgOyBkb3dubG9hZCBjb3VudCBvbmx5IGluY3JlYXNlcyBpZiBmaWxlIHNpemVzIG1hdGNo PC9saT4KCQk8bGk+MDUgRGVjIDA3IHwgMC4zMSB8IEZpbGUgaXMgY2hlY2tlZCBmb3IgZXJy b3IgY29uZGl0aW9uIHByaW9yIHRvIGRvd25sb2FkIGluIGxpbmUgd2l0aCBjb3JlIGNoYW5n ZXNldCByMjcyMCAodGhhbmtzIE1hcnkpICYjODIxMTsgY2FuIGJlIHJlbW92ZWQgd2hlbiA0 LjAuNiBpcyByZWxlYXNlZDwvbGk+CgkJPGxpPjEyIERlYyAwNyB8IDAuMzIgfCBFbmhhbmNl ZCBpZm1pc3NpbmcgdG8gaW5jbHVkZSBpbWFnZSBzdXBwb3J0OyBjaGFuZ2VkIHRoZSA/Zmls ZSBhdHRyaWJ1dGUgdG8gP3JlZiAoaXQmIzgyMTc7cyBhIGJldHRlciBuYW1lKTwvbGk+CgkJ PGxpPjAzIEZlYiAwOCB8IDAuNCB8IFJlcXVpcmVzIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8 L3NwYW4+IDQuMC42IDsgcmVtb3ZlZCBlcnJvciBjaGVjayBmcm9tIHYwLjMxIDsgYWRkZWQv aW1wcm92ZWQgcmVwbGFjZSByZW1vdGUgZmlsZSA7IHJlZHVjZWQgdGltZW91dCBmb3IgYWNj ZXNzaW5nIHJlbW90ZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiB0byB0cnkgYW5k IHByZXZlbnQgdWdseSB3YXJuaW5nczwvbGk+CgkJPGxpPjAyIEFwciAwOCB8IDAuNDEgfCBB ZGRlZCBzbWRfZmlsZV9kb3dubG9hZF9uYW1lICh0aGFua3MgYXN3aWhhcnQpPC9saT4KCTwv dWw+CgoJPGgyIGlkPSJjcmVkaXRzIj5DcmVkaXRzPC9oMj4KCgk8cD5JIGNhbm5vdCBwb3Nz aWJseSBjbGFpbSBhbGwgdGhlIGNyZWRpdCBmb3IgdGhpcyBodW5rIG9mIGNvZGUuIFRoZSBw bHVnaW4gd291bGQgbm90IGhhdmUgZXhpc3RlZCBpZiBpdCB3ZXJlbiYjODIxNzt0IGZvciB0 aGUgYW1hemluZyBtaW5kIG9mIFJ1dWQgdmFuIE1lbGljay4gSGUgc3VnZ2VzdGVkIGEgdmVy eSBjbGV2ZXIgc29sdXRpb24gdG8gbXkgcmVtb3RlIGZpbGUgcHJlZGljYW1lbnQuIEkgYnVp bHQgb24gdGhhdCwgZXh0ZW5kZWQgaXQsIHJlZmluZWQgaXQsIHBsdWdpbmlzZWQgaXQgYW5k IGdhdmUgaXQgdG8geW91LiBNYW55IHRoYW5rcyB0byBSdXVkIGZvciB0aGUgYXdlc29tZSBz dXBwb3J0IGhlIG9mZmVycyB0aGUgY29tbXVuaXR5LCBhbmQgYWxzbyB0byBXZXQgZm9yIGhp cyBhc3Npc3RhbmNlIHdpdGggaGVscGluZyBtZSB1bmRlcnN0YW5kIHRoZSBjb3JlLjwvcD4K Cgk8cD48L2Rpdj48L3A+CjwhLS0gLS0tIEJFR0lOIFBMVUdJTiBDU1MgLS0tIC0tPgo8c3R5 bGUgdHlwZT0idGV4dC9jc3MiPgojc21kX2hlbHAgLnJlcXVpcmVkIHsgY29sb3I6cmVkOyBw YWRkaW5nOi41ZW0gMDsgZm9udC13ZWlnaHQ6Ym9sZDsgfQojc21kX2hlbHAgeyBsaW5lLWhl aWdodDoxLjUgO30KI3NtZF9oZWxwIC5hdHQtbmFtZSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IH0K I3NtZF9oZWxwIGNvZGUgeyBmb250LXdlaWdodDpib2xkOyBmb250OiAxMDUlLzEzMCUgIkNv dXJpZXIgTmV3IiwgY291cmllciwgbW9ub3NwYWNlOyBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZG RkNDO30KI3NtZF9oZWxwIGNvZGUuc2VkX2NvZGVfdGFnIHsgZm9udC13ZWlnaHQ6bm9ybWFs OyBib3JkZXI6MXB4IGRvdHRlZCAjOTk5OyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBlNjhjOyBk aXNwbGF5OmJsb2NrOyBtYXJnaW46MTBweCAxMHB4IDIwcHg7IHBhZGRpbmc6MTBweDsgfQoj c21kX2hlbHAgYTpsaW5rLCAjc21kX2hlbHAgYTp2aXNpdGVkIHsgY29sb3I6IGJsdWU7IHRl eHQtZGVjb3JhdGlvbjogbm9uZTsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsdWU7IHBh ZGRpbmctYm90dG9tOjFweDt9CiNzbWRfaGVscCBhOmhvdmVyLCAjc21kX2hlbHAgYTphY3Rp dmUgeyBjb2xvcjogYmx1ZTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBib3JkZXItYm90dG9t OiAycHggc29saWQgYmx1ZTsgcGFkZGluZy1ib3R0b206MXB4O30KI3NtZF9oZWxwIGgxIHsg Y29sb3I6ICMzNjk7IGZvbnQ6IDIwcHggR2VvcmdpYSwgc2Fucy1zZXJpZjsgbWFyZ2luOiAw OyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KI3NtZF9oZWxwIGgyIHsgYm9yZGVyLWJvdHRvbTog MXB4IHNvbGlkIGJsYWNrOyBwYWRkaW5nOjEwcHggMCAwOyBjb2xvcjogIzM2OTsgZm9udDog MTdweCBHZW9yZ2lhLCBzYW5zLXNlcmlmOyB9CiNzbWRfaGVscCBoMyB7IGNvbG9yOiAjMTA4 MDMwOyBmb250OiBib2xkIDEycHggQXJpYWwsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5n OiAxcHg7IG1hcmdpbjogMTVweCAwIDA7dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTt9Cjwv c3R5bGU+CjwhLS0gLS0tIEVORCBQTFVHSU4gQ1NTIC0tLSAtLT4KIjtzOjM6Im1kNSI7czoz MjoiN2M5NDFmNGYyZWQwOTMzN2VmZDE2ZmQwNTUzMTc1MmQiO30=