# Name: smd_qr_code v0.30 # Type: Public side plugin # Create QR codes on the fly # Author: Stef Dawson # 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: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjExOiJzbWRfcXJfY29kZSI7czo2OiJhdXRob3IiO3M6MTE6 IlN0ZWYgRGF3c29uIjtzOjEwOiJhdXRob3JfdXJpIjtzOjIyOiJodHRwOi8vc3RlZmRhd3Nv bi5jb20vIjtzOjc6InZlcnNpb24iO3M6NDoiMC4zMCI7czoxMToiZGVzY3JpcHRpb24iO3M6 MjY6IkNyZWF0ZSBRUiBjb2RlcyBvbiB0aGUgZmx5IjtzOjQ6ImNvZGUiO3M6MTQ1NzY6ImZ1 bmN0aW9uIHNtZF9xcl9jb2RlKCRhdHRzLCAkdGhpbmc9TlVMTCkgew0KCWV4dHJhY3QobEF0 dHMoYXJyYXkoDQoJCSd0eXBlJyAgICAgID0+ICd0ZXh0JywgLy8gdGV4dC9saW5rL2Jvb2tt YXJrL3Ntcy9waG9uZS9lbWFpbC9jb250YWN0L2dlby93aWZpDQoJCSdkYXRhJyAgICAgID0+ ICdIZWxsbyB3b3JsZCEnLA0KCQknZGVsaW0nICAgICA9PiAnfCcsDQoJCSdsYXlvdXQnICAg ID0+ICcnLA0KCQkndHJhbnNmb3JtJyA9PiAnJywNCgkJJ3ZhbGlkYXRlJyAgPT4gJzEnLCAv LyAwPW5vLCAxPXllcywgb3IgJ3ZhbGlkYXRlLHRoZXNlLGZpZWxkcycgb3IgJ3ZhbGlkYXRl LCB0aGVzZXxeWzAtOS4gXC1dKyQsIGZpZWxkcw0KCQkndmFsaWRlbGltJyA9PiAnLCcsDQoJ CSdmb3JtYXQnICAgID0+ICd2aWV3JywgLy8gdmlldy9kb3dubG9hZC9yYXcNCgkJJ3ByZWZp eCcgICAgPT4gJ1NNRF9RUl8nLA0KCQknd2lkdGgnICAgICA9PiAnMjAwJywNCgkJJ2hlaWdo dCcgICAgPT4gJzIwMCcsDQoJCSdxdWFsaXR5JyAgID0+ICdMJywgLy8gTC9NL1EvSA0KCQkn bWFyZ2luJyAgICA9PiAnNCcsDQoJCSdiZ2NvbCcgICAgID0+ICcnLA0KCQknYWxwaGEnICAg ICA9PiAnJywNCgkJJ2VzY2FwZScgICAgPT4gJycsDQoJCSd0aXRsZScgICAgID0+ICcnLA0K CQknY2xhc3MnICAgICA9PiAnJywNCgkJJ2h0bWxfaWQnICAgPT4gJycsDQoJCSd3cmFwdGFn JyAgID0+ICcnLA0KCQknZGVidWcnICAgICA9PiAwLA0KCSksJGF0dHMpKTsNCg0KCS8vIERl ZmF1bHQgbGF5b3V0cw0KCSRsYXlvdXRzID0gYXJyYXkoDQoJCSd0ZXh0JyAgICAgPT4gJ3t0 ZXh0fScsDQoJCSdsaW5rJyAgICAgPT4gJ3t1cmx9JywNCgkJJ2Jvb2ttYXJrJyA9PiAnTUVC S006VElUTEU6e3RpdGxlfTtVUkw6e3VybH07OycsDQoJCSdzbXMnICAgICAgPT4gJ1NNU1RP OntwaG9uZX06e3RleHR9JywNCgkJJ3Bob25lJyAgICA9PiAnVEVMOntwaG9uZX0nLA0KCQkn Y29udGFjdCcgID0+ICdNRUNBUkQ6Tjp7bmFtZX07QURSOnthZGRyZXNzfTtURUw6e3Bob25l fTtFTUFJTDp7ZW1haWx9OzsnLA0KCQkndmNhcmQnICAgID0+ICdCRUdJTjpWQ0FSRFxyXG5O OnsnLiRwcmVmaXguJ2Zvcm1hdHRlZF9uYW1lfVxyXG5GTjp7bmFtZX1cclxuRU1BSUw6e2Vt YWlsfVxyXG5VUkw6e3VybH1cclxuQURSOnthZGRyZXNzfVxyXG5URUw6e3Bob25lfVxyXG5F TkQ6VkNBUkQnLA0KCQknZW1haWwnICAgID0+ICdNQVRNU0c6VE86e2VtYWlsfTtTVUI6e3N1 YmplY3R9O0JPRFk6e21lc3NhZ2V9OzsnLA0KCQknZ2VvJyAgICAgID0+ICdHRU86e2xhdH0s e2xvbn0se2hlaWdodH0nLA0KCQknd2lmaScgICAgID0+ICdXSUZJOlQ6e3dpZmlfcHJvdG9j b2x9O1N7c3NpZH07e3Bhc3N9OzsnLA0KCSk7DQoNCgkvLyBEZWZhdWx0IHJlZ2V4ZXMNCgkk cmVfdXJsID0gJ0BeKGh0dHA6Ly98aHR0cHM6Ly8pLitAJzsNCgkkcmVfZW1haWwgPSAiPF5b YS16MC05ISMkJSYnKisvPT9eX2B7fH1+LV0rKD86XC5bYS16MC05ISMkJSYnKisvPT9eX2B7 fH1+LV0rKSpAKD86W2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pP1wuKStbYS16MC05 XSg/OlthLXowLTktXSpbYS16MC05XSk/JD4iOw0KCSRyZV9waG9uZSA9ICcvXlswLTkoKVwt KyBdKyQvJzsNCgkkcmVfbXNnID0gJy9eLiskLyc7DQoJJHJlX2dlbyA9ICcvXlswLTkuXC1d KyQvJzsNCgkkcmVfZGlnaXRzID0gJy9eWzAtOVwrXC1dKyQvJzsNCgkkcmVfd2lmaV9wcm90 b2NvbCA9ICcvXihXRVB8V1BBKSQvJzsNCg0KCS8vIHJlZ2V4IGFycmF5OiBjYW4gYmUgb3Zl cnJpZGRlbiBvbiBhIGNhc2UgYnkgY2FzZSBiYXNpcyBieSB0aGUgdmFsaWRhdGUgYXR0cmli dXRlDQoJJHJlZ2V4ZXMgPSBhcnJheSgNCgkJJ3RleHQnID0+ICRyZV9tc2csDQoJCSd1cmwn ID0+ICRyZV91cmwsDQoJCSd0aXRsZScgPT4gJHJlX21zZywNCgkJJ3Bob25lJyA9PiAkcmVf cGhvbmUsDQoJCSduYW1lJyA9PiAkcmVfbXNnLA0KCQknYWRkcmVzcycgPT4gJHJlX21zZywN CgkJJ2VtYWlsJyA9PiAkcmVfZW1haWwsDQoJCSdzdWJqZWN0JyA9PiAkcmVfbXNnLA0KCQkn bWVzc2FnZScgPT4gJHJlX21zZywNCgkJJ2xhdCcgPT4gJHJlX2dlbywNCgkJJ2xvbicgPT4g JHJlX2dlbywNCgkJJ2hlaWdodCcgPT4gJHJlX2RpZ2l0cywNCgkJJ3dpZmlfcHJvdG9jb2wn ID0+ICRyZV93aWZpX3Byb3RvY29sLA0KCQknc3NpZCcgPT4gJHJlX21zZywNCgkJJ3Bhc3Mn ID0+ICRyZV9tc2csDQoJKTsNCg0KCS8vIE92ZXJyaWRlIC8gbmV3IGxheW91dA0KCWlmICgk bGF5b3V0KSB7DQoJCSRsYXlvdXRzWyR0eXBlXSA9ICRsYXlvdXQ7DQoJfQ0KDQoJLy8gQnVp bGQgdGhlIGFycmF5IG9mIHBlcm1pdHRlZCB0eXBlcw0KCS8vIEVhY2ggZW50cnkgbGlua3Mg dGhlICd0eXBlJyBhdHRyaWJ1dGUgd2l0aCBhbiBhcnJheSBvZiBleHBlY3RlZCBhdHRyaWJ1 dGVzLg0KCS8vIFRoZSByZWdleCB0byB1c2UgZm9yIGVhY2ggY2FuIGJlIGxvb2tlZCB1cCBp biB0aGUgJHJlZ2V4ZXMgYXJyYXkNCglmb3JlYWNoKCRsYXlvdXRzIGFzICRsYXkgPT4gJGRl Zikgew0KCQlwcmVnX21hdGNoX2FsbCgnL1x7KCg/IScuJHByZWZpeC4nKS4qPylcfS8nLCAk ZGVmLCAkbWF0Y2hlcyk7DQoJCSRhbGxvd2VkX3R5cGVzWyRsYXldID0gJG1hdGNoZXNbMV07 DQoJCS8vIEFzIGEgY29udmVuaWVuY2UsIGlmIGFueSBuZXcgZmllbGRzIGFyZSBkZWZpbmVk LCBzZXQgYSBkZWZhdWx0ICh3aWRlLW9wZW4pIHJlZ2V4IGZvciBlYWNoDQoJCS8vIFRoZXNl IGRlZmF1bHQgcmVnZXhlcyBjYW4gYmUgb3ZlcnJpZGVuIGJ5IHRoZSBuZXh0IGNvZGUgYmxv Y2sNCgkJaWYgKCRsYXlvdXQpIHsNCgkJCWZvcmVhY2ggKCRtYXRjaGVzWzFdIGFzICRuZXdm aWVsZCkgew0KCQkJCWlmKCFpc3NldCgkcmVnZXhlc1skbmV3ZmllbGRdKSkgew0KCQkJCQkk cmVnZXhlc1skbmV3ZmllbGRdID0gJHJlX21zZzsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQoN CgkvLyBCdWlsZCB0aGUgbGlzdCBvZiBmaWVsZHMgdG8gdmFsaWRhdGUgYW5kIGluamVjdCAv IG92ZXJ3cml0ZSBhbnkgY3VzdG9tIHJlZ2V4ZXMNCgkkdmFsaWRSZXN0ID0gZmFsc2U7DQoJ aWYgKCR2YWxpZGF0ZSA9PSAnMCcpIHsNCgkJJHRvVmFsaWRhdGUgPSBhcnJheSgpOw0KCX0N CglpZiAoJHZhbGlkYXRlID09ICcxJykgew0KCQkkdG9WYWxpZGF0ZVtdID0gJ1NNRF9BTEwn Ow0KCX0gZWxzZSB7DQoJCSRmaWVsZHMgPSBkb19saXN0KCR2YWxpZGF0ZSwgJHZhbGlkZWxp bSk7DQoJCWZvcmVhY2ggKCRmaWVsZHMgYXMgJGZpZWxkaW5mbykgew0KCQkJJGZpZWxkUGFy dHMgPSBleHBsb2RlKCRkZWxpbSwgJGZpZWxkaW5mbyk7DQoJCQlpZiAoJGZpZWxkUGFydHNb MF0gPT0gJzEnKSB7DQoJCQkJJHZhbGlkUmVzdCA9IHRydWU7DQoJCQl9IGVsc2Ugew0KCQkJ CSR0b1ZhbGlkYXRlW10gPSAkZmllbGRQYXJ0c1swXTsNCgkJCQlpZiAoaXNzZXQoJGZpZWxk UGFydHNbMV0pKSB7DQoJCQkJCWlmIChzdHJwb3MoJGZpZWxkUGFydHNbMV0sICdTTURfUkVH RVhfJykgIT09IGZhbHNlKSB7DQoJCQkJCQkkY29weUZyb21GaWVsZCA9IHN0cnRvbG93ZXIo c3RyX3JlcGxhY2UoJ1NNRF9SRUdFWF8nLCAnJywgJGZpZWxkUGFydHNbMV0pKTsNCgkJCQkJ CWlmIChpc3NldCgkcmVnZXhlc1skY29weUZyb21GaWVsZF0pKSB7DQoJCQkJCQkJJHJlZ2V4 ZXNbJGZpZWxkUGFydHNbMF1dID0gJHJlZ2V4ZXNbJGNvcHlGcm9tRmllbGRdOw0KCQkJCQkJ fQ0KCQkJCQl9IGVsc2Ugew0KCQkJCQkJJHJlZ2V4ZXNbJGZpZWxkUGFydHNbMF1dID0gJGZp ZWxkUGFydHNbMV07DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0NCgkJaWYgKCR2YWxpZFJl c3QgJiYgYXJyYXlfa2V5X2V4aXN0cygkdHlwZSwgJGFsbG93ZWRfdHlwZXMpKSB7DQoJCQlm b3JlYWNoKCRhbGxvd2VkX3R5cGVzWyR0eXBlXSBhcyAkZmxkKSB7DQoJCQkJaWYgKCFpbl9h cnJheSgkZmxkLCAkcmVnZXhlcykpIHsNCgkJCQkJJHRvVmFsaWRhdGVbXSA9ICRmbGQ7DQoJ CQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KDQoJLy8gRGVmYXVsdCB0cmFuc2Zvcm1zDQoJJHRyYW5z Zm9ybXMgPSBhcnJheSgNCgkJJyoudXJsJyAgICAgID0+ICdsaW5raWZ5JywNCgkJJ3ZjYXJk Lm5hbWUnID0+ICdzcGxpdHJldmpvaW58Zm9ybWF0dGVkX25hbWV8IHw7JywNCgkpOw0KDQoJ Ly8gQWRkIGN1c3RvbSB0cmFuc2Zvcm0gcnVsZXMNCgkvLyBOZXcgbWV0aG9kcyBtdXN0IHVz ZSByZWdpc3Rlcl9jYWxsYmFjaygnbXlfY3VzdG9tX3RyYW5zZm9ybScsICdzbWRfcXJfY29k ZScsICdhZGRfdHJhbnNmb3JtJyk7DQoJLy8gRnVuY3Rpb24gc2lnbmF0dXJlIGlzOiAxKSBk YXRhIHZhbHVlIHRvIHRyYW5zZm9ybSwgMikgb3B0aW9uYWwgYXJyYXkgb2YgYW55IG90aGVy IGFyZ3MgcGFja2FnZWQgYXMgbmFtZT0+dmFsIGVudHJpZXMNCgkkdHJhbnNmb3JtID0gZG9f bGlzdCgkdHJhbnNmb3JtKTsNCglmb3JlYWNoICgkdHJhbnNmb3JtIGFzICR4Zm9ybSkgew0K CQlpZiAoZW1wdHkoJHhmb3JtKSkgY29udGludWU7DQoJCSR4Zm9ybVBhcmFtcyA9IGRvX2xp c3QoJHhmb3JtLCAkZGVsaW0pOw0KCQkkeGZvcm1pZCA9IGFycmF5X3NoaWZ0KCR4Zm9ybVBh cmFtcyk7DQoJCSR0cmFuc2Zvcm1zWyR4Zm9ybWlkXSA9IGpvaW4oJGRlbGltLCAkeGZvcm1Q YXJhbXMpOw0KCX0NCg0KCWlmICgkZGVidWcpIHsNCgkJZWNobyAnKysgVFJBTlNGT1JNQVRJ T05TICsrJzsNCgkJZG1wKCR0cmFuc2Zvcm1zKTsNCgl9DQoNCglpZiAoYXJyYXlfa2V5X2V4 aXN0cygkdHlwZSwgJGFsbG93ZWRfdHlwZXMpKSB7DQoJCSRxcmMgPSBuZXcgc21kX3FyY29k ZSgkd2lkdGgsICRoZWlnaHQsICRxdWFsaXR5LCAkbWFyZ2luLCAkYmdjb2wsICRhbHBoYSwg JGVzY2FwZSk7DQoJCSRwYXJhbXMgPSBzbWRfcXJfY29kZV9leHRyYWN0KCRhbGxvd2VkX3R5 cGVzWyR0eXBlXSwgJHRyYW5zZm9ybXMsICRyZWdleGVzLCAkdG9WYWxpZGF0ZSwgJGRhdGEs ICRkZWxpbSwgJHR5cGUsICRwcmVmaXgsICRkZWJ1Zyk7DQoNCgkJaWYgKCRwYXJhbXMgPT09 IGZhbHNlKSB7DQoJCQlyZXR1cm4gJyc7DQoJCX0gZWxzZSB7DQoJCQkvLyBSdW4gdGhlIGZ1 bmN0aW9uIHRoYXQgcHJlcGFyZXMgdGhlIGRhdGEgb2JqZWN0DQoJCQlpZiAoYXJyYXlfa2V5 X2V4aXN0cygkdHlwZSwgJGxheW91dHMpKSB7DQoJCQkJJHFyYy0+Z2V0X2RhdGEoJGxheW91 dHNbJHR5cGVdLCAkcGFyYW1zLCAkZGVidWcpOw0KCQkJfSBlbHNlIHsNCgkJCQl0cmlnZ2Vy X2Vycm9yKHNtZF9xcl9jb2RlX2dUeHQoJ3NtZF9xcl9jb2RlX2ludmFsaWRfbGF5b3V0Jywg YXJyYXkoJ3t0eXBlfScgPT4gJHR5cGUpKSwgRV9VU0VSX05PVElDRSk7DQoJCQkJcmV0dXJu ICcnOw0KCQkJfQ0KCQl9DQoNCgkJaWYgKCRmb3JtYXQgPT0gJ3ZpZXcnKSB7DQoJCQkkdHJp YnMgPSAnJzsNCgkJCWlmICghJHdyYXB0YWcpIHsNCgkJCQkkdHJpYnMgLj0gKCRjbGFzcykg PyAnIGNsYXNzPSInLiRjbGFzcy4nIicgOiAnJzsNCgkJCQkkdHJpYnMgLj0gKCRodG1sX2lk KSA/ICcgaWQ9IicuJGh0bWxfaWQuJyInIDogJyc7DQoJCQkJJHRyaWJzIC49ICgkdGl0bGUp ID8gJyB0aXRsZT0iJy4kdGl0bGUuJyInIDogJyc7DQoJCQl9DQoNCgkJCSRjb250ZW50ID0g JzxpbWcgc3JjPSInIC4gJHFyYy0+Z2V0X2xpbmsoKSAuICciJy4kdHJpYnMuJyBhbHQ9IlFS IGNvZGUiIC8+JzsNCg0KCQkJcmV0dXJuICgkd3JhcHRhZykgPyBkb1RhZygkY29udGVudCwg JHdyYXB0YWcsICRjbGFzcywgJycsICRodG1sX2lkKSA6ICRjb250ZW50Ow0KDQoJCX0gZWxz ZWlmICgkZm9ybWF0ID09ICdkb3dubG9hZCcpIHsNCgkJCSRmaWxlID0gJHFyYy0+Z2V0X2lt YWdlKCk7DQoJCQkkcXJjLT5kb3dubG9hZF9pbWFnZSgkZmlsZSk7DQoJCQlyZXR1cm4gJyc7 DQoJCX0gZWxzZWlmICgkZm9ybWF0ID09ICdyYXcnKSB7DQoJCQkkY29udGVudCA9ICRxcmMt PmdldF9saW5rKCk7DQoJCQlyZXR1cm4gKCR3cmFwdGFnKSA/IGRvVGFnKCRjb250ZW50LCAk d3JhcHRhZywgJGNsYXNzLCAnJywgJGh0bWxfaWQpIDogJGNvbnRlbnQ7DQoJCX0NCgl9IGVs c2Ugew0KCQl0cmlnZ2VyX2Vycm9yKHNtZF9xcl9jb2RlX2dUeHQoJ3NtZF9xcl9jb2RlX2lu dmFsaWRfdHlwZScsIGFycmF5KCd7dHlwZX0nID0+ICR0eXBlKSksIEVfVVNFUl9OT1RJQ0Up Ow0KCQlyZXR1cm4gJyc7DQoJfQ0KfQ0KDQovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K ZnVuY3Rpb24gc21kX3FyX2NvZGVfZXh0cmFjdCgkcGVybWl0dGVkLCAkdHJhbnNmb3Jtcywg JHJlZ2V4TGlzdCwgJHZhbGlkYXRlTGlzdCwgJGRhdGEsICRkbG0sICR0YWcsICRwcmVmaXgs ICRkZWJ1Zz1mYWxzZSkgew0KCSRvcHRzID0gZG9fbGlzdCgkZGF0YSwgJGRsbSk7DQoJJG9w dHMgPSAoZW1wdHkoJG9wdHNbMF0pKSA/IGFycmF5KCkgOiAkb3B0czsNCg0KCSR4Zm9ybWxp c3QgPSBuZXcgc21kX3FyX2NvZGVfdHJhbnNmb3JtcygpOw0KDQoJJG91dCA9IGFycmF5KCk7 DQoJJGNvdW50ID0gMDsNCg0KCWlmICgkZGVidWcpIHsNCgkJZWNobyAnKysgUEVSTUlUVEVE IElURU1TIC8gU1VQUExJRUQgSVRFTVMgLyBSRUdFWEVTIC8gRklFTERTIFRPIFZBTElEQVRF ICsrJzsNCgkJZG1wKCRwZXJtaXR0ZWQsICRvcHRzLCAkcmVnZXhMaXN0LCAkdmFsaWRhdGVM aXN0KTsNCgl9DQoNCglpZiAoY291bnQoJHBlcm1pdHRlZCkgIT0gY291bnQoJG9wdHMpKSB7 DQoJCXRyaWdnZXJfZXJyb3Ioc21kX3FyX2NvZGVfZ1R4dCgnc21kX3FyX2NvZGVfYXR0cmli dXRlX21pc21hdGNoJywgYXJyYXkoJ3t0eXBlfScgPT4gJHRhZywgJ3tjb3VudH0nID0+IGNv dW50KCRvcHRzKSwgJ3tleHBlY3RlZH0nID0+IGNvdW50KCRwZXJtaXR0ZWQpLCAne2ZpZWxk c30nID0+IGpvaW4oJywgJywgJHBlcm1pdHRlZCkpKSwgRV9VU0VSX05PVElDRSk7DQoJCXJl dHVybiBmYWxzZTsNCgl9DQoNCglmb3JlYWNoICgkcGVybWl0dGVkIGFzICRpZHgpIHsNCgkJ aWYgKGlzc2V0KCRvcHRzWyRjb3VudF0pKSB7DQoJCQkkZGF0YXZhbCA9ICRvcHRzWyRjb3Vu dF07DQoJCQlpZiAoJGRhdGF2YWwgPT0gJ3tzbWRfZW1wdHl9Jykgew0KCQkJCSRvdXRbJGlk eF0gPSAnJzsNCgkJCX0gZWxzZSB7DQoNCgkJCQkvLyBQZXJmb3JtIGFueSB0cmFuc2Zvcm1h dGlvbnMNCgkJCQkkYXBwbHlfdG8gPSAkdGFnLicuJy4kaWR4Ow0KCQkJCSR4a2V5ID0gJyc7 DQoNCgkJCQlpZiAoYXJyYXlfa2V5X2V4aXN0cygkYXBwbHlfdG8sICR0cmFuc2Zvcm1zKSkg ew0KCQkJCQkkeGtleSA9ICRhcHBseV90bzsNCgkJCQl9IGVsc2UgaWYgKGFycmF5X2tleV9l eGlzdHMoJyouJy4kaWR4LCAkdHJhbnNmb3JtcykpIHsNCgkJCQkJJHhrZXkgPSAnKi4nLiRp ZHg7DQoJCQkJfQ0KDQoJCQkJaWYgKCR4a2V5KSB7DQoJCQkJCSR4Zm9ybSA9ICR0cmFuc2Zv cm1zWyR4a2V5XTsNCgkJCQkJJHhmb3JtVmFscyA9IGRvX2xpc3QoJHhrZXksICcuJyk7DQoJ CQkJCSR4Zm9ybUFyZ3MgPSBleHBsb2RlKCRkbG0sICR4Zm9ybSk7DQoJCQkJCSRmbiA9IGFy cmF5X3NoaWZ0KCR4Zm9ybUFyZ3MpOw0KDQoJCQkJCWlmICgkaWR4ID09ICR4Zm9ybVZhbHNb MV0pIHsNCgkJCQkJCS8vIFBhc3MgdGhlIHJlbWFpbmluZyBhcmdzIHRvIHRoZSBub21pbmF0 ZWQgZnVuY3Rpb24uLi4NCgkJCQkJCSRyZXN1bHQgPSAkeGZvcm1saXN0LT5leGVjdXRlKCRm biwgJGRhdGF2YWwsICR4Zm9ybUFyZ3MpOw0KDQoJCQkJCQkvLyAuLiBhbmQgZWl0aGVyIG92 ZXJyaWRlIHRoZSBjdXJyZW50IHZhbHVlIG9yIGFkZCBuZXcgb25lcw0KCQkJCQkJaWYgKGlz X2FycmF5KCRyZXN1bHQpKSB7DQoJCQkJCQkJZm9yZWFjaCgkcmVzdWx0IGFzICRpbmFyZyA9 PiAkaW52YWwpIHsNCgkJCQkJCQkJaWYgKCRpbmFyZyA9PSAkaWR4KSB7DQoJCQkJCQkJCQkk ZGF0YXZhbCA9ICRpbnZhbDsNCgkJCQkJCQkJfSBlbHNlIHsNCgkJCQkJCQkJCS8vIEluamVj dCBuZXcgdGFncyBjcmVhdGVkIGJ5IHRyYW5zZm9ybXMgZGlyZWN0bHkgaW50byB0aGUgb3V0 c3RyZWFtDQoJCQkJCQkJCQkkb3V0WyRwcmVmaXguJGluYXJnXSA9ICRpbnZhbDsNCgkJCQkJ CQkJfQ0KCQkJCQkJCX0NCgkJCQkJCX0gZWxzZSB7DQoJCQkJCQkJJGRhdGF2YWwgPSAkcmVz dWx0Ow0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KDQoJCQkJLy8gUGVyZm9ybSB2YWxpZGF0 aW9uIGlmIHJlcXVpcmVkDQoJCQkJaWYgKGluX2FycmF5KCdTTURfQUxMJywgJHZhbGlkYXRl TGlzdCkgfHwgaW5fYXJyYXkoJGlkeCwgJHZhbGlkYXRlTGlzdCkpIHsNCgkJCQkJJHJlID0g aXNzZXQoJHJlZ2V4TGlzdFskaWR4XSkgPyAkcmVnZXhMaXN0WyRpZHhdIDogJyc7DQoNCgkJ CQkJaWYgKCRyZSkgew0KCQkJCQkJaWYgKCRkZWJ1ZyA+IDEpIHsNCgkJCQkJCQlkbXAoJ1ZB TElEQVRJTkcgJyAuICRpZHggLiAnIHVzaW5nICcgLiAkcmUpOw0KCQkJCQkJfQ0KCQkJCQkJ aWYgKHByZWdfbWF0Y2goJHJlLCAkZGF0YXZhbCkpIHsNCgkJCQkJCQkkb3V0WyRpZHhdID0g JGRhdGF2YWw7DQoJCQkJCQl9IGVsc2Ugew0KCQkJCQkJCXRyaWdnZXJfZXJyb3Ioc21kX3Fy X2NvZGVfZ1R4dCgnc21kX3FyX2NvZGVfaW52YWxpZF9hdHRyaWJ1dGUnLCBhcnJheSgne2F0 dHJpYn0nID0+ICRpZHgsICd7dGFnfScgPT4gJHRhZykpLCBFX1VTRVJfTk9USUNFKTsNCgkJ CQkJCQlyZXR1cm4gZmFsc2U7DQoJCQkJCQl9DQoJCQkJCX0gZWxzZSB7DQoJCQkJCQkkb3V0 WyRpZHhdID0gJGRhdGF2YWw7DQoJCQkJCQl0cmlnZ2VyX2Vycm9yKHNtZF9xcl9jb2RlX2dU eHQoJ3NtZF9xcl9jb2RlX25vX3JlZ2V4JywgYXJyYXkoJ3thdHRyaWJ9JyA9PiAkaWR4LCAn e3RhZ30nID0+ICR0YWcpKSwgRV9VU0VSX1dBUk5JTkcpOw0KCQkJCQl9DQoJCQkJfSBlbHNl IHsNCgkJCQkJLy8gTm90IHZhbGlkYXRpbmcsIHNvIHN0b3JlIGl0IHZlcmJhdGltDQoJCQkJ CWlmICgkZGVidWcgPiAxKSB7DQoJCQkJCQlkbXAoJ05PVCBWQUxJREFUSU5HICcgLiAkaWR4 KTsNCgkJCQkJfQ0KCQkJCQkkb3V0WyRpZHhdID0gJGRhdGF2YWw7DQoJCQkJfQ0KCQkJfQ0K CQl9IGVsc2Ugew0KCQkJLy8gVE9ETzogZXJtLi4uPw0KCQl9DQoJCSRjb3VudCsrOw0KCX0N CgkJCQkJDQoJcmV0dXJuICRvdXQ7DQp9DQoNCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQpmdW5jdGlvbiBzbWRfcXJfY29kZV9nVHh0KCR3aGF0LCAkYXR0cyA9IGFycmF5KCkpIHsN CgkkbGFuZyA9IGFycmF5KA0KCQknc21kX3FyX2NvZGVfYXR0cmlidXRlX21pc21hdGNoJyA9 PiAiTnVtYmVyIG9mIHBhcmFtZXRlcnMgZG9uJ3QgbWF0Y2ggaW4gJ3t0eXBlfScgUVIgY29k ZTogZ2l2ZW4ge2NvdW50fSwgZXhwZWN0aW5nIHtleHBlY3RlZH0gKEZpZWxkczoge2ZpZWxk c30pIiwNCgkJJ3NtZF9xcl9jb2RlX2ludmFsaWRfYXR0cmlidXRlJyA9PiAiSW52YWxpZCBh dHRyaWJ1dGUgJ3thdHRyaWJ9JyBzdXBwbGllZCBpbiAne3RhZ30nIFFSIGNvZGUuIENoZWNr IHRoZSBmb3JtYXQgYW5kIG9yZGVyIG9mIGRhdGEgaXRlbXMiLA0KCQknc21kX3FyX2NvZGVf aW52YWxpZF9sYXlvdXQnID0+ICJJbnZhbGlkIFFSIGNvZGUgbGF5b3V0ICd7dHlwZX0nIiwN CgkJJ3NtZF9xcl9jb2RlX2ludmFsaWRfdHJhbnNmb3JtJyA9PiAiSW52YWxpZCBvciB1bnJl Z2lzdGVyZWQgdHJhbnNmb3JtIGZ1bmN0aW9uICd7Zm59JyAtLSBpZ25vcmluZyIsDQoJCSdz bWRfcXJfY29kZV9pbnZhbGlkX3R5cGUnID0+ICJJbnZhbGlkIFFSIGNvZGUgdHlwZSAne3R5 cGV9JyIsDQoJCSdzbWRfcXJfY29kZV9ub19yZWdleCcgPT4gIk5vIHJlZ2V4IGZvdW5kIGZv ciAne2F0dHJpYn0nIGluICd7dGFnfScgUVIgY29kZSAtLSBpZ25vcmluZyIsDQoJCSdzbWRf cXJfY29kZV90b29fbGFyZ2UnID0+ICJRUiBjb2RlIGRhdGEgcmVxdWVzdCB0b28gbGFyZ2Ui LA0KCSk7DQoJcmV0dXJuIHN0cnRyKCRsYW5nWyR3aGF0XSwgJGF0dHMpOw0KfQ0KDQovLy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KY2xhc3Mgc21kX3FyY29kZQ0Kew0KCXByaXZhdGUg JGFwaSA9ICdodHRwOi8vY2hhcnQuYXBpcy5nb29nbGUuY29tL2NoYXJ0JzsNCglwcml2YXRl ICRkYXRhOw0KCXByaXZhdGUgJGRpbWVuc2lvbnMgPSAnJzsNCglwcml2YXRlICRxdWFsaXR5 ID0gJyc7DQoJcHJpdmF0ZSAkY29sb3VyID0gJyc7DQoJcHJpdmF0ZSAkZXNjYXBlID0gJyc7 DQoNCgkvLyBDb25zdHJ1Y3Rvcg0KCXB1YmxpYyBmdW5jdGlvbiBzbWRfcXJjb2RlKCR3aWR0 aCwgJGhlaWdodCwgJHF1YWwsICRtYXJnaW4sICRiZ2NvbCwgJGFscGhhLCAkZXNjKSB7DQoJ CSR0aGlzLT5lc2NhcGUgPSAkZXNjOw0KDQoJCS8vIEJ1aWxkIEFQSSBzdHJpbmdzDQoJCSR3 ID0gKGlzX251bWVyaWMoJHdpZHRoKSkgPyAkd2lkdGggOiAyMDA7DQoJCSRoID0gKGlzX251 bWVyaWMoJGhlaWdodCkpID8gJGhlaWdodCA6IDIwMDsNCgkJJHRoaXMtPmRpbWVuc2lvbnMg PSAkdy4neCcuJGg7DQoNCgkJJGNvbG91cnMgPSBhcnJheSgpOw0KCQlpZiAoJGFscGhhKSAk Y29sb3Vyc1tdID0gJ2EscywwMDAwMDAnLnN1YnN0cigkYWxwaGEsIC0yKTsNCgkJaWYgKCRi Z2NvbCkgJGNvbG91cnNbXSA9ICdiZyxzLCcuJGJnY29sOw0KCQkkdGhpcy0+Y29sb3VyID0g KCRjb2xvdXJzKSA/IGpvaW4oJ3wnLCAkY29sb3VycykgOiAnJzsNCg0KCQkkcXVhbCA9IHN0 cnRvdXBwZXIoJHF1YWwpOw0KCQkkc3pvcHRzW10gPSAoJHF1YWwgJiYgaW5fYXJyYXkoJHF1 YWwsIGFycmF5KCdMJywgJ00nLCAnUScsICdIJykpKSA/ICRxdWFsIDogJ0wnOw0KCQlpZiAo aXNfbnVtZXJpYygkbWFyZ2luKSkgJHN6b3B0c1tdID0gJG1hcmdpbjsNCgkJJHRoaXMtPnF1 YWxpdHkgPSBqb2luKCd8JywgJHN6b3B0cyk7DQoJfQ0KDQoJLy8gQ3JlYXRlIHRoZSBkYXRh IG9iamVjdCBmcm9tIHRoZSBnaXZlbiBsYXlvdXQsIHBsdWdnaW5nIGluIHRoZSByZXBsYWNl bWVudCB2YXJpYWJsZXMgYW5kIGFwcGx5aW5nIGFueSB0cmFuc2Zvcm1hdGlvbnMNCglwdWJs aWMgZnVuY3Rpb24gZ2V0X2RhdGEoJGxheW91dCwgJGFyZ3MsICRkZWJ1Zz0wKSB7DQoJCS8v IENyZWF0ZSB0aGUgcmVwbGFjZW1lbnRzDQoJCSRyZXBzID0gYXJyYXkoKTsNCg0KCQlmb3Jl YWNoICgkYXJncyBhcyAkYXJnID0+ICR2YWwpIHsNCgkJCSRyZXBzWyd7Jy4kYXJnLid9J10g PSAkdmFsOw0KCQl9DQoNCgkJaWYgKCRkZWJ1Zykgew0KCQkJZWNobyAnKysgUkVQTEFDRU1F TlRTICsrJzsNCgkJCWRtcCgkcmVwcyk7DQoJCX0NCg0KCQkkdGhpcy0+ZGF0YSA9IHN0cnRy KCRsYXlvdXQsICRyZXBzKTsNCg0KCQkvLyBCYXJmIGlmIGFib3ZlIHJvdWdobHkgMktCICh0 aGUgbGltaXQgb2YgdGhlIENoYXJ0cyBBUEkncyBHRVQgcmVxdWVzdCkNCgkJaWYgKHN0cmxl bigkdGhpcy0+ZGF0YSkgPiAyMDAwKSB7DQoJCQl0cmlnZ2VyX2Vycm9yKHNtZF9xcl9jb2Rl X2dUeHQoJ3NtZF9xcl9jb2RlX3Rvb19sYXJnZScpLCBFX1VTRVJfTk9USUNFKTsNCgkJfQ0K CX0NCg0KCXByaXZhdGUgZnVuY3Rpb24gZ2V0X3VybF9wYXJhbXMoKSB7DQoJCSRwYXJhbXMg PSBhcnJheSgNCgkJCSdjaHQnID0+ICdxcicsDQoJCQknY2hzJyA9PiAkdGhpcy0+ZGltZW5z aW9ucywNCgkJCSdjaGxkJyA9PiAkdGhpcy0+cXVhbGl0eSwNCgkJCSdjaGwnID0+ICgoJHRo aXMtPmVzY2FwZSA9PSAnaHRtbCcpID8gdXJsZW5jb2RlKCR0aGlzLT5kYXRhKSA6ICR0aGlz LT5kYXRhKSwNCgkJKTsNCg0KCQkvLyBDb2xvdXIgaXMgb3B0aW9uYWwNCgkJaWYgKCR0aGlz LT5jb2xvdXIpIHsNCgkJCSRwYXJhbXNbJ2NoZiddID0gJHRoaXMtPmNvbG91cjsNCgkJfQ0K DQoJCXJldHVybiBodHRwX2J1aWxkX3F1ZXJ5KCRwYXJhbXMsICcnLCAnJmFtcDsnKTsNCgl9 DQoNCgkvLyBnZXQgaW1hZ2UNCglwdWJsaWMgZnVuY3Rpb24gZ2V0X2ltYWdlKCl7DQoJCSRj aCA9IGN1cmxfaW5pdCgpOw0KCQljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVVJMLCAkdGhp cy0+YXBpKTsNCgkJY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1BPU1QsIHRydWUpOw0KCQlj dXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUE9TVEZJRUxEUywgJHRoaXMtPmdldF91cmxfcGFy YW1zKCkpOw0KCQljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIHRy dWUpOw0KCQljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfSEVBREVSLCBmYWxzZSk7DQoJCWN1 cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9USU1FT1VULCAzMCk7DQoNCgkJJHJlc3BvbnNlID0g Y3VybF9leGVjKCRjaCk7DQoJCWN1cmxfY2xvc2UoJGNoKTsNCgkJcmV0dXJuICRyZXNwb25z ZTsNCgl9DQoNCgkvLyBnZXQgbGluayBmb3IgaW1hZ2UNCglwdWJsaWMgZnVuY3Rpb24gZ2V0 X2xpbmsoJGZvbGxvdz1mYWxzZSl7DQoJCXJldHVybiAkdGhpcy0+YXBpLic/Jy4kdGhpcy0+ Z2V0X3VybF9wYXJhbXMoKTsNCgl9DQoNCgkvLyBmb3JjZSBpbWFnZSBkb3dubG9hZA0KCXB1 YmxpYyBmdW5jdGlvbiBkb3dubG9hZF9pbWFnZSgkZmlsZSl7DQoJCWhlYWRlcignQ29udGVu dC1EZXNjcmlwdGlvbjogRmlsZSBUcmFuc2ZlcicpOw0KCQloZWFkZXIoJ0NvbnRlbnQtVHlw ZTogaW1hZ2UvcG5nJyk7DQoJCWhlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNo bWVudDsgZmlsZW5hbWU9cXJfY29kZS5wbmcnKTsNCgkJaGVhZGVyKCdDb250ZW50LVRyYW5z ZmVyLUVuY29kaW5nOiBiaW5hcnknKTsNCgkJaGVhZGVyKCdFeHBpcmVzOiAwJyk7DQoJCWhl YWRlcignQ2FjaGUtQ29udHJvbDogbXVzdC1yZXZhbGlkYXRlLCBwb3N0LWNoZWNrPTAsIHBy ZS1jaGVjaz0wJyk7DQoJCWhlYWRlcignUHJhZ21hOiBwdWJsaWMnKTsNCgkJaGVhZGVyKCdD b250ZW50LUxlbmd0aDogJyAuIGZpbGVzaXplKCRmaWxlKSk7DQoJCW9iX2NsZWFuKCk7DQoJ CWZsdXNoKCk7DQoJCWVjaG8gJGZpbGU7DQoJfQ0KfQ0KDQovLyAqKioqKioqKioqKioqKioN Ci8vIFRyYW5zZm9ybWF0aW9ucw0KLy8gKioqKioqKioqKioqKioqDQovLy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQ0KY2xhc3Mgc21kX3FyX2NvZGVfdHJhbnNmb3Jtcw0Kew0KCXByaXZh dGUgJHhmb3JtcyA9IGFycmF5KA0KCQknbGlua2lmeScsDQoJCSdzcGxpdHJldmpvaW4nLA0K CSk7DQoNCgkvLyBDb25zdHJ1Y3RvciA6IHJlZ2lzdGVyIGNhbGxiYWNrcyBhbmQgYnVpbHQt aW4gdHJhbnNmb3Jtcw0KCXB1YmxpYyBmdW5jdGlvbiBzbWRfcXJfY29kZV90cmFuc2Zvcm1z KCkgew0KCQlnbG9iYWwgJHBsdWdpbl9jYWxsYmFjazsNCgkJZm9yZWFjaCAoJHBsdWdpbl9j YWxsYmFjayBhcyAkY2IpIHsNCgkJCWlmICgkY2JbJ2V2ZW50J10gPT0gJ3NtZF9xcl9jb2Rl JyAmJiAkY2JbJ3N0ZXAnXSA9PSAnYWRkX3RyYW5zZm9ybScpIHsNCgkJCQkkdGhpcy0+eGZv cm1zW10gPSAkY2JbJ2Z1bmN0aW9uJ107DQoJCQl9DQoJCX0NCgl9DQoNCgkvLyBSdW4gYSBy ZWdpc3RlcmVkIGN1c3RvbSBmdW5jdGlvbi4gTG9jYWwgZnVuY3Rpb25zIHRydW1wIGV4dGVy bmFscw0KCXB1YmxpYyBmdW5jdGlvbiBleGVjdXRlKCRmbiwgJGl0ZW0sICRhcmdzPWFycmF5 KCkpIHsNCgkJaWYgKGluX2FycmF5KCRmbiwgJHRoaXMtPnhmb3JtcykpIHsNCgkJCWlmICht ZXRob2RfZXhpc3RzKCR0aGlzLCAkZm4pKSB7DQoJCQkJcmV0dXJuICR0aGlzLT4kZm4oJGl0 ZW0sICRhcmdzKTsNCgkJCX0gZWxzZSBpZiAoaXNfY2FsbGFibGUoJGZuKSkgew0KCQkJCWlm IChlbXB0eSgkYXJncykpIHsNCgkJCQkJcmV0dXJuICRmbigkaXRlbSk7DQoJCQkJfSBlbHNl IHsNCgkJCQkJcmV0dXJuICRmbigkaXRlbSwgJGFyZ3MpOw0KCQkJCX0NCgkJCX0NCgkJfQ0K CQl0cmlnZ2VyX2Vycm9yKHNtZF9xcl9jb2RlX2dUeHQoJ3NtZF9xcl9jb2RlX2ludmFsaWRf dHJhbnNmb3JtJywgYXJyYXkoJ3tmbn0nID0+ICRmbikpLCBFX1VTRVJfV0FSTklORyk7DQoJ CXJldHVybiAkaXRlbTsNCgl9DQoNCgkvLyBQcmVmaXggbGlua3MNCglwdWJsaWMgZnVuY3Rp b24gbGlua2lmeSgkaXRlbSwgJGFyZ3M9YXJyYXkoKSkgew0KCQkkb3V0dmFyID0gKGlzc2V0 KCRhcmdzWzBdKSkgPyAkYXJnc1swXSA6ICd1cmwnOw0KDQoJCWlmIChwcmVnX21hdGNoKCcv Xmh0dHA6XC9cLy8nLCAkaXRlbSkgfHwgcHJlZ19tYXRjaCgnL15odHRwczpcL1wvLycsICRp dGVtKSkgew0KCQkJJG91dHZhbCA9ICRpdGVtOw0KCQl9IGVsc2Ugew0KCQkJJG91dHZhbCA9 ICJodHRwOi8vIi4kaXRlbTsNCgkJfQ0KCQlyZXR1cm4gYXJyYXkoJG91dHZhciA9PiAkb3V0 dmFsKTsNCgl9DQoNCgkvLyBTcGxpdCBhIHZhcmlhYmxlLCByZXZlcnNlIHRoZSBlbGVtZW50 cyBhbmQgam9pbiB0aGVtIGFnYWluDQoJcHVibGljIGZ1bmN0aW9uIHNwbGl0cmV2am9pbigk aXRlbSwgJGFyZ3M9YXJyYXkoKSkgew0KCQkvLyAkYXJnczogMCA9IHZhcmlhYmxlIG5hbWUs IDEgPSBzcGxpdCBjaGFyLCAyID0gam9pbiBjaGFyDQoJCWlmIChjb3VudCgkYXJncykgPT0g Mykgew0KCQkJJG91dHZhbCA9IGpvaW4oJGFyZ3NbMl0sIGFycmF5X3JldmVyc2UoZXhwbG9k ZSgkYXJnc1sxXSwgJGl0ZW0pKSk7DQoJCQlyZXR1cm4gYXJyYXkoJGFyZ3NbMF0gPT4gJG91 dHZhbCk7DQoJCX0gZWxzZSB7DQoJCQlyZXR1cm4gJGl0ZW07DQoJCX0NCgl9DQp9IjtzOjQ6 InR5cGUiO3M6MToiMCI7czo1OiJvcmRlciI7czoxOiI1IjtzOjU6ImZsYWdzIjtzOjE6IjAi O3M6NDoiaGVscCI7czoyNjAzNjoiPGRpdiBpZD0ic21kX2hlbHAiPgoKCTxoMT5zbWRfcXJf Y29kZTwvaDE+CgoJPHA+Q3JlYXRlIFF1aWNrIFJlc3BvbnNlIDItRCBiYXJjb2RlcyBvbiB0 aGUgZmx5IGNvbnRhaW5pbmcgYSB2YXJpZXR5IG9mIGRhdGE6IHRleHQsIDxzcGFuIGNsYXNz PSJjYXBzIj5VUkw8L3NwYW4+IGxpbmtzLCBjb250YWN0IGRldGFpbHMsIGdlb2dyYXBoaWNh bCBsb2NhdGlvbiBkYXRhLCB3aWZpIGhvdHNwb3QgcmVxdWVzdHMsIG9yIHlvdXIgb3duIGN1 c3RvbSBmb3JtYXRzLiBDaG9vc2UgdG8gZW1iZWQgdGhlIGJhcmNvZGUgZGlyZWN0bHkgb24g eW91ciBwYWdlIG9yIG9mZmVyIGl0IGFzIGEgZG93bmxvYWQuPC9wPgoKCTxoMj5BdXRob3Ig LyBjcmVkaXRzPC9oMj4KCgk8cD5Xcml0dGVuIGJ5IDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3 c29uLmNvbS9jb250YWN0Ij5TdGVmIERhd3NvbjwvYT4uIENyZWRpdHMgYWxzbyBnbyB0byB0 aGUgYXdlc29tZSBHb29nbGUgQ2hhcnRzIDxzcGFuIGNsYXNzPSJjYXBzIj5BUEk8L3NwYW4+ LiBNYW55IHRoYW5rcyB0byBhbGwgaW52b2x2ZWQuPC9wPgoKCTxoMj5JbnN0YWxsYXRpb24g LyB1bmluc3RhbGxhdGlvbjwvaDI+CgoJPHAgY2xhc3M9ImltcG9ydGFudCI+UmVxdWlyZXMg PHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gNC40LjArLCA8c3BhbiBjbGFzcz0iY2Fw cyI+UEhQPC9zcGFuPiA1ICh3aXRoIDxzcGFuIGNsYXNzPSJjYXBzIj5DVVJMPC9zcGFuPikg YW5kIEludGVybmV0IGFjY2VzczwvcD4KCgk8cD5Eb3dubG9hZCB0aGUgcGx1Z2luIGZyb20g ZWl0aGVyIDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5vcmcvcGx1Z2lucy8xMjE5L3Nt ZF9xcl9jb2RlIj50ZXh0cGF0dGVybi5vcmc8L2E+LCBvciB0aGUgPGEgaHJlZj0iaHR0cDov L3N0ZWZkYXdzb24uY29tL3N3Ij5zb2Z0d2FyZSBwYWdlPC9hPiwgcGFzdGUgdGhlIGNvZGUg aW50byB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gPGVtPkFkbWluIC0mZ3Q7 IFBsdWdpbnM8L2VtPiBwYW5lLCBpbnN0YWxsIGFuZCBlbmFibGUgdGhlIHBsdWdpbi4gVG8g dW5pbnN0YWxsLCBkZWxldGUgZnJvbSB0aGUgPGVtPkFkbWluIC0mZ3Q7IFBsdWdpbnM8L2Vt PiBwYWdlLjwvcD4KCgk8cD5WaXNpdCB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRleHRw YXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP2lkPTM1ODg2Ij5mb3J1bSB0aHJlYWQ8L2E+IGZv ciBtb3JlIGluZm8gb3IgdG8gcmVwb3J0IG9uIHRoZSBzdWNjZXNzIG9yIG90aGVyd2lzZSBv ZiB0aGUgcGx1Z2luLjwvcD4KCgk8aDI+VXNhZ2U6IDxjb2RlPiZsdDt0eHA6c21kX3FyX2Nv ZGUgLyZndDs8L2NvZGU+PC9oMj4KCgk8cD5UaGUgcGx1Z2luIGFkZHMgb25lIHRhZywgd2hp Y2ggeW91IGNhbiB1c2UgdG8gZW1iZWQgYSBRUiBjb2RlIG9uIHlvdXIgcGFnZS4gSXQgaGFz IGEgdmFyaWV0eSBvZiBhdHRyaWJ1dGVzLjwvcD4KCgk8aDM+RGF0YSBhdHRyaWJ1dGVzPC9o Mz4KCgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj50eXBlPC9zcGFuPiA6IHRoZSB0 eXBlIG9mIFFSIGNvZGUgdG8gZ2VuZXJhdGUuIERlZmluZSB5b3VyIG93biwgb3IgdXNlIG9u ZSBvZiB0aGUgYnVpbHQtaW4gZm9ybWF0czoKCTx1bD4KCQk8bGk+PHN0cm9uZz50ZXh0PC9z dHJvbmc+IDogdGhlIGRlZmF1bHQ8L2xpPgoJCTxsaT48c3Ryb25nPmxpbms8L3N0cm9uZz4g OiBhIGh5cGVybGluay4gVGhlIDxjb2RlPmh0dHBbc106Ly88L2NvZGU+IHByZWZpeCBpcyBv cHRpb25hbCBhbmQgd2lsbCBiZSBhZGRlZCBpZiBvbWl0dGVkPC9saT4KCQk8bGk+PHN0cm9u Zz5ib29rbWFyazwvc3Ryb25nPjwvbGk+CgkJPGxpPjxzdHJvbmc+c21zPC9zdHJvbmc+IDog c2VuZCBhIHRleHQgbWVzc2FnZTwvbGk+CgkJPGxpPjxzdHJvbmc+cGhvbmU8L3N0cm9uZz48 L2xpPgoJCTxsaT48c3Ryb25nPmVtYWlsPC9zdHJvbmc+PC9saT4KCQk8bGk+PHN0cm9uZz5j b250YWN0PC9zdHJvbmc+IDogYSA8c3BhbiBjbGFzcz0iY2FwcyI+TUVDQVJEPC9zcGFuPjwv bGk+CgkJPGxpPjxzdHJvbmc+dmNhcmQ8L3N0cm9uZz4gOiBhIGNvbXBhY3QgdmVyc2lvbiBv ZiB0aGUgZnVsbCB2Y2FyZCBzcGVjPC9saT4KCQk8bGk+PHN0cm9uZz5nZW88L3N0cm9uZz4g OiBnZW9ncmFwaGljYWwgbG9jYXRpb24gKGRlY2ltYWwgbGF0aXR1ZGUsIGxvbmdpdHVkZSBh bmQgaGVpZ2h0IGFib3ZlIHRoZSBlYXJ0aCYjODIxNztzIHN1cmZhY2UpPC9saT4KCQk8bGk+ PHN0cm9uZz53aWZpPC9zdHJvbmc+IDogd2lmaSBob3RzcG90IGxvZ2luIGNyZWRlbnRpYWxz ICg8c3BhbiBjbGFzcz0iY2FwcyI+V0VQPC9zcGFuPiBvciA8c3BhbiBjbGFzcz0iY2FwcyI+ V1BBPC9zcGFuPiBwcm90b2NvbHMgc3VwcG9ydGVkKTwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxp PjxzcGFuIGNsYXNzPSJhdG5tIj5kYXRhPC9zcGFuPiA6IHRoZSBpbmZvcm1hdGlvbiB0byBw dXQgaW4gdGhlIFFSIGNvZGUuIFRoZSBkYXRhIGlzIGRlcGVuZGVudCBvbiB0aGUgPGNvZGU+ dHlwZTwvY29kZT4gJiM4MjEyOyBzZWUgPGEgaHJlZj0iI3NtZF9xcl9jb2RlX2RhdGFfdGFi bGUiPnRoZSBkYXRhIHRhYmxlPC9hPiBmb3IgZGV0YWlscyBvbiB0aGUgcXVhbnRpdHkgYW5k IG9yZGVyIG9mIGluZm9ybWF0aW9uIHlvdSBwdXQgaW4gdGhpcyBhdHRyaWJ1dGUgZm9yIHRo ZSBidWlsdC1pbiB0eXBlcy4gRGVsaW1pdCBlYWNoIHBpZWNlIG9mIGRhdGEgd2l0aCBhIHBp cGUgY2hhcmFjdGVyICh0aG91Z2ggdGhpcyBjYW4gYmUgY2hhbmdlZCB3aXRoIHRoZSA8Y29k ZT5kZWxpbTwvY29kZT4gYXR0cmlidXRlLCBpZiByZXF1aXJlZCkuIEZvciBleGFtcGxlLCA8 Y29kZT50eXBlPSZxdW90O2Jvb2ttYXJrJnF1b3Q7IGRhdGE9JnF1b3Q7MjAsMDAwIExlYWd1 ZXMgdW5kZXIgdGhlIFNlYXx3d3cuanVsZXMtdmVybmUuY28udWsvJnF1b3Q7PC9jb2RlPi4g VGhlIGxpbWl0IG9mIHRoZSBkYXRhIGF0dHJpYnV0ZSBpcyBhYm91dCAyS0I8L2xpPgoJCTxs aT48c3BhbiBjbGFzcz0iYXRubSI+ZGVsaW08L3NwYW4+IDogdGhlIGRlbGltaXRlciB0byB1 c2UgYmV0d2VlbiA8Y29kZT5kYXRhPC9jb2RlPiBpdGVtcy4gRGVmYXVsdDogPGNvZGU+fDwv Y29kZT4gKHBpcGUpPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmVzY2FwZTwvc3Bh bj4gOiBFc2NhcGUgPHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IGVudGl0aWVzIHN1 Y2ggYXMgPGNvZGU+Jmx0OzwvY29kZT4sIDxjb2RlPiZndDs8L2NvZGU+IGFuZCA8Y29kZT4m YW1wOzwvY29kZT4uIFVzZSA8Y29kZT5lc2NhcGU9JnF1b3Q7aHRtbCZxdW90OzwvY29kZT4g dG8gc3dpdGNoIHRoaXMgb24uIERlZmF1bHQ6IHVuc2V0PC9saT4KCTwvdWw+CgoJPGgzPk91 dHB1dCAvIGRpc3BsYXkgYXR0cmlidXRlczwvaDM+CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFz cz0iYXRubSI+Zm9ybWF0PC9zcGFuPiA6IHdoZXRoZXIgeW91IHdpc2ggdG8gPGNvZGU+dmll dzwvY29kZT4gdGhlIGJhcmNvZGUgaW5saW5lIChpbnNpZGUgYW4gPGNvZGU+Jmx0O2ltZyZn dDs8L2NvZGU+IHRhZyksIGZvcmNlIGl0IHRvIDxjb2RlPmRvd25sb2FkPC9jb2RlPiwgb3Ig b3V0cHV0IHRoZSA8Y29kZT5yYXc8L2NvZGU+IGxpbmsgc28geW91IGNhbiBjcmFmdCB5b3Vy IG93biB1c2UgZm9yIGl0LiBEZWZhdWx0OiA8Y29kZT52aWV3PC9jb2RlPjwvbGk+CgkJPGxp PjxzcGFuIGNsYXNzPSJhdG5tIj53aWR0aDwvc3Bhbj4gOiB3aWR0aCBvZiB0aGUgY29kZSwg aW4gcGl4ZWxzLiBEZWZhdXQ6IDIwMDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5o ZWlnaHQ8L3NwYW4+IDogaGVpZ2h0IG9mIHRoZSBjb2RlLCBpbiBwaXhlbHMuIERlZmF1bHQ6 IDIwMDwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5xdWFsaXR5PC9zcGFuPiA6IHRo ZSBhbW91bnQgb2YgZXJyb3IgY29ycmVjdGlvbiB0aGF0IHRoZSBiYXJjb2RlIGNhbiB0b2xl cmF0ZToKCTx1bD4KCQk8bGk+PHN0cm9uZz5MPC9zdHJvbmc+ICYjODIxMjsgTG93OiA3JSAo ZGVmYXVsdCk8L2xpPgoJCTxsaT48c3Ryb25nPk08L3N0cm9uZz4gJiM4MjEyOyBNZWRpdW06 IDE1JTwvbGk+CgkJPGxpPjxzdHJvbmc+UTwvc3Ryb25nPiAmIzgyMTI7IFF1YXJ0aWxlOiAy NSU8L2xpPgoJCTxsaT48c3Ryb25nPkg8L3N0cm9uZz4gJiM4MjEyOyBIaWdoOiAzMCU8L2xp PgoJPC91bD48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+bWFyZ2luPC9zcGFuPiA6 IHRoZSBtYXJnaW4gKGluIFFSIGNvZGUgJiM4MjIwO3Jvd3MmIzgyMjE7KSBhcm91bmQgdGhl IGltYWdlLiBEZWZhdWx0OiA0LiBOb3RlIHRoYXQsIGRlcGVuZGluZyBvbiB0aGUgcXVhbGl0 eSBhbmQgc2l6ZSBzZXR0aW5ncywgc29tZSBhZGphY2VudCB2YWx1ZXMgZG9uJiM4MjE3O3Qg YXBwZWFyIHRvICYjODIxNjtkbyYjODIxNzsgYW55dGhpbmcuIEZvciBleGFtcGxlLCBhIDIw MCYjMjE1OzIwMCAmIzgyMTY7TCYjODIxNzsgcXVhbGl0eSBpbWFnZSBsb29rcyB0aGUgc2Ft ZSB3aGV0aGVyIHlvdSBwaWNrIGEgbWFyZ2luIG9mIDAsIDEgb3IgMi4gVGhlIG1hcmdpbiBz dGVwcyB1cCBhIHNpemUgZm9yIDMsIDQgYW5kIDUsIHRoZW4gdXAgYWdhaW4gZm9yIDYtMTAs IGFuZCBzbyBvbi4gVGhpcyBpcyBhbiBpZGlvc3luY3JhY3kgb2YgR29vZ2xlJiM4MjE3O3Mg Q2hhcnRzIDxzcGFuIGNsYXNzPSJjYXBzIj5BUEk8L3NwYW4+IChvciB0aGUgUVIgY29kZSBz cGVjPyksIG5vdCBhIGZhdWx0IHdpdGggdGhlIHBsdWdpbjwvbGk+CgkJPGxpPjxzcGFuIGNs YXNzPSJhdG5tIj5iZ2NvbDwvc3Bhbj4gOiBiYWNrZ3JvdW5kIGNvbG91ciBhcyBhbiA8c3Bh biBjbGFzcz0iY2FwcyI+UkdCPC9zcGFuPiBoZXggY29kZSAod2l0aG91dCB0aGUgIykuIERl ZmF1bHQ6IHVuc2V0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmFscGhhPC9zcGFu PiA6IGFscGhhIHRyYW5zcGFyZW5jeSBhcyBhIGhleCB2YWx1ZSBmcm9tIDAwICh0cmFuc3Bh cmVudCkgdG8gRkYgKHNvbGlkKS4gRGVmYXVsdDogdW5zZXQ8L2xpPgoJCTxsaT48c3BhbiBj bGFzcz0iYXRubSI+d3JhcHRhZzwvc3Bhbj4gOiB0aGUgKFgpSFRNTCB0YWcgJiM4MjEyOyBz cGVjaWZpZWQgd2l0aG91dCBhbmdsZSBicmFja2V0cyAmIzgyMTI7IHRvIHdyYXAgYXJvdW5k IHRoZSBvdXRwdXQuIERlZmF1bHQ6IHVuc2V0PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0 bm0iPmNsYXNzPC9zcGFuPiA6IHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiBj bGFzc25hbWUgdG8gYXBwbHkgdG8gdGhlIHdyYXB0YWcgKGlmIHByZXNlbnQpIG9yIHRoZSA8 Y29kZT4mbHQ7aW1nJmd0OzwvY29kZT4gdGFnIGlmIHlvdSBoYXZlIGNob3NlbiA8Y29kZT5m b3JtYXQ9JnF1b3Q7dmlldyZxdW90OzwvY29kZT4uIERlZmF1bHQ6IHVuc2V0PC9saT4KCQk8 bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmh0bWxfaWQ8L3NwYW4+IDogdGhlIDxzcGFuIGNsYXNz PSJjYXBzIj5IVE1MPC9zcGFuPiBpZCB0byBhcHBseSB0byB0aGUgd3JhcHRhZyAoaWYgcHJl c2VudCkgb3IgdGhlIDxjb2RlPiZsdDtpbWcmZ3Q7PC9jb2RlPiB0YWcgaWYgeW91IGhhdmUg Y2hvc2VuIDxjb2RlPmZvcm1hdD0mcXVvdDt2aWV3JnF1b3Q7PC9jb2RlPi4gRGVmYXVsdDog dW5zZXQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+dGl0bGU8L3NwYW4+IDogU2V0 IHRoZSA8Y29kZT4mbHQ7aW1nJmd0OzwvY29kZT4gdGFnJiM4MjE3O3MgdGl0bGUgYXR0cmli dXRlIChvZnRlbiB1c2VkIGFzIGEgdG9vbHRpcCkuIE9ubHkgb2YgdXNlIHdoZW4gPGNvZGU+ Zm9ybWF0PSZxdW90O3ZpZXcmcXVvdDs8L2NvZGU+LiBEZWZhdWx0OiB1bnNldDwvbGk+Cgk8 L3VsPgoKCTxoMz5WYWxpZGF0aW9uIGF0dHJpYnV0ZXM8L2gzPgoKCTx1bD4KCQk8bGk+PHNw YW4gY2xhc3M9ImF0bm0iPnZhbGlkYXRlPC9zcGFuPiA6IHdoZXRoZXIgdG8gdmFsaWRhdGUg YWxsIGZpZWxkcyAoMSwgdGhlIGRlZmF1bHQpLCBubyBmaWVsZHMgKDApIG9yIHRoZSBnaXZl biBsaXN0IG9mIGRhdGEgZmllbGRzLiBUaGUgbGlzdCBpcyBkZWxpbWl0ZWQgYnkgPGNvZGU+ dmFsaWRlbGltPC9jb2RlPiAoZGVmYXVsdDogY29tbWEpLiBDb25zdWx0IHRoZSA8YSBocmVm PSIjc21kX3FyX2NvZGVfZGF0YV90YWJsZSI+ZGF0YSB0YWJsZTwvYT4gZm9yIGRldGFpbHMg b24gdGhlIG5hbWVzIG9mIHRoZSBmaWVsZHMgeW91IGNhbiB1c2UuIEFmdGVyIGVhY2ggZmll bGQgeW91IG1heSBhbHNvIGFkZCBhIDxjb2RlPmRlbGltPC9jb2RlPiBjaGFyYWN0ZXIgYW5k IHRoZW4gYSByZWd1bGFyIGV4cHJlc3Npb24gdG8gdmFsaWRhdGUgdGhpcyBmaWVsZCBhZ2Fp bnN0LCB3aGljaCB3aWxsIG92ZXJyaWRlIHRoZSBidWlsdC1pbiByZWdleC4gU2VlICYjODIy MDtleGFtcGxlIDUmIzgyMjE7OiNlZzUuPGRpdiBjbGFzcz0iYnJlYWsiPklmIHlvdSBzcGVj aWZ5IG9uZSBvciB0d28gZmllbGRzIHRvIHZhbGlkYXRlICYjODIxMjsgcGVyaGFwcyB5b3Ug anVzdCB3YW50IHRvIGFkanVzdCBhIHNpbmdsZSByZWdleCB0byB0YXN0ZSAmIzgyMTI7IHlv dSYjODIxNztsbCBmaW5kIHRoYXQgdGhlIHJlbWFpbmluZyBmaWVsZHMgYXJlICYjODIyMDtz d2l0Y2hlZCBvZmYmIzgyMjE7IGFuZCBub3QgdmFsaWRhdGVkLiBUbyBzYXZlIHlvdSBoYXZp bmcgdG8gbGlzdCB0aGVtIGFsbCwgeW91IGNhbiB1c2UgYSBzaG9ydGN1dDoganVzdCBzcGVj aWZ5IDxjb2RlPjE8L2NvZGU+IGFzIG9uZSBvZiB5b3VyIGxpc3QgaXRlbXMgYW5kIHRoZSBy ZW1haW5pbmcgZmllbGRzIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIHZhbGlkYXRpb24gd2l0 aCB0aGVpciBvcmlnaW5hbCByZWdleGVzLjwvZGl2PjxkaXYgY2xhc3M9ImJyZWFrIj5Zb3Ug bWF5IGFsc28gY29weSByZWdleGVzIGlmIHlvdSBkb24mIzgyMTc7dCB3aXNoIHRvIGRlZmlu ZSB0aGVtIGFnYWluLiBTcGVjaWZ5IHRoZSBmaWVsZCBhcyB1c3VhbCBhbmQgdGhlbiB0aGUg c3BlY2lhbCBjb2RlIDxzcGFuIGNsYXNzPSJjYXBzIj5TTUQ8L3NwYW4+X1JFR0VYX25hbWVf b2ZfZmllbGRfdG9fY29weS48L2Rpdj48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ dmFsaWRlbGltPC9zcGFuPiA6IHRoZSBkZWxpbWl0ZXIgdG8gdXNlIGJldHdlZW4geW91ciBs aXN0IG9mIGl0ZW1zIHRvIDxjb2RlPnZhbGlkYXRlPC9jb2RlPi4gRGVmYXVsdDogPGNvZGU+ LDwvY29kZT4gKGNvbW1hKTwvbGk+Cgk8L3VsPgoKCTxoMz5DdXN0b21pc2F0aW9uIGF0dHJp YnV0ZXM8L2gzPgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmxheW91dDwvc3Bh bj4gOiBkZWZpbmUgeW91ciBvd24gY3VzdG9tIGxheW91dCBzeXN0ZW0uIFVzZSA8Y29kZT57 bmFtZS1vZi12YXJpYWJsZX08L2NvZGU+IGluIHlvdXIgZGVmaW5pdGlvbiB0byBoYXZlIHRo ZSBkYXRhIHZhbHVlIGluamVjdGVkIGF0IHJ1bnRpbWUuIFNlZSA8YSBocmVmPSIjc21kX3Fy X2NvZGVfY3VzdG9tX3R5cGVzIj5jdXN0b20gdHlwZXM8L2E+PC9saT4KCQk8bGk+PHNwYW4g Y2xhc3M9ImF0bm0iPnRyYW5zZm9ybTwvc3Bhbj4gOiBkZWZpbmUgeW91ciBvd24gY3VzdG9t IHRyYW5zZm9ybWF0aW9uIHRvIGFwcGx5IHRvIHBhcnRpY3VsYXIgZGF0YSBpdGVtcy4gU3Bl Y2lmeSA8Y29kZT50eXBlLmZpZWxkfG5hbWUtb2YtZnVuY3Rpb258b3B0aW9uYWx8YXJnc3wu Li48L2NvZGU+LiBTZWUgPGEgaHJlZj0iI3NtZF9xcl9jb2RlX2N1c3RvbV90cmFuc2Zvcm1z Ij5jdXN0b20gdHJhbnNmb3JtczwvYT48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ cHJlZml4PC9zcGFuPiA6IHByZWZpeCBmb3IgbmV3IHBhcmFtZXRlcnMgdGhhdCBhcmUgY3Jl YXRlZCBieSB5b3VyIHRyYW5zZm9ybWF0aW9ucy4gRGVmYXVsdDogPGNvZGU+U01EX1FSXzwv Y29kZT48L2xpPgoJPC91bD4KCgk8cD5UaGUgcGx1Z2luIGNoZWNrcyB0aGF0IHlvdSBzdXBw bHkgYWxsIGluZm9ybWF0aW9uIGZvciB5b3VyIGNob3NlbiB0eXBlIGFuZCwgaWYgPGNvZGU+ dmFsaWRhdGU8L2NvZGU+IGlzIHNldCB2YWxpZGF0ZXMgZWFjaCBmaWVsZCB3aXRoIGEgcmVn dWxhciBleHByZXNzaW9uLiBBbnkgZGV2aWF0aW9uIHdpbGwgcmVzdWx0IGluIGFuIGVycm9y IGJlaW5nIHRyaWdnZXJlZC48L3A+CgoJPHA+Tm90ZSB0aGF0IGlmIHlvdSB3aXNoIHRvIGRl c2lnbmF0ZSBhbiBpdGVtIGFzICYjODIxNjtlbXB0eSYjODIxNzsgKGkuZS4geW91IGRvbiYj ODIxNzt0IHdhbnQgdG8gc3VwcGx5IHRoYXQgcGFyYW1ldGVyKSB5b3UgY2FuIHB1dCBpbiB0 aGUgc3BlY2lhbCBjb2RlIDxjb2RlPntzbWRfZW1wdHl9PC9jb2RlPi4gSXQgaXMgbm90IGVu b3VnaCB0byBzaW1wbHkgbGVhdmUgaXQgYmxhbmsgYmVjYXVzZSB0aGUgcGx1Z2luIGV4cGVj dHMgYWxsIGZpZWxkcyB0byBiZSBmaWxsZWQgaW4gd2l0aCA8ZW0+c29tZXRoaW5nPC9lbT4u IFRoZSBRUiBjb2RlIHdpbGwgc3RpbGwgY29udGFpbiB0aGUgZmllbGQsIGl0IHdpbGwganVz dCBoYXZlIG5vIGRhdGEgYXNzaWduZWQgdG8gaXQuIElmIHlvdSBkb24mIzgyMTc7dCBsaWtl IHRoZSBidWlsdC1pbiBmb3JtYXRzLCA8YSBocmVmPSIjc21kX3FyX2NvZGVfY3VzdG9tX3R5 cGVzIj5jcmVhdGUgeW91ciBvd248L2E+LjwvcD4KCgk8cD5UaGUgY29kZSBzaG91bGQgYmUg Y2FjaGVkIGJ5IHlvdXIgYnJvd3NlciBmb3IgMjQgaG91cnMuPC9wPgoKCTxoMiBpZD0ic21k X3FyX2NvZGVfZGF0YV90YWJsZSI+RGF0YSB0YWJsZSBmb3IgZGVmYXVsdCB0eXBlczwvaDI+ CgoJPHA+SGVyZSBhcmUgYWxsIHRoZSA8Y29kZT50eXBlPC9jb2RlPnMgYXZhaWxhYmxlIGFu ZCB0aGUgZmllbGRzIHRoZXkgcmVxdWlyZSBpbiB0aGUgPGNvZGU+ZGF0YTwvY29kZT4gYXR0 cmlidXRlLCBmcm9tIGxlZnQgdG8gcmlnaHQuIFRoZSBuYW1lcyB1c2VkIGhlcmUgYXJlIHRo ZSBuYW1lcyB5b3UgcmVmZXIgdG8gdGhlIGZpZWxkcyB3aGVuIGxpc3RpbmcgdGhlbSBpbiB5 b3VyIDxjb2RlPnZhbGlkYXRlPC9jb2RlPiBhdHRyaWJ1dGUuPC9wPgoKCTx0YWJsZT4KCTx0 aGVhZD4KCQk8dHI+CgkJCTx0aD50eXBlIDwvdGg+CgkJCTx0aCBjb2xzcGFuPSI1Ij5kYXRh IGF0dHJpYnV0ZXMgPC90aD4KCQk8L3RyPgoJPC90aGVhZD4KCTx0Ym9keT4KCQk8dHI+CgkJ CTx0ZD4gPHN0cm9uZz50ZXh0PC9zdHJvbmc+IDwvdGQ+CgkJCTx0ZD4gdGV4dCA8L3RkPgoJ CQk8dGQ+IDwvdGQ+CgkJCTx0ZD4gPC90ZD4KCQkJPHRkPiA8L3RkPgoJCQk8dGQ+IDwvdGQ+ CgkJPC90cj4KCQk8dHI+CgkJCTx0ZD4gPHN0cm9uZz5saW5rPC9zdHJvbmc+IDwvdGQ+CgkJ CTx0ZD4gdXJsIDwvdGQ+CgkJCTx0ZD4gPC90ZD4KCQkJPHRkPiA8L3RkPgoJCQk8dGQ+IDwv dGQ+CgkJCTx0ZD4gPC90ZD4KCQk8L3RyPgoJCTx0cj4KCQkJPHRkPiA8c3Ryb25nPmJvb2tt YXJrPC9zdHJvbmc+IDwvdGQ+CgkJCTx0ZD4gdGl0bGUgPC90ZD4KCQkJPHRkPiB1cmwgPC90 ZD4KCQkJPHRkPiA8L3RkPgoJCQk8dGQ+IDwvdGQ+CgkJCTx0ZD4gPC90ZD4KCQk8L3RyPgoJ CTx0cj4KCQkJPHRkPiA8c3Ryb25nPnNtczwvc3Ryb25nPiA8L3RkPgoJCQk8dGQ+IHBob25l IDwvdGQ+CgkJCTx0ZD4gdGV4dCA8L3RkPgoJCQk8dGQ+IDwvdGQ+CgkJCTx0ZD4gPC90ZD4K CQkJPHRkPiA8L3RkPgoJCTwvdHI+CgkJPHRyPgoJCQk8dGQ+IDxzdHJvbmc+cGhvbmU8L3N0 cm9uZz4gPC90ZD4KCQkJPHRkPiBwaG9uZSA8L3RkPgoJCQk8dGQ+IDwvdGQ+CgkJCTx0ZD4g PC90ZD4KCQkJPHRkPiA8L3RkPgoJCQk8dGQ+IDwvdGQ+CgkJPC90cj4KCQk8dHI+CgkJCTx0 ZD4gPHN0cm9uZz5lbWFpbDwvc3Ryb25nPiA8L3RkPgoJCQk8dGQ+IGVtYWlsIDwvdGQ+CgkJ CTx0ZD4gc3ViamVjdCA8L3RkPgoJCQk8dGQ+IG1lc3NhZ2UgPC90ZD4KCQkJPHRkPiA8L3Rk PgoJCQk8dGQ+IDwvdGQ+CgkJPC90cj4KCQk8dHI+CgkJCTx0ZD4gPHN0cm9uZz5jb250YWN0 PC9zdHJvbmc+IDwvdGQ+CgkJCTx0ZD4gbmFtZSA8L3RkPgoJCQk8dGQ+IGFkZHJlc3MgPC90 ZD4KCQkJPHRkPiBwaG9uZSA8L3RkPgoJCQk8dGQ+IGVtYWlsIDwvdGQ+CgkJCTx0ZD4gPC90 ZD4KCQk8L3RyPgoJCTx0cj4KCQkJPHRkPiA8c3Ryb25nPnZjYXJkPC9zdHJvbmc+IDwvdGQ+ CgkJCTx0ZD4gbmFtZSA8L3RkPgoJCQk8dGQ+IGVtYWlsIDwvdGQ+CgkJCTx0ZD4gdXJsIDwv dGQ+CgkJCTx0ZD4gYWRkcmVzcyA8L3RkPgoJCQk8dGQ+IHBob25lIDwvdGQ+CgkJPC90cj4K CQk8dHI+CgkJCTx0ZD4gPHN0cm9uZz5nZW88L3N0cm9uZz4gPC90ZD4KCQkJPHRkPiBsYXQg PC90ZD4KCQkJPHRkPiBsb24gPC90ZD4KCQkJPHRkPiBoZWlnaHQgPC90ZD4KCQkJPHRkPiA8 L3RkPgoJCQk8dGQ+IDwvdGQ+CgkJPC90cj4KCQk8dHI+CgkJCTx0ZD4gPHN0cm9uZz53aWZp PC9zdHJvbmc+IDwvdGQ+CgkJCTx0ZD4gd2lmaV9wcm90b2NvbCA8L3RkPgoJCQk8dGQ+IHNz aWQgPC90ZD4KCQkJPHRkPiBwYXNzIDwvdGQ+CgkJCTx0ZD4gPC90ZD4KCQkJPHRkPiA8L3Rk PgoJCTwvdHI+Cgk8L3Rib2R5PgoJPC90YWJsZT4KCgk8aDIgaWQ9InNtZF9xcl9jb2RlX2N1 c3RvbV90eXBlcyI+Q3VzdG9tIHR5cGVzPC9oMj4KCgk8cD5Zb3UgbWF5IGNyZWF0ZSB5b3Vy IG93biBjdXN0b20gZGF0YSBmb3JtYXRzIGZvciB5b3VyIFFSIGNvZGVzLiBBcyB3ZWxsIGFz IGJlaW5nIGFibGUgdG8gZGVzaWduYXRlIGEgY3VzdG9tIHJlZ3VsYXIgZXhwcmVzc2lvbiB0 byB2YWxpZGF0ZSB0aGUgZGF0YSB2YWx1ZSwgeW91IGNhbiBhbHNvIHNwZWNpZnkgY2FsbGJh Y2tzIHRvIHRyYW5zZm9ybSB0aGUgZGF0YSB2YWx1ZSBwcmlvciB0byBpdHMgdmFsaWRhdGlv bi4gVGhpcyBhbGxvd3MgeW91IHRvIGRvIHRoaW5ncyBsaWtlIHRpZHkgdXAgbGlua3MsIGFk ZCBzdWZmaXhlcywgc2FuaXRpemUgZGF0YSwgZXRjLjwvcD4KCgk8cD5MZXQmIzgyMTc7cyBz YXkgeW91IGRvbiYjODIxNzt0IGxpa2UgdGhlIGJ1aWx0LWluIHZjYXJkIGltcGxlbWVudGF0 aW9uIGFuZCB3YW50ZWQgdG8gZHJvcCB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPkFEUjwvc3Bh bj4gcHJvcGVydHksIHdoaWxlIGFkZGluZyB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPkNFTEw8 L3NwYW4+IHByb3BlcnR5LiBZb3UgY2FuIGRlZmluZSB5b3VyIG93biBieSB1c2luZyB0aGUg Zm9sbG93aW5nIGF0dHJpYnV0ZXMgKGxpbmUgYnJlYWtzIGFkZGVkIG9ubHkgZm9yIGNsYXJp dHk6IHRoZXkgc2hvdWxkIG5vdCBiZSBpbiB5b3VyIGRlZmluaXRpb24pIDo8L3A+Cgo8cHJl IGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj50eXBlPSZxdW90O3ZjYXJkJnF1 b3Q7IGxheW91dD0mcXVvdDtCRUdJTjpWQ0FSRFxyXG4KICAgICBOOntTTURfUVJfZm9ybWF0 dGVkX25hbWV9XHJcbgogICAgIEZOOntuYW1lfVxyXG4KICAgICBFTUFJTDp7ZW1haWx9XHJc bgogICAgIFVSTDp7dXJsfVxyXG4KICAgICBURUw6e3Bob25lfVxyXG4KICAgICBDRUxMOntj ZWxsfVxyXG4KICAgICBFTkQ6VkNBUkQmcXVvdDsKPC9jb2RlPjwvcHJlPgoKCTxwPkEgZmV3 IHRoaW5ncyB0byBub3RlOjwvcD4KCgk8dWw+CgkJPGxpPlRoaXMgc2NoZW1lIHJlcGxhY2Vz IHRoZSBidWlsdC1pbiB2Y2FyZCA8Y29kZT50eXBlPC9jb2RlPi4gSWYgeW91IHdpc2hlZCwg eW91IGNvdWxkIHJlbmFtZSBpdCBieSBzaW1wbHkgdXNpbmcgYSBkaWZmZXJlbnQgPGNvZGU+ dHlwZTwvY29kZT48L2xpPgoJCTxsaT5UaGUgdmNhcmQgc3BlYyAoY2VydGFpbmx5IHYzKykg c3RhdGVzIHRoYXQgdGhlIDxjb2RlPk46PC9jb2RlPiBwcm9wZXJ0eSBpcyBtYW5kYXRvcnku IEl0JiM4MjE3O3MgbWVyZWx5IGEgcmVmb3JtYXR0ZWQgdmVyc2lvbiBvZiB0aGUgPGNvZGU+ Rk46PC9jb2RlPiBzbywgdG8gc2F2ZSB5b3UgaGF2aW5nIHRvIGFkZCBpdCBtYW51YWxseSwg dGhlIHBsdWdpbiBhcHBsaWVzIGEgY3VzdG9tIHRyYW5zZm9ybSBjYWxsZWQgPGNvZGU+c3Bs aXRyZXZqb2luPC9jb2RlPiAobW9yZSBpbmZvIGluIHRoZSA8YSBocmVmPSIjc21kX3FyX2Nv ZGVfY3VzdG9tX3R5cGVzIj5jdXN0b20gdHJhbnNmb3JtczwvYT4gc2VjdGlvbikuIEJlY2F1 c2UgaXQmIzgyMTc7cyBhIGNvbXB1dGVkIGZpZWxkLCB0aGUgcGx1Z2luIGRlc2lnbmF0ZXMg aXQgd2l0aCBhbiA8Y29kZT5TTURfUVJfPC9jb2RlPiBwcmVmaXguIElmIHlvdSB3YW50ZWQg dG8gZmxhdW50IHRoZSBzcGVjIGFuZCBvbWl0IHRoaXMgdmFsdWUsIGp1c3QgcmVtb3ZlIHRo ZSBlbnRyeSBmcm9tIHlvdXIgPGNvZGU+bGF5b3V0PC9jb2RlPjwvbGk+CgkJPGxpPlRoZSA8 Y29kZT57Y2VsbH08L2NvZGU+IHJlcGxhY2VtZW50IHZhcmlhYmxlIGlzbiYjODIxNzt0IG9u ZSBvZiB0aGUgYnVpbHQtaW4gc3VwcG9ydGVkIGZvcm1hdHMgKGkuZS4gdGhlIHBhcmFtZXRl cnMgbGlzdGVkIGluIHRoZSA8YSBocmVmPSIjc21kX3FyX2NvZGVfZGF0YV90YWJsZSI+ZGF0 YSB0YWJsZTwvYT4pLiBUbyBoZWxwIHlvdSBvdXQsIHRoZSBwbHVnaW4gZGVmaW5lcyBhIGRl ZmF1bHQgcmVndWxhciBleHByZXNzaW9uICYjODIyMDtvbmUgb3IgbW9yZSBjaGFyYWN0ZXJz JiM4MjIxOyB0byBhbnkgbmV3IHBhcmFtZXRlcnMsIGJ1dCBpZiB5b3Ugd2lzaCB0byB0aWdo dGVuIHRoaXMgeW91IGNhbiBzcGVjaWZ5IHlvdXIgb3duIHJlZ2V4IHZpYSB0aGUgPGNvZGU+ dmFsaWRhdGU8L2NvZGU+IGF0dHJpYnV0ZTwvbGk+CgkJPGxpPkFueSA8c3BhbiBjbGFzcz0i Y2FwcyI+VVJMPC9zcGFuPnMgYXJlIHJlZm9ybWF0dGVkIHRvIGJlZ2luIHdpdGggPGNvZGU+ aHR0cDovLzwvY29kZT4gaWYgeW91IG9taXQgdGhlIHByZWZpeC4gVGhpcyBpcyBhbm90aGVy IGJ1aWx0LWluIHRyYW5zZm9ybSB3aGljaCB5b3UgY2FuIG92ZXJyaWRlIG9yIHN1cHByZXNz IGlmIHlvdSBwcmVmZXI8L2xpPgoJPC91bD4KCgk8cD5XaXRoIHRoaXMgY3VzdG9tIGZvcm1h dCBpbiBwbGFjZSB5b3UgY2FuIHNwZWNpZnkgYSA8Y29kZT5kYXRhPC9jb2RlPiBhdHRyaWJ1 dGUgbGlrZSB0aGlzIChhZ2FpbiwgbmV3bGluZXMgYXJlIGZvciBjbGFyaXR5IG9ubHkpIDo8 L3A+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj5kYXRhPSZxdW90 O1N0ZWYgRGF3c29uCiAgICAgfCBzb21lQG1haWwuY29tCiAgICAgfCBzdGVmZGF3c29uLmNv bQogICAgIHwgKzQ0ICgwKTEyMzQgNTY3IDg5MAogICAgIHwgKzQ0ICgwKTc3NzcgMDk4IDc2 NSZxdW90Owo8L2NvZGU+PC9wcmU+CgoJPHA+WW91ciBRUiBjb2RlIHdvdWxkIGJlIGdlbmVy YXRlZCB3aXRoIHRoZSBhYm92ZSBkYXRhIGluIGl0LiBJZiB5b3Ugd2FudGVkIHRvIHVzZSB0 aGUgc2FtZSBmb3JtYXQgYWNyb3NzIGEgbnVtYmVyIG9mIGNvZGVzLCB5b3UgY291bGQgZGVm aW5lIHlvdXIgZm9ybWF0IGluIGEgPGNvZGU+Jmx0O3R4cDp2YXJpYWJsZSAvJmd0OzwvY29k ZT4gYW5kIHVzZSB0YWctaW4tYXR0cmlidXRlIHN5bnRheCB0byByZXVzZSBpdC48L3A+CgoJ PHA+U2luY2UgdGhlIG5ldyBmaWVsZCAmIzgyMTY7Y2VsbCYjODIxNzsgd2lsbCBiZSB2YWxp ZGF0ZWQgdXNpbmcgdGhlIG1vc3QgcGVybWlzc2l2ZSByZWdleCBhbmQgd2UgYWxyZWFkeSBo YXZlIGEgcGVyZmVjdGx5IGdvb2QgZXhwcmVzc2lvbiBkZWZpbmVkIGZvciAmIzgyMTY7cGhv bmUmIzgyMTc7IGl0JiM4MjE3O2QgYmUgYSBzaGFtZSB0byBoYXZlIHRvIHJlcGVhdCBvdXJz ZWx2ZXMuIFNvIGRvIHRoaXM6PC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNz PSJibG9jayI+dmFsaWRhdGU9JnF1b3Q7MSwgY2VsbDpTTURfUkVHRVhfUEhPTkUmcXVvdDsK PC9jb2RlPjwvcHJlPgoKCTxwPnRvIGNvcHkgdGhlICYjODIxNjtwaG9uZSYjODIxNzsgcmVn ZXggb3ZlciB0byB0aGUgJiM4MjE2O2NlbGwmIzgyMTc7IGZpZWxkLiBUaGUgJiM4MjE2OzEm IzgyMTc7IGp1c3QgbWFrZXMgc3VyZSB0aGF0IGFsbCB0aGUgcmVtYWluaW5nIGZpZWxkcyBh cmUgdmFsaWRhdGVkIGFzIG5vcm1hbC4gV2l0aG91dCB0aGF0LCBvbmx5IHRoZSBjZWxsIGFu ZCBhbnkgb3RoZXIgZmllbGRzIHlvdSBleHBsaWNpdGx5IGRlZmluZWQgaW4gdGhlIGxpc3Qg d291bGQgYmUgdmFsaWRhdGVkLiBJZiB5b3Ugd291bGQgbGlrZSB0byBzZWUgYSBsaXN0IG9m IHRoZSBidWlsdC1pbiByZWdleGVzLCB1c2UgPGNvZGU+ZGVidWc9JnF1b3Q7MSZxdW90Ozwv Y29kZT4uPC9wPgoKCTxoMiBpZD0ic21kX3FyX2NvZGVfY3VzdG9tX3RyYW5zZm9ybXMiPkN1 c3RvbSB0cmFuc2Zvcm1zPC9oMj4KCgk8cD5CZWZvcmUgdmFsaWRhdGlvbiwgZWFjaCBwaWVj ZSBvZiBkYXRhIG1heSBiZSBwdXQgdGhyb3VnaCBhIG1hbmdsZSB0byByZWZvcm1hdCBpdC4g WW91IGNvdWxkIHVzZSB0aGlzIHRvIHNhbml0aXplIGRhdGEsIHByZWZpeCBpdCwgc3VmZml4 IGl0LCBmZXRjaCBvdGhlciBkYXRhLCBvciBjcmVhdGUgbmV3IGNvbXB1dGVkIGVudHJpZXMg ZnJvbSBhIGdpdmVuIGRhdGEgcGFyYW1ldGVyLiBUaGUgZm9sbG93aW5nIGRlZmF1bHQgdHJh bnNmb3JtcyBhcmUgYnVpbHQtaW46PC9wPgoKCTx1bD4KCQk8bGk+PHN0cm9uZz5saW5raWZ5 PC9zdHJvbmc+IDogcHJlZml4IGFueSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiB0 aGF0IGRvZXMgbm90IGJlZ2luIHdpdGggPGNvZGU+aHR0cDovLzwvY29kZT48L2xpPgoJCTxs aT48c3Ryb25nPnNwbGl0cmV2am9pbjwvc3Ryb25nPiA6IHRha2VzIHNvbWVvbmUmIzgyMTc7 cyBuYW1lLCBzcGxpdHMgaXQgYXQgc3BhY2UsIHJldmVyc2VzIHRoZSBvcmRlciBvZiB0aGUg ZGF0YSwgYW5kIHRoZW4gcmVjb21iaW5lcyBpdCB3aXRoIGEgc2VtaWNvbG9uIGJldHdlZW4g ZWFjaCBmaWVsZC4gVGh1cyA8Y29kZT5TdGVmIERhd3NvbjwvY29kZT4gYmVjb21lcyA8Y29k ZT5EYXdzb247U3RlZjwvY29kZT48L2xpPgoJPC91bD4KCgk8cD5UcmFuc2Zvcm1hdGlvbnMg Y2FuIGJlIGFwcGxpZWQgdG8gYW55IGRhdGEgcGFyYW1ldGVyLiBZb3UgY2hvb3NlIHdoaWNo IGJ5IHVzaW5nIHRoZSBmb2xsb3dpbmcgc3ludGF4OjwvcD4KCjxwcmUgY2xhc3M9ImJsb2Nr Ij48Y29kZSBjbGFzcz0iYmxvY2siPnRyYW5zZm9ybT0mcXVvdDt0eXBlLmZpZWxkfGZ1bmN0 aW9uX25hbWV8b3B0aW9uYWx8YXR0cmlidXRlc3wuLi4mcXVvdDsKPC9jb2RlPjwvcHJlPgoK CTxwPlNvIHRvIGNhcGl0YWxpemUgdGhlIHZjYXJkJiM4MjE3O3MgJiM4MjE2O25hbWUmIzgy MTc7IHlvdSBjb3VsZCB1c2UgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4mIzgyMTc7 cyBidWlsdC1pbiBmdW5jdGlvbiA8Y29kZT5zdHJ0b3VwcGVyKCk8L2NvZGU+IGxpa2UgdGhp czo8L3A+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj50cmFuc2Zv cm09JnF1b3Q7dmNhcmQubmFtZXxzdHJ0b3VwcGVyJnF1b3Q7CjwvY29kZT48L3ByZT4KCgk8 cD5Zb3UgY2FuIHVzZSBhIHNob3J0aGFuZCAmIzgyMTY7d2lsZGNhcmQmIzgyMTc7IG5vdGF0 aW9uIGlmIHlvdSB3aXNoIHRvIGFwcGx5IHRoZSBzYW1lIHRyYW5zZm9ybSB0byB0aGUgc2Ft ZSBwYXJhbWV0ZXIgaW4gZGlmZmVyZW50IHR5cGVzICh0aG91Z2ggYWRtaXR0ZWRseSwgdGhp cyBoYXMgbGltaXRlZCB1c2UpLiBUaGUgcGx1Z2luIHVzZXMgdGhpcyB3aXRoIGl0cyBkZWZh dWx0IDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IHRyYW5zZm9ybWF0aW9uIGJ5IHVz aW5nOiA8Y29kZT4qLnVybHxsaW5raWZ5PC9jb2RlPi48L3A+CgoJPHA+SWYgeW91IHRyeSB0 aGUgYWJvdmUgdGhvdWdoIHlvdSB3aWxsIHJlY2VpdmUgYSBwbHVnaW4gd2FybmluZyA8Y29k ZT5JbnZhbGlkIG9yIHVucmVnaXN0ZXJlZCB0cmFuc2Zvcm0gZnVuY3Rpb248L2NvZGU+LiBU aGF0JiM4MjE3O3MgYSBzZWN1cml0eSBtZXNzYWdlIGJlY2F1c2Ugb25seSByZWdpc3RlcmVk IGZ1bmN0aW9ucyBhcmUgcGVybWl0dGVkIHRvIHJ1biB0cmFuc2Zvcm1hdGlvbnMuIFRvIHJl Z2lzdGVyIGEgZnVuY3Rpb24sIHVzZSBUZXh0cGF0dGVybiYjODIxNztzIDxjb2RlPnJlZ2lz dGVyX2NhbGxiYWNrKCk8L2NvZGU+IGZ1bmN0aW9uIGluIHNvbWUgPHNwYW4gY2xhc3M9ImNh cHMiPlBIUDwvc3Bhbj46PC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJi bG9jayI+cmVnaXN0ZXJfY2FsbGJhY2soJiMzOTtzdHJ0b3VwcGVyJiMzOTssICYjMzk7c21k X3FyX2NvZGUmIzM5OywgJiMzOTthZGRfdHJhbnNmb3JtJiMzOTspOwo8L2NvZGU+PC9wcmU+ CgoJPHA+WW91IGNhbiBvZiBjb3Vyc2UgdXNlIHlvdXIgb3duIGZ1bmN0aW9ucyBpZiB5b3Ug d2lzaC4gVGhlIHNpZ25hdHVyZSBvZiB5b3VyIGZ1bmN0aW9uIHNob3VsZCBiZTo8L3A+CgoJ PG9sPgoJCTxsaT4oc3RyaW5nKSBEYXRhIHZhbHVlIHRvIHRyYW5zZm9ybTwvbGk+CgkJPGxp PihhcnJheSkgT3B0aW9uYWwgdmFsdWVzIHRoYXQgeW91ciB0cmFuc2Zvcm0gbmVlZHM8L2xp PgoJPC9vbD4KCgk8cD5UaGUgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQsIGlu IG9yZGVyLCBmcm9tIHRoZSA8Y29kZT50cmFuc2Zvcm08L2NvZGU+IGF0dHJpYnV0ZS4gTm90 ZSB0aGF0IHlvdSBjYW4gPGVtPm9ubHk8L2VtPiB1c2UgZnVuY3Rpb25zIChlaXRoZXIgeW91 ciBvd24sIG9yIDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+L1RYUCBmdW5jdGlvbnMp IGlmIHRoZXkgZWl0aGVyIHRha2UgYSBzaW5nbGUgc3RyaW5nIG9yIGEgc3RyaW5nIHBsdXMg YW4gYXJyYXkgYXMgYXJndW1lbnRzLiBUcnlpbmcgdG8gdXNlIGFueSBtb3JlIGNvbXBsaWNh dGVkIGZ1bmN0aW9ucyBvciBhdHRyaWJ1dGVzIG9mIHRoZSB3cm9uZyB0eXBlIHdpbGwgbGlr ZWx5IHJlc3VsdCBpbiB3YXJuaW5ncyBvciBlcnJvcnMgYmVpbmcgdGhyb3duLjwvcD4KCgk8 cD5JZiB5b3VyIGN1c3RvbSBmdW5jdGlvbiByZXR1cm5zIGEgc2luZ2xlIHN0cmluZyB2YWx1 ZSwgdGhhdCB3aWxsIGJlY29tZSB0aGUgcGFyYW1ldGVyJiM4MjE3O3MgbmV3IHZhbHVlLiBJ ZiwgaG93ZXZlciwgeW91IHJldHVybiBhbiBhcnJheSBvZiBpZHggPSZndDsgdmFsdWVzIHRo ZW4gYW55IGlkeCB0aGF0IG1hdGNoZXMgdGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlciB3aWxs IHJlcGxhY2UgdGhlIG9yaWdpbmFsLiBBbnkgYWRkaXRpb25hbCBpZHggdmFsdWVzIGJlY29t ZSBuZXcgcGFyYW1ldGVycywgcHJlZml4ZWQgd2l0aCA8Y29kZT5TTURfUVJfPC9jb2RlPi4g TGV0JiM4MjE3O3MgbG9vayBhdCB0aGUgYnVpbHQtaW4gPGNvZGU+c3BsaXRyZXZqb2luKCk8 L2NvZGU+IGZ1bmN0aW9uOjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0i YmxvY2siPnB1YmxpYyBmdW5jdGlvbiBzcGxpdHJldmpvaW4oJGl0ZW0sICRhcmdzPWFycmF5 KCkpIHsKICAgLy8gJGFyZ3M6IDAgPSB2YXJpYWJsZSBuYW1lLCAxID0gc3BsaXQgY2hhciwg MiA9IGpvaW4gY2hhcgogICBpZiAoY291bnQoJGFyZ3MpID09IDMpIHsKICAgICAgJG91dHZh bCA9IGpvaW4oCiAgICAgICAgICAgJGFyZ3NbMl0KICAgICAgICAgICAsIGFycmF5X3JldmVy c2UoCiAgICAgICAgICAgICAgZXhwbG9kZSggJGFyZ3NbMV0sICRpdGVtICkKICAgICAgICAg ICApCiAgICAgICk7CiAgICAgIHJldHVybiBhcnJheSgkYXJnc1swXSA9Jmd0OyAkb3V0dmFs KTsKICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICRpdGVtOwogICB9Cn0KPC9jb2RlPjwvcHJl PgoKCTxwPkluIHRoaXMgZnVuY3Rpb24sIHdlIGhhdmUgYXNzdW1lZCB0aGF0IHRoZSB0cmFu c2Zvcm0mIzgyMTc7cyBwYXJhbWV0ZXJzIGFyZTo8L3A+CgoJPHVsPgoJCTxsaT48Y29kZT4k aXRlbTwvY29kZT4gOiB0aGUgZGF0YSB2YWx1ZTwvbGk+CgkJPGxpPjxjb2RlPiRhcmdzWzBd PC9jb2RlPiA6IHRoZSBuYW1lIG9mIHRoZSBuZXcgcGFyYW1ldGVyPC9saT4KCQk8bGk+PGNv ZGU+JGFyZ3NbMV08L2NvZGU+IDogdGhlIHNwbGl0IGNoYXJhY3RlcjwvbGk+CgkJPGxpPjxj b2RlPiRhcmdzWzJdPC9jb2RlPiA6IHRoZSByZWpvaW4gY2hhcmFjdGVyPC9saT4KCTwvdWw+ CgoJPHA+QWxsIHRoZXNlIHZhbHVlcyBhcmUgcGFzc2VkIGluIGxpa2UgdGhpczogPGNvZGU+ dmNhcmQubmFtZXxzcGxpdHJldmpvaW58Zm9ybWF0dGVkX25hbWV8IHw7PC9jb2RlPiB3aGlj aCBtZWFucyB3ZSYjODIxNztyZSB0ZWxsaW5nIHRoZSB0cmFuc2Zvcm0gdG8gcHJvY2VzcyB0 aGUgPGNvZGU+JGl0ZW08L2NvZGU+IGFuZCByZXR1cm4gYSA8ZW0+bmV3PC9lbT4gcGFyYW1l dGVyIGNhbGxlZCA8Y29kZT5mb3JtYXR0ZWRfbmFtZTwvY29kZT4gYWZ0ZXIgc3BsaXR0aW5n IHRoZSA8Y29kZT4kaXRlbTwvY29kZT4gYXQgc3BhY2UgYW5kIHJlY29uc3RpdHV0aW5nIHRo ZSBwYXJ0cyBhcyBhIHN0cmluZywgZGVsaW1pdGVkIGJ5IGEgc2VtaWNvbG9uLjwvcD4KCgk8 cD5JZiB3ZSYjODIxNztkIHJldHVybmVkIDxjb2RlPm5hbWU8L2NvZGU+IGluc3RlYWQgb2Yg PGNvZGU+Zm9ybWF0dGVkX25hbWU8L2NvZGU+LCB0aGUgZXhpc3RpbmcgcGFyYW1ldGVyIHdv dWxkIGhhdmUgYmVlbiBvdmVyd3JpdHRlbi4gU2luY2UgdGhlIGdvYWwgb2YgdGhpcyBmdW5j dGlvbiBpcyB0byByZWZvcm1hdCB0aGUgcGVyc29uJiM4MjE3O3MgbmFtZSBpbnRvIGEgZm9y bSBzdWl0YWJsZSBmb3IgdGhlIHZjYXJkJiM4MjE3O3MgPGNvZGU+Tjo8L2NvZGU+IGF0dHJp YnV0ZSwgd2UmIzgyMTc7cmUgbGVhdmluZyB0aGUgb3JpZ2luYWwgaW50YWN0IGFuZCBtYWtp bmcgYSBuZXcgdmFsdWUuPC9wPgoKCTxwPkZpbmFsbHksIHRvIGRpc3Rpbmd1aXNoIHRoZSA8 ZW0+aW5wdXQ8L2VtPiB2YWx1ZXMgZnJvbSA8ZW0+Y29tcHV0ZWQ8L2VtPiB2YWx1ZXMgc3Vj aCBhcyB0aGlzIG9uZSwgdGhlIHBsdWdpbiB3aWxsIGF1dG9tYXRpY2FsbHkgcHJlZml4IGFs bCBuZXcgcGFyYW1ldGVycyB3aXRoIDxjb2RlPlNNRF9RUl88L2NvZGU+LiBUaHVzIHRvIHVz ZSBpdCBpbiB5b3VyIGxheW91dCwgcmVtZW1iZXIgeW91IG5lZWQgdG8gc3BlY2lmeSA8Y29k ZT57U01EX1FSX2Zvcm1hdHRlZF9uYW1lfTwvY29kZT4uIFRoZSBwcmVmaXggY2FuIGJlIGNo YW5nZWQgdmlhIHRoZSBwbHVnaW4mIzgyMTc7cyA8Y29kZT5wcmVmaXg8L2NvZGU+IGF0dHJp YnV0ZS48L3A+CgoJPGgyPkV4YW1wbGVzPC9oMj4KCgk8aDMgaWQ9ImVnMSI+RXhhbXBsZSAx OiBCb29rbWFyayBwZXJtbGlua3M8L2gzPgoKCTxwPkluIHlvdXIgZGVmYXVsdCBGb3JtIHB1 dCBhIFFSIGNvZGUgYWxvbmdzaWRlIHlvdXIgYXJ0aWNsZSBoZWFkaW5nIHNvIHBlb3BsZSBj YW4gYm9va21hcmsgdGhlIGFydGljbGUgYnkgdGFraW5nIGEgcGljdHVyZSB3aXRoIHRoZWly IHNtYXJ0IHBob25lOjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxv Y2siPiZsdDtoMSBjbGFzcz0mcXVvdDtlbnRyeS10aXRsZSZxdW90OyZndDsKICAgJmx0O3R4 cDpwZXJtbGluayZndDsmbHQ7dHhwOnRpdGxlIC8mZ3Q7Jmx0Oy90eHA6cGVybWxpbmsmZ3Q7 CiAgICZsdDt0eHA6c21kX3FyX2NvZGUgdHlwZT0mcXVvdDtib29rbWFyayZxdW90OwogICAg IGRhdGE9JiMzOTsmbHQ7dHhwOnRpdGxlIC8mZ3Q7fCZsdDt0eHA6cGVybWxpbmsgLyZndDsm IzM5OwogICAgIHdpZHRoPSZxdW90OzUwJnF1b3Q7IGhlaWdodD0mcXVvdDs1MCZxdW90Owog ICAgIHF1YWxpdHk9JnF1b3Q7USZxdW90OyAvJmd0OwombHQ7L2gxJmd0Owo8L2NvZGU+PC9w cmU+CgoJPHA+Tm90aWNlIHRoYXQgc2luY2UgdGhlIGltYWdlIHNpemUgaGFzIGJlZW4gcmVk dWNlZCB0byBmaXQgYWxvbmdzaWRlIHRoZSB0aXRsZSwgdGhlIHF1YWxpdHkgKGVycm9yIGRl dGVjdGlvbi9jb3JyZWN0aW9uKSBoYXMgYmVlbiBpbmNyZWFzZWQgdG8gY29tcGVuc2F0ZS48 L3A+CgoJPGgzIGlkPSJlZzIiPkV4YW1wbGUgMjogQXV0aG9yIGNvbnRhY3QgZGV0YWlsczwv aDM+CgoJPHA+SWYgeW91IGhhdmUgc21kX2JpbyBpbnN0YWxsZWQgeW91IGNvdWxkIGFkZCB0 aGUgZm9sbG93aW5nIGNvZGUgdG8gdGhlICYjODIxNjtwdWJsaXNoZWQgYnkmIzgyMTc7IHNl Z21lbnQgb2YgeW91ciBhcnRpY2xlcy4gSXQgd2lsbCBkaXNwbGF5IGEgUVIgY29kZSBmb3Ig dGhlIGNvbnRhY3QgZGV0YWlscyBvZiB0aGUgYXJ0aWNsZSYjODIxNztzIGF1dGhvciwgdGh1 cyB2aXNpdG9ycyBjYW4gc2NhbiB0aGUgYmFyY29kZSBhbmQgaGF2ZSB0aGUgYXV0aG9yJiM4 MjE3O3MgPHNwYW4gY2xhc3M9ImNhcHMiPk1FQ0FSRDwvc3Bhbj4gYWRkZWQgZGlyZWN0bHkg dG8gdGhlaXIgYWRkcmVzcyBib29rczo8L3A+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUg Y2xhc3M9ImJsb2NrIj4mbHQ7cCBjbGFzcz0mcXVvdDtwdWJsaXNoZWQmcXVvdDsmZ3Q7CiAg ICZsdDt0eHA6cG9zdGVkIC8mZ3Q7IGJ5ICZsdDt0eHA6YXV0aG9yIHRpdGxlPSZxdW90OzAm cXVvdDsgLyZndDsKICAgJmx0O3R4cDpzbWRfcXJfY29kZSB0eXBlPSZxdW90O2NvbnRhY3Qm cXVvdDsKICAgICBkYXRhPSYjMzk7Jmx0O3R4cDphdXRob3IgLyZndDsKICAgICAgICB8ICZs dDt0eHA6c21kX2Jpb19pbmZvIGl0ZW1zPSZxdW90O2FkZHJlc3MmcXVvdDsgbGFiZWw9JnF1 b3Q7JnF1b3Q7IC8mZ3Q7CiAgICAgICAgfCAmbHQ7dHhwOnNtZF9iaW9faW5mbyBpdGVtcz0m cXVvdDtwaG9uZSZxdW90OyBsYWJlbD0mcXVvdDsmcXVvdDsgLyZndDsKICAgICAgICB8ICZs dDt0eHA6c21kX2Jpb19pbmZvIGl0ZW1zPSZxdW90O2VtYWlsJnF1b3Q7IGxhYmVsPSZxdW90 OyZxdW90OyAvJmd0OyAvJmd0OyYjMzk7CiAgICAgYmdjb2w9JnF1b3Q7YmVhN2QwJnF1b3Q7 IG1hcmdpbj0mcXVvdDsxJnF1b3Q7IC8mZ3Q7CiZsdDsvcCZndDsKPC9jb2RlPjwvcHJlPgoK CTxwPlRoaXMgb25lIGhhcyBhIG5hdHR5LCB0aGluIHB1cnBsZSBib3JkZXIgdG9vIGNvdXJ0 ZXN5IG9mIHRoZSA8Y29kZT5iZ2NvbDwvY29kZT4gYW5kIDxjb2RlPm1hcmdpbjwvY29kZT4g YXR0cmlidXRlcy48L3A+CgoJPHA+QWx0ZXJuYXRpdmVseSwgaW4gPHNwYW4gY2xhc3M9ImNh cHMiPlZDQVJEPC9zcGFuPiBmb3JtYXQ6PC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2Rl IGNsYXNzPSJibG9jayI+Jmx0O3R4cDp2YXJpYWJsZQogICAgIG5hbWU9JnF1b3Q7YWRkcmVz cyZxdW90OyZndDsmbHQ7dHhwOnNtZF9iaW9faW5mbwogICAgIGl0ZW1zPSZxdW90O2FkZHJl c3MmcXVvdDsgbGFiZWw9JnF1b3Q7JnF1b3Q7IC8mZ3Q7Jmx0Oy90eHA6dmFyaWFibGUmZ3Q7 CiZsdDtwIGNsYXNzPSZxdW90O3B1Ymxpc2hlZCZxdW90OyZndDsKICAgJmx0O3R4cDpwb3N0 ZWQgLyZndDsgYnkgJmx0O3R4cDphdXRob3IgdGl0bGU9JnF1b3Q7MCZxdW90OyAvJmd0Owog ICAmbHQ7dHhwOnNtZF9xcl9jb2RlIHR5cGU9JnF1b3Q7dmNhcmQmcXVvdDsKICAgICBkYXRh PSYjMzk7Jmx0O3R4cDphdXRob3IgLyZndDsKICAgICAgICB8ICZsdDt0eHA6c21kX2Jpb19p bmZvIGl0ZW1zPSZxdW90O2VtYWlsJnF1b3Q7IGxhYmVsPSZxdW90OyZxdW90OyAvJmd0OyAv Jmd0OyYjMzk7CiAgICAgICAgfCAmbHQ7dHhwOnNtZF9iaW9faW5mbyBpdGVtcz0mcXVvdDt3 ZWJzaXRlJnF1b3Q7IGxhYmVsPSZxdW90OyZxdW90OyAvJmd0OwogICAgICAgIHwgJmx0O3R4 cDppZl92YXJpYWJsZQogICAgICAgICAgICAgICBuYW1lPSZxdW90O2FkZHJlc3MmcXVvdDsK ICAgICAgICAgICAgICAgdmFsdWU9JnF1b3Q7JnF1b3Q7Jmd0O3tzbWRfZW1wdHl9Jmx0O3R4 cDplbHNlIC8mZ3Q7Jmx0O3R4cDp2YXJpYWJsZQogICAgICAgICAgICAgICBuYW1lPSZxdW90 O2FkZHJlc3MmcXVvdDsgLyZndDsmbHQ7L3R4cDppZl92YXJpYWJsZSZndDsKICAgICAgICB8 ICZsdDt0eHA6c21kX2Jpb19pbmZvIGl0ZW1zPSZxdW90O3Bob25lJnF1b3Q7IGxhYmVsPSZx dW90OyZxdW90OyAvJmd0OwogICAgIGJnY29sPSZxdW90O2JlYTdkMCZxdW90OyBtYXJnaW49 JnF1b3Q7MSZxdW90OyAvJmd0OwombHQ7L3AmZ3Q7CjwvY29kZT48L3ByZT4KCgk8cD5Ob3Rl IGluIHRoaXMgY2FzZSB3ZSBoYXZlIGNoZWNrZWQgaWYgdGhlIGFkZHJlc3MgaXMgZW1wdHkg YW5kIHN1cHBsaWVkIHRoZSA8Y29kZT57c21kX2VtcHR5fTwvY29kZT4gcGFyYW1ldGVyIGFz IGEgY29udmVuaWVuY2UuIFlvdSB3b3VsZCBwcm9iYWJseSBlbmZvcmNlIHRoaXMgdXBzdHJl YW0gYXQgZGF0YSBjb2xsZWN0aW9uIHBvaW50LCBidXQgdGhpcyBzZXJ2ZXMgdG8gZGVtb25z dHJhdGUgdGhhdCB5b3UgY2FuIGRlZmVuc2l2ZWx5IHByZXZlbnQgc21kX3FyX2NvZGUgdmFs aWRhdGlvbiBlcnJvcnMgYnkgZW1wbG95aW5nIHNpbWlsYXIgdGVjaG5pcXVlcyBvbiBjZXJ0 YWluIG9wdGlvbmFsIGZpZWxkcy48L3A+CgoJPGgzIGlkPSJlZzMiPkV4YW1wbGUgMzogR2Vv Z3JhcGhpYyBsb2NhdGlvbjwvaDM+CgoJPHA+T3JnYW5pc2luZyBhIGZsYXNobW9iIG9uIE1v dW50IEtpbGltYW5qYXJvPyBNYWtlIHN1cmUgcGVvcGxlIGNhbiBmaW5kIHlvdSBieSBwdWJs aXNoaW5nIGEgUVIgY29kZSBvbiB5b3VyIHNpdGU6PC9wPgoKPHByZSBjbGFzcz0iYmxvY2si Pjxjb2RlIGNsYXNzPSJibG9jayI+Jmx0O3R4cDpzbWRfcXJfY29kZSB0eXBlPSZxdW90O2dl byZxdW90OwogICAgIGRhdGE9JnF1b3Q7LTMuMDc1ODMgfCAzNy4zNTMzMyB8IDU4OTUmcXVv dDsgLyZndDsKPC9jb2RlPjwvcHJlPgoKCTxoMyBpZD0iZWc0Ij5FeGFtcGxlIDQ6IFJhdyBs aW5rczwvaDM+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4mbHQ7 YSBocmVmPSZxdW90OyZsdDt0eHA6c21kX3FyX2NvZGUKICAgICB0eXBlPSZxdW90O2xpbmsm cXVvdDsgZGF0YT0mcXVvdDtteWZhYnNpdGUuY29tL3ZvdWNoZXJzJnF1b3Q7CiAgICAgZm9y bWF0PSZxdW90O3JhdyZxdW90OyAvJmd0OyZxdW90OyZndDtEb3dubG9hZCB5b3VyIHZvdWNo ZXImbHQ7L2EmZ3Q7CjwvY29kZT48L3ByZT4KCgk8cD5XaGlsZSB0aGlzIG9uZSBpcyBqdXN0 IGEgYm9yaW5nIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IGxpbmsgdGhlcmUmIzgy MTc7cyBub3RoaW5nIHRvIHN0b3AgeW91IGdlbmVyYXRpbmcgYSBwZXJzb25hbCB2b3VjaGVy IGNvZGUsIHBlcmhhcHMgYWZ0ZXIgdGhleSBoYXZlIHN1Ym1pdHRlZCB0aGVpciBjb250YWN0 IGRldGFpbHMgdmlhIHplbV9jb250YWN0X3JlYm9ybiwgYW5kIHRhY2tpbmcgaXQgb250byB0 aGUgZW5kIG9mIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPi48L3A+CgoJPGgz IGlkPSJlZzUiPkV4YW1wbGUgNTogT3ZlcnJpZGluZyByZWdleGVzPC9oMz4KCjxwcmUgY2xh c3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPiZsdDt0eHA6c21kX3FyX2NvZGUKICAg ICB0eXBlPSZxdW90O2Jvb2ttYXJrJnF1b3Q7IGRlbGltPSZxdW90OyMmcXVvdDsKICAgICB2 YWxpZGF0ZT0mcXVvdDt0aXRsZSwgdXJsIyVeKGZpbGU6Ly98aHR0cDovL3xmdHA6Ly8pLisk JSZxdW90OwogICAgIGRhdGE9JnF1b3Q7Qm9va21hcmsgbWUgIyBmdHA6Ly9zdGVmZGF3c29u LmNvbSZxdW90OyAvJmd0Owo8L2NvZGU+PC9wcmU+CgoJPHA+QSBmZXcgdGhpbmdzIHRvIG5v dGUgYWJvdXQgdGhpcyBvbmU6PC9wPgoKCTx1bD4KCQk8bGk+VGhlIGRlbGltaXRlciBoYXMg YmVlbiBjaGFuZ2VkIGJlY2F1c2UgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB1c2VzIHBpcGUg c3ltYm9scyBpbiBpdHMgZGVmaW5pdGlvbjwvbGk+CgkJPGxpPlRoZSB0aXRsZSBpcyBzdGls bCBiZWluZyB2YWxpZGF0ZWQsIGFuZCB3aWxsIHVzZSB0aGUgYnVpbHQtaW4gcmVndWxhciBl eHByZXNzaW9uPC9saT4KCQk8bGk+VGhlICYjODIxNjt1cmwmIzgyMTc7IHJlZ2V4IGlzIGdv aW5nIHRvIGJlIHZhbGlkYXRlZCB1c2luZyB0aGUgZ2l2ZW4gcmVnZXggPHN0cm9uZz5pbmNs dWRpbmcgc3RhcnQvZW5kIGRlbGltaXRlcnM8L3N0cm9uZz4uIE5vcm1hbGx5IHdlJiM4MjE3 O2QgdXNlIGEgPGNvZGU+LzwvY29kZT4gYnV0IGluIHRoaXMgY2FzZSB3ZSBoYXZlIGNob3Nl biA8Y29kZT4lPC9jb2RlPiBhcyB0aGUgc3RhcnQvZW5kIGNoYXJhY3RlciBiZWNhdXNlIHdl JiM4MjE3O3JlIHVzaW5nIDxjb2RlPi88L2NvZGU+cyBpbiB0aGUgcmVnZXggaXRzZWxmLCB3 aGljaCBtZWFucyB3ZSBkb24mIzgyMTc7dCBoYXZlIHRvIGVzY2FwZSB0aGVtPC9saT4KCTwv dWw+CgoJPGgyPkNoYW5nZWxvZzwvaDI+CgoJPHA+MzEgTWFyIDExIHwgMC4xMCB8IEluaXRp YWwgcHVibGljIHJlbGVhc2U8YnIgLz4KMDIgQXByIDExIHwgMC4yMCB8IEFkZGVkIDxjb2Rl PnRpdGxlPC9jb2RlPiBhdHRyaWJ1dGUgZm9yIHRoZSA8Y29kZT4mbHQ7aW1nJmd0OzwvY29k ZT4gdGFnIDsgYWRkZWQgdmNhcmQgdHlwZSAodGhhbmtzIGdvbWVkaWEpIDsgYWRkZWQgPGNv ZGU+dmFsaWRhdGU8L2NvZGU+IGFuZCA8Y29kZT52YWxpZGVsaW08L2NvZGU+IHRvIGFsbG93 IHJlZ2V4IG92ZXJyaWRlcyA7IGZpeGVkIHVybCByZWdleCA7IGltcHJvdmVkIGVycm9yIHJl cG9ydGluZyA7IHBlcm1pdHRlZCA8Y29kZT5kZWJ1ZzwvY29kZT4gdG8gYWlkIGluIHRyYWNr aW5nIGRvd24gcmVnZXggLyB2YWxpZGF0aW9uIGVycm9yczxiciAvPgowNCBBcHIgMTEgfCAw LjMwIHwgV3JvdGUgbW9yZSBmbGV4aWJsZSwgY3VzdG9tIGludGVyZmFjZSB0byBHb29nbGUg Q2hhcnRzIDxzcGFuIGNsYXNzPSJjYXBzIj5BUEk8L3NwYW4+IDsgYWRkZWQgPGNvZGU+bGF5 b3V0PC9jb2RlPiwgPGNvZGU+dHJhbnNmb3JtPC9jb2RlPiBhbmQgPGNvZGU+cHJlZml4PC9j b2RlPiBhdHRyaWJ1dGVzIDsgaW1wcm92ZWQgPGNvZGU+dmFsaWRhdGU8L2NvZGU+IGF0dHJp YnV0ZTwvcD4KCjwvZGl2Pgo8IS0tICoqKiBCRUdJTiBQTFVHSU4gQ1NTICoqKiAtLT4KPHN0 eWxlIHR5cGU9InRleHQvY3NzIj4KI3NtZF9oZWxwIHsgbGluZS1oZWlnaHQ6MS41IDt9CiNz bWRfaGVscCBjb2RlIHsgZm9udC13ZWlnaHQ6Ym9sZDsgZm9udDogMTA1JS8xMzAlICJDb3Vy aWVyIE5ldyIsIGNvdXJpZXIsIG1vbm9zcGFjZTsgYmFja2dyb3VuZC1jb2xvcjogI2YwZTY4 YzsgY29sb3I6IzMzMzsgfQojc21kX2hlbHAgY29kZS5ibG9jayB7IGZvbnQtd2VpZ2h0Om5v cm1hbDsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgZGlzcGxheTpibG9jazsgbWFyZ2luOjEw cHggMTBweCAyMHB4OyBwYWRkaW5nOjEwcHg7IH0KI3NtZF9oZWxwIGgxIHsgZm9udDogMjBw eCBHZW9yZ2lhLCBzYW5zLXNlcmlmOyBtYXJnaW46IDA7IHRleHQtYWxpZ246IGNlbnRlcjsg fQojc21kX2hlbHAgaDIgeyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7IHBhZGRp bmc6MTBweCAwIDA7IGZvbnQ6IDE3cHggR2VvcmdpYSwgc2Fucy1zZXJpZjsgfQojc21kX2hl bHAgaDMgeyBmb250OiBib2xkIDEycHggQXJpYWwsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFj aW5nOiAxcHg7IG1hcmdpbjogMTBweCAwIDA7IHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7 fQojc21kX2hlbHAgaDQgeyBmb250OiBib2xkIDExcHggQXJpYWwsIHNhbnMtc2VyaWY7IGxl dHRlci1zcGFjaW5nOiAxcHg7IG1hcmdpbjogMTBweCAwIDAgO3RleHQtdHJhbnNmb3JtOiB1 cHBlcmNhc2U7IH0KI3NtZF9oZWxwIC5hdG5tIHsgZm9udC13ZWlnaHQ6Ym9sZDsgfQojc21k X2hlbHAgLm1hbmQgeyBiYWNrZ3JvdW5kOiNlZWU7IGJvcmRlcjoxcHggZG90dGVkICM5OTk7 IH0KI3NtZF9oZWxwIHRhYmxlIHsgd2lkdGg6OTAlOyB0ZXh0LWFsaWduOmNlbnRlcjsgcGFk ZGluZy1ib3R0b206MWVtOyBib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7IH0KI3NtZF9oZWxw IHRoZWFkIHsgYm9yZGVyLWJvdHRvbTpkb3VibGU7IH0KI3NtZF9oZWxwIHRkLCAjc21kX2hl bHAgdGggeyBib3JkZXI6MXB4IHNvbGlkICM5OTk7IHBhZGRpbmc6LjVlbTsgfQojc21kX2hl bHAgdWwgeyBsaXN0LXN0eWxlLXR5cGU6c3F1YXJlOyB9CiNzbWRfaGVscCAuaW1wb3J0YW50 IHsgY29sb3I6cmVkOyB9CiNzbWRfaGVscCBsaSB7IG1hcmdpbjo1cHggMjBweCA1cHggMzBw eDsgfQojc21kX2hlbHAgLmJyZWFrIHsgbWFyZ2luLXRvcDo1cHg7IH0KPC9zdHlsZT4KPCEt LSAqKiogRU5EIFBMVUdJTiBDU1MgKioqIC0tPgoiO3M6MzoibWQ1IjtzOjMyOiJiZDBjNWZm NTY0YjM5MTI4MjA3MzY4NDg3ZGQ0Yjg2NCI7fQ==