LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gTWFyICAyIDE0OjU3OjM3IDE5OTcgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogWyovKl0KCUNvbXBsZXRlZCB0cmFuc2l0aW9uIHRvIG5ldyBXaW4zMiB0eXBlcy4KCgkqIFt0b29scy9idWlsZC5jXQoJQ2hhbmdlZCBDYWxsVG8xNl9yZWdzIHRvIHRha2UgYSBDT05URVhUIGFyZ3VtZW50LgoKCSogW21lbW9yeS92aXJ0dWFsLmNdCglSZXdyb3RlIFZpcnR1YWwqIGZ1bmN0aW9ucy4gSW1wbGVtZW50ZWQgQ3JlYXRlRmlsZU1hcHBpbmcgYW5kCglPcGVuRmlsZU1hcHBpbmcuIEJyb2tlIE1hcFZpZXdPZkZpbGUgOy0pCgoJKiBbd2luMzIvazMyb2JqLmNdCglJbXBsZW1lbnRlZCBuYW1lZCBvYmplY3RzLgoKU3VuIE1hciAgMiAwMDozMzoyMSAxOTk3ICBNaWtvbGFqIFphbGV3c2tpIDx6bWlrb2xhakBmcmVlLnBvbGJveC5wbD4KCgkqIFttaXNjL29sZTJubHMuY10gW3Jlc291cmNlcy9zeXNyZXNfUGwuY10KCUFkZGVkIFBvbGlzaCBsYW5ndWFnZSBzdXBwb3J0LgoKU2F0IE1hciAgMSAxMzozMToyNSAxOTk3ICBEYXZpZCBGYXVyZSA8ZGF2aWQuZmF1cmVAaWZoYW15Lmluc2EtbHlvbi5mcj4KCgkqIFt3aW5kb3dzL2tleWJvYXJkLmNdCglXcm90ZSBWa0tleVNjYW4gYW5kIHRlc3RlZCB3aXRoIFdpbndvcmQuIFdvcmtzIG9rIGV4Y2VwdCBmb3IgZGVhZAoJY2hhcnMuCgpGcmkgRmViIDI4IDA5OjM0OjAzIDE5OTcgIEpvaG4gSGFydmV5IDxqb2huQGRpdmlzaW9uLmNvLnVrPgoKCSogW2dyYXBoaWNzL3dpbjE2ZHJ2L2ZvbnQuY10gW2dyYXBoaWNzL3dpbjE2ZHJ2L2luaXQuY10KCSAgW2dyYXBoaWNzL3dpbjE2ZHJ2L29iZWN0cy5jXQoJQWRkZWQgc3RhcnQgb2YgU2VsZWN0T2JqZWN0IGNhbGwgZm9yIHByaW50ZXIgZHJpdmVyLiBXcml0ZSBzaG91bGQKCW5vdyBydW4gd2l0aCB0aGUgcHJpbnRlciBkcml2ZXIgZW5hYmxlZC4KCldlZCBGZWIgMjYgMjA6MDM6MzIgMTk5NyAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbZGVidWdnZXIvKi5jXQoJUmUtYWRkZWQgYSBkaXNhc3NlbWJseSBjb21tYW5kIChsaXN0IHNlcnZlcyBhbm90aGVyIGZ1bmN0aW9uYWxpdHkKCW5vdykuCgoJKiBbbG9hZGVyL3BlX3Jlc291cmNlLmNdCglBZGRlZCAjIHN1cHBvcnQuCgoJKiBbbWlzYy9vbGUybmxzLmNdCglHZXRTdHJpbmdUeXBlKiBhZGRlZC4KCgkqIFtvYmplY3RzL2NvbG9yLmNdCglWR0ExNiBmaXhlcy4KCgkqIFt3aW5kb3dzL2NsYXNzLmNdCglMb29rIGZvciBnbG9iYWwgd2lkZ2V0IGNsYXNzZXMgdG9vIGluIEdldENsYXNzSW5mbzMyLgoKCSogW3dpbmRvd3Mvc3lzbWV0cmljcy5jXSBbaW5jbHVkZS93aW5kb3dzLmhdCglBZGRlZCBXaW4zMiBzeXNtZXRyaWNzLgoKU2F0IEZlYiAyMiAyMzo1NjoyOSAxOTk3ICBKdWtrYSBJaXZvbmVuIDxpaXZvbmVuQGNjLmhlbHNpbmtpLmZpPgoKCSogW2RvY3VtZW50YXRpb24vbGFuZ3VhZ2VzXQoJVGhlIGZvdXJ0aCBjYXNlIHVwZGF0ZWQuCgoJKiBbaWYxNjMyL250ZGxsLnNwZWNdCglBZGRlZCBzb21lIGlzKiBhbmQgdG8qIGZ1bmN0aW9ucy4KClNhdCBGZWIgMjIgMjM6MDU6NDcgMTk5NyAgTW9ydGVuIFdlbGluZGVyICA8dGVycmFAZGlrdS5kaz4KCgkqIFtjb25maWd1cmUuaW5dCglBZGQgdGVzdHMgZm9yIHdhaXQ0IGFuZCB3YWl0cGlkLgoKCSogW2xvYWRlci9zaWduYWwuY10KCUNsZWFuIHVwIE9TLWRlcGVuZGVudCBjb2RlLiAgSSBob3BlIEkgZ290IGl0IHJpZ2h0LCA6LSkKCgkqIFt0b29scy93aW5lY29uZl0KCVJlY29nbmlzZSB2ZmF0IGZpbGUgc3lzdGVtcy4gIElnbm9yZSBmbG9wcHkgZHJpdmVzIHNwZWNpZmllZCBpbgoJL2V0Yy9mc3RhYi4KCgkqIFtmaWxlcy8qXQoJRml4IGZ1bmN0aW9uIG5hbWVzIGluIGVycm9yIG1lc3NhZ2VzLgoKU2F0IEZlYiAyMiAwNjoxNToxMyAxOTk3ICBQYWJsbyBTYXJhdHhhZ2EgPHNydHhnQGNoYW5hZS5zdGJlbi5iZT4KCgkqIFt3aW5kb3dzL2tleWJvYXJkLmNdIFt3aW5kb3dzL21lc3NhZ2UuY10KCVN1cHBvcnQgZm9yIG1vcmUgbGF0aW4gYWxwaGFiZXQgZGVhZCBrZXlzIGZvciBpc28tODg1OS17MSwyLDMsNCw5fQoJY2hhcmFjdGVycyBzZXRzLgoKRnJpIEZlYiAyMSAyMDozNzo1MCAxOTk3ICBIdXcgRCBNIERhdmllcyA8aC5kYXZpZXMxQHBoeXNpY3Mub3hmb3JkLmFjLnVrPgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUZpeCBpbmNvcnJlY3QgYXJnIG9yZGVyIGluIExPQ0FMX0FsbG9jKCkgY2FsbC4KCkZyaSBGZWIgMjEgMTg6MTk6MTcgMTk5NyAgQW5kcmV3IFRheWxvciAgPGFuZHJld0ByaXNjYW4uY29tPgoKCSogW211bHRpbWVkaWEvbW1zeXN0ZW0uY10gW211bHRpbWVkaWEvbWNpc3RyaW5nLmNdCglGaXhlZCBidWcgcmVsYXRlZCB0byBkZXZpY2UgSURzIHJldHVybmVkIGJ5IG11bHRpbWVkaWEKCXN5c3RlbS4gIEltcGxlbWVudGVkIG1jaUdldERldmljZUlELgoKU2F0IEZlYiAxNSAwMDo1ODoxOSAxOTk3ICBKaW1lbiBDaGluZyAgPGpjaGluZ0BhbG9oYS5jb20+CgoJKiBbZGVidWdnZXIvZGJnLnldCglEbyBub3QgZGVyZWZlcmVuY2UgaW52YWxpZCBleHByZXNzaW9ucy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU2F0IEZlYiAxNSAxMTo1OToxNyAxOTk3ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFsqLypdCglDb252ZXJ0ZWQgYSBsb3Qgb2YgZnVuY3Rpb25zIHRvIFdpbjMyIHR5cGVzLgoJUmVtb3ZlZCBIV05EIHR5cGUuCgpGcmkgRmViIDE0IDE1OjA5OjE5IDE5OTcgIE9ubm8gSG92ZXJzIDxvbm5vQHN0YWNrLm5sPgoKCSogW21lbW9yeS9nbG9iYWwuY10KCUltcGxlbWVudGVkIEdNRU1fTU9WRUFCTEUgYmxvY2tzIGZvciBXaW4zMi4KCkZyaSBGZWIgMTQgMDA6MjQ6MzkgMTk5NyAgQWxleCBLb3JvYmthIDxhbGV4QHRyYW50b3IucGhhcm0uc3VueXNiLmVkdT4KCgkqIFtsb2FkZXIvdGFzay5jXSBbd2luZG93cy9xdWV1ZS5jXQoJRG8gbm90IHJlYWQgWCBldmVudHMgd2hpbGUgaW4gdGhlIGludGVydGFzayBTZW5kTWVzc2FnZSgpLgoKCSogW21pc2MvbHN0ci5jXQoJRml4ZWQgQ2hhclByZXYzMkEoKS4KCgkqIFt3aW5kb3dzL2hvb2suY10gW2luY2x1ZGUvaG9vay5oXQoJUmVzdG9yZWQgYnJva2VuIFdIX0NBTExXTkRQUk9DIGZ1bmN0aW9uYWxpdHkgZm9yIGRpYWxvZ3MsIGV0Yy4uLgoKCSogW3dpbmRvd3Mvd2luLmNdIFt3aW5kb3dzL2RlZnduZC5jXSBbd2luZG93cy9tZGkuY10KCSAgW3dpbmRvd3MvZXZlbnQuY10gW2NvbnRyb2xzL2VkaXQuY10gCglBZGRlZCBXSU5fSVNXSU4zMiBmbGFnIHRvIHdpbmRvd3MgY3JlYXRlZCBieSBXaW4zMiBjYWxscy4gCglTZXZlcmFsIG5ldyBXaW4zMiBtZXNzYWdlcyBhcmUgc2VudCB3aGVuIHRoaXMgZmxhZyBpcyBvbi4KCQoJKiBbbXNkb3MvZG9zbWVtLmNdIFttZW1vcnkvZ2xvYmFsLmNdCglTb21lIGNoYW5nZXMgaW4gRE9TIG1lbW9yeSBhbGxvY2F0aW9uLgoKRnJpIEZlYiAgNyAyMTo0NjowMyAxOTk3ICBBbmRyZXcgVGF5bG9yICA8YW5kcmV3QHJpc2Nhbi5jb20+CgoJKiBbd2luMzIvc2VjdXJpdHkuY10KCUFkZGVkIFNJRCBtYW5pcHVsYXRpb24gZnVuY3Rpb25zLgoKCSogW2luY2x1ZGUvZGVidWcuaF0KCUFkZGVkIGRlYnVnZ2luZyBjbGFzcyAic2VjdXJpdHkiLgoKRnJpICBGZWIgNyAyMDo0NjozMyAxOTk3ICBSb2JlcnQgUG91bGlvdCA8a3J5bm9zQGNsaWMubmV0PgoKCSogW2RlYnVnZ2VyL21zYy5jXSBbZGVidWdnZXIvc291cmNlLmNdIAoJICBbZG9jdW1lbnRhdGlvbi93aW5lX29zMi50eHRdIFtsb2FkZXIvc2lnbmFsLmNdCglTb21lIG1vcmUgY2hhbmdlcyBmb3IgT1MvMi4gRG9lc24ndCB3b3JrIHlldC4KCkZyaSAgRmViIDcgMDk6MzE6MTcgMTk5NyAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbc2NoZWR1bGVyL3Byb2Nlc3MuY10KCUFkZGVkIEV4cGFuZEVudmlyb25tZW50U3RyaW5ncyouCgoJKiBbbWlzYy9udGRsbC5jXSBbaW5jbHVkZS9udGRsbC5oXQoJQWRkZWQgc29tZSBuZXcgZnVuY3Rpb25zLgoKCSogW29iamVjdHMvY3Vyc29yaWNvbi5jXQoJQ1VSU09SSUNPTl9Mb2FkSGFuZGxlcjogY2hlY2sgYWdhaW5zdCBzb21lIGJpemFycmUgb3V0IG9mIG1lbW9yeQoJY29uZGl0aW9ucy4KCQoJKiBbd2luZG93cy9tZGkuY10KCUZpeGVkIERlZkZyYW1lUHJvYzMyKiwgYWRkZWQgVHJhbnNsYXRlTURJU3lzQWNjZWwzMi4KCldlZCBGZWIgIDUgMDE6MzE6MDUgMTk5NyAgSm9obiBaZXJvIDxqb2huQGdsb2JlLmdyYXBoaXNvZnQuaHU+CgoJKiBbcmVzb3VyY2VzL3N5c3Jlc19IdS5yY10gW21pc2Mvb2xlMm5scy5jXSBbbWlzYy9tYWluLmNdCgkgIFtwcm9ncmFtcy9wcm9nbWFuL0h1LnJjXSBbcHJvZ3JhbXMvd2luaGVscC9IdS5yY10KCUFkZGVkIEh1bmdhcmlhbiBsYW5ndWFnZSBzdXBwb3J0LgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gRmViICAyIDEyOjMxOjAzIDE5OTcgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2ZpbGVzL2RyaXZlLmNdCglGaXhlZCBTZXRDdXJyZW50RGlyZWN0b3J5KCkgdG8gYWxzbyBjaGFuZ2UgdGhlIGN1cnJlbnQgZHJpdmUuCgoJKiBbd2luMzIvZXhjZXB0LmNdIFt0b29scy9idWlsZC5jXQoJVXNlIFdpbjMyIHJlZ2lzdGVyIGZ1bmN0aW9ucyB0byBpbXBsZW1lbnQgZXhjZXB0aW9uIGhhbmRsaW5nLgoJRml4ZWQgVW5oYW5kbGVkRXhjZXB0aW9uRmlsdGVyLgoKRnJpIEphbiAzMSAxNTo0Mjo0MSAgMTk5NyAgRGF2aWQgRmF1cmUgIDxkYXZpZC5mYXVyZUBpaGFteS5pbnNhLWx5b24uZnI+CgoJKiBbd2luZG93cy9rZXlib2FyZC5jXQoJQWRkZWQgS0VZQk9BUkRfR2VuZXJhdGVNc2cgdG8gZ2VuZXJhdGUgQ2FwcyBMb2NrIGFuZCBOdW1Mb2NrIGV2ZW50cwoJQWRkZWQgY2FsbHMgdG8gS0VZQk9BUkRfR2VuZXJhdGVNc2cgd2hlbiB0aGUga2V5IGlzIHByZXNzZWQvcmVsZWFzZWQKCW9yIHdoZW4gdGhlIHN0YXRlIGhhcyBjaGFuZ2VkLCBvdXQgb2Ygd2luZS4KCUNoYW5nZWQgdHlwZSAzLXN0YXRlICdUb2dnbGVLZXlTdGF0ZScgdG8gYm9vbGVhbi4gVGhlIE9uL09mZiBpcyBnaXZlbgoJYnkgSW5wdXRLZXlTdGF0ZVRhYmxlLgoKV2VkIEphbiAyOSAyMTo1MzowNCAxOTk3ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtsb2FkZXIvKnJlc291cmNlLmNdW2lmMTYzMi90aHVuay5jXQoJRW51bVJlc291cmNlKiBhZGRlZC4KCgkqIFtsb2FkZXIvcGVfcmVzb3VyY2UuXSBbbG9hZGVyL3Jlc291cmNlLmNdCglTaXplb2ZSZXNvdXJjZTMyKCksIExvYWRBY2NlbGVyYXRvcnMzMigpIGFkZGVkLgoKCSogW21pc2MvbHN0ci5jXQoJRm9ybWF0TWVzc2FnZSAlbiBhZGRlZC4KCgkqIFttaXNjL2NydGRsbC5jXVtpbmNsdWRlL2N0cmRsbC5oXVtpZjE2MzIvY3J0ZGxsLnNwZWNdCglfY2hkcml2ZSxfZXJybm8sX2lzY3R5cGUgYWRkZWQuCgoJKiBbbWlzYy9jcHUuY10KCVJlcGxhY2VkIHJ1bnRpbWVfY3B1IGJ5IEdldFN5c3RlbUluZm8oKS4KCgkqIFt3aW5kb3dzL2hvb2suY11baW5jbHVkZS9ob29rLmhdCglGaXhlZCBtYXBwaW5nIG9mIGhvb2tzIHRvIHdpbjMyL3VuaWNvZGUuCgoJKiBbd2luZG93cy9rZXlib2FyZC5jXSBbd2luZG93cy9kZWZ3bmQuY10KCVVwZGF0ZWQgdG8gd2luMzIgc3RhbmRhcmQuCglBTFQtPE1lbnVrZXk+IGZpeGVkLgoKCSogW3dpbmRvd3MvcXVldWUuY10KCUdldFdpbmRvd1RocmVhZFByb2Nlc3NJZCgpIGltcGxlbWVudGVkLgoKTW9uIEphbiAyNyAxNjo0Mjo0OSAxOTk3ICBKb2huIEhhcnZleSA8am9obkBkaXZpc2lvbi5jby51az4KCgkqIFtncmFwaGljcy9tZXRhZmlsZWRydi8qXSBbZ3JhcGhpY3MveDExZHJ2LypdCgkgIFtvYmplY3RzL2JpdG1hcC5jXSBbb2JqZWN0cy9icnVzaC5jXSBbb2JqZWN0cy9mb250LmNdCgkgIFtvYmplY3RzL2dkaW9iai5jXSBbb2JqZWN0cy9wZW4uY10KCU1vdmVkIFNlbGVjdE9iamVjdCB0byBncmFwaGljcyBkcml2ZXJzLiBQcmludGVyIHN1cHBvcnQgbm93IHdvcmtzCglpbiBhIGZldyBjYXNlcyBidXQgaXMgZGVmaW5pdGVseSBub3QgY29tcGxldGUuIEdlbmVyaWMvdGV4dCBkcml2ZXIKCXdvcmtzLiBUaGUgcG9zdHNjcmlwdCBkcml2ZXIgd29ya3MgaWYgdHJ1ZSB0eXBlIGZvbnRzIGFyZSBkaXNhYmxlZAoJZnJvbSB0aGUgY29udHJvbCBwYW5lbC4gVG8gZW5hYmxlIHByaW50ZXIgc3VwcG9ydCBhZGQgUHJpbnRlcj1vbgoJdG8gdGhlIHdpbmUgc2VjdGlvbiBvZiB5b3VyIHdpbmUuY29uZiBmaWxlLiBUaGlzIGNhdXNlcyB3cml0ZSBub3QKCXRvIHdvcmsgcHJvcGVybHkuIEkga25vdyB0aGF0IHNldmVyYWwgb3RoZXIgcHJpbnRlciBkcml2ZXJzIGRvIG5vdAoJd29yay4KCgkqIFt0b29scy9idWlsZC5jXQoJTWFrZSAuc3RhYnMgbm90IHVzZWQgZm9yIHN2cjQgc2luY2UgaXQgZG9lc24ndCB1c2UgR05VIGFzc2VtYmxlci4KCgkqIFttaXNjL2ZvbnRlbmdpbmUuY10KCU1ha2Ugc3VyZSBhIHByaW50ZiBkb2Vzbid0IGNyYXNoIHRoZSBzeXN0ZW0uCgpTYXQgSmFuIDI1IDE1OjUzOjM1IDE5OTcgIEh1dyBEIE0gRGF2aWVzIDxoLmRhdmllczFAcGh5c2ljcy5veGZvcmQuYWMudWs+CgoJKiBbb2JqZWN0cy9tZXRhZmlsZS5jXQoJRml4ZWQgc29tZSBwcm9ibGVtcyB3aXRoIFBsYXlNZXRhRmlsZVJlY29yZCgpLgoKCSogW29iamVjdHMvZGMuY10KCWhDbGlwUmduIGdldHMgaW5pdGlhbGl6ZWQgaW4gR2V0RENTdGF0ZSgpLgoKRnJpIEphbiAyNCAyMToyMjoyNiAxOTk3ICBQaGlsaXBwZSBEZSBNdXl0ZXIgIDxwaGRtQGluZm8udWNsLmFjLmJlPgoKCSogW2RlYnVnZ2VyL3N0YWJzLmNdCglIYW5kbGUgZmlsZSBuYW1lcyBiZWdpbm5pbmcgd2l0aCAnLycuCgpGcmkgSmFuIDI0IDE4OjMzOjA0IDE5OTcgIFJvYmVydCBQb3VsaW90IDxrcnlub3NAY2xpYy5uZXQ+CgoJKiBbKi8qXQoJU29tZSBtb3JlIHBhdGNoZXMgZm9yIE9TLzIgc3VwcG9ydC4KCkZyaSBKYW4gMjQgMTE6MzA6NDEgMTk5NyAgQmFuZyBKdW4tWW91bmcgIDxiYW5nanlAbm93bnVyaS5ub3djb20uY28ua3I+CgoJKiBbcmVzb3VyY2VzL3N5c3Jlc19Lby5yY10KCVVwZGF0ZWQgc3VwcG9ydCBmb3IgS29yZWFuIChLbykgbGFuZ3VhZ2UuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBKYW4gMTkgMTE6NDY6NDggMTk5NyAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbbG9hZGVyL21vZHVsZS5jXQoJRml4ZWQgTG9hZE1vZHVsZSgpIHRvIGFsd2F5cyBjYWxsIHRoZSBETEwgaW5pdGlhbGl6YXRpb24gY29kZS4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglNb3ZlZCBhbGwgdGhlIGtleWJvYXJkIHN0dWZmIHRvIHdpbmRvd3Mva2V5Ym9hcmQuYwoKCSogW3Rvb2xzL2J1aWxkLmNdCglGaXhlZCBXaW4zMiByZWdpc3RlciBmdW5jdGlvbnMuCgpTYXQgSmFuIDE4IDIyOjI0OjQxIDE5OTcgIERhdmlkIE1ha2VwZWFjZSAgPEQuTWFrZXBlYWNlQG1haWxib3gudXEub3ouYXU+CgogICAgICAgICogW3Rvb2xzL21ha2VkZXAuY10KICAgICAgICBGaXhlZCBidWcgd2hpY2ggY2F1c2VzIFNFR1Ygb24gU29sYXJpcyB4ODYuCgpGcmkgSmFuIDE3IDE4OjMyOjI3IDE5OTcgIEZyYW5zIHZhbiBEb3Jzc2VsYWVyIDxkb3Jzc2VsQHJ1bGhtcGM0OS5MZWlkZW5Vbml2Lm5sPgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUltcGxlbWVudGVkIFdNX1VORE8sIFdNX0NPTlRFWFRNRU5VICh0ZW1wb3JhcnkgdXNpbmcgV01fUkJVVFRPTlVQKSwKCVdNX0NPTU1BTkQsIFdNX0lOSVRQT1BVUE1FTlUsIFdNX1NZU0tFWURPV04uCglGaXhlZCBFTV9TRVRTRUwgYW5kIHNvbWUgbWlub3IgYnVncyAoZmVhdHVyZXMpLgoJSGVuY2U6IGZ1bGx5IGZ1bmN0aW9uYWwgdW5kbyBhbmQgYSB3aW45NSBtZW51IHdpdGggdGhlIHJpZ2h0IG1vdXNlCgkJYnV0dG9uLgoKCSogW2luY2x1ZGUvcmVzb3VyY2VzLmhdIFtyZXNvdXJjZXMvVE9ET10gW3Jlc291cmNlcy9zeXNyZXNfPz8ucmNdCglBZGRlZCBhIGNvbnRleHQgbWVudSBmb3IgdGhlIGVkaXQgY29udHJvbC4KCVRyYW5zbGF0aW9ucywgcGxlYXNlIC4uLgoKRnJpIEphbgkxNyAwODoyOTo1MiAxOTk3ICBEYXZpZCBGYXVyZSA8ZGF2aWQuZmF1cmVAaWZoYW15Lmluc2EtbHlvbi5mcj4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglNb3ZlIEVWRU5UX1RvQXNjaWkgdG8gd2luZG93cy9rZXlib2FyZC5jICh3aGVyZSBuYW1lIFRvQXNjaWkpCglGaXhlZCBLZXlwYWQga2V5cyAwLTkgYW5kIC4gaW4gRVZFTlRfZXZlbnRfdG9fdmtleS4KCUFkZGVkIDMtc3RhdGUgaGFuZGxpbmcgb2YgdG9nZ2xlIGtleXMgKENhcHNMb2NrLCBOdW1Mb2NrKSBpbiBvcmRlcgoJdG8gbWFrZSB0aGVtIHdvcmsgd2l0aCBhbnkgWCBzZXJ2ZXIuCglUb2dnbGUga2V5cyBub3cgZ2VuZXJhdGUgV01fS0VZRE9XTiBhbmQgV01fS0VZVVAgb24gZWFjaCBwcmVzc2luZy4KCgkqIFtpbmNsdWRlL2tleWJvYXJkLmhdCglUb3RhbGx5IHJlcGxhY2VkIHRoZSBmaWxlIChmb3JtZXJseSBjb250YWluaW5nIHRoZSB2a2Nhc2UgZGVmaW5pdGlvbnMpCglieSB0aGUgZGVjbGFyYXRpb24gb2YgJ2V4dGVybicgdmFyaWFibGVzIGNvbnRhaW5lZCBieSBldmVudC5jIGFuZCB1c2VkCglieSBrZXlib2FyZC5jCgkKCSogW3dpbmRvd3Mva2V5Ym9hcmQuY10KCVN0YXJ0ZWQgdG8gcmV3cml0ZSBWa0tleVNjYW4gYW5kIE1hcFZpcnR1YWxLZXksIHRvIG1ha2UgdGhlbSB1c2UgdGhlIAoJdGFibGUga2V5YzJ2a2V5IG9yIFggZnVuY3Rpb25zIG9ubHkuCglUb0FzY2lpIDogYWRkZWQga2V5cGFkIDAtOSBhbmQgLiBzcGVjaWFsIGNhc2UuCglDaGFuZ2VkIHRvZ2dsZSBrZXlzIGFjdGl2ZSBtYXNrIGZyb20gMHg4MCB0byAweDEuCgoJKiBbbWlzYy9rZXlib2FyZC5jXQoJRmlsZSBkZWxldGVkLiBDb250ZW50cyBtb3ZlZCB0byB3aW5kb3dzL2tleWJvYXJkLmMuCgoJKiBbbWlzYy9tYWluLmNdCglBZGRlZCBwdXRlbnYgWEtCX0RJU0FCTEUgdG8gZGlzYWJsZSBYS0IgZXh0ZW5zaW9uICh3aGljaCwgd2hlbgoJcHJlc2VudCwgY2F1c2VzIEFsdEdyIHRvIGNoYW5nZSBrZXlib2FyZCBncm91cCBpbnN0ZWFkIG9mIGJlaW5nIGEKCW1vZGlmaWVyKS4KClR1ZSBKYW4gMTQgMjI6NTY6NDMgMTk5NyAgUGhpbGlwcGUgRGUgTXV5dGVyICA8cGhkbUBpbmZvLnVjbC5hYy5iZT4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglEbyBub3QgYXNzdW1lIE51bUxvY2tNYXNrIGlzIE1vZDJNYXNrLCBidXQgY29tcHV0ZSBpdCBieSBzY2FubmluZwoJb3V0cHV0IG9mIFhHZXRNb2RpZmllck1hcHBpbmcgZm9yIFhLX051bV9Mb2NrLgoKVHVlIEphbiAxNCAxNTo0OTo0OSAxOTk3ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtsb2FkZXIvcGVfKi5jXSBbaW5jbHVkZS9wZWV4ZS5oXSBbaW5jbHVkZS9yZXNvdXJjZTMyLmhdCgkgIFtkZWJ1Z2dlci8qLmNdCglHZW5lcmFsIGNsZWFuIHVwLgoJQ2hhbmdlZCBkZWZpbmVzL3N0cnVjdHVyZXMgdG8gbWF0Y2ggV2luZG93cyBOVCBTREsuCgoJKiBbbG9hZGVyL21haW4uY10KCURvbid0IGNyYXNoIG9uIGVtcHR5IGNvbW1hbmQtbGluZS4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJd2lucG9zLmMgbWFkZSB3aW4zMiBjbGVhbi4KCgkqIFttaXNjL250ZGxsLmNdCglTb21lIHN0cmluZyBjb252ZXJzaW9uIGFkZGl0aW9ucy4KCgkqIFtmaWxlcy9maWxlLmNdCglHZXRGaWxlQXR0cmlidXRlcy9HZXRUZW1wRmlsZU5hbWUgZml4ZWQuCgoJKiBbbWlzYy92ZXIuY10KCVZlckluc3RhbGxGaWxlIGltcGxlbWVudGVkLgoKTW9uIEphbiAxMyAxNTowMzoxMSAxOTk3ICBQaGlsaXBwZSBEZSBNdXl0ZXIgIDxwaGRtQGluZm8udWNsLmFjLmJlPgoKCSogW3Rvb2xzL2J1aWxkLmNdOiBVc2UgUFJFRklYIGFsc28gaW4gc3RhYnMgbWVzc2FnZXMuCgpNb24gSmFuIDEzIDEwOjQwOjMzIDE5OTcgIEpvaG4gSGFydmV5IDxqb2huQGRpdmlzaW9uLmNvLnVrPgoKCSogW2dyYXBoaWNzL3dpbjE2ZHJ2LypdIFtpbmNsdWRlL3dpbjE2ZHJ2LmhdCglNYW55IGZpeGVzIGFuZCBzb21lIG5ldyBmZWF0dXJlcy4KCgkqIFtncmFwaGljcy94MTFkcnYvZm9udC5jXSBbZ3JhcGhpY3MveDExZHJ2L2luaXQuY10KCSAgW2luY2x1ZGUveDExZHJ2LmhdIFtvYmplY3RzL2ZvbnQuY10KCUdldFRleHRNZXRyaWNzKCkgbW92ZWQgdG8gZ3JhcGhpY3MgZHJpdmVyLgoKCSogW2lmMTYzMi9nZGkuc3BlY10gW21pc2MvZm9udGVuZ2luZS5jXSBbbWlzYy9NYWtlZmlsZS5pbl0KCU5ldyBkdW1teSBFbmdpbmVFbnVtZXJhdGVGb250LCBFbmdpbmVSZWFsaXplRm9udCBmdW5jdGlvbnMuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglURVhURk9STTE2IGFuZCBGT05USU5GTzE2IHN0cnVjdHVyZSBkZWZpbml0aW9ucyBtb3ZlZCBoZXJlIGZyb20KCWluY2x1ZGUvd2luMTZkcnYuaAoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTYXQgSmFuIDExIDE4OjE3OjU5IDE5OTcgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2NvbnRyb2xzL21lbnUuY10KCVVwZGF0ZWQgdG8gbmV3IFdpbjMyIHR5cGVzLgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUZpeGVkIFdpbmZpbGUgZXh0ZW5kZWQgc2VsZWN0aW9uIGJ1Zy4KCgkqIFtmaWxlcy9kaXJlY3RvcnkuY10KCUNoYW5nZWQgRElSX1NlYXJjaFBhdGggdG8gcmV0dXJuIGJvdGggbG9uZyBhbmQgc2hvcnQgZmlsZSBuYW1lcy4KCgkqIFtmaWxlcy9kb3NfZnMuY10KCUltcGxlbWVudGVkIFZGQVQgaW9jdGwgdG8gcmV0cmlldmUgdGhlIG9yaWdpbmFsIHNob3J0IGZpbGVuYW1lcwoJZnJvbSBhIFZGQVQgZmlsZXN5c3RlbSAoTGludXggb25seSBmb3Igbm93KS4KCVJlcGxhY2VkIERPU0ZTX0dldFVuaXhGaWxlTmFtZSgpL0RPU0ZTX0dldERvc1RydWVOYW1lKCkgYnkKCURPU19HZXRGdWxsTmFtZSgpLgoJUHJvcGVybHkgaW1wbGVtZW50ZWQgR2V0U2hvcnRQYXRoTmFtZSgpIGFuZCBHZXRGdWxsUGF0aE5hbWUoKS4KCU1hZGUgYWxsIGZ1bmN0aW9ucyByZS1lbnRyYW50LgoKCSogW2ZpbGVzL2ZpbGUuY10gW21pc2MvbWFpbi5jXQoJUmVwbGFjZWQgLWFsbG93cmVhZG9ubHkgb3B0aW9uIGJ5IC1mYWlscmVhZG9ubHkuIFRoZSBkZWZhdWx0IGlzCglub3cgdG8gcmVwb3J0IHN1Y2Nlc3Mgd2hlbiBvcGVuaW5nIGEgcmVhZC1vbmx5IGZpbGUgZm9yIHdyaXRpbmcuCgoJKiBbb2JqZWN0cy9tZXRhZmlsZS5jXQoJRml4ZWQgYnVnIGluIERJQiBiaXRtYXBzIHBvaW50ZXIgY2FsY3VsYXRpb24uCgoJKiBbc2NoZWR1bGVyL3Byb2Nlc3MuY10KCUltcGxlbWVudGVkIGVudmlyb25tZW50IHN0cmluZ3MgYW5kIEdldC9TZXRTdGRIYW5kbGUgd2l0aCBwcm9jZXNzCiAJZW52aXJvbm1lbnQgYmxvY2suCgoJKiBbdG9vbHMvYnVpbGQuY10KCVJld3JvdGUgQnVpbGRDb250ZXh0MzIoKSB0byBhdm9pZCBpbnN0cnVjdGlvbnMgdGhhdCBtYXkgbm90IGJlCglzdXBwb3J0ZWQgYnkgYWxsIGFzc2VtYmxlcnMuCgkKRnJpIEphbiAxMCAxNzoxMTowOSAxOTk3ICBEYXZpZCBGYXVyZSAgPGRhdmlkLmZhdXJlQGlmaGFteS5pbnNhLWx5b24uZnI+CgoJKiBbd2luZG93cy9ldmVudC5jXQoJQ3JlYXRlZCB0YWJsZSBrZXljMnZrZXksIHdoaWNoIGFzc29jaWF0ZSBhIHZrZXkoK2V4dGVuZGVkIGJpdCkgdG8KCWFueSBrZXljb2RlLiBDaGFuZ2VkIEVWRU5UX2V2ZW50X3RvX3ZrZXkgdG8gdXNlIHRoaXMgdGFibGUgdG8KCXJldHVybiB0aGUgY29ycmVjdCB2a2V5LiBDaGFuZ2VkIEVWRU5UX1RvQXNjaWkgdG8gZ2V0IHRoZSBrZXljb2RlCglmcm9tIHRoaXMgdGFibGUgdG9vLiAgQXNzaWduZWQgT0VNIHNwZWNpZmljIHZrZXlzIGFyYml0cmFyaWx5LgoKRnJpIEphbiAxMCAwOToyNjoxNyAxOTk3ICBKb2huIEhhcnZleSA8am9obkBkaXZpc2lvbi5jby51az4KCgkqIFttaXNjL3dpbnNvY2suY10gW21pc2Mvd2luc29jX2FzeW5jLmNdCiAgICAgICAgRml4ZWQgc3ZyNCBoZWFkZXIgZmlsZXMuCiAgICAgICAgQ2hhbmdlZCBiemVybygpIHRvIG1lbXNldCgpLgoKCSogW3Rvb2xzL2ZudDJiZGYuY10KICAgICAgICBSZW1vdmVkIGJjb3B5KCkgYW5kIHVzZWQgbWVtY3B5KCkgaW5zdGVhZC4KCgkqIFtkZWJ1Z2dlci9tc2MuY10KICAgICAgICBJbmNsdWRlIHN0cmluZy5oIGluc3RlYWQgb2Ygc3RyaW5ncy5oCgoJKiBbZGVidWdnZXIvc3RhYnMuY10KICAgICAgICBJbmNsdWRlIHN0cmluZy5oIGluc3RlYWQgb2Ygc3RyaW5ncy5oLgogICAgICAgIERlZmluZSBfX0VMRl9fIGZvciBzdnI0IHN5c3RlbXMuCgoJKiBbbG9hZGVyL3NpZ25hbC5jXQogICAgICAgIFVzZSB3YWl0KCkgaW5zdGVhZCBvZiB3YWl0NCgpIHdoaWNoIGRvZXNudCBleGlzdCBvbiBVbml4d2FyZS4KCgkqIFttZW1vcnkvZ2xvYmFsLmNdCiAgICAgICAgVXNlIHN5c2NvbmYoKSBpbnN0ZWFkIG9mIGdldHBhZ2VzaXplKCkgZm9yIHN2cjQgc3lzdGVtcy4KClRodSBKYW4gIDkgMjE6MDc6MjAgMTk5NyAgUm9iZXJ0IFBvdWxpb3QgPGtyeW5vc0BjbGljLm5ldD4KCgkqIFtNYWtlLnJ1bGVzLmluXSBbTWFrZWZpbGUuaW5dIFttYWtlX29zMi5zaF0gW3JjL01ha2VmaWxlLmluXQoJICBbdG9vbHMvTWFrZWZpbGUuaW5dIFtkb2N1bWVudGF0aW9uL3dpbmVfb3MyLnR4dF0KCVBhdGNoZXMgZm9yIE9TLzIgc3VwcG9ydC4gTm90ZSB0aGF0IGl0IGRvZXNuJ3QgY29tcGlsZSB5ZXQuCgpUdWUgSmFuICA3IDIwOjAzOjUzIDE5OTcgIEVyaWMgWW91bmdkYWxlIDxlcmljQHN1YjIzMDQuamljLmNvbT4KCgkqIFtkZWJ1Z2dlci8qXQoJTWFueSBtb3JlIGRlYnVnZ2VyIGltcHJvdmVtZW50cyAoc2VlIGRlYnVnZ2VyL1JFQURNRSBmb3IgZGV0YWlscykuCgpUdWUgSmFuICA3IDE1OjEyOjIxIDE5OTcgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10gW29iamVjdHMvdGV4dC5jXSBbZ3JhcGhpY3MveDExZHJ2LypdCgkgIFtncmFwaGljcy9tZXRhZmlsZWRydi8qXQoJTW92ZWQgc29tZSBkZXZpY2UgZGVwZW5kZW50IGNvZGUgaW50byB0aGUgcmVzcC4gc3ViZGlycy4KCgkqIFtpbmNsdWRlL2dkaS5oXSBbaW5jbHVkZS9tZXRhZmlsZWRydi5oXSBbaW5jbHVkZS94MTFkcnYuaF0KCVByb3RvdHlwZXMgYWRkZWQsCglEQ19GVU5DVElPTlM6IEdldFBpeGVsIGFkZGVkLCBzb21lIHVubmVjZXNzYXJ5IGZ1bmN0aW9ucyByZW1vdmVkLgoKCSogW29iamVjdHMvcmVnaW9uLmNdCglDcmVhdGVQb2x5UG9seWdvblJnbjMyIGFkZGVkLgoKCSogW2ZpbGVzL2Rvc19mcy5jXQoJUXVlcnlEb3NEZXZpY2UgYWRkZWQuCgoJKiBbbWlzYy9sc3RyLmNdCglGb3JtYXRNZXNzYWdlOiBicm9rZW4gaGVhcCBtYW5hZ2VtZW50IGZpeGVkLgoKCSogW3NjaGVkdWxlci9wcm9jZXNzLmNdIFtzY2hlZHVsZXIvdGhyZWFkLmNdCglHZXQvU2V0VGhyZWFkUHJpb3JpdHkvUHJpb3JpdHlDbGFzcyBhZGRlZC4KCk1vbiBKYW4gIDYgMjE6NTU6MzAgMTk5NyAgUGhpbGlwcGUgRGUgTXV5dGVyICA8cGhkbUBpbmZvLnVjbC5hYy5iZT4KCgkqIFttaXNjL2tleWJvYXJkLmNdCglUb0FzY2lpIDogVXNlIEVWRU5UX1RvQXNjaWkgaW5zdGVhZC4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglrZXlwYWRfa2V5IDogRG8gbm90IGNvbnZlcnQgWEtfTW9kZV9zd2l0Y2ggdG8gVktfTUVOVTsgcmVjb2duaXplCglrZXlwYWQgY3Vyc29yIGtleXMuCglFVkVOVF9ldmVudF90b192a2V5IDogTmV3IGZ1bmN0aW9uLCB0byB0cmFuc2Zvcm0gYSBYIGtleWNvZGUKCWludG8gYSBNU3dpbiB2a2V5ICsgZXh0ZW5kZWQgYml0LgoJRVZFTlRfVG9Bc2NpaSA6IE5ldyBmdW5jdGlvbiwgdG8gdHJhbnNmb3JtIGEgdmtleSArIGV4dGVuZGVkIGJpdAoJKCsga2V5IHN0YXRlIHRhYmxlKSBpbnRvIGFzY2lpIGNoYXIocyksIHVzaW5nIFhMb29rdXBTdHJpbmcsIGFuZAoJcmVjb2duaXppbmcgZGVhZCBjaGFycy4KCUVWRU5UX2tleSA6IFRyYW5zZm9ybSBBbHRHciBpbnRvIEN0cmwrQWx0IHNlcXVlbmNlOyBjYWxsCglFVkVOVF9ldmVudF90b192a2V5IGZvciBrZXljb2RlIHRvIHZrZXkgY29udmVyc2lvbjsgZml4ZWQKCXByZXZpb3VzLCBjb250ZXh0IGFuZCBleHRlbmRlZCBiaXRzLgoKCSogW3dpbmRvd3Mva2V5Ym9hcmQuY10KCUluY2x1ZGUgc3RkZGVidWcuaCwgdG8gZ2V0IC1kZWJ1Z21zZyBtZXNzYWdlcy4KCUdldEtleVN0YXRlIDogSGFuZGxlIFZLX01CVVRUT04gY2FzZS4KCUdldEtleWJvYXJkU3RhdGUsIFNldEtleWJvYXJkU3RhdGUgOiBEZWJ1Z2dpbmcgbWVzc2FnZXMgYWRkZWQuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglUcmFuc2xhdGVNZXNzYWdlIDogSGFuZGxlIGRlYWQgY2hhcnMuCgpNb24gSmFuICA2IDIwOjEwOjExIDE5OTcgIERvbWluaWsgU3RyYXNzZXIgIDxibTQyNDk1M0BtdWVuY2hlbi5vcmc+CgoJKiBbaWYxNjMyL2NydGRsbC5zcGVjXSBbbWlzYy9jcnRkbGwuY10KCUMrKyBmdW5jdGlvbnMgbmV3L2RlbGV0ZS9zZXRfbmV3X2hhbmRsZXIgaW1wbGVtZW50ZWQuCgpNb24gSmFuICA2IDE1OjQ4OjE1IDE5OTcgRnJhbnMgdmFuIERvcnNzZWxhZXIgPGRvcnNzZWxAcnVsaG1wYzQ5LkxlaWRlblVuaXYubmw+CgoJKiBbY29udHJvbHMvZWRpdC5jXSBbaW5jbHVkZS93aW5kb3dzLmhdCglNb3ZlZCB0aGUgZWRpdCBjb250cm9sIHRvIDMyIGJpdHMuCglJbmNsdWRlZCBuZXcgKHdpbjk1KSBtZXNzYWdlIGRlZmluaXRpb25zIGluIHdpbmRvd3MuaAoJSW1wbGVtZW50ZWQgRU1fU0NST0xMQ0FSRVQsIEVNX1NFVE1BUkdJTlMsIEVNX0dFVE1BUkdJTlMsCglFTV9HRVRMSU1JVFRFWFQsIEVNX1BPU0ZST01DSEFSLCBFTV9DSEFSRlJPTVBPUy4KCUJyb2tlIEVNX1NFVFdPUkRCUkVBS1BST0MgKGludGVybmFsIHdvcmR3cmFwIHN0aWxsIHdvcmtzKS4KCUZpeGVkIHNvbWUgYnVncywgaW50cm9kdWNlZCBhIGNvdXBsZSBvZiBvdGhlcnMuCglUZXh0IGJ1ZmZlciBpcyBub3cgaW5pdGlhbGx5IGluIDMyLWJpdCBoZWFwLgoKCSogW2NvbnRyb2xzL0VESVQuVE9ET10gW2NvbnRyb2xzL2NvbWJvLmNdIFtjb250cm9scy93aWRnZXRzLmNdCgkgIFtpZjE2MzIvd3Byb2NzLnNwZWNdIFtsaWJyYXJ5L21pc2NzdHVicy5jXSBbd2luZG93cy9kZWZkbGcuY10KCSAgW21pc2MvY29tbWRsZy5jXQoJVXBkYXRlZCB0byB3b3JrIHdpdGggMzItYml0IGVkaXQgY29udHJvbC4KClNhdCBKYW4gIDQgMjI6MDc6MjcgMTk5NyAgTy5GbGViYmUgIDxPLkZsZWJiZUBzY2llbmNlLWNvbXB1dGluZy51bmktdHVlYmluZ2VuLmRlPgoKCSogW2xvYWRlci9wZV9pbWFnZS5jXQoJVXNlIG1tYXAgcmF0aGVyIHRoZW4gbWFsbG9jLiBCZXR0ZXIgd29ya2Fyb3VuZCBmb3IgY2xlYW4KCXNlZ21lbnRzLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpXZWQgSmFuICAxIDE1OjM2OjE3IDE5OTcgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCVVzZSBGaW5kRmlyc3RGaWxlL0ZpbmROZXh0RmlsZSBpbiBMSVNUQk9YX0RpcmVjdG9yeS4KCgkqIFtmaWxlcy9kb3NfZnMuY10KCVJld3JvdGUgRmluZEZpcnN0RmlsZS9GaW5kTmV4dEZpbGUgdG8gdXNlIERPU0ZTX0ZpbmROZXh0KCkuCgoJKiBbZmlsZXMvZmlsZS5jXSBbZmlsZXMvZGlyZWN0b3J5LmNdCglVc2UgV2luMzIga2VybmVsIG9iamVjdHMgYW5kIGhhbmRsZXMgZm9yIGZpbGUgaGFuZGxlcy4KCVVuaWZpZWQgU2VhcmNoUGF0aCgpIGFuZCBPcGVuRmlsZSgpLgoKCSogW2xvYWRlci9idWlsdGluLmNdCglNb3ZlZCB0byBpZjE2MzIvIGRpcmVjdG9yeS4KCgkqIFt0b29scy9idWlsZC5jXSBbZGVidWdnZXIvKl0gW21pc2NlbXUvKl0KCVdpbjE2IHJlZ2lzdGVyIGZ1bmN0aW9ucyBub3cgcmVjZWl2ZSB0aGUgc2FtZSBDT05URVhUICogc3RydWN0dXJlCglhcyBXaW4zMiBmdW5jdGlvbnMuCgoJKiBbaW5jbHVkZS9zaWdjb250ZXh0LmhdIFttaXNjZW11L2luc3RyLmNdCglBZGRlZCBuZXcgbWFjcm9zIHRvIGdldCByZWdpc3RlciB2YWx1ZXMgZnJvbSB0aGUgU0lHQ09OVEVYVAoJc3RydWN0dXJlIChvbmx5IHVzZWQgZm9yIGluc3RydWN0aW9uIGVtdWxhdGlvbiBub3cpLgoKCSogW3NjaGVkdWxlci9wcm9jZXNzLmNdIFtzY2hlZHVsZXIvdGhyZWFkLmNdIChOZXcgZmlsZXMpCglBbGxvY2F0ZSBwcm9jZXNzIGFuZCB0aHJlYWQgc3RydWN0dXJlcy4KCgkqIFtzY2hlZHVsZXIvcHJvY2Vzcy5jXSBbd2luMzIvazMyb2JqLmNdCglBZGRlZCBXaW4zMiBrZXJuZWwgb2JqZWN0cyBhbmQgaGFuZGxlcyBtYW5hZ2VtZW50LgoKCSogW2xvYWRlci90YXNrLmNdCglDcmVhdGUgYSBXaW4zMiBwcm9jZXNzIGFuZCB0aHJlYWQgZm9yIGV2ZXJ5IFdpbjE2IHRhc2suCgoJKiBbbWlzYy9jb21tZGxnLmNdIFttaXNjL3NoZWxsLmNdIFt3aW5kb3dzL21zZ2JveC5jXQoJQnVpbHQtaW4gcmVzb3VyY2VzIGFyZSBub3cgaW4gV2luMzIgZm9ybWF0LiBUaGlzIGFsc28gYXZvaWRzCgkxNi1iaXQgY2FsbGJhY2tzIGZvciBidWlsdC1pbiBkaWFsb2dzLgoKCSogW21pc2MvbHpleHBhbmQuY10KCURpZmZlcmVudGlhdGUgYmV0d2VlbiAxNi1iaXQgYW5kIDMyLWJpdCBmaWxlIGhhbmRsZXMuCgoJKiBbbWlzY2VtdS9pbnQqLmNdCglNb3ZlZCBhbGwgaW50IGVtdWxhdGlvbiB0byBtc2Rvcy8gZGlyZWN0b3J5LgoKCSogW21zZG9zLypdCglOZXcgZGlyZWN0b3J5IG1zZG9zLyBjb250YWlucyBhbGwgTVMtRE9TIGVtdWxhdGlvbiBjb2RlIHRoYXQgY2FuCglhbHNvIGJlIHVzZWQgZm9yIFdpbmVsaWI7IHRoaXMgc2hvdWxkIGVuYWJsZSBXaW5lbGliIGFwcHMgdG8gdXNlCglET1MzQ2FsbCBhbmQgcmVsYXRlZCBmdW5jdGlvbnMuCgoJKiBbcmMvd2luZXJjLmNdCglBIGZldyBidWcgZml4ZXMgZm9yIFdpbjMyIHJlc291cmNlIGZvcm1hdC4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJSGFjayBpbiBXSU5QT1NfUmVvcmRlck93bmVyUG9wdXBzKCkgdG8gYXZvaWQgWCBjcmFzaGVkIChzdGlsbCBub3QKCXJpZ2h0IHRob3VnaCkuCgpTdW4gRGVjIDI5IDE3OjQ3OjU1IDE5OTYgIE8uIEZsZWJiZSA8ZmxlYmJlQHNjaWVuY2UtY29tcHV0aW5nLnVuaS10dWViaW5nZW4uZGU+CgoJKiBbbG9hZGVyL3BlX2ltYWdlLmNdCglNYWtlIHN1cmUgQlNTIG9mIGEgUEVfSW1hZ2UgaXMgemVyby4KClNhdCBEZWMgMjggMjI6MTU6MzQgMTk5NiBBbGV4IEtvcm9ia2EgPGFsZXhAdHJhbnRvci5waGFybS5zdW55c2IuZWR1PgoKCSogW3dpbmRvd3Mvc2Nyb2xsLmNdCglTY3JvbGxXaW5kb3dFeCgpIHJld3JpdGUsIFNjcm9sbERDKCkgZml4LgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdIFtjb250cm9scy9tZW51LmNdCglGaXhlZCBBbHQtU3BhY2UgY3Jhc2hlcyBpbiBkaWFsb2dzLgoKCSogW3dpbmRvd3MvZXZlbnQuY10gW3dpbmRvd3MvbWVzc2FnZS5jXQoJU29tZSBjaGFuZ2VzIGluIG1vdXNlIG1lc3NhZ2UgZ2VuZXJhdGlvbi4KClRodSBEZWMgMjYgMDk6MjU6MjQgMTk5NiAgUGhpbGlwcGUgRGUgTXV5dGVyICA8cGhkbUBpbmZvLnVjbC5hYy5iZT4KCgkqIFtkZWJ1Z2dlci9zdGFicy5jXQoJRHVtbXkgREVCVUdfUmVhZEV4ZWN1dGFibGVEYmdJbmZvIHByb3ZpZGVkIGZvciAhX19FTEZfXyBjYXNlLgoKVHVlIERlYyAyNCAwMDo1OTowNSBNRVQgMTk5NiAgTWFydGluIEJ1Y2sgPG1hcnRpbi0yLmJ1Y2tAc3R1ZGVudC51bmktdWxtLmRlPgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCUNoYW5nZWQgWEtfUGFnZV97VXAsRG93bn0gdG8gWEtfe1ByaW9yLE5leHR9IGZvciBYMTFSNQoJY29tcGF0aWJpbGl0eS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIERlYyAyMiAxMzozMDoxOCAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtncmFwaGljcy9tZXRhZmlsZWRydi9pbml0LmNdIFtncmFwaGlzYy9tZXRhZmlsZWRydi9tYXBwaW5nLmNdCglBZGRlZCBtYXBwaW5nIGZ1bmN0aW9ucy4KCgkqIFtpZjE2MzIvZ2RpLnNwZWNdIFtvYmplY3RzLyouY10gW2luY2x1ZGUvd2luZG93cy5oXQoJQWRkZWQgYSBsb3Qgb2YgV2luMzIgZnVuY3Rpb25zLgoKCSogW21lbW9yeS9oZWFwLmNdCglBZGRlZCBIRUFQX3N0cmR1cEF0b1cgYW5kIEhFQVBfc3RyZHVwV3RvQS4KCgkqIFttaXNjL2xzdHIuY10gW21lbW9yeS9zdHJpbmcuY10KCU1vdmVkIE9FTTwtPkFuc2kgY29udmVyc2lvbiB0byBzdHJpbmcuYy4gRml4ZWQgYSBjb3VwbGUgb2YgYnVncy4KCgkqIFtvYmplY3QvZm9udC5jXQoJQXZvaWQgdXBwZXJjYXNpbmcgZm9udCBuYW1lcy4KCgkqIFt3aW5kb3dzL2hvb2suY10KCVNldCBkcyA9IHNzIGJlZm9yZSBjYWxsaW5nIGhvb2sgcHJvY2VkdXJlLgoKU2F0IERlYyAyMSAyMTo0NDoxNyAxOTk2ICBBbGV4IEtvcm9ia2EgPGFsZXhAdHJhbnRvci5waGFybS5zdW55c2IuZWR1PgoKCSogW29iamVjdHMvY29sb3IuY10KCVVzZSBjb2xvcnMgYWxsb2NhdGVkIGJ5IG90aGVyIGNsaWVudHMuIAoKCSogW3dpbmRvd3MvY2FyZXQuY10KCVNldCBkZWZhdWx0IGJsaW5rIHRpbWUgdG8gNTAwLgoKCSogW3dpbmRvd3Mvd2luLmNdIFt3aW5kb3dzL2V2ZW50LmNdCglEZWxldGUgWCBjb250ZXh0IGJlZm9yZSBYRGVzdHJveVdpbmRvdygpLgoKCSogW3dpbmRvd3Mva2V5Ym9hcmQuY10KCUZpeGVkIEdldEtleVN0YXRlKCkgb25jZSBtb3JlLgoKRnJpIERlYyAyMCAwODoyNjozMyAxOTk2ICBFcmljIFlvdW5nZGFsZSA8ZXJpY0BzdWIyMzA0LmppYy5jb20+CgoJKiBbZGVidWdnZXIvKi5jXQoJTG90cyBvZiBidWlsdC1pbiBkZWJ1Z2dlciBpbXByb3ZlbWVudHM6IHBhcnNlIFdpbjMyIEVYRXMgZGVidWcKIAlpbmZvcm1hdGlvbiwgZGlzcGxheSBsb2NhbCB2YXJpYWJsZXMsIHNvdXJjZSBmaWxlcyBhbmQgbGluZQogCW51bWJlcnMsIGdldCBzeW1ib2xzIGRpcmVjdGx5IGZyb20gdGhlIFdpbmUgZXhlY3V0YWJsZSwgZXRjLgoKVHVlIERlYyAxNyAyMjozOTo0MiAxOTk2ICBQaGlsaXBwZSBEZSBNdXl0ZXIgIDxwaGRtQGluZm8udWNsLmFjLmJlPgoKCSogW21pc2Mvd2luc29ja19hc3luYy5jXQogCUV4dGVybiBkZWNsYXJhdGlvbiBhZGRlZCBmb3IgaF9lcnJuby4KClR1ZSBEZWMgMTcgMjE6Mjk6MzQgMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCUFkZGVkIHR3byBtb3JlIENCVCBob29rIGNhbGxzOiBIQ0JUX0NMSUNLU0tJUFBFRC9IQ0JUX0tFWVNLSVBQRUQuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBEZWMgMTUgMTY6MTg6MTUgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbZ3JhcGhpY3MveDExZHJ2L2JpdGJsdC5jXQoJRml4ZWQgQklUQkxUX1N0cmV0Y2hJbWFnZSBmb3IgcGFydGlhbGx5IGNvdmVyZWQgb3IgaW52ZXJ0ZWQKCWJpdG1hcHMuCgoJKiBbb2JqZWN0cy9kaWIuY10KCUZpeGVkIHRoZSB1cHNpZGUtZG93biBiaXRtYXAgcHJvYmxlbS4KClNhdCBEZWMgMTQgMDI6NDk6NTcgMTk5NiAgVGhvbWFzIFNhbmRmb3JkIDx0LmQuZy5zYW5kZm9yZEBwcmRzLWdybi5kZW1vbi5jby51az4KCgkqIFtpZjE2MzIvdXNlcjMyLnNwZWNdCglJc01lbnUgYW5kIFJlbW92ZU1lbnUgYWRkZWQgKHVzZSBleGlzdGluZyBXaW4xNiBmdW5jdGlvbnMpLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJQ29ycmVjdGlvbnMgdG8gQklUTUFQSU5GT0hFQURFUiBzdHJ1Y3R1cmUuCgoJKiBbbG9hZGVyL21vZHVsZS5jXSBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdCglOZXcgZnVuY3Rpb24gR2V0TW9kdWxlRmlsZU5hbWUzMkEgKGhlYXZpbHkgYmFzZWQgb24gb3JpZ2luYWwKCVdpbjE2IHZlcnNpb24pLgoKCSogW2xvYWRlci9wZV9pbWFnZS5jXQoJSGFjayB0byBhbGxvdyBmaWxlcyB3aXRoIHNob3J0IFBFIGhlYWRlciB0byBiZSBsb2FkZWQgKGUuZy4KCUNPTURMRzMyLkRMTCBmcm9tIFdpbjMycykuCgoJKiBbbWlzYy93aW5zb2NrX2FzeW5jLmNdCgkjaWYgb3V0IEVJRFJNIGNhc2UgKG5vdCBwcmVzZW50IGluIEZyZWVCU0QpLgoKCSogW3Rvb2xzL2J1aWxkLmNdCglSZW1vdmUgdHJhaWxpbmcgY29tbWVudHMgZnJvbSAucyBmaWxlcyBnZW5lcmF0ZWQgYnkgYnVpbGQKCWFzIHRoZXNlIGJyZWFrIGFzc2VtYmx5IHdoZW4gbm90IHJ1biB0aHJvdWdoIHByZS1wcm9jZXNzb3IuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXSBbaWYxNjMyL2dkaTMyLnNwZWNdCglOZXcgZnVuY3Rpb24gUG9seWxpbmUzMiAtIGJhc2VkIG9uIG9yaWdpbmFsIFBvbHlsaW5lLiBOZWVkcwoJbWV0YWZpbGUgc3VwcG9ydCBhZGRpbmcgc3RpbGwuCgpGcmkgRGVjIDEzIDEzOjA0OjA2IDE5OTYgIEJydWNlIE1pbG5lciA8QnJ1Y2UuTWlsbmVyQGdlbmV0aWNzLnV0YWguZWR1PgoKCSogW3dpbjMyL2ZpbmRmaWxlLmNdIFtpZjE2MzIva2VybmVsLnNwZWNdCglGaW5kRmlyc3RGaWxlMzJBKCk6IFVzZSBkb3MgY3VycmVudCBkaXJlY3RvcnkgZm9yIGRyaXZlIHByZWZpeGVzLgoJRmluZE5leHRGaWxlMzJBKCk6IEZpbGwgaW4gZmlsZSBhdHRyaWJ1dGUgaW5mb3JtYXRpb24uCglJbXBsZW1lbnQgRmluZEZpcnN0RmlsZTE2LCBGaW5kTmV4dEZpbGUxNiwgRmluZENsb3NlMTYuCgoJKiBbZmlsZXMvZHJpdmUuY10KCUdldEN1cnJlbnREaXJlY3RvcnkzMkEgLSBGaXggcHJvYmxlbSB3aXRoIG51bGwgM3JkIGNoYXJhY3RlciBpbgoJc3RyaW5nLgoKVHVlIERlYyAxMCAxNDo0OTowNyAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFt3aW5kb3dzL3BhaW50aW5nLmNdW3dpbmRvd3MvbWVzc2FnZS5jXQoJRG9uJ3QgdXNlIGxpbmtlZCBsaXN0cyB0byBjYWxsIFNlbmRNZXNzYWdlKCksIGZvciBpdCBtaWdodCBkZXN0cm95CiAJdGhlIGN1cnJlbnQgbGlzdGVudHJ5LgoKCSogW21pc2MvcmVnaXN0cnkuY10KCUZpeGVkIHRlbXBvcmFyeSBmaWxlIHNhdmluZyAocmVuYW1lIGRvZXNuJ3Qgd29yayBhY3Jvc3MKCXBhcnRpdGlvbnMpLgoKCSogW2ZpbGVzLyouY10KCUdldEZ1bGxQYXRoTmFtZSosR2V0RHJpdmVUeXBlMzJBIGZpeGVkLCBDcmVhdGVEaXJlY3RvcnlFeCosCglHZXRWb2x1bWVJbmZvcm1hdGlvbjMyVyBmaXhlZC4KCgkqIFt3aW4zMi9wcm9jZXNzLmNdW2lmMTYzMi9rZXJuZWwuc3BlY11baWYxNjMyL2tlcm5lbDMyLnNwZWNdCglMb2FkTGlicmFyeSogdXBkYXRlZCB0byBuZXcgbmFtaW5nIHN0ZC4sICozMlcgYWRkZWQuCgoJKiBbd2luMzIvY29uc29sZS5jXSBbaW5jbHVkZS93aW5jb24uaF0KCUFkZGl0aW9ucyBmb3IgTlQgY29tbWFuZGxpbmUgZXhlY3V0YWJsZXMuCgoJKiBbaWYxNjMyL2FkdmFwaTMyLnNwZWNdW2lmMTYzMi9rZXJuZWwzMi5zcGVjXVt3aW4zMi9pbml0LmNdCQoJR2V0VXNlck5hbWUzMlcgYWRkZWQsIEdldENvbXB1dGVyTmFtZTMyVyBhZGRlZCwKCUdldFN0YXJ0dXBJbmZvMzJXIGFkZGVkLCBHZXRTeXN0ZW1JbmZvIHVwZGF0ZWQgdG8gTlQgc3RhbmRhcmQuCgoJKiBbd2luZG93cy9tc2dib3guY11bbWlzYy9zaGVsbC5jXVt3aW5kb3dzL2dyYXBoaWNzLmNdCglNZXNzYWdlQm94MzJXLCBTaGVsbEFib3V0MzJXLCBDb21tYW5kTGluZVRvQXJndlcsIFBvbHlnb24zMiBhZGRlZC4KCgkqIFttaXNjL2NydGRsbC5jXVtpbmNsdWRlL2NydGRsbC5oXVtpZjE2MzIvY3J0ZGxsLnNwZWNdW21pc2MvbnRkbGwuY10KCSAgW2lmMTYzMi9udGRsbC5zcGVjXQoJTG90IG9mIG5ldyB1bmljb2RlIGZ1bmN0aW9ucyBhZGRlZCAobmVlZGVkIGZvciBOVCkuCgoJKiBbbG9hZGVyL3BlX2ltYWdlLmNdCglOdEN1cnJlbnRUZWIgYWRkZWQuCgpUdWUgRGVjIDEwIDIyOjM5OjMzIDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbd2luZG93cy9rZXlib2FyZC5jXQoJUmV3cm90ZSBmdW5jdGlvbiBUcmFuc2xhdGVBY2NlbGVyYXRvcigpLgoKTW9uIERlYyAgOSAxNDo1MjoxMyAxOTk2ICBTbGF2ZW4gUmV6aWMgIDxlc2VydGVAY3MudHUtYmVybGluLmRlPgoKCSogW3dpbmRvd3MvZGVmd25kLmNdIAoJREVGV05EX1NldFRleHQoKTogU2V0IGljb24gbmFtZS4KClN1biBEZWMgIDggMjM6MzA6MDAgMTk5NiAgQWxleCBLb3JvYmthIDxhbGV4QHRyYW50b3IucGhhcm0uc3VueXNiLmVkdT4KCgkqIFtsb2FkZXIvc2lnbmFsLmNdIFttaXNjL3dpbnNvY2suY10gW21pc2Mvd2luc29ja19hc3luYy5jXQoJICBbaWYxNjMyL3dpbnNvY2suc3BlY10KCUlQQyByZXNvdXJjZSBjbGVhbnVwLCBidWdmaXhlcy4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXSBbd2luZG93cy9kZWZkbGcuY10KCU1vcmUgRGVmRGxnUHJvYygpIGZpeGVzLgoKU3VuIERlYyAgOCAxNDowMTo0MiAxOTk2ICBWYWRpbSBTdHJpemhldnNreSAgPHN0cml2QG1zLmNvbT4KCgkqIFttaXNjL2NsaXBib2FyZC5jXSBbb2JqZWN0cy9mb250LmNdIFt3aW4zMi9pbml0LmNdCiAJICBbd2luMzIvbmV3Zm5zLmNdIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglBZGRlZCBhIGZldyBXSU4zMiBmdW5jdGlvbnMgd2hpY2ggbmVlZGVkIHRvIHJ1biBzb21lIHdpbjMyCglhY2Nlc3Nvcmllcy4gQ2xvY2sgc2hvdWxkIG5vdyB3b3JrIGFsbW9zdCBhcyB3ZWxsIGFzIDE2IGJpdCB2ZXJzaW9uLgoJQWRkOiBSZWdpc3RlckNsaXBib2FyZEZvcm1hdDMyVyBHZXRUZXh0RXh0ZW50RXhQb2ludDMyKgoJICAgICBHZXRNb2R1bGVIYW5kbGVXLCBEaXNhYmxlVGhyZWFkTGlicmFyeUNhbGxzIChlbXB0eSBzdHViKSwKCSAgICAgUG9seWdvbjMyCglGaXg6IFBvbHlnb24xNiBwb3NzaWJsZSBtZW1vcnkgbGVhayBvbiBlcnJvciByZXR1cm4uCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBEZWMgIDggMTQ6NTE6NTcgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbY29uZmlndXJlLmluXQoJQWRkZWQgY2hlY2sgdG8gc2VlIGlmIHRoZSBjb21waWxlciBzdXBwb3J0cyBidWlsZGluZyBhIERMTCB3aGVuCgl0aGUgLS13aXRoLWRsbCBvcHRpb24gaXMgdXNlZC4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglEb24ndCBzZW5kIExCTl9TRUxDSEFOR0UgdG9vIG9mdGVuLgoJQWRkZWQgV01fQ0hBUlRPSVRFTSBzdXBwb3J0LgoKCSogW01ha2UucnVsZXMuaW5dIFtsaWJyYXJ5L01ha2VmaWxlLmluXQoJQnVpbGQgd2luZXN0dWIubyBhbmQgbGluayBpdCB3aXRoIFdpbmVsaWIgcHJvZ3JhbXMuCgoJKiBbb2JqZWN0cy90ZXh0LmNdCglBZGRlZCBzdXBwb3J0IGZvciAnJiYnIGluIERyYXdUZXh0KCkuCgoJKiBbdG9vbHMvYnVpbGQuY10KCUFkZGVkIC1vIG9wdGlvbi4KClNhdCBEZWMgNyAxMjowNzowNyAxOTk2ICBBbmRyZXcgTGV3eWNreSA8cGxld3lja3lAb2lzZS51dG9yb250by5jYT4KCgkqIFt3aW4zMi90aHJlYWQuY10KCUdldEN1cnJlbnRUaHJlYWQoKTogcmV0dXJuIC0yIChjdXJyZW50IHRocmVhZCBwc2V1ZG8taGFuZGxlKS4KCUdldEN1cnJlbnRUaHJlYWRJZCgpOiByZXR1cm4gR2V0Q3VycmVudFRhc2soKS4KCgkqIFtvYmplY3RzL2ZvbnQuY10gW2lmMTYzMi9nZGkzMi5zcGVjXQoJR2V0VGV4dEV4dGVudFBvaW50MzJ7QSxXfUJ1Z2d5KCk6IGZvciBmdXR1cmUgYnVnLWNvbXBhdGliaWxpdHkuCgoJKiBbd2luMzIvZmluZGZpbGUuY10KCUZpbmRDbG9zZSgpOiBpZ25vcmUgSU5WQUxJRF9IQU5ETEVfVkFMVUUgKGxpa2UgV2luOTUpLgoKCSogW3dpbmRvd3MvaG9vay5jXSBbaW5jbHVkZS9ob29rLmhdIFtpZjE2MzIvdXNlci5zcGVjXQoJICBbaWYxNjMyL3VzZXIzMi5zcGVjXSBbd2luZG93cy9mb2N1cy5jXSBbd2luZG93cy9tZXNzYWdlLmNdCgkgIFt3aW5kb3dzL25vbmNsaWVudC5jXSBbd2luZG93cy93aW4uY10gW3dpbmRvd3Mvd2lucG9zLmNdCglIb29rcyByZXdyaXR0ZW4gdG8gc3VwcG9ydCBXaW4zMi4KCgkqIFttaXNjL3dpbnNvY2suY10KCVdJTlNPQ0tfc2VsZWN0KCk6IG5lZWQgdG8gcHV0IHNvY2tldHMgd2l0aCBlcnJvcnMgaW50byBleGNlcHRmZHMuCglXSU5TT0NLX3NvY2tldCgpOiBmaXggZXJyb3IgcmV0dXJuLgoKCSogW3dpbmRvd3Mvd2luLmNdCglTZXRXaW5kb3dXb3JkKCk6IGNhbGwgU2V0UGFyZW50IG9uIEdXV19IV05EUEFSRU5ULgoKV2VkIERlYyAgNCAyMjowMzowNSAxOTk2ICBBbmRyZXcgVGF5bG9yIDxhbmRyZXdAcmlzY2FuLmNvbT4KCgkqIFtmaWxlcy9kb3NfZnMuY10KCUNoZWNrIGlmIGJ1ZiBpcyBOVUxMIGJlZm9yZSBjb3B5aW5nIHN0cmluZyBpbiBHZXRGdWxsUGF0aE5hbWUzMkEoKS4KCldlZCBEZWMgIDQgMjE6NDA6NTkgMTk5NiAgUm9iZXJ0IFBvdWxpb3QgPGtyeW5vc0BjbGljLm5ldD4KCiAgICAgICAgKiBbZ3JhcGhpY3Mvd2luZy5jXSBbaWYxNjMyL3dpbmcuc3BlY10KCUltcGxlbWVudGVkIG1hbnkgV2luRyBmdW5jdGlvbnMsIGJ1dCBzb21lIGRvbid0IHNlZW0gdG8KCXdvcmsgY29ycmVjdGx5IChwcm9iYWJseSBkdWUgdG8gdGhlIG9uZSBub3QgZG9uZSkuCgkKV2VkIERlYyAgNCAwMzozODoyNSAxOTk2ICBMZWUgSmFla2lsIDxqdXJpYUBwdW1hLmthaXRlY2gucmUua3I+CgoJKiBbbWlzYy9tYWluLmNdCglJbXBsZW1lbnRlZCBhIGZldyBtb3JlIG9mIHRoZSBTeXN0ZW1QYXJhbWV0ZXJzSW5mbygpIGNhc2VzLgoKU3VuIERlYyAgMSAyMjozMDowMCAxOTk2ICBBbGV4IEtvcm9ia2EgPGFsZXhAdHJhbnRvci5waGFybS5zdW55c2IuZWR1PiAKCgkqIFtjb250cm9scy9idXR0b24uY10KCUltcHJvdmVkIGZvY3VzIHJlY3RhbmdsZSBwYWludGluZy4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXSBbd2luZG93cy9kZWZkbGcuY10KCUZpeGVkIElFMy4wIHByb2JsZW1zIHdpdGggRFdMX01TR1JFU1VMVC4KClN1biBEZWMgIDEgMjA6NDk6MzIgMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFtmaWxlcy9wcm9maWxlLmNdCglDaGFuZ2VkIGVycm9yIGhhbmRsaW5nIGluIFBST0ZJTEVfU2V0U3RyaW5nKCkuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClNhdCBOb3YgMzAgMTk6MjE6MTcgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbY29uZmlndXJlXQoJUmUtZ2VuZXJhdGVkIHdpdGggYXV0b2NvbmYgMi4xMS4gTGV0IG1lIGtub3cgaWYgeW91IGhhdmUKCXByb2JsZW1zLgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10gW2NvbnRyb2xzL29sZGxib3guY10KCUxpc3Rib3hlcyByZXdyaXR0ZW4gZnJvbSBzY3JhdGNoLiBNb3ZlZCBvbGQgY29kZSBzdGlsbCB1c2VkIGJ5Cgljb21ib2JveGVzIHRvIG9sZGxib3guYwoKCSogW21pc2MvcmVnaXN0cnkuY10KCVVzZSB0ZW1wb3JhcnkgZmlsZSB3aGVuIHNhdmluZyByZWdpc3RyeS4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJSW1wbGVtZW50ZWQgV2luMzIgdmVyc2lvbiBvZiBEbGdEaXJMaXN0KCkgYW5kIERsZ0Rpckxpc3RDb21ib0JveCgpLgoKCSogW3dpbmRvd3Mvd2lucHJvYy5jXQoJQWRkZWQgdHJhbnNsYXRpb24gZm9yIGxpc3Rib3ggV2luMzIgbWVzc2FnZXMuCgpTYXQgTm92IDMwIDIxOjAwOjAwIEFsZXggS29yb2JrYSA8YWxleEB0cmFudG9yLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbY29udHJvbHMvd2lkZ2V0cy5jXSBbY29udHJvbHMvYnV0dG9uLmNdCglGaXhlZCBzb21lIGluY29tcGF0aWJpbGl0aWVzIHdpdGggQ1RMM0QgRExMLgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglNYWRlIGRpYWxvZyB3aW5kb3dzIGZpdCBpbnRvIHRoZSBkZXNrdG9wLgoKCSogW21pc2Mvd2luc29jay5jXSBbbWlzYy93aW5zb2NrX2FzeW5jLmNdCglOZXcgV2luc29jayBlbmdpbmUuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglHZXRNZXNzYWdlKCkgZml4ZXMuCgoJKiBbd2luZG93cy9xdWV1ZS5jXSBbd2luZG93cy9ob29rLmNdIFt3aW5kb3dzL3dpbi5jXQoJU2V0TWVzc2FnZVF1ZXVlKCkgZml4ZXMuCgpGcmkgTm92IDI5IDEwOjI1OjEyIDE5OTYgIFNsYXZlbiBSZXppYyAgPGVzZXJ0ZUBjcy50dS1iZXJsaW4uZGU+CgoJKiBbb2JqZWN0cy90ZXh0LmNdCglEcmF3VGV4dDE2KCk6IEZpeGVkIHJldHVybiB2YWx1ZS4KClR1ZSBOb3YgMjYgMTQ6NDc6MDkgMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbZmlsZXMvcHJvZmlsZS5jXSBbKi8qXQoJQWRkZWQgV2luMzIgcHJvZmlsZSBmdW5jdGlvbnMsIHVwZGF0ZWQgdG8gbmV3IG5hbWluZyBzdGFuZGFyZC4KCgkqIFtvYmplY3RzL2ZvbnQuY10gW2lmMTYzMi90aHVuay5jXSBbaW5jbHVkZS93aW5kb3dzLmhdCglBZGRlZCBFbnVtRm9udHMzMiosIEVudW1Gb250RmFtaWxpZXNFeCosIGNoYW5nZWQgcHJvdG90eXBlcyBhbmQKCXN0cnVjdHVyZXMuCgoJKiBbbWlzYy9vbGUybmxzLmNdIFtpZjE2MzIvdGh1bmsuY10KCUFkZGVkIEVudW1TeXN0ZW1Mb2NhbGVzKCkgKHdpbmhlbHAuZXhlKS4KCgkqIFttaXNjL3JlZ2lzdHJ5LmNdCglBZGRlZCBXaW5kb3dzIDMuMSByZWdpc3RyeSBsb2FkZXIgc3VwcGxpZWQgYnkgVG9yIFNqeHdhbGwsIHRvckBzbi5ubwoKCSogW3dpbjMyL2ZpbGUuY10KCVBhcnRpYWxseSBmaXhlZCBDcmVhdGVGaWxlTWFwcGluZygpLCBhZGRlZCBVbm1hcFZpZXdPZkZpbGUoKS4KClNhdCBOb3YgMjMgMjM6MzY6MDUgMTk5NiAgUm9uYW4gV2FpZGUgIDx3YWlkZXJAd2FpZGVyLmllPgoKCSogW21pc2Mvc2hlbGwuY10KCUZpeGVkIHNvbWUgRklYTUVzIHJlbGF0aW5nIHRvIFNoZWxsRXhlYygpIGFuZCBGaW5kRXhlY3V0YWJsZSgpLgoKCSogW21pc2MvbWFpbi5jXQoJSW1wbGVtZW50ZWQgYSBmZXcgbW9yZSBvZiB0aGUgU3lzdGVtUGFyYW1ldGVyc0luZm8oKSBjYXNlcy4KClR1ZSBOb3YgMTkgMDE6MjQ6MzQgMTk5NiAgUGhpbGlwcGUgRGUgTXV5dGVyICA8cGhkbUBpbmZvLnVjbC5hYy5iZT4KCgkqIFtpbmNsdWRlL2tleWJvYXJkLmhdCglOZXcgZmlsZSwgbmV3IG1hY3JvIFdJTkVfVktFWV9NQVBQSU5HUyAodXNpbmcgY29kZSB0YWtlbiBmcm9tIGV2ZW50LmMpLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJTmV3IFtWS19BLCBWS19aXSBhbmQgW1ZLXzAsIFZLOV0gbWFjcm9zLgoKCSogW21pc2Mva2V5Ym9hcmQuY10KCUZpeGVzIGluIEtleVRhYmxlIGFuZCBUb0FzY2lpLgoKCSogW29iamVjdHMvZm9udC5jXQoJRk9OVF9pbml0IDogR2l2ZSBkZWZhdWx0IHZhbHVlIGZvciBNU1dJTiAic3lzdGVtIiBmb250LgoJRk9OVF9NYXRjaEZvbnQgOiBEbyBub3QgdHJ5IGV2ZXJ5IHNpemUgb2YgYSBmb250IGZhbWlseSBpZiB0aGUKCWZhbWlseSBkb2VzIG5vdCBleGlzdC4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglsYXN0RXZlbnRDaGFyIGhhY2sgcmVtb3ZlZC4KCUtleVN0YXRlVGFibGUgcmVwbGFjZWQgYnkgSW5wdXRLZXlTdGF0ZVRhYmxlIChtYWludGFpbmVkIGluIGV2ZW50LmMpCglhbmQgUXVldWVLZXlTdGF0ZVRhYmxlIChtYWludGFpbmVkIGluIG1lc3NhZ2UuYykuCglFVkVOVF9rZXkgOiBDb3JyZWN0aW9ucyB0byB0aGUgZXh0ZW5kZWQgYml0IHNldHRpbmcuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdIFt3aW5kb3dzL2tleWJvYXJkLmNdCglJbXBsZW1lbnRhdGlvbiBvZiBhIG5ldyBRdWV1ZUtleVN0YXRlVGFibGUgOiB0YWJsZSBvZiBrZXkgc3RhdGVzCgl2YWxpZCB3aGVuIG1lc3NhZ2VzIGFyZSByZXRyaWV2ZWQgYnkgR2V0TWVzc2FnZSBvciBQZWVrTWVzc2FnZSwKCWFuZCB2YWxpZCBmb3IgVHJhbnNsYXRlTWVzc2FnZS4KCVRyYW5zbGF0ZU1lc3NhZ2UgOiBDb252ZXJ0IFdNKktFWSBtZXNzYWdlcyB1c2luZyBRdWV1ZUtleVN0YXRlVGFibGUKCWFuZCBUb0FzY2lpLgoJCk1vbiBOb3YgMTggMTY6NTk6MDEgMTk5NiAgUm9iZXJ0IFBvdWxpb3QgPGtyeW5vc0BjbGljLm5ldD4KCgkqIFtncmFwaGljcy9NYWtlZmlsZS5pbl0gW2dyYXBoaWNzL3dpbmcuY10KCSAgW2lmMTYzMi93aW5nLnNwZWNdCglTb21lIGZ1bmN0aW9ucyBmb3IgV2luRyBzdXBwb3J0LCBtb3N0bHkgZW1wdHkgc3R1YnMuCgoJKiBbbWlzYy9jcnRkbGwuY10gW2lmMTYzMi9jcnRkbGwuc3BlY10KCU1hbnkgZnVuY3Rpb25zIGFkZGVkIHRvIENSVERMTCwgbW9zdGx5IGNhbGxzIHRvIFVuaXggQyBsaWJyYXJ5LgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gTm92IDE3IDE1OjAxOjQ1IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2dyYXBoaWNzL2JpdGJsdC5jXSBbZ3JhcGhpY3MveDExZHJ2L2JpdGJsdC5jXQoJTW92ZWQgQml0Qmx0IG9wZXJhdGlvbnMgdG8gdGhlIG5ldyBncmFwaGljcyBkcml2ZXIKCWludGVyZmFjZS4gSW1wbGVtZW50ZWQgUGF0Qmx0MzIsIEJpdEJsdDMyIGFuZCBTdHJldGNoQmx0MzIuCgoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJVW5pZmllZCBNZW1NYW5JbmZvKCkgYW5kIEdsb2JhbE1lbW9yeVN0YXR1cygpLgoKCSogW29iamVjdHMvdGV4dC5jXQoJRml4ZWQgRXh0VGV4dE91dCgpIHRvIGFsd2F5cyB1c2UgcGh5c2ljYWwgY29vcmRzIGZvciBjbGlwIHJlY3QuCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCUltcGxlbWVudGVkIERsZ0RpclNlbGVjdEV4KCkgYW5kIFdpbjMyIHZlcnNpb24gb2YgRGxnRGlyU2VsZWN0Ki4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglBdm9pZCBidXN5LWxvb3BpbmcgaW4gRVZFTlRfV2FpdFhFdmVudCB3aGVuIG5vIHRpbWVyIGlzIHBlbmRpbmcKCSh0aGFua3MgdG8gVGhvbWFzIEtvZW5pZykuCgoJKiBbd2luZG93cy9wYWludGluZy5jXQoJTW92ZWQgdXBkYXRlIHJlZ2lvbiBjbGlwcGluZyBmb3IgQ1NfUEFSRU5UREMgd2luZG93cyB0byBCZWdpblBhaW50KCkuCgkKCSogW3dpbmRvd3Mvc2Nyb2xsLmNdCglJbXBsZW1lbnRlZCBXaW4zMiB2ZXJzaW9uIG9mIFNjcm9sbFdpbmRvdygpIGFuZCBTY3JvbGxEQygpLgoKVHVlIE5vdiAxMiAwOTo1MjoxNyAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtmaWxlcy8qLmNdIFt3aW4zMi9maWxlLmNdCglTb21lIHdpbjMyIGZpbGV0aW1lIGNvbnZlcnNpb24gZnVuY3Rpb25zIGFkZGVkLgoJRml4ZWQgYmVoYXZpb3VyIHdpdGggRE9TIGRyaXZlcyBwb2ludGluZyB0byBVTklYIC8KCVNldEN1cnJlbnREaXJlY3RvcnkoKSBtYXkgYWxzbyBnZXQgWDpceHh4IHBhdGhzLgoJRml4ZWQgRklMRV9PcGVuIHdoZW4gY2FsbGVkIGZyb20gQ3JlYXRlRmlsZSgpLgoJQWRkZWQgR2V0RmlsZVNpemUoKSwgTWFwVmlld09mRmlsZSgpLCBTZXRGaWxlVGltZSgpLCBHZXRGaWxlVGltZSgpLgoKCSogW21pc2MvY3J0ZGxsLmNdIFtpZjE2MzIvY3J0ZGxsLnNwZWNdCglBZGRlZCBzb21lIG5ldyBmdW5jdGlvbnMuCgoJKiBbaWYxNjMyL3VzZXIzMi5zcGVjXQoJU29tZSB0aHVua3MgaW50byB3aW4xNiBjb2RlIGFkZGVkLgoKCSogW3dpbjMyL2luaXQuY10KCUFkZGVkIEdldFN5c3RlbUluZm8oKSwgcmVtb3ZlZCBHZXRNb2R1bGVGaWxlTmFtZSgpIHN0dWIuCgoJKiBbd2luMzIvY29kZV9wYWdlLmNdIFtpZjE2MzIvdGh1bmsuY10KCUFkZGVkIEVudW1TeXN0ZW1Db2RlUGFnZXMqICh1bnRlc3RlZCkuCgoJKiBbb2JqZWN0cy9mb250LmNdIFtpZjE2MzIvdGh1bmsuY10KCUFkZGVkIEVudW1Gb250RmFtaWxpZXMzMiouCgkKTW9uIE5vdiAxMSAxNDo1MDoyNCAxOTk2ICBIdXcgRC4gTS4gRGF2aWVzIDxoLmRhdmllczFAcGh5c2ljcy5veGZvcmQuYWMudWs+CgoJKiBbY29udHJvbHMvbWVudS5jXSBbd2luZG93cy9tZGkuY10KCURvbid0IGRlbGV0ZSB0aGUgTURJIGB3aW5kb3dzJyBtZW51IGlmIGl0J3MgYWxyZWFkeSBiZWVuIGRlbGV0ZWQuCgoJKiBbbWlzYy9leGVjLmNdCglOb3RlcGFkIGFsd2F5cyBjYWxscyBXaW5IZWxwKC4uLCBIRUxQX1FVSVQsIC4uLikgYXQgdGVybWluYXRpb24KIAlhbmQgY29tcGxhaW5zIGlmIGl0IHJldHVybnMgRkFMU0UuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCUdldCBtYXhpbWl6ZWQgTURJIGNoaWxkJ3Mgbm9uY2xpZW50IGFyZWEgcmVkcmF3biBhZnRlciByZXNpemUuCgpUaHUgTm92ICA3IDEzOjMyOjM0IDE5OTYgIExlZSBKYWVraWwgPGp1cmlhQHNlb2R1LmNvLmtyPgoKCSogW21lbW9yeS9nbG9iYWwuY10KCVVzZSAvcHJvYyBmaWxlc3lzdGVtIGZvciBHbG9iYWxNZW1vcnlTdGF0dXMoKSBvbiBMaW51eC4KCk1vbiBOb3YgIDQgMTg6MzA6MDAgMTk5NiAgQWxleCBLb3JvYmthIDxhbGV4QHRyYW50b3IucGhhcm0uc3VueXNiLmVkdT4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglBZGRlZCBPZmZpWC1zdHlsZSBmaWxlIGRyb3AgaGFuZGxpbmcuIEZpbGUgcGF0aHMgbXVzdCBiZQoJRE9TLW1hcHBhYmxlIGJ5IFdpbmUgKHZpYSB3aW5lLmNvbmYpLgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdCiAgICAgICAgQWRkZWQgV01fR0VUVEVYVCBoYW5kbGVyLgoKCSogW29iamVjdHMvcGFsZXR0ZS5jXQoJQWRkZWQgUmVzaXplUGFsZXR0ZSgpICh1bnRlc3RlZCkuCgoJKiBbb2JqZWN0cy9jdXJzb3JpY29uLmNdCglJbXBsZW1lbnRlZCBpY29uIHRvIGN1cnNvciBjb252ZXJzaW9uLgoKCSogW29iamVjdHMvY29sb3IuY10KCUZpeGVkIGNyYXNoIG9uIHN0YXJ0dXAgd2hlbiBubyBjb2xvcmNlbGxzIGFyZSB3cml0ZWFibGUuCgpNb24gTm92ICA0IDAwOjQ5OjQxIDE5OTYgIFVscmljaCBTY2htaWQgIDx1c2NobWlkQG1haWwuaGgucHJvdmkuZGU+CgoJKiBbcmMvd2luZXJjLmNdCglBZGRlZCBzdXBwb3J0IGZvciB3aW4zMiBvdXRwdXQuCgoJKiBbbGlicmFyeS9saWJyZXMuY10gW2luY2x1ZGUvbGlicmVzLmhdIFtsb2FkZXIvcmVzb3VyY2UuY10KCVJlbmFtZWQgTElCUkVTX0ZpbmRSZXNvdXJjZSB0byBMSUJSRVNfRmluZFJlc291cmNlMTYuCglBZGRlZCBMSUJSRVNfRmluZFJlc291cmNlMzIuCgpTdW4gTm92IDMgMjE6MjE6NDUgMTk5NiAgUm9iZXJ0IFBvdWxpb3QgPGtyeW5vc0BjbGljLm5ldD4KCgkqIFtsb2FkZXIvYnVpbHRpbi5jXSBbaWYxNjMyL01ha2VmaWxlLmluXSBbaWYxNjMyL3dpbmcuc3BlY10KCUFkZGVkIHRoZSBzcGVjIGZpbGUgZm9yIFdpbkcsIGl0J3Mgb25seSBzdHViIGZvciBub3csIGJ1dCBpdAoJc2hvdWxkIGJlIGVhc3kgdG8gZG8gYnkgc29tZW9uZSB3aXRoIFdpbmRvd3MgcHJvZ3JhbW1pbmcKCWtub3dsZWRnZS4gU2VlOiBmdHAubWljcm9zb2Z0LmNvbS9Tb2Z0TGliL01TTEZJTEVTL3dpbmcxMC5leGUuCgoJKiBbaWYxNjMyL2NydGRsbC5zcGVjXQoJQWRkZWQgc29tZSBzdHJpbmcgYW5kIG1lbW9yeSBmdW5jdGlvbnMgdG8gbWFrZSBzZnhlZDk1LmV4ZSAob2YKIAlXYXJjcmFmdCAyKSBhbG1vc3Qgd29yay4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU2F0IE5vdiAgMiAxMjo1MDo0MCAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtmaWxlcy9kb3NfZnMuY10KCUFkZGVkIGxvbmcgZmlsZSBuYW1lIG1hc2sgaW4gRE9TRlNfRmluZE5leHQoKS4KCgkqIFtsb2FkZXIvcGVfaW1hZ2UuY10gW2xvYWRlci90YXNrLmNdCglNb3ZlZCBXaW4zMiB0YXNrIHN0YXJ0dXAgaW50byBUQVNLX0NhbGxUb1N0YXJ0KCkuCgoJKiBbb2JqZWN0cy9kYy5jXQoJRml4ZWQgU2V0RENTdGF0ZSgpIGZvciBtZW1vcnkgREMgKHRoYW5rcyB0byBDb25zdGFudGluZQoJU2FwdW50emFraXMgZm9yIHNwb3R0aW5nIHRoaXMgb25lKS4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJRml4ZWQgV0lOUE9TX0ZvcmNlWFdpbmRvd1JhaXNlKCkgdG8gcHJlc2VydmUgY29ycmVjdCBaLW9yZGVyLgoKCSogWyovKl0KCUFkZGVkIFdpbjMyIHZlcnNpb24gZm9yIG1hbnkgZ3JhcGhpY3MgZnVuY3Rpb25zLgoKVGh1IE9jdCAzMSAxMDowMDoxOCAxOTk2ICBIdXcgRC4gTS4gRGF2aWVzIDxoLmRhdmllczFAcGh5c2ljcy5veGZvcmQuYWMudWs+CgoJKiBbY29udHJvbHMvYnV0dG9uLmNdCglCVVRUT05fQ2hlY2tBdXRvUmFkaW9CdXR0b24oKSB1bmNoZWNrcyBvbmx5IGF1dG8gcmFkaW8gYnV0dG9ucy4KCgkqIFtjb250cm9scy9lZGl0LmNdCglFTV9HRVRTRUwgcmVzdWx0IHNob3VsZCBoYXZlIEhJV09SRChyZXN1bHQpID49IExPV09SRChyZXN1bHQpOyBvbGQKCUVESVRfRU1fR2V0U2VsKCkgcmVuYW1lZCB0byBFRElUX0dldFNlbCgpLiAKCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJRFNfTE9DQUxFRElUIGlzIGEgZGlhbG9nIHN0eWxlIG5vdCBhbiBlZGl0IHN0eWxlLgoKCSogW3dpbmRvd3Mvd2lucHJvYy5jXQoJU3RvcCBzdGFjayB0cmFzaGluZyB3aGVuIHduZFB0ci0+dGV4dCA9PSBOVUxMLgoKVHVlIE9jdCAyOSAyMzozNTowNCAxOTk2ICAgQ29uc3RhbnRpbmUgUCBTYXB1bnR6YWtpcyA8Y3NhcHVudHpAbWl0LmVkdT4KCgkqIFt3aW5kb3dzL2RjZS5jXQoJR2V0RENFeDMyIC0gVGhlIGRldGVybWluYXRpb24gb2Ygd2hldGhlciB0byB1c2UgdGhlIERDIGNhY2hlIG9yCiAJbm90IHNob3VsZCBiZSBpbmRlcGVuZGVudCBvZiBEQ1hfVVNFU1RZTEUuCgpTYXQgT2N0IDI2IDE3OjMxOjAwIDE5OTYgIFRob21hcyBTYW5kZm9yZCA8dC5kLmcuc2FuZGZvcmRAcHJkcy1ncm4uZGVtb24uY28udWs+CgoJKiBbZmlsZXMvZGlyZWN0b3J5LmNdCglBZGRlZCBlcnJuby5oIHRvICNpbmNsdWRlcwoKCSogW3Rvb2xzL21ha2VkZXAuY10KCUNsb3NlIGZpbGVzIG9uY2UgdGhleSBoYXZlIGJlZW4gcHJvY2Vzc2VkLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUdWUgT2N0IDIyIDIwOjA5OjUyIDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogWyovTWFrZWZpbGUuaW5dIFt0b29scy9tYWtlZGVwLmNdCglOZXcgcHJvZ3JhbSB0byBnZW5lcmF0ZSBkZXBlbmRlbmNpZXM7IHNob3VsZCBiZSBmYXN0ZXIgYW5kIG1vcmUKCXBvcnRhYmxlIHRoYW4gJ2djYyAtTU0nLgoKCSogWyovKl0KCVJlcGxhY2VkIFdQQVJBTSBhbmQgSERDIGJ5IGV4cGxpY2l0bHktc2l6ZWQgdHlwZXMuCgoJKiBbd2luZG93cy9ob29rLmNdCglGaXhlZCBidWcgaW4gSE9PS19HZXRIb29rMTYgZnVuY3Rpb24uCgpUaHUgT2N0IDE3IDA5OjEzOjUwIDE5OTYgIEpvaG4gSGFydmV5IDxqb2huQGRpdmlzaW9uLmNvLnVrPgoKCSogW2luY2x1ZGUvZGVidWcuaF0gW2luY2x1ZGUvc3RkZGVidWcuaF0KICAgICAgICBBZGRlZCBkZWJ1ZyBvcHRpb24gZm9yIHdpbjE2ZHJ2ICgtZGVidWdtc2cgK3dpbjE2ZHJ2KQoKCSogW2dyYXBoaWNzL3dpbjE2ZHJ2L2luaXQuY10KICAgICAgICBPbmx5IGVuYWJsZSBDcmVhdGVEQyBpZiBwcmludGVyPW9uIHNwZWNpZmllZCBpbiB3aW5lIHNlY3Rpb24gb2YKIAl3aW5lLmNvbmYuCiAJcHJpbnRmcyBjaGFuZ2VkIHRvIGRwcmludGZfd2luMTZkcnYuCglTb21lIHRpZHlpbmcgdXAuCgoJKiBbaW5jbHVkZS9nZGkuaF0gW2dyYXBoaWNzL3gxMWRydi9jbGlwcGluZy5jXQoJICBbZ3JhcGhpY3MveDExZHJ2L01ha2VmaWxlLmluXQogICAgICAgIE1vdmVkIFNldERldmljZUNsaXBwaW5nIGludG8gZHJpdmVycy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIE9jdCAxMyAxNTozMjozMiAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtNYWtlLnJ1bGVzLmluXSBbKi9NYWtlZmlsZS5pbl0KCU1hZGUgaXQgcG9zc2libGUgdG8gY29tcGlsZSBmcm9tIGEgZGlyZWN0b3J5IG90aGVyIHRoYW4gdGhlIHNvdXJjZQoJZGlyZWN0b3J5LgoKCSogW2dyYXBoaWNzL21ldGFmaWxlZHJ2L2luaXQuY10gW2luY2x1ZGUvbWV0YWZpbGVkcnYuaF0KCSAgW29iamVjdHMvbWV0YWZpbGUuY10gW29iamVjdHMvZGMuY10KCU5ldyBncmFwaGljcyBkcml2ZXIgZm9yIG1ldGFmaWxlcy4KCgkqIFtpZjE2MzIvdGh1bmsuY10KCUFkZGVkIHRodW5rcyBmb3IgU2V0V2luZG93c0hvb2sgYW5kIFNldERDSG9vay4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJRml4ZWQgR2V0TmV4dERsZ0dyb3VwSXRlbSBhbmQgR2V0TmV4dERsZ1RhYkl0ZW0gdG8gc2tpcCBkaXNhYmxlZAoJaXRlbXMuCgoJKiBbKi8qXQoJUmVtb3ZlZCBub24gV2luMzItY2xlYW4gdHlwZXMgSEFORExFLCBIQklUTUFQLCBIQlJVU0gsIEhGT05ULAogCUhJTlNUQU5DRSwgSE1FTlUsIEhSR04gYW5kIEhUQVNLLgoKV2VkIE9jdCAgOSAxNDo1OTo0NSAxOTk2ICBGcmFucyB2YW4gRG9yc3NlbGFlciAgPGRvcnNzZWxAcnVsaG0xLkxlaWRlblVuaXYubmw+CgoJKiBbY29udHJvbHMvZWRpdC5jXQoJRml4ZWQgRWRpdFduZFByb2MoKSB0byBmYWxsIGJhY2sgdG8gRGVmV25kUHJvYygpIHdoZW4gdGhlCgllZGl0IHN0YXRlIHN0cnVjdHVyZSBpcyBub3QgYXZhaWxhYmxlLgoKV2VkIE9jdCAgMiAxNDowMDozNCAxOTk2ICBIdXcgRC4gTS4gRGF2aWVzICA8aC5kYXZpZXMxQHBoeXNpY3Mub3hmb3JkLmFjLnVrPgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdIFt3aW5kb3dzL21kaS5jXQoJQWRqdXN0V2luZG93UmVjdEV4MTYoKSBzaG91bGQgb25seSB0YWtlIG5vdGljZSBvZiB0aGUgc3R5bGVzCiAJV1NfRExHRlJBTUUsIFdTX0JPUkRFUiwgV1NfVEhJQ0tGUkFNRSBhbmQKIAlXU19FWF9ETEdNT0RBTEZSQU1FLiBUaGFua3MgdG8gQWxleCBLb3JvYmthLgoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJRml4ZWQgdHlwbyBpbiBTaG93U2Nyb2xsQmFyMzIoKS4KClN1biBBdWcgMjUgMjA6MTg6NTYgMTk5NiAgSnVra2EgSWl2b25lbiA8aWl2b25lbkBjYy5oZWxzaW5raS5maT4KCgkqIFtpZjE2MzIvdXNlcjMyLnNwZWNdIFtpZjE2MzIvd2lubW0uc3BlY10KCUFkZGVkIFNldFBhcmVudCBhbmQgc25kUGxheVNvdW5kQS4KCQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkZyaSBTZXAgMjcgMTQ6MTg6NDIgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbY29udHJvbHMvYnV0dG9uLmNdCglGaXhlZCBmb2N1cyByZWN0YW5nbGUgc2l6ZSBhbmQgY2xpcHBpbmcuCgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCglDb252ZXJ0ZWQgdG8gV2luMzIgYW5kIGFkZGVkIHN1cHBvcnQgZm9yIHNjcm9sbCBwYWdlLgoJQ29tcGxldGVkIFNldFNjcm9sbEluZm8oKSBhbmQgaW1wbGVtZW50ZWQgb3RoZXIgV2luMzIgZnVuY3Rpb25zLgoKCSogW2ZpbGVzL2ZpbGUuY10KCVJlbW92ZWQgRklMRV9SZWFkKCkgKHVzZSBfbHJlYWQzMiBpbnN0ZWFkKS4KCgkqIFtvYmplY3RzL2RjZS5jXSBbaW5jbHVkZS9kY2UuaF0KCUFsbG9jYXRlIERDRSBvbiB0aGUgV2luMzIgaGVhcCwgYW5kIHVzZSBwb2ludGVycyBpbnN0ZWFkIG9mCgloYW5kbGVzLgoJSW1wbGVtZW50ZWQgV2luMzIgdmVyc2lvbiBvZiBEQyBmdW5jdGlvbnMuCgoJKiBbd2luZG93cy9wYWludGluZy5jXQoJQXR0ZW1wdCB0byBtYWtlIENTX1BBUkVOVERDIHN0eWxlIHdvcmsgYWdhaW4uCgpXZWQgU2VwIDI1IDIzOjQwOjUyIDE5OTYgQWxleCBLb3JvYmthIDxhbGV4QHRyYW50b3IucGhhcm0uc3VueXNiLmVkdT4KCgkqIFt3aW5kb3dzL2RjZS5jXSBbd2luZG93cy93aW5wb3MuY10KCU92ZXJyaWRlIFNhdmVVbmRlciBhdHRyaWJ1dGUgd2hlbiBwYWludGluZyB0b29rIHBsYWNlCglpbiBhIHdpbmRvdyBiZWxvdy4gRm9yY2UgWCB0byByYWlzZSBhY3RpdmF0ZWQgd2luZG93IAoJaW4gc2VhbWxlc3MgbW9kZS4KCgkqIFttaXNjL2NsaXBib2FyZC5jXSBbd2luZG93cy9ldmVudC5jXQoJVHJhbnNsYXRpb24gYmV0d2VlbiBET1MgYW5kIFVuaXggdGV4dCBmb3JtYXRzIGFuZCBzZXZlcmFsCglvdGhlciBmaXhlcyBmb3IgdGhlIHN1ZGRlbiBzZWxlY3Rpb24gbG9zcy4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCUFwcGx5ICJmaXJzdCIgYW5kICJsYXN0IiB3aGVuIGNoZWNraW5nIGZvciBXTV9RVUlUIGluIAogICAgICAgIE1TR19QZWVrTWVzc2FnZSgpLgoKCSogW3dpbmRvd3Mvd2luLmNdCglSZWFycmFuZ2VkIERlc3Ryb3lXaW5kb3coKSB0byBmaXQgIldpbmRvd3MgSW50ZXJuYWxzIgoJZGVzY3JpcHRpb24uCgoJKiBbd2luZG93cy93aW4uY10gW3dpbmRvd3Mvd2lucG9zLmNdIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJTWlzYy4gZml4ZXMgdG8gQ0JUIGhvb2sgY2FsbHMuCgoJKiBbY29udHJvbHMvbWVudS5jXSBbbWlzYy91c2VyLmNdCglGaXh1cCByZXNpZGVudCBwb3B1cCBtZW51IHdpbmRvdyBzbyB0aGF0IGl0IGRvZXNuJ3QgZ2V0CglkZXN0cm95ZWQgYnkgVVNFUl9BcHBFeGl0KCkuCgoJKiBbbG9hZGVyL21vZHVsZS5jXSBbbG9hZGVyL3Rhc2suY10gW3dpbmRvd3MvZXZlbnQuY10KCVByb2Nlc3MgInVuc2FmZSIgWCBldmVudHMgb3V0c2lkZSB0aGUgc2NoZWR1bGVyIHRvIHByZXZlbnQKCWRlYWRsb2Nrcy4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10gW3dpbmRvd3MvcXVldWUuY10gW3dpbmRvd3Mvd2lucG9zLmNdCglMb3RzIG9mIGZpeGVzIGZvciBiZXR0ZXIgV2luMTYgbXVsdGl0YXNraW5nLgoKV2VkIFNlcCAyNSAyMDozNjozMCAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUFkZGVkIHNvbWUgbWlzc2luZyBIT09LIGRlZmluZXMuCgoJKiBbbWlzYy9zaGVsbC5jXVtpZjE2MzIvc2hlbGwzMi5zcGVjXVtpbmNsdWRlL3NoZWxsLmhdCglTSEdldEZpbGVJbmZvQSBzdHViIGFkZGVkICh3aW45NSBtcGxheWVyLmV4ZSAvcGxheSBibGEuYXZpKS4KCgkqIFt3aW4zMi9jb25zb2xlLmNdW2luY2x1ZGUvd2luY29uLmhdCglHZXRDb25zb2xlU2NyZWVuQnVmZmVySW5mbywgR2V0TGFyZ2VzdENvbnNvbGVXaW5kb3dTaXplIGFkZGVkLgoKCSogW21pc2MvcmVnaXN0cnkuY10KCVNvbWUgbnVsbCBwdHIgZml4ZXMuCgoJKiBbbG9hZGVyL3BlX2ltYWdlLmNdCglGaXhlZCBleHBvcnRlZCBmdW5jdGlvbiBsb29rdXAuIChtc3ZjcnQyMC5kbGwpCglBZGQgZGVidWdzeW1zIGZvciBlbnRyeXBvaW50LCBleHBvcnRlZCBmdW5jdGlvbnMgYW5kIHNlY3Rpb25zLgoKCSogW211bHRpbWVkaWEvbW1zeXN0ZW0uY10KCU1DSU9wZW46IHN1cHBvcnQgZm9yIGVsZW1lbnQgb3BlbnMgKG1wbGF5ZXIuZXhlIC9wbGF5IGJsYS5hdmkpLgoKCSogW3NldmVyYWxdCglBZGRlZCBzZXZlcmFsIG1pc3NpbmcgdGhpbmdzL3N0dWJzL3NpbXBsZSB0aHVua3MgZnJvbSB3aW4zMgoJdG8gd2luMTYgY29kZS4KClNhdCBTZXAgMjEgMTc6Mjc6NDQgMTk5NiAgTy5GbGViYmUgIDxmbGViYmVAc2NpZW5jZS1jb21wdXRpbmcudW5pLXR1ZWJpbmdlbi5kZT4KCgkqIFt3aW5kb3dzL3Byb3BlcnR5LmNdCglGaXhlZCBkZWJ1Z2dpbmcgb2YgMTYgQml0IFJlbW92ZVByb3AoKS4KCgkqIFtkZWJ1Z2dlci9tZW1vcnkuY10KCUFkZGVkIERFQlVHX2NoZWNrbWFwX2JhZCgpIGZvciBsaW51eC4KClRodSBTZXAgMTkgMjA6NDg6MzEgMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdIFt3aW5kb3dzL2hvb2suY10KCVVzZSBFbmFibGVIYXJkd2FyZUlucHV0KCkgZm9yIEpvdXJuYWxQbGF5YmFjayBob29rLgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUNoYW5nZWQgaGFuZGxpbmcgb2YgTEJfR0VUSVRFTVJFQ1QgaW4gZW1wdHkgbGlzdGJveGVzLgoKVGh1IFNlcCAxOSAxMzozNDozNSAxOTk2ICBTbGF2ZW4gUmV6aWMgIDxlc2VydGVAY3MudHUtYmVybGluLmRlPgoKCSogW21pc2MvbWFpbi5jXQoJRml4ZXMgdG8gWCByZXNvdXJjZXMgaGFuZGxpbmcuCQoKV2VkIFNlcCAxOCAwMDozMToxNSAxOTk2ICBIdXcgRC4gTS4gRGF2aWVzIDxoLmRhdmllczFAcGh5c2ljcy5veGZvcmQuYWMudWs+CgoJKiBbb2JqZWN0cy9tZXRhZmlsZS5jXSBbaW5jbHVkZS9nZGkuaF0gW29iamVjdHMvZGMuY10KCUluZGl2aWR1YWwgaGFuZGxlIHRhYmxlIGNyZWF0ZWQgZm9yIGVhY2ggbWV0YWZpbGUuIEZpeGVkCiAJR2xvYmFsUmVBbGxvYygpIGJ1ZyBpbiBNRl9BZGRIYW5kbGVEQygpICh3YXMgTUZfQWRkSGFuZGxlSW50ZXJuYWwpLgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10gW29iamVjdHMvZGMuY10KCVJlY3RhbmdsZSgpIGNoYW5nZWQgdG8gd29yayBiZXR0ZXIgd2l0aCB3aWRlIHBlbnMgYW5kIFBTX05VTEwuCglVc2UgSm9pbk1pdGVyLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglNYWtlIHRoZSB3aG9sZSAobm9uIFgpIHdpbmRvdyBpbnZhbGlkIG9uIHJlc2l6ZSBpZiBDU19bVkhdUkVEUkFXCiAJaXMgc2V0LgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglBZGp1c3RXaW5kb3dSZWN0RXgoKSBzaG91bGQgcGVyZm9ybSBjYWxjdWxhdGlvbnMgZXZlbiBpZiB0aGUKIAl3aW5kb3cgaXMgbWluaW1pemVkLgoKCSogW3dpbmRvd3MvbWRpLmNdCglCZXR0ZXIgaGFuZGxpbmcgb2Ygc3lzdGVtIGJ1dHRvbiBwYWludGluZy4gTWF4aW1pemVkIHdpbmRvd3MgY2FuCiAJY29udGFpbiBzY3JvbGwgYmFycy4gSWNvbnMgbm93IG1heGltaXplIHByb3Blcmx5LgoKCSogW3dpbmRvd3MvZGVmd25kLmNdIFt3aW5kb3dzL25vbmNsaWVudC5jXSBbY29udHJvbHMvbWVudS5jXQoJSW1wcm92ZWQgZ3JleWluZyBvZiBpdGVtcyBpbiBzeXN0ZW0gbWVudS4gV01fSU5JVE1FTVVQT1BVUCBubwogCWxvbmdlciBjYXVnaHQgaW4gRGVmV25kUHJvYywgREVGV05EX0luaXRTeXNNZW51UG9wdXAgbW92ZWQgdG8KIAltZW51LmMuCgpNb24gU2VwIDE2IDIxOjMwOjAwIDE5OTYgIFV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnRoLWRhcm1zdGFkdC5kZT4KCgkqIFtzZXZlcmFsIGZpbGVzXQoJRml4IG1pc3NpbmcgaW5jbHVkZXMgYW5kIHdyb25nIHByaW50aW5nIGFyZ3VtZW50cy4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglEb24ndCBzb3J0IGRyaXZlcyBpbiBMaXN0Qm94RGlyZWN0b3J5KCkuCgkKU2F0IFNlcCAxNCAwOTowNTo0NyAxOTk2ICBQZXRyaSBUdW9tb2xhIDxwdHVvbW9sYUB4czRhbGwubmw+CgoJKiBbd2luZG93cy9kaWFsb2cuY10KCUZpeGVkIGhhbmRsaW5nIG9mIFNoaWZ0LVRBQiBpbiBkaWFsb2dzLgoKVGh1IFNlcCAxMiAxODozMTowMCAxOTk2ICBUaG9tYXMgU2FuZGZvcmQgPHQuZC5nLnNhbmRmb3JkQHByZHMtZ3JuLmRlbW9uLmNvLnVrPgoKCSogW2lmMTYzMi9nZGkzMi5zcGVjXQoJQWRkZWQgU2VsZWN0Q2xpcFJnbiAtIGNhbGwgd2luMTYgdmVyc2lvbi4KCgkqIFtpZjE2MzIvdXNlcjMyLnNwZWNdCglBZGRlZCBHZXRBc3luY0tleVN0YXRlLCBHZXRNZW51SXRlbUlEIGFuZCBHZXRNZW51U3RyaW5nQS4KCgkqIFtpbmNsdWRlL3dpbmNvbi5oXQoJQWRkZWQgQ09PUkQgYW5kIFNNQUxMX1JFQ1QgdHlwZWRlZnMsIG1vdmVkIENPTlNPTEVfU0NSRUVOX0JVRkZFUl9JTkZPCglvdXQgb2YgI2lmIDAgcHJvdGVjdGVkIHBvcnRpb24gb2YgZmlsZS4KCgkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KCVBFX0luaXRURUIoKSAtIFRpZHkgdXAsIGJ1ZyBmaXggdG8gc3RhY2sgcG9pbnRlciB2YWx1ZSAoQm9ybGFuZAoJcHJvZ3JhbXMgbm93IHdvcmsgYmV0dGVyKQoKCSogW3dpbjMyL2NvbnNvbGUuY10KCUFkZGVkIHN0dWIgZnVuY3Rpb25zIGZvciBHZXRDb25zb2xlU2NyZWVuQnVmZmVySW5mbyBhbmQgCglHZXRMYXJnZXN0Q29uc29sZVdpbmRvd1NpemUKCgkqIFt3aW4zMi9maW5kZmlsZS5jXQoJRmluZEZpcnN0RmlsZTMyQSgpIC0gcmVtb3ZlZCBlcnJvbmVvdXMgc3RyY3B5CgoJKiBbd2luZG93cy9rZXlib2FyZC5jXQoJR2V0QXN5bmNLZXlTdGF0ZSgpIC0gYnVnIGZpeCAtIG5vdyByZXR1cm5zIHZhbHVlIGFzIHBlciBNaWNyb3NvZnQKCXNwZWNpZmljYXRpb24uIE5CIC0gSSBzdGlsbCBoYXZlIGRvdWJ0cyBhYm91dCBzb21lIG90aGVyIGZ1bmN0aW9ucwoJaW4gdGhpcyBmaWxlLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpXZWQgU2VwIDExIDE4OjA4OjMwIDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbd2luZG93cy9ldmVudC5jXQoJTWlub3IgaW1wcm92ZW1lbnRzIGluIHNldHRpbmcgZXZlbnQgdGltZSBpbiBNU0cgc3RydWN0LgoKCSogW3dpbmRvd3MvaG9vay5jXQoJUmVtb3ZlZCBhbiB1c2VsZXNzICd1bmltcGxlbWVudGVkIGhvb2snIG1lc3NhZ2UuCgoJKiBbd2luZG93cy93aW4uY10KCUFkZGVkIGEgV0hfQ0JUIGhvb2sgY2FsbCBkdXJpbmcgd2luZG93IGNyZWF0aW9uOiBnb29kIGZvciBDVEwzRC5ETEwKCldlZCBTZXAgMTEgMTE6MTk6NTYgMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KCUZpeGVkIGltcG9ydHMgd2l0aCBubyBuYW1lL29yZGluYWwgbGlzdCAoTUZDMzAuRExMKS4KCUFkZGVkIGJvcmxhbmQgc3R5bGUgLSBvcmRpbmFsIGltcG9ydCAod3NvY2szMi5kbGwpLgoKCSogW2ZpbGVzL2ZpbGUuY10gW3dpbjMyL2ZpbGUuY10gW2lmMTYzMi9rZXJuZWwuc3BlY10KCSAgW2lmMTYzMi9rZXJuZWwzMi5zcGVjXSBbaW5jbHVkZS93aW5kb3dzLmhdCglXaW4zMiBhbmQgV2luMTYgY29kZSB1c2UgdGhlIHNhbWUgZmlsZWhhbmRsZXMvSEZJTEVzLgoJQWRkZWQgU2V0RW5kT2ZGaWxlLCBNb3ZlRmlsZSosIGRpdmVyc2UgKlcgZnVuY3Rpb25zLgoKCSogW2xvYWRlci9wZV9pbWFnZS5jXQoJRml4ZWQgYXJndW1lbnQgMiB0byBEbGxFbnRyeS4KCgkqIFttaXNjL2NvbW0uY10KCUFkYXB0IHRvIGZpbGVoYW5kbGluZyBjaGFuZ2VzLCB3aW4zMiBjb2RlIHN0aWxsIGJyb2tlbi4KCgkqIFttaXNjL3JlZ2lzdHJ5LmNdCglVc2UgV2luZSBmaWxlaGFuZGxpbmcuCglTdGFydHVwUmVnaXN0cnkgdG8gYWRkIHN0YXJ0dXAtZGV0ZWN0ZWQgcmVnaXN0cnkgZW50cmllcy4KCgkqIFttaXNjZW11L2RwbWkuY10gW21pc2NlbXUvaW50MjEuY10KCVNvbWUgbWlzc2luZyBpbnRlcnJ1cHQtZnVuY3Rpb25zIGFkZGVkLgoKCSogW2lmMTYzMi9nZGkzMi5zcGVjXVtpZjE2MzIvdXNlcjMyLnNwZWNdCglTb21lIHRodW5rcyB0byAxNiBiaXQgZXF1aXZhbGVudCBmdW5jdGlvbnMgYWRkZWQuCgpTYXQgU2VwICA3IDExOjM2OjU3IEVEVCAxOTk2ICBNYXR0aGV3IEdoaW8gPGdoaW9AbmV0Y29tLmNvbT4KCgkqIFttaXNjL3dpbnNvY2tldC5jXQoJUmV3cm90ZSBXSU5TT0NLX3NlbGVjdCgpIGFuZCBXU0FGRElzU2V0KCkgdG8gcHJvcGVybHkgY29udmVydAoJV2luZG93cyBmZF9zZXQgc3RydWN0cy4KCgkqIFtpZjE2MzIvd2luc29jay5zcGVjXQoJQ29ycmVjdGVkIGFyZ3VtZW50cyB0byBzZWxlY3QoKS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIFNlcCAgMSAxOToyMjo0NiAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFttaXNjL2NvbW1kbGcuY10gW2lmMTYzMi9jb21tZGxnLnNwZWNdCglGaXhlZCBzb21lIFNFR1BUUiBwcm9ibGVtcy4KCgkqIFt3aW5kb3dzL3dpbnByb2MuY10KCUFkZGVkIG1lc3NhZ2UgdHJhbnNsYXRpb24gZm9yIFdNX0NPTVBBUkVJVEVNLCBXTV9ERUxFVEVJVEVNCglhbmQgV01fTUVBU1VSRUlURU0KCUZpeGVkIDE2LXRvLTMyIHRyYW5zbGF0aW9uIGZvciBXTV9IU0NST0xML1dNX1ZTQ1JPTEwuCgpGcmkgQXVnIDMwIDEzOjM5OjAwIDE5OTYgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJKiBbZmlsZXMvZHJpdmUuY10KCUdldERyaXZlVHlwZTE2IHNob3VsZCByZXBvcnQgQ0RST01zIGFzIERSSVZFX1JFTU9URSAoQUNNRSBzZXR1cCkuCgoJKiBbbXVsdGltZWRpYS9hdWRpby5jXQoJVGhlIG1pbmltdW0gYXVkaW9idWZmZXIgc2l6ZSBzaHJ1bmsgc29tZXdoZXJlIGluIGxpbnV4IDEuMy54eAoJYmVsb3cgNDA5NiBieXRlcy4KCgkqIFttdWx0aW1lZGlhL21jaXN0cmluZy5jXQoJU2VncHRyIHN0cmluZyBoYW5kbGluZyBmaXhlZCAmIGVuaGFuY2VkLgoKCSogW2lmMTYzMi9jcnRkbGwuc3BlY11bbWlzYy9jcnRkbGwuY10KCW1hbGxvYyxmcmVlLF9zdHJ1cHIsX3N0cmljbXAsX3N0cmNtcGkgYWRkZWQuCgoJKiBbaWYxNjMyL3dzb2NrMzIuc3BlY11bbWlzYy93aW5zb2NrLmNdCglNb3JlIGRpcmVjdCB0aHVua3MgaW50byB1bml4IGxpYmMgYW5kIFdzQ29udHJvbC1zdHViIGFkZGVkLgoKVGh1IEF1ZyAyOSAyMzo1NDoyNSAxOTk2ICBIdXcgRC4gTS4gRGF2aWVzIDxoLmRhdmllczFAcGh5c2ljcy5veGZvcmQuYWMudWs+CgoJKiBbb2JqZWN0cy9tZXRhZmlsZS5jXQoJQnVnIGZpeGVzIHRvIGJvdGggcmVjb3JkaW5nIGFuZCBwbGF5YmFjayBvZiBFeHRUZXh0T3V0KCkuCgpUdWUgQXVnIDI3IDE1OjQzOjIxIDE5OTYgIFNsYXZlbiBSZXppYyAgPGVzZXJ0ZUBjcy50dS1iZXJsaW4uZGU+CgoJKiBbbXVsdGltZWRpYS9hdWRpby5jXSBbbXVsdGltZWRpYS9tY2lhbmltLmNdCgkgIFttdWx0aW1lZGlhL21jaWNkYS5jXSBbbXVsdGltZWRpYS9taWRpLmNdCglNYWRlIGNkYXVkaW8sIGF1ZGlvIGFuZCBtaWRpIHdvcmsgZm9yIEZyZWVCU0QuCgpTdW4gQXVnIDI1IDIwOjE4OjU2IDE5OTYgIEp1a2thIElpdm9uZW4gPGlpdm9uZW5AY2MuaGVsc2lua2kuZmk+CgoJKiBbbWlzYy9jcnRkbGwuY10gW2lmMTYzMi9jcnRkbGwuc3BlY10KCUFkZGVkIGEgbG90IG9mIGZ1bmN0aW9ucy4KCgkqIFttaXNjL29sZTJubHMuY10KCUFkZGVkIElEIHZhbHVlcyBmb3IgYWxsIGxhbmd1YWdlcyBpbiBHZXRVc2VyRGVmYXVsdExDSUQoKS4KCQpGcmkgQXVnIDI0IDIxOjAyOjI4IDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbd2luZG93cy9ldmVudC5jXSBbd2luZG93cy9tZXNzYWdlLmNdCglGaXJzdCBhdHRlbXB0IGF0IGhvb2sgV0hfSk9VUk5BTFBMQVlCQUNLLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTYXQgQXVnIDI0IDEzOjU3OjAxIDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJUmVuYW1lZCBTQ1JPTExJTkZPIHRvIFNDUk9MTEJBUl9JTkZPIHRvIGF2b2lkIGNvbmZsaWN0IHdpdGggV2luMzIuCgoJKiBbZ3JhcGhpY3MvZHJpdmVyLmNdIFtpbmNsdWRlL3gxMWRydi5oXQoJTmV3IGZpbGVzIGZvciBncmFwaGljcyBkcml2ZXIgaGFuZGxpbmcuCgoJKiBbaWYxNjMyL3JlbGF5LmNdIFtpbmNsdWRlL3JlZ2lzdGVycy5oXSBbdG9vbHMvYnVpbGQuY10KCUltcGxlbWVudGVkIFdpbjMyIHJlZ2lzdGVyIGZ1bmN0aW9ucy4gTm90IHJlYWxseSB0ZXN0ZWQgeWV0LgoKCSogW2luY2x1ZGUvZ2RpLmhdCglBZGRlZCBhIGxvdCBvZiBmdW5jdGlvbnMgdG8gdGhlIERDIGZ1bmMgdGFibGUuCgoJKiBbbG9hZGVyL3BlX2ltYWdlLmNdCglJbml0aWFsaXNlICVmcyBiZWZvcmUgY2FsbGluZyBvdXQgdG8gMzItYml0IGNvZGUuCgoJKiBbd2luZG93cy9ob29rLmNdCglGaXhlZCBidWcgaW4gSE9PS19HZXRIb29rKCkuCgoJKiBbd2luZG93cy93aW4uY10KCUZpeGVkIEZpbmRXaW5kb3cgdG8gcmV0dXJuIGFuIGVycm9yIGlmIHRoZSBjbGFzcyBuYW1lIGRvZXNuJ3QgZXhpc3QuCgpXZWQgQXVnIDIxIDE1OjE1OjUzIDE5OTYgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW2lmMTYzMi9NYWtlZmlsZS5pbl0gW21pc2MvbXByLmNdIFtpZjE2MzIvbXByLnNwZWNdCgltcHIuZGxsIHNwZWNzIGFkZGVkLgoKCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXSBbd2luMzIvbmV3Zm5zLmNdIFttZW1vcnkvZ2xvYmFsLmNdCglRdWVyeVBlcmZvcm1hbmNlQ291bnRlcigpLCBHbG9iYWxNZW1vcnlTdGF0dXMoKSBhZGRlZC4KCgkqIFtpZjE2MzIvdXNlcjMyLnNwZWNdIFt3aW4zMi9lcnJvci5jXQoJU2V0TGFzdEVycm9yRXgoKSBhZGRlZC4KCgkqIFttaXNjL2NvbW1kbGcuY10KCWxwc3RyRmlsdGVyIG1pZ2h0IGJlIE5VTEwgaW4gRklMRV9XTUluaXREaWFsb2cgKE5TIDMuMCBzZXR1cCkuCgoJKiBbbWlzYy9yZWdpc3RyeS5jXQoJU29tZSBtaXNzaW5nIE5VTEwgcHRyIGNoZWNrcyBhZGRlZCwgbWlzYyBjbGVhbiB1cC4KClR1ZSBBdWcgMjAgMjE6MDA6MDAgMTk5NiBBbGV4IEtvcm9ia2EgIDxhbGV4QHBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbY29udHJvbHMvbWVudS5jXQoJQWRqdXN0IHBvcHVwIG1lbnUgY29vcmRpbmF0ZXMgc28gdGhhdCBpdCBhbHdheXMgc3RheXMgd2l0aGluIAoJdGhlIGRlc2t0b3AuCgoJKiBbbWlzYy9tYWluLmNdCglGaXhlZCBHZXRFbnZpcm9ubWVudCgpIHJldHVybiB2YWx1ZSBmb3IgbHBFbnYgPT0gTlVMTCBjYXNlLgoKTW9uIEF1ZyAxOSAyMjo0ODozNiAxOTk2ICBKdWtrYSBJaXZvbmVuIDxpaXZvbmVuQGNjLmhlbHNpbmtpLmZpPgoKCSogW21pc2MvY3J0ZGxsLmNdIFtpZjE2MzIvY3J0ZGxsLnNwZWNdCglBZGRlZCBzb21lIGlzKiBmdW5jdGlvbnMsIHN0cmxlbiBhbmQgdG9sb3dlci4KCQpNb24gQXVnIDE5IDEzOjMzOjEzIDE5OTYgIFN0ZXBoZW4gU2ltbW9ucyAgPHNzaW1tb25zQHZpdHNlbWkuY29tPgoKCSogW3Rvb2xzL3dpbmVjb25mXQoJTmV3IHBlcmwgc2NyaXB0IHRvIGdlbmVyYXRlIHRoZSB3aW5lLmNvbmYgZmlsZS4KCkZyaSBBdWcgMTYgMTU6MzE6NDQgMTk5NiAgIEpvaG4gSGFydmV5IDxqb2huQGRpdmlzaW9uLmNvLnVrPgoKCSogW2lmMTYzMi9nZGkuc3BlY10KICAgICAgICBMb3RzIG9mIHByaW50ZXIgZnVuY3Rpb25zLgoJCgkqIFtpbmNsdWRlL2NhbGxiYWNrLmhdCiAgICAgICAgTmV3IGZ1bmN0aW9ucyBmb3IgcHJpbnRlciBkcml2ZXIgc3VwcG9ydC4KCgkqIFtpbmNsdWRlL2dkaS5oXQogICAgICAgIE5ldy9jaGFuZ2VkIHN0cnVjdHVyZXMgdG8gc3VwcG9ydCBwcmludGVyIGRyaXZlci4KCgkqIFttaXNjL2VzY2FwZS5jXQogICAgICAgIE5ldyB2ZXJzaW9uIHRoYXQgdXNlcyBmdW5jdGlvbiB0YWJsZSBpbiBEQyBzdHJ1Y3R1cmUuCgoJKiBbb2JqZWN0cy9kYy5jXQogICAgICAgIENyZWF0ZURDIGNvcGVzIHdpdGggdGhpbmdzIG90aGVyIHRoYW4gRGlzcGxheS4KCVggY29kZSBmb3IgQ3JlYXRlREMgbW92ZWQgdG8gZ3JhcGhpY3MveDExZHJ2IGRpcmVjdG9yeS4KCUNyZWF0ZUNvbXBhdGlibGVEQyBjb3BpZXMgZnVuYyB0YWJsZSBmcm9tIG9yaWdpbmFsIERDLgoKCSogW29iamVjdHMvZm9udC5jXQogICAgICAgIEdldFRleHRFeHRlbnRQb2ludDMyQSxHZXRUZXh0TWV0cmljczE2IHVzZSBmdW5jdGlvbiB0YWJsZSBpbgogICAgICAgIERDIGFuZCBjb2RlIG1vdmVkIHRvIGRyaXZlcnMgZGlyZWN0b3J5LgoKCSogW21pc2MvcHJpbnRkcnYuY10gW2dyYXBoaWNzLyovKl0gW2luY2x1ZGUvd2luMTZkcnYuaF0KICAgICAgICBOZXcgZmlsZXMgZm9yIHByaW50ZXIgc3VwcG9ydC4gCgpGcmkgQXVnIDE2IDEyOjMzOjAwIDE5OTYgIEJydWNlIE1pbG5lciA8QnJ1Y2UuTWlsbmVyQGdlbmV0aWNzLnV0YWguZWR1PgoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJQWRkZWQgU2V0U2Nyb2xsSW5mbzMyIGFuZCBHZXRTY3JvbGxJbmZvMzIuICBUaGVzZSBqdXN0IGNhbGwgZXhpc3RpbmcKCWNvZGUuIFRoZXJlIGFyZSBhIGZldyBvcHRpb25zIGluIHdoaWNoIEknbSBwcm9iYWJseSB0aGUgd3JvbmcgcGVyc29uCglmb3IgdGhlIGpvYiAocGFnZSBzaXplIGFuZCBkaXNhYmxlIGJhcikuIFRoZXJlIGFyZSBjb21tZW50cyBpbiB0aGUKCWNvZGUgYXMgdG8gd2hhdCB0aGV5IHNob3VsZCBkby4KCgkqIFtvYmplY3RzL2dkaW9iai5jXSBbb2JqZWN0cy9mb250LmNdIFtpbmNsdWRlL2ZvbnQuaF0KCUFkZGVkIDMyIGJpdCB2ZXJzaW9uIG9mIEZPTlRfR2V0T2JqZWN0LgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gQXVnIDE4IDEyOjE3OjU0IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2ZpbGVzL2RyaXZlLmNdCglBZGRlZCAnRmlsZXN5c3RlbScgb3B0aW9uIGluIGRyaXZlcyBjb25maWd1cmF0aW9uLgoKCSogW2ZpbGVzL2Rvc19mcy5jXSAKCUFkZGVkIGhhbmRsaW5nIG9mIGNhc2UtaW5zZW5zaXRpdmUgZmlsZXN5c3RlbXMuCgoJKiBbbWVtb3J5L3NlbGVjdG9yLmNdIFtpbmNsdWRlL3N0YWNrZnJhbWUuaF0KCVJlbW92ZWQgTUFLRV9TRUdQVFIuCgoJKiBbbWlzYy9jb21tZGxnLmNdIFttdWx0aW1lZGlhL21jaXN0cmluZy5jXQoJUmVwbGFjZWQgTUFLRV9TRUdQVFIgYnkgdGhlIFNFR1BUUl8qIG1hY3Jvcy4KCgkqIFtvYmplY3RzL2JpdGJsdC5jXSBbd2luZG93cy9ncmFwaGljcy5jXQoJVXNlIGFuIGludGVybWVkaWFyeSBwaXhtYXAgdG8gYXZvaWQgc29tZSBCYWRNYXRjaCBlcnJvcnMgb24KCVhHZXRJbWFnZSgpLgoKU3VuIEF1ZyAxOCAwOToyMToyNyAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJQWRkZWQgaGFuZGxpbmcgb2YgV01fTkMuLi5tb3VzZSBtZXNzYWdlcyBpbiBKT1VSTkFMUkVDT1JEIGhvb2suCgoJKiBbbWlzYy92ZXIuY10KCUZpeGVkIGEgYmFkIHN0cmluZyByZXN1bHQgaW4gVmVyUXVlcnlWYWx1ZVsxNnwzMkF8MzJXXS4KCkZyaSBBdWcgMTYgMTk6NTU6MDQgMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbaWYxNjMyL2NydGRsbC5zcGVjXSBbbWlzYy9jcnRkbGwuY10KCU1vcmUgYWRkaXRpb25zIHRvIGdldCB3aW45NSBwcm9ncmFtcyBmdXJ0aGVyIGRvd24gdGhlIHJvYWQuCgoJKiBbaWYxNjMyL2tlcm5lbC5zcGVjXSBbbG9hZGVyL21vZHVsZS5jXQoJR2V0TW9kdWxlTmFtZSgpIGFkZGVkLgoJTG9hZE1vZHVsZSgpOiBwYXJhbXMtPnNob3dDbWQgY2FuIGJlIE5VTEwuCgoJKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdIFtpZjE2MzIvdGh1bmsuY10KCVRodW5rQ29ubmVjdDMyKCkgc3R1YiBhZGRlZC4KCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCUVudHJpZXMgaW5jbHVkZSBsYXN0ZW50cnkuCgoJKiBbbWlzYy9zaGVsbC5jXSBbZmlsZXMvZmlsZS5jXQoJTWFkZSBwcm9nbWFuIHdvcmsgYWdhaW4uCgpGcmkgQXVnIDE2IDA5OjAwOjAwIDE5OTYgIEFsZXggS29yb2JrYSA8YWxleEBwaG0zMC5waGFybS5zdW55c2IuZWR1PgoJCgkqIFt3aW5kb3dzL2RlZnduZC5jXSBbd2luZG93cy93aW5wb3MuY10gW3dpbmRvd3MvcGFpbnRpbmcuY10KCUljb24gcGFpbnRpbmcgZml4ZXMuCgoJKiBbd2luZG93cy93aW5wb3MuY10gW3dpbmRvd3MvcGFpbnRpbmcuY10KCUVuZm9yY2UgYW5kIGZvbGxvdyBocmduVXBkYXRlIG1vcmUgY2xvc2VseSB0byBjdXQgZG93biBvbgoJcmVkdW5kYW50IFJlZHJhd1dpbmRvdygpIGNhbGxzLgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCVByb2Nlc3MgQ29uZmlndXJlTm90aWZ5IG9ubHkgZm9yIG1hbmFnZWQgd2luZG93cy4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJRG8gbm90IHJlZHJhdyBwYXJlbnQgaWYgdGhlIHdpbmRvdyB3YXMgaGlkZGVuIGJlZm9yZSBTZXRXaW5kb3dQb3MoKS4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJT21pdCBzb21lIG5vbmNsaWVudCBkZWNvcmF0aW9uIHBhaW50aW5nIGZvciBtYW5hZ2VkIHdpbmRvd3MuCgoJKiBbY29udHJvbHMvbWVudS5jXSBbd2luZG93cy9tZGkuY10gW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglJbXBsZW1lbnRlZCBXTV9ORVhUTUVOVS4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglNdWx0aWNvbHVtbiBsaXN0Ym94ZXMgcmV0dXJuIFdWUl9WUkVEUkFXIG9uIFdNX05DQ0FMQ1NJWkUuCgoJKiBbbWlzYy9zaGVsbC5jXQoJQWRkZWQgLklDTyBmaWxlIGhhbmRsaW5nIHRvIEV4dHJhY3RJY29uKCkuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBBdWcgMTEgMTM6MDA6MjAgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbY29uZmlndXJlLmluXSBbaW5jbHVkZS9hY2NvbmZpZy5oXSBbdG9vbHMvYnVpbGQuY10KCUFkZGVkIGNoZWNrIGZvciB1bmRlcnNjb3JlIG9uIGV4dGVybmFsIHN5bWJvbHMuCgoJKiBbbWVtb3J5L3NlbGVjdG9yLmNdIFttZW1vcnkvZ2xvYmFsLmNdCglGaXhlZCBGcmVlU2VsZWN0b3IoKSB0byBmcmVlIG9ubHkgb25lIHNlbGVjdG9yLgoJQWRkZWQgU0VMRUNUT1JfRnJlZUJsb2NrKCkgdG8gZnJlZSBhbiBhcnJheSBvZiBzZWxlY3RvcnMuCgoJKiBbb2JqZWN0cy9jb2xvci5jXQoJRml4ZWQgYSBidWcgaW4gQ09MT1JfVG9Mb2dpY2FsKCkgdGhhdCBjYXVzZWQgR2V0UGl4ZWwoKSB0byBmYWlsIG9uCgloaS1jb2xvciBkaXNwbGF5cy4KCgkqIFt0b29scy9idWlsZC5jXSBbaWYxNjMyL2NydGRsbC5zcGVjXQoJQWRkZWQgJ2V4dGVybicgdHlwZSwgdXNlZCBmb3IgZXh0ZXJuYWwgdmFyaWFibGVzIG9yIGZ1bmN0aW9ucy4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJQWxsb3cgZGUtYWN0aXZhdGluZyBhIHdpbmRvdyBpbiBXSU5QT1NfQ2hhbmdlQWN0aXZlV2luZG93KCkuCgoJKiBbd2luZG93cy93aW5wcm9jLmNdCglBZGRlZCAzMi10by0xNiB0cmFuc2xhdGlvbiBmb3IgYnV0dG9uIG1lc3NhZ2VzLgoJRml4ZWQgV0lOUFJPQ19HZXRQdHIoKSB0byBhdm9pZCBjcmFzaGVzIG9uIDMyLWJpdCBwcm9jZWR1cmVzIHRoYXQKCWhhcHBlbiB0byBiZSB2YWxpZCBTRUdQVFJzLgoKU2F0IEF1ZyAxMCAxODoyMjoyNSAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJUmVtb3ZlZCBhIEZJWE1FIGluIE1TR19QZWVrSGFyZHdhcmVNc2coKTogcHJvZHVjZXMgY29ycmVjdCAKCWRhdGEgZm9yIHRoZSBKT1VSTkFMUkVDT1JELWhvb2sgKHVzaW5nIEVWRU5UTVNHMTYgc3RydWN0dXJlKS4KCgkqIFtpZjE2MzIvZ2RpLnNwZWNdIFtpbmNsdWRlL3dpbmRvd3MuaF0gW29iamVjdHMvbWV0YWZpbGUuY10KCUludHJvZHVjZWQgdW5kb2N1bWVudGVkIEFQSSBmdW5jdGlvbiBJc1ZhbGlkTWV0YUZpbGUoKSwgcGx1cyBhCiAJbWlub3IgZml4IGluIGxhc3QgcGF0Y2ggb2YgQ29weU1ldGFGaWxlKCkuCgoJKiBbb2JqZWN0cy9nZGlvYmouY10KCVJlbW92ZWQgYSBGSVhNRSBpbiBJc0dESU9iamVjdCgpOiBhZGRlZCBtYWdpYyB3b3JkIGNoZWNrLgoKU3VuIEF1ZyAxMCAxODoxMDoxMCAxOTk2ICBCcnVjZSBNaWxuZXIgPEJydWNlLk1pbG5lckBnZW5ldGljcy51dGFoLmVkdT4KCgkqIFtjb250cm9scy9zdGF0dXN3aW4uY10KCUZpcnN0IHBhc3MgYXQgaW1wbGVtZW50aW5nIHRoZSBTdGF0dXNXaW5kb3cgY2xhc3MuCgoJKiBbaW5jbHVkZS9jb21tY3RybC5oXQoJSGVhZGVyIGZpbGUgZm9yIGNvbW1vbiBjb250cm9scy4KCgkqIFtjb250cm9scy93aWRnZXRzLmNdCglBZGRlZCBJbml0Q29tbW9uQ29udHJvbHMoKS4KCgkqIFtpZjE2MzIvY29tY3RsMzIuc3BlY10KCUFkZCBEcmF3U3RhdHVzVGV4dEEsIENyZWF0ZVN0YXR1c1dpbmRvd0EsIEluaXRDb21tb25Db250cm9scy4KCgkqIFt3aW4zMi9maW5kZmlsZS5jXSBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdCglBZGQgRmluZE5leHRGaWxlMzJBLCBGaW5kQ2xvc2UuCglNb2RpZmllZCBGaW5kRmlyc3RGaWxlMzJBIHNvIGl0IHdvcmtzIHdpdGggRmluZE5leHRGaWxlMzJBLgoKCSogW2luY2x1ZGUvd2luYmFzZS5oXQoJRml4ZWQgV0lOMzJfRklORF9EQVRBIHN0cnVjdHVyZSBtZW1iZXIgbmFtZXMuCgpTYXQgQXVnIDEwIDA5OjAwOjAwIDE5OTYgIEFsZXggS29yb2JrYSA8YWxleEBwaG0zMC5waGFybS5zdW55c2IuZWR1PgoKCSogW3dpbmRvd3Mvc2Nyb2xsLmNdCglDaGFuZ2VkIHNjcm9sbGluZyByb3V0aW5lcyB0byBiZW5lZml0IGZyb20gRENFIGNvZGUgdXBkYXRlLgoKVGh1IEF1ZyAgOCAxODowNTowOSAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtmaWxlcy9maWxlLmNdCglTZWFyY2hQYXRoKiBjb3VsZCBnZXQgTlVMTCBmb3IgbGFzdHBhcnQgYXJndW1lbnQuCgoJKiBbaWYxNjMyL2J1aWxkLXNwZWMudHh0XSBbZG9jdW1lbnRhdGlvbi9kZWJ1Z2dpbmddCglWYXJhcmdzIGRvY3VtZW50YXRpb24gYWRkZWQsIGRlYnVnZ2luZyBoaW50cyB1cGRhdGVkLgoKCSogW2lmMTYzMi9jcnRkbGwuc3BlY11bbWlzYy9jcnRkbGwuY11bbWlzYy9NYWtlZmlsZS5pbl0KCVN0YXJ0ZWQgdG8gaW1wbGVtZW50IENSVERMTC4KCgkqIFtpZjE2MzIvd3NvY2szMi5zcGVjXQoJU29tZSB0aHVua3MgdG8gc3RhbmRhcmQgbGliYyBmdW5jdGlvbnMgKHN0cnVjdHVyZXMgaGF2ZSB0aGUgc2FtZQogCWVsZW1lbnRzLCBidXQgcGVyaGFwcyB3cm9uZyBvZmZzZXQgZHVlIHRvIHBhY2tpbmcpLgoKCSogW2luY2x1ZGUva2VybmVsMzIuaF1baW5jbHVkZS93aW5kb3dzLmhdW3dpbjMyLyouY11bbG9hZGVyL21haW4uY10KCU1lcmdlZCBrZXJuZWwzMi5oIGludG8gd2luZG93cy5oLgoKCSogW21pc2MvbHN0ci5jXQoJRW5oYW5jZWQgRm9ybWF0TWVzc2FnZSgpLgoKCSogW21pc2MvbWFpbi5jXSBbaWYxNjMyL2tlcm5lbC5zcGVjXSBbaW5jbHVkZS93aW5kb3dzLmhdCglHZXRWZXJzaW9uKCkgdXBkYXRlZCB0byBuZXcgbmFtaW5nIHN0YW5kYXJkLgoJQ2hhbmdlZCBsYW5ndWFnZSBoYW5kbGluZyB0byBzdXBwb3J0IGxhbmd1YWdlIGlkcy4KCgkqIFttaXNjL3NoZWxsLmNdCglFbmhhbmNlZCBGaW5kRXhlY3V0YWJsZSwgc28gaXQgZmluZHMgZmlsZXMgaW4gdGhlIHNlYXJjaCBwYXRoIHRvby4KCgkqIFt3aW4zMi9lbnZpcm9ubWVudC5jXQoJR2V0Q29tbWFuZExpbmUqIHVwZGF0ZWQuCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdIFtsb2FkZXIvcGVfcmVzb3VyY2UuY10KCUZpbmRSZXNvdXJjZUV4MzIqIGFkZGVkLgoJTG9hZGluZyBvZiBtZXNzYWdldGFibGVzIGFkZGVkLgoJTGFuZ3VhZ2UgaGFuZGxpbmcgbm93IHVzZXMgV2luZSBkZWZhdWx0IGxhbmd1YWdlIGlkLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gQXVnICA0IDE4OjE4OjQ4IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJQXR0ZW1wdGVkIHRvIGltcGxlbWVudCB1bmRvY3VtZW50ZWQgc2Nyb2xsLWJhciBtZXNzYWdlcy4KCgkqIFt0b29scy9idWlsZC5jXSBbaW5jbHVkZS9jYWxsYmFjay5oXSBbd2luZG93cy93aW5wcm9jLmNdCglDYWxsVG8xNl8qIGZ1bmN0aW9ucyBub3cgZ2V0IERTIGZyb20gdGhlIHByZXZpb3VzIDE2LWJpdCBzdGFja2ZyYW1lLgoKCSogW2lmMTYzMi90aHVuay5jXSBbaW5jbHVkZS9jYWxsYmFjay5oXQoJQWRkZWQgdGh1bmtzIHRvIGltcGxlbWVudCBjYWxsYmFja3MgZm9yIHRoZSBlbXVsYXRvci4gTm93IGFsbCB0aGUKCUVudW0qIGZ1bmN0aW9ucyBhbHdheXMgdGFrZSBhIHJlYWwgZnVuY3Rpb24gcG9pbnRlciBldmVuIGluIHRoZQoJZW11bGF0b3IuCgkKCSogW2xvYWRlci9idWlsdGluLmNdCglSZW1vdmVkIGJpbmFyeSBzZWFyY2ggaW4gQlVJTFRJTl9HZXRFbnRyeVBvaW50MzIoKSwgYXMgaXQgZGlkbid0CiAJd29yayB3aXRoIE5VTEwgZW50cnkgcG9pbnRzLiBVc2luZyBsaW5lYXIgc2VhcmNoIG5vdy4KCgkqIFtsb2FkZXIvbW9kdWxlLmNdCglJbXBsZW1lbnRlZCBJc1NoYXJlZFNlbGVjdG9yKCkuCgoJKiBbbG9hZGVyL3Rhc2suY10KCUNoYW5nZWQgU3dpdGNoU3RhY2tUby9CYWNrIHRvIHVzZSB0aGUgaW5zdGFuY2UgZGF0YSB0byBzdG9yZSB0aGUKCXByZXZpb3VzIHN0YWNrIGluc3RlYWQgb2YgdGhlIFREQi4gQWxzbyBjb3B5IHRoZSBsb2NhbCB2YXJpYWJsZXMKCW9udG8gdGhlIG5ldyBzdGFjay4KCUFkZGVkIEdldEV4ZVZlcnNpb24oKSBhbmQgU2V0VGFja1NpZ25hbFByb2MoKS4KCUltcGxlbWVudGVkIFNldFNpZ0hhbmRsZXIoKS4KClNhdCBBdWcgIDMgMjI6MTk6MDAgMTk5NiAgVGhvbWFzIFNhbmRmb3JkIDx0LmQuZy5zYW5kZm9yZEBwcmRzLWdybi5kZW1vbi5jby51az4KCgkqIFtjb250cm9scy9tZW51LmNdCgkiRml4ZWQiIHByb2JsZW0gaW4gZGVsZXRpbmcgbWVudXMgd2hlcmUgd2luMzIgY291bGQgZ2V0IGludG8gYW4KCWVuZGxlc3MgbG9vcCB3aGVuIGl0IGNyYXNoZWQuIEkgdGhpbmsgSSd2ZSBmaXhlZCB0aGUgc3ltcHRvbXMsIG5vdAoJdGhlIG9yaWdpbmFsIHByb2JsZW0gc28gaXQgbWlnaHQgYmUgd29ydGggZnVydGhlciBpbnZlc3RpZ2F0aW9uLgoKCSogW2RlYnVnZ2VyL3JlZ2lzdGVycy5jXQoJQWRkZWQgbWlzc2luZyAjaWZkZWZzIG9uIEZTX1JFRyBhbmQgR1NfUkVHLCBuZWVkZWQgZm9yIEZyZWVCU0QgdG8KCWNvbXBpbGUgd2luZSBwcm9wZXJseS4KCgkqIFtmaWxlcy9kb3NfZnMuY10KCU1hZGUgRE9TRlNfSGFzaCBhbmQgRE9TRlNfTWF0Y2ggbm9uLXN0YXRpYyBzbyB0aGV5IGNhbiBiZSBjYWxsZWQKCWZyb20gd2luMzIvZmluZGZpbGUuYyAocS52LikuCgoJKiBbaWYxNjMyL2dkaTMyLnNwZWNdCglBZGRlZCBTZXRNYXBNb2RlIChjYWxsIGV4aXN0aW5nIGZ1bmN0aW9uKQoKCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXQoJQWRkZWQgRmluZEZpcnN0RmlsZUEgYW5kIFNldEZpbGVBdHRyaWJ1dGVzQS4KCgkqIFtpZjE2MzIvdXNlcjMyLnNwZWNdCglBZGRlZCBCcmluZ1dpbmRvd1RvVG9wLCBDcmVhdGVQb3B1cE1lbnUsIEdldEtleVN0YXRlLCBHZXRQYXJlbnQsCglJc0RsZ0J1dHRvbkNoZWNrZWQgKGNhbGwgZXhpc3RpbmcgZnVuY3Rpb25zKSBhbmQgSXNEaWFsb2dNZXNzYWdlQSwKCVVuaG9va1dpbmRvd3NIb29rRXguCgoJKiBbd2luMzIvZmlsZS5jXQoJQWRkZWQgc3R1YiBmdW5jdGlvbiBTZXRGaWxlQXR0cmlidXRlczMyQS4gSXQncyBhIHN0dWIgYmVjYXVzZSBJCgljYW4ndCByZWFsbHkgd29yayBvdXQgd2hhdCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBkbyB3aXRoIG1vc3QKCWF0dHJpYnV0ZXMgaW4gYSBVbml4IGVudmlyb25tZW50LiBBbnlvbmUgY2FyZSB0byBleHBhbmQgaXQ/CgoJKiBbd2luMzIvZmluZGZpbGUuY10KCU5ldyBmaWxlLiBJbml0aWFsIHN0YWIgYXQgRmluZEZpcnN0RmlsZS4gVGhpcyBkb2Vzbid0IHdvcmsgYXMKCXNwZWNpZmllZCB5ZXQsIHRob3VnaCBhIGxvdCBvZiB0aGUgZ3JvdW5kd29yayBpcyB0aGVyZS4gSSBoYXZlbid0Cgl0aW1lIHRvIHdvcmsgb24gdGhpcyBmb3IgdGhlIG5leHQgbW9udGgsIHNvIGlmIGFueW9uZSB3YW50cyB0byBwaWNrCglpdCB1cCBhbmQgcnVuIHdpdGggaXQgcGxlYXNlIGRvLgoKCSogW3dpbjMyL21lbW9yeS5jXQoJUmVtb3ZlZCBtYWxsb2MuaCBmcm9tIGluY2x1ZGVzIChjb3ZlcmVkIGJ5IHN0ZGxpYi5oIGluY2x1ZGUsIGFuZAoJZ2V0cyByaWQgb2YgYSB3YXJuaW5nIGluIEZyZWVCU0QpLgoKCSogW3dpbjMyL25ld2Zucy5jXQoJVW5ob29rV2luZG93c0hvb2tFeDMyQSBzdHViIGFkZGVkLgoKCSogW3dpbjMyL3VzZXIzMi5jXQoJQWRkZWQgaW1wbGVtZW50YXRpb24gb2YgSXNEaWFsb2dNZXNzYWdlMzJBLgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglJc0RsZ0J1dHRvbkNoZWNrZWQgbm93IGNhbGxzIFNlbmREbGdJdGVtTWVzc2FnZTMyQSBpbnN0ZWFkIG9mCglTZW5kRGxnSXRlbU1lc3NhZ2UxNi4KClNhdCBBdWcgIDMgMTg6MDA6MDAgMTk5NiBBbGV4IEtvcm9ia2EgPGFsZXhAcGhtMzAucGhhcm0uc3VueXNiLmVkdT4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglSZW1vdmVkIHJlY3RhbmdsZSBjaGVja2luZyAoY29uZmxpY3RlZCB3aXRoIG5vbnN0YW5kYXJkCgltYXBwaW5nIG1vZGVzKS4gCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCUFkZGVkIGNoZWNrIGZvciBjaGlsZC1zdHlsZSBkaWFsb2dzIHRvIERTX0FCU0FMSUdOCgljb29yZGluYXRlIGNvbnZlcnNpb24uCgoJKiBbb2JqZWN0cy9jb2xvci5jXQoJQ2xlYW5lZCB1cCBtaXNjLiBiaXRzCgpUaHUgQXVnICAxIDEwOjUxOjQ1IDE5OTYgIEFuZHJldyBMZXd5Y2t5IDxwbGV3eWNreUBvaXNlLnV0b3JvbnRvLmNhPgoKCSogW3dpbmRvd3MvZm9jdXMuY10gW3dpbmRvd3MvZXZlbnQuY10gW3dpbmRvd3Mvd2luLmNdCgkgIFt3aW5kb3dzL2RlZmRsZy5jXQoJRml4ZXMgdG8gZm9jdXNpbmcgYW5kIGFjdGl2YXRpb24uCgoJKiBbd2luZG93cy9kZWZkbGcuY10KCVByb3Blcmx5KD8pIGhhbmRsZSBETV9HRVRERUZJRC4KCgkqIFtjb250cm9scy9jb21iby5jXQoJSGFuZGxlIENCX0ZJTkRTVFJJTkdFWEFDVCwgQ0JfU0VURURJVFNFTCwgQ0JfR0VURURJVFNFTC4KCUNCQ2hlY2tTaXplOiBBZGp1c3QgZWRpdCBwb3NpdGlvbi4KClR1ZSBKdWwgMzAgMDk6NDY6MzYgMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbZmlsZXMvZmlsZS5jXSBbaW5jbHVkZS9maWxlLmhdIFtsb2FkZXIvbW9kdWxlLmNdIFtsb2FkZXIvbmVfaW1hZ2UuY10KCVBhc3MgSEZJTEVzIGluc3RlYWQgb2YgdW5peC1mZHMgdG8gc2VsZi1sb2FkZXIgY29kZS4KCk1vbiBKdWwgMjkgMjE6NDg6MjUgMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFtpbmNsdWRlL21ldGFmaWxlLmhdIFtvYmplY3RzL21ldGFmaWxlLmNdIFtvYmplY3RzL3RleHQuY10KCUltcGxlbWVudGVkIGhhbmRsaW5nIG9mIHNvbWUgbmV3IG1ldGFmaWxlIHJlY29yZHMgKE1FVEFfLi4uKQoJaW4gUGxheU1ldGFGaWxlUmVjb3JkKCksIHJld3JpdGUgb2YgJ2Nhc2UgTUVUQV9FWFRURVhUT1VUJy4KCUFkZGVkIGZ1bmN0aW9ucyBsaWtlIE1GX1N0cmV0Y2hCbHQoKSBmb3IgdXNhZ2UgaW4gbWV0YWZpbGVzLgoJTWlub3IgYnVnZml4IGluIENvcHlNZXRhZmlsZSgpLgoKCSogW29iamVjdHMvYml0bWFwLmNdW29iamVjdHMvZGliLmNdCglBZGRlZCBjaGVjayBmb3IgbWV0YWZpbGUtREMgaW4gQml0bWFwIGFuZCBESUIgZnVuY3Rpb25zOgoJQ3JlYXRlQ29tcGF0aWJsZUJpdG1hcCgpIGV0Yy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIEp1bCAyOCAxNzo1NzoxOSAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtsb2FkZXIvdGFzay5jXSBbaW5jbHVkZS90YXNrLmhdCglJbXBsZW1lbnRlZCBTd2l0Y2hTdGFja1RvKCkvU3dpdGNoU3RhY2tCYWNrKCkuCgoJKiBbaW5jbHVkZS93aW50eXBlcy5oXSBbbG9hZGVyL21haW4uY10KCUFkZGVkIF9fd2luZWxpYiB2YXJpYWJsZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGVtdWxhdG9yIGFuZAogCWxpYnJhcnkgYXQgcnVuLXRpbWUuIExhdGVyIG9uLCB0aGlzIHNob3VsZCBhdm9pZCBzb21lCiAJcmVjb21waWxhdGlvbnMgd2hlbiBidWlsZGluZyBXaW5lbGliLgoKCSogW3dpbmRvd3MvcHJvcGVydHkuY10KCUltcGxlbWVudGVkIFdpbjMyIGZ1bmN0aW9ucyBmb3Igd2luZG93IHByb3BlcnRpZXMuCgpGcmkgSnVsIDI2IDE4OjAwOjAwIDE5OTYgIEFsZXggS29yb2JrYSA8YWxleEBwaG0zMC5waGFybS5zdW55c2IuZWR1PgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUltcGxlbWVudGVkIExCU19TT1JUIHN0eWxlLCBXTV9DT01QQVJFSVRFTSwgYW5kIFdNX0RFTEVURUlURU0KCW1lc3NhZ2VzLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUNhbGwgVHJhbnNsYXRlTWVzc2FnZSgpIHRvIGVuYWJsZSBzaG9ydGN1dHMgKG9uIFdNX0NIQVIpLgoKCSogW2luY2x1ZGUvY3Vyc29yaWNvbi5oXQoJTW92ZWQgI3ByYWdtYSBwYWNrKDEpIGJhY2sgdG8gd2hlcmUgaXQgYmVsb25ncy4KCgkqIFtvYmplY3RzL3BhbGV0dGUuY10KCVJlYWxpemVEZWZhdWx0UGFsZXR0ZSgpIG1hcHMgdG8gc3lzdGVtIGNvbG9ycyBvbmx5LgoJRG8gbm90IGJyb2FkY2FzdCBwYWxldHRlIG5vdGlmaWNhdGlvbnMgd2hlbiBpbiBUcnVlQ29sb3IuCgoJKiBbb2JqZWN0cy9jb2xvci5jXSBbaW5jbHVkZS9wYWxldHRlLmhdCglNaXNjZWxsYW5lb3VzIG9wdGltaXphdGlvbnMuIEhhZCB0byBmaXggc2V2ZXJhbAoJImltcHJvdmVtZW50cyIgbWFkZSB0byBteSBwYXRjaCBmb3IgcHJldmlvdXMgcmVsZWFzZS4KCgkqIFtvYmplY3RzL2RpYi5jXQoJUmV2ZXJzZSBkaWIgYml0cyBvcmRlciBmb3IgMjQtYml0IFNldERJQml0cygpLgoKCSogW29iamVjdHMvZGMuY10KCUdldERldmljZUNhcHMoKSBkb2VzIG5vdCByZXR1cm4gUkNfUEFMRVRURSB3aGVuIGluIFRydWVDb2xvci4KCgkqIFt3aW5kb3dzL3Njcm9sbC5jXQoJU2Nyb2xsIHVwZGF0ZSByZWdpb24gdG9vLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJSW5jbHVkZSBRU19NT1VTRSBpbnRvIHRoZSBldmVudCBtYXNrIGZvciBub25jbGllbnQgbW91c2UKCW1lc3NhZ2UgZmlsdGVyLiBGaXhlcyBwcm9ibGVtcyB3aXRoIFdvcmQgNiBmcmVlemluZyB3aGVuCgltb3VzZSBoaXRzIG5vbmNsaWVudCBhcmVhLgoKCSogW3dpbmRvd3Mvd2luLmNdIAoJQWxsb3cgdG9wLWxldmVsIHdpbmRvd3MgdG8gYmUgbGlua2VkIGFzIEhXTkRfVE9QIGluIENyZWF0ZVdpbmRvdygpLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdIFt3aW5kb3dzL21kaS5jXQoJQXR0ZW1wdCB0byBmaXggY29udHJvbCBtZW51IGR1cGxpY2F0aW9uLgoKRnJpIEp1bCAyNiAwOTo0OTozNSAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtmaWxlcy9kcml2ZS5jXQoJR2V0RHJpdmVUeXBlMzJBKCk6IHJldHVybiB2YWx1ZSBmb3IgQ0RST00gZml4ZWQuCgoJKiBbZmlsZXMvZmlsZS5jXQoJU2VhcmNoUGF0aCogYWRkZWQuCgoJKiBbaWYxNjMyL2dkaTMyLnNwZWNdIFtvYmplY3RzL2JydXNoLmNdCglTZXRCcnVzaE9yZ0V4KCkgYWRkZWQuCgoJKiBbbG9hZGVyL3BlX3Jlc291cmNlLmNdCglJZiBldmVuIGxvYWRpbmcgdGhlIGRlZmF1bHQgZW50cnkgZmFpbHMsIHdlIGp1c3QgdXNlIHRoZSBmaXJzdAoJZW50cnkgZnJvbSB0aGUgcmVzb3VyY2UgZGlyZWN0b3J5LgoKCVtsb2FkZXIvdGFzay5jXQoJU2V0U2lnSGFuZGxlcigpIHN0dWIgYWRkZWQsIFBhcmFkb3ggNC41IG5vdyBzdGFydHMgdXAuCgoJKiBbbWlzYy9jb21tLmNdIFtpbmNsdWRlL3dpbmRvd3MuaF0gW2lmMTYzMi9rZXJuZWwzMi5zcGVjXQoJQ09NTSBmdW5jdGlvbnMgdXBkYXRlZCB0byB3aW4zMiwgbm90IGNvbXBsZXRlLgoKCSogW21pc2MvbHN0ci5jXQoJRm9ybWF0TWVzc2FnZUEgcGFydGlhbGx5IGltcGxlbWVudGVkLgoKCSogW2luY2x1ZGUvbWlzY2VtdS5oXSBbbWVtb3J5L3NlbGVjdG9yLmNdCgkgIFttZW1vcnkvZ2xvYmFsLmNdIFttaXNjZW11L2Rvc21lbS5jXQoJRE9TIG1lbW9yeSBoYW5kbGluZyBjaGFuZ2VkOiAxTUIgcHJlYWxsb2NhdGVkIGJsb2NrLCByZWFsLW1vZGUKCXNlZ21lbnQgaGFuZGxpbmcgcG9zc2libGUsIFNldFNlbGVjdG9yQmFzZSBpbnRvIGxvd2VyIHBoeXNpY2FsIDFNQgoJcG9zc2libGUuCgoJKiBbbWlzY2VtdS9kcG1pLmNdCglSZWFsLW1vZGUgc2VnbWVudHMgY2hhbmdlZCwgcmVhbC1tb2RlIGludCAyMSxheD02NTA2IGFkZGVkLgoJQVg9MHgwMzAzIGFkZGVkLgoKCSogW211bHRpbWVkaWEvdGltZS5jXQoJRml4ZWQgYnVnIGluIGtpbGxUaW1lci4KCgkqIFtvYmplY3RzL2JpdG1hcC5jXQoJTG9hZEltYWdlQSBwYXJ0aWFsbHkgaW1wbGVtZW50ZWQuCgpXZWQgSnVsIDI0IDE4OjIwOjI0IDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbaW5jbHVkZS9kZGVfbWVtLmhdW2luY2x1ZGUvZGRlX3Byb2MuaF0KCSAgW2lwYy9kZGVfYXRvbS5jXVtpcGMvZGRlX3Byb2MuY11bd2luZG93cy9tZXNzYWdlLmNdCgkgIFtpcGMvZ2VuZXJpY19oYXNoLmhdW2xpYnJhcnkvbWlzY3N0dWJzLmNdCglDaGFuZ2VzIGZvciBlcnJvciBmcmVlIGNvbXBpbGF0aW9uIHVzaW5nICItLXdpdGgtaXBjIjoKCXJlcGxhY2VkIHNvbWUgbmFtZXMgd2l0aCAqMTYtZXF1aXZhbGVudCAoZS5nLiBNU0cgdG8gTVNHMTYpLAoJbW9kaWZpZWQgcHJvdG90eXBlIG9mIGZ1bmN0aW9uIERERV9HbG9iYWxGcmVlKCkgLgoKCSogW29iamVjdHMvcGFsZXR0ZS5jXQoJQWRkZWQgY2hlY2sgZm9yIG1ldGFmaWxlLURDIGluIEdESVNlbGVjdFBhbGV0dGUoKSwKCUdESVJlYWxpemVQYWxldHRlKCksUmVhbGl6ZURlZmF1bHRQYWxldHRlKCkgYW5kCglJc0RDQ3VycmVudFBhbGV0dGUoKS4KClR1ZSBKdWwgMjMgMjI6NDY6NTMgMTk5NiAgQW5kcmV3IExld3lja3kgPHBsZXd5Y2t5QG9pc2UudXRvcm9udG8uY2E+CgoJKiBbY29udHJvbHMvZWRpdC5jXQoJRURJVF9XTV9DcmVhdGU6IERvbid0IEVESVRfRU1fUmVwbGFjZVNlbCBpZiBjcmVhdGVkIHdpdGggbFBhcmFtID0gIiIsCglmaXhlcyBXaW5oZWxwLgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglESUFMT0dfQ3JlYXRlSW5kaXJlY3Q6IEluaXRpYWxpc2UgZGxnUHJvYyBiZWZvcmUgY3JlYXRpbmcgY2hpbGRyZW4uCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCldlZCBKdWwgMTcgMTY6MTA6MTYgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbY29uZmlndXJlLmluXQoJR2VuZXJhdGUgaW5jbHVkZS9jb25maWcuaCBpbnN0ZWFkIG9mIHB1dHRpbmcgZXZlcnl0aGluZyBvbiB0aGUKCWNvbW1hbmQtbGluZS4KCVJlbW92ZWQgLXdpdGgtbWFsbG9jLWRlYnVnIG9wdGlvbiAobm90IHVzZWZ1bCBmb3IgZW5kIHVzZXJzCglhbnl3YXkpLgoJQWRkZWQgY2hlY2sgZm9yIG1lbW1vdmUoKS4KCgkqIFtpbmNsdWRlL3dpbnR5cGVzLmhdIFsqL01ha2VmaWxlLmluXQoJQWRkZWQgZGVmaW5pdGlvbiBvZiBfX1dJTkVfXyBzeW1ib2wgd2hlbiBjb21waWxpbmcgV2luZSBjb2RlCgkoZW11bGF0b3Igb3IgbGlicmFyeSkgYXMgb3Bwb3NlZCB0byB1c2VyIHByb2dyYW1zLgoKCSogW2RlYnVnZ2VyL2VkaXRsaW5lLmNdIFtkZWJ1Z2dlci9yZWFkbGluZS8qXQoJTW92ZWQgYWxsIHRoZSByZWFkbGluZSBjb2RlIGludG8gZGVidWdnZXIvZWRpdGxpbmUuYy4gUmVtb3ZlZCB0aGUKCXJlYWRsaW5lIHN1YmRpcmVjdG9yeS4KCgkqIFtmaWxlcy9wcm9maWxlLmNdCglBZGRlZCBQUk9GSUxFX0dldFdpbmVJbmlJbnQoKS4KCgkqIFtpbmNsdWRlL3N0YWNrZnJhbWUuaF0gW2xvYWRlci90YXNrLmNdCglUaGUgMTYtYml0IHN0YWNrZnJhbWUgbm93IGFsc28gZXhpc3RzIGZvciBXaW5lbGliIChldmVuIHRob3VnaCBpdAoJb25seSBldmVyIGNvbnRhaW5zIG9uZSBmcmFtZSkuCgoJKiBbbG9hZGVyL21vZHVsZS5jXQoJQWRkZWQgZnVuY3Rpb24gTU9EVUxFX0NyZWF0ZUR1bW15TW9kdWxlKCkgdG8gY3JlYXRlIGEgZHVtbXkgV2luMTYKCW1vZHVsZSBmb3IgV2luZWxpYiBhbmQgV2luMzIuCgoJKiBbbWVtb3J5L2xkdC5jXQoJTWFrZSBzdXJlIHRoZSBsZHQgZW50cnkgY29udGVudHMgd2lsbCBiZSBhY2NlcHRhYmxlIGZvciB0aGUgTGludXgKCWtlcm5lbC4KCgkqIFttZW1vcnkvc2VsZWN0b3IuY10KCUZpeGVkIFNldFNlbGVjdG9yTGltaXQoKSB3aGVuIHRoZSBsaW1pdCBpcyBpbiBwYWdlcy4KCgkqIFttaXNjL3BvcnQuY10KCUFkZGVkIG1lbW1vdmUoKS4KCgkqIFttaXNjZW11L2RwbWkuY10KCUNsZWFyIHRoZSBzZWdtZW50IHJlZ2lzdGVycyB0aGF0IGNvbnRhaW4gdGhlIHNlbGVjdG9yIGJlaW5nIGZyZWVkCglpbiBpbnQzMS9heD0wMDAxLgoJQWRkZWQgbWlzc2luZyBicmVhayBhZnRlciBTZWxlY3RvckFjY2Vzc1JpZ2h0cyBjYWxsLgoKCSogW3dpbjMyL3N0cnVjdDMyLmNdCglBZGRlZCBjb252ZXJzaW9ucyBmb3IgTURJQ1JFQVRFU1RSVUNULgoKCSogW3dpbmRvd3Mvd2lucHJvYy5jXQoJQWRkZWQgbWVzc2FnZSBjb252ZXJzaW9ucyBmb3IgV01fTURJQ1JFQVRFLgoKVHVlIEp1bCAxNiAxOTo0NjoyNCAxOTk2ICBQYXZlbCBLYW5rb3Zza3kgPEtBTkBmcm9kZS5kY2l0LmN6PgoKCSogW3dpbmRvd3MvY2xhc3MuY10KCUFkZGVkIEdldEV4ZVB0cigpIGNhbGwgaW4gQ0xBU1NfRmluZENsYXNzQnlBdG9tKCkuCgpNb24gSnVsIDE1IDE3OjQ5OjM4IDE5OTYgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW2lmMTYzMi8qLnNwZWNdCglTb21lIG1vcmUgdHJpdmlhbCBzcGVjcyBhZGRlZC4KCgkqIFtpZjE2MzIvZ2RpMzIuc3BlY10gW29iamVjdHMvZm9udC5jXVt3aW5kb3dzL2RpYWxvZy5jXQoJQ3JlYXRlRm9udDMyKiBhZGRlZCwgY2hhbmdlZCB0byBuZXcgbmFtaW5nIHN0ZC4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0gW2luY2x1ZGUvbW1zeXN0ZW0uaF0gW2luY2x1ZGUvd2ludHlwZXMuaF0KCVNvbWUgZGVmaW5lcy90eXBlcyBhZGRlZC4KCgkqIFt3aW4zMi90aHJlYWQuY10KCVRsc1NldFZhbHVlKCkgcmV0dXJucyBib29sZWFuLgoKCSogW3dpbjMyL3Jlc291cmNlLmNdIFtsb2FkZXIvcGVfcmVzb3VyY2UuY10gW2xvYWRlci9yZXNvdXJjZS5jXQogCSAgW2NvbnRyb2xzL21lbnUuY10gW29iamVjdHMvYml0bWFwLmNdCglDbGVhbnVwIG9mIHRoZSByZXNvdXJjZSBmdW5jdGlvbnMsIG1vc3RseSBjaGFuZ2VzIHRvIG5ldyBuYW1pbmcKIAlzdGFuZGFyZCBhbmQgZml4aW5nIG9mIGFyZ3VtZW50IHR5cGVzIHNvIHRoYXQgdGhleSBhZ3JlZSB3aXRoIHRoZQogCXdpbjE2L3dpbjMyIEFQSS4KClRodSBKdWwgMTEgMTU6MDA6MDAgMTk5NiAgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbd2luZG93cy93aW5wb3MuY10KCVNob3dXaW5kb3coKSBmaXhlcy4KCgkqIFt3aW5kb3dzL21kaS5jXQoJRml4IHJldmVyc2VkIExQQVJBTSBpbiBXTV9NRElBQ1RJVkFURS4KCgkqIFt3aW5lLmluaV0KCU5ldyBvcHRpb24gQWxsb2NTeXN0ZW1Db2xvcnMgdGVsbHMgV2luZSBob3cgbWFueSBjb2xvcnMgdG8gZ3JhYgoJZnJvbSB0aGUgc3lzdGVtIGNvbG9ybWFwLgoKCSogW29iamVjdHMvYml0Ymx0LmNdIFtvYmplY3RzL2RjLmNdCglGaXhlZCBwaW5rIGdhcmJhZ2Ugb3ZlciBXb3JkIGJ1dHRvbnMgaW4gUHNldWRvQ29sb3IuIEFkZGVkCglvcHRpb25hbCBEU1RJTlZFUlQgc2hvcnRjdXQgZm9yIGZhc3RlciB0ZXh0IHNlbGVjdGlvbi4KCgkqIFttaXNjL3dzcHJpbnRmLmNdCglTa2lwIGJvZ3VzIHNlZ21lbnRlZCBwb2ludGVycyBpbiB3c3ZucHJpbnRmMTYoKS4gCgoJKiBbb2JqZWN0cy9nZGlvYmouY10KCUFkZGVkIHBhbGV0dGUgaGFuZGxpbmcgdG8gVW5yZWFsaXplT2JqZWN0KCkuIAoKCSogW29iamVjdHMvY29sb3IuY10gW29iamVjdHMvcGFsZXR0ZS5jXSBbd2luZG93cy9kY2UuY10KCVdpbmUgZ2V0cyBwYWxldHRlIG1hbmFnZXIgd2l0aCBzdXBwb3J0IGZvciBtb3JlIHRoYW4gMjAgY29sb3JzLiAKCU9ubHkgUHNldWRvQ29sb3IgYW5kIFRydWVDb2xvciB2aXN1YWxzIHRlc3RlZCBzbyBmYXIuCgoJKiBbd2luZG93cy93aW5wb3MuY10gW3dpbmRvd3Mvd2luLmNdIAoJU2V0IFggc2l6ZSBoaW50cyBmb3IgV1NfRVhfRExHTU9EQUxGUkFNRSB3aW5kb3dzIChubyByZXNpemUpIGFuZAoJdXNlIFhSZWNvbmZpZ3VyZVdNV2luZG93cygpIGluc3RlYWQgb2YgWENvbmZpZ3VyZVdpbmRvdygpIGluCgltYW5hZ2VkIG1vZGUuCgoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJRG8gbm90IGFsbG9jYXRlIG1vcmUgdGhhbiA2NDBLIG9mIERPUyBtZW1vcnkuCgoJKiBbbWlzYy9tYWluLmNdCglEbyBub3QgYWxsb3cgLWRlc2t0b3AgYW5kIC1tYW5hZ2VkIHRvZ2V0aGVyLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpGcmkgSnVsIDEyIDE3OjQzOjA1IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJVXNlIFdpbjMyIGhlYXAgZnVuY3Rpb25zIHRvIGFsbG9jYXRlIHNjcm9sbC1iYXIgaW5mbyBzdHJ1Y3R1cmUuCgoJKiBbZGVidWdnZXIvZGJnLnldIFtkZWJ1Z2dlci9yZWdpc3RlcnMuY10KCUFkZGVkIHN1cHBvcnQgZm9yIEZTIGFuZCBHUyBzZWdtZW50IHJlZ2lzdGVycy4KCUNoZWNrIHRoYXQgc2VnbWVudCByZWdpc3RlcnMgdmFsdWUgYXJlIE9LIGJlZm9yZSByZXR1cm5pbmcgZnJvbQoJdGhlIHNpZ25hbCBoYW5kbGVyLgoKCSogW3Rvb2xzL2J1aWxkLmNdIFtpZjE2MzIvcmVsYXkuY10gW2xvYWRlci9idWlsdGluLmNdCglDaGFuZ2VkIHJlbGF5IGRlYnVnZ2luZyBmb3IgV2luMzIgZnVuY3Rpb246IHRoZSByZWxheSBjb2RlIG5vdwoJcGFzc2VzIHRoZSBlbnRyeSBwb2ludCBhZGRyZXNzIGluc3RlYWQgb2YgdGhlIGZ1bmN0aW9uIG5hbWUuCgoJKiBbdG9vbHMvYnVpbGQuY10gW21pc2NlbXUvKi5jXQoJQWRkZWQgc3VwcG9ydCBmb3IgZGF0YSBlbnRyeSBwb2ludHMgaW4gV2luMzIgRExMcy4KCUFkZGVkICdjZGVjbCcgZnVuY3Rpb24gdHlwZSBmb3IgV2luMzIuCglGb3IgJ3JlZ2lzdGVyJyBmdW5jdGlvbiwgdGhlIHJlbGF5IGNvZGUgbm93IHBhc3NlcyBhIHBvaW50ZXIgdG8KCXRoZSBTSUdDT05URVhUIHN0cnVjdHVyZS4KCQoJKiBbaW5jbHVkZS9yZWdpc3RlcnMuaF0gW2luY2x1ZGUvd2luZS5oXQoJTW92ZWQgU0lHQ09OVEVYVCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBpbiByZWdpc3RlcnMuaC4KCgkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KCURvbid0IGRpZSBhdCBvbmNlIGlmIHNvbWUgV2luMzIgZW50cnkgcG9pbnRzIGNhbm5vdCBiZSBmb3VuZCwgYnV0CglzZXQgdGhlbSB0byBOVUxMLCBqdXN0IGxpa2Ugd2UgZG8gZm9yIFdpbjE2LiBUaGlzIGFsbG93cyBzb21lCglwcm9ncmFtcyB0byBnbyBmdXJ0aGVyIGJlZm9yZSBjcmFzaGluZy4KCgkqIFtsb2FkZXIvdGFzay5jXSBbbG9hZGVyL21haW4uY10KCU1vdmVkIGdsb2JhbCBpbml0aWFsaXphdGlvbnMgZnJvbSBJbml0VGFzaygpIHRvIE1BSU5fSW5pdCgpLCBhcwoJdGhleSBubyBsb25nZXIgbmVlZCBhIHRhc2sgY29udGV4dCB3aXRoIHRoZSBuZXcgU0VHUFRSIGhlYXAgZnVuY3Rpb25zLgoKCSogW21lbW9yeS9zdHJpbmcuY10KCUFkZGVkIGxzdHJjcHluQXRvVyBhbmQgbHN0cmNweW5XdG9BOyBub3QgcmVhbCBBUEkgZnVuY3Rpb25zLCBidXQKIAl2ZXJ5IGNvbnZlbmllbnQuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJUGFydGlhbGx5IGltcGxlbWVudGVkIERyYXdFZGdlKCkuCgoJKiBbd2luZG93cy90aW1lci5jXSBbd2luZG93cy9jYXJldC5jXQoJSW1wbGVtZW50ZWQgV2luMzIgdGltZXIgaGFuZGxpbmcuIFVwZGF0ZWQgY2FyZXQgbWFuYWdlbWVudCB0byB1c2UKCVdpbjMyIHRpbWVycyAoYXZvaWRzIGhhdmluZyB0byB1c2UgYSBXaW4xNiBjYWxsYmFjaykuCgoJKiBbd2luZG93cy93aW4uY10KCVByZXZlbnQgcHJvZ3JhbXMgZnJvbSBzZXR0aW5nIHNvbWUgc3R5bGUgYml0cyB3aXRoCglTZXRXaW5kb3dMb25nKCkuIFRoaXMgc2hvdWxkIGZpeCBzb21lIEJhZE1hdGNoIGNyYXNoZXMuCglMaW5rIG5ldyB3aW5kb3dzIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmtlZCBsaXN0LgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglEb24ndCB0cnkgdG8gYWN0aXZhdGUgYSBjaGlsZCB3aW5kb3cgaW4gU2hvd1dpbmRvdygpLgoKCSogW3dpbmRvd3Mvd2lucHJvYy5jXQoJQWRkZWQgYSAzMi0+MzIgdGh1bmsgdG8gc3VwcG9ydCBBbnNpLVVuaWNvZGUgdHJhbnNsYXRpb24uCgpXZWQgSnVsIDEwIDIyOjExOjEyIDE5OTYgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW2ZpbGVzL2RpcmVjdG9yeS5jXQoJQWRkaXRpb25hbCAodW5kb2N1bWVudGVkKSByZXR1cm4gdmFsdWUgZm9yIEdldFRlbXBEcml2ZSgpIGFkZGVkLgoKCSogW2ZpbGVzL2Rvc19mcy5jXSBbZmlsZXMvZmlsZS5jXSBbaW5jbHVkZS93aW5kb3dzLmhdCglHZXRUZW1wRmlsZU5hbWUzMiogYWRkZWQuCglHZXRTaG9ydFBhdGhOYW1lKiBhZGRlZC4KCgkqIFttZW1vcnkvc3RyaW5nLmNdCglXaW4xNiBsc3RyY3B5KCkgY2FuIGdldCBOVUxMIHB0cnMgYXMgYXJndW1lbnQgYW5kIHN1cnZpdmUuCgoJKiBbbWlzYy9semV4cGFuZC5jXQoJTFpPcGVuRmlsZSgpOiBhbHNvIHRyeSBvcGVuaW5nIHdpdGggY29tcHJlc3NlZCBmaWxlbmFtZSBpZiBub3JtYWwKIAlvcGVuIGZhaWxzLgoKCSogW21pc2Mvb2xlMm5scy5jXSBbbWlzYy9sc3RyLmNdIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUNoYXIqIGFkZGVkLgoJQ29tcGFyZVN0cmluZyogYWRkZWQuCgpTdW4gSnVsICA3IDAxOjIyOjE0IDE5OTYgIEp1a2thIElpdm9uZW4gPGlpdm9uZW5AY2MuaGVsc2lua2kuZmk+CgoJKiBbb2JqZWN0cy9mb250LmNdIFtpZjE2MzIvZ2RpMzIuc3BlY10KCUNyZWF0ZUZvbnRJbmRpcmVjdDMyQSBhbmQgQ3JlYXRlRm9udEluZGlyZWN0MzJXIGFkZGVkLgoKCSogW21pc2Mvb2xlMm5scy5jXQoJR2V0VXNlckRlZmF1bHRMQ0lEIHJldHVybiB2YWx1ZXMgdXBkYXRlZCBmb3IgbmV3IGxhbmd1YWdlcy4KCUZpbm5pc2ggc3VwcG9ydCBhZGRlZCBmb3IgR2V0TG9jYWxlSW5mb0EuCgoJKiBbb2JqZWN0L3BhbGV0dGVdIFtnZGkzMi5zcGVjXQoJUmVhbGl6ZVBhbGV0dGUzMiBhbmQgU2VsZWN0UGFsZXR0ZTMyIGFkZGVkLgoJClNhdCBKdWwgIDYgMTc6Mjc6MzAgMTk5NiAgUm9uYW4gV2FpZGUgIDxyb290QHdhaWRlci5pZT4KCgkqIFttaXNjL3NoZWxsLmNdCglGaXh1cCBmb3IgU0hFTExfRmluZEV4ZWN1dGFibGUgc28gdGhhdCBGaWxlLT5SdW4gZnJvbSBwcm9nbWFuCgl3b3JrcyBvbmNlIG1vcmUuIFN0aWxsIG5lZWRzIHNvbWUgbW9yZSBmaXh1cHMgLSBncmVwIGZvciBGSVhNRSBpbgoJdGhpcyBmaWxlLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpGcmkgSnVsICA1IDE2OjI3OjQzIDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2NvbnRyb2xzL2Rlc2t0b3AuY10KCVVzZSBXaW5kb3dzIGZpbGUgSS9PIHJvdXRpbmVzIHRvIGxvYWQgdGhlIGRlc2t0b3AgYml0bWFwLgoKCSogW2ZpbGVzL2ZpbGUuY10KCUltcGxlbWVudGVkIFJlbW92ZURpcmVjdG9yeSogYW5kIERlbGV0ZUZpbGUqLgoKCSogW2luY2x1ZGUvd2luZS5oXQoJQWRkZWQgU0lHQ09OVEVYVCB0eXBlZGVmIHRvIHJlcGxhY2UgI2RlZmluZSBzaWdjb250ZXh0X3N0cnVjdC4KCgkqIFtsb2FkZXIvdGFzay5jXQoJRml4ZWQgaW5pdGlhbCBicmVha3BvaW50IHNldHRpbmcgZm9yIFdpbjMyIHRhc2tzLgoKCSogW21pc2Mvd3NwcmludGYuY10KCUlnbm9yZSBVbmljb2RlIGZvcm1hdHMgZm9yIHdzcHJpbnRmMTYoKS4KCgkqIFtvYmplY3RzL2ZvbnQuY10KCUltcGxlbWVudGVkIFdpbjMyIHZlcnNpb24gb2YgR2V0VGV4dE1ldHJpY3MuCgoJKiBbd2luZG93cy93aW5wcm9jLmNdIFt3aW5kb3dzL3dpbi5jXSBbd2luZG93cy9jbGFzcy5jXQoJICBbd2luZG93cy9kaWFsb2cuY10KCU1vZGlmaWVkIHdpbmRvd3MgcHJvY2VkdXJlcyB0byB1c2UgdGh1bmtzLCB0byBlbnN1cmUgdGhhdCB0aGUKCXByb2NlZHVyZSBjYW4gYmUgY2FsbGVkIGRpcmVjdGx5IGZyb20gdGhlIFdpbmRvd3MgcHJvZ3JhbS4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJQWRkZWQgZnVuY3Rpb24gV0lOX0J1aWxkV2luQXJyYXkoKSB0byBtYWtlIGl0IGVhc2llciB0byBlbnVtZXJhdGUKCXdpbmRvd3MuIEltcGxlbWVudGVkIFdpbjMyIHZlcnNpb24gb2YgRW51bVdpbmRvd3MoKSBhbmQgZnJpZW5kcy4KCkZyaSBKdWwgIDUgMTE6NTY6MjIgMTk5NiAgQW5kcmVhcyBLaXJzY2hiYXVtIDxhbmtAcmJnLmluZm9ybWF0aWsudGgtZGFybXN0YWR0LmRlPgoKCSogW2NvbnRyb2xzL2J1dHRvbi5jXSBbd2luZG93cy93aW4uY10KCU9wZXJhdG9yIHByZWNlZGVuY2UgZml4ZXMuCgoJKiBbY29udHJvbHMvZWRpdC5jXQoJSW1wbGVtZW50ZWQgRVNfUEFTU1dPUkQsIEVTX0xPV0VSQ0FTRSBhbmQgRVNfVVBQRVJDQVNFIHN0eWxlcy4KCUZpeGVkIHdvcmQgd3JhcCB3aXRoIGxvbmcgd29yZHMuCgoJKiBbZGVidWdnZXIvZGVidWcubF0KCU5ldyBhbGlhcyAid2hlcmUiIGZvciBjb21tYW5kICJiYWNrdHJhY2UiLgoKCSogW2lmMTYzMi9nZGkuc3BlY10KCUNvcnJlY3RlZCBwYXJhbWV0ZXIgb2YgRXh0VGV4dE91dC4KCgkqIFtsb2FkZXIvbW9kdWxlLmNdCglDb3JyZWN0ZWQgcHJpbnRpbmcgb2YgdGFibGUgb2YgbW9kdWxlcy4KCgkqIFttaXNjL3NweS5jXQoJUmVtb3ZlZCBzdXBlcmZsdW91cyBcbiBpbiBtZXNzYWdlIG5hbWUuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglEZWNsYXJlZCBNU0dfU2VuZE1lc3NhZ2UgYXMgc3RhdGljLgoJQ2hhbmdlZCBwYXJhbWV0ZXIgb2YgRGlyZWN0ZWRZaWVsZCgpIGZyb20gcXVldWUgaGFuZGxlIHRvIHRhc2sgaGFuZGxlLgoJUmVtb3ZlZCB3YXJuaW5nIG1lc2FnZXMgZm9yIGFyZ3VtZW50IG9mIHByaW50Zi4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJQWRkZWQgdGhlIGZsYWcgRFRfTk9QUkVGSVggd2hlbiBkcmF3aW5nIHdpbmRvdyB0aXRsZXMuCgoJKiBbd2luZG93cy93aW4uY10KCVdJTl9XYWxrV2luZG93cyBub3cgcHJpbnRzIHRoZSBpbnZhbGlkIHdpbmRvdyBoYW5kbGUuCglBZGRlZCBhIHdhcm5pbmcgaWYgR2V0LS9TZXRXaW5kb3dXb3JkLy1Mb25nIGdldHMgYW4gaW52YWxpZCBvZmZzZXQuCgoJKiBbd2luZG93cy93aW5wcm9jLmNdCglBbGxvd3MgY3JlYXRpbmcgZGlhbG9nIHdpbmRvd3Mgd2l0aCBOVUxMIGFzIGRpYWxvZyBmdW5jdGlvbi4KCldlZCBKdWwgIDMgMDk6MjY6NDEgMTk5NiAgQW5kcmV3IExld3lja3kgPHBsZXd5Y2t5QG9pc2UudXRvcm9udG8uY2E+CgoJKiBbd2luZG93cy9ldmVudC5jXQoJRVZFTlRfa2V5OiBGaXhlcyB0byBWS18gY29kZSBnZW5lcmF0aW9uIGZvciBzcGFjZSBiYXIgYW5kCglwdW5jdHVhdGlvbi4KCgkqIFtmaWxlcy9maWxlLmNdCglHZXRUZW1wRmlsZU5hbWU6IGZpcnN0IGNoYXJhY3RlciBpbiB0ZW1wb3JhcnkgbmFtZSBpcyAifiIuCgoJKiBbbWVtb3J5L2hlYXAuY10KCUhFQVBfTWFrZUluVXNlQmxvY2tGcmVlIG5vdyBmcmVlcyB0aGUgd2hvbGUgc3ViaGVhcCBpZiBwb3NzaWJsZS4KCgkqIFtvYmplY3RzL3RleHQuY10KCUV4dFRleHRPdXQxNigpOiBoYW5kbGUgTlVMTCBscFJlY3QgYW5kIEVUT19PUEFRVUUuCgoJKiBbbWlzYy9kcml2ZXIuY10KCVJlbW92ZWQgc29tZSBidWdzIGFuZCByZWZvcm1hdHRlZC4gQWN0dWFsbHkgbG9hZHMgZHJpdmVycyBub3cuCgoJKiBbaW5jbHVkZS9jYWxsYmFjay5oXQoJQWRkZWQgQ2FsbERyaXZlclByb2MoKSBhbmQgQ2FsbFdpbmRvd3NFeGl0UHJvYygpLgoKCSogW2xvYWRlci9tb2R1bGUuY10KCU1PRFVMRV9DYWxsV0VQKCk6IG5ldyBmdW5jdGlvbi4KCgkqIFttaXNjL2x6ZXhwYW5kLmNdCglMWlNlZWsoKTogcmV0dXJuIG5ldyBwb2ludGVyLCBub3Qgb2xkIG9uZS4KCgkqIFttaXNjL3Zlci5jXQoJZmluZF9uZV9yZXNvdXJjZSgpOiBmaXhlZCBkZXBlbmRlbmNlIG9uIExaU2VlaygpIGJ1Zy4KCUdldEZpbGVSZXNvdXJjZSgpOiBpbml0aWFsaXplIHJlc2xlbiBiZWZvcmUgdXNpbmcgaXQuCgoJKiBbd2luZG93cy9jbGFzcy5jXQoJU2V0Q2xhc3NXb3JkKCk6IGFkZCBtaXNzaW5nIGVsc2UuCgoJKiBbb2JqZWN0cy9mb250LmNdCglscEZvbnRMaXN0IGlzIG5vdyBNQVhfRk9OVFMrMS4gSXQgdXNlZCB0byBvdmVyd3JpdGUgdGhlIGFycmF5LgoJSW5pdEZvbnRMaXN0OiBhbGxvY2F0ZSBvbmUgaHVnZSBhcnJheSBvZiBzdHJ1Y3R1cmVzLgoJRk9OVF9NYXRjaEZvbnQ6IHVwcGVyY2FzZSB0aGUgZmFjZSBuYW1lLgoKVGh1IEp1biAyNyAxMjo0MTo0MCAxOTk2ICBCcnVjZSBNaWxuZXIgPGJydWNlQGdlbmV0aWNzLnV0YWguZWR1PgoKCSogW21lbW9yeS9oZWFwLmNdCglGaXhlZCBhIHR5cG8gaW4gSGVhcFJlQWxsb2MoKS4KClR1ZSBKdW4gMjUgMjI6MjI6MDMgMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbZmlsZXMvZGlyZWN0b3J5LmNdIFtmaWxlcy9kcml2ZS5jXSBbaWYxNjMyL2tlcm5lbC5zcGVjXQoJICBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdIFtpZjE2MzIvc2hlbGwuc3BlY10gW2luY2x1ZGUvd2luZG93cy5oXQoJR2V0VGVtcFBhdGgqIGFkZGVkCglHZXREcml2ZVR5cGUqIGZpeGVkLCB1cGRhdGVkIHRvIE5ld05hbWVTdGFuZGFyZC4KCUdldEN1cnJlbnREaXJlY3RvcnkqIGZpeGVkIChuZWVkcyB0byBwcmVwZW5kIFg6XCkuCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJTWlzc2luZyBOVUxMIGNoZWNrIGFkZGVkLgoKCSogW2lmMTYzMi93aW5tbS5zcGVjXSBbbG9hZGVyL2J1aWx0aW4uY10KCXdpbm1tLmRsbCAoMzJiaXQgbW1zeXN0ZW0gZXF1aXZhbGVudCkgc3BlY3MgYWRkZWQuCgoJKiBbbWVtb3J5L3N0cmluZy5jXSBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdIFtpbmNsdWRlL3dpbmRvd3MuaF0KCVJ0bHtNb3ZlLFplcm8sRmlsbH1NZW1vcnkgYWRkZWQuCgoJKiBbbWlzYy9yZWdpc3RyeS5jXQoJU29tZSBOVUxMIHB0ciBkZXJlZmVyZW5jZSBidWdzIGZpeGVkLgoKCSogW211bHRpbWVkaWEvbWNpY2RhLmNdW211bHRpbWVkaWEvbWNpc3RyaW5nLmNdW211bHRpbWVkaWEvbW1zeXN0ZW0uY10KCUNoZWNrIGZvciBOVUxMIHB0ci4KCUZpbGwgbWNpT3BlbkRydiB3aGVuIG1peGluZyBtY2lPcGVuIGFuZCBtY2lTZW5kU3RyaW5nKCJvcGVuIC4uIikuCglBbGlhc2luZyBzaG91bGQgd29yayBmb3IgYWxsIE1DSSBkZXZpY2VzLgoKCSogW3dpbmRvd3Mvd2luLmNdCglBbGxvdyBwYXNzaW5nIGludmFsaWQgd2luZG93IGhhbmRsZXMgdG8gQ2xvc2VXaW5kb3coKS4KClR1ZSBKdW4gMjUgMjA6MDI6MTUgMTk5NiAgSnVra2EgSWl2b25lbiA8aWl2b25lbkBjYy5oZWxzaW5raS5maT4KCgkqIFtmaWxlcy9kaXJlY3RvcnkuY10gW2lmMTYzMi9rZXJuZWwzMi5zcGVjXQoJR2V0U3lzdGVtRGlyZWN0b3J5MzJBIGFuZCBHZXRTeXN0ZW1EaXJlY3RvcnkzMlcgYWRkZWQuCgoJKiBbbWlzYy9tYWluLmNdIFtpZjE2MzIva2VybmVsMzIuc3BlY10KCUJlZXAgYW5kIFNldEVudmlyb25tZW50VmFyaWFibGUzMlcgYWRkZWQuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCldlZCBKdW4gMTkgMTQ6NDk6MjcgMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBmYXVpNDUuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbZmlsZXMvZHJpdmUuY10gCglHZXRGcmVlRGlza1NwYWNlKiwgR2V0Vm9sdW1lSW5mb3JtYXRpb24qIGFkZGVkLgoKCSogW2ZpbGVzL2ZpbGUuY10KCUZsdXNoRmlsZUJ1ZmZlcnMsIENyZWF0ZURpcmVjdG9yeSogYWRkZWQuCgoJKiBbaW5jbHVkZS93aW5iYXNlLmhdIFtpbmNsdWRlL3dpbmRvd3MuaF0KCVByb3RvdHlwZXMsIGRlZmluZXMgYWRkZWQgYW5kIGZpeGVzLgoKCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXSBbaW5jbHVkZS9yZXNvdXJjZTMyLmhdCgkgIFt3aW4zMi9jdXJzb3JpY29uMzIuY10gW3dpbjMyL3Jlc291cmNlLmNdIFt3aW5kb3dzL2RpYWxvZy5jXQoJRml4ZXMgdG8gcmVzb3VyY2UgaGFuZGxpbmcuCgoJKiBbaWYxNjMyL2tlcm5lbC5zcGVjXSBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdIFtpZjE2MzIvdXNlcjMyLnNwZWNdCglTcGVjcyBmb3IgaW1wbGVtZW50ZWQgZnVuY3Rpb25zIGFkZGVkCglTb21lIHRodW5rcyB0byBmdW5jdGlvbnMgd2hpY2ggYXJlIHNhbWUgYXMgd2luMTYgZXF1aXZhbGVudHMuCgoJKiBbbG9hZGVyL3Rhc2suY10KCUdldEFwcENvbXBhdEZsYWdzKCkgYWRkZWQuCgoJKiBbbWlzYy9yZWdpc3RyeS5jXQoJT25lIG1pc3NpbmcgZWxzZSBhZGRlZCwgc21hbGwgaGFjayB0byBSZWdRdWVyeVZhbHVlMTYoKS4KCgkqIFt3aW4zMi9maWxlLmNdCglHZXRGaWxlQXR0cmlidXRlc0EoKSBmaXhlZCAod2FzIHVzaW5nIERPUyBwYXRoIGFzIFVOSVggcGF0aCkuCgpUdWUgSnVuIDE4IDIxOjAwOjAwIDE5OTYgIEFsZXggS29yb2JrYSA8YWxleEBwaG0zMC5waGFybS5zdW55c2IuZWR1PgoKCSogW2xvYWRlci9uZV9yZXNvdXJjZS5jXQoJRml4ZWQgRnJlZVJlc291cmNlKCkgcmV0dXJuIHZhbHVlLgoKCSogW29iamVjdHMvdGV4dC5jXQoJRml4ZWQgYSBidWcgaW4gRXh0VGV4dE91dCgpIHRoYXQgd2FzIGNhdXNpbmcgb3ZlcmxhcHBlZCBjaGFyYWN0ZXJzCglpbiBXaW5Xb3JkLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglTV1BfRlJBTUVDSEFOR0VEIGZvciB0b3AtbGV2ZWwgd2luZG93cyBub3cgaW52YWxpZGF0ZXMgY2xpZW50CglhcmVhIGFzIGNsb2NrLmV4ZSB3YW50cy4KClR1ZSBKdW4gMTggMTE6MzA6MjIgMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglNaW5pIGJ1Z2ZpeDogJ3Jldml2YWwnIG9mIG1pc3Npbmcgc2Nyb2xsYmFyIGluIGxpc3Rib3hlcy4KCk1vbiBKdW4gMTcgMjA6Mjc6NDEgMTk5NiAgUm9iZXJ0IFBvdWxpb3QgPGtyeW5vc0BjbGljLm5ldD4KCgkqIFtyZXNvdXJjZXMvc3lzcmVzX0ZyLnJjXSBbcmVzb3VyY2VzL1RPRE9dCglNYWRlIGNoYW5nZXMgZm9yIENob29zZV9Gb250IGRpYWxvZy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIEp1biAxNiAxNjo1MTozMSAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFttZW1vcnkvaGVhcC5jXQoJRml4ZWQgYnVnIGluIEhlYXBSZWFsbG9jICh0aGFua3MgdG8gQnJ1Y2UgTWlsbmVyKS4KCgkqIFttaXNjL3dzcHJpbnRmLmNdCglGaXhlZCBhcmd1bWVudCBzaXplIGZvciAlYyBmb3JtYXQgaW4gd3NwcmludGYxNigpLgoKCSogW29iamVjdHMvZGMuY10KCURvbid0IGZyZWUgaEZpcnN0Qml0bWFwIGZvciBzYXZlZCBEQ3MuCgoJKiBbd2luZG93cy9ldmVudC5jXQoJQWRkZWQgdGltZXIgaGFuZGxpbmcgaW4gRVZFTlRfV2FpdFhFdmVudCgpLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJSW4gTVNHX1RyYW5zbGF0ZU1vdXNlTXNnIGFuZCBNU0dfVHJhbnNsYXRlS2JkTXNnLCBjaGVjayBpZiB0aGUKCWV2ZW50IGlzIGZvciB0aGUgY3VycmVudCB0YXNrOyBpZiBub3QsIHdha2UgdGhlIG90aGVyIHRhc2suCgoJKiBbd2luZG93cy9xdWV1ZS5jXSBbaW5jbHVkZS9xdWV1ZS5oXQoJQWRkZWQgJ3NlbGYnIGhhbmRsZSBpbiBxdWV1ZSBzdHJ1Y3R1cmUuCgoJKiBbd2luZG93cy90aW1lci5jXQoJQWRkZWQgVElNRVJfRXhwaXJlVGltZXJzKCkgZnVuY3Rpb24gdG8gbWFyayBleHBpcmVkIHRpbWVycyBhbmQKCXdha2UgdXAgdGhlIGNvcnJlc3BvbmRpbmcgdGFza3MuCgpUaHUgSnVuIDEzIDAxOjQ2OjMzIEVEVCAxOTk2ICBXaWxsaWFtIE1hZ3JvIDx3bWFncm9AdGMuY29ybmVsbC5lZHU+CgoJKiBbd2luZG93cy9tYXBwaW5nLmNdCglGaXJzdCBwb2ludCBpbiBsaXN0IHdhcyBtYXBwZWQgbXVsdGlwbGUgdGltZXMgaW4gRFB0b0xQIGFuZAogCUxQdG9EUC4gIE90aGVyIHBvaW50cyB3ZXJlIG5vdCBtYXBwZWQuCgpXZWQgSnVuIDEyIDE4OjA4OjQ1IDE5OTYgIEFsZXggS29yb2JrYSA8YWxleEBwaG0zMC5waGFybS5zdW55c2IuZWR1PgoKCSogW21pc2Mvc2hlbGwuY10KCVNvbWUgZml4ZXMgZm9yIEV4dHJhY3RJY29uIGZ1bmN0aW9uIGZhbWlseS4KCgkqIFtkb2N1bWVudGF0aW9uL3VzZXJfbW9kdWxlXQoJQ2hhcHRlciBhYm91dCB3aW5kb3dpbmcgYW5kIG1lc3NhZ2luZyBzdWJzeXN0ZW1zLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUdWUgSnVuIDExIDE1OjIwOjQzIDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2RlYnVnZ2VyL2JyZWFrLmNdIFtsb2FkZXIvc2lnbmFsLmNdCglGaXhlZCBicmVha3BvaW50cyBpbiAzMi1iaXQgY29kZS4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUFkZGVkIG1hbnkgbW9yZSBXaW4zMiB2ZXJzaW9ucyBvZiBzdGFuZGFyZCBzdHJ1Y3R1cmVzLgoKCSogW2luY2x1ZGUvd2lucmVnLmhdIFttaXNjL3JlZ2lzdHJ5LmNdCglNb3ZlZCBwcml2YXRlIHR5cGVzIGludG8gcmVnaXN0cnkuYy4KCgkqIFttZW1vcnkvc3RyaW5nLmNdIChOZXcgZmlsZSkKCU1vdmVkIG1vc3Qgc3RyaW5nIGZ1bmN0aW9ucyBmcm9tIG1pc2MvbHN0ci5jOyBhZGRlZCBXaW4zMiB2ZXJzaW9uCglvZiBhbGwgZnVuY3Rpb25zLgoKCSogW21pc2Mvd3NwcmludGYuY10KCUltcGxlbWVudGVkIFdpbjMyIHdzcHJpbnRmIGZ1bmN0aW9ucy4KCgkqIFtvYmplY3RzL2JpdG1hcC5jXQoJSW1wbGVtZW50ZWQgV2luMzIgYml0bWFwIGZ1bmN0aW9ucy4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJRG9uJ3Qgc2V0IGRpYWxvZyBwcm9jZWR1cmUgYmVmb3JlIHRoZSBjb250cm9scyBhcmUgY3JlYXRlZC4gVGhpcwoJYXZvaWRzIGEgY3Jhc2ggaW4gV2luaGVscC4KClR1ZSBKdW4gMTEgMTQ6MTA6MDYgMTk5NiBNYXJ0aW4gdm9uIExvZXdpcyA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogW2NvbnRyb2xzL21lbnUuY10gW2lmMTYzMi91c2VyLnNwZWNdIFt3aW5kb3dzL21lc3NhZ2UuY10KCVJlcGxhY2UgUGVla01lc3NhZ2Ugd2l0aCBQZWVrTWVzc2FnZTE2LgoKCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXVttaXNjL21haW4uY10KCUdldFZlcnNpb24zMixHZXRWZXJzaW9uRXgzMkEsR2V0VmVyc2lvbkV4MzJXOiBuZXcgZnVuY3Rpb25zLgoJTUFJTl9QYXJzZVZlcnNpb246IG5ldyBmdW5jdGlvbiwgbmV3IGNvbW1hbmQgbGluZSBvcHRpb24gLXdpbnZlci4KCUdldFZlcnNpb246IG1vZGlmaWVkIHRvIHRha2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50IGludG8gYWNjb3VudC4KCgkqIFtpZjE2MzIva2VybmVsMzIuc3BlY10gW3dpbjMyL3Byb2Nlc3MuY10KCUZyZWVMaWJyYXJ5MzI6IG5ldyBmdW5jdGlvbi4KCVRsc0FsbG9jOiBpbml0aWFsaXplIFRscyB0byB6ZXJvLgoJSW50ZXJsb2NrZWRJbmNyZW1lbnQsSW50ZXJsb2NrZWREZWNyZW1lbnQsSW50ZXJsb2NrZWRFeGNoYW5nZTogbmV3CglmdW5jdGlvbnMuCgoJKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdCglTZXRFcnJvck1vZGUsR2V0QWN0aXZlV2luZG93OiBuZXcgcmVsYXlzIHRvIGV4aXN0aW5nIGZ1bmN0aW9ucy4KCgkqIFtpZjE2MzIva2VybmVsMzIuc3BlY11bd2luMzIvdXNlcjMyLmNdCglQZWVrTWVzc2FnZTMyQSxQZWVrTWVzc2FnZTMyVzogbmV3IGZ1bmN0aW9ucy4KCgkqIFtpbmNsdWRlL3N0cnVjdDMyLmhdW2luY2x1ZGUvd2luZG93cy5oXQoJTW92ZWQgTVNHMzIgdG8gd2luZG93cy5oLgoJUmVuYW1lZCBNU0cgdG8gTVNHMTYuCglNb2RpZmllZCBwcm90b3R5cGVzIHRvIHVzZSBNU0cxNgoKCSogW2luY2x1ZGUvd2luYmFzZS5oXQoJT1NWRVJTSU9OSU5GTzMyQSxPU1ZFUlNJT05JTkZPMzJXOiBuZXcgc3RydWN0dXJlcy4KClN1biBKdW4gIDkgMjA6NTM6MzAgMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbaWYxNjMyL01ha2VmaWxlLmluXSBbbG9hZGVyL2J1aWx0aW4uY10KCXZlcnNpb24uZGxsLGx6MzIuZGxsIGFkZGVkLgoKCSogW2luY2x1ZGUvbHpleHBhbmQuaF0gW2lmMTYzMi9sejMyLnNwZWNdIFtpZjE2MzIvbHpleHBhbmQuc3BlY10KCSAgW21pc2MvbHpleHBhbmQuY10KCWx6MzIuZGxsIGFkZGVkLgoJTW9kaWZpZWQgdG8gbmV3IGZ1bmN0aW9uIG5hbWluZyBzdGFuZGFyZC4KCgkqIFtpbmNsdWRlL3Zlci5oXSBbaWYxNjMyL3Zlci5zcGVjXSBbaWYxNjMyL3ZlcnNpb24uc3BlY10gW21pc2MvdmVyLmNdCgl2ZXJzaW9uLmRsbCBhZGRlZCAod2luMzIgdmVyc2lvbiBvZiB2ZXIuZGxsKS4KCU1vZGlmaWVkIHRvIG5ldyBmdW5jdGlvbiBuYW1pbmcgc3RhbmRhcmQuCglVc2UgcmVnaXN0cnkgdG8gbG9vayB1cCBhIExPQ0FMRSBsYW5naWRzIHRvby4KCShWZXJJbnN0YWxsRmlsZSxWZXJGaW5kRmlsZSBzdGlsbCBzdHVicykKCkZyaSBKdW4gIDcgMjA6NDA6MjAgMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFtmaWxlcy9maWxlLmNdCglBZGRlZCBhIHdhcm5pbmcgaWYgR2V0VGVtcEZpbGVOYW1lKCkgZ2V0cyBhIGJhZCBkcml2ZSBwYXJhbWV0ZXIuCgoJKiBbbWlzYy9jb21tZGxnLmNdCglDaGFuZ2VkIGZpbGUgbGlzdGJveCBjb2xvciB0byBncmF5IGluIFNhdmVGaWxlIGRpYWxvZyAKCShqdXN0IGxpa2UgV2luZG93cyBkb2VzIHRoaXMpLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpXZWQgSnVuICA1IDIwOjEzOjU0IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2NvbnRyb2xzL2J1dHRvbi5jXSBbY29udHJvbHMvbGlzdGJveC5jXQoJRml4ZWQgd1BhcmFtIG9mIFdNX0RSQVdJVEVNIG1lc3NhZ2UuCgoJKiBbaWYxNjMyL01ha2VmaWxlLmluXSBbbG9hZGVyL2J1aWx0aW4uY10KCVJlbW92ZSBXUFJPQ1MzMiBETEwsIGFzIHRoZSByZWxheSBjb2RlIGNhbiBjYWxsIFdpbmUgcm91dGluZXMKCWRpcmVjdGx5LgoKCSogW2xvYWRlci9tb2R1bGUuY10gW2xvYWRlci9uZV9pbWFnZS5jXQoJRml4ZWQgaW5pdGlhbCBzdGFjayBsYXlvdXQgZm9yIHNlbGYtbG9hZGluZyBtb2R1bGVzLgoKCSogW3Rvb2xzL2J1aWxkLmNdCglGaXhlZCBkYXRhIHNlZ21lbnQgYnVpbGRpbmcgZm9yIFdpbjE2IG1vZHVsZXMuCgoJKiBbd2luZG93cy9kZWZkbGcuY10KCUltcGxlbWVudGVkIFdpbjMyIHZlcnNpb25zIG9mIERlZkRsZ1Byb2MoKS4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJTWVyZ2VkIFdpbjE2IGFuZCBXaW4zMiBkaWFsb2cgY29kZS4KCUFkZGVkIHN1cHBvcnQgZm9yIGNvbnRyb2wgZXh0cmEgZGF0YSBpbiBkaWFsb2cgaXRlbSB0ZW1wbGF0ZS4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJVW5pZmllZCBXaW4xNiBhbmQgV2luMzIgdmVyc2lvbnMgb2YgQ3JlYXRlV2luZG93KCkuCglJbXBsZW1lbnRlZCBXaW4zMiB2ZXJzaW9uIG9mIEdldFdpbmRvd0xvbmcoKS4KCgkqIFt3aW5kb3dzL3dpbnByb2MuY10KCUNoYW5nZWQgdGhlIGltcGxlbWVudGF0aW9uIG9mIHdpbmRvdyBwcm9jZWR1cmVzLCBzbyB0aGF0IDE2LWJpdAoJd2lucHJvY3MgYXJlIHZhbGlkIHNlZ21lbnRlZCBwb2ludGVycy4KClN1biBKdW4gIDIgMTY6Mzk6NDYgMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbbWlzYy9yZWdpc3RyeS5jXQoJRml4ZWQgYW5vdGhlciBidWcgaW4gdGhlIHc5NSBsb2FkZXIuIFF1aWV0ZW5lZCBzb21lIGRlYnVnIG91dHB1dC4KClN1biBKdW4gIDIgMTA6MDA6MjIgMTk5NiAgVWxyaWNoIFNjaG1pZCAgPHVzY2htaWRAbWFpbC5oaC5wcm92aS5kZT4KCgkqIFt3aW5kb3dzL3dpbnByb2MuY10KCUJ1ZyBmaXg6IFdNX1BBUkVOVE5PVElGWTogZG9uJ3QgZmFsbCB0aHJvdWdoIHRvIFdNX1NFVFRFWFQuCgpTYXQgSnVuICAxIDEyOjM3OjIyIDE5OTYgIFRyaXN0YW4gVGFycmFudCA8dHN0QHN0aGluYy5kZW1vbi5jby51az4KCgkqIFtyZXNvdXJjZXMvVE9ET10gW3Jlc291cmNlcy9zeXNyZXNfSXQucmNdCglVcGRhdGVkIGZvbnQgZGlhbG9nIGJveC4KClRodSBNYXkgMzAgMjE6MDU6MTkgMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFtpbmNsdWRlL2NvbW1kbGcuaF0gW21pc2MvY29tbWRsZy5jXQoJQ2hvb3NlRm9udCgpIGFuZCBDaG9vc2VDb2xvcigpOiAKCUJ1Z2ZpeGVzIGFuZCBhZGRlZCBtb3JlIHN1cHBvcnQgZm9yIHNvbWUgQ0ZfKiBhbmQgQ0NfKiBmbGFnczogCglkaWFsb2cgdGVtcGxhdGVzIGFuZCBmb250IHNpemUgY29udHJvbC4KCUJ1Z2ZpeCBpbiBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBvZiBDSE9PU0VDT0xPUiBkZWZpbml0aW9uLgoKCSogW2lwYy9kZGVfcHJvYy5jXSBbd2luZG93cy9ldmVudC5jXQoJUmVwbGFjZWQgU2VuZE1lc3NhZ2Ugd2l0aCBTZW5kTWVzc2FnZTE2IGFuZCBhZGRlZCBpbmNsdXNpb24gb2YKIAlkZGVfcHJvYy5oIGZvciBlcnJvci1mcmVlIGNvbXBpbGF0aW9uIG9mIGlwYyBtb2R1bGUuCgpUaHUgTWF5IDMwIDE5OjAwOjAwIDE5OTYgIEFsZXggS29yb2JrYSA8YWxleEBwaG0zMC5waGFybS5zdW55c2IuZWR1PgoKCSogW3dpbmRvd3Mvc2Nyb2xsLmNdCglNYWRlIFNjcm9sbERDIHRvIHNhdmUvcmVzdG9yZSBjdXJyZW50IGNsaXBwaW5nIHJlZ2lvbi4KCgkqIFttaXNjL2NsaXBib2FyZC5jXSBbd2luZG93cy9ldmVudC5jXQoJSW1wbGVtZW50ZWQgbW9zdCBvZiB0aGUgcHJldmlvdXNseSBtaXNzaW5nIGZlYXR1cmVzIChub3QgdGVzdGVkKSwgCglpbXByb3ZlZCB0ZXh0IHBhc3RpbmcgZnJvbS90byBYLiAKCgkqIFtpZjE2MzIvdXNlci5zcGVjXSBbaWYxNjMyL2dkaS5zcGVjXSBbb2JqZWN0cy9kYy5jXQoJICBbb2JqZWN0cy9nZGlvYmouY10gW29iamVjdHMvY2xpcHBpbmcuY10gW3dpbmRvd3MvZGNlLmNdCgkgIFt3aW5kb3dzL3dpbnBvcy5jXSBbd2luZG93cy9wYWludGluZy5jXQoJVXBkYXRlZCBEQ0UgY29kZSwgaW1wbGVtZW50ZWQgZHluYW1pYyBpbnZhbGlkYXRpb24gb2Ygb3duZWQgRENzLgoJVGhpcyBmaXhlcyBhIGxvdCBvZiBwcm9ibGVtcyB3aXRoIHNjcm9sbGluZyBpbiBXaW5Xb3JkLiBOb3QKCXN1cmUgYWJvdXQgdGhlIGVmZmVjdCBvbiAtZGVza3RvcC4KCldlZCBNYXkgMjkgMjM6MzU6NDQgMTk5NiAgSnVra2EgSWl2b25lbiA8aWl2b25lbkBjYy5oZWxzaW5raS5maT4KCgkqIFt3aW4zMi90aW1lLmNdIFtpZjE2MzIva2VybmVsMzIuc3BlY10KCUFkZGVkIFNldFN5c3RlbVRpbWUgYW5kIFNldFRpbWVab25lSW5mb3JtYXRpb24uCgoJKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdCglBZGRlZCBsc3RyY2F0LCBsc3RyY2F0QSwgbHN0cmNtcCwgbHN0cmNtcEEsIGxzdHJjcHksIGxzdHJsZW4uCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglBZGRlZCBTWVNURU1fUE9XRVJfU1RBVFVTIHN0cnVjdHVyZSBhbmQgcHJvdG90eXBlcyBmb3IKCUdldFN5c3RlbVBvd2VyU3RhdHVzLCBTZXRTeXN0ZW1Qb3dlclN0YXRlLCBTZXRTeXN0ZW1UaW1lLgoKCSogW2luY2x1ZGUva2VybmVsMzIuaF0KCUFkZGVkIGEgcHJvdG90eXBlIGZvciBTZXRUaW1lWm9uZUluZm9ybWF0aW9uLgoKCSogW3dpbjMyL2Vudmlyb25tZW50LmNdIFtpZjE2MzIva2VybmVsMzIuc3BlY10KCUFkZGVkIEdldFN5c3RlbVBvd2VyU3RhdHVzIGFuZCBTZXRTeXN0ZW1Qb3dlclN0YXRlIHN0dWJzLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUdWUgTWF5IDI4IDE5OjM2OjM2IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdCglEZXN0cm95IHRoZSBsaXN0Ym94IGFuZCBlZGl0IGNvbnRyb2wgd2hlbiBkZXN0cm95aW5nIHRoZQoJY29tYm8uIFRoaXMgc2hvdWxkIHByZXZlbnQgY3Jhc2hlcyBvbiBhcHBsaWNhdGlvbiBleGl0LgoKCSogW21pc2Mvc3lzdGVtLmNdIFtpZjE2MzIvc3lzdGVtLnNwZWNdCglJbXBsZW1lbnRlZCBJbnF1aXJlU3lzdGVtKCkuCgoJKiBbbG9hZGVyL3Rhc2suY10gW3dpbmRvd3MvbWVzc2FnZS5jXSBbd2luZG93cy9xdWV1ZS5jXQoJRmlyc3QgYXR0ZW1wdCBhdCBpbnRlci10YXNrIFNlbmRNZXNzYWdlKCkuIFN0aWxsIGhhcyBhIGxvdCBvZgoJcHJvYmxlbXMuCgpUdWUgTWF5IDI4IDE0OjI2OjA0IDE5OTYgIFBldGVyIEJhanVzeiAgPGh5cC14QGluZi5ibWUuaHU+CgoJKiBbd2luZG93cy9tZGkuY10KCUZpeGVkIE1ESVRpbGUgd2l0aCBpY29uaWMgY2hpbGRyZW4uCgpNb24gTWF5IDI3IDIwOjI4OjE4IDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbbWlzYy9jb21tZGxnLmNdCglDaG9vc2VGb250IGRpYWxvZzoKCS0gY29tcGxldGUgcmV3cml0ZSBvZiBGb250RmFtaWx5RW51bVByb2MoKSBhbmQgRm9udFN0eWxlRW51bVByb2MoKQoJICBub3QgcmVhbCBhdmFpbGFibGUgZm9udCB0eXBlcyAoZS5nLiAiQm9sZCIpIGNhbiBub3Qgc2VsZWN0ZWQKCS0gc3VwcG9ydGluZyBtb3JlIENGX0xJTUlUU0laRS0gYW5kIENGXy4uLk9OTFktIGZsYWdzCgoJKiBbb2JqZWN0cy9mb250LmNdCglJbiBGT05UX01hdGNoRm9udCBwZXJmb3JtIGNoZWNrIGlmICJsZkZhY2VOYW1lIiBpcyBmYW1pbHkgZnJvbSBYMTEKCW9ubHkgaWYgImxmRmFjZU5hbWUiIGlzIGEgd2luZG93cyBmb250IGZhbWlseSB0aGVuIGRvIGEgY2FsbCBvZgoJRk9OVF9UcmFuc2xhdGVOYW1lKCkgOiB0aGlzIHJlc3VsdHMgaW4gYmV0dGVyIGZvbnQgc2VsZWN0aW9ucyBpbiAKCUNob29zZUZvbnQoKSBvciBhcHBsaWNhdGlvbnMgbGlrZSBjaGFybWFwLmV4ZSBvciB3cml0ZS5leGUuCglBZGRlZCBhIFBhcnNlRm9udFBhcm1zKCkgY2FsbCBpZiBuZWNlc3NhcnkgaW4gZnVuY3Rpb24gCglGT05UX01hdGNoRm9udCgpOiB3ZSBuZWVkIGEgZm9udCBuYW1lIGFzIGJhc2lzIGZvciBHZXRUZXh0RmFjZSgpIAoJZXZlbiBpZiB0aGVyZSBpc24ndCBvbmUuLi4KCgkqIFtyZXNvdXJjZXMvVE9ET10KCUludmVudG9yeSBvZiByZXNvdXJjZSB0cmFuc2xhdGlvbnMgaW4gc3lzcmVzXz8/LnJjCgpGcmkgTWF5IDI0IDE2OjMzOjI4IDE5OTYgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW21pc2MvcmVnaXN0cnkuY10KCV93OTVfbG9hZHJlZzogdXNlIG9mZnNldCB0byBkZXRlcm1pbmUgbmV4dCBSR0RCIHBvc2l0aW9uIHRvby4KClRodSBNYXkgMjMgMTk6MzU6MzggMTk5NiAgR3JlZyBLcmVpZGVyIDxrcmVpZGVyQG5hdGxhYi5yZXNlYXJjaC5waGlsaXBzLmNvbT4KCgkqIFtjb250cm9scy9jb21iby5jXQoJRml4ZWQgc2l6ZSBvZiBjb21ibywgbGJveCwgYW5kIGJ1dHRvbiAobGIgc29tZXRpbWVzIG9mZiBieSAyIHBpeGVscykuCgoJKiBbbWlzYy9tYWluLmNdCglSZXN1bHQgb2Ygb3B0aW9uICItZml4ZWRtYXAiIGlzIHRvIHR1cm4gZmxhZyBvbi4KClRodSBNYXkgMjMgMTk6MTU6NDEgMTk5NiAgUm9uYW4gV2FpZGUgIDxyb290QHdhaWRlci5pZT4KCgkqIFttaXNjL3NoZWxsLmNdCglTaGVsbEV4ZWN1dGUgYW5kIEZpbmRFeGVjdXRhYmxlIG5vdyBib3RoIHVzZSBjb21tb24gY29kZSB0bwoJZGV0ZXJtaW5lIHRoZSByZXF1aXJlZCBleGVjdXRhYmxlIGZpbGUuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBNYXkgMjEgMTQ6MDY6MDcgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbY29udHJvbHMvYnV0dG9uLmNdCglNYWRlIEJ1dHRvblduZFByb2MgYSAzMi1iaXQgd2luZG93IHByb2NlZHVyZS4KCgkqIFtjb250cm9scy9kZXNrdG9wLmNdCglNYWRlIERlc2t0b3BXbmRQcm9jIGEgMzItYml0IHdpbmRvdyBwcm9jZWR1cmUuCglBZGRlZCBoYW5kbGluZyBvZiBXTV9TRVRDVVJTT1IuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJQWxsb2NhdGUgbWVudSBpdGVtcyBhbmQgc3RyaW5ncyBvbiB0aGUgMzItYml0IHN5c3RlbSBoZWFwLgoJSW1wbGVtZW50ZWQgV2luMzIgdmVyc2lvbnMgZm9yIENoYW5nZU1lbnUsIEluc2VydE1lbnUsIE1vZGlmeU1lbnUsCglBcHBlbmRNZW51IGFuZCBMb2FkTWVudUluZGlyZWN0LgoKCSogW2NvbnRyb2xzL3dpZGdldHMuY10KCUFkZGVkIHBvc3NpYmlsaXR5IHRvIGhhdmUgMzItYml0IGJ1aWx0LWluIGNsYXNzZXMuCgoJKiBbZmlsZXMvZHJpdmUuY10KCUltcGxlbWVudGVkIEdldExvZ2ljYWxEcml2ZSgpIGFuZCBHZXRMb2dpY2FsRHJpdmVTdHJpbmdzKCkuCgoJKiBbbWlzYy9zcHkuY10gW2luY2x1ZGUvc3B5LmhdCglBZGRlZCBzdXBwb3J0IGZvciBzcHlpbmcgV2luMzIgbWVzc2FnZXMuCgoJKiBbbG9hZGVyL2J1aWx0aW4uY10KCUZpeGVkIGJ1ZyBpbiAtZGxsIG9wdGlvbiBwYXJzaW5nLgoKCSogW21lbW9yeS9sb2NhbC5jXQoJQWRkZWQgYmFjayB0aGUgY2hhbmdlIGJ5IEh1dyBELiBNLiBEYXZpZXMgdG8gZnJlZSB0aGUgYmxvY2sgaW4KCUxvY2FsUmVhbGxvYygpIGJlZm9yZSBhbGxvY2F0aW5nIHRoZSBuZXcgb25lLgoKCSogW29iamVjdHMvYml0bWFwLmNdIFtvYmplY3RzL2N1cnNvcmljb24uY10gW29iamVjdHMvb2VtYml0bWFwLmNdCglGaXhlZCBidWcgaW4gYml0bWFwIHNpemUgdGhhdCBjYXVzZWQgbWVtb3J5IGNvcnJ1cHRpb24gZm9yIDI0YnBwLgoKCSogW3dpbmRvd3MvZGVmd25kLmNdCglJbXBsZW1lbnRlZCBXaW4zMiB2ZXJzaW9uIG9mIERlZldpbmRvd1Byb2MoKS4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJSW1wbGVtZW50ZWQgV2luMzIgdmVyc2lvbiBvZiBTZW5kRGxnSXRlbU1lc3NhZ2UsCglHZXQvU2V0RGxnSXRlbVRleHQgYW5kIEdldC9TZXREbGdJdGVtSW50LgoKCSogW3dpbmRvd3MvbWRpLmNdCglJbXBsZW1lbnRlZCBXaW4zMiB2ZXJzaW9uIG9mIERlZkZyYW1lUHJvYygpIGFuZCBEZWZNRElDaGlsZFByb2MoKS4KCURvbid0IG1ha2UgYSBjb3B5IG9mIHRoZSBPQk0gYml0bWFwcyBmb3IgZXZlcnkgTURJIHdpbmRvdy4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCUltcGxlbWVudGVkIFdpbjMyIHZlcnNpb24gb2YgU2VuZE1lc3NhZ2UoKS4KCQoJKiBbd2luZG93cy93aW5wcm9jLmNdIFt3aW5kb3dzL2NsYXNzLmNdIFt3aW5kb3dzL3dpbi5jXQoJTmV3IHNjaGVtZSBmb3IgMzItYml0IHdpbmRvdyBwcm9jZWR1cmVzIHRvIHJlcGxhY2UgYWxpYXNlcy4gQWxsCgkzMi1iaXQgd2luZG93IHByb2NlZHVyZSBnZXQgYSAxNi1iaXQgYWRkcmVzcyBwb2ludGluZyB0byBhCglXSU5ET1dQUk9DIHN0cnVjdHVyZS4KCUltcGxlbWVudGVkIEFuc2k8LT5Vbmljb2RlIHRyYW5zbGF0aW9uIGZvciBDYWxsV2luZG93UHJvYygpLgoJQWRkZWQgdHJhbnNsYXRpb24gb2YgV01fRFJBV0lURU0gYmV0d2VlbiBXaW4xNiBhbmQgV2luMzIuCgoJKiBbd2luZG93cy93aW4uY10gW2luY2x1ZGUvY2FsbGJhY2suaF0KCUFkZGVkIHVnbHkgaGFjayB0byBidWlsZCBDUkVBVEVTVFJVQ1Qgb24gdGhlIHN0YWNrIHdoZW4gc2VuZGluZwoJV01fTkNDUkVBVEUuCglJbXBsZW1lbnRlZCBXaW4zMiB2ZXJzaW9uIG9mIEdldC9TZXRXaW5kb3dXb3JkL0xvbmcgYW5kCglHZXQvU2V0V2luZG93VGV4dC4KCQpGcmkgTWF5IDE3IDEwOjIwOjE2IDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbY29udHJvbHMvYnV0dG9uLmNdCglBdm9pZCBncmF5IHRleHQgb24gZ3JheSBiYWNrZ3JvdW5kIGluIGRpc2FibGVkIHB1c2ggYnV0dG9ucwoJdXNpbmcgYSBiL3cgcmFzdGVyIGFuZCBzb21lIHJhc3RlciBvcGVyYXRpb25zIChQYXRCbHQsQml0Qmx0KS4KCgkqIFtvYmplY3RzL3RleHQuY10KCURyYXdUZXh0KCk6IGRvbid0IGRyYXcgYW4gdW5kZXJiYXIgYW55bW9yZSBpZiBEVF9DQUxDUkVDVCBpcyBzZXQuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClRodSBNYXkgMTYgMTM6MzU6MzEgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbKi8qLmNdCglSZW5hbWVkIFJFQ1QsIFBPSU5UIGFuZCBTSVpFIHN0cnVjdHVyZXMgdG8gUkVDVDE2LCBQT0lOVDE2IGFuZAoJU0laRTE2LiBJbXBsZW1lbnRlZCBXaW4zMiB2ZXJzaW9uIG9mIG1vc3QgZnVuY3Rpb25zIHRoYXQgdGFrZQoJdGhlc2UgdHlwZXMgYXMgcGFyYW1ldGVycy4KCgkqIFtjb25maWd1cmVdCglQYXRjaGVkIGF1dG9jb25mIHRvIGF0dGVtcHQgdG8gY29ycmVjdGx5IGRldGVjdCAtbG5zbCBhbmQKCS1sc29ja2V0LiBQbGVhc2UgY2hlY2sgdGhpcyBvdXQuCgkKCSogW2NvbnRyb2xzL2J1dHRvbi5jXQoJQWRkZWQgc3VwcG9ydCBmb3IgV2luMzIgQk1fKiBtZXNzYWdlcy4KCgkqIFtjb250cm9scy9tZW51LmNdCglBdm9pZCBzZW5kaW5nIGV4dHJhIFdNX01FTlVTRUxFQ1QgbWVzc2FnZXMuIFRoaXMgYXZvaWRzIGNyYXNoZXMKCXdpdGggRXhjZWwuCgoJKiBbbWVtb3J5LmhlYXAuY10gW2luY2x1ZGUvaGVhcC5oXQoJQWRkZWQgc3VwcG9ydCBmb3IgU0VHUFRScyBpbiBXaW4zMiBoZWFwcy4gQWRkZWQgYSBmZXcgbWFjcm9zIHRvCiAJbWFrZSB1c2luZyBTRUdQVFJzIGVhc2llci4gVGhleSBhcmUgYSBiaXQgc2xvd2VyIHRoYW4gTUFLRV9TRUdQVFIsCiAJYnV0IHRoZXkgd29yayB3aXRoIFdpbjMyLgoKCSogW21lbW9yeS9hdG9tLmNdCglJbXBsZW1lbnRlZCBXaW4zMiBhdG9tIGZ1bmN0aW9ucy4KCgkqIFttZW1vcnkvbG9jYWwuY10KCUZpeGVkIExvY2FsUmVBbGxvYygpIGNoYW5nZXMgdG8gYXZvaWQgY29weWluZyB0aGUgd2hvbGUgYmxvY2sgdHdpY2UuCgoJKiBbd2luMzIvbWVtb3J5LmNdCglVc2UgL2Rldi96ZXJvIGluc3RlYWQgb2YgTUFQX0FOT04gZm9yIFZpcnR1YWxBbGxvYygpLgoKCSogW3dpbmRvd3MvY2xhc3MuY10KCVByb3Blcmx5IGltcGxlbWVudGVkIHRoZSBXaW4zMiBjbGFzcyBmdW5jdGlvbnMuCgoJKiBbd2luZG93cy93aW5wcm9jLmNdIChOZXcgZmlsZSkKCU5ldyBmaWxlIGhhbmRsaW5nIHRoZSBtZXNzYWdlIHRyYW5zbGF0aW9uIGJldHdlZW4gV2luMTYgYW5kIFdpbjMyLgoKTW9uIE1heSAxMyAxODowMDowMCAxOTk2IEFsZXggS29yb2JrYSA8YWxleEBwaG0zMC5waGFybS5zdW55c2IuZWR1PgoKCSogW3dpbmRvd3MvbWRpLmNdIFt3aW5kb3dzL21lbnUuY10KCUltcHJvdmVkIFdNX01ESUNSRUFURSBhbmQgV01fTURJQ0FTQ0FERSBoYW5kbGluZy4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdIFtvYmplY3RzL2JpdGJsdC5jXQoJSGFuZGxlIEdyYXBoaWNzRXhwb3NlIGV2ZW50IGZvciBCaXRCbHQgZnJvbSBzY3JlZW4gdG8gc2NyZWVuLgoKCSogW3dpbmRvd3MvZXZlbnQuY10gW3dpbmRvd3Mvd2luLmNdIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJQnVuY2ggb2YgZml4ZXMgZm9yIHByb2JsZW1zIHdpdGggLW1hbmFnZWQuCgoJKiBbd2luZG93cy93aW4uY10gW3dpbmRvd3Mvd2lucG9zLmNdCglDaGFuZ2VkIGNvbmRpdGlvbnMgZm9yIFdNX1NJWkUsIFdNX01PVkUsIGFuZCBXTV9HRVRNSU5NQVhJTkZPCglpbiBDcmVhdGVXaW5kb3cuCgoJKiBbd2luZG93cy93aW4uY10gW3dpbmRvd3MvcXVldWUuY10gW21pc2MvdXNlci5jXQoJRG8gbm90IHNlbmQgV01fUEFSRU5UTk9USUZZIHdoZW4gaW4gQXBwRXhpdCBhbmQgY2FsbCBXSF9TSEVMTAoJb24gd2luZG93IGNyZWF0aW9uL2Rlc3RydWN0aW9uLgoKCSogW29iamVjdHMvcGFsZXR0ZS5jXQoJQ3J1ZGUgUmVhbGl6ZVBhbGV0dGUoKS4gQXQgbGVhc3Qgc29tZXRoaW5nIGlzIHZpc2libGUgaW4gTHZpZXdQcm8uCgpTdW4gTWF5IDEyIDAyOjA1OjAwIDE5OTYgIFRob21hcyBTYW5kZm9yZCA8dC5kLmcuc2FuZGZvcmRAcHJkcy1ncm4uZGVtb24uY28udWs+CgoJKiBbaWYxNjMyL2dkaTMyLnNwZWNdCglBZGRlZCBSZWN0YW5nbGUgKHVzZSB3aW4xNiB2ZXJzaW9uKS4KCgkqIFtpZjE2MzIva2VybmVsMzIuc3BlY10KCUFkZGVkIEdldFdpbmRvd3NEaXJlY3RvcnlBICh1c2Ugd2luMTYgR2V0V2luZG93c0RpcmVjdG9yeSkuCgoJKiBbaWYxNjMyL3VzZXIzMi5zcGVjXQoJQWRkZWQgR2V0U3ViTWVudSwgTW92ZVdpbmRvdywgU2V0U2Nyb2xsUG9zLCBTZXRTY3JvbGxSYW5nZSAodXNlIHdpbjE2Cgl2ZXJzaW9ucykuCglBZGRlZCBTZXRXaW5kb3dzSG9va0V4QSAoZW1wdHkgc3R1YiBmb3Igbm93KS4KCgkqIFtpbmNsdWRlL2hhbmRsZTMyLmhdCglDaGFuZ2VkICNpbmNsdWRlIDxtYWxsb2MuaD4gdG8gI2luY2x1ZGUgPHN0ZGxpYi5oPiB0byBwcmV2ZW50CgloYXRlIG1lc3NhZ2UgZnJvbSBGcmVlQlNEIGNvbXBpbGVyLgoKCSogW3dpbjMyL25ld2Zucy5jXQoJQWRkZWQgbmV3IGZ1bmN0aW9uIFNldFdpbmRvd3NIb29rRXgzMkEgKGVtcHR5IHN0dWIgZm9yIG5vdykuCgoJKiBbd2luMzIvdXNlcjMyLmNdCglSZW1vdmVkIHJlZHVuZGFudCBkZWJ1Z2dpbmcgcHJpbnRmIHN0YXRlbWVudC4KClN1biBNYXkgMTIgMDE6MjQ6NTcgMTk5NiAgSHV3IEQuIE0uIERhdmllcyA8aC5kYXZpZXMxQHBoeXNpY3Mub3hmb3JkLmFjLnVrPgoKCSogW21lbW9yeS9sb2NhbC5jXQoJQXZvaWQgY3JlYXRpbmcgYWRqYWNlbnQgZnJlZSBibG9ja3MuCglGcmVlIHRoZSBibG9jayBpbiBMb2NhbFJlQWxsb2MoKSBiZWZvcmUgYWxsb2NhdGluZyBhIG5ldyBvbmUuCglGaXhlZCBMb2NhbFJlQWxsb2MoKSBmb3IgZGlzY2FyZGVkIGJsb2Nrcy4KCQpGcmkgTWF5IDEwIDIzOjA1OjEyIDE5OTYgIEp1a2thIElpdm9uZW4gPGlpdm9uZW5AY2MuaGVsc2lua2kuZmk+CgoJKiBbcmVzb3VyY2VzL3N5c3Jlc19GaS5yY10KCUNob29zZUZvbnQgYW5kIENob29zZUNvbG9yIGRpYWxvZ3MgdXBkYXRlZC4KCkZyaSBNYXkgMTAgMTc6MTk6MzMgMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbZmlsZXMvZHJpdmUuYyxpZjE2MzIva2VybmVsLnNwZWNdCglHZXRDdXJyZW50RGlyZWN0b3J5KCksU2V0Q3VycmVudERpcmVjdG9yeSgpIGltcGxlbWVudGVkLgoKCSogW2lmMTYzMi9hZHZhcGkzMi5zcGVjXSBbaWYxNjMyL2tlcm5lbC5zcGVjXSBbaWYxNjMyL3NoZWxsLnNwZWNdCgkgIFtpbmNsdWRlL3dpbmRvd3MuaF0gW2luY2x1ZGUvd2lucmVnLmhdIFtsb2FkZXIvbWFpbi5jXQoJICBbbWlzYy9tYWluLmNdIFttaXNjL3NoZWxsLmNdIFttaXNjL3JlZ2lzdHJ5LmNdCglSZWdpc3RyeSBmaXhlczoKCS0gbG9hZHMgd2luOTUgcmVnaXN0cnkgZGF0YWJhc2VzLAoJLSBzYXZlIG9ubHkgdXBkYXRlZCBrZXlzIG9uIGRlZmF1bHQsCgktIG5vdyBhZGhlcnMgdG8gdGhlIG5ldyBmdW5jdGlvbiBuYW1pbmcgc3RhbmRhcmQsCgktIG1pbm9yIGNsZWFudXBzLgoKVHVlIE1heSA3IDIyOjM2OjEzIDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbY29tYm8uY10KCUFkZGVkIFdNX0NPTU1BTkQtaGFuZGxpbmcgZm9yIGludGVyYWN0aW9uIGJldHdlZW4gRURJVCBhbmQgQ09NQk9MQk9YCiAgICAgICAgYW5kIHN5bmNocm9uaXplZCBtaW5lIHdpdGggR3JlZyBLcmVpZGVyJ3Mgd29ya3MuCgoJKiBbY29tbWRsZy5jXQoJQnVnZml4IGluIENob29zZUZvbnQ6IGZvbnQgc2l6ZSBoYW5kbGluZy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KTW9uIE1heSAgNiAxMjo1NjoyNiAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtERVZFTE9QRVJTLUhJTlRTXQoJQWRkZWQgcGFyYWdyYXBoIG9uIG5hbWluZyBjb252ZW50aW9ucyBmb3IgV2luMTYvV2luMzIvV2luZWxpYi4KCgkqIFtjb250cm9scy9tZW51LmNdCglDcmVhdGUgYSBkZWZhdWx0IHN5c3RlbSBtZW51IHRoYXQgaXMgdGhlIHNhbWUgZm9yIGFsbCB3aW5kb3dzCglpbnN0ZWFkIG9mIG1ha2luZyBhIGNvcHkgZXZlcnkgdGltZS4KCgkqIFtpbmNsdWRlL3dpbnR5cGVzLmhdCglBZGRlZCBXSU5FTElCX05BTUUgYW5kIERFQ0xfV0lORUxJQl9UWVBFIG1hY3Jvcy4KCUFkZGVkIHh4MTYgYW5kIHh4MzIgZGVmaW5pdGlvbnMgZm9yIG1vc3QgdHlwZXMuIEdlbmVyYWwgY2xlYW4tdXAuCgoJKiBbbWVtb3J5L2dsb2JhbC5jXSBbbWVtb3J5L2xvY2FsLmNdIFsqLypdCglSZW5hbWVkIEdsb2JhbCBhbmQgTG9jYWwgaGVhcCBmdW5jdGlvbnMgdG8geHh4MTYuIEFkZGVkIGFsbCB4eHgzMgoJdmVyc2lvbnMgb2YgdGhlIHNhbWUgZnVuY3Rpb25zLgoKCSogW21lbW9yeS9zZWxlY3Rvci5jXQoJTWFzayBvdXQgbG93ZXIgYml0cyBvZiBzZWxlY3RvciBpbiBGcmVlU2VsZWN0b3IoKS4KCgkqIFttaXNjL2xzdHIuY10KCUZpeGVkIHd2c3ByaW50ZigpLgoKCSogW3dpbmRvd3MvY2xhc3MuY10KCUNoYW5nZWQgdGhlIGNsYXNzIHN0cnVjdHVyZSB0byBtYWtlIFdpbjMyIHN1cHBvcnQgZWFzaWVyLgoKCSogW3dpbmRvd3MvZGVmd25kLmNdCglBZGRlZCBoYW5kbGluZyBvZiBXTV9JTklUTUVOVVBPUFVQIGZvciBzeXN0ZW0gbWVudSB0byBncmF5IG91dAoJaW52YWxpZCBvcHRpb25zLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglCdWcgZml4OiB0aGUgV0lORE9TUE9TIHN0cnVjdHVyZSBwb2ludGVyIGluIFdNX05DQ0FMQ1NJWkUgbXVzdCBiZQoJYSBTRUdQVFIuCgpTdW4gTWF5ICA1IDAzOjUxOjI2IDE5OTYgIEh1dyBELiBNLiBEYXZpZXMgPGguZGF2aWVzMUBwaHlzaWNzLm94Zm9yZC5hYy51az4KCgkqIFttZW1vcnkvbG9jYWwuY10KCUltcGxlbWVudGF0aW9uIG9mIG1vdmVhYmxlIGFuZCAocnVkaW1lbnRhcnkpIHN1cHBvcnQgZm9yCiAJZGlzY2FyZGFibGUgbG9jYWwgbWVtb3J5LCBwbHVzIHNldmVyYWwgYnVnIGZpeGVzLgoKU2F0IE1heSAgNCAxODozMzozNSAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0gW3dpbmRvd3Mvd2luLmNdIFtpZjE2MzIvdXNlci5zcGVjXSAKCUZpbmRXaW5kb3dFeCgpIGltcGxlbWVudGVkIChzb21lb25lIHJlcG9ydGVkIGl0IHdhcyBtaXNzaW5nCglmb3IgRnJhbWVNYWtlciA0LjEpLgoKCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXSBbaWYxNjMyL3VzZXIzMi5zcGVjXSBbd2luMzIvbWVtb3J5LmNdCgkgIFt3aW4zMi9yZXNvdXJjZS5jXQoJTWlzYyBzbWFsbCBzdHVicy9zbWFsbCBmdW5jdGlvbnMgd2hpY2ggYnJpbmcgd2luOTUgYmluYXJpZXMKCWZ1cnRoZXIgZG93biB0aGUgcm9hZC4gKElzQmFkQ29kZVB0ciwgTG9jYWxSZUFsbG9jLEdldEN1cnNvclBvcykKCVNtYWxsIGZpeCBpbiBXSU4zMl9Mb2FkQWNjZWxlcmF0b3JzQS4KCkZyaSBNYXkgIDMgMTk6NDM6MTIgMTk5NiAgRnJhbnMgdmFuIERvcnNzZWxhZXIgPGRvcnNzZWxAcnVsaG0xLkxlaWRlblVuaXYubmw+CgoJKiBbY29udHJvbHMvZWRpdC5jXSBbY29udHJvbHMvRURJVC5UT0RPXQoJQ2hhbmdlZCAvIGZpeGVkIHNvbWUgdHlwZXMgYW5kIHR5cGVjYXN0cy4KCUZpeGVkIHRoZSBzY3JvbGxiYXIgcmVzZXQgYWZ0ZXIgV01fU0VUSEFORExFIC8gV01fU0VUVEVYVC4KCUFkZGVkIGhlYXAgaW5pdGlhbGl6YXRpb24gaW4gV01fQ1JFQVRFLgoKRnJpIE1heSAgMyAxOTozMDowMiAxOTk2ICBHcmVnIEtyZWlkZXIgPGtyZWlkZXJAbmF0bGFiLnJlc2VhcmNoLnBoaWxpcHMuY29tPgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdIFtjb250cm9scy9saXN0Ym94LmNdCglQYXNzIFdNX1tIVl1TQ1JPTEwgdG8gbGlzdGJveCwgYnV0IG5vdCBjb21iby4KCURvbid0IHRyeSB0byByZWRyYXcgbm9uLWV4aXN0YW50IHNjcm9sbCBiYXJzIChjaGFuZ2VzIGR3U3R5bGUgZmxhZ3MpLgoJQ29tYm8gYm94IGdldHMgYm9yZGVyLgoJQ29tYm8gYm94IGluY2x1ZGVzIGJ1dHRvbiAob3RoZXJ3aXNlIGJ1dHRvbiB3b24ndCB0cmlnZ2VyIGRyb3Bkb3duKS4KCVByb3BlciBib3JkZXIgYXJvdW5kIFJlY3RCdXR0b24uCglDaGVjayBzaXplIGNvbnNpc3RhbmN5IG9mIGNvbWJvLCBsaXN0Ym94LCBhbmQgYnV0dG9uIGFmdGVyIHJlc2l6aW5nIAoJb3IgYmVmb3JlIHBhaW50aW5nLiAgVGhlc2Ugcm91dGluZXMgc3RpbGwgYXJlbid0IGNvbXBsZXRlbHkgY29ycmVjdC4KCUxvY2FsaXplIHNpemUgY2hlY2tzIGluIHNlcGFyYXRlIHJvdXRpbmVzLgoJTGlzdGJveGVzIGFyZSB3aGl0ZS4KClRodSBNYXkgIDIgMTk6MjE6MjMgMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFtjb250cm9scy9jb21iby5jXVtpbmNsdWRlL2NvbW1kbGcuaF1baW5jbHVkZS9jb21tZGxnLmNdCgkgIFtyZXNvdXJjZXMvc3lzcmVzX0RlLnJjXVtyZXNvdXJjZXMvc3lzcmVzX0VuLnJjXQoJSW50cm9kdWNlZCBDaG9vc2VGb250IGRpYWxvZywgYnV0IG5lZWRlZCBzb21lIHBhdGNoZXMgaW4gCgloYW5kbGluZyBvZiBjb21ib2JveGVzIHdpdGggZWRpdCBjb250cm9scy4KClR1ZSBBcHIgMzAgMDA6MzM6MjcgMTk5NiAgVWxyaWNoIFNjaG1pZCAgPHVzY2htaWRAbWFpbC5oaC5wcm92aS5kZT4KCgkqIFtwcm9ncmFtcy93aW5oZWxwLypdCglBZGRlZCBhIGhlbHAgdmlld2VyIGFuZCBhIHNpbXBsZSBgLmhscCcgdG8gYC5zZ21sJyBjb252ZXJ0ZXIuCgpNb24gQXByIDI5IDE0OjE3OjU3IDE5OTYgIFRyaXN0YW4gVGFycmFudCA8dHN0QHN0aGluYy5kZW1vbi5jby51az4KCgkqIFtyZXNvdXJjZXMvc3lzcmVzXyoucmNdIFttaXNjL3NoZWxsLmNdCglNb2RpZmllZCBzaXplIG9mICJBYm91dCIgZGlhbG9nIGJveGVzLgoKU2F0IEFwciAyNyAxODoxMDoxMSBNYXJ0aW4gdm9uIExvZXdpcyA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogW2lmMTYzMi9NYWtlZmlsZS5pbl1bbG9hZGVyL2J1aWx0aW4uY10KCWNydGRsbC5zcGVjLCBudGRsbC5zcGVjLCB3c29jazMyLnNwZWM6IG5ldyBmaWxlcy4KCgkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KCUZpeCBlcnJvciBtZXNzYWdlIGlmIGltcG9ydCBieSBvcmRpbmFsIGZhaWxlZC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIEFwciAyOCAxNDozMjo0MyAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtNYWtlZmlsZS5pbl0KCVN1YmRpciBtZW1vcnkgaXMgbm93IGFsc28gY29tcGlsZWQgZm9yIFdpbmVsaWIsIGluIG9yZGVyIHRvIGdldAoJdGhlIFdpbjMyIGhlYXAgZnVuY3Rpb25zLgoKCSogW2lmMTYzMi9NYWtlZmlsZS5pbl0KCVJlbmFtZWQgd2lucHJvY3MgYW5kIHdpbnByb2NzMzIgdG8gd3Byb2NzIGFuZCB3cHJvY3MzMiB0byBhdm9pZAoJRExMIG5hbWVzID4gOCBjaGFyYWN0ZXJzLgoKCSogW2xvYWRlci9idWlsdGluLmNdIChOZXcgZmlsZSkKCUdyb3VwZWQgYWxsIGJ1aWx0LWluIERMTHMgY29kZSBpbiBhIHNpbmdsZSBmaWxlLgoKCSogW21lbW9yeS9nbG9iYWwuY10KCVVzZSB0aGUgV2luMzIgaGVhcCBjb2RlIGluc3RlYWQgb2YgbWFsbG9jKCkgdG8gYWxsb2NhdGUgbGluZWFyCgltZW1vcnkuIFRoaXMgd2lsbCBoZWxwIHRlc3QgdGhlIGhlYXAgY29kZS4KCgkqIFttZW1vcnkvbG9jYWwuY10KCUZpeGVkIEZyZWVTZWxlY3RvcigpIHRvIGNsZWFyIERTIGFuZCBFUyBjb3JyZWN0bHkgZm9yIGh1Z2UgYmxvY2tzLgoKCSogW3Rvb2xzL2J1aWxkLmNdIFtpZjE2MzIvcmVsYXkuY10KCVJlbW92ZWQgJ2lkJyBkaXJlY3RpdmUgaW4gc3BlYyBmaWxlcy4gRm9yIHJlbGF5IGRlYnVnZ2luZywgdGhlIERMTAoJZW50cnkgcG9pbnQgaXMgbm93IGNvbXB1dGVkIGZyb20gdGhlIENTOklQIGVudHJ5IHBvaW50IGFkZHJlc3MuCglBZGRlZCAnaGVhcCcgZGlyZWN0aXZlIHRvIHNwZWNpZml5IGEgbG9jYWwgaGVhcCBmb3IgdGhlIERMTC4gVVNFUgoJYW5kIEdESSBoZWFwIGFyZSBub3cgY3JlYXRlZCB0aGlzIHdheS4KCgkqIFt3aW5kb3dzL2NsYXNzLmNdIFtpbmNsdWRlL2NsYXNzLmhdCglDaGFuZ2VkIHRoZSBjbGFzcyBzdHJ1Y3R1cmUgdG8gdXNlIHBvaW50ZXJzIGluc3RlYWQgb2YgaGFuZGxlcy4KCUNoYW5nZWQgR2V0L1NldENsYXNzV29yZC9Mb25nIHRvIHVzZSBhIHN3aXRjaCBzdGF0ZW1lbnQ7IHRoaXMKCWFsbG93cyBjaGFuZ2luZyB0aGUgbGF5b3V0IG9mIHRoZSBDTEFTUyBzdHJ1Y3R1cmUuCgoJKiBbd2luZG93cy93aW4uY10gW2luY2x1ZGUvd2luLmhdCglVc2UgYSBDTEFTUyAqIGluc3RlYWQgb2YgYSBoYW5kbGUgZm9yIHRoZSB3aW5kb3cgY2xhc3MuCgpTYXQgQXByIDI3IDE4OjEwOjExIE1hcnRpbiB2b24gTG9ld2lzIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdIFttZW1vcnkvZ2xvYmFsLmNdCgkgIFt3aW4zMi9tZW1vcnkuY10gW3dpbjMyL3Byb2Nlc3MuY10KCUdldFByb2Nlc3NBZmZpbml0eU1hc2ssR2xvYmFsTG9jayxJc0JhZFJlYWRQdHIsSXNCYWRXcml0ZVB0ciwKCUxvY2FsTG9jayxTZXRUaHJlYWRBZmZpbml0eU1hc2s6IG5ldyByZWxheXMuCgoJKiBbd2luMzIvY3Vyc29yaWNvbjMyLmNdCglSZXR1cm4gc2FtZSBoYW5kbGUgaWYgYSBjdXJzb3IgaXMgbG9hZGVkIG11bHRpcGxlIHRpbWVzLgoKU2F0IEFwciAyNyAxNToxMzozNyAxOTk2ICBCYW5nIEp1biBZb3VuZyA8YmFuZ2p5QG5vd251cmkubm93Y29tLmNvLmtyPgoKCSogW3Jlc291cmNlcy9zeXNyZXNfS28ucmNdCiAgICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgS29yZWFuIFtLb10gbGFuZ3VhZ2UuCgpGcmkgQXByIDI2IDAwOjQ5OjA1IDE5OTYgIEh1dyBELiBNLiBEYXZpZXMgPGguZGF2aWVzMUBwaHlzaWNzLm94Zm9yZC5hYy51az4KCgkqIFtvYmplY3RzL2RjLmNdIFtvYmplY3RzL2ZvbnQuY10KCUZpeGVkIHByb2JsZW0gd2l0aCBTYXZlREMoKS9SZXN0b3JlREMoKSBhbmQgZm9udCBjYWNoZSAndXNlZCcgY291bnQuCgoJKiBbb2JqZWN0cy9tZXRhZmlsZS5jXSBbb2JqZWN0cy9kY3ZhbHVlcy5jXQoJRml4ZWQgYnJva2VuIFNldFRleHRBbGlnbigpIG9uIG1ldGFmaWxlcy4KCgkqIFtvYmplY3RzL21ldGFmaWxlLmNdCglEZWxldGUgb2JqZWN0cyBpbiBoYW5kbGUgdGFibGUgYXQgZW5kIG9mIFBsYXlNZXRhRmlsZSgpLgoKV2VkIEFwciAyNCAxOToyMTowMSAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbaWYxNjMyL3Zlci5zcGVjXSBbbWlzYy92ZXIuY10gW2luY2x1ZGUvdmVyLmhdIChOZXcgZmlsZXMpCglWRVIuRExMIChwYXJ0aWFsbHkpIGltcGxlbWVudGVkIChWZXJGaW5kRmlsZSxWZXJJbnN0YWxsRmlsZSkKCVtJZiBpdCBkb2Vzbid0IHdvcmsgZm9yIHlvdSwgdXNlIC1kbGwgLXZlciBhbmQgcmVwb3J0IGl0IHRvIG1lXQoKCSogW2lmMTYzMi91c2VyMzIuc3BlY10gW2lmMTYzMi9rZXJuZWwzMi5zcGVjXSBbaWYxNjMyL3NoZWxsLnNwZWNdCgkgIFtpZjE2MzIvc2hlbGwzMi5zcGVjXSBbbWlzYy9vbGUybmxzLmNdIFt3aW5kb3dzL21lc3NhZ2UuY10KCSAgW3dpbmRvd3MvZ3JhcGhpY3MuY10KCVNpbXBsZSB3aW4zMiBmdW5jdGlvbnMsIHdoZXJlIHdlIGNhbiBqdXN0IHVzZSB0aGUgd2luMTYgY291bnRlcnBhcnQuCglNaXNjLiBzdHVicy4gCgoJKiBbbWlzYy9sc3RyLmNdCglTb21lb25lIHJlcG9ydGVkIGEgX2xzdHJsZW4oTlVMTCkuIE5VTEwgaXMgYSB2YWxpZCBhcmd1bWVudC4gRml4ZWQuCgoJKiBbbWlzYy9yZWdpc3RyeS5jXQoJU29tZSBhbGxvY2xlbnMgd2VyZSBvZmYgYnkgMSwgb25lIGRvdWJsZSBmY2xvc2UoKSBmaXhlZC4KCVJlcXVlc3RpbmcgdmFsdWUgMCBvZiBhIGtleSB3aXRoIG5vIHZhbHVlcyByZXR1cm5zIGFuIGVycm9yIAoJKHNob3VsZCB3ZSBhbHdheXMgcmV0dXJuIGEgbWFkZSB1cCB2YWx1ZSBOVUxMPyB3aGF0IGRvZXMgd2luMy4xPykKClR1ZSBBcHIgMjMgMTc6MDA6MDAgMTk5NiBBbGV4IEtvcm9ia2EgPGFsZXhAcGhtMzAucGhhcm0uc3VueXNiLmVkdT4KCgkqIFttaXNjL3NoZWxsLmNdCglJbXBsZW1lbnRlZCBGaW5kRW52aXJvbm1lbnRTdHJpbmcoKSwgRG9FbnZpcm9ubWVudFN1YnN0KCksCglFeHRyYWN0SWNvbigpLCBJbnRlcm5hbEV4dHJhY3RJY29uKCkgYW5kIEV4dHJhY3RBc3NvY2lhdGVkSWNvbigpLgoKCSogW21pc2MvdXNlci5jXQoJRG8gZXh0ZW5zaXZlIGNsZWFudXAgb24gYXBwbGljYXRpb24gZXhpdC4KCgkqIFt3aW5kb3dzL2hvb2suY10gW3dpbmRvd3Mvd2luLmNdIFt3aW5kb3dzL2NsYXNzLmNdCglBZGRlZCBtaXNjZWxsYW5lb3VzIGNsZWFudXAgcm91dGluZXMuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJTW9yZSBlZmZpY2llbnQgcG9wdXAgbWVudSB3aW5kb3cgaGFuZGxpbmcuCgpNb24gQXByIDIyIDIxOjM1OjIyIDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdW29iamVjdHMvb2VtYml0bWFwLmNdW2luY2x1ZGUvYml0bWFwcy9vYm1fdHJ0eXBlXQoJQWRkZWQgIlRULWJpdG1hcCIgZm9yIGxhdGVyIHVzYWdlIGluIGEgQ2hvb3NlRm9udCgpIG93bmVyZHJhdyBjb21ib2JveC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU2F0IEFwciAyMCAyMzoyMzoxNiAxOTk2ICBSb2JlcnQgUG91bGlvdCA8a3J5bm9zQHFiYy5jbGljLm5ldD4KCgkqIFtyZXNvdXJjZXMvc3lzcmVzX0ZyLnJjXSBbcmVzb3VyY2VzL1RPRE9dCglNYWRlIGNoYW5nZXMgZm9yIENob29zZV9Db2xvciBkaWFsb2cuCgpTYXQgQXByIDIwIDE1OjQzOjQ5IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2NvbnRyb2xzL2J1dHRvbi5jXQoJRml4ZWQgdGVzdCB0aGF0IGdvdCBtaXNjb21waWxlZCBieSBzb21lIG9sZCBnY2MgdmVyc2lvbnMuCgoJKiBbbWVtb3J5L2xvY2FsLmNdCglGaXhlZCB0aGUgbGF5b3V0IG9mIGhhbmRsZSB0YWJsZXMgc28gdGhhdCBtb3ZlYWJsZSBoYW5kbGUgZW50cmllcwoJY2FuIGJlIGZyZWVkIG9uIExvY2FsRnJlZSgpLgoJSW1wbGVtZW50ZWQgTG9jYWxGbGFncygpLCBMb2NhbENvdW50RnJlZSgpLCBMb2NhbEhhbmRsZURlbHRhKCkgYW5kCglHZXRIZWFwU3BhY2VzKCkuCgoJKiBbbWlzYy9tYWluLmNdIFtBTk5PVU5DRV0KCVVwZGF0ZSB0aGUgbGlzdCBvZiBjb250cmlidXRvcnMuIFBsZWFzZSBsZXQgbWUga25vdyBpZiBJIGZvcmdvdAoJc29tZW9uZS4KCkZyaSBBcHIgMTkgMjA6MDc6MjAgMTk5NiAgRnJhbnMgdmFuIERvcnNzZWxhZXIgIDxkb3Jzc2VsQHJ1bGhtMS5sZWlkZW51bml2Lm5sPgoKCSogW2NvbnRyb2xzL2VkaXQuY10gW2NvbnRyb2xzL0VESVQuVE9ET10KCUZpeGVkIEVNX1NFVEhBTkRMRSAvIFdNX0NSRUFURSAvIEVESVRfTWFrZUZpcigpIGJ1ZmZlciBhbGxvY2F0aW9uLgoJRml4ZWQgRVNfTk9ISURFU0VMIC8gV01fTU9VU0VNT1ZFIC8gV01fTEJVVFRPTkRPV04gaW1wbGVtZW50YXRpb24uCglBZGRlZCBXTV9FTkFCTEUgaW1wbGVtZW50YXRpb24gKGdyYXkgdGV4dCkuCglGaXhlZCBidWZmZXIgPiAzMjc2NyBidWcuCglGaXhlZCBhcmd1bWVudCB0eXBlcyAvIHR5cGVjYXN0aW5nLgoJRmFzdGVyIHNlbGVjdGlvbiAocmUpZHJhd2luZy4KClRodSBBcHIgMTggMTM6Mzg6MjYgMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbbWlzYy9yZWdpc3RyeS5jXSBbaW5jbHVkZS93aW5yZWcuaF0KCUNoYW5nZWQgc2F2ZWZpbGUgZm9ybWF0IGFnYWluIHRvIGh1bWFuIHJlYWRhYmxlL2VkaXRhYmxlCgkoVU5JQ09ERSBjaGFycyA+MHhmZiBhcmUgc3BlY2lmaWVkIGJ5IFx1WFhYWCwgZGF0YSBieSBYWCkuCglIYXMgbm93IGdsb2JhbCAvIGxvY2FsIHJlZ2lzdHJ5IGRhdGFiYXNlcyAoaW5jbHVkaW5nIG1lcmdpbmcgdGhlbSkuCglIS0VZX0NMQVNTRVNfUk9PVCA9PSBIS0VZX0xPQ0FMX01BQ0hJTkVcXFNPRlRXQVJFXFxDbGFzc2VzLgoJSEtFWV9DVVJSRU5UX1VTRVIgPT0gSEtFWV9VU0VSU1xcPGxvZ2lubmFtZT4uCgoJKiBbbWlzYy9jb21tLmNdCglBbGxvdyAiICIgYXMgQ09NeDogLi4uIHNwZWMgZGVsaW1pdGVyIHRvby4KCShBT0wtQ0Qgc2V0dXAuZXhlIHRyaWVzIHRvIGluaXRpYWxpemUgbW9kZW0yIGFzICI5NjAwLHgseCB4IiAoY2FuJ3QgCglyZW1lbWJlciB0aGUgeCkuCgpUaHUgQXByIDE4IDA5OjAwOjAwIDE5OTYgIEFsZXggS29yb2JrYSA8YWxleEBwaG0zMC5waGFybS5zdW55c2IuZWR1PgoKCSogW3dpbmRvd3MvbWRpLmNdCglNaXNjZWxsYW5lb3VzIGNoYW5nZXMuCgoJKiBbd2luZG93cy93aW5wb3MuY10gCglVc2UgQml0Qmx0IHdoZW5ldmVyIHBvc3NpYmxlIGluIFNldFdpbmRvd1Bvcy4KCgkqIFt3aW5kb3dzL3BhaW50aW5nLmNdCglGaXggaW5jb21wYXRpYmlsaXRpZXMgd2l0aCBocmduVXBkYXRlIGJlaW5nIDEuCgpXZWQgQXByIDE3IDE5OjE5OjIyIDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbbWlzYy9jb21tZGxnLmNdCglNYW55IGJ1Z2ZpeGVzIGluIENob29zZUNvbG9yIGRpYWxvZy4KCUFkZGVkIGEgdXNlciBkZWZpbmVkIGRpYWxvZyB0aXRsZSBpbiBGaWxlT3Blbi0vRmlsZVNhdmUtIGRpYWxvZy4KCgkqIFttaXNjL2NvbW1kbGcuY11baW5jbHVkZS9jb21tZGxnLmhdCgkgIFtpZjE2MzIvY29tbWRsZy5zcGVjXVtpZjE2MzIvd2lucHJvY3Muc3BlY10KCUludHJvZHVjZWQgZGlhbG9nLSwgY2FsbGJhY2stIGFuZCBlbnVtLSBzdHViIGZ1bmN0aW9ucwoJZm9yIENob29zZUZvbnQgZGlhbG9nCgpXZWQgQXByIDE3IDE5OjA4OjM4IDE5OTYgIE5pZWxzIGRlIENhcnBlbnRpZXIgIDxuaWVsc0BjaW5keS5ldC50dWRlbGZ0Lm5sPgoKCSogW29iamVjdHMvbWV0YWZpbGUuY10gW2luY2x1ZGUvbWV0YWZpbGUuaF0gW2lmMTYzMi9nZGkuc3BlY10KCUltcGxlbWVudGVkIEVudW1NZXRhRmlsZSBhbmQgQ29weU1ldGFGaWxlLiBSZW1vdmVkIE1FVEFGSUxFIHN0cnVjdC4KCUltcGxlbWVudGVkIE1FVEFfU1RSRVRDSERJQiBpbiBQbGF5TWV0YUZpbGVSZWNvcmQsIHNldmVyYWwgYnVnIAoJZml4ZXMuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCURvbid0IHRyeSB0byBoaWRlIHRoZSB3aW5kb3cgaWYgaXQncyBhbHJlYWR5IGhpZGRlbi4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCUxldCBNU0dfUGVla0hhcmR3YXJlTXNnIGZpbGwgdGhlIG1lc3NhZ2UgcXVldWUgd2l0aCBldmVudHMgaWYKCWl0J3MgZW1wdHkuCgpXZWQgQXByIDE3IDE3OjU0OjA0IDE5OTYgIFRyaXN0YW4gVGFycmFudCA8dHN0QHN0aGluYy5kZW1vbi5jby51az4KCgkqIFtyZXNvdXJjZXMvc3lzcmVzX0l0LnJjXQoJVXBkYXRlZCB0byBzdXBwb3J0IHRoZSBuZXcgQ0hPT1NFX0NPTE9SX0RJQUxPRy4KClR1ZSBBcHIgMTYgMTE6NTA6MDAgMTk5NiAgQW5hbmQgS3VtcmlhIDxha3VtcmlhQG96ZW1haWwuY29tLmF1PgoKCSogW2lmMTYzMi9NYWtlZmlsZV0gW2lmMTYzMi9yZWxheS5jXSBbaWYxNjMxL3czMnN5cy5zcGVjXQoJICBbaW5jbHVkZS93MzJzeXMuaF0gW2luY2x1ZGUvZGxscy5oXQoJICBbbWlzYy9NYWtlZmlsZV0gW21pc2MvdzMyc3lzLmNdCglXMzJTWVMuRExMIHBhcnRpYWxseSBpbXBsZW1lbnRlZC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIEFwciAxNCAxMjo1MToyNyAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtjb250cm9scy9tZW51LmNdIFtpbmNsdWRlL2RpYWxvZy5oXSBbd2luZG93cy9kaWFsb2cuY10KCU1hZGUgdGhlIHJlc291cmNlIGxvYWRpbmcgY29kZSBhbHdheXMgdXNlIHRoZSBjb3JyZWN0IFdpbmRvd3MKCWxheW91dCBmb3IgV2luZWxpYiBvbiBvdGhlciBDUFVzLgoKCSogW2luY2x1ZGUvbW9kdWxlLmhdIFtsb2FkZXIvbW9kdWxlLmNdCglBZGRlZCBzZWxmIGhhbmRsZSBpbiBORV9NT0RVTEUgc3RydWN0dXJlLCBzbyB3ZSBjYW4gdXNlIGEgcG9pbnRlcgoJaW5zdGVhZCBvZiBhIGhhbmRsZS4KCUFkZGVkIGZ1bmN0aW9uIE1PRFVMRV9HZXRQdHIoKSB0byB2YWxpZGF0ZSBhIEhNT0RVTEUuCgoJKiBbbWVtb3J5L2hlYXAuY10KCUltcGxlbWVudGVkIFdpbjMyIGhlYXAgbWFuYWdlbWVudC4KCgkqIFttZW1vcnkvc2VsZWN0b3IuY10KCUZpeCBzZWxlY3RvciBsaW1pdCBmb3IgaHVnZSBibG9ja3MuCgpTYXQgQXByIDEzIDAwOjE5OjEyIDE5OTYgIEh1dyBELiBNLiBEYXZpZXMgPGguZGF2aWVzMUBwaHlzaWNzLm94Zm9yZC5hYy51az4KCgkqIFtvYmplY3RzL21ldGFmaWxlLmNdCglGaXhlZCBtZW1jcHkgYnVnIHRvIGFsbG93IG1lbW9yeSBiYXNlZCBtZXRhZmlsZXMgdG8gd29yay4KCkZyaSBBcHIgMTIgMTk6MjU6NDEgMTk5NiAgRnJhbnMgdmFuIERvcnNzZWxhZXIgIDxkb3Jzc2VsQHJ1bGhtMS5sZWlkZW51bml2Lm5sPgoKCSogW2NvbnRyb2xzL2VkaXQuY10gW2NvbnRyb2xzL0VESVQuVE9ET10KCUNvbXBsZXRlIHJld3JpdGUuICBFdmVyeXRoaW5nIGNoYW5nZWQ6IG5ldyBmZWF0dXJlcywgbmV3IGJ1Z3MuCglNYWluIGFkZGl0aW9uOiBXb3JkV3JhcC4KCkZyaSBBcHIgMTIgMjA6Mjk6NTUgMTk5NiAgVHJpc3RhbiBUYXJyYW50IDx0c3RAZGNzLmVkLmFjLnVrPgoKCSogW3Jlc291cmNlcy9zeXNyZXNfSXQucmNdCglGaXhlZCBhIGZldyBtaXN0YWtlcyBpbiB0aGUgZmlsZSBhbmQgcmVzaXplZCBzb21lIG9mIHRoZSBjb250cm9scy4KCkZyaSBBcHIgMTIgMDk6NTU6MTMgMTk5NiAgSm9obiBIYXJ2ZXkgPGpvaG5AZGl2aXNpb24uY28udWs+CgoJKiBbbWlzYy93aW5zb2NrZXQuY10KCUZpeGVkIGJyb2tlbiAjaWYgZGVmaW5lZCB0aGF0IHN0b3BwZWQgdW5peHdhcmUgY29tcGlsaW5nLgoKCSogW3dpbjMyL3Jlc291cmNlLmNdCiAgICAgICAgQWRkZWQgbWlzc2luZyByZXR1cm4gdG8gZW5kIG9mIEZpbmRSZXNvdXJjZTMyLgoKVGh1IEFwciAxMSAxODowMDowMCAxOTk2ICBBbGV4IEtvcm9ia2EgPGFsZXhAcGhtMzAucGhhcm0uc3VueXNiLmVkdT4KCgkqIFt3aW5kb3dzL2tleWJvYXJkLmNdIFt3aW5kb3dzL2V2ZW50LmNdCglGaXhlZCBHZXRLZXlTdGF0ZSBmb3IgbW91c2UgYnV0dG9ucy4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCVdNX01PVVNFQUNUSVZBVEUgd2Fzbid0IHNlbnQgaW4gc29tZSBjYXNlcy4KCldlZCBBcHIgMTAgMTg6NTk6NTMgMTk5NiAgTmllbHMgZGUgQ2FycGVudGllciAgPG5pZWxzQGNpbmR5LmV0LnR1ZGVsZnQubmw+CgoJKiBbb2JqZWN0cy9mb250LmNdCglNYXRjaCBzbGlnaHRseSBiaWdnZXIgZm9udCBpZiBoZWlnaHQgbmVnYXRpdmUuCgpNb24gQXByICA4IDEzOjQ2OjE1IDE5OTYgIERlYW5vIENhbHZlciA8ZGVhbm9AcmF0dGllLmRlbW9uLmNvLnVrPgoKCSogW211bHRpbWVkaWEvbW1zeXN0ZW0uY10KCUNoYW5nZWQgcmVhZCdzIHRvIEZJTEVfcmVhZCdzIGluIG1tc3lzdGVtIHRvIGZpeCBtbWlvIGJ1Zy4KClN1biBBcHIgIDcgMjE6NDA6MjkgMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFttaXNjL2NvbW1kbGcuY10gW3Jlc291cmNlcy9zeXNyZXNfRW4ucmNdIFtyZXNvdXJjZXMvc3lzcmVzX0RlLnJjXQoJSW50cm9kdWNlZCBDb2xvckRsZ1Byb2MoKSBmb3IgQ2hvb3NlQ29sb3IoKSBhbmQgcmVwbGFjZWQgZml0dGluZwoJRW4tLERlLSByZXNvdXJjZXMuIAoJQXMgd3JpdHRlbiBpbiBUT0RPOiBzb21lIG5hdGlvbmFsIGxhbmd1YWdlIHN1cHBvcnQgaXMgbmVlZGVkIGhlcmUuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkZyaSBBcHIgIDUgMTU6MjI6NTUgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbY29udHJvbHMvYnV0dG9uLmNdIFtjb250cm9scy9zdGF0aWMuY10KCUNoYW5nZXMgdG8gdXNlIFdORCAqIHdoZXJldmVyIHBvc3NpYmxlLgoKCSogW2RlYnVnZ2VyL2RiZy55XSBbZGVidWdnZXIvZGVidWcubF0KCUFkZGVkICdpbmZvIG1vZHVsZScgYW5kICd3YWxrIG1vZHVsZScgY29tbWFuZHMuCgoJKiBbaWYxNjMyL01ha2VmaWxlLmluXSBbaWYxNjMyL3JlbGF5LmNdIFt0b29scy9idWlsZC5jXQoJQWRkZWQgYXNzZW1ibHkgY29kZSBnZW5lcmF0aW9uIHRvIGNhbGwgZnJvbSBXaW5lIGludG8gMzItYml0IGNvZGUuCglDaGFuZ2VkIGFsbCAnY2FsbDMyJyByZWZlcmVuY2VzIGluICdjYWxsZnJvbTE2JyB0byBhdm9pZCBjb25mdXNpb24KCXdpdGggV2luMzIgcm91dGluZXMuCgoJKiBbaW5jbHVkZS9jYWxsYmFjay5oXQoJQWRkZWQgcHJvdG90eXBlcyBmb3IgMzItYml0IGNhbGxiYWNrcy4KCgkqIFtsb2FkZXIvbW9kdWxlLmNdIFtpZjE2MzIvcmVsYXkzMi5jXSBbdG9vbHMvYnVpbGQuY10KCVVuaWZpZWQgMTYtIGFuZCAzMi1iaXQgbW9kdWxlcy4gVGhlIGZha2UgbW9kdWxlIGZvciAzMi1iaXQgRExMcyBpcwoJbm93IGdlbmVyYXRlZCBieSB0aGUgYnVpbGQgcHJvZ3JhbS4KCgkqIFtpbmNsdWRlL21vZHVsZS5oXQoJQWRkZWQgZXh0cmEgaW5mbyB0byBORV9NT0RVTEUgZm9yIFdpbjMyIG1vZHVsZXMgdG8gcG9pbnQgdG8gdGhlIFBFCgltb2R1bGUgZGF0YS4KCgkqIFtpbmNsdWRlL3BlX2ltYWdlLmhdIFtsb2FkZXIvcGVfaW1hZ2UuY10gW3dpbjMyL3Jlc291cmNlLmNdCglSZW1vdmVkIHRoZSB3aW5lX2ZpbGVzIGxpc3QuIFRoZSBQRSBkYXRhIGZvciBhIG1vZHVsZSBjYW4gbm93IGJlCglhY2Nlc3NlZCB3aXRoIHRoZSBORV9XSU4zMl9NT0RVTEUgbWFjcm8uCgoJKiBbbG9hZGVyL3NpZ25hbC5jXSBbbWlzY2VtdS9pbnN0ci5jXQoJRG9uJ3Qgc3RhcnQgdGhlIEJJT1MgdGltZXIgYXQgc3RhcnR1cCwgYnV0IG9ubHkgYWZ0ZXIgYW4gYWNjZXNzIHRvCgl0aGUgMHg0MCBzZWdtZW50LgoKCSogW21lbW9yeS9sb2NhbC5jXQoJQ2hhbmdlZCBMT0NBTF9Mb2NrKCkgdG8gcmV0dXJuIGEgMzItYml0IHBvaW50ZXIuCgoJKiBbbWlzYy9tYWluLmNdIFtpbmNsdWRlL2RsbHMuaF0KCVNvbWUgYnVpbHQtaW4gRExMcyAobGlrZSBLRVJORUwpIGNhbiBubyBsb25nZXIgYmUgZGlzYWJsZWQgZnJvbQogCXRoZSBjb21tYW5kLWxpbmUuCgkKVGh1IEFwciAgNCAxOTo1NDozOSAxOTk2ICBLZWl0aCBSZXlub2xkcyA8a2VpdGhyQHNjby5DT00+CgoJKiBbKi8qXQoJQSBsb3Qgb2Ygc21hbGwgY2hhbmdlcyB0byBzdXBwb3J0IFNDTyBPcGVuU2VydmVyIDUuCgpUaHUgQXByICA0IDE1OjM4OjEzIDE5OTYgIEZyYW5zIHZhbiBEb3Jzc2VsYWVyIDxkb3Jzc2VsQHJ1bGhtMS5sZWlkZW51bml2Lm5sPgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUZpeGVkIEdldEtleVN0YXRlKCkgY2FsbCB0byB1c2UgMHg4MDAwIGNvbnZlbnRpb24uCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglBZGRlZCB1bmRvY3VtZW50ZWQgbWVzc2FnZXMgRU1fU0NST0xMIGFuZCBFTV9HRVRUSFVNQi4KClRodSBBcHIgIDQgMDk6NTI6NTIgMTk5NiAgSm9obiBIYXJ2ZXkgPGpvaG5AZGl2aXNpb24uY28udWs+CgoJKiBbaWYxNjMyL2V4Y2VwdC5TXQoJTW9kaWZpZWQgY29kZSB0byBhc3NlbWJsZSBvbiB1bml4d2FyZS4KCldlZCBBcHIgIDMgMDk6Mzg6MjYgMTk5NiAgSnVlcmdlbiBNYXJxdWFyZHQgPG1hcnF1QGx1bmFyLmFkdmFudGVzdC5kZT4KCgkqIFtvYmplY3RzL2ZvbnQuY10KCUltcGxlbWVudGF0aW9uIG9mIGEgc2Vjb25kIGZvbnQgY2FjaGUgd2hpY2ggd2lsbCBiZSB1cGRhdGVkCglkeW5hbWljYWxseS4KCk1vbiBBcHIgIDEgMTY6NDc6NDAgMTk5NiAgUm9iZXJ0IFBvdWxpb3QgPGtyeW5vc0BxYmMuY2xpYy5uZXQ+CgoJKiBbcmVzb3VyY2VzL3N5c3Jlc19Dei5yY10gW3Jlc291cmNlcy9zeXNyZXNfRGEucmNdCgkgIFtyZXNvdXJjZXMvc3lzcmVzX0RlLnJjXSBbcmVzb3VyY2VzL3N5c3Jlc19Fby5yY10KCSAgW3Jlc291cmNlcy9zeXNyZXNfRXMucmNdIFtyZXNvdXJjZXMvc3lzcmVzX0ZpLnJjXQoJICBbcmVzb3VyY2VzL3N5c3Jlc19Oby5yY10gW3Jlc291cmNlcy9UT0RPXQoJVXBkYXRlZCBGSU5EX1RFWFQgYW5kIFJFUExBQ0VfVEVYVCB0byB3b3JrIGxpa2UgdGhlIEVuZ2xpc2ggdmVyc2lvbi4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIE1hciAzMSAxMzo1NDo0NiAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFt0b29scy9idWlsZC5jXQoJQ2hhbmdlZCBCdWlsZFNwZWMzMkZpbGVzKCkgdG8gZ2VuZXJhdGUgYXNzZW1ibHkgaW5zdGVhZCBvZiBDIGNvZGUuCglVbmlmaWVkIC1zcGVjMTYgYW5kIC1zcGVjMzIgb3B0aW9uczsgRExMIHR5cGUgaXMgbm93IGRldGVybWluZWQgYnkKCXRoZSAndHlwZScgZGVjbGFyYXRpb24gaW4gdGhlIC5zcGVjIGZpbGUuCglOZXcgLXN0ZGNhbGwgb3B0aW9uIHRvIGJ1aWxkIGFsbCBzdGRjYWxsIGFzc2VtYmx5IHJlbGF5cy4KCgkqIFtpZjE2MzIvcmVsYXkuY10gW2lmMTYzMi9yZWxheTMyLmNdIFtpbmNsdWRlL2RsbHMuaF0KCVN0YXJ0ZWQgdG8gdW5pZnkgMTYtIGFuZCAzMi1iaXQgYnVpbHRpbiBETExzLgoKCSogW2xvYWRlci9tb2R1bGUuY10KCUFkZGVkIE1PRFVMRV9HZXRXbmRQcm9jRW50cnkzMigpIHRvIG1pcnJvciBNT0RVTEVfR2V0V25kUHJvY0VudHJ5MTYoKS4KCgkqIFtsb2FkZXIvcGVfaW1hZ2UuY10gW2xvYWRlci9yZXNvdXJjZS5jXQoJQWxsIG1vZHVsZXMgbm93IGhhdmUgYSBORSBzaWduYXR1cmUsIGFuZCBjYW4gYmUgZGlzdGluZ3Vpc2hlZCBieQoJdGhlIE5FX0ZGTEFHU19XSU4zMiBmbGFnLgoKCSogW3dpbmRvd3MvYWxpYXMuY10KCUFsaWFzZXMgZm9yIGJ1aWx0LWluIHdpbmRvdyBwcm9jZWR1cmVzIGFyZSBub3cgYWxsIGNyZWF0ZWQgYXQKCXN0YXJ0dXAgaW4gQUxJQVNfSW5pdCgpLgoKRnJpIE1hciAyOSAxNDo1NjozOSAxOTk2ICBHcmVnIEtyZWlkZXIgPGtyZWlkZXJAbmF0bGFiLnJlc2VhcmNoLnBoaWxpcHMuY29tPgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdCglMaW1pdCByZWN0YW5nbGUgdG8gY2xlYXIgdG8gc2l6ZSBvZiBpdGVtIHdoZW4gcGFpbnRpbmcgY29tYm8sIG5vdAogCWRlZmF1bHQuICBPbmx5IGRyYXcgaXRlbXMgaW4gbGlzdCB3aGVuIHRoZXJlIGlzIGVub3VnaCByb29tIGZvciB0aGVtLgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUdldCB0aGUgbWVhc3VyZSBvZiBldmVyeSBpdGVtIHRoYXQncyBhZGRlZCBhbmQgc3RvcmUgaW4gdGhlIGl0ZW0ncwogCWRhdGEgc3RydWN0dXJlLiAgU2Nyb2xsIGxpc3Rib3ggaWYgbW91c2UgbmVhciBlZGdlIG9mIGJveC4gIE9ubHkKIAlkcmF3IGl0ZW1zIGluIGxpc3Qgd2hlbiB0aGVyZSBpcyBlbm91Z2ggcm9vbS4KCkZyaSBNYXIgMjkgMTI6MDA6MDAgMTk5NiAgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbd2luZG93cy9kZWZ3bmQuY10gW3dpbmRvd3MvZGlhbG9nLmNdIFt3aW5kb3dzL21kaS5jXQoJICBbd2luZG93cy9ub25jbGllbnQuY10gW2NvbnRyb2xzL21lbnUuY10gCglWYXJpb3VzIGNoYW5nZXMgZm9yIGJldHRlciBrZXlib2FyZCBoYW5kbGluZy4gCgoJKiBbd2luZG93cy9ldmVudC5jXSBbd2luZG93cy9tZXNzYWdlLmNdIFttaXNjL2tleWJvYXJkLmNdCglQcm9wZXIga2V5Ym9hcmQgbWVzc2FnZSBvcmRlcmluZywgd29ya2luZyBHZXRLZXlTdGF0ZSgpIChmaW5hbGx5ISksIAoJaW1wcm92ZW1lbnRzIGluIFRvQXNjaWkoKS4KCgkqIFt3aW5kb3dzL3dpbi5jXSBbd2luZG93cy9tZXNzYWdlLmNdCglTbWFsbCBpbXByb3ZlbWVudHMgaW4gV0lOX0ZpbmRXaW5Ub1JlcGFpbnQuCgoJKiBbd2luZG93cy93aW4uY10gW3dpbmRvd3MvcGFpbnRpbmcuY10gW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglQdXQgdXBkYXRlIHJlZ2lvbiBpbiBXTV9OQ1BBSU5UIHdQYXJhbS4KCgkqIFtsb2FkZXIvdGFzay5jXQoJS2lsbCB0YXNrIHRpbWVycyB3aGVuIHRhc2sgaXMgZGVsZXRlZCwgc3dpdGNoIHRpbWVycyB0byB0aGUKCW5ldyBxdWV1ZSBpbiBTZXRUYXNrUXVldWUoKS4KCgkqIFtsb2FkZXIvc2lnbmFsLmNdIFttaXNjZW11L2Rvc21lbS5jXQoJQWRkZWQgU0lHQUxSTSBzaWduYWwgaGFuZGxlciB0byBpbmNyZW1lbnQgQklPUyBjbG9jay4gCgoJKiBbd2luZG93cy93aW4uY10gW3dpbmRvd3Mvd2lucG9zLmNdIFt3aW5kb3dzL21kaS5jXQoJRml4ZWQgQ2hpbGRXaW5kb3dGcm9tUG9pbnQoKSwgV01fUEFSRU5UTk9USUZZIGFuZCBpdHMgaGFuZGxpbmcgYnkKCU1ESSBjbGllbnQuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCUltcHJvdmVtZW50cyBpbiBoYW5kbGluZyBvZiBvd25lZCBwb3B1cHMuICJGbG9hdGluZyIgdG9vbGJveGVzIAoJd29yayBiZXR0ZXIgbm93LiAKClRodSBNYXIgMjggMTI6Mzg6MjkgMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbbWlzYy9yZWdpc3RyeS5jXQoJTmV3IGZpbGUsIHJlZ2lzdHJ5IHJld3JpdGUgaW5jbHVkaW5nIHdpbjMyIGV4dGVuc2lvbnMKCS0gVW5pY29kZQoJLSBtdWx0aXBsZSB2YWx1cyBwZXIga2V5CgktIGRpZmZlcmVudCBkYXRhdHlwZXMgZm9yIHZhbHVlcwoJLSBtdWx0aXBsZSByb290a2V5cwoJLSBzYXZpbmcgYW5kIGxvYWRpbmcgaW4gZGlmZmVyZW50IHJlZ2lzdHJpZXMuCgoJKiBbaW5jbHVkZS93aW5yZWcuaF0KCU5ldyBmaWxlLCBkZWZpbml0aW9ucyBhbmQgc3RydWN0cyBmb3IgcmVnaXN0cnkuCgoJKiBbaW5jbHVkZS93aW5lcnJvci5oXQoJU29tZSBuZXcgZXJyb3IgZGVmaW5lcyBhZGRlZC4uLiB0aGVyZSBhcmUgbW9yZSwgc29tZW9uZSBwbGVhc2UKIAljaGVjayBhIChyZWFsLSl3aW5kb3dzIHdpbmVycm9yLmguCgkKCSogW2lmMTYzMi9zaGVsbC5zcGVjXSBbaWYxNjMyL2FkdmFwaTMyLnNwZWNdIFtpZjE2MzIva2VybmVsLnNwZWNdCglSZWdpc3RyeSBzcGVjcyBhZGRlZC4KCgkqIFtpZjE2MzIvcmVsYXkuY10KCVN3aXRjaCBpbnRlcm5hbCBTSEVMTC5ETEwgdG8gZGVmYXVsdCAndXNlZCcuCgoJKiBbd2luMzIvc3RyaW5nMzIuY10gW2luY2x1ZGUvc3RyaW5nMzIuaF0KCVNvbWUgbmV3IGZ1bmN0aW9ucyBhZGRlZC4KCWNoYXIgc2hvdWxkIGJlIHVuc2lnbmVkIGNoYXIgd2hlbiBjb252ZXJ0aW5nIHRvIDE2Yml0IGludHMuCgoJKiBbbWlzYy9zaGVsbC5jXSBbaW5jbHVkZS9zaGVsbC5oXSBbd2luMzIvYWR2YXBpLmNdCglSZW1vdmVkIG9sZCByZWdpc3RyeSBmdW5jdGlvbnMuCgpUdWUgTWFyIDI2IDE1OjAxOjQ2IDE5OTYgIEZyYW5zIHZhbiBEb3Jzc2VsYWVyIDxkb3Jzc2VsQHJ1bGhtMS5sZWlkZW51bml2Lm5sPgoKCSogW2luY2x1ZGUvYml0bWFwcy9vY3JfaWJlYW1dCglGaXhlZCB0aGUgcG9zaXRpb24gb2YgdGhlIGhvdHNwb3QuCgoJKiBbb2JqZWN0cy90ZXh0LmNdCglGaXhlZCBhIGZldyBidWdzIGluIFRFWFRfVGFiYmVkVGV4dE91dCgpLgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCUZpeGVkIHRoZSBvcmRlciBvZiB0aGUgYml0cyBpbiB0aGUgS2V5U3RhdGVUYWJsZS4KCTB4ODAgaXMgdGhlIHVwL2Rvd24tYml0LiAgMHgwMSBpcyB0aGUgdG9nZ2xlIGJpdC4KCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10gW3dpbmRvd3MvbWRpLmNdIFtjb250cm9scy9lZGl0LmNdCglGaXhlZCB0aGUgY2FsbHMgdG8gR2V0S2V5U3RhdGUoKS4KClR1ZSBNYXIgMjYgMDg6NDM6MTUgMTk5NiAgUm9iZXJ0IFBvdWxpb3QgPGtyeW5vc0BxYmMuY2xpYy5uZXQ+CgoJKiBbcmVzb3VyY2VzL3N5c3Jlc19Gci5yY10gW3Jlc291cmNlcy9UT0RPXQoJVXBkYXRlZCBGSU5EX1RFWFQgYW5kIFJFUExBQ0VfVEVYVCB0byB3b3JrIGxpa2UgdGhlIEVuZ2xpc2ggdmVyc2lvbi4KCk1vbiBNYXIgMjUgMTc6Mzg6NTkgMTk5NiAgVHJpc3RhbiBUYXJyYW50IDx0c3RAZGNzLmVkLmFjLnVrPgoKCSogW3Jlc291cmNlcy9zeXNyZXNfaXQucmNdCglBZGRlZCBzdXBwb3J0IGZvciBJdGFsaWFuIFtJdF0gbGFuZ3VhZ2UuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBNYXIgMjQgMTM6MTM6MTEgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbaW5jbHVkZS93aW4uaF0gW3dpbmRvd3MvKi5jXQoJUmVwbGFjZWQgbmV4dCwgcGFyZW50LCBjaGlsZCBhbmQgb3duZXIgaGFuZGxlcyBieSBwb2ludGVycyBpbiBXTkQKCXN0cnVjdHVyZS4gVGhpcyBzaG91bGQgaW1wcm92ZSBwZXJmb3JtYW5jZSwgYW5kIHNob3VsZCBiZQoJcmVhc29uYWJseSBzYWZlIHNpbmNlIE1pY3Jvc29mdCBkaWQgdGhlIHNhbWUgaW4gV2luOTUuCgoJKiBbaW5jbHVkZS93aW50eXBlcy5oXSBbKi8qXQoJUmVkZWZpbmVkIEhBTkRMRSB0byBiZSBVSU5UIGluc3RlYWQgb2YgYSBwb2ludGVyIGZvciBXaW5lbGliLiBUaGlzCglhbGxvd3MgcmVtb3ZpbmcgYSBsb3Qgb2YgdW5uZWNlc3NhcnkgY2FzdHMgYW5kIE5QRk1Ucy4KCgkqIFt3aW5kb3dzL2NhcmV0LmNdCglDcmVhdGUgdGhlIGNhcmV0IGJydXNoIHVwb24gQ3JlYXRlQ2FyZXQoKTsgdXNlIHRoZSBiaXRtYXAKCWRpbWVuc2lvbnMgZm9yIHRoZSBjYXJldC4KCUZpeGVkIENBUkVUX0Rpc3BsYXlDYXJldCgpIHRvIHVzZSBQYXRCbHQoKS4KCkZyaSBNYXIgMjIgMTY6MDA6MDAgMTk5NiAgQW5hbmQgS3VtcmlhIDxha3VtcmlhQG96ZW1haWwuY29tLmF1PgoKCSogW21pc2Mvd2luc29ja2V0LmNdCglNb3JlIHNhbml0eSBjaGVja3MsIGZpeHVwIHNvbWUgZXJyb25lb3VzIHJldHVybiBjb2Rlcy4KCgkqIFtkb2N1bWVudGF0aW9uL3dpbnNvY2tdCglEZXNjcmlwdGlvbiBvZiBob3cgY29tcGF0aWJsZSB0aGUgd2luc29jayBpcyBjdXJyZW50bHkuCgpGcmkgTWFyIDIyIDEzOjA1OjM0IDE5OTYgIFVscmljaCBTY2htaWQgIDx1c2NobWlkQG1haWwuaGgucHJvdmkuZGU+CgoJKiBbbGlicmFyeS93aW5tYWluLmNdCglTZXQgYGxwc3pDbWRQYXJhbScgYnkgY29uY2F0ZW5hdGluZyBhcmd1bWVudHMuCgoJKiBbbG9hZGVyL21vZHVsZS5jXQoJV2luRXhlYzogYWNjZXB0IFVuaXggY29tbWFuZHMsIHVzZSBXaW5lIGVtdWxhdG9yLgoKTW9uIE1hciAxOCAxMjoxNjoyNyAxOTk2ICBNYXJ0aW4gdm9uIExvZXdpcyA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXVt3aW4zMi90aHJlYWQuY11baW5jbHVkZS9rZXJuZWwzMi5oXQoJRGVsZXRlQ3JpdGljYWxTZWN0aW9uLCBFbnRlckNyaXRpY2FsU2VjdGlvbiwKIAlJbml0aWFsaXplQ3JpdGljYWxTZWN0aW9uLCBMZWF2ZUNyaXRpY2FsU2VjdGlvbiwgVGxzQWxsb2MsCiAJVGxzRnJlZSwgVGxzR2V0VmFsdWUsIFRsc1NldFZhbHVlOiBuZXcgZnVuY3Rpb25zLgoJQ1JJVElDQUxfU0VDVElPTjogbmV3IHN0cnVjdHVyZS4KCgkqIFtpZjE2MzIva2VybmVsMzIuc3BlY11bd2luMzIvY29kZV9wYWdlLmNdCglXaWRlQ2hhclRvTXVsdGlCeXRlOiBuZXcgZnVuY3Rpb24uCgoJKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdW3dpbjMyL2ZpbGUuY10KCUdldEZpbGVBdHRyaWJ1dGVzQTogbmV3IGZ1bmN0aW9uLgoKCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXVttaXNjL21haW4uY10KCUdldEVudmlyb25tZW50U3RyaW5nc1csIEZyZWVFbnZpcm9ubWVudFN0cmluZ3NBLAogCUZyZWVFbnZpcm9ubWVudFN0cmluZ3NXOiBuZXcgZnVuY3Rpb25zLgoJCgkqIFtpZjE2MzIvdXNlci5zcGVjXVt3aW4zMi9jdXJzb3JpY29uMzIuY11bd2luMzIvTWFrZWZpbGUuaW5dCgljdXJzb3JpY29uMzIuYzogbmV3IGZpbGUuCglMb2FkQ3Vyc29yQSwgTG9hZEN1cnNvclc6IG1vZGlmaWVkIGltcGxlbWVudGF0aW9uIGZyb20gTG9hZEN1cnNvcgogCXRvIFdJTjMyXyouCglMb2FkSWNvbkEsIExvYWRJY29uVzogbW9kaWZpZWQgaW1wbGVtZW50YXRpb24gZnJvbSBMb2FkSWNvbkEzMgoJdG8gV0lOMzJfKi4KCgkqIFtpbmNsdWRlL3N0cnVjdDMyLmhdCglwcmFnbWEgcGFjayBpbnNlcnRlZC4KCUNVUlNPUklDT04zMiBzdHJ1Y3R1cmVzIGFkZGVkLgoKCSogW2luY2x1ZGUvd2lubmxzLmhdCglDb25zdGFudHMgQ1BfKiBhbmQgV0NfKiBhZGRlZC4KCgkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KCVBFX0xvYWRNb2R1bGU6IGNhbGwgUEVfSW5pdERMTCB3aXRoIGhNb2R1bGUgcmF0aGVyIHRoYW4gd3BudC4KClN1biBNYXIgMTcgMTY6NTk6MTIgMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFttaXNjL2NvbW1kbGcuY10KCUludHJvZHVjZWQgaG9vayBmdW5jdGlvbiBoYW5kbGluZyBpbiBmaWxlIGRpYWxvZy4KCVJlbW92ZWQgYW4gdW5uZWNlc3NhcnkgU2hvd1dpbmRvdyBjYWxsIGluIEZJTEVETEdfV01Db21tYW5kKCkuCgpUaHUgTWFyIDE0IDEwOjUwOjAwIDE5OTYgIFRob21hcyBTYW5kZm9yZCA8dC5kLmcuc2FuZGZvcmRAcHJkcy1ncm4uZGVtb24uY28udWs+CgoJKiBbaWYxNjMyL2dkaTMyLnNwZWNdCglBZGRlZCBHZXROZWFyZXN0Q29sb3IuCgoJKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdCglBZGRlZCBHbG9iYWxBZGRBdG9tQS4KCgkqIFt3aW4zMi9wYXJhbTMyLmNdCglBZGRlZCBzdGFja2ZyYW1lLmggdG8gaW5jbHVkZXMuCglXSU4zMl9HbG9iYWxBZGRBdG9tQSgpIC0gbmV3IGZ1bmN0aW9uLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpXZWQgTWFyIDEzIDE5OjQ2OjUwIDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCVJlbW92ZWQgY2FsbHMgdG8gbWVtbW92ZSAobm90IHBvcnRhYmxlKS4KCgkqIFtkZWJ1Z2dlci9kYmcueV0gW2RlYnVnZ2VyL2RlYnVnLmxdCglQcmVmaXhlZCBhbGwgdG9rZW4gd2l0aCAndCcgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggdHlwZQoJZGVmaW5pdGlvbnMuCglBZGRlZCAnd2FsayBxdWV1ZScsICd3YWxrIGNsYXNzJyBhbmQgJ2luZm8gY2xhc3MnIGNvbW1hbmRzLgoKCSogW2RlYnVnZ2VyL2luZm8uY10KCU1vdmVkIHF1ZXVlIGFuZCB3aW5kb3cgaW5mb3JtYXRpb24gZnVuY3Rpb25zIHRvIHdpbmRvd3MvcXVldWUuYwoJYW5kIHdpbmRvd3Mvd2luLmMgcmVzcGVjdGl2ZWx5LgoKCSogW2xvYWRlci9zaWduYWwuY10KCUFkZGVkIFNJR0hVUCBoYW5kbGluZyB0byBmb3JjZSBlbnRyeSBpbnRvIGJ1aWx0LWluIGRlYnVnZ2VyLgoJQ2xlYW5lZCB1cCBhIGJpdC4KCgkqIFttaXNjL3NweS5jXQoJR2VuZXJhbCBjbGVhbnVwIGFuZCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMuCgoJKiBbd2luZG93cy9jbGFzcy5jXQoJQWRkZWQgQ0xBU1NfRHVtcENsYXNzKCkgYW5kIENMQVNTX1dhbGtDbGFzc2VzKCkgZnVuY3Rpb25zIGZvcgoJZGVidWdnZXIuCgoJKiBbd2luZG93cy9ldmVudC5jXQoJUHJlc3NpbmcgQ3RybC1BbHQtUmV0dXJuIGZvcmNlcyBhbiBlbnRyeSBpbnRvIHRoZSBkZWJ1Z2dlci4gTm90CglzdXJlIGlmIHRoaXMga2V5IGNvbWJpbmF0aW9uIGlzIGEgZ29vZCBjaG9pY2UuLi4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10gW3dpbmRvd3MvcXVldWUuY10gKE5ldyBmaWxlKQoJTW92ZWQgbWVzc2FnZSBxdWV1ZSBoYW5kbGluZyBmdW5jdGlvbnMgdG8gd2luZG93cy9xdWV1ZS5jLgoKVHVlIE1hciAxMiAxNDo1NToxNiAxOTk2ICBPbm5vIEhvdmVycyAgPG9ubm9Ac3RhY2sudXJjLnR1ZS5ubD4KCgkqIFtpZjE2MzIvZXhjZXB0LlNdIFtpbmNsdWRlL2V4Y2VwdC5oXSBbd2luMzIvZXhjZXB0LmNdIChOZXcgZmlsZXMpCglJbXBsZW1lbnRlZCBXaW4zMiBleGNlcHRpb24gZnVuY3Rpb25zOiBSYWlzZUV4Y2VwdGlvbigpLAogCVJ0bFVud2luZCgpLCBTZXRVbmhhbmRsZWRFeGNlcHRpb25GaWx0ZXIoKSBhbmQKCVVuaGFuZGxlZEV4Y2VwdGlvbkZpbHRlcigpLgoKTW9uIE1hciAxMSAxOToyMzoyOSAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10gW2luY2x1ZGUvbGlzdGJveC5oXQoJU3BlY2lhbCBoYW5kbGluZyBmb3IgQ09NQk9MQk9YIHN0eWxlcyBpbnRyb2R1Y2VkIHZpYSBleHRlbnNpb24gb2YKIAlIRUFETElTVCBzdHJ1Y3R1cmU6IGxwaGwtPmR3U3R5bGUuCgpNb24gTWFyIDExIDEzOjMxOjA2IDE5OTYgIEdyZWcgS3JlaWRlciA8a3JlaWRlckBuYXRsYWIucmVzZWFyY2gucGhpbGlwcy5jb20+CgoJKiBbY29udHJvbHMvY29tYm8uY10KCUFueSBtb3VzZSBtb3ZlbWVudCB3aXRoaW4gYSBzbWFsbCBkaXN0YW5jZSAoZGVmaW5lZCBieSBDQkxNTV9FREdFKQoJb2YgdGhlIHRvcCBvciBib3R0b20gZWRnZSBjYXVzZXMgdGhlIHdpbmRvdyB0byBzY3JvbGwuICBBbHNvIG1vdmVkIAoJc29tZSBhc3NpZ25tZW50cyBzbyB0aGUgcm91dGluZSB3b3JrcyBjb3JyZWN0bHkuCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJQ2hhbmdpbmcgc2VsZWN0aW9uIGluIExpc3RCb3hTZXRDdXJTZWwgbm93IHVwZGF0ZXMgUHJldkZvY3VzZWQuCglBZGRlZCB0byBMQlNldEZvbnQgYW5kIENyZWF0ZUxpc3RCb3hTdHJ1Y3QgYSBmYWtlIGhkYyB0aGF0IHRlc3RzIAoJYW5kIHNldHMgdGhlIHN0YW5kYXJkIHRleHQgaGVpZ2h0LgoKU3VuIE1hciAxMCAwODozOToyMyAxOTk2ICBBbGV4IEtvcm9ia2EgPGFsZXhAcGhtMzAucGhhcm0uc3VueXNiLmVkdT4KCgkqIFt3aW5kb3dzL2RjZS5jXQoJRml4ZWQgbWVtb3J5IGxlYWsgaW4gRENFX0NsaXBXaW5kb3dzKCkuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkZyaSBNYXIgIDggMTk6MDc6MTggMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbY29uZmlndXJlLmluXQoJUXVvdGUgJ1snIGFuZCAnXScgaW4gdGhlIHRlc3QgcHJvZ3JhbSBmb3IgdGhlIHN0cmVuZ3RoLXJlZHVjZQoJYnVnLiBUaGlzIHNob3VsZCB3b3JrIG11Y2ggYmV0dGVyLi4uCgoJKiBbZmlsZXMvZmlsZS5jXQoJQXVnbWVudGVkIERPU19GSUxFIHN0cnVjdHVyZS4gTW9zdCBpbnRlcm5hbCBmdW5jdGlvbnMgbm93IHJldHVybiBhCglET1NfRklMRSogaW5zdGVhZCBvZiBhIFVuaXggaGFuZGxlLgoJQWRkZWQgYSBsb2NhbCBmaWxlIGFycmF5IHRvIHJlcGxhY2UgdGhlIFBEQiBsaXN0IHVwb24gc3RhcnR1cCwgdG8KCWFsbG93IHVzaW5nIGZpbGUgSS9PIGZ1bmN0aW9ucyBiZWZvcmUgdGhlIGZpcnN0IHRhc2sgaXMgY3JlYXRlZC4KCUFkZGVkIEZJTEVfU2V0RGF0ZVRpbWUoKSBhbmQgRklMRV9TeW5jKCkgZnVuY3Rpb25zLgoJCgkqIFtsb2FkZXIvbW9kdWxlLmNdCglVc2UgdGhlIERPUyBmaWxlIEkvTyBmdW5jdGlvbnMgaW4gTU9EVUxFX0xvYWRFeGVIZWFkZXIoKS4KCgkqIFtvYmplY3RzL2JpdGJsdC5jXQoJVXNlIHZpc2libGUgcmVnaW9uIGluc3RlYWQgb2YgR0MgY2xpcCByZWdpb24gdG8gY2xpcCBzb3VyY2UKCWFyZWEuIFRoaXMgZml4ZXMgdGhlIGNhcmQgZHJhd2luZyBidWcgaW4gZnJlZWNlbGwuCgoJKiBbb2JqZWN0cy9yZWdpb24uY10KCUZpeGVkIENvbWJpbmVSZ24oKSB0byBhbGxvdyBzcmMgYW5kIGRlc3QgcmVnaW9ucyB0byBiZSB0aGUgc2FtZS4KCkZyaSBNYXIgIDggMTY6MzI6MjMgMTk5NiAgRnJhbnMgdmFuIERvcnNzZWxhZXIgPGRvcnNzZWxAcnVsaG0xLmxlaWRlbnVuaXYubmw+CgoJKiBbY29udHJvbHMvRURJVC5UT0RPXQoJVXBkYXRlZCBzbyBpdCByZWZsZWN0cyB0aGUgY3VycmVudCBzdGF0dXMuCgoJKiBbY29udHJvbHMvZWRpdC5jXQoJSW1wbGVtZW50ZWQgaW50ZXJuYWwgRURJVF9Xb3JkQnJlYWtQcm9jKCkuCglJbXBsZW1lbnRlZCBFU19SRUFET05MWS4KCUltcGxlbWVudGVkIFdNX0xCVVRUT05EQkxDTEsgdG8gc2VsZWN0IHdob2xlIHdvcmRzLgoJRml4ZWQgYSBsb3Qgb2YgdHlwZXMgaW4gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb25zLgoKV2VkIE1hciAgNiAxOTo1NTowMCAxOTk2ICBBbGV4IEtvcm9ia2EgPGFsZXhAcGhtMzAucGhhcm0uc3VueXNiLmVkdT4KCgkqIFtkZWJ1Z2dlci9pbmZvLmNdCglBZGRlZCAid2FsayB3aW5kb3ciIGNvbW1hbmQgdG8gd2FsayB3aW5kb3cgbGlzdC4gCgoJKiBbd2luZG93cy9tZGkuY10KCUFkZGVkIHByb3Blcig/KSBXTV9NRElTRVRNRU5VIG1lc3NhZ2UgaGFuZGxpbmcuCgpXZWQgTWFyICA2IDA5OjI3OjEyIDE5OTYgIE1hcnRpbiB2b24gTG9ld2lzIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBbaWYxNjMyL2NhbGxiYWNrLmNdW2lmMTYzMi9yZWxheTMyLmNdCglSRUxBWTMyX0NhbGxXaW5kb3dQcm9jQ29udlN0cnVjdDogbmV3IGZ1bmN0aW9uLgoKCSogW3dpbjMyL3N0cnVjdDMyLmNdW3dpbjMyL01ha2VmaWxlLmluXVt3aW4zMi9wYXJhbS5jXVt3aW4zMi91c2VyMzIuY10KCXN0cnVjdDMyLmM6IG5ldyBmaWxlLiBNb3ZlZCBhbGwgc3RydWN0dXJlIGNvbnZlcnNpb25zIGludG8gdGhhdCBmaWxlCglQQVJBTTMyX1BPSU5UMzJ0bzE2LE1TRzE2dG8zMixVU0VSMzJfUkVDVDMydG8xNjogCglyZW5hbWVkIHRvIFNUUlVDVDMyX1BPSU5UMzJ0bzE2LCAuLi4KCVdJTjMyX1BPSU5ULFdJTjMyX01TRyxXSU4zMl9SRUNULFdJTjMyX1BBSU5UU1RSVUNUOiByZW5hbWVkIHRvCglQT0lOVDMyLCAuLi4KCU5ldyBjb252ZXJzaW9uIGZ1bmN0aW9ucyBmb3IgTkNDQUxDU0laRV9QQVJBTVMsIFdJTkRPV1BPUywKIAlDUkVBVEVTVFJVQ1QuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdW21pc2MvZXhlYy5jXQoJV0lOSEVMUCwgTVVMVElLRVlIRUxQLCBIRUxQV0lOSU5GTzogbmV3IHN0cnVjdHVyZXMKCVdpbkhlbHA6IFJlaW1wbGVtZW50ZWQuIFRoYW5rcyB0byBQZXRlciBCYWxjaAogCSgxMDA3MTAuMjU2NkBjb21wdXNlcnZlLmNvbSkgZm9yIGhpcyB2YWx1YWJsZSByZXNlYXJjaC4KCgkqIFt3aW4zMi93aW5wcm9jcy5jXQoJV0lOMzJfQ2FsbFdpbmRvd1Byb2NUbzE2OiBuZXcgZnVuY3Rpb24sIGNhbGwgaW4KIAlVU0VSMzJfRGVmV2luZG93UHJvY0EsLi4uCgpNb24gTWFyICA0IDIzOjIyOjQwIDE5OTYgIEppbSBQZXRlcnNvbiA8anNwZXRlckBiaXJjaC5lZS52dC5lZHU+CgoJKiBbaW5jbHVkZS93aW50eXBlcy5oXQoJQWRkZWQgIiNkZWZpbmUgX19leHBvcnQiLgoKCSogW29iamVjdHMvYml0Ymx0LmNdCglQdXQgaW4gYSBmZXcgaGFja3MgdG8gbWFrZSBiaXRibHQtaW5nIHdvcmsgd2hlbiB1cHNpZGUtZG93biBhbmQvb3IKCW1pcnJvcmVkLiAgQklUQkxUX1N0cmV0Y2hJbWFnZSBzaG91bGQgcmVhbGx5IGJlIGNoZWNrZWQgb3ZlcgoJdGhvcm91Z2hseS4KCgkqIFtwcm9ncmFtcy9wcm9nbWFuL21haW4uY10KCUFkZGVkICIjaW5jbHVkZSA8cmVzb3VyY2UuaD4iIGZvciBkZWZpbml0aW9uIG9mIEhBVkVfV0lORV9DT05TVFJVQ1RPUi4KCgkqIFtyYy9wYXJzZXIuaF0gW3JjL3BhcnNlci5sXSBbcmMvcGFyc2VyLnldIFtyYy93aW5lcmMuY10KCUVsaW1pbmF0ZWQgc2hpZnQvcmVkdWNlIGNvbmZsaWN0IGluIHN0eWxlIGRlZmluaXRpb24uCglBZGRlZCBjcnVkZSBlcnJvciBtZXNzYWdlIHN1cHBvcnQ6ICJzdGRpbjolZDogcGFyc2UgZXJyb3IgYmVmb3JlICclcyciLgoJSW1wbGVtZW50ZWQgc3RyaW5nIHRhYmxlIHN1cHBvcnQgdG8gdGhlIGJlc3Qgb2YgbXkgYWJpbGl0eSAoaXQgd29ya3MKCXdpdGggTG9hZFN0cmluZygpIGNhbGxzKS4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJRml4ZWQgYnVnIGluIE5DX0RvU2l6ZU1vdmUoKSB0aGF0IG1hZGUgc3lzdGVtIG1lbnUgcG9wIHVwIHdoZW4gdGl0bGUKCWJhciBvZiBub24taWNvbml6ZWQgd2luZG93IHdhcyBjbGlja2VkIChjaGVja2VkIGZvciBpY29uaXphdGlvbikuCgpNb24gTWFyIDA0IDIwOjU1OjE5IDE5OTYgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW2lmMTYzMi9semV4cGFuZC5zcGVjXSBbaWYxNjMyL3JlbGF5LmNdCgkgIFtpbmNsdWRlL2x6ZXhwYW5kLmhdW21pc2MvbHpleHBhbmQuY10KCUxaRVhQQU5ELkRMTCBhZGRlZC4KClN1biBNYXIgMDMgMTg6MTA6MjIgMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJUHJldmVudCB1c2FnZSBvZiBpbnZhbGlkIEhXTkRzIGluIFdJTl9FbnVtQ2hpbGRXaW4oKSwKCXRoaXMgcHJldmVudHMgdG9vIGVhcmx5IHRlcm1pbmF0aW9uIG9mIEVudW1DaGlsZFdpbmRvd3MoKS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU2F0IE1hciAgMiAxODoxOTowNiAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtjb250cm9scy9zY3JvbGwuY10KCUZpeGVkIFNDUk9MTF9USFVNQiBwYWludGluZyBmaXhlcyBmcm9tIEFsZXggS29yb2JrYSB0byBzdG9yZSB0aGUKIAljdXJyZW50IHRyYWNraW5nIHdpbmRvdy4KCgkqIFtmaWxlcy9maWxlLmNdCglGaXhlZCB0d28gZmlsZSBkZXNjcmlwdG9yIGxlYWtzIGluIEZJTEVfT3BlbkZpbGUoKS4KCgkqIFtpZjE2MzIvcmVsYXkzMi5jXSBbbG9hZGVyL21vZHVsZS5jXSBbbG9hZGVyL3BlX2ltYWdlLmNdCgkgIFt0b29scy9idWlsZC5jXQoJUmVwbGFjZWQgTE9BREVERklMRUlORk8gc3RydWN0dXJlIGJ5IE9GU1RSVUNULgoKCSogW21lbW9yeS9hdG9tLmNdCglSZWxvYWQgdGhlIHBvaW50ZXIgdG8gdGhlIGF0b20gdGFibGUgaW4gQVRPTV9HZXRUYWJsZSgpIGFuZAogCUFUT01fQWRkQXRvbSgpIGluIGNhc2UgdGhlIExPQ0FMX0FsbG9jKCkgY2FsbHMgY2F1c2VkIHRoZSB0YWJsZSB0bwogCW1vdmUgaW4gbGluZWFyIG1lbW9yeS4KCkZyaSBNYXIgIDEgMTE6NTc6MTMgMTk5NiAgRnJhbnMgdmFuIERvcnNzZWxhZXIgPGRvcnNzZWxAcnVsaG0xLmxlaWRlbnVuaXYubmw+CgoJKiBbaW5jbHVkZS9jYWxsYmFjay5oXQoJQWRkZWQgc3VwcG9ydCBmb3IgQ2FsbFdvcmRCcmVha1Byb2MoKS4KCgkqIFtjb250cm9scy9lZGl0LmNdCglOZXcgY2FyZXQgaGFuZGxpbmcgKHJlYWxseSBlZmZpY2llbnQgLyBmYXN0KS4KCUltcGxlbWVudGVkIEVNX1NFVFdPUkRCUkVBS1BST0MgYW5kIEVNX0dFVFdPUkRCUkVBS1BST0MuCglGaXhlZCBFTV9TRVRGT05UIHNvIGl0IG5vdyBhbHNvIGNyZWF0ZXMgYSBwcm9wZXIgbmV3IGNhcmV0LgoKV2VkIEZlYiAyOCAyMjowMzozNCAxOTk2ICBEYW5pZWwgU2NoZXBsZXIgIDxkYW5pZWxAZnJvYm5pdHoud3VzdGwuZWR1PgoKCSogW2NvbnRyb2xzL2Rlc2t0b3AuY10gW21pc2MvbWFpbi5jXSBbd2luZG93cy9ldmVudC5jXSBbd2luZG93cy93aW4uY10KCUFkZGVkIFdNX0RFTEVURSBwcm90b2NvbCB0byB0b3AtbGV2ZWwgd2luZG93cy4KCgkqIFtjb250cm9scy9zY3JvbGwuY10KCUZpeGVkIGEgcHJvYmxlbSB3aGljaCBjYXVzZWQgc2xvdyBzY3JvbGxpbmcgdG8gY29udGludWUJdW5jb250cm9sbGFibHkuCgoJKiBbbWlzYy9leGVjLmNdCglJbXBsZW1lbnRlZCBFeGl0V2luZG93cygpLgoKCSogW3dpbmRvd3Mvd2luLmNdCglTZXQgdG9wLWxldmVsIG93bmVkIHdpbmRvd3MgdG8gYmUgdHJhbnNpZW50LgoKV2VkIEZlYiAyOCAxOToxMzoyMiAxOTk2ICBVbHJpY2ggU2NobWlkICA8dXNjaG1pZEBtYWlsLmhoLnByb3ZpLmRlPgoKCSogW3Byb2dyYW1zL3Byb2dtYW4vKl0KCUFkZGVkIGEgcHJvZ3JhbSBtYW5hZ2VyLgoKV2VkIEZlYiAyOCAxODozODowMSAxOTk2ICBEdW5jYW4gQyBUaG9tc29uIDxkdW5jYW5Ac3BkLmVlZS5zdHJhdGguYWMudWs+CgoJKiBbcmVzb3VyY2VzL3N5c3Jlc19Fby5jXQoJQWRkZWQgc3VwcG9ydCBmb3IgRXNwZXJhbnRvIFtFb10gbGFuZ3VhZ2UuCgpXZWQgRmViIDI4IDAwOjIzOjAwIDE5OTYgIFRob21hcyBTYW5kZm9yZCA8dC5kLmcuc2FuZGZvcmRAcHJkcy1ncm4uZGVtb24uY28udWs+CgoJKiBbaWYxNjMyL3VzZXIzMi5zcGVjXQoJQWRkZWQgRW5kRGlhbG9nLCBHZXREbGdJdGVtLCBHZXREbGdJdGVtSW50LCBTZXREbGdJdGVtSW50LAoKCSogW3dpbjMyL2luaXQuY10KCUFkZGVkIHRhc2suaCB0byBpbmNsdWRlcy4gR2V0TW9kdWxlSGFuZGxlQSgpIC0gcmV0dXJuIGhJbnN0YW5jZQoJaWYgY2FsbGVkIHdpdGggTlVMTCBwYXJhbWV0ZXIuIEZyZWVjZWxsIG5lZWRzIHRoaXMuIE5PVEUgdGhpcwoJbWF5IGluZGljYXRlIGEgcHJvYmxlbSB3aXRoIGRpZmZlcmVudGlhdGlvbiBiZXR3ZWVuIGhNb2R1bGUgYW5kCgloSW5zdGFuY2Ugd2l0aGluIFdpbmUuCgoJKiBbd2luMzIvcmVzb3VyY2UuY10KCUZpbmRSZXNvdXJjZTMyKCkgYW5kIExvYWRSZXNvdXJjZTMyKCkgLSBSZW1vdmVkICNpZiAwJ3MgYXJvdW5kCgljb252ZXJzaW9uIGZyb20gaEluc3RhbmNlIHRvIGhNb2R1bGUuIFNlZSByZW1hcmtzIGFib3ZlLgoKCSogW3dpbjMyL3N0cmluZzMyLmNdCglXSU4zMl9VbmlMZW4oKSAtIHJlbW92ZWQgc3RyYXkgc2VtaWNvbG9uLgoKVHVlIEZlYiAyNyAyMTowNToxOCAxOTk2ICBKaW0gUGV0ZXJzb24gPGpzcGV0ZXJAYmlyY2guZWUudnQuZWR1PgoJCgkqIFt3aW5kb3dzL2NhcmV0LmNdCglTZXQgYmxpbmsgcmF0ZSB3aXRoIGNhbGwgdG8gR2V0UHJvZmlsZUludCgpLgoKCSogW3JjL3dpbmVyYy5jXQoJSW4gbmV3X3N0eWxlKCksIG1hZGUgaW5pdGlhbCBmbGFnIHNldHRpbmdzIFdTX0NISUxEIHwgV1NfVklTSUJMRQogCWluc3RlYWQgb2YgMC4gIFRoaXMgc2VlbXMgdG8gY29ycmVzcG9uZCB0byBCb3JsYW5kJ3MgZGVmYXVsdHMsIGFuZAogCXRoZSBmbGFncyBjYW4gYmUgdW5zZXQgYnkgdXNpbmcgdGhlIChyYXRoZXIgb2J0dXNlKSAifCBOT1QgV1NfQ0hJTEQiCglvciAifCBOT1QgV1NfVklTSUJMRSIgdGVjaG5pcXVlIGluIHRoZSAqLnJjIGZpbGUuCgoJKiBbd2luMzIvdGltZS5jXQoJSW4gR2V0TG9jYWxUaW1lKCkgYW5kIEdldFN5c3RlbVRpbWUoKSwgdXNlZCB0dl9zZWMgZmllbGQgb2YgcmVzdWx0CiAJcmV0dXJuZWQgYnkgZ2V0dGltZW9mZGF5KCkgaW5zdGVhZCBvZiBtYWtpbmcgc2Vjb25kIGNhbGwgdG8KIAl0aW1lKCkuICBUaGlzIGVsaW1pbmF0ZXMgY2xvY2sgaml0dGVyIGlmIHRoZSBzZWNvbmRzIGNoYW5nZQogCWJldHdlZW4gdGhlIHR3byBjYWxscyAocmFyZSwgYnV0IHBvc3NpYmxlKS4KCgkqIFtpbmNsdWRlL3dpbnR5cGVzLmhdCglBZGRlZCAiI2RlZmluZSBfZmFyIiBhbmQgIiNkZWZpbmUgX3Bhc2NhbCIuCgoJKiBbd2luZG93cy93aW4uY10KCUFkZGVkIGZ1bmN0aW9uIEdldERlc2t0b3BId25kKCkuCgoJKiBbaW5jbHVkZS94bWFsbG9jLmhdCglSZW1vdmVkIHRoZSAnI2lmZGVmIEhBVkVfU1RETElCX0gnIHN0cnVjdHVyZSwgc2luY2UgaXQgc2VlbWVkIHRvCiAJaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSAnY29uZmlndXJlJywgYW5kIHdhcyBjYXVzaW5nIHJlZGVmaW5pdGlvbgogCXdhcm5pbmdzLgoKVHVlIEZlYiAyNyAxOTozMToxMSAxOTk2ICBBbGJyZWNodCBLbGVpbmUgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbd2luZG93cy93aW5wb3MuY10gCglBZGRlZCBSRFdfQUxMQ0hJTERSRU4gZmxhZyBpbiBTZXRXaW5kb3dQb3MgKGhhbmRsaW5nIFNXUF9GUkFNRUNIQU5HRUQpCgl0byBmb3JjZSBhIHJlcGFpbnQgd2hlbiBzZXR0aW5nIG1lbnUgYmFycyB3aXRoIGRpZmZlcmVudCByb3dzLgoKU3VuIEZlYiAyNSAyMToxNTowMCAxOTk2IEFsZXggS29yb2JrYSA8YWxleEBwaG0zMC5waGFybS5zdW55c2IuZWR1PgoKCSogW3dpbmRvd3Mvc3lzY29sb3JzLmNdIFtjb250cm9scy9zY3JvbGwuY10KCUZpeGVkIERyYXdGb2N1c1JlY3QgcGVuIGFuZCBTQ1JPTExfVEhVTUIgcGFpbnRpbmcuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClNhdCBGZWIgMjQgMTY6MTc6MDUgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbZmlsZXMvcHJvZmlsZS5jXQoJQWRkZWQgXHIgd2hlbiB3cml0aW5nIHByb2ZpbGUgZmlsZXMsIGZvciBET1MgY29tcGF0aWJpbGl0eS4KCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglGaXhlZCBidWcgaW4gR2xvYmFsUmVBbGxvYygpIHRoYXQgY2F1c2VkIGEgZGlzY2FyZGVkIGJsb2NrIG5vdCB0bwogCWJlIHJlYWxsb2NhdGVkIGlmIGl0cyBzaXplIHdhcyBub3QgY2hhbmdlZC4KCgkqIFttZW1vcnkvc2VsZWN0b3IuY10KCUF2b2lkIHNldHRpbmcgYSB2YWxpZCBMRFQgZW50cnkgd2l0aCBiYXNlIGFuZCBsaW1pdCBzZXQgdG8gMCwgYXMKIAl0aGlzIGNhdXNlcyB0aGUga2VybmVsIHRvIGNsZWFyIHRoZSBlbnRyeS4gVGhpcyBmaXhlcyBhIGNyYXNoIHdoZW4KIAlleGl0aW5nIFdpbmRvd3MgcHJvZ3JhbSBtYW5hZ2VyLgoKCSogW29iamVjdHMvbWV0YWZpbGUuY10KCVJlbW92ZWQgY2FsbCB0byBjcmVhdCgpIGluc3RlYWQgb2YgX2xjcmVhdCgpIGZvciBXSU5FTElCLgoKRnJpIEZlYiAyMyAwMDozNTo1NCAxOTk2ICBUaG9tYXMgU2FuZGZvcmQgPHRkZ3NhbmRmQHByZHMtZ3JuLmRlbW9uLmNvLnVrPgoKCSogW2lmMTYzMi9nZGkzMi5zcGVjXQoJR2V0VGV4dEV4dGVudFBvaW50QSBub3cgaGFzIHdpbjMyIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLgoKCSogW2luY2x1ZGUvc3RydWN0MzIuaF0KCURlZmluZSBuZXcgc3RydWN0dXJlIHRhZ1NJWkUzMiBhbmQgdHlwZWRlZiBTSVpFMzIgdG8gaXQuCglEZWZpbmUgcHJvdG90eXBlIGZvciBmdW5jdGlvbiBQQVJBTTMyX1NJWkUxNnRvMzIKCgkqIFt3aW4zMi9wYXJhbTMyLmNdCglOZXcgZnVuY3Rpb25zIFBBUkFNMzJfU0laRTE2dG8zMiBhbmQgV0lOMzJfR2V0VGV4dEV4dGVudFBvaW50QQoKCSogW3dpbjMyL21lbW9yeS5jXQoJQWRkZWQgbWlzc2luZyBmaWxlIHBvaW50ZXIgcGFyYW1ldGVyIHRvIGZwcmludGYuCgpUaHUgRmViIDIyIDAxOjE0OjIxIDE5OTYgIEVyaWMgV2FybmtlIDxldzIxOTNAY3NjLmFsYmFueS5lZHU+CgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCUFkZGVkIG1vcmUgZmFtaWxpYXIgaWNvbiBhY3Rpdml0eSwgaWUgc2luZ2xlIGNsaWNrIGJyaW5ncyB1cAogCXN5c3RlbSBtZW51LgoKV2VkIEZlYiAyMSAxMzowNzowNCAxOTk2ICBGcmFucyB2YW4gRG9yc3NlbGFlciA8ZG9yc3NlbEBydWxobTEubGVpZGVudW5pdi5ubD4KCgkqIFtjb250cm9scy9tZW51LmNdCglBZGRlZCBjYWxscyB0byBIaWRlQ2FyZXQoKSBhbmQgU2hvd0NhcmV0KCkgZnJvbSB3aXRoaW4KIAlUcmFja1BvcHVwTWVudSgpLCBNRU5VX1RyYWNrTW91c2VNZW51QmFyKCkgYW5kCiAJTUVOVV9UcmFja0tiZE1lbnVCYXIoKS4gIEFyZSB0aGVyZSBhbnkgbW9yZSBwbGFjZXMgd2hlcmUgdGhpcwogCXNob3VsZCBiZSBkb25lPwoKCSogW2NvbnRyb2xzL3N0YXRpYy5jXQoJRml4ZWQgYSBGSVhNRSBpbiBTVEFUSUNfU2V0SWNvbigpLCB3aGljaCBub3cgcmV0dXJucyBhIGhhbmRsZSB0bwogCXRoZSBwcmV2aW91cyBpY29uLiAgQWRkZWQgYSBuZXcgRklYTUUgYXQgdGhlIHBvaW50IHdoZXJlCiAJV01fU0VUVEVYVCBpcyBoYW5kbGVkIGZvciBhIFNTX0lDT04gc3RhdGljIGNvbnRyb2wuCgoJKiBbbWlzYy9jb21tZGxnLmNdCglJbXBsZW1lbnRlZCBGaW5kVGV4dCgpIGFuZCBSZXBsYWNlVGV4dCgpCglTdGlsbCBtaXNzaW5nIDogVGVtcGxhdGVzIGFuZCBIb29rcyBoYW5kbGluZyAvIGVycm9yIGNoZWNraW5nCgoJKiBbcmVzb3VyY2VzL3N5c3Jlc19Fbi5jXQoJUmVkZXNpZ25lZCBGSU5EX1RFWFQgYW5kIFJFUExBQ0VfVEVYVCBkaWFsb2dzLCBzbyB0aGV5IG5vdyB3b3JrLgoJTGFuZ3VhZ2VzIG90aGVyIHRoYW4gRW4gc2hvdWxkIHVwZGF0ZSB0aGVzZSB0b28sIHRob3VnaCwgYXMgd2VsbAogCWFzIHJlZGltZW5zaW9uIHRoZSBjb250cm9scyBiZWNhdXNlIHNvbWUgb2YgdGhlIHRleHQgZG9lc24ndCBmaXQuCiAgCUNyZWF0ZWQgZmlsZSByZXNvdXJjZXMvVE9ETyB0byBleHBsYWluIHRoaXMuCgoJKiBbd2luZG93cy9jYXJldC5jXQoJUmUtd3JpdHRlbi4gIEl0IG5vdyB1c2VzIHRoZSBjb3JyZWN0IFIyX1hPUlBFTi4gIEl0IHJlc2V0cyB0aGUKIAlibGluayB0aW1lciBvbiBTZXRDYXJldFBvcygpLiAgSXQgZG9lcyBpdHMgb3duIGhpZGUvc2hvdyBzY2hlbWUKIAl3aGVuIFNldENhcmV0UG9zKCkgaXMgY2FsbGVkIChzaG91bGQgYmUgZmFzdGVyKS4KCk1vbiBGZWIgMTkgMjE6NTA6MDAgMTk5NiAgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJTWlzY2VsbGFuZW91cyBjaGFuZ2VzIGZvciBiZXR0ZXIgTEJTX0VYVEVOREVEU0VMIHN1cHBvcnQuCglSZW1vdmVkIHNldmVyYWwgc3VwZXJmbHVvdXMgcmVkcmF3YWxzIG9mIGl0ZW0gbGlzdC4KCgkqIFtjb250cm9scy9zY3JvbGwuY10KCVdNX0dFVERMR0NPREUgcmV0dXJuIHZhbHVlLgoKCSogW3dpbmRvd3Mvd2luLmNdCglGbGFzaFdpbmRvdyBmdW5jdGlvbi4KCgkqIFt3aW5kb3dzL3BhaW50aW5nLmNdIFt3aW5kb3dzL3Njcm9sbC5jXQoJQWRkZWQgSGlkZUNhcmV0L1Nob3dDYXJldCBjYWxscy4KCgkqIFtvYmplY3RzL2ZvbnQuY10KCUFkZGVkIEdldENoYXJBQkNXaWR0aHMgc3R1Yi4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCSIjZGVmaW5lInMgbmVlZGVkIGZvciBjaGFuZ2VzIG1lbnRpb25lZCBhYm92ZS4KCk1vbiBGZWIgMTkgMjA6MTI6MDMgMTk5NiAgSGFucyBkZSBHcmFhZmYgIDxIYW5zLmRlR3JhYWZmQHR3aTcyLnR3aS50dWRlbGZ0Lm5sPgoKCSogW2luY2x1ZGUvd2luc29jay5oXQoJQ2hhbmdlIG9yZGVyIG9mIGluY2x1ZGVzIHRvIGdldCBpbl9hZGRyIHN0cnVjdCBkZWZpbmVkIGluIHRpbWUuCgkoTm90ZTogTGludXggMS4zLjY2LCBsaWJjIDUuMi4xOCkKCgkqIFttaXNjL21haW4uY10gW2luY2x1ZGUvb3B0aW9ucy5oXSBbbWlzY2VtdS9pbnQyZi5jXQoJQ2hhbmdlZCB0aGUgLWVuaGFuY2VkIG9wdGlvbiBpbnRvIGEgLW1vZGUgb3B0aW9uLCB3aGljaCBjYW4gYmUKCWVpdGhlciAnc3RhbmRhcmQnIG9yICdlbmhhbmNlZCcuICdlbmhhbmNlZCcgaXMgdGhlIGRlZmF1bHQuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBGZWIgMTggMTY6MzU6NTQgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbY29udHJvbHMvZGVza3RvcC5jXQoJTG9vayBmb3IgdGhlIHdhbGxwYXBlciBmaWxlIGluIHRoZSBXaW5kb3dzIGRpcmVjdG9yeS4KCgkqIFtjb250cm9scy9tZW51LmNdCglGaXhlZCBzd2FwcGVkIHBhcmFtZXRlcnMgaW4gU2V0TWVudUl0ZW1CaXRtYXBzKCkuCglDcmVhdGUgYSBzZXBhcmF0b3IgaW4gTUVOVV9TZXRJdGVtRGF0YSgpIHdoZW4gdGhlIHN0cmluZyBpcyBOVUxMLgoKCSogW2ZpbGUvZG9zZnMuY10KCURPU0ZTX0ZpbmROZXh0OiBkb24ndCByZXR1cm4gJy4nIGFuZCAnLi4nIGluIGEgZHJpdmUgcm9vdCBkaXIuCgoJKiBbZmlsZXMvZmlsZS5jXQoJQWRkZWQgYSBET1NfRklMRSBzdHJ1Y3R1cmUgdG8gc3RvcmUgcGVyLWZpbGUgaW5mb3JtYXRpb24gKG5vdAoJcmVhbGx5IHVzZWQgeWV0KS4KCUZpeGVkIF9scmVhZCBhbmQgX2hyZWFkIHRvIGNoZWNrIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgYmVmb3JlCgljYWxsaW5nIFVuaXggcmVhZCgpIHRvIGF2b2lkIEVGQVVMVCBlcnJvci4KCgkqIFttaXNjL2V4ZWMuY10KCVJldHVybiBUUlVFIGluIFdpbkhlbHAoKSBmb3IgSEVMUF9RVUlUIHRvIHF1aWV0IE5vdGVwYWQgb24gZXhpdC4KCgkqIFttaXNjZW11L2luc3RyLmNdCglDYWxsIERPU01FTV9BbGFybSgpIGluIElOU1RSX1JlcGxhY2VTZWxlY3RvcigpLiBUaGlzIHNob3VsZCBmaXgKIAlwcm9ncmFtcyB0aGF0IHBvbGwgdGhlIEJJT1MgY291bnRlciwgcHJvdmlkZWQgdGhleSByZWxvYWQgdGhlCiAJc2VsZWN0b3Igb24gZXZlcnkgcmVhZC4KCgkqIFttaXNjZW11L2ludDIxLmNdCglSZS1pbXBsZW1lbnRlZCBGaW5kRmlyc3QvRmluZE5leHQgZm9yIEZDQiBjYWxscy4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10gW3dpbmRvd3Mvd2lucG9zLmNdCglNZXJnZWQgTVNHX0dldFdpbmRvd0ZvckV2ZW50KCkgYW5kIFdJTlBPU19XaW5kb3dGcm9tUG9pbnQoKS4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXSBbd2luZG93cy93aW4uY10gW2luY2x1ZGUvd2luZG93cy5oXQoJQWRkZWQgYSBwZXItd2luZG93IFdJTl9NQU5BR0VEIGZsYWc7IG9ubHkgd2luZG93cyB0aGF0IGhhdmUgYQoJZGlhbG9nIGZyYW1lIG9yIGEgc2l6aW5nIGJvcmRlciBhcmUgbWFuYWdlZC4KClNhdCBGZWIgMTcgMTg6MjU6MDAgMTk5NiAgVGhvbWFzIFNhbmRmb3JkIDx0ZGdzYW5kZkBwcmRzLWdybi5kZW1vbi5jby51az4KCgkqIFtpZjE2MzIvTWFrZWZpbGUuaW5dCglBZGRlZCAtZyBmbGFnIHRvIGNvbXBpbGF0aW9uIG9mIC5jIGZpbGVzIGdlbmVyYXRlZCBmcm9tICozMi5zcGVjLgoKCSogW2lmMTYzMi9nZGkzMi5zcGVjXQoJTnVtZXJvdXMgYWRkaXRpb25hbCBmdW5jdGlvbnMgaW1wbGVtZW50ZWQuCgoJKiBpZjE2MzIvdXNlcjMyLnNwZWNdCgl3c3ByaW50ZkEgbWFwcyB0byB2c3ByaW50ZiBub3Qgd3NwcmludGYKCU51bWVyb3VzIGFkZGl0aW9uYWwgZnVuY3Rpb25zIGltcGxlbWVudGVkLgoKCSogW2luY2x1ZGUvZ2RpLmhdIFtvYmplY3RzL2dkaW9iai5jXQoJTmV3ICNkZWZpbmUgTUFHSUNfRE9OVENBUkUgYWRkZWQuIFRoaXMgaXMgdXNlZCBpbgoJR0RJX0dldE9ialB0ciB0byBlbmFibGUgZ2V0dGluZyBhIHBvaW50ZXIgdG8gYSBHREkgb2JqZWN0IG9mCgl1bmtub3cgdHlwZS4KCgkqIFt3aW4zMi9nZGkzMi5jXQoJTmV3IGZpbGUuCgoJKiBbd2luMzIvcGFyYW0zMi5jXQoJV0lOMzJfTW92ZVRvRXgoKSAtIGhhbmRsZSBOVUxMIHBvaW50ZXIgYXJndW1lbnQuCgoJKiBbd2luMzIvdXNlcjMyLmNdCglVU0VSMzJfSW52YWxpZGF0ZVJlY3QgLSBoYW5kbGUgcGFzc2luZyBvZiBhIE5VTEwgcG9pbnRlci4KCVVTRVIzMl9TZXRUaW1lciAtIE5ldyBmdW5jdGlvbi4KCgkqIFtmaWxlcy9kaXJlY3RvcnkuY10KCUZpeGVkIERJUl9Jbml0KCkgKG9mZiBieSBvbmUgaW4gYWxsb2NhdGlvbiBvZiBzcGFjZSBmb3IKCWVudmlyb25tZW50IHZhcmlhYmxlcykuCgoJKiBbZmlsZXMvZHJpdmUuY10KCUFkZGVkIDxzeXMvdHlwZXMuaD4gdG8gI2luY2x1ZGVzIChwcmVyZXF1aXNpdGUgZm9yIDxzeXMvc3RhdC5oPgoJb24gRnJlZUJTRCkuCgpGcmkgRmViIDE2IDEwOjI2OjU2IDE5OTYgIEFuZHJlYXMgS2lyc2NoYmF1bSA8YW5rQHJiZy5pbmZvcm1hdGlrLnRoLWRhcm1zdGFkdC5kZT4KCgkqIFtjb250cm9scy9tZW51LmNdCglNZW1vcnkgbGVhayBwbHVnZ2VkLgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUVyYXNlIHNwYWNlIHdpdGggZnVuY3Rpb24gRXh0VGV4dE91dCgpLiBUaGlzIGVsaW1pbmF0ZXMgdGhlIHVzZSBvZgogCXhtYWxsb2MoKS4gIE1lbW9yeSBsZWFrIGluIEVESVRfV3JpdGVUZXh0IHBsdWdnZWQuCgoJKiBbZGVidWdnZXIvZGJfZGlzYXNtLmNdCglPcGVyYW5kIGZvciBzY2FzIG5vdyBpcyBkaS4KCgkqIFtmaWxlcy9wcm9maWxlLmNdCglQUk9GSUxFX0dldFNlY3Rpb24gd2FzIGNvcHlpbmcgdG9vIG11Y2ggZGF0YS4KCVBST0ZJTEVfR2V0U2VjdGlvbiBub3cgcmV0dXJucyB0aGUgY29ycmVjdCB2YWx1ZS4gSXQgd2FzIHJldHVybmluZwogCXRoZSBudW1iZXIgb2YgdW51c2VkIGluc3RlYWQgb2YgdXNlZCBieXRlcy4KCgkqIFtvYmplY3RzL2RjLmNdCglDb3JyZWN0ZWQgdHdvIHR5cG9zIGluIGNvbW1lbnRzLgoKCSogW29iamVjdHMvZm9udC5jXQoJRk9OVF9NYXRjaEZvbnQgZGlkbid0IHJldHVybiBpZiBpdCBjb3VsZG4ndCBmaW5kIGFueSBmb250LgoKCSogW29iamVjdHMvb2VtYml0bWFwLmNdCglGcmVlIG9iamVjdCBvbmx5IGlmIGl0IGhhcyBiZWVuIGFsbG9jYXRlZC4KCgkqIFt3aW5kb3dzL3Njcm9sbC5jXQoJTWVtb3J5IGxlYWsgaW4gU2Nyb2xsREMgcGx1Z2dlZC4KClR1ZSBGZWIgMTMgMTE6MTc6MDAgMTk5NiBXaWxsaWFtIE1hZ3JvICA8d21hZ3JvQHRjLmNvcm5lbGwuZWR1PgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUltcGxlbWVudGVkIEVTX05PSElERVNFTCBzdHlsZSwgc2hpZnQrY2xpY2sgc2VsZWN0aW9uLAogCXNoaWZ0K3thcnJvdyxob21lLGVuZCxwZ3VwLHBnZG59IHNlbGVjdGlvbi4gIE9wdGltaXplZAoJKGRlKXNlbGVjdGlvbiBkcmF3aW5nLiAgQ2hhbmdlZCBzZWxlY3Rpb24gZHJhd2luZyB0byB1c2UgY29ycmVjdAogCXN5c3RlbSBjb2xvcnMgaW5zdGVhZCBvZiBpbnZlcnRpbmcuICBGaXhlZCBkZWxldGluZyBvciBiYWNrc3BhY2luZwogCWFjcm9zcyBhICdcclxuJyBlbmQgb2YgbGluZSBwYWlyLiAgU2VsZWN0aW9uIG5vdyBhbmNob3JzCiAJY29ycmVjdGx5LiBGaXhlZCB0ZXh0IGxlYWtpbmcgYW5kIGV4dHJhIGdhcmJhZ2UgcHJvYmxlbSBidWcKIAl1bmNvdmVyZWQgYnkgY2hhbmdlIGluIGNsYXNzIHN0eWxlIGluIHdpbmU5NjAxMzEuCgoJKiBbY29udHJvbHMvd2lkZ2V0cy5jXQoJQ2xhc3MgZmxhZ3Mgbm93IG1hdGNoIHRob3NlIG9mIFdpbmRvd3MuCgpNb24gRmViIDEyIDIxOjI4OjE5IDE5OTYgIE1hcnRpbiB2b24gTG9ld2lzIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBbY29udHJvbHMvd2lkZ2V0cy5jXQoJV0lER0VUU19Jbml0OiBSRUxBWTMyX0dldEVudHJ5UG9pbnQgZG9lcyBub3QgdGFrZSBhIHN0cmluZyBhbnltb3JlLgoKCSogW2lmMTYzMi9NYWtlZmlsZS5pbl1baWYxNjMyL3JlbGF5MzIuY11baW5jbHVkZS9yZWxheTMyLmhdCgljb21jdGwzMi5zcGVjIG9sZTMyLnNwZWMgd2luc3Bvb2wuc3BlYzogbmV3IGZpbGVzLgoJUkVMQVkzMl9Jbml0OiBjYWxsIGluaXRpYWxpemF0aW9uIG9mIG5ldyBETExzLgoJUkVMQVkzMl9HZXRFbnRyeVBvaW50OiBleHBlY3RzIFdJTjMyX2J1aWx0aW4qIG5vdy4KCVJFTEFZMzJfTWFrZUZha2VNb2R1bGU6IG5ldyBmdW5jdGlvbi4KCgkqIFtpZjE2MzIvZ2RpMzIuc3BlY11baWYxNjMyL2tlcm5lbDMyLnNwZWNdW2lmMTYzMi91c2VyMzIuc3BlY10KCUFkZGVkIFdpbjk1IGZ1bmN0aW9ucy4gT3JkaW5hbHMgbm93IGRpZmZlciBmcm9tIGJvdGggTlQgYW5kIFdpbjk1CglIZWFwQ3JlYXRlLCBDcmVhdGVEaWFsb2dJbmRpcmVjdFBhcmFtQSwgQ3JlYXRlRGlhbG9nSW5kaXJlY3RQYXJhbVcsCglDcmVhdGVEaWFsb2dQYXJhbUEsIENyZWF0ZURpYWxvZ1BhcmFtVywgRGlhbG9nQm94SW5kaXJlY3RQYXJhbUEKCURpYWxvZ0JveEluZGlyZWN0UGFyYW1XLCBEaWFsb2dCb3hQYXJhbUEsIERpYWxvZ0JveFBhcmFtVzoKCW5ldyByZWxheXMuCgoJKiBbaWYxNjMyL3NoZWxsMzIuc3BlY10KCXNoZWxsMzIuc3BlYzogcmVudW1iZXJlZCBhbGwgZnVuY3Rpb25zIHRvIHRha2UgaW50byBhY2NvdW50IG9yZGluYWxzLgoJVGhlc2Ugc2VlbSB0byBiZSBpZGVudGljYWwgYmV0d2VlbiBOVCBhbmQgV2luOTUuCgoJKiBbaW5jbHVkZS9kaWFsb2cuaF1bd2luZG93cy9kaWFsb2cuY10KCXhCYXNlVW5pdCx5QmFzZVVuaXQsRElBTE9HX0RvRGlhbG9nQm94OiBtYWRlIG5vbi1zdGF0aWMuCgoJKiBbaW5jbHVkZS9oYW5kbGUzMi5oXQoJTmV3IGhhbmRsZSB0eXBlcyBWUkFOR0UsIEhFQVAsIEhFQVBJVEVNLgoKCSogW2luY2x1ZGUvcGVfaW1hZ2UuaF1bbG9hZGVyL3BlX2ltYWdlLmNdCglzdHJ1Y3Qgd19maWxlczogbmV3IGZpZWxkIGJ1aWx0aW4uCglQRV9GaW5kRXhwb3J0ZWRGdW5jdGlvbjogc3VwcG9ydCBvcmRpbmFscy4KCVBFX0dldFByb2NBZGRyZXNzOiBjYWxsIFJFTEFZMzJfR2V0RW50cnlQb2ludCBmb3IgYnVpbHRpbnMuCglmaXh1cF9pbXBvcnRzOiBzdXBwb3J0IG9yZGluYWxzLgoJUEVfTG9hZEltYWdlOiBwcmVmZXIgZGlyZWN0b3JpZXMgb3ZlciBzZWdtZW50cy4KCgkqIFtpbmNsdWRlL3Jlc291cmNlLmhdW3dpbjMyL3Jlc291cmNlLmNdCglGaW5kUmVzb3VyY2UzMjogY2hhbmdlZCBwYXJhbWV0ZXIgZnJvbSBMUENUU1RSIHRvIExQQ1dTVFIKCQljaGVjayBMQU5HX05FVVRSQUwgaWYgTEFOR19FTkdMSVNIIGZhaWxzLgoJTG9hZEFjY2VsZXJhdG9yc1csU2l6ZW9mUmVzb3VyY2UzMixBY2Nlc3NSZXNvdXJjZTMyOiAKCQlkaXNhYmxlZCBiZWNhdXNlIGl0J3MgYnJva2VuLgoJQ2FzdGVkIHRvIGFuZCBmcm9tIExQV1NUUiBhdCB2YXJpb3VzIHBsYWNlcy4KCgkqIFtpbmNsdWRlL3N0cmluZzMyLmhdW3dpbjMyL3N0cmluZzMyLmNdCglDaGFuZ2VkIHByb3RvdHlwZXMgdG8gdGFrZSBjb25zdCBhcmd1bWVudHMgd2hlcmUgYXBwcm9wcmlhdGUuCgoJKiBbaW5jbHVkZS9zdHJ1Y3QzMi5oXQoJTmV3IHN0cnVjdHVyZXMgRExHVEVNUExBVEUzMiwgRExHSVRFTVRFTVBMQVRFMzIuCgoJKiBbdG9vbHMvYnVpbGQuY10KCUJ1aWxkU3BlYzMyRmlsZXM6IGdlbmVyYXRlIEJhc2UgdmFsdWUgaW50byBjb2RlLCBnZW5lcmF0ZSBjYWxsIHRvCglSRUxBWTMyX01ha2VGYWtlTW9kdWxlLgoJCgkqIFt3aW4zMi9oZWFwLmNdCglUaGlzIGlzIHN0aWxsIG5vdCBmaW5pc2hlZCBhbmQgbmVlZHMgcmV3b3JrLgoJSGVhcEFsbG9jOiByZW5hbWVkIHRvIFNJTVBMRV9IZWFwQWxsb2MsIGltcGxlbWVudGVkIEhlYXBBbGxvYy4KCUhlYXBDcmVhdGU6IGltcGxlbWVudGVkIG9uIHRvcCBvZiBWaXJ0dWFsQWxsb2MsIHdoaWNoIGRvZXMgbm90IHdvcmsgeWV0CglIZWFwRGVzdHJveSwgSEVBUF9Hcm93SGVhcCwgSGVhcEZyZWU6IG5ldyBmdW5jdGlvbnMuCgoJKiBbd2luMzIvbWVtb3J5LmNdCglTdXBwb3J0IGZvciBWUkFOR0VfT0JKRUNULiBUaGlzIGlzIG5vdCB5ZXQgY2FsbGVkIGZyb20gYW55IHBsYWNlLAoJYW5kIG5lZWRzIG1vcmUgcGxhdGZvcm0gc3BlY2lmaWMgc3VwcG9ydAoJTUVNT1JZX0ZpbmRWcmFuZ2UsIE1FTU9SWV9Jc1ZyYW5nZUZyZWUsIE1FTU9SWV9JbnNlcnRWcmFuZ2UsCglNRU1PUllfQWxsb2NWcmFuZ2UsIE1FTU9SWV9SZWxlYXNlVnJhbmdlOiBuZXcgZnVuY3Rpb25zLgoKCSogW3dpbjMyL3VzZXIzMi5jXQoJV0lOMzJfQ3JlYXRlV2luZG93RXhBOiBkb24ndCBHbG9iYWxBbGxvYyBmb3IgaW50ZWdlciBjbGFzcyBhbmQgd2luZG93CgluYW1lcywgYXMgaW4gZGlhbG9ncy4KCUltcGxlbWVudGVkIGRpYWxvZyBmdW5jdGlvbnMgKHNlZSB1c2VyMzIuc3BlYykuCgoJKiBbd2luZG93cy9jYXJldC5jXQoJQ0FSRVRfSW5pdGlhbGl6ZTogY2FsbCBSRUxBWTMyX0dldEJ1aWx0aW5ETEwuCgpNb24gRmViIDEyIDE4OjUyOjQwIDE5OTYgIEppbSBQZXRlcnNvbiA8anNwZXRlckBiaXJjaC5lZS52dC5lZHU+CgoJKiBbY29udHJvbHMvZWRpdC5jXQoJUmVtb3ZlZCBjb21tZW50ZWQgb3V0ICNpZmRlZnMgZm9yIFdJTkVMSUIuCgoJKiBbdG9vbHMvbWFrZWh0bWwucGxdCglQdXQgaW4gZXJyb3IgY2hlY2tpbmcgd2hlbiB0cnlpbmcgdG8gb3BlbiBhIGZpbGUuCgoJKiBbbGlidGVzdC9NYWtlZmlsZS5pbl0gW2xpYnRlc3QvbmV3LmNdIFtsaWJ0ZXN0L2hlbGxvNC5jXQoJQWRkZWQgdHdvIG5ldyB0YXJnZXRzOiBoZWxsbzQgYW5kIG5ldy4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUFkZGVkIGRlZmluaXRpb24gb2YgREVWTU9ERSBzdHJ1Y3R1cmUsIGFsdGhvdWdoIGl0J3Mgbm90IHlldCB1c2VkLgogIAlNb2RpZmllZCB2YXJpb3VzIEFQSSBmdW5jdGlvbnMgZnJvbSBDcmVhdGVEQygpIHRvIEVzY2FwZSgpLCBpbgogCW9yZGVyIHRvIG1ha2UgdGhlbSBtb3JlIGNvbXBsaWFudCB3aXRoIHRoZSBzdHJpY3QgQVBJIGRlZmluaXRpb25zLgoKCSogW2luY2x1ZGUvd2ludHlwZXMuaF0KCUFkZGVkICd0eXBlZGVmIGNoYXIgVENIQVInLiAgSXQgcHJvYmFibHkgc2hvdWxkIGJlIGRlZmluZWQgYXMKCSdzaG9ydCcsIGJ1dCB0aGVuIHdlIHdvdWxkIGhhdmUgdG8gc3VwcG9ydCBzdWNoIGNoYXJhY3RlcnMuICBBbHNvIGRpZAoJJ3R5cGVkZWYgY29uc3QgVENIQVIqIExQQ1RTVFInIGFuZCAndHlwZWRlZiBUQ0hBUiogTFBUU1RSJy4KCUFsc28gZGVmaW5lZCBXTkRFTlVNUFJPQywgRk9OVEVOVU1QUk9DLCBHT0JKRU5VTVBST0MsIFBST1BFTlVNUFJPQwoJTUZFTlVNUFJPQywgYW5kIEhHRElPQkouCgpNb24gRmViICA1IDE2OjQyOjA3IDE5OTYgIEZyYW5zIHZhbiBEb3Jzc2VsYWVyIDxkb3Jzc2VsQHJ1bGhtMS5sZWlkZW51bml2Lm5sPgoKCSogW21pc2MvY29tbWRsZy5jXQoJUGF0Y2hlZCBhIGJ1ZyB0aGF0IG9jY3VycmVkIGluIHRoZSBpbnRlcm5hbCBDT01NRExHIG1vZHVsZSBmb3IgdGhlCiAJRmlsZU9wZW4oKSwgRmlsZVNhdmUoKSBhbmQgRmlsZVNhdmVBcygpIGZ1bmN0aW9ucy4gIFRoZSBmaWxlLXR5cGUKIAljb21ib2JveCBpcyBub3cgaGFuZGxlZCBjb3JyZWN0bHkuCgpGcmkgRmViICAyIDIyOjUyOjU4IDE5OTYgIFJvbWFuIERvbGVqc2kgIDxyb21hbkBzb3JyeS52c2UuY3o+CgoJKiBbcmVzb3VyY2VzL3N5c3Jlc19Dei5yY10KCUFkZGVkIHN1cHBvcnQgZm9yIEN6ZWNoIFtDel0gbGFuZ3VhZ2UuCgpUaHUgRmViICAxIDAwOjM1OjA0IDE5OTYgIFBoaWxpcHBlIERlIE11eXRlciAgPHBoZG1AaW5mby51Y2wuYWMuYmU+CgoJKiBbb2JqZWN0cy9mb250LmNdCglGT05UX21hdGNoZm9udCA6IGZvciBmaXhlZC1zcGFjaW5nIGZvbnRzLCBhbGxvdyAnYycgaWYgJ20nIGZhaWxzOwoJZm9yIHZhcmlhYmxlLXNwYWNpbmcgZm9udHMgOiBhbGxvdyAnKicgaWYgJ3AnIGZhaWxzOyBpZiBhc2tlZCBsZkhlaWdodAoJaXMgLTEsIGFzc3VtZSAwLgoJQ3JlYXRlRm9udEluZGlyZWN0IDogaWYgZm9udCBwYXJhbWV0ZXIgaXMgTlVMTCwgaXNzdWUgYW4gZXJyb3IgbWVzc2FnZS4KCUNyZWF0ZUZvbnQgOiBudWxsLXRlcm1pbmF0ZSBsZkZhY2VOYW1lLgoJUGFyc2VGb250UGFybXMgOiBkZWJ1ZyBjb2RlIHR1cm5lZCBvZmYgOiB0b28gdmVyYm9zZS4KCUluaXRGb250c0xpc3QgOiByZWNvZ25pemUgKi1jLSogZm9udHMgYXMgZml4ZWQtc3BhY2luZyBmb250cy4KCgkqIFtvYmplY3RzL2NvbG9yLmNdCglDb2xvclRvUGh5c2ljYWwgOiBhZG1pdCAweGZmLi4uLi4uIENPTE9SUkVGJ3MgYXMgMHgwMC4uLi4uLiBvbmVzLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KV2VkIEphbiAzMSAxMDo1ODowMCAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBzdW5zaXRlLnVuYy5lZHU+CgoJKiBbY29uZmlndXJlLmluXQoJQWRkZWQgLS13aXRoLWRsbCBvcHRpb24gdG8gYnVpbGQgbGlid2luZS5zby4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglGaXhlZCBMaXN0Qm94RGlyZWN0b3J5KCksIERsZ0RpclNlbGVjdCgpIGFuZAoJRGxnRGlyTGlzdCgpLiBIb3BlZnVsbHkgdGhlaXIgYmVoYXZpb3IgaXMgY29ycmVjdCBub3cuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJVXNlIFNFR1BUUnMgaW4gQ2hhbmdlTWVudSgpLCBJbnNlcnRNZW51KCksIEFwcGVuZE1lbnUoKSBhbmQKIAlNb2RpZnlNZW51KCkgZm9yIHRoZSBpdGVtIGRhdGEsIHRvIGF2b2lkIGNvcnJ1cHRpbmcgdGhlIHBvaW50ZXIKIAlmb3Igb3duZXItZHJhd24gaXRlbXMuCgoJKiBbY29udHJvbHMvc3RhdGljLmNdCglBdHRlbXB0IHRvIGxvYWQgT0VNIGljb25zIGZvciBTU19JQ09OIGNvbnRyb2xzLiBQcm9iYWJseSBub3QKCWVudGlyZWx5IGNvcnJlY3QuCglEb24ndCBjbGlwIHRoZSB0ZXh0IG91dHB1dC4KCgkqIFtmaWxlcy9kaXJlY3RvcnkuY10KCUFkZCB0ZW1wIGRpciBhbmQgV2luZG93cyBkaXIgdG8gZW52aXJvbm1lbnQuCgoJKiBbZmlsZXMvZG9zX2ZzLmNdCglGaXhlZCBhIGZldyBwYXRoIGhhbmRsaW5nIGJ1Z3MgaW4gRE9TRlNfR2V0VW5peEZpbGVOYW1lKCkuCglDYWNoZSBsYXN0IHVzZWQgZGlyZWN0b3J5IGluIERPU0ZTX0ZpbmROZXh0KCkgdG8gYXZvaWQgcXVhZHJhdGljCglzZWFyY2ggdGltZS4KCgkqIFtmaWxlcy9kcml2ZS5jXQoJTmV3IGZvcm1hdCBmb3IgZHJpdmVzIGNvbmZpZ3VyYXRpb24gaW4gd2luZS5jb25mOyBhbGxvd3MKCXNwZWNpZnlpbmcgdGhlIHR5cGUsIGxhYmVsIGFuZCBzZXJpYWwgbnVtYmVyIG9mIGEgZHJpdmUuCgoJKiBbZmlsZXMvZmlsZS5jXQoJTmV3IGZ1bmN0aW9uIEZJTEVfT3BlblVuaXhGaWxlIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBvcGVuIGEKCWRpcmVjdG9yeSBpbnN0ZWFkIG9mIGEgZmlsZS4KCUZpeGVkIERPU0ZTX0dldFVuaXhGaWxlTmFtZSgpIGNoZWNrX2xhc3QgZmxhZyBpbiBGSUxFX01ha2VEaXIoKS4KCgkqIFtmaWxlcy9wcm9maWxlLmNdCglSZXdyb3RlIHByb2ZpbGUgaGFuZGxpbmcuIFNob3VsZCBiZSBjbG9zZXIgdG8gV2luZG93cyBiZWhhdmlvciBub3cuCglOZXcgZnVuY3Rpb24gUFJPRklMRV9HZXRXaW5lSW5pU3RyaW5nKCkgdG8gZ2V0IGEgc3RyaW5nIGZyb20gd2luZS5jb25mLgoJU3VwcG9ydCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaW4gd2luZS5jb25mLgoKCSogW2xvYWRlci90YXNrLmNdCglGaXhlZCB0aGUgb3JkZXIgb2YgZGVsZXRpb24gaW4gVEFTS19EZWxldGVUYXNrKCkgdG8gYXZvaWQgbWVtb3J5Cgljb3JydXB0aW9uLgoKCSogW21lbW9yeS9nbG9iYWwuY10KCUNyZWF0ZSBhIGRpc2NhcmRlZCBibG9jayBvbiBHbG9iYWxBbGxvYygpIGlmIHRoZSBzaXplIGlzIDA7IHRoYW5rcwoJdG8gSm9obiBIYXJ2ZXkgZm9yIG5vdGljaW5nIHRoaXMuCgoJKiBbbWVtb3J5L2xvY2FsLmNdCglMT0NBTF9HZXRIZWFwOiBtYWtlIHN1cmUgdGhlIHBvaW50ZXIgaXMgdmFsaWQgYmVmb3JlIGNoZWNraW5nCgltYWdpYyBudW1iZXIuCgoJKiBbbWlzYy9tYWluLmNdCglNb3ZlZCBwcm9maWxlIGFuZCByZWdpc3RyeSBzYXZpbmcgdG8gRXhpdFdpbmRvd3MoKSwgc28gd2UgZG9uJ3QKCXRyeSB0byBzYXZlIHRoZW0gaW4gY2FzZSBvZiBhIGNyYXNoLgoKCSogW21pc2NlbXUvaW50MjEuY10KCUlOVDIxX0dldEZyZWVEaXNrU3BhY2U6IHRyeSB0byBjb21wdXRlIHRoZSBjbHVzdGVyIHNpemUgZnJvbSB0aGUKCWZpbGVzeXN0ZW0gc2l6ZSBpbnN0ZWFkIG9mIGhhcmQtY29kaW5nIGl0IHRvIDY0LgoJRml4ZWQgZnVuY3Rpb25zIDB4M2YgYW5kIDB4NDAgdG8gdXNlIF9ocmVhZCBhbmQgX2h3cml0ZSB0byBhbGxvdwoJcmVhZGluZyBvciB3cml0aW5nIDY1NTM1IGJ5dGVzICh0aGFua3MgdG8gQnJ1Y2UgTWlsbmVyIGZvciB0aGlzCW9uZSkuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglGaXhlZCBidWcgaW4gbGlua2VkLWxpc3QgaGFuZGxpbmcgaW4gTVNHX0RlbGV0ZVF1ZXVlKCkuCglTaW1wbGlmaWVkIFNldE1lc3NhZ2VRdWV1ZSgpLgoKCSogW3dpbmUuaW5pXSBbd2luZS5tYW5dCglVcGRhdGVkIGZvciBuZXcgZHJpdmVzIGNvbmZpZ3VyYXRpb24gZm9ybWF0LgoKVHVlIEphbiAzMCAxMToyNDo0NiAxOTk2ICBXaWxsaWFtIE1hZ3JvICA8d21hZ3JvQHRjLmNvcm5lbGwuZWR1PgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUltcGxlbWVudGVkIEVTX1BBU1NXT1JEIHN0eWxlLCBFTV9TRVRQQVNTV09SRENIQVIgYW5kCiAJRU1fR0VUUEFTU1dPUkRDSEFSIG1lc3NhZ2VzLgoKCSogW2NvbnRyb2xzL3dpZGdldHMuY10KCUFkanVzdGVkIGNsYXNzIGNyZWF0aW9uIGZsYWdzIHRvIGJldHRlciBtYXRjaCB2YWx1ZXMgV2luZG93cyB1c2VzLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJRml4ZWQgRVNfTk9ISURFU0VMIHR5cG8uCgoJKiBbbG9hZGVyL25lX2ltYWdlLmNdCglBZGRlZCBkZXRlY3Rpb24gZm9yIHplcm8gb2Zmc2V0IGluIFJBRERSIGZpeHVwcy4gUXVpY2tlbgoJd2FzIGluIGFuIGluZmluaXRlIGxvb3AgaGVyZS4KCk1vbiBKYW4gMjkgMjA6MTI6MjIgMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFtmaWxlcy9kb3NfZnMuY10KCUJ1Z2ZpeDogcmFuZ2UgZXJyb3IgaW4gbW9udGggdmFsdWUgKDAuLjExIHNldCB0byAxLi4xMikuCgoJKiBbd2luZG93cy9jYXJldC5jXQoJQ2hhbmdlZCBST1AyLW1vZGUgdG8gUjJfTk9UWE9SUEVOIGluIENBUkVUX0NhbGxiYWNrIGZvciBwdWxzZWQKIAlhcHBlYXJhbmNlIG9mIHRoZSBjYXJldC4KCgkqIFt3aW5kb3dzL21kaS5jXSBbaW5jbHVkZS9tZGkuaF0KCUNoYW5nZWQgTURJVGlsZSgpOiBhZGRlZCBhIG5ldyBwYXJhbWV0ZXIgV09SRCB3UGFyYW0gZm9yCiAJV01fTURJVElMRSBzZWNvbmQgdGlsaW5nIG1ldGhvZCAoTURJVElMRV9IT1JJWk9OVEFMIGluIHdQYXJhbSkgYXMKIAl1c2VkIGluIFdpbjMuMQoKU3VuIEphbiAyOCAxNDoyMDowMCAxOTk2ICBDYW1lcm9uIEhlaWRlICA8aGVpZGVAZWUudWFsYmVydGEuY2E+CgoJKiBbbWlzY2VtdS9pbnQyZi5jXQoJQWRkZWQgYSBzbWFsbCBiaXQgb2YgTVNDREVYIGVtdWxhdGlvbi4KCgkqIFt3aW5kb3dzL2FsaWFzLmNdCglBTElBU19SZWdpc3RlckFsaWFzIHdhcyByZXR1cm5pbmcgdGhlIGhhc2ggdmFsdWUgd2hlbiBpdCBzaG91bGQKIAloYXZlIGJlZW4gcmV0dXJuaW5nIHRoZSByZWNvcmQgbnVtYmVyLgoJClNhdCBKYW4gMjcgMTA6NTM6NTEgMTk5NiAgSmltIFBldGVyc29uIDxqc3BldGVyQGJpcmNoLmVlLnZ0LmVkdT4KCgkqIFtpbmNsdWRlL3NoZWxsLmhdIFtpbmNsdWRlL3dpbnR5cGVzLmhdCglNb3ZlZCBkZWZpbml0aW9uIG9mIEhLRVkgYW5kIExQSEtFWSB0eXBlcyB0byBpbmNsdWRlL3dpbnR5cGVzLmguCglEZWNsYXJlZCBGT05URU5VTVBST0MgaW4gd2ludHlwZXMuaC4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUFkZGVkIGRlZmluaXRpb24gb2YgS0VSTklOR1BBSVIgYW5kIExQS0VSTklOR1BBSVIgdHlwZXMuICBBZGRlZAoJZGVjbGFyYXRpb25zIGZvciBDb3B5Q3Vyc29yKCksIENvcHlJY29uKCksIEVudW1Gb250RmFtaWxpZXMoKSwKCUV4dHJhY3RJY29uKCksIEZhdGFsQXBwRXhpdCgpLCBGaW5kRXhlY3V0YWJsZSgpLCBHZXRDbGlwQ3Vyc29yKCksCglHZXRLZXJuaW5nUGFpcnMoKSwgR2V0UXVldWVTdGF0dXMoKSwgR2V0UmFzdGVyaXplckNhcHMoKSwKCUlzR0RJT2JqZWN0KCksIElzTWVudSgpLCBJc1Rhc2soKSwgUmVnQ2xvc2VLZXkoKSwgUmVnQ3JlYXRlS2V5KCksCglSZWdEZWxldGVLZXkoKSwgUmVnRW51bUtleSgpLCBSZWdPcGVuS2V5KCksIFJlZ1F1ZXJ5VmFsdWUoKSwKCVJlZ1NldFZhbHVlKCksIFJlc2V0REMoKSwgU2hlbGxFeGVjdXRlKCksIFN5c3RlbVBhcmFtZXRlcnNJbmZvKCksCglhbmQgd3NwcmludGYoKS4KCgkqIFt0b29scy9tYWtlaHRtbC5wbF0gW2RvY3VtZW50YXRpb24vYXBpdy5pbmRleF0KCU5ldyBmaWxlcyB0aGF0IHNjYW4gd2luZG93cy5oLCBjb21tZGxnLmgsIGFuZCB0b29saGVscC5oIGFuZCBvdXRwdXQKCWFuIEhUTUwgc29ydGVkIGxpc3Qgd2l0aCBvcHRpb25hbCBsaW5rcyB0byB3d3cud2lsbG93cy5jb20gYW5kIGEKCXRhbGx5IG9mIHVuaW1wbGVtZW50ZWQgQVBJVyBmdW5jdGlvbnMuCgoJKiBbb2JqZWN0cy9jdXJzb3JpY29uLmNdCglBZGRlZCBXaW4zMiB2ZXJzaW9ucyBvZiBDb3B5SWNvbigpIGFuZCBDb3B5Q3Vyc29yKCkgZm9yIHVzZSBpbgoJbGlid2luZS4KCgkqIFt3aW4zMi9yZXNvdXJjZS5jXSBbd2luMzIvd2lucHJvY3MuY10KCUFkZGVkICcjaW5jbHVkZSAibGlicmVzLmgiJyBhbmQgZXhwbGljaXQgZGVjbGFyYXRpb25zIG9mIHdpbmRvd3MKCXByb2NzIGluIG9yZGVyIHRvIGF2b2lkIHdhcm5pbmdzLgoKCSogW3dpbmRvd3MvdXRpbGl0eS5jXQoJQWRkZWQgV2luMzIgdmVyc2lvbiBvZiBNdWxEaXYoKSBmb3IgbGlid2luZS4KCgkqIFsqLypdIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUNoYW5nZWQgc2V2ZXJhbCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgdG8gY29tcGx5IG1vcmUgc3RyaWN0bHkgdG8KCXRoZSB3aW5kb3dzIEFQSSAod2l0aG91dCwgaG9wZWZ1bGx5LCBhbHRlcmluZyB0aGVpciBmdW5jdGlvbmFsaXR5KS4KCgkqIFtjb250cm9scy9tZW51LmNdCglNYWRlIHRoZSByZXR1cm4gdmFsdWUgb2YgQ2hlY2tNZW51SXRlbSBiZSB0aGUgcHJldmlvdXMgc3RhdGUgb2YKIAl0aGUgbWVudSBpdGVtIGlmIGl0IHdhcyBmb3VuZCwgb3RoZXJ3aXNlIC0xIGFzIHNwZWNpZmllZCBpbiB0aGUKIAlTREsuIFRoaXMgY29uZmxpY3RzIHdpdGggdGhlIEFQSVcgc3BlY2lmaWNhdGlvbiwgd2hpY2ggc2F5cyBpdAogCXNob3VsZCByZXR1cm4gVFJVRSBpZiBzdWNjZXNzZnVsLCBvdGhlcndpc2UgRkFMU0UuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglBZGRlZCBvYnNvbGV0ZSBXTV9TSVpFIG1lc3NhZ2Ugd1BhcmFtIG5hbWVzIGZvciBjb21wYXRpYmlsaXR5LgogIAlBZGRlZCBXaW5IZWxwKCkgY29tbWFuZCBjb25zdGFudHMsIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIG5vdCB5ZXQKIAlzdXBwb3J0ZWQuCgoJKiBbcmMvd2luZXJjLmNdCglUaWRpZWQgdXAgdHJhbnNmb3JtX2JpbmFyeV9maWxlKCkuICBJbiBhcmd1bWVudCBjaGVja2luZywgZmxhdHRlbmVkCglhbnkgaW52YWxpZCBjaGFyYWN0ZXJzIHNwZWNpZmllZCB3aXRoIHRoZSBwcmVmaXggYXJndW1lbnQuCgoJKiBbbGlicmFyeS9saWJyZXMuY10KCU1hZGUgRmluZFJlc291cmNlKCkgY2FzZS1pbnNlbnNpdGl2ZSB3aGVuIHBhcmFtZXRlciAnbmFtZScgaXMgYSBzdHJpbmcuCgpTYXQgSmFuIDI3IDAyOjMwIDE5OTYgIFV3ZSBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnRoLWRhcm1zdGFkdC5kZQoKCSogW2ZpbGVzL2RyaXZlLmNdCglJZiByb290ICIvIiBpcyBnaXZlbiBpbiB3aW5lLmNvbmYsIHVzZSBpdCBhcyBsYXN0IHJlc29ydC4KCgkqIFtmaWxlcy9maWxlLmNdCglSZXBvcnQgRVJfQWNjZXNzRGVuaWVkIGl0IGRpc2sgaXN0IG5vdCB3cml0YWJsZQoJTW9yZSBEZWJ1ZyBPdXRwdXQKCgkqIFttaXNjZW11L2ludDIxLmNdCglTcXVlZXplZCBzb21lIGJ1Z3MgaW4gRXh0ZW5kZWRPcGVuQ3JlYXRlRmlsZQoJCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJU29tZSB3aW5kb3dzIG1heSBub3QgYmUgbW92ZWQgb3IgcmVzaXplZC4gV2UgYXJlIG1pc3Npbmcgc29tZQoJc3RydWN0dXJlcyB0byBiZSBleGFjdCwgYnV0IHRoZSBhcHByb2FjaCBzaG91bGQgaGVscCBpbiBzb21lIGNhc2VzCglhbmQgbWFrZSB0aGluZ3Mgd29yc2UgaW4gbXVjaCBmZXdlci4KCkZyaSBKYW4gMjYgMTA6MjQ6MDAgMTk5NiAgVGhvbWFzIFNhbmRmb3JkIDx0LmQuZy5zYW5kZm9yZEBwcmRzLWdybi5kZW1vbi5jby51az4KCgkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KCWZpeHVwX2ltcG9ydHM6IEZpbmQgYnVpbHRpbnMgZm9yIEJvcmxhbmQgc3R5bGUgZW50cmllcywgdG9vCgpGcmkgSmFuIDI2IDEwOjI0OjAwIDE5OTYgIE1hcnRpbiB2b24gTG9ld2lzIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBbY29udHJvbHMvbWVudS5jXQoJTG9hZE1lbnU6IGJyYW5jaCB0byBXaW4zMiBmb3IgUEUgbW9kdWxlcwoKCSogW2lmMTYzMi9nZGkuc3BlY11baWYxNjMyL2tlcm5lbDMyLnNwZWNdW2lmMTYzMi91c2VyMzIuc3BlY10KCURlbGV0ZU9iamVjdCwgR2V0UGl4ZWwsIFNldFBpeGVsLFdyaXRlUHJpdmF0ZVByb2ZpbGVTdHJpbmdBLAoJV3JpdGVQcm9maWxlU3RyaW5nQSwgRW1wdHlDbGlwYm9hcmQsIEVuYWJsZU1lbnVJdGVtLCBFbmFibGVTY3JvbGxCYXIsCglFbmFibGVXaW5kb3csIEludmFsaWRhdGVSZWN0LCBTZXRXaW5kb3dUZXh0QSwgV2luSGVscEE6IG5ldyByZWxheXMKCURyYXdUZXh0QSwgTW92ZVRvRXgsIEdldENsaWVudFJlY3QsIEludmFsaWRhdGVSZWN0LCBMb2FkQml0bWFwQS9XLAoJTG9hZEFjY2VsZXJhdG9yc0EvVywgTG9hZE1lbnVbSW5kaXJlY3RdQS9XLCBMb2FkU3RyaW5nQS9XOiBjaGFuZ2VkCgl0byBjb252ZXJ0IHBhcmFtZXRlcnMgb3IgbmFtaW5nIGNvbnZlbnRpb24KCgkqIFtpbmNsdWRlL2tlcm5lbDMyLmhdW2luY2x1ZGUvd2ludHlwZXMuaF0KCW1vdmVkIFdDSEFSLCBkZWZpbmVkIExQV1NUUgoKCSogW2luY2x1ZGUvc3RyaW5nMzIuaF1bd2luMzIvc3RyaW5nMzIuY11baW5jbHVkZS9zdHJ1Y3QzMi5oXQoJTmV3IGZpbGVzCgoJKiBbbG9hZGVyL21vZHVsZS5oXQoJTG9hZE1vZHVsZTogZXhpdCBhZnRlciByZXR1cm5pbmcgZnJvbSBQRV9Mb2FkTW9kdWxlCgoJKiBbbG9hZGVyL3BlX2ltYWdlLmNdCglteV93Y3N0b21iczogaXNhc2NpaSBkb2VzIG5vdCB3b3JrIG9uIExpbnV4IGZvciBVbmljb2RlCglQRV9Mb2FkSW1hZ2U6IEhhbmRsZSBkaXJlY3RvcmllcwoKCSogW21pc2MvdXNlcjMyLmNdCglVU0VSMzJfUkVDVDMydG8xNiwgVVNFUjMyX1JFQ1QxNnRvMzI6IG5ldyBmdW5jdGlvbnMKCWltcGxlbWVudGVkIG5ldyB1c2VyMzIgcmVsYXlzCgoJKiBbbWlzYy9uZXdmbnMuY10KCVdJTjMyX1dpbkhlbHBBOiBuZXcgZnVuY3Rpb24KCgkqIFt3aW4zMi9wYXJhbTMyLmNdCglOZXcgZmlsZQoKCSogW3dpbjMyL3Jlc291cmNlLmNdCglHZXRSZXNEaXJFbnRyeTogYWRkZWQgc3VwcG9ydCBmb3IgbmFtZWQgZW50cmllcwoJV0lOMzJfTG9hZEFjY2VsZXJhdG9yc1c6IGludm9rZSAqMzIgcmVzb3VyY2UgZnVuY3Rpb25zCglXSU4zMl9Mb2FkQml0bWFwQTogY29udmVydCBuYW1lIHRvIHVuaWNvZGUgaWYgYXBwcm9wcmlhdGUKCVdJTjMyX1BhcnNlTWVudTogbmV3IGZ1bmN0aW9uCglpbXBsZW1lbnRlZCBuZXcgcmVzb3VyY2UgZnVuY3Rpb25zIGZyb20gdXNlcjMyLnNwZWMKCldlZCBKYW4gMjQgMTg6MDk6MDAgMTk5NiBBbGV4IEtvcm9ia2EgPGFsZXhAcGhtMzAucGhhcm0uc3VueXNiLmVkdT4KCgkqIFtvYmplY3RzL2N1cnNvcmljb24uY10KCUdldEljb25JZCgpIGFuZCBMb2FkSWNvbkhhbmRsZXIoKSBmdW5jdGlvbnMuCgoJKiBbd2luZG93cy9tZGkuY10KCUJldHRlciBtYXhpbWl6YXRpb24gc3VwcG9ydCwgVHJhbnNsYXRlTURJU3lzQWNjZWwoKSBmdW5jdGlvbiwgCgltaXNjIGltcHJvdmVtZW50cy4KCgkqIFt3aW5kb3dzL2RlZnduZC5jXQoJRml4IGZvciBXTV9XSU5ET1dQT1NDSEFOR0VEIG1lc3NhZ2UgaGFuZGxlci4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJUmV3cm90ZSBXaW5kb3dGcm9tUG9pbnQoKSBmdW5jdGlvbi4KClN1biBKYW4gMjEgMTk5NiAxNzowNTowOSAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBmYXVpMDEuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbaW5jbHVkZS90b29saGVscC5oXSBbbWlzYy90b29saGVscC5jXQoJQWRkZWQgTm90aWZ5KFVuKVJlZ2lzdGVyLCBidXQgbm8gY2FsbGJhY2tzIHlldC4KCkZyaSBKYW4gMTkgMDE6NDM6MzcgMTk5NiBWaWN0b3IgU2NobmVpZGVyIDxyb290QHRhaWxvci5yb21hbi5vcmc+CgoJKiBbTWFrZWZpbGUuaW5dCglBZGRlZCB0YXJnZXQgZm9yIGxpYndpbmUuc28uMS4wLgoKCSogW2xpYnJhcnkvd2lubWFpbi5jXQoJRm9yIFdJTkVMSUJETEwsIF9XaW5NYWluIGp1c3QgcmV0dXJucyBoSW5zdGFuY2UgaW5zdGVhZCBvZiBjYWxsaW5nCglXaW5NYWluKCkuCgoJKiBbbWlzYy9tYWluLmNdCglGb3IgV0lORUxJQkRMTCwgcmVuYW1lZCBtYWluKCkgdG8gX3dpbmVfbWFpbigpIGZvciBjYWxsaW5nIGZyb20gdGhlCglzdHViIG1haW4gZnVuY3Rpb24uCgoJKiBbbGlicmFyeS93aW5lc3R1Yi5jXSAobmV3IGZpbGUpCglQcm92aWRlcyBhIHN0dWIgbWFpbigpIGZ1bmN0aW9uIGZvciB1c2luZyBsaWJ3aW5lLnNvLgoKVHVlIEphbiAxNiAxMTowNDozNCAxOTk2ICBBbmFuZCBLdW1yaWEgPGFrdW1yaWFAb3plbWFpbC5jb20uYXU+CgoJKiBbd2luc29ja2V0LmNdCglGaXggRVBFUk0gcHJvYmxlbS4KCgkqIFtnbG9iYWwuY10KCUF0dGVtcHQgdG8gZG8gc29tZSBzYW5pdHkgY2hlY2tpbmcgaW4gTWVtTWFuSW5mbygpLgoKCSogW0NoYW5nZWxvZ10KCUZpeCBjaGFuZ2Vsb2cgb3ZlcnNpZ2h0IGZvciBwcmV2aW91cyBlbnRyeS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gSmFuIDE0IDEzOjQ1OjIyIDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHN1bnNpdGUudW5jLmVkdT4KCgkqIFtjb25maWd1cmUuaW5dCglBZGRlZCBjaGVjayBmb3IgZ2NjIHN0cmVuZ3RoLXJlZHVjZSBidWcuCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJQ2hhbmdlZCBMaXN0Qm94RGlyZWN0b3J5KCkgdG8gdXNlIHRoZSBuZXcgRE9TIGZpbGUgZnVuY3Rpb25zLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUZpeGVkIHBhcmFtZXRlcnMgZm9yIERlbGV0ZU1lbnUoKSBjYWxsIGluIENoYW5nZU1lbnUoKS4KCgkqIFtkZWJ1Z2dlci9zdGFjay5jXQoJQWxzbyBkaXNwbGF5IGN1cnJlbnQgZnJhbWUgaW4gYmFjay10cmFjZS4KCgkqIFtmaWxlcy9kaXJlY3RvcnkuY10gW2ZpbGVzL2Rvc19mcy5jXSBbZmlsZXMvZHJpdmUuY10gW2ZpbGVzL2ZpbGUuY10KCUNvbXBsZXRlIHJld3JpdGUgb2YgdGhlIERPUyBmaWxlIGhhbmRsaW5nLgoJSW1wbGVtZW50ZWQgcGVyLXRhc2sgZmlsZSBoYW5kbGVzLgoJUmVtb3ZlZCBkZWZhdWx0IFo6IGRyaXZlOyBuZWVkcyB0byBiZSBwdXQgZXhwbGljaXRlbHkgaW4gd2luZS5pbmkKCWlmIGRlc2lyZWQuCgoJKiBbbG9hZGVyL21vZHVsZS5jXQoJRml4ZWQgZmlsZSBkZXNjcmlwdG9yIGxlYWsgaW4gTG9hZE1vZHVsZSgpLgoKCSogW2xvYWRlci90YXNrLmNdCglJbml0aWFsaXNlIFBEQiBmaWxlIGhhbmRsZSB0YWJsZSBpbiBUQVNLX0NyZWF0ZVRhc2soKS4KCUNsb3NlIGZpbGUgaGFuZGxlcyBvbiB0YXNrIHRlcm1pbmF0aW9uLgoJSW1wbGVtZW50ZWQgU2V0RXJyb3JNb2RlKCkuCgoJKiBbbWlzYy9uZXR3b3JrLmNdCglGaXhlZCBXTmV0R2V0Q29ubmVjdGlvbigpIHRvIHVzZSBHZXREcml2ZVR5cGUoKS4KCgkqIFttaXNjL3htYWxsb2MuY10KCUFkZGVkIGZ1bmN0aW9uIHhzdHJkdXAoKS4KCgkqIFttaXNjZW11L2ludDIxLmNdCglNYW55IGNoYW5nZXMgZm9yIG5ldyBET1MgZmlsZSBmdW5jdGlvbnMuCgoJKiBbbWlzY2VtdS9pbnRlcnJ1cHRzLmNdCglNb3ZlZCBET1NfR2V0RXF1aXBtZW50KCkgZnVuY3Rpb24gaW50byBJTlRfSW50MTFIYW5kbGVyKCkuCgoJKiBbd2luZG93cy93aW4uY10KCUJ1ZyBmaXg6IGNyZWF0ZSBzeXN0ZW0gbWVudSBiZWZvcmUgc2VuZGluZyBXTV9OQ0NSRUFURS4KCgkqIFsqLyouY10KCVJlcGxhY2VkIHN0cmNhc2VjbXAgYW5kIHN0cm5jYXNlY21wIGJ5IGxzdHJjbXBpIGFuZCBsc3RybmNtcGkgZm9yCgliZXR0ZXIgcG9ydGFiaWxpdHkuCgpTYXQgSmFuIDEzIDE2OjEzOjAyIDE5OTYgIEppbSBQZXRlcnNvbiA8anNwZXRlckBiaXJjaC5lZS52dC5lZHU+CgoJKiBbaW5jbHVkZS93aW50eXBlcy5oXQoJQWRkZWQgJ3R5cGVkZWYgSEdMT0JBTCBHT0JBTEhBTkRMRTsnLiAgVGhpcyBpcyBub3QgcHJlY2lzZWx5IGluIGxpbmUKCXdpdGggdGhlIHRydWUgd2luZG93cyAndHlwZWRlZiBIQU5ETEUgR0xPQkFMSEFORExFOycsIGJ1dCBJIGJlbGlldmUKCWl0IHNob3VsZCBzdWZmaWNlLgoKCSogW2luY2x1ZGUvd2luc29jay5oXQoJQWRkZWQgJyNpbmNsdWRlIDxhcnBhL2luZXQuaD4nIGZvciB2YXJpb3VzIGRlY2xhcmF0aW9ucy4gICcjaWZkZWYnLWVkCglvdXQgc29tZSBvbGQgc3R5bGUgaW50ZXJuZXQgYWRkcmVzcyAjZGVmaW5lJ3MuCgoJKiBbbG9hZGVyL3Rhc2suY10KCU1hZGUgTWFrZVByb2NJbnN0YW5jZSgpIHJldHVybiBmaXJzdCBwYXJhbWV0ZXIgI2lmZGVmIFdJTkVMSUIzMi4KCU1hZGUgRnJlZVByb2NJbnN0YW5jZSgpIGRvIG5vdGhpbmcgI2lmZGVmIFdJTkVMSUIzMi4KCScjaWZkZWYnLWVkIG91dCBUQVNLX0FsbG9jVGh1bmsoKSwgYXMgaXQgd2FzIHVudXNlZCBpbiBXSU5FTElCMzIuCgoJKiBbbGlicmFyeS9taXNjc3R1YnMuY10KCU1hZGUgR2V0V25kUHJvY0VudHJ5MTYoKSByZXR1cm4gQUNUSVZBVEVBUFBfY2FsbGJhY2soKSB3aGVuIGNhbGxlZAoJd2l0aCBuYW1lPSJBY3RpdmF0ZUFwcFByb2MiLiAgVGhpcyBoYXJkbHkgc2VlbXMgY29ycmVjdCwgYnV0IGl0J3MgbXkKCWJlc3QgZ3Vlc3MgYXMgdG8gaG93IHRoZSBlbXVsYXRvciByZXNwb25kcy4KClNhdCBKYW4gIDYgMTc6NTc6NDUgMTk5NiAgTWFydGluIHZvbiBMb2V3aXMgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIFtpZjE2MzIva2VybmVsMzIuc3BlY11bd2luMzIvcHJvY2Vzcy5jXQoJV0lOMzJfR2V0UHJvY0FkZHJlc3MsIExvYWRMaWJyYXJ5QTogbmV3IGZ1bmN0aW9ucwoKCSogW2lmMTYzMi9yZWxheTMyLmNdCglSRUxBWTMyX0dldEVudHJ5UG9pbnQ6IFJlbW92ZWQgY29kZSB0byBsb2FkIFBFIERMTHMKCgkqIFtpbmNsdWRlL3BlX2ltYWdlLmhdW2luY2x1ZGUvcGVfZXhlLmhdCglzdHJ1Y3QgcGVfZGF0YTogbmV3IGZpZWxkcyBiYXNlX2FkZHIsbG9hZF9hZGRyLHZtYV9zaXplLHBlX3JlbG9jCglzdHJ1Y3QgUEVfUmVsb2NfQmxvY2s6IG5ldyBzdHJ1Y3R1cmUKCgkqIFtsb2FkZXIvbW9kdWxlLmNdCglNT0RVTEVfUmVnaXN0ZXJNb2R1bGU6IG5ldyBmdW5jdGlvbgoKCSogW2xvYWRlci9wZV9pbWFnZS5jXQoJUEVfRmluZEV4cG9ydGVkRnVuY3Rpb24sUEVfR2V0UHJvY0FkZHJlc3M6IG5ldyBmdW5jdGlvbnMKCWZpeHVwX2ltcG9ydHM6IGV4cGVjdCBzdHJ1Y3Qgd19maWxlcyogbm93LCBmaWxsIGRsbHNfdG9faW5pdCwKCSAgICAgICAgICAgICAgIGxvYWQgUEUgRExMcwoJZG9fcmVsb2NhdGlvbnM6IG5ldyBmdW5jdGlvbnMKCWNhbGNfdm1hX3NpemU6IHJlbmFtZWQgZnJvbSBkdW1wX3RhYmxlCglQRV9Mb2FkSW1hZ2U6IHVzZSBtYWxsb2MgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBpbWFnZQoJUEVfSW5pdERMTDogZXhwZWN0IEhNT0RVTEUKCVBFX0luaXRpYWxpemVETExzOiBuZXcgZnVuY3Rpb24KCgkqIFtsb2FkZXIvdGFzay5jXQoJTkVfSW5pdGlhbGl6ZURMTHM6IGJyYW5jaCB0byBQRV9Jbml0aWFsaXplRExMcyBmb3IgUEUgbW9kdWxlcwoJR2V0RXhlUHRyOiBBY2NlcHQgUEUgbW9kdWxlcwoKCSogW21pc2MvY29tbWRsZy5jXQoJRklMRURMR19XTUNvbW1hbmQ6IHVucGFjayBXSU4zMiBXTV9DT01NQU5EIGFwcHJvcHJpYXRlbHkgZm9yIFdpbmVMaWIKClRodSBKYW4gIDQgMTE6MzY6MjEgMTk5NiAgTWFuZnJlZCBXZWljaGVsIDxNYW5mcmVkLldlaWNoZWxAbWNoLnNuaS5kZT4KCgkqIFttaXNjL3BvcnQuY10KCU5ldyBmaWxlIHdpdGggdXNsZWVwKCkgZnVuY3Rpb24gZm9yIFNWUjQuCgoJKiBbY29uZmlndXJlLmluXQoJQ2hlY2sgZm9yIHVzbGVlcCgpIGZ1bmN0aW9uLgoKVHVlIEphbiAwMiAxNDowMDowMCAxOTk2ICBBbmFuZCBLdW1yaWEgPGFrdW1yaWFAb3plbWFpbC5jb20uYXU+CgoJKiBbaWYxNjMyL3Rvb2xoZWxwLnNwZWNdIFtpbmNsdWRlL3Rvb2xoZWxwLmhdCgkgIFttaXNjL3VzZXIuY10gW3dpbmRvd3MvbWVzc2FnZS5jXQoJSW1wbGVtZW50IFRPT0xIRUxQLjgwIFRpbWVyQ291bnQuIEZpeCBHZXRUaWNrQ291bnQuCgoJKiBbd2luc29ja2V0LmNdCglGaXhlZCBFTk9FTlQgZXJyb3IuCgoJKiBbbWlzY2VtdS9kcG1pLmNdCglJbXBsZW1lbnQgRFBNSSBHZXQgUGFnZSBTaXplIChBWD0wNjA0LCBJTlQgMzEpCgoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJSW1wbGVtZW50IFRPT0xIRUxQLjcyIEdldE1lbU1hbkluZm8uCgpNb24gSmFuICAyIDEwOjMzOjAwIDE5OTYgIFRob21hcyBTYW5kZm9yZCA8dC5kLmcuc2FuZGZvcmRAcHJkcy1ncm4uZGVtb24uY28udWs+CgoJKiBbaWYxNjMyL2NhbGxiYWNrLmNdCglDYWxsV2luZG93UHJvYygpIC0gV2hlbiBjYWxsaW5nIFJFTEFZMzJfQ2FsbFdpbmRvd1Byb2MsIGNoZWNrCgl3aGV0aGVyIGxQYXJhbSBzaG91bGQgYmUgYSBTRUdQVFIsIGFuZCBpZiBzbyBjb252ZXJ0IGl0IHRvIG9uZS4KCgkqIFtpZjE2MzIvZ2RpLnNwZWNdIFtpZjE2MzIva2VybmVsMzIuc3BlY10gW2lmMTYzMi91c2VyMzIuc3BlY10KCU51bWVyb3VzIGZ1bmN0aW9ucyBhZGRlZCwgbW9zdGx5IGNhbGxzIHRvIG9yaWdpbmFsICh3aW4xNikKIAlmdW5jdGlvbnMuICBOb3RlIHRoYXQgc29tZSAobWFueSkgb2YgdGhlc2UgYXJlIHByb2JhYmx5IG5vdAogCXN0cmljdGx5IGNvcnJlY3QsIGJ1dCB3aXRoIHRoZXNlIGFkZGl0aW9ucyBmcmVlY2VsbCB3aWxsIGF0IGxlYXN0CiAJZGlzcGxheSBpdHMgbWFpbiB3aW5kb3cgdGhvdWdoIGl0IGlzIGdhcmJsZWQuCgoJKiBbaWYxNjMyL3dpbnByb2NzLnNwZWNdCglDb21wbGV0ZWx5IHJld3JpdHRlbiAtIGFsbCBXbmRQcm9jcyBub3cgaGF2ZSB3aW4zMiB2ZXJzaW9ucyB0bwoJaGVscCB3aXRoIHRoZSBscGFyYW0gU0VHUFRSIGZpeCBpbiBjYWxsYmFjay5jCgoJKiBbaW5jbHVkZS9rZXJuZWwzMi5oXQoJTFBUQ1NUUiBkZWZpbmVkLgoKCSogW2luY2x1ZGUvcGVleGUuaF0KCURlZmluaXRpb24gb2YgUEVfRXhwb3J0X0RpcmVjdG9yeSBhbWVuZGVkLgoKCSogW2luY2x1ZGUvcmVzb3VyY2UzMi5oXQoJTmV3IGZpbGUuCgoJKiBbaW5jbHVkZS9zdGFja2ZyYW1lLmhdCglEZWZpbml0aW9uIG9mIE1BS0VfU0VHUFRSIG1hY3JvICNpZmRlZidkIG91dCBhbmQgcmVwbGFjZWQgd2l0aAoJcHJvdG90eXBlIGZvciByZXBsYWNlbWVudCBmdW5jdGlvbiBpbiBtZW1vcnkvc2VsZWN0b3IuYyB3aGljaAoJY2FuIG9wZXJhdGUgb24gYW55IGdpdmVuIG1lbW9yeSBhZGRyZXNzLiBUaGlzIGlzIGN1cnJlbnRseQoJcmVxdWlyZWQgZm9yIHdpbjMyIHN1cHBvcnQuIEl0IGlzIGEgZHJlYWRmdWwgY2x1ZGdlLCBhbmQgd2lsbAoJY2VydGFpbmx5IHNsb3cgZG93biBvdGhlciBwcm9ncmFtcy4gSWYgeW91IGFyZSBub3QgaW50ZXJlc3RlZAoJaW4gd2luMzIgZGV2ZWxvcG1lbnQgeW91IG1heSB3aXNoIHRvIHJldmVyc2UgdGhpcyBwYXRjaC4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCURlZmluaXRpb24gb2YgU1dfU0hPV0RFRkFVTFQgYWRkZWQuCgoJKiBbbG9hZGVyL3BlX2ltYWdlLmNdCglFeHRlbnNpdmUgcmV3cml0ZXMgb2YgeG1tYXAoKSBmaXh1cF9pbXBvcnRzKCkuCglQRV9Mb2FkSW1hZ2UoKSAtIGluaXRpYWxpc2F0aW9uIG9mIGJzcyBhZGRlZCwgZXh0cmFjdGlvbiBvZgoJbW9kdWxlIG5hbWUgZml4ZWQsIGluaXRpYWxpc2F0aW9uIG9mIERMTCBhZGRlZC4KCVBFX0luaXRETEwoKSAtIG5vdyBkb2VzIHNvbWV0aGluZy4KCVBFX1dpbjMyQ2FsbFRvU3RhcnQoKSAtIGluaXRpYWxpc2F0aW9uIG9mIFRFQiBwb2ludGVkIHRvIGJ5CglmcyBhZGRlZC4KCVBFX0luaXRURUIoKSBjcmVhdGVkIHRvIHBlcmZvcm0gVEVCIGluaXRpYWxpc2F0aW9uLgoKCSogW21lbW9yeS9zZWxlY3Rvci5jXSAKCU5ldyBmdW5jdGlvbiBNQUtFX1NFR1BUUigpIC0gc2VlIGluY2x1ZGUvc3RhY2tmcmFtZS5oIGFib3ZlLgoKCSogW21pc2MvdXNlcjMyLmNdCglVU0VSMzJfUmVnaXN0ZXJDbGFzc0EoKSwgQ3JlYXRlV2luZG93RXhBKCkgbWVtb3J5IGFsbG9jYXRpb24KCW1ldGhvZCBjaGFuZ2VkLiBUaGlzIGlzIHByb2JhYmx5IG5vdyB1bm5lY2Vzc2FyeSB3aXRoIHRoZQoJbmV3IE1BS0VfU0VHUFRSIGhhbmRsaW5nIGNvZGUuCglVU0VSMzJfRGVmV25kUHJvY0EoKSByZW1vdmVkIHRvIHdpbjMyL3dpbnByb2NzLmMKCVVTRVIzMl9UcmFuc2xhdGVNZXNzYWdlIGFkZGVkLgoKCSogW3Rvb2xzL2J1aWxkLmNdCgloYW5kbGluZyBvZiB3aW4zMiBzcGVjIGZpbGVzIGNoYW5nZWQgdG8gc3VwcG9ydCBnY2MyLjYuWAoJdGhpcyByZXF1aXJlcyBvcHRpbWlzYXRpb25zIHRvIGJlIGRpc2FibGVkLgoKCSogW3dpbjMyL3Jlc291cmNlLmNdIFt3aW4zMi9uZXdmbnMuY10gW3dpbjMyL2hlYXAuY10gW3dpbjMyL3dpbnByb2NzLmNdCglOZXcgZmlsZXMuCgoJKiBbd2luMzIvTWFrZWZpbGUuaW5dCglOZXcgZmlsZXMgaGVhcC5jLCBuZXdmbnMuYywgcmVzb3VyY2UuYyBhbmQgd2lucHJvY3MuYyBhZGRlZCB0byBidWlsZC4KCgkqIFt3aW4zMi9maWxlLmNdCglOZXcgZnVuY3Rpb24gVzMyX1NldEhhbmRsZUNvdW50LgoKCSogW3dpbjMyL2luaXQuY10KCVdJTjMyX0dldE1vZHVsZUhhbmRsZSgpIC0gbm93IHJldHVybnMgaGFuZGxlIG9mIHJ1bm5pbmcgcHJvY2VzcwoJaWYgY2FsbGVkIHdpdGggTlVMTC4KCUdldFN0YXJ0dXBJbmZvQSgpIC0gc2V0IGNiUmVzZXJ2ZWQyIHRvIDAuCgoJKiBbd2luMzIvbWVtb3J5LmNdCglWaXJ0dWFsQWxsb2MoKSAtIHNldCBtbWFwKCkgZmlsZSBwYXJhbWV0ZXIgdG8gLTEgaW5zdGVhZCBvZiAwIHRvIG1ha2UKCWl0IHdvcmsgd2l0aCBGcmVlQlNELiBBbHNvIGNoZWNrIGZvciByZXR1cm4gdmFsdWUuIFJlbW92ZWQgZXh0cmEKCXJldHVybi4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJU2hvd1dpbmRvdygpIC0gU1dfU0hPV0RFRkFVTFQgaGFuZGxpbmcga2x1ZGdlZCBpbi4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU2F0IERlYyAyMyAxODoxNTo1OSAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBzdW5zaXRlLnVuYy5lZHU+CgoJKiBbY29uZmlndXJlLmluXSBbTWFrZWZpbGUuaW5dIFt0b29scy9pbnN0YWxsLXNoXQoJTmV3ICdpbnN0YWxsJyB0YXJnZXQgaW5zdGFsbHMgV2luZSBiaW5hcnksIGxpYnJhcnkgYW5kIG1hbiBwYWdlLgoJTGlicmFyeSBpcyBub3cgbW9yZSBsb2dpY2FsbHkgbmFtZWQgbGlid2luZS5hLgoJU3BsaXQgdG9vbGtpdC8gZGlyZWN0b3J5IGludG8gbGlicmFyeSAoZm9yIGxpYnJhcnkgY29kZSkgYW5kCglsaWJ0ZXN0IChmb3IgdGVzdCBwcm9ncmFtcykuCgoJKiBbY29udHJvbHMvZWRpdC5jXQoJUXVpY2sgaGFjayB0byBwYXJ0aWFsbHkgc3VwcG9ydCBFTV9QQVNTV09SRCBzdHlsZSAoYXZvaWRzCglkaXNwbGF5aW5nIHlvdXIgcGFzc3dvcmRzIG9uIHRoZSBzY3JlZW4gd2hlbiB0ZXN0aW5nIHByb2dyYW1zLi4uKQoKCSogW2NvbmZpZ3VyZS5pbl0gW2NvbnRyb2xzL21lbnUuY10gW2luY2x1ZGUvcmVzb3VyY2UuaF0KCSAgW21pc2MvY29tbWRsZy5jXSBbbWlzYy9vbGUybmxzLmNdIFttaXNjL3NoZWxsLmNdIFt3aW5kb3dzL21zZ2JveC5jXQoJTGFuZ3VhZ2UgaXMgbm93IGEgcnVuLXRpbWUgb3B0aW9uICh3aW5lIC1sYW5ndWFnZSB4eCkuCgoJKiBbZGVidWdnZXIvZGJnLnldCglEdW1wIHNvbWUgbW9yZSBkZWJ1Z2dpbmcgaW5mbyBvbiBjcmFzaC4KCgkqIFttaXNjL3Byb2ZpbGUuY10KCU9ubHkgY29uc2lkZXIgJzsnIGFzIGEgY29tbWVudCBpZiBpdCdzIHRoZSBmaXJzdCBub24tYmxhbmsKCWNoYXJhY3RlciBvbiB0aGUgbGluZS4KCgkqIFttaXNjZW11L2RwbWkuY10KCU1vcmUgZGVidWdnaW5nIGluZm8gZm9yIHJlYWwtbW9kZSBjYWxsYmFjay4KCgkqIFtvYmplY3RzL2dkaW9iai5jXQoJUmV3cm90ZSBFbnVtT2JqZWN0cygpIHRvIGRvIHRoZSBSaWdodCBUaGluZy4KCgkqIFtyZXNvdXJjZXMvc3lzcmVzKl0KCU5ldyBkaXJlY3RvcnkgY29udGFpbmluZyBzeXN0ZW0gcmVzb3VyY2VzLgoKRnJpIERlYyAyMiAxMToyNDozOSBHTVQgMTk5NSAgSm9obiBIYXJ2ZXkgPGpvaG5AZGl2aXNpb24uY28udWs+CgoJKiBbd2luMzIvZmlsZS5jXSBbd2luMzIvbWVtb3J5LmNdCiAgICAgICAgVW5peHdhcmUgZG9lc24ndCBoYXZlIE1BUF9BTk9OIGlmZGVmZWQgb3V0IGZvciBub3cuCgoJKiBbbWlzYy9kb3NfZnMuY10KICAgICAgICBET1NfR2V0RG9zRmlsZU5hbWUgZGlkbid0IHRydW5jYXRlIHBhdGhzIHN0YXJ0aW5nIC4vIHByb3Blcmx5LgoKCSogW3Rvb2xzL2J1aWxkLmNdCglQcm9kdWNlcyBhc3NlbWJseSBjb2RlIHRoYXQgd29ya3Mgd2l0aCB0aGUgdW5peHdhcmUgYXNzZW1ibGVyLgoKV2VkIERlYyAyMCAyMjoyMjoyOSArMDEwMCAxOTk1ICBNb3J0ZW4gV2VsaW5kZXIgPHRlcnJhQGRpa3UuZGs+CgoJKiBbbWlzY2VtdS9pbnN0ci5jXQoJSU5TVFJfR2V0T3BlcmFuZEFkZHI6IDE2LWJpdCBhZGRyZXNzZXMgc2hvdWxkIGJlIG1hc2tlZCB0byAxNiBiaXRzLgoKCSogW21pc2MvZG9zX2ZzLmNdCglET1NfcmVhZGRpciBzaG91bGQgYWx3YXlzIHJldHVybiBkaXJlY3RvcmllcywgZXZlbiBpZiB0aGV5IGRvbid0CiAJbWF0Y2ggdGhlIGZpbGUgbmFtZSBtYXNrLgoKVHVlIERlYyAxOSAxODowMDowMCAxOTk1ICBVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50aC1kYXJtc3RhZHQuZGU+CgkKCSogW21pc2MvZXhlYy5jXQoJR2l2ZSBhcmd1bWVudHMgdG8gd2luaGVscC4KCgkqIFttaXNjZW11L2ludDIxLmNdCglJbXBsZW1lbnRlZCBJbnRlcnJ1cHQgMjEgQVg9NkMwMCBFWFRFTkRFRCBPUEVOL0NSRUFURS4KCUNyZWF0ZWQgZnVuY3Rpb24gRXh0ZW5kZWRPcGVuQ3JlYXRlRmlsZS4KCUdpdmUgZm9yIHNvbWUgV2luZG93czk1IGludGVycnVwdHMgdGhlIHJldHVybiB2YWx1ZSAnbm90CglpbXBsZW1lbnRlZCcuCgpTdW4gRGVjIDE3IDE2OjUxOjU2IEVTVCAxOTk1ICBKaW0gUGV0ZXJzb24gPGpzcGV0ZXJAYmlyY2guZWUudnQuZWR1PgoKCSogW2luY2x1ZGUva2VybmVsMzIuaF0gW2luY2x1ZGUvd2luZG93cy5oXQoJTW92ZWQgdGhlIHR5cGVkZWZzIGZvciBTWVNURU1USU1FIGFuZCBMUFNZU1RFTVRJTUUgZnJvbQogCWluY2x1ZGUva2VybmVsMzIuaCB0byBpbmNsdWRlL3dpbmRvd3MuaCBhbmQgZGVjbGFyZWQgdGhlIG5ldyBXaW4zMgogCUFQSSBmdW5jdGlvbnMgU2xlZXAoKSwgR2V0TG9jYWxUaW1lKCksIGFuZCBHZXRTeXN0ZW1UaW1lKCkuCiAgCVJlZGVmaW5lZCBJTkZJTklURSBhcyAweEZGRkZGRkZGIGlmIFdJTkVMSUIzMi4KCgkqIFtyYy9yYyAobmV3IGZpbGUpXQoJQ3JlYXRlZCB0aGUgc2hlbGwgc2NyaXB0ICdyYycsIHdoaWNoIHNob3VsZCBzaW1wbGlmeSByZXNvdXJjZQogCWNvbXBpbGF0aW9uLgoKCSogW3dpbjMyL2Vudmlyb25tZW50LmNdCglLbHVkZ2VkIGFyb3VuZCBhbiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIHdpbmVfZmlsZXMuICBUaGlzIGNoYW5nZQogCXNob3VsZCBiZSBmaXhlZCBzb21lIHRpbWUuCgoJKiBbd2luMzIvdGltZS5jXSBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdCglBZGRlZCB0aGUgZnVuY3Rpb25zIEdldFN5c3RlbVRpbWUoKSwgYW5kIFNsZWVwKCkuCgoJKiBbbWlzY2VtdS9pbnQyMS5jXQoJUmVuYW1lZCBzdGF0aWMgZnVuY3Rpb24gR2V0U3lzdGVtVGltZSB0byBJTlQyMV9HZXRTeXN0ZW1UaW1lIHRvCiAJYXZvaWQgY29uZmxpY3RzIHdpdGggdGhlIEFQSSBmdW5jdGlvbiBvZiB0aGUgc2FtZSBuYW1lLgoKCSogW2luY2x1ZGUvd2ludHlwZXMuaF0KCUFkZGVkIHRoZSBTUEZNVCBkZWZpbml0aW9uIGZvciBwcmludGYgc3RhdGVtZW50cy4KCgkqIFttaXNjL3NoZWxsLmNdIFtpbmNsdWRlL3NoZWxsLmhdCglDaGFuZ2VkIEVSUk9SXyogZGVmaW5lcyB0byBTSEVMTF9FUlJPUl8qLCBhcyB0aGV5IHdlcmUgY29uZmxpY3RpbmcKIAl3aXRoIHRoZSBvbmVzIGluIGluY2x1ZGUvd2luZXJyb3IuaC4gIFRoZXkgc2hvdWxkIHByb2JhYmx5IHVzZSB0aGUKIAl2ZXJzaW9ucyBpbiB3aW5lcnJvci5oLCBidXQgSSdtIG5vdCBjZXJ0YWluLCBhbmQgdGhhdCBjYW4gYmUgZG9uZQogCWxhdGVyLgoKCSogW3dpbmRvd3MvbWRpLmNdCglUcmFuc2xhdGVkIFdNX01ESUFDVElWQVRFKD8sKExPaHduZCxISWh3bmQpKSBtZXNzYWdlcyB0bwogCVdNX01ESUFDVElWQVRFKEhJaHduZCxMT2h3bmQpIGZvciBXSU5FTElCMzIuICBUaGUgPyBwYXJhbWV0ZXIKIAkoYm9vbGVhbikgd2FzIGRpc2NhcmRlZCB3aXRoIHRoaXMgdHJhbnNsYXRpb24uICBUcmFuc2xhdGVkIGhhbmRsZXIKIAlvZiBXTV9NRElTRVRNRU5VKHJlZiwobG9ITUVOVSxoaUhNRU5VKSkgdG8gaGFuZGxlCiAJV01fTURJU0VUTUVOVShsb0hNRU5VLCBoaUhNRU5VKSBtZXNzYWdlcyBpbiBXSU5FTElCMzIgKHJlZiBhc3N1bWVkCiAJZmFsc2UsIGNhbGwgRHJhd01lbnVCYXIoKSBpZiBkZXNpcmVkKS4KCgkqIFsqLypdCglHZW5lcmFsIGV4cGxpY2l0IGNhc3RzIGFuZCBtb3JlIHJpZ2lkIHR5cGluZyB0byByZW1vdmUgd2FybmluZ3MuCgoJKiBbaW5jbHVkZS93aW5wb3MuaF0gW3dpbmRvd3Mvd2lucG9zLmNdCglDaGFuZ2VkIHJldHVybiB0eXBlIG9mIFdJTlBPU19DaGFuZ2VBY3RpdmVXaW5kb3cgdG8gQk9PTC4KCgkqIFtpbmNsdWRlL2NvbW1kbGcuaF0gW21pc2MvY29tbWRsZy5jXQoJQWRkZWQgcHJvdG90eXBlcyBmb3IgQ2hvb3NlQ29sb3IoKSwgQ29tbURsZ0V4dGVuZGVkRXJyb3IoKSwKIAlGaW5kVGV4dCgpIEdldEZpbGVUaXRsZSgpLCBHZXRPcGVuRmlsZU5hbWUoKSwgR2V0U2F2ZUZpbGVOYW1lKCksCiAJUHJpbnREbGcsIGFuZCBSZXBsYWNlVGV4dCgpLgoJUmVuYW1lZCB0aGUgQ29tbURsZ0V4dGVuZEVycm9yKCkgZnVuY3Rpb24gdG8gQ29tbURsZ0V4dGVuZGVkRXJyb3IoKS4KCU1hZGUgR2V0RmlsZVRpdGxlIHJldHVybiBhIHNob3J0LCBhcyBwZXIgdGhlIEFQSSBkZWZpbml0aW9uLgoKCSogW01ha2VmaWxlLmluXQoJQWRkZWQgbGluZSB0byBjbGVhbiBhbmQgZGlzdGNsZWFuIHRoYXQgcmVtb3ZlcyB0ZW1wb3JhcmllcyBmcm9tCiAJdGhlIGluY2x1ZGUgZGlyZWN0b3J5LgoKU2F0IERlYyAxNiAxOTozOToxNCBNRVQgMTk5NSAgU3RlZmZlbiBNb2VsbGVyIDxzbW9lMDAyNEByei51bmktaGlsZGVzaGVpbS5kZT4KCgkqIFtjb250cm9scy9lZGl0LmNdCglBbG1vc3QgcmV3cm90ZSBFRElUX0dldExpbmVNc2cuCgpTYXQgRGVjIDE2IDEzOjUxOjQ4IE1TVCAxOTk1ICBBbmRyZXcgVGF5bG9yIDxhbmRyZXdAcmlzY2FuLmNvbT4KCgkqIFt3aW5kb3dzL21kaS5jXQoJRml4ZWQgTURJVGlsZSgpIGJ1ZyB0aGF0IG9jY3VycyB3aGVuIDAgd2luZG93cyBhcmUgcHJlc2VudCBvciBhbGwKCXdpbmRvd3MgYXJlIG1pbmltaXplZC4KCldlZCBEZWMgMTIgMjM6MzA6MDAgMTk5NSAgVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudGgtZGFybXN0YWR0LmRlPgoKCSogW21pc2MvcHJvZmlsZS5jXQogICAgICAgIFRyeSBoYXJkZXIgdG8gZmluZCBmaWxlcywgZXNwZWNpYWxseSBpbiB0aGUgd29ya2luZyBkaXJlY3RvcnkuCglMb29rIGluICRIT01FLy53aW5lIHRvbyBhbmQgY3JlYXRlIGl0IHRoZXJlIGlmIGl0IGlzbid0IGZvdW5kLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpNb24gRGVjIDExIDE5OjA4OjU1IDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHN1bnNpdGUudW5jLmVkdT4KCgkqIFttaXNjL2xzdHIuY10KCVJlcGxhY2VkIHdpbmVfc3RybmNweSgpIGJ5IGEgMzItYml0IHZlcnNpb24gb2YgbHN0cmNweW4oKSwgc2luY2UKIAl0aGV5IGRvIHRoZSBzYW1lIGpvYi4KCgkqIFt0b29scy9idWlsZC5jXQoJRml4ZWQgX19hdHRyaWJ1dGVfXygoc3RkY2FsbCkpIHRvIG1ha2UgaXQgY29tcGlsZSB3aXRoIGdjYwoJdmVyc2lvbnMgdW5kZXIgMi43LiBEb2Vzbid0IG1lYW4gaXQgd2lsbCBydW4gT0sgdGhvdWdoLi4uCgpTYXQgRGVjIDA5IDEzOjIyOjU4IDE5OTUgIENhbWVyb24gSGVpZGUgIDxoZWlkZUBlZS51YWxiZXJ0YS5jYT4KCgkqIFtpbmNsdWRlL2tlcm5lbDMyLmhdIFtpbmNsdWRlL3dpbmVycm9yLmhdCglBZGRlZCBmaWxlIGF0dHJpYnV0ZSBkZWZpbml0aW9ucyBhbmQgbW9yZSBlcnJvciBjb2Rlcy4KCgkqIFt3aW4zMi9lcnJvci5jXQoJQWRkZWQgc29tZSBydWRpbWVudGFyeSBlcnJuby10by1XaW4zMiBlcnJvciBjb252ZXJzaW9uCgljb2RlLgoKCSogW3dpbjMyL2ZpbGUuY10KCUFkZGVkIHRvIEdldEZpbGVJbmZvcm1hdGlvbkJ5SGFuZGxlLCBmaWxsZWQgaW4gc29tZSBrbm93bgoJZXJyb3IgY29kZXMsIGFuZCBzd2l0Y2hlZCB0byBkcHJpbnRmX3dpbjMyLgoKCSogW3dpbjMyL3RpbWUuY10KCUFkZGVkIEdldExvY2FsVGltZS4KCkZyaSBEZWMgIDggMTQ6Mzc6MzkgMTk5NSAgSmltIFBldGVyc29uIDxqc3BldGVyQGJpcmNoLmVlLnZ0LmVkdT4KCgkqIFtjb250cm9scy9jb21iby5jXQoJQ29udmVydGVkIGZ1bmN0aW9ucyBvZiB0aGUgdHlwZSBMT05HIF8oSFdORCxXT1JELExPTkcpIHRvIHRoZSB0eXBlCglMUkVTVUxUIF8oSFdORCxXUEFSQU0sTFBBUkFNKSB3aGVyZSBuZWVkZWQuCgoJKiBbaW5jbHVkZS9saWJyZXMuaF0KCVJlc3RydWN0dXJlZCBsaWJyZXMgcHJvdG90eXBlcyB0byBjbG9zZXIgbWF0Y2ggdGhlIHdpbmRvd3MgQVBJLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJQ2hhbmdlZCBzZXZlcmFsIEFQSSBwcm90b3R5cGVzJyBwYXJhbWV0ZXIgdHlwZXMgZnJvbSAnc2hvcnQnIHRvIElOVCwKCXdoaWNoIGlzICNkZWZpbmVkIGFzIHNob3J0IGluIHRoZSBlbXVsYXRvciwgYnV0IGlzIGEgbm9ybWFsIGludCBpbgoJV0lORUxJQjMyLiAgQWxzbyBjaGFuZ2VkIFNFR1BUUiBmcm9tIERXT1JEIHRvIHZvaWQqIHdoZW4gV0lORUxJQjMyLgoJKFRoaXMgY3JlYXRlcyBhIGxvdCBvZiB3YXJuaW5ncyBhdCBsaWJyYXJ5LWNvbXBpbGUgdGltZSwgYnV0IGxlc3MKCXdhcm5pbmdzIGF0IGFwcC1jb21waWxlIHRpbWUuICBJJ2xsIHJlbW92ZSB0aGUgd2FybmluZ3Mgc29vbi4pCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglGaXhlZCBwYXJhbWV0ZXIgbWlzbWF0Y2ggaW4gY2FsbCB0byBMSUJSRVNfRmluZFJlc291cmNlKCkuICBDaGFuZ2VkCgl2YXJpb3VzIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgTElCUkVTXyogQVBJIGZ1bmN0aW9ucy4KCgkqIFtsb2FkZXIvc2lnbmFsLmNdCglEZWxldGVkIGxvY2FsICdpJyBmcm9tIHdpbl9mYXVsdCgpLCBzaW5jZSBpdCB3YXMgdW51c2VkLgoKCSogW29iamVjdHMvYml0Ymx0LmNdCglNaXJyb3JlZCBjaGFuZ2VzIHRvIGluY2x1ZGUvd2luZG93cy5oIG1lbnRpb25lZCBhYm92ZS4KCgkqIFt0b29sa2l0L2hlbGxvMy5jXQoJQ2hhbmdlZCBMb2FkTWVudUluZGlyZWN0KCkgY2FsbCB0byBMb2FkTWVudSgpIHRvIHRlc3QgdGhlIG5ldwoJcmVzb3VyY2UgcmVnaXN0cmF0aW9uIHRlY2huaXF1ZS4KCgkqIFt0b29sa2l0L2xpYnJlcy5jXQoJUmVtb3ZlZCBkZWZpbml0aW9uIG9mICdzdHJ1Y3QgcmVzb3VyY2UnIGFuZCBmaXhlZCBidWdzIGluIHRoZSByZXNvdXJjZQoJaW1wbGVtZW50YXRpb24uICBJbXBsZW1lbnRlZCBMSUJSRVNfRmluZFJlc291cmNlLgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCU1pcnJvcmVkIGNoYW5nZXMgdG8gaW5jbHVkZS93aW5kb3dzLmggbWVudGlvbmVkIGFib3ZlLgoKVGh1IERlYyAgNyAyMzoxNTo1NiAxOTk1ICAgICBNYXJ0aW4gdm9uIExvZXdpcyA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUxPQ0FMX0hlYXBFeGlzdHM6IENoYW5nZWQgcGFyYW1ldGVyIHRvIEhBTkRMRS4gRm9yIFdpbmVMaWIsIHJldHVybiB0cnVlCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJQ3JlYXRlTGlzdEJveFN0cnVjdDogSW5pdGlhbGl6ZSBIZWFwU2VsIHRvIDAgZm9yIFdpbmVMaWIKCgkqIFtpbmNsdWRlL2xpc3Rib3guaF0KCWNoYW5nZSBIZWFwU2VsIGZyb20gV09SRCB0byBIQU5ETEUKCgkqIFtpbmNsdWRlL3Jlc291cmNlLmhdW3JjL3dpbmVyYy5jXQoJc3RydWN0IFJlc291cmNlVGFibGU6IHJlbW92ZWQKCXN0cnVjdCByZXNvdXJjZTogbW92ZWQgdG8gaGVhZGVyIGZpbGUKCWF1dG9yZWdpc3RlciByZXNvdXJjZXMgaWYgc3VwcG9ydGVkIGJ5IGNvbXBpbGVyCgoJKiBbbWVtb3J5L2xvY2FsLmhdCglMT0NBTF9HZXRIZWFwOiBleHBlY3QgSEFORExFIHJhdGhlciB0aGFuIFdPUkQKCQoJKiBbdG9vbGtpdC9NYWtlZmlsZS5pbl0KCUFkZCBBTExDRkxBR1MgdG8gbWFrZSBoZWxsbzMKCgkqIFt0b29sa2l0L2hlYXAuY10KCUxvY2FsRnJlZSwgSEVBUF9GcmVlOiBoYW5kbGUgMCBwYXJhbWV0ZXIgZ3JhY2VmdWxseQoKV2VkIERlYyAwNiAxNTozNDoyMyAxOTk1ICBHcmVnIENvb3BlciA8Y29vcGVyQGltYS1pbmMuY29tPgoKCSogW21pc2Mvd2luc29ja2V0LmNdCglGaXhlZCB0aGUgbXNnc25kIGFuZCBtc2dyY3YgZXJyb3JzIHRoYXQgd2luc29jayBwcm9ncmFtcyBnZXQuCgpXZWQgRGVjIDA2IDEyOjQ3OjIzIE1FVCAxOTk1IFN2ZW4gVmVyZG9vbGFlZ2UgPHNraW1vQGRucy51ZnNpYS5hYy5iZT4KCQoJKiBbaWYxNjMyL2tlcm5lbC5zcGVjXQoJRml4ZWQgX2hyZWFkIGFuZCBfaHdyaXRlIHJldHVybiB0eXBlCgoJKiBbaWYxNjMyL3JlbGF5MzIuY10gW2xvYWRlci9wZV9pbWFnZS5jXQoJSGFja2VkIGxvYWRpbmcgb2YgUEUtZGxsJ3MgaW4KCgkqIFt3aW4zMi9hZHZhcGkuY10KCUFkZGVkIHN0dWJzIGZvciBSZWdDcmVhdGVLZXlFeCwgUmVnU2V0VmFsdWVFeCwgUmVnUXVlcnlWYWx1ZUV4CgoJKiBbd2luMzIvZmlsZS5jXQoJQWRkZWQgc3R1YnMgZm9yIE9wZW5GaWxlTWFwcGluZywgQ3JlYXRlRmlsZU1hcHBpbmcsIE1hcFZpZXdPZkZpbGVFeAoKCSogW3dpbjMyL3Byb2Nlc3MuY10KCUFkZGVkIHN0dWJzIGZvciBDcmVhdGVNdXRleEEsIFJlbGVhc2VNdXRleCwgQ3JlYXRlRXZlbnRBLAoJV2FpdEZvclNpbmdsZU9iamVjdCwgRHVwbGljYXRlSGFuZGxlLCBHZXRDdXJyZW50UHJvY2VzcwoJCk1vbiBEZWMgMDQgMTM6MDY6MzcgMTk5NSAgIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoKCSogW2luY2x1ZGUvd2luZS5oXSBbbWlzYy9sc3RyLmNdCglEZWZpbmUgd2luZV9zdHJuY3B5KCkuIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcGFkIHRoZSBidWZmZXIgd2l0aCAKCXplcm9lcyBsaWtlIEdOVSBzdHJuY3B5KCksIHdoaWNoIG1pZ2h0IGJyZWFrIHNvbWUgV2luZG93cyBwcm9ncmFtcwoJdGhhdCBwYXNzIGJvZ3VzIHNpemUgYXJndW1lbnRzLgoKCSogW2xvYWRlci9tb2R1bGUuY106IEdldE1vZHVsZUZpbGVOYW1lKCksCglbbWlzYy9jb21tZGxnLmNdOiBHZXRGaWxlVGl0bGUoKSwKCVttaXNjL2tleWJvYXJkLmNdLCBbbWlzYy9sc3RyLmNdOiBsc3RyY3B5bigpLAoJW21pc2Mvb2xlMm5scy5jXSwgW21pc2MvcHJvZmlsZS5jXSwgW211bHRpbWVkaWEvbWNpc3RyaW5nLmNdLAoJW211bHRpbWVkaWEvbW1zeXN0ZW0uY10sIFtvYmplY3RzL2ZvbnQuY106CglVc2Ugd2luZV9zdHJuY3B5KCkgd2hlcmUgc3RyaW5ncyBhcmUgcmV0dXJuZWQgdG8gV2luZG93cyBwcm9ncmFtcy4KCQoJKiBbb2JqZWN0cy9tZXRhZmlsZS5jXQoJUGxheU1ldGFmaWxlKCk6IENsZWFyIHRoZSBoYW5kbGUgdGFibGUgYmVmb3JlIHVzaW5nIGl0LgoKCSogW21pc2Mvc2hlbGwuY10gW21pc2MvbWFpbi5jXQoJUmVuYW1lIFNIRUxMX1JlZ0NoZWNrRm9yUm9vdCgpIHRvIFNIRUxMX0luaXQoKSBhbmQgY2FsbCBpdCBmcm9tIG1haW4oKS4KCQoJKiBbbWlzYy9wcm9maWxlLmNdCglsb2FkKCk6IE5lZWQgdG8gaGFuZGxlIGNvbW1lbnRzLgoJCgkqIFt0b29sa2l0L2xpYnJlcy5jXQoJTWFrZSBpdCBjb21waWxlLgoJCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJVXNlIE1BS0VfU0VHUFRSIG1hY3JvIGluIHR3byBwbGFjZXMgd2hlcmUgYSB1c2VyIGhlYXAgYmxvY2sgdXNlZAoJdG8gYmUgYWxsb2NhdGVkIGluc3RlYWQuCgpTYXQgRGVjIDAyIDE2OjQzOjQzIDE5OTUgUmFtb24gR2FyY2lhIDxyYW1vbkBpZTMuY2x1YnMuZXRzaXQudXBtLmVzPgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglJbiBmdW5jdGlvbiBTZXRXaW5kb3dQb3M6IGRvIG5vdCByZWRyYXcgdGhlIHBhcmVudCBvZgoJYSB3aW5kb3cgaWYgdGhlIHNwZWNpZmllZCB3aW5kb3cgaXMgcGxhY2VkIG9uIHRoZSB0b3AuCglUaGlzIGF2b2lkcyB0aGF0IFNob3dXaW5kb3coaHduZCwxKSBoaWRlcyBod25kIGluc3RlYWQKCW9mIHNob3dpbmcgaXQuCgpTYXQgRGVjIDAyIDExOjAwOjAwIDE5OTUgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbd2luZG93cy9zY3JvbGwuY10KCU5vdyBpdCBjYW4gc2Nyb2xsIGNoaWxkcmVuIGFsb25nIHdpdGggdGhlIGNsaWVudCByZWdpb24gb2YgcGFyZW50IAogICAgICAgIHdpbmRvdy4gVHJpZWQgdG8gb3B0aW1pemUgdXBkYXRlIHJlZ2lvbiBjYWxjdWxhdGlvbi4gCgoJKiBbd2luZG93cy9tZGkuY10KCVNjcm9sbENoaWxkcmVuIGZ1bmN0aW9uLCBtb3JlIG90aGVyIGZlYXR1cmVzIGFkZGVkLiBCYXNpY2FsbHkKCWEgcmV3cml0ZS4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXSBbd2luZG93cy9mb2N1cy5jXQoJUmVpbXBsZW1lbnRlZCB3aW5kb3cgYWN0aXZhdGlvbiBhbmQgZm9jdXMgaGFuZGxpbmcuCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCUFkZGVkIG5ldyBmbGFnIFdJTl9OQ0FDVElWQVRFRC4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10gW2xvYWRlci90YXNrLmNdCglTbWFsbCBjaGFuZ2VzICh0byBtYWludGFpbiBsaW5rZWQgbGlzdCBvZiBtZXNzYWdlIHF1ZXVlcykuCgpXZWQgTm92IDI5IDE1OjUxOjQ4IDE5OTUgIERhbmllbCBTY2hlcGxlciAgPGRhbmllbEBzaGVwMTMud3VzdGwuZWR1PgoKCSogW2luY2x1ZGUvb3B0aW9ucy5oXSBbbWlzYy9tYWluLmNdIFt3aW5kb3dzL2RlZnduZC5jXQoJICBbd2luZG93cy9ldmVudC5jXSBbd2luZG93cy9ub25jbGllbnQuY10gW3dpbmRvd3Mvd2luLmNdIFtXaW5lLm1hbl0KCUltcGxlbWVudGVkIGEgLW1hbmFnZWQgb3B0aW9uIHRvIHJlcGxhY2UgdGhlIHN0YW5kYXJkIFdpbmRvd3MKCWZyYW1lIG9mIHRvcC1sZXZlbCB3aW5kb3dzIHdpdGggdGhlIHdpbmRvdyBtYW5hZ2VyJ3MgZGVjb3JhdGlvbnMuCglJZiBhIHRvcC1sZXZlbCB3aW5kb3cgbWFrZXMgaXRzIG93biBmcmFtZSwgdGhpcyB3aWxsIHN0aWxsIHNob3cKCXVwLCBpbnNpZGUgdGhlIHdpbmRvdyBtYW5hZ2VyIGRlY29yYXRpb25zIChJIGJlbGlldmUgY3RsM2R2Mi5kbGwKCXdvdWxkIGRvIHRoaXMsIGFsdGhvdWdoIEkgY2FuJ3QgdGVzdCB0aGlzKS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVHVlIE5vdiAyMSAxODo0OToxMCAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBzdW5zaXRlLnVuYy5lZHU+CgoJKiBbY29uZmlndXJlLmluXSBbTWFrZWZpbGVdIFttaXNjL2Rvc19mcy5jXQoJR290IHJpZCBvZiBhdXRvY29uZi5oIGZpbGUuCgoJKiBbZGVidWdnZXIvZGJnLnldCglNb3JlIGxvZ2ljYWwgYmVoYXZpb3IgdXBvbiBzeW50YXggZXJyb3JzLgoKCSogW2luY2x1ZGUvaG9vay5oXSBbd2luZG93cy9ob29rLmNdCglDaGFuZ2VkIGhvb2sgc3RydWN0dXJlIGFuZCByZXdyb3RlIG1vc3Qgb2YgdGhlIGhvb2sgZnVuY3Rpb25zIGZvcgoJYmV0dGVyIGNvbXBhdGliaWxpdHksIGJhc2VkIG9uIGludmVzdGlnYXRpb25zIGJ5IEFsZXggS29yb2JrYS4KCgkqIFtpbmNsdWRlL21lc3NhZ2UuaF0gW3dpbmRvd3MvbWVzc2FnZS5jXQoJQWRkZWQgaG9va3MgdG8gbWVzc2FnZSBxdWV1ZSBzdHJ1Y3R1cmUgYW5kIG1hZGUgdGhlIHN0cnVjdHVyZQoJbGF5b3V0IFdpbmRvd3MtY29tcGF0aWJsZS4KCUFkZGVkIHN1cHBvcnQgZm9yIFdIX01PVVNFLCBXSF9LRVlCT0FSRCwgV0hfSEFSRFdBUkUgYW5kCglXSF9KT1VSTkFMUkVDT1JEIGhvb2tzLgoKCSogW21pc2MvbWFpbi5jXQoJQWRkZWQgY29tbWFuZC1saW5lIG9wdGlvbiBmb3IgY2hhbmdpbmcgdGhlIGxhbmd1YWdlIGF0IHJ1bi10aW1lCiAJKG5vdCBpbXBsZW1lbnRlZCB5ZXQpLCBiYXNlZCBvbiBhIHN1Z2dlc3Rpb24gZnJvbSBNaWNoYWVsIFBhdHJhLgoKCSogW29iamVjdHMvY3Vyc29yaWNvbi5jXQoJRml4ZWQgc2lsbHkgU0VHUFRSIGJ1ZyBpbiBEdW1wSWNvbigpLgoKTW9uIE5vdiAyMCAyMjoyMjoyMiAxOTk1ICBBbGV4IEtvcm9ia2EgPGFsZXhAcGhtMzAucGhhcm0uc3VueXNiLmVkdT4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdIFtjb250cm9scy9jb21iby5jXSBbaW5jbHVkZS9saXN0Ym94LmhdCglQYXJ0aWFsIGltcGxlbWVudGFpb24gb2YgTEJTX0VYVEVOREVEU0VMIHN0eWxlLAoJeWV0IG1vcmUgdXBkYXRlcyBmb3IgZHJhZyAmIGRyb3Agc3VwcG9ydC4gTm93IHdvcmtzLgoKCSogW3dpbmRvd3MvZGVmd25kLmNdCglNb3JlIG1lc3NhZ2UgaGFuZGxlcnMuCgoJKiBbd2luZG93cy93aW4uY10KCURyYWdPYmplY3QsIERyYWdEZXRlY3QsIEFueVBvcHVwIGZ1bmN0aW9ucy4gCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJTW9yZSBrbHVkZ3kgZml4ZXMgKFdNXy4uLlRPSVRFTSwgZXRjLikuCgoJKiBbb2JqZWN0cy9jdXJzb3JpY29uLmNdIFtvYmplY3RzL29lbWJpdG1hcC5jXQoJSWNvblRvQ3Vyc29yIHNrZWxldG9uLCBwYXRjaCBmb3IgT0JNX0xvYWRDdXJzb3JJY29uIHRvIGhhbmRsZSBuZXcKCWN1cnNvci4KCgkqIFtpbmNsdWRlL2JpdG1hcHMvb2NyKl0KCU5ldyBPRU0gY3Vyc29ycy4KCk1vbiBOb3YgMjAgMTE6MDU6MjAgRVNUIDE5OTUgIEppbSBQZXRlcnNvbiA8anNwZXRlckBiaXJjaC5lZS52dC5lZHU+CgoJKiBbdG9vbGtpdC9oZWFwLmNdCglTd2FwcGVkIGZsYWdzIGFuZCBzaXplIGFyZ3VtZW50cyB0byBMb2NhbFJlYWxsb2MgYXMgcGVyIGNoYW5nZXMgaW4KCW1lbW9yeS9sb2NhbC5jIGJ5IFdpbGxpYW0gTWFncm8gaW4gcHJldmlvdXMgcmVsZWFzZS4KCgkqIFtpbmNsdWRlL3dpbnR5cGVzLmhdCglSZWluc3RhdGVkIHRoZSAjZGVmaW5lJ3MgZm9yICdtaW4nIGFuZCAnbWF4Jywgc2luY2UgdGhleSdyZSBwYXJ0IG9mCgl0aGUgV2luZG93cyBBUEkuICBJIHJlYWxseSBkb24ndCB0aGluayBpdCdzIGEgd2lzZSBpZGVhLCBzbyBJIHB1dAoJYSAnI2lmbmRlZiBET05UX0RFRklORV9taW5fQU5EX21heCcgYXJvdW5kIHRoZW0uICBJIHRoaW5rIHRoZSBhY3R1YWwKCVdJTkUgY29kZSBzaG91bGQgbmV2ZXIgdXNlIHRoZXNlIChpdCBzaG91bGQgdXNlICdNSU4nIGFuZCAnTUFYJwoJaW5zdGVhZCkuCgoJKiBbbG9hZGVyLypdCglQdXQgJyNpZm5kZWYgV0lORUxJQicgYXJvdW5kIG1hbnkgdGhpbmdzIHRoYXQgV0lORWxpYiBzaG91bGQgbm90IG5lZWQuCgoJKiBbY29udHJvbHMvZWRpdC5jXQoJVG9vayBvdXQgbWFueSAnI2lmIGRlZmluZWQoV0lORUxJQiknIHNlY3Rpb25zIHdpdGggdGhlIGFzc29jaWF0ZWQKCWNvbW1lbnQgJ3RlbXBvcmFyeSBmaXgsIHVudGlsIExvY2FsIG1lbW9yeSBpcyBjb3JyZWN0bHkgaW1wbGVtZW50ZWQgaW4KCVdJTkVMSUInLCBzaW5jZSB0aGUgZWZmZWN0aXZlIHRyYW5zbGF0aW9ucyBhcmUgbm93IGluIAoJdG9vbGtpdC9taXNjc3R1YnMuYy4KCVRvb2sgb3V0IHRoZSAjaWZuZGVmJ3MgSSBwdXQgaW4gRURJVF9DbGVhclRleHQuICBXaG9ldmVyIG1vZGlmaWVkIHRoaXMKCWZpbGUgZml4ZWQgKG9yIGF0IGxlYXN0IHBvc3Rwb25lZCkgdGhlIGJ1ZyBJIGhhZCBlbmNvdW50ZXJlZC4KCgkqIFtsb2FkZXIvdGFzay5jXQoJUHV0IGFuICNpZmRlZiBpbiBUQVNLX0NyZWF0ZVRhc2soKSB0aGF0IGhhcmR3aXJlcyB0aGUgY3VycmVudCBkcml2ZSB0bwoJQzogIFRoaXMgd2lsbCBwcm9iYWJseSBjYXVzZSBhIGxvdCBvZiB0cm91YmxlIGlmIHRoaXMgY2hhbmdlIGlzCglmb3Jnb3R0ZW4gaW4gdGhlIGZ1dHVyZSwgYnV0IGl0IHdpbGwgbGV0IHRoaW5ncyBsaWtlIHRoZSBPcGVuRmlsZU5hbWUKCWRpYWxvZyB3b3JrIGZvciBub3cuCgoJKiBbdG9vbGtpdC9saWJyZXMuY10gW3Rvb2xraXQvTWFrZWZpbGUuaW5dIFt0b29sa2l0L01ha2VmaWxlXQoJICBbaW5jbHVkZS9saWJyZXMuaF0KCU1hZGUgbmV3IGxpYnJlcy5jIGZpbGUsIHdoaWNoIHdpbGwgY29udGFpbiBmdW5jdGlvbnMgZm9yIHN1cHBvcnRpbmcKCWFjY2Vzc2luZyByZXNvdXJjZXMgYnkgbmFtZSBpbiBXSU5FbGliLiAgJ3dpbmVyYycgd2lsbCBuZWVkIHRvIGJlCgljaGFuZ2VkLgoKCSogW3Rvb2xraXQvaGVhcC5jXQoJUmVmaW5lZCBtZW1vcnkgcm91dGluZXMgdG8gYWxsb3cgZm9yIGRpZmZlcmVuY2VzIGJldHdlZW4gTG9jYWxBbGxvYwoJYW5kIEdsb2JhbEFsbG9jIGFuZCBiZXR3ZWVuIExvY2FsU2l6ZSBhbmQgR2xvYmFsU2l6ZS4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10gW2luY2x1ZGUvd2luZG93cy5oXQoJRGVmaW5lZCB0aGUgR2V0Q3VycmVudFRpbWUgcm91dGluZSBpbiB3aW5kb3dzL21lc3NhZ2UuYywgYW5kIHJlbW92ZWQKCXRoZSAjZGVmaW5lIGluIHdpbmRvd3MuaC4KCk1vbiBOb3YgMjAgMDA6MzY6NDIgTUVUIDE5OTUgU3ZlbiBWZXJkb29sYWVnZSA8c2tpbW9AZG5zLnVmc2lhLmFjLmJlPgoKCSogWyovKl0KCUFkZGVkIG5ldyBkZWJ1Z2dpbmcgdHlwZSBERUJVR19XSU4zMiBhbmQgREVCVUdfRU5WLgoKCSogW2xvYWRlci9tb2R1bGUuY10KCUFkZGVkIHVuZG9jdW1lbnRlZCBHZXRFeHBXaW5WZXIuCgoJKiBbdG9vbHMvYnVpbGQuY10KCVByZXZpb3VzIGNvZGUgZGlkbid0IHBvcCBwb3NzaWJseSBjaGFuZ2VkICVlc2ksICVlZGkgYW5kICVlZHgKCWZyb20gdGhlIHN0YWNrLgoJCgkqIFt3aW4zMi9hZHZhcGkuY10KCUFkZGVkIEdldFVzZXJOYW1lQS4KCgkqIFt3aW4zMi9jb2RlX3BhZ2UuY10KCUFkZGVkIHN0dWIgZm9yIE11bHRpQnl0ZVRvV2lkZUNoYXIuCgoJKiBbd2luMzIvY29uc29sZS5jXQoJQWRkZWQgU2V0Q29uc29sZUN0cmxIYW5kbGVyIHN0dWIuCgoJKiBbd2luMzIvZmlsZS5jXQoJQWRkZWQgUmVhZEZpbGUgQ3JlYXRlRmlsZUEgR2V0RmlsZUluZm9ybWF0aW9uQnlIYW5kbGUgc3R1YnMuCglBZGRlZCBDbG9zZUhhbmRsZS4KCgkqIFt3aW4zMi9tZW1vcnkuY10KCUNoYW5nZWQgVmlydHVhbEFsbG9jIGFuZCBWaXJ0dWFsRnJlZS4KCgkqIFt3aW4zMi9wcm9jZXNzLmNdCglBZGRlZCBFeGl0UHJvY2Vzcy4KClN1biBOb3YgMTkgMTc6NTQ6NDIgMTk5NSAgIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJRml4ZWQgYSBmZXcgYnJva2VuIHN0cnVjdHVyZSBkZWZpbml0aW9ucy4KCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCUZpbmRSZXNvdXJjZSgpOiBOZWVkIHRvIGNoZWNrIGZvciAnI3h4eCcgc3RyaW5ncyBoZXJlLgoKCSogW21pc2NlbXUvaW50MjEuY10KCUZpbmROZXh0KCk6IFJldHVybiBNUy1ET1MgZmlsZW5hbWVzIHVwcGVyY2FzZS4KCgkqIFtvYmplY3RzL2N1cnNvcmljb24uY10KCUNyZWF0ZUljb24oKSwgQ3JlYXRlQ3Vyc29yKCk6IEFkZGVkIG1pc3NpbmcgZWxlbWVudCB0byBDVVJTT1JJQ09OSU5GTwoJaW5pdGlhbGl6ZXJzLgoJCgkqIFttaXNjL2ZpbGUuY10KCV9sb3BlbigpOiBGaWxlcyBvcGVuZWQgaW4gT0ZfV1JJVEUgbW9kZSBhcmUgdHJ1bmNhdGVkLgoJT3BlbkZpbGUoKTogSWdub3JlIE9GX1JFQUQvT0ZfV1JJVEUvT0ZfUkVBRFdSSVRFIHdoZW4gZmlsZXMgYXJlCgljcmVhdGVkOyB1c2UgcmVhZC93cml0ZSBtb2RlLgoJCgkqIFttaXNjL3Byb2ZpbGUuY10KCWxvYWQoKTogUmV3cml0dGVuLgoJCgkqIFttaXNjL2NvbW1kbGcuY10KCUZpeGVkIGJhZCBjYWxsIHRvIHN0cm5jcHkoKSB0aGF0IHNtYXNoZWQgdGhlIHN0YWNrLgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdIFt3aW5kb3dzL3dpbnBvcy5jXSBbbWVtb3J5L3NlbGVjdG9yLmNdCglPcGVyYXRvciBwcmVjZWRlbmNlIGZpeGVzLiBQZW9wbGUgd2hvIHVzZSBnY2MgMi43LjEgZG9uJ3QgbmVlZCBhCglkZWJ1Z2dlciA6LSkKCQoJKiBbaWYxNjMyL2dkaS5zcGVjXSBbb2JqZWN0cy9wYWxldHRlLmNdCglBZGQgUmVzaXplUGFsZXR0ZSgpIGFuZCBBbmltYXRlUGFsZXR0ZSgpIHN0dWJzLiBUaGV5IGRvbid0IGRvIGFueXRoaW5nLAoJYnV0IHNvbWV0aW1lcyB0aGF0J3MgZ29vZCBlbm91Z2guCgpGcmkgTm92IDE3IDA5OjEwOjM1IEdNVCAxOTk1ICBKb2huIEhhcnZleSA8am9obkBkaXZpc2lvbi5jby51az4KCgkqIFtpbmNsdWRlL3dpbmUuaF0gW2luY2x1ZGUvcmVnaXN0ZXJzLmhdIFtpbmNsdWRlL3dpbnNvY2suaF0KICAgICAgICBBZGRlZCBkZWZpbml0aW9ucyBmb3IgVW5peHdhcmUuCgoJKiBbbG9hZGVyL3NpZ25hbC5jXSBbbWlzYy9jb21tLmNdIFttaXNjL3dpbnNvY2tldC5jXQoJTWlzYy4gZml4ZXMgZm9yIFVuaXh3YXJlLgoKCSogW2xvYWRlci90YXNrLmNdCiAgICAgICAgTWFkZSBhc3NpZ25lbXRzIHRvIGNvbnRleHQgaW4gSW5pdFRhc2sgZm9yIHJlZ2lzdGVycyB1c2UgdGhlIG1hY3JvcwogICAgICAgIGZyb20gcmVnaXN0ZXJzLmggdG8gbWFrZSB0aGVtIG1vcmUgcG9ydGFibGUuIChOZWVkZWQgZm9yIFVuaXh3YXJlKQoKCSogW3Rvb2xzL2J1aWxkLmNdCglGaXhlZCByZWdpc3RlciBhY2NlcyByb3V0aW5lcyB0byB3b3JrIG9uIFVuaXh3YXJlLiBCaXQgZ3J1YmJ5IGJ1dAogCWl0IHNlZW1zIHRvIHdvcmsuCgoJKiBbY29udHJvbHMvZWRpdC5jXQoJRURJVF9XTV9OQ0NyZWF0ZSBhbGxvY2F0ZXMgbG9jYWwgaGVhcCBpZiBoYXNuJ3QgYmVlbiBwcmV2aW91c2x5CglhbGxvY2F0ZWQuCgkKCSogW21pc2NlbXUvaW50MjEuY10KCW1rZGlyIG5vdyBjcmVhdGVzIGRpcmVjdG9yeSB3aXRoIHBlcm1pc3Npb24gdG8gYWNjZXNzIGl0LgoKCSogW21pc2MvZG9zX2ZzLmNdCglta2RpciBub3cgY3JlYXRlcyBkaXJlY3Rvcnkgd2l0aCBwZXJtaXNzaW9uIHRvIGFjY2VzcyBpdC4KCURPU19vcGVuZGlyIG5vdyB1c2VzIGxpbmtlZCBsaXN0IG9mIGRpcmVudHMgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCAKCXJlYWxsb2MgY2hhbmdpbmcgYWRkcmVzcyBvZiBtYWxsb2NlZCBtZW1vcnkuCgpUaHUgTm92IDE2IDEyOjQ3OjEzIDE5OTUgIE1pY2hhZWwgUGF0cmEgIDxwYXRyYUBpdHAxLlBoeXNpay5UVS1CZXJsaW4uREU+CgoJKiBbY29udHJvbHMvbWVudS5jXQoJTUVOVV9DYWxjSXRlbVNpemUoKTogRml4ZWQgaGFuZGxpbmcgb2YgZW1wdHkgbWVudSBpdGVtcy4KClNhdCBOb3YgMTEgMjE6NDY6NTQgMTk5NSAgSGFucyBkZSBHcmFhZmYgIDxncmFhZmZAdHdpNzIudHdpLnR1ZGVsZnQubmw+CgoJKiBbbWlzYy9maWxlLmNdCglJbiBPcGVuRmlsZSwgdW5saW5rIHNob3VsZCBiZSBkb25lIG9uIHRoZSB1bml4IGZpbGVuYW1lLgoKU2F0IE5vdiAxMSAxNjo0MzoyOSAxOTk1ICBDYW1lcm9uIEhlaWRlICAoaGVpZGVAZWUudWFsYmVydGEuY2EpCgogICAgICAgICogW2luY2x1ZGUvaGFuZGxlMzIuaF0KICAgICAgICBOZXcgaGVhZGVyIGZpbGUgY29udGFpbmluZyBpbnRlcm5hbCBXaW4zMiBrZXJuZWwgaGFuZGxlCiAgICAgICAgaW5mb3JtYXRpb24uCgogICAgICAgICogW3dpbjMyL2ZpbGUuY10KICAgICAgICBBZGRlZCBSZWFkRmlsZSwgQ3JlYXRlRmlsZSwgYW5kIENsb3NlRmlsZUhhbmRsZSwgYW5kIGRpZAogICAgICAgIHNvbWUgcmVvcmdhbml6aW5nIHRvIG1hdGNoIHRoZSBuZXcgaGFuZGxlIGFsbG9jYXRpb24gc2NoZW1lLgoKICAgICAgICAqIFt3aW4zMi9pbml0LmNdCiAgICAgICAgQWRkZWQgQ2xvc2VIYW5kbGUgYW5kIHRoZSBjcmVhdGlvbiBvZiBzdGFuZGFyZCBJL08gaGFuZGxlcy4KCiAgICAgICAgKiBbd2luMzIvb2JqZWN0X21ndC5jXQogICAgICAgIE5ldyBtb2R1bGUgZm9yIGFsbG9jYXRpbmcgYW5kIGZyZWVpbmcgV2luMzIga2VybmVsIGhhbmRsZXMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkZyaSBOb3YgIDMgMjA6MDg6MTcgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAc3Vuc2l0ZS51bmMuZWR1PgoKCSogW2NvbmZpZ3VyZS5pbl0KCUF0dGVtcHQgdG8gY2hlY2sgZm9yIC1saTM4NiBvbiBOZXRCU0QuIFBsZWFzZSB0ZXN0IHRoaXMuCgpNb24gT2N0IDMwIDEyOjQwOjMyIEVTVCAxOTk1ICBKaW0gUGV0ZXJzb24gPGpzcGV0ZXJAYmlyY2guZWUudnQuZWR1PgoKCSogWyovKl0KCUVsaW1pbmF0ZWQgdmFyaW91cyB3YXJuaW5ncyB3aXRoIGVpdGhlciBleHBsaWNpdCBjYXN0cyBvciBtb3JlCglhY2N1cmF0ZSB2YXJpYWJsZS9wYXJhbWV0ZXIgZGVjbGFyYXRpb25zIChlLmcuIElOVCBpbnN0ZWFkIG9mIHNob3J0CglvciBXT1JEKS4KCUNoYW5nZWQgbWFjcm9zICdtaW4nIGFuZCAnbWF4JyB0byAnTUlOJyBhbmQgJ01BWCcsIHNpbmNlIHRoZXkncmUKCW1hY3Jvcy4KCgkqIFtjb250cm9scy9lZGl0LmNdIFt3aW5kb3dzL2RlZmRsZy5jXQoJQWRkZWQgJyNpZmRlZiBTVVBFUkZMVU9VU19GVU5DVElPTlMnIHdyYXBwZXJzIGFyb3VuZCBmdW5jdGlvbgoJZGVmaW5pdGlvbiBvZiBFRElUX0tleVZTY3JvbGxEb2MsIEVESVRfVGV4dExpbmVOdW1iZXIsIGFuZAoJREVGRExHX0ZpbmREZWZCdXR0b24gdG8gYXZvaWQgd2FybmluZ3MuCgoJKiBbY29udHJvbHMvYnV0dG9uLmNdIFtjb250cm9scy9zY3JvbGwuY10gW3dpbmRvd3MvZGVmd25kLmNdCgkgIFt3aW5kb3dzL21lc3NhZ2UuY10gW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglDb252ZXJ0ZWQgTUFLRVBPSU5UIG1hY3JvIGNhbGwgdG8gbWFudWFsIGNvbnZlcnNpb24uCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglGb3IgV0lORUxJQjMyLCBzdHJ1Y3R1cmVzIFBPSU5ULCBTSVpFLCBhbmQgUkVDVCBoYXZlIExPTkcgbWVtYmVycwoJaW5zdGVhZCBvZiBJTlQuICBUaGlzIGFsc28gaW52YWxpZGF0ZXMgdGhlIG1hY3JvIE1BS0VQT0lOVCgpLCB3aGljaAoJaXMgbm90IHN1cHBvcnRlZCBpbiBXaW4zMi4gIEFsc28gZGVmaW5lZCB0aGUgUE9JTlRTIHN0cnVjdHVyZSAoU0hPUlQKCW1lbWJlcnMpIGFuZCB0aGUgTUFLRVBPSU5UUyBtYWNyby4KCgkqIFttaXNjL2NvbW1kbGcuY10KCUNoYW5nZWQgYSBsb3Qgb2YgJ3N0cmNweScgY2FsbHMgdG8gJ3N0cm5jcHknIGNhbGxzLiAgSSdtIGRlc3BlcmF0ZSB0bwoJZmluZCB0aGlzIG1lbW9yeSBidWcsIGFuZCB0aGlzIHNob3VsZCBiZSBkb25lIGFueXdheS4KCgkqIFtjb250cm9scy9lZGl0LmNdCglXZWxsLCB0aGUgYWx0ZXJhdGlvbiBtZW50aW9uZWQgYWJvdmUgZGlkbid0IGRvIGl0LCBidXQgI2lmZGVmJ2luZyBvdXQKCWEgZmV3IGxpbmVzIGluIEVESVRfQ2xlYXJUZXh0IGRpZC4gIFRoaXMgbGVhZHMgdG8gYnVncywgYnV0IGZvciBub3csCglpdCdzIGJldHRlciB0aGFuIGJpenphcmUgbWVtb3J5IHRyb3VibGVzLgoKCSogW3Rvb2xraXQvbWlzY3N0dWJzLmNdCglSZW1vdmVkIHdhcm5pbmcgbWVzc2FnZXMgaW4gR0xPQkFMX0NyZWF0ZUJsb2NrKCksIEdMT0JBTF9GcmVlQmxvY2soKSwKCWFuZCBSRUxBWTMyX0dldEVudHJ5UG9pbnQoKS4gIFRoZXNlIGFyZSB0aGUgbW9zdCBwb3B1bGFyIHdhcm5pbmdzLCBhbmQKCXRoZWlyIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gc2VlbXMgZmluZS4KClNhdCBPY3QgMjggMDk6Mzk6MTggMTk5NSAgSm9jaGVuIEthcnJlciA8Y2lwMzA3QHdwYXgwMS5QaHlzaWsuVW5pLVd1ZXJ6YnVyZy5ERT4KCgkqIFtvYmplY3RzL2N1cnNvcmljb24uY10KCUZpeCBmb3IgImJyb2tlbiIgWCBzZXJ2ZXJzIHRoYXQgaW52ZXJ0IG1hc2tlZCBjdXJzb3IgY29sb3JzLgoKRnJpIE9jdCAyNyAxOToyNzoyMSAxOTk1ICBBbGV4IEtvcm9ia2EgIDxhbGV4QHBobTYucGhhcm0uc3VueXNiLmVkdT4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXSBbd2luZG93cy9ub25jbGllbnQuY10KCVJlbW92ZSB1bm5lY2Vzc2FyeSBpdGVtcyBmcm9tIHRoZSBzeXN0ZW0gbWVudS4KClRodSBPY3QgMjYgMDU6MDM6MDMgTUVUIDE5OTUgIFBoaWxpcHBlIERlIE11eXRlciA8cGhkbUBpbmZvLnVjbC5hYy5iZT4KCgkqIFtvYmplY3RzL2NvbG9yLmNdIFtvYmplY3RzL3BhbGV0dGUuY10KCU1ha2UgR2V0TmVhcmVzdENvbG9yIHJldHVybiBhIFJHQiB2YWx1ZSBpbnN0ZWFkIG9mIGEgcGl4ZWwgdmFsdWUuCgpXZWQgT2N0IDI1IDIzOjMzOjM5IDE5OTUgICAgTWFydGluIHZvbiBMb2V3aXMgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIFtjb250cm9scy9kZXNrdG9wLmNdW2NvbnRyb2xzL21lbnUuY11baW5jbHVkZS9tZW51LmhdCglDaGFuZ2VkIFdPUkQgcGFyYW1ldGVycyB0byBVSU5UIHBhcmFtZXRlcnMuCgoJKiBbaW5jbHVkZS93aW50eXBlcy5oXQoJTWFkZSBVSU5UIDMyYml0IGZvciBXSU5FTElCLgoKCSogW2xvYWRlci9tYWluLmNdCglEaXNhYmxlZCBSRUxBWTMyX0luaXQgYW5kIE1PRFVMRV9Jbml0IGZvciBXSU5FTElCLgoKCSogW21pc2MvbWFpbi5jXQoJQXNzdW1lIENQVTM4NiBmb3IgV0lORUxJQi4KCgkqIFtyYy93aW5lcmNdCglhZGRfcG9wdXA6IHNldCBNRl9QT1BVUCBmbGFnIG9uIG1lbnUgaXRlbS4KCgkqIFt0b29sa2l0L01ha2VmaWxlLmluXVt0b29sa2l0L2hlbGxvMy5jXVt0b29sa2l0L2hlbGxvM3Jlcy5jXQoJQWRkIHJlc291cmNlIGRlbW8gaGVsbG8zIGZvciBXSU5FTElCLgoJTmV3IGZpbGUgUkVBRE1FLnJlc291cmNlcy4KCgkqIFt0b29sa2l0L21pc2NzdHVicy5jXQoJQWRkIGEgY2FzZSBmb3IgMTcuCgpUdWUgT2N0IDE3IDE1OjEzOjEwIElTVCAxOTk1ICBJdGFpIE5haHNob24gPG5haHNob25Adm5ldC5pYm0uY29tPgoKCSogW2xvYWRlci9tb2R1bGUuY10KCURvIG5vdCBhcHBlbmQgLmV4ZSBpZiB0aGUgZmlsZSBuYW1lIGFscmVhZHkgaGFzIGFuIGV4dGVuc2lvbi4KCgkqIFttaXNjL3Byb2ZpbGUuY10KCUF2b2lkIGNyZWF0aW5nIGEgZmlsZSB3aXRoIGEganVuayBuYW1lIGlmIGEgLmluaSBmaWxlIGRvZXMgbm90CglleGlzdC4KCgkqIFtpZjE2MzIvZ2RpLnNwZWNdIFtpZjE2MzIvdXNlci5zcGVjXSBbaWYxNjMyL2R1bW15LmNdCglBZGRlZCBhIGxvdCBvZiBkdW1teSBzdHVicyBmb3IgV2luZG93cyBIZWJyZXcgdmVyc2lvbi4KClR1ZSBPY3QgMTcgMDE6MDM6MjQgMTk5NSBXaWxsaWFtIE1hZ3JvIDx3bWFncm9AdGMuY29ybmVsbC5lZHU+CgoJKiBbY29udHJvbHMvYnV0dG9uLmNdCglGaXggZm9yIGJ1dHRvbnMgd2l0aCBubyBsYWJlbC4KCgkqIFtjb250cm9scy9jb21iby5jXVtjb250cm9scy9saXN0Ym94LmNdCglGaXhlcyBmb3Igc2Nyb2xsYmFyIHBvc2l0aW9uaW5nLiAgTm93IGRpc2FwcGVhcnMgY29ycmVjdGx5Cglmb3Igc2hvcnQgbGlzdHMuCgoJKiBbY29udHJvbHMvZWRpdC5jXQoJSGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uIGRpZmZlcmVudGx5IHdoZW4gYnVpbGRpbmcgYXMgbGlicmFyeS4KCgkqIFtjb250cm9scy9zdGF0aWNdCglEb24ndCBkZXN0cm95IG9sZCBpY29uIGJlZm9yZSBkcmF3aW5nIG5ldyBpY29uLiAoRml4ZXMgbGFuZHNjYXBlLwoJcG9ydHJhaXQgdG9nZ2xlIGljb24gaW4gcHJpbnQgZGlhbG9nLikKCgkqIFtpZjE2MzIvZ2RpLnNwZWNdCglOZXcgZnVuY3Rpb25zIFNldE1ldGFGaWxlQml0cyBhbmQgR2V0TWV0YUZpbGVCaXRzCgoJKiBbaW5jbHVkZS9zeXNtZXRyaWNzLmhdIFt3aW5kb3dzL3N5c21ldHJpY3MuY10KCUFkZCBzdXBwb3J0IGZvciBHZXRTeXN0ZW1NZXRyaWNzKFNNX0NNRVRSSUNTKSA9PSBTTV9DTUVUUklDUwoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJTUVUQV9FWFRURVhUT1VULCBub3QgTUVUQV9TRVRURVhUT1VUCglkZWZpbmUgR2V0Q3VycmVudFRpbWUgYXMgR2V0VGlja0NvdW50IChmb3Igd2luZSBsaWJyYXJ5KQoKCSogW2xvYWRlci9tYWluLmNdCglEb24ndCBpbml0aWFsaXplIGJ1aWx0LWluIG1vZHVsZXMgaW4gd2luZSBsaWJyYXJ5CgoJKiBbbWVtb3J5L2xvY2FsLmNdCglMb2NhbFJlQWxsb2Mgd2FzIGRlZmluZWQgaW5jb3JyZWN0bHkuIFN3YXAgZmxhZ3MgYW5kIHNpemUgYXJndW1lbnRzLgoKCSogW21pc2MvbWFpbi5jXQoJQWx3YXlzIHJlcG9ydCBDUFVUWVBFPTQgdG8gd2luZSBsaWJyYXJ5LgoKCSogW29iamVjdHMvZGliLmNdCglSTEU4IGltYWdlcyB3ZXJlIG1pc3NpbmcgdG9wIGxpbmUgd2hlbiBkZWNvbXByZXNzZWQuCgoJKiBbb2JqZWN0cy9tZXRhZmlsZS5jXQoJU2V0TWV0YUZpbGVCaXRzIGFuZCBHZXRNZXRhRmlsZUJpdHMgaW1wbGVtZW50ZWQuICBXb3JrcyB3aGVuIGNhbGxlZAoJZnJvbSB3aW5oZWxwLiAgTW9yZSB0ZXN0aW5nIG5lZWRlZC4gIFZhcmlvdXMgbWVtb3J5IGxlYWtzIHBsdWdnZWQuCglWYXJpb3VzIG90aGVyIGJ1ZyBmaXhlcy4gIE5ldyBtZXRhZmlsZSBvcGVyYXRpb25zIGFkZGVkIGluCglQbGF5TWV0YUZpbGVSZWNvcmQ6IENyZWF0ZVBhbGV0dGUsIFNldFRleHRBbGlnbiwgU2VsZWN0UGFsZXR0ZSwKCVNldE1hcHBlckZsYWdzLCBSZWFsaXplUGFsZXR0ZSwgRXh0VGV4dE91dCwgRXNjYXBlLiAgVGVzdGluZyBuZWVkZWQuCgoJKiBbdG9vbGtpdC9oZWFwLmNdCglMb2NhbFVuTG9jayBjaGFuZ2VkIHRvIExvY2FsVW5sb2NrCgpTdW4gT2N0IDE1IDIxOjU1OjMzIDE5OTUgIEFuYW5kIEt1bXJpYSA8YWt1bXJpYUBvemVtYWlsLmNvbS5hdT4KCQoJKiBbbWlzYy93aW5zb2NrLmNdIAoJUmV0dXJuIHRoZSBjb3JyZWN0IGVycm9yIG51bWJlciwgZm9yIGhvc3QgbG9va3VwIG9wZXJhdGlvbnMuCglBbHNvLCBjb3JyZWN0IHRoZSBwcm9ibGVtIHdpdGggc2VuZF9tZXNzYWdlLgoKRnJpIE9jdCAxMyAxOTowNDozNSAxOTk1ICBNb3J0ZW4gV2VsaW5kZXIgIDx0ZXJyYUBkaWt1LmRrPgoKCSogW01ha2VmaWxlLmluXQoJVXNpbmcgbm0ncyBidWlsdC1pbiBzb3J0aW5nLgoKCSogWyovKi5jXQoJVXNlIHhtYWxsb2MgZm9yIG1hbGxvYyBhbmQgeHJlYWxsb2MgZm9yIHJlYWxsb2MgaW4gYWxsIHVuZ2FyZGVkCgljYXNlcy4KCgkqIFtkZWJ1Z2dlci9kYmcueV0KCUhhbmRsZSBDLWxpa2UgZXhwcmVzc2lvbnMuICBDbGVhbi11cC4KCgkqIFtkZWJ1Z2dlci9kZWJ1Zy5sXQoJTG90cyBvZiBuZXcgdG9rZW5zIGZvciBleHByZXNzaW9ucy4KCgkqIFtkZWJ1Z2dlci9pbmZvLmNdCglJbXBsZW1lbnQgImxpc3QiIGNvbW1hbmQgZm9yIGRpc2Fzc2VtYmxpbmcuCgoJKiBbbWlzYy9vbGUybmxzLmNdCglJbXBsZW1lbnQgbW9yZSBEYW5pc2ggc3R1ZmYuCgpGcmkgT2N0ICA2IDEwOjM5OjM5IDE5OTUgUmFtJ29uIEdhcmMnaWEgPHJhbW9uQGllMy5jbHVicy5ldHNpdC51cG0uZXM+CgoJKiBbbG9hZGVyL21vZHVsZS5jXQoJVXBkYXRlZCBzZWxmLWxvYWRpbmcgbW9kdWxlcyB0byBzdXBwb3J0IGZvciBuZXcgMzIgYml0IAoJc3RhY2sgZnJhbWVzLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gT2N0ICAxIDE1OjQ4OjM0IDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHN1bnNpdGUudW5jPgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUZpeGVkIEdldE1lbnVTdHJpbmcoKSBmb3Igbm9uLXN0cmluZyBpdGVtcy4KCgkqIFtkZWJ1Z2dlci8qLmNdCglGaXJzdCBhdHRlbXB0IHRvIGNoZWNrIHZhbGlkaXR5IG9mIHBvaW50ZXJzIGJlZm9yZSBtZW1vcnkKCWFjY2Vzc2VzLiBGb3Igbm93IG9ubHkgc2VnbWVudGVkIHBvaW50ZXJzIGFyZSBjaGVja2VkLgoKCSogW2RlYnVnZ2VyL2RiZy55XSBbbWVtb3J5L2xkdC5jXQoJQWRkZWQgcG9zc2liaWxpdHkgdG8gZHVtcCBvbmx5IG9uZSBzZWdtZW50IHdpdGggJ2luZm8gc2VnbWVudCcuCgoJKiBbaW5jbHVkZS9iaXRtYXBzL29jcl8qXQoJQWRkZWQgYWxsIE9FTSBjdXJzb3JzIGFzIFhQTSBiaXRtYXBzLgoKCSogW2luY2x1ZGUvY3Vyc29yaWNvbi5oXSBbb2JqZWN0cy9jdXJzb3JpY29uLmNdCglSZXdyb3RlIGFsbCBjdXJzb3IgYW5kIGljb24gbWFuYWdlbWVudCB0byB1c2UgdGhlIHNhbWUgbWVtb3J5CiAJbGF5b3V0IGFzIFdpbmRvd3MsIGFuZCB0byBmYWN0b3IgY29tbW9uIGNvZGUgYmV0d2VlbiBpY29ucyBhbmQKCWN1cnNvcnMuIEltcGxlbWVudGVkIGljb24gZGlyZWN0b3J5IGxvb2t1cCB0byBmaW5kIHRoZSBiZXN0CgltYXRjaGluZyBpY29uIChpLmUuIHRoZSBjb2xvciBvbmUpLgogIAlJbXBsZW1lbnRlZCBDb3B5Q3Vyc29yKCkgYW5kIER1bXBJY29uKCkuCgoJKiBbbG9hZGVyL21vZHVsZS5jXQoJRm9yIGRpc2FibGVkIGJ1aWx0LWluIG1vZHVsZXMsIHdlIG5vdyB0cnkgdG8gbG9hZCB0aGUgV2luZG93cyBETEwKCWZpcnN0LCBhbmQgaWYgdGhpcyBmYWlscyB3ZSBmYWxsIGJhY2sgdG8gdXNpbmcgdGhlIGJ1aWx0LWluIG1vZHVsZQoJYW55d2F5LgoKCSogW21lbW9yeS9nbG9iYWwuY10KCUZpeGVkIEdsb2JhbEhhbmRsZSgpIHRvIHJldHVybiB0aGUgY29ycmVjdCBzZWxlY3RvciBpbiB0aGUgaGlnaAoJd29yZCBldmVuIGlmIHdlIGFyZSBwYXNzZWQgYSBoYW5kbGUgaW4gdGhlIGZpcnN0IHBsYWNlLgoKCSogW21pc2NlbXUvaW5zdHIuY10KCVRha2UgaW50byBhY2NvdW50IHRoZSBzaXplIG9mIHRoZSBvcGVyYW5kIGFuZCBvZiB0aGUgc3RhY2sgc2VnbWVudAoJd2hlbiBpbmNyZW1lbnRpbmcgdGhlIHN0YWNrIHBvaW50ZXIuCglBdm9pZCByZWZlcmVuY2luZyBGU19yZWcgYW5kIEdTX3JlZyBvbiAqQlNELgoKCSogW29iamVjdHMvZGliLmNdCglBbGwgRElCIGZ1bmN0aW9ucyBub3cgYWNjZXB0IGEgQklUTUFQQ09SRUhFQURFUiBmb3JtYXQgYml0bWFwLgoJTW9ub2Nocm9tZSBESUJzIGFyZSBjcmVhdGVkIGFzIG1vbm9jaHJvbWUgYml0bWFwIGlmZiB0aGV5IGFyZQoJYmxhY2sgYW5kIHdoaXRlLgoKCSogW29iamVjdHMvb2VtYml0bWFwLmNdCglBZGRlZCBzdXBwb3J0IGZvciBPRU0gY3Vyc29ycywgY2hhbmdlZCBPQk1fTG9hZEljb24gdG8gdXNlIHRoZSBuZXcKCWljb24gbWVtb3J5IGxheW91dC4KCgkqIFtyYy9zeXNyZXNfRnIucmNdCglBZGRlZCBGcmVuY2ggW0ZyXSBsYW5ndWFnZSBzdXBwb3J0LgoKCSogW3dpbjMyL2Vudmlyb25tZW50LmNdCglGaXhlZCBHZXRDb21tYW5kTGluZUEoKSB0byB1c2UgY3VycmVudCBQREIuCgoJKiBbd2luZG93cy9ldmVudC5jXSBbd2luZG93cy93aW5wb3MuY10KCVNpbXVsYXRlIGEgbW91c2UgbW90aW9uIGV2ZW50IHVwb24gU2V0V2luZG93UG9zKCkgdG8gZm9yY2UgdGhlCgljdXJzb3IgdG8gYmUgc2V0IGNvcnJlY3RseS4KClNhdCBTZXAgMzAgMTc6NDk6MzIgIENhbWVyb24gSGVpZGUgIChoZWlkZUBlZS51YWxiZXJ0YS5jYSkKCgkqIFt3aW4zMi8qXQogICAgICAgIE5ldyBXaW4zMiBrZXJuZWwgZnVuY3Rpb25zOiBHZXRBQ1AsIEdldENQSW5mbywKIAlHZXRFbnZpcm9ubWVudFZhcmlhYmxlQSwgR2V0RmlsZVR5cGUsIEdldExhc3RFcnJvciwgR2V0T0VNQ1AsCiAJR2V0U3RhcnR1cEluZm9BLCBHZXRUaW1lWm9uZUluZm9ybWF0aW9uLCBTZXRFbnZpcm9ubWVudFZhcmlhYmxlLAogCVNldEZpbGVQb2ludGVyLCBTZXRMYXN0RXJyb3IsIFZpcnR1YWxBbGxvYywgVmlydHVhbEZyZWUsCiAJV3JpdGVGaWxlLiAgQ29tcGxldGVkIGltcGxlbWVudGF0aW9ucyBvZiBHZXRDb21tYW5kTGluZUEuCgoJKiBbaW5jbHVkZS9rZXJuZWwzMi5oXQogICAgICAgIE5ldyBmaWxlLgoKCSogW2xvYWRlci9tYWluLmNdCiAgICAgICAgQ2FsbCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgV2luMzIgZGF0YSAoZG9lc24ndCBjdXJyZW50bHkgZG8KIAlhbnl0aGluZykuCgoJKiBbbWlzYy9tYWluLmNdCglJbXBsZW1lbnRlZCBHZXRFbnZpcm9ubWVudFZhcmlhYmxlQSwgU2V0RW52aXJvbm1lbnRWYXJpYWJsZUEuCgpTYXQgU2VwIDMwIDAwOjI2OjU2IDE5OTUgIE5pZWxzIGRlIENhcnBlbnRpZXIgIDxuaWVsc0BjaW5keS5ldC50dWRlbGZ0Lm5sPgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdW21pc2NlbXUvZW11bGF0ZS5jXVtsb2FkZXIvbW9kdWxlLmNdCgkgIFttaXNjL2NvbW1kbGcuY10KCU1pc2MuIGJ1ZyBmaXhlcwoKRnJpIFNlcCAyOSAxNjoxNjoxMyAxOTk1ICBKaW0gUGV0ZXJzb24gPGpzcGV0ZXJAYmlyY2guZWUudnQuZWR1PgoKCSogWyovKl0KCUZvciBXaW5lbGliLCBleHBsaWNpdCBjYXN0cyBoYXZlIGJlZW4gcGxhY2VkIHdoZXJlIHdhcm5pbmdzIHdlcmUKIAl1c3VhbGx5IGdlbmVyYXRlZC4KCXByaW50ZiBmb3JtYXRzIHdoaWNoIGdpdmUgdGhlIGZvcm1hdCBmb3IgcHJpbnRpbmcgYSBoYW5kbGUgYXMKIAkiJTA0eCIgb3Igc29tZXRoaW5nIHNpbWlsYXIgaGF2ZSBiZWVuIGNoYW5nZWQgdG8gdXNlIHRoZSBOUEZNVAogCW1hY3JvIGRlZmluZWQgaW4gaW5jbHVkZS93aW50eXBlcy5oLiAgU29tZSB0aW1lcywgZXhwbGljaXQgY2FzdHMKIAl3ZXJlIGFsc28gbmVjZXNzYXJ5LgogICAgIAlQYXJhbWV0ZXIsIGZpZWxkLCBhbmQgdmFyaWFibGUgZGVjbGFyYXRpb25zIGhhdmUgYmVlbiBtYWRlIG1vcmUKIAlleGFjdCwgc3VjaCBhcyBjb252ZXJ0aW5nICdXT1JEIHdQYXJhbScgdG8gJ1dQQVJBTSB3UGFyYW0nIG9yCiAJJ1dPUkQgaEZvbnQnIHRvICdIRk9OVCBoRm9udCcuCiAgICAgCUFueSBjYWxsIG9mIHRoZSBmb3JtIEdldFdpbmRvd1dvcmQoaHduZCxHV1dfSElOU1RBTkNFKSBoYXMgYmVlbgogCXJlcGxhY2VkIHdpdGggYSBjYWxsIHRvIFdJTl9HZXRXaW5kb3dJbnN0YW5jZShod25kKS4KCgkqIFtjb250cm9scy9jb21iby5jXQoJQWRkZWQgV0lORUxJQjMyIHN1cHBvcnQgaW4gQ0xCb3hHZXRDb21ibygpLgoKCSogW2luY2x1ZGUvZGlhbG9nLmhdCglDb21tZW50ZWQgb3V0IHRoZSAnI2lmbmRlZiBXSU5FTElCJyBhcm91bmQgdGhlICcjcHJhZ21hIHBhY2soMSknLgoJd2luZWxpYiBuZWVkcyB0aGUgcGFja2luZyBhcyB3ZWxsIChlLmcuIHdoZW4gYWNjZXNzaW5nIHJlc291cmNlcwoJbGlrZSBzeXNyZXNfRElBTE9HX1NIRUxMX0FCT1VUX01TR0JPWCkuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglHb3QgcmlkIG9mIHRoZSBGW2Eta10gbWFjcm9zLCB3aGljaCB3ZXJlIGNsdXR0ZXJpbmcgdXAgdGhlIGdsb2JhbAoJbmFtZXNwYWNlLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXSBbd2luZG93cy9kZWZ3bmQuY10KCUFkZGVkIFdpbjMyIG1lc3NhZ2VzIFdNX0NUTENPTE9SKi4KCgkqIFtpbmNsdWRlL3dpbnR5cGVzLmhdCglQdXQgaW4gcHJlcHJvY2Vzc29yICcjZGVmaW5lIFdJTkVMSUIzMicgaWYgYXBwcm9wcmlhdGUgYW5kIGNoYW5nZWQKCXRoZSB0eXBlcyBvZiBzb21lIHR5cGVkZWZzIChXUEFSQU0sIEhBTkRMRSkgYmFzZWQgb24gdGhpcy4KCQoJKiBbbG9hZGVyL21vZHVsZS5jXSBbdG9vbGtpdC9taXNjc3R1YnMuY10KCUFkZGVkICNpZmRlZidkIHBvcnRpb24gaW4gTG9hZE1vZHVsZSB0byBoYW5kbGUgbG9hZGluZyBhIFdJTkVsaWIKCW1vZHVsZSAoYWxyZWFkeSBsb2FkZWQsIGp1c3QgaW5pdCB2YWx1ZXMpLiAgJyNpZmRlZidlZCBvdXQgdGhlCglkZWZpbml0aW9uIGZvciBHZXRXbmRQcm9jRW50cnkxNiBhbmQgYWRkZWQgYSBuZXcgdmVyc2lvbiB0bwoJdG9vbGtpdC9taXNjc3R1YnMuYy4KCgkqIFttaXNjL3NoZWxsLmNdCglBZGp1c3RlZCB0aGUgbGVuZ3RocyBvZiBBcHBOYW1lIGFuZCBBcHBNaXNjIGZyb20gNTEyLDUxMiB0byAxMjgsOTA2LgoJU2FtZSBhbW91bnQgb2YgdG90YWwgc3RvcmFnZSwgYnV0IG11Y2ggbW9yZSByZWFzb25hYmxlLiAgQWxzbywgY2hhbmdlZAoJY2FsbHMgdG8gc3RyY3B5KCkgaW4gU2hlbGxBYm91dCgpIHRvIGNhbGxzIHRvIHN0cm5jcHkoKSBpbnN0ZWFkLgoJVGhpcyB3YXMgYSBkaWZmaWN1bHQgYnVnIHRvIHRyYWNrIGRvd24sIGJ1dCB0aGUgQXBwTWlzYyBmaWVsZCB3YXMKCWJlaW5nIGluaXRpYWxpemVkIHdpdGggdGhlIGNvbnRyaWJ1dGVycyB0ZXh0LCB3aGljaCB3YXMgbXVjaCBsYXJnZXIKCXRoYW4gNTEyIGNoYXJhY3RlcnMuCgoJKiBbdG9vbGtpdC9hdG9tLmNdCglOZXcgZmlsZSBmb3IgYXRvbS1oYW5kbGluZyBmdW5jdGlvbnMuICBDb3BpZWQgZnJvbSBtZW1vcnkvYXRvbS5jIGFuZAoJdGhlbiBoZWF2aWx5IG1vZGlmaWVkLiAgUmlnaHQgbm93LCBpdCdzIGp1c3QgYSBsaW5rZWQgbGlzdCBvZiBhdG9tcy4KCUNvbnNpZGVyIGl0IGFzIGEgaGFzaCB0YWJsZSB3aXRoIGp1c3Qgb25lIGVudHJ5LiAgSXQncyBlYXNpbHkgY2hhbmdlZAoJbGF0ZXIuCgoJKiBbdG9vbGtpdC9oZWFwLmNdCglDb21tZW50ZWQgb3V0IHRoZSBoZWFwIGZ1bmN0aW9ucyB3aXRoIGEgIiNpZmRlZiBXSU5FTElCMTYiIGFuZCBwdXQgaW4KCWEgV2luMzIgdmVyc2lvbiAod2hpY2ggaXMgYmFzaWNhbGx5IGEgbW9kaWZpZWQgY29weSkuCgoJKiBbdG9vbGtpdC9zdXAuY10gW3Rvb2xraXQvbWlzY3N0dWJzLmNdCglNb3ZlZCB0aGUgc3R1ZmYgSSBwdXQgaW4gdG9vbGtpdC9zdXAuYyBpbnRvIHRvb2xraXQvbWlzY3N0dWJzLmMgYW5kCglhZGRlZCBxdWl0ZSBhIGZldyBtb3JlIHN0dWJzLgoKCSogW3Rvb2xraXQvd2lubWFpbi5jXQoJUmVhcnJhbmdlZCBzdGFydHVwIGNvZGUgaW4gX1dpbk1haW4uICBJIHRoaW5rIHRoaXMgd2lsbCB3b3JrLgoKCSogW3Rvb2xraXQvTWFrZWZpbGUuaW5dCglBZGRlZCB0YXJnZXRzIGZvciAnaGVsbG8nIGFuZCAnaGVsbG8yJyBpbiBjYXNlIGFueW9uZSBjYXJlcyB0byB0cnkKCW91dCB0aGUgc2FtcGxlIHByb2dyYW1zLgoKV2VkIFNlcCAyNyAyMzoxMzo0MyAxOTk1ICBBbmFuZCBLdW1yaWEgPGFrdW1yaWFAb3plbWFpbC5jb20uYXU+CgkKCSogW21pc2NlbXUvaW50MmYuY10gW21pc2NlbXUvdnhkLmNdIFtpZjE2MzIvd2lucHJvY3Muc3BlY10KCUZpcnN0IGF0dGVtcHQgYXQgc3VwcG9ydCBmb3Igc29tZSBWeERzLiBDb21tLCBTaGVsbCBhbmQgUGFnZWZpbGUuCgpUdWUgU2VwIDI2IDIxOjM0OjQ1IDE5OTUgIEhhbnMgZGUgR3JhYWZmICA8Z3JhYWZmQHR3aTcyLnR3aS50dWRlbGZ0Lm5sPgoKCSogW21pc2MvZG9zX2ZzLmNdCglET1NfU2ltcGxpZnlQYXRoOiBBbHNvIHJlbW92ZSAiLy4vIiBmcm9tIHBhdGguIChIYXBwZW5zIHdoZW4KIAlzdGFydGluZyBhcHBsaWNhdGlvbnMgbGlrZSAnd2luZSAuL2V4Y2VsLmV4ZScpCgpTYXQgU2VwIDIzIDIzOjMyOjQwIDE5OTUgIE1vcnRlbiBXZWxpbmRlciAgPHRlcnJhQGRpa3UuZGs+CgoJKiBbY29uZmlndXJlLmluXQoJQXZvaWQgcmVsYXRpdmUgcGF0aCBmb3Igd2luZS5pbmkuCgoJKiBbcmMvc3lzcmVzX0RhLnJjXQoJU3VwcG9ydCBmb3IgRGFuaXNoIFtEYV0gbGFuZ3VhZ2UuCgoJKiBbbWlzYy9tYWluLmNdIFttaXNjZW11L2NwdS5jXQoJUmV0dXJuIHRoZSBwcm9jZXNzb3Igd2UncmUgcnVubmluZyBvbiBjb3JyZWN0bHkuCgoJKiBbbWlzY2VtdS9pbnQyZi5jXQoJTWlub3Igc3R1ZmYgaW4gaW50IDB4MmYsIGZ1bmN0aW9uIDB4MTYuCgpTYXQgU2VwIDIzIDE5OTUgMTc6NTg6MDQgIE1hcmN1cyBNZWlzc25lciAgPG1zbWVpc3NuQGZhdWkwMS5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFttaXNjL3NoZWxsLmNdIFttaXNjL21haW4uY10KCUltcGxlbWVudCBzYXZpbmcgYW5kIGxvYWRpbmcgb2YgdGhlIHJlZ2lzdHJ5IGRhdGFiYXNlIChuZWVkZWQgZm9yCglPTEUpLiBWZXJ5IGV4cGVyaW1lbnRhbC4gRml4ZWQgU2hlbGxFeGVjdXRlKCkuCgkKCSogW21pc2NlbXUvaW50MjEuY10KCUVFWElTVCBpcyBub3QgYSBjcml0aWNhbCBlcnJvciBjb25kaXRpb24gZm9yIG1rZGlyKCkuCgpGcmkgU2VwIDIyIDAxOjMzOjM0IDE5OTUgIEFsZXggS29yb2JrYSAgPGFsZXhAcGhtNi5waGFybS5zdW55c2IuZWR1PgoKCSogW2luY2x1ZGUvc2hlbGwuaF0gW21pc2Mvc2hlbGwuY10KCUltcGxlbWVudGVkIDQgZHJhZy9kcm9wIGZ1bmN0aW9ucyB3aXRoIGRvY3VtZW50ZWQgZnVuY3Rpb25hbGl0eS4KCiAgICAgICAgKiBbbXVsdGltZWRpYS90aW1lLmNdCiAgICAgICAgIkZpeGVkIiBNTVN5c1RpbWVDYWxsYmFjayBrbHVkZ2Ugc28gRXhjZWw1IGxvYWRzIHVwIHdpdGhvdXQgY3Jhc2hpbmcuCgoJKiBbKi8qXSAKICAgICAgICBBZGRlZCBuZXcgZmlsZXMsIG1vcmUgbWVzc2FnZSBkZWZpbml0aW9ucywgc3RydWN0dXJlcywgZGVidWcgaW5mbywKIAlldGMuICBSZXdyb3RlIG1lc3NhZ2UgbG9nZ2luZyBmdW5jdGlvbnMgdG8gcHJvZHVjZSBvdXRwdXQgc2ltaWxhcgogCXRvIFdpblNpZ2h0LiAgQ2hlY2sgb3V0IC1kZWJ1Z21zZyArbWVzc2FnZSBvcHRpb24uCgoJKiBbbWlzYy9maWxlLmNdCiAgICAgICAgRml4ZWQgR2V0RHJpdmVUeXBlIHJldHVybiB2YWx1ZS4gIAoKICAgICAgICAqIFt3aW5kb3dzL21lc3NhZ2UuY10gCiAgICAgICAgSG9va3MgYXJlIGludm9rZWQgaW4gbm9ybWFsIG9yZGVyLgoKICAgICAgICAqIFttaXNjZW11LypdCiAgICAgICAgQWRkZWQgc29tZSBmdW5jdGlvbnMgYW5kIGludGVycnVwdHMuCgogICAgICAgICogW21pc2Mvc2hlbGwuY10KICAgICAgICBJbXBsZW1lbnRlZCBEcmFnLi4uIGZ1bmN0aW9ucy4KClRodSBTZXAgMjEgMjM6NTA6MTIgMTk5NSAgSnVra2EgSWl2b25lbiA8aWl2b25lbkBjYy5oZWxzaW5raS5maT4KCgkqIFtyYy9zeXNyZXNfRmkucmNdIFtyYy9zeXNyZXMucmNdCglGaXJzdCBhdHRlbXB0IGF0IEZpbm5pc2ggW0ZpXSBsYW5ndWFnZSBzdXBwb3J0LgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gU2VwIDE3IDE2OjQ3OjQ5IDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHN1bnNpdGUudW5jLmVkdT4KCgkqIFtjb25maWd1cmUuaW5dIFsqL01ha2VmaWxlLmluXSBbTWFrZS5ydWxlcy5pbl0KCUNsZWFuZWQgdXAgbWFrZWZpbGVzLCBhZGRlZCBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgV2luZWxpYiwKCWdyb3VwZWQgY29tbW9uIG1ha2UgcnVsZXMgaW4gTWFrZS5ydWxlcy5pbi4KCgkqIFtDb25maWd1cmVdCglSZW5hbWVkIHRvICdDb25maWd1cmUub2xkJzsgcGxlYXNlIHVzZSAnY29uZmlndXJlJyBpbnN0ZWFkLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUZpeGVkIERlc3Ryb3lNZW51KCkgdG8gYXZvaWQgZGVsZXRpbmcgdGhlIHNhbWUgbWVudSB0d2ljZS4KCU1vcmUgZml4ZXMgdG8gV01fTUVOVVNFTEVDVCwgYW5kIGFkZGVkIFdNX0lOSVRNRU5VLgoKCSogW2lmMTYzMi9yZWxheS5jXQoJRml4ZWQgd3JvbmcgcmVnaXN0ZXIgdmFsdWVzIGRpc3BsYXllZCBieSBSRUxBWV9EZWJ1Z0NhbGwzMigpLgoKCSogW21lbW9yeS9sb2NhbC5jXQoJRml4ZWQgTG9jYWxMb2NrKCkgYW5kIExvY2FsVW5sb2NrKCkgdG8gaW5jcmVtZW50L2RlY3JlbWVudCB0aGUKCWxvY2sgY291bnQgZm9yIG1vdmVhYmxlIGJsb2Nrcy4KCgkqIFttaXNjL2NvbW1kbGcuY10gW21pc2Mvc2hlbGwuY10gW3JjL3dpbmVyYy5jXQoJTW9kaWZpZWQgdGhlIGdlbmVyYXRlZCBDIGZpbGUgc28gdGhhdCB0aGUgcmVzb3VyY2UgaW5mb3JtYXRpb24KCShzaXplLCBldGMuKSBpcyBhbHNvIGV4cG9ydGVkLgoJTW9kaWZpZWQgY29tbW9uIGRpYWxvZ3MgdG8gdXNlIHRoZSBuZXcgaW5mb3JtYXRpb25zLgoKCSogW21pc2MvbWFpbi5jXSBbQU5OT1VOQ0VdCglVcGRhdGUgdGhlIGxpc3Qgb2YgY29udHJpYnV0b3JzLiBQbGVhc2UgbGV0IG1lIGtub3cgaWYgSSBmb3Jnb3QKCXNvbWVvbmUuCgoJKiBbcmMvc3lzcmVzLnJjXSBbcmMvc3lzcmVzX0VuLnJjXQoJTW92ZWQgRW5nbGlzaCByZXNvdXJjZXMgdG8gc3lzcmVzX0VuLnJjLgoJQ2hhbmdlZCBpZHMgZnJvbSBudW1lcmljIHRvIHN5bWJvbGljIGZvciBkaWFsb2dzLgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglNb2RpZmllZCB0ZW1wbGF0ZSBwYXJzaW5nIHRvIGJlIGFibGUgdG8gcGFzcyBzZWdtZW50ZWQgcG9pbnRlcnMgdG8KCUNyZWF0ZVdpbmRvdygpLgoKCSogW3dpbmRvd3Mvd2luLmNdCglDcmVhdGVXaW5kb3coKSBub3cgdGFrZXMgc2VnbWVudGVkIHBvaW50ZXJzIGZvciBjbGFzcyBhbmQgd2luZG93CgluYW1lcy4KCU1heG1pbWl6ZSBvciBtaW5pbWl6ZSB0aGUgd2luZG93IHVwb24gY3JlYXRpb24gaWYgdGhlIFdTX01BWElNSVpFCglvciBXU19NSU5JTUlaRSBiaXRzIGFyZSBzZXQuCgpUaHUgU2VwIDE0IDE3OjE5OjU3IDE5OTUgIFBhdWwgV2lsaGVsbSAgPHBhdWxAcGF1bC5hY2Nlc3NvbmUuY29tPgoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJRml4ZWQgc2Nyb2xsLWJhciBidWdzIGZvciBub24tY2xpZW50IHdpbmRvd3MuCgpUaHUgU2VwIDE0IDE0OjA0OjE0IE1FVCBEU1QgMTk5NSBKb2NoZW4gSG9lbmlja2UgPEpvY2hlbi5Ib2VuaWNrZUBhcmJpLkluZm9ybWF0aWsuVW5pLU9sZGVuYnVyZy5kZT4KCgkqIFtpbmNsdWRlL2N1cnNvci5oXSBbd2luZG93cy9jdXJzb3IuY10KCUN1cnNvciBpcyBub3QgbWlycm9yZWQgYW55IG1vcmUgYW5kIHRoZSBob3RzcG90IGlzIHNldCByaWdodC4KCldlZCBTZXAgMTMgMTQ6MjI6MzEgMTk5NSAgTWFyY3VzIE1laXNzbmVyICA8bXNtZWlzc25AZmF1aTAxLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW29sZS5oXQoJTWlzYyBzbWFsbCBmaXhlcy4KCk1vbiBTZXAgIDQgMDA6MDE6MjMgMTk5NSAgSm9uIFRvbWJzIDxqb25AZ3RlLmVzaS51cy5lcz4KCgkqIFtyYy9zeXNyZXNfRXMucmNdCglGaXJzdCBhdHRlbXB0IGF0IFNwYW5pc2ggW0VzXSBsYW5ndWFnZSBzdXBwb3J0LgoKU3VuIFNlcCAgMyAxMzoyMjozMyAxOTk1ICAgICBNYXJ0aW4gdm9uIExvZXdpcyA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogW2luY2x1ZGUvYWxpYXMuaF1bd2luZG93cy9hbGlhcy5jXVtpbmNsdWRlL3JlbGF5MzIuaF0KCU5ldyBmaWxlcwoKCSogW2NvbnRyb2xzL3dpZGdldHMuY10KCVdJREdFVFNfSW5pdDogcmVnaXN0ZXIgYWxpYXMgd2luZG93IHByb2NlZHVyZXMKCgkqIFtpZjE2MzIvY2FsbGJhY2suY10KCUNhbGxXbmRQcm9jOiBDYWxsIGFsaWFzIGZ1bmN0aW9ucyBpZiBuZWNlc3NhcnkKCgkqIFtpZjE2MzIvZ2RpMzIuc3BlY10KCUdldFN0b2NrT2JqZWN0LCBUZXh0T3V0QTogbmV3IHJlbGF5cwoKCSogW21pc2MvdXNlcjMyLmNdW2lmMTYzMi91c2VyMzIuc3BlY11bbWlzYy9NYWtlZmlsZS5pbl1bbWlzYy9JbWFrZWZpbGVdCgl1c2VyMzIuYzogbmV3IGZpbGUKCUJlZ2luUGFpbnQsQ3JlYXRlV2luZG93RXhBLERlZldpbmRvd1Byb2NBLERpc3BhdGNoTWVzc2FnZSxFbmRQYWludCwKCUdldE1lc3NhZ2VBLFJlZ2lzdGVyQ2xhc3NBLFNob3dXaW5kb3csVXBkYXRlV2luZG93OiBuZXcgcmVsYXlzCgoJKiBbaWYxNjMyL3dpbnByb2NzMzIuc3BlY11bbG9hZGVyL3BlX2ltYWdlLmNdW2xvYWRlci9tb2R1bGUuY10KCVBFX1dpbjMyQ2FsbFRvU3RhcnQ6IG5ldyBmdW5jdGlvbgoJTU9EVUxFX0NyZWF0ZUluc3RhbmNlOiByZW1vdmVkIHN0YXRpYyBhdHRyaWJ1dGUKCUxvYWRNb2R1bGU6IFRyeSBsb2FkaW5nIFBFIGltYWdlIG9uIGVycm9yIDIxCglQRV9Mb2FkTW9kdWxlOiBuZXcgZnVuY3Rpb24KCVBFX0xvYWRJbWFnZTogaW5pdGlhbGl6ZSBwZV9kYXRhIHdpdGggMAoJCgkqIFtpbmNsdWRlL2RsbHMuaF1baW5jbHVkZS9wZWV4ZS5oXQoJbW92ZWQgcGVfZGF0YSBhbmQgd19maWxlcyB0byBwZWV4ZS5oCgkKCSogW21pc2Mvc2hlbGwuY10KCVNoZWxsQWJvdXQ6IFJlZ2lzdGVyIEFib3V0V25kUHJvYyBhbGlhc2VzCgoJKiBbbWlzY2VtdS9pbnQyMS5jXQoJaGFuZGxlIDB4NDQwQSBhbmQgMHhEQwoKCSogW21pc2NlbXUvaW50MmYuY10KCWhhbmRsZSAweDg0CgoJKiBbb2JqZWN0cy9kaWIuY10KCUNyZWF0ZURJQml0bWFwOiBjb21wbGFpbiBpZiBCSVRNQVBJTkZPSEVBREVSIGlzIG9mIHdyb25nIHNpemUKCgkqIFt0b29scy9idWlsZC5jXQoJaW5jbHVkZSB3aW5kb3dzLmggYW5kIHJlbGF5MzIuaCBpbnRvIGdlbmVyYXRlZCBXaW4zMiByZWxheXMsCglkb24ndCBkZWNsYXJlIHRoZSBpbXBsZW1lbnRhdGlvbiBhcyBpbnQgKCopKCk7CglsaW1pdCBpbiBXSU4zMl9idWlsdGluIHdhcyBvZmYgYnkgb25lCgoJKiBbd2luZG93cy9jYXJldC5jXQoJQ0FSRVRfSW5pdGlhbGl6ZTogbmV3IGZ1bmN0aW9uLCBjYWxsIG9uIHN0cmF0ZWdpYyBwbGFjZXMKCgkqIFt3aW5kb3dzL21lc3NhZ2Vib3guY10KCU1lc3NhZ2VCb3g6IHJlZ2lzdGVyIG1lc3NhZ2UgYm94IHByb2MgYWxpYXNlcwoKCSogW2lmMTYzMi9hZHZhcGkzMi5zcGVjXVtpZjE2MzIvY29tZGxnMzIuc3BlY10KCU5ldyBmaWxlcwoKCSogW2lmMTYzMi9NYWtlZmlsZS5pbl1baWYxNjMyL0ltYWtlZmlsZV1baWYxNjMyL3JlbGF5MzIuY10KCWFkZGVkIG5ldyBzcGVjIGZpbGVzCglSRUxBWTMyX0dldEJ1aWx0aW5ETEw6IHBlcmZvcm0gbG9va3VwIGNhc2UgaW5zZW5zaXRpdmUKCVJFTEFZMzJfR2V0RW50cnlQb2ludDogc3RhcnQgbmFtZSBzZWFyY2ggYXQgMAoKCSogW2lmMTYzMi91c2VyLnNwZWNdW2lmMTYzMi9rZXJuZWwuc3BlY11baWYxNjMyL2dkaS5zcGVjXQoJQWRkZWQgc3R1YnMgZm9yIG5ldyBXaW45NSBBUEkKClNhdCBTZXAgMiAxOTk1ICBNYXJ0aW4gUm95CgoJKiBbbWlzYy9jb21tZGxnLmNdCglJbiBXTV9JTklURElBTE9HLCBjdXJyZW50IGZpbHRlciBtdXN0IHJlZmxlY3QgbHBvZm4tPm5GaWx0ZXJJbmRleC4KICAJV2hlbiBwcm9jZXNzIElET0sgYnV0dG9uIGluIEZJTEVETEdfV01Db21tYW5kKCksCiAJbHBvZm4tPm5GaWx0ZXJJbmRleCBzaG91bGQgYmUgdXBkYXRlZCB0byBjdXJyZW50IHNlbGVjdGlvbi4KClRodSBBdWcgMzEgMTU6MDA6MDAgMTk5NSBSYW0nb24gR2FyYydpYSA8cmFtb25AaWUzLmNsdWJzLmV0c2l0LnVwbS5lcz4KCgkqIFtsb2FkZXIvbW9kdWxlLmNdIFtsb2FkZXIvbmVfaW1hZ2UuY10KCUFkZGVkIHN1cHBvcnQgb2Ygc2VsZi1sb2FkaW5nIG1vZHVsZXMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVGh1IEF1ZyAzMSAxNzoxOTo1NyAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBzdW5zaXRlLnVuYy5lZHU+CgoJKiBbQ29uZmlndXJlXQoJQWRkZWQgY29tcGlsZS10aW1lIG9wdGlvbiBmb3IgSVBDLgoKCSogW2NvbmZpZ3VyZS5pbl0KCUFkZGVkIGNvbW1hbmQtbGluZSBvcHRpb25zIGZvciBsYW5ndWFnZSwgSVBDIGFuZCBtYWxsb2MKCWRlYnVnZ2luZy4KCgkqIFtjb250cm9scy9tZW51LmNdCglXTV9NRU5VU0VMRUNUIHdhcyBzb21ldGltZXMgc2VudCB0byB0aGUgd3Jvbmcgd2luZG93LgoKCSogW2RlYnVnZ2VyL2JyZWFrLmNdCglGb3IgdGhlICduZXh0JyBjb21tYW5kLCBvbmx5IHN0ZXAgb3ZlciBpbnN0cnVjdGlvbiB0aGF0IHJlcXVpcmUKCWl0LiBUaGlzIGFsbG93cyAnbmV4dCcgdG8gZG8gdGhlIHJpZ2h0IHRoaW5nIHdpdGggam1wIGFuZCByZXQKCWluc3RydWN0aW9ucy4KCgkqIFtpcGMvKi5jXSBbbWVtb3J5L2F0b20uY10gW21lbW9yeS9nbG9iYWwuY10KCUlQQyBjYW4gbm93IGJlIGNvbmZpZ3VyZWQgb3V0IGF0IGNvbXBpbGUtdGltZS4KCgkqIFtsb2FkZXIvdGFzay5jXQoJQnVnIGZpeCBpbiBUQVNLX1Jlc2NoZWR1bGUoKSB0aGF0IGNvdWxkIGNhdXNlIGEgdGFzayB0byBiZSBkZWxldGVkCgl0d2ljZS4KCgkqIFttaXNjZW11L2Rvc21lbS5jXSAoTmV3IGZpbGUpCglQYXJ0aWFsIGVtdWxhdGlvbiBvZiB0aGUgQklPUyBkYXRhIHNlZ21lbnQuCgoJKiBbbWlzY2VtdS9pbnN0ci5jXQoJVHJhcCBhdHRlbXB0cyB0byBhY2Nlc3Mgc2VsZWN0b3IgMHg0MCBhbmQgcmVtYXAgdGhlIGFjY2VzcyB0bwoJc2VnbWVudCBfXzAwNDBILgoKCSogW3Rvb2xzL2J1aWxkLmNdCglGaXhlZCBidWcgaW4gQ2FsbFRvMzJfTGFyZ2VTdGFjaygpIHRoYXQgY2F1c2VkIHByb2JsZW1zIHdoZW4KCWNvbXBpbGluZyBXaW5lIHdpdGggdGhlIC1mb21pdC1mcmFtZS1wb2ludGVyIG9wdGlvbi4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCUZpeGVkIGJ1ZyBpbiBoYXJkd2FyZSBldmVudCBoYW5kbGluZyB0aGF0IGNvdWxkIGNhdXNlIHNvbWUgZXZlbnRzCgl0byBnZXQgaWdub3JlZC4KClNhdCBBdWcgMjYgMTM6MTI6NTkgSVNUIDE5OTUgTWljaGFlbCBWZWtzbGVyIDxtdmVrc2xlckB2bmV0LmlibS5jb20+CgoJKiBbaXBjL1JFQURNRV0gW2lwYy9kZGUudGV4XQoJTGFUZVggZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGlwYyBhbmQgRERFIHN0dWZmLgoKV2VkIEF1ZyAyMyAyMjowMToyMyBHTVQgMTk5NSBNaWNoYWVsIFZla3NsZXIgPG12ZWtzbGVyQHZuZXQuaWJtLmNvbT4KCgkqIFtpcGMvSW1ha2VmaWxlXSBbaXBjL3dpbmVfdGVzdF9zdHViLmNdCglGaXhlZCBJUEMgdGVzdGluZy4gTm93IGl0IGNhbiBiZSBjb21waWxlZCB3aXRoICJtYWtlIHRlc3RzIgoKV2VkIEF1ZyAyMyAyMTowNDoxNCAxOTk1ICBGb25zIEJvdG1hbiAgPGJvdG1hbkB3YWItdGlzLnJhYm9iYW5rLm5sPgoKCSogW2lmMTYzMi9rZXJuZWwuc3BlY10gW2luY2x1ZGUvd2luZG93cy5oXSBbbWlzYy9tYWluLmNdCglBZGRlZCBHZXRXaW5EZWJ1Z0luZm8vU2V0V2luRGVidWdJbmZvIHN0dWIgZm9yIHBsYXllci5leGUKClN1biBBdWcgIDIwIDEzOjQ5OjQyIDE5OTUgIE1hcmN1cyBNZWlzc25lciAgPG1zbWVpc3NuQGZhdWkwMS5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFttaXNjZW11L2ludDIxLmNdCglNaXNjIGZpeCB0byBpbnQyMSxhaD00MCAod3JpdGUpIHRvIG1hdGNoIF9sd3JpdGUoKS4KCUFYPTB4NDQwQSAoY2hlY2sgaWYgaGFuZGxlIGlzIHJlbW90ZSkgYWRkZWQuCgoJKiBbbXVsdGltZWRpYS9tbXN5c3RlbS5jXQoJTW92ZWQgbWNpU2VuZFN0cmluZyB0byBtY2lzdHJpbmcuYy4KCgkqIFttdWx0aW1lZGlhL21jaXN0cmluZy5jXQoJTmV3IGZpbGUsIHN0cmluZyBpbnRlcmZhY2UgZm9yIE1DSSAobm90IGNvbXBsZXRlLCBub3QgdGhvcm91Z2hseQoJdGVzdGVkKS4KCgkqIFttdWx0aW1lZGlhL2F1ZGlvLmNdCglJT0NUTCBwcmludHMgZXJyb3JzOyBvbmUgcGFyYW5vaWQgY2hlY2sgZGlzYWJsZWQuCgoJKiBbbWlzYy9maWxlLmNdCglNaXNjIG9wZXJhdG9yIHByZWNlZGVuY2UgZml4ZXMuCgoJKiBbaWYxNjMyL2dkaS5zcGVjXSBbb2JqZWN0cy9iaXRibHQuY10KCVN0dWIgZm9yIEZhc3RXaW5kb3dGcmFtZSAocGFyYW1ldGVycyBub3QgY29ycmVjdCkuCgpTYXQgQXVnIDE5IDAxOjMxOjIzIDE5OTUgIEdyYWhhbSBNZW5oZW5uaXR0IDxnZm1Ad2VycGxlLm1pcmEubmV0LmF1PgoKCSogW2xvYWRlci9uZV9pbWFnZS5jXQoJUHJlbGltaW5hcnkgc3VwcG9ydCBmb3IgaXRlcmF0ZWQgc2VnbWVudHMuCgpTYXQgQXVnIDE5IDAwOjQzOjA0IDE5OTUgIEFuZHJldyBUYXlsb3IgIChhbmRyZXdAcmlzY2FuLmNvbSkKCgkqIFt3aW5kb3dzL21hcHBpbmcuY10KCUluIGZ1bmN0aW9uIE1BUFBJTkdfRml4SXNvdHJvcGljKCksIFZwb3J0RXh0W1hZXSBpcyBtdWx0aXBsaWVkIGJ5CiAJdGhlIGFic29sdXRlIHZhbHVlIG9mICh5ZGltIC8geGRpbSkgb3IgKHhkaW0gLyB5ZGltKS4KClRodSBBdWcgMTUgMjM6MDA6MTYgIEdyZWdvcnkgVHJ1YmV0c2tveSAgPGdyaXNoYUBtaXJhLmNvbT4KCgkqIFtvYmplY3RzL29lbWJpdG1hcC5jXQoJQWRkZWQgc29tZSBpbmNsdWRlcyBmb3IgV2luZG93cyA5NS4KCgkqIFtpbmNsdWRlL3N5c21ldHJpY3MuaF0KCUFkZGVkIHNvbWUgc3lzbWV0cmljcyBmb3IgV2luZG93cyA5NS4KCgkqIFtpbmNsdWRlL2JpdG1hcHMvKjk1XQoJTmV3IGZpbGVzOiBvYm1fY2xvc2VfOTUsIG9ibV9jbG9zZWRfOTUsIG9ibV9yZWR1Y2VfOTUsIG9ibV9yZWR1Y2VkXzk1CglvYm1fem9vbV85NSwgb2JtX3pvb21kXzk1IC0gdGhlc2UgYXJlIHNvbWUgcGl4bWFwcyBmb3IgV2luZG93cyA5NS4KClRodSBBdWcgMTAgMTI6MDA6MDAgMTk5NSAgSmFuIFdpbGxhbW93aXVzICAoamFuQGphbmhoLnNobmV0Lm9yZykKCgkqIFttaXNjL3NoZWxsLmNdIFtyYy9zeXNyZXMqLnJjXQoJVGhlIGNhcHRpb24gb2YgdGhlIFNoZWxsQWJvdXQgZGlhbG9nIGJveCBpcyBsYW5ndWFnZSBzcGVjaWZpYyBhbmQKIAlzaG91bGQgYmUgZGVmaW5lZCBpbiB0aGUgcmVzb3VyY2VzLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUaHUgQXVnIDE3IDE5OjMwOjE0IDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHN1bnNpdGUudW5jLmVkdT4KCgkqIFsqL01ha2VmaWxlLmluXQoJUmVtb3ZlZCB3aW5lbGliY2xlYW4gdGFyZ2V0LCBhcyBpdCBkb2Vzbid0IHdvcmsgYW55d2F5LgoKCSogW2NvbnRyb2xzL2J1dHRvbi5jXQoJQXZvaWQgZHJhd2luZyB0aGUgZm9jdXMgcmVjdGFuZ2xlIG91dHNpZGUgb2YgdGhlIGJ1dHRvbi4KCgkqIFtjb250cm9scy93aWRnZXRzLmNdCglGaXhlZCBidWcgd2l0aCB0aGUgc2l6ZSBvZiB0aGUgcmVzZXJ2ZWQgYnl0ZXMgZm9yIHRoZSBFZGl0Cgljb250cm9sIChjYXVzZWQgRXVkb3JhIHRvIGNyYXNoKS4KCgkqIFtkZWJ1Z2dlci8qXSBbaW5jbHVkZS9kZWJ1Z2dlci5oXQoJVW5pZmllZCBkZWJ1Z2dlciBhZGRyZXNzIGhhbmRsaW5nLiBTZWdtZW50ZWQgYW5kIGxpbmVhciBhZGRyZXNzZXMKCWFyZSBubyBncm91cGVkIGluIGEgc2luZ2xlIHR5cGUgREJHX0FERFIuCglBbGwgY29tbWFuZHMgbm93IGFjY2VwdCBzZWc6b2ZmIGFkZHJlc3Nlcy4KCU1vZHVsZSBlbnRyeSBwb2ludHMgYXJlIG5vdyBsb2FkZWQgdXBvbiBmaXJzdCBlbnRyeSB0byB0aGUKCWRlYnVnZ2VyLCBzbyB0aGF0IGVudHJ5IHBvaW50cyBvZiB0aGUgbG9hZGVkIGV4ZWN1dGFibGUgYWxzbwoJYXBwZWFyIGluIHRoZSBzeW1ib2wgdGFibGUuCgoJKiBbaW5jbHVkZS9yZWdpc3RlcnMuaF0gW21pc2NlbXUvKi5jXQoJUmVnaXN0ZXIgbWFjcm9zIGFyZSBub3cgb2YgdGhlIGZvcm0gJ0FYX3JlZyhjb250ZXh0KScgaW5zdGVhZCBvZiAnQVgnLgoJVGhpcyBtYWtlcyBjb2RlIGxlc3MgcmVhZGFibGUsIGJ1dCB3aWxsIHByZXZlbnQgYSBsb3Qgb2YgbmFtZQoJY2xhc2hlcyB3aXRoIG90aGVyIGRlZmluaXRpb25zLiBJdCBhbHNvIGF2b2lkcyBhIGhpZGRlbiByZWZlcmVuY2UKCXRvIHRoZSAnY29udGV4dCcgdmFyaWFibGUuCgoJKiBbaXBjL2RkZV9hdG9tLmNdIFttaXNjL2F0b20uY10KCUFsbCAqQWRkQXRvbSBhbmQgKkZpbmRBdG9tIGZ1bmN0aW9ucyBub3cgdGFrZSBhIFNFR1BUUiBwYXJhbWV0ZXIsCgl0byBhbGxvdyBzdXBwb3J0aW5nIGludGVnZXIgYXRvbXMuCglNb3ZlZCBhdG9tLmMgdG8gbWVtb3J5LyBkaXJlY3RvcnkuCgoJKiBbbG9hZGVyL3Rhc2suY10KCUZpeGVkIGVudmlyb25tZW50IGFsbG9jYXRpb24gdG8gY29tcHV0ZSB0aGUgc2l6ZSBkeW5hbWljYWxseS4KCUFkZGVkICd3aW5kaXInIGVudmlyb25tZW50IHZhcmlhYmxlLgoJRml4ZWQgR2V0RE9TRW52aXJvbm1lbnQoKSB0byByZXR1cm4gdGhlIGN1cnJlbnQgdGFzayBlbnZpcm9ubWVudC4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCUZpeGVkIGJ1ZyBpbiBNU0dfR2V0V2luZG93Rm9yRXZlbnQoKS4KCldlZCBBdWcgIDkgMTE6NDA6NDMgMTk5NSAgTWFyY3VzIE1laXNzbmVyICA8bXNtZWlzc25AZmF1aTAxLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW2luY2x1ZGUvb2xlLmhdCglBZGRlZCBhIGxvdCBvZiBzdHJ1Y3R1cmVzICBmcm9tIG15IEJvcmxhbmQgTWFudWFsLiBOZWl0aGVyIGNvbXBsZXRlLAoJbm9yIDEwMCUgcmlnaHQgKGNoZWNrIHBsZWFzZSkKCQoJKiBbbWlzYy9zaGVsbC5jXQoJRml4ZWQgc29tZSBvZiB0aGUgUmVnKiBmdW5jdGlvbnMuCglFbmhhbmNlZCBTaGVsbEV4ZWN1dGUuCglQbGVhc2UgdGVzdDogd2luZSAicmVnZWRpdC5leGUgL3YiIG1wbGF5ZXIuZXhlIHNvdW5kcmVjLmV4ZQoJRG8gWU9VIGtub3cgdGhlIGZvcm1hdCBvZiBcV0lORE9XU1xSRUcuREFUPyBNYWlsIG1lIHBsZWFzZSA6KQoKCSogW21pc2MvZG9zX2ZzLmNdCglNYWtlIHVtc2RvcyBtb3VudGVkIHdpbmRvd3MgZGlycyB3b3JrIGFnYWluLgoKCSogW21pc2NlbXUvZW11bGF0ZS5jXQoJQWRkZWQgc29tZSBjb21tZW50cywgcHJlaW1wbGVtZW50YXRpb24gb2Ygc3ViZnVuY3Rpb24gNy4KCgkqIFttdWx0aW1lZGlhL21tc3lzdGVtLmNdCglJbXBsZW1lbnRlZCBtY2lTZW5kU3RyaW5nLiBub3QgY29tcGxldGUsIG5vdCBjbGVhbiwgbm90CgluZWNlc3NhcmlseSB3b3JraW5nIChvbmx5IGNoZWNrZWQgd2l0aCBhIHByb2dyYW0gd2hpY2ggdXNlcwogCSdjZGF1ZGlvJyAob25lIHdvcmtpbmcgcHJvZ3JhbSBpcyBjb29sLmV4ZSwgYSBzaGFyZXdhcmUgd2F2ZWRpdG9yCiAJd2l0aCBjZGF1ZGlvIHBsYXkgZmFjaWxpdGllcy4pCgoJKiBbbXVsdGltZWRpYS9tY2ljZGEuY10KCVNlZ3B0ciBmaXhlcyBpbiBEcml2ZXJQcm9jCglEZWZhdWx0IGNkcm9tIGRyaXZlIGluIExpbnV4IGlzIC9kZXYvY2Ryb20gLi4uIHVzdWFsbHkgYSBzeW1ib2xpYwogCWxpbmsgdG8geW91ciByZWFsIGNkcm9tIGRldmljZS4KClR1ZSBBdWcgIDggMTk6NDE6NTAgQ0RUIDE5OTUgRGFuaWVsIFNjaGVwbGVyIDxka3MyQGNlYy53dXN0bC5lZHU+CgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglEb24ndCBjcmFzaCBpbiBhIExvYWRTdHJpbmcgdG8gTlVMTAoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJRml4ZWQgYWNjZWxlcmF0b3JzIHRvIHdvcmsgd2l0aCBtb2RpZmllcnMuICAoQUxULXggbW9kaWZpZXJzIHN0aWxsCiAJd29uJ3Qgd29yayB1bmxlc3MgdGhlIEFMVCBrZXlwcmVzcyBleGl0ZWQgdGhlIG1lbnUuKQoKCSogW21pc2MvZmlsZS5jXQoJRXhwYW5kIGEgZmlsZSB0byB0aGUgY3VycmVudCBvZmZzZXQgd2l0aCBhbiBfbHdyaXRlIG9mIHNpemUgemVyby4KCgkqIFttaXNjL2ZpbGUuY10KCVNldCBhIG5ld2x5IGNyZWF0ZWQgZmlsZSB0byByZWFkLXdyaXRlIGluc3RlYWQgb2Ygd3JpdGUtb25seS4KCQpTdW4gQXVnICA2IDIwOjI4OjM1IDE5OTUgIEFuYW5kIEt1bXJpYSA8YWt1bXJpYUBvemVtYWlsLmNvbS5hdT4KCgkqIFttaXNjL21haW4uY10gW2luY2x1ZGUvbXNkb3MuaF0KCUZpeGVkIHRvIHJldHVybiBET1MgdmVyc2lvbiA2LjIyLCBhbmQgdGhlIGNvcnJlY3QgYnl0ZSBvcmRlcgoJZm9yIFdpbmRvd3MgcHJvZ3JhbXMuCgpXZWQgQXVnICAyIDEyOjM2OjMzIDE5OTUgICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIFtpbmNsdWRlL29wdGlvbnMuaF0gW21lbW9yeS9nbG9iYWwuY10gW21pc2MvbWFpbi5jXQoJTWFrZSB0aGUgbmV3IElQQyBydW4tdGltZSBzZWxlY3RpYmxlLCBkaXNhYmxpbmcgaXQgYnkgZGVmYXVsdC4KCShJIHRoaW5rIGl0J3Mgb25seSB1c2VmdWwgZm9yIGxpYndpbmUsIGFueXdheS4pCgoJKiBbbG9hZGVyL3Rhc2suY10gW21lbW9yeS9zZWxlY3Rvci5jXQoJSW4gRnJlZVNlbGVjdG9yKCksIHdhbGsgdXAgdGhlIHN0YWNrIGFuZCBmaXggdGhlIGZyYW1lcy4KCgkqIFtvYmplY3RzL2RpYi5jXQoJTWlzc2luZyBicmVhayBzdGF0ZW1lbnQgaW4gRElCX1NldEltYWdlQml0c19STEU4KCkuCglJbiBHZXRESUJpdHMoKSwgc2V0IHRoZSBjb21wcmVzc2lvbiBmbGFnIGluIHRoZSBiaXRtYXAgaW5mbyB0byB6ZXJvLgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglHZXROZXh0RGxnR3JvdXBJdGVtKCkgbmVlZHMgdG8gdHJlYXQgdGhlIGZpcnN0IGNoaWxkIGFzIGlmIGl0IGhhZAoJYW4gaW1wbGljaXQgV1NfR1JPVVAgYml0IHNldC4KCk1vbiBKdWwgMzEgMTU6NDQ6NDcgRURUIDE5OTUgTG91aXMtRC4gRHViZWF1IDxsZGRAc3RlcC5wb2x5bXRsLmNhPgoKCSogW21pc2MvZG9zX2ZzLmNdCglRdWljayduIGRpcnR5IGZpeCBmb3IgdGhlIGluaXRpYWxpc2F0aW9uIG9mIHRoZSBaOiBpbmZvcm1hdGlvbgoJc3RydWN0dXJlLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTYXQgSnVsIDIyIDIyOjM5OjA5IElEVCAxOTk1IE1pY2hhZWwgVmVrc2xlciA8ZTE2NzgyMjNAdG9jaG5hcGMyLnRlY2huaW9uLmFjLmlsPgoKCSogW2lwYy8qXQoJTmV3IGRpcmVjdG9yeS4gVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIG5ldyBpbnRlci13aW5lCiAJY29tbXVuaWNhdGlvbnMgc3VwcG9ydC4gSXQgZW5hYmxlcyBEREUgcHJvdG9jb2xzIGJldHdlZW4gdHdvIHdpbmUKIAlpbnN0YW5jZXMuICBDdXJyZW50bHkgaXQgaXMgbGltaXRlZCB0byBEREUsIGJ1dCBjYW4gYmUgZW5oYW5jZWQgdG8KIAlzdXBwb3J0IE9MRSBiZXR3ZWVuIDIgZGlmZmVyZW50IHdpbmUgaW5zdGFuY2VzLiAgVGhpcyBpcyB2ZXJ5CiAJaW1wb3J0YW50IGZvciBsaWJ3aW5lLmEgRERFL09MRSBzdXBwb3J0LgoKCSogW3Rvb2xzL2lwY2xdCiAgICAJQSBzY3JpcHQgdG8gZGVsZXRlIGdhcmJhZ2UgSVBDIGhhbmRsZXMgKHNoYXJlZCBtZW1vcnksIHNlbWFwaG9yZXMKIAlhbmQgbWVzc2FnZSBxdWV1ZXMpLiAgVGhlIGN1cnJlbnQgaW50ZXItd2luZSBjb21tdW5pY2F0aW9uIGlzIG5vdAogCXBlcmZlY3QsIGFuZCBzb21ldGltZXMgbGVhdmVzIGdhcmJhZ2UgYmVoaW5kLgoKCSogW2lmMTYzMi9yZWxheS5jXSBbaW5jbHVkZS9hdG9tLmhdIFtpbmNsdWRlL2dsb2JhbC5oXQogCVtsb2FkZXIvc2VsZWN0b3IuY10gW2xvYWRlci90YXNrLmNdIFtsb2FkZXIvbW9kdWxlLmNdCiAJW2xvYWRlci9zaWduYWwuY10gW21lbW9yeS9nbG9iYWwuY10gW21pc2MvYXRvbS5jXQogCVt3aW5kb3dzL2NsYXNzLmNdIFt3aW5kb3dzL21lc3NhZ2UuY10gW3dpbmRvd3Mvd2luLmNdCglbSW1ha2VmaWxlXQogICAgCUhvb2tzIGZvciBpbnRlci13aW5lIERERSBzdXBwb3J0LCBjdXJyZW50IEdsb2JhbC4qQXRvbSBmdW5jdGlvbnMKIAlyZW5hbWVkIHRvIExvY2FsLipBdG9tIHNpbmNlIEdsb2JhbC4qQXRvbSBhcmUgdXNlZCBmb3IgSW50ZXItV2luZQogCURERSBjb21tdW5pY2F0aW9uLiAoVGhlIGZpcnN0IGNhbGwgdG8gdGhlc2UgZnVuY3Rpb25zIHNldHMgdXAgdGhlCiAJSVBDIHN0cnVjdHVyZXMgLSB3aGljaCBvdGhlcndpc2UgY2F1c2UgdW5uZWVkZWQgb3ZlcmhlYWQuCgpNb24gSnVsIDE3IDE5OjU1OjIxIDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHN1bnNpdGUudW5jLmVkdT4KCgkqIFtjb250cm9scy9tZW51LmNdCglEb24ndCBjcmFzaCBpZiBhIE5VTEwgc3RyaW5nIGlzIHBhc3NlZCB0byBtZW51IGZ1bmN0aW9ucy4KCgkqIFttZW1vcnkvc2VsZWN0b3IuY10KCVdlIG5vdyB1c2UgYSBiaXQgaW4gbGR0X2ZsYWdzX2NvcHkgdG8gaW5kaWNhdGUgZnJlZSBMRFQgZW50cmllcy4KCUZpeGVkIGEgYnVnIGluIFNFTEVDVE9SX1JlYWxsb2NCbG9jayB0aGF0IGNvdWxkIGNhdXNlIGl0IHRvCglvdmVyd3JpdGUgdmFsaWQgTERUIGVudHJpZXMgd2hlbiBncm93aW5nIGEgYmxvY2suCgoJKiBbbWlzY2VtdS9pbnN0ci5jXQoJRW11bGF0ZSBpbnQgeHggaW5zdHJ1Y3Rpb24gYnkgc3RvcmluZyB0aGUgaW50ZXJydXB0IHZlY3RvciBpbgoJQ1M6SVAgYW5kIHJldHVybmluZyBkaXJlY3RseS4gVGhpcyBhbGxvd3MgYSBwcm9ncmFtIHRvIGluc3RhbGwgYW4KCWludGVycnVwdCB2ZWN0b3IuCgoJKiBbd2luZG93cy93aW4uY10KCUFkZGVkIGZ1bmN0aW9uIFdJTl9HZXRUb3BQYXJlbnQgdG8gZ2V0IHRoZSB0b3AtbGV2ZWwgcGFyZW50IG9mIGEKCXdpbmRvdy4KClN1biBKdWwgIDE2IDE4OjE3OjE3IDE5OTUgIEdyZWdvcnkgVHJ1YmV0c2tveSA8Z3Jpc2hhQG1pcmEuY29tPgoKICAgICAgICAqIFtsb2FkZXIvcmVzb3VyY2UuY10KICAgICAgICBBZGRlZCBMb2FkSWNvbkhhbmRsZXIuIEl0IGRvZXNuJ3QgZG8gYW55dGhpbmcgeWV0LCBidXQgbm93IHlvdQogICAgICAgIGNhbiB1c2UgYm9ybGFuZCBoZWxwIGZpbGVzIHdpdGggd2luaGVscC5leGUuCgpTdW4gSnVsIDE2IDExOjU4OjQ1IDE5OTUgQW5hbmQgS3VtcmlhIDxha3VtcmlhQG96ZW1haWwuY29tLmF1PgoKCSogW21pc2MvbWFpbi5jXQoJRml4ZWQgdG8gcmV0dXJuIDM4NiBFbmhhbmNlZCBtb2RlIGNvcnJlY3RseS4gQWxzbyByZXR1cm4gdGhlIHNhbWUKIAl0eXBlIG9mIENQVSwgZm9yIGJvdGggRW5oYW5jZWQgYW5kIFN0YW5kYXJkIG1vZGUsIG5hbWVseSBhIDM4Ni4KClN1biBKdWwgMTYgMDA6MDI6MDQgMTk5NSAgICBNYXJ0aW4gdm9uIExvZXdpcyA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogW0NvbmZpZ3VyZV0gW2luY2x1ZGUvb3B0aW9ucy5oXSBbaW5jbHVkZS93aW5lb3B0cy5oXQoJICBbbWlzYy9tYWluLmNdW21pc2Mvc3B5LmNdCgkgIFJlbW92ZWQgc3VwcG9ydCBvZiBzcHkgZmlsZS4gUmVkaXJlY3RlZCBzcHkgbWVzc2FnZXMgdG8gc3RkZGViLgoJICBSZW1vdmVkIC1zcHkgb3B0aW9uLiBBZGRlZCAtZGVidWdtc2cgK3NweSBvcHRpb24uCgoJKiBbZGVidWdnZXIvZGJnLnldW2RlYnVnZ2VyL2RlYnVnLmxdCglFbmFibGVkIHNlZ21lbnRlZCBhZGRyZXNzZXMgKHNlZzpvZmZzKSBmb3IgYnJlYWsgYW5kIHggY29tbWFuZHMuCgoJKiBbaWYxNjMyL2dkaS5zcGVjXSBbb2JqZWN0cy9yZWdpb24uY10gW3dpbmRvd3MvZ3JhcGhpY3MuY10KCSAgW2luY2x1ZGUvcmVnaW9uLmhdCglGcmFtZVJnbiwgUkVHSU9OX0ZyYW1lUmduOiBOZXcgZnVuY3Rpb25zCgoJKiBbaWYxNjMyL2tlcm5lbC5zcGVjXQoJSXNXaW5PbGRBcFRhc2s6IFJldHVybiBmYWxzZQoKCSogW2lmMTYzMi9tb3VzZS5zcGVjXQoJQ3BsQXBwbGV0OiBSZW1vdmVkCgoJKiBbaWYxNjMyL3VzZXIuc3BlY10gW3dpbmRvd3Mvd2luLmNdCglTaG93T3duZWRQb3B1cHM6IE5ldyBmdW5jdGlvbgoKCSogW2lmMTYzMi93aW5zb2NrLnNwZWNdIFttaXNjL3dpbnNvY2tldC5jXQoJaW5ldF9hZGRyLCBzZWxlY3Q6IE5ldyBwcm90b3R5cGVzIGluIHJlbGF5IGNvZGUKCUZpeGVkIG1lbW9yeSBsYXlvdXQgZm9yIG5ldGRiIGZ1bmN0aW9ucyAoZ2V0WGJ5WSkuCglXSU5TT0NLX2lvY3Rsc29ja2V0OiBUcmFuc2xhdGVkIEZJT05SRUFELCBGSU9OQklPLCBhbmQgRklPQVNZTkMKCgkqIFtvYmplY3RzL2NsaXBwaW5nLmNdCglSZWN0VmlzaWJsZTogRml4ZWQgY2FsbCB0byBMUFRvRFAKCgkqIFtyYy93aW5lcmMuY10KCW1haW46IFJlbW92ZWQgZXh0cmEgYXJndW1lbnQgdG8gZ2V0b3B0IGZvciBMaW51eC4KClR1ZSBKdWwgMTEgMDA6MTQ6NDEgMTk5NSAgIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoKICAgICAgICAqIFtjb250cm9scy9saXN0Ym94LmNdCglZZXQgYW5vdGhlciBmaXggZm9yIExpc3RCb3hEaXJlY3RvcnkoKS4KCQoJKiBbbG9hZGVyL21vZHVsZS5jXSBbaWYxNjMyL2tlcm5lbC5zcGVjXQoJTWFrZSBHZXRNb2R1bGVIYW5kbGUoKSBhY2NlcHQgaW5zdGFuY2UgaGFuZGxlcyBhcyBwYXJhbWV0ZXIuCgogICAgICAgICogW2lmMTYzMi9yZWxheS5jXSBbbG9hZGVyL3Rhc2suY10KCVB1dCBhIG1hZ2ljIGNvb2tpZSBhdCB0aGUgYm90dG9tIG9mIHRoZSAzMiBiaXQgc3RhY2ssIGFuZCBjaGVjayBvbgoJZWFjaCByZXR1cm4gZnJvbSBhIDMyIGJpdCBmdW5jdGlvbiB3aGV0aGVyIGl0J3Mgc3RpbGwgdGhlcmUuIENvbXBsYWluCglpZiBpdCdzIG5vdC4KCiAgICAgICAgKiBbaWYxNjMyL3VzZXIuc3BlY10KCVdyb25nIGVudHJ5IGZvciBDbG9zZURyaXZlcigpLgoKCSogW21pc2MvZG9zX2ZzLmNdIFtsb2FkZXIvdGFzay5jXSBbaW5jbHVkZS9kb3NfZnMuaF0gW21pc2MvZmlsZS5jXQoJW21pc2NlbXUvaW50MjEuY10KCUxhcmdlIHBhcnRzIG9mIGRvc19mcy5jIHNpbXBsaWZpZWQuIENoYW5nZWQgaXQgdG8gdXNlIG9uZQoJY3VycmVudCBkcml2ZS9kaXJlY3RvcnkgcGVyIHRhc2ssIHdoaWNoIGlzIHNldCB0byB0aGUgbW9kdWxlIHBhdGggb24KCXRhc2sgY3JlYXRpb24uCglQcmV2ZW50IENvcmVsUGFpbnQgZnJvbSBjbG9zaW5nIHN0ZGluLgoJb3BlbigpIHdpdGggT19DUkVBVCBzZXQgbXVzdCBiZSBwYXNzZWQgdGhyZWUgcGFyYW1ldGVycy4KCURPUyBGaW5kRmlyc3QoKS9GaW5kTmV4dCgpIGNvdWxkIGNyYXNoIHdoZW4gRkFfTEFCRUwgd2FzIHNldC4gRml4ZWQsCglpdCdzIGluIERPU19yZWFkZGlyKCkgbm93LgoKCSogW21pc2MvcHJvZmlsZS5jXQoJU29tZSBiYWRseSB3cml0dGVuIHNvZnR3YXJlIChMb3R1cyBGcmVlbGFuY2UgR3JhcGhpY3MpIHBhc3NlcyBhIGJvZ3VzCglzaXplIHBhcmFtZXRlciB0aGF0IGNhdXNlZCBXaW5lIHRvIHdyaXRlIG9mZiB0aGUgZW5kIG9mIGEgc2VnbWVudC4KCUZpeGVkLiAoSXQncyBwcm9iYWJseSB0b28gcGFyYW5vaWQgbm93LikKCQoJKiBbbXVsdGltZWRpYS9tbXN5c3RlbS5jXSBbbXVsdGltZWRpYS90aW1lLmNdIFttdWx0aW1lZGlhL2pveXN0aWNrLmNdCglbbXVsdGltZWRpYS9JbWFrZWZpbGVdIFtpZjE2MzIvd2lucHJvY3Muc3BlY10KCTE2IGJpdCBlbnRyeSBwb2ludCBmb3IgTU1TeXNUaW1lQ2FsbGJhY2suCglTcGxpdCBvZmYgdGltZS5jIGFuZCBqb3lzdGljay5jIGZyb20gbW1zeXN0ZW0uYy4KCQoJKiBbb2JqZWN0cy9kaWIuY10KCUdldERJQml0cygpOiBjYWxsIFhHZXRJbWFnZSgpIHZpYSBDYWxsVG8zMl9MYXJnZVN0YWNrLgoKICAgICAgICAqIFt3aW5kb3dzL2N1cnNvci5jXQoJRGVzdHJveUN1cnNvcigpOiBkbyBub3RoaW5nIGZvciBidWlsdGluIGN1cnNvcnMuCgkKCSogW3dpbmRvd3MvbWRpLmNdCglIYWxmIG9mIFdNX01ESVNFVE1FTlUgaW1wbGVtZW50ZWQuCgkKCSogW3dpbmRvd3Mvd2luLmNdCglFbnVtV2luZG93cygpIGFuZCBFbnVtVGFza1dpbmRvd3MoKSBuZXZlciBlbnVtZXJhdGVkIGFueSB3aW5kb3dzLgoJRml4ZWQuCgoJKiBbd2luZG93cy8qLmNdCglGaXhlZCBHZXRQYXJlbnQoKSB0byByZXR1cm4gY29ycmVjdCB2YWx1ZXMgZm9yIG93bmVkIHdpbmRvd3MuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglEb24ndCB0cnkgdG8gYWN0aXZhdGUgZGlzYWJsZWQgdG9wLWxldmVsIHdpbmRvd3MuCgogICAgICAgICogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglXb3JrIGFyb3VuZCBhIGJ1ZyBpbiBnY2MtMi43LjAuCgkKCSogW3Rvb2xzL2J1aWxkLmNdIFtpbmNsdWRlL3N0YWNrZnJhbWUuaF0gW21lbW9yeS9nbG9iYWwuY10gCglbbG9hZGVyL3Rhc2suY10gW21lbW9yeS9zZWxlY3Rvci5jXQoJU29tZSBWaXN1YWwgQmFzaWMgcHJvZ3JhbXMgKGFuZCBwb3NzaWJseSBvdGhlcnMsIHRvbykgZXhwZWN0IEVTIHRvIGJlIAoJcHJlc2VydmVkIGJ5IGEgY2FsbCB0byBhbiBBUEkgZnVuY3Rpb24sIHNvIHdlIGhhdmUgdG8gc2F2ZSBpdC4KCUluIEdsb2JhbEZyZWUoKSBhbmQgRnJlZVNlbGVjdG9yKCksIHdlIG11c3QgY2xlYXIgQ1VSUkVOVF9TVEFDSzE2LT5lcyAKCXRvIHByZXZlbnQgc2VnZmF1bHRzIGlmIEVTIGNvbnRhaW5lZCB0aGUgc2VsZWN0b3IgdG8gYmUgZnJlZWQuCgpTdW4gSnVsICA5IDIwOjIxOjIwIDE5OTUgIEpvbiBUb21icyAgPGpvbkBndGV4MDIudXMuZXM+CgoJKiBbKi8qXQoJQWRkZWQgbWlzc2luZyBwcm90b3R5cGVzIHRvIGhlYWRlciBmaWxlcyBhbmQgcmVsZXZhbnQgaW5jbHVkZXMKCXRvIHJlZHVjZSBjb21waWxlIHRpbWUgd2FybmluZ3MuCgpTdW4gSnVsICA5IDE4OjMyOjU2IDE5OTUgIE1pY2hhZWwgUGF0cmEgIDxtaWNreUBtYXJpZS5waHlzaWsudHUtYmVybGluLmRlPgoKCSogW2NvbmZpZ3VyZS5pbl0gW2luY2x1ZGUvY29uZmlnLmhdIFsqL01ha2VmaWxlLmluXQoJTmV3IGNvbmZpZ3VyYXRpb24gc2NoZW1lIGJhc2VkIG9uIGF1dG9jb25mLgoKU2F0IEp1bCAgOCAxNDoxMjo0NSAxOTk1ICBNb3J0ZW4gV2VsaW5kZXIgIDx0ZXJyYStAY3MuY211LmVkdT4KCgkqIFttaXNjZW11L2lvcG9ydHMuY10KCVJldmFtcCB0byBoYXZlIG9ubHkgb25lIGluLSBhbmQgb25lIG91dC0gdmFyaWFudCwgYm90aCByZWFsbHkKIAlpbXBsZW1lbnRlZC4KCgkqIFttaXNjZW11L2luc3RyLmNdCglJTlNUUl9FbXVsYXRlSW5zdHJ1Y3Rpb246IFVzZSBuZXcgaW9wb3J0IGludGVyZmFjZS4gIEltcGxlbWVudAogCXN0cmluZyBpby4gIENvcnJlY3QgaW5zdHJ1Y3Rpb24gcG9pbnRlciBmb3IgMzItYml0IGNvZGUuCgoJKiBbaW5jbHVkZS9taXNjZW11LmhdCglVcGRhdGUgcG9ydCBmdW5jdGlvbiBwcm90b3R5cGVzLgoKCSogW2luY2x1ZGUvcmVnaXN0ZXJzLmhdCglEZWZpbmVkIEZTIGFuZCBHUy4KClNhdCBKdWwgIDggMTM6Mzg6NTQgMTk5NSAgSGFucyBkZSBHcmFhZmYgIDxncmFhZmZAdHdpNzIudHdpLnR1ZGVsZnQubmw+CgoJKiBbbWlzYy9kb3NfZnMuY10KCUNob3BPZmZTbGFzaCgpOiBBIHBhdGggY29uc2lzdGluZyBvZmYgYSBzaW5nbGUgc2xhc2ggaXMgbGVmdAogCWludGFjdCwgYW5kIG11bHRpcGxlIHNsYXNoZXMgYXJlIGFsbCByZW1vdmVkLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpXZWQgSnVsICA1IDE5OjA2OjM1IDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHN1bnNpdGUudW5jLmVkdT4KCgkqIFtjb250cm9scy9zY3JvbGwuY10KCUZpeGVkIGRyYXdpbmcgYnVnIHRoYXQgY2F1c2VkIHBhcnQgb2YgYSBub24tY2xpZW50IHNjcm9sbCBiYXIKCXRvIGJlIHBhaW50ZWQgZXZlbiB3aGVuIHRoZSBzY3JvbGwtYmFyIHdhcyBoaWRkZW4uCgoJKiBbZGVidWdnZXIvYnJlYWsuY10gW2RlYnVnZ2VyL2RiZy55XQoJUmV3cm90ZSBicmVha3BvaW50IGhhbmRsaW5nIHRvIHdvcmsgaW4gMTYtYml0IG1vZGUuCglJbXBsZW1lbnRlZCBzaW5nbGUtc3RlcHBpbmcgKCdzdGVwJyBhbmQgJ25leHQnIGluc3RydWN0aW9ucykuCgoJKiBbZGVidWdnZXIvZGVidWcubF0KCUZvcm1hdCBzcGVjaWZpZXIgaXMgbm93IGEgc2VwYXJhdGUgdG9rZW4uCglFbnRlcmluZyBhbiBlbXB0eSBsaW5lIGF0IHRoZSBkZWJ1Z2dlciBwcm9tcHQgY2F1c2VzIHRoZSBwcmV2aW91cwoJY29tbWFuZCB0byBiZSByZXBlYXRlZCwgbGlrZSB1bmRlciBnZGIuCgkKCSogW2RlYnVnZ2VyL2RlYnVnLmxdIFtkZWJ1Z2dlci9yZWdpc3RlcnMuY10KCURpZmZlcmVudGlhdGUgMTYtYml0IGFuZCAzMi1iaXQgcmVnaXN0ZXJzIHdpdGhvdXQgdGFraW5nIGN1cnJlbnQKCW1vZGUgaW50byBhY2NvdW50ICgkZWF4IGlzIGFsd2F5cyAzMi1iaXQsICRheCBhbHdheXMgMTYtYml0KS4KCgkqIFtkZWJ1Z2dlci9zdGFjay5jXQoJRml4ZWQgc3RhY2sgaW5mb3JtYXRpb24gcm91dGluZXMgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIDE2LWJpdAoJYW5kIDMyLWJpdCBzdGFja3MuCgoJKiBbbG9hZGVyL3Rhc2suY10KCU9wdGlvbiAtZGVidWcgbm93IHNldHMgYSBicmVha3BvaW50IGF0IHRoZSBmaXJzdCBpbnN0cnVjdGlvbiBvZgoJZXZlcnkgbG9hZGVkIHRhc2suCgoJKiBbbWlzY2VtdS9pbnN0ci5jXQoJQWRkZWQgaGFuZGxpbmcgb2YgbG9jaywgcmVwZSBhbmQgcmVwbmUgcHJlZml4ZXMuCgoJKiBbb2JqZWN0cy9kaWIuY10KCUNoYW5nZWQgU3RyZXRjaERJQml0cygpIHRvIGRvIHRoZSBjb3JyZWN0IHRoaW5nLCBldmVuIGlmIGl0J3Mgc3RpbGwKCW5vdCByZWFsbHkgb3B0aW1hbC4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglGaXhlcyBpbiBSb3VuZFJlY3QoKSwgdGhhbmtzIHRvIEJhYmFrIE1hc2FsZWhkYW4uCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglUcmllZCB0byBmaXggbW91c2UgZXZlbnQgaGFuZGxpbmcgd2l0aCByZXNwZWN0IHRvIGRpc2FibGVkCgl3aW5kb3dzLgoKCSogW3dpbmRvd3MvcGFpbnRpbmcuY10KCUNsZWFyIFdJTl9ORUVEU19OQ1BBSU5UIGZsYWcgYmVmb3JlIHNlbmRpbmcgV01fTkNQQUlOVCB0byBhdm9pZAoJaW5maW5pdGUgbG9vcHMuCgoJKiBbd2luZG93cy93aW4uY10KCUZpeGVkIElzV2luZG93VmlzaWJsZSgpIHRvIHJldHVybiBGQUxTRSB3aGVuIG9uZSBvZiB0aGUgcGFyZW50Cgl3aW5kb3dzIGlzIGhpZGRlbi4KClNhdCBKdWwgIDEgMjI6MDg6MjEgMTk5NSAgIE1hcnRpbiB2b24gTG9ld2lzIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBbaWYxNjMyL2NvbXBvYmouc3BlY11bbWlzYy9jb21wb2JqLmNdCglDb0dldE1hbGxvYzogTmV3IGZ1bmN0aW9uCglBZGRlZCByZWxheSBlbnRyaWVzIGZvciBDT01QT0JKIG9yZGluYWxzIGFib3ZlIDEwMAoJQ29Jbml0aWFsaXplOiBDaGFuZ2VkIHBhcmFtZXRlciB0byBEV09SRAoKCSogW2lmMTYzMi9vbGUyLnNwZWNdCglFeHBvcnRlZCBpbXBsZW1lbnRhdGlvbiBvZiBPbGVCdWlsZFZlcnNpb24KCgkqIFtpZjE2MzIvb2xlMmRpc3Auc3BlY11bbWlzYy9vbGUyZGlzcC5jXVttaXNjL0ltYWtlZmlsZV0KCW9sZTJkaXNwLmM6IE5ldyBmaWxlCglTeXNBbGxvY1N0cmluZywgU3lzUmVhbGxvY1N0cmluZywgU3lzQWxsb2NTdHJpbmdMZW4sCglTeXNSZUFsbG9jU3RyaW5nTGVuLCBTeXNGcmVlU3RyaW5nLCBTeXNTdHJpbmdMZW46IG5ldyBmdW5jdGlvbnMKCgkqIFtpZjE2MzIvb2xlMm5scy5zcGVjXVtpbmNsdWRlL3dpbm5scy5oXVttaXNjL29sZTJubHMuY10KCUNvbXBhcmVTdHJpbmdBOiBOZXcgZnVuY3Rpb24KClRodSBKdW4gMjkgMTk6NDI6MDIgMTk5NSAgTWFyY3VzIE1laXNzbmVyICA8bXNtZWlzc25AZmF1aTAxLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJKiBbb2JqZWN0cy9mb250LmNdIFtpZjE2MzIvZ2RpLnNwZWNdCglOZXcgc3R1YnMgZm9yIENyZWF0ZVNjYWxhYmxlRm9udFJlc291cmNlLCBHZXRHbHlwaE91dGxpbmUuCgpUaHUgSnVuIDI5IDEzOjQ3OjA4IEdNVCAxOTk1ICBH9nJhbiBUaHluaSAgKGdvcmFuQG5vcnJza2VuLmJpbGRiYXNlbi5zZSkKCgkqIFttaXNjL2NvbW1kbGcuY10KCUV4dGVuc2l2ZSBjaGFuZ2VzIGFuZCBidWcgZml4ZXMgdG8gRmlsZURpYWxvZyBoYW5kbGluZywKICAgICAgICBiZWhhdmVzIG1vcmUgbGlrZSBuYXRpdmUgV2luZG93cy4KCldlZCBKdW4gMjggMTM6MDQ6NDQgMTk5NSAgIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoKICAgICAgICAqIFtjb250cm9scy9saXN0Ym94LmNdIFtjb250cm9scy9jb21iby5jXQoJU29tZSBtaW5vciBvcHRpbWl6YXRpb25zLgoJCgkqIFttZW1vcnkvbG9jYWwuY10KCUxPQ0FMX0ZpbmRGcmVlQmxvY2soKTogTmV2ZXIgdXNlIHRoZSBsYXN0IG9uZS4KCQoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJR2xvYmFsUmVBbGxvYygpOiBHTUVNX01PRElGWSBtdXN0IG5vdCBiZSBpZ25vcmVkIHdoZW4gc2l6ZT09MC4KCQoJKiBbbWlzYy9maWxlLmNdCglyZWFkKCkgcmV0dXJucyBhbiBlcnJvciB3aGVuIGxlbmd0aD09MC4gVGhpcyBpcyBub3Qgd2hhdCBXaW5kb3dzCglwcm9ncmFtcyBleHBlY3QsIHNvIHBheSBhdHRlbnRpb24gdG8gdGhpcyBpbiBfbHJlYWQoKS4gQ2hhbmdlZCB0aGlzCglpbiBfbHdyaXRlKCksIF9ocmVhZCgpLCBfaHdyaXRlKCksIHRvby4KCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCUxvYWRJY29uKCk6IElnbm9yZSBiaWgtPmJpU2l6ZUltYWdlLCBzb21lIGljb25zIGhhdmUgd3JvbmcgdmFsdWVzIGluCgl0aGVyZS4KCQoJKiBbaWYxNjMyL3NoZWxsLnNwZWNdIFttaXNjL3NoZWxsLmNdCglXcm9uZyBzcGVjIGZpbGUgZW50cmllcyBjYXVzZWQgaGF2b2M6IEhLRVkgaGFzIDMyIGJpdCwgbm90IDE2LgoJQWNjZXB0IHNvbWUgbW9yZSBjb21iaW5hdGlvbnMgb2YgcGFyYW1ldGVycyBpbiB0aGUgUmVnLi4oKSBmdW5jdGlvbnMuCgkKCSogW2lmMTYzMi90b29saGVscC5zcGVjXQoJTWFrZSBJbnRlcnJ1cHRSZWdpc3RlcigpIGFuZCBJbnRlcnJ1cHRVbnJlZ2lzdGVyKCkgcmV0dXJuIGZhbHNlLgoKCSogW3dpbmRvd3MvaG9vay5jXQoJQ2FsbE5leHRIb29rRXgoKSB1c2VkIHRvIGNyYXNoIHdoZW4gY2FsbGVkIHdpdGggYSBudWxsIGhob29rLiBGaXhlZC4KCldlZCBKdW4gMjggMTA6MTQ6MzQgMTk5NSAgTWFydGluIHZvbiBMb2V3aXMgIDxtYXJ0aW5AaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBbaW5jbHVkZS9uZWV4ZS5oXVtsb2FkZXIvbmVfaW1hZ2UuY10KCU5FX0xvYWRTZWdtZW50OiBEZXRlY3QgaXRlcmF0ZWQgc2VnbWVudHMKCgkqIFttaXNjL29sZTJubHMuY10KCUxPQ0FMRV9TTE9OR0RBVEU6IGZpeGVkIHR5cG8KCgkqIFttaXNjZW11L2ludDVjLmNdCglSZW9yZGVyZWQgaW5jbHVkZSBmaWxlcyB0byBhdm9pZCBjb25mbGljdHMgd2l0aCBMaW51eCBsaWJjLjUuMQoKCSogW3JjL3dpbmVyYy5jXQoJQWRkZWQgLWIgb3B0aW9uIHRvIHByb2Nlc3MgYmluYXJ5IHJlc291cmNlIGZpbGVzIGludG8gQyBhcnJheXMKCgkqIFtpbmNsdWRlL2NhbGxiYWNrLmhdCglDYWxsV25kUHJvYzogQWRkZWQgZHVtbXkgZHMgcGFyYW1ldGVyIGZvciBsaWJ3aW5lCgoJKiBbaW5jbHVkZS9nZGkuaF1baW5jbHVkZS91c2VyLmhdCglVU0VSX0hFQVBfQUxMT0MsIEdESV9IRUFQX0FMTE9DOiBkcm9wcGVkIGZsYWdzIHBhcmFtZXRlcgoKCSogW2luY2x1ZGUvbGR0LmhdW2luY2x1ZGUvc3RhY2tmcmFtZS5oXQoJZGVmaW5lZCBzZWdtZW50IGNvbnZlcnNpb24gbWFjcm9zIGZvciBsaWJ3aW5lCgoJKiBbbWlzYy9hdG9tLmNdCglEZWZpbmVkIFVTRVJfSGVhcFNlbCBmb3IgbGlid2luZQoKCSogW21pc2MvbWFpbi5jXQoJRGlzYWJsZSAtZGxsIG9wdGlvbiBmb3IgbGlid2luZQoKCSogW21pc2MvdXNlci5jXQoJcmVtb3ZlZCBHZXRGcmVlU3lzdGVtUmVzb3VyY2VzLCBTeXN0ZW1IZWFwSW5mbyBmcm9tIGxpYndpbmUgZm9yIG5vdwoKCSogW3Rvb2xraXQvaGVhcC5jXQoJZml4ZWQgTG9jYWxMb2NrIHByb3RvdHlwZQoKCSogW3Rvb2xraXQvc3VwLmNdCglzeW5jJ2VkIGxvYWRfbXpfaGVhZGVyLCBsb2FkX25lX2hlYWRlciB3aXRoIHN0cnVjdHVyZXMKCgkqIFt0b29sa2l0L3dpbm1haW4uY10KCURpc2FibGVkIHJlc291cmNlIERMTHMgZm9yIGxpYndpbmUgZm9yIG5vdwoKTW9uIEp1biAyNiAxOTozMDoyNCAxOTk1ICBIYW5zIGRlIEdyYWFmZiAgKGdyYWFmZkB0d2k3Mi50d2kudHVkZWxmdC5ubCkKCgkqIFttaXNjL21haW4uY10KCUZpeGVkIC1lbmhhbmNlZCBvcHRpb24gdG8gcmVwb3J0IGEgMzg2IENQVSBpbnN0ZWFkIG9mIGEgMjg2LgoKRnJpIEp1biAyMyAyMzoxODoyNSAxOTk1ICBNYXJjdXMgTWVpc3NuZXIgIDxtc21laXNzbkBmYXVpMDEuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbbWlzYy9kb3NfZnMuY10KCVJlbW92ZSBtYXhpbXVtIG9wZW4gZG9zZGlyZW50IGxpbWl0IChmaXhpbmcgdGhlIHdpbmZpbGUuZXhlCiAJcHJvYmxlbSkgYnkgdXNpbmcgdGVsbGRpcigpL3NlZWtkaXIoKS4KCQpGcmkgSnVuIDIzIDEzOjQyOjI1IDE5OTUgIEhhbnMgZGUgR3JhYWZmICAoZ3JhYWZmQHR3aTcyLnR3aS50dWRlbGZ0Lm5sKQoKCSogW21pc2MvcHJvZmlsZS5jXQoJRml4ZWQgcHJvYmxlbSBwYXJzaW5nIGVtcHR5IGxpbmVzIHdpdGhpbiBzZWN0aW9ucyBpbiAuaW5pIGZpbGVzLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpNb24gSnVuIDE5IDIwOjI5OjUwIDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQHN1bnNpdGUudW5jLmVkdSkKCgkqIFtkZWJ1Z2dlci8qLmNdCglNb2RpZmllZCBkZWJ1Z2dlciB0byB1c2Ugc2VnbWVudGVkIHBvaW50ZXJzIGV2ZXJ5d2hlcmUuCgoJKiBbaWYxNjMyL3NoZWxsLnNwZWNdIFtpZjE2MzIvc291bmQuc3BlY10gW2lmMTYzMi91c2VyLnNwZWNdCglEZWNsYXJlZCBhbGwgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIG9ubHkgMTYtYml0IGFzICdwYXNjYWwxNicuCgoJKiBbaW5jbHVkZS9sZHQuaF0gW21lbW9yeS9sZHQuY10KCUV4cG9ydCBMRFRfRW50cnlUb0J5dGVzIChuZXcpIGFuZCBMRFRfQnl0ZXNUb0VudHJ5IGZvciBEUE1JLgoJTWFpbnRhaW4gYSBjb3B5IG9mIHRoZSBzZWxlY3RvciBmbGFncywgcmVtb3ZpbmcgdGhlIG5lZWQgdG8gbWFrZSBhCglzeXN0ZW0gY2FsbCB0byByZXRyaWV2ZSBhbiBMRFQgZW50cnkuCgoJKiBbbG9hZGVyL21vZHVsZS5jXQoJRml4ZWQgYnVnIHdpdGggbW9kdWxlIGZpbGUgaGFuZGxlIGNhY2hlLgoKCSogW2xvYWRlci9uZV9yZXNvdXJjZS5jXQoJRml4ZWQgZmlsZSBuYW1lIGJ1ZyBpbiBORV9BY2Nlc3NSZXNvdXJjZSgpLgoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJRml4ZWQgYnVnIGluIExvYWRJY29uKCkgdGhhdCBjYXVzZWQgd3JvbmcgY29sb3JzIHRvIGJlIHVzZWQgZm9yCgl0aGUgaWNvbiBtYXNrLgoKCSogW2xvYWRlci9zaWduYWwuY10KCU1vdmVkIGluc3RydWN0aW9uIGVtdWxhdGlvbiB0byBtaXNjZW11L2luc3RyLmMuCgoJKiBbbWlzYy9kb3NfZnMuY10gW21pc2NlbXUvaW50MjEuY10KCUxvdHMgb2Ygc21hbGwgZml4ZXMsIHRoYW5rcyB0byBNb3J0ZW4gV2VsaW5kZXIuCgoJKiBbbWlzY2VtdS9kcG1pLmNdCglNb3JlIGNvbXBsZXRlIERQTUkgZW11bGF0aW9uLgoKCSogW21pc2NlbXUvaW5zdHIuY10KCUFkZGVkIHN1cHBvcnQgZm9yIHByZWZpeGVzIGluIGluc3RydWN0aW9ucyB0byBlbXVsYXRlLgoKCSogW21pc2NlbXUvaW50MmYuY10KCVVzZSByZWdpc3RlciBtYWNyb3MgaW5zdGVhZCBvZiBkZXN0cm95aW5nIHRoZSBoaWdoIHBhcnQgb2YgMzItYml0CglyZWdpc3RlcnMuCgoJKiBbb2JqZWN0cy9kYy5jXQoJRml4ZWQgYnVnIGluIEdldERDU3RhdGUoKSB0aGF0IGZhaWxlZCB0byBjbGVhciB0aGUgbmV3IERDLgoKCSogW3JjL3N5c3Jlcy5yY10KCVJlbW92ZWQgZGlhbG9ncyAxMSBhbmQgMTIgdGhhdCB3ZXJlIG5ldmVyIHVzZWQuCgoJKiBbdG9vbHMvYnVpbGQuY10KCSdwYXNjYWwxNicgZ2VuZXJhdGVkIGZ1bmN0aW9ucyBkaWQgbm90IHNhdmUgJWR4LgoJUmVtb3ZlZCB1c2Ugb2YgJWZzIHRvIGFjY2VzcyB0aGUgc3RhY2suCgklZHMgaXMgbm8gbG9uZ2VyIGluaXRpYWxpemVkIGJlZm9yZSBjYWxsaW5nIGEgMTYtYml0IHJvdXRpbmUuCgoJKiBbd2luZG93cy9kZWZ3bmQuY10KCUFjY2VwdCBhIE5VTEwgcG9pbnRlciBhcyB3aW5kb3cgdGl0bGUuCgoJKiBbd2luZG93cy9tZGkuY10KCU1ESUNhc2NhZGU6IHNraXAgaWNvbmljIHdpbmRvd3MuCglJbXBsZW1lbnRlZCBDYWxjQ2hpbGRTY3JvbGwoKS4KCQoJKiBbd2luZG93cy91dGlsaXR5LmNdCglGaXhlZCBNdWxEaXYoKSBmb3IgaWxsZWdhbCB2YWx1ZXMuCgoJKiBbd2luZG93cy93aW4uY10KCUZpeGVkIFggZXJyb3IgaW4gQ3JlYXRlV2luZG93RXgoKSB3aGVuIFdNX05DQ0FMQ1NJWkUgcmV0dXJuZWQKCWEgemVybyB3aWR0aCBvciBoZWlnaHQuCgpTdW4gSnVuIDE4IDIyOjIyOjMwIE1FVCBEU1QgMTk5NSAgRm9ucyBCb3RtYW4gIChib3RtYW5AaW50ZXIubmwubmV0KQoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUZpeGVkICJ1bmluaXRhbGl6ZWQiIG1lc3NhZ2Ugd2hpY2ggLVdhbGwgY291bGRudCBzZWUgdG8gYmUgb2sKCWluIEVESVRfV3JpdGVUZXh0LgoKCSogW2luY2x1ZGUvZGVidWcuaF0KCUFkZGVkIGRlZmluZSBmb3IgZXh0cmEgY2hlY2tzIGluIEFQSSBkZWZpbml0aW9ucyBkdXJpbmcgZGVidWdnaW5nLgoKCSogW2xvYWRlci9uZV9pbWFnZS5jXQoJQWRkZWQgbmV3bGluZSBpbiBORV9GaXh1cFByb2xvZ3MgdG8gYXZvaWQgbG9uZyBsaW5lcy4KCgkqIFttaXNjL2Rvc19mcy5jXQoJQWRkZWQgZXh0cmEgc2FmZXR5IGNoZWNrIGluIERPU19WYWxpZERyaXZlLgoKCSogW21pc2MvZXhlYy5jXQoJRml4ZWQgZGVmaW5pdGlvbiBvZiBFeGl0V2luZG93cy4KCQpTdW4gSnVuIDE4IDIxOjE2OjA4IDE5OTUgICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIFtjb250cm9scy9lZGl0LmNdCglTb21lIGZpeGVzLCBtb3N0bHkgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LCBidXQgYWxzbyBmb3IgdGV4dCBzZWxlY3Rpb24KCWFuZCB0YWIgcG9zdGl0aW9ucy4gR2VuZXJhbCBjbGVhbnVwLiBOb3RlcGFkLmV4ZSBub3cgd29ya3MuCgoJKiBbY29udHJvbHMvY29tYm8uY10KCUZpeDogdGhlIGh3bmQgZmllbGQgb2YgdGhlIERSQVdJVEVNU1RSVUNUIHNob3VsZCBhbHdheXMgYmUgdGhhdCBvZgoJdGhlIGNvbWJvIGJveCwgbm90IHRoZSBDb21ib0xCb3ggdGhhdCBiZWxvbmdzIHRvIGl0LgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUhhbmRsZSBpdGVtSUQgZmllbGQgY29ycmVjdGx5IHRocm91Z2hvdXQuCgoJKiBbbWVtb3J5L2xvY2FsLmNdCglJbXBsZW1lbnRlZCBmbGFnIExNRU1fWkVST0lOSVQuCglMb2NhbFJlQWxsb2MoKSBjb3VsZCB0cmFzaCB0aGUgaGVhcC4gRml4ZWQuCgoJKiBbb2JqZWN0cy9mb250LmNdCglGT05UX01hdGNoRm9udCgpOiBkb24ndCBnZXQgY29uZnVzZWQgYnkgbmVnYXRpdmUgd2lkdGhzLgoJRml4ZWQgYSBzZWdmYXVsdCBpbiBFbnVtRm9udHMoKS4KCgkqIFtvYmplY3RzL3RleHQuY10KCURyYXdUZXh0KCk6IERUX0NBTENSRUNUIGltcGxpZXMgRFRfTk9DTElQLgoKCSogW29iamVjdHMvZGN2YWx1ZXMuY10KCU1BS0VMT05HIHdhcyB1c2VkIHdpdGggYmFkIHBhcmFtZXRlcnMgaW4gRENfR0VUX1hfWS4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJRG9uJ3Qgc2hvdyB0aGUgZGlhbG9nIGlmIFdTX1ZJU0lCTEUgaXNuJ3Qgc2V0IGluIHRoZSB0ZW1wbGF0ZS4KCgkqIFt3aW5kb3dzL3V0aWxpdHkuY10KCVVUSUxJVFlfY29udmVydEFyZ3MoKTogTmV2ZXIgcGFzcyBhbiBleHByZXNzaW9uIGNvbnRhaW5pbmcgKysgaW50byBhCgltYWNyby4uLgoKCSogW3dpbmRvd3Mvd2luLmNdCglTZXRQYXJlbnQoKSBzaG91bGQgdW5saW5rIHRoZSB3aW5kb3cgYmVmb3JlIGNoYW5naW5nIHRoZSBwYXJlbnQuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglEb24ndCBjYWxsIHRpbWVyIGZ1bmN0aW9ucyB2aWEgQ2FsbFdpbmRvd1Byb2MoKSwgc2luY2UgaXQgY2hlY2tzCgl3aGV0aGVyIGh3bmQ9PTAgYW5kIGRvZXMgbm90IGNhbGwgdGhlIGZ1bmN0aW9uIGluIHRoYXQgY2FzZS4KCgkqIFttaXNjZW11L2luc3RyLmNdCglJZ25vcmUgaW50ZXJydXB0IDB4M0QsIGZvciBWQlJVTjMwMC5ETEwuCgoJKiBbbWlzYy9jb21tZGxnLmNdCglEb24ndCByZWx5IG9uIHRoZSBpdGVtRGF0YSBmaWVsZCBvZiB0aGUgRFJBV0lURU1TVFJVQ1QgdG8gY29udGFpbiBhCglwb2ludGVyIHRvIHRoZSBpdGVtIHRleHQuCgoJKiBbaWYxNjMyL3JlbGF5LmNdCglEaXNhYmxlIE9MRSBhbmQgRERFTUwgRExMcyBieSBkZWZhdWx0LCBzaW5jZSB0aGV5IGNvbnRhaW4gbm90aGluZyBidXQKCXN0dWJzIGFueXdheS4gU0hFTEwsIENPTU1ETEcgYW5kIFdJTjg3RU0gYXJlIGxlZnQgZW5hYmxlZCwgYWx0aG91Z2gKCXNvbWUgcHJvZ3JhbXMgbWF5IHdvcmsgYmV0dGVyIHdpdGhvdXQgdGhlbS4KCQoJKiBbbXVsdGltZWRpYS8qLmNdIFtpbmNsdWRlL211bHRpbWVkaWEuaF0gW2luY2x1ZGUvZHJpdmVyLmhdCglCZWd1biBjbGVhbmluZyB0aGluZ3MgdXAgYSBsaXR0bGUuIFJlcGxhY2VkIHByaW50ZnMgd2l0aCBkcHJpbnRmXwoJbWFjcm9zLCBtYWRlIGZ1bmN0aW9ucyBzdGF0aWMgd2hlcmUgcG9zc2libGUsIGFuZCBzb21lIG90aGVyIG1pbm9yCgljaGFuZ2VzLgoKU3VuIEp1biAxMSAyMzoxOToxMCAxOTk1ICBNYXJ0aW4gdm9uIExvZXdpcyAgPG1hcnRpbkBpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIFtkZWJ1Z2dlci9kYmcueV1bZGVidWdnZXIvZGJnLmxdCglSZW1vdmVkIHNwZWNpYWwgaGFuZGxpbmcgZm9yIEZJTEVfSURFTlRJRkVSLCBiZWNhdXNlIGl0IGNhdXNlZAoJcHJvYmxlbXMgd2l0aCB4Lzxmb3JtYXQ+IHN0YXRlbWVudHMuCgoJKiBbZGVidWdnZXIvaW5mby5jXQoJVXNlIFNDX0VTUCBpbnN0ZWFkIG9mIFNDX0VJUCBmb3Igc3RhY2sgZHVtcC4KCgkqIFttaXNjL2NvbXBvYmouY11baWYxNjMyL2NvbXBvYmouc3BlY10KCUNvQnVpbGRWZXJzaW9uLCBDb0luaXRpYWxpemUsIENvVW5pbml0aWFsaXplOiBuZXcgZnVuY3Rpb25zCgoJKiBbbWlzYy9vbGUyLmNdW2lmMTYzMi9vbGUyLnNwZWNdW21pc2MvSW1ha2VmaWxlXVtpbmNsdWRlL29sZTIuaF0KCU5ldyBmaWxlcyBvbGUyLmMsIG9sZTIuaAoJT2xlQnVpbGRWZXJzaW9uLCBPbGVJbml0aWFsaXplLCBPbGVVbmluaXRpYWxpemU6IG5ldyBmdW5jdGlvbnMKCgkqIFtpZjE2MzIvb2xlMmRpc3Auc3BlY10KCUFkZGVkIG1pc3Npbmcgb3JkaW5hbHMgYWJvdmUgMTA5CgoJKiBbbWlzYy9vbGUybmxzLmNdW2lmMTYzMi9vbGUybmxzLnNwZWNdW2luY2x1ZGUvd2lubmxzLmhdCglOZXcgZmlsZSB3aW5ubHMuaAoJR2V0TG9jYWxlSW5mb0E6IG5ldyBmdW5jdGlvbgoKCSogW2lmMTYzMi9zaGVsbC5zcGVjXQoJQWRkZWQgRmluZEVudmlyb25tZW50U3RyaW5nIGFzIHN0dWIKCgkqIFttaXNjL29sZWNsaS5jXVtpZjE2MzIvb2xlY2xpLnNwZWNdCglPbGVJc0RjTWV0YTogTmV3IGZ1bmN0aW9uCgoJKiBbb2JqZWN0cy9mb250XVttaXNjL2dkaS5zcGVjXQoJR2V0S2VybmluZ1BhaXJzOiBuZXcgZnVuY3Rpb24KCgkqIFttaXNjL3NoZWxsLmNdCglTaGVsbEV4ZWN1dGU6IEltcGxlbWVudGVkIHN1cHBvcnQgZm9yIHN0YXJ0aW5nIHByb2dyYW1zCgoJKiBbaWYxNjMyL3VzZXIuc3BlY10KCUluc2VydGVkIG1pc3NpbmcgcmVsYXkgdG8gR2V0Q2xpcEN1cnNvcgoKU3VuIEp1biAxMSAyMDozNDo0NyAxOTk1ICAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CiAgICAgICAgCgkqIFtjb250cm9scy9lZGl0LmNdCglGaXggYSBwcm9ibGVtIHdpdGggdGhlIGxvY2FsIGhlYXAuCgoJKiBbaW5jbHVkZS93aW50eXBlcy5oXQoJRml4ZWQgd3JvbmcgZGVjbGFyYXRpb25zIG9mIENBVENIQlVGIGFuZCBMUENBVENIQlVGLgoJCgkqIFtpbmNsdWRlL21kaS5oXSBbd2luZG93cy9tZGkuY10KCVRoaXMgY29kZSBzdGlsbCBhc3N1bWVkIHNlZ21lbnRlZCBhZGRyZXNzPT1saW5lYXIgYWRkcmVzcy4gRml4ZWQuCgoJKiBbaW5jbHVkZS9tc2Rvcy5oXSBbbWlzYy9kb3NfZnMuY10KCVRoZSBmaWxlbWFzayBmaWVsZCBvZiB0aGUgZG9zZGlyZW50IHN0cnVjdHVyZSBjb3VsZCBiZSBvdmVycnVuLiBGaXhlZC4KCUlmIHlvdSBoYWQgYSBmaWxlIGNhbGxlZCBmb29iYXIgYW5kIGEgZmlsZSBjYWxsZWQgZm9vLCB0cnlpbmcgdG8gCglGaW5kRmlsZShmb28pIGNvdWxkIGFjY2lkZW50YWxseSBmaW5kIGZpbGUgZm9vYmFyIGluc3RlYWQuIEZpeGVkLgoJCgkqIFttaXNjL2ZpbGUuY10KCU9wZW5GaWxlKCk6IEFsd2F5cyByZXR1cm4gdGhlIGZ1bGwgcGF0aG5hbWUgaW4gb2ZzLT5zelBhdGhOYW1lLiBUaGlzIAoJYWxzbyBmaXhlcyBHZXRNb2R1bGVGaWxlbmFtZSgpLgoJUHJldmVudCBfbGNsb3NlKCkgZnJvbSBjbG9zaW5nIHN0ZGVyciBvciBzdGRvdXQuCgoJKiBbbWlzYy9wcm9maWxlLmNdCglTZWFyY2ggZm9yIC5pbmkgZmlsZXMgaW4gdGhlIHBhdGggb2YgdGhlIGN1cnJlbnQgbW9kdWxlIGFzIHdlbGwuCgkoTmVlZGVkIGJ5IExvdHVzIE9yZ2FuaXplci4pCgoJKiBbbG9hZGVyL3Rhc2suY10gW2xvYWRlci9uZV9pbWFnZS5jXSBbbG9hZGVyL21vZHVsZS5jXQoJW21lbW9yeS9sb2NhbC5jXQoJTG9jYWwgaGVhcHMgYXJlIG5vdyBpbml0aWFsaXplZCBieSBJbml0VGFzaygpIGZvciBleGVjdXRhYmxlcy4gRExMcwoJaGF2ZSB0byBjYWxsIExvY2FsSW5pdCgpIHRoZW1zZWx2ZXMsIExvY2FsSW5pdCgpIGhhcyB0byBwdXQgdGhlCgloZWFwIGF0IHRoZSBlbmQgb2YgdGhlIHNlZ21lbnQgd2hlbiBjYWxsZWQgd2l0aCBzdGFydD09MC4gV2Ugbm8gbG9uZ2VyCglhbGxvY2F0ZSB0aGUgREdST1VQIHdpdGggNjRrIG9uIHN0YXJ0dXAsIGJ1dCBncm93IHRoZSBsb2NhbCBoZWFwCglpbiBMT0NBTF9HZXRCbG9jaygpIHdoZW4gbmVjZXNzYXJ5LgoKICAgICAgICAqIFtsb2FkZXIvbW9kdWxlLmNdCglMb2FkTGlicmFyeSgpIHNob3VsZCBjYWxsIExvYWRNb2R1bGUoKSBpbiBhbGwgY2FzZXMsIGV2ZW4gaWYgdGhlCglETEwgaXMgYWxyZWFkeSBsb2FkZWQsIHRvIGVuc3VyZSB0aGF0IHRoZSByZWZlcmVuY2UgY291bnQgaXMgY29ycmVjdC4KCgkqIFtsb2FkZXIvbmVfaW1hZ2UuY10KCVNvbWUgY2hhbmdlcyB0byBmdW5jdGlvbiBwcm9sb2cgZml4dXAuIERvZXMgYW55b25lIGtub3cgZXhhY3RseSBob3cKCXRoaXMgaXMgc3VwcG9zZWQgdG8gd29yaz8gSSBhbSBvbmx5IGd1ZXNzaW5nIGhlcmUuCglJbiBORV9Jbml0aWFsaXplRExMcygpLCBpbml0aWFsaXplIHRoZSBETExzIGEgbW9kdWxlIHJlZmVycyB0byBiZWZvcmUKCXRoZSBtb2R1bGUgaXRzZWxmLgoJCiAgICAgICAgKiBbbG9hZGVyL3Rhc2suY10KCUluaXRpYWxpemUgaW5zdGFuY2UgZGF0YSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBER1JPVVAgaW4gSW5pdFRhc2soKS4KCgkqIFttZW1vcnkvbG9jYWwuY10KCVNvbWUgZml4ZXMgZm9yIG1vdmVhYmxlIGJsb2Nrcy4KCgkqIFttZW1vcnkvc2VsZWN0b3IuY10KCUFsbCB0aGUgSXNCYWQqUG9pbnRlcigpIGZ1bmN0aW9ucyByZXR1cm5lZCBleGFjdGx5IHRoZSB3cm9uZyBib29sZWFuCgl2YWx1ZSBpbiBhbGwgY2FzZXMhCgkKCSogW29iamVjdHMvYml0Ymx0LmNdCglGaXhlZCBhbm90aGVyIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBkZWJ1Z2dpbmcgb3V0cHV0LgoJCgkqIFtvYmplY3RzL2ZvbnQuY10KCVNvbWUgbW9yZSByZWNvdmVyeSBwb3NzaWJpbGl0aWVzIGZvciBGT05UX01hdGNoRm9udCgpIGlmIGEgc3BlY2lmaWVkCglmb250IGRvZXMgbm90IGV4aXN0LgoJCgkqIFt3aW5kb3dzL3dpbi5jXQoJVGhlIGRpYWxvZyBjb2RlIG1heSBjYWxsIENyZWF0ZVdpbmRvd0V4IHdpdGggYW4gaW50ZWdlciBpbiB3aW5kb3dOYW1lLgoJVGhpcyBoYXBwZW5zIGZvciBzdGF0aWMgaWNvbiBjb250cm9scyB0aGF0IGV4cGVjdCBhIHJlc291cmNlIElEIGFzCgl0aGUgd2luZG93IG5hbWUuIENyZWF0ZVdpbmRvd0V4KCkgdXNlZCB0byBjcmFzaC4gRml4ZWQuCgkKCSogW3dpbmRvd3MvY2xhc3MuY10gW3dpbmRvd3Mvd2luLmNdCglXaW5kb3cgY2xhc3NlcyBhcmUgb3duZWQgYnkgbW9kdWxlcywgbm90IGluc3RhbmNlcy4gQ2hhbmdlZAoJUmVnaXN0ZXJDbGFzcygpLCBVbnJlZ2lzdGVyQ2xhc3MoKSwgR2V0Q2xhc3NJbmZvKCkgYW5kIENyZWF0ZVdpbmRvd0V4KCkKCWFjY29yZGluZ2x5LgoKU2F0IEp1biAxMCAxNjoxMDo1MyAxOTk1ICBPbGFmIEZsZWJiZSA8by5mbGViYmVAc2NpZW5jZS1jb21wdXRpbmcudW5pLXR1ZWJpbmdlbi5kZT4KCgkqIFttaXNjZW11L2ludDIxLmNdCgkgIGNsb2NrLmV4ZSB3YXMgZGlzcGxheWluZyBpbmNvcnJlY3QgeWVhci4KCkZyaSBKdW4gOSAyMDozNjo1NiAxOTk1ICBWaWN0b3IgU2NobmVpZGVyIDx0YWlsb3JAY3JsLmNvbT4KCgkqIFtpbmNsdWRlL2N1cnNvci5oXSBbd2luZG93cy9jdXJzb3IuY10KCUltcGxlbWVudGVkIENyZWF0ZUN1cnNvckljb25JbmRpcmVjdCgpLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUdWUgSnVuICA2IDEyOjExOjQxIDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQHN1bnNpdGUudW5jLmVkdSkKCgkqIFtjb250cm9scy9tZW51LmNdCglGaXhlZCBidWcgd2l0aCBkcmF3aW5nIG11bHRpLWNvbHVtbiBtZW51cyB3aXRoIHZlcnRpY2FsIHNlcGFyYXRvci4KCgkqIFtkZWJ1Z2dlci9kZWJ1Zy5sXQoJRml4ZWQgTlVMTC1wb2ludGVyIHJlZmVyZW5jZSBhZnRlciByZWFkbGluZSgpLgoKCSogW2lmMTYzMi93aW5wcm9jcy5zcGVjXSBbbWlzY2VtdS9pbnQyMS5jXSBbbWlzY2VtdS9pbnRlcnJ1cHRzLmNdCglBZGRlZCBpbnRlcnJ1cHQgdmVjdG9yIGVtdWxhdGlvbi4gQWxsb3dzIHRvIHJldHJpZXZlIGFuIGludGVycnVwdAoJdmVjdG9yIGFuZCBqdW1wIHRvIGl0IHdpdGhvdXQgY3Jhc2hpbmcuCgoJKiBbbG9hZGVyL2xkdC5jXQoJTW92ZWQgbGR0LmMgdG8gbWVtb3J5IGRpcmVjdG9yeS4KCgkqIFtsb2FkZXIvdGFzay5jXQoJSW1wbGVtZW50ZWQgTG9ja0N1cnJlbnRUYXNrKCkgYW5kIEdldEluc3RhbmNlRGF0YSgpLgoKCSogW29iamVjdHMvYml0Ymx0LmNdCglGaXhlZCBhIGJ1ZyB0aGF0IGNhdXNlZCBTdHJldGNoQmx0KCkgdG8gdXNlIHdyb25nIGNvbG9ycyB3aGVuCglzdHJldGNoaW5nIGEgbW9ub2Nocm9tZSBiaXRtYXAgdG8gYSBjb2xvciBkaXNwbGF5LgoKCSogW29iamVjdHMvYml0bWFwLmNdCglGaXhlZCBhIHNlZ21lbnRlZCBwb2ludGVyIGJ1ZyBpbiBDcmVhdGVCaXRtYXBJbmRpcmVjdCgpLgoKCSogW3Rvb2xzL2J1aWxkLmNdCglBZGRlZCBwb3NzaWJpbGl0eSB0byBoYXZlIGFyZ3VtZW50cyBmb3IgcmVnaXN0ZXIgZnVuY3Rpb25zOyB1c2VkCglieSBpbnRlcnJ1cHQgdmVjdG9ycyB0byByZW1vdmUgdGhlIGZsYWdzIGZyb20gdGhlIHN0YWNrLgoJR2VuZXJhdGUgYSBuZXcgZnVuY3Rpb24gQ2FsbFRvMzJfTGFyZ2VTdGFjaygpLCB0aGF0IGFsbG93cyBjYWxsaW5nCglhIDMyLWJpdCBmdW5jdGlvbiB1c2luZyB0aGUgb3JpZ2luYWwgMzItYml0IHN0YWNrLCBmb3IgZnVuY3Rpb25zCgl0aGF0IG5lZWQgbW9yZSB0aGF0IDY0ayBvZiBzdGFjay4KClR1ZSBNYXkgMzAgMTA6Mjk6NTYgMTk5NSAgTWFydGluIHZvbiBMb2V3aXMgIDxtYXJ0aW5AaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBbaWYxNjMyL3NoZWxsLnNwZWNdIFttaXNjL3NoZWxsLmNdCglEb0Vudmlyb25tZW50U3Vic3Q6IGZpeGVkIHByb3RvdHlwZQoKCSogW2lmMTYzMi9nZGkuc3BlY10gW29iamVjdHMvcGFsZXR0ZS5jXQoJU2V0U3lzdGVtUGFsZXR0ZVVzZTogbmV3IGZ1bmN0aW9uCgoJKiBbaWYxNjMyL2tlcm5lbC5zcGVjXSBbbG9hZGVyL3Jlc291cmNlLmNdCglEaXJlY3RSZXNBbGxvYzogbmV3IGZ1bmN0aW9uCgoJKiBbaWYxNjMyL3VzZXIuc3BlY10gW3dpbmRvd3Mva2V5Ym9hcmQuY10KCVNldEtleWJvYXJkU3RhdGU6IG5ldyBmdW5jdGlvbgoKTW9uIE1heSAyOSAxMjo1ODoyOCAxOTk1ICAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CiAgICAgICAgCgkqIFt0b29scy9idWlsZC5jXQogICAgICAgIFByZXZlbnQgaW50ZXJydXB0cyBmcm9tIGRlc3Ryb3lpbmcgdGhlIGFyZ3MgZm9yIGEgMzIgYml0IGZ1bmN0aW9uCiAgICAgICAgYnkgbG9hZGluZyB0aGUgY29ycmVjdCB2YWx1ZSBpbnRvICVlc3AgZGlyZWN0bHkgYWZ0ZXIgJXNzLgoKCSogW2xvYWRlci9uZV9pbWFnZS5jXSBbbG9hZGVyL21vZHVsZS5jXQoJVGhlIG5ldyBpbnN0YW5jZSBtdXN0IGJlIGNyZWF0ZWQgZWFybGllciBpbiBMb2FkTW9kdWxlKCksIHNvIHRoYXQKCWZpeHVwcyByZWZlcmVuY2luZyBpdCB3aWxsIGJlIGhhbmRsZWQgY29ycmVjdGx5LgogICAgICAgIEluaXRpYWxpemUgdGhlIGxvY2FsIGhlYXAgZm9yIGEgREdST1VQIGluIE5FX0xvYWRTZWdtZW50KCkuCgkKCSogW29iamVjdHMvZGliLmNdCglMaWtlIFJMRTggYml0bWFwcywgUkxFNCBiaXRtYXBzIGRvbid0IGFsd2F5cyBlbmQgd2l0aCBhIHByb3BlciBjb2RlLgoJVGhpcyB1c2VkIHRvIGNyYXNoIFdpbmUuIEZpeGVkLgoKICAgICAgICAqIFtvYmplY3RzL3RleHQuY10KCUZpeCBwb3NzaWJsZSBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gZGVidWdnaW5nIG91dHB1dC4KCQoJKiBbbWlzYy9jb21tZGxnLmNdCglIYW5kbGUgdXNlciBpbnB1dCBpbiB0aGUgZWRpdCBjb250cm9sIGJldHRlci4gU29tZSBidWdzIGZpeGVkLgoJCgkqIFttZW1vcnkvbG9jYWwuY10KCVN0YXJ0ZWQgaW1wbGVtZW50aW5nIG1vdmVhYmxlIGJsb2Nrcy4gVGhpcyBpcyB1bmZpbmlzaGVkICghKSwgYnV0CglhdCBsZWFzdCBpdCBkb2VzIG5vdCBzZWVtIHRvIGJyZWFrIHRoaW5ncy4KCldlZCBNYXkgMjQgMTM6MjY6MzYgMTk5NSAgIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgogICAgICAgIAoJKiBbbG9hZGVyL21vZHVsZS5jXQoJTG9hZE1vZHVsZSgpOiBETExzIG9jY2FzaW9uYWxseSBoYXZlIGEgZGF0YSBzZWdtZW50LCBhbmQgdGhleSB3b3JrCgltdWNoIGJldHRlciBpZiBpdCBpcyBsb2FkZWQgOi0pCglMb2FkTGlicmFyeSgpOiBwYXNzIEhNT0RVTEUgaW5zdGVhZCBvZiBISU5TVEFOQ0UgdG8gTkVfSW5pdGlhbGl6ZURMTHMuCglGaW5kTW9kdWxlKCk6IGFsc28gc3RyaXAgb2ZmIHRoZSBsYXN0IGJhY2tzbGFzaCBvZiB0aGUgcGF0aG5hbWVzCgkoV2luaGVscCB0cmllZCB0byBsb2FkIEM6XFdJTkRPV1NcU1lTVEVNXENPTU1ETEcuRExMKS4KCUdldE1vZHVsZUhhbmRsZSgpOiBqdXN0IGNhbGwgTU9EVUxFX0ZpbmRNb2R1bGUsIGl0IGRvZXMgdGhlIHNhbWUgam9iLAoJb25seSBiZXR0ZXIuCgkKCSogW2xvYWRlci9uZV9pbWFnZS5jXQoJTG9jYWxJbml0KCkgdGhlIGhlYXAgb2YgYSBETEwgaW4gTkVfSW5pdERMTC4gKFRoaXMgaXMgcHJvYmFibHkKCW5vdCByZWFsbHkgY29ycmVjdCwgaXQgc2VlbXMgdGhhdCBhbGwgcHJvZ3JhbXMgYW5kIERMTHMgdHJ5IHRvIGRvCgl0aGlzIHRoZW1zZWx2ZXMuIEJ1dCB0aGV5IHBhc3Mgd2VpcmQgcGFyYW1ldGVycy4pCglORV9Jbml0aWFsaXplRExMcyBzaG91bGQgYWxzbyBjYWxsIE5FX0luaXRETEwgZm9yIHRoZSBwYXNzZWQgaE1vZHVsZS4KCQoJKiBbbG9hZGVyL3Rhc2suY10gW21pc2MvdXNlci5jXQoJRmluaXNoIGdsb2JhbCBpbml0aWFsaXphdGlvbnMgaW4gSW5pdFRhc2sgaW5zdGVhZCBvZiBJbml0QXBwLCBvcgoJYWxsIHRoZSBETExzIHdpbGwgYmUgaW5pdGlhbGl6ZWQgaW4gSW5pdFRhc2sgd2l0aG91dCBhbnkgYXZhaWxhYmxlCgl3aW5kb3cgY2xhc3NlcyEKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIE1heSAyMSAxMjozMDozMCAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBzdW5zaXRlLnVuYy5lZHUpCgoJKiBbZGVidWdnZXIvaGFzaC5jXSBbZGVidWdnZXIvaW5mby5jXQoJQWRkZWQgc3VwcG9ydCBmb3Igc3ltYm9saWMgc2VnbWVudGVkIGFkZHJlc3Nlcy4gQWRkIHN5bWJvbHMgZm9yIGFsbAoJYnVpbHQtaW4gQVBJIGVudHJ5IHBvaW50cy4KCgkqIFtpZjE2MzIvcmVsYXkuY10gW2luY2x1ZGUvZGxscy5oXQoJUmVtb3ZlZCBkbGxfdGFibGUgc3RydWN0dXJlLCBhcyB3ZSBub3cgdXNlIHRoZSBidWlsdC1pbiBtb2R1bGUKCXN0cnVjdHVyZXMuCgoJKiBbaWYxNjMyL3JlbGF5LmNdIFtsb2FkZXIvbWFpbi5jXQoJUmVtb3ZlZCB3aW5lc3RhdCBvcHRpb24sIGFzIGl0IHdhcyBubyBsb25nZXIgdmVyeSBtZWFuaW5nZnVsLgoKCSogW2luY2x1ZGUvc3RhY2tmcmFtZS5oXQoJTmV3IG1hY3JvIE1BS0VfU0VHUFRSIHRoYXQgY3JlYXRlcyBhIHNlZ21lbnRlZCBwb2ludGVyIHRvIGEgbG9jYWwKCXZhcmlhYmxlIG9uIHRoZSAzMi1iaXQgc3RhY2suCgoJKiBbbG9hZGVyL21vZHVsZS5jXQoJQWRkZWQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIGFuIGFwcGxpY2F0aW9uLgoJSW1wbGVtZW50ZWQgTG9hZE1vZHVsZSgpIGFuZCBGcmVlTW9kdWxlKCkuCgoJKiBbbG9hZGVyL25lX2ltYWdlLmNdIFtsb2FkZXIvdGFzay5jXQoJTW92ZWQgaW5pdGlhbGlzYXRpb24gb2YgYnVpbHQtaW4gRExMcyB0byBJbml0VGFzaygpLgoKCSogW21lbW9yeS9nbG9iYWwuY10KCUltcGxlbWVudGVkIGRpc2NhcmRhYmxlIGJsb2Nrcy4KCgkqIFttaXNjL2ZpbGUuY10KCVNlYXJjaCBwYXRoIG9mIGN1cnJlbnQgZXhlY3V0YWJsZSBpbiBPcGVuRmlsZSgpLgoJRml4ZWQgYnVnIHdpdGggc2VhcmNoaW5nIGluIFdpbmRvd3MgcGF0aC4KCgkqIFttaXNjL2xzdHIuY10KCUhhcmQtY29kZWQgdHJhbnNsYXRpb24gdGFibGVzIGZvciBBbnNpPC0+T2VtLgoKCSogW21pc2MvdXNlci5jXQoJTW92ZWQgc29tZSBnbG9iYWwgaW5pdGlhbGl6YXRpb25zIHRvIEluaXRBcHAoKSwgYmVjYXVzZSB0aGV5IG5lZWQKCWEgdGFzayBjb250ZXh0IHRvIGJlIHBlcmZvcm1lZC4KCgkqIFtvYmplY3RzL2RjLmNdCglIYW5kbGUgUjJfQkxBQ0sgYW5kIFIyX1dISVRFIHNwZWNpYWxseSBzbyB0aGF0IHRoZXkgd29yayBjb3JyZWN0bHkKCXdpdGggcGFsZXR0ZSBkaXNwbGF5cy4KCgkqIFt0b29scy9idWlsZC5jXQoJU3VwcHJlc3NlZCBnZW5lcmF0aW9uIG9mIHRoZSBDIGZpbGUgZm9yIERMTCBzcGVjcywgYmVjYXVzZSBpdCdzIG5vCglsb25nZXIgbmVlZGVkLiBPdXRwdXQgYWxsIHRoZSBhc3NlbWJseSBjb2RlIGRpcmVjdGx5IHRvIHN0ZG91dC4KCVNvbWUgY2hhbmdlcyB0byBpbnRlZ3JhdGUgV2luMzIgc3VwcG9ydCBmcm9tIE1hcnRpbiB2b24JTG9ld2lzLiAKCgkqIFt3aW5kb3dzL21zZ2JveC5jXQoJTW92ZWQgbWVzc2FnZSBib3ggY29kZSBmcm9tIG1pc2MvIHRvIHdpbmRvd3MvLgoKTW9uIE1heSAxNSAyMzo0MDowNCAxOTk1ICBNYXJ0aW4gQXlvdHRlICh3aW5lQHRyZ2NvcnAubWtzaW5mby5xYy5jYSkKCgkqIFttaXNjL2F1ZGlvLmNdIFttaXNjL21jaWNkYS5jXSBbbWlzYy9tY2lhbmltLmNdIFttaXNjL21pZGkuY10KCSAgW21pc2MvbW1hdXguY10gW21pc2MvbW1zeXN0ZW0uY10KCU1vZGlmeSBjb2RlICYgdXNlIHBvaW50ZXJzIGNvbnZlcnNpb24gbWFjcm9zLgoJTWFrZSBjZGF1ZGlvICYgd2F2ZSBkZXZpY2VzIHdvcmsgYWdhaW4gKG9ubHkgdXNpbmcgc29tZSBhcHBsZXRzKS4KCgkqIFttaXNjL3Byb2ZpbGUuY10KCUNoYW5nZSBnZXRjKCkgdG8gZmdldGMoKSB3aGVyZSBuZWVkZWQuCgpNb24gTWF5IDE1IDIyOjEwOjU2IDE5OTUgIE1hcnRpbiB2b24gTG9ld2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogW2lmMTYzMi9JbWFrZWZpbGVdCglhZGRlZCBlbnRyaWVzIGZvciB0aGUgbmV3IGZpbGVzIGdkaTMyLnNwZWMsIGtlcm5lbDMyLnNwZWMsCgl1c2VyMzIuc3BlYywgc2hlbGwzMi5zcGVjIGFuZCB3aW5wcm9jczMyLnNwZWMuCgoJKiBbaWYxNjMyL2NvbW1kbGcuc3BlY11baWYxNjMyL2tlcm5lbC5zcGVjXVtpZjE2MzIvc2hlbGwuc3BlY10KCSAgW2lmMTYzMi9zdG9yYWdlLnNwZWNdW2lmMTYzMi9zeXN0ZW0uc3BlY11baWYxNjMyL3VzZXIuc3BlY10KCUNob29zZUZvbnQsIFJFU0VSVkVENSwgSW50ZXJuYWxFeHRyYWN0SWNvbjogTWFya2VkIGFzIHN0dWJzCglFeHRyYWN0QXNzb2NpYXRlZEljb24sIERvRW52aXJvbm1lbnRTdWJzdCwgRHVtcEljb246CgkJc3R1YiBpbXBsZW1lbnRhdGlvbnMgcHJvdmlkZWQgCgltYXJrZWQgc3RvcmFnZS5kbGwsc3RvcmVnZS5zeXMgZnVuY3Rpb25zIGFzIHN0dWJzCgoJKiBbaW5jbHVkZS9wZV9pbWFnZS5oXQoJQWRkZWQgc3RydWN0dXJlcyBXSU4zMl9idWlsdGluIGFuZCAgV0lOMzJfZnVuY3Rpb24KCgkqIFtpbmNsdWRlL3BlZXhlLmhdCglQRV9JbXBvcnRfRGlyZWN0b3J5OiByZW5hbWVkIHJlc2VydmVkIGZpZWxkcyB0byAKCQlUaW1lRGF0ZSwgRm9yd2FyZGVyLCBUaHVua19MaXN0CgoJKiBbaW5jbHVkZS93aW5lcnJvci5oXQoJTmV3IGZpbGUuCgoJKiBbbG9hZGVyL21haW4uY10KCWNhbGxlZCBSRUxBWTMyX0luaXQKCgkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KCXhtbWFwOiBtYXAgQlNTIGFub255bW91cwoJZHVtcF9pbXBvcnRzOiByZW5hbWVkIHRvIGZpeHVwX2ltcG9ydHMsIGRvIHRoZSBmaXh1cCBvZiBpbXBvcnRlZAoJICAgICAgICAgICAgICBzeW1ib2xzCglQRV9Mb2FkSW1hZ2U6IHBhc3MgcmF3IGRhdGEgc2l6ZSB0byB4bW1hcAoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJRHVtcEljb246IG5ldyBmdW5jdGlvbgoKCSogW21pc2Mva2VybmVsMzIuY10KCU5ldyBmaWxlLgoKCSogW21pc2MvbWFpbi5jXQoJbWFrZSBzdGRvdXQgYW5kIHN0ZGVyciB1bmJ1ZmZlcmVkCgoJKiBbbWlzYy9zaGVsbC5jXQoJRG9FbnZpcm9ubWVudFN1YnN0OiBuZXcgZnVuY3Rpb24KCgkqIFtvYmplY3RzL2ZvbnQuY10KCUZPTlRfTWF0Y2hGb250OiB0cnkgb2JsaXF1ZSBpZiB0aGVyZSBpcyBubyBpdGFsaWMKCgkqIFtyYy9JbWFrZWZpbGVdW3JjL3BhcnNlci5sXQoJeXl3cmFwOiBuZXcgZnVuY3Rpb24KCURvbid0IGxpbmsgd2l0aCBsaWJmbC5hIG9uIExpbnV4CgoJKiBbdG9vbHMvYnVpbGQuY10KCUFkZGVkIGtleXdvcmRzIHN0ZGNhbGwsIHN1YnN5c3RlbSwgYmFzZQoJR2VuZXJhdGVGb3JXaW4zMjogbmV3IGZ1bmN0aW9uCglCdWlsZFNwZWNGaWxlczogY2FsbCBHZW5lcmF0ZUZvcldpbjMyIGlmIHN1YnN5c3RlbSBpcyB3aW4zMgoKTW9uIE1heSAxNSAxMDozODoxNCAxOTk1ICAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CiAgICAgICAgCiAgICAgICAgKiBbY29udHJvbHMvbGlzdGJveC5jXSBbY29udHJvbHMvY29tYm8uY10gW3dpbmRvd3MvZGVmd25kLmNdCglNaW5vciBmaXhlcy4KCQoJKiBbbWlzYy9tZXNzYWdlLmNdIFttaXNjL21haW4uY10gW3JjL3N5c3JlcyoucmNdIFtpbmNsdWRlL3RleHRzLmhdCglSZXdyb3RlIG1lc3NhZ2UgYm94IGhhbmRsaW5nLgoJCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJRGlhbG9ncyBzaG91bGQgYmUgaW52aXNpYmxlIHVudGlsIGFmdGVyIFdNX0lOSVRESUFMT0cgaXMgc2VlbnQuCglEb24ndCBzd2l0Y2ggdG8gaW52aXNpYmxlIGRpYWxvZyBpdGVtcyBvbiBhIFRBQiBrZXlwcmVzcy4KCQoJKiBbd2luZG93cy9tZGkuY10KCVNlbmQgV01fTkNQQUlOVCBtZXNzYWdlIGluIE1ESVJlc3RvcmVDaGlsZCgpLgoJCgkqIFt3aW5kb3dzL3BhaW50aW5nLmNdCglGaXhlZCB0eXBvICgmJiAtPiAmKS4KCQoJKiBbd2luZG93cy9tZXNzYWdlLmNdIFtpZjE2MzIvdXNlci5zcGVjXQoJSW1wbGVtZW50ZWQgUG9zdEFwcE1lc3NhZ2UoKS4KCQoJKiBbd2luZG93cy9ldmVudC5jXQoJU2V0Q2FwdHVyZSgwKSBzaG91bGQgYWN0IGxpa2UgUmVsZWFzZUNhcHR1cmUoKS4KClR1ZSBNYXkgIDkgMTE6NTU6NTIgMTk5NSAgICAgRWRkaWUgQy4gRG9zdCAgICAgICAgICAgICAoZWNkQGRyZXNzbGVyLmRlKQoKCSogW0ltYWtlZmlsZV0KCUNoYW5nZWQgQ0RFQlVHRkxBR1MgZm9yIHN5c3RlbXMgcnVubmluZyBfX0VMRl9fICh0ZW1wb3JhcmlseSkKCUFkZGVkIEFTRkxBR1MgdG8gZXhwb3J0ZWQgdmFyaWFibGVzLgoKCSogW2RlYnVnZ2VyL3JlYWRsaW5lL0ltYWtlZmlsZV0KCU1vdmVkIGRlZmluZXMgZm9yIGxpYnJlYWRsaW5lIGZyb20gREVGSU5FUyB0byBFWFRSQV9ERUZJTkVTCgoJKiBbbWVtb3J5L2xvY2FsLmNdIFttaXNjZW11L2ludDIxLmNdCglBZGRlZCBzb21lIG1vcmUgZGVidWdnaW5nIG91dHB1dHMuCgpNb24gTWF5ICA4IDAwOjU1OjI3IE1FVCBEU1QgMTk5NQkgIERhZyBBc2hlaW0gKGRhc2hAaWZpLnVpby5ubykKCgkqIFttaXNjL21lc3NhZ2UuY10KCUZpeGVkIGEgIkZJWE1FIiBjb25jZXJuaW5nIG5vcndlZ2lhbiB0cmFuc2xhdGlvbi4KClN1biBNYXkgIDcgMjM6MjU6MjMgMTk5NSAgIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgogICAgICAgIAoJKiBbKi8qXQogICAgICAgIFJlbW92ZWQgd2FybmluZ3MgaW4gYSBjb3VwbGUgb2YgZmlsZXMgYW5kIGRlbGV0ZWQgc29tZSBvYnNvbGV0ZSBjb2RlLgoKICAgICAgICAqIFtjb250cm9scy9saXN0Ym94LmNdCiAgICAgICAgQ2xlYW51cCwgc3BlZWQgaW1wcm92ZW1lbnRzICYgbG90cyBvZiBidWcgZml4ZXMuCgogICAgICAgICogW2NvbnRyb2xzL2NvbWJvLmNdCglNb3N0bHkgcmV3cml0dGVuLiBUaGlzIGlzIHN0aWxsIHZlcnkgYnVnZ3ksIGJ1dCBub3QgcXVpdGUgYXMgYmFkIGFzIAoJYmVmb3JlLgoKICAgICAgICAqIFtpbmNsdWRlL2NvbW1kbGcuaF0gW21pc2MvY29tbWRsZy5jXQogICAgICAgIFJlbW92ZWQgdGhlIG5lZWQgZm9yIHN5c3Jlcy5kbGwuIFNtYWxsIGJ1ZyBmaXhlcy4KCQogICAgICAgICogW29iamVjdHMvb2VtYml0bWFwLmNdIFtpbmNsdWRlL2JpdG1hcHMvPG1hbnk+XSBbaW5jbHVkZS93aW5kb3dzLmhdCiAgICAgICAgICBbbG9hZGVyL2xpYnJhcnkuY10gW2xvYWRlci9tYWluLmNdIFtyYy9zeXNyZXMqLnJjXQogICAgICAgIFJlbW92ZWQgc3lzcmVzLmRsbCBhbmQgcmVwbGFjZWQgdGhlIHJlbWFpbmluZyBiaXRtYXBzL2ljb25zIHdpdGgKICAgICAgICBYUE0gZXF1aXZhbGVudHMuCgogICAgICAgICogW21pc2MvbWVzc2FnZS5jXSBbd2luZG93cy9ub25jbGllbnQuY10gW21pc2MvbWFpbi5jXQogICAgICAgICAgW2lmMTYzMi93aW5wcm9jcy5zcGVjXQogICAgICAgICJBYm91dCBXaW5lLi4uIiBub3cgYnJpbmdzIHVwIGEgc3RhbmRhcmQgU2hlbGxBYm91dCgpIHdpbmRvdyB3aXRoCiAgICAgICAgdGhlIFdpbmUgaWNvbiBhbmQgdGhlIGxpc3Qgb2YgY29udHJpYnV0b3JzLgoJCgkqIFttaXNjL3NoZWxsLmNdCglGaXhlZCBTaGVsbEFib3V0KCkvQWJvdXREaWFsb2dQcm9jKCkgdG8gc2hvdyB0aGUgcmlnaHQgaWNvbi4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglTbWFsbCBoYWNrIGZvciBub24tYWxwaGFudW1lcmljIGtleXM6IERvbnQndCBzZW5kIHRoZSBhc2NpaSB2YWx1ZSBpbgoJdGhlIFdNX0tFWURPV04gbWVzc2FnZSwgYnV0IHNvbWUgdW51c2VkIGNvZGUgaW5zdGVhZC4gU2hvdWxkIGJlIGRvbmUKCXByb3Blcmx5IGJ5IHNlbmRpbmcgZGlmZmVyZW50IGNvZGVzIGZvciBlYWNoIGtleS4gVGhlIGVkaXQgY29udHJvbAoJdXNlZCB0byBnZXQgYSBWS19ERUxFVEUgbWVzc2FnZSBlYWNoIHRpbWUgdGhlIHVzZXIgdHlwZWQgJy4nLgoKCSogW3dpbmRvd3MvY2xhc3MuY10KCVJlbW92ZWQgYSBjaGVjayBmb3IgQ1NfR0xPQkFMQ0xBU1MgaW4gQ0xBU1NfRmluZENsYXNzQnlOYW1lKCkuCglUaGlzIHVzZWQgdG8gYmUgbm8gcHJvYmxlbSwgYnV0IGJyZWFrcyBSZXNvdXJjZSBXb3Jrc2hvcCBpbiA5NTA0MDMuCgkKCSogW29iamVjdHMvZGliLmNdCglOZXcgZGlhZ25vc3RpYyBmb3IgYSBidWcgSSd2ZSBiZWVuIGVuY291bnRlcmluZy4gSWYgaXQgc2hvd3MgdXAsCglwbGVhc2UgcmVwb3J0IGl0LgoKU3VuIE1heSAgNyAyMzoxMToxOCBFRFQgMTk5NSAgV2lsbGlhbSBNYWdybyAod21hZ3JvQHRjLmNvcm5lbGwuZWR1KQoKCSogW29iamVjdHMvY29sb3IuY10KCUhhbmRsZSBzaXR1YXRpb24gd2hlbiAnZGMnIGV4aXN0cywgYnV0IHBhbGV0dGUgbWFwcGluZwoJZG9lcyBub3QuICAoRml4ZXMga2lkcGl4MiBkZW1vLikKClN1biBNYXkgIDcgMDM6MzI6MDAgMTk5NSAgQ2hhcmxlcyBNLiBIYW5udW0gIChteWNyb2Z0QG1pdC5lZHUpCgoJKiBbbG9hZGVyL2xkdC5jXQoJTERUX1ByaW50OiBPbmx5IHNob3cgdGhlIG51bWJlciBvZiBlbnRyaWVzIHRoYXQgdGhlIGtlcm5lbAoJcmV0dXJuZWQuIE1ha2UgdGhpcyB3b3JrIGZvciBOZXRCU0QuCgpGcmkgTWF5ICA1IDAyOjUzOjI2IDE5OTUgIENoYXJsZXMgTS4gSGFubnVtICAobXljcm9mdEBtaXQuZWR1KQoKCSogW2RlYnVnZ2VyL2RiZy55XSBbaW5jbHVkZS93aW5lLmhdIFtsb2FkZXIvc2lnbmFsLmNdCglNb2RpZnkgY3MgYW5kIGRzIHNlbGVjdG9yIHZhbHVlcyBmb3IgTmV0QlNELWN1cnJlbnQuCgoJKiBbZGVidWdnZXIvZGVidWcubF0KCSRzcCwgJGVzcDogVXNlIFJOX0VTUF9BVF9TSUdOQUwgcmF0aGVyIHRoYW4gUk5fRVNQLgoKCSogW2RlYnVnZ2VyL3JlZ3Bvcy5oXQoJTW9kaWZ5IHNpZ2NvbnRleHQgZm9ybWF0IGZvciBOZXRCU0QtY3VycmVudC4KCVNDX0VTUDogVXNlIFJOX0VTUF9BVF9TSUdOQUwgcmF0aGVyIHRoYW4gUk5fRVNQLgoKCSogW2luY2x1ZGUvbGR0LmhdCglTRUxFQ1RPUl9UT19FTlRSWTogRXhwbGljaXRseSBjbGVhciB0aGUgdG9wIGhhbGYgb2YgdGhlIHNlbGVjdG9yCgl2YWx1ZSwgc2luY2Ugb25seSAxNiBiaXRzIG9mIGl0IG1heSBoYXZlIGJlZW4gc2F2ZWQuCgoJKiBbbWlzYy93aW5zb2NrZXQuY10KCVNldCBzdHJ1Y3R1cmUgcGFja2luZyB3aXRoIGAjcHJhZ21hIHBhY2snIHRvIGFjY29tb2RhdGUKCW90aGVyL29sZGVyIGNvbXBpbGVycy4KClR1ZSBNYXkgIDIgMTg6MTU6MDEgMTk5NSBQYWFsIEJleWVyIChiZXllckBpZHQudW5pdC5ubykKCQoJKiBbbWlzYy9jb21tZGxnLmNdCglGaXhlZCBwYXRoLW5hbWVzIHNvIHdoZW4gY2hhbmdpbmcgZGlyZWN0b3J5IHRoZSBsaXN0Ym94ZXMKCWNoYW5nZXMgdG9vLgoJCgkqIFtkZWJ1Z2dlci9kYmcueSBkZWJ1Z2dlci9kZWJ1Zy5sIHdpbmUuaW5pXQoJQWRkZWQgU3ltYm9sVGFibGVGaWxlIHRvIHdpbmUuaW5pIHNvIHN5bWJvbHMgY2FuIGJlIHJlYWQKCXdpdGhvdXQgc3RhbmRpbmcgaW4gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHdpbmUuc3ltLgoJQWRkZWQgdGhlIHBvc3NpYmlsaXR5IHRvIHNwZWNpZnkgZnVsbCBuYW1lIG9mIHdpbmUuc3ltIGZyb20KCXRoZSBkZWJ1Z2dlciBwcm9tcHQuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClNhdCBBcHIgMjkgMjA6NDI6MDEgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAc3Vuc2l0ZS51bmMuZWR1KQoKCSogW2NvbnRyb2xzL3N0YXRpYy5jXQoJRml4ZWQgcGFpbnRpbmcgb2YgU1NfKkZSQU1FIGNvbnRyb2xzLgoKCSogW2lmMTYzMi9jYWxsYmFjay5jXQoJUGFzcyB0aGUgd2luZG93IGluc3RhbmNlIGFzIERTIHRvIHRoZSAxNi1iaXQgd2luZG93IHByb2NlZHVyZS4KCVJld3JvdGUgQ2F0Y2goKSBhbmQgVGhyb3coKSB0byBtYWtlIHRoZW0gd29yayB3aXRoIG11bHRpcGxlIHRhc2tzLgoKCSogW2xvYWRlci9tYWluLmNdCglOZXcgZnVuY3Rpb24gTUFJTl9Jbml0KCkgdG8gcGVyZm9ybSBpbml0aWFsaXphdGlvbnMgYmVmb3JlIHRoZQoJZmlyc3QgdGFzayBpcyBzdGFydGVkIGluc3RlYWQgb2YgZG9pbmcgdGhlbSBpbiBJbml0QXBwKCkuCglUZW1wb3JhcnkgaGFjayB0byBjb21tYW5kLWxpbmUgcGFyc2luZyB0byBsb2FkIG9uZSBwcm9ncmFtIHBlcgoJY29tbWFuZC1saW5lIGFyZ3VtZW50LCB0byBtYWtlIHRlc3RpbmcgdGFzay1zd2l0Y2hpbmcgZWFzaWVyLgoKCSogW2xvYWRlci8qLmNdCglSZWltcGxlbWVudGVkIG1vZHVsZXMgdG8gdXNlIGEgV2luZG93cy1jb21wYXRpYmxlIGxheW91dCBhbmQgdG8KCWFsbG93IG11bHRpcGxlIHRhc2tzIGFuZCBtdWx0aXBsZSBtb2R1bGUgaW5zdGFuY2VzLiBOb3QgcmVhbGx5CglmaW5pc2hlZCB5ZXQuCgoJKiBbbG9hZGVyL3Rhc2suY10gW21pc2MvZXhlYy5jXQoJUmVpbXBsZW1lbnRlZCB0YXNrcyB0byB1c2UgYSBjb21tb24gYWRkcmVzcyBzcGFjZSwgYW5kIGltcGxlbWVudGVkCglwcmVsaW1pbmFyeSB0YXNrLXN3aXRjaGluZyBjYXBhYmlsaXRpZXMuCgoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJRml4ZWQgYnVnIGluIEdsb2JhbE5leHQoKS4KCgkqIFttaXNjL21haW4uY10KCVVwZGF0ZWQgdGhlIGxpc3Qgb2YgY29udHJpYnV0b3JzLiBMZXQgbWUga25vdyBpZiBJIGZvcmdvdCBzb21lb25lLgoKCSogW21pc2NlbXUvaW50MjEuY10KCVVzZSBvbmUgRFRBIHBlciB0YXNrIGluc3RlYWQgb2YgYSBnbG9iYWwgb25lLgoKCSogW29iamVjdHMvYml0Ymx0LmNdCglGaXhlZCBidWcgaW4gQml0Qmx0KCkgdGhhdCBjb3VsZCBjYXVzZSBCYWRNYXRjaCBlcnJvcnMuCgoJKiBbdG9vbHMvYnVpbGQuY10KCUFkZGVkIG5ldyBmdW5jdGlvbiB0eXBlICdzdHViJywgdGhhdCBtYWtlcyBwb3NzaWJsZSB0byBleHBvcnQgYW4KCXVuaW1wbGVtZW50ZWQgZnVuY3Rpb24gYnkgbmFtZSBhcyB3ZWxsIGFzIGJ5IG9yZGluYWwuIFRoaXMgd2lsbAoJYXZvaWQgbG9hZGluZyBlcnJvcnMgZm9yIHVuaW1wbGVtZW50ZWQgZnVuY3Rpb25zLgoJR2VuZXJhdGUgYW4gaW4tbWVtb3J5IG1vZHVsZSBsYXlvdXQgZm9yIGJ1aWx0LWluIERMTHMgc28gdGhhdCB0aGUKCXNhbWUgY29kZSBjYW4gYmUgdXNlZCBmb3IgYnVpbHQtaW4gYW5kIGxvYWRlZCBtb2R1bGVzLgoJQ2hhbmdlZCByZWxheSBjb2RlIHRvIG1ha2UgaXQgdW5uZWNlc3NhcnkgdG8gc2F2ZSB0aGUgdmFsdWUgb2YgdGhlCglCUCByZWdpc3Rlci4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCUltcGxlbWVudGVkIG11bHRpcGxlIG1lc3NhZ2UgcXVldWVzIGFuZCBwcmVsaW1pbmFyeSB0YXNrLXN3aXRjaGluZwoJY2FwYWJpbGl0aWVzLiBJbnRlci10YXNrIFNlbmRNZXNzYWdlKCkgY2FsbHMgYXJlIG5vdCBpbXBsZW1lbnRlZAoJeWV0IGFuZCB3aWxsIHByb2JhYmx5IGNhdXNlIGNyYXNoZXMgaWYgdXNlZC4KCgkqIFt3aW5kb3dzL3Byb3BlcnR5LmNdCglSZWltcGxlbWVudGVkIHByb3BlcnRpZXMgYW5kIGFsbG9jYXRlIHRoZW0gb24gdGhlIFVTRVIgaGVhcC4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJRml4ZWQgYnVnIGluIFNldFdpbmRvd1dvcmQoKS4KCVJlaW1wbGVtZW50ZWQgRW51bVdpbmRvd3MoKSBhbmQgRW51bVRhc2tXaW5kb3dzKCkuCgpUdWUgQXByIDE4IDA5OjQ4OjM4IDE5OTUgICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KICAgICAgICAKCSogW21pc2MvbWFpbi5jXQoJR2V0U3lzdGVtUGFyYW1ldGVyc0luZm8oKTogQWRkaXRpb25hbCBhY3Rpb24gU1BJX0dFVElDT05USVRMRUZPTlQuCgkKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJUmVtb3ZlZCB0aGUgY2hlY2sgZm9yIE5FX1NFR0ZMQUdTX0VYRUNVVEVPTkxZLCBzaW5jZSBpdCBicm9rZQoJY29udHJvbC5leGUuCglGaXhlZCBpY29uIGxvYWRpbmcuCgkKCSogW29iamVjdHMvZm9udC5jXSBbaW5jbHVkZS93aW5kb3dzLmhdCglGaXhlZCBhIGJ1ZyBpbiBJbml0Rm9udHNMaXN0KCkgYW5kIHdvcmtlZCBvbiB0aGUgRW51bUZvbnRzKCkKCWZ1bmN0aW9ucyB0byBtYWtlIHRoZW0gY29tcHJlaGVuc2libGUuCgogICAgICAgICogW2NvbnRyb2xzL2J1dHRvbi5jXQoJRml4ZWQgbXkgcHJldmlvdXMgcGF0Y2ggdG8gaGFuZGxlIExCVVRUT05VUCBtZXNzYWdlcy4KCkZyaSBBcHIgMTQgMTE6NDE6MjggMTk5NSAgQ2FtZXJvbiBIZWlkZSAgKGhlaWRlQGVlLnVhbGJlcnRhLmNhKQoKICAgICAgICAqIFttaXNjL25ldHdvcmsuYywgbWlzYy9kb3NfZnMuY10KICAgICAgICBJbXBsZW1lbnRlZCBXTmV0R2V0Q29ubmVjdGlvbi4gIEFsbCB0aGF0IGlzIGN1cnJlbnRseQogICAgICAgIHN1cHBvcnRlZCBhcmUgZHJpdmVzLCBmb3Igd2hpY2ggdGhlIHJlbW90ZSBuYW1lIGlzIHNpbXBseQogICAgICAgIHRoZSByZWRpcmVjdGVkIFVOSVggZGlyZWN0b3J5IG5hbWUuCgogICAgICAgICogW21pc2NlbXUvaW50Mj8uY10KICAgICAgICBNb3JlIGRyaXZlIG51bWJlciB2YWxpZGl0eSBjaGVja2luZy4KCldlZCBBcHIgMTIgMTE6Mjg6MzcgMTk5NSAgIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgogICAgICAgIAogICAgICAgICogW2NvbnRyb2xzL2xpc3Rib3guY10KCU9vcHMsIG15IHByZXZpb3VzIGNoYW5nZSB0byBMaXN0Qm94RGlyZWN0b3J5IGJyb2tlIHRoZSBCb3JsYW5kCglmaWxlIG9wZW4gZGlhbG9nLiBGaXhlZC4KCk1vbiBBcHIgMTAgMjM6MTc6MTIgMTk5NSAgTWFydGluIHZvbiBMb2V3aXMgIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBbaWYxNjMyL29sZTJubHMuc3BlY10gW21pc2Mvb2xlMm5scy5jXSBbbWlzYy9JbWFrZWZpbGVdCglOZXcgZmlsZSBvbGUybmxzLmMuIEFkZGVkIHN0dWJzIGZvciBHZXRVc2VyRGVmYXVsdExDSUQsIAoJR2V0U3lzdGVtRGVmYXVsdExDSUQsIEdldFVzZXJEZWZhdWx0TGFuZ0lELCBHZXRTeXN0ZW1EZWZhdWx0TGFuZ0lELgoKTW9uIEFwciAxMCAxMDowNToxOCAxOTk1ICAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CiAgICAgICAgCgkqIFttZW1vcnkvZ2xvYmFsLmNdIFttZW1vcnkvbG9jYWwuY10gW2luY2x1ZGUvd2luZG93cy5oXQoJR2xvYmFsUmVBbGxvYygpOiBJZiBHTUVNX01PRElGWSBpcyBzZXQsIGRvbid0IHJlc2l6ZSB0aGUgYmxvY2suCglMb2NhbFJlQWxsb2MoKTogU2FtZSBmb3IgTE1FTV9NT0RJRlkuCgkKICAgICAgICAqIFtjb250cm9scy9saXN0Ym94LmNdCglGaXhlZCBhIGJ1ZyBpbiBMaXN0Qm94RGlyZWN0b3J5IHRoYXQgcHJldmVudGVkIGNvbW1kbGcgZnJvbSB3b3JraW5nLgoJQ2hlY2sgZm9yIGVycm9ycyBpbiBzb21lIG1vcmUgcGxhY2VzLgoKICAgICAgICAqIFtpZjE2MzIvZ2RpLnNwZWNdIFtpZjE2MzIvdXNlci5zcGVjXQoJMTYgYml0IGNhbGxiYWNrIGZ1bmN0aW9ucyBzaG91bGQgYmUgcGFzc2VkIGFzIHNlZ3B0cnMuCgkKCSogW2luY2x1ZGUvZGxscy5oXSBbbG9hZGVyL25lX2ltYWdlLmNdIFtsb2FkZXIvc2VsZWN0b3IuY10KCVtsb2FkZXIvbGlicmFyeS5jXQoJUHJldmVudCBhIERMTCBmcm9tIGJlaW5nIGluaXRpYWxpemVkIHR3aWNlIChCb3JsYW5kcyBSZXNvdXJjZQoJV29ya3Nob3AgdXNlZCB0byBkbyB0aGlzKS4KCVByb3ZpZGUgYW4gYWRkaXRpb25hbCBmbGFnIGZvciBlYWNoIHdfZmlsZSB0aGF0IGluZGljYXRlcyB3aGV0aGVyCglpdCdzIGFuIEVYRSBvciBhIERMTCwgZm9yIGNvbWJpbmF0aW9ucyBsaWtlIHBicnVzaC5leGUvLmRsbC4KCQoJKiBbY29udHJvbHMvYnV0dG9uLmNdCglIYW5kbGUgTEJVVFRPTlVQIG1lc3NhZ2VzIGV2ZW4gaWYgdGhlIGJ1dHRvbiBubyBsb25nZXIgaGFzIHRoZQoJY2FwdHVyZSAoZm9yIFdpbkhlbHApLgoJCgkqIFtpbmNsdWRlL3dpbnR5cGVzLmhdCglGQVJQUk9DIGlzIG5vdyBhIHNlZ3B0ciBmb3IgdGhlIGVtdWxhdG9yIGFuZCBhIGZ1bmN0aW9uCglwb2ludGVyIGZvciB0aGUgbGlicmFyeS4KCQoJKiBbbWlzYy9jb21tZGxnLmNdIFttaXNjL2NvbW1kbGcuaF0KCUNsZWFuZWQgdGhlIGZpbGUgZGlhbG9ncyB1cCBhIGxpdHRsZS4gVGhleSBub3cgd29yayByZWFzb25hYmx5IHdlbGwsCglhbHRob3VnaCB0aGVyZSBhcmUgc3RpbGwgc29tZSBwcm9ibGVtcyAoZS5nLiBmaWxlcyBhcmUgaW5pdGlhbGx5CiAgICAgICAgaW52aXNpYmxlKS4KCgkqIFt3aW5kb3dzL2NsYXNzLmNdIFtpZjE2MzIvdXNlci5zcGVjXSBbaW5jbHVkZS93aW5kb3dzLmhdCglHZXRDbGFzc0luZm8oKSBtdXN0IHRha2UgYSBzZWdwdHIsIGFzIGl0IGNoZWNrcyB3aGV0aGVyIHRoZQoJaGlnaHdvcmQgaXMgemVyby4KCUdldENsYXNzTmFtZSgpIGNhbGxlZCB0aGUgd3JvbmcgYXRvbSBmdW5jdGlvbi4gTm8gc3VycHJpc2UgaXQgZGlkbid0CiAgICAgICAgZmluZCBhbnl0aGluZy4KCgkqIFttaXNjL2xzdHIuY10KCUFuc2lUb09lbSgpIGFuZCBPZW1Ub0Fuc2koKSBkaWRuJ3QgdGVybWluYXRlIHRoZSBzdHJpbmdzLiBGaXhlZC4KICAgICAgICBSZW1vdmVkIHNvbWUgd2FybmluZ3MuCgoJKiBbaWYxNjMyL3JlbGF5LmNdIFtpZjE2MzIvZGRlbWwuc3BlY10gW2luY2x1ZGUvZGxscy5oXQoJTmV3IHNwZWMgZmlsZSBmb3IgdGhlIDMuMSBEREVNTCBEREwuIAoKCSogW2NvbnRyb2xzL21lbnUuY10KCVNtYWxsIGZpeCB0byBDaGFuZ2VNZW51IC0gbWFzayBvdXQgdGhlIG9ic29sZXRlIGZsYWdzCgkoTUZfQVBQRU5EID09IE1GX09XTkVSRFJBVywgdGhpcyBsZWQgdG8gcHJvYmxlbXMpLiBJdCBhbHNvIGhhZAoJcHJvYmxlbXMgd2l0aCB0aGUgTUZfQllQT1NJVElPTiBmbGFnLgoKICAgICAgICAqIFt3aW5kb3dzL21lc3NhZ2UuY10KICAgICAgICBTZW5kTWVzc2FnZSgpOiBjYWxsIHRoZSBXSF9DQUxMV05EUFJPQyBob29rIGZ1bmN0aW9uLiBUaGlzIGlzIHJhdGhlcgogICAgICAgIHVnbHksIEknbSBhZnJhaWQuIFdpbmRvd3MgcHJvYmFibHkgcGFzc2VzIGEgcG9pbnRlciB0byB0aGUgMTYgYml0CiAgICAgICAgc3RhY2sgZm9yIHNwZWVkIHJlYXNvbnMuCgkKICAgICAgICAqIFt3aW5kb3dzL2hvb2suY10gW2luY2x1ZGUvd2luZG93cy5oXQogICAgICAgIFNldC9Ib29rV2luZG93c0hvb2soKSBzaG91bGRuJ3QganVzdCBjYWxsIHRoZWlyICpFeCBjb3VudGVycGFydHMsIGFzCiAgICAgICAgdGhleSBoYXZlIHNsaWdodGx5IGRpZmZlcmVudCBzZW1hbnRpY3MuCiAgICAgICAgTVMgSGVhcnRzIG5vdyB3b3JrcyBzb21ld2hhdCwgaWYgeW91IGRpc2FibGUgdGhlIG5ldyBidWlsdGluIERERU1MLgogICAgICAgIFRoZSBncmFwaGljcyBhcmUgY29tcGxldGVseSBtZXNzZWQgdXAsIHRob3VnaC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIEFwciAgMiAxODozMToxMiAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBzdW5zaXRlLnVuYy5lZHUpCgoJKiBbQ29uZmlndXJlXSBbaWYxNjMyL0ltYWtlZmlsZV0KCVJlbW92ZWQgbmV3IGJ1aWxkIGFuZCBzaG9ydCBuYW1lcyBvcHRpb25zLgoKCSogW2lmMTYzMi8qLmNdIFt0b29scy9idWlsZC5jXQoJSW1wbGVtZW50ZWQgY29tcGlsZWQgY2FsbC1iYWNrIGZ1bmN0aW9ucyBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlOwoJYWxsIHRoZSByZWxheSBjb2RlIGlzIG5vdyBkb25lIGluIGFzc2VtYmx5IGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZQoJYnVpbGQgcHJvZ3JhbS4KCVJlbGF5IGNvZGUgaXMgbm8gbG9uZ2VyIGRlcGVuZGVudCBvbiBiZWluZyBsb2FkZWQgYmVsb3cgNjRLLgoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJRml4ZWQgbWVtb3J5IGxlYWsgaW4gTG9hZFN0cmluZygpLiBBIGZpeCB3aWxsIGFsc28gYmUgbmVlZGVkIGZvcgoJb3RoZXIgcmVzb3VyY2VzLgoKCSogW21lbW9yeS9nbG9iYWwuY10KCUltcGxlbWVudGVkIGdsb2JhbCBoZWFwIGFyZW5hcywgc28gd2UgY2FuIHN0b3JlIGluZm9ybWF0aW9ucyBhYm91dAoJZ2xvYmFsIGJsb2NrcywgbGlrZSBsb2NrIGNvdW50cyBvciBvd25lciBoYW5kbGUuCglJbXBsZW1lbnRlZCBGYXJHZXRPd25lcigpIGFuZCBGYXJTZXRPd25lcigpLgoJSW1wbGVtZW50ZWQgZ2xvYmFsIGhlYXAgVE9PTEhFTFAgZnVuY3Rpb25zLgoKCSogW21lbW9yeS9zZWxlY3Rvci5jXQoJQnVnIGZpeDogaXQgd2FzIG5vdCBwb3NzaWJsZSB0byByZS11c2UgYSBmcmVlIHNlbGVjdG9yLgoKU3VuIEFwciAyIDAxOjM0OjUyIDE5OTUgQ29uc3RhbnRpbmUgU2FwdW50emFraXMgIChjc2FwdW50ekBtaXQuZWR1KQoKCSogIFtjb250cm9scy9saXN0Ym94LmNdCglNYWpvciB3b3JrIG9uIGxpc3Rib3ggY29kZQogICAgICAgICAtIE1hbnkgYnVncyBmaXhlZCAoc3RpbGwgbWFueSBidWdzKQogICAgICAgICAtIE1vcmUgbWVzc2FnZXMgc3VwcG9ydGVkCiAgICAgICAgIC0gQ29kZSBzaW1wbGlmaWVkCgpGcmkgTWFyIDMxIDAzOjI3OjE2IEVTVCAxOTk1IFdpbGxpYW0gTWFncm8gKHdtYWdyb0B0Yy5jb3JuZWxsLmVkdSkKCgkqIFtjb250cm9scy9lZGl0LmNdCglMb3RzIG9mIGJ1ZyBmaXhlcyByZWxhdGVkIHRvIGRpYXBwZWFyaW5nIHRleHQsIGxvc3QgY2FyZXRzLAoJaGlnaGxpZ2h0aW5nLCBzZWdtZW50YXRpb24gZmF1bHRzLCBvY2N1cmFuY2Ugb2YgcmFuZG9tCgljaGFyYWN0ZXJzLCBpbnNlcnRpb24gb2YgY2hhcmFjdGVycyBvdmVyIHNlbGVjdGlvbiwgbWlzcGxhY2VkCgljYXJldCBsb2NhdGlvbiwgZGlzcGxheSBjb3JydXB0aW9uLCBlbmQgb2YgbGluZSBiZWhhdmlvciwgZXRjLgoKCSogW2NvbnRyb2xzL3dpZGdldHMuY10KCUVESVQgY2xhc3MgZG9lc24ndCB3YW50IHRvIHVzZSBDU19QQVJFTlREQyBmbGFnLgoKVGh1IE1hciAzMCAyMDo1ODoyNSAxOTk1ICAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CiAgICAgICAgCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCSAgRml4dXBGdW5jdGlvblByb2xvZ3MoKSBzaG91bGQgYWxzbyBoYW5kbGUgbXVsdGlwbGUgZGF0YSBtb2R1bGVzLgoJICAodGhpcyBidWcgb25seSBiZWNhbWUgdmlzaWJsZSBiZWNhdXNlIE1ha2VQcm9jSW5zdGFuY2UoKSB3YXMgZml4ZWQKCSAgaW4gOTUwMzE5KQoJCgkqIFttaXNjL2Rvc2ZzLmNdCgkgIFNpbXBsaWZpZWQgRE9TX1NpbXBsaWZ5UGF0aC4KCSAgU21hbGwgZml4IHRvIERPU19vcGVuZGlyIHRvIHJldXNlIGFuIGVudHJ5IGlmIGFuIG9wZW4gZGlyZWN0b3J5CgkgIGlzIG9wZW5lZCBhZ2FpbiwgdG8gcHJldmVudCAidG9vIG1hbnkgb3BlbiBkaXJlY3RvcmllcyIgbWVzc2FnZXMuCgpUaHUgTWFyIDMwIDEyOjA1OjA1IDE5OTUgTWFydGluIHZvbiBMb2V3aXMgIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBbaWYxNjMyL2NvbXBvYmouc3BlY11baW5jbHVkZS9jb21wb2JqLmhdW21pc2MvY29tcG9iai5jXQoJQ29EaXNjb25uZWN0T2JqZWN0OiBuZXcgc3R1YiBmdW5jdGlvbgoKCSogW2luY2x1ZGUvbXNkb3MuaF0KCWZpeCBET1NWRVJTSU9OCgoJKiBbbG9hZGVyL25lX2ltYWdlLmNdCglORV9GaXh1cFNlZ21lbnQ6IEJlIG1vcmUgZ2VuZXJvdXMgb24gYWRkaXRpdmUgZml4dXBzCgoJKiBbaWYxNjMyL3VzZXIuc3BlY11bbWlzYy9uZXR3b3JrLmNdCglBZGQgbW9yZSBXTmV0KiBzdHVicwoKV2VkIE1hciAyOSAxMTo0NzoyMiAxOTk1ICAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CgogICAgICAgICogW2NvbnRyb2xzL2xpc3Rib3guY10KCSAgRGxnRGlyTGlzdCgpOiBzZW5kIHNlZ3B0ciBpbnN0ZWFkIG9mIGxpbmVhciBwb2ludGVyIAoJICBpbiBtZXNzYWdlIHRvIHN0YXRpYyBjb250cm9sCgkqIFtjb250cm9scy9tZW51LmNdCgkgIFRyaWVkIHRvIGltcGxlbWVudCBvd25lcmRyYXduIG1lbnVpdGVtcy4gRG9lc24ndCB3b3JrLgoJKiBbaWYxNjMyL2dkaS5zcGVjXSBbaW5jbHVkZS93aW5kb3dzLmhdIFtvYmplY3RzL2ZvbnQuY10KCSAgUHJvdmlkZSBhIHN0dWIgZm9yIEdldFJhc3Rlcml6ZXJDYXBzKCkKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJICBQYXNzIGVuZCBhZGRyZXNzIGluc3RlYWQgb2YgbGVuZ3RoIHRvIExvY2FsSW5pdCgpIGluIAoJICBDcmVhdGVTZWxlY3RvcnMoKQoJKiBbbWVtb3J5L2xvY2FsLmNdCgkgIExvY2FsSW5pdCgpOiBJZiB0aGVyZSdzIGFscmVhZHkgYSBsb2NhbCBoZWFwIGluIHRoZSBzZWdtZW50LCBkbwoJICBub3RoaW5nIGFuZCByZXR1cm4gVFJVRQoJKiBbb2JqZWN0cy9saW5lZGRhLmNdCgkgIFJlcGxhY2VkIGJ1Z2d5IExpbmVEREEoKSB3aXRoIGEgQnJlc2VuaGFtIGFsZ29yaXRobS4gU2hvdWxkIHdvcmsKCSAgbm93LgoJKiBbd2luZG93cy9jdXJzb3IuY10KCSAgTG9hZEN1cnNvcigpL0NyZWF0ZUN1cnNvcigpOiBDbGVhbmVkIHVwIHRoZSBtZXNzLiBOZWVkcyBzb21lCgkgIG1vcmUgd29yayBzdGlsbC4KClR1ZSBNYXIgMjEgMTc6NTQ6NDMgMTk5NSAgIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoKICAgICAgICAqIFtpZjE2MzIvcmVsYXkuY10gW2lmMTYzMi9jYWxsYmFjay5jXSBbaW5jbHVkZS9kbGxzLmhdCgkgIFtpZjE2MzIvd2lucHJvY3Muc3BlY10gW2lmMTYzMi93aW5wcm9jcy5jXSBbaW5jbHVkZS93aW5wcm9jcy5oXQoJICBbY29udHJvbHMvd2lkZ2V0cy5jXSBbbWlzYy9zaGVsbC5jXSBbbWlzYy9jb21tZGxnLmNdCgkgIFt3aW5kb3dzL25vbmNsaWVudC5jXSBbbWlzYy9tZXNzYWdlLmNdCgkgIEFkZGVkIGEgbmV3IGJ1aWx0aW4gRExMIHRoYXQgcHJvdmlkZXMgMTYgYml0IGVudHJ5IHBvaW50cyBmb3IgYWxsCgkgIHRoZSBEZWYqUHJvY3MgKERlZkRsZ1Byb2MsIEJ1dHRvblByb2MgZXRjLikuIE9XTCBwcm9ncmFtcyB3b3JrCgkgIGFnYWluLgoJKiBbbWlzYy9zaGVsbC5jXQoJICBSZWdPcGVuS2V5KCkvUmVnQ3JlYXRlS2V5KCkgYnVncyBmaXhlZC4KICAgICAgICAqIFtsb2FkZXIvbmVfaW1hZ2UuY10KCSAgU2tpcHBpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mIGEgRExMIHdoZW4gQ1MgPT0gMCB3YXMgYnJva2VuLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gTWFyIDE5IDE2OjMwOjIwIDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQHN1bnNpdGUudW5jLmVkdSkKCgkqIFsqLypdCglJbXBsZW1lbnRlZCBhIG5ldyBtZW1vcnkgbWFwcGluZyBzY2hlbWUuIFRoZXJlJ3Mgbm8gbG9uZ2VyIGEKCW9uZS10by1vbmUgbWFwcGluZyBiZXR3ZWVuIDE2LWJpdCBhbmQgMzItYml0IHBvaW50ZXJzLiBQbGVhc2Ugc2VlCglmaWxlIERFVkVMT1BFUlMtSElOVFMgZm9yIHRlY2huaWNhbCBkZXRhaWxzLgoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJRml4ZWQgYnVnIHdoZW4gZHJhZ2dpbmcgbW91c2UgaW4gaG9yaXpvbnRhbCBzY3JvbGxiYXJzLgoKCSogW3Rvb2xzL2J1aWxkLmNdIFtpZjE2MzIvKi5zcGVjXQoJUmVtb3ZlZCBzdXBwb3J0IGZvciBDIGNhbGxiYWNrIGZ1bmN0aW9ucyBhbmQgZm9yIHJlLW9yZGVyaW5nCglvZiB0aGUgMzItYml0IGFyZ3VtZW50cywgYXMgdGhlc2Ugd2VyZSBuZXZlciB1c2VkLiBUaGlzIHNob3VsZAoJYWxsb3cgYSBtb3JlIGVmZmljaWVudCBjYWxsYmFjayBzY2hlbWUgdG8gYmUgaW1wbGVtZW50ZWQuCgoJKiBbaWYxNjMyL29sZWNsaS5zcGVjXQoJUmVkdWNlZCB0aGUgbnVtYmVyIG9mIGVudHJpZXMgdG8gbWFrZSB0aGUgMTYtYml0IGNvZGUgZml0IGluIDY0ay4KCVRoaXMgbGltaXRhdGlvbiB3aWxsIHNvb24gYmUgcmVtb3ZlZC4KCgkqIFtsb2FkZXIvbGR0LmNdCglSZXdyb3RlIExEVCBtYW5pcHVsYXRpb24gZnVuY3Rpb25zIGFuZCBpbXBsZW1lbnRlZCBMRFRfR2V0RW50cnkoKS4KCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglSZXdyb3RlIEdsb2JhbCooKSByb3V0aW5lcyB0byB1c2UgdGhlIG5ldyBzZWxlY3RvciBhbGxvY2F0aW9uCgltZWNoYW5pc20uCgoJKiBbbWVtb3J5L2xvY2FsLmNdCglSZXdyb3RlIGxvY2FsIGhlYXAgaGFuZGxpbmcgdG8gdXNlIGEgV2luZG93cy1jb21wYXRpYmxlIGxheW91dAoJKG5vdCByZWFsbHkgZmluaXNoZWQgeWV0KS4KCUltcGxlbWVudGVkIFRPT0xIRUxQIGhlYXAtd2Fsa2luZyByb3V0aW5lcy4KCgkqIFttZW1vcnkvc2VsZWN0b3IuY10KCUltcGxlbWVudGVkIExEVCBtYW5pcHVsYXRpb24gQVBJIGZ1bmN0aW9ucy4KClR1ZSBNYXIgMTQgMTk6NTA6MjggRVNUIDE5OTUgV2lsbGlhbSBNYWdybyAod21hZ3JvQHRjLmNvcm5lbGwuZWR1KQoKCSogW3dpbmRvd3MvZGVmZGxnLmNdCglGaXhlZCBwcm9ibGVtIHdoZXJlIGRpYWxvZ3MgY2xvc2VkIHVzaW5nIHRoZSBTeXN0ZW0gbWVudSAKICAgICAgICAoJ0Nsb3NlJyBpdGVtIG9yIGRvdWJsZSBjbGljayBvbiBjbG9zZSBib3gpIHdvdWxkCgloYW5nIFdpbmUuCgpTdW4gTWFyIDEyIDE0OjI4OjEzIDE5OTUgIE1pY2hhZWwgUGF0cmEgPG1pY2t5QG1hcmllLnBoeXNpay5UVS1CZXJsaW4uREU+CgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJUmVtb3ZlZCBtb3N0IG9mIHRoZSBzdGF0ZW1lbnRzIGZvciBzZW5kaW5nIGEgbm90aWZpY2F0aW9uIG1lc3NhZ2UKCUxpc3RCb3hEaXJlY3RvcnkoKSwgRGxnRGlyU2VsZWN0KCksIERsZ0Rpckxpc3QoKTogSW1wcm92ZWQgdGhlCgljb2RlOyBCb3JsYW5kJ3Mgc3RhbmRhcmQgZmlsZSBvcGVuIGRpYWxvZyB3aWxsIHdvcmsgbm93LgoJCgkqIFttaXNjL21haW4uY10sIFttaXNjL2ZpbGUuY10sIFttaXNjZW11L2ludDIxLmNdCglBZGRlZCBzdXBwb3J0IGZvciBuZXcgY29tbWFuZCBsaW5lIG9wdGlvbiAiLWFsbG93cmVhZG9ubHkiLiBJZiBzZXQKCWFuIGF0dGVtcHQgdG8gb3BlbiBhIHJlYWQgb25seSBmaWxlIGluIHdyaXRlIG1vZGUgd2lsbCBiZSBjb252ZXJ0ZWQgCgl0byBvcGVuaW5nIGl0IHJlYWQgb25seSAobWFueSBwcm9ncmFtcyB0cnkgdG8gb3BlbiBhbGwgZmlsZXMgaW4gCglyZWFkL3dyaXRlIG1vZGUgZXZlbiBpZiB0aGV5IG9ubHkgaW50ZW5kIHRvIHJlYWQgaXQgLSB0aGlzIG1pZ2h0IAoJY2F1c2UgYSBmZXcgdW5kZXIgcHJvYmxlbXMgdW5kZXIgYW4gdW5peC1saWtlIGVudmlyb25tZW50IHdoZXJlIG1vc3QgCglmaWxlcyBhcmUgcmVhZCBvbmx5IGZvciBhICJub3JtYWwiIHVzZXIpCgoJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCglHZXRNZW1vcnlSZWZlcmVuY2UoKTogQWRkZWQgc3VwcG9ydCBmb3IgX19BSEluY3IgYW5kIF9fQUhTaGlmdAoKCSogW21pc2MvZG9zX2ZzLmNdCglET1NfU2ltcGxpZnlQYXRoKCk6IFRoaXMgcm91dGluZSBzaW1wbGlmaWVzIHBhdGggbmFtZXMgKCBlLmcuLCBpdAoJd2lsbCBjaGFuZ2UgIi91c3IvLy9sb2NhbC9iaW4vLi4vbGliLy9hIiB0byAiL3Vzci9sb2NhbC9saWIvYSIgKQoJbWF0Y2goKTogcmV3cml0dGVuCgkKCSogW29iamVjdHMvdGV4dC5jXQoJVEVYVF9OZXh0TGluZSgpOiBSZW1vdmVkIGEgYnVnIGluIHRoZSBoYW5kbGluZyBvZiBMRidzCgoJKiBbbWlzY2VtdS9pbnQyMS5jXQoJR2V0RmlsZURhdGVUaW1lKCk6IEZpeGVkLiBTZXRGaWxlRGF0ZVRpbWUoKSBpcyBzdGlsbCBicm9rZW4uCgpTYXQgTWFyIDExIDE5OjQ2OjE5IDE5OTUgIE1hcnRpbiB2b24gTG9ld2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUNoYW5nZU1lbnU6IGRlZmF1bHRzIHRvIE1GX0lOU0VSVAoJSW5zZXJ0TWVudTogYWxsb3cgaW5zZXJ0aW9uIGV2ZW4gaWYgcG9zaXRpb24gaXMgb25lIGFmdGVyIGxhc3QgaXRlbQoKCSogW2lmMTYzMi9JbWFrZWZpbGVdIFtpZjE2MzIvY29tcG9iai5zcGVjXSBbaWYxNjMyL3JlbGF5LmNdCgkgIFtpZjE2MzIvc3RvcmFnZS5zcGVjXSBbaW5jbHVkZS9kbGxzLmhdCglBZGRlZCBzdHVicyBmb3IgU1RPUkFHRS5ETEwgYW5kIENPTVBPQkouRExMCgoJKiBbaWYxNjMyL3VzZXIuc3BlY10gW3dpbmRvd3MvbWVzc2FnZS5jXQoJSW5TZW5kTWVzc2FnZTogbmV3IGZ1bmN0aW9uCgoJKiBbaW5jbHVkZS9uZWV4ZS5oXVtpbmNsdWRlL25lX2ltYWdlLmNdCglORV9GaXh1cFNlZ21lbnQ6IGZpeGVkIGhhbmRsaW5nIG9mIGFkZGl0aXZlIHJlY29yZHMKCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCUdldEVudHJ5RExMTmFtZTogcmV0dXJuIE5VTEwgaW5zdGVhZCBvZiBwb2ludGVyIHRvIERMTC4wIGlmIG5vdCBmb3VuZAoKCSogW2xvYWRlci9zaWduYWwuY10KCXdpbl9mYXVsdDogRW50ZXIgZGVidWdnZXIgb24gU0lHRlBFLCB0b28KCldlZCBNYXIgIDEgMjE6NDc6NDIgMTk5NSAgQ2FtZXJvbiBIZWlkZSAgKGhlaWRlQGVlLnVhbGJlcnRhLmNhKQoKICAgICAgICAqIFttaXNjZW11L2ludCouY10KICAgICAgICBWYXJpb3VzIG1pbm9yIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGNsb2NrIHRpY2sgY291bnRlciwKICAgICAgICBGaW5kRmlyc3QvRmluZE5leHQgZnVuY3MsIGFuZCBEUEIgaGFuZGxpbmcuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClRodSBNYXIgIDIgMTc6NDQ6MzIgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAc3Vuc2l0ZS51bmMuZWR1KQoKCSogW2xvYWRlci9yZXNvdXJjZS5jXSBbb2JqZWN0cy9vZW1iaXRtYXAuY10KCVJlbW92ZWQgc3lzcmVzIGJpdG1hcCBjb2RlOyB5b3UgbmVlZCBsaWJYcG0gdG8gY29tcGlsZSBub3cuCglJbXBsZW1lbnRlZCBMb2FkSWNvbigpIGZvciBPRU0gaWNvbnMuCgoJKiBbaW5jbHVkZS9iaXRtYXBzL29pY18qXQoJQWRkZWQgT0VNIGljb25zIGluIFhQTSBmb3JtYXQuCgoJKiBbb2JqZWN0cy9kaWIuY10KCUJ1ZyBmaXggaW4gRHJhd0ljb24oKS4KCgkqIFtyYy9zeXNyZXNibS5yY10KCVJlbW92ZWQ7IGFsbCBiaXRtYXBzIGFyZSBzdG9yZWQgaW4gWFBNIGZvcm1hdCBub3cuCgpUdWUgRmViIDI4IDE4OjU0OjI4IDE5OTUgIFRvbWkgTGVwcGlrYW5nYXMgICh0b21pbGVwcEBwYWp1Lm91bHUuZmkpCgoJKiBbY29udHJvbHMvZWRpdC5jXQoJU21hbGwgcGF0Y2ggdG8gZml4IGVkaXQtY29udHJvbCB3aGVuIGl0J3MgY3JlYXRlZCB3aXRoIHRleHQuCgpTdW4gRmViIDI2IDIwOjIyOjE1IDE5OTUgIE1pY2hhZWwgVmVrc2xlciAgKGUxNjc4MjIzQHRvY2huYXBjMi50ZWNobmlvbi5hYy5pbCkKCgkqIFt0b29scy9tYWtlX2RlYnVnXQoJVGhlIGNyZWF0ZWQgbWFjcm9zIHdvbid0IGhhdmUgc2lkZSBlZmZlY3RzIGFueW1vcmUgd2hlbiB1c2VkIGluCglhbiAiaWYtZWxzZSIgc3RydWN0dXJlLiBObyBtb3JlIHdhcm5pbmdzIGZyb20gdGhlIGNvbXBpbGVyIHdoZW4KCWNvbXBpbGVkIHdpdGhvdXQgZGVmaW5pbmcgREVCVUdfUlVOVElNRS4KIApTdW4gRmViIDI2IDIwOjIwOjQ5IDE5OTUgIE1pY2hhZWwgUGF0cmEgPG1pY2t5QG1hcmllLnBoeXNpay5UVS1CZXJsaW4uREU+CgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJTGlzdEJveERlbGV0ZVN0cmluZygpOiBGaXhlZAoKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJR2V0TWVtb3J5UmVmZXJlbmNlKCk6IFdoZW4gc3BlY2lhbCBzZWdtZW50cyBhcmUgcmVmZXJlbmNlZCBieQoJcHNldWRvLWZ1bmN0aW9ucyBsaWtlIF9fMDA0MEgsIGEgcmVmZXJlbmNlIHRvIGEgIm5vcm1hbCIgc2VnbWVudAoJd2lsbCBiZSByZXR1cm5lZCBwcmV2ZW50aW5nIHRoZSBwcm9ncmFtIGZyb20gY3Jhc2hpbmcgYXMgc29vbgoJYXMgdGhlIHJlZmVyZW5jZWQgc2VnbWVudCBpcyBhY3R1YWxseSBhY2Nlc3NlZC4KClN1biBGZWIgMjYgMTU6NTU6MTQgTUVUIDE5OTUgIE1hcnRpbiB2b24gTG9ld2lzIChsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGUpCgoJKiBbQ29uZmlndXJlXQoJQXNrIGZvciBPTEUgc3R1YnMgYW5kIG1hbGxvYyBkZWJ1Z2dpbmcKCgkqIFtJbWFrZWZpbGVdCglsaW5rIHdpdGggbGlibWNoZWNrLmEgaWYgbmVjZXNzYXJ5CgoJKiBbaWYxNjMyL3JlbGF5LmNdW2luY2x1ZGUvZGxsLmhdW2lmMTYzMi9JbWFrZWZpbGVdCglBZGQgT0xFIHN0dWJzLCBpbmNyZWFzZSBudW1iZXIgb2YgYnVpbHRpbnMKCWRsbF9uYW1lX3RhYmxlX2VudHJ5X3M6IG5ldyBmaWVsZCBkbGxfaXNfdXNlZAoKCSogW2xvYWRlci9saWJyYXJ5LmNdCglHZXRNb2R1bGVIYW5kbGUsTW9kdWxlTmV4dDogQ2hlY2sgZGxsX2lzX3VzZWQKCgkqIFtsb2FkZXIvbmVfaW1hZ2UuY10KCUJhcmsgb24gdW5zdXBwb3J0ZWQgTkVfUkFERFJfTE9XQllURSBmbGFnICh3aGF0IGlzIGl0IHN1cHBvc2VkCgl0byBtZWFuLCBhbnl3YXk/KQoKCSogW21pc2Mvb2xlY2xpLmNdW21pc2Mvb2xlc3ZyLmNdCglOZXcgZmlsZXMuIEFkZCB0byBtaXNjL0ltYWtlZmlsZQoKCSogW21pc2MvZG9zX2ZzLmNdCglET1NfR2V0VW5peEZpbGVOYW1lOiBtYWtlIGEgY29weSBvZiB0aGUgaW5wdXQgcGFyYW1ldGVyIHRvIAoJcHJldmVudCBvdmVyd3JpdGluZwoKCSogW21pc2MvbWFpbi5jXQoJTUFJTl9QYXJzZURMTE9wdGlvbnM6IG5ldyBmdW5jdGlvbgoJTUFJTl9QYXJzZU9wdGlvbnM6IHRyZWF0IC1kbGwgY29tbWFuZCBsaW5lIGZsYWcKCW1haW46IGFkZCBzdXBwb3J0IGZvciBtYWxsb2MgZGVidWdnaW5nCgpGcmkgRmViIDI0IDEyOjQzOjI3IDE5OTUgIEVyaWsgU3ZlbmRzZW4gIDx6M2VzdkBrbWQtYWMuZGs+CgoJKiBbbG9hZGVyL3NpZ25hbC5jXQoJU21hbGwgcGF0Y2ggZm9yIHBlb3BsZSB1c2luZyBGcmVlQlNELTIuMS4wLgoKRnJpIEZlYiAxNyAyMjo0OToxOCAxOTk1ICBNaWd1ZWwgZGUgSWNhemEgKG1pZ3VlbEByb3hhbm5lLm51Y2xlY3UudW5hbS5teCkKCgkqIFt0b29sa2l0L3N1cC5jXQoJQWRkZWQgcmV0dXJuIHZhbHVlcyB0byB0aGUgQ2FsbCogcm91dGluZXMKCgkqIFt0b29sa2l0L3dpbm1haW4uY10KCUxvYWQgdGhlIHJlc291cmNlIGZpbGUgcHJvcGVybHkgZm9yIFdpbmVMaWIgYXBwbGljYXRpb25zLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUaHUgRmViIDE2IDE4OjU3OjMxIDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQHN1bnNpdGUudW5jLmVkdSkKCgkqIFtpZjE2MzIvY2FsbC5TXQoJT25seSBzYXZlIHRoZSBsb3dlciAxNi1iaXRzIG9mIFNQIGFuZCBCUC4KCgkqIFtpZjE2MzIvY2FsbGJhY2suY10KCVdoZW4gY2FsbGluZyB0byAxNi1iaXQgY29kZSwgcmVzdG9yZSBEUyBmcm9tIGl0cyBwcmV2aW91cyB2YWx1ZSBvbgoJZW50cnkgdG8gdGhlIDMyLWJpdCBjb2RlLCBpbnN0ZWFkIG9mIGZyb20gdGhlIGNvZGUgc2VnbWVudCBvd25lci4KCgkqIFtpZjE2MzIvcmVsYXkuY10gW2luY2x1ZGUvc3RhY2tmcmFtZS5oXQoJVXNlIGEgc3RydWN0dXJlIHRvIHJlcHJlc2VudCB0aGUgMTYtYml0IHN0YWNrIGZyYW1lIGxheW91dAoJaW5zdGVhZCBvZiBoYXJkLWNvZGVkIG9mZnNldHMuCgkKCSogW3JjL0ltYWtlZmlsZV0KCVVzZSB5LnRhYi5jIGZvciBiaXNvbiBvdXRwdXQgZmlsZSBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHlhY2MuCgoJKiBbdG9vbHMvYnVpbGQuY10KCVNtYWxsIG9wdGltaXphdGlvbiBmb3IgY2FsbHMgdG8gMzItYml0IGNvZGUuCgpTdW4gRmViIDEyIDAzOjE5OjQ3IDE5OTUgIE1pY2hhZWwgVmVrc2xlciAoczE2NzgyMjNAdDIudGVjaG5pb24uYWMuaWwpCgoJKiBbdG9vbHMvYnVpbGQuY10KCUZpeGVkIGJ1ZyAoaW5mbGljdGVkIGJ5IHByZXZpb3VzIGNoYW5nZSkgLSBTRUdWIG9uIFpNQUdJQyBmaWxlIGZvcm1hdC4KClN1biBGZWIgMTEgMjA6MDA6MDAgMTk5NSAgR/ZyYW4gVGh5bmkgIChnb3JhbkBub3Jyc2tlbi5iaWxkYmFzZW4uc2UpCgoJKiBbZGVidWdnZXIvZGJnLnldCglSZW1vdmUgdW5uZWNlc3Nhcnkgc3ltLXRhYmxlIGxvYWRpbmcgd2hlbiBzdG9wcGVkIGluIDE2LWJpdCBtb2RlLgoKCSogW2luY2x1ZGUvc2VnbWVtLmhdIFtsb2FkZXIvc2VsZWN0b3IuY10KICAgICAgICBBZGRlZCBkeW5hbWljIGFsbG9jdGlvbiBvZiBzZWxlY3RvcnMuCiAgICAgICAgRml4ZWQgc29tZSBwcm9ibGVtcyB3aXRoIGxhcmdlIHByb2dyYW1zIFNJR1NFR1YtaW5nIHdoaWxlCiAgICAgICAgcnVubmluZyBvdXQgb2Ygc2VsZWN0b3JzLgoKCSogW2luY2x1ZGUvc2VnbWVtLmhdIFtsb2FkZXIvc2VsZWN0b3IuY10gW2lmMTYzMi9jYWxsYmFjay5jXSAKICAgICAgICAgIFttZW1vcnkvZ2xvYmFsLmNdIFttZW1vcnkvaGVhcC5jXSBbbWVtb3J5L2xpbmVhci5jXQoJVXNlIF9fQUhTSElGVCBhbmQgX19BSElOQ1IgaW5zdGVhZCBvZiAzIGFuZCA4LgoKTW9uIEZlYiAgNiAxODowNzozOCAxOTk1ICBDYW1lcm9uIEhlaWRlICAoaGVpZGVAZWUudWFsYmVydGEuY2EpCgogICAgICAgICogW21pc2MvZG9zX2ZzLmNdCiAgICAgICAgQmV0dGVyIHJlbGF0aXZlIHBhdGggaGFuZGxpbmcgd2hlbiBjb252ZXJ0aW5nIGZpbGVuYW1lcyBiZXR3ZWVuCiAgICAgICAgZG9zIGFuZCB1bml4LCBhbGxvd2luZyAnLicgdG8gYmUgdXNlZCBpbiB0aGUgV2luZG93cyBwYXRoLgogICAgICAgIFN0YXJ0dXAgd29ya2luZyBkaXIgaXMgbm93IGJhc2VkIG9uIGN1cnJlbnQgd29ya2luZyBkaXIuCgpTYXQgRmViICA0IDIxOjIxOjEzIDE5OTUgIE1pY2hhZWwgVmVrc2xlciAoczE2NzgyMjNAdDIudGVjaG5pb24uYWMuaWwpCgoJKiBbaWYxNjMyL3JlbGF5LmNdIFtpbmNsdWRlL2RsbHMuaF0gW3Rvb2xzL2J1aWxkLmNdCglTcXVlZXplZCBkYXRhIHN0cnVjdHVyZSB0aGF0IHJlZmVyZW5jZXMgaW50ZXJuYWwgZGxsJ3MgKG1vc3RseQoJInN0cnVjdCBkbGxfdGFibGVfZW50cnlfcyIpLiBDYXVzZWQgMjAlIHJlZHVjdGlvbiBpbiBleGVjdXRhYmxlCgljb2RlIHNpemUuCgpGcmkgRmViICAzIDE4OjUzOjE1IDE5OTUgIE1hcnRpbiB2LiBMb2V3aXMgIChsb2V3aXNAbWFyaWUpCgoJKiBbSW1ha2VmaWxlXQoJbWFrZSB3aW5lLnN5bSBvbmx5IHdoZW4gbWFraW5nIGVtdWxhdG9yCgoJKiBbbWlzYy9maWxlLmNdCglPcGVuRmlsZSgpOiByZXBvcnQgYXMgbm90IGltcGxlbWVudGVkIGZvciBXSU5FTElCCgoJKiBbbWlzYy93aW5zb2NrLmNdCglGaXggQ09OVkVSVF9IT1NURU5UIGFuZCBmcmllbmRzIGZvciB1c2Ugd2l0aCBXSU5FTElCCgoJKiBbcmMvSW1ha2VmaWxlXVtyYy9yYy55XVtyYy9wYXJzZXIuY10KCVJlbmFtZSByYy55IHRvIHBhcnNlci55CglVc2UgZmxleCBhbmQgYmlzb24gb24gU3VuCgoJKiBbdG9vbGtpdC9zdXAuY10KCUNhbGxXaW5kb3dQcm9jOiBmaXggcGFyYW1ldGVyIHR5cGUKCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglDb21tZW50ZWQgI2lmZGVmIHNwYXJjCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCldlZCBGZWIgIDEgMTk6Mjc6NTUgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAbGFtaXN1bi5lcGZsLmNoKQoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdIFt3aW5kb3dzL3dpbnBvcy5jXQoJSW1wbGVtZW50ZWQgbWF4aW1pemVkIHdpbmRvd3MuCglJbXBsZW1lbnRlZCBpY29uIHBvc2l0aW9uaW5nIGFuZCBBcnJhbmdlSWNvbmljV2luZG93cygpLgoJQnVnIGZpeGVzIGluIFNldFdpbmRvd1BvcygpLgoKCSogW3dpbmRvd3MvcGFpbnRpbmcuY10KCUltcGxlbWVudGVkIEdldENvbnRyb2xCcnVzaCgpLgoJV2luZG93IGZyYW1lIGlzIG5vIGxvbmdlciBjb250YWluZWQgaW4gdGhlIHVwZGF0ZSByZWdpb24uCgoJKiBbd2luZG93cy93aW4uY10KCURlc3Ryb3kgb3duZWQgd2luZG93cyB1cG9uIERlc3Ryb3lXaW5kb3coKS4KClN1biBKYW4gMjkgMTY6MTc6MjIgMTk5NSAgRGF2aWQgTWV0Y2FsZmUgPGRhdmlkQHByaXNtLmRlbW9uLmNvLnVrPgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUNoYW5nZWQgbGluZSB0ZXJtaW5hdG9yIHRvIFxyXG4gdG8gYmUgY29tcGF0aWJsZSB3aXRoCglXaW5kb3dzLiAgRml4ZWQgYnVnIGluIHRleHQgc2VsZWN0aW9uLgoKU3VuIEphbiAyOSAxNDoxMDoyMiAxOTk1ICAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CgogICAgICAgKiBbbWlzYy9zaGVsbC5jXQogICAgICAgUmV3cm90ZSBSZWdDcmVhdGVLZXkgYW5kIFJlZ09wZW5LZXksIHNpbmNlIHRoZXkgd2VyZSBjb21wbGV0ZWx5IGJyb2tlbi4KICAgICAgIEZpeGVkIGEgYnVnIGluIFJlZ1F1ZXJ5S2V5VmFsdWUuIEltcGxlbWVudGVkIFJlZ0VudW1LZXkKICAgICAgIFRoZXNlIGZ1bmN0aW9ucyBub3cgd29yayBzb21ld2hhdCBtb3JlIHRoZSB3YXkgV2luZG93cyBwcm9ncmFtcyBleHBlY3QKICAgICAgIHRoZW0gdG8gd29yay4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIEphbiAyMiAxODo1NTozMyAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBsYW1pc3VuLmVwZmwuY2gpCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdIFtvYmplY3RzL2RpYi5jXQoJRml4ZWQgaWNvbiBsb2FkaW5nIGFuZCBkcmF3aW5nLCBub3cgdGhhdCBCaXRCbHQoKSB3b3JrcyBjb3JyZWN0bHkuCgkKCSogW29iamVjdHMvY2xpcHBpbmcuY10gW29iamVjdHMvcmVnaW9uLmNdCglJbXBsZW1lbnRlZCBlbGxpcHRpYyByZWdpb25zIHdpdGggYSBzZXQgb2YgcmVjdGFuZ2xlLiBUaGlzIGdyZWF0bHkKCXNpbXBsaWZpZXMgdGhlIHJlZ2lvbiBjb2RlIGFuZCBzaG91bGQgYm9vc3QgY2xpcHBpbmcgcGVyZm9ybWFuY2UuCgoJKiBbb2JqZWN0cy9jb2xvci5jXQoJRml4ZWQgYnVnIHRoYXQgY2F1c2VkIHNlZy1mYXVsdCBvbiAyNGJwcCBkaXNwbGF5cy4KCgkqIFtvYmplY3RzL2JpdGJsdC5jXQoJRml4ZWQgYnVnIHdoZW4gc2hyaW5raW5nIGEgYml0bWFwIHRvIG1vcmUgdGhhbiBoYWxmIGl0cyBzaXplLgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCUZpeGVkIGJ1Z3MgaW4gUGFpbnRSZ24oKSBhbmQgUG9seWxpbmUoKS4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXSBbd2luZG93cy9wYWludGluZy5jXSBbd2luZG93cy93aW5wb3MuY10KCUZpeGVkIHNvbWUgcHJvYmxlbXMgd2l0aCB3aW5kb3cgYmFja2dyb3VuZCBwYWludGluZy4KClRodSBKYW4gMTIgMTI6MjA6MjUgUFNUIDE5OTUgUm9zcyBCaXJvIChiaXJvQHlnZ2RyYXNpbC5jb20pCgogICAgICAgKiBbdG9vbHMvYnVpbGQuY10KICAgICAgICogW3Rvb2xzL25ld2J1aWxkLmNdCiAgICAgICAqIFtJbWFrZWZpbGVdCiAgICAgICAqIFtpbmNsdWRlL3dpbmUuaF0KICAgICAgICogW2xvYWRlci9jYWxsLlNdCiAgICAgICAqIFtsb2FkZXIvc2VsZWN0b3IuY10KICAgICAgICogW2luY2x1ZGUvc2VnbWVtLmhdCiAgICAgICAqIFttaXNjL21haW4uY10KICAgICAgIENoYW5nZWQgc2VsZWN0b3IgY29kZSBhbmQgMTYvMzIgYml0IHhmZXIgY29kZSBzbyB0aGF0IHdpbmUKICAgICAgIG5vIGxvbmdlciBoYXMgdG8gYmUgbG9hZGVkIGxvdyBpbiBtZW1vcnkuICBDaGFuZ2VkIHdpbmUKICAgICAgIHRvIHdvcmsgd2l0aCBFTEYgYmluYXJ5IGZvcm1hdHMgdW5kZXIgTGludXguCiAgICAgICAKU2F0IFNlcCAxNyAxMTowODo0OSAxOTk0ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAZXNwMjIpCgoJKiBbZGVidWdnZXIvZGJfZGlzYXNtLmNdCglOZXcgaW5zdHJ1Y3Rpb24gZGlzYXNzZW1ibGVyIC0gYm9ycm93ZWQgZnJvbSBNYWNoIGtlcm5lbC4gIEhhcyBhCglCU0Qgc3R5bGUgb2YgbGljZW5zZSBhcyBvcHBvc2VkIHRvIHRoZSBnZGIgY29kZSB3ZSB3ZXJlIHByZXZpb3VzbHkKCXVzaW5nIHdoaWNoIHdhcyB1bmRlciB0aGUgR1BMLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpNb24gSmFuICA5IDE4OjI3OjExIDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQGxhbWlzdW4uZXBmbC5jaCkKCgkqIFtJbWFrZWZpbGVdCglDb21waWxpbmcgd2l0aCAtV2FsbCBmbGFnLgoKCSogWyovKl0KCUZpeGVzIHRvIG1pbmltaXplIHRoZSBudW1iZXIgb2YgY29tcGlsYXRpb24gd2FybmluZ3MuCgoJKiBbb2JqZWN0cy9iaXRibHQuY10KCUZpeGVkIEJpdEJsdCgpIGFuZCB1c2VkIHRoZSBzYW1lIGNvZGUgdG8gcmV3cml0ZSBQYXRCbHQoKSBhbmQKCVN0cmV0Y2hCbHQoKS4gVGhlIHRocmVlICpCbHQoKSBmdW5jdGlvbnMgc2hvdWxkIG5vdyBiZSBjb3JyZWN0IGluCglldmVyeSBjYXNlIChmYW1vdXMgbGFzdCB3b3JkcykuCgoJKiBbb2JqZWN0cy9icnVzaC5jXSBbb2JqZWN0cy9kaXRoZXIuY10KCU1lcmdlZCB0aGUgdHdvIGZpbGVzIGludG8gYnJ1c2guYwoKCSogW29iamVjdHMvZGMuY10KCUZpeGVkIGJ1ZyB3aGVuIHRoZSBXaW5kb3dzIHByb2dyYW1zIGZvcmdldCB0byByZS1zZWxlY3QgdGhlCglvcmlnaW5hbCBiaXRtYXAgaW4gYSBtZW1vcnkgREMuCgoJKiBbb2JqZWN0cy9mb250LmNdCglUdHkgdG8gdXNlICdmaXhlZCcgZm9udCB3aGVuIHRoZSBzeXN0ZW0gZm9udCBjYW4ndCBiZSBmb3VuZC4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJVGVudGF0aXZlIGZpeCB0byBtYWtlIGRpYWxvZ3MgbG9vayBiZXR0ZXIgd2hlbiB1c2luZyBmaXhlZC13aWR0aAoJZm9udHMuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJUGFydGlhbGx5IGltcGxlbWVudGVkIHRoZSBQU19JTlNJREVGUkFNRSBwZW4gc3R5bGUuCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCUZpeCBmb3Igd2luZG93cyB0aGF0IGhhdmUgdGhlIFdTX0VYX0RMR01PREFMRlJBTUUgc3R5bGUgYml0Cgl3aXRob3V0IHRoZSBXU19ETEdGUkFNRSBzdHlsZS4KClRodSBKYW4gIDUgMTM6Mzc6NDIgMTk5NSAgQ2FtZXJvbiBIZWlkZSAgKGhlaWRlQGVlLnVhbGJlcnRhLmNhKQoKCSogW21lbW9yeS9nbG9iYWwuY10KCUdsb2JhbENvbXBhY3Qgc2hvdWxkIG5vdyByZXR1cm4gdGhlIGNvcnJlY3QgdmFsdWUgd2hlbiB0aGUKCWxhcmdlc3QgcnVuIG9mIGZyZWUgYmxvY2tzIGluY2x1ZGVzIHRoZSBsYXN0IGJsb2NrLgoKCSogW3dpbmRvd3MvbWRpLmNdCglUaWxpbmcgYW5kIGNhc2NhZGluZyB3aW5kb3dzIHdpdGhvdXQgYW55IE1ESSBjaGlsZHJlbiBzaG91bGQKCW5vIGxvbmdlciBjcmFzaCAoYXNzdW1pbmcgbm8tb3AgaXMgdGhlIGNvcnJlY3QgdGhpbmcgdG8gZG8pLgoKU3VuIEphbiAgMSAyMzozMDoyNSAxOTk1ICBGb25zIEJvdG1hbiAgPGJvdG1hbkByYWJvLm5sPgoKCSogW29iamVjdHMvZm9udC5jXQoJR2V0VGV4dEV4dGVudFBvaW50OiBmaXhlZCBkZWJ1ZyBvdXRwdXQsIHN0ciBpcyBjb3VudGVkIHN0cmluZywgbm90CiAgICAgICAgemVybyB0ZXJtaW5hdGVkLgoKCSogW2lmMTYzMi9yZWxheS5jXQoJRExMUmVsYXk6IHdoZW4gZGVidWdnaW5nX3N0YWNrIGdvdCBzZWd2LCBhZGRlZCB1cHBlciBib3VuZCBmb3IKICAgICAgICBzdGFjayBkdW1wLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUdWUgRGVjIDI3IDEzOjM1OjE2IDE5OTQgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQGxhbWlzdW4uZXBmbC5jaCkKCgkqIFsqL0ltYWtlZmlsZV0KCUFsbCBvYmplY3RzIGZpbGVzIGFyZSBub3cga2VwdCBpbiB0aGVpciByZXNwZWN0aXZlIGRpcmVjdG9yeS4KCgkqIFtSRUFETUVdCglSZXdyb3RlIG1vc3Qgb2YgaXQuCgoJKiBbb2JqZWN0cy9iaXRibHQuY10KCVJld3JvdGUgQml0Qmx0KCkgdG8gbG9vayByaWdodCBpbiBldmVyeSBjYXNlLCB3aGlsZSBtaW5pbWl6aW5nCgl0aGUgaW1wYWN0IG9uIHBlcmZvcm1hbmNlLiBOb3QgcmVhbGx5IGZpbmlzaGVkIHlldC4KCgkqIFtvYmplY3RzL2JpdG1hcC5jXSBbb2JqZWN0cy9kYy5jXQoJRml4ZWQgYnVnIHdpdGggcGF0dGVybiBicnVzaGVzLgoKCSogW29iamVjdHMvY2xpcHBpbmcuY10gW3dpbmRvd3MvcGFpbnRpbmcuY10KCUZpeGVzIGZvciBsb2dpY2FsIGNvb3JkaW5hdGVzLgoKCSogW29iamVjdHMvY29sb3IuY10gW3dpbmRvd3MvZ3JhcGhpY3MuY10KCUZpeGVkIEdldFBpeGVsKCkgdG8gcmV0dXJuIHRoZSBjb3JyZWN0IGNvbG9yLCBhbmQgbWFkZSBpdCBmYXN0ZXIuCgoJKiBbb2JqZWN0cy9yZWdpb24uY10KCUZpeGVkIGJ1ZyBpbiBDb21iaW5lUmduKCkgd2hlbiBvbmUgb2YgdGhlIHJlZ2lvbiBpcyBlbXB0eS4KCkZyaSBEZWMgMjIgMDE6NDI6NTcgTUVUIDE5OTQJCSAgRGFnIEFzaGVpbSAoZGFzaEBpZmkudWlvLm5vKQoKCSogW0NvbmZpZ3VyZV0KCURvbid0IGFzc3VtZSB0aGF0IGV4cHIgaGFuZGxlcyAnPT0nLCB1c2UgJz0nIGluc3RlYWQuCglHaXZlIGEgKGhvcGVmdWxseSBpbmZvcm1hdGl2ZSkgbWVzc2FnZSBpZiBpbWFrZSBmYWlscy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KV2VkIERlYyAgNyAxNDo1MjoyNSAxOTk0ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBsYW1pc3VuLmVwZmwuY2gpCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJRml4ZWQgcHJvYmxlbXMgZHVlIHRvIG5ldyBzY3JvbGwtYmFyIGNvZGUuCgoJKiBbbG9hZGVyL3NpZ25hbC5jXSBbbWlzY2VtdS9pb3BvcnRzLmNdCglIYW5kbGUgSS9PIG9wY29kZXMgdGhhdCB1c2UgYW4gYWJzb2x1dGUgYWRkcmVzcy4KCgkqIFtvYmplY3RzL3RleHQuY10KCUltcGxlbWVudGVkIFRhYmJlZFRleHRPdXQoKS4KClNhdCBEZWMgIDMgMTg6NTM6MDggMTk5NCAgS2VubmV0aCBNYWNEb25hbGQgIDxLLk1hY0RvbmFsZEBlZC5hYy51az4KCgkqIFtvYmplY3RzL21ldGFmaWxlLmNdCglJbXBsZW1lbnRlZCBHZXRNZXRhZmlsZSgpLgoJRml4ZWQgYnVnIGluIFBsYXlNZXRhRmlsZSgpIHdoZW4gcmVhZGluZyBkaXNjIGJhc2VkIG1ldGFmaWxlIHJlY29yZHMuCglBZGRlZCBNRVRBX1BPTFlQT0xZR09OLCBNRVRBX0RFTEVURU9CSkVDVCBhbmQgTUVUQV9FT0YgdG8gCglQbGF5TWV0YUZpbGVSZWNvcmQoKS4KCQpXZWQgTm92IDMwIDA2OjMyOjI1IDE5OTQgIE1hcnRpbiB2b24gTG9ld2lzICAobWFydGluQGNzLmNzdWZyZXNuby5lZHUpCgoJKiBbSW1ha2VmaWxlXQoJd2luZS5zeW06IFJlbW92ZSBnY2MyX2NvbXBpbGVkIGFuZCBmcmllbmRzCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXVtpZjE2MzIvcmVsYXkuY11baWYxNjMyL3JlbGF5LmNdCgkgIFtsb2FkZXIvcmVzb3VyY2UuY11bbWVtb3J5L2hlYXAuY11bb2JqZWN0cy9kaWIuY11bd2luZG93cy9kaWFsb2cuY10KCVJlcGxhY2UgI2lmZGVmIERFQlVHX1hYWCB3aXRoIGlmKGRlYnVnZ2luZ194eHgpewoKCSogW2lmMTYzMi9jYWxsLlNdCglDYWxsVG9MaWJNYWluOiBOZXcgZnVuY3Rpb24KCgkqIFtpZjE2MzIvcmVsYXkuY11baW5jbHVkZS9vcHRpb25zLmhdW21pc2MvbWFpbi5jXQoJICBbbWlzY2VtdS9pbnQxYS5jXVttaXNjZW11L2ludDIxLmNdW21pc2NlbXUva2VybmVsLmNdCglyZW1vdmVkIE9wdGlvbnMucmVsYXlfZGVidWcKCgkqIFtpbmNsdWRlL2hlYXAuaF0KCUhFQVBfT1dORVI6IFVzZSBkcyBpbnN0ZWFkIG9mIGNzOmlwCgoJKiBbbG9hZGVyL25lX2ltYWdlLmNdCglMb2FkTkVJbWFnZTogUmVtZW1iZXIgY3VycmVudCBleGUsIGhhbmRsZSBub2RhdGEgZGxscwoJSW5pdE5FRExMOiBoYW5kbGUgbm9kYXRhIGRsbHMsIGNhbGwgQ2FsbFRvTGliTWFpbgoKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJQ3JlYXRlU2VsZWN0b3JzOiBJbml0aWFsaXplIGF1dG9fZGF0YV9zZWwgd2l0aCAwCgoJKiBbbWVtb3J5L2hlYXAuY10KCUhFQVBfQ2hlY2tIZWFwOiBDaGVjayBwcmV2CglIRUFQX0NoZWNrTG9jYWxIZWFwczogbmV3IGZ1bmN0aW9uCgoJKiBbbWlzYy9wcm9maWxlXQoJUmVtZW1iZXIgYW5kIGR1bXAgb25seSBjaGFuZ2VkIHByb2ZpbGVzCgoJKiBbdG9vbHMvbWFrZWRlYnVnXQoJSW50cm9kdWNlIGRlYnVnZ2luZ194eHggZmxhZ3MKClN1biBOb3YgMjcgMjM6MTM6MjIgTUVUIDE5OTQJPGVyaWtAeHM0YWxsLm5sPgoKCSogW2NsaXBib2FyZC5oIGNvbG9yLmggZGMuaCBkb3NfZnMuaCBldmVudC5oIGZvbnQuaCBncmFwaGljcy5oCglpZjE2MzIuaCBrZXJuZWwuaCBsaWJyYXJ5LmggbWlzY2VtdS5oIG5lX2ltYWdlLmggbm9uY2xpZW50LmggCglwZV9pbWFnZS5oIHNlbGVjdG9ycy5oIHdpbnR5cGVzLmhdCglBZGRlZC4KCgkqIFsqLypdCgktIENvbW1lbnRlZCBhbGwgJ3N0YXRpYyBjaGFyIGNvcHlyaWdodCBzdGF0ZW1lbnRzJywgc2VlIG1pc2MvbWFpbi5jCgktIG1vdmVkIHByb3RvdHlwZXMgdG8gaGVhZGVycyBmaWxlcywgZml4ZWQgd3JvbmcgcHJvdG90eXBlcy4KCS0gKnBsZWFzZSogYWRkIGEgaGVhZGVyIGZpbGUgZm9yIGVhY2ggLmMgaWYgeW91IG5lZWQgdG8gZXhwb3J0CgkgIHRoaW5ncy4KCgkqIFttaXNjL21haW4uY10KCUFkZGVkIG9uZSBzdGF0aWMgc3RyaW5nIHdoaWNoIGxpc3QgdGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMuCgpGcmkgTm92IDI1IDE2OjI0OjI3IE1FVCAxOTk0CQkgIERhZyBBc2hlaW0gKGRhc2hAaWZpLnVpby5ubykKCgkqIFtDb25maWd1cmVdCglNYWRlIHRoZSBzdXBwb3J0IGZvciBtdWx0aXBsZSBsYW5ndWFnZXMgbW9yZSBhdXRvbWF0aWMuICBBZGRlZAoJYSBbZm9udHNdIHNlY3Rpb24gdG8gdGhlIHdpbmUuY29uZiBmaWxlLiAgTWFkZSB0aGUgZGVmYXVsdHMKCWJldHRlci4gIEdlbmVyYWxseSBjbGVhbmVkIGl0IHVwLgoKCSogW3JjL3N5c3Jlc19Oby5yY10gW3JjL3N5c3Jlc19EZS5yY10gW3JjL3N5c3Jlcy5jXQoJTm9yd2VnaWFuIHJlc291cmNlcyBhbmQgc21hbGwgZml4ZXMgdG8gdGhlIGdlcm1hbiByZXNvdXJjZXMuCgpXZWQgTm92IDIzIDIwOjI4OjU5IDE5OTQgIE1hcnRpbiB2b24gTG9ld2lzICAobWFydGluQGNzLmNzdWZyZXNuby5lZHUpCgoJKiBbZGVidWdnZXIvYnJlYWsuY10KCWJhcmsoKSwgdG9nZ2xlX25leHQoKSwgc2hvdWxkX2NvbnRpbnVlKCk6IE5ldyBmdW5jdGlvbnMKCWluc2VydF9icmVhaygpOiBGaXhlZCwgYWRkcyB3cml0ZSBhY2Nlc3MgdG8gcGFnZSBiZWZvcmUgd3JpdGluZwoJd2luZV9icC5uZXh0X2FkZHI6IG5ldyBzdHJ1Y3R1cmUgZmllbGQKCgkqIFtkZWJ1Z2dlci9kYmcueV0KCUNoYW5nZWQgc3ltYm9sJ3MgdmFsdWUgdG8gYmUgaXQncyB2YWx1ZSBpbnN0ZWFkIG9mIHRoZSB2YWx1ZQoJcG9pbnRlZCB0byBieSB0aGUgc3ltYm9sLgoJQ2hhbmdlZCBTSUdUUkFQIGhhbmRsaW5nIHRvIGFsbG93IGNvbnRpbnVhdGlvbiBhZnRlciBicmVhayBwb2ludAoKCSogW21pc2Mvc2hlbGwuY10KCVNoZWxsQWJvdXQoKTogTG9hZCByZXNvdXJjZSBmcm9tIG1lbW9yeQoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gTm92IDIwIDE4OjMwOjA2IDE5OTQgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQGxhbWlzdW4uZXBmbC5jaCkKCgkqIFtjb250cm9scy9zY3JvbGwuY10gW2luY2x1ZGUvc2Nyb2xsLmhdCglSZXdyaXR0ZW4gbW9zdCBvZiBzY3JvbGwtYmFyIGNvZGUgZm9yIGJldHRlciBXaW5kb3dzIGxvb2sgJiBmZWVsLgoJSW1wbGVtZW50ZWQgRW5hYmxlU2Nyb2xsQmFyKCkuCglQcmVsaW1pbmFyeSBrZXlib2FyZCBzdXBwb3J0LgoKCSogW29iamVjdHMvYml0Ymx0LmNdCglGaXhlZCBCYWRNYXRjaCBlcnJvciBmb3IgQml0Qmx0KCkgYW5kIFN0cmV0Y2hCbHQoKSB3aGVuIHJlYWRpbmcKCWJpdHMgZnJvbSBvdXRzaWRlIHRoZSB2aXNpYmxlIHJlZ2lvbi4KCgkqIFtvYmplY3RzL29lbWJpdG1hcC5jXSBbaW5jbHVkZS9iaXRtYXBzL29ibV8qXQoJVXNlIFhQTSBzeW1ib2xpYyBjb2xvcnMgdG8gbG9hZCBiaXRtYXBzLiBUaGlzIGFsbG93cyB0aGUgY29sb3JzCglvZiB0aGUgYml0bWFwcyB0byBkZXBlbmQgb24gdGhlIHN5c3RlbSBjb2xvcnMuCgoJKiBbdG9vbHMvbWFrZV9kZWJ1Z10KCU1hZGUgdGhlIG1ha2VfZGVidWcgc2NyaXB0IG1vcmUgcm9idXN0LgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglGaXhlZCBDaGVja1JhZGlvQnV0dG9uKCkuCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCUEgZmV3IGNoYW5nZXMgdG8gc2Nyb2xsLWJhciBkcmF3aW5nIGFuZCB0cmFja2luZy4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJUmVuYW1lZCBOZXh0V2luZG93RnJvbVBvaW50KCkgdG8gV0lOUE9TX05leHRXaW5kb3dGcm9tUG9pbnQoKSB0bwoJYXZvaWQgY29uZnVzaW9uLCBhbmQgb3B0aW1pemVkIGl0IHNvbWV3aGF0LgoKTm92IDE5LCA5NCBNYXJ0aW4gQXlvdHRlICh3aW5lQHRyZ2NvcnAubWtzaW5mby5xYy5jYSkKCgkqIFttaXNjL2F1ZGlvLmNdCgkqIFttaXNjL21jaWFuaW0uY10KCW1vcmUgY29kaW5nIGJ1dCBub3RoaW5nIHNwZWN0YWN1bGFyLgoKCSogW21pc2MvbW1hdXguY10KCXNvbWUgY29kaW5nIHRvIGFjY2VzcyAnL2Rldi9taXhlcicuCgoJKiBbbWlzYy9taWRpLmNdCglzb21lIGNvZGluZyB0byByZWFkIC5NSUQgZmlsZXMsIGJ1dCBpdCdzIG5vdCBwbGF5aW5nIHlldC4KClN1biBOb3YgMTMgMTk6MzE6MDMgMTk5NCAgICBKYW1lcyBZb3VuZ21hbiAobWJjc3RqeUBhZnMubWFuLmFjLnVrKQoKCSogW29iamVjdHMvZGliLmNdCglSZWltcGxlbWVudGVkIERJQl9TZXRJbWFnZUJpdHNfUkxFOCgpIHNvIHRoYXQgaXQgd291bGQgY29wZSB3aXRoCgliaXRtYXBzIHdoaWNoIGRvbid0IGVuZCAweDAwLCAweDAyIChwcmV2aW91c2x5IGl0IGJsZXcgdXApLiAgVGhpcwoJaW5jbHVkZXMgc29tZSBiaXRtYXBzIG91dHB1dCBieSBQYWludCBTaG9wIFByby4gIEltcGxlbWVudGF0aW9uIGlzCglwb3NzaWJseSBub3cgdG9vIGxheC4gIFBsZWFzZSBzZWUgdGhlIG5vdGVzIG9uIHRoZSBmdW5jdGlvbiBhYm91dAoJd2h5LgoKCSogW2NvbnRyb2xzL2Rlc2t0b3AuY10KCVRoZSBkZXNrdG9wIHBhdHRlcm4gc2hvdWxkIGJlIHBhaW50ZWQgaWYgdGhlIHdhbGxwYXBlciBkb2Vzbid0Cgljb3ZlciB0aGUgd2hvbGUgc2NyZWVuIHdpZHRoIE9SIHRoZSB3aG9sZSBzY3JlZW4gaGVpZ2h0LgoKU3VuIE5vdiAxMyAwMDowNzoxMSBNRVQgMTk5NAlFcmlrIEJvcwk8ZXJpa0B4czRhbGwubmw+CgoJKiBbb2JqZWN0cy9kaWIuY10KCVNtYWxsIGJ1ZyBpbiBESUJfU2V0SW1hZ2VCaXRzKCkgZml4ZWQsIGJpdG1hcHMgaW4gMTYsMjQgYnBwCglub3cgd29yay4KCgkqIFtsb2FkZXIvbmVfcmVzb3VyY2UuY10gW2luY2x1ZGUvcmVzb3VyY2UuaF0KCVNvbWUgY2xlYW51cC4KClRodSBOb3YgMTAgMjA6NDQ6NTggMTk5NCAgTWFydGluIHZvbiBMb2V3aXMgIChtYXJ0aW5AY3MuY3N1ZnJlc25vLmVkdSkKCgkqIFtDb25maWd1cmVdCgkgIFtyYy9zeXNyZXMucmNdCglQcmltaXRpdmUgY29tcGlsZS10aW1lIHN1cHBvcnQgZm9yIG11bHRpcGxlIGxhbmd1YWdlcwoKCSogW3JjL3N5c3Jlc19EZS5yY10KCU5ldyBmaWxlCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglMb2FkQml0bWFwOiBSZWNvZ25pemUgZW5kIG9mIHN5c3Jlc2JtIHByb3Blcmx5CgoJKiBbcmMvSW1ha2VmaWxlXQoJUnVsZXMgdG8gY29tcGlsZSByZXNvdXJjZXMgc2ltcGxpZmllZCwgZGVwZW5kZW5jaWVzIGNoYW5nZWQKCgkqIFtyYy9zeXNyZXNibS5yY10KCURvbid0IHVzZSBzeXNyZXNibSBpZiB1c2luZyBYUE0KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJQ3JlYXRlRGlhbG9nSW5kaXJlY3RQYXJhbTogUmV2ZXJzZSBaLW9yZGVyIG9mIGNvbnRyb2xzCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglNU0dfVHJhbnNsYXRlTW91c2VNc2c6IEZpeCBIVFRSQU5TUEFSRU5UIGhhbmRsaW5nCgoJKiBbd2luZG93cy93aW5wb3MuY10KCU5leHRXaW5kb3dGcm9tUG9pbnQ6IE5ldyBmdW5jdGlvbgoKCSogW2NvbnRyb2xzL2J1dHRvbi5jXQoJV01fTkNISVRURVNUOiBHcm91cCBCb3ggaXMgSFRUUkFOU1BBUkVOVAoJQlVUVE9OX0NoZWNrQXV0b1JhZGlvQnV0dG9uOiBOZXcgZnVuY3Rpb24KCUJNX1NFVENIRUNLOiBBZGRlZCBjYWxsIHRvIEJVVFRPTl9DaGVja0F1dG9SYWRpb0J1dHRvbgoKTW9uIE5vdiAgNyAxMToyMDoyNiAxOTk0ICBQYXVsIEZhbHN0YWQgIChwZkB6b29mLmN0cy5jb20pCgoJKiBbb2JqZWN0cy90ZXh0LmNdCglGaXggaGFuZyB3aGVuIHVzaW5nIERyYXdUZXh0KC4uLiwgRFRfV09SREJSRUFLKSB3aXRoIGEgd29yZCB0aGF0CglpcyB0b28gbG9uZyB0byBicmVhay4KCgkqIFtvYmplY3RzL2ZvbnQuY10KCURvbid0IGFzc3VtZSBoZWx2ZXRpY2EgaWYgdGhlcmUgaXMgbm8gZm9udCBmYW1pbHk7IGxldCB0aGUgb3RoZXIKCWZvbnQgYXR0cmlidXRlcyBkZWNpZGUgd2hhdCBmb250IHRvIHVzZS4KCgkqIFtjb250cm9scy93aWRnZXRzLmNdCglMaXN0Ym94ZXMgYW5kIGNvbWJvIGJveGVzIG5lZWQgdG8gYmUgbm90aWZpZWQgb2YgZG91YmxlLWNsaWNrcy4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCgkgIFtpbmNsdWRlL2xpc3Rib3guaF0KCglzY3JvbGxpbmcgdG8gYm90dG9tIG9mIGxpc3QgYm94IHNob3VsZCBkaXNwbGF5IGxhc3QgaXRlbSBhdCB0aGUKCWJvdHRvbSwgbm90IGF0IHRoZSB0b3AuCgkKCWxpc3QgYm94ZXMgbmVlZCB0byBhbGxvY2F0ZSBhIHNlcGFyYXRlIGhlYXAgZm9yIHRoZWlyIGl0ZW0gZGF0YSwKCXJhdGhlciB0aGFuIHVzaW5nIHRoZSB1c2VyIGhlYXAuICBPdGhlcndpc2UsIGl0J3MgdmVyeSBlYXN5IHRvIHJ1bgoJb3V0IG9mIG1lbW9yeSBmb3IgbGlzdCBib3ggaXRlbXMuCgoJcmVtb3ZlZCByZWR1bmRhbnQgY29kZSBpbiBMaXN0Qm94QWRkU3RyaW5nKCkuICBJbXBsZW1lbnRlZCBzaW1wbGUKCXZlcnNpb24gb2YgTEJTX1NPUlQuCgoJRG9uJ3QgcHV0IFsuXSBpbiB0aGUgbGlzdCBib3ggd2hlbiB1c2luZyBERExfRElSRUNUT1JZLgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdCglDb21ib3Mgc2hvdWxkIHBhc3MgQ0JTX1NPUlQgb250byB0aGVpciBsaXN0IGJveC4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJSWYgd2luZG93IGNyZWF0aW9uIGlzIGFib3J0ZWQsIHJlbW92ZSB0aGUgd2luZG93IGZyb20gdGhlCglsaW5rZWQgbGlzdHMuCgoJKiBbY29udHJvbHMvc3RhdGljLmNdCglzdGF0aWMgY29udHJvbHMgd2l0aCBTU19JQ09OIHdlcmUgYWx3YXlzIHJldHVybmluZyAwIGZyb20KCVdNX05DQ1JFQVRFLgoKCU1ha2Ugc3VyZSBzdGF0aWMgY29udHJvbHMgaGF2ZSB0ZXh0IHRvIGRyYXcgYmVmb3JlIGRyYXdpbmcgaXQuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBOb3YgIDYgMTg6NTI6MDQgMTk5NCAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAbGFtaXN1bi5lcGZsLmNoKQoKCSogW29iamVjdHMvb2VtYml0bWFwLmNdICAoTmV3IGZpbGUpCglBZGRlZCBwb3NzaWJpbGl0eSB0byB1c2UgLnhwbSBmaWxlcyBmb3IgT0VNIGJpdG1hcHMuCgoJKiBbaW5jbHVkZS9iaXRtYXBzL29ibSpdICAoTmV3IGZpbGVzKQoJUmVkcmF3biBhbGwgT0VNIGJpdG1hcHMgaW4geHBtIGZvcm1hdC4KCgkqIFtvYmplY3RzL2ZvbnQuY10KCUFkZCBzcGFjZSBmb3IgaW50ZXJuYWwgbGVhZGluZyB3aGVuIHVzaW5nIGEgbmVnYXRpdmUgZm9udCBoZWlnaHQuCglTdHVicyBmb3IgQWRkRm9udFJlc291cmNlKCkgYW5kIFJlbW92ZUZvbnRSZXNvdXJjZSgpLgoJRml4IGluIEZPTlRfSW5pdCgpIGZvciB1bmluaXRpYWxpc2VkIGRlZmF1bHQgZm9udC4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJTWFrZSBmb250IGhlaWdodCBuZWdhdGl2ZSBhcyBpdCBpcyByZWFsbHkgYSBwb2ludCBzaXplIGFuZCBub3QgYQoJcGl4ZWwgc2l6ZTsgZGlhbG9ncyB1c2luZyA4LXBvaW50IGZvbnRzIGxvb2sgYmV0dGVyIG5vdy4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglGaXhlZCB0aGUgZml4IDotKSBmb3IgUGllKCkgdG8gbWFrZSBpdCB3b3JrIGZvciBBcmMoKSBhbmQgQ2hvcmQoKSBhbHNvLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglBIGZldyBjaGFuZ2VzIGZvciBuZXcgT0VNIGJpdG1hcHMuCgpTdW4gTm92ICA2IDE4OjIyOjE4IDE5OTQgIE1pY2hhZWwgUGF0cmEgIDxtaWNreUBtYXJpZS5waHlzaWsudHUtYmVybGluLmRlPgoKCSogW3dpbmRvd3MvY2xhc3MuY10KCVRoZSBuYW1lcyBvZiBsb2NhbCBjbGFzc2VzIGhhdmUgdG8gYmUgc3RvcmVkIHVzaW5nIEdsb2JhbEF0b20qLgoJT3RoZXJ3aXNlIHRoZXkgY291bGRuJ3QgYmUgYWNjZXNzZWQgZnJvbSBvdGhlciBtb2R1bGVzIChlLmcuIEJXQ0MpIAoKCSogW2lmMTYzMi9jYWxsLlNdCglDYWxsVG8xNihjeCk6IEl0J3MgcG9zc2libGUgdG8gc2V0IHRoZSBjb250ZW50cyBvZiB0aGUgY3gtcmVnaXN0ZXIuCgoJKiBbbG9hZGVyL25lX2ltYWdlLmNdCglJbml0TkVETEwoKTogVGhlIHNpemUgb2YgdGhlIGxvY2FsIGhlYXAgaXMgbm93IHBhc3NlZCBpbiB0aGUgY3gtCglyZWdpc3RlciB3aGVuIGluaXRpYWxpemluZyBhIERMTC4KCgkqIFttZW1vcnkvaGVhcC5jXQoJTG9jYWxJbml0KCk6IFRoZSBjYXNlIHN0YXJ0PT0wIGlzIG5vdyBoYW5kbGVkIGluIHRoZSB3YXkgaXQgc2hvdWxkLgoKCSogW3dpbmRvd3Mvd2luLmNdCglHZXRXaW5kb3dMb25nKCk6IElmIHRoZSBhZHJlc3Mgb2YgdGhlIHdpbmRvd3MgZnVuY3Rpb24gaXMgcmVxdWVzdGVkCglpdCdzIG5vIGxvbmdlciByZXR1cm5lZCBpZiBpdCdzIHdpdGhpbiB0aGUgV2luZSBjb2RlIChhbmQgdGhlcmVmb3JlCgl1bnJlYWNoYWJsZSBieSBhIHdpbmRvd3MgcHJvZ3JhbSkuIFRoaXMgbWFrZXMgQm9ybGFuZCdzIE9XTCBoYXBweS4KCgkqIFtjb250cm9scy9lZGl0LmNdCglFRElUX0dldFN0cigpOiBBZGRlZCBoYW5kbGluZyBmb3Igb2ZmPDAuCgpTdW4gTm92ICA2IDE3OjM3OjE0IDE5OTQgIENocmlzIEpvbmVzICA8Y2hyaXNqQGljaGlwcy5pbnRlbC5jb20+CgoJKiBbbG9hZGVyL2xpYnJhcnkuY10KCUZpeGVkIGluZmluaXRlIGxvb3AgYnVnIHdoZW4gdHdvIERMTHMgcmVmZXIgdG8gZWFjaCBvdGhlciAoZml4ZXMKCWhhbmd1cCBvZiBRdWlja2VuIGR1cmluZyBsb2FkaW5nKS4KClRodSBOb3YgMDQgMTI6MDA6MDAgMTk5NCAgSmFuIFdpbGxhbW93aXVzICAoamFuQGphbmhoLnNoLnN1Yi5kZSkKCgkqIFttaXNjL2Rvc19mcy5jXQoJQnVnIGZpeDogVGhlIHNpemUgb2YgYSBkaXNrIGFuIHRoZSBhdmFpbGFibGUgc3BhY2UKCWlzIG5vdyByZXR1cm5lZCBpbiBieXRlcyBpbnN0ZWFkIG9mIChpbmNvcnJlY3RseSkKCUtCeXRlcy4KClRodSBOb3YgMDMgMTI6MDA6MDAgMTk5NCAgSmFuIFdpbGxhbW93aXVzICAoamFuQGphbmhoLnNoLnN1Yi5kZSkKCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglCdWcgZml4OiBQaWUgc2VnbWVudHMgYXJlIG5vdyBmaWxsZWQgd2l0aCBjb3JyZWN0IGJydXNoLgoKVGh1IE5vdiAgMyAxMDo0MDowOSAxOTk0ICBNYXJ0aW4gdm9uIExvZXdpcyAgKG1hcnRpbkBjcy5jc3VmcmVzbm8uZWR1KQoKICAgICAgICAqIFtJbWFrZWZpbGVdCiAgICAgICAgZ2VuZXJhdGUgcmMubyBiZWZvcmUgbG9hZGVyLm8KCiAgICAgICAgKiBbY29udHJvbHMvbWVudS5jXQogICAgICAgIENvcHlTeXNNZW51OiBnZW5lcmF0ZSBTWVNNRU5VIG9uIHRoZSBmbHksIGVsaW1pbmF0ZSBoU3lzTWVudQoKICAgICAgICAqIFtpbmNsdWRlL3Jlc291cmNlLmhdCiAgICAgICAgQWRkIHN0cnVjdCBSZXNvdXJjZVRhYmxlCgogICAgICAgICogW2xvYWRlci9iaXRtYXAuaF0KICAgICAgICBMb2FkIHN5c3RlbSBiaXRtYXBzIGZyb20gc3lzcmVzYm1UYWJsZQoKICAgICAgICAqIFttaXNjL2NsaXBib2FyZC5jXQogICAgICAgICAgW3dpbmRvd3MvZXZlbnQuY10KICAgICAgICBJc0NsaXBib2FyZEZvcm1hdEF2YWlsYWJsZSxFVkVOVF9TZWxlY3Rpb25SZXF1ZXN0OiBidWcgZml4ZXMKICAgICAgICAKICAgICAgICAqIFtyYy9JbWFrZWZpbGVdCiAgICAgICAgZ2VuZXJhdGUgcmMubyBmcm9tIHN5c3Jlcy5vIGFuZCBzeXNyZXNibS5vLiBBZGRlZCAtbGZsCgogICAgICAgICogW3JjL3JjLnldCiAgICAgICAgY2hhbmdlIHN0eWxlIGhhbmRsaW5nIHRvIGFsbG93ICggUzEgfCBTMiApIHwgUzMKCiAgICAgICAgKiBbcmMvc3lzcmVzLnJjXQogICAgICAgICAgW3JjL3N5c3Jlc2JtLnJjXQogICAgICAgIFB1dCBiaXRtYXBzIGFuZCBpY29ucyB0byBzeXNyZXNibSwgZXZlcnl0aGluZyBlbHNlIHRvIHN5c3JlcwoKICAgICAgICAqIFtyYy93aW5lcmMuY10KICAgICAgICAgIFtyYy93aW5lcmMuaF0KICAgICAgICBBZGRlZCAtbywgLWMgZmxhZ3MuIE5ldyBmdW5jdGlvbiBzZXRfb3V0X2ZpbGUuIE91dHB1dCB0byBmaWxlcy4KCiAgICAgICAgKiBbd2luZG93cy9kaWFsb2cuY10KICAgICAgICBEaWFsb2dCb3hJbmRpcmVjdFB0ciwgRGlhbG9nQm94SW5kaXJlY3RQYXJhbVB0cjogTmV3IGZ1bmN0aW9ucyAKCiAgICAgICAgKiBbd2luZG93cy9ub25jbGllbnQuY10KICAgICAgICBDcmVhdGUgQWJvdXRXaW5lIGRpYWxvZyBmcm9tIHRlbXBsYXRlIHBvaW50ZXIKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIE9jdCAzMCAxMzowMToxOCAxOTk0ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBsYW1pc3VuLmVwZmwuY2gpCgoJKiBbY29udHJvbHMvc3RhdGljLmNdCglCdWcgZml4IGZvciBTU19JQ09OIGNvbnRyb2xzLgoKCSogW2lmMTYzMi9JbWFrZWZpbGVdCglGaXhlZCBjYWxsLm8gZGVwZW5kZW5jaWVzLgoKCSogW29iamVjdHMvY2xpcHBpbmcuY10gW29iamVjdHMvZGMuY10KCUZpeGVkIHZpc2libGUgcmVnaW9uIGhhbmRsaW5nLiBoVmlzUmduIGlzIGFsd2F5cyBub24tbnVsbCBub3cuCgoJKiBbd2luZG93cy9kY2UuY10KCUJ1ZyBmaXggaW4gR2V0RENFeCBmb3IgQ1NfT1dOREMgd2luZG93cy4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXSBbd2luZG93cy9wYWludGluZy5jXQoJRml4ZXMgdG8gaWNvbiB3aW5kb3cgZHJhd2luZy4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJQSBmZXcgZml4ZXMgaW4gU2V0V2luZG93UG9zKCkuCgpTdW4gT2N0IDMwIDEyOjUwOjI0IDE5OTQgIE1pY2hhZWwgUGF0cmEgIDxtaWNreUBtYXJpZS5waHlzaWsudHUtYmVybGluLmRlPgoKCSogW29iamVjdHMvYml0Ymx0LmNdCglCaXRCbHQoKTogQml0Qmx0IGlzIG5vdyBhYmxlIHRvIGhhbmRsZSBhbnkgcmFzdGVyIG9wZXJhdGlvbi4gSWYKCXRoZSByZXF1ZXN0IGNhbid0IGJlIHBhc3NlZCB0byBYV2luZG93cyBkaXJlY3RseSwgaXQncyBxdWl0ZQoJc2xvdywgdGhvdWdoLgoKCSogWyovKi5jXQoJICBbbWlzYy9tYWluLmNdCglJbXByb3ZlbWVudHMgb2YgdGhlIHN5c3RlbSBmb3IgaGFuZGxpbmcgZGVidWcgbWVzc2FnZXMuIE9wdGlvbnMgYXJlCglub3cgYWxzbyBsb2FkZWQgZnJvbSAvdXNyL2xpYi9YMTEvYXBwLWRlZmF1bHRzL1dpbmUgKGluc2VydAoJKmRlYnVnb3B0aW9uczogK3h4eCB0aGVyZSBpZiB5b3Ugd2FudCB0byBoYXZlIHR1cm4gbWVzc2FnZXMgeHh4IG9uKS4KCgkqIFtjb250cm9scy9tZW51LmNdCglEZXN0cm95TWVudSgpOiBUaGUgd2hvbGUgd2luZG93IHdvbid0IGJlIGRlc3Ryb3llZCBhcyBhIHNpZGVlZmZlY3QKCWFueSBsb25nZXIuCgoJKiBbbWlzYy9maWxlLmNdCglPcGVuRmlsZSgpOiBGaXhlZCBidWcgaW4gc2VhcmNoaW5nIGluIHN5c3RlbS93aW5kb3ctZGlyZWN0b3J5LgoKU3VuIE9jdCAzMCAxMjoyNTo1MyAxOTk0ICBKaW1teSBUaXJ0YXdhbmdzYSA8ajB0MjUyN0B0YW0yMDAwLnRhbXUuZWR1PgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJQnVnIGZpeCBmb3Igd2luZG93IHJlbGF0ZWQgc3RydWN0dXJlcy4KCURDQiBhbmQgQ09NU1RBVCBhcmUgYWZmZWN0ZWQuIFRoZXkgbXVzdCBiZSBwYWNrZWQuCgoJKiBbbWlzYy9jb21tLmNdCglCdWcgZml4IGZvciBDT00gcG9ydHM6CglEaWFsIGFuZCBkaWFsb2cgd2luZG93IGluIHRlcm1pbmFsLmV4ZSBub3cgd29ya3MuCglOb24gc2VxdWVudGlhbCBDT00gYXNzaWdubWVudHMgaW4gd2luZS5jb25mIHNob3VsZCBub3QgYnJlYWsgbm93LgoJQmF1ZHJhdGUgY2FuIGJlIHNwZWNpZmllZCBpbiB3aW5lLmNvbmYgdG8gb3ZlcmNvbWUgYmF1ZHJhdGUgbGltaXRhdGlvbgoJaW4gbXN3aW5kb3cuIFNlZSBzYW1wbGUgd2luZS5pbmkKCgkqIFtpbmNsdWRlL2NvbW0uaF0KCWFkZCBiYXVkcmF0ZSBmaWVsZCB0byBEb3NEZXZpY2VTdHJ1Y3RyZQoKCSogW29iamVjdC9mb250LmNdCglCdWcgZml4IGZvciBmb250IGFzc2lnbm1lbnQuCglVc2UgcGFpcnMgb2YgZm91bmRyeSBhbmQgZmFtaWx5IGZvbnRuYW1lcyBpbiBYMTEgdG8gY29ycmVzcG9uZCB3aXRoCgl3aW5kb3cncyBmb250cy4KCVB1dCBmb250IGFzc2lnbm1lbnQgaW5pIHdpbmUuaW5pLgoKCSogW3dpbmUuaW5pXQoJQWRkaW5nIG9wdGlvbmFsIGJhdWRyYXRlIGFmdGVyIHBvcnQgbmFtZSBpbiAic2VyaWFscG9ydHMiIHNlY3Rpb24KCUFkZCBuZXcgc2VjdGlvbiwgImZvbnRzIi4KCSJkZWZhdWx0IiBpcyBzcGVjaWFsIGtleSBpbiAiZm9udHMiIHRvIG1hdGNoIGFueSB1bm1hdGNoIHdpbmRvdyBmb250LgoKT2N0IDI5LCA5NCAobmV3IGFkZHJlc3MpIHdpbmVAdHJnY29ycC5ta3NpbmZvLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW2lmMTYzMi9yZWxheS5jXQoJKiBbaWYxNjMyL2NvbW1kbGcuc3BlY10gCU5ldyBmaWxlLgoJKiBbbWlzYy9jb21tZGxnLmNdIAkJCU5ldyBmaWxlLgoJKiBbaW5jbHVkZS9jb21tZGxnLmhdIAkJTmV3IGZpbGUuCglCZWdpbiBvZiBhbiBlbXVsYXRlZCBDT01NRExHIERMTCwgYnVpbHQtaW4gZm9yIG5vdy4KCShCVFcsIGlmIHlvdSB3YW50IHRvIHN3aXRjaCBiZXR3ZWVuIGJ1aWx0LWluICYgMTZiaXRzIENvbW1EbGcsIG9ubHkgCgl0aGluZyB5b3UgbmVlZCB0byBkbyBpcyB0byBwdXQgdGhlIHJlYWwvZHVtbXkgbmFtZSBpbiBmaWxlIHJlbGF5LmMpCgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCgkqIFtjb250cm9scy9jb21iby5jXQoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJRmV3IGJ1ZyBmaXhlcyBhbmQvb3IgY29zbWV0aWMuCgoJKiBbbWlzYy9hdWRpby5jXQoJKiBbbWlzYy9tbWF1eC5jXQoJYnVnIGZpeGVzIGFuZCBmbGFncyByZXR1cm5lZCB0byBlbXVsYXRlIFNCMTYuCgoJKiBbbWlzYy9taWRpLmNdIAkJCU5ldyBmaWxlLgoJc2tlbGV0b24gZm9yICdNaWRpJyBNTVNZU1RFTSAmIE1DSSBkcml2ZXIuCgoJKiBbbWlzYy9tY2lhbmltLmNdIAkJCU5ldyBmaWxlLgoJc2tlbGV0b24gZm9yICdBbmltYXRpb24xJyBNQ0kgZHJpdmVyLgoKCSogW3dpbmRvd3Mvd2luLmNdCglBZGQgbmV3IHN0dWIgZm9yIEdldExhc3RBY3RpdmVXaW5kb3coKS4KClR1ZSBPY3QgMjUgMDk6MTc6MjUgMTk5NCAgT2xhZiBGbGViYmUgIChmbGViYmVAdGF0LnBoeXNpay51bmktdHVlYmluZ2VuLmRlKQoKCSogW2lmMTYzMi9jYWxsLlNdIFt0b29scy9idWlsZC5jXQogICAgICAgICAgIFN1cHBvcnQgZm9yIEVMRiBmb3JtYXQuIChOb3QgY29tcGxldGUpCgpTdW4gT2N0IDIzIDAwOjUxOjUwIDE5OTQgIFBhdWwgRmFsc3RhZCAgKHBmQHpvb2YpCgoJKiBbaWYxNjMyL3VzZXIuc3BlY10KCUFkZCBzdHVicyBmb3IgQXJyYW5nZUljb25pY1dpbmRvd3MoKSwgZXRjLgoKCSogW2lmMTYzMi9rZXJuZWwuc3BlY10KCUFkZCBJc0JhZCpQdHIoKSBmdW5jdGlvbnMuCgoJKiBbbG9hZGVyL3NpZ25hbC5jXQoJQWRkIHRlc3RfbWVtb3J5KCksIGZvciB1c2Ugd2l0aCBJc0JhZCpQdHIoKS4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJQWRkIHN0dWJzIGZvciBUaWxlQ2hpbGRXaW5kb3dzKCksIGV0Yy4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJSXNXaW5kb3coKSBzaG91bGRuJ3QgY3Jhc2ggaWYgaXQncyBnaXZlbiBhIGJhZCBoYW5kbGUuCglBZGQgc3R1YiBmb3IgR2V0TGFzdEFjdGl2ZVBvcHVwKCkuCgoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJSW1wbGVtZW50IHRoZSBJc0JhZCpQdHIoKSBmdW5jdGlvbnMuCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJUmV0dXJuIHRoZSBmdWxsIGxvbmd3b3JkIG9mIHRoZSBpdGVtIGRhdGEgaW4gTEJfR0VUSVRFTURBVEEuCgoJKiBbY29udHJvbHMvZWRpdC5jXQoJRG9uJ3QgbGV0IHRoZSB1c2VyIHNlbGVjdCBhbiBhcmVhIHBhc3QgdGhlIGVuZCBvZiB0aGUgdGV4dC4KCgkqIFtvYmplY3RzL3RleHQuY10KCUluIERyYXdUZXh0KCksIHRoZSBjb2RlIHRvIGRlbGV0ZSBjcmxmcyBhbHNvIHJlbW92ZWQgbXVsdGlwbGUKCWNvbnNlY3V0aXZlIG5ld2xpbmVzLiAgQWxzbywgdXNpbmcgRFRfQ0FMQ1JFQ1QgZGlkbid0IHJldHVybgoJdGhlIHJpZ2h0IGhlaWdodCwgYW5kIHRoZSB3aWR0aCB3YXNuJ3QgcmV0dXJuZWQgYXQgYWxsLgoJVGhpcyBjYXVzZWQgTWVzc2FnZUJveGVzIHRvIGJlIG1pc3NpbmcgbXVjaCBvZiB0aGVpciB0ZXh0LgoKCSogW3dpbmRvd3Mvc2Nyb2xsLmNdCglTY3JvbGxXaW5kb3dbRXhdIGRpZG4ndCB3b3JrIHJpZ2h0IHdpdGggbnVsbCBMUFJFQ1QgYXJndW1lbnRzLgoKRnJpIE9jdCAyMSAyMTo0NzoxOSAxOTk0ICBQYXVsIEZhbHN0YWQgIChwZkB6b29mLmN0cy5jb20pCgoJKiBbbWlzY2VtdS9pbnQyMS5jXQoJRml4ZWQgaW50MjEgMHg0MiBoYW5kbGVyIHRvIHByb3Blcmx5IGFzc2VtYmxlIDMyLWJpdCBzZWVrIHB0ci4KCgkqIFttaXNjL3Byb3BlcnR5LmNdCglGaXhlZCBpbnZlcnRlZCBsb2dpYyBpbiBFbnVtUHJvcHMoKSwgYW5kIGNoYW5nZWQgQ2FsbEJhY2sxNigpCgljYWxsIHRvIHVzZSBuZXcgYXJnIGZvcm1hdC4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJRml4ZWQgQ2FsbEJhY2sxNigpIGNhbGwgaW4gRW51bVtDaGlsZF1XaW5kb3dzIHRvIHVzZSBuZXcgYXJnCglmb3JtYXQ7IHRoaXMgZml4ZXMgY3Jhc2hlcyBpbiBlbnVtIHByb2NlZHVyZXMuCgpXZWQgT2N0IDE5IDIxOjMwOjAwIFBEVCAxOTk0CQltYXJ0aW5AY3MuY3N1ZnJlc25vLmVkdQoKCSogW21pc2MvY2xpcGJvYXJkLmNdCgkgIFt3aW5kb3dzL2V2ZW50LmNdCgkgIFt3aW5kb3dzL21lc3NhZ2UuY10KCUFkZGVkIGN1dCBhbmQgcGFzdGUgYmV0d2VlbiBXaW5lIGFuZCBvdGhlciBYIGNsaWVudHMgdmlhCgl0aGUgUFJJTUFSWSBzZWxlY3Rpb24uIFRleHQgb25seSB0aGlzIHRpbWUuCgoJKiBbY29udHJvbHMvZWRpdC5jXQoJRURJVF9MaW5lTGVuZ3RoLCBFRElUX1RleHRMaW5lIHJldHVybiAwIGZvciBsaW5lcyBhZnRlciBsYXN0IG9uZS4KCgkqIFt3aW5kb3dzL2RlZnduZC5jXQoJU2VuZCBXTV9TWVNDT01NQU5EIHRvIG92ZXJsYXBwZWQgYW5jZXN0b3Igd2luZG93LCAKCW5vdCB0aGUgcmVjZWl2ZXIgb2YgV01fU1lTS0VZRE9XTgoKU2F0IE9jdCAyMiAxNTowMTowMiAxOTk0ICBUaG9tYXMgU2FuZGZvcmQgPHQuZC5nLnNhbmRmb3JkQGJyYWRmb3JkLmFjLnVrPgoKICAgICAgICAqIFtjb250cm9scy9lZGl0LmNdCglDbGllbnRXaWR0aCgpL0NsaWVudEhlaWdodCgpIG1hY3JvczogcmV0dXJuIDAgaWYgc2l6ZSB3b3VsZAoJYmUgbmVnYXRpdmUKCUVESVRfU3RyTGVuZ3RoKCk6IHRha2VzIHVuc2lnbmVkIGNoYXIqIGluc3RlYWQgb2YgY2hhcioKCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglMaXN0Qm94V25kUHJvYygpOiBpbiAiY2FzZSBXTV9NT1VTRU1PVkUiIC0gc2V0IGxwaGwgYXQgc3RhcnQgb2YKCWNhc2UgaW5zdGVhZCBvZiBpbiBlYWNoIHBsYWNlIHJlcXVpcmVkIChpdCB3YXMgb21pdHRlZCBpbgoJc29tZSBwbGFjZXMgY2F1c2luZyBwcm9ibGVtcyEpCgoJKiBbY29udHJvbHMvbWVudS5jXQoJTUVOVV9DYWxjSXRlbVNpemUoKTogZG9uJ3QgdHJ5IHRvIGZpbmQgc2l6ZSBvZiBhIHRleHQgaXRlbQoJaWYgdGhlIHBvaW50ZXIgaXMgTlVMTAoKCSogW2luY2x1ZGUvaGVhcC5oXQoJYWRkZWQgZGVmaW5pdGlvbiBvZiBIRUFQX0xvY2FsSW5pdCgpCgoJKiBbaW5jbHVkZS9tc2Rvcy5oXQoJcmVtb3ZlZCBidWdneSBwb2ludGVyKCkgbWFjcm8gKHVzZSBTQUZFTUFLRVBUUigpIGZyb20gc2VnbWVtLmgKCWluc3RlYWQpCgoJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCglJUENDb3B5U2VsZWN0b3IoKTogYWRkZWQgbWlzc2luZyBmbGFncyB0byBzaG1nZXQoKSBjYWxsCgk/IGRvZXMgdGhpcyBicmVhayBsaW51eCAtIEkgYWRkZWQgdGhlc2UgZmxhZ3MgaW4gYSBwcmV2aW91cwoJcGF0Y2ggYnV0IHRoZXkgd2VyZSBtaXNzaW5nIGluIHRoZSBjb3JyZXNwb25kaW5nIHJlbGVhc2UgPwoKCSogW2xvYWRlci9zaWduYWwuY10KCXdpbl9mYXVsdCgpOiBhZGRlZCBtaXNzaW5nIGRlZmluaXRpb25zIG9mIGksIGR1bXAgZm9yIHRob3NlCglub3QgcnVubmluZyBOZXRCU0Qgb3IgbGludXgKCgkqIFttaXNjL2Rvc19mcy5jXQoJRE9TX0dldEN1cnJlbnREaXIoKTogbWFkZSB0ZW1wW10gc3RhdGljIHNvIGl0IGNhbiBiZSBzYWZlbHkKCXJldHVybmVkCgoJKiBbbWlzY2VtdS9pbnQyMS5jLGludDI1LmMsaW50MjYuY10KCUNoYW5nZWQgYWxsIGludm9jYXRpb25zIG9mIHBvaW50ZXIoKSB0byBTQUZFTUFLRVBUUigpLiBJbmNsdWRlZAoJc2VnbWVtLmggd2hlcmUgbmVjZXNzYXJ5LgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglDcmVhdGVEaWFsb2dJbmRpcmVjdFBhcmFtKCk6IENoYW5nZWQgSEVBUF9Jbml0KCkgY2FsbCB0byAKCUhFQVBfTG9jYWxJbml0KCksIHJlbW92ZWQgcmVkdW5kYW50IHZhcmlhYmxlcwoKU2F0IE9jdCAyMiAwMDoyOTo0MSBNRVQgMTk5NAkJICBEYWcgQXNoZWltIChkYXNoQGlmaS51aW8ubm8pCgoJKiBbbG9hZGVyL2xpYnJhcnkuY10gW2xvYWRlci9tYWluLmNdIFtsb2FkZXIvbmVfaW1hZ2UuY10KCSAgW21pc2MvZXhlYy5jXSBbbWlzY2VtdS9pbnQxMC5jXSBbbWlzY2VtdS9pbnQyMS5jXQoJICBbb2JqZWN0cy9iaXRibHQuY10gW29iamVjdHMvbWV0YWZpbGUuY10KCVJld3JpdHRlbiBtb3JlIHByaW50ZidzIHRvIHVzZSB0aGUgbmV3IGRlYnVnZ2luZyBzeXN0ZW0sIGFuZAoJbWFkZSB3aW5lIGxlc3MgdmVyYm9zZSBwZXIgZGVmYXVsdC4gVXNlICItZGVidWdtc2cgK21vZHVsZSIKCXRvIGdldCAoYWxtb3N0KSB0aGUgc2FtZSBiZWhhdmlvciBhcyBiZWZvcmUuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBPY3QgMTYgMTM6Mjk6MDcgMTk5NCAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAbGFtaXN1bi5lcGZsLmNoKQoKCSogW2NvbnRyb2xzL2J1dHRvbi5jXQoJSW1wbGVtZW50ZWQgV01fR0VURExHQ09ERSwgV01fU0VURk9OVCwgQk1fU0VUU1RZTEUsIEJNX1NFVENIRUNLLAoJQk1fU0VUU1RBVEUuCglJbXBsZW1lbnRlZCBkZWZhdWx0IGJ1dHRvbiBwYWludGluZy4KCU9wdGltaXNlZCByZWRyYXdpbmcuCglGaXhlZCBvd25lci1kcmF3IGJ1dHRvbnMuCgoJKiBbY29udHJvbHMvc3RhdGljLmNdCglJbXBsZW1lbnRlZCBXTV9TRVRGT05ULgoJQSBmZXcgb3B0aW1pc2F0aW9ucyBpbiBwYWludGluZyBjb2RlLgoJQnVnIGZpeCBmb3IgU1NfU0lNUExFIGNvbnRyb2xzLgoKCSogW2lmMTYzMi9jYWxsYmFjay5jXQoJUHJlbGltaW5hcnkgR2V0Q29kZUhhbmRsZSgpLgoKCSogW2lmMTYzMi9nZGkuc3BlY10KCUNoYW5nZWQgJ3Bhc2NhbCcgdG8gJ3Bhc2NhbDE2JyBldmVyeXdoZXJlIGl0J3MgbmVlZGVkLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJRml4ZWQgYSBmZXcgZGF0YSBzdHJ1Y3R1cmVzLgoKCSogW21lbW9yeS9oZWFwLmNdCglCdWcgZml4IGluIEhFQVBfUmVBbGxvYygpLgoKCSogW21pc2MvY3Vyc29yLmNdCglGaXhlZCBTZXRDdXJzb3IoKS4KCgkqIFtvYmplY3RzL2JpdGJsdC5jXQoJRml4ZWQgUGF0Qmx0KCkgd2hlbiB1c2luZyBCTEFDS05FU1Mgb3IgV0hJVEVORVNTIGNvZGVzLgoKCSogW29iamVjdHMvZm9udC5jXQoJQmV0dGVyIGZvbnQgbWFwcGluZyBjb2RlLgoJSW1wbGVtZW50ZWQgR2V0VGV4dEZhY2UoKS4KCgkqIFtvYmplY3RzL3JlZ2lvbi5jXQoJQnVnIGZpeCBpbiBSRUdJT05fTWFrZVBpeG1hcCgpLgoJRmFzdGVyIHJlZ2lvbiBjb3B5aW5nLgoKCSogW29iamVjdHMvdGV4dC5jXQoJSW1wbGVtZW50ZWQgRXh0VGV4dE91dCgpLgoJSW1wbGVtZW50ZWQgRFRfTk9DTElQIHN0eWxlIGZvciBEcmF3VGV4dCgpLgoKCSogW3dpbmRvd3MvZGMuY10KCUZyZWUgdGhlIGJpdG1hcCB3aGVuIGRlbGV0aW5nIGEgbWVtb3J5IERDLgoKCSogW3dpbmRvd3MvZGNlLmNdCglBZGRlZCBzdXBwb3J0IGZvciB3aW5kb3dzIHRoYXQgaGF2ZSBubyBhc3NvY2lhdGVkIFggd2luZG93LgoJSW1wbGVtZW50ZWQgRENYX0NMSVBTSUJMSU5HUyBhbmQgRENYX1BBUkVOVENMSVAgaW4gR2V0RENFeCgpLgoKCSogW3dpbmRvd3MvZGVmZGxnLmNdCglJbXBsZW1lbnRlZCBkZWZhdWx0IHB1c2ggYnV0dG9uIGhhbmRsaW5nIGFuZCBETV9TRVRERUZJRC4KCUltcGxlbWVudGVkIFdNX05FWFRETEdDVEwuCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCUltcGxlbWVudGVkIGRlZmF1bHQgcHVzaCBidXR0b24gaGFuZGxpbmcuCglCZWdpbm5pbmcgb2YgYSBrZXlib2FyZCBpbnRlcmZhY2UgaW4gZGlhbG9ncwoJKGRvZXMgbm90IHJlYWxseSB3b3JrIHlldCkuCglGaXhlZCBkaWFsb2dzIHRoYXQgdXNlIGEgc3BlY2lhbCBmb250LgoKCSogW3dpbmRvd3MvZXZlbnQuY10gW3dpbmRvd3MvZm9jdXMuY10KCUFkZGVkIHN1cHBvcnQgZm9yIG5vbi1YIHdpbmRvd3MuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJUmV3cml0dGVuIEZsb29kRmlsbCgpIGFuZCBpbXBsZW1lbnRlZCBFeHRGbG9vZEZpbGwoKS4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCUNsZWFuZXIgaGFyZHdhcmUgbWVzc2FnZXMgYW5kIFggZXZlbnRzIGhhbmRsaW5nLgoKCSogW3dpbmRvd3MvZGVmd25kLmNdIFt3aW5kb3dzL3BhaW50aW5nLmNdCglJbXBsZW1lbnRlZCBXTV9TRVRSRURSQVcuCgoJKiBbd2luZG93cy93aW4uY10KCU9ubHkgY3JlYXRlIGFuIFggd2luZG93IGZvciB0b3AtbGV2ZWwgd2luZG93cywgb3IgZm9yIHRoZSBkZXNrdG9wLgoJQ2hpbGQgd2luZG93cyBub3cgdXNlIHRoZWlyIHBhcmVudCdzIGRyYXdhYmxlLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglCZWdpbm5pbmcgb2Ygc3VwcG9ydCBmb3Igbm9uLVggd2luZG93cyAoc3RpbGwgc29tZXdoYXQgYnJva2VuKS4KCUltcGxlbWVudGVkICpEZWZlcldpbmRvd1BvcygpLgoKCSogWyovSW1ha2VmaWxlXQoJQ2xlYW5lZCB1cCBzb21lIEltYWtlZmlsZXMuCglNb3ZlZCBkYy5jIGZyb20gd2luZG93cy8gdG8gb2JqZWN0cy8uCglNb3ZlZCBjdXJzb3IuYyBmcm9tIG1pc2MvIHRvIHdpbmRvd3MvLgoKU3VuIE9jdCAxNiAxMjoyMTo1MiAxOTk0ICBNaWNoYWVsIFBhdHJhIDxtaWNreUBtYXJpZS5waHlzaWsudHUtYmVybGluLmQ0MDAuZGU+CgoJKiBbaW5jbHVkZS9kZWJ1Zy5oXQoJICBbaW5jbHVkZS9zdGRkZWJ1Zy5oXQoJICBbKi8qLmNdCiAgICAgICAgUmV3cml0dGVuIGFsbCB0aGUgY2FsbHMgdG8gcHJpbnRmIGZvciBkaXNwbGF5aW5nIGRlYnVnLWluZm9ybWF0aW9uCiAgICAgICAgKG1lc3NhZ2VzIGxpa2UgIkxvYWRJbWFnZTogbG9hZGluZyBTT0wgKFNPTC5FWEUpIiBldGMuKSAKICAgICAgICBBZGRlZCBvcHRpb24gIi1kZWJ1Z21zZyIgdG8gV2luZS4gRXhhbXBsZTogIi1kZWJ1Z21zZyArYWxsIiB3aWxsIHR1cm4KICAgICAgICBhbGwgdGhlc2UgbWVzc2FnZXMgb24sICItZGVidWdtc2cgLWRsbCIgd2lsbCB0dXJuIGFsbCBtZXNzYWdlcyAKCWNvbmNlcm5pbmcgRExMcyBvZmYuCgoJKiBbY29udHJvbHMvY29tYm8uY10KCUFkZGVkIHNvbWUgaGFuZGxpbmcgZm9yIGNvbWJvIGNvbnRyb2xzIHdpdGggb3duZXJkcmF3LXN0eWxlcwogICAgICAgIChqdXN0IGNyZWF0aW5nIGFuZCBwYXNzaW5nIHRoZSBuZWNlc3NhcnkgbWVzc2FnZXMgdG8gdGhlIAoJY29ycmVzcG9uZGluZyBsaXN0Ym94IGNvbnRyb2w7IHRoZSBlZGl0LWNvbnRyb2wgbmVlZHMgdG8gYmUKCXJlcGxhY2VkIHdpdGggc29tZXRoaW5nIGVsc2UpLgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCSAgW3dpbmRvd3MvZGlhbG9nLmNdCglBZGRlZCBzdXBwb3J0IGZvciB1c2Ugb2YgZ2xvYmFsIGhlYXAgbWVtb3J5IGluIGRpYWxvZ3Mgd2l0aCAKCWVkaXQgY29udHJvbHMuCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJQWRkZWQgc3VwcG9ydCBmb3IgaXRlbSBkYXRhLgoJTGlzdEJveEluc2VydFN0cmluZygpOiBGaXhlZCBidWcgZm9yIGVsZW1lbnRzIHdoaWNoIGFyZSBub3QgaW5zZXJ0ZWQKCWFmdGVyIHRoZSBjdXJyZW50bHkgbGFzdCBlbGVtZW50LgoJCgkqIFttaXNjL2Rvc19mcy5jXQoJICBbbWlzY2VtdS9pbnQyMS5jXQoJRE9TX1ZhbGlkRGlyZWN0b3J5KCk6IENoZWNrcyB3aGV0aGVyIGEgZ2l2ZW4gc3RyaW5nIGlzIGluIGZhY3QgdGhlCgl2YWxpZCBuYW1lIG9mIGEgZGlyZWN0b3J5LgoKU2F0IE9jdCAxNSAxNzozNTowMCBQRFQgMTk5NAkJPG1hcnRpbkBjcy5jc3VmcmVzbm8uZWR1PgoKCSogW0ltYWtlZmlsZV0KCWdlbmVyYXRlIHdpbmUuc3ltIGFmdGVyIGNyZWF0aW5nIHdpbmUKCgkqIFtkZWJ1Z2dlci9kYmcueV0KCWxvYWQgIndpbmUuc3ltIiB3aGVuIGVudGVyaW5nIGRlYnVnZ2VyCgoJKiBbZGVidWdnZXIvaW5mby5jXQoJc3ltYm9saWMgYmFja3RyYWNlIGZvciAzMi1iaXQgc3RhY2suIEJyZWFrcyAxNi1iaXQgYnQuCgpTdW4gU2VwICAyNSAxMjowMDowMCBQRFQgMTk5NCAgIDxtYXJ0aW5Ab3NpcmlzLmNzLmNzdWZyZXNuby5lZHU+CgoJKiBbcmMvcmMueV0gW3JjL3JjLmhdIFtyYy9yYy5sXSBbcmMvd2luZXJjLmNdCglGaWxlcyBjcmVhdGVkCgpTdW4gU2VwIDE4IDExOjA0OjQ1IE1FVCBEU1QgMTk5NCAgICAgICAgICBEYWcgQXNoZWltIChkYXNoQGlmaS51aW8ubm8pCgoJKiBbbWlzYy9zcHkuY10KCUV4Y2x1ZGUgYW5kIEluY2x1ZGUgbm8gbG9uZ2VyIHJlcXVpcmVzIGEgdGVybWluYXRpbmcgJzsnIHRvCglyZWdpc3RlciB0aGUgbGFzdCBjb21wb25lbnQuCgpUaHUgU2VwIDE1IDIzOjEwOjA5IE1FVCBEU1QgMTk5NCAgICAgICAgICBEYWcgQXNoZWltIChkYXNoQGlmaS51aW8ubm8pCgoJKiBbQ29uZmlndXJlXQoJUmV3cm90ZSBtdWNoIG9mIGl0LiAgQWRkZWQgY2FwYWJpbGl0eSB0byBnZW5lcmF0ZSBhIHdpbmUuaW5pCglmaWxlLiAgQ29tbWVudGVkIG91dCB0aGUgcHJvY2Vzc29yIGVtdWxhdG9yIG9wdGlvbnMgdW50aWwgdGhhdAoJYmVjb21lcyBpbnRlcmVzdGluZy4gIEdpdmVzIGEgd2FybmluZyBpZiBpdCBzZWVzIGFueSAqLnJlagoJZmlsZXMuICBJIGhvcGUgSSBoYXZlbid0IGFzc3VtZWQgdG8gbXVjaCBhYm91dCB0aGUgc2hlbGwvT1Mgc28KCXRoYXQgaXQgYnJlYWtzIHVuZGVyICpCU0QuCgoJKiBbbWlzYy9kb3NfZnMuY10KCVJlbW92ZWQvY2hhbmdlZCBjYWxscyB0byBUb1VuaXgoKSAod2hpY2ggY2FsbHMgdG9sb3dlcigpKSBzbwoJdGhhdCB0aGUgcGFydCBvZiB0aGUgcGF0aG5hbWUgd2hpY2ggY29ycmVzcG9uZCB3aXRoIHRoZSBkcml2ZQoJbGV0dGVyIG9uIERPUyBubyBsb25nZXIgd2lsbCBiZSBtYXBwZWQgdG8gbG93ZXJjYXNlLiAgVGhpcwoJbWVhbnMgdGhhdCBpdCBzaG91bGQgYmUgcG9zc2libGUgdG8gaGF2ZSB1cHBlcmNhc2UgbGV0dGVycyBpbgoJdGhlIFtkcml2ZXNdIHNlY3Rpb24gb2Ygd2luZS5pbmkuCgoJKiBbTElDRU5TRV0KCUNvc21ldGljIGNoYW5nZXMgc28gdGhhdCBpdCBkaXNwbGF5cyBiZXR0ZXIgaW4gdGhlIHdpbmRvdyB5b3UKCWdldCBmcm9tIHByZXNzaW5nICJDcmVkaXRfTGljZW5zZSIgaW4gdGhlICJBYm91dCBXSU5FIiB3aW5kb3cuCgpTdW4gQXVnIDIxIDIxOjEyOjA2IE1FVCBEU1QgMTk5NAk8ZXJpa0B4czRhbGwubmw+CgoJKiBbY29udHJvbHMvbWVudS5jXQoJTG9hZE1lbnUoKSBtb3ZlZCB0byBsb2FkZXIvcmVzb3VyY2UuYy4KCgkqIFttaXNjL21haW4uY10KCUFkZGVkIHN0dWIgZm9yIEZpbGVDRFIoKS4KCgkqIFtpbmNsdWRlL3BlZXhlLmhdCglBZGRlZCwgZnJvbSBFcmljJ3MgcGUtdGVzdC4KCgkqIFtpbmNsdWRlL3Jlc291cmNlLmhdCglBZGRlZC4KCgkqIFtsb2FkZXIvcmVzb3VyY2VzLmNdCglSZW1vdmVkIGR1cGxpY2F0ZWQgY29kZSBpbiAqUmVzb3VyY2UoKSBmdW5jdGlvbnMuCglNb3ZlZCBORS1wcm9ncmFtIHNwZWNpZmljIGZ1bmN0aW9ucyBpbnRvIG5lX2ltYWdlLmMuCglNb3ZlZCBORS1maWxlZm9ybWF0IGZ1bmN0aW9ucyB0byBuZV9yZXNvdXJjZS5jLgoKCSogW3BlX2ltYWdlLmNdIFtwZV9yZXNvdXJjZS5jXQoJQWRkZWQuIE5vdGhpbmcgaW1wbGVtZW50ZWQgdG8gcnVuIFBFLWV4ZWN1dGFibGVzLCByZXNvdXJjZQoJbG9hZGluZyBvbmx5LgoKCSogW21pc2MvZmlsZS5jXQoJQ2hhbmdlZCBPcGVuRmlsZSgpIHRvIHVzZSBtYWNyb3MuCgoJKiBbbWlzYy9zaGVsbC5jXQoJQWRkZWQgTlVMTC1wdHIgY2hlY2tzIHRvIFNoZWxsQWJvdXQoKS4KCgkqIFttaXNjZW11L2ludDIxLmNdCglGaXhlZCBhIGZldyB0eXBvcy4KCgkqIFttaXNjZW11L2tlcm5lbC5jXQoJQWRkZWQgX0RJID0gX0RTLCB0byBwdXQgdGhlIGNhbGxlcidzIGluc3RhbmNlIGluIERJLiBEb2Vzbid0Cgl3b3JrIHByb3Blcmx5IGlmIGNhbGxlciBjaGFuZ2VkIERTIDotKAoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUaHUgQXVnIDI1IDE1OjI0OjM2IEVEVCAxOTk0ICAgICAgICAgICAgPGpyaWNoYXJkQGNzLnVtbC5lZHU+CgogICAgICAgICogW2luY2x1ZGUvd2luLmhdCiAgICAgICAgUmVtb3ZlZCBzZXBlcmF0ZSBYIHdpbmRvdyBmb3IgaWNvbiwgYWRkZWQgaWNvbiB3aWR0aCxoZWlnaHQuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglDb21tZW50ZWQgb3V0IHRoZSBvbGQgU1dfeHh4IGVtdW0gYW5kIGFkZGVkIGRlZmluZXMgc2luY2UKCXRoZXkgYXJlbid0IGVudW1lcmF0ZWQuCgoJKiBbd2luZG93cy9kY2UuY10KICAgICAgICBSZW1vdmVkIHNvbWUgb2xkZXIgSXNJY29uaWMgY2hlY2tzIGZyb20gR2V0RENFeCgpLCBmdW5jdGlvbmFsaXR5CiAgICAgICAgaXMgbm93IGluIG5vbmNsaWVudCBhbmQgZ2VuZXJpYyB3aW5lIHdpbmRvdyBoYW5kbGluZyBjb2RlLgogICAgICAgIExvdHMgb2YgdGhhbmtzIHRvIEFsZXhhbmRyZSBKdWxsaWFyZCBhbGwgdGhlIGhpbnRzIGFuZAogICAgICAgIGhlbHAuLi4KCiAgICAgICAgKiBbd2luZG93cy9kZWZ3bmQuY10KICAgICAgICBSZW1vdmVkIGNhbGwgdG8gTkNfSGFuZGxlTkNQYWludEljb24oKSB1bmRlciBjYXNlIFdNX1BBSU5USUNPTiwKICAgICAgICBXTV9QQUlOVElDT04gbm93IGNhbGxzIE5DX0hhbmRsZU5DUGFpbnQuICAKCiAgICAgICAgKiBbd2luZG93cy9ldmVudC5jXQogICAgICAgIFJlbW92ZWQgSXNJY29uaWMgY2hlY2tzLgoKICAgICAgICAqIFt3aW5kb3dzL2ljb24uY10KICAgICAgICBSZW1vdmVkIGV2ZXJ5dGhpbmcgaW4gdGhpcyBmaWxlIGZvciBub3cuLi4gY291bGQgYmUgdXNlZCBsYXRlci4KICAgICAgICBJY29uIGZ1bmN0aW9uYWxpdHkgaXMgbm93IGhhbmRsZWQgYnkgdGhlIGdlbmVyaWMgd2luZSB3aW5kb3dzCiAgICAgICAgaGFuZGxpbmcgZnVuY3Rpb25zLgogICAgICAgIAogICAgICAgICogW3dpbmRvd3MvbWRpLmNdCiAgICAgICAgQWRkZWQgYSBTaG93V2luZG93IGluIE1ESVJlc3RvcmVDaGlsZCgpLiAgTURJIGNoaWxkIHdpbmRvd3Mgbm93CiAgICAgICAgc2hvdyB1cCB3aGVuIGRlaWNvbmlmaWVkLiAgUmVtb3ZlZCBJc0ljb25pYyBjaGVja3MuCgogICAgICAgICogW3dpbmRvd3MvbWVzc2FnZS5jXQogICAgICAgIFJlbW92ZWQgb2xkIGljb24gcm91dGluZXMgZnJvbSBoYXJkd2FyZV9ldmVudCgpLgoKICAgICAgICAqIFt3aW5kb3dzL25vbmNsaWVudC5jXQogICAgICAgIENoYW5nZWQgTkNfSGFuZGxlTkNDYWxjU2l6ZSgpIHNvIGl0IGRvZXNuJ3QgY2hhbmdlIHRoZSBzaXplCiAgICAgICAgb2YgYW4gaWNvbiB3aW5kb3cuICBNYWRlIE5DX0ludGVybmFsTkNIaXRUZXN0KCkgb24gYW4gSWNvbmljCiAgICAgICAgd2luZG93IGFsd2F5cyByZXR1cm4gSFRDQVBUSU9OLiAgTWFkZSBOQ19IYW5kbGVOQ0xCdXR0b25EYmxDbGsoKQogICAgICAgIG9uIGFuIEljb25pYyB3aW5kb3cgYWx3YXlzIHNlbmQgYSBTQ19SRVNUT1JFIG1lc3NhZ2UuCgogICAgICAgICogW3dpbmRvd3MvcGFpbnRpbmcuY10KICAgICAgICBDaGFuZ2VkIFJlZHJhd1dpbmRvdygpIHNvIGl0IGRvZXNuJ3QgcmVkcmF3IGFuIGljb25pYyB3aW5kb3cKICAgICAgICB1bmxlc3MgaXQgaGFzIHRvIChubyBpY29uIGZvciB0aGlzIGNsYXNzKS4KICAgICAgICAKICAgICAgICAqIFt3aW5kb3dzL3dpbi5jXQogICAgICAgIFJlbW92ZWQgY3JlYXRpb24gb2Ygc2VwZXJhdGUgaWNvbiB3aW5kb3cgZnJvbSBDcmVhdGVXaW5kb3dFeCgpLgogICAgICAgIAogICAgICAgICogW3dpbmRvd3Mvd2lucG9zLmNdCiAgICAgICAgQWRkZWQgc2F2aW5nIGFuZCByZXN0b3Jpbmcgb2Ygd2luZG93IHJlY3RhbmdsZSBkdXJpbmcKICAgICAgICBpY29uaWZpY2F0aW9uL2RlaWNvbmlmaWNhdGlvbiB0byBTaG93V2luZG93KCkuICBBZGRlZAoJZnVuY3Rpb25zIHRvIHJlY3Vyc2l2ZWx5IGhpZGUgYW5kIHNob3cgY2hpbGRyZW4uLi4gY2FsbGVkCglieSBTaG93V2luZG93IGR1cmluZyBpY29uaWZpY2F0aW9uL2RlaWNvbmlmaWNhdGlvbi4KClNhdCwgMjcgQXVnIDE5OTQgMTg6NDc6MzQgKzAxMDAgKE1FVCBEU1QpICBtaWNreUBtYXJpZS5waHlzaWsudHUtYmVybGluLmRlIChNaWNoYWVsIFBhdHJhKQoKICAgICAgICAqIFt3aW5kb3dzL21lc3NhZ2UuY10KICAgICAgICBXYWl0TWVzc2FnZSgpOiBGaXhlZCBoYW5kbGluZyBvZiB3bV90aW1lci1tZXNzYWdlcwoKICAgICAgICAqIFttaXNjZW11L2ludDIxLmNdCiAgICAgICAgRmluZE5leHRGQ0IoKTogUmV3cml0dGVuIHRvIHN1cHBvcnQgb3RoZXIgZnVuY3Rpb25zIHRoYW4ganVzdAogICAgICAgIHJldHVybmluZyB0aGUgdm9sdW1lIGxhYmVsCgoJKiBbbWlzYy9maWxlLmNdCglPcGVuRmlsZSgpOiBGaXggaW4gaGFuZGxpbmcgb2YgT0ZfQ1JFQVRFCgpXZWQgQXVnIDI0IDE5OjQwOjQyIFBEVCAxOTk0ICBBbmRyZXcgTGFnb2R6aW5za2kgIChhbmRyZXdAbmV0Y29tLmNvbSkKCgkqIFtpZjE2MzIvdXNlci5zcGVjXQoJQWRkZWQgU2V0UGFyZW50LgoKCSogW3dpbmRvd3Mvd2luLmNdCglBZGRlZCBTZXRQYXJlbnQuCgpGcmkgQXVnIDE5IDE2OjM3OjAwIDE5OTQgIFRob21hcyBTYW5kZm9yZCA8dC5kLmcuc2FuZGZvcmRAYnJhZGZvcmQuYWMudWs+CgoJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCglNYW55IGNoYW5nZXMgdGhyb3VnaG91dCBmaWxlIHRvIGNvcnJlY3QgaGFuZGxpbmcgb2Ygc2hhcmVkIG1lbW9yeQoJZnVuY3Rpb24gcmV0dXJuIGNvZGVzLiBGcmVlQlNEIGFuZCBTdW5PUyBzaG0gZnVuY3Rpb25zIHJldHVybgoJLTEgbm90IDAgb24gZXJyb3IuIElmIExpbnV4IGlzIGRpZmZlcmVudCwgdGhlc2UgY2hhbmdlcwoJd2lsbCBoYXZlIHRvIGJlIGJhY2tlZCBvdXQuCglDbGVhbnVwU2VsZWN0b3JzKCk6IHRoaXMgaXMgYSBuZXcgKGludGVybmFsKSBjYWxsIHRvIGZyZWUKCXVwIGFsbCBzZWxlY3RvcnMgKGFuZCBzaG0gaGFuZGxlcy9tZW1vcnkpIGZvciB1c2Ugb24gZXhpdC4KCgkqIFtpbmNsdWRlL3NlZ21lbS5oXQoJQ2hhbmdlIGNvbW1lbnQgdG8gcmVmbGVjdCBuZXcgdXNlIG9mIHNobV9rZXkKCgkqIFttaXNjL21haW4uY10KCWNhbGxlZF9hdF9leGl0KCk6IGFkZCBjYWxsIHRvIENsZWFudXBTZWxlY3RvcnMoKQoKTW9uIEF1ZyAyMiAxODoxOToyNSAxOTk0ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBsYW1pc3VuLmVwZmwuY2gpCgoJKiBbY29udHJvbHMvYnV0dG9uLmNdCglVc2UgT0JNX0NIRUNLQk9YRVMgdG8gZHJhdyBjaGVjayBib3hlcyB3aXRoIGNvcnJlY3QgY29sb3JzLgoJRml4ZWQgYnVnIHdpdGggV01fU0VUVEVYVCBoYW5kbGluZy4KCUEgZmV3IGRyYXdpbmcgb3B0aW1pc2F0aW9ucy4KCgkqIFtjb250cm9scy9tZW51LmNdCglJbXBsZW1lbnRlZCBjb3JyZWN0IFx0IGFuZCBcYSBoYW5kbGluZyBpbiBtZW51IGl0ZW1zLgoJSW1wbGVtZW50ZWQgaGVscCBpdGVtcyAoZmx1c2ggcmlnaHQpIG9uIG1lbnUgYmFyLgoJQWRkZWQgV01fRU5URVJNRU5VTE9PUCBhbmQgV01fRVhJVE1FTlVMT09QIG1lc3NhZ2VzLgoKCSogW2NvbnRyb2xzL3N0YXRpYy5jXQoJRml4ZWQgU1NfSUNPTiBjb250cm9scyBhbmQgaW1wbGVtZW50ZWQgU1RNX1NFVElDT04gbWVzc2FnZQoJaGFuZGxpbmcuCgoJKiBbY29udHJvbHMvd2lkZ2V0LmNdCglTZXQgY3Vyc29yIHRvIElEQ19BUlJPVyBmb3IgYnVpbHQtaW4gY2xhc3Nlcy4KCgkqIFtpbmNsdWRlL29wdGlvbnMuaF0gW21pc2MvbWFpbi5jXQoJQmFja2luZyBzdG9yZSBpcyBub3cgb2ZmIGJ5IGRlZmF1bHQuCgoJKiBbb2JqZWN0cy9yZWdpb24uY10KCVVzZSBYIHJlZ2lvbnMgZm9yIHJlY3RhbmdsZSBhbmQgcG9seWdvbiByZWdpb25zOiAqbWFqb3IqIHNwZWVkCglpbXByb3ZlbWVudC4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJRml4ZWQgdGhlIGZpeCBmb3IgaW50ZWdlciBpZHMgaW4gY29udHJvbHMuIFNTX0lDT04gY29udHJvbHMgaW4KCWRpYWxvZ3Mgc2hvdWxkIHdvcmsgbm93LgoJSW1wbGVtZW50ZWQgRFNfQUJTQUxJR04gc3R5bGUuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJSW1wbGVtZW50ZWQgSW52ZXJ0UmduKCkuCglOZXcgaW50ZXJuYWwgZnVuY3Rpb24gR1JBUEhfRHJhd0JpdG1hcCgpIHRvIGRyYXcgYml0bWFwcyBmYXN0ZXIKCXRoYW4gd2l0aCBDcmVhdGVDb21wYXRpYmxlREMoKSArIEJpdEJsdCgpLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJRGV0ZXJtaW5pbmcgdGhlIHdpbmRvdyBmb3IgYSBtb3VzZSBtZXNzYWdlIGlzIG5vdyBkb25lIGF0CglHZXRNZXNzYWdlKCkgdGltZS4KCU1vZGlmaWVkIFBlZWtNZXNzYWdlKCkgaGFuZGxpbmcgdG8gYXZvaWQgbmVlZGxlc3NseSBmbHVzaGluZyB0aGUKCW91dHB1dCBxdWV1ZS4KCgkqIFt3aW5kb3dzL3RpbWVyLmNdCglDaGVjayBmb3IgcmVzdGFydCBvZiBhIHRpbWVyIChTZXRUaW1lciBjYWxsIHdpdGggdGhlIHNhbWUgaHduZCBhbmQKCWlkIHRoYW4gYW4gZXhpc3RpbmcgdGltZXIpLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUdWUgQXVnICA5IDIzOjU4OjI5IE1FVCBEU1QgMTk5NAk8ZXJpa0BoYWNrdGljLm5sPgoKCSogW21pc2MvZmlsZS5jXQoJT3BlbkZpbGUoKTogQ29tcGxldGx5IHJld3JpdHRlbi4KCgkqIFttaXNjZW11L2ludDIxLmNdCglDcmVhdGVGaWxlKCk6IEZpeGVkIHdyb25nIG1vZGUgaW4gY2FsbCB0byBvcGVuLgoJT3BlbkV4aXN0aW5nRmlsZSgpOiBJbXBsZW1lbnRlZCBmaWxlIHNoYXJpbmcuCglGaW5kTmV4dCgpOiBGaXhlZC4KCUNyZWF0ZU5ld0ZpbGUoKTogRml4ZWQgd3JvbmcgbW9kZSBpbiBjYWxsIHRvIG9wZW4uCglmTG9jaygpOiBBZGRlZCB0byBoYW5kbGUgcmVjb3JkIGxvY2tpbmcuCglHZXRGaWxlQXR0cmlidXRlKCk6IEFkZGVkLgoJQXMgYSByZXN1bHQsIEFIID0gMHg1YywgMHgwOSwgYW5kIDB4MGIgd2VyZSBjaGFuZ2VkLgoKCSogW21pc2NlbXUvaW50MmYuY10KCUFIID0gMHgxMDogU0hBUkUgaW5zdGFsbGF0aW9uIGNoZWNrCiAKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJQWNjZXNzUmVzb3VyY2UoKTogRml4ZWQuIEEgbmV3IGZpbGUgZGVzY3JpcHRvciB3aWxsIGJlIHJldHVybmVkIGJ5CglldmVyeSBjYWxsIHRvIEFjY2Vzc1Jlc291cmNlKCkuCgoJKiBbd2luZG93cy91dGlsaXR5LmNdCgl3dnNwcmludGYoKTogRml4ZWQuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJRmluZE1lbnVJdGVtKCk6IEZpeGVkIChoYW5kbGluZyBmb3IgblBvcyA9PSAtMSBhZGRlZCkuCQoKCSogW3dpbmRvd3Mvd2luLmNdCglDcmVhdGVXaW5kb3dFeCgpOiBBZGRlZCBjYWxsIHRvIFdJTlBPU19HZXRNaW5NYXhJbmZvLgoKCSogW0NvbmZpZ3VyZV0KCUFkZGVkIHR3byBvcHRpb25zIGZvciBhIHByb2Nlc3NvciBlbXVsYXRvciB0aGF0IG1pZ2h0IGJlCglwbHVnZ2VkIGluIGxhdGVyLi4KCgkqIFtsb2FkZXIvdGFzay5jXSBbaW5jbHVkZS90b29saGVscC5oXSBbaWYxNjMyL3Rvb2xoZWxwLnNwZWNdCglDcmVhdGVOZXdUYXNrKCkgc3RvcmVzIHJlYWwgbW9kdWxlbmFtZSBpbnN0ZWFkIG9mICdUQVNLeHh4eCcuCglBZGRlZCBUYXNrRmlyc3QoKSwgVGFza05leHQoKSwgVGFza0ZpbmRIYW5kbGUoKS4KCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglBZGRlZCBzdHViIGZvciBNZW1NYW5JbmZvKCkuCgoJKiBbb2JqZWN0cy90ZXh0LmNdCglBZGRlZCBzdHViIGZvciBHZXRUYWJiZWRUZXh0RXh0KCkuCgoJKiBbbWlzY2VtdS8qXQoJQ2hhbmdlZCBhbGwgcmVmZXJlbmNlcyB0byByZWdpc3RlcnMuIFBsZWFzZSBkb24ndCBhY2Nlc3MKIAl0aGUgY29udGV4dCBzdHJ1Y3R1cmUuCglmaXggZm9yIEdldFN5c3RlbVRpbWUoKSBieSA8anNwZXRlckBiaXJjaC5lZS52dC5lZHU+IGFkZGVkLgoKCSogW21pc2MvbHN0ci5jXQoJRml4ZWQgYnVnIGluIEFuc2lVcHBlcigpICYgQW5zaUxvd2VyKCkuCgoJKiBbbWlzYy93aW5zb2NrZXQuY10KCWJ1Z2ZpeCBpbiBnZXRzb2Nrb3B0KCkvc2V0c29ja29wdCgpOiB3aW5zb2NrIHVzZXMgZGlmZmVyZW50IHZhbHVlcwoJdGhhbiB1bml4LgoKCSogW29iamVjdHMvZGliLmNdCglBZGRlZCBESUJfU2V0SW1hZ2VCaXRzX1JMRVs0OF0gdG8gc3VwcG9ydCBjb21wcmVzc2VkIGJpdG1hcHMuCgpNb24gQXVnICA4IDIxOjEyOjMzIDE5OTQgIERhdmlkIE1ldGNhbGZlIDxkYXZpZEBwcmlzbS5kZW1vbi5jby51az4KCgkqIFtjb250cm9scy9lZGl0LmNdCglBZGRlZCBzdXBwb3J0IGZvciBXTV9DT1BZLCBXTV9DVVQgYW5kIFdNX1BBU1RFIG1lc3NhZ2VzLgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdIFt3aW5kb3dzL2RlZmRsZy5jXSBbaW5jbHVkZS9kaWFsb2cuaF0KCU1vZGlmaWVkIGRpYWxvZyBjb2RlIHRvIGNyZWF0ZSBuZXcgaGVhcCBmb3IgZWRpdCBjb250cm9scwoJdW5sZXNzIERTX0xPQ0FMRURJVCBzdHlsZSBpcyBzZXQuCgpUaHUgQXVnICA0IDE4OjUwOjU2IDE5OTQgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQGxhbWlzdW4uZXBmbC5jaCkKCgkqIFtjb250cm9scy9idXR0b24uY10gW2NvbnRyb2xzL2VkaXQuY10gW2NvbnRyb2xzL3N0YXRpYy5jXQoJUmVtb3ZlZCB1bm5lZWRlZCBHbG9iYWxVbmxvY2soKSBjYWxscy4KCgkqIFtjb250cm9scy9tZW51LmNdIFtpbmNsdWRlL21lbnUuaF0KCUxvdHMgb2YgY2hhbmdlcywgZml4ZWQgYSBsb3Qgb2Ygb2xkIGJ1Z3MgYW5kIGludHJvZHVjZWQgYSBsb3Qgb2YKCW5ldyBvbmVzIDotKQoJLSBDaGFuZ2VkIG1lc3NhZ2UgbG9vcCB0byB1c2UgTVNHX0dldEludGVybmFsTWVzc2FnZSgpLgoJLSBGaXhlZCBhIGJ1ZyB0aGF0IGNhdXNlZCB0aGUgbWFpbiB3aW5kb3cgdG8gbG9zZSBhY3RpdmF0aW9uIHdoZW4KCSAgZGlzcGxheWluZyBhIG1lbnUuCgktIENvcnJlY3RseSBzZW5kIGluaXRpYWxpc2F0aW9uIG1lc3NhZ2VzIChXTV9JTklUTUVOVVBPUFVQKS4KCS0gSW1wbGVtZW50ZWQgRW5kTWVudSgpIGFuZCBMb29rdXBNZW51SGFuZGxlKCkuCgktIENoYW5nZWQgaW50ZXJuYWwgc3RydWN0dXJlcyB0byBiZSBhcyBjb21wYXRpYmxlIGFzIHBvc3NpYmxlIHdpdGgKCSAgTVMtV2luZG93cy4KCS0gQWxsb2NhdGVkIGV2ZXJ5dGhpbmcgb24gdGhlIFVTRVIgaGVhcCBpbnN0ZWFkIG9mIHRoZSBnbG9iYWwgaGVhcC4KCS0gUHJlZml4ZWQgYWxsIGludGVybmFsIGZ1bmN0aW9uIG5hbWVzIHdpdGggTUVOVV8gYW5kIGRlY2xhcmVkCgkgIHRoZW0gc3RhdGljLgoJLSBNb3ZlZCAiQWJvdXQgV2luZS4uLiIgaGFuZGxpbmcgdG8gTkNfSGFuZGxlU3lzQ29tbWFuZCgpLgoJLSBNdWx0aS1saW5lIG1lbnVzIHNob3VsZCBub3cgd29yayBjb3JyZWN0bHkuCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdIFtvYmplY3RzL2JpdG1hcC5jXQoJQWRkZWQgdGhlIHBvc3NpYmlsaXR5IHRvIGNyZWF0ZSBPRU0gYml0bWFwcyBkaXJlY3RseSBhcyBYIGJpdG1hcHMuCgoJKiBbb2JqZWN0cy9kY3ZhbHVlcy5jXSBbd2luZG93cy9kYy5jXQoJRml4ZWQgR2V0RENPcmcoKSB0byByZXR1cm4gc2NyZWVuIGNvb3JkaW5hdGVzLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJRml4ZWQgZG91YmxlLWNsaWNrIGNoZWNrcyB3aGVuIHRoZSBtZXNzYWdlIGlzIG5vdCByZW1vdmVkIGZyb20gdGhlCglxdWV1ZS4KCUZpeGVkIE1TR19HZXRJbnRlcm5hbE1lc3NhZ2UoKSB0byBzZW5kIFdNX0VOVEVSSURMRSBtZXNzYWdlcy4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJQnVnIGZpeCBpbiBzeXN0ZW0gbWVudSBoaXQtdGVzdCBjYWxjdWxhdGlvbi4KCUEgZmV3IGNoYW5nZXMgZm9yIG5ldyBtZW51IGZ1bmN0aW9ucy4KClRodSBBdWcgMTEgMTc6NTE6MDIgMTk5NCAgVGhvbWFzIFNhbmRmb3JkIDx0LmQuZy5zYW5kZm9yZEBicmFkZm9yZC5hYy51az4KCiAgICAgICAgKiBbY29udHJvbHMvZWRpdC5jXQogICAgICAgIEJ1ZyBmaXggaW4gRWRpdF9OQ0NyZWF0ZU1lc3NhZ2UKICAgICAgICBlcy0+dGV4dGxlbiB3YXMgYmVpbmcgdXNlZCBiZWZvcmUgYmVpbmcgc2V0CgogICAgICAgICogW2NvbnRyb2xzL21lbnUuY10KICAgICAgICBCdWcgZml4IGluIE1FTlVfRHJhd01lbnVJdGVtCiAgICAgICAgZG9uJ3QgdHJ5IHRvIHdyaXRlIHRleHQgaWYgTlVMTCBwb2ludGVyIHBhc3NlZAoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUaHUgQXVnICA0IDA3OjE4OjAyIDE5OTQgIE1pY2hhZWwgUGF0cmEgIDxtaWNreUBtYXJpZS5waHlzaWsudHUtYmVybGluLmRlPgoKICAgICAgICAqIFt3aW5kb3dzL21lc3NhZ2UuY10KCUltcGxlbWVudGVkIFdhaXRNZXNzYWdlKCkgKFVTRVIuMTEyKS4KCiAgICAgICAgKiBbaWYxNjMyL3VzZXIuc3BlY10KCUFkZGVkIFdhaXRNZXNzYWdlLgoKCSogW3dpbmRvd3MvZGVmd25kLmNdCglXTV9FUkFTRUJLR05EOiBBZGRlZCBzdXBwb3J0IGZvciBoYnJCYWNrZ3JvdW5kPUNPTE9SX3h4eC4KCiAgIAkqIFttaXNjZW11L2ludHsxMywyMSwyYX0uY10KICAgICAgICAqIFttaXNjZW11L0ltYWtlZmlsZV0KCSogW3NpZ25hbC9sb2FkZXIuY10KCUFkZGVkIGEgZmV3IGJhc2ljIGRpc2sgaW5mb3JtYXRpb24gYW5kIGRpYWdub3N0aWMgZnVuY3Rpb25zIHRvCglwcmV2ZW50IHByb2dyYW1zIHVzaW5nIHRoaXMgZnVuY3Rpb24gZnJvbSBjcmFzaGluZy4gQWxsIGRyaXZlcwoJYXJlIGNsYWltZWQgdG8gYmUgcmVtb3RlIG9uZXMsIHNvIGRpcmVjdCBJL08gaXNuJ3QgYWxsb3dlZC4KCgkqIFtjb250cm9scy9lZGl0LmNdCglFRElUX1dyaXRlVGV4dCgpOiBBZGRlZCBjb2RlIHRvIGNvcnJlY3RseSBlcmFzZSB0aGUgcmVtYWluaW5nIHNwYWNlCglvZiB0aGUgZWRpdC1jb250cm9sIGlmIHRoZSBzaXplIG9mIHRoZSBjb250cm9sIGhhcyBjaGFuZ2VkIHNpbmNlZCBpdCdzCgljcmVhdGlvbi4KClR1ZSBKdWwgMjYgMjI6MDU6NTQgTUVUIERTVCAxOTk0IEVyaWsgQm9zIDxlcmlrQGhhY2t0aWMubmw+CgoJKiBbaWYxNjMyL21vdXNlLnNwZWNdCglBZGRlZCBtb3VzZS5kbGwgZW50cnksIG5vIGZ1bmN0aW9ucy4KCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCUJ1ZyBmaXggaW4gQWNjZXNzUmVzb3VyY2UoKS4gCgoJKiBbbWlzYy9rZXlib2FyZC5jXSwgYWRkZWQgW2luY2x1ZGUva2V5Ym9hcmQuaF0KCUNoYW5nZWQgZnVuY3Rpb25zIHRvIHJldHVybiBtb3JlIHVzZWZ1bCB2YWx1ZXMuCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCUhhY2tlZCBESUFMT0dfR2V0Q29udHJvbCgpIHRvIHN1cHBvcnQgcmVzb3VyY2VzIHdoaWNoCgloYXZlIDB4ZmYwMCAtIDB4ZmZmZiBhcyBpZC4gKiogTmVlZHMgdG8gYmUgZG9uZSBwcm9wZXJseSBieQoJc29tZW9uZSB3aG8ga25vd3MgdGhlIE5FIGZpbGVmb3JtYXQgKioKCkp1bCAyOSwgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW3dpbmRvd3MvZXZlbnQuY10KCUFkZCBuZXcgc3R1YiBmb3IgRW5hYmxlSEdhcmR3YXJlSW5wdXQoKSBmdW5jdGlvbi4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCUFkZCBjb2RpbmcgZm9yIEhXTkRfQlJPQURDQVNUIGluIFBvc3RNZXNzYWdlKCkuCgoJKiBbbWlzYy9maWxlLmNdCglBZGQgY29kaW5nIGZvciBPcGVuRmlsZSgpIGFsc28gc2VhcmNoIGluIFdpbmRvd1BhdGhzLgoKCSogW21pc2MvbW1zeXN0ZW0uY10KCSogW21pc2MvYXVkaW8uY10KCSogW21pc2MvbW1hdXguY10KCSogW21pc2MvbWNpY2RhLmNdCglDaGFuZ2UgI2luY2x1ZGUgImxpbnV4L3NvdW5kY2FyZC5oIiBieSAjaW5jbHVkZSAic3lzL3NvdW5kY2FyZC5oIgoJQWRkIGNvZGluZyBpbiBNTUlPIGZ1bmN0aW9ucy4gTm93LCBtbWlvRGVzY2VuZCgpIGNhbiBmaW5kIFdBViBjaHVua3MuCglTbmRQbGF5U291bmQgJiBNQ0lfRUxFTUVOVCBub3cgdXNlIE1NSU8gYW5kIGFkanVzdCB0byBwcm9wZXIgZm9ybWF0cy4KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpNb24gSnVsIDE4IDIzOjU1OjEzIE1FVCBEU1QgMTk5NAoKCSogW2lmMTYzMi9jYWxsLlNdCglDYWxsVG8xNigpOiBhZGRlZCBgbW92ICVlYXgsJWVkeCcganVzdCBiZWZvcmUgbGNhbGwsCgl0byBtYWtlIHN1cmUgdGhhdCBEWCBjb250YWluIHRoZSBETEwncyBoaW5zdGFuY2Ugd2hlbgoJaW5pdGlhbGlzZWQuCgoJQ2FsbFRvMzJfMTYoKSBhZGRlZCwgZXF1YWwgdG8gQ2FsbFRvMzIoKSBleGNlcHQgZm9yCglvbmUgdGhpbmc6IGl0IHNhdmVzIERYIGFuZCAKCgkqIFt0b29scy9idWlsZC5jXQoJQWRkZWQgc29tZSBjb2RlIHRvIHN1cHBvcnQgMTYgYW5kIDMyIGJpdCByZXR1cm4gdmFsdWVzLgoKCSogWzE2MzIve2tlcm5lbCx1c2VyfS5zcGVjXQoJQ2hhbmdlZCBtb3N0IG9mIHRoZSBgcGFzY2FsJyBzdHlsZSB0byBwYXNjYWxfMTYgd2hlbgoJZnVuY3Rpb24gcmV0dXJuZWQgYSAxNmJpdCB2YWx1ZS4KClR1ZSBKdWwgMTkgMTg6NDA6MjUgMTk5NCAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAbGFtaXN1bi5lcGZsLmNoKQoKCSogW2NvbnRyb2xzL21lbnUuY10KCVJlb3JnYW5pemVkIHNpemluZyBhbmQgZHJhd2luZyBjb2RlIHRvIGltcGxlbWVudCBtdWx0aS1saW5lIG1lbnVzLgoJSW1wbGVtZW50ZWQgTUVOVUJSRUFLIHN0eWxlLgoJVXNlIHN5c3RlbSBjb2xvcnMgdG8gZHJhdyBtZW51cy4KCgkqIFtvYmplY3RzL2NvbG9yLmNdCglCdWcgZml4IGluIENPTE9SX0lzU29saWQoKS4KCgkqIFtvYmplY3RzL2ZvbnQuY10KCUJ1ZyBmaXggaW4gRk9OVF9HZXRNZXRyaWNzKCk6IGNhbGN1bGF0ZSBhdmVyYWdlIGNoYXJhY3RlciB3aWR0aAoJb25seSBvbiBleGlzdGluZyBjaGFycyAoZGlhbG9ncyBsb29rIG11Y2ggYmV0dGVyKS4KCgkqIFtvYmplY3RzL3RleHQuY10KCUJ1ZyBmaXggaW4gRHJhd1RleHQoKTogdXNlIHRleHQgY29sb3IgdG8gdW5kZXJsaW5lIG1uZW1vbmljLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglDaGFuZ2VkIFdNX05DSElUVEVTVCBoYW5kbGluZyB0byBjb3BlIHdpdGggbXVsdGktbGluZSBtZW51IGJhcnMuCgoJKiBbd2luZG93cy9zeXNjb2xvci5jXQoJQWRkZWQgc3lzdGVtIG9iamVjdHMgZm9yIG1lbnUgY29sb3JzLgoKTW9uIEp1bCAxOCAxOTozMjowOCBQRFQgMTk5NCAgQW5kcmV3IExhZ29kemluc2tpICAoYW5kcmV3QG5ldGNvbS5jb20pCgogICAgICAgICogW2NvbnRyb2xzL21lbnUuY10KICAgICAgICBGaXhlZCBidWcgaW4gU2VsZWN0UHJldkl0ZW0gdGhhdCBjYXVzZWQgc2VwZXJhdG9ycyB0byBub3QgYmUKCXNraXBwZWQgd2hlbiB1c2luZyB0aGUgdXAgYXJyb3cga2V5LgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUaHUgSnVsIDE0IDE3OjUwOjQ1IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBbQ29uZmlndXJlXQoJQXV0b2RldGVjdHMgTGludXggdmVyc2lvbiAoaWYgcnVubmluZyBMaW51eCkuCgoJKiBbbG9hZGVyL3NpZ25hbC5jXQoJTmV3IHNpZ25hbHMgZm9yIExpbnV4LgoKCSogW2xvYWRlci9sZHRsaWIuY10KCU5ldyBzdHJ1Y3R1cmUgZmllbGQgaW4gc3lzIGNhbGwuCgpTdW4gSnVsIDEwIDE5OjMxOjM0IDE5OTQgIE9sYWYgRmxlYmJlICAob2xhZkBkcmFnb24pCgogICAgICAgICogW2xvYWQvcmVzb3VyY2UuY10gCiAgICAgICAgICBmaXhlZCBNZW1vcnkgKFJlc291cmNlKSBMZWFrLgoKICAgICAgICAqIFtsb2FkL21haW4uY10gCiAgICAgICAgICBmaXhlZCBhIHByaW50Zi4KClR1ZSBKdWwgMTIgMTg6NTA6MzQgMTk5NCAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAbGFtaXN1bi5lcGZsLmNoKQoKCSogW2NvbnRyb2xzL2Rlc2t0b3AuY10KCUltcGxlbWVudGVkIGRlc2t0b3Agd2FsbHBhcGVyIChvbmx5IDE2IGNvbG9ycyBmb3Igbm93KS4KCgkqIFtjb250cm9scy9tZW51LmNdIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJUHJlbGltaW5hcnkgd29yayB0byBhbGxvdyBtdWx0aS1saW5lIG1lbnVzLgoKCSogW21pc2MvbWFpbi5jXQoJTm8gYmFja2luZyBzdG9yZSBvbiBkZXNrdG9wIHdpbmRvdyAobm90IHVzZWZ1bCkuCgoJKiBbb2JqZWN0cy90ZXh0LmNdCglBIGZldyBmaXhlcyB0byBEcmF3VGV4dCgpIHRvIG1ha2UgdW5kZXJsaW5lcyB1bmRlciBtbmVtb25pYwoJbGV0dGVycyB0byBsb29rIGJldHRlci4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglNb3JlIGZpeGVzIHRvIEdSQVBIX0RyYXdBcmMoKSwgYW5kIHNvbWUgZml4ZXMgdG8gUG9seWdvbigpLgoJSW1wbGVtZW50ZWQgUG9seVBvbHlnb24oKSAocGFydGlhbGx5IHdvcmtpbmcpLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglOZXcgZnVuY3Rpb24gV0lOUE9TX1NlbmROQ0NhbGNTaXplKCkuCglDbGVhbmVkIHVwIFNldFdpbmRvd1BvcygpIGFuZCBhZGRlZCBwcmVsaW1pbmFyeSBzdXBwb3J0IGZvcgoJbXVsdGktbGluZSBtZW51cy4KCk1vbiBKdWwgMTEgMTk6MTU6NTEgMTk5NCAgTWlndWVsIGRlIEljYXphICAobWlndWVsQHNwaGlueCkKCgkqIFtjb250cm9scy9lZGl0LmNdCglDaGFuZ2VzIHRvIHdvcmsgYXMgYSBsaWJyYXJ5LgoKCSogW2lmMTYzMi9jYWxsYmFjay5jXSAKCUlmZGVmZWQgbW9kdWxlLgoKCSogW2lmMTYzMi9yZWxheS5jXQoJQ2hhbmdlcyB0byBhbGxvdyBsaW5raW5nIHdpdGggV2luZUxpYi4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUFkZGVkIG1hY3JvIFdJTkVMSUJfVU5JTVAKCgkqIFtsb2FkZXIvbGlicmFyeS5jXQoJV2hlbiBjb21waWxpbmcgV2luZUxpYiwgR2V0UHJvY0FkZHJlc3MgaXMgbm90IGltcGxlbWVudGVkIHlldC4KCgkqIFtsb2FkZXIvbWFpbi5jXQoJQWRkZWQgZW1wdHkgSW5pdERMTCB3aGVuIHVzaW5nIFdpbmVMaWIuCgoJKiBbbG9hZGVyL25lX2ltYWdlLmNdCglTb21lIHBhcnRzIG9mIHRoZSBsb2FkZXIgYXJlIG5lZWRlZCBmb3IgV2luZUxpYiwgaWZkZWZlZCBjb3JyZWN0bHkKCgkqIFttaXNjL3thdWRpby5jLG1jaWNkYS5jLG1tYXV4LmMsbW1zeXN0ZW0uY10KCURpc2FibGUgY29tcGlsYXRpb24gb2YgbW9kdWxlIHdoZW4gY29tcGlsaW5nIFdpbmVMaWIuCgoJKiBbdG9vbGtpdC9oZWFwLmNdCglGaXhlZCBzbWFsbCBidWcuICBXaGVuIHBhc3NlZCBhbiBpbnZhbGlkIGhhbmRsZSBXaW5lTGliIHdvdWxkCgljcmFzaCwgbm93IHJldHVybiBOVUxMLgoKCSogW3Rvb2xraXQvd2lubWFpbi5jXQoJQ2FsbCBDcmVhdGVOZXdUYXNrIGluIF9XaW5NYWluLgoKU3VuIEp1bCAxMCAwOTowODowMiAxOTk0ICBEYXZpZCBNZXRjYWxmZSA8ZGF2aWRAcHJpc20uZGVtb24uY28udWs+CgoJKiBbY29udHJvbHMvZWRpdC5jXSBbY29udHJvbHMvd2lkZ2V0LmNdCglNb3JlIGNoYW5nZXMgdG8gaW1wcm92ZSBjb21wYXRpYmlsaXR5IHdpdGggV2luZG93cycgZWRpdAoJY29udHJvbC4gIEZpbmlzaGVkIG9mZiB0YWIgc3RvcCBzdXBwb3J0LgoKTW9uIEp1bCAxMSAyMTowNTowMiBNRVQgRFNUIDE5OTQgIEVyaWsgQm9zIDxlcmlrQGhhY2t0aWMubmw+CgoJKiBbaWYxNjMyL3JlbGF5LmNdCgkjIG9mIG9yZGluYWxzIGluIHNoZWxsLmRsbCBjaGFuZ2VkIHRvIDEwMy4KCgkqIFtsb2FkZXIvc2lnbmFsLmNdCglzdGksIGNsaSB3aWxsIG5vdyBiZSBpZ25vcmVkLgoKCSogW29iamVjdHMvYnJ1c2guY10KCUFkZGVkIHN0dWIgZm9yIEdldFN5c0NvbG9yQnJ1c2goKS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuLCAzIEp1bCAxOTk0IDIwOjE1OjU2ICswMTAwIChCU1QpICBEYXZpZCBNZXRjYWxmZSA8ZGF2aWRAcHJpc20uZGVtb24uY28udWs+CgoJKiBbY29udHJvbHMvZWRpdC5jXQoJQnVnIGZpeGVzIGFuZCB0aWR5aW5nIHVwLiAgUHJlbGltaW5hcnkgdGFiIHN0b3Agc3VwcG9ydAoJKGRvZXNuJ3Qgd29yayB5ZXQpLgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglSZXZlcnNlZCBvcmRlciBvZiBidXR0b25zIGluIENoZWNrUmFkaW9CdXR0b25zIHNvIHRoYXQgYWxsCglidXR0b25zIGFyZSBub3cgZGlzcGxheWVkLgoKVHVlIEp1bCAgNSAxODozMDoyNCAxOTk0ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBsYW1pc3VuLmVwZmwuY2gpCgoJKiBbaW5jbHVkZS9vcHRpb25zLmhdIFttaXNjL21haW4uY10gW3dpbmRvd3Mvd2luLmNdCglSZW1vdmVkIG5vc2F2ZXVuZGVycyBvcHRpb24sIHJlcGxhY2VkIGJ5IGhhbmRsaW5nCgl0aGUgQ1NfU0FWRUJJVFMgZmxhZy4KCgkqIFt3aW5kb3dzL2NsYXNzLmNdCglNb2RpZmllZCB0aGUgZml4IGZvciBuZWdhdGl2ZSBzaXplIGluIGNsYXNzIGV4dHJhIGJ5dGVzIHRvCglhdm9pZCBtb2RpZnlpbmcgdGhlIGNhbGxlcidzIGRhdGEuCgoJKiBbd2luZG93cy9kYy5jXQoJQnVnIGZpeDogc3lzdGVtIGZvbnQgbXVzdCBiZSBhIHByb3BvcnRpb25hbCBmb250LgoJRml4ZWQgYSBidWcgdGhhdCBjYXVzZWQgdGhlIGRlZmF1bHQgcGVuIHRvIG5vdCBiZSBzZWxlY3RlZAoJY29ycmVjdGx5IGluIGEgREMuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJQnVnIGZpeCBpbiBHUkFQSF9EcmF3QXJjKCkuIFRoYW5rcyB0byBBZHJpYW5vIEF6ZXZlZG8gZm9yCglub3RpY2luZyBpdC4KCgkqIFt3aW5kb3dzL3BhaW50aW5nLmNdCglSZW1vdmVkIGluY29ycmVjdCBzZWxlY3Rpbmcgb2YgZGVmYXVsdCBvYmplY3RzIGluIEJlZ2luUGFpbnQoKQoJKG5vIGxvbmdlciBuZWVkZWQgYmVjYXVzZSBvZiB0aGUgZml4IGluIGRjLmMpLgoKSnVsIDQsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFttaXNjL21tc3lzdGVtLmNdCgkqIFttaXNjL2F1ZGlvLmNdCglBZGQgbW9yZSBjb2RlIHRvIGludGVyZmFjZSAnL2Rldi9kc3AnLgoKCSogTmV3IGZpbGUgW21pc2MvbWNpY2RhLmNdCglDcmVhdGUgYW4gTUNJX0RFVlRZUEVfQ0RfQVVESU8gZHJpdmVyIGNvbm5lY3RlZCB0byAnL2Rldi9zYnBjZCcuCgoJKiBOZXcgZmlsZSBbbWlzYy9tbWF1eC5jXQoJU3R1YnMgdG8gbWFrZSBhIGZ1dHVyZSBkcml2ZXIgY29ubmVjdGVkIHRvICcvZGV2L21peGVyJy4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJVGVtcG9yYXJ5IHBhdGNoIHRvIENyZWF0ZVdpbmRvd0V4KCkgZm9yIHJlc2V0aW5nIG5lZ2F0aXZlCgljb29yZGluYXRlcyB0byAwLDAgOyBiZWNhdXNlICdzb3VuZHJlYy5leGUnIGdpdmUgbmVnYXRpdmUgdmFsdWVzCglhbmQgSSBuZWVkIGl0IHRvIHdvcmsgb24gTU1TWVNURU0gLi4uIDotKQoKCSogW21pc2NlbXUvaW50MmYuY10KCWFkZCBhIHN0dWIgJ2RvX2ludDJmXzE2JyAoZnVuY3Rpb24gMHgxNikgZm9yIERNUEkgc2VydmVyLgoKTW9uIEp1biAyMCAxMDowODo0MCBCU1QgMTk5NCAgV2lsbGlhbSBTbWl0aCAod29zQGRjcy53YXJ3aWNrLmFjLnVrKQoKCSogaW5jbHVkZS9jb21tLmgKCU5ldyBmaWxlIC0tIHNvbWUgZGVmaW5pdGlvbnMgdGhhdCB3ZXJlIGluIGNvbW0uYyBub3cgbmVlZCB0bwoJYmUgc2hhcmVkIHdpdGggbWlzYy9kb3NfZnMuYwoKCSogbWlzYy9jb21tLmMKCVNvbWUgZGVmaW5pdGlvbnMgbW92ZWQgaW50byBpbmNsdWRlL2NvbW0uaAoKCSogbWlzYy9kb3NfZnMuYyAoRE9TX0dldEVxdWlwbWVudCk6CglGaXhlZCBlcnJvciBpbiBlcXVpcG1lbnQgLS0gYml0d2lzZSBvciBvZiB0d28gdmFsdWVzIHNob3VsZAoJYmUgdXNlZCBpbnN0ZWFkIG9mIGxvZ2ljYWwgb3IuICBBbHNvIGFkZGVkIGNvZGUgdG8gY29ycmVjdGx5CglyZXBvcnQgdGhlIG51bWJlciBvZiBzZXJpYWwgYW5kIHBhcmFsbGVsIGRldmljZXMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCk1vbiBKdW4gMjAgMTQ6MjY6NDEgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIFtvYmplY3RzL2JpdG1hcC5jXQoJQWxsb3cgbmVnYXRpdmUgYml0bWFwIHNpemVzLgoKU3VuIEp1biAxOSAxMjowMDowNCAxOTk0ICBEYXZpZCBNZXRjYWxmZSA8ZGF2aWRAcHJpc20uZGVtb24uY28udWs+CgogICAgICAgICogW2NvbnRyb2xzL2VkaXQuY10KICAgICAgICBJbXByb3ZlZCBzZWxlY3Rpb24gZGlzcGxheS4gIEFkZGVkIHByb2Nlc3NpbmcgZm9yIFdNX1NFVEZPTlQsCiAgICAgICAgRU1fUkVQTEFDRVNFTCwgRU1fTElORUxFTkdUSCwgRU1fVU5ETywgRU1fRU1QVFlVTkRPQlVGRkVSLAogICAgICAgIEVNX0dFVEhBTkRMRSwgRU1fU0VUSEFORExFIG1lc3NhZ2VzLiAgVGV4dCBidWZmZXIgbm93IHN0b3JlZCBvbiAKICAgICAgICBhcHBsaWNhdGlvbidzIGxvY2FsIGhlYXAuCgogICAgICAgICogW3dpbmRvd3MvZ3JhcGhpY3MuY10KICAgICAgICBDb3JyZWN0ZWQgYnVnIGluIFJlY3RhbmdsZSgpLiAgWEZpbGxSZWN0YW5nbGUgaGFzIHRoZSBzYW1lCiAgICAgICAgd2lkdGggYXMgUmVjdGFuZ2xlLCBidXQgWERyYXdSZWN0YW5nbGUgaXMgb25lIHBpeGVsIHdpZGVyCiAgICAgICAgZm9yIHRoZSBzYW1lIGNvLW9yZGluYXRlcy4KCiAgICAgICAgKiBbbWVtb3J5L2hlYXAuY10gW2luY2x1ZGUvaGVhcC5oXQogICAgICAgIEFkZGVkIEhFQVBfTG9jYWxTaXplIGZ1bmN0aW9uLgoKICAgICAgICAqIFt3aW5kb3dzL2V2ZW50LmNdIFt3aW5kb3dzL2tleWJvYXJkLmNdCiAgICAgICAgSW1wcm92ZW1lbnRzIHRvIEtleVN0YXRlVGFibGUgYW5kIGFkZGl0aW9uIG9mIEFzeW5jS2V5U3RhdGVUYWJsZS4KICAgICAgICBBZGRlZCBzdXBwb3J0aW5nIGNvZGUgdG8gR2V0S2V5U3RhdGUgYW5kIEdldEFzeW5jS2V5U3RhdGUgYW5kCiAgICAgICAgbWVyZ2VkIG1vdXNlIGJ1dHRvbiBzdGF0ZXMgaW50byBHZXRLZXlib2FyZFN0YXRlLgoKICAgICAgICAqIFtsb2FkZXIvcmVzb3VyY2UuY10gW2luY2x1ZGUvYWNjZWwuaF0KICAgICAgICBBZGRlZCByZWNvZ25pdGlvbiBvZiBTSElGVCwgQ09OVFJPTCBhbmQgQUxUIGtleXMgdG8KICAgICAgICBUcmFuc2xhdGVBY2NlbGVyYXRvci4KCiAgICAgICAgKiBbb2JqZWN0cy9tZXRhZmlsZS5jXSBbb2JqZWN0cy9mb250LmNdIFtvYmplY3RzL2JpdGJsdC5jXQogICAgICAgIEEgYml0IG1vcmUgbWV0YWZpbGUgc3VwcG9ydC4KClN1biBKdW4gMTkgMTc6Mjk6MDAgTUVUIERTVCAxOTk0ICBFcmlrIEJvcyAoZXJpa0BoYWNrdGljLm5sKQoKICAgICAgICAqIFtsb2FkZXIvcmVzb3VyY2UuY10KICAgICAgICBTaXplb2ZSZXNvdXJjZSgpIGFuZCBBbGxvY1Jlc291cmNlKCkgYWRkZWQsIEFjY2Vzc1Jlc291cmNlKCkgdXBkYXRlZC4KCiAgICAgICAgKiBbaWYxNjMyL2tlcm5lbC5zcGVjXQogICAgICAgIEZyZWVMaWJyYXJ5KCkgdXNlZCBmb3IgRnJlZU1vZHVsZSgpLgoKICAgICAgICAqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCiAgICAgICAgUmVjdGFuZ2xlKCk6IHN3YXAgbGVmdCAmIHJpZ2h0IGNvcm5lcnMgd2hlbiByaWdodCA8IGxlZnQsCiAgICAgICAgc3dhcCB0b3AgJiBib3R0b20gd2hlbiBib3R0b24gPCB0b3AuCgpKdW4gMTksIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFtjb250cm9scy9jb21iby5jXQoJRml4IGJ1ZyBpbiB3aW5kb3cgc3R5bGUgb2YgdGhlIGFzc29jaWF0ZWQgbGlzdGJveC4KCgkqIFtjb250cm9scy9tZW51LmNdCglTa2lwIHNlcGFyYXRvcnMgaW4ga2V5Ym9hcmQgbmF2aWdhdGlvbiBieSB1c2luZyBuZXcgaW50ZXJuYWwgCgkJZnVuY3Rpb25zIFNlbGVjdFByZXZJdGVtKCkgJiBTZWxlY3ROZXh0SXRlbSgpLAoKCSogW21pc2MvcHJvZmlsZS5jXQoJQnVnIGZpeCBpbiBHZXRQcml2YXRlUHJvZmlsZUludCgpLCB3YXMgbGltaXRlZCB0byA0IGRpZ2l0LAoJCUludEJ1ZiBtdXN0IGJlIGFsbG9jIHRvICg1KzEpPTYuIGNoYXIgaW5zdGVhZCBvZiA1LgoKCSogW21pc2MvbWFpbi5jXQoJUHV0IGNvZGUgaW4gZnVuY3Rpb25zIFNldEVudmlyb25tZW50KCkgJiBHZXRFbnZpcm9ubWVudCgpLgoKCSogW21pc2Mvc2hlbGwuY10KCVN0YXJ0IHB1dHRpbmcgc29tZSBjb2RlIGluIEV4dHJhY3RJY29uKCkgZnVuY3Rpb24uCgoJKiBbbWlzYy9tbXN5c3RlbS5jXQoJU29tZSBjb2RlIGZvciBNTVRpbWVyIGZ1bmN0aW9ucyAmIHRpbWVycyBsaXN0LgoKCSogW21pc2NlbXUvaW50MzEuY10KCUZldyBzdHVicyBmb3IgRFBNSSBpbnRlcnJ1cHQgY2FsbHMuIE5vdGhpbmcgd29yayB5ZXQuCgpNb24gSnVuIDIwIDA3OjM3OjQzIEVEVCAxOTk0CUpvaG4gUmljaGFyZHNvbiAoanJpY2hhcmRAY3MudW1sLmVkdSkKCgkqIGluY2x1ZGUvd2luLmggKHRhZ1dORCk6CglBZGRlZCBpY29uIGZpZWxkcyBpY29uLCBoSWNvbiBhbmQgcmVjdENsaWVudFNhdmUgdG8gCgl0aGUgdGFnV05EIHN0cnVjdC4KCgkqIHdpbmRvd3MvSW1ha2VmaWxlCglBZGRlZCBpY29uLmMgdG8gdGhlIGxpc3Qgb2YgZmlsZXMgdG8gY29tcGlsZQoKCSogd2luZG93cy9kY2UuYyAoR2V0RENFeCk6CglBZGRlZCBzb21lIGNoZWNrcyBmb3IgaWNvbmljIG1vZGUgYW5kIHBhc3MgaWNvbiB3aW5kb3cgYXMgZHJhd2FibGUsCglub3QgdGhlIHJlYWwgd2luZG93LgoKCSogd2luZG93cy9kZWZ3bmQuYyAoRGVmV2luZG93UHJvYykKCUFkZGVkIFBBSU5USUNPTiBkZWZhdWx0IHdpbmRvd3MgcHJvY2VkdXJlLgoKCSogd2luZG93cy9ldmVudC5jIChFVkVOVF9FeHBvc2UpCglBZGRlZCBjaGVjayBmb3IgaWNvbmljIHdpbmRvdyBleHBvc2UuIElmIGljb25pYyB3aW5kb3cgaXMgZXhwb3NlZAoJc2VuZCBhIFdNX1BBSU5USUNPTiBtZXNzYWdlCgoJKiB3aW5kb3dzL2ljb24uYyAKCU5ldyBmaWxlLiAgSUNPTl9JY29uaWZ5LCBJQ09OX2ZpbmRJY29uRnJvbVBvaW50LCBJQ09OX0RlaWNvbmlmeS4KCgkqIHdpbmRvd3MvbWRpLmMgKERlZk1ESUNoaWxkUHJvYykKCVRlc3QgZm9yIElzSWNvbmljIGR1cmluZyBhIFNDX1JFU1RPUkUsIHRoaXMgZG9lc24ndCB3b3JrIHlldC4KCgkqIHdpbmRvd3MvbWVzc2FnZS5jIChoYXJkd2FyZV9ldmVudCkKCUxvb2tzIGZvciBpY29uIGFzIHdlbGwgYXMgd2luZG93IG5vdy4KCgkqIHdpbmRvd3Mvbm9uY2xpZW50LmMgKE5DX0hhbmRsZVN5c0NvbW1hbmQsIE5DX0RvTkNQYWludEljb24pCglBZGRlZCBpY29uaWZ5L2RlaWNvbmlmeSBpbiBOQ19IYW5kbGVTeXNDb21tYW5kLCBuZXcgZnVuY3Rpb24KCU5DX0RvTkNQYWludEljb24gd2hpY2ggcGFpbnRzIGFuIGljb24uCgoJKiB3aW5kb3dzL3BhaW50aW5nLmMgKEJlZ2luUGFpbnQpCglNYWRlIGEgQmVnaW5QYWludCBzZWxlY3QgdGhlIFNUT0NLX0JMQUNLX1BFTiwgU1RPQ0tfV0hJVEVfQlJVU0gsCglhbmQgU1RPQ0tfU1lTVEVNX0ZPTlQgb2JqZWN0cyBzaW5jZSB0aGlzIGlzIChob3BlZnVsbHkpIGRlZmF1bHQKCXdpbmRvd3MgYmVoYXZpb3IuCgoJKiB3aW5kb3dzL3dpbi5oIChDcmVhdGVXaW5kb3dFeCkKCVNldCB0aGUgZGVmYXVsdCBiYWNrZ3JvdW5kIGNvbG9yIG9mIGEgd2luZG93IHRvIGJlIHdoaXRlLgoJQ3JlYXRlIGljb24gd2luZG93LCB0dXJuIG9mZiBNSU5JTUlaRSBpZiBpdCBpcyBvbiwgc2luY2UKCUkgZG9uJ3Qga25vdyB3aGF0IHRvIGRvIHdpdGggaXQgYXMgb2YgeWV0Li4uIHJlZ2lzdGVyCgl0aGUgaWNvbiB3aXRoIHRoZSBod25kIG9mIGl0cyB3aW5kb3cgc28gd2UgY2FuIGlkZW50aWZ5IHdoZXJlCglpY29uIG1lc3NhZ2VzIGFyZSBjb21pbmcgZnJvbS4KCk1vbiBKdW4gMjAgMTA6MTU6NTkgMTk5NCAgTWlndWVsIGRlIEljYXphICAobWlndWVsQHNwaGlueCkKCgkqIHdpbmRvd3MvZXZlbnQuYzogQWRkZWQgYSBoYWNrIHRvIGRlZmluZSBYUG9pbnRlciB3aGVuIHVzaW5nCglYMTFSNC4gCgoJKiB0b29sa2l0L2hlbGxvLmM6IFRlc3QgYXBwbGljYXRpb24gZm9yIFdpbmVMaWIuIFRvIGNvbXBpbGUgeW91J2xsCgluZWVkOiBnY2MgLUlpbmNsdWRlIC1EV0lORUxJQiAtZyBoZWxsby5jIC1jLCBhbmQgdG8gbGluayB5b3UnbGwKCW5lZWQ6IGdjYyBoZWxsby5vIGxpYndpbmUuYSAtbFgxMSAtTC91c3Ivb3Blbndpbi9saWIgLWxtIAoKCSogdG9vbGtpdC9oZWFwLmM6IEV4dGVuZGVkIHRoZSBzaXplIG9mIHRoZSBibG9jayBzaXplIHBlciBjaHVuay4KCgkqIG1pc2Mvc3RyZXNzLmMgKEdldEZyZWVGaWxlSGFuZGxlcyk6IEZpeGVkIHR5cG8uCgoJKiBtaXNjL21haW4uYyAobWFpbik6IENoYW5nZXMgdG8gYWxsb3cgY29tcGlsYXRpb24gdW5kZXIgU3VuT1MuIAoKCSogbG9hZGVyL2xpYnJhcnkuYzogQ2hhbmdlZCBzb21lIGlmZGVmcyB0byBjb21waWxlIFdpbmVMaWIuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBKdW4gMTQgMDg6MDk6MTQgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIGxvYWRlci9zZWxlY3Rvci5jIChHZXRDdXJyZW50UERCKTogCglBZGRlZCB0cml2aWFsIGZ1bmN0aW9uIEdldEN1cnJlbnRQREIoKSB3aGljaCByZXR1cm5zIHRoZSBwcm9ncmFtCglzZWdtZW50IHByZWZpeCBzZWxlY3Rvci4KCgkqIG1lbW9yeS9oZWFwLmMgKEhFQVBfRnJlZSk6IAoJSWYgZnJlZSBsaXN0IGlzIGVtcHR5LCBtYWtlIHRoZSBmcmVlZCBibG9jayB0aGUgZnJlZSBsaXN0LgoKRnJpIEp1biAxMCAwNzo1Njo0OSAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogY29udHJvbHMvZWRpdC5jIChFRElUX1NldFRleHRNc2cpOiAKCURvIG5vdCBhcHBlbmQgYSBuZXdsaW5lIGF0IHRoZSBlbmQgb2YgdGhlIGxhc3QgbGluZS4KCgkqIHdpbmRvd3MvZXZlbnQuYyAoU2V0Q2FwdHVyZSk6IAoJU2V0IHdpbkhhc0N1cnNvciBpZiBtb3VzZSBjYXB0dXJlIHN1Y2NlZWRzLgoKSnVuIDEzLCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJRml4IGJ1ZyBpbiBsaXN0Ym94IDogSW5zZXJ0U3RyaW5nIHNob3VsZCBjYWxsIEFkZFN0cmluZyBpZiAtMS4KCgkqIFtjb250cm9scy9tZW51LmNdCglOZXcgZnVuY3Rpb24gR2V0TWVudVN0YXRlKCkuCgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJVHJ5IHRvIG1ha2UgU2hvd1Njcm9sbEJhcigpIHJlY2FsYyBOQ18gcmVnaW9ucy4gTm90IGZpbmlzaGVkICEKCgkqIFtvYmplY3RzL3RleHQuY10KCUFkZCBTdHViIGZvciBUYWJiZWRUZXh0T3V0KCksIHdoaWNoIHRlbXBvcmFyZWx5IGNhbGwgVGV4dG91dCgpLgoKCSogW3dpbmRvd3Mva2V5Ym9hcmQuY10gW3dpbmRvd3MvZXZlbnQuY10KCU5ldyBmdW5jdGlvbiBHZXRLZXlCb2FyZFN0YXRlKCkgd2l0aCBhbiBLZXlTdGF0ZVRhYmxlIGFycmF5CgkJJiBhc3NvY2lhdGVkIGhhbmRsaW5nIGluIGZ1bmN0aW9uIEVWRU5UX2tleSgpLgoKTW9uIEp1biAxMyAxNjo0NToyNCBNRVQgRFNUIDE5OTQgKGVyaWtAaGFja3RpYy5ubCkKCiAgICAgICAgKiBbY29udHJvbHMvbWVudS5jXQogICAgICAgIElzTWVudSgpIGFkZGVkLgoKICAgICAgICAqIFtsb2FkZXIvbGlicmFyeS5jXQogICAgICAgIE1vZHVsZUZpcnN0KCksIE1vZHVsZU5leHQoKSwgTW9kdWxlRmluZE5hbWUoKSwgTW9kdWxlRmluZEhhbmRsZSgpCiAgICAgICAgYWRkZWQuCgogICAgICAgICogW29iamVjdC9nZGlvYmouY10KICAgICAgICBJc0dESU9iamVjdCgpIGFkZGVkLgoKICAgICAgICAqIFttaXNjZW11L2ludDJbNTZdLmNdCiAgICAgICAgYnVnZml4OiBib3RoIGRpZG4ndCBsZWF2ZSBmbGFncyBwdXNoZWQgb24gMTZiaXQtc3RhY2suCiAgICAgICAgKHdpbmZpbGUgZ2V0cyBhIGJpdCBmdXJ0aGVyKQoKICAgICAgICAqIFttaXNjZW11L2ludDE2LmNdCiAgICAgICAgQWRkZWQgKGVtcHR5KS4KClNhdCBKdW4gMTEgMjI6NTY6NDggMTk5NCBKb24gVG9tYnMgKGpvbkBlc2l4Mi51cy5lcykKCSogd2luZG93cy9ldmVudC5jOgoJQWRkZWQgY29kZSB0byBkcm9wIHJlZHVuZGFudCBtb3Rpb24gRXZlbnRzIGluIHRoZSBYRXZlbnQgcXVldWUuCgpUaHUgSnVuICA5IDEwOjU1OjU1IE1FVCBEU1QgMTk5NCAgSm9jaGVuIEhlaW4gKCBIZWluQFN0dWRlbnQuVFUtQ2xhdXN0aGFsLmRlICkKCgkqIFttaXNjL21haW4uYyBtaXNjL21lc3NhZ2UuYyBpbmNsdWRlL3RleHRzLmhdCglSZW1vdmVkIHRoZSB0ZXh0LWNvbnN0YW50cyBmcm9tIG1lc3NhZ2UuYyBpbnRvIHZhcmlhYmxlcwoJd2hpY2ggbWF5IGJlIGNoYW5nZWQgZnJvbSBYLXJlc291cmNlcy4KCgkqIFttaXNjL21haW4uYyBtaXNjL21lc3NhZ2UuY10KCWFkZGVkIDxsb2NhbGUuaD4gYW5kIHNldGxvY2FsZSgpIHRvIG1haW4uYywgdXNlZCB0b3VwcGVyKCkgaW4gbWVzc2FnZS5jCgpNb24sIDEzIEp1biA5NCAwOTo0MToxNiAtMDUwMCBQYXVsIEJyYW1lbCA8cGF1bGJyQGNvbW0ubW90LmNvbT4KCiAgICAgICAgKiBjb250cm9scy9idXR0b24uYyAoIFtDUl1CX0xCdXR0b24qICkgCiAgICAgICAgbGVmdCByYy5yaWdodCBhdCBmdWxsIHdpbmRvdyB3aWR0aCBzbyBjbGljayBvbiBsYWJlbCBhbHNvIAogICAgICAgIGFjdGl2YXRlcyB0aGUgY29udHJvbCAoTVNXaW4gYmVoYXZpb3IpCgpTYXQgSnVuIDExIDE5OjA1OjQwIDE5OTQgIE9sYWYgRmxlYmJlICAoZmxlYmJlQHRhdC5waHlzaWsudW5pLXR1ZWJpbmdlbi5kZSkKCiAgICAgICAgKiBpbmNsdWRlL3dpbmRvd3MuaDoKICAgICAgICAgIGZ1bmN0aW9ucyBwb2ludGVycyBjYW4gbm90IGJlIHBhY2tlZC4KICAgICAgICAgIChhbm5veWluZyB3YXJuaW5ncyB3aXRoIGZvcnRoY29tbWluZyBnY2MtMi42LngpCiAgICAgICAgCiAgICAgICAgKiBsb2FkZXIvbWFpbi5jIChJbml0RExMKTogCiAgICAgICAgICBGaXhlZCBhIHByaW50ZiBzdGF0ZW1lbnQuIChmb3IgY29udHJvbC5leGUpIAoKICAgICAgICAgIChJbml0aWFsaXplTG9hZGVkRExMcyk6IAogICAgICAgICAgZGVsZXRlZCBzaGFkb3cgZGVmaW5pdGlvbiBvZiAgKndwbnQuCiAgICAgICAgICAoQnJlYWtzIG1hbnkgcHJvZ3JhbXMsIGJlY2F1c2Ugbm93IENPTU1ETEcgd2lsbCBiZQogICAgICAgICAgIGluaXRpYWxpemVkIDotKAoKICAgICAgICAqIHdpbmRvd3Mvd2luLmMgKFNldFdpbmRvd1RleHQpOiAKICAgICAgICAgIGFkZGVkIG1pc3NpbmcgYnJlYWtzOyAoUEVOU0FURSBzdGFydHMpIAoKICAgICAgICAqIHdpbmRvd3MvZ3JhcGhpY3MuYyAoRmxvb2RGaWxsKTogCiAgICAgICAgICBQcm9wZXIgYm91bmRhcnlzLiAoQkFOR0JBTkcgc3RhcnRzKSBGbG9vZEZpbGVfcmVjIHNob3VsZAogICAgICAgICAgYmUgcmV3cml0dGVuLgoKICAgICAgICAqIG9iamVjdHMvZm9udC5jIChGT05UX0dldE1ldHJpY3MpOiAKICAgICAgICAgIFRZUE86IHVzZSBmb250LT5wZXJjaGFyIG9ubHkgaWYgaXQgaXMgZGVmaW5lZC4gKFdSSVRFIHN0YXJ0cykKClN1biBKdW5lIDEyLCBQZXRlciBCcm9hZGh1cnN0IChwYnJAdWEubndsLmFjLnVrKQogICAgICAgIGNvbnRyb2xzL3Njcm9sbC5jOgogICAgICAgIEZpeGVzIGZvciBpbXByb3ZlZCBiZWhhdmlvdXIgd2hlbiBkcmFnZ2luZyB0aHVtYjsKICAgICAgICBBZGRlZCBTQl9USFVNQlBPU0lUSU9OIG1lc3NhZ2Ugd2hlbiB0aHVtYiBpcyByZWxlYXNlZC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVHVlIEp1biAgNyAwODo0MToyNyAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogbG9hZGVyL3NlbGVjdG9yLmMgKEZpeHVwRnVuY3Rpb25Qcm9sb2dzKTogCglOZXcgZnVuY3Rpb24gdG8gZml4dXAgbG9hZGVkIERMTCBmdW5jdGlvbiBwcm9sb2dzLiAgSXQgcmVwbGFjZXMgdGhlCglkbyBub3RoaW5nIGNvZGUgd2l0aCBjb2RlIHRoYXQgbG9hZHMgRFMgd2l0aCB0aGUgYXBwcm9wcmlhdGUgZGF0YQoJc2VnbWVudCBmb3IgdGhlIERMTC4KCgkqIG1pc2MvY3Vyc29yLmMgKExvYWRDdXJzb3IpOiAKCURpc2FibGVkIGN1cnNvciBsb2FkaW5nIGZyb20gLkVYRSBvciAuRExMLiAgVGhlIGNvZGUgbmVlZHMgdG8gaGFuZGxlCgl0aGUgcG9zc2liaWxpdHkgb2YgbXVsdGlwbGUgY3Vyc29ycyBpbiBhIHNpbmdsZSBkaXJlY3RvcnkuICBBbHNvLAoJaXQgc2hvdWxkIGNoZWNrIHRvIHNlZSBpZiB0aGUgY3Vyc29yIGlzIHRoZSByaWdodCBzaXplLgoKCSogb2JqZWN0cy9mb250LmMgKEVudW1Gb250cyk6IAoJQ2hlY2tlZCBmb3IgbHBMb2dGb250TGlzdFtpXSA9PSBOVUxMCgoJKiBvYmplY3RzL2dkaW9iai5jIChTZXRPYmplY3RPd25lcik6IAoJUmVtb3ZlZCBzdHViLiAgUmVwbGFjZWQgd2l0aCBzaW1wbGUgcmV0dXJuIGluIGdkaS5zcGVjLiAgVGhpcwoJZnVuY3Rpb24gaXMgbm90IGRlZmluZWQgZm9yIHRoZSByZXRhaWwgdmVyc2lvbiBvZiBXaW5kb3dzLgoKCSogbWVtb3J5L2hlYXAuYyAoV0lOMTZfTG9jYWxIYW5kbGVEZWx0YSk6IAoJTmV3IGZ1bmN0aW9uLiAgVGhpcyBpcyByZWFsbHkgYSBkdW1teSB0aGF0IGltaXRhdGVzIHRoZSBwcm9wZXIKCXJldHVybiB2YWx1ZXMuCgoJKiBsb2FkZXIvbGlicmFyeS5jIChHZXRQcm9jQWRkcmVzcyk6IAoJRml4ZWQgZGVmaW5pdGlvbiBvZiBJU19CVUlMVElOX0RMTCgpIG1hY3JvLgoKTW9uIEp1biAgNiAxODoxNTo0MCAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogbWlzY2VtdS9pbnQyMS5jIChTZWVrRmlsZSk6IAoJTmVlZGVkIHRvIHJldHVybiBjdXJyZW50IHBvc2l0aW9uIGluIERYOkFYLgoKCSogd2luZG93cy91dGlsaXR5LmMgKHdpbmRvd3Nfd3NwcmludGYpOiAKCUFkZGVkIHN1cHBvcnQgZm9yICcjJyBpbiBmb3JtYXQsIGFuZCBmaXhlZCBidWcgd2l0aCAicHRyIiBiZWluZwoJaW5jcmVtZW50ZWQgdG9vIG1hbnkgdGltZXMuCgoJKiBtaXNjZW11L2ludDIxLmMgKE9wZW5FeGlzdGluZ0ZpbGUpOiAKCUFkZCBjb2RlIHRvIGhhbmRsZSBvcGVuaW5nIGZpbGVzIHJlYWQtb25seSBhbmQgd3JpdGUtb25seS4KCgkqIGxvYWRlci93aW5lLmM6CglTZWdtZW50IGZpeHVwcyBub3cgZG9uZSBpbiBMb2FkSW1hZ2UgaW5zdGVhZCBvZiBfV2luTWFpbi4gIFRoaXMKCWlzIG5lY2Vzc2FyeSB0byBzdXBwb3J0IExvYWRMaWJyYXJ5KCkuCgpTdW4gSnVuICA1IDE3OjM0OjI0IDE5OTQgIEVyaWsgQm9zIChlcmlrQGhhY2t0aWMubmwpCgoJKiBbbG9hZGVyLypdCgkJLSBmaXhlZDogR2V0TW9kdWxlSGFuZGxlKCkgc29tZXRpbWVzIHJldHVybmVkCgkJICBhIHdyb25nIGhhbmRsZS4KCQktIGRvbid0IGluaXQgZGxscyB3aGVuIGNzID09IDAgKGx6ZXhwYW5kLCBkb2Vzbid0CgkJICBzZWVtIHRvIGhhdmUgYSBpbml0IGZ1bmN0aW9uKQoJCS0gTG9hZExpYnJhcnkgJiBMb2FkSW1hZ2Ugbm93IHJldHVybiBlcnJvciBpbnN0ZWFkCgkJICBvZiBzdG9wcGluZyB3aW5lLgoJCS0gbW92ZWQgbW9zdCBvZiBORS1mdW5jdGlvbnMgaW50byBvbmUgZmlsZS4KCQktIExvYWRMaWJyYXJ5KCkgdXNlcyB3X2ZpbGVzIGxpc3QgaW5zdGVhZCBvZiBpdHMKCQkgIG93biBsaXN0LgoJCS0gTkUgZXhlY3RhYmxlcyBhcmUgbm93IGZpeGVkLXVwIGFuZCBpbml0aWFsaXNlZCB3aGVuCgkJICBsb2FkZWQgaW5zdGVhZCBvZiBvbmx5IG9uY2UgYmVmb3JlIGNhbGxpbmcgSW5pdFRhc2suCgoJKiBbbWlzY2VtdS9pbnQxNS5jXSBbbWlzY2VtdS9pbnQzMS5jXQoJQWRkZWQuCQoKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJU3R1YnMgYWRkZWQgZm9yIHtHZXR8U2V0fVNlbGVjdG9yTGltaXQoKSwge0dldHxTZXR9U2VsZWN0b3JCYXNlKCkuCgoJKiBbbWlzYy9tYWluLmNdCglTdHViIGFkZGVkIGZvciBJc1JvbU1vZHVsZSgpLgoKCSogW21pc2NlbXUvaW50MjEuY10KCVNvbWUgY2xlYW51cCwgYWRkZWQgaGVhcCBmb3IgcmV0dXJuaW5nIGRhdGEuCgpKdW4gNiwgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW3Rvb2xzL2J1aWxkLmNdCglDaGFuZ2UgTUFYX09SRElOQUxTCWRlZmluZSB0byBoaWdoZXIgdmFsdWUsIDEyOTkgZW50cmllcy4KCShNTVNZU1RFTSBkb2Vzbid0IGhhdmUgc3VjY2VzaXZlIG51bWJlcnMsIHNvbWUgYXJlIGFyb3VuZCAxMjAwKS4KCgkqIFt3aW5kb3dzL3V0aWxpdHkuY10KCUJ1ZyBmaXggaW4gd2luZG93c193c3ByaW50ZigpLCAodHdpY2UgaW5jcmVtZW50cyAuLi4pLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglCdWcgZml4IGluIFNldFdpbmRvd1BvcygpLCByZWRyYXcgd2FzIGRvbmUgaWYgZmxhZwoJCXdhcyBzZXQgdG8gU1dQX05PUkVEUkFXIHdoaWxlIFNXUF9TSE9XV0lORE9XKS4KCgkqIFttaXNjL21lc3NhZ2UuY10gW2NvbnRyb2xzL2NvbWJvLmNdCglBZGQgYW4gSW52YWxpZGF0ZVJlY3QoKSBpbiBXTV9TSE9XV0lORE9XIHRvIHN0YXRpc2Z5IHRoZSBuZXcgJ3NhdmV1bmRlcicuCgoJKiBbd2luZG93cy93aW4uY10KCUluIENyZWF0ZVdpbmRvd0V4KCksIGRvIFNldE1lbnUoKSBjYWxscyBhZnRlciB3aW5kb3cgY3JlYXRpb24sCgkJanVzdCBiZWZvcmUgc2VuZGluZyB0byBXTV9OQ0NBTENTSVpFLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUluIGZ1bmN0aW9uIFNldE1lbnUoKSwgbm93IHVzZSBTZXRXaW5kb3dQb3MoKSB3aXRoIAoJCWZsYWdzIFNXUF9GUkFNRUNIQU5HRUQgdG8gcmVhZGp1c3QgbWVudSBhcmVhLgoJRnVuY3Rpb24gTWVudUJhckNhbGNTaXplKCkgcmVkb25lLgoKU3VuIE1heSAyOSAxMTowODoyNCAxOTk0ICBEYXZpZCBCLiBUaG9tYXMgIChkdEB5ZW50YS5hYnEubm0udXMpCgogICAgICAgICogW29iamVjdHMvdGV4dC5jXQogICAgICAgIEZpeGVkIHByb2JsZW1zIGFzc29jaWF0ZWQgd2l0aCBEVF9XT1JEQlJFQUsgZmxhZy4gIFN0cmluZyBsZW5ndGgKICAgICAgICB3YXMgbm90IGJlaW5nIHByb3Blcmx5IGRlY3JlbWVudGVkIHdoZW4gbGluZXMgd2VyZSBmb2xkZWQsIGFuZAogICAgICAgIHdyYXBwaW5nIHdhcyBub3QgcGVyZm9ybWVkIHdoZW4gRFRfTk9DTElQIGFuZCBEVF9OT1BSRUZJWCB3ZXJlCiAgICAgICAgYm90aCBvbiBpbiBhZGRpdGlvbiB0byBEVF9XT1JEQlJFQUsuICBXaW5kb3dzIGRvZXMgd3JhcHBpbmcgaW4KICAgICAgICB0aGlzIGNhc2UsIGFuZCBub3cgc28gZG9lcyB3aW5lLgoKU3VuIEp1biAgNSAxOToxNzo0OSAxOTk0ICBPbGFmIEZsZWJiZSAgKG9sYWZAZHJhZ29uKQoKICAgICAgICAqIFtlZGl0LmNdCiAgICAgICAgY3AxIHdhcyB1bmluaXRpYWxpemVkIGlmZiBsaW5lbm8gPT0gMAoKICAgICAgICAqICBGaW5kRmlsZSB0ZXN0cyBmb3IgZXhpc3RhbmNlIG9mIGZpbGUgZXZlbiBpZiBhIGZ1bGwKICAgICAgICAgICBmaWxlbmFtZSB3YXMgc3VwcGxpZWQuIFdoYXQgYWJvdXQgdW5peCBmaWxlIG5hbWVzPwoKICAgICAgICAqIFtjb250cm9scy9saXN0Ym94IF0KICAgICAgICB3bmRQdHIgd2FzIHVuaW5pdGlhbGl6ZWQgZm9yIExCX1NFVFRPUElOREVYCgogICAgICAgICogW21pc2MvcHJvcGVydHkuY10gICAgIAogICAgICAgIERvIG5vdCBmcmVlIGxwUHJvcC4gSXMgaXQgcmVhbGx5IGFsbG9jYXRlZCBieSBtYWxsb2M/Cgl7ZWRpdGVkIGJ5IEJvYiBBbXN0YWR0OiBjaGFuZ2VkIGZyZWUoKSB0byBHbG9iYWxGcmVlKCl9CgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClNhdCBNYXkgMjggMTI6MDM6MjMgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIG1pc2NlbXUvaW50MjEuYyAoT3BlbkV4aXN0aW5nRmlsZSk6IAoJT3BlbkV4aXN0aW5nRmlsZSBuZWVkZWQgdG8gcmV0dXJuIGhhbmRsZSBpbiBBWCByZWdpc3RlciBpbnN0ZWFkCglvZiB0aGUgQlggcmVnaXN0ZXIuCgoJKiBtaXNjZW11L2ludDIxLmMgKGlvY3RsR2V0RGV2aWNlSW5mbyk6IAoJQWRkZWQgYSBsaXR0bGUgY29kZSB0byBnaXZlIGEgZmFrZSByZXN1bHQgZm9yIG5vcm1hbCBmaWxlcy4KCldlZCBNYXkgMjUgMjE6NTU6MzggMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglyZXR1cm4gdmFsdWUgZnJvbSBHbG9iYWxTaXplIHdhcyBjb21wbGV0ZWx5IHdyb25nLgoKCSogW21pc2NlbXUvaW50MjEuaF0KCWZpeGVkIGJ1ZyBpbiBGaW5kRmlyc3QuICBEaXJlY3RvcnkgcG9pbnRlciAoZHApIHdhcyBub3QgcGxhY2VkIGluCglkdGEgY29ycmVjdGx5LgoKCSogW3Rvb2xzL2J1aWxkLmNdCglmaXhlZCBjcmVhdGlvbiBvZiBwb3AuaCB0byBndWFyYW50ZWUgdGhhdCBmbGFncyBhcmUgcmVzdG9yZWQgY29ycmVjdGx5LgoKCSogW21pc2MvY29tbS5jXQoJY2hhbmdlZCBhbGwgb2NjdXJhbmNlIG9mIHN0cm5jbXAoKSB0byBzdHJuY2FzZWNtcCgpLgoJQnVpbGRDb21tRENCKCkgc2hvdWxkIG5vdCByZXF1aXJlIHRoYXQgT3BlbkNvbW0oKSBiZSBjYWxsZWQgZmlyc3QuCgoJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCglIZWFwIGluaXRpYWxpemVkIHRvIHNpemUgb2YgZnVsbCBzZWdtZW50IGxlc3Mgc3RhY2sgc2l6ZSBhbmQgCglhdXRvbWF0aWMgZGF0YSBzaXplLgoKU2F0IE1heSAyOCAwOToxNDozMyAxOTk0ICBSaWNrIFNsYWRrZXkgIChqcnNAd29ybGQuc3RkLmNvbSkKCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglDb3JyZWN0IHR5cG9zIGluIExpc3RCb3hSZXNldENvbnRlbnQgd2hlcmUgbHBscyB2YXJpYWJsZSBpcwoJdXNlZCB3aGVyZSBsc2xzMiB2YXJpYWJsZSBpcyBtZWFudC4gIERvbid0IGNhbGwgVVNFUl9IRUFQX0ZSRUUKCXR3aWNlIG9uIHRoZSBzYW1lIGhhbmRsZSBpZiBoRGF0YSBhbmQgaE1lbSBhcmUgdGhlIHNhbWUuCgoJKiBbZGVidWdnZXIvb3Bjb2Rlcy9pMzg2LWRpcy5jXQoJQWRkIG5ldyBuYW1lIGFycmF5IG5hbWVzX3JtdyBmb3IgdGFibGUgZHJpdmVuIGRlY29kaW5nIG9mIHRoZQoJMTYtYml0IG1vZC9ybSBmaWVsZC4gIE9taXQgbGFyZ2UgY2FzZSBzdGF0ZW1lbnQgaW4gT1BfRSBhbmQKCXJlcGxhY2Ugd2l0aCBhcnJheSByZWZlcmVuY2UgdG8gbWF0Y2ggZXhpc3RpbmcgY29kaW5nIHN0eWxlLgoJQWRkIG5ldyBzdGF0aWMgdmFyaWFibGUgbWFjaGluZSB3aXRoIHZhbHVlIDI4NiBvciAzODYgdG8KCWNvcnJlY3RseSBkZWNvZGUgbW9kL3JtIGZpZWxkIGluIGVpdGhlciAxNiBvciAzMiBiaXQgbW9kZXMuCglTZXQgaXQgaW4gcHJpbnRfaW5zbl9pezIsM304Ni4gIEluIE9QX0UgdXNlIGl0IHRvIGRlY2lkZSBob3cKCXRvIGRlY29kZSBtb2Qvcm0uICBXaGlsZSB0aGUgY29kZSB3YXMgY29ycmVjdCBmb3IgMTYgYml0IGNvZGUsCglpdCB3YXMgaW1wcm9wZXJseSBkZWNvZGluZyBtb2Qvcm0gZmllbGRzIG9uIHdvcmQgcHJlZml4ZWQKCTMyIGJpdCBpbnN0cnVjdGlvbnMuCgoJKiBbZGVidWdnZXIvZGVidWcubF0KCVJlY29nbml6ZSBuZXcgdG9rZW4gQUJPUlQuICAgUmVjb2duaXplIHNpbmdsZSBsZXR0ZXJzICdwJwoJYW5kICdxJyBhcyB0b2tlbnMuCgoJKiBbZGVidWdnZXIvZGJnLnldCglBZGQgbmV3IHRva2VuIEFCT1JULiAgQWxsb3cgcHJpbnQgY29tbWFuZCB0byBiZSBpbnZva2VkIGJ5CgkncCcgYW5kIHF1aXQgY29tbWFuZCBieSAncScsIGFsYSBHREIuICBDaGFuZ2UgbG90cyBvZiAnfTsnCgl0byBqdXN0ICd9Jy4gIEFkZCBzdGF0aWMgZHVtbXlfcmVncyB0byB3aW5lX2RlYnVnIHNvIHRoYXQKCXdpbmVfZGVidWcoMCwgTlVMTCkgZG9lc24ndCBjb3JlIGR1bXAgd2l0aCBxbWFnaWMuCgoJKiBbZGVidWdnZXIvaW5mby5jXQoJQ29ycmVjdCBzeW50YXggb2YgYnJlYWsgY29tbWFuZCBpbiBoZWxwdGV4dCBhbmQgb21pdCBmb3JtZXIKCWNvbW1lbnQgYWJvdXQgcHJvYmFibGUgYnVnZ2luZXNzIG9mIHRoZSBkaXNhc3NlbWJseSBzaW5jZSBpdAoJaXMgbm93IGNvcnJlY3QuICBDaGFuZ2UgZnByaW50ZiBvZiBmaXJzdCBiYWNrdHJhY2Ugc3RhY2sKCWZyYW1lIHRvIG1hdGNoIHRoYXQgb2YgdGhlIHNlY29uZCBhbmQgc3Vic2VxdWVudCBmcmFtZXMuCgoJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCglDaGFuZ2UgY29uc3RydWN0aW9uIG9mIGNvbW1hbmQgbGluZSBpbiBDcmVhdGVQU1AgZnJvbSBjcmVhdGluZwoJYSBzdHJpbmcgdGhhdCBsb29rcyBsaWtlICJhcmcxIGFyZzIgXHIiIHRvICJhcmcxIGFyZzIiLiAgQSBET1MKCVBTUCBjb21tYW5kIGxpbmUgbG9va3MgbGlrZSAiIGFyZzEgYXJnMlxyIiB3aXRoIHRoZSBsZW5ndGggbm90CglpbmNsdWRpbmcgdGhlIHRyYWlsaW5nICJcciIgYnV0IHRoYXQgaXMgbm90IGhvdyBXaW5kb3dzIGRvZXMgaXQuCgoJKiBbbG9hZGVyL2xpYnJhcnkuY10KCUNoYW5nZSB1c2VzIG9mICVzIHRvIHByaW50IHN0cmluZ3MgaW4gR2V0TW9kdWxlSGFuZGxlIHRvICV4IHNvCgl0aGF0IHN0cmluZyBJRHMgZG9uJ3QgY2F1c2UgYSBjb3JlIGR1bXAgd2l0aCBxbWFnaWMuICBIYW5kbGUKCWNvbnZlcnRpbmcgYSBzdHJpbmcgaWQgdG8gYSBsaXRlcmFsIG1vZHVsZSBoYW5kbGUuICBGb3IKCWV4YW1wbGUsIEdldE1vZHVsZUhhbmRsZSgoTFBTVFIpIDB4NTcpIG5vdyByZXR1cm5zIDB4NTcgaWYKCWl0IGlzIGEgcmVhbCBtb2R1bGUgaGFuZGxlLgoKCSogW21pc2MvbWVzc2FnZS5jXQoJSW4gTWVzc2FnZUJveCwgdHJhbnNsYXRlIGEgTlVMTCB0aXRsZSBhcmd1bWVudCB0byB0aGUgc3RyaW5nICJFcnJvciIuCgoJKiBbbWlzYy9wcm9maWxlLmNdCglJbiBHZXRTZXRQcm9maWxlIHRyYW5zbGF0ZSBhIE5VTEwgRGVmYXVsdCBhcmd1bWVudCB0byAiIi4gIEFueQoJY2FsbGVyIHdob3NlIERlZmF1bHQgYXJndW1lbnQgaXMgTlVMTCBpcyBidWdneSwgYnV0IENIQVJNQVAgZG9lcyBpdAoJYW55d2F5LgoKCSogW29iamVjdHMvZm9udC5jXQoJQWRkIE5VTEwgcG9pbnRlciBjaGVja3MgaW4gRW51bUZvbnRGYW1pbGllcyB0byBwcmV2ZW50IGNvcmUgZHVtcHMuCgpTYXQgTWF5IDI4IDIwOjAxOjUxIDE5OTQgSm9uIFRvbWJzIChqb25AZ3RleDAyLnVzLmVzKSAKCgkqIE5ldyBvcHRpb25zL3Jlc291cnNlcyBub3NhdmV1bmRlcnMgYW5kIG5vYmFja2luZ3N0b3JlLiAgQnkgCglkZWZhdWx0IGJhY2tpbmdzdG9yZSBhbmQgc2F2ZXVuZGVycyBhcmUgbm93IGVuYWJsZWQsIHRoZXNlIHVzZSAKCW1vcmUgbWVtb3J5IGJ1dCBhdm9pZHMgdGhvc2Ugc2xvdyAoc29tZXRpbWVzIG11bHRpcGxlKSByZWRyYXdzIAoJY2F1c2VkIGJlIGV4cG9zdXJlIGV2ZW50cy4KCk1heSAzMCwgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW21pc2MvZHJpdmVyLmNdIE5ldyBmaWxlCglTa2VsZXRvbiBmb3IgJ0luc3RhbGxhYmxlIFdpbmUgRHJpdmVycycgZnVuY3Rpb25zLiA6LSkKCSogW21pc2MvYXVkaW8uY10gTmV3IGZpbGUKCVNrZWxldG9uIGZvciBiYXNpYyAnQXVkaW8gRHJpdmVyJyBmdW5jdGlvbnMuCgkqIFttaXNjL25ldHdvcmsuY10gTmV3IGZpbGUKCVN0dWJzIGZvciBmZXcgbmV0d29ya2luZyBmdW5jdGlvbnMuCgoJKiBbbWlzYy9tbXN5c3RlbS5jXQoJTW9yZSBjb2RpbmcgLi4uIGEgZHVzdCBpbiBhIGdhbGF4eSAuLi4KCSogW21pc2Mvc2hlbGwuY10KCVNvbWUgY29kaW5nIGZvciAnUmVnWFhYJyBmdW5jdGlvbnMgLi4uIGEgZHVzdCBpbiB0aGUgd2luZCAuLi4KCgkqIFttaXNjL3Byb2ZpbGUuY10KCUJ1ZyBmaXggaW4gR2V0U2V0UHJvZmlsZSgpLCBiYWQgZW51bWVyYXRpb24gaWYgS2V5TmFtZSA9PSBOVUxMLgoKCSogW29iamVjdHMvZ2RpLmNdCglOZXcgZnVuY3Rpb24gQ3JlYXRlRGlzY2FyZGFibGVCaXRtYXAoKSwgaXQganVzdCBjYWxsaW5nIAoJQ3JlYXRlQ29tcGF0aWJsZUJpdG1hcCgpIGZvciBub3cuIEl0J3MgZ2V0ICdjbG9jay5leGUnIHJ1bm5pbmcgISA6LSkKCgkqIFtjb250cm9scy9saXN0Ym94LmNdCgkqIFtjb250cm9scy9jb21iby5jXQoJTmV3IGZvbnQgbWVtYmVyIGFzc2lnbmVkIHRvIFNZU1RFTV9GT05UIGFzIGRlZmF1bHQuCglBZGRlZCBwcm9jZXNzaW5nIGZvciBXTV9TRVRGT05UIG1lc3NhZ2U7CgoKVHVlIE1heSAzMSAyMDozNDoyNSBFRFQgMTk5NCAgSm9obiBSaWNoYXJkc29uIDxqcmljaGFyZEBjcy51bWwuZWR1PgoKICAgICAgICAqIFt3aW5kb3dzL2V2ZW50LmNdCiAgICAgICAgQWRkZWQgQXN5bmNNb3VzZUJ1dHRvbnNTdGF0ZXMgYXJyYXkgZm9yIEdldEFzeW5jS2V5U3RhdGUuCgogICAgICAgICogW3dpbmRvd3Mva2V5Ym9hcmQuY10KICAgICAgICBJbXBsZW1lbnRlZCBiZWdpbm5pbmcgb2YgR2V0QXN5bmNLZXlTdGF0ZS4KCldlZCBNYXkgMjUgMjM6MzU6MDMgMTk5NCAgRGF2aWQgTWV0Y2FsZmUgPGRhdmlkQHByaXNtLmRlbW9uLmNvLnVrPgoKICAgICAgICAqIFtvYmplY3RzL21ldGFmaWxlLmNdIFtpbmNsdWRlL21ldGFmaWxlLmhdCiAgICAgICAgICBbd2luZG93cy9tYXBwaW5nLmNdIFtvYmplY3RzL2NsaXBwaW5nLmNdIFtvYmplY3RzL2JpdGJsdC5jXQogICAgICAgICAgW3dpbmRvd3MvZGMuY10KICAgICAgICBGdXJ0aGVyIG1ldGFmaWxlIHN1cHBvcnQuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCk1vbiBNYXkgMjMgMTU6MDc6MzYgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCUFsbG9jYXRlIGhlYXAgYW5kIHN0YWNrIHNlZ21lbnRzIGFzIDY0ay4KClNhdCBNYXkgMjEgMDE6MTU6NDkgMTk5NCAgUmljayBTbGFka2V5ICAoanJzQHdvcmxkLnN0ZC5jb20pCgogICAgICAgICogW2xvYWRlci9zZWxlY3Rvci5jXQogICAgICAgIENvcnJlY3QgdHlwb3Mgd2hlcmUgbWVtY3B5IGlzIHVzZWQgaW5zdGVhZCBvZiBtZW1zZXQuCgogICAgICAgICogW2xvYWRlci9yZXNvdXJjZS5jXQogICAgICAgIEFsbG93IGZvciBsZWdpdGltYXRlIGNhc2VzIHdoZXJlIGJpU2l6ZUltYWdlIGlzIDAgaW4gTG9hZEljb24KICAgICAgICBieSBjYWxjdWxhdGluZyB0aGUgdmFsdWUgd2hlbiB0aGUgYml0bWFwIGlzIG5vdCBjb21wcmVzc2VkLgoKICAgICAgICAqIFttaXNjZW11L2ludDIxLmNdCiAgICAgICAgRml4IE5VTEwgZGVyZWZlcmVuY2UgY2F1c2VkIGJ5IHN1cGVyZmx1b3VzIERPU19jbG9zZWRpciBpbiBGaW5kTmV4dC4KCiAgICAgICAgKiBbbG9hZGVyL3Jlc291cmNlLmNdCiAgICAgICAgTmV3IGZ1bmN0aW9uIHR5cGVfbWF0Y2ggdG8gaGFuZGxlIHN0cmluZyByZXNvdXJjZSB0eXBlcyBhcwogICAgICAgIHdlbGwgYXMgSURzLiAgSW4gYWRkaXRpb24sIGNvbXBhcmUgb25seSBsb3cgNCBiaXRzIG9mIHR5cGVfaWQKICAgICAgICB3aGVuIGJvdGggbnVtYmVycyBhcmUgSURzIHNvIHRoYXQgMHgwMDAyIG1hdGNoZXMgMHg4MDAyLgogICAgICAgIEluIEZpbmRSZXNvdXJjZUJ5TnVtYmVyIGFuZCBGaW5kUmVzb3VyY2VCeU5hbWUgdXNlIHR5cGVfbWF0Y2gKICAgICAgICBpbnN0ZWFkIG9mIGNvbXBhcmluZyBudW1iZXJzLiAgSW4gRmluZFJlc291cmNlIGhhbmRsZSB0aGUKICAgICAgICAiI251bWJlciIgc3ludGF4IGFuZCBlbXB0eSBzdHJpbmdzIGluIGJvdGggdGhlIHJlc291cmNlIGFuZAogICAgICAgIHR5cGUgbmFtZXMuCgpNb24gTWF5IDIzIDAwOjQ4OjI1IDE5OTQgIFJpY2sgU2xhZGtleSAgKGpyc0B3b3JsZC5zdGQuY29tKQoKICAgICAgICAqIFt3aW5kb3dzL2RpYWxvZy5jXQogICAgICAgIEZpeCBpbmFkdmVydGVudCBwcmludGluZyBvZiBzdHJpbmcgSURzIGFzIHN0cmluZ3MuCgpNYXkgMjMsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFtjb250cm9scy9tZW51LmNdCglOZXcgZnVuY3Rpb25zIEdldE1lbnVJdGVtQ291bnQoKSwgR2V0TWVudUl0ZW1JRCgpLgoJCUdldE1lbnVTdHJpbmcoKSAmIEhpbGl0ZU1lbnVJdGVtKCkuCglCdWcgZml4IGluIENoZWNrTWVudUl0ZW0oKS4KCUZ1bmN0aW9uIFNldE1lbnUoKSBub3cgbWFrZSBjbGllbnQgYXJlYSByZWNhbGMgaWYgbWVudSByZW1vdmVkLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglCdWcgZml4IGluIFNldFdpbmRvd1BvcygpLCBubyBtb3JlIFhNYXBwaW5nIG9yIFhDb25maWd1cmluZwlvZgoJCXdpbmRvd3Mgd2l0aCBpbml0aWFsIHdpZHRoIG9yIGhlaWdodCBlcXVhbCB6ZXJvLgoKCSogW29iamVjdHMvZ2Rpb2JqLmNdCglOZXcgZnVuY3Rpb24gRW51bU9iamVjdHMoKSwgdXNpbmcgbmV3IGxwUGVuQnJ1c2hMaXN0IGJ1aWxkdXAKCQlmcm9tIGNhbGxzIHRvIG5ldyBmdW5jdGlvbiBHRElfQXBwZW5kVG9QZW5CcnVzaExpc3QoKS4KCQkoJ3BicnVzaC5leGUnIGRvbid0IHNob3cgaXRzIGZhY2UgeWV0ICEgLi4uIDotKCApCglOZXcgRU1QVFkgU1RVQiBmb3IgZnVuY3Rpb24gU2V0T2JqZWN0T3duZXIoKSwKCQkoJ21wbGF5ZXIuZXhlJyBjYWxsIGl0IHZpYSBHZXRQcm9jQWRkcmVzcygpIC4uLikKCgkqIFtvYmplY3RzL2ZvbnQuY10KCU5ldyBpbnRlcm5hbCBmdW5jdGlvbnMgUGFyc2VGb250UGFybXMoKSAmIEluaXRGb250c0xpc3QoKS4KCUVudW1Gb250cygpICYgRW51bUZvbnRGYW1pbGllcygpIGVudW1lcmF0ZXMgZm9udHMgKG5vIG1vcmUgZHVtbWllcykuCglGT05UX01hdGNoRm9udCBub3cgbWFrZSByZXRyaWVzIHRvIGZpbmQgY2xvc2VzdC1zbWFsbGVzdCBmb250LgoJCSgnY2hhcm1hcC5leGUnIGNhbiBub3cgc2hvdyB0aGUgZGlmZmVyZW50cyBmb250cyBhdmFpbGFibGUpCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCVVzZSBzbWFsbCBkb3MgT0JNX09MRF9DTE9TRSBidXR0b24gZm9yIE1ESSB3aW5kb3dzLgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10gW29iamVjdHMvYml0bWFwLmNdCglTdGFydCB0byByZW1vdmUgb2Jzb2xldGUgZ2xvYmFscyBzdWNoIFhUX3NjcmVlbiAuLi4KCgkqIFtsb2FkZXIvbGlicmFyeS5jXQoJTWFrZSBmdW5jdGlvbiBHZXRQcm9jQWRkcmVzcygpIHdvcmtpbmcgYWxzbyB3aXRoIGJ1aWx0aW4gRExMcy4KClR1ZSBNYXkgMjQgMjA6MTg6MDIgMTk5NCAgRXJpayBCb3MgKGVyaWtAaGFja3RpYy5ubCkKCiAgICAgICAgKiBbaWYxNjMyL3N5c3RlbS5zcGVjXSBbaWYxNjMyL3Rvb2xoZWxwLnNwZWNdCiAgICAgICAgc3lzdGVtLmRsbCAmIHRvb2xoZWxwLmRsbCBhZGRlZC4KCiAgICAgICAgKiBbbG9hZGVyL2xpYnJhcnkuY10KICAgICAgICBNb2RpZmllZCBHZXRNb2R1bGVGaWxlTmFtZSgpIHRvIHJldHVybiB0aGUgZnVsbAogICAgICAgIGZpbGVuYW1lLgogICAgICAgIEFkZGVkIGEgY2hlY2sgdG8gTG9hZExpYnJhcnkoKSB0byBwcmV2ZW50IGxvYWRpbmcKICAgICAgICBidWlsdCBpbiBkbGxzLiAoZWcuIHVzZXIuZXhlKQogICAgICAgIEFkZGVkIGEgY2hlY2sgdG8gRnJlZUxpYnJhcnkoKSB0byBwcmV2ZW50IGJ1aWx0LWluCiAgICAgICAgZGxscyBmcm9tIGJlaW5nIGZyZWVkLgogICAgICAgIE1vZGlmaWVkIEdldFByb2NBZGRyZXNzKCkgdG8gc3VwcG9ydCBidWlsdGluIGRsbHMuCgogICAgICAgICogW2xvYWRlci9zaWduYWwuY10gW21pc2NlbXUvaW50MmYuY10KICAgICAgICBBZGRlZCA9PiBwaWZlZGl0IHJ1bnMuCgogICAgICAgICogW21pc2MvZG9zX2ZzLmNdCiAgICAgICAgQWRkZWQgYSBOVUxMLXB0ciBjaGVjayB0byBET1NfY2xvc2VkaXIoKS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVHVlIE1heSAxNyAyMzowMzoxNiAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogW3dpbmRvd3MvZGNlLmNdCglGaXhlZCBidWcgd2l0aCBkY2UgaW5pdGlhbGl6YXRpb24gdGhhdCB3YXMgY2F1c2luZyBkaWFsb2cgYm94ZXMgdG8gbm90CgliZSBkaXNwbGF5ZWQuCgoJKiBbaWYxNjMyL2NhbGxiYWNrLmNdCglCZXR0ZXIgZml4IGZvciBidWcgZm91bmQgYnkgTWFydGluLgoKU2F0IE1heSAxNCAxOTo0ODozOSAxOTk0ICBSaWNrIFNsYWRrZXkgIChqcnNAd29ybGQuc3RkLmNvbSkKCiAgICAgICAgKiBbIG1lbW9yeS9oZWFwLmMgXQogICAgICAgIFJlZGlyZWN0IEhFQVBfUmVBbGxvYyBjYWxscyB3aXRoIE5VTEwgYXJndW1lbnQgdG8gSEVBUF9BbGxvYy4KCk1heSAxNiwgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW29iamVjdHMvZm9udC5jXQoJTWFrZSBFbnVtRm9udHMoKSBjYWxsaW5nIGEgY2FsbGJhY2sgd2l0aCBkdW1teSBmb250cyAuLi4gOi0pCgoJKiBbb2JqZWN0cy90ZXh0LmNdCglBZGQgRW1wdHkgU3R1YiBmb3IgRXh0VGV4dE91dCgpLCB3aGljaCB0ZW1wb3JhcmVseSBjYWxsIFRleHRvdXQoKS4KCgkqIFtpZjE2MzIvY2FsbGJhY2suY10KCVRlbXBvcmFyZWx5IGdvIGFyb3VuZCBidWcgaW4gQ2FsbFdpbmRvd1Byb2MoKSwgeW91IHdpbGwgc2VlIHByaW50ZnMuCgoJKiBbY29udHJvbHMvZWRpdC5jXQoJTWFrZSBFRElUIGNvbnRyb2xzIGZvY3VzZWQgYnkgYSBtb3VzZSBjbGljay4KCgkqIFttaXNjL3Byb3BlcnR5LmNdCglCdWcgRml4IGluIGZ1bmN0aW9uIEVudW1Qcm9wcygpLCBiZXR0ZXIgdXNlIG9mIENhbGxCYWNrMTYoKS4KCgkqIFttaXNjL21tc3lzdGVtLmNdCglCYXNpYyBTa2VsdG9uJ3MgZm9yIE1DSSBtZXNzYWdlcyBkaXNwYXRjaGluZyBmdW5jdGlvbi4KClN1biBNYXkgMTUgMTY6MTU6MTcgMTk5NCAgRXJpayBCb3MgKGVyaWtAaGFja3RpYy5ubCkKCiAgICAgICAgKiBbd2luZG93cy91dGlsaXR5LmNdCiAgICAgICAgQWRkZWQgd2luZG93c193c3ByaW50ZigpIGZvciB0aGUgZW11bGF0b3IsIHdzcHJpbnRmKCkgaXMKICAgICAgICBmb3IgbGlid2luZS4KClNhdCBNYXkgMTQgMjI6MTY6NDAgMTk5NCAgUmljayBTbGFka2V5ICAoanJzQHdvcmxkLnN0ZC5jb20pCgogICAgICAgICogW21pc2MvY3Vyc29yLmNdCiAgICAgICAgRml4IHBvaW50ZXIgcHJvYmxlbXMgaW4gTG9hZEN1cnNvciBsZWFkaW5nIHRvIGhlYXAgY29ycnVwdGlvbi4KCiAgICAgICAgKiAgWyBjb250cm9scy9tZW51LmMgXQogICAgICAgIEZpeCB0d28gTlVMTCBkZXJlZmVyZW5jaW5nIGJ1Z3MuCgpTdW4gTWF5IDE1IDIwOjA3OjQ4IDE5OTQgIFJpY2sgU2xhZGtleSAgKGpyc0B3b3JsZC5zdGQuY29tKQoKICAgICAgICAqIFtvYmplY3RzL2ZvbnQuY10KICAgICAgICBGaXggTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNpbmcgYnVnIGluIEdldENoYXJXaWR0aC4KCiAgICAgICAgKiBbbG9hZGVyL3Jlc291cmNlLmNdCiAgICAgICAgRml4IHVuZGVyLWFsbG9jYXRpb24gb2YgbWVtb3J5IGluIExvYWRBY2NlbGVyYXRvcnMuCgogICAgICAgICogW3dpbmRvd3MvY2xhc3MuY10KICAgICAgICBJZ25vcmUgbmVnYXRpdmUgc2l6ZXMgZm9yIGV4dHJhIGZpZWxkcyBpbiBSZWdpc3RlckNsYXNzLgoKU3VuIE1heSAxNSAwNjozNTowMyAxOTk0ICBEYXZpZCBNZXRjYWxmZSA8ZGF2aWRAcHJpc20uZGVtb24uY28udWs+CgogICAgICAgICogW29iamVjdHMvbWV0YWZpbGUuY10gW2luY2x1ZGUvbWV0YWZpbGUuaF0gW2luY2x1ZGUvd2luZG93cy5oXQogICAgICAgICAgW29iamVjdHMvZ2Rpb2JqLmNdIFtvYmplY3RzL2JydXNoLmNdIFtvYmplY3RzL3Blbi5jXQogICAgICAgICAgW29iamVjdHMvdGV4dC5jXSBbb2JqZWN0cy9kY3ZhbHVlcy5jXSBbd2luZG93cy9ncmFwaGljcy5jXQogICAgICAgICAgW3dpbmRvd3MvZGMuY10gW3dpbmRvd3MvbWFwcGluZy5jXQogICAgICAgIEJlZ2lubmluZ3Mgb2YgbWV0YWZpbGUgc3VwcG9ydC4KCiAgICAgICAgKiBbbWlzYy9maWxlLmNdCiAgICAgICAgQ29ycmVjdGVkIHNwZWxsaW5nIG9mIF9sY3JlYXQuCgogICAgICAgICogW2NvbnRyb2xzL2VkaXQuY10KICAgICAgICBNaW5vciBidWcgZml4ZXMuCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KTWF5IDksIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFtjb250cm9scy9zY3JvbGwuY10KCU1ha2UgdGh1bWJ0cmFjayBidXR0b24gZGlzYXBwZWFyIGlmIHNjcm9sbCBib3ggcmF0aW8gPCAzOjEuCglNYWtlIGFycm93IGJ1dHRvbnMgcmVjdGFuZ3VsYXIgaWYgc2Nyb2xsIGJveCByYXRpbyA8IDI6MS4KCUFkZCBjb2RlIGZvciBTQlNfVE9QQUxJR04sIFNCU19CT1RUT01BTElHTiwgCgkJCQlTQlNfTEVGVEFMSUdOICYgU0JTX1JJR0hUQUxJR04uCglCdWcgZml4IGluIE5DX0NyZWF0ZVNjcm9sbEJhcnMoKSwgbm8gbW9yZSBiaWdidXR0IGluIGNhbGVuZGFyLmV4ZS4uLiA6LSkKCgkqIFtsb2FkZXIvbGlicmFyeS5jXSBbbG9hZGVyL3Rhc2suY10gW21pc2MvZXhlYy5jXQoJQ29udGludWUgcGxheWluZyBhcm91bmQgdHJ5aW5nIHRvIGdldCBhIHNlY29uZCB0YXNrIHJ1bm5pbmcuCgoJKiBbd2luZG93cy9tZGkuY10KCUNoYW5nZSBPQk1fQ0xPU0UgZm9yIE9CTV9PTERfQ0xPU0UsIGEgc21hbGxlciBkb3QgYnV0dG9uIHdoZW4gbWF4aW1pemVkLgoKCSogW2V2ZXJ5d2hlcmVdCglBZGRpbmcgcHJldmlvdXMgd29ya3Mgb2YgdGhlIEFwciAyNSwgOTQuCgpUdWUgTWF5IDEwIDE4OjA5OjE0IDE5OTQgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKCgkqIFtpZjE2MzIvbW1zeXN0ZW0uc3BlY10gW21pc2MvbW1zeXN0ZW0uY10gW2luY2x1ZGUvbW1zeXN0ZW0uaF0KCUFkZGVkIE1hcnRpbidzIG1tc3lzdGVtLmRsbCBzdHVicy4KCgkqIFttaXNjL3NvdW5kLmNdCglBZGRlZCByZW1haW5pbmcgc3R1YnMgZm9yIHNvdW5kLmRsbC4KCgkqIFtpZjE2MzIvc2hlbGwuc3BlY10gW21pc2Mvc2hlbGwuY10KCUZpeGVkIHByb3RvdHlwZXMgKEkgZm91bmQgdGhlbSBpbiBCQyA0KSBhbmQgYWRkZWQgU2hlbGxBYm91dCgpCglhbmQgQWJvdXREbGdQcm9jKCkuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCk1heSAxLCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbbG9hZGVyL3NpZ25hbC5jXQoJQWRkIFhVbmdyYWJQb2ludGVyKCkgJiBYVW5ncmFiU2VydmVyKCkgaW4gd2luZV9mYXVsdCgpLgoKRnJpIEFwciAyMiAxOTozMDowOCAxOTk0ICBFcmlrIEJvcyAoZXJpa0B0cmFzaGNhbi5oYWNrdGljLm5sKQoKCSogW29iamVjdHMvYml0Ymx0LmNdCgljb2xvcl9zdHJldGNoKCkgcmV3cml0dGVuIHRvIHVzZSBpbnRzIG9ubHkuICpmYXN0ISoKCUJMQUNLT05XSElURSAmIFdISVRFT05CTEFDSyBzdHJldGNobW9kZXMgcmVkaXJlY3RlZCB0bwoJdXNlIGNvbG9yX3N0cmV0Y2goKS4KCk1vbiBNYXkgIDIgMjE6Mzk6NDMgMTk5NCAgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKCgkqIFtjb250cm9scy9tZW51LmNdCglTZXRTeXNNZW51KCkgYWRkZWQuCgoJKiBbbWlzYy9jdXJzb3IuY10KCUdldEN1cnNvcigpIGFkZGVkLgoKCSogW21pc2MvbWFpbi5jXQoJU3dhcE1vdXNlQnV0dG9uKCkgYWRkZWQsIChOT1ApLgoKCSogW3dpbmRvd3Mvd2luLmNdCglHZXREZXNrdG9wSHduZCgpIGFkZGVkLgoKCSogW2lmMTYzMi8qc3BlY10KCUFkZGVkIG5vdCBpbXBsZW1lbnRlZCBmdW5jdGlvbnMgZGVmcyBhcyBjb21tZW50LgoKCSogW21pc2Mvd2luc29ja2V0LmNdCglDaGFuZ2UgV1NBR2V0WGJ5WSgpIGZ1bmN0aW9ucyB0byBub24tYmxvY2tpbmcgb25lcywKCUFkZGVkIFdTQUFzeW5jU2VsZWN0KCkuIAoJKFdTQSBmdW5jdGlvbnMgY2FuJ3QgYmUgY2FuY2VsZWQgeWV0KS4KCldlZCBBcHIgMjAgMjM6NTg6NTggMTk5NCAgU2NvdHQgQS4gTGFpcmQgIChzY290dEBjdXJseSkKCgkqIG1pc2MvcHJvZmlsZS5jOiBGaXhlZCBidWcgd2l0aCBHZXRJbmlGaWxlTmFtZSByZXR1cm5pbmcgd3JvbmcKCXBhdGggd2hlbiBnaXZlbiBhIHNpbXBsZSBmaWxlIG5hbWUuICBGaXhlZCBHZXRTZXRQcm9maWxlIHRvIGFsbG93CgllbnVtZXJhdGluZyBhbGwga2V5IG5hbWVzIHdoZW4gS2V5TmFtZSBpcyBudWxsLgoKQXByIDI1LCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbb2JqZWN0cy9iaXRibHQuY10KCUFkZCBwcm90ZWN0aW9uIHRvIEJpdEJsdCgpICYgU3RyZXRjaEJsdCgpIGZvciB3aWR0aCBvciBoZWlnaHQgPSAwLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglBdm9pZCBwYWludGluZyBpbiBOQ19Eb05DUGFpbnQoKSBpZiBJc1dpbmRvd1Zpc2libGUoKS4KCVNpbXBsaWZ5IE5DX1RyYWNrTW91c2VNZW51QmFyKCkgYmVjYXVzZSBjb2RlIG1vdmVkIHRvIE1lbnVGb2N1c0xvb3AoKS4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJQ3JlYXRlV2luZG93RXgoKSAmIERlc3Ryb3lXaW5kb3coKSBub3cgY2FsbCByZXNwZWN0aXZlbHkKCQlBZGRXaW5kb3dUb1Rhc2soKSAmIFJlbW92ZVdpbmRvd0Zyb21UYXNrKCkuCglOZXcgZW1wdHkgc3R1YiBmb3IgZnVuY3Rpb24gQW55UG9wdXAoKS4KCgkqIFtsb2FkZXIvbGlicmFyeS5jXQoJQnVnIEZpeCA6IEdldE1vZHVsZUZpbGVOYW1lKCkgbm93IHJldHVybiBmdWxsIHBhdGggZmlsZW5hbWUuCgoJKiBbaW5jbHVkZS9tZW51LmhdIFtjb250cm9scy9tZW51LmNdCglBZGQgaFRleHQgaGFuZGxlIGFuZCByZW1vdmUgb2Jzb2xldGUgTUVOVUlURU0gc3RydWN0IG1lbWJlcnMuCglBZGQgYSBSZWxlYXNlQ2FwdHVyZSgpIGluIFNldE1lbnUoKSB3aGVuIG1lbnViYXIgY2hhbmdlZCB3aGlsZSBjYXB0dXJlZC4KCUFkZCBNZW51TW91c2VNb3ZlKCkgTWVudUJ1dHRvblVwKCkgaW4gZnVuY3Rpb24gTWVudUZvY3VzTG9vcCgpLgoKCSogW21pc2MvZmlsZS5jXQoJR2V0VGVtcEZpbGVuYW1lKCkgbm93IGNyZWF0ZSBhIGZpbGUuCglfbGNyZWF0ZSgpIHVzZSB1bml4IG9wZW4gKG5hbWUsIG1vZGUsIHBlcm0pLCB3aXRoIHBlcm09TzY2Ni4KCgkqIFtpZjE2MzIvcmVsYXkuY10KCVJlbW92ZSB0ZW1wb3Jhcmx5IGJ1aWx0aW4gU0hFTEwuRExMLCBBZGQgTU1TWVNURU0uRExMIGluIGJ1aWx0aW4gbGlzdC4KCgkqIE5ldyBmaWxlIFttaXNjL21tc3lzdGVtLmNdCgkqIE5ldyBmaWxlIFtpbmNsdWRlL21tc3lzdGVtLmhdCgkqIE5ldyBmaWxlIFtpZjE2MzIvbW1zeXN0ZW0uc3BlY10KCU1hbnksIG1hbnkgZW1wdHkgc3R1YnMgLi4uIDotKQoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKV2VkIEFwciAyMCAxNDo1MzozNSAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogW3Rvb2xzL2J1aWxkLmNdIFtpZjE2MzIvY2FsbC5TXSBbaWYxNjMyL0ltYWtlZmlsZV0KCUZpeGVkIGJ1ZyBmb3Igbm9uLUxpbnV4IHN5c3RlbXMuCgpBcHIgMTgsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFt3aW5kb3dzL3dpbi5jXQoJQnVnIGZpeGVkIGluIENyZWF0ZVdpbmRvd0V4KCkgOiBOb3cgdXNlIFNldE1lbnUoKSBmb3IgbWVudWJhciBzZXR1cC4KCU5ldyBlbXB0eSBzdHViIGZvciBmdW5jdGlvbiBTZXRTeXNNb2RhbFdpbmRvdygpLgoKCSogW21pc2MvZXhlYy5jXQoJTmV3IGVtcHR5IHN0dWIgZm9yIGZ1bmN0aW9uIEV4aXRXaW5kb3dzKCkuCgoJKiBbb2JqZWN0cy9mb250LmNdCglOZXcgZW1wdHkgc3R1YiBmb3IgZnVuY3Rpb24gRW51bUZvbnRzKCkuCgoJKiBOZXcgZmlsZSBbbWlzYy9wcm9wZXJ0eS5jXQoJTmV3IGZ1bmN0aW9ucyBSZW1vdmVQcm9wKCksIEdldFByb3AoKSwgU2V0UHJvcCgpICYgRW51bVByb3BzKCkuCgoJKiBOZXcgZmlsZSBbbWlzYy9zaGVsbC5jXQoJTmV3IGVtcHR5IHN0dWJzIGZvciBmdW5jdGlvbiBSZWdpc3RlclNoZWxsUHJvYygpLCAKCQkJU2hlbGxFeGVjdXRlKCkgJiBTaGVsbFByb2MoKS4KCgkqIE5ldyBmaWxlcyBbbG9hZGVyL3Rhc2suY10gJiBbaW5jbHVkZS90YXNrLmhdCglNb3ZlIGZ1bmN0aW9ucyBHZXRXaW5kb3dUYXNrKCksIEdldE51bVRhc2soKSwgRW51bVRhc2tXaW5kb3dzKCkKCQlmcm9tICdsb2FkZXIvbGlicmFyeS5jJy4KCgkqIFtpZjE2MzIvdXNlci5jXSBbaWYxNjMyL2tlcm5lbC5jXQoJUHV0IEF0b21zIGZ1bmN0aW9ucyBlbnRyaWVzLgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdCglOZXcgZnVuY3Rpb25zIERpckRsZ1NlbGVjdENvbWJvQm94KCkgJiBEaXJEbGdMaXN0Q29tYm9Cb3goKS4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglOZXcgZnVuY3Rpb25zIERpckRsZ1NlbGVjdCgpICYgRGlyRGxnTGlzdCgpLgoKU3VuIEFwciAxNyAyMDo1Nzo1OSAxOTk0ICBFcmlrIEJvcyAoZXJpa0B0cmFzaGNhbi5oYWNrdGljLm5sKQoKCSogW29iamVjdHMvdGVzdC5jXQoJR3JheVN0cmluZygpIGFkZGVkLgoKCSogW2lmMTYzMi9jYWxsYmFjay5jXQoJQ2FsbEdyYXlTdHJpbmdQcm9jKCkgYWRkZWQuCgoJKiBbaWYxNjMyL3JlbGF5LmNdIFtpZjE2MzIvbW1zeXN0ZW0uc3BlY10KCUFkZGVkLgoKCSogW2lmMTYzMi9rZXJuZWwuc3BlY10gW2lmMTYzMi91c2VyLnNwZWNdCglBZGRlZCBmb3Jnb3R0ZW4gc3BlY3MgZm9yIGF0b20gZnVuY3Rpb25zLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUdWUgQXByIDEyIDAwOjA1OjMxIDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBtaXNjL3NweS5jIChTcHlJbml0KTogQWRkZWQgbW9yZSBtZXNzYWdlIHR5cGVzCgoJKiBbd2luZG93cy9tZGkuY10gW2luY2x1ZGUvbWRpLmhdCglNYXhpbWl6aW5nIGFuZCByZXN0b3JpbmcgY2hpbGQgd2luZG93cy4KCVRpbGluZyBvZiBjaGlsZCB3aW5kb3dzLgoKTW9uIEFwciAxMSAyMDo0ODoyOCAxOTk0ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBsYW1pc3VuLmVwZmwuY2gpCgoJKiBbd2luZG93cy93aW5wb3MuY10KCVJldmVydCBmb2N1cyBhbmQgYWN0aXZhdGlvbiB0byBwcmV2aW91cyB3aW5kb3cgd2hlbiBoaWRpbmcgYSB3aW5kb3cuCgoJKiBbd2luZG93cy9zeXNjb2xvci5jXQoJSW1wbGVtZW50ZWQgc3lzdGVtIGNvbG9yIG9iamVjdHMgKGJydXNoZXMgYW5kIHBlbnMgY3JlYXRlZCBhdAoJU2V0U3lzQ29sb3IoKSB0aW1lIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UpLgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10gW3dpbmRvd3Mvbm9uY2xpZW50LmNdIFtjb250cm9scy9idXR0b24uY10KCUNoYW5nZWQgcGFpbnRpbmcgY29kZSB0byB1c2Ugc3lzdGVtIGNvbG9yIG9iamVjdHMuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglOZXcgZnVuY3Rpb24gTVNHX0ludGVybmFsR2V0TWVzc2FnZSgpIGZvciBpbnRlcm5hbCBtZXNzYWdlcwoJbG9vcHMgKGUuZy4gZm9yIGRpYWxvZ3Mgb3IgbWVudXMpLgoKCSogW3dpbmRvd3MvaG9vay5jXSBbaW5jbHVkZS9ob29rLmhdICAoTmV3IGZpbGVzKQoJQmVnaW5uaW5nIG9mIHRoZSB3aW5kb3cgaG9va3MgaW1wbGVtZW50YXRpb24uCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCVVzZSBuZXcgZnVuY3Rpb24gTVNHX0ludGVybmFsR2V0TWVzc2FnZSgpIGluIERpYWxvZ0JveCgpLgoKCSogW2lmMTYzMi9jYWxsYmFjay5jXQoJQWRkZWQgZnVuY3Rpb24gQ2FsbEhvb2tQcm9jKCkuCgpBcHIgMTEsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglCdWcgZml4IDogV01fQ0hBUnMgYXJlIHNlbnQgdG8gZm9jdXNlZCB3aW5kb3cgbGlrZSBXTV9LRVk/Pz8uCgoJKiBbbWlzYy9leGVjLmNdCglOb3RoaW5nIG11Y2ggbW9yZSB0aGFuIGEgc3R1YiBmb3IgTG9hZE1vZHVsZSgpLCBJIHNhdyB0aGVyZSBhIGxvdAoJCXRvIGJlIGRvbmUgaW4gdGhhdCBjb3JuZXIsIEkgd2lsbCBjb21lIGJhY2sgbGF0ZXIgLi4uCgoJKiBbbG9hZGVyL2xpYnJhcnkuY10KCU5ldyBmdW5jdGlvbnMgR2V0V2luZG93VGFzaygpLCBHZXROdW1UYXNrKCksIEVudW1UYXNrV2luZG93cygpIAoJCQlhbmQgYXNzb2NpYXRlZCBtb2R1bGVzICYgdGFza3MgbGlua2VkLWxpc3RzLgoJKGl0J3Mgb25seSBhbiAnZW1lcmdpbmcgYnVkJywgbW9yZSB0byBjb21lIG5leHQgd2Vla3MpLgoKCSogW2xvYWRlci93aW5lLmNdCglVc2UgTG9hZExpYnJhcnkoKSBpbnN0ZWFkIG9mIExvYWRJbWFnZSgpIGZvciAnc3lzcmVzLmRsbCcuCgoJKiBbY29udHJvbC9tZW51LmNdCglZb3UgY2FuIG5vdyBjbGljayBvdXRzaWRlIG1lbnUgcmVnaW9uIHdpdGhvdXQgcHJvYmxlbS4KCUtleWJvYXJkIG5hdmlnIG1vcmUgc21vb3RseSwgZXZlbiBpZiBhIGNoaWxkIGhhcyB0aGUgZm9jdXMuCglCdWcgZml4IGluIEluc2VydEl0ZW0oKSwgKGJhZCBsaW5rbGlzdCB3aGVuIGluc2VydCBwb2ludCBub3QgZm91bmQpLgoJY2hhbmdlIFJlYWxsb2MgZm9yIEZyZWUgJiBBbGxvYyBpbiBNb2RpZnlJdGVtKCkuCglNRl9TVFJJTkcgbm93IHNldCBCTEFDS19QRU4gdG8gZml4IGJ1ZyBvZiBiYWQgY29sb3Igb2YgdGhlIHVuZGVyc2NvcmVzIAoJCWRvbmUgYnkgRHJhd1RleHQoKSwgKG1heWJlIGl0IHNob3VsZCBkb25lIGluIERyYXdUZXh0KCkgaXRzZWxmID8pLgoKU3VuIEFwciAxMCAxNDowNjowOCAxOTk0ICBFcmlrIEJvcyAoZXJpa0B0cmFzaGNhbi5oYWNrdGljLm5sKQoKCSogW21pc2MvcHJvZmlsZS5jXQoJLklOSSBmaWxlcyB3aWxsIG5vdyBiZSBzdG9yZWQgaW4gLyBsb2FkZWQgZnJvbSB0aGUgd2luZG93cyBkaXIKCWlmIG5vIHBhdGggaXMgc3VwcGxpZWQuCgoJKiBbaWYxNjMyL2tlcm5lbC5zcGVjXQoJRml4ZWQgR2V0RHJpdmVUeXBlJ3MgcHJvdG90eXBlLgoKCSogW2lmMTYzMi93aW5zb2NrLnNwZWNdIFtpbmNsdWRlL3dpbnNvY2suaF0gW21pc2Mvd2luc29ja2V0LmNdCglGaXhlZCBwcm90b3R5cGVzOiB3aW5zb2NrIHVzZXMgYSB3b3JkIGFzIHNvY2tldCBoYW5kbGUgbm90IGFuIGludC4KCgkqIFttaXNjL3dpbnNvY2tldC5jXQoJQWRkZWQgaGVhcCBhbGxvY2F0aW9uIGZvciByZXR1cm5lZCBzdHJ1Y3R1cmVzLgoJQWRkZWQgbm9uLWJsb2NraW5nIFdTQUFzeW5jR2V0WGJ5WSgpIGZ1bmN0aW9ucyBhcyBibG9ja2luZyBvbmVzLgoKCSogW2xvYWRlci93aW5lLmNdCglBZGRlZCBJc0RMTExvYWRlZCgpLCB1c2VkIGluIExvYWRJbWFnZSgpIHRvIHByZXZlbnQgbG9hZGluZwoJYSBkbGwgbXVsdGlwbGUgdGltZXMuCglEaXJlY3RvcnkgaXMgYWRkZWQgdG8gd2luZSdzIHBhdGggd2hlbiBhIGZ1bGxwYXRoIGlzIHN1cHBsaWVkIHdoZW4KCXN0YXJ0aW5nIHdpbmUuCglMb2FkSW1hZ2UoKTogRExMIGZpbGVuYW1lIHVzZWQgaW5zdGVhZCBETEwncyBvd24gaW50ZXJuYWwgbmFtZSwKCWZpeGVzICdCYWQgRExMIG5hbWUnIGVycm9ycy4KClNhdCBBcHIgIDkgMDg6MjY6MDMgMTk5NCAgRGF2aWQgTWV0Y2FsZmUgPGRhdmlkQHByaXNtLmRlbW9uLmNvLnVrPgoKCSogW2NvbnRyb2xzL2VkaXQuY10gW2NvbnRyb2xzL3dpZGdldHMuY10KCUZpcnN0IHJlbGVhc2Ugb2YgZWRpdCBjb250cm9sLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUdWUgQXByICA1IDE0OjM2OjU5IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBbaW5jbHVkZS9tZGkuaF0gW3dpbmRvd3MvbWRpLmNdCglVc2UgV01fUEFSRU5UTk9USUZZIG1lc3NhZ2VzIHRvIGFjdGl2YXRlIGNoaWxkcmVuLgoJR2VuZXJhdGUgV01fQ0hJTERBQ1RJVkFURSBtZXNzYWdlcy4KCUJlZ2lubmluZ3MgaGFuZGxlciBmb3IgbWF4bWl6ZWQgY2hpbGQgd2luZG93LgoJQ2xlYW4gdXAgd2hlbiBjaGlsZHJlbiBhcmUgZGVzdHJveWVkLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXSBbd2luZG93cy9ub25jbGllbnQuY10gW3dpbmRvd3Mvd2lucG9zLmNdCglSZW1vdmVkIGNvZGUgYWRkIDk0LzAzLzI2LgoKQXByIDQsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFtjb250cm9sL21lbnUuY10KCU1ha2UgbW91c2UgbWVudSBuYXZpZ2F0aW9uIHdvcmtpbmcgYWdhaW4uIDotKSkKCShiZSBjYXJlZnVsbCwgY2xpY2tpbmcgb3V0c2lkZSBtZW51cyAoaWUuOiBjbGllbnRyZWN0KSAKCW5vdCByZXNvbHZlZCB5ZXQpCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10gIFtjb250cm9scy9zY3JvbGwuY10KCUJ1Z3MgZml4IGluIE5DVHJhY2tTY3JvbGxCYXJzKCkuCgoJKiBbbWlzYy9kb3NfZnMuY10KCUJ1ZyBmaXggaW4gJ1RvRG9zKCknIGluIGNvbnZlcnNpb24gZm9yICcvJywKCQkoZXhhbXBsZTogJy93aW5kb3cvJyB3YXMgdHJhbnNsYXRlZCB0byAnV0lORE9XcycpLgoKCSogW21pc2NlbXUvaW50MjEuY10KCUZ1bmN0aW9uIENoYW5nZURpcigpIGV4dHJhY3QgcG9zc2libGUgZHJpdmUgYmVmb3JlIERPU19DaGFuZ2VEaXIoKS4KCgkqIFtsb2FkZXIvbGlicmFyeS5jXSAgW2xvYWRlci93aW5lLmNdCglQbGF5aW5nIGFyb3VuZCBtb3ZpbmcgZnVuY3Rpb24gR2V0UHJvY0FkZHJlc3MoKSBhbmQgcHV0IHNvbWUgY29kZSBpbi4KCk1vbiBBcHIgIDQgMjE6Mzk6MDcgMTk5NCAgQWxleGFuZHJlIEp1bGxpYXJkIChqdWxsaWFyZEBsYW1pc3VuLmVwZmwuY2gpCgoJKiBbbWlzYy9tYWluLmNdCglCZXR0ZXIgZXhwbGFuYXRpb24gb2YgY29tbWFuZC1saW5lIG9wdGlvbnMuCgoJKiBbb2JqZWN0cy9kaWIuY10KCUltcGxlbWVudGVkIFNldERJQml0c1RvRGV2aWNlKCkuCgoJKiBbd2luZG93cy9kYy5jXQoJQnVnIGZpeCBpbiBTZXREQ1N0YXRlKCkuCgoJKiBbd2luZG93cy9ldmVudC5jXQoJUmVtb3ZlZCBXU19ESVNBQkxFRCBoYW5kbGluZyAobm93IGRvbmUgaW4gbWVzc2FnZS5jKS4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCUFkZGVkIHNlbmRpbmcgYSBXTV9QQVJFTlROT1RJRlkgbWVzc2FnZSBpbiBNU0dfVHJhbnNsYXRlTW91c2VNc2coKS4KCVVzZSBXaW5kb3dGcm9tUG9pbnQoKSB0byBmaW5kIHRoZSB3aW5kb3cgZm9yIG1vdXNlIGV2ZW50cywgdGFraW5nCglpbnRvIGFjY291bnQgZGlzYWJsZWQgd2luZG93cy4KCgkqIFt3aW5kb3dzL3BhaW50aW5nLmNdCglCdWcgZml4IGluIEJlZ2luUGFpbnQoKSB0byBhbGxvdyBjYWxsaW5nIGl0IGF0IG90aGVyIHRpbWVzIHRoYW4KCW9uIFdNX1BBSU5UIChTb2xpdGFpcmUgbmVlZHMgaXQuLi4pCgoJKiBbd2luZG93cy93aW4uY10KCUltcGxlbWVudGVkIEZpbmRXaW5kb3coKS4KCVJld3JpdHRlbiBFbmFibGVXaW5kb3coKSB0byBiZWhhdmUgbW9yZSBsaWtlIFdpbmRvd3MuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCVJld3JpdHRlbiBXaW5kb3dGcm9tUG9pbnQoKSB0byBhbHNvIHNlYXJjaCBjaGlsZCB3aW5kb3dzLgoKTW9uIEFwciAgNCAxNzozNjozMiAxOTk0ICBFcmlrIEJvcyAoZXJpa0B0cmFzaGNhbi5oYWNrdGljLm5sKQoKCSogW2luY2x1ZGUvaW50MjEuaF0gLT4gW21zZG9zLmhdCglyZW5hbWVkLgoKCSogW21pc2NlbXUvaW50MTAuaF0gW21pc2NlbXUvaW50MjUuaF0gW21pc2NlbXUvaW50MjYuaF0gCgluZXcsIGFkZGVkIGZvciBpbnQgMTAsIDI1IGFuZCAyNi4KCgkqIFttaXNjZW11L2lvcG9ydHMuY10KCW5ldywgYWRkZWQgdG8gYWxsb3cgd2luIGFwcHMgdG8gdXNlIGlvcG9ydHMuCgoJKiBbbG9hZGVyL3NpZ25hbC5jXQoJQWRkZWQgc3VwcG9ydCBmb3IgaW4sIGluYiwgb3V0LCBvdXRiIGluc3RydWN0aW9ucy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIE1hciAyNyAxMzo0MDoyNSAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogY29udHJvbHMvbWVudS5jIChJbnNlcnRNZW51KTogQ2hhbmdlZCB0byB1c2UgRmluZE1lbnVJdGVtKCkuCgpTYXQgTWFyIDI2IDIxOjIzOjU1IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBbd2luZG93cy9tZGkuY10KCVdpbmRvdyBsaXN0IHByb3Blcmx5IHVwZGF0ZWQuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglDYWxsIFdJTlBPU19DaGlsZEFjdGl2YXRlKCkgd2hlbiBtb3VzZSBwcmVzc2VkLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglVc2UgV0lOUE9TX0lzQW5BY3RpdmVXaW5kb3coKSBpbnN0ZWFkIG9mIEdldEFjdGl2ZVdpbmRvdygpIGluCglOQ19IYW5kbGVOQ1BhaW50KCkuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCUNyZWF0ZWQgZnVuY3Rpb25zIFdJTlBPU19Jc0FuQWN0aXZlV2luZG93KCkgYW5kIFdJTlBPU19BY3RpdmF0ZUNoaWxkKCkKClRodSBNYXIgMjQgMTQ6NDk6MTcgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIGNvbnRyb2xzL21lbnUuYyAoRGVsZXRlTWVudSk6IENoYW5nZWQgdG8gdXNlIEZpbmRNZW51SXRlbQoJKERlbGV0ZU1lbnUpOiBNYW55IGJ1ZyBmaXhlcy4KCgkqIFtjb250cm9scy9tZW51LmNdCglDcmVhdGVkIGZ1bmN0aW9uIEZpbmRNZW51SXRlbSgpLgoKVGh1IE1hciAyNCAxNDoxNzoyNCAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogW3dpbmRvd3Mvd2luLmNdCglSZW1vdmVkIGluY29ycmVjdCBNREkgaGFuZGxpbmcgY29kZSBmcm9tIENyZWF0ZVdpbmRvd0V4KCkuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJTUZfU1RSSU5HIGl0ZW1zIG5lZWRlZCB0byBhbGxvY2F0ZSBhIHByaXZhdGUgY29weSBvZiBzdHJpbmcuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJRml4ZWQgYnVnZ3kgY2FsbHMgdG8gR2xvYmFsRnJlZSgpLgoKCSogW21lbW9yeS9nbG9iYWwuY10KCUVsaW1pbmF0ZWQgc29tZSByZWR1bmRhbnQgY29kZSB3aXRoIGZ1bmN0aW9uIGNhbGwuCgpXZWQgTWFyIDIzIDE5OTQgUGVudHRpIE1vaWxhbmVuIChwZW50dGkubW9pbGFuZW5AbnRjLm5va2lhLmNvbSkKCgkqIFt3aW5kb3dzL3RpbWVyLmNdCgl0aW1lciBsaXN0IHBvaW50ZXJzIGxvb3BlZCBpbiBJbnNlcnRUaW1lcgoKVHVlIE1hciAyOSAxMzozMjowOCBNRVQgRFNUIDE5OTQgIGp1bGxpYXJkQGRpLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZCkKCgkqIFttaXNjL2N1cnNvci5jXQoJQSBmZXcgY2hhbmdlcyBmb3IgZGVza3RvcCB3aW5kb3cgc3VwcG9ydC4KCgkqIFttaXNjL21haW4uY10KCUFkZGVkIC1kZXB0aCBvcHRpb24uCgoJKiBbbWlzYy9yZWN0LmNdCglZZXQgYW5vdGhlciBidWcgZml4IGluIFN1YnRyYWN0UmVjdCgpLgoKCSogW29iamVjdHMvYml0bWFwLmNdCglDaGFuZ2VzIHRvIHVzZSBvbmx5IG9uZSBkZXB0aCAoc3BlY2lmaWVkIHdpdGggLWRlcHRoKQoJZm9yIGNvbG9yIGJpdG1hcHMuCgoJKiBbb2JqZWN0cy9icnVzaC5jXQoJQWRkZWQgc3VwcG9ydCBmb3IgZGl0aGVyZWQgc29saWQgYnJ1c2hlcy4KCgkqIFtvYmplY3RzL2NvbG9yLmNdCglVc2UgdGhlIHNhbWUgMjAgc3lzdGVtIGNvbG9ycyBhcyBpbiBXaW5kb3dzLgoJU3lzdGVtIHBhbGV0dGUgaW5pdGlhbGlzYXRpb24gbm93IGRvbmUgaW4gQ09MT1JfSW5pdFBhbGV0dGUoKS4KCUFkZGVkIHN1cHBvcnQgZm9yIGEgY29sb3IgbWFwcGluZyB0YWJsZSB0byBtYXAgbG9naWNhbCBjb2xvcgoJaW5kZXhlcyB0byBYIGNvbG9ybWFwIGVudHJpZXMuCglJbXBsZW1lbnRlZCBHZXROZWFyZXN0Q29sb3IoKSBhbmQgUmVhbGl6ZURlZmF1bHRQYWxldHRlKCkuCgoJKiBbb2JqZWN0cy9kaWIuY10KCUFkZGVkIHN1cHBvcnQgZm9yIGNvbG9yIG1hcHBpbmcgdGFibGUuCgoJKiBbb2JqZWN0cy9kaXRoZXIuY10gIChOZXcgZmlsZSkKCUltcGxlbWVudGVkIHNvbGlkIGNvbG9yIGRpdGhlcmluZy4KCgkqIFtvYmplY3RzL3BhbGV0dGUuY10KCUltcGxlbWVudGVkIEdldFN5c3RlbVBhbGV0dGVFbnRyaWVzKCkgYW5kIFNlbGVjdFBhbGV0dGUoKS4KCgkqIFt3aW5kb3dzL2NsYXNzLmNdCglNYWtlIGEgY29weSBvZiB0aGUgbWVudSBuYW1lIGluIFJlZ2lzdGVyQ2xhc3MoKS4KCgkqIFt3aW5kb3dzL2RjLmNdCglGaXhlZCBkZXZpY2UgY2FwcyB3aGVuIHVzaW5nIGEgZGVza3RvcCB3aW5kb3cuCglBZGRlZCBzdXBwb3J0IGZvciB0aGUgY29sb3IgbWFwcGluZyB0YWJsZSBpbiBEQ3MuCgoJKiBbd2luZG93cy9ldmVudC5jXQoJQWRkZWQgQ29uZmlndXJlTm90aWZ5IGhhbmRsZXIgb24gZGVza3RvcCB3aW5kb3cuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglSZW1vdmVkIGNhbGwgdG8gWFRyYW5zbGF0ZUNvb3JkaW5hdGVzKCkgb24gZXZlcnkgbW91c2UgbW90aW9uCglOZXcgZnVuY3Rpb24gTVNHX1N5bmNocm9uaXplKCkgdG8gc3luY2hyb25pemUgd2l0aCB0aGUgWCBzZXJ2ZXIuCgoJKiBbd2luZG93cy9zeXNjb2xvci5jXQoJUmV3cml0dGVuIFNZU0NPTE9SX0luaXQoKSB0byByZWFkIHRoZSBzeXN0ZW0gY29sb3JzIGZyb20gV0lOLklOSS4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJQWRkZWQgc3luY2hyb25pemF0aW9uIG9uIHdpbmRvdyBtYXBwaW5nLiBTb2x2ZXMgdGhlIGRvdWJsZSByZWRyYXcKCXByb2JsZW0gd2hlbiBzdGFydGluZyBTb2xpdGFpcmUuCgpNYXIgMjcsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFtjb250cm9sL21lbnUuY10JKiBbd2luZG93cy9kZWZ3bmQuY10KCU1ha2Uga2V5Ym9hcmQgbmF2aWdhdGlvbiB3b3JraW5nIHdpdGggbWVudWJhciwKCWJ1dCB0ZW1wb3JhcmVseSBpbnNlcnRlZCBhIGJ1ZyBpbiBtZW51YmFyIG1vdXNlIGhhbmRsaW5nIC4uLiA6LSgoCgkoaXQgd2lsbCBiZSBmaXggbmV4dCB3ZWVrICEpCgoJKiBbd2luZG93cy9kZWZ3bmQuY10KCUNvbm5lY3QgVktfTUVOVSB0byBtZW51YmFyIG5hdmlnYXRpb24uCgoJKiBbbG9hZGVyL2xpYnJhcnkuY10KCUdldE1vZHVsZUhhbmRsZSgpIHJldHVybiAnZmljdGl2ZSAweEYwMDArIGhhbmRsZXMnIGZvciBidWlsdC1pbiBETExzLgoKU3VuIE1hciAyMCAyMjozMjoxMyAxOTk0IEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCgoJKiBbbWlzYy9tYWluLmNdCglBZGRlZCBDb3B5KCkuIEFkZGVkIGEgY2hlY2sgZm9yIGAtaCcgdG8gc2hvdyB1c2FnZS4KCgkqIFttaXNjL2Rvc19mcy5jXQoJRml4ZWQgYnVnIGluIEZpbmRGaWxlKCksIHRvIGxvYWQgZGlyZWN0b3JpZXMgYXMgZGxscy4KCgkqIFttaXNjL2Rvc19mcy5jXQoJRml4ZWQgVG9Vbml4KCkgYW5kIFRvRG9zKCkgYWdhaW4sIGFzIG15IHByZXZpb3VzIHBhdGNoCglkaWRuJ3QgbWFrZSBpdC4KCgkqIFttaXNjL2Rvc19mcy5jXSBbbWlzY2VtdS9pbnQyMS5jXQoJQnVnIGZpeGVzLCBzaG91bGQgYmUgYWJsZSB0byBoYW5kbGUgYWxsIHdpbmZpbGUgYW5kIHByb2dtYW4gaW50MjEKCXJlcXVlc3RzIG5vdyBleGNlcHQgZm9yIGEgZmV3IHNtYWxsIHRoaW5ncy4KClR1ZSBNYXIgMjkgMDY6MjU6NTQgMTk5NCAgY3J3QGhhcnJpcy5tbGIuc2VtaS5oYXJyaXMuY29tIChDYXJsIFdpbGxpYW1zKQoKCSogW21lbW9yeS9oZWFwLmNdCglJbXBsZW1lbnRlZCBHZXRGcmVlU3lzdGVtUmVzb3VyY2VzKCkuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCk1vbiBNYXIgMjEgMTc6MzI6MjUgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIGNvbnRyb2xzL21lbnUuYyAoR2V0U3ViTWVudSk6IEZ1bmN0aW9uIGRpZCBub3QgcmV0dXJuIGNvcnJlY3QgdmFsdWUKCgkqIFt3aW5kb3dzL21kaS5jXQoJQmVnaW5uaW5ncyBvZiBtZW51IGhhbmRsaW5nLgoKVGh1IE1hciAxMCAxMTozMjowNiAxOTk0ICBTdGVmYW4gKFNBTSkgTXVlbnplbCAgKG11ZW56ZWxAdGF0LnBoeXNpay51bmktdHVlYmluZ2VuLmRlKQoKCSogW29iamVjdHMvZm9udC5jXQoJaWYgZm9udC53aWR0aCBlcXVhbHMgemVybyB1c2UgYXN0ZXJpeCBpbnN0ZWFkLgoKTW9uIE1hciAyMSAxNzoyMzozNyBNRVQgMTk5NCAganVsbGlhcmRAZGkuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkKQoKCSogW29iamVjdHMvYml0bWFwLmNdCglSZXdyaXR0ZW4gYml0bWFwIGNvZGUgdG8gdXNlIGV4Y2x1c2l2ZWx5IFggcGl4bWFwczsgKm11Y2gqIGZhc3Rlci4KCgkqIFtvYmplY3RzL2JydXNoLmNdCglTb21lIGNoYW5nZXMgd2l0aCBwYXR0ZXJuIGJydXNoZXMgYmVjYXVzZSBvZiB0aGUgbmV3IGJpdG1hcCBjb2RlLgoKCSogW29iamVjdHMvY29sb3IuY10KCUFkZGVkIGZ1bmN0aW9uIENPTE9SX1RvUGh5c2ljYWwgZm9yIGJldHRlciBjb2xvciBtYXBwaW5nLgoKCSogW29iamVjdHMvZGliLmNdCglIZWF2aWx5IG9wdGltaXplZCBTZXRESUJpdHMoKS4KCgkqIFt3aW5kb3dzL2RjLmNdCglPcGltaXplZCBTZXREQ1N0YXRlKCkgYW5kIERDX1NldHVwR0MqKCkgZnVuY3Rpb25zLgoJQWRkZWQgc3R1YiBmb3IgQ3JlYXRlSUMoKS4KCk1hciAyMCwgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW21pc2MvbWVzc2FnZS5jXQoJQ2FsbCBTZXRGb2N1cygpIGFmdGVyIGNsb3NpbmcgYm94IHRvIGdpdmUgYmFjayBmb2N1cyB0byBwcmV2aW91cyBvd25lci4KCgkqIFttaXNjL2ZpbGVzLmNdCglTbWFsbCBidWcgZml4IGluIEdldFRlbXBGaWxlbmFtZSgpIDogcmVwbGFjZSBhICdcJyB0byAnXFwnLgoKCSogW2NvbnRyb2wvc2Nyb2xsLmNdCglDYWxscyB0byBCaXRCbHQoKSByZXBsYWNlIGJ5IFN0cmV0Y2hCbHQoKS4KCgkqIFtjb250cm9sL21lbnUuY10KCUNhbGwgU2V0Rm9jdXMoKSB0byBwcmV2aW91cyBvd25lciBhZnRlciBjbG9zaW5nIFBvcHVwcy4JCglGaWxsIHN0dWIgRGVsZXRlTWVudSgpLgoKCSogW2NvbnRyb2wvbGlzdGJveC5jXQoJKiBbY29udHJvbC9jb21iby5jXQoJVXNlIFNldEZvY3VzKCkgaW4gV01fTEJVVFRPTkRPV04uCglDbG9zZSBDb21ib0JveCBMaXN0IHVwb24gV01fS0lMTEZPQ1VTLgoJRWFybHkgZGV2ZWxvcG1lbnQgb2YgV01fTUVBU1VSRUlURU0gbWVjYW5pc20uCgoJKiBbd2luZG93cy9kZWZ3bmQuY10KCUVhcmx5IGRldmVsb3BtZW50IG9mIFdNX01FQVNVUkVJVEVNIG1lY2FuaXNtLgoKVHVlIE1hciAyMiAxMDo0NDo1NyAxOTk0ICBNaWd1ZWwgZGUgSWNhemEgIChtaWd1ZWxAeG9jaGl0bCkKCgkqIFttaXNjL2F0b20uY10KCUZpeGVkIHNpbnRheGlzIHByb2JsZW0gd2hlbiBidWlsZGluZyB0aGUgbGlicmFyeS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVHVlIE1hciAxNSAxMzoxMTo1NiAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJQWRkZWQgbWVzc2FnZSB0eXBlcyBhbmQgc3RydWN0dXJlcyBmb3IgTURJCgoJKiBbaW5jbHVkZS9tZGkuaF0KCUNyZWF0ZWQgaW50ZXJuYWwgc3RydWN0dXJlcyBmb3IgaGFuZGxpbmcgTURJCgoJKiBbd2luZG93cy9tZGkuY10KCUJlZ2FuIGNyZWF0aW5nIE1ESSBzdXBwb3J0CgpUaHUgTWFyIDEwIDE2OjUxOjQ2IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBbbG9hZGVyL3dpbmUuY10gW2luY2x1ZGUvd2luZS5oXQoJQWRkZWQgbmV3IGZpZWxkIHRvICJzdHJ1Y3Qgd19maWxlcyIgdG8gaG9sZCB0aGUgIm5hbWUgdGFibGUiCglyZXNvdXJjZSBmb3IgV2luZG93cyAzLjAgcHJvZ3JhbXMKCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCUFkZGVkIGNvZGUgdG8gaGFuZGxlIHByb2dyYW1zIHdpdGggYSAibmFtZSB0YWJsZSIgcmVzb3VyY2UuCglMb2FkUmVzb3VyY2VCeU5hbWUoKSBtb2RpZmllZCB0byBjaGVjayBmb3IgdGhlIGV4aXN0ZW5jZSBvZgoJdGhpcyByZXNvdXJjZS4KCk1vbiBNYXIgMTQgMjI6MzE6NDIgTUVUIDE5OTQgIGp1bGxpYXJkQGRpLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZCkKCgkqIFtvYmplY3RzL2NvbG9yLmNdCglBZGRlZCBpbnN0YWxsaW5nIHRoZSBwcml2YXRlIGNvbG9ybWFwIG9uIHRoZSBkZXNrdG9wIHdpbmRvdy4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglDbGVhbmVkIHVwIGZvY3VzIGV2ZW50IGhhbmRsaW5nIChzZWUgZm9jdXMuYykuCglVc2UgR2V0Rm9jdXMoKSB0byBkaXJlY3Qga2V5IGV2ZW50cyB0byB0aGUgY29ycmVjdCB3aW5kb3cuCgoJKiBbd2luZG93cy9mb2N1cy5jXQoJUmV3cml0dGVuIFNldEZvY3VzKCkgdG86CgktIG9ubHkgc2V0IFggZm9jdXMgb24gdG9wLWxldmVsIHdpbmRvd3MKCS0gc2VuZCBXTV9TRVRGT0NVUyBhbmQgV01fS0lMTEZPQ1VTIG1lc3NhZ2VzICh3YXMgZG9uZSBpbiBldmVudC5jKQoJLSBwcmV2ZW50IHNldHRpbmcgZm9jdXMgdG8gZGlzYWJsZWQgd2luZG93cwoJLSBpbnN0YWxsIHByaXZhdGUgY29sb3JtYXAgc28gLXByaXZhdGVtYXAgb3B0aW9uIHdvcmtzIGFnYWluCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdIFt3aW5kb3dzL3RpbWVyLmNdCglDaGFuZ2VkIHRpbWVyIG1hbmFnZW1lbnQgdG8gbm8gbG9uZ2VyIHVzZSBQb3N0TWVzc2FnZSgpLCBidXQKCXRvIGdlbmVyYXRlIHRpbWVyIG1lc3NhZ2VzIG9uIHRoZSBmbHkuIEFsc28gZml4ZWQgYSByZWxhdGVkIGJ1ZwoJaW4gR2V0TWVzc2FnZSgpIHdoaWNoIGNvdWxkIGNhdXNlIGJ1c3ktd2FpdGluZy4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJT25seSBzZWxlY3QgZm9jdXMgZXZlbnRzIG9uIHRvcC1sZXZlbCB3aW5kb3dzLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglBZGRlZCBzb21lIHNhbml0eSBjaGVja3MgZm9yIGRlc2t0b3Agd2luZG93LgoKRnJpIE1hciAgNCAyMDo0MjowMSAxOTk0ICBFcmlrIEJvcyAoZXJpa0B0cmFzaGNhbi5oYWNrdGljLm5sKQoKCSogW21pc2MvZG9zX2ZzLmNdCglidWcgZml4ZXMgaW4gVG9Vbml4KCksIFdpbkluaUZpbGVOYW1lKCksIEdldFVuaXhGaWxlTmFtZSgpLiAKCVN1cHBvcnQgZm9yIHRpbGRlIHN5bWJvbCBhZGRlZCBmb3Igcm9vdGRpcmVjdG9yaWVzIGluIFtkcml2ZXNdCglzZWN0aW9uIG9mIHdpbmUncyBjb25maWdmaWxlLgoKCSogW21pc2MvZmlsZS5jXQoJaHJlYWQoKSwgaHdyaXRlKCkgYWRkZWQuCgoJKiBbbWlzYy9tYWluLmNdCglobWVtY3B5KCkgYWRkZWQuCgoJKiBbaWYxNjMyL3N0cmVzcy5zcGVjXSBbaW5jbHVkZS9zdHJlc3MuaF0gW21pc2Mvc3RyZXNzLmNdCglBZGRlZCBTVFJFU1MuRExMLCBhbiB1c2VsZXNzIGRsbCB1c2VkIHRvIHN0cmVzcyBhIHdpbmRvd3Mgc3lzdGVtLgoKCSogWyovKl0KCUFkZGVkIG1pc3NpbmcgI2luY2x1ZGVzLCBmaXhlZCBwcm90b3R5cGVzIGZvciBwcm90b3R5cGUgY2hlY2tpbmcuCgoJKiBbaW5jbHVkZS9wcm90b3R5cGVzLmhdCgoJQWRkZWQgcHJvdG90eXBlcyBmb3IgbG9hZGVyLypjLCBpZjE2MzIvKmMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBNYXIgIDggMDk6NTQ6MzQgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIFtDb25maWd1cmVdCglBZGRlZCByZW1pbmRlciB0byBzZXQgV0lORVBBVEgsIGlmIGl0IGlzIG5vdCBzZXQuCgoJKiBbSW1ha2VmaWxlXQoJUmVtb3ZlZCAjZWxpZidzCgoJKiBbY29udHJvbHMvYnV0dG9uLmNdCglBZGRlZCBCTl9DTElDS0VEIG5vdGlmaWNhdGlvbiBmb3Igb3duZXItZHJhdyBidXR0b25zLgoKCSogW2lmMTYzMi9rZXJuZWwuc3BlY10gW21lbW9yeS9oZWFwLmNdCglDaGFuZ2VkIExvY2FsKiBmdW5jdGlvbnMgdG8gV0lOMTZfTG9jYWwqIHRvIHByZXZlbnQgdW5jb25jaW91cyB1c2UKCW9mIHRoZXNlIGZ1bmN0aW9ucy4KCgkqIFtpZjE2MzIvcmVsYXkuY10KCVB1c2ggb2xkIFN0YWNrMTZGcmFtZSBvbiBzdGFjayBiZWZvcmUgc2V0dGluZy4KCgkqIFtpbmNsdWRlL2F0b20uaF0gW21pc2MvYXRvbS5jXSBbaW5jbHVkZS9oZWFwLmhdIFttZW1vcnkvbG9jYWwuY10KCUFkZGVkIG11bHRpcGxlIGxvY2FsIGhlYXAgaGFuZGxpbmcgaW4gQXRvbSogZnVuY3Rpb25zLgoKCSogW2luY2x1ZGUvcmVnZnVuYy5oXSBbbWlzY2VtdS9pbnQyMS5jXQoJUmV3cm90ZSBET1MzQ2FsbCgpIHVzZSBjb250ZXh0IGZyYW1lIHRoYXQgaXMgYWxyZWFkeSBvbiB0aGUgc3RhY2suCgoJKiBbbWlzYy9wcm9maWxlLmNdCglGaXhlZCB0byBhbGxvdyBsZWFkaW5nICI7IiB0byBtYXJrIGNvbW1lbnRzLgoKCSogW21pc2Mvc3B5LmNdCglGaXhlZCBidWdzIGFuZCBhZGRlZCBzdXBwb3J0IGZvciAiaW5jbHVkZSIgYW5kICJleGNsdWRlIiBmaWx0ZXJzLgoKCSogW21pc2MvdXNlci5jXQoJUmVhcnJhbmdlZCBjYWxscyBpbiBJbml0QXBwKCkuCgoJKiBbbWlzYy9mb250LmNdCglGaXhlZCBmb250IGhhbmRsaW5nIHRvIGNyZWF0ZSBzeXN0ZW0gZm9udHMsIGlmIHRoZXkgYXJlIHVzZWQuCgoJKiBbd2luZG93cy9kYy5jXQoJSWYgdGV4dCBkcmF3biBvbiB3aW5kb3cgd2l0aCBubyBmb250IHNwZWNpZmllZCwgdGhlbiBkZWZhdWx0IHRoZQoJZm9udCB0byB0aGUgc3lzdGVtIGZvbnQuCgpNb24gTWFyICA3IDIwOjMyOjA5IE1FVCAxOTk0ICBqdWxsaWFyZEBkaS5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQpCgoJKiBbY29udHJvbHMvZGVza3RvcC5jXQoJQWRkZWQgaGFuZGxpbmcgb2YgV01fTkNDUkVBVEUgYW5kIFdNX0VSQVNFQktHTkQgZnVuY3Rpb25zLgoJSW1wbGVtZW50ZWQgU2V0RGVza1BhdHRlcm4oKS4KCgkqIFttaXNjL21haW4uY10KCUFkZGVkIC1kZXNrdG9wIG9wdGlvbiB0byBnZXQgYSBsYXJnZSBkZXNrdG9wIHdpbmRvdyB3aXRoCglldmVyeXRoaW5nIGluc2lkZSBpdC4KCUFkZGVkIC1uYW1lIG9wdGlvbi4KCgkqIFttaXNjL3JlY3QuY10KCUJ1ZyBmaXggaW4gU3VidHJhY3RSZWN0KCkuCgoJKiBbb2JqZWN0cy8qLmNdCglSZXBsYWNlZCB0aGUgRGVmYXVsdFJvb3RXaW5kb3coKSBtYWNybyBieSB0aGUgcm9vdFdpbmRvdyB2YXJpYWJsZS4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdIFt3aW5kb3dzL21lc3NhZ2UuY10KCSAgW3dpbmRvd3Mvbm9uY2xpZW50LmNdIFt3aW5kb3dzL3dpbi5jXQoJQSBmZXcgY2hhbmdlcyB0byBhY2NvbW9kYXRlIHRoZSBuZXcgZGVza3RvcCB3aW5kb3cuCgogVHVlIE1hciAgOCAxMToxMzowMyAxOTk0ICBNaWd1ZWwgZGUgSWNhemEgIChtaWd1ZWxAeG9jaGl0bC5udWNsZWN1LnVuYW0ubXgpCiAKIAkqIFt0b29sa2l0L2FyY2guY10gLS1OZXcgZmlsZS0tIAogCVJvdXRpbmVzIGZvciBjb252ZXJ0aW5nIGxpdHRsZSBlbmRpYW4gZGF0YSBzdHJ1Y3R1cmVzIHRvCiAJYmlnLWVuZGlhbiBkYXRhIHN0cnVjdHVyZXMsIGN1cnJlbnRseSBvbmx5IEJJVE1BUCBzdHJ1Y3R1cmVzIGFyZSAKIAljb252ZXJ0ZWQuCiAKIAkqIFttaXNjL2F0b20uY10KIAlXaGVuIHVzZWQgYXMgcGFydCBvZiB0aGUgV2luZUxpYiwgdGhlIGNvZGUgaXMgbXVjaCBzaW1wbGVyLgogCURvZXNuJ3QgZGVwZW5kIG9uIGFsaWduZW1lbnQuCiAKIAkqIFtsb2FkZXIvd2luZS5jXQogCUlmZGVmZWQgRW11bGF0b3IgZGVwZW5kZW50IGNvZGUgaWYgY29tcGlsaW5nIFdpbmVMaWIuCiAKIAkqIFtsb2FkZXIvcmVzb3VyY2UuY10KIAlNb3ZlZCBtaXNjL3Jlc291cmNlLmMgdG8gbG9hZGVyL3Jlc291cmNlLmMuCiAKIAkqIFtsb2FkZXIvZHVtcC5jLGxkdC5jLGxkdGxpYi5jLGxpYnJhcnksYyxzZWxlY3Rvci5jLHNpZ25hbC5jXQogCUlmZGVmZWQgd2hvbGUgY29kZSBpZiBjb21waWxpbmcgV0lORUxJQi4KIAogCSogW2luY2x1ZGUvd2luc29jay5oXQogCUFkZGVkIGNvbXBpbGF0aW9uIGRlZmluZSB0byBhbGxvdyBjb21waWxhdGlvbiBvbiBTdW5PUy4KIAogCSogW2luY2x1ZGUvd2luZS5oXQogCVJlbW92ZWQgbG9hZF90eXBlaW5mbyBhbmQgbG9hZF9uYW1laW5mbyBwcm90b3R5cGVzLCB0aGV5IGJlbG9uZwogCXRvIG5lZXhlLmgKIAogCSogW2luY2x1ZGUvbmVleGUuaF0KIAlBZGRlZCBsb2FkX3R5cGVpbmZvIGFuZCBsb2FkX25hbWVpbmZvIHByb3RvdHlwZXMuCiAKIAkqIFtpbmNsdWRlL2FyY2guaF0KIAlGaXhlZCBzb21lIGJ1Z3MgaW4gdGhlIGNvbnZlcnNpb24gcm91dGluZXMuCiAJQWRkZWQgbWFjcm9zIGZvciBCaXRtYXAgbG9hZGluZy4KClR1ZSBNYXIgIDggMTI6NTI6MDUgMTk5NCAgY3J3QG1hbmlhYy5tbGIuc2VtaS5oYXJyaXMuY29tIChDYXJsIFdpbGxpYW1zKQogCQoJKiBbaWYxNjMyL2tlcm5lbC5zcGVjXSBbbWVtb3J5L2dsb2JhbC5jXQoJSW1wbGVtZW50ZWQgR2V0RnJlZVNwYWNlKCkKCgkqIFtpZjE2MzIvdXNlci5zcGVjXSBbbG9hZGVyL3Jlc291cmNlLmNdCglJbXBsZW1lbnRlZCBDcmVhdGVJY29uKCkKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVHVlIE1hciAgMSAxMTozMDoyMSAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogW0NvbmZpZ3VyZV0gWyovSW1ha2VmaWxlXQoJQ3JlYXRlZCBjb25maWd1cmUgc2NyaXB0IHRvIGhhbmRsZSBkaWZmZXJlbnQgdHlwZXMgb2YgV2luZSBidWlsZHMuCgoJKiBbQ29uZmlndXJlXSBbdG9vbHMvYnVpbGQuY10gW2lmMTYzMi9JbWFrZWZpbGVdIFtXaW5lLnRtcGxdCglBZGRlZCBhYmlsaXR5IHRvIGNvbXBpbGUgV2luZSBvbiBzeXN0ZW1zIHdpdGggMTQtY2hhciBmaWxlbmFtZSBsaW1pdC4KCgkqIFtpZjE2MzIvcmVsYXkuY10gW2luY2x1ZGUvb3B0aW9ucy5oXSBbbWlzYy9tYWluLmNdCglBZGRlZCAtcmVsYXlkYmcgb3B0aW9uIHRvIGNvbW1hbmQgbGluZSBpZiBERUJVR19SRUxBWSBpcyBkZWZpbmVkLgoKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJRml4ZWQgYnVnIGluIEdldEVudHJ5RExMTmFtZSgpIHRoYXQgY2F1c2VkIFdpbmUgdG8gc2VnIGZhdWx0LgoKCSogW21lbW9yeS9oZWFwLmNdCglGaXhlZCBMb2NhbEluaXQoKSB0byB3b3JrIGNvcnJlY3RseS4KCgkqIFttaXNjL3VzZXIuY10KCUFkZGVkIGNvZGUgdG8gY2FsbCBsb2FkZWQgRExMcycgaW5pdGlhbGl6YXRpb24gcm91dGluZXMuCgpUdWUgTWFyICAxIDAxOjAxOjE3IE1FVCAxOTk0ICBqdWxsaWFyZEBkaS5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQpCgoJKiBbd2luZG93cy9kY2UuY10KCUFkZGVkIGNsaXBwaW5nIG9mIGNoaWxkIHdpbmRvd3MgYnkgdGhlaXIgcGFyZW50J3MgY2xpZW50IGFyZWEuCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCUJ1ZyBmaXggaW4gTkNfRG9OQ1BhaW50KCkuCgoJKiBbd2luZG93cy9wYWludGluZy5jXQoJQnVnIGZpeCBpbiBSZWRyYXdXaW5kb3coKS4KCkZlYiAyNywgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW21lbS9hdG9tLmNdCglCdWcgZml4IGFnYWluIGluIEFUT01fRGVsZXRlQXRvbSgpIDogCgkJY2hhbmdlIExvY2FsRnJlZSgpIGJ5IFVTRVJfSEVBUF9GUkVFKCkuCgkoUHJldmlvdXMgcGF0Y2ggZG9uZSBGZWIgMTN0aCBoYWQgYmVlbiBsb3N0KQoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJTW92ZSBiaXRtYXBzIGxvYWRpbmcgaW4gQWxsb2NTY3JvbGxCYXIoKSBpbnN0ZWFkIG9mIGluIFdNX0NSRUFURS4KCgkqIFt3aW5kb3dzL2NsYXNzLmNdIChzb3JyeSBBbGV4IC4uLikKCVRoZXJlIHdhcyBubyBidWcgdGhlcmUgImluIFJlZ2lzdGVyQ2xhc3MoKSA6IAogICAgICAgICAgICAgICAgV05EQ0xBU1MtPmxwc3pDbGFzc05hbWUgd2FzIHJlc2V0IHRvIE5VTEwuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXgoKCSogW21pc2MvY2xpcGJvYXJkLmNdCS0tLSBOZXcgRmlsZSAtLS0KCU5ldyBmdW5jdGlvbiBFbnVtQ2xpcGJvYXJkRm9ybWF0cygpLgoJTmV3IGZ1bmN0aW9uIE9wZW5DbGlwYm9hcmQoKS4KCU5ldyBmdW5jdGlvbiBDbG9zZUNsaXBib2FyZCgpLgoJTmV3IGZ1bmN0aW9uIEVtcHR5Q2xpcGJvYXJkKCkuCglOZXcgZnVuY3Rpb24gR2V0Q2xpcGJvYXJkT3duZXIoKS4KCU5ldyBmdW5jdGlvbiBHZXRDbGlwYm9hcmRWaWV3ZXIoKS4KCU5ldyBmdW5jdGlvbiBDb3VudENsaXBib2FyZEZvcm1hdHMoKS4KCU5ldyBmdW5jdGlvbiBJc0NsaXBib2FyZEZvcm1hdEF2YWlsYWJsZSgpLgoJTmV3IGZ1bmN0aW9uIE9wZW5DbGlwYm9hcmQoKS4KCU5ldyBmdW5jdGlvbiBHZXRDbGlwYm9hcmREYXRhKCkuCglOZXcgZnVuY3Rpb24gU2V0Q2xpcGJvYXJkVmlld2VyKCkuCglOZXcgZnVuY3Rpb24gRW51bUNsaXBib2FyZEZvcm1hdHMoKS4KCU5ldyBmdW5jdGlvbiBSZWdpc3RlckNsaXBib2FyZEZvcm1hdCgpLgoJTmV3IGZ1bmN0aW9uIENoYW5nZUNsaXBib2FyZENoYWluKCkuCglOZXcgZnVuY3Rpb24gU2V0Q2xpcGJvYXJkRGF0YSgpLgoJTmV3IGZ1bmN0aW9uIEdldE9wZW5DbGlwYm9hcmRXaW5kb3coKS4KCU5ldyBmdW5jdGlvbiBHZXRQcmlvcml0eUNsaXBib2FyZEZvcm1hdCgpLgoJTmV3IGZ1bmN0aW9uIEdldENsaXBib2FyZEZvcm1hdE5hbWUoKS4KClR1ZSBNYXIgIDEgMjA6MTU6NDUgMTk5NCAgRXJpayBCb3MgPGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubD4KCgkqIFttaXNjL2NvbW0uY10KCWJ1Z2ZpeCBpbiBPcGVuQ29tbSgpLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUdWUgRmViIDIyIDE4OjA0OjAyIDE5OTQgIEplZmZyZXkgSHN1IDxoc3VAZnJlZWZhbGwuY2Ryb20uY29tPgoKCSogW2luY2x1ZGUvd2luc29jay5oXQoJVGhlIHNvY2twcm90byBzdHJ1Y3QgaXMgYWxyZWFkeSBkZWZpbmVkIGluIDxzeXMvc29ja2V0Lmg+CgoJKiBbbWlzYy93aW5zb2NrLmNdCglOZWVkIHRvIGluY2x1ZGUgPG5ldGluZXQvaW4uaD4gZm9yIHN0cnVjdCBpbi1hZGRyLgoJVXNlIHN5c19lcnJsaXN0W10gaW5zdGVhZCBvZiBzdHJlcnJvcltdLgoKCSpbdG9vbGtpdC9oZWFwLmNdCglBTlNJIEMgc3BlY2lmaWVzIHRoYXQgdGhlIG1hbGxvYyBmdW5jdGlvbnMgYXJlIGRlZmluZWQgaW4gc3RkbGliLmgsCgkgIHNvIHdlIGRvbid0IG5lZWQgdG8gaW5jbHVkZSBtYWxsb2MuaC4KCgkqW2xvYWRlci9sZHRsaWIuY10KCVByaW50IGluZm9ybWF0aXZlIGVycm9yIG1lc3NhZ2UgYWJvdXQgcHJvYmFibGUgY2F1c2Ugb2YgaTM4Nl9zZXRfbGR0KCkKCSAgZmFpbHVyZSBhbmQgdGhlbiBleGl0LgoKCSpbSW1ha2VmaWxlXQoJRm9yIHN5c3RlbXMgdGhhdCBkb24ndCB1c2UgZ21ha2UgYnkgZGVmYXVsdCwgc2V0IHRoZSBNQUtFIHZhcmlhYmxlCgkgIHRvIGdtYWtlIGFuZCBwcm9wYWdhdGUgaXQgb24gcmVjdXJzaXZlIG1ha2VzLgoJVGFrZSBvdXQgLWxpMzg2IGZvciBGcmVlQlNEIHN5c3RlbXMgYW5kIGRlZmluZSBfX0ZyZWVCU0RfXyBzbyBXaW5lCgkgIGNhbiBiZSBidWlsdCB3aXRoIHRoZSBGcmVlQlNEIDEuMC4yIGNvbXBpbGVyLgoKVHVlIEZlYiAyMiAwMjo1MjoxOSBFU1QgMTk5NCAgICBqcmljaGFyZEBjcy51bWwuZWR1IChKb2huIFJpY2hhcmRzb24pCgogICAgICAgICogW29iamVjdHMvYml0Ymx0LmNdCiAgICAgICAgQWRkZWQgaW4gdGhyZWUgZnVuY3Rpb25zIHRvIGRvIHN0cmV0Y2hpbmcgYW5kIGNvbXByZXNzaW9uCiAgICAgICAgZm9yIFdISVRFT05CTEFDSywgQkxBQ0tPTldISVRFLCBhbmQgY29sb3IgY29waWVzLgoKVHVlIEZlYiAyMiAxNTowMTozMSBFU1QgMTk5NCAgICBqcmljaGFyZEBjcy51bWwuZWR1IChKb2huIFJpY2hhcmRzb24pCgogICAgICAgICogW3dpbmRvd3MvZ3JhcGhpY3MuY10KICAgICAgICBBZGRlZCBGbG9vZEZpbGwgYW5kIEZsb29kRmlsbF9yZWMuICBGbG9vZEZpbGxfcmVjIGlzIHByZXR0eQogICAgICAgIGluZWZmaWNlbnQsIGJ1dCBzaG91bGQgc3VmZmljZSBmb3Igbm93LgoKICAgICAgICAqIFtpbmNsdWRlL3dpbmRvd3MuaF0KICAgICAgICBDaGFuZ2VkIHRoZSB4LHkgcGFyYW1hdGVycyBmb3IgdGhlIEZsb29kRmlsbCBwcm90b3R5cGUgCiAgICAgICAgZnJvbSBpbnRzIHRvIHNob3J0cwoKVHVlIEZlYiAyMiAwMDo1ODoyOCBNRVQgMTk5NCAganVsbGlhcmRAZGkuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkKQoKCSogW3dpbmRvd3Mvd2lkZ2V0cy5jXQoJQWRkZWQgZGVza3RvcCB3aW5kb3cgY2xhc3MuCgoJKiBbd2luZG93cy9wYWludGluZy5jXQoJQnVnIGZpeCBpbiBSZWRyYXdXaW5kb3coKS4KCUltcGxlbWVudGVkIEV4Y2x1ZGVVcGRhdGVSZ24oKS4KCgkqIFt3aW5kb3dzL3dpbi5jXSBbd2luZG93cy93aW5wb3MuY10KCUltcGxlbWVudGVkIGRlc2t0b3Agd2luZG93LgoKCSogW2NvbnRyb2xzL2Rlc2t0b3AuY10KCVByZWxpbWluYXJ5IGRlc2t0b3Agd2luZG93IHByb2NlZHVyZS4KCkZlYiAyMCwgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW2NvbnRyb2xzL21lbnUuY10KCU5ldyBmdW5jdGlvbiBMb2FkTWVudUluZGlyZWN0KCkuCglOZXcgZnVuY3Rpb24gR2V0TWVudUNoZWNrTWFya0RpbWVuc2lvbnMoKS4KCgkqIFtpZjE2MzIvdXNlci5zcGVjXQoJRW50cnkgZm9yIERlZkRsZ1Byb2MoKS4KCgkqIFt3aW5kb3dzL2NsYXNzLmNdCglGaXggYnVnIGluIFJlZ2lzdGVyQ2xhc3MoKSA6IAoJCVdORENMQVNTLT5scHN6TWVudU5hbWUgd2FzIHJlc2V0IHRvIE5VTEwuCgoJKiBbd2luZG93cy93aW4uY10KCUluIENyZWF0ZVdpbmRvd0V4KCksIGlmIGhNZW51ID09IDAgdGhlbiB1c2UgCgkJd25kY2xhc3MtPmxwc3pNZW51TmFtZSB0byBsb2FkIE1lbnUgZnJvbSByZXNvdXJjZTsKCk1vbiBGZWIgMjEgMjI6Mzg6MjggMTk5NCBFcmlrIEJvcyAoZXJpa0B0cmFzaGNhbi5oYWNrdGljLm5sKQoKCSogW2xvYWRlci9saWJyYXJ5LmNdIFtsb2FkZXIvd2luZS5jXQoJRml4ZWQgcnVuaW5nIERMTCdzIGFzIG1haW4gZXhlY3V0YWJsZSBwcm9ibGVtLgoKCSogW21pc2MvZG9zX2ZzLmNdCglBZGRlZCB3aWxkY2FyZCBzdXBwb3J0IGluIERPU19yZWFkZGlyKCkuCgoJKiBbbWlzYy93aW5zb2NrZXQuY10KCUFkZGVkIHByb3BlciBlcnJvciBoYW5kbGluZyBvZiBCU0Qgd2luc29ja2V0IGZ1bmN0aW9ucy4KCgkqIFttaXNjZW11L2ludDIxLmNdCglLRVJORUxfRE9TM0NhbGwgcmVuYW1lZCB0byBET1MzQ2FsbCBhbmQgbW9kaWZpZWQgdG8gdXNlIGRvX2ludDIxKCkuCgoJKiBbbWFpbi9tYWluLmNdCglBZGRlZCBmdW5jdGlvbnMgZm9yIEdldFZlcnNpb24sIEdldFdpbkZsYWdzIGFuZCBHZXRUaW1lclJlc29sdXRpb24KCWZvciBsaWJ3aW5lLmEsIFN5c3RlbVBhcmFtZXRlcnNJbmZvKCkgcGFydGx5IGltcGxlbWVudGVkLgoKVHVlIEZlYiAyMiAxOTowMDowMiAxOTk0ICBNaWd1ZWwgZGUgSWNhemEgIChtaWd1ZWxAeG9jaGl0bC5udWNsZWN1LnVuYW0ubXgpCgoJKiBbdG9vbGtpdC93aW5tYWluLmNdCglBZGRlZCBfV2luTWFpbiBmdW5jdGlvbi4gU2V0dXBzIHRoZSBsaWJyYXJ5IChjYWxscyBVU0VSX0luaXRBcHApLgoKCSogW3Rvb2xraXQvc3VwLmNdCglBZGRlZCBsb2FkX216X2hlYWRlciwgbG9hZF9uZV9oZWFkZXIsIGxvYWRfdHlwZV9pbmZvIGFuZAoJbG9hZF9uYW1lX2luZm8gZnVuY3Rpb25zLgoKCSogW3Rvb2xraXQvaGVhcC5jXSAKCUNvZGUgY2xlYW51cC4gCgoJKiBbbWlzYy91c2VyLmNdCglNb3ZlZCBmcm9tIGxvYWRlci9taXNjLmMuIEkgaG9wZSB0byBwdXQgYmFjayBhbGwgdGhlIGxvYWRlcgoJZnVuY3Rpb25zIGluIHRoZSB+bG9hZGVyIHN1YmRpcmVjdG9yeSBpbiB0aGUgZnV0dXJlLiBDVXJyZW50bHkgaXMKCW5lZWRlZCBzaW5jZSBpdCBoYXMgVVNFUl9Jbml0QXBwLgoKCSogW21pc2MvcmVzb3VyY2UuY10KCVNpbmNlIFdpbmVMaWIgd2lsbCBwcm9iYWJseSBuZWVkIERMTHMgKGN1cnJlbnRseSBpdCBuZWVkcwoJU3lzcmVzLmRsbCkuIFdpbmVMaWIgd2lsbCBiZSB1c2luZyBtdWNoIGNvZGUgb2YgdGhlIGxvYWRlciBhZ2Fpbi4KCVNvIEkgcmVtb3ZlZCBzb21lIGlmZGVmcyB0aGF0IHdlcmUgdXNlZCBieSBXaW5lTGliLgoKCUFkZGVkIGxvYWRfdHlwZWluZm8gYW5kIGxvYWRfbmFtZWluZm8gKGFuZCB0aGUgY29ycmVzcG9uZGluZwoJZnVuY3Rpb25zIGluIFt0b29sa2l0L3N1cC5jXQoKCUFkZGVkIGludGVnZXIgY29udmVydGlvbiBmdW5jdGlvbnMgaW4gdGhlIG5lZWRlZCBwbGFjZXMuCgoJQWRkZWQgdmVyeSB1Z2x5IHBhdGNoIChpbmNsdWRlcyB3aW5lLmMpLiBJbiB0aGUgbmV4dCByZWxlYXNlIEkKCXBsYW4gdG8gbW92ZSBiYWNrIGFsbCB0aGUgbG9hZGVyIHJvdXRpbmVzIHRvIH4vbG9hZGVyLiBJbiB0aGUKCW1lYW50aW1lIEkgbmVlZGVkIHRoaXMgcGF0Y2guIEl0IGRvZXNuJ3QgYWZmZWN0IGFueSBvZiB0aGUKCWVtdWxhdG9yIGNvZGUgKGl0cyBpZmRlZmVkIGZvciBXaW5lTGliKS4KCgkqIFttaXNjL21haW4uY10KCUNsZWFuZWQgdXAgY2FsbCB0byBXaW5NYWluIChub3cgdXNlcyBbdG9vbGtpdC93aW5tYWluLmNdCglJZmRlZmVkIGFyZ3VtZW50IG51bWJlciBjaGVja2luZyB3aGVuIGNvbXBpbGluZyB0aGUgbGlicmFyeS4KCgkqIFtsb2FkZXIvd2luZS5jXQoJTW9kaWZpZWQgdG8gdXNlIGxvYWRfKG16fG5lKV9oZWFkZXIgaW5zdGVhZCBvZiBkb2luZyBhIGRpcmVjdAoJcmVhZC4gIFdoZW4gY29tcGlsaW5nIHRoZSBlbXVsYXRvciBpdCBzdGlsbCB1c2VzIHRoZSBkaXJlY3QgcmVhZAoJZm9yIHBlcmZvcm1hbmNlLiAKCgkqIFtpbmNsdWRlL3dpbmUuaF0KCVByb3RvdHlwZXMgZm9yIGxvYWRpbmcgcm91dGluZXMuCgoJKiBbaW5jbHVkZS9jbGFzcy5oXQoJQWRkZWQgV0lORV9QQUNLRUQgbWFjcm8gaW5zdGVhZCBvZiBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkKCgkqIFtpbmNsdWRlL2FyY2guaF0KCU1hY3JvcyBmb3IgY29udmVydGluZyBpbnRlZ2VycyAoTGl0dGxlIGVuZGlhbiB0byBiaWctZW5kaWFuKS4KCU5lZWRlZCBpbiB0aGUgU3VuIHRvIGFsbG93IGxvYWRpbmcgb2YgRExMIGZpbGVzLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpNb24gRmViIDE0IDIzOjQ4OjA5IE1FVCAxOTk0ICBqdWxsaWFyZEBkaS5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQpCgoJKiBbd2luZG93cy9jbGlwcGluZy5jXQoJTW92ZWQgZXZlcnl0aGluZyBpbnRvIHdpbmRvd3MvcGFpbnRpbmcuYyBhbmQgcmVtb3ZlZCB0aGlzIGZpbGUuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglSZW1vdmVkIGNhbGxzIHRvIG1lbW1vdmUoKSBpbiBNU0dfUmVtb3ZlTXNnKCkuCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCUFkZGVkIFdNX0dFVE1JTk1BWElORk8gc3VwcG9ydCBmb3Igd2luZG93IHJlc2l6aW5nLgoKCSogW3dpbmRvd3MvcGFpbnRpbmcuY10KCUltcGxlbWVudGVkIFJlZHJhd1dpbmRvdygpLgoKCSogW3dpbmRvd3Mvc2Nyb2xsLmNdCglCdWcgZml4IGluIFNjcm9sbFdpbmRvd0V4KCkuCgoJKiBbd2luZG93cy93aW4uY10KCU1vdmVkIFVwZGF0ZVdpbmRvdygpIHRvIHdpbmRvd3MvcGFpbnRpbmcuYy4KCkZyaSBGZWIgMTEgMTI6NDE6MjggMTk5NCAgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKCQoJKiBbbG9hZGVyL3dpbmUuY10gW21pc2MvZG9zX2ZzLmNdCglnZXRlbnYoKSBlcSBOVUxMIGJ1Z2ZpeGVzLgoKCSogW21pc2MvY29tbS5jXQoJY2ZtYWtlcmF3IGNoYW5nZWQgZm9yIFN1bk9TLgoKRmViIDEzLCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbbWVtL2F0b20uY10KCUJ1ZyBmaXggaW4gQVRPTV9EZWxldGVBdG9tKCkgOiAKCQljaGFuZ2UgTG9jYWxGcmVlKCkgYnkgVVNFUl9IRUFQX0ZSRUUoKS4KCgkqIFttaXNjL21lc3NhZ2UuY10KCU5ldyBmdW5jdGlvbiBGYXRhbEFwcEV4aXQoKS4KCgkqIFtvYmplY3RzL2ZvbnQuY10KCU5ldyBlbXB0eSBzdHViIFNldE1hcHBlckZsYWdzKCkuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJQmV0dGVyIENoZWNrTWFyayAmIG90aGVyIGJpdG1hcHMgcGxhY2VtZW50LgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCU5ldyBmdW5jdGlvbiBSb3VuZFJlY3QoKSA6IGNhbGMuZXhlIG5vdyB3b3JraW5nLi4uCgpUdWUgRmViIDE1IDE0OjI5OjM3IDE5OTQgIEpvaG4gUmljaGFyZHNvbgoKICAgICAgICAqIFtvYmplY3RzL2JpdGJsdC5jXQogICAgICAgIEZpeGVkIFN0cmV0Y2hCbHQgc28gaXQgd29ya3MgcXVpY2tlciBhbmQgZmFzdGVyLiAgSXQgc3RpbGwgZG9lc24ndAogICAgICAgIHVzZSB0aGUgU3RyZXRjaE1vZGUgYml0cyBmb3IgYml0bWFwIGNvbXByZXNzaW9uLCBidXQgdGhhdCB3aWxsCiAgICAgICAgY29tZSBzb29uLgoKTW9uIEZlYiAxNCAxMzoyMTowNCAxOTk0ICBNaWd1ZWwgZGUgSWNhemEgIChtaWd1ZWxAcm94YW5uZS5udWNsZWN1LnVuYW0ubXgpCgoJKiBbaW5jbHVkZS93aW5kb3dzLmgsZGlhbG9nLmgsZ2RpLmhdCglDaGFuZ2VkIF9fYXRyaWJ1dGVfXyAoKHBhY2tlZCkpIGZvciBXSU5FX1BBQ0tFRC4gCglXaGVuIGNvbXBpbGluZyB0aGUgbGlicmFyeSB0aGlzIGlzIGRlZmluZWQgYXMgbm90aGluZy4gVGhpcyBnZXRzCglyaWQgd2l0aCBhbGwgdGhlIHByb2JsZW1zIGNvbXBpbGluZyB1bmRlciBTdW5PUy4gQWxzbyAKCgkqIFt3aW5kb3dzL3V0aWxpdHkuY10KCUFkZGVkIERlYnVnUHJpbnRTdHJpbmcuCgoJKiBbdG9vbGtpdC9zdXAuY10KCUFkZGVkIGhTeXNSZXMgPSAxIGRlZmluaXRpb24gdG8gcmVzb2x2ZSBleHRlcm5hbHMuCglBZGRlZCBDYWxsTGluZUREQVByb2MgZnVuY3Rpb24gKHRvb2xraXQgdmVyc2lvbikuCglBZGRlZCB0b3ksIGFuZCBoaSBpbmVmaWNpZW50IG1lbW1vdmUgdW50aWwgY29kZSBpbiBtZXNzYWdlLmMgZ2V0CglyZXdyaXR0ZW4uCgoJKiBbb2JqZWN0cy9nZGlvYmouY10KCUlmZGVmZWQgbGludXgvZW11bGF0b3ItZGVwZW5kZW50IGNvZGUgdG8gYWxsb3cgY29tcGlsYXRpb24gb2YKCVdpbmVMaWIuCgoJKiBbbWlzYy93aW5zb2NrZXQuY10KCUFkZGVkIGlmZGVmIHRvIGFsbG93IGNvbXBpbGF0aW9uIHVuZGVyIFN1bk9TLgoKCSogW21pc2MvcmVzb3VyY2UuY10KCVdoZW4gY29tcGlsaW5nIHRoZSBsaWJyYXJ5LCB0aGUgcmVzb3VyY2UgZmlsZSBpcyBleHBlY3RlZCB0byBiZSBpbgoJYSBmaWxlIGNhbGxlZCAkYXJndlswXS5SZXMuIEFsc28gdGhlIGluZm9ybWF0aW9uIG9mIHRoZSByZXNvdXJjZQoJaXMgZXhwZWN0ZWQgdG8gYmUgYXQgb2Zmc2V0IDAgb2YgdGhlIC5SZXMgZmlsZS4KCgkqIFttaXNjL21haW4uY10KCUNhbGwgV2luTWFpbiB3aXRoIGFyZ3VtZW50cyBpZiBjb21waWxpbmcgV2luZUxpYi4KCUNhbGwgc2h1dGRvd24gZnVuY3Rpb25zIChDb21tX0RlSW5pdCwgRE9TX0RlSW5pdEZTKS4KCUNhbGwgc3luY19wcm9maWxlcyB0byBwcmVzZXJ2ZSBjaGFuZ2VzIHRvIC5JTkkgZmlsZXMuCgoJKiBbbWlzYy9jb21tLmMsZG9zX2ZzLmNdCglyZW1vdmVkIGNhbGwgdG8gYXRleGl0KENvbW1fRGVJbml0KQoJcmVtb3ZlZCBjYWxsIHRvIGF0ZXhpdChET1NfRGVJbml0RlMpCglTaHV0ZG93biBmdW5jdGlvbnMgYXJlIG5vdyBjYWxsZWQgZnJvbSB0aGUgcmV0dXJuIG9mIFdpbk1haW4KCgkqIHJlbW92ZWQgbWVtb3J5bGliIHN1YmRpcmVjdG9yeQoKCSogbW92ZWQgbWVtb3J5L2F0b20uYyAgICB0byBtaXNjL2F0b20uYwoJICBtb3ZlZCBtZW1vcnlsaWIvaGVhcC5jIHRvIHRvb2xraXQvaGVhcC5jCgoJKiBbbG9hZGVyL3dpbmUuY10KCU1vdmVkIERlYnVnUHJpbnRTdHJpbmcgdG8gd2luZG93cy91dGlsaXR5LmMKCgkqIFtpbmNsdWRlL3dpbnNvY2suaF0KCURlZmluZSBTT19ET05UTElOR0VSIG9ubHkgaWYgaXQgaGFzIG5vdCBiZWVuIHByZXZpb3VzbHkgZGVmaW5lZC4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCWFkZGVkIGRlZmluaXRpb24gZm9yIERMR1BST0MuCglhZGRlZCBkZWZpbml0aW9uIGZvciBMTUVNX1dJTkVfQUxJR04gYW5kIG90aGVyIExNRU1fKiBjb25zdGFudHMuCglXaGVuIGNvbXBpbGluZyBXaW5lTGliIFdORFBST0MgaXMgZGVmaW5lZCB3aXRoIGFsbCB0aGUgcGFyYW1ldGVycwoJdG8gYXZvaWQgY29tcGlsYXRpb24gcHJvYmxlbXMuCgoJKiBbaW5jbHVkZS91c2VyLmhdCglXaGVuIGNvbXBpbGluZyBXaW5lTGliIFVTRVJfSEVBUF8oQUxMT0N8UkVBTExPQ3xBRERSfEZSRUUpIHRoZQoJY2FsbHMgYXJlIHRyYW5zbGF0ZWQgdG8gdGhlIGxpYnJhcnkgYWxsb2NhdGlvbiByb3V0aW5lcy4KCgkqIFtpbmNsdWRlL2dkaS5oLHVzZXIuaF0KCVdoZW4gY29tcGlsaW5nIFdpbmVMaWIgR0RJX0hFQVBfKEFMTE9DfEFERFJ8RlJFRSkgdGhlIGNhbGxzIGFyZQoJdHJhbnNsYXRlZCB0byB0aGUgbGlicmFyeSBhbGxvY2F0aW9uIHJvdXRpbmVzLgoKCSogW2luY2x1ZGUvYXRvbS5oXQoJRGVmaW5lZCBMb2NhbEFsaWduLiBXaGVuIGNvbXBpbGluZyB0aGUgZW11bGF0b3IgaXQncyB0cmFuc2xhdGVkIGFzCglhIGNhbGwgdG8gTG9jYWxBbGxvYyAodGhlIG9yaWdpbmFsIGNvZGUpLCB3aGVuIGNvbXBpbGluZyBXaW5lTGliCglhcyBhIGNhbGwgdG8gTG9jYWxBbGxvYyB3aXRoIGEgV0lORS1mbGFnIGNhbGxlZCBMTUVNX1dJTkVfQUxJR04KCShhdG9tLmMgbmVlZHMgYWxpZ25lZCBkYXRhIG9uIGEgNCBieXRlIGJvdW5kYXJ5KS4KCgkqIFttaXNjL2ZpbGUuY10KCVJlbmFtZWQgS0VSTkVMXyogZnVuY3Rpb25zIGFuZCBmaXhlZCBwcm90b3R5cGVzLgoKCSogW2lmMTYzMi9rZXJuZWwuc3BlY10KCVJlbmFtZWQgS0VSTkVMXyogZnVuY3Rpb25zIGluIG9yZGVyIHRvIGJlIHVzZWQgYnkgYXBwbGljYXRpb25zCgl1c2luZyBXaW5lIGFzIGEgbGlicmFyeSAoT3BlRmlsZSwgX2xjbG9zZSwgX2xyZWFkLCBfbGNyZWF0ZSwKCV9sbHNlZWssIF9sb3BlbiwgX2x3cml0ZSkuCgoJKiBbTWFrZWZpbGVdCglDcmVhdGUgbGlicmFyeSBpbnN0ZWFkIG9mIGV4ZWN1dGFibGUgd2hlbiBidWlsZGluZyB0YXJnZXQKCWxpYndpbmUuYSAKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVHVlIEZlYiAgOCAxMzo1MjoxMSAxOTk0ICBNaWd1ZWwgZGUgSWNhemEgIChtaWd1ZWxAcm94YW5uZSkKCgkqIFtNYWtlZmlsZXNdCglVc2UgJChDQykgaW5zdGVhZCBvZiBjYy4KCUFkZGVkIGxpYndpbmUgdGFyZ2V0LgoKCSogW2luY2x1ZGUvcHJvdG90eXBlc10KCSNpZmRlZmVkIHNlY3Rpb24gZm9yIFdpbmVMaWIKCgkqIG1vdmVkIGxvYWRlci9jdXJzb3IuYyAgIHRvIG1pc2MvY3Vyc29yLmMKCSAgbW92ZWQgbG9hZGVyL3Jlc291cmNlLmMgdG8gbWlzYy9yZXNvdXJjZS5jCgkgIG1vdmVkIG1pc2MvZW11bGF0ZS5jICAgIHRvIG1pc2NlbXUvZW11bGF0ZS5jCgkgIG1vdmVkIG1pc2MvaW50MWEuYyAgICAgIHRvIG1pc2NlbXUvaW50MWEuYwoJICBtb3ZlZCBtaXNjL2ludDIxLmMJICB0byBtaXNjZW11L2ludDIxLmMKCSAgbW92ZWQJbWlzYy9rZXJuZWwuYwkgIHRvIG1pc2NlbXUva2VybmVsLmMKCSAgbW92ZWQgbWlzYy91c2VyLmMgICAgICAgdG8gbWlzY2VtdS91c2VyLmMKCgkqIFttZW1vcnlsaWIvaGVhcC5jXQoJSGVhcCBtYW5hZ2VtZW50IGZvciBXaW5lTGliCgoJKiBbbWlzYy9jb21tLmNdCglNb2RpZmllZCB0byBhbGxvdyBjb21waWxhdGlvbiB1bmRlciBTdW5PUyAoI2luY2x1ZGUgZXJybm8sIFN1bk9TCglkb2Vzbid0IGhhdmUgYXRleGl0ICgpKS4KCgkqIFttaXNjL2Rvc19mcy5jXQoJTW9kaWZpZWQgdG8gYWxsb3cgY29tcGlsYXRpb24gdW5kZXIgU3VuT1MgKCNpbmNsdWRlIHZmcy5oKQoKCSogW21pc2MvZmlsZS5jXQoJTW9kaWZpZWQgdG8gYWxsb3cgY29tcGlsYXRpb24gdW5kZXIgU3VuT1MgKE9QRU5fTUFYIGNvbnN0YW50LAoJI2luY2x1ZGUgdW5pc3RkLmgpCgoJKiBbb2JqZWN0cy9wYWxldHRlLmNdCglNb2RpZmllZCB0byBhbGxvdyBjb21waWxhdGlvbiB1bmRlciBTdW5PUyAoI2luY2x1ZGUgbGltaXRzKQoKCSogW3Rvb2xraXQvc3VwLmNdCglXaW5lTGliIHZlcnNpb24gb2YgQ2FsbFdpbmRvd1Byb2MuCgoJKiBbd2luZG93cy9ldmVudC5jXQoJVHlwZWRlZiBYUG9pbnRlciB1bmRlciBYMTFSNCAoT3BlbldpbmRvd3MpLgoKCSogW3dpbmRvd3Mvd2luLmNdCglXaGVuIGNvbXBpbGluZyBXaW5lTGliLCB1c2UgZGlyZWN0IGNhbGxiYWNrcyBpbnN0ZWFkIG9mIHRoZQoJd2luZG93cyBzdXBwbGllZCBjYWxsYmFja3MuCgpNb24gRmViICA3IDIyOjM3OjM0IE1FVCAxOTk0ICBqdWxsaWFyZEBkaS5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQpCgoJKiBbbG9hZGVyL2N1cnNvci5jXQoJTmV3IGZ1bmN0aW9uIENVUlNPUl9TZXRXaW5DdXJzb3IoKSwgZm9yIGludGVybmFsIHVzZSwgdG8gc2V0Cgl0aGUgY3Vyc29yIG9mIGEgc3BlY2lmaWMgd2luZG93IG1vcmUgcmVsaWFibHkgdGhhbiB3aXRoIFNldEN1cnNvcigpLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglCZXR0ZXIgd2luZG93IG1hbmFnZW1lbnQuIE1vdmluZyBhbmQgcmVzaXppbmcgZnJvbSB0aGUgc3lzdGVtCgltZW51IHNob3VsZCB3b3JrIG5vdy4KCUFkZGVkIHNjcm9sbC1iYXIgbW91c2UgdHJhY2tpbmcuCgoJKiBbd2luZG93cy93aW4uY10KCU1vdmVkIHNjcm9sbC1iYXIgY3JlYXRpb24gYW5kIGRlc3RydWN0aW9uIHRvIGRlZnduZC5jLgoKRmViIDUsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJQ2FsbCB0byBTdGREcmF3TWVudUJhcigpIGR1cmluZyBOQydzIGRyYXdpbmcuCglOZXcgTkNfVHJhY2tNb3VzZU1lbnVCYXIoKSBmdW5jdGlvbiB3aGljaCBjYWxsIAoJCU1lbnVCdXR0b25Eb3duKCksIE1lbnVCdXR0b25VcCgpICYgTWVudU1vdXNlTW92ZSgpLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCU5ldyBDaGFuZ2VNZW51KCkgZnVuY3Rpb24uCglSZW1vdmUgcGVybWFuZW50bHkgb2xkIFh0IG1lbnUgY29kZS4KCU1ha2UgY29tbW9uIGZ1bmN0aW9ucyBNZW51QnV0dG9uRG93bigpLCBNZW51QnV0dG9uVXAoKQoJCSYgTWVudU1vdXNlTW92ZSgpIGZvciBib3RoIHBvcHVwcyAmIG1lbnViYXIuCgkKCSogW2NvbnRyb2xzL2NvbWJvLmNdCglQYWludCBPQk1fQ09NQk8gZGlyZWN0bHkgaW4gY29tYm8gY2xpZW50LgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUZpeCBidWcgaW4gbXVsdGljb2x1bW5zIGNhbGN1bGF0aW9ucy4KCgkqIFtjb250cm9scy9NYWtlZmlsZV0KCVJlbW92ZSBydWxlcyBmb3Igb2xkIGZpbGUgJ2NhcHRpb24uYycuCgoJKiBbbWlzYy9rZXJuZWwuY10KCVJlbW92ZSBlbXB0eSBzdHViIEdldE1vZHVsZUZpbGVOYW1lKCkuCgoJKiBbbG9hZGVyL2xpYnJhcnkuY10KCU5ldyBHZXRNb2R1bGVIYW5kbGUoKSBmdW5jdGlvbi4KCU5ldyBHZXRNb2R1bGVVc2FnZSgpIGZ1bmN0aW9uLgoJTmV3IEdldE1vZHVsZUZpbGVOYW1lKCkgZnVuY3Rpb24uCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglUcnkgdG8gZmluZCB0aGUgYnVnIGEgbWlzc2luZyBtZW51IGxvYWRpbmcgLi4uIE5vdCBmb3VuZCB5ZXQgIQoKCSogW3dpbmRvd3Mvd2luLmNdCglSZW1vdmUgb2xkIG1lbnViYXIgY3JlYXRpb24uCgpUaHUgRmViICAzIDIyOjMwOjExIDE5OTQgIEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCgoJKiBbbWlzYy93aW5zb2NrZXQuY10KCU1vcmUgZnVuY3Rpb25zIGFkZGVkLgoKCSogW2lmMTYzMi93aW5zb2NrLnNwZWNdIFttaXNjL3dpbnNvY2tldC5jXQoJQWRkZWQgSm9obiBCcmV6YWsncyB3aW5zb2NrLmRsbCBzdHVmZi4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVHVlIEZlYiAgMSAyMToxNDo0NyAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJQWRkZWQgZnVuY3Rpb24gQ3JlYXRlTmV3U2VnbWVudHMoKS4gIE1vZGlmaWVkIElQQ0NvcHlTZWxlY3RvcgoJdG8gYWxsb3cgYWxpYXNpbmcgdG8gYW55IGFyYml0cmFyeSBtZW1vcnkgc3BhY2UuCgoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJRml4ZWQgcG90ZW50aWFsIGJ1ZyBpbiBHbG9iYWxHZXRGcmVlU2VnbWVudHMoKS4KCgkqIFttZW1vcnkvbGluZWFyLmNdCglDcmVhdGVkIGZ1bmN0aW9ucyBHbG9iYWxMaW5lYXJMb2NrKCkgYW5kIEdsb2JhbExpbmVhclVubG9jaygpLgoKVHVlIEZlYiAgMSAwNTo1MTo0MyAxOTk0ICBqdWxsaWFyZEBkaS5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQpCgoJKiBbY29udHJvbHMvd2lkZ2V0cy5jXQoJUmVtb3ZlZCBDQVBUSU9OIHdpbmRvdyBjbGFzcy4KCgkqIFtsb2FkZXIvY3Vyc29yLmNdCglCdWcgZml4IGluIExvYWRDdXJzb3IoKTogZG9uJ3QgYWxsb2NhdGUgbWVtb3J5IGV2ZXJ5IHRpbWUgZm9yCglidWlsdC1pbiBjdXJzb3JzLgoKCSogW3dpbmRvd3MvY2xpcHBpbmcuY10KCUludmFsaWRhdGUgY2hpbGQgd2luZG93cyBpbiBJbnZhbGlkYXRlUmduKCkuCgoJKiBbd2luZG93cy9kZWZ3bmQuY10KCUFkZGVkIHJlcGFpbnQgb2YgdGhlIGNhcHRpb24gd2hlbiBjaGFuZ2luZyB3aW5kb3cgdGV4dC4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglNb2RpZmllZCBTZXRDYXB0dXJlKCkgdG8gYWxsb3cga2V5Ym9hcmQgZXZlbnRzIHdoaWxlIGNhcHR1cmluZy4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCU5ldyBmdW5jdGlvbiBNU0dfR2V0SGFyZHdhcmVNZXNzYWdlKCksIHRvIGRvIG1vdXNlIHRyYWNraW5nCgl3aXRob3V0IHJldHVybmluZyBjb250cm9sIHRvIHRoZSBXaW5kb3dzIHByb2dyYW0uCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCUEgY291cGxlIG9mIGNoYW5nZXMgaW4gZnJhbWUgZHJhd2luZyBmb3IgRExHTU9EQUxGUkFNRSB3aW5kb3dzLgoJUmV3cml0dGVuIHdpbmRvdyBtb3ZpbmcgY29kZSwgdG8gdXNlIE1TR19HZXRIYXJkd2FyZU1lc3NhZ2UoKQoJaW5zdGVhZCBvZiBub24tY2xpZW50IG1vdXNlIGV2ZW50cyAodGhpcyBpcyB0aGUgd2F5IFdpbmRvd3MKCWRvZXMgaXQpLCBhbmQgdG8gc2VuZCBXTV9FTlRFUlNJWkVNT1ZFIG1lc3NhZ2VzLgoJUmVtb3ZlZCBXTV9OQ0JVVFRPTlVQIGFuZCBXTV9OQ01PVVNFTU9WRSBoYW5kbGVycy4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJQWxsb2NhdGUgdGVtcG9yYXJ5IHN0cnVjdHVyZXMgb24gdGhlIFVTRVIgaGVhcCBpbnN0ZWFkIG9mCgl1c2luZyBHbG9iYWxBbGxvYygpLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglBZGRlZCBmdW5jdGlvbiBXSU5QT1NfR2V0TWluTWF4SW5mbygpIHRvIGdldCBzaXppbmcgaW5mb3JtYXRpb25zLgoKSmFuIDMxLCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCUNhbGwgdG8gU3RkRHJhd1Njcm9sbEJhcigpIGR1cmluZyBOQydzIGRyYXdpbmcuCglDYWxsIHRvIE5DX1Njcm9sbEJhckJ1dHRvbkRvd24oKSBvbiBOQyBtb3VzZSBldmVudHMgV01fTEJVVFRPTkRPV04uCglDYWxsIHRvIE5DX1Njcm9sbEJhckJ1dHRvblVwKCkgb24gTkMgbW91c2UgZXZlbnRzIFdNX0xCVVRUT05VUC4KCUNhbGwgdG8gTkNfU2Nyb2xsQmFyTW91c2VNb3ZlKCkgb24gTkMgbW91c2UgZXZlbnRzIFdNX01PVVNFTU9WRS4KCgkqIFtjb250cm9scy9tZW51LmNdCglOZXcgR2V0U3ViTWVudSgpIGZ1bmN0aW9uLgoJTW92ZSBHZXRNZW51KCkgJiBTZXRNZW51KCkgZnVuY3Rpb25zIGZyb20gJ3dpbmRvd3Mvd2luLmMnLgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCVN0YXJ0IGNoYW5nZXMgdG8gc2F0aXNmeSByZWNlbnQgY2hhbmdlcyBpbiBzY3JvbGxiYXJzL3dpbmRvd3MuCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglQdXQgc29tZSBjb2RlIGluIExvYWRBY2NlbGVyYXRvcnMoKSBzdHViLgoJTmV3IFRyYW5zbGF0ZUFjY2VsZXJhdG9yKCkgZnVuY3Rpb24uCgoJKiBbd2luZG93cy93aW4uY10KCVJlbW92ZSBHZXRNZW51KCkgJiBTZXRNZW51KCkgZnVuY3Rpb25zLgoJQ2FsbCB0byBOQ19DcmVhdGVTY3JvbGxCYXJzKCkgaWYgcmVxdWlyZWQgYnkgQ3JlYXRlV2luZG93KCkuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCk1vbiBKYW4gMjQgMTA6NDA6MTAgRVNUIDE5OTQgSm9obiBSaWNoYXJkc29uIChqcmljaGFyZEBjcy51bWwuZWR1KQoKICAgICAgICAqIFt3aW5kb3cvd2luLmNdCiAgICAgICAgQWRkZWQgZnVuY3Rpb25zIEVudW1XaW5kb3dzLCBFbnVtQ2hpbGRXaW5kb3dzLCBhbmQgaGVscGVyCiAgICAgICAgV0lOX0VudW1DaGlsZFdpbi4gIEVudW1XaW5kb3dzIHdvbid0IGxpc3QgYWxsIHdpbmUgd2luZG93cwogICAgICAgIGJlY2F1c2UgR2V0RGVza3RvcFdpbmRvdyBpc24ndCBjb21wbGV0ZS4gIEhvd2V2ZXIsIHRoZSBjb2RlCiAgICAgICAgaXMgaW4gcGxhY2UgZm9yIGl0IHRvIHdvcmsgY29ycmVjdGx5IGFuZCBvbmx5IG5lZWRzIAogICAgICAgIEdldERlc2t0b3BXaW5kb3cgdG8gZG8gc28uICAKClR1ZSBKYW4gMjUgMDU6NTE6NDcgMTk5NCAganVsbGlhcmRAZGkuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkKQoKCSogW3dpbmRvd3MvZGVmd25kLmNdCglBZGRlZCBoYW5kbGluZyBvZiBhY3RpdmF0aW9uIG1lc3NhZ2VzIChXTV9BQ1RJVkFURSwKCVdNX05DQUNUSVZBVEUsIFdNX01PVVNFQUNUSVZBVEUpCgoJKiBbd2luZG93cy9ldmVudC5jXQoJRGUtYWN0aXZhdGUgdGhlIHdpbmRvdyB3aGVuIGxvc2luZyBpbnB1dCBmb2N1cy4KCgkqIFt3aW5kb3dzL2ZvY3VzLmNdCglCdWcgZml4IGluIFNldEZvY3VzKCkuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglBZGRlZCBhY3RpdmF0aW9uIG9mIHRoZSB3aW5kb3cgb24gbW91c2UtY2xpY2tzLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglDaGFuZ2VkIG5vbi1jbGllbnQgYXJlYSBwYWludGluZyB0byB1c2UgdGhlIGNvcnJlY3QgY29sb3JzCglkZXBlbmRpbmcgdXBvbiB0aGUgYWN0aXZhdGlvbiBzdGF0ZS4KCUFkZGVkIFdNX05DQUNUSVZBVEUgbWVzc2FnZSBoYW5kbGluZy4KCUZpeGVkIGEgY291cGxlIG9mIGJ1Z3MgaW4gd2luZG93IG1vdmluZyBhbmQgcmVzaXppbmcuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCUltcGxlbWVudGVkIEdldC9TZXRBY3RpdmVXaW5kb3coKS4KCUltcGxlbWVudGVkIFNXUF9OT0FDVElWQVRFIGZsYWcgaW4gU2V0V2luZG93UG9zKCkuCgpKYW4gMTcsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFttaXNjL21lc3NhZ2UuY10KCU1lc3NhZ2VCb3ggaGFzIGEgQ2FwdGlvbkJhciBmb3IgaGlzIHRpdGxlIGV4Y2VwdCBmb3IKCQlNQl9TWVNURU1NT0RBTCB3aXRoIE1CX0lDT05IQU5ELgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglDYWxsIHRvIE5DX1RyYWNrU3lzTWVudSBvbiBTeXNNZW51IGJ1dHRvbiBtb3VzZSBjbGljay4KCgkqIFt3aW5kb3dzL2RlZnduZC5jXQoJQ2FsbCB0byBOQ19UcmFja1N5c01lbnUgb24gQWx0IGtleSAoVktfTUVOVSkuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJTmV3IEdldFN5c3RlbU1lbnUoKSBmdW5jdGlvbi4KCU5ldyBDb3B5U3lzdGVtTWVudSgpIGludGVybmFsIGZ1bmN0aW9uLgoJTmV3IE5DX1RyYWNrU3lzTWVudSgpIGludGVybmFsIGZ1bmN0aW9uLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJTmV3IFdNX0lOSVRNRU5VLCBXTV9JTklUTUVOVVBPUFVQLCBXTV9NRU5VU0VMRUNUICYgV01fTUVOVUNIQVIgZGVmaW5lcy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVGh1IEphbiAxMyAxMTo0NToxMyAxOTk0ICBKb2huIFJpY2hhcmRzb24gPGpyaWNoYXJkQGNzLnVtbC5lZHU+CgoJKiBbd2luZG93L3dpbi5jXQoJQWRkZWQgZnVuY3Rpb25zIEVuYWJsZVdpbmRvdywgSXNXaW5kb3dFbmFibGVkLCBhbmQgaGVscGVyIAoJV0lOX1NldFNlbnNpdGl2ZS4KCQoJKiBbd2luZG93L2V2ZW50LmNdCglBZGRlZCBjaGVja3MgZm9yIFdTX0RJU0FCTEVEIHdpbmRvd3MgaW4gRVZFTlRfa2V5LCBFVkVOVF9Nb3Rpb25Ob3RpZnksCglFVkVOVF9CdXR0b25QcmVzcywgRVZFTlRfQnV0dG9uUmVsZWFzZSwgRVZFTlRfQ29uZmlndXJlTm90aWZ5LAoJRVZFTlRfRm9jdXNJbiwgRVZFTlRfRm9jdXNPdXQsIGFuZCBFVkVOVF9FbnRlck5vdGlmeS4gIEtleSBhbmQgCglidXR0b24gcHJlc3NlcyBiZWVwIGZvciBhIGRpc2FibGVkIHdpbmRvdy4gIAoJSWYgYW55b25lIGZpbmRzIGJldHRlciBwbGFjZXMgZm9yIHRoZXNlIGNoZWNrcywgcGxlYXNlIHRlbGwgbWUuCgpKYW4gMTcsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFttaXNjL21lc3NhZ2UuY10KCUNsZWFudXAgb24gYnV0dG9ucyBhbnN3ZXIgdmFsdWUgcmV0dXJuZWQuCgoJKiBbY29udHJvbC9jb21iby5jXQoJTm93IHVzZSBPQk1fQ09NQk8gYml0bWFwIGRyb3Bkb3duIGJ1dHRvbi4KCk1vbiBKYW4gMTcgMjE6NTY6NDUgMTk5NCAgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKCgkqIFttaXNjL2NvbW0vY10KCUEgZmV3IGJ1Z2ZpeGVzLgoKVHVlIEphbiAxOCAwNjozNjo0OCAxOTk0ICBqdWxsaWFyZEBkaS5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQpCgoJKiBbbG9hZGVyL2N1cnNvci5jXQoJQWRkZWQgWCBjdXJzb3IgZm9yIElEQ19TSVpFTlMgYW5kIElEQ19TSVpFV0UuCgoJKiBbaW5jbHVkZS9vcHRpb25zLmhdIFttaXNjL21haW4uY10gIChOZXcgZmlsZXMpCglSZXdyb3RlIG1haW4oKSBmdW5jdGlvbiB0byBnZXQgcmlkIG9mIFh0IGFwcGxpY2F0aW9uIGNvbnRleHQsCglhbmQgYWRkZWQgY29tbWFuZC1saW5lIG9wdGlvbiBwYXJzaW5nLgoKCSogW29iamVjdHMvY29sb3IuY10KCVVzZSBvZiBhIHByaXZhdGUgbWFwIG5vdyBjb25maWd1cmFibGUgd2l0aCBjb21tYW5kLWxpbmUgb3B0aW9uLgoKCSogW3dpbmRvd3MvZGVmd25kLmNdCglBZGRlZCBXTV9TWVNDT01NQU5EIGhhbmRsaW5nLCBhbmQgYmV0dGVyIFdNX1NFVENVUlNPUiBoYW5kbGluZy4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglSZW1vdmVkIENvbmZpZ3VyZU5vdGlmeSBldmVudCBoYW5kbGVyIChubyBsb25nZXIgbmVlZGVkKS4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCVNlbmQgV01fU0VUQ1VSU09SIG1lc3NhZ2Ugb24gbW91c2UgZXZlbnRzLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglVc2UgT0VNIGJpdG1hcHMgZm9yIHRoZSBkcmF3aW5nIG9mIHRoZSBub24tY2xpZW50IGFyZWEuCglBZGRlZCBjYXB0aW9uIGJhciBidXR0b25zIGhhbmRsaW5nLCBhbmQgbW92aW5nIGFuZCByZXNpemluZyBvZgoJdGhlIHdpbmRvdyB2aWEgdGhlIHdpbmRvdyBmcmFtZSAoYnlwYXNzaW5nIHRoZSB3aW5kb3cgbWFuYWdlcikuCgoJKiBbd2luZG93cy9wYWludGluZy5jXQoJQnVnIGZpeCBpbiBCZWdpblBhaW50KCkuCgoJKiBbd2luZG93cy93aW4uY10KCVNldCB0aGUgb3ZlcnJpZGVfcmVkaXJlY3QgZmxhZyBmb3Igd2luZG93cyAodG8gYnlwYXNzIHdpbmRvdwoJbWFuYWdlcikuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCUltcGxlbWVudGVkIFdpbmRvd0Zyb21Qb2ludCgpLCBDaGlsZFdpbmRvd0Zyb21Qb2ludCgpLAoJQnJpbmdXaW5kb3dUb1RvcCgpLCBHZXQvU2V0SW50ZXJuYWxXaW5kb3dQb3MoKSwKCUdldC9TZXRXaW5kb3dQbGFjZW1lbnQoKS4KCk1vbiBKYW4gMTcgMjA6NDg6MjQgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIFttZW1vcnkvaGVhcC5jXQoJQWRkZWQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgbG9jYWwgaGVhcHMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBKYW4gIDQgMTM6MDE6MzMgMTk5NCAgRGF2aWQgTWV0Y2FsZmUgPGRhdmlkQHByaXNtLmRlbW9uLmNvLnVrPgoKICAgICAgICAqIFt3aW5kb3cvY2FyZXQuY10KICAgICAgICBNb2RpZmllZCBjb2RlIHRvIHVzZSBzeXN0ZW0gdGltZXIuCgpKYW4gOSwgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW3dpbmRvd3Mvd2luLmNdCglXaW5kb3dzIGNyZWF0ZSBpZiByZXF1aXJlZCBuZXcgWExJQiBNZW51QmFyICYgQ2FwdGlvbkJhci4KCgkqIFt3aW5kb3dzL2RlZnduZC5jXQoJV01fQ0FMQ1NJWkUgTW92ZSAmIFJlc2l6ZSBjYXB0aW9uLCBtZW51YmFyICYgc2Nyb2xsYmFycy4KCShJJ20gbm90IHN1cmUgaXQncyB0aGUgZ29vZCBwbGFjZSBmb3IgaXQsIGJ1dCBpdCB3b3JrLi4uKQoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJb3B0aW1pemUgaW4gRmluZFJlc291cmNlQnlOdW1iZXIsIG1ha2UgbHNlZWsoKSBpZiBuZXh0IHR5cGUgLi4uCgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCglzY3JvbGxiYXIgYnV0dG9ucyBhcmUgbm93IHVzaW5nIHN5c3RlbSByZXNvdXJjZXMgYml0bWFwcy4KCgkqIFtjb250cm9scy9jYXB0aW9uLmNdIC0gbmV3IGZpbGUgLi4uCgljYXB0aW9uYmFyIHNob3dpbmcgdGl0bGUsIGNsb3NlIGJ1dHRvbiB3aXRoIFN5c01lbnUsCglhbmQgb3RoZXIgYnV0dG9ucyB1c2luZyBzeXN0ZW0gcmVzb3VyY2VzIGJpdG1hcHMuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJTmV3IGZ1bmN0aW9uczogU2V0TWVudUl0ZW1CaXRtYXBzKCkgd2l0aCAnZ2x1ZXMnLAoJTWFrZSBuZXcgdmVyc2lvbiBvZiBMb2FkTWVudSgpICYgUGFyc2VNZW51KCksCgkoIHB1dCAjZGVmaW5lIFVTRV9QT1BVUE1FTlUgKS4KCUltcGxlbWVudGF0aW9uIG9mIE1lbnVCYXIgZnVuY3Rpb25zLgoJCgkqIFtzeXNyZXMuZGxsXQoJTmV3IGJpdG1hcHMgZm9yIHN5c3RlbSBzdWNoIE9CTV9DTE9TRSwgT0JNX01JTklNSVpFLCBPQk1fVVBBUlJPV0kuCglOZXcgU1lTTUVOVSBtZW51LCBpdCBkb24ndCB3b3JrIHlldCAhIDotKCgKClR1ZSBKYW4gMTEgMDU6Mjc6NDUgMTk5NCAganVsbGlhcmRAZGkuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkCgoJKiBbbWVtb3J5L2F0b20uY10KCUZpeGVkIGEgYnVnIHRoYXQgY291bGQgY2F1c2UgYXRvbXMgdG8gYmUgY2FzZS1zZW5zaXRpdmUuCgoJKiBbbWlzYy9yZWN0LmNdCglCdWcgZml4IGluIFN1YnRyYWN0UmVjdCgpLgoKCSogW29iamVjdHMvY2xpcHBpbmcuY10KCUJ1ZyBmaXggd2hlbiBzZXR0aW5nIHRoZSBjbGlwIG1hc2sgdG8gYW4gZW1wdHkgcmVnaW9uLgoKCSogW3dpbmRvd3MvZGNlLmNdCglCdWcgZml4IGluIFJlbGVhc2VEQygpLgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglDYWxsIEFkanVzdFdpbmRvd1JlY3RFeCgpIGJlZm9yZSBjcmVhdGluZyB0aGUgZGlhbG9nIHdpbmRvdy4KCUFkZGVkIHN1cHBvcnQgZm9yIERTX01PREFMRlJBTUUgc3R5bGUuCgoJKiBbd2luZG93cy9ldmVudC5jXQoJQ2xlYW5lZCB1cCBldmVudCBoYW5kbGluZyBhbmQgcmVtb3ZlZCBvbGQgWHQgc3R1ZmYuCglNb3ZlZCBkb3VibGUtY2xpY2sgaGFuZGxpbmcgdG8gd2luZG93cy9tZXNzYWdlLmMKCgkqIFt3aW5kb3dzL2ZvY3VzLmNdCglCdWcgZml4OiBvbmx5IHNldCB0aGUgWCBmb2N1cyB3aGVuIHRoZSB3aW5kb3cgaXMgdmlld2FibGUuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJUmV3cml0dGVuIERyYXdSZWxpZWZSZWN0KCkgdG8gdXNlIGJydXNoIGluc3RlYWQgb2YgcGVuLCBhbmQKCXRvIHVzZSB0aGUgc3lzdGVtIGNvbG9ycy4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCUltcGxlbWVudGVkIFdNX05DSElUVEVTVCBtZXNzYWdlIHNlbmRpbmcsIGFuZCBub24tY2xpZW50Cgltb3VzZSBtZXNzYWdlcy4KCUNsZWFuZWQgdXAgZG91YmxlLWNsaWNrIGhhbmRsaW5nLCBhbmQgcmVtb3ZlZCB0aGUgWHQgY29kZS4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXSAgKE5ldyBmaWxlKQoJSW1wbGVtZW50ZWQgQWRqdXN0V2luZG93UmVjdCgpLgoJSW1wbGVtZW50ZWQgV01fTkNDQUxDU0laRSwgV01fTkNISVRURVNUIGFuZCBXTV9OQ1BBSU5UIGhhbmRsaW5nLgoKCSogW3dpbmRvd3MvcGFpbnRpbmcuY10KCUFkZGVkIHNlbmRpbmcgb2YgdGhlIFdNX05DUEFJTlQgbWVzc2FnZSBpbiBCZWdpblBhaW50KCkuCgoJKiBbd2luZG93cy9zeXNtZXRyaWNzLmNdIFtpbmNsdWRlL3N5c21ldHJpY3MuaF0gIChOZXcgZmlsZXMpCglJbXBsZW1lbnRlZCBzeXN0ZW0gbWV0cmljcy4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJQnVnIGZpeCBpbiBzZXR0aW5nIHRoZSBwYXJlbnQgYW5kIG93bmVyIGluIENyZWF0ZVdpbmRvdygpLgoJUmVtb3ZlZCB0aGUgWHQgY29kZS4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJQWRkZWQgc2VuZGluZyBvZiB0aGUgV01fTkNQQUlOVCBtZXNzYWdlIGluIFNldFdpbmRvd1BvcygpLgoJUmVtb3ZlZCB0aGUgWHQgY29kZS4KClN1biBKYW4gIDIgMTI6Mzg6NTMgMTk5NCAgRGF2aWQgTWV0Y2FsZmUgPGRhdmlkQHByaXNtLmRlbW9uLmNvLnVrPgoKCSogW3dpbmRvd3MvY2xhc3MuY10KCUltcGxlbWVudGVkIEdldENsYXNzTmFtZSBhbmQgR2V0Q2xhc3NJbmZvLgoKCSogW3dpbmRvd3MvY2FyZXQuY10KCVZhcmlvdXMgaW1wcm92ZW1lbnRzIHRvIHRleHQgY2FyZXQgY29kZS4KCkZyaSBEZWMgMzEgMTU6MjI6MjIgMTk5MyAgSm9obiBCcmV6YWsgPGJyZXpha0BhcG9sbG8uaHAuY29tPgoKCSogW21pc2MvY29tbS5jXQoJUGF0Y2hlcyB0byB3b3JrIHdpdGggTmV0QlNELgoKVGh1IERlYyAzMCAxMjoxMTo1NSAxOTkzICBKb2huIFJpY2hhcmRzb24gPGpyaWNoYXJkQGNzLnVtbC5lZHU+CgoJKiBbb2JqZWN0cy9iaXRibHQuY10gQWRkZWQgU3RyZXRjaEJsdCgpLgoKVHVlIEphbiAgNCAwNToyMjowNyAxOTk0ICBqdWxsaWFyZEBkaS5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQpCgoJKiBbbWlzYy91c2VyLmNdCglBZGRlZCBjcmVhdGlvbiBvZiBzeXN0ZW0gbWVzc2FnZSBxdWV1ZS4KCgkqIFtvYmplY3RzL2JpdG1hcC5jXSBbb2JqZWN0cy9kY3ZhbHVlcy5jXSBbd2luZG93cy9kYy5jXQoJQWRkZWQgREMgc2l6ZSBmaWVsZHMgaW50byBEQyBzdHJ1Y3R1cmUuCQkKCgkqIFtvYmplY3RzL2NsaXBwaW5nLmNdCglCdWcgZml4IGluIENMSVBQSU5HX0ludGVyc2VjdFJlY3QoKS4KCgkqIFt3aW5kb3dzL2NsYXNzLmNdCglBbGxvY2F0ZSBhIERDRSBpbnN0ZWFkIG9mIGEgREMgZm9yIENTX0NMQVNTREMgY2xhc3Nlcy4KCgkqIFt3aW5kb3dzL2NsaXBwaW5nLmNdCglGaXhlZCBHZXRVcGRhdGVSZWN0KCkgYW5kIEdldFVwZGF0ZVJnbigpIHRvIGNsaXAgdG8gdGhlIGNsaWVudCBhcmVhLgoKCSogW3dpbmRvd3MvZGNlLmNdCglJbXBsZW1lbnRlZCBHZXREQ0V4KCkgYW5kIEdldFdpbmRvd0RDKCkuCgoJKiBbd2luZG93cy9kZWZ3bmQuY10KCUltcGxlbWVudGVkIFdNX1dJTkRPV1BPU0NIQU5HRUQgaGFuZGxpbmcuCgoJKiBbd2luZG93cy9ldmVudC5jXQoJUHJlbGltaW5hcnkgc3VwcG9ydCBmb3IgWGxpYiBldmVudCBoYW5kbGluZyBpbnN0ZWFkIG9mIFh0IGNhbGxiYWNrcy4KCUNoYW5nZWQgTVNHX0FkZE1zZygpIGNhbGxzIHRvIGhhcmR3YXJlX2V2ZW50KCkgb3IgUG9zdE1lc3NhZ2UoKS4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCVByZWxpbWluYXJ5IHN1cHBvcnQgZm9yIG11bHRpcGxlIG1lc3NhZ2UgcXVldWVzLgoJSW1wbGVtZW50ZWQgaGFyZHdhcmVfZXZlbnQoKSB0byBzdG9yZSBtZXNzYWdlcyBpbnRvIHRoZSBzeXN0ZW0gcXVldWUuCglJbXBsZW1lbnRlZCBHZXQvU2V0VGFza1F1ZXVlKCkuCglCZXR0ZXIgV01fUEFJTlQgYW5kIFdNX1RJTUVSIGhhbmRsaW5nLgoJQ2hhbmdlcyB0byB1c2UgWGxpYiBpbnN0ZWFkIG9mIFh0IGZvciBldmVudHMuCgoJKiBbd2luZG93cy9wYWludGluZy5jXQoJVXNlIEdldERDRXgoKSB0byByZXRyaWV2ZSB0aGUgREMsIHRvIGdldCBhIGNvcnJlY3QgdmlzaWJsZSByZWdpb24uCgoJKiBbd2luZG93cy90aW1lci5jXQoJTW92ZWQgdGhlIHRpbWVyIHByb2NlZHVyZSBjYWxsYmFjayBpbnRvIERpc3BhdGNoTWVzc2FnZSgpLgoJQ2hhbmdlZCBpbXBsZW1lbnRhdGlvbiB0byBnZXQgcmlkIG9mIFh0IHRpbWVvdXRzLiAgVGltZXIgY2hlY2tpbmcKCWlzIG5vdyBkb25lIGluc2lkZSBHZXRNZXNzYWdlKCkuCgoJKiBbd2luZG93cy93aW4uY10KCUFsbG9jYXRlIGEgRENFIGluc3RlYWQgb2YgYSBEQyBmb3IgQ1NfT1dOREMgd2luZG93cy4KCVJlcGxhY2VkIFh0IGNhbGxzIHdpdGggWGxpYiBjYWxscy4KCU1vdmVkIHdpbmRvdyBwb3NpdGlvbmluZyBmdW5jdGlvbnMgaW50byB3aW5kb3dzL3dpbnBvcy5jCgoJKiBbd2luZG93cy93aW5wb3MuY10gIChOZXcgZmlsZSkKCVJld3JpdHRlbiBtb3N0IG9mIHRoZSB3aW5kb3cgcG9zaXRpb25pbmcgZnVuY3Rpb25zLgoJSW1wbGVtZW50ZWQgU2V0V2luZG93UG9zKCkgYW5kIE1hcFdpbmRvd1BvaW50cygpLgoKSmFuIDMsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFtpZjE2MzIvdXNlci5zcGVjXQoJQmFkIGFyZ3VtZW50cyBkZXNjcmlwdGlvbiBmb3IgZnVuY3Rpb24gU2V0RGxnSXRlbVRleHQuCgoJKiBbb2JqZWN0cy90ZXh0LmNdCglGdW5jdGlvbiBEcmF3VGV4dCBub3cgaGFuZGxlIERUX0NBTENSRUNUIHJlcXVlc3QuCgoJKiBbbWlzYy9tZXNzYWdlLmNdCglNZXNzYWdlIGJveGVzIG5vdyB1c2UgRHJhd1RleHQgd2l0aCBEVF9DQUxDUkVDVC4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglCdWcgZml4IGluIGZ1bmN0aW9uIEZyYW1lUmVjdCwgKGl0IHdhcyB1c2luZyBQRU4gaW5zdGVhZCBvZiBCUlVTSCkuCgoJKiBbd2luZG93cy93aW4uY10KCUJ1ZyBmaXggZm9yIGZsYWdzIGluIGZ1bmN0aW9uIFNob3dXaW5kb3cuCglNb3JlIGFjY3VyYXRlIFdNX1NJWkUgZ2VuZXJhdGVkIGJ5IGZ1bmN0aW9uIFNob3dXaW5kb3cuCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJTW9yZSBjb2RlIGZvciBMQlNfTVVMVElQTEVTRUwuCglNb3JlIGNvZGUgZm9yIExCU19NVUxUSUNPTFVNTi4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUJhZCBkZWZpbmUgZm9yIE1GX1NFUEFSQVRPUi4KCgkqIFtjb250cm9scy9tZW51LmNdCglOZXcgZnVuY3Rpb25zOiBQb3BNZW51V25kUHJvYygpIHdpdGggJ2dsdWVzJywKCUNyZWF0ZVBvcHVwTWVudSgpLCBBcHBlbmRNZW51KCksIEluc2VydE1lbnUoKSwgUmVtb3ZlTWVudSgpLCAKCURlbGV0ZU1lbnUoKSwgTW9kaWZ5TWVudSgpLCBUcmFja1BvcHVwTWVudSgpLgoJQ29kZSBpbiBzdHViczogQ3JlYXRlTWVudSgpLCBEZXN0cm95TWVudSgpLiAKClNhdCBKYW4gIDEgMTA6MjI6NDMgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIGxvYWRlci93aW5lLmM6IEFkZGVkIHN1cHBvcnQgZm9yIHJlbG9jYXRpb24gdHlwZXMgNSBhbmQgNi4KCk1vbiBEZWMgMjcgMTE6MDY6MDMgMTk5MyAgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKCgkqIFttaXNjL2NvbW0uY10KCW5ldyBmdW5jdGlvbnM6IEJ1aWxkQ29tbURDQigpLCBPcGVuQ29tbSgpLCBDbG9zZUNvbW0oKSwKCVNldENvbW1CcmVhaygpLCBDbGVhckNvbW1CcmVhaygpLCBFc2NhcGVDb21tRnVuY3Rpb24oKSwgRmx1c2hDb21tKCksCglHZXRDb21tRXJyb3IoKSwgU2V0Q29tbUV2ZW50TWFzaygpLCBHZXRDb21tRXZlbnRNYXNrKCksCglTZXRDb21tU3RhdGUoKSwgR2V0Q29tbVN0YXRlKCksIFRyYW5zbWl0Q29tbUNoYXIoKSwgUmVhZENvbW0oKSwgCglXcml0ZUNvbW0oKS4KCldlZCBEZWMgMjIgMTM6MDA6MTUgMTk5MyAgRGF2aWQgTWV0Y2FsZmUgPGRhdmlkQHByaXNtLmRlbW9uLmNvLnVrPgoKCSogW3dpbmRvd3MvY2FyZXQuY10KCUltcGxlbWVudGVkIHRleHQgY2FyZXQgZnVuY3Rpb25zLgoKVHVlIERlYyAyMSAwNjoxMzo1OCAxOTkzICBqdWxsaWFyZEBkaS5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQpCgoJKiBbbG9hZGVyL3dpbmUuY10KCUJ1ZyBmaXggaW4gTG9hZEltYWdlKCkuCgoJKiBbb2JqZWN0cy9iaXRibHQuY10gW29iamVjdHMvY2xpcHBpbmcuY10gW29iamVjdHMvdGV4dC5jXQoJICBbd2luZG93cy9kYy5jXSBbd2luZG93cy9kY2UuY10gW3dpbmRvd3MvZ3JhcGhpY3MuY10KCU1vZGlmaWVkIGdyYXBoaWNzIGNhbGxzIHRvIHRha2UgaW50byBhY2NvdW50IHRoZSBEQyBvcmlnaW4uCgoJKiBbd2luZG93cy9kZWZ3bmQuY10KCUFkZGVkIHByZWxpbWluYXJ5IFdNX05DQ0FMQ1NJWkUgaGFuZGxpbmcuCgoJKiBbd2luZG93cy9ldmVudC5jXQoJU2VuZCBXTV9OQ0NBTENTSVpFIG1lc3NhZ2Ugb24gcmVzaXplIGV2ZW50LgoKCSogW3dpbmRvd3Mvd2luLmNdCglTZW5kIFdNX05DQ0FMQ1NJWkUgbWVzc2FnZSBpbiBDcmVhdGVXaW5kb3coKS4KCVJlYWxpemUgd2lkZ2V0cyBhdCBjcmVhdGlvbiB0aW1lIChzaG91bGQgcHJldmVudCBwcm9ibGVtcyB3aXRoCgl1bnJlYWxpemVkIHdpZGdldHMpLgoKRGVjIDE5LCA5MyBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbY29udHJvbHMvc3RhdGljLmNdCglTZW5kIG1vdXNlICYga2V5Ym9hcmQgbWVzc2FnZSByZWNlaXZlZCB0byBpdHMgcGFyZW50LgoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJU2VuZCBrZXlib2FyZCBtZXNzYWdlIHJlY2VpdmVkIHRvIGl0cyBwYXJlbnQuCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJQWRkIE5hdmlnYXRpb24ga2V5cyAuCglMaXN0Qm94IG5vdyB1c2UgVlNDUk9MTCAmIEhTQ1JPTEwgaW5zdGVhZCBvZiBjaGlsZHJlbi4KCUFscGhhIHZlcnNpb24gb2YgTEJTX01VTFRJUExFU0VMLgoJQWxwaGEgdmVyc2lvbiBvZiBMQlNfTVVMVElDT0xVTU4uCgoJKiBbY29udHJvbHMvY29tYm8uY10KCUFkZCBOYXZpZ2F0aW9uIGtleXMgb24gY2xvc2VkIENvbWJvQm94LgoJUmVtb3ZlIHVzZWxlc3MgJ0NPTUJPQk9YX0NyZWF0ZUNvbWJvQm94JyBmdW5jdGlvbi4KCk1vbiBEZWMgMTkgMjA6Mzk6MzQgMTk5MyAgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKCgkqIFtsb2FkZXIvd2luZS4KCUxvYWRJbWFnZSgpIG1vZGlmaWVkIHRvIHVzZSBGaW5kRmlsZSgpLgoKCSogW21pc2MvZmlsZS5jXQoJU2V0RXJyb3JNb2RlIGFkZGVkCgoJKiBbbWlzYy9kb3NfZnMuY10KCWJ1ZyBmaXhlcy4KCkRlYyAxMywgOTMgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW21lbW9yeS9nbG9iYWwuY10KCWJ1ZyBmaXggaW4gR2xvYmFsR2V0RnJlZVNlZ21lbnQgOiBnb29kIHB0ciBpbiAnZ19wcmV2Jy4KCgkqIFtzeXNyZXMuZGxsXQoJcHJlbGltaW5hcnkgdmVyc2lvbiBvZiBhICdnbGFzcyBvZiB3aW5lJyBiaXRtYXAKCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglOZXcgZnVuY3Rpb24gJ0dldENhcHR1cmUnLgoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJUmVtb3ZlIHVzZWxlc3MgJ1NDUk9MTEJBUl9DcmVhdGVTY3JvbGxCYXInIGZ1bmN0aW9uLgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCVJlbW92ZSB1c2VsZXNzICdMSVNUQk9YX0NyZWF0ZUxpc3RCb3gnIGZ1bmN0aW9uLgoKTW9uIERlYyAxMyAxMzo1MTowMCAxOTkzICBEYXZpZCBNZXRjYWxmZSA8ZGF2aWRAcHJpc20uZGVtb24uY28udWs+CgoJKiBbb2JqZWN0cy9mb250LmNdCglDb3JyZWN0ZWQgYnVncyBpbiBHZXRDaGFyV2lkdGgoKS4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglNb2RpZmllZCBFVkVOVF9rZXkgdG8gc2VuZCBXaW5kb3dzIHZpcnR1YWwga2V5IGNvZGVzIGZvcgoJV01fS0VZRE9XTiBhbmQgV01fS0VZVVAgbWVzc2FnZXMsIGFuZCBhIFdNX0NIQVIgbWVzc2FnZQoJZm9yIHByaW50YWJsZSBjaGFyYWN0ZXJzLgoKV2VkIERlYyAwOCAxOToyMDowMCAxOTkzICBLYXJsIEd1ZW50ZXIgV3VlbnNjaCAoaG4zMjR3dUB1bmlkdWkudW5pLWR1aXNidXJnLmRlKQoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCUFkZGVkIFBvbHlsaW5lIGFuZCBQb2x5Z29uCgpNb24gRGVjIDEzIDE0OjUxOjU0IDE5OTMgIEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJTGlzdEJveERpcmVjdG9yeSgpIG1vZGlmaWVkIHRvIHVzZSBkb3NfZnMuYydzIGZ1bmN0aW9ucyB0bwoJYWNjZXNzIGZpbGVzJnxkcml2ZXMuCgpTYXQgRGVjIDA0IDE3OjA0OjIzIDE5OTMgIEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCgogICAgICAgCSogW21pc2MvZG9zX2ZzLmNdCiAgICAgICAJQWRkZWQgRmluZEZpbGUoKSB0byBzZWFyY2ggYSBmaWxlIGluIGEgZG9zL3VuaXggc3R5bGUgcGF0aC4KCQoJKiBbbWlzYy9maWxlLmNdCglOZXcgV2luMzEgZnVuY3Rpb25zOiBPcGVuRmlsZSwgX2xjcmVhdGUsIF9sbHNlZWssIEdldFRlbXBEcml2ZSwKCUdldFRlbXBGaWxlTmFtZSwgR2V0V2luZG93c0RpcmVjdG9yeSwgR2V0U3lzdGVtRGlyZWN0b3J5LAoJR2V0RHJpdmVUeXBlLgkJCSAgIAoKICAgICAgIAkqIFttaXNjL2ludDIxLmNdCiAgICAgICAJTW9kaWZpZWQuCgpXZWQgRGVjICAxIDE2OjIwOjQ1IDE5OTMgIE1pZ3VlbCBkZSBJY2F6YSAgKG1pZ3VlbEByb3hhbm5lLm51Y2xlY3UudW5hbS5teCkKCiAgICAgICAgKiBbbWlzYy9wcm9maWxlLmNdCiAgICAgICAgVGhlIFByb2ZpbGUgZnVuY3Rpb25zIG5vdyByZXR1cm4gdGhlIGNvcnJlY3QgdmFsdWVzLiBUaGV5IG5vdwogICAgICAgIGltcGxlbWVudCBhbGwgdGhlIGZlYXR1cmVzIGRlc2NyaWJlZCBpbiB0aGUgU0RLLgoKVHVlIE5vdiAzMCAxMzo1NToyNyAxOTkzICBCb2IgQW1zdGFkdCAgKGJvYiBhdCBhbXNjb25zKQoKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJUmV3cm90ZSBzZWxlY3RvciBhbGlhc2luZyByb3V0aW5lcyB0byB1c2UgU3lzdGVtIFYgSVBDCglyb3V0aW5lIHRvIGFsaWFzIG1lbW9yeSBzZWdtZW50cy4KCk5vdiAyOCwgOTMgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCU1vcmUgY29uc2lzdGVuY3kgaW4gZnVuY3Rpb25zIHVzaW5nIHdJbmRleGVzCgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCglOZXcgZnVuY3Rpb24gOiBTaG93U2Nyb2xsQmFyKCkuCgoJKiBbbG9hZGVyL2N1cnNvci5jXSAuLi4gTmV3IGZpbGUKCU1vdmUgY3Vyc29yIGZ1bmN0aW9ucyBmcm9tIFtsb2FkZXIvcmVzb3VyY2UuY10uCglOZXcgZnVuY3Rpb24gOiBDbGlwQ3Vyc29yKCkuCglOZXcgZnVuY3Rpb24gOiBHZXRDbGlwQ3Vyc29yKCkuCglOZXcgZnVuY3Rpb24gOiBDcmVhdGVDdXJzb3IoKS4KCVNldEN1cnNvcigpIG5vdyB3b3JraW5nIHVzaW5nIGdsb2FiYWwgdmFyaWFibGUgJ3dpbkhhc0N1cnNvcicuCgoJKltvYmplY3QvcGFsZXR0ZS5jXQoJTmV3IHN0dWIgb25seSA6IFNlbGVjdFBhbGV0dGUoKS4KCU5ldyBzdHViIG9ubHkgOiBSZWFsaXplUGFsZXR0ZSgpLgoKCSpbd2luL2V2ZW50LmNdCglOZXcgZnVuY3Rpb24gOiBFVkVOVF9lbnRlcl9ub3RpZnkoKSwKCQl1cGRhdGUgJ3dpbkhhc0N1cnNvcicgYW5kIHNlbmQgV01fU0VUQ1VSU09SLgoKCSpbd2luL2RlZnduZC5jXQoJQWRkIHByb2Nlc3Npbmcgb2YgV01fU0VUQ1VSU09SIG1lc3NhZ2UuCgoJKlt3aW4vd2luLmNdCglOZXcgbWVtYmVycyBpbiBXTkQgc3RydWN0dXJlIDogaEN1cnNvciwgaFduZFZTY3JvbGwgJiBoV25kSFNjcm9sbC4gCglDcmVhdGVXaW5kb3dFeCgpIG5vdyBjcmVhdGUgY2hpbGRyZW4gZm9yIFdNX0hTQ1JPTEwgJiBXTV9WU0NST0xMLgoJTmV3IGZ1bmN0aW9uIENsaWVudFRvU2NyZWVuKCkuCglOZXcgZnVuY3Rpb24gU2NyZWVuVG9DbGllbnQoKS4KCk1vbiBOb3YgMjUgMTg6MjU6NDAgMTk5MyAgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKCiAgICAgICAJKiBbZmlsZXMuaCAvIHJlZ2Z1bmMuaCAvIG1pc2MvZG9zLmNdCiAgICAgICAJUmVtb3ZlZC4KCiAgICAgICAJKiBbbWlzYy9kb3NfZnMuY10KICAgICAgIAlBZGRlZCBzdXBwb3J0IGZvciBsb2FkaW5nIGRvc2RyaXZlIGNmZyBmcm9tIHdpbmUuaW5pLgoKICAgICAgIAkqIFttaXNjL2ludDIxLmNdCiAgICAgICAJTW9kaWZpZWQuCgoKV2VkIE5vdiAyNCAxMTozNzozMyAxOTkzICBqdWxsaWFyZEBkaXN1bnMyLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZCkKCgkqIFtpbmNsdWRlL2F0b20uaF0gW21lbW9yeS9hdG9tLmNdCglJbXBsZW1lbnRlZCBhdG9tcy4KCgkqIFt3aW5kb3dzL2NsYXNzLmNdCglNb2RpZmllZCBSZWdpc3RlckNsYXNzKCkgdG8gdXNlIGF0b21zLgoJSW1wbGVtZW50ZWQgQ1NfR0xPQkFMQ0xBU1Mgc3R5bGUuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglJbXBsZW1lbnRlZCBSZWdpc3RlcldpbmRvd01lc3NhZ2UoKS4KCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCUJ1ZyBmaXggaW4gTG9hZFJlc291cmNlKCkuCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCU1vZGlmaWVkIENyZWF0ZURpYWxvZ1BhcmFtKCkgdG8gdXNlIEZpbmQvTG9hZFJlc291cmNlKCkuCgpNb24gTm92IDIyIDEzOjU4OjU2IDE5OTMgIERhdmlkIE1ldGNhbGZlIDxkYXZpZEBwcmlzbS5kZW1vbi5jby51az4KCiAgICAgICAgKiBbd2luZG93cy9zY3JvbGwuY10KCVByZWxpbWluYXJ5IGltcGxlbWVudGF0aW9ucyBvZiBTY3JvbGxXaW5kb3csIFNjcm9sbERDIGFuZAogICAgICAgIFNjcm9sbFdpbmRvd0V4LgoKTm92IDIxLCA5MyBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJT3B0aW1pemF0aW9uIG9mIHJlZHJhdyBkdXJpbmcgJ0FkZCcgb3IgJ0luc2VydCcuCgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCglPcHRpbWl6YXRpb24gb2YgV01fUEFJTlQgZHVyaW5nICd0aHVtYnRyYWNraW5nJy4KCgkqIFtjb250cm9scy9idXR0b24uY10KCUFkZCBvZiBiZXRhIGltcGxlbWVudCBvZiAnQlNfT1dORVJEUkFXJwoKCSogW2NvbnRyb2xzL3N0YXRpYy5jXQoJU3R5bGUgJ1NTX0lDT04nIG5ldyBzdXBwb3J0ZWQuCgoJKiBbbWlzYy9tZXNzYWdlLmNdCglCZWdpbiBvZiBpbXBsZW1hbnRhdGlvbiBvZiBNQl9YWFggc3R5bGVzLgoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJRnVuY3Rpb24gTG9hZEljb24oKSA6IG5vdyBwcmVwYXJlIHRyYW5zcGFyZW5jeSBCaXRtYXAgbWFzay4KCUZ1bmN0aW9uIExvYWRDdXJzb3IoKSA6IG5vdyBwcmVwYXJlIGEgJ1ggcGl4bWFwY3Vyc29yJy4KCU5ldyBmdW5jdGlvbiBTZXRDdXJzb3IoKSA6IG5vdCBmaW5pc2hlZC4KCU5ldyBmdW5jdGlvbiBTaG93Q3Vyc29yKCkgOiBub3QgZmluaXNoZWQuCglOZXcgZnVuY3Rpb24gQWNjZXNzUmVzb3VyY2UoKSA6IHN0dWIuCgoJKiBbb2JqL2RpYi5jXQoJRnVuY3Rpb24gRHJhd0ljb24oKTogZGV1Z2dpbmcgcGhhc2Ugb2YgaWNvbiB0cmFuc3BhcmVuY3kgbWFzay4KCgkqIFtsb2FkZXIvbGlicmFyeS5jXQoJbmV3IGZpbGUgZm9yIG5ld3MgZnVuY3Rpb25zIExvYWRMaWJyYXJ5KCkgJiBGcmVlTGlicmFyeSgpLgoKCSogW3N5c3Jlcy5kbGxdCglSZXNvdXJjZXMgb25seSAxNmJpdHMgRExMIGZvciBTeXN0ZW0gUmVzb3VyY2VzLCBpY29ucywgZXRjLi4uCgpTdW4gTm92IDE0IDE0OjM5OjA2IDE5OTMgIGp1bGxpYXJkQGRpLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZCkKCgkqIFtpbmNsdWRlL2RpYWxvZy5oXSBbd2luZG93cy9kaWFsb2cuY10KCVNpbXBsaWZpZWQgZGlhbG9nIHRlbXBsYXRlIHBhcnNpbmcuCglJbXBsZW1lbnRlZCBEaWFsb2dCb3hJbmRpcmVjdCgpLgoKCSogW3dpbmRvd3Mvd2luLmNdCglGaXhlZCBidWcgaW4gQ3JlYXRlV2luZG93KCkgd2hlbiBhYm9ydGluZyB3aW5kb3cgY3JlYXRpb24uCglNb2RpZmllZCBVcGRhdGVXaW5kb3coKSB0byBvbmx5IHVwZGF0ZSB2aXNpYmxlIHdpbmRvd3MuCglJbXBsZW1lbnRlZCBJc1dpbmRvdygpLgoKTm92IDE0LCA5MyBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJTGlzdGJveCBjb250cm9sIHdpbmRvdyA6IG5ldyBtZXNzYWdlcy4KCgkqIFtjb250cm9scy9jb21iby5jXQoJQ29tYm8gYm94IGNvbnRyb2wgd2luZG93IDogbmV3IG1lc3NhZ2VzLgoKCSogW21pc2MvbWVzc2FnZS5jXQoJTW92ZWQgc3R1YiBNZXNzYWdlQm94KCkgdG8gdGhpcyBuZXcgZmlsZS4KCUltcGxlbWVudGVkIG9mIGEgY2FsbGJhY2ssIG5vdyBNZXNzYWdlQm94IHNob3cgYSB3aW5kb3cuCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglOZXcgZnVuY3Rpb24gRGVzdHJveUljb24oKQoJTmV3IGZ1bmN0aW9uIERlc3Ryb3lDdXJzb3IoKQoJRmlsbGVkIHN0dWIgTG9hZEljb24oKQoJRmlsbGVkIHN0dWIgTG9hZEN1cnNvcigpCglCdWcgZml4ZWQgaW4gRmluZFJlc291cmNlQnlOYW1lKCkgOiBtaXNzaW5nIGxzZWVrKCkuCgoJKiBbb2JqL2RpYi5jXQoJTmV3IGZ1bmN0aW9uIERyYXdJY29uKCkKCgkqIFt3aW5kb3dzL3dpbi5jXQoJTmV3IGZ1bmN0aW9uIENsb3NlV2luZG93KCkKCU5ldyBmdW5jdGlvbiBPcGVuSWNvbigpCglOZXcgZnVuY3Rpb24gSXNJY29uaWMoKQoJTmV3IEZ1bmN0aW9uIEZpbmRXaW5kb3coKQoKU3VuIE5vdiAxNCAwODoyNzoxOSAxOTkzICBLYXJsIEd1ZW50ZXIgV3VlbnNjaCAoaHoyMjV3dUB1bmlkdWkudW5pLWR1aXNidXJnLmRlKQoKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJV3JvdGUgQWxsb2NDU3RvRFNBbGlhcygpIGFuZCBBbGxvY0RTdG9DU0FsaWFzKCkKClN1biBOb3YgMTQgMDg6Mjc6MTkgMTk5MyAgQm9iIEFtc3RhZHQgIChib2IgYXQgYW1zY29ucykKCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCVdyb3RlIEFsbG9jU2VsZWN0b3IoKSBhbmQgUHJlc3RvQ2hhbmdvU2VsZWN0b3IoKS4gIFlVSyEKClNhdCBOb3YgMTMgMTM6NTY6NDIgMTk5MyAgQm9iIEFtc3RhZHQgIChib2IgYXQgYW1zY29ucykKCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCVdyb3RlIEZpbmRSZXNvdXJjZSgpLCBMb2FkUmVzb3VyY2UoKSwgTG9ja1Jlc291cmNlKCksCglhbmQgRnJlZVJlc291cmNlKCkKCgkqIFtpbmNsdWRlL3NlZ21lbS5oXSBbbG9hZGVyL3NlbGVjdG9yLmNdIFtsb2FkZXIvc2lnbmFsLmhdCglDaGFuZ2VkIHNlbGVjdG9yIGFsbG9jYXRpb24gbWV0aG9kLgoKU3VuIE5vdiAxMCAwODoyNzoxOSAxOTkzICBLYXJsIEd1ZW50ZXIgV3VlbnNjaCAoaHoyMjV3dUB1bmlkdWkudW5pLWR1aXNidXJnLmRlKQoKCSogW2lmMTYzMi9jYWxsYmFjay5jIGlmMTYzMi9jYWxsLlMgaWYxNjMyL3VzZXIuc3BlY10gCglhZGRlZCBDYXRjaCAoS0VSTkVMLjU1KSBhbmQgVGhyb3cgKEtFUk5FTC41NikKCQpOb3YgNywgOTMgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJU2Nyb2xsIGJhciBjb250cm9sIHdpbmRvdwoJCUJ1ZyByZXNvbHZlZCA6IFBhaW50aW5nIG1lc3NhZ2UgYmVmb3JlIHNjcm9sbCB2aXNpYmxlLgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUxpc3Rib3ggY29udHJvbCB3aW5kb3cKCQlEZXN0cm95IGNsZWFudXAuCgoJKiBbY29udHJvbHMvY29tYm8uY10KCUNvbWJvIGJveCBjb250cm9sIHdpbmRvdwoJCURlc3Ryb3kgY2xlYW51cC4KCgkqIFtjb250cm9scy9idXR0b24uY10KCQlHZXRDaGVjayBNZXNzYWdlIG5vdyByZXR1cm4gaXMgc3RhdGUuCgoJKiBbd2luZG93cy93aW4uY10KCU5ldyBmdW5jdGlvbiBJc1dpbmRvd1Zpc2libGUoKQoKTW9uIE5vdiAgMSAxNDo0MDoyMSAxOTkzICBqdWxsaWFyZEBkaS5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQpCgoJKiBbaWYxNjMyL3VzZXIuc3BlY10KCVJlbW92ZWQgc29tZSBkdXBsaWNhdGUgZW50cmllcy4KCgkqIFtpbmNsdWRlL2RpYWxvZy5oXSBbd2luZG93cy9kaWFsb2cuY10KCUltcGxlbWVudGVkIGRpYWxvZyB1bml0cyBhbmQgZm9udHMuCglBZGRlZCBwcmVsaW1pbmFyeSBsb2FkaW5nIG9mIGRpYWxvZyByZXNvdXJjZXMuCglQcmVsaW1pbmFyeSBpbXBsZW1lbnRhdGlvbiBvZiBEaWFsb2dCb3goKS4KCUltcGxlbWVudGVkIEdldC9TZXREbGdJdGVtKiBmdW5jdGlvbnMuCgoJKiBbd2luZG93cy93aW4uY10KCUltcGxlbWVudGVkIFdNX1BBUkVOVE5PVElGWSBtZXNzYWdlLgoJSW1wbGVtZW50ZWQgQ3JlYXRlV2luZG93RXgoKSBhbmQgR2V0V2luZG93KCkuCglDb21wbGV0ZWQgRGVzdHJveVdpbmRvdygpLgoKTW9uIE5vdiAgMSAxODoxOTozNCAxOTkzICBFcmlrIEJvcwoKCSogW2xvYWRlci9zaWduYWwuY10KCUFkZGVkIHN1cHBvcnQgZm9yIGludCAweDExICYgMHgxMi4KCiAgICAgICAgKiBbbG9hZGVyL2ludDIxLmNdCglJbXByb3ZlZCBmdW5jdGlvbiBoYW5kbGluZy4KClN1biBPY3QgMzEgMTI6Mzg6MDkgMTk5MyAgRGF2aWQgTWV0Y2FsZmUgPGRhdmlkQHByaXNtLmRlbW9uLmNvLnVrPgoKCSogW29iamVjdHMvZm9udC5jXQoJSW1wbGVtZW50ZWQgR2V0Q2hhcldpZHRoKCkuCgpXZWQgT2N0IDI3IDA5OjU2OjA2IDE5OTMgIEpvaG4gQnJlemFrIDxicmV6YWtAY2guaHAuY29tPgoKCSogW01ha2VmaWxlXQogICAgICAgIFVzZSBHTlUgbWFsbG9jLgoKCSogW2luY2x1ZGUvaW50MjEuaCBpbmNsdWRlL3dpbmUuaF0KICAgICAgICBDaGFuZ2Ugc2NfZWZsYWdzIHRvIHNjX2VmbCAuCgoJKiBbaW5jbHVkZS93aW5lLmhdCiAgICAgICAgRml4IG1pc3BsYWNlZCAjZW5kaWYKICAgICAgICBJbmNsdWRlIDxzaWduYWwuaD4gZm9yIE5ldEJTRAoKCSogW2xvYWRlci9pbnQyMS5jXQogICAgICAgIERvbid0IGluY2x1ZGUgPHN5cy92ZnMuaD4gaW4gTmV0QlNECiAgICAgICAgRG8gaW5jbHVkZSA8c3lzL21vdW50Lmg+IGluIE5ldEJTRAogICAgICAgIENsZWFudXAgc29tZSBsaW50LgoKTW9uIE9jdCAyNiAxNzo1OTowMSAxOTkzICBFcmlrIEJvcwoKICAgICAgICAqIFtpbmNsdWRlL2ludDIxLmhdCiAgICAgICAgQWRkZWQuCgogICAgICAgICogW2xvYWRlci9pbnQyMS5jXQogICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIG1hbnkgZG9zIGludHMuCgogICAgICAgICogW21pc2MvZmlsZS5jXSBbaW5jbHVkZS9maWxlcy5oXQogICAgICAgIE1vdmVkIE9QRU5fTUFYIGFuZCBEb3NEcml2ZVN0cnVjdCB0byBmaWxlcy5oLgoKU3VuIE9jdCAyNCAxMzozNjo1MCAxOTkzICBEYXZpZCBNZXRjYWxmZSA8ZGF2aWRAcHJpc20uZGVtb24uY28udWs+CgoJKiBbY29udHJvbHMvYnV0dG9uLmNdCglJbXBsZW1lbnRlZCBDSEVDS0JPWCwgQVVUT0NIRUNLQk9YLCAzU1RBVEUsIEFVVE8zU1RBVEUsCglSQURJT0JVVFRPTiwgQVVUT1JBRElPQlVUVE9OLCBHUk9VUEJPWCBjb250cm9scywgdG9nZXRoZXIgd2l0aAoJYSBwcmVsaW1pbmFyeSBVU0VSQlVUVE9OIGNvbnRyb2wuCgoJKiBbb2JqZWN0cy90ZXh0LmNdCglDb3JyZWN0ZWQgYnVncyBpbiBURVhUX05leHRMaW5lKCkgYW5kIGFkZGVkIGhhbmRsaW5nIG9mIHByZWZpeAoJY2hhcmFjdGVyLgoKCSogW2NvbnRyb2xzL2J1dHRvbi5jXQoJRGlzYWJsZWQgZm9jdXMgaGFuZGxpbmcgYnkgY29tbWVudGluZyBvdXQgU2V0Rm9jdXMoKSBjYWxscyB1bnRpbAoJc2VyaW91cyBidWcgY2FuIGJlIGZvdW5kLgoKT2N0ICAyMCwgOTMgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUxpc3Rib3ggY29udHJvbCB3aW5kb3cKCQlQYWludGluZyBjbGVhbnVwLCBuZXcgbWVzc2FnZXMgcHJvY2Vzc2VkLgoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJU2Nyb2xsIGJhciBjb250cm9sIHdpbmRvdwoJCVBhaW50aW5nIGNsZWFudXAuCgoJKiBbY29udHJvbHMvY29tYm8uY10KCUNvbWJvIGJveCBjb250cm9sIHdpbmRvdwoJCVBhaW50aW5nIGNsZWFudXAuCgpUdWUgT2N0IDEyIDE3OjUwOjExIDE5OTMgIGp1bGxpYXJkQGRpLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZCkKCgkqIFtvYmplY3RzL2NvbG9yLmNdIFtvYmplY3RzL3BhbGV0dGUuY10gW3dpbmRvd3Mvc3lzY29sb3IuY10KCUJldHRlciBzdXBwb3J0IGZvciB0aGUgcHJpdmF0ZSBjb2xvciBtYXAuCglVc2luZyBhIHByaXZhdGUgbWFwIGlzIG5vdyB0aGUgZGVmYXVsdC4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJQnVnIGZpeC4KCgkqIFtpbmNsdWRlL2RpYWxvZy5oXSBbd2luZG93cy9kaWFsb2cuY10KCUltcGxlbWVudGVkIENyZWF0ZURpYWxvZyooKSBhbmQgSXNEaWFsb2dNZXNzYWdlKCkuCgoJKiBbbWlzYy94dC5jXSBbd2luZG93cy9kZWZ3bmQuY10KCU1vdmVkIERlZldpbmRvd1Byb2MoKSB0byBkZWZ3bmQuYy4KCUFkZGVkIFdNX05DQ1JFQVRFLCBXTV9OQ0RFU1RST1kgYW5kIFdNX0NUTENPTE9SIGhhbmRsaW5nLgoKCSogW3dpbmRvd3MvZGVmZGxnLmNdCglTdGFydGVkIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBEZWZEbGdQcm9jKCkuCgoJKiBbd2luZG93cy93aW4uY10KCUFkZGVkIFdNX05DQ1JFQVRFIGFuZCBXTV9OQ0RFU1RST1kgbWVzc2FnZXMuCglJbXBsZW1lbnRlZCBJc0NoaWxkKCkuCgpUdWUgT2N0IDEyIDE3OjUwOjIwIDE5OTMgIERhdmlkIE1ldGNhbGZlIDxkYXZpZEBwcmlzbS5kZW1vbi5jby51az4KCgkqIFt3aW5kb3dzL2ZvY3VzLmNdCglJbXBsZW1lbnRlZCBHZXRGb2N1cygpIGFuZCBTZXRGb2N1cygpLgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCUFkZGVkIHByb2Nlc3Npbmcgb2YgRm9jdXNJbiBhbmQgRm9jdXNPdXQgZXZlbnRzLgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCUFkZGVkIERyYXdGb2N1c1JlY3QoKS4KClNhdCBPY3QgIDkgMTQ6MzY6NTcgMTk5MyAgRXJpayBCb3MKCgkqIFtsb2FkZXIvaW50MWEuY10KCUFkZGVkIG1vcmUgZnVuY3Rpb24gaGFuZGxpbmcuCgpXZWQgT2N0ICA2IDEyOjIxOjIyIDE5OTMgIEVyaWsgQm9zCgoJKiBbbG9hZGVyL3NpZ25hbC5jXQoJU3BsaXQgc2lnbmFsLmMgaW50byBpbnQxYS5jLCBpbnQyMS5jIGFuZCBzaWduYWwuYy4KClR1ZSBPY3QgIDUgMjI6MTI6NDAgMTk5MyAgRGF2aWQgTWV0Y2FsZmUKCgkqIFtjb250cm9scy9zdGF0aWMuY10gW2NvbnRyb2wvd2lkZ2V0cy5jXQoJU3RhdGljIGNvbnRyb2wgY2xhc3MuCgoJKiBbb2JqZWN0cy90ZXh0LmNdCglBZGRlZCBwcm9jZXNzaW5nIG9mIGFkZGl0aW9uYWwgRFRfIGZsYWdzIHRvIERyYXdUZXh0KCkuCgoJKiBbd2luZG93cy93aW4uY10gW21pc2MveHQuY10KCUFkZGVkIFNldFdpbmRvd1RleHQoKSBhbmQgV01fU0VUVEVYVCBwcm9jZXNzaW5nLgoKVHVlIE9jdCAgNSAyMjoxMjo0MCAxOTkzICBNYXJ0aW4gQXlvdHRlCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJTGlzdGJveCBjb250cm9sIHdpbmRvdwoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJU2Nyb2xsIGJhciBjb250cm9sIHdpbmRvdwoKCSogW2NvbnRyb2xzL2NvbWJvLmNdCglDb21ibyBib3ggY29udHJvbCB3aW5kb3cKCgkqIFtpbmNsdWRlL2NvbWJvLmhdCglDb21ibyBib3ggZGVmaW5pdGlvbnMKCgkqIFtpbmNsdWRlL2xpc3Rib3guaF0KCUxpc3Rib3ggZGVmaW5pdGlvbnMKCgkqIFtpbmNsdWRlL3Njcm9sbC5oXQoJU2Nyb2xsIGJhciBkZWZpbml0aW9ucwoKU2F0IE9jdCAgMiAwOTozNTo1NCAxOTkzICBCb2IgQW1zdGFkdCAgKGJvYiBhdCBwb29oKQoKCSogW2lmMTYzMi9jYWxsYmFjay5jXQoJRml4ZWQgYnVnIGluIE1ha2VQcm9jSW5zdGFuY2UoKS4KCgkqIFtkZWJ1Z2dlci9pbmZvLmNdCglDaGFuZ2VkIHgvdyBhbmQgeC9iIHRvIGRpc3BsYXkgaW4gaGV4LgoKCSogW2RlYnVnZ2VyL2kzODYtcGluc24uY10KCUFkZGVkIGNvZGUgdG8gcHJvcGVybHkgdW5hc3NlbWJsZSAxNi1iaXQgaW5kZXhpbmcuCgpGcmkgT2N0ICAxIDA4OjI5OjA1IDE5OTMgIEJvYiBBbXN0YWR0ICAoYm9iIGF0IHBvb2gpCgoJKiBbbG9hZGVyL2ZpbGVzLmNdIFttaXNjL3Byb2ZpbGUuY10KCVN5c3RlbSBpbml0aWFsaXphdGlvbiBmaWxlIGlzIG5vdyBjYWxsZWQgIndpbmUuaW5pIiBhbmQgY2FuCgliZSBsb2NhdGVkIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeSwKCW9yIGFueSBkaXJlY3RvcmllcyBzcGVjaWZpZWQgaW4gdGhlIFdJTkVQQVRIIGVudmlyb25tZW50IHZhcmlhYmxlLgoKCSogW3Rvb2xzL2J1aWxkLmNdIFtpZjE2MzIvY2FsbC5TXSBbaW5jbHVkZS9yZWdmdW5jLmhdCglDaGFuZ2VkIHJlZ2lzdGVyIGZ1bmN0aW9uIHN0YWNrIHRvIG1hdGNoIHNpZ2NvbnRleHQgc3RydWN0dXJlLgoKVGh1IFNlcCAzMCAyMjozMDoyMSAxOTkzICBCb2IgQW1zdGFkdCAgKGJvYiBhdCBwb29oKQoKCSogW2xvYWRlci9maWxlcy5jXQoJQ3JlYXRlZCBmdW5jdGlvbiB0byBzZWFyY2ggYSBwYXRoIGZvciBmaWxlcyB0byBsb2FkLgoKCSogW2xvYWRlci93aW5lLmNdCglNb2RpZmllZCBleGUgYW5kIGRsbCBmaWxlIGxvYWRpbmcgdG8gc2VhcmNoIHRocm91Z2ggcGF0aAoJc3BlY2lmaWVkIGJ5IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBXSU5FUEFUSC4KClRodSBTZXAgMzAgMjI6MzA6MjEgMTk5MyAgRXJpYyBZb3VuZ2RhbGUKCgkqIFtsb2FkZXIvc2lnbmFsLmNdCglCdWcgZml4LgoKVGh1IFNlcCAzMCAyMjozMDoyMSAxOTkzICBKb2huIEJyZXphawoKCSogW2RlYnVnZ2VyL2RiZy55XSBbZGVidWdnZXIvZGVidWcubF0gW2RlYnVnZ2VyL2R0ZXN0LmNdIAoJICBbZGVidWdnZXIvb2JzdGFjay5oXQoJVXBkYXRlcyB0byBhbGxvdyBkZWJ1Z2dlciB0byBmdW5jdGlvbiB1bmRlciBOZXRCU0QuCgpUdWUgU2VwIDI4IDE5OjU5OjIxIDE5OTMgIERhdmlkIE1ldGNhbGZlCgoJKiBbd2luZG93cy93aW4uY10KCUltcGxlbWVudGVkIHN1cHBvcnQgZm9yIHdpbmRvd3Mgd2l0aCBubyBib3JkZXJzLiAgQWRkZWQKIAlHZXRQYXJlbnQoKSwgR2V0RGxnQ3RybElEKCksIEdldFdpbmRvd1RleHQoKSBhbmQKCUdldFdpbmRvd1RleHRMZW5ndGgoKSBmdW5jdGlvbnMuCgoJKiBbbWlzYy94dC5jXQoJQWRkZWQgcHJvY2Vzc2luZyBvZiBXTV9HRVRURVhUIGFuZCBXTV9HRVRURVhUTEVOR1RIIG1lc3NhZ2VzCgl0byBEZWZXaW5kb3dQcm9jIGFuZCBJbXBsZW1lbnRlZCBNZXNzYWdlQmVlcCgpLgoKCSogW3dpbmRvd3Mvc3lzY29sb3IuY10KCUFkZGVkIHByZWxpbWluYXJ5IHN5c3RlbSBjb2xvciBzdXBwb3J0LgoKCSogW2NvbnRyb2xzL2J1dHRvbjEuY10KCU1vZHMgdG8gbmV3IGJ1dHRvbiBjb250cm9sIGFuZCBpbnRlZ3JhdGlvbiB3aXRoIFdpbmUuCgpUdWUgU2VwIDI4IDE5OjU5OjIxIDE5OTMgIEpvaGFubmVzIFJ1c2NoZWluc2tpCgoJKiBbY29udHJvbHMvYnV0dG9uMS5jXQoJTmV3IGJ1dHRvbiBjb250cm9sIHVzaW5nIEdESSBmdW5jdGlvbnMuCgkKVHVlIFNlcCAyOCAxOTo1OToyMSAxOTkzICBFcmljIFlvdW5nZGFsZQoKCSogW2RlYnVnZ2VyLypdCglBZGRlZCBkZWJ1Z2dpbmcgY2FwYWJpbGl0aWVzIHRvIFdpbmUKClNhdCBTZXAgMjUgMTM6MjI6NTAgMTk5MyAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAZGkuZXBmbC5jaCkKCgkqIFtvYmplY3RzL3JlZ2lvbi5jXQoJQnVnIGZpeAoKRnJpIFNlcCAyNCAwNzozNToxMSAxOTkzICBCb2IgQW1zdGFkdCAgKGJvYiBhdCBwb29oKQoKCSogW3Rvb2xzL2J1aWxkLmNdCglDaGFuZ2VkIHRoZSBlbnRyeSBwb2ludCBjb2RlIHRvIHJlZHVjZSB0aGUgc3RhbmRhcmQgZW50cnkKCXBvaW50IHNpemUgZnJvbSAyMiBieXRlcyB0byAxMCBieXRlcy4gIFRoaXMgbGVhdmVzIGFib3V0Cgk0MDAwIGZyZWUgZW50cnkgcG9pbnRzIGluc3RlYWQgb2YgdGhlIDgwMCBpbiB2ZXJzaW9uIDAuNC4yLgoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJUmV3cm90ZSBmdW5jdGlvbnMgdG8gYWxsb3cgbG9hZGluZyBvZiByZXNvdXJjZXMgZnJvbSBhbnkKCURMTC4KCgkqIFtsb2FkZXIvd2luZS5jXSBbaW5jbHVkZS93aW5lLmhdCglBZGRlZCBmdW5jdGlvbnMgR2V0RmlsZW5hbWVGcm9tSW5zdGFuY2UoKSBhbmQgR2V0RmlsZUluZm8oKQoJdG8gc2VhcmNoIGZvciBhIGxvYWRlZCBmaWxlIGJhc2VkIG9uIGl0cyBpbnN0YW5jZSBoYW5kbGUuCglBZGRlZCBhIGZpZWxkIGluIHN0cnVjdCB3X2ZpbGVzIHRvIG1ha2Ugc2VhcmNoaW5nIGJ5IGFuIGluc3RhbmNlCgloYW5kbGUgZmFzdGVyLgoKVHVlIFNlcCAyMSAwOTo1NzowMSAxOTkzICBtaWd1ZWxAcm94YW5uZS5udWNsZWN1LnVuYW0ubXggKE1pZ3VlbCBkZSBJY2F6YSkKCgkqIFttaXNjL3Byb2ZpbGUuY10KCUltcGxlbWVudGF0aW9uIG9mIC5JTkkgZmlsZSBoYW5kbGluZwoKTW9uIFNlcCAyMCAxMDo1NDozMiAxOTkzICBEYXZpZCBNZXRjYWxmZQoKCSogW21pc2MvcHJvZmlsZS5jLm9sZF0KCUltcGxlbWVudGF0aW9uIG9mIC5JTkkgZmlsZSBoYW5kbGluZwoKTW9uIFNlcCAyMCAxMDo1NDozMiAxOTkzICBKb2huIEJyZXphawoKCSogW2NvbnRyb2xzL1dpbkJ1dHRvbi5jXQoJQnVnIGZpeCB3aXRoIGNhbGwgdG8gWHRWYVNldFZhbHVlcy4KCk1vbiBTZXAgMjAgMTA6NTQ6MzIgMTk5MyAgQWxleGFuZHJlIEp1bGxpYXJkCgoJKiBbd2luZG93cy93aW4uY10KCVF1aWNrIHBhdGNoIHRvIGdldCBjb2xvcm1hcHMgdG8gd29yayB3aXRoIGJ1dHRvbiB3aWRnZXQuCgpNb24gU2VwIDIwIDAyOjQyOjU0IDE5OTMgICAgKHluZ3ZpQGhhZnJvLmlzKQoKCSogbWlzYy9rZXlib2FyZC5jOiAKCUlmZGVmZWQgb3V0IHNvbWUgYm9ndXMgQW5zaTwtPk9lbSBjb252ZXJzaW9uIGZ1bmN0aW9ucwoKCSogbWlzYy9sc3RyLmM6IAoJTmV3IGZpbGUgd2l0aCBzdHJpbmcgZnVuY3Rpb25zIGxpa2UgbHN0ciogSXNDaGFyKiAqQW5zaSogCgpXZWQgU2VwIDE1IDIwOjM1OjEwIDE5OTMgIEpvaG4gQnJlemFrCgoJKiBbbG9hZGVyL3NpZ25hbC5jXQoJQWRkaXRpb25hbCBjaGFuZ2VzIHRvIHN1cHBvcnQgTmV0QlNELgoKV2VkIFNlcCAxNSAyMjoxOToyMiAxOTkzICBNYXJ0aW4gQXlvdHRlCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJQWRkZWQgRnJhbWVSZWN0IGZ1bmN0aW9uCgpUdWUgU2VwIDE0IDEzOjU0OjQ1IDE5OTMgIEFsZXhhbmRyZSBKdWxsaWFyZAoKCSogW29iamVjdHMvY29sb3IuY10gW29iamVjdHMvcGFsZXR0ZS5jXQoJUHJlbGltaW5hcnkgc3VwcG9ydCBmb3IgcHJpdmF0ZSBjb2xvciBtYXAuCgoJKiBbd2luZG93cy9jbGFzcy5jXQoJSW1wbGVtZW50ZWQgQ1NfQ0xBU1NEQyBzdHlsZS4KCgkqIFt3aW5kb3dzL2RjZS5jXQoJTW92ZWQgRENFcyB0byBVU0VSIGhlYXAuCglJbXBsZW1lbnRlZCBjbGFzcyBhbmQgd2luZG93IERDcy4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglJbXBsZW1lbnRlZCBDU19EQkxDTEtTIHN0eWxlLgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCUJ1ZyBmaXggaW4gU2V0UGl4ZWwoKS4KCgkqIFt3aW5kb3dzL3dpbi5jXQkKCUltcGxlbWVudGVkIENTX09XTkRDIHN0eWxlLgoJSW1wbGVtZW50ZWQgR2V0L1NldFdpbmRvd0xvbmcoKS4KCgkqIFtjb250cm9scy9tZW51LmNdIFt3aW5kb3dzL2NsYXNzLmNdIFt3aW5kb3dzL2NsaXBwaW5nLmNdIAoJICBbd2luZG93cy9kY2UuY10gW3dpbmRvd3MvbWVzc2FnZS5jXSBbd2luZG93cy93aW4uY10JCglNb3ZlZCB3aW5kb3dzIGZyb20gZ2xvYmFsIGhlYXAgdG8gVVNFUiBoZWFwLgoKTW9uIFNlcCAxMyAwNTowMDoxMSAxOTkzICBFcmljIFlvdW5nZGFsZQoKCSogW01ha2VmaWxlXSBbaWYxNjMyL3JlbGF5LmNdIFtpbmNsdWRlL2RsbHMuaF0gW3NlbGVjdG9yLmNdCgkgIFtsb2FkZXIvd2luZS5jXSBbdG9vbHMvYnVpbGQuY10KCUFkZGVkIGFiaWxpdHkgdG8gZ2VuZXJhdGUgbWlzc2luZyBmdW5jdGlvbnMgc3RhdGlzdGljcy4KCk1vbiBTZXAgMTMgMTI6MDk6NDcgMTk5MyAgU2NvdHQgQS4gTGFpcmQgIChzY290dEBjdXJseSkKCgkqIFtXSU4zMS1BUFBMRVRTXQoJQWRkZWQgbmV3IGZpbGUuCgoJKiBbaWYxNjMyL2tlcm5lbC5zcGVjXQoJQWRkZWQgZGVmaW5pdGlvbnMgZm9yIEdldFByb2ZpbGV7SW50LFN0cmluZ30gYW5kIFNldEhhbmRsZUNvdW50LgoKCSogW2lmMTYzMi9rZXlib2FyZC5zcGVjXQoJQ3JlYXRlZCBpbnRlcmZhY2Ugc3BlY2lmaWNhdGlvbiBmb3IgS2V5Ym9hcmQgZHJpdmVyIERMTC4KCgkqIFtpZjE2MzIvcmVsYXkuY10KCUFkZGVkIGtleWJvYXJkLmRsbCB0byBsaXN0IG9mIGluY2x1ZGVkIERMTHMuCgoJKiBbaWYxNjMyL3VzZXIuc3BlY10KCUFkZGVkIExvYWRBY2NlbGVyYXRvcnMgZGVmaW5pdGlvbi4KCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCUFkZGVkIExvYWRBY2NlbGVyYXRvcnMgc3R1Yi4KCgkqIFttaXNjL2ZpbGUuY10KCUNoYW5nZWQgT3BlbkZpbGUsIGFuZCBhZGRlZCBTZXRIYW5kbGVDb3VudCAoZm9yIHdpbmZpbGUuZXhlKQoKCSogW21pc2Mva2V5Ym9hcmQuY10KCUFkZGVkIGtleWJvYXJkIGNvZGUuCgoJKiBbbWlzYy9wcm9maWxlLmNdIFttaXNjL3h0LmNdCglNb3ZlZCBHZXRQcml2YXRlUHJvZmlsZSogY29tbWFuZHMgaGVyZSwgYW5kIGFkZGVkIEdldFByb2ZpbGUqCgljb21tYW5kcy4KCk1vbiBTZXAgMTMgMTA6MjQ6MzcgMTk5MyAgQW5kcmV3IEJ1bGhhawoKCSogW3dpbmRvd3MvdXRpbGl0eS5jXQoJSW1wbGVtZW50ZWQgTXVsRGl2KCksIE91dHB1dERlYnVnU3RyaW5nKCkgYW5kIHd2c3ByaW50ZigpCgpGcmkgU2VwIDEwIDA5OjEzOjMwIDE5OTMgIEpvaG4gQnJlemFrCgoJKiBbKi9NYWtlZmlsZV0KCUNyZWF0ZWQgcGF0Y2ggdG8gYWxsb3cgQlNEIG1ha2UgdG8gYnVpbGQgd2luZS4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJRml4ZWQgTlVMTCBwb2ludGVyIHJlZmVyZW5jZS4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10gW21pc2MveHQuY10KCURlZmluZWQgSFogdG8gaGFuZGxlIHN5c3RlbSBzcGVjaWZpYyB0aW1pbmcuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJVXNlIE1fUEkgaXMgUEkKCgkqIFtvYmplY3RzL3BhbGxldGUuY10KCU5ldEJTRCBkb2VzIG5vdCBoYXZlIC91c3IvaW5jbHVkZS92YWx1ZXMuaCBhbmQgTUFYSU5UIGlzIElOVF9NQVguCgoJKiBbZHVtcC5jXSBbbGR0LmNdIFt3aW5lLmNdCglpZmRlZidlZCBsaW51eCBoZWFkZXJzIGZvciBsaW51eCBjb21waWxlLgoKCSogW2xvYWRlci9sZHRsaWIuY10KCUFkZCBOZXRCU0Qgc3lzdGVtIGNhbGxzIHdoZW4gY29tcGlsZWQgb24gdGhhdCBzeXN0ZW0uCgoJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCglVc2UgbW1hcChNQVBfQU5PTiwgLi4uKSBmb3IgTmV0QlNELgoKCSogW2lmMTYzMi9jYWxsLlNdCglGaXhlZCBzZWxlY3RvciBhc3N1bXB0aW9ucy4KClRodSBTZXAgOSAyMDowMTozNyAxOTkzICBEYXZpZCBNZXRjYWxmZQoKCSogW2NvbnRyb2xzL1dpbkJ1dHRvbipdIFtjb250cm9scy9idXR0b24uY10gW2NvbnRyb2xzL3dpZGdldC5jXQogIAkgIFt3aW5kb3dzL3dpbi5jXSBbd2luZG93cy9jbGFzcy5jXQoJQWRkZWQgM0QgYnV0dG9uIGNvbnRyb2wgYW5kIHRpZWQgaW50byBDcmVhdGVXaW5kb3coKQoKVGh1IFNlcCAgOSAwNzozNToyNCAxOTkzICBTY290dCBMYWlyZAoKCSogW2lmMTYzMi9zb3VuZC5zcGVjXQoJQ3JlYXRlZCBpbnRlcmZhY2Ugc3BlY2lmaWNhdGlvbiBmb3IgU09VTkQgRExMLgoKCSogW2lmMTYzMi93aW44N2VtLnNwZWNdCglBZGRlZCBtb3JlIGZ1bmN0aW9ucyB0byB0aGUgV0lOODdFTSBETEwgaW50ZXJmYWNlIHNwZWNpZmljYXRpb24KCgkqIFttaXNjL2VtdWxhdGUuY10KCUNyZWF0ZWQgc3R1YnMgZm9yIHRoZSBuZXcgbWF0aCBlbXVsYXRpb24gZnVuY3Rpb25zLgoKCSogW21pc2Mvc291bmQuY10KCUNyZWF0ZWQgc3R1YnMgZm9yIHRoZSBTT1VORCBETEwuCgpTdW4gU2VwICA1IDIxOjAyOjEwIDE5OTMgIEpvaG4gQnVydG9uCgoJKiBbaWYxNjMyL2tlcm5lbC5zcGVjXQoJQWRkZWQgaW50ZXJmYWNlIHNwZWNpZmljYXRpb25zIGZvciBPcGVuRmlsZSwgX2xjbG9zZSwgX2xyZWFkLCBfbG9wZW4sCglhbmQgX2x3cml0ZS4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUFkZGVkIE9GXyBtYWNyb3MKCgkqIFttaXNjL2ZpbGUuY10KCUltcGxlbWVudGVkIE9wZW5GaWxlLCBfbGNsb3NlLCBfbHJlYWQsIF9sb3BlbiBhbmQgX2x3cml0ZS4KCkZyaSBTZXAgIDMgMTg6NDc6MDMgMTk5MyAgQWxleGFuZHJlIEp1bGxpYXJkCgogICAgICAgICogW3dpbmRvd3MvZGMuY10KCUJ1ZyBmaXgKCgkqIFtvYmplY3RzL3RleHQuY10KCUJ1ZyBmaXgKCkZyaSBTZXAgIDMgMTg6NDc6MDMgMTk5MyAgQm9iIEFtc3RhZHQKCiAgICAgICAgKiBbb2JqZWN0cy9saW5lZGRhLmNdCiAgICAgICAgRmluaXNoZWQgTGluZUREQSgpLgoKRnJpIFNlcCAgMyAxMTo1MjoxOCAxOTkzICBCb2IgQW1zdGFkdAoKCSogW3dpbmRvd3MvdGltZXIuY10KCUNoYW5nZWQgdG8gdXNlIENhbGxXaW5kb3dQcm9jKCkgcmF0aGVyIGRpcmVjdGx5IGNhbGxpbmcgY2FsbGJhY2suCgoJKiBbd2luZG93cy9ldmVudC5jXQoJSW1wbGVtZW50ZWQgU2V0Q2FwdHVyZSgpIGFuZCBSZWxlYXNlQ2FwdHVyZSgpCgoJKiBbd2luZG93cy9rZXlib2FyZC5jXQoJQ3JlYXRlZCBzdHViIGZvciBHZXRLZXlTdGF0ZSgpCgoJKiBbb2JqZWN0cy9saW5lZGRhLmNdCglDcmVhdGVkIHN0dWIgZm9yIExpbmVEREEoKQoKCSogW2lmMTYzMi9jYWxsYmFjay5jXQoJQ3JlYXRlZCBjYWxsYmFjayBoYW5kbGVyIGZvciBMaW5lRERBIGNhbGxiYWNrIHByb2NlZHVyZS4KCgkqIFtpZjE2MzIvY2FsbGJhY2suY10KCUNyZWF0ZWQgRnJlZVByb2NJbnN0YW5jZSgpCgpGcmkgU2VwICAzIDA4OjM2OjUyIDE5OTMgIERhdmlkIE1ldGNhbGZlCgoJKiBbbG9hZGVyL3NpZ25hbC5jXQoJUGF0Y2ggdG8gYW5kIGNvZGUgZm9yIElOVCAxQQoKVGh1IFNlcCAgMiAwMDozMTo1NCAxOTkzICBBbGV4YW5kcmUgSnVsbGlhcmQKCgkqIFtvYmplY3RzL2ZvbnQuY10gW29iamVjdHMvdGV4dC5jXQoJTW9yZSB0ZXh0IHN1cHBvcnQ6IGltcGxlbWVudGVkIGp1c3RpZmljYXRpb24gYW5kIHVuZGVybGluaW5nLgoKCSogW3dpbmRvd3MvY2xpcHBpbmcuY10gW29iamVjdHMvY2xpcHBpbmcuY10KCU1vdmVkIGxvdy1sZXZlbCBjbGlwcGluZyBmdW5jdGlvbnMgdG8gb2JqZWN0cy9jbGlwcGluZy5jLgoKCSogW3dpbmRvd3MvY2xpcHBpbmcuY10gW3dpbmRvd3MvZXZlbnQuY10gW3dpbmRvd3MvbWVzc2FnZS5jXQoJSW1wbGVtZW50ZWQgd2luZG93IHVwZGF0ZSByZWdpb25zLgoKCSogW3dpbmRvd3MvZGMuY10gW29iamVjdHMvZGN2YWx1ZXMuY10KCU1vdmVkIHNvbWUgZGV2aWNlLWluZGVwZW5kZW50IERDIGZ1bmN0aW9ucyB0byBvYmplY3RzL2RjdmFsdWVzLmMuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJSW1wbGVtZW50ZWQgSW52ZXJ0UmVjdCgpIGFuZCBHZXRQaXhlbCgpLgoKU2F0IEF1ZyAyOCAwODo0MDoyMyAxOTkzICBFcmljIFlvdW5nZGFsZQoKCSogW2luY2x1ZGUvbmVleGUuaF0gW2xvYWRlci93aW5lLmNdCglBZGRlZCBjb2RlIHRvIGhhbmRsZSByZWxvY2F0aW9uIHR5cGUgNC4KCgkqIFtsb2FkZXIvc2lnbmFsLmhdIFtsb2FkZXIvd2luZS5jXSBbbG9hZGVyL3NlbGVjdG9yLmNdCglBZGRlZCBzdXBwb3J0IGZvciBkb3MgaW50ZXJydXB0cy4KClRodSAyNiBBdWcgMTk6MTU6MDAgMTk5MyAgRXJpYyBZb3VuZ2RhbGUKCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCUZpeGVkIGJ1ZyBkZWFsaW5nIHdpdGggbG9hZGluZyBETExzLgoKVGh1IEF1ZyAyNiAxOToyMjo0MCAxOTkzICBBbGV4YW5kcmUgSnVsbGlhcmQKCiAgICAgICAgKiBbaW5jbHVkZS9nZGkuaF0gW29iamVjdHMvZm9udC5jXSBbd2luZG93cy9kYy5jXQogICAgICAgIEJlZ2lubmluZyBvZiByZWFsIGZvbnQgc3VwcG9ydC4KCiAgICAgICAgKiBbd2luZG93cy9ncmFwaGljcy5jXQogICAgICAgIEltcGxlbWVudGVkIFBhdEJsdCgpLgoKICAgICAgICAqIFttZW1vcnkvZ2xvYmFsLmNdCiAgICAgICAgQ29ycmVjdGVkIGEgYnVnIHdpdGggbGlua2VkIGxpc3QgaGFuZGxpbmcgaW4gR2xvYmFsQWxsb2MoKS4KCiAgICAgICAgKiBbb2JqZWN0cy9iaXRtYXAuY10KICAgICAgICBDb3JyZWN0ZWQgYSBidWcgaW4gQklUTUFQX1NlbGVjdE9iamVjdCgpLgoKVHVlIEF1ZyAyNCAxOToyMjo0MCAxOTkzICBEYXZpZCBNZXRjYWxmZQoKICAgICAgICAqIFtjb250cm9scy9Db21tYW5kKl0gW2NvbnRyb2xzL0xhYmVsKl0gW2NvbnRyb2xzW01lbnVCdXR0bypdCgkgIFtjb250cm9scy9TbWVNZW51QnV0dCpdCglDaGFuZ2UgY29kZSB0byBzdXBwb3J0ICYgYXMgYSBzcGVjaWFsIGNoYXJhY3RlciBpbiBtZW51IGl0ZW0gdGV4dC4KClR1ZSBBdWcgMjQgMTk6MjI6NDAgMTk5MyAgQWxleGFuZHJlIEp1bGxpYXJkCgoJKiBbaW5jbHVkZS9nZGkuaF0gW3dpbmRvd3MvZGMuY10KCUhlYXZpbHkgbW9kaWZpZWQgdGhlIERDIHN0cnVjdHVyZSBmb3IgYmV0dGVyIGRldmljZS1pbmRlcGVuZGVuY2UuCgoJKiBbb2JqZWN0cy9iaXRtYXAuY10KCUltcGxlbWVudGVkIGJpdG1hcCBkaW1lbnNpb25zLgoKCSogW3dpbmRvd3MvZGMuY10gW3dpbmRvd3MvZGNlLmNdCglJbXBsZW1lbnRlZCBEQyBzdGF0ZSBzYXZpbmcgYW5kIHJlc3RvcmluZy4KCgkqIFt3aW5kb3dzL2RjLmNdCglJbXBsZW1lbnRlZCBST1AgbW9kZS4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglJbXBsZW1lbnRlZCBGaWxsUmVjdCgpLgoKTW9uIEF1ZyAyMyAyMjowODozNCAxOTkzICBCb2IgQW1zdGFkdCAgKGJvYiBhdCBwb29oKQoKCSogW21pc2MveHQuY10KCUZpeGVkIGJ1ZyBpbiBJbnZhbGlkYXRlUmVjdCgpLiAgU29saXRhaXJlIGF0dGVtcHRlZCB0bwoJY2xlYXIgd2luZG93IGJlZm9yZSBpdCB3YXMgcmVhbGl6ZWQuCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglCZWdhbiByZXdyaXRlIG9mIExvYWRCaXRtYXAoKS4KCgkqIFtsb2FkZXIvd2luZS5jXQoJRml4ZWQgY29kZSB3aGljaCBzZXQgQXJndiBhbmQgQXJnYyBnbG9iYWwgdmFyaWFibGVzLgoKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJQWRkZWQgY29kZSB0byBzZXQgdXAgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KCgkqIFtpbmNsdWRlL25lZXhlLmhdCglGaXhlZCBlcnJvciBpbiBQU1Agc3RydWN0dXJlLgoKVHVlIEF1ZyAxNyAyMDo0MToxMiAxOTkzICBBbGV4YW5kcmUgSnVsbGlhcmQKCgkqIFtpbmNsdWRlL2dkaS5oXSBbd2luZG93cy9kYy5jXQoJSW1wbGVtZW50ZWQgZGV2aWNlIGNhcGFiaWxpdGllcy4KCgkqIFtvYmplY3RzL3JlZ2lvbi5jXQoJSW1wbGVtZW50ZWQgRXF1YWxSZ24oKSBhbmQgQ29tYmluZVJnbigpLgoKCSogW3dpbmRvd3MvY2xpcHBpbmcuY10KCUltcGxlbWVudGVkIFNhdmUvUmVzdG9yZVZpc1JnbigpLgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCUltcGxlbWVudGVkIFBhaW50UmduKCkgYW5kIEZpbGxSZ24oKS4KCgkqIFt3aW5kb3dzL21hcHBpbmcuY10KCUltcGxlbWVudGVkIG1hcHBpbmcgbW9kZXMuCgpUdWUgQXVnIDEwIDE0OjA3OjM4IDE5OTMgIEFsZXhhbmRyZSBKdWxsaWFyZAoKCSogW2lmMTYzMi91c2VyLnNwZWNdIFttaXNjL3JlY3QuY10KCUltcGxlbWVudGVkIHJlY3RhbmdsZSBBUEkgZnVuY3Rpb25zLgoKCSogW2lmMTYzMi9nZGkuc3BlY10gW2luY2x1ZGUvZ2RpLmhdIFtvYmplY3RzL3JlZ2lvbi5jXQoJSW1wbGVtZW50ZWQgcmVnaW9ucy4KCgkqIFt3aW5kb3dzL2NsYXNzLmNdCglDb3JyZWN0ZWQgYSB0eXBvIGluIFVucmVnaXN0ZXJDbGFzcygpLgoKCSogW3dpbmRvd3MvY2xpcHBpbmcuY10gW3dpbmRvd3MvZGMuY10KCUltcGxlbWVudGVkIERDIGNsaXBwaW5nIGFuZCB2aXNpYmxlIHJlZ2lvbi4KClR1ZSBBdWcgMTAgMjA6NTc6NTYgMTk5MyAgQm9iIEFtc3RhZHQgIChib2IgYXQgcG9vaCkKCgkqIFtjb250cm9scy9tZW51LmNdIFt3aW5kb3dzL3dpbi5jXQoJU2V0TWVudSgpLCBHZXRNZW51KCksIENoZWNrTWVudUl0ZW0oKSBpbXBsZW1lbnRlZAoKVGh1IEF1ZyAgNSAyMjozMzoyMiAxOTkzICBCb2IgQW1zdGFkdCAgKGJvYiBhdCBwb29oKQoKCSogW2NvbnRyb2xzL21lbnUuY10gW3dpbmRvd3Mvd2luLmNdCglNYW55IGltcHJvdmVtZW50cyBtZW51cy4gIExvYWRNZW51KCkgc2hvdWxkIHdvcmsuCgpXZWQgQXVnICA0IDE0OjU1OjM2IDE5OTMgIEFsZXhhbmRyZSBKdWxsaWFyZAoKICAgICAgICAqIFtvYmplY3RzL2RpYi5jXQogICAgICAgIFN0YXJ0ZWQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGRldmljZS1pbmRlcGVuZGVudCBiaXRtYXBzLgoKICAgICAgICAqIFtvYmplY3RzL2JpdG1hcC5jXQogICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIG11bHRpcGxlIGJpdG1hcCBkZXB0aHMuCgogICAgICAgICogW29iamVjdHMvYnJ1c2guY10KICAgICAgICBJbXBsZW1lbnRlZCBwYXR0ZXJuIGJydXNoZXMuCgogICAgICAgICogW3dpbmRvd3MvZGMuY10gW3dpbmRvd3MvZ3JhcGhpY3MuY10KICAgICAgICBJbXBsZW1lbnRlZCBzb21lIEdESSBncmFwaGljcyBwcmltaXRpdmVzLgoKVHVlIEF1ZyAgMyAyMToxNjo0NyAxOTkzICBCb2IgQW1zdGFkdCAgKGJvYiBhdCBwb29oKQoKCSogW2NvbnRyb2xzL21lbnUuY10gW3dpbmRvd3Mvd2luLmNdIFtpbmNsdWRlL21lbnUuaF0KCUNvZGUgdG8gbG9hZCBjbGFzcyBtZW51cyBmcm9tIGV4ZWN1dGFibGUgZmlsZS4KCgkqIFtpZjE2MzIvdXNlci5zcGVjXQoJRml4ZWQgc3BlY2lmaWNhdGlvbiBvZiBTZW5kTWVzc2FnZSgpIGFuZCBQb3N0TWVzc2FnZS4KCk1vbiBKdWwgMjYgMjE6NTM6MjQgMTk5MyAgQWxleGFuZHJlIEp1bGxpYXJkCgoJKiBbaWYxNjMyL2NhbGwuU10KCUNvcnJlY3RlZCBhIGJ1ZyBpbiBLRVJORUxfSW5pdFRhc2soKS4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUFkZGVkIGEgbG90IG9mIGNvbnN0YW50cy4KCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCUNvcnJlY3RlZCBhIGJ1ZyBpbiBzZWdtZW50IGFsbG9jYXRpb24gaW4gQ3JlYXRlU2VsZWN0b3JzKCkuCgoJKiBbb2JqZWN0cy9iaXRtYXAuY10KCUltcGxlbWVudGVkIFNlbGVjdE9iamVjdCgpIGZvciBiaXRtYXBzLgoKCSogW29iamVjdHMvYnJ1c2guY10KCUltcGxlbWVudGVkIGhhdGNoZWQgYnJ1c2hlcyBhbmQgU2VsZWN0T2JqZWN0KCkuCgoJKiBbb2JqZWN0cy9nZGlvYmouY10KCVJlbW92ZWQgbGlua2VkIGxpc3QgKG5vdCBuZWVkZWQpLgoKCSogW29iamVjdHMvcGFsZXR0ZS5jXQoJSW1wbGVtZW50ZWQgc3lzdGVtIHBhbGV0dGUgY3JlYXRpb24gYW5kIG1pc2MuIHBhbGV0dGUgQVBJIGZ1bmN0aW9ucy4KCgkqIFt3aW5kb3dzL3RpbWVyLmNdCglJbXBsZW1lbnRlZCB0aW1lcnMuCgoJKiBbd2luZG93cy9kYy5jXQoJSW1wbGVtZW50ZWQgbWVtb3J5IGRldmljZSBjb250ZXh0cy4KClR1ZSBKdWwgMjAgMTA6Mzg6NTkgMTk5MyAgQm9iIEFtc3RhZHQgIChib2IgYXQgcG9vaCkKCiAgICAgICAgKiBbZG9zLmNdCglTcGxpdCBET1MzQ2FsbCgpIG91dCBvZiBrZXJuZWwuYy4gIEFkZGVkIHN1cHBvcnQgZm9yIGdldCBkYXRlCglhbmQgdGltZSBmdW5jdGlvbnMuCgoJKiBbY2FsbC5TXQoJQWRkZWQgZnVuY3Rpb24gUmV0dXJuRnJvbVJlZ2lzdGVyRnVuYygpIHRvIGFsbG93IERPUyBjYWxscwoJdG8gcmV0dXJuIHZhbHVlcyBpbiByZWdpc3RlcnMuCgoJKiBbcmVnZnVuYy5oXQoJTWFjcm9zIHRvIGFjY2VzcyByZWdpc3RlcnMgc2F2ZWQgb24gc3RhY2suCgpUdWUgSnVsIDIwIDEwOjM4OjU5IDE5OTMgIEFsZXhhbmRyZSBKdWxsaWFyZAoKICAgICAgICAqIFt3aW4uY10KICAgICAgICBDb3JyZWN0ZWQgYWxsb2NhdGlvbiBvZiB0aGUgV01fQ1JFQVRFIGRhdGEgc3RydWN0dXJlLgoKICAgICAgICAqIFtkY2UuY10gW2RjZS5oXQogICAgICAgIEltcGxlbWVudGVkIERDRSBoYW5kbGluZy4KCiAgICAgICAgKiBbYml0bWFwLmNdIFticnVzaC5jXSBbZGMuY10gW2ZvbnQuY10gW2dkaS5oXSBbZ2RpLnNwZWNdIAogICAgICAgICAgW2dkaW9iai5jXSBbcGFsZXR0ZS5jXSBbcGVuLmNdCiAgICAgICAgSW1wbGVtZW50ZWQgdGhlIEdESSBvYmplY3RzIGRhdGEgc3RydWN0dXJlcyBhbmQgYWxsb2NhdGlvbi4KCiAgICAgICAgKiBbd2luZG93cy5oXQogICAgICAgIEFkZGVkIHNldmVyYWwgc3RydWN0dXJlcyBhbmQgY29uc3RhbnRzIGZvciBHREkgb2JqZWN0cy4KCk1vbiBKdWwgMTkgMTI6NTE6MTAgMTk5MyAgQm9iIEFtc3RhZHQgIChib2IgYXQgcG9vaCkKCgkqIFtsZHRsaWIuY10KCU1vZGlmaWVkIHN5c3RlbSBjYWxscyB0byBtYXRjaCBMaW51cycgbmV3IGludGVyZmFjZSBmb3IKCXRoZSBMRFQgbW9kaWZpY2F0aW9uLgoKCSogW3dpbi5jXQoJRml4ZWQgYnVnIHdpdGggV01fQ1JFQVRFIG1lc3NhZ2UuCgoJKiBbaGVhcC5jXSBba2VybmVsLnNwZWNdCglDb21wbGV0ZWQgbG9jYWwgaGVhcCBhbGxvY2F0aW9uIGZ1bmN0aW9ucy4KCgkqIFtnbG9iYWwuY10KCUNyZWF0ZWQgZnVuY3Rpb24gR2xvYmFsUXVpY2tBbGxvYygpIGZvciBlYXN5IGFsbG9jYXRpb24gZnJvbSBETExzCgpUdWUgSnVsIDEzIDIwOjMxOjMxIDE5OTMgIEJvYiBBbXN0YWR0ICAoYm9iIGF0IHBvb2gpCgoJKiBbZ2xvYmFsLmNdCglDb21wbGV0ZWQgZ2xvYmFsIG1lbW9yeSBwb29sIEFQSQoKU3VuIEp1bCAxMSAxNjo1OTo1MiAxOTkzICBBbGV4YW5kcmUgSnVsbGlhcmQKCgkqIFttZXNzYWdlLmNdIFt1c2VyLmNdIFt1c2VyLnNwZWNdIFt3aW5kb3dzLmhdCglBZGRlZCBlbXVsYXRpb24gb2YgV2luZG93cyBtZXNzYWdlIHF1ZXVlLgoKVGh1IEp1bCAgOCAxOToyOToyNyAxOTkzICBCb2IgQW1zdGFkdCAgKGJvYiBhdCBwb29oKQoKCSogW2J1aWxkLmNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0CgkqIFtjYWxsYmFjay5jXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdCwgdXBkYXRlcyBieSAKCUFsZXhhbmRyZSBKdWxsaWFyZAoJKiBbZHVtcC5jXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAoJKiBbZ2xvYmFsLmNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0CgkqIFtoZWFwLmNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0CgkqIFtrZXJuZWwuY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKCSogW2xkdC5jXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAoJKiBbbGR0bGliLmNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0CgkqIFtyZWxheS5jXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAoJKiBbcmVzb3VyY2UuY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQsIHVwZGF0ZXMgYnkgCglBbGV4YW5kcmUgSnVsaWFyZAoJKiBbc2VsZWN0b3IuY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQsIHVwZGF0ZXMgYnkgRXJpYyBZb3VuZ2RhbGUKCSogW3VzZXIuY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKCSogW3dpbmUuY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQsIHVwZGF0ZXMgYnkgRXJpYyBZb3VuZ2RhbGUgYW5kCglBbGV4YW5kcmUgSnVsbGlhcmQKCSogW3dpbnRjbC5jXSBPcmlnaW5hbCBieSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEsCgl1cGRhdGVzIGJ5IFBldGVyIE1hY0RvbmFsZCBhbmQgQWxleGFuZHJlIEp1bGxpYXJkCgkqIFtjYWxsYmFjay5oXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAoJKiBbZGxscy5oXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAoJKiBbaGVhcC5oXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAoJKiBbbmVleGUuaF0gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKCSogW3Byb3RvdHlwZXMuaF0gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQsIHVwZGF0ZXMgYnkgCglFcmljIFlvdW5nZGFsZQoJKiBbc2VnbWVtLmhdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0CgkqIFt0a0ludC5oXSBPcmlnaW5hbCBieSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKCSogW3dpbmRvd3MuaF0gT3JpZ2luYWwgYnkgUGV0ZXIgTWFjRG9uYWxkLCB1cGRhdGVzIGJ5IAoJQWxleGFuZHJlIEp1bGxpYXJkIGFuZCBCb2IgQW1zdGFkdAoJKiBbd2luZS5oXSBPcmlnaW5hbCBieSBFcmljIFlvdW5nZGFsZQoJKiBba2VybmVsLnNwZWNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0LCB1cGRhdGVzIGJ5IAoJQWxleGFuZHJlIEp1bGxpYXJkCgkqIFtnZGkuc3BlY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQsIHVwZGF0ZXMgYnkgCglBbGV4YW5kcmUgSnVsbGlhcmQKCSogW3NoZWxsLnNwZWNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0CgkqIFt1bml4bGliLnNwZWNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0CgkqIFt1c2VyLnNwZWNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0LCB1cGRhdGVzIGJ5IEFsZXhhbmRyZSBKdWxsaWFyZAoJKiBbd2luODdlbS5zcGVjXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAoJKiBbV2luZG93cy50Y2xdIE9yaWdpbmFsIGJ5IFBldGVyIE1hY0RvbmFsZCwgdXBkYXRlcyBieSAKCUFsZXhhbmRyZSBKdWxsaWFyZAoJKiBbYnVpbGQtc3BlYy50eHRdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0CgkqIFtpZjE2MzIuU10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQsIHVwZGF0ZXMgYnkgRXJpYyBZb3VuZ2RhbGUK