PGh0bWw+CjxoZWFkPgoJPHRpdGxlPkJPT1NUX1BQX0xJTkU8L3RpdGxlPgoJPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi4vc3R5bGVzLmNzcyI+CQo8L2hlYWQ+Cjxib2R5PgoJPGRpdiBzdHlsZT0ibWFyZ2luLWxlZnQ6ICAwcHg7Ij4KCQlUaGUgPGI+Qk9PU1RfUFBfTElORTwvYj4gbWFjcm8gcGxhY2VzIG5vdGVzIGVuY29kZWQgYXMgbGluZSBkaXJlY3RpdmVzIGluIHRoZSBwcmVwcm9jZXNzaW5nIG91dHB1dC4KCTwvZGl2PgoJPGg0PlVzYWdlPC9oND4KCQk8ZGl2IGNsYXNzPSJjb2RlIj4KCQkJI2xpbmUgPGI+Qk9PU1RfUFBfTElORTwvYj4oPGk+bGluZTwvaT4sIDxpPmZpbGU8L2k+KQoJCTwvZGl2PgoJPGg0PkFyZ3VtZW50czwvaDQ+CgkJPGRsPgoJCQk8ZHQ+bGluZTwvZHQ+CgkJCTxkZD4KCQkJCVRoZSBuZXcgbGluZSBudW1iZXIgb2YgdGhlIHRyYWlsaW5nIGxpbmUuJm5ic3A7CgkJCQlUaGUgcHJlZGVmaW5lZCBtYWNybyA8aT5fX0xJTkVfXzwvaT4gaXMgY29tbW9ubHkgdXNlZC4KCQkJPC9kZD4KCQkJPGR0PmZpbGU8L2R0PgoJCQk8ZGQ+CgkJCQlUeXBpY2FsbHkgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgZmlsZS4mbmJzcDsKCQkJCUhvd2V2ZXIsIGFueSBpbmZvcm1hdGl2ZSB0ZXh0IHdpbGwgd29yay4mbmJzcDsKCQkJCVRoaXMgdGV4dCBpcyBpbnRlcm5hbGx5IHN0cmluZ2l6ZWQsIHNvIHF1b3RhdGlvbiBtYXJrcyBhcmUgdW5uZWNlc3NhcnkuCgkJCTwvZGQ+CgkJPC9kbD4KCTxoND5SZW1hcmtzPC9oND4KCQk8ZGl2PgoJCQlJZiB0aGUgbWFjcm8gPGI+Qk9PU1RfUFBfQ09ORklHX0VYVEVOREVEX0xJTkVfSU5GTzwvYj4gaXMgZGVmaW5lZCBhcyA8aT4xPC9pPiBhbmQgYSA8aT5maWxlLWl0ZXJhdGlvbjwvaT4KCQkJaXMgaW4gcHJvZ3Jlc3MsIHRoaXMgbWFjcm8gd2lsbCBhdXRvbWF0aWNhbGx5IGluc2VydCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0YXRlIG9mIDxpPmZpbGUtaXRlcmF0aW9uPC9pPi4mbmJzcDsKCQkJVGhpcyBpbmZvcm1hdGlvbiB3aWxsIHNob3cgdGhlIGFsbCBvZiB0aGUgY3VycmVudCBpdGVyYXRpb24gdmFsdWVzIHdpdGggdGhlIGlubmVyIG1vc3QgaXRlcmF0aW9uIGxhc3QuCgkJPC9kaXY+CgkJPGRpdj4KCQkJVGhpcyBpbmZvcm1hdGlvbiBpcyB1c2VmdWwgd2hlbiBlcnJvcnMgbWlnaHQgYmUgc3Bhbm5pbmcgbXVsdGlwbGUgaXRlcmF0aW9ucyBvZiB0aGUgc2FtZSBzb3VyY2UgdGV4dC4mbmJzcDsKCQkJRmluZGluZyBhbnkgZXJyb3JzIGlzIHNvbWV0aW1lcyBsZXNzIHRoYW4gc3RyYWlnaHRmb3J3YXJkLiZuYnNwOwoJCQlVc2Ugb2YgdGhpcyBtYWNybyBjYW4gcHJvdmlkZSBpbmZvcm1hdGlvbiB0byBtYWtlIHRoaXMgbXVjaCBlYXNpZXIuJm5ic3A7CgkJCUZvciBleGFtcGxlLCBpbnN0ZWFkIG9mIGdldHRpbmcgc2V2ZXJhbCBlcnJvcnMgbGlrZSB0aGlzOgoJCQk8ZGl2PjxpPgoJCQkJImZpbGUuaHBwIiwgbGluZSAyOiBlcnJvcjogZXhwZWN0ZWQgYSAiOyI8YnI+CgkJCQkiZmlsZS5ocHAiLCBsaW5lIDQ6IGVycm9yOiBpbXByb3Blcmx5IHRlcm1pbmF0ZWQgbWFjcm8gaW52b2NhdGlvbjxicj4KCQkJPC9pPjwvZGl2PgoJCQlZb3UgbWlnaHQgZ2V0IHNvbWV0aGluZyBsaWtlIHRoaXMgaW5zdGVhZC4uLi4KCQkJPGk+PGRpdj4KCQkJCSJmaWxlLmhwcCBbMV0iLCBsaW5lIDI6IGVycm9yOiBleHBlY3RlZCBhICI7Ijxicj4KCQkJCSJmaWxlLmhwcCBbNV0iLCBsaW5lIDQ6IGVycm9yOiBpbXByb3Blcmx5IHRlcm1pbmF0ZWQgbWFjcm8gaW52b2NhdGlvbjxicj4KCQkJPC9pPjwvZGl2PgoJCQlJdCBpcyBpbW1lZGlhdGVseSBldmlkZW50IHRoYXQgdGhpcyBlcnJvciBpcyBzcGFubmluZyBtdWx0aXBsZSBpdGVyYXRpb25zIG9mIHRoZSBzYW1lIHNvdXJjZSB0ZXh0LiZuYnNwOwoJCQlJZiBpdCB3YXNuJ3QsIHRoZSBzYW1lIGVycm9ycyB3b3VsZCBvY2N1ciBvbiBlYWNoIGl0ZXJhdGlvbi4KCQk8L2Rpdj4KCQk8ZGl2PgoJCQlJdCBtdXN0IGJlIG5vdGVkIGhvd2V2ZXIsIHRoYXQgc29tZSBjb21waWxlcnMgZG9uJ3QgbGlrZSBmaWxlbmFtZXMgdGhhdCBhcmVuJ3QgYWN0dWFsbHkgZmlsZXMuJm5ic3A7CgkJCVRob3NlIGNvbXBpbGVycyB0eXBpY2FsbHkgaXNzdWVzIHdhcm5pbmdzIGFib3V0IHRoZSBiYWQgZmlsZW5hbWUuJm5ic3A7CgkJCVRoaXMgbWFrZXMgaXQgYSBnb29kIGlkZWEgdG8gb25seSBkZWZpbmUgPGI+Qk9PU1RfUFBfQ09ORklHX0VYVEVOREVEX0xJTkVfSU5GTzwvYj4gdG8gPGk+MTwvaT4gPGk+b25seTwvaT4gd2hlbiBkZWJ1Z2dpbmcuCgkJPC9kaXY+Cgk8aDQ+U2VlIEFsc288L2g0PgoJCTx1bD4KCQkJPGxpPjxhIGhyZWY9ImNvbmZpZ19leHRlbmRlZF9saW5lX2luZm8uaHRtbCI+Qk9PU1RfUFBfQ09ORklHX0VYVEVOREVEX0xJTkVfSU5GTzwvYT48L2xpPgoJCTwvdWw+Cgk8aDQ+UmVxdWlyZW1lbnRzPC9oND4KCQk8ZGl2PgoJCQk8Yj5IZWFkZXI6PC9iPiAmbmJzcDs8YSBocmVmPSIuLi9oZWFkZXJzL2RlYnVnL2xpbmUuaHRtbCI+Jmx0O2Jvb3N0L3ByZXByb2Nlc3Nvci9kZWJ1Zy9saW5lLmhwcCZndDs8L2E+CgkJPC9kaXY+Cgk8aDQ+U2FtcGxlIENvZGU8L2g0Pgo8ZGl2PjxwcmU+Ci8vIHNhbXBsZS5jcHAKI2lmICFkZWZpbmVkKDxhIGhyZWY9ImlzX2l0ZXJhdGluZy5odG1sIj5CT09TVF9QUF9JU19JVEVSQVRJTkc8L2E+KQoKICAgI2RlZmluZSA8YSBocmVmPSJjb25maWdfZXh0ZW5kZWRfbGluZV9pbmZvLmh0bWwiPkJPT1NUX1BQX0NPTkZJR19FWFRFTkRFRF9MSU5FX0lORk88L2E+IDEKCiAgICNpbmNsdWRlICZsdDs8YSBocmVmPSIuLi9oZWFkZXJzL2FyaXRobWV0aWMvZGVjLmh0bWwiPmJvb3N0L3ByZXByb2Nlc3Nvci9hcml0aG1ldGljL2RlYy5ocHA8L2E+Jmd0OwogICAjaW5jbHVkZSAmbHQ7PGEgaHJlZj0iLi4vaGVhZGVycy9jYXQuaHRtbCI+Ym9vc3QvcHJlcHJvY2Vzc29yL2NhdC5ocHA8L2E+Jmd0OwogICAjaW5jbHVkZSAmbHQ7PGEgaHJlZj0iLi4vaGVhZGVycy9kZWJ1Zy9saW5lLmh0bWwiPmJvb3N0L3ByZXByb2Nlc3Nvci9kZWJ1Zy9saW5lLmhwcDwvYT4mZ3Q7CiAgICNpbmNsdWRlICZsdDs8YSBocmVmPSIuLi9oZWFkZXJzL2l0ZXJhdGlvbi9pdGVyYXRlLmh0bWwiPmJvb3N0L3ByZXByb2Nlc3Nvci9pdGVyYXRpb24vaXRlcmF0ZS5ocHA8L2E+Jmd0OwoKICAgbmFtZXNwYWNlIHNhbXBsZSB7CgogICAjZGVmaW5lIDxhIGhyZWY9Iml0ZXJhdGlvbl9wYXJhbXNfeC5odG1sIj5CT09TVF9QUF9JVEVSQVRJT05fUEFSQU1TXzE8L2E+ICgzLCAoMSwgNSwgInNhbXBsZS5jcHAiKSkKICAgI2luY2x1ZGUgPGEgaHJlZj0iaXRlcmF0ZS5odG1sIj5CT09TVF9QUF9JVEVSQVRFPC9hPigpCgogICB9IC8vIHNhbXBsZQoKICAgaW50IG1haW4odm9pZCkgewogICAgICByZXR1cm4gMDsKICAgfQoKI2Vsc2UKCiAgICNsaW5lIDxhIGhyZWY9ImxpbmUuaHRtbCI+Qk9PU1RfUFBfTElORTwvYT4oMSwgc2FtcGxlLmNwcCkKCiAgIGludCA8YSBocmVmPSJjYXQuaHRtbCI+Qk9PU1RfUFBfQ0FUPC9hPih4LCA8YSBocmVmPSJpdGVyYXRpb24uaHRtbCI+Qk9PU1RfUFBfSVRFUkFUSU9OPC9hPigpKSk7IC8vIGV4dHJhIHBhcmVudGhlc2lzCiAgIAogICBzdHJ1Y3QgPGEgaHJlZj0iY2F0Lmh0bWwiPkJPT1NUX1BQX0NBVDwvYT4ocywgPGEgaHJlZj0iZGVjLmh0bWwiPkJPT1NUX1BQX0RFQzwvYT4oPGEgaHJlZj0iaXRlcmF0aW9uLmh0bWwiPkJPT1NUX1BQX0lURVJBVElPTjwvYT4oKSkgewogICAgICAvLyBtaXNzaW5nIGEgcGFyZW50aGVzaXMKICAgICAgLy8gLi4uCiAgIH07CgojZW5kaWYKPC9wcmU+PC9kaXY+Cgk8aHIgc2l6ZT0iMSI+Cgk8ZGl2IHN0eWxlPSJtYXJnaW4tbGVmdDogMHB4OyI+CgkJPGk+qSBDb3B5cmlnaHQgPGEgaHJlZj0iaHR0cDovL3d3dy5ob3VzZW1hcnF1ZS5jb20iIHRhcmdldD0iX3RvcCI+SG91c2VtYXJxdWUgT3k8L2E+IDIwMDI8L2k+CgkJPC9icj48aT6pIENvcHlyaWdodCBQYXVsIE1lbnNvbmlkZXMgMjAwMjwvaT4KCTwvZGl2PgoJPGRpdiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDBweDsiPgoJCTxwPjxzbWFsbD5EaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKCQlhY2NvbXBhbnlpbmcgZmlsZSA8YSBocmVmPSIuLi8uLi8uLi8uLi9MSUNFTlNFXzFfMC50eHQiPkxJQ0VOU0VfMV8wLnR4dDwvYT4gb3IKCQljb3B5IGF0IDxhIGhyZWY9CgkJImh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCI+d3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQ8L2E+KTwvc21hbGw+PC9wPgoJPC9kaXY+CjwvYm9keT4KPC9odG1sPgo=