CQk9PT09PT09PT0gQmludXRpbHMgTWFpbnRhaW5lcnMgPT09PT09PT09CgpUaGlzIGlzIHRoZSBsaXN0IG9mIGluZGl2aWR1YWxzIHJlc3BvbnNpYmxlIGZvciBtYWludGVuYW5jZSBhbmQgdXBkYXRlCm9mIHRoZSBHTlUgQmluYXJ5IFV0aWxpdGllcyBwcm9qZWN0LiAgVGhpcyBpbmNsdWRlcyB0aGUgbGlua2VyIChsZCksCnRoZSBhc3NlbWJsZXIgKGdhcyksIHRoZSBwcm9maWxlciAoZ3Byb2YpLCBhIHdob2xlIHN1aXRlIG9mIG90aGVyCnByb2dyYW1zIChiaW51dGlscykgYW5kIHRoZSBsaWJyYXJpZXMgdGhhdCB0aGV5IHVzZSAoYmZkIGFuZApvcGNvZGVzKS4gIFRoaXMgcHJvamVjdCBzaGFyZXMgYSBjb21tb24gc2V0IG9mIGhlYWRlciBmaWxlcyB3aXRoIHRoZQpHQ0MgYW5kIEdEQiBwcm9qZWN0cyAoaW5jbHVkZSksIHNvIG1haW50YWluZXJzaGlwIG9mIHRob3NlIGZpbGVzIGlzIApzaGFyZWQgYW1vdW5nc3QgdGhlIHByb2plY3RzLgoKVGhlIGhvbWUgcGFnZSBmb3IgYmludXRpbHMgaXM6CgogIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9iaW51dGlscy9iaW51dGlscy5odG1sCgphbmQgcGF0Y2hlcyBzaG91bGQgYmUgc2VudCB0bzoKCiAgYnVnLWJpbnV0aWxzQGdudS5vcmcgICAgb3IgICAgYmludXRpbHNAc291cmNlcy5yZWRoYXQuY29tCiAgCndpdGggIltQYXRjaF0iIGFzIHBhcnQgb2YgdGhlIHN1YmplY3QgbGluZS4gIE5vdGUgLSBwYXRjaGVzIHRvIHRoZQp0b3AgbGV2ZWwgY29uZmlnLmd1ZXNzIGFuZCBjb25maWcuc3ViIHNjcmlwdHMgc2hvdWxkIGJlIHNlbnQgdG86CgogIGNvbmZpZy1wYXRjaGVzQGdudS5vcmcKCmFuZCBub3QgdG8gdGhlIGJpbnV0aWxzIGxpc3RzLiAgUGF0Y2hlcyB0byB0aGUgb3RoZXIgdG9wIGxldmVsCmNvbmZpZ3VyZSBmaWxlcyAoY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGNvbmZpZy1pZiwgY29uZmlnLW1sLmluKQpzaG91bGQgYmUgc2VudCB0byB0aGUgYmludXRpbHMgbGlzdHMsIGFuZCBjb3BpZWQgdG8gdGhlIGdjYyBhbmQgZ2RiCmxpc3RzIGFzIHdlbGwgKGdjYy1wYXRjaGVzQGdjYy5nbnUub3JnIGFuZApnZGItcGF0Y2hlc0Bzb3VyY2VzLnJlZGhhdC5jb20pLgoKCQktLS0tLS0tLS0gQmxhbmtldCBXcml0ZSBQcml2cyAtLS0tLS0tLS0KClRoZSBmb2xsb3dpbmcgcGVvcGxlIGhhdmUgcGVybWlzc2lvbiB0byBjaGVjayBwYXRjaGVzIGludG8gdGhlCnJlcG9zaXRvcnkgd2l0aG91dCBvYnRhaW5pbmcgYXBwcm92YWwgZmlyc3Q6CgkJCiAgTmljayBDbGlmdG9uIDxuaWNrY0ByZWRoYXQuY29tPiAoaGVhZCBtYWludGFpbmVyKQogIFJpY2hhcmQgSGVuZGVyc29uIDxydGhAcmVkaGF0LmNvbT4KICBJYW4gVGF5bG9yIDxpYW5Ad2FzYWJpc3lzdGVtcy5jb20+CiAgSmVmZiBMYXcgPGxhd0ByZWRoYXQuY29tPgogIEppbSBXaWxzb24gPHdpbHNvbkBzcGVjaWZpeGluYy5jb20+CiAgREogRGVsb3JpZSA8ZGpAcmVkaGF0LmNvbT4KICBBbGFuIE1vZHJhIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+CiAgTWljaGFlbCBNZWlzc25lciA8Z251QHRoZS1tZWlzc25lcnMub3JnPgoKICAgICAgLS0tLS0tLS0tIE1haW50YWluZXJzIC0tLS0tLS0tLQoKTWFpbnRhaW5lcnMgYXJlIGluZGl2aWR1YWxzIHdobyBhcmUgcmVzcG9uc2libGUgZm9yLCBhbmQgaGF2ZQpwZXJtaXNzaW9uIHRvIGNoZWNrIGluIGNoYW5nZXMgaW4sIGNlcnRhaW4gc3Vic2V0cyBvZiB0aGUgY29kZS4gIE5vdGUKdGhhdCBtYWludGFpbmVycyBzdGlsbCBuZWVkIGFwcHJvdmFsIHRvIGNoZWNrIGluIGNoYW5nZXMgb3V0c2lkZSBvZgp0aGUgaW1tZWRpYXRlIGRvbWFpbiB0aGF0IHRoZXkgbWFpbnRhaW4uCgpJZiB0aGVyZSBpcyBubyBtYWludGFpbmVyIGZvciBhIGdpdmVuIGRvbWFpbiB0aGVuIHRoZSByZXNwb25zaWJpbGl0eQpmYWxscyB0byB0aGUgaGVhZCBtYWludGFpbmVyIChhYm92ZSkuICBJZiB0aGVyZSBhcmUgc2V2ZXJhbAptYWludGFpbmVycyBmb3IgYSBnaXZlbiBkb21haW4gdGhlbiByZXNwb25zaWJpbGl0eSBmYWxscyB0byB0aGUgZmlyc3QKbWFpbnRhaW5lci4gIFRoZSBmaXJzdCBtYWludGFpbmVyIGlzIGZyZWUgdG8gZGV2b2x2ZSB0aGF0CnJlc3BvbnNpYmlsaXR5IGFtb25nIHRoZSBvdGhlciBtYWludGFpbmVycy4KCiAgQUxQSEEgICAgICAgICAgICBSaWNoYXJkIEhlbmRlcnNvbiA8cnRoQHJlZGhhdC5jb20+CiAgQVJNCQkgICBOaWNrIENsaWZ0b24gPG5pY2tjQHJlZGhhdC5jb20+CiAgQVJNCQkgICBSaWNoYXJkIEVhcm5zaGF3IDxyZWFybnNoYUBhcm0uY29tPgogIEFWUgkJICAgRGVuaXMgQ2hlcnR5a292IDxkZW5pc2NAb3ZlcnRhLnJ1PgogIEFWUgkJICAgTWFyZWsgTWljaGFsa2lld2ljeiA8bWFyZWttQGFtZWxlay5nZGEucGw+CiAgQlVJTEQgU1lTVEVNCSAgIEJlbiBFbGxpc3RvbiA8YmplQGdudS5vcmc+CiAgQlVJTEQgU1lTVEVNCSAgIERhbmllbCBKYWNvYm93aXR6IDxkYW5AZGViaWFuLm9yZz4KICBDUklTCQkgICBIYW5zLVBldGVyIE5pbHNzb24gPGhwQGF4aXMuY29tPgogIERXQVJGMgkgICBKYXNvbiBNZXJyaWxsIDxqYXNvbkByZWRoYXQuY29tPgogIEZSMzAJCSAgIERhdmUgQnJvbGxleSA8YnJvbGxleUByZWRoYXQuY29tPgogIEZSVgkJICAgRGF2ZSBCcm9sbGV5IDxicm9sbGV5QHJlZGhhdC5jb20+CiAgSFBQQQkJICAgRGF2ZSBBbmdsaW4gPGRhdmUuYW5nbGluQG5yYy5jYT4KICBIUFBBIGVsZjMyCSAgIEFsYW4gTW9kcmEgPGFtb2RyYUBiaWdwb25kLm5ldC5hdT4KICBIUFBBIGVsZjY0CSAgIEplZmYgTGF3IDxsYXdAcmVkaGF0LmNvbT4gW0Jhc2ljIG1haW50YWluYW5jZSBvbmx5XQogIElBLTY0CQkgICBKaW0gV2lsc29uIDx3aWxzb25Ac3BlY2lmaXhpbmMuY29tPgogIElRMjAwMAkgICBTdGFuIENveCA8c2NveEByZWRoYXQuY29tPgogIGk4NjAJCSAgIEphc29uIEVja2hhcmR0IDxqbGVAcmljZS5lZHU+CiAgaXg4NgkJICAgQWxhbiBNb2RyYSA8YW1vZHJhQGJpZ3BvbmQubmV0LmF1PgogIGl4ODYgUEUJICAgQ2hyaXN0b3BoZXIgRmF5bG9yIDxjZ2ZAcmVkaGF0LmNvbT4KICBpeDg2IENPRkYJICAgREogRGVsb3JpZSA8ZGpAcmVkaGF0LmNvbT4KICBpeDg2CQkgICBILkouTHUgPGhqbEBnbnUub3JnPgogIGl4ODYgSU5URUwgTU9ERSAgRGllZ28gTm92aWxsbyA8ZG5vdmlsbG9AcmVkaGF0LmNvbT4KICBNNjhIQzExIE02OEhDMTIgIFN0ZXBoYW5lIENhcnJleiA8c3RjYXJyZXpAbmVyaW0uZnI+CiAgTTY4awkJICAgQmVuIEVsbGlzdG9uIDxiamVAZ251Lm9yZz4KICBNSVBTCQkgICBFcmljIENocmlzdG9waGVyIDxlY2hyaXN0b0ByZWRoYXQuY29tPgogIE1JUFMJCSAgIFRoaWVtbyBTZXVmZXIgPHNldWZlckBjc3YuaWNhLnVuaS1zdHV0dGdhcnQuZGU+CiAgTU1JWAkJICAgSGFucy1QZXRlciBOaWxzc29uIDxocEBiaXRyYW5nZS5jb20+CiAgTU4xMDMwMAkgICBFcmljIENocmlzdG9waGVyIDxlY2hyaXN0b0ByZWRoYXQuY29tPgogIE1OMTAzMDAJICAgQWxleGFuZHJlIE9saXZhIDxhb2xpdmFAcmVkaGF0LmNvbT4KICBQUEMJCSAgIEdlb2ZmIEtlYXRpbmcgPGdlb2Zma0BnZW9mZmsub3JnPgogIFBQQyB2ZWN0b3IgZXh0ICAgQWxkeSBIZXJuYW5kZXogPGFsZHloQHJlZGhhdC5jb20+CiAgczM5MCwgczM5MHgJICAgTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPgogIFNICQkgICBK9nJuIFJlbm5lY2tlIDxqb2Vybi5yZW5uZWNrZUBzdXBlcmguY29tPgogIFNICQkgICBBbGV4YW5kcmUgT2xpdmEgPGFvbGl2YUByZWRoYXQuY29tPgogIFNICQkgICBLYXogS29qaW1hIDxra29qaW1hQHJyLmlpajR1Lm9yLmpwPgogIFNQQVJDCQkgICBKYWt1YiBKZWxpbmVrIDxqYWt1YkByZWRoYXQuY29tPgogIFRFU1RTVUlURVMJICAgQmVuIEVsbGlzdG9uIDxiamVAZ251Lm9yZz4KICBUSUM0WCAgICAgICAgICAgIFN2ZWluIFNlbGRhbCA8c3ZlaW4uc2VsZGFsQHNvbGlkYXMuY29tPgogIFRJQzU0WCAgICAgICAgICAgVGltb3RoeSBXYWxsIDx0d2FsbEBhbHVtLm1pdC5lZHU+CiAgVkFYCQkgICBKYXNvbiBSIFRob3JwZSA8dGhvcnBlakB3YXNhYmlzeXN0ZW1zLmNvbT4KICB4ODZfNjQJICAgSmFuIEh1Ymlja2EgPGpoQHN1c2UuY3o+CiAgeDg2XzY0CSAgIEFuZHJlYXMgSmFlZ2VyIDxhakBzdXNlLmRlPgogIFh0ZW5zYQkgICBCb2IgV2lsc29uIDxib2Iud2lsc29uQGFjbS5vcmc+CiAgejhrCQkgICBDaHJpc3RpYW4gR3JvZXNzbGVyIDxjaHJpc0Bncm9lc3NsZXIub3JnPgoKCiAgICAgIC0tLS0tLS0tLSBDR0VOIE1haW50YWluZXJzIC0tLS0tLS0tLS0tLS0KCkNHRU4gaXMgYSB0b29sIGZvciBidWlsZGluZywgYW1vbmdzdCBvdGhlciB0aGluZ3MsIGFzc2VtYmxlcnMsCmRpc2Fzc2VtYmxlcnMgYW5kIHNpbXVsYXRvcnMgZnJvbSBhIHNpbmdsZSBkZXNjcmlwdGlvbiBvZiBhIENQVS4KSXQgY3JlYXRlcyBmaWxlcyBpbiBzZXZlcmFsIG9mIHRoZSBiaW51dGlscyBkaXJlY3RvcmllcywgYnV0IGl0CmlzIG1lbnRpb25lZCBoZXJlIHNpbmNlIHRoZXJlIGlzIGEgc2luZ2xlIGdyb3VwIHRoYXQgbWFpbnRhaW5zCkNHRU4gYW5kIHRoZSBmaWxlcyB0aGF0IGl0IGNyZWF0ZXMuIAoKSWYgeW91IGhhdmUgQ0dFTiByZWxhdGVkIHByb2JsZW1zIHlvdSBjYW4gc2VuZCBlbWFpbCB0bzsKCiAgIGNnZW5Ac291cmNlcy5yZWRoYXQuY29tCgpUaGUgY3VycmVudCBDR0VOIG1haW50YWluZXJzIGFyZToKCiAgRG91ZyBFdmFucywgQmVuIEVsbGlzdG9uLCBGcmFuayBFaWdsZXIKCiAgICAgLS0tLS0tLS0tIFdyaXRlIEFmdGVyIEFwcHJvdmFsIC0tLS0tLS0tLQoKSW5kaXZpZHVhbHMgd2l0aCAid3JpdGUgYWZ0ZXIgYXBwcm92YWwiIGhhdmUgdGhlIGFiaWxpdHkgdG8gY2hlY2sgaW4KY2hhbmdlcywgYnV0IHRoZXkgbXVzdCBnZXQgYXBwcm92YWwgZm9yIGVhY2ggY2hhbmdlIGZyb20gc29tZW9uZSBpbgpvbmUgb2YgdGhlIGFib3ZlIGxpc3RzIChibGFua2V0IHdyaXRlIG9yIG1haW50YWluZXJzKS4KCltJdCdzIGEgaHVnZSBsaXN0LCBmb2xrcy4gIFlvdSBrbm93IHdobyB5b3UgYXJlLiAgSWYgeW91IGhhdmUgdGhlCiAqYWJpbGl0eSogdG8gZG8gYmludXRpbHMgY2hlY2tpbnMsIHlvdSdyZSBpbiB0aGlzIGdyb3VwLiAgSnVzdAogcmVtZW1iZXIgdG8gZ2V0IGFwcHJvdmFsIGJlZm9yZSBjaGVja2luZyBhbnl0aGluZyBpbi5dCgogICAgIC0tLS0tLS0tLS0tLS0gIE9idmlvdXMgRml4ZXMgLS0tLS0tLS0tLS0tLQoKRml4ZXMgZm9yIG9idmlvdXMgbWlzdGFrZXMgZG8gbm90IG5lZWQgYXBwcm92YWwsIGFuZCBjYW4gYmUgY2hlY2tlZCBpbgpyaWdodCBhd2F5LCBidXQgdGhlIHBhdGNoIHNob3VsZCBzdGlsbCBiZSBzZW50IHRvIHRoZSBiaW51dGlscyBsaXN0LgpUaGUgZGVmaW5pdGlvbiBvZiBvYnZpb3VzIGlzIGEgYml0IGhhenksIGFuZCBpZiB5b3UgYXJlIG5vdCBzdXJlLCB0aGVuCnlvdSBzaG91bGQgc2VlayBhcHByb3ZhbCBmaXJzdC4gIE9idmlvdXMgZml4ZXMgaW5jbHVkZSBmaXhlcyBmb3IKc3BlbGxpbmcgbWlzdGFrZXMsIGJsYXRhbnRseSBpbmNvcnJlY3QgY29kZSAod2hlcmUgdGhlIGNvcnJlY3QgY29kZSBpcwphbHNvIGJsYXRhbnRseSBvYnZpb3VzKSwgYW5kIHNvIG9uLiAgT2J2aW91cyBmaXhlcyBzaG91bGQgYWx3YXlzIGJlCnNtYWxsLCB0aGUgbGFyZ2VyIHRoZXkgYXJlLCB0aGUgbW9yZSBsaWtlbHkgaXQgaXMgdGhhdCB0aGV5IGNvbnRhaW4Kc29tZSB1bi1vYnZpb3VzIHNpZGUgZWZmZWN0IG9yIGNvbnNlcXVlbmNlLgoKICAgIC0tLS0tLS0tLSBCcmFuY2ggQ2hlY2tpbnMgLS0tLS0tLS0tCgpJZiBhIHBhdGNoIGlzIGFwcHJvdmVkIGZvciBjaGVjayBpbiB0byB0aGUgbWFpbmxpbmUgc291cmNlcywgaXQgY2FuCmFsc28gYmUgY2hlY2tlZCBpbnRvIHRoZSBjdXJyZW50IHJlbGVhc2UgYnJhbmNoLiAgTm9ybWFsbHkgaG93ZXZlcgpvbmx5IGJ1ZyBmaXhlcyBzaG91bGQgYmUgYXBwbGllZCB0byB0aGUgYnJhbmNoLiAgTmV3IGZlYXR1cmVzLCBuZXcKcG9ydHMsIGV0Yywgc2hvdWxkIGJlIHJlc3RyaWN0ZWQgdG8gdGhlIG1haW5saW5lLiAgKE90aGVyd2lzZSB0aGUKYnVyZGVuIG9mIG1haW50YWluaW5nIHRoZSBicmFuY2ggaW4gc3luYyB3aXRoIHRoZSBtYWlubGluZSBiZWNvbWVzIHRvbyAKZ3JlYXQpLiAgSWYgeW91IGFyZSB1bmNlcnRhaW4gYXMgdG8gd2hldGhlciBhIHBhdGNoIGlzIGFwcHJvcHJpYXRlIGZvcgp0aGUgYnJhbmNoLCBhc2sgdGhlIGJyYW5jaCBtYWludGFpbmVyLiAgVGhpcyBpczoKCiAgIERhbmllbCBKYWNvYm93aXR6ICA8ZGFuQGRlYmlhbi5vcmc+CgogICAgLS0tLS0tLS0gVGVzdHN1aXRlcyAtLS0tLS0tLS0tLS0tLS0KCkluIGdlbmVyYWwgcGF0Y2hlcyB0byBhbnkgb2YgdGhlIGJpbnV0aWxzIHRlc3RzdWl0ZXMgc2hvdWxkIGJlCmNvbnNpZGVyZWQgZ2VuZXJpYyBhbmQgc2VudCB0byB0aGUgYmludXRpbHMgbWFpbGluZyBsaXN0IGZvcgphcHByb3ZhbC4gIFBhdGNoZXMgdG8gdGFyZ2V0IHNwZWNpZmljIHRlc3RzIGFyZSB0aGUgcmVzcG9uc2liaWxpdHkgdGhlCnJlbGV2ZW50IHBvcnQgbWFpbnRhaW5lcihzKSwgYW5kIGNhbiBiZSBhcHByb3ZlZC9jaGVja2VkIGluIGJ5IHRoZW0uCk90aGVyIHRlc3RzdWl0ZSBwYXRjaGVzIG5lZWQgdGhlIGFwcHJvdmFsIG9mIGEgYmxhbmtldC13cml0ZS1wcml2ZWxlZ2VzCnBlcnNvbi4KCiAgICAtLS0tLS0tLSBDb25maWd1cmUgcGF0Y2hlcyAtLS0tLS0tLS0tCgpQYXRjaGVzIHRvIHRoZSB0b3AgbGV2ZWwgY29uZmlndXJlIGZpbGVzIChjb25maWcuc3ViICYgY29uZmlnLmd1ZXNzKQphcmUgbm90IHRoZSBkb21haW4gb2YgdGhlIGJpbnV0aWxzIHByb2plY3QgYW5kIHRoZXkgY2Fubm90IGJlIGFwcHJvdmVkCmJ5IHRoZSBiaW51dGlscyBncm91cC4gIEluc3RlYWQgdGhleSBzaG91bGQgYmUgc3VibWl0dGVkIHRvIHRoZSBjb25maWcKbWFpbnRhaW5lciBhdDoKCgljb25maWctcGF0Y2hlc0BnbnUub3JnCg==